This makes sense as a default for CLUT8 modes, but not really
for anything else. As part of the gsoc2009-16bit merge, the
default was changed to "all ones", with extra code in the SDL
backend to truncate this to the depth of the mode. However,
"all ones" (white) still isn't a very useful default for RGB modes.
So rather than jumping through hoops to provide a bad default,
it's better to remove the default altogether. Engines which relied
on the old default of 255 have been updated to specify it explicitly.
svn-id: r47118
It was caused by forever re-starting the same sample when the animation was
stopped and the same frame got displayed over and over, each time triggering
playing the same sample.
svn-id: r46168
I have tested that this could only possibly happen when the game has been
loaded with last location being the map. Then pressing Escape calls
enterNewRoom() and this superfluous optimization takes place. It is harmless
to simply reload the map. After having removed it, enterNewRoom() needs not
return any return value, because the test at the tail can be done by the
caller. I have then restructured the code a little to make it cleaner.
svn-id: r46098
(otherwise we could have in our hands an unreachable object). This works
thanks to moving clearing _currentItem into putItem(), which gets called
in inventoryReload().
svn-id: r46096
Verified that we really do not need object animations even if they are in
a different location, and clearing them thus regardless of their location.
Although the game was not crashing due to previous work-arounds at this
moment, this cleanup obliterates the most horrible hack and makes sure
animations will never get stale.
svn-id: r46095
With the previous code, the position of the animation was doubled (due to
counting the position twice, the second time being a relative shift), which
put it mostly outside the screen. This is because one-time hero animations
are actually stored using absolute coordinates.
svn-id: r46057
This simplifies a lot of code calling run(). Also, scripts called from the
inventory are now called with disabled mouse and title, as desired.
svn-id: r45848
Putting items back to the inventory into clipped coordinates, and exiting
running GPL2 programs when the game engine it to be interrupted.
svn-id: r45822
Replaced IDs of objects by pointers, which saves many lookups, each of which
is horribly ineffective. Moved a lot of code into methods of structs now
turned into objects.
Tested the new code a lot and seems to work as well as the old code.
svn-id: r45799
Pressing Q during the game enables/disables faster walking; all animation
phases are flipped after one refresh instead of after given delay.
svn-id: r45748
This fixes the previous bugfix, which causes that I could not re-run the same
program (e.g., by repeatedly clicking on the hollow tree) if the hero did not
move at least one pixel.
svn-id: r45747
Adjusting to the edge is done such that it respects slight sideways movements of the dragon.
Fixed rounding issues in the whole game. Improved debug messages. Made sure that the dragon
does not turn like crazy around when clicking on the same pixel: the final point is always the
clicked one although the middle points made by shifted to make the animations smooth, and
preserve the dragons direction if he has not walked.
There is a bug with running turning animations as they seem to disappear for 1 frame and have
incorrect Z coordinate. Will investigate it next.
svn-id: r45742
In these animations, each sprite can specify a relative shift with respect
to the previous sprite. Moving animations (such as walking of the dragon)
are easily described in this framework. I have sort of hacked their support
and it seems to work.
The current walking code does not interact with the new code yet, but it will
be easy to do.
svn-id: r45712
- SIGSEGV by not stopping walking when changing rooms
- reset of the mouse cursor and object title during gate scripts
- updating the previous animation phase, also when starting new animation
- swapped up and down animations
svn-id: r45690
The hero does not walk yet (it still teleports to the target immediately),
but that is just because the actual walking algorithm is left trivial first.
However, the main game loop, callbacks, and waiting all already work with
the general framework.
svn-id: r45648
The current algorithm is much better than the original player'ss one and it
find really nice curved paths.
Also, started preparing interface for actually walking along this path.
svn-id: r45622
- shouldExitLoop() is a bool again and introduced new flag isReloaded() instead
of adding special hacky value 2
- loop() accepts 2 parameters: loop substatus and shouldExit flag, because each
caller previously had to set and restore these manually. loop() now also
tests whether the substatuses are properly nested. reordered the
loop-exitting code.
- renamed loop substatuses to logical names
- enterNewRoom() returns bool whether loop() should continue so that start()
doesn't have to test and clear shouldEndProgram(). it doesn't need
force_reload as a parameter anymore.
- dialog selections use new inner substatus instead of outer substatus, for
consistency
svn-id: r45607
The Sprite class points to the original buffer (which is cached in the memory
thanks to BArchive machinery) instead of allocating its own buffer and
copying the source there.
svn-id: r45594
In particular, breadth-first search algorithm for getting the shortest path
in the walkable area and an algorithm making the path oblique when possible.
svn-id: r45591
Also, fix a bug when loading the default walking map (wasn't implemented)
and setting font size. The reason I move this code into a new module is
because I will augment it with other walking-related algorithms soon.
svn-id: r45510