This class manages a buffer where all data usually stored in detection
plugin will get copied before unloading the plugin and starting the
game.
This class expects that two functions are present in every
GameDescription: sizeBuffer which calculates how many bytes we will need
to store the entry in RAM and toBuffer which copies the data in the
buffer and fix the pointers in the class.
At the end, it is expected that an ADDynamicGameDescription doesn't
depend anymore on data stored in the detection plugin.
The AD_GAME_DESCRIPTION_HELPERS macro allow to implement these functions
in all GameDescription which don't have any pointer except those in
ADGameDescription.
Fixes opcode 0xAE (handled by TattooTalk::cmdMouseOnOff()).
Depending on its argument, the opcode does the following in the
original game:
0x01: Hide the cursor and disable user input
0x02: Unhide the cursor and re-enable user input
Cursor visibility toggling was already implemented, so this change
makes the opcode behave like in the original game (with the exception
that skipping dialogue is still possibile as a QoL improvement).
Fixes#14610
Calling showCursor() every time the cursor changes
is unnecessary and breaks hiding it via Rose Tattoo's cmdMouseOnOff().
Instead, call showCursor() only once on game start.
Increase talkHistoryEntry._data[] size from 16 to 32.
Prevents out-of-bounds access to talkHistoryEntry._data if
a talk file has more than 16 statements.
Warning: This bumps the save version to 6.
Fixes#14578
Warning: This bumps the save version to 5.
Scripts can create triggers via TattooTalk::cmdSetSceneEntryFlag().
These will set a flag when a scene has been visited a specified number
of times and are stored in
Array<SceneTripEntry> TattooScene::_sceneTripCounters.
However, this array is neither reset nor synced when loading/saving.
As a result, savegames can be in a buggy/unwinnable state.
While previous savegames can still be loaded with this fix, they
will not be automatically repaired.
See #14435 for instructions to reproduce the bug.