Previously we implemented implies as the same as waitFor, but that suspends the
current process straight away. All uses of implies in the usecode are
also immediately followed by a suspend. A typical flow is something like:
005A: 0A push byte 05h
005C: 0C push dword 00000000h
0061: 57 spawn 02 00 0A0C:0032 (FREE::ordinal32 (waitNTimerTicks))
0068: 6E add sp -02h
006A: 5E push retval
006B: 54 implies 01 01
006E: 12 pop temp
006F: 53 suspend
So after implies we should actually continue executing the current UC process
until a suspend or return, otherwise we wake up next frame only to suspend
again. For longer-running spawns this probably makes no noticable difference,
but in Crusader the elevators spawn a process which only waits 1 tick. This
should actually run the ELEVAT process again on the very next tick, but instead
it restarts *3* ticks later:
Tick 1:
1a. ELEVAT: spawn 1 tick sleep, execnow
1b. SLEEP: record start tick as tick 1
1c. ELEVAT: implies (waitFor) - process suspends
Tick 2:
2a. SLEEP: current tick is tick 2, (start+1) return, terminateDeferred
Tick 3:
3a. SLEEP: process terminates, notify ELEVAT process
3b. ELEVAT: wake up because of terminated sleep, pop return, suspend again
Tick 4:
4a. ELEVAT: continue again
This fixes it to only sleep for 2 ticks, which is still not totally correct
(terminateDeferred should maybe happen at the end of the frame to match
original?) but it's an improvement and it doesn't seem to break anything in U8.
Appear in travis build.
create_lure_dat.cpp:1491:1: error: narrowing conversion of '\37777777665' from `char` to `unsigned char` inside { } [-Wnarrowing]
Added a new logoEndAfter game constant, which controls how long
the game logo will stay on screen after booting the game, and
extracted its value for The Vampire Diaries.
Unlike all later games using the engine, TVD sounds are stored in
an obscure file format (.dwd, DiamondWare Digitized). This commit adds support for uncompressed .dwd files and thus enables audio
in the game.
This fixes bug #12477. Heroin's Quest tries to create a file named
"$SAVEGAMEDIR$\\hqrecord.dat" and when remapping this name the
second backslash was left in the name. Creating a file with a
backslash in the name worked on some system, but failed at least
on Windows.