220 Commits

Author SHA1 Message Date
Denis Kasak
6ed99df75a Removed some garbage I accidentally pasted into a comment.
svn-id: r42909
2009-07-29 20:42:55 +00:00
Denis Kasak
ad752b268b * Removed some code I forgot to remove in Game::startPlay() (a call to AnimationManager::play())
* Fixed logic checking for object visibility in various GPL commands (I originally misinterpreted the original engine code).

svn-id: r42908
2009-07-29 20:41:53 +00:00
Denis Kasak
a2cc4a6479 Explicitly set the kDragonObject enum constant value for clarity.
svn-id: r42906
2009-07-29 20:35:41 +00:00
Denis Kasak
393cd99a62 * Implemented the StartPlay and Play GPL commands properly
* Changed Script::load() to use the new animation callbacks

svn-id: r42902
2009-07-29 19:41:30 +00:00
Denis Kasak
f42894c33c Added support for animation callbacks and implemented a few callbacks (doNothing, exitGameLoop, stopAnimation).
svn-id: r42901
2009-07-29 19:39:10 +00:00
Denis Kasak
07042e31bc * Made Game::loop() exit conditionally depending on whether the internal Game::_shouldExitLoop variable is set.
* Added mechanisms for signalling whether the main game loop should exit or not (Game::setExitLoop() and Game::shouldExitLoop())

svn-id: r42899
2009-07-29 19:38:02 +00:00
Denis Kasak
bc89ce23d3 Fixed text bugs related to the fact that some strings in the data files don't end with '|' like they should.
svn-id: r42897
2009-07-29 16:39:12 +00:00
Denis Kasak
e9669b8e2b * Moved event handling to DraciEngine::handleEvents()
* Added Game::start() method which is called from DraciEngine::go()
* Made Game::loop() suitable for calling from other places (like GPL scripts) by handling events, redrawing the screen, etc from inside. This way it doesn't freeze the game if it doesn't return immediately.
* Added Game::shouldQuit() and Game::setQuit() which can be used to signal the engine to quit.
* Fixed race condition related to mouse buttons not getting released.
* Instead of deleting frames for the title animation and adding a new one, reset the text for its frame.

svn-id: r42875
2009-07-29 01:11:53 +00:00
Denis Kasak
dd9303d27e * Implemented GPL function ActPhase (as Script::funcActPhase())
* Trivial implementation of the Play GPL command
* Fixed Script::load() to load animation IDs to objects in increasing order (needed by funcActPhase())

svn-id: r42874
2009-07-29 01:02:50 +00:00
Denis Kasak
33af83c650 * Added method Animation::currentFrameNum()
* Renamed Animation::getFramesNum() to Animation::getFrameCount() for clarity.

svn-id: r42873
2009-07-29 00:46:36 +00:00
Denis Kasak
5a44af4433 Enabled running of look/use scripts on left/right mouse button press for testing (Warning: unstable in some places).
svn-id: r42841
2009-07-27 05:34:22 +00:00
Denis Kasak
21a22f7f77 Added methods to Mouse for setting the state of the button.
svn-id: r42840
2009-07-27 05:30:58 +00:00
Denis Kasak
019b7f310b * Added Game::getObjectWithAnimation() which finds the object that owns an animation with a certain ID
* Made GameObjects track their titles as Strings rather than byte *
* Made the engine display the title of the object under the cursor (added a special animation ID for that, kTitleText)

svn-id: r42839
2009-07-27 04:51:34 +00:00
Denis Kasak
0098084969 Fixed one more bug related to animations having no frames.
svn-id: r42838
2009-07-27 04:47:38 +00:00
Denis Kasak
aa6efa33f1 Fixed segfault when the screen is deleted before animations (the Animation destructor still needs to use the screen).
svn-id: r42837
2009-07-27 04:20:27 +00:00
Denis Kasak
673bae4443 * Added AnimationManager::addText() for adding text animations
* Added AnimationManager::getTopAnimationID(x, y) which returns the ID of the top layer animation located on a point
* Added Animation::getScale{X,Y}()
* Fixed a few bugs related to animations sometimes having no frames

svn-id: r42836
2009-07-27 04:18:44 +00:00
Denis Kasak
fa59e4b16b * Added Sprite::getPixel() (takes into account whether a sprite is mirrored or scaled)
* Made the Text class internally store a Common::String instead of a byte *

svn-id: r42835
2009-07-27 04:14:59 +00:00
Denis Kasak
ddf8f1cbb5 * Removed unused variable
* Fixed unsigned to signed comparison warning

svn-id: r42834
2009-07-27 03:57:43 +00:00
Denis Kasak
b14828c4ce * Added Font::getStringHeight()
* Made Font::getStringWidth() calculate the width of the string properly now that handling of multi-row strings is in
* Fixed bug which caused the last column of pixels in the last letter of a string to linger on the screen

svn-id: r42832
2009-07-27 03:08:19 +00:00
Denis Kasak
2525ec46de * Removed friend declarations in Drawable for Sprite and Text, and made Drawable's private members protected so they can access them
* Added Text::drawScaled() and altered Text::getRect() so Text instances can be accessed through a Drawable pointer. Scaling text is planned for later because it's not essential.

svn-id: r42789
2009-07-26 00:04:12 +00:00
Denis Kasak
3f571c7eae Handled the '|' char correctly when drawing text (it serves as both a newline and end-of-string marker).
svn-id: r42788
2009-07-25 23:43:21 +00:00
Denis Kasak
20a744bdd2 Simplified rectangle height and width calculation in Sprite::drawScaled() (use methods of Common::Rect instead of doing it manually).
svn-id: r42779
2009-07-25 18:33:20 +00:00
Denis Kasak
6970e178dc Replaced magic constant with enum kWalkingMapOverlay.
svn-id: r42778
2009-07-25 18:29:43 +00:00
Denis Kasak
20baaf93f5 * Moved walking code to Game::walkHero().
* Implemented WalkOn GPL command.
* Temporarily remaped StayOn and WalkOnPlay to WalkOn (for testing).

svn-id: r42735
2009-07-25 04:36:43 +00:00
Denis Kasak
22c372137f Added Movement enum that enumerates the animations for the dragon's movement.
svn-id: r42734
2009-07-25 04:23:59 +00:00
Denis Kasak
ceb9f18132 Made Script::run() manually mark the last animation index before it executes a program. This is done to prevent Release wreaking havoc if it is unpaired (i.e. if the script forgot to call a Mark first).
svn-id: r42733
2009-07-25 03:41:28 +00:00
Denis Kasak
ed59a12d53 Implemented ExecUse, ExecLook and ExecInit GPL commands.
svn-id: r42732
2009-07-25 03:37:22 +00:00
Denis Kasak
d28658984d * Added DraciEngine::_initArchive and made Game use it. Fixes a memory bug because Game uses pointers from the init archive which should outlive it (but didn't previously).
* Added support for setting loop status to Game.
* Made some GPL commands check whether we are in the correct loop status before executing.

svn-id: r42731
2009-07-25 03:28:04 +00:00
Denis Kasak
b7e97efb7f * Added handlers for the ObjStat and ObjStat_On GPL commands
* Removed temporary hack I accidentally committed

svn-id: r42730
2009-07-25 02:23:00 +00:00
Denis Kasak
5faceb595f Temporary mapped GPL command StartPlay to handler for Start and reenabled gates' scripts (for added effects and testing).
svn-id: r42684
2009-07-24 05:07:27 +00:00
Denis Kasak
c1ad0c3926 * Added tracking and deleting animations by index (which represents the order in which they were loaded). This is needed by some GPL commands.
* Added Game::getNumObjects() which returns the number of objects in the game
* Fixed segfault (accessing a null Animation *)
* Added some docs to various things

svn-id: r42683
2009-07-24 05:00:53 +00:00
Denis Kasak
a2bca06b3f Added support for per-animation scaling (via scaling factors). I have decided to go for a mixed approach (where Animation has a global scaling factor for the whole animation which is separate from Drawable's scaled width and height) so the animation can be scaled more naturally when the scale often changes (like with perspective when the dragon is walking). Previously, one had to alter the sizes of each frame of the dragon's animation whenever the dragon moved which was unclean.
svn-id: r42680
2009-07-24 01:54:13 +00:00
Denis Kasak
1726cc8d24 * Disabled unconditional execution of gates' scripts
* Fixed bug in Animation::nextFrame() which caused non-looping animations to linger on forever
* Stopped setting looping to false explicitly in AnimationManager::addAnimation() since the Animation constructor already does that

svn-id: r42657
2009-07-22 11:30:57 +00:00
Eugene Sandulenko
1c86a986d9 Fix warnings
svn-id: r42653
2009-07-22 07:22:12 +00:00
Denis Kasak
ef37d0a9b0 * Stopped AnimationManager::drawScene() from marking its own dirtiness.
* Instead, Animation::nextFrame() marks both the old and the new frame dirty. This makes it possible to only update the real screen when the animation changes and results in a pretty big speedup.
* Added utility method Animation::markDirtyRect() which takes a (Surface *) and marks a dirty rect on it for the current frame.
* Fixed artifacts when moving the dragon.

svn-id: r42652
2009-07-22 07:18:00 +00:00
Denis Kasak
5a77f089e1 Check whether the walking map overlay is already in the desired state so we don't start/stop it over and over.
svn-id: r42651
2009-07-22 05:03:34 +00:00
Denis Kasak
42e8e1e126 If a frame has scaled dimensions set to 0, the engine now does no scaling instead of scaling it to nothing. Fixes the disappearing chair bug.
svn-id: r42650
2009-07-22 05:00:11 +00:00
Denis Kasak
9b32771017 Fixed scaled mirrored sprite drawing. This change enables the NoSense logo animation to be played correctly.
svn-id: r42649
2009-07-22 04:50:11 +00:00
Denis Kasak
348cbc2b19 * Removed some unnecessary virtual qualifiers from methods in Drawable, Sprite and Text.
* Changed some Drawable members from uint16 to uint.
* Added some const qualifiers to methods of Drawable.

svn-id: r42648
2009-07-22 04:47:01 +00:00
Denis Kasak
b3a2d186bb * Moved scaling support from Animation to Sprite
* Now each Sprite (and hence frame in an animation) can have a separate zoom (which is needed for some animations in the game)
* Scale factors are not stored any more; instead, we only store scaled dimensions (since these are stored in the data files) and calculate the factors from those.

svn-id: r42647
2009-07-22 04:42:33 +00:00
Denis Kasak
6097828f54 Made 'show walking map overlay' setting persist when changing rooms.
svn-id: r42628
2009-07-20 17:34:19 +00:00
Denis Kasak
a2a71cb8fb * Added scaling support
* Made the dragon scale when it is in different parts of the room
* Added getters for relative coordinates (Animation::getRelativeX() and Animation::getRelativeY())
* Commented Game::loop() and Sprite::draw*() methods in more detail

svn-id: r42627
2009-07-20 17:25:57 +00:00
Denis Kasak
18301b6f78 * Used ldexp() in real_to_double() instead of doing the calculation manually
* Moved static declaration of real_to_double() to game.cpp

svn-id: r42616
2009-07-19 14:54:16 +00:00
Denis Kasak
1ec375bbd5 Added capability for reading in Pascal 6-byte floats and made Game::loadRoom() read in pers0 and persStep correctly.
svn-id: r42612
2009-07-19 13:28:05 +00:00
Denis Kasak
cb185f18cd Fixed bug which caused the dragon to be animated with the wrong Z coordinate for short periods of time when moved to a new location.
svn-id: r42586
2009-07-18 12:08:18 +00:00
Denis Kasak
a44cda5525 Fixed bug which caused animations to sometimes be played too fast if the engine was busier than usual (like when redrawing the whole screen when returning from minimized state).
svn-id: r42585
2009-07-18 05:21:01 +00:00
Denis Kasak
128fe6ea21 Made the engine handle the Z coordinate for the hero properly.
svn-id: r42584
2009-07-18 03:20:26 +00:00
Denis Kasak
10e9a780ce Made the engine stop the dragon animation when the room changes.
svn-id: r42583
2009-07-18 03:12:12 +00:00
Denis Kasak
18fda1b2f3 Fixed a bug where the cursor was not shown when the first room is loaded and has mouse enabled.
svn-id: r42582
2009-07-18 03:05:20 +00:00
Denis Kasak
94417e7743 * Added support for "walking" with the hero (i.e. moving the sprite to locations allowed by the walking map)
* Enabled drawing the walking map with the 'w' hotkey for testing

svn-id: r42581
2009-07-18 03:00:12 +00:00