Commit Graph

37 Commits

Author SHA1 Message Date
a2ca0bf3b1 Catch exceptions and show an error dialog to the user 2014-04-14 15:51:27 -04:00
8a6d222083 Re-indent main() 2014-04-14 15:51:26 -04:00
672d4b88d0 Address major lag issues
- Now waits for events instead of busy polling
- Changes the cursor on receiving a mouse move rather than before checking for an event
- Make cursor sword when it's out of window
- Temporarily disable unseen mask as it didn't work properly and was the main cause of the lag
- Don't reset text bar on every loop
2014-04-14 13:55:49 -04:00
0087731ddb Fix crash when quitting the game 2014-04-14 13:55:49 -04:00
c413d292a9 Tear out most of the legacy code in the game - see below for details
(PC Editor and Scenario Editor are unaffected by this commit.)

Things removed:
- All references to Carbon and QuickDraw are gone.
- No more Resource Manager; the game no longer relies on old resource files at all
- The old dialog framework (from dlogtool.c, functions usually prefixed with cd_) is no longer used.
- Files that weren't being compiled
- Boost libraries that are now in the C++ library (function, shared_ptr)
- Obsolete build settings

Replacement dependencies:
- Boost Filesystem replaces references to things like FSSpec
- SFML replaces all the QuickDraw code and most window management
- Cocoa replaces AppleEvent management, menu management, and some window management
- I wrote a resource manager interface to mimick the important aspects of the behaviour of the Mac Resource Manager
- I had to rewrite some functions that QuickDraw provided natively, such as clipping regions; not all of these are tested

Things added:
- Every referenced dialog has been converted from a DITL resource into the new XML-based dialog format.
- All referenced STR# resources have been extracted into simple text files
- Now compiles against Mac OSX 10.7 SDK and libc++
- The first item in the Help menu opens the docs on Sylae's website
- It seems all the constants for soundtool vanished somewhere, so I added them back from the original Mac source

Other changes:
- Updated to XCode 4(?) project format
- Added the xcschemes created by XCode 4; I'm not sure how important these are, but they seem like they might be important
- Added document on converting dialogs to the XML format.
- Make string formatting mismatches into errors instead of warnings
- Disable error limit
- Graphics sheets that previously used masking now have alpha transparency
- Converted all graphics sheets to 8-bit PNG
- Trimmed white border from intro image
- Converted dialogs in the resource file have their resource name set to the name of the XML file of the converted version
- Referenced string resources in the resource file have their resource name set to the name of the text file of the extracted version
- Add the black-and-white patterns from the PAT resources to the pixpats.png; at least one of them is used somewhere in the game
- Recreated the menu.xib as a Cocoa xib file instead of a Carbon xib file
- Disable GNU C++ extensions; maybe this'll make it easier to compile with cl.exe later
- Add marks to the enormous handle_action function to make it easier to navigate\
- A build step to validate the XML dialogs using xmllint (doesn't quite work properly yet but does at least catch dialogs that are not well-formed)- Fix a lot of warnings about assigning string constants to non-const char pointers
- Fixed the file and application icons (which had somehow become corrupted at some point)
- Lots of additional functions in the custom location and rectangle classes, including implicit conversion to and from SFML rects and vectors; also they now store coordinates as int instead of char
- A new enum for encounter note types
- Much tweaking of the encounter note recording mechanisms
- To ease porting, I added a simple function that converts from classic Mac ticks (about 1/60 of a second) to the SFML time type
- Python script to convert STR# resources to txt files, replacing newlines with vertical bars
- Extracted the Mac font (Dungeon Bold) from the resource file and also added the Windows font (MaidenWord)

XML Dialog Framework changes:
- Remove the static initialization object in favour of manually calling cDialog::init()
- {set,get}Format() no longer used for colour; there's a dedicated {set,get}Colour() instead
- draw() methods unprotected in the control classes so that controls can be drawn in the main window
- There's no longer a friend relationship between the dialogs and the controls
- Fixed buttons duplicating the "depressed" boolean
- Buttons now properly offset the label for tiny and push buttons, and for LEDs
- Buttons no longer assume that either none or both of "width" and "height" are given in the XML
- Add {get,set}BtnType() to cButton
- cLedGroup now overrides handleClick(), which has also been made virtual; this was necessary for LEDs within a group to properly hilite while being clicked
- Add addChoice() to cLedGroup to insert additional LED choices
- Moved the key enums and cKey to a separate file
- Add a method to get a control's attached key
- Add methods to get and set a control's rect and position
- Controls can now directly take a window as a parent rather than a dialog
- Add addLabelFor() method to cDialog which adds a static text control as a label for another control
- Remove hack for storing a dialog result of arbitrary type in favour of boost::any
- Add method to get default text colour for a dialog
- Add method to get a dialog's rect
- Add method to add the same event handler to multiple controls in a dialog
- Add concept of default button to dialogs
- Add enum for text field type (currently either number or text)
- Implement the text field without use of native controls, including somewhat decent text input and a flashing insertion point
- cPict no longer stores references to every sheet; it fetches them as needed from the resource manager
- The many draw functions in cPict are no longer static, since they need to access the window containing the pict (before they could only be static due to QuickDraw's global state)
- Add setPict() without a type argument to change the graphic without changing the type, which is a common operation
- Add a scrollbar control; the specifics aren't implemented yet
- Change signature of the record callback for cStrDlog; it will no longer be passed the strings
- Publicize the no-button constructor of cChoiceDlog; it'll assume "okay" is the only button
- Add operator-> to cPictChoice for accessing the underlying dialog
- Add constructor to cPictChoice that takes a starting and ending pic num
- Remove err parameter from giveError
- Many more keys handled, plus support for catching copy, paste, cut, and select all keyboard shortcuts
- Text input fields take priority, overriding any other keyboard shortcuts in the dialog, but they never catch help (F1), escape, or enter
- Some changes to the format itself:
-> keys go in the "def-key" attribute, but modifiers go in "key-mod"
-> "clickable" is no longer a recognized attribute
-> "title" is now a recognized text size (18pt, even larger than "large" at 12pt)
-> "defbtn" attribute on the root element
2014-04-14 13:52:01 -04:00
372a275608 - Fixed the Reunite and Leave Town debug option
- Removed the cartoon_happening code
- Added a MODE_CUTSCENE for possible future use


git-svn-id: http://openexile.googlecode.com/svn/trunk@102 4ebdad44-0ea0-11de-aab3-ff745001d230
2009-06-29 02:33:39 +00:00
b90130c425 The extended debug mode is now fully implemented, though it may be slightly different than the Windows version's debug mode.
I also added a ghost mode (shift-G) which allows you to pass through walls.

In the Windows code, I added three small things:
- the "&*()" Easter egg
- typing ? should now give shopping and talking help as well
- the Return to Start debug option shouldn't work when you're on a horse

git-svn-id: http://openexile.googlecode.com/svn/trunk@101 4ebdad44-0ea0-11de-aab3-ff745001d230
2009-06-28 20:05:31 +00:00
6af129c277 - Nuked the storage_gworld and party_template_gworld. Monster, terrain, and PC graphics are now drawn directly from their sheets of origin. This is partly tested, and seems to work fine.
- Removed the terrain_pic and terrain_blockage arrays, which were redundant (though shorter).
- Cleaned out some of the commented code in boe.graphics.cpp and boe.graphutil.cpp
- Added a templated get function to cOutdoors::cWandering.
In the dialog engine:
- Important fields are now initialized to default values, as they should be.
- The absence of required attributes is now recognized as an error
- Added stack element to the DTD; no code support yet
- Added fore attribute to the dialog element to specify default text colour; DTD updated and code support added.
- Likewise with the def-key attribute on other clickable items besides buttons (which already had it)
- Updated stylesheet to fall back on the fore attribute when colour is unspecified
- When drawing default monster graphics, it uses m_start_pic instead of num as the index. This should be right, though it's untested.
Unfortunately, the dialog engine is still unstable.

git-svn-id: http://openexile.googlecode.com/svn/trunk@100 4ebdad44-0ea0-11de-aab3-ff745001d230
2009-06-28 17:18:24 +00:00
269d6b0572 - Removed the SLEEP_TICKS and MOUSE_REGION macros (note: SLEEP_TICKS was at 2L, but I've changed it to 0; I think this should be fine, but I'm not sure)
- Stripped out the copying of external files (such as graphics, scenarios, bladbase) into a separate target which the other three are dependent on.
- Graphics.exd no longer included by reference; now the individual files are included directly.
- Added a recalcRect function to ledGroup, since it's a container.
- Added a special case to cLedGroup::setSelected to avoid a crash when no LED is initially selected.
- Added a few initializers to constructors.
- Changes to cDialog::parse<cPict> which were intended to prevent an access violation; unfortunately it doesn't work yet.
- Add cases to cDialog::parse<cPict> to handle PI_TER_MAP and PIC_STATUS.
- Fixed a stupid error in all specializations of cDialog::parse which resulted in an infinite loop.
- Fixed errors in some specializations of cDialog::parse in which an else statement belonged to a different if than it should have.
- Added code to cDialog::loadFromFile to turn the relative path in the argument into an absolute path.
- Fixed errors in cDialog::loadFromFile relating to incorrect use of the parser.
- Added exit statements to the catch clauses in cDialog::loadFromFile.
- Added definition of cDialog::init;
- Enclosed the WaitNextEvent call in cDialog::run in an if statement to ignore null events if they occur (I suspect they won't anyway though)
- Fixed errors in the Edit Terrain dialog definition which caused an exception to be thrown when parsing it: bold was changed to silom, key= was changed to def-key=
- Added status to the list of nullified GWorlPtrs in cPict::init.
- Changed the type of cPict::drawPict from map<ePicType,void(*)(short,GWorldPtr,Rect)> to void(*[])(short,GWorldPtr,Rect) - ie, it was changed from a map to an array because the map was causing an error for some reason.
- Fixed up the load_strings function, which didn't work at all due to a stupid logic error.

git-svn-id: http://openexile.googlecode.com/svn/trunk@96 4ebdad44-0ea0-11de-aab3-ff745001d230
2009-06-16 22:43:51 +00:00
5001931033 - Split rect_draw_some_item into two versions, one to draw to the screen and on to draw to a GWorld.
- Temporary fix for the fact that PC #6 is often accessed.
- I think that's all...

git-svn-id: http://openexile.googlecode.com/svn/trunk@94 4ebdad44-0ea0-11de-aab3-ff745001d230
2009-06-11 22:07:17 +00:00
7cd4a618b4 - Got rid of the prefix header in favour of directly including it in every file that needs it (though some files still need the include yet apparently work fine; perhaps a clean build would catch that)
- Replaced all occurrences of FillCRect with the new tileImage, to get away from 'ppat' resources.
- Fixed a minor error in the character editor where part of a text string was off the window.
- With the prefix header gone, libticpp.dylib has been removed; TinyXML++ is now compiled right into the program.
- The scenario editor splash screen is now loaded from a file.
- The pc editor title has its transparency problem fixed.
- Added an overload of tileImage that takes a RgnHandle instead of a Rect in order to replace the single occurrence of FillCRgn.
- Removed an unused function in boe.graphics.cpp
- Changed loading of patterns. Instead of loading each pattern individually from a resource, a single file containing all of them is loading. The arrays that formerly contained the actual patterns now contain the source rects of the patterns.
- Fixed the cursor hotspots (the coordinates were reversed)
- Removed the useless flip_pict that was written when I didn't know what I was doing.
- Fixed error in tileImage in which vrep and hrep were switched.
- Added code to tileImage to ensure that the pattern will line up with anything already onscreen, regardless of the rect to fill.
- Two images were altered: pcedtitle.png to fix the transparenct problem, and pixpats.png to add one pattern that had been missed (and also rearrange the smaller patterns a little)

git-svn-id: http://openexile.googlecode.com/svn/trunk@91 4ebdad44-0ea0-11de-aab3-ff745001d230
2009-06-10 04:01:15 +00:00
78cd213972 In no particular order:
- Added some of the most basic dialogs
- Changed C-style <xxx.h> headers to C++-style <cxxx> headers
- Switched graphics to load from the PNG files in graphics.exd rather than from Blades of Exile Graphics (NOTE: Some graphics still don't work, probably because of incorrect source rects)
- Switched cursors to load from GIF files in graphics.exd rather than from Blades of Exile Graphics
- Moved Niemand's tileImage functions from boe.graphics.cpp to graphtool.cpp, so they can be used by all three programs.
- Added some string lists in .txt files
- Made cursors into an enum
- Rewrote the code for displaying the Edit Terrain dialog to use the new engine (not tested yet)
- Fixed some __attribute__((deprecated)) stuff
- Most graphics are now loaded just after the custom graphics. This means they will be overridden by a file of the same name in the scenario's .exr folder.
- Altered modes a little so that when at the startup screen you are in MODE_STARTUP rather than MODE_OUTDOORS.
- Switched from function pointers to boost::function – the Boost libraries are now required.
- Finished off the new dialog engine and made gess necessary
- Added status icons as another type that can be drawn in dialogs
- C Wrappers for Cocoa cursors based on an Apple example. This is tested, and works perfectly.
- Added a switch in the program for using Windows graphics; however, there is no way as yet to set this flag, and in fact there aren't even any Windows graphics to use.
- Added include guards to graphtool.h
- Made separate mac and win directories within sounds.exa, since the Mac and Windows sounds are mostly subtly different (with two completely different!)

git-svn-id: http://openexile.googlecode.com/svn/trunk@90 4ebdad44-0ea0-11de-aab3-ff745001d230
2009-06-07 18:18:24 +00:00
c55948c03f - Removed the ADVEN macro in favour of using the overloaded operatr[] on univ.party
- Removed all referenes to cPopulation::dudes in favour of the overloaded operator[]

git-svn-id: http://openexile.googlecode.com/svn/trunk@84 4ebdad44-0ea0-11de-aab3-ff745001d230
2009-05-30 23:11:47 +00:00
eeaa9ca599 Added some typedefs for clarity, and also added a cAttack class.
git-svn-id: http://openexile.googlecode.com/svn/trunk@77 4ebdad44-0ea0-11de-aab3-ff745001d230
2009-05-28 23:48:10 +00:00
6ef3b7c79d Nuked all occurrences of NIL, replacing them with NULL.
git-svn-id: http://openexile.googlecode.com/svn/trunk@72 4ebdad44-0ea0-11de-aab3-ff745001d230
2009-05-25 03:51:29 +00:00
d83db289fa - Added code to check for waterfalls in all 8 cardinal directions
- Fixed bug in which swamp caused a false negative for the wall-rounding code
- Made directions into an enum, with an operator++ and two difference arrays (for x and y).
- Added case to wall-rounding code to handle a lone pillar of wall
- The block_horse flag is cleared when importing a poison or disease terrain, because horses can now not cross status-inflicting terrain at all.
- Added the book Finder icon

git-svn-id: http://openexile.googlecode.com/svn/trunk@64 4ebdad44-0ea0-11de-aab3-ff745001d230
2009-05-22 03:51:34 +00:00
Niemand
f198b4899d Added include guards to all class headers.
Removed unnecessary or potentially harmful compiler flags. 
Added alignment attribute to all old struct members. 
Removed some unused variables. 
Made some switch statements handle all or more cases. 
Removed using declarations in favor of fully qualified names. 
Fixed a couple of assignments in conditionals that should have been comparisons. 
Eliminated linker warnings by restoring default linking of standard libraries. 
Fixed some comparisons between signed and unsigned integers. 

Note: No testing has been done, in particular of old file I/O. This should be checked for regression caused by alteration of old struct definitions. 


git-svn-id: http://openexile.googlecode.com/svn/trunk@63 4ebdad44-0ea0-11de-aab3-ff745001d230
2009-05-22 03:01:05 +00:00
bf1487114a - Implemented new-style frill drawing using masking (untested)
- Re-implemented walkway drawing in the same way
- Tried to fix an STL error
- A few other thing, maybe?

git-svn-id: http://openexile.googlecode.com/svn/trunk@60 4ebdad44-0ea0-11de-aab3-ff745001d230
2009-05-18 11:16:46 +00:00
28f4368651 Numerous changes to terrain and trim. The changes to the scneario editor work as expected.
- New way of drawing walkway (doesn't work yet)
- New way of drawing roads (doesn't yet work correctly)
- New way of drawing trim (not tested yet)
- New way of handling marked specials (works in editor but not in game)
- New way of handling two-space rubble in the editor (works as expected)
- Merged several terrain special properties
- Deprecated several terrain graphics
- Completed (probably) the import & convert code for old-format terrain
- Probably other things that I have forgotten that have something to do with terrain
- A few other little things, bugfixes, etc

git-svn-id: http://openexile.googlecode.com/svn/trunk@56 4ebdad44-0ea0-11de-aab3-ff745001d230
2009-05-09 14:11:39 +00:00
4dc75d51c0 - Merged two classes (cPopulation::cCreature and cTown::cCreature)
- Changes some C-strings to STL-strings
- Fixed the problem where the spiderweb logo would not fully appear if ShowStartupSplash is disabled

git-svn-id: http://openexile.googlecode.com/svn/trunk@54 4ebdad44-0ea0-11de-aab3-ff745001d230
2009-05-07 02:50:16 +00:00
f8701fdaff Tried in vain to get the game to write to a savefile in the newly created save format.
git-svn-id: http://openexile.googlecode.com/svn/trunk@52 4ebdad44-0ea0-11de-aab3-ff745001d230
2009-05-06 19:49:07 +00:00
388cb04602 - Fixed the bug that prevented launching from the Finder
- Wrote almost all the code for saving and loading a new-format party file, plus code to recognize the format of a file.
(Windows saves should also be supported now)

git-svn-id: http://openexile.googlecode.com/svn/trunk@50 4ebdad44-0ea0-11de-aab3-ff745001d230
2009-05-04 20:10:12 +00:00
1cbb12e1b8 - Fixed more major bugs, both in game and scenario editor.
- Removed all remnants of the password code (I think).
- The game is now almost ready for beta.

git-svn-id: http://openexile.googlecode.com/svn/trunk@49 4ebdad44-0ea0-11de-aab3-ff745001d230
2009-05-02 20:25:13 +00:00
de3d2f78f5 Mostly various small changes toward fixing some of the major bugs
git-svn-id: http://openexile.googlecode.com/svn/trunk@47 4ebdad44-0ea0-11de-aab3-ff745001d230
2009-05-01 04:03:41 +00:00
27b95287bc Fixed a few errors from the previous revision, and nuked some of the compiler errors.
git-svn-id: http://openexile.googlecode.com/svn/trunk@46 4ebdad44-0ea0-11de-aab3-ff745001d230
2009-04-30 04:21:24 +00:00
82578b77f1 - Reverted change that allowed "Heal Target" missiles to heal PCs (defeats the purpose of such items as a curse)
- Fixed a few bugs that caused crashes.
- Made the code look a little nicer by eliminating the "town.town" redundancies.
- Fiddled with ViewDlog a little.
- Minor changes to graphics file (won't affect anything yet).

git-svn-id: http://openexile.googlecode.com/svn/trunk@44 4ebdad44-0ea0-11de-aab3-ff745001d230
2009-04-29 04:57:53 +00:00
e0115dd668 - Added a setting to skip delay when showing damage to the whole party. It's a hidden preference at the moment, like skip startup splash.
- Replaced all instances of Boolean with bool, TRUE with true, FALSE with false. (Except for a few cases where this resulted in a compile error.)

git-svn-id: http://openexile.googlecode.com/svn/trunk@38 4ebdad44-0ea0-11de-aab3-ff745001d230
2009-04-27 19:41:06 +00:00
74ec4c67b5 Fixed several bugs, including one where dialogs were not redrawn properly and one where random numbers were not in the expected range.
git-svn-id: http://openexile.googlecode.com/svn/trunk@36 4ebdad44-0ea0-11de-aab3-ff745001d230
2009-04-27 13:14:24 +00:00
440eb5a765 Starting to turn the constants in boe.consts.h into enums. So far the overall mode and the player main status have been changed.
Also tried in vain to fix the problem with controls not being drawn.

git-svn-id: http://openexile.googlecode.com/svn/trunk@34 4ebdad44-0ea0-11de-aab3-ff745001d230
2009-04-26 22:30:53 +00:00
fcda358c5e - Fixed bug in which the last missile in a stack would sometimes fail to fire
- Fixed bug in which a missile was lost even if you failed to fire do to line-of-sight or range problems.
- Fixed bug in which an exploding missile could be targeted anywhere on the screen (though I'm not 100% sure this actually is a bug).
- Fixed bug in which some of the room description rectangles would be ignored by the game.
- Fixed bug whereby percentage chance checks would generate a number from 0 to 100 instead of 1 to 100.
- Fixed bug where if a Damage node was triggered in combat without first selecting a PC, it would affect the whole party instead of just the active character.

git-svn-id: http://openexile.googlecode.com/svn/trunk@33 4ebdad44-0ea0-11de-aab3-ff745001d230
2009-04-26 01:57:25 +00:00
d3be0c107e Both the game and the scenario editor now properly load a scenario.
This means that the game can in fact be played – though saving is not currently operational.

git-svn-id: http://openexile.googlecode.com/svn/trunk@32 4ebdad44-0ea0-11de-aab3-ff745001d230
2009-04-25 22:50:58 +00:00
3ba7021543 More refactoring. The code is ALMOST able to compile now – all three programs together give a mere 25 errors.
git-svn-id: http://openexile.googlecode.com/svn/trunk@31 4ebdad44-0ea0-11de-aab3-ff745001d230
2009-04-25 05:12:14 +00:00
fad42597a6 - Fixed up file loading (but then broke it again)
- Reworked preferences to use plist
- Cleaned out the shareware code
- More tweaks to the dialog engine
- Edited dialog #869 (the choose prefab scenario dialog) to use new invisible button (type 6) and to remove the "Must be registered" lines.
- Tweaked window size so that the startup screen fits within it.
- More major refactoring work.
- A few additions/alterations to boe.consts.h

Current status:
- Scenario editor: compiles and runs, but can't load a scenario
- Character editor: don't know
- Game: Doesn't even compile
I wouldn't normally submit code that doesn't compile, but I have already made a lot of major changes in this revision.
I will submit a version that compiles as soon as possible.

git-svn-id: http://openexile.googlecode.com/svn/trunk@28 4ebdad44-0ea0-11de-aab3-ff745001d230
2009-04-23 20:53:49 +00:00
a2c2a85a8e - Fixed some bugs in the dialog code.
- Dialogs in the scenario editor now show custom graphics.
- Scenario editor now works properly as a Universal binary.
- Started refactoring the structs into classes; so far this has only been applied to the game.
- Files now show proper icons (applications already did).
- Probably other things that I have forgotten.

Still not completely stable, but much closer.

git-svn-id: http://openexile.googlecode.com/svn/trunk@27 4ebdad44-0ea0-11de-aab3-ff745001d230
2009-04-21 20:02:07 +00:00
7573c1ed98 - Fixed some bugs and inconsistencies in the dialog code
- Started a utility to quickly preview a dialog
- Moved the ppats from the individual applications into the Graphics file; reduces redudancy

git-svn-id: http://openexile.googlecode.com/svn/trunk@26 4ebdad44-0ea0-11de-aab3-ff745001d230
2009-04-20 16:20:34 +00:00
457bbe3e85 Fixed the bug where dialog controls were not drawn.
git-svn-id: http://openexile.googlecode.com/svn/trunk@25 4ebdad44-0ea0-11de-aab3-ff745001d230
2009-04-19 17:48:22 +00:00
0794231c20 - Renamed all source files for better consistency and for a cpp extension.
- Added Bandit Busywork and the GPL license.

git-svn-id: http://openexile.googlecode.com/svn/trunk@23 4ebdad44-0ea0-11de-aab3-ff745001d230
2009-04-19 14:25:48 +00:00