This was a bug present in both the original FreeBASIC code and the
C port by Dmitry Smagin. So having no referemce, I am not completely
sure this is the correct way to fix it, but I have not detected any
issue playing the game after this change.
In Future Wars the command line was not always updated and thus failed
sometimes to be up to date (i.e. showing wrong text, e.g. "EXAMINE" only
when it should have read "EXAMINE scaffolding" because the mouse cursor
was on the scaffolding).
Now we just always update the command line for both Future Wars and
Operation Stealth which seems to fix the command line updating.
I think this probably was a regression caused by adding support for
Operation Stealth (i.e. pull request #2365) and the efforts made in it
to make the user interface responsive.
The Italian Amiga version of Future Wars tries to load music from file
"TELESONG.DAT" which does not exist. Previously after this starting to
play music might either try to play a null stream and crash or play an
old wrong music in memory. Fix that by setting the stream to null if
no music exists (Checked that the stream is destroyed i.e. the
destructor is run so it should be safe to set the _moduleStream variable
to nullptr directly).
Previously there was a fix for bug #2669415
("FW: half walking speed in a screen") which only addressed a single
scene in Amiga and Atari ST versions of Future Wars.
This fix fixes half walking speed in 8 more scenes in Amiga and Atari ST
versions of Future Wars. The scenes were identified by playing through
an Italian version of Amiga Future Wars.
3 more scenes were left over with half walking speed because they could
not be fixed as easily (i.e. using this fix on them broke the scenes in
some way, made them too fast or made the people walk into wrong
positions or something else). The scenes left over are the ones using
the following background files:
- "L10.PI1": The medieval castle's hall.
- "L18.PI1": The medieval castle's teleport room.
- "L45.PI1": Space station's computer room.
Total playtime is kept as milliseconds in the engine. It is saved as
seconds. Previously it was not converted to milliseconds on load but
seconds were took as milliseconds (i.e. 10s -> 10ms). Fix that by
converting total playtime on load from seconds to milliseconds.
Previously I encountered an std::bad_alloc with the code in manageEvents
pushing an empty Event into the event queue. It did not happen very
often but I got it to appear while debugging at least once or maybe
twice.
This is an attempt to fix this possible behaviour by not pushing empty
events into the event queue but making sure the current status is
checked without needing to push empty events into an empty event queue.
I played through Italian Amiga version of Future Wars with this change
and encountered no problems with it.
Previously the inventory could be summoned multiple times by pressing
F3 or F4. Fix that by keeping track when the inventory has been opened
and not allowing multiple use of it simultaneously.
After player has died it was hard to get the system menu to appear by
pressing the left and right mouse buttons simultaneously or the middle
mouse button. Fix that by using the maximum values of the mouse button
states for the polling period (Around 110ms at default play speed).
Make Amiga music loop until fade out when changing scene. This is
based on watching a video of Future Wars Amiga walkthrough, not on
playing the Amiga version or reading its disassembly. But it does seem
that the music loops instead of just playing once.