We already verify the data read for the hopper screen via stream err().
Also, LockMem() has no side-effects when removing unused references.
Thanks to @digitall for spotting the unused variables
- Actor data is now obtained as a copy via GetActorData(), which handles
endianess internally
- There is now a single ACTORDATA class for all Tinsel versions
- Struct packing has been removed from the actor data class, as we no
longer cast raw data to image pointers
This allows us to merge different code paths for Tinsel V1 - V3 and
simplify the relevant code.
- Images are now obtained as a copy via GetImage(), which handles
endianess internally
- The GetImageFromFilm() / GetImageFromReel() wrappers have been removed
- Direct setting of the image palette has been removed in favor of
PokeInPalette(). This allows us to make image pointers const
- Struct packing has been removed from the IMAGE class, as we no
longer cast raw data to image pointers
- There is now a single IMAGE class for all Tinsel versions
The autosave refactoring that was done in
7adad5aaf5 used g_engine for identifying the
autosave slot. This worked for in-game save/load, but doesn't fit when
called from the launcher.
Fix by passing MetaEngine to SaveStateDescriptor ctor and using it for this
query.
Amends 7adad5aaf5.
This introduces a new helper method, GetFont(), which loads font data
using a memory stream and handles endianess reads internally. This
simplifies font loading and endianess handling considerably, and allows
for the usage of a common font struct for all engine versions
This version is using the same graphics format as the PSX version, with
differences in resource endianess, but features digital music with a
different track structure and has a different sound sample format
Pending issues:
- Font rendering is wrong - this is evident in the text and menus in
the game title screen
- Cursor sprite and trails are wrong - can be seen in the menu of the
game title screen
- Digital music is not supported yet - seems that a different track
structure is used
- The sound sample format is different than the PC version - looks to
be raw, but isn't
- The game crashes at the first room after watching Rincewind's waking
up cutscene
Renamed rince.* files to movers to be more game independent.
Added elementary support for Noir movers which can use different logic.
Allows game to boot to the first interactive scene, but there is no 3D model rendered (that is WIP).
This employs a "lazy" approach: the "format" for the credits stays
exactly as it was, i.e., perl code. Of course one may want to change
this to another format (e.g. YAML, JSON, XML; or also shell script or
AWK, like `configure.engine` uses). But I deliberately kept it simple,
to get a minimal change that is easy to verify. Any further changes to
e.g. the format can be layered atop this.
Follow up on: https://bugs.scummvm.org/ticket/11368
Adds detection for German Playstation version.
Also corrects detection of Japanese Playstation version.
Files need to be extracted/split correctly from DISCWLD.LFD/DISCWLD.LFI. I will attach a QuickBMS script to the PR, which can be used on the German and Japanese CDs to extract the data, or could be used to inform handling the LFD/LFI files directly in ScummVM. The QuickBMS script mention in the above request ticket isn't quite right for the Discworld 1 files.
getSampleIndex and getSampleFile in tinsel.cpp now fallback to ENGLISH files if they fail to find (e.g.) GERMAN.IDX.
This was an easy way to add support for the PSX German CD, without breaking the German DOS CD, Japanese PSX CD etc.
The German PSX version should be as compatible as the English PSX version.
The Japanese PSX version subtitles are not supported, and cause ScummVM to crash when you first try to hover over an object. However, you can view the intro cutscene, and hear the audio.
This adds support for opcode 217. I have made the assumption that it's
voiceover, and given it an enum value to reflect that. This enables
voiceover to be played in the opening movie.
numPolygons was left uninitialized for the original V0 demo, so it could be
set to a big value which would trigger assert(numPolys <= MAX_POLY) in
MaxPolygons() and immediately crash the game.
This restores the implicit behavior before commit 24b77f1e99.
It was introduced in 1c63d9b958 then
partially reverted in 826ad61d86
This reverts it fully, as now we are showing a warning to the users
that the DW2 CD version 2 is unstable