From f848b87572cc8cf9b267380801215083ca00512b Mon Sep 17 00:00:00 2001 From: Eric Fry Date: Sun, 9 Feb 2020 10:47:32 +1100 Subject: [PATCH] DRAGONS: Fixed cutscene palettes in other variants. Started on FR support --- engines/dragons/cutscene.cpp | 2 +- engines/dragons/detection.cpp | 12 ++++++++++++ engines/dragons/dragons.cpp | 21 ++++++++++++++++----- engines/dragons/dragons.h | 1 + 4 files changed, 30 insertions(+), 6 deletions(-) diff --git a/engines/dragons/cutscene.cpp b/engines/dragons/cutscene.cpp index a6d1cce96dd..700171d9b6c 100644 --- a/engines/dragons/cutscene.cpp +++ b/engines/dragons/cutscene.cpp @@ -646,7 +646,7 @@ void CutScene::loadPalettes() { if (!fd.open("dragon.exe")) { error("Failed to open dragon.exe"); } - fd.seek(0x5336c); //TODO handle other game variants + fd.seek(_vm->getCutscenePaletteOffsetFromDragonEXE()); _palettes = (byte *)malloc(256 * 2 * 4); fd.read(_palettes, 256 * 2 * 4); diff --git a/engines/dragons/detection.cpp b/engines/dragons/detection.cpp index 3ec5e2c30b7..71cebbc0b20 100644 --- a/engines/dragons/detection.cpp +++ b/engines/dragons/detection.cpp @@ -71,6 +71,18 @@ static const DragonsGameDescription gameDescriptions[] = { }, kGameIdDragons }, + { + { + "dragons", + 0, + AD_ENTRY1s("bigfile.dat", "9854fed0d2b48522a62973e99b52a0be", 45107200), + Common::FR_FRA, + Common::kPlatformPSX, + ADGF_DROPPLATFORM, + GUIO0() + }, + kGameIdDragons + }, { AD_TABLE_END_MARKER, 0 } }; diff --git a/engines/dragons/dragons.cpp b/engines/dragons/dragons.cpp index 1cb59d781f2..bf3aab54ace 100644 --- a/engines/dragons/dragons.cpp +++ b/engines/dragons/dragons.cpp @@ -1426,20 +1426,20 @@ void DragonsEngine::updatePaletteCycling() { uint32 DragonsEngine::getFontOffsetFromDragonEXE() { switch (_language) { - case Common::EN_GRB : return 0x4b4fc; case Common::EN_USA : return 0x4a144; + case Common::EN_GRB : return 0x4b4fc; case Common::DE_DEU : return 0x4af5c; - //TODO FR + case Common::FR_FRA : return 0x4b158; default : error("Unable to get font offset from dragon.exe for %s", getLanguageCode(_language)); } } uint32 DragonsEngine::getSpeechTblOffsetFromDragonEXE() { switch (_language) { - case Common::EN_GRB : return 0x4f4f4; case Common::EN_USA : return 0x4e138; + case Common::EN_GRB : return 0x4f4f4; case Common::DE_DEU : return 0x4f0a4; - //TODO FR + case Common::FR_FRA : return 0x4f2a0; default : error("Unable to get speech table offset from dragon.exe for %s", getLanguageCode(_language)); } } @@ -1449,7 +1449,18 @@ uint32 DragonsEngine::getBigFileInfoTblFromDragonEXE() { case Common::EN_USA : return 0x4a238; case Common::EN_GRB : return 0x4b5f4; case Common::DE_DEU : return 0x4b054; - //TODO FR + case Common::FR_FRA : return 0x4b250; + default : + error("Unable to get speech table offset from dragon.exe for %s", getLanguageCode(_language)); + } +} + +uint32 DragonsEngine::getCutscenePaletteOffsetFromDragonEXE() { + switch (_language) { + case Common::EN_USA : return 0x5336c; + case Common::EN_GRB : return 0x54628; + case Common::DE_DEU : return 0x541d8; + case Common::FR_FRA : return 0x543d4; default : error("Unable to get speech table offset from dragon.exe for %s", getLanguageCode(_language)); } diff --git a/engines/dragons/dragons.h b/engines/dragons/dragons.h index 6e4464e1ba0..9150023d891 100644 --- a/engines/dragons/dragons.h +++ b/engines/dragons/dragons.h @@ -285,6 +285,7 @@ public: uint32 getBigFileInfoTblFromDragonEXE(); uint32 getFontOffsetFromDragonEXE(); uint32 getSpeechTblOffsetFromDragonEXE(); + uint32 getCutscenePaletteOffsetFromDragonEXE(); private: bool savegame(const char *filename, const char *description); bool loadgame(const char *filename);