[Scummvm-git-logs] scummvm branch-2-2 -> 001d6a9029a098b4097901a693306effab9c9fd5
yuv422
yuv422 at users.noreply.github.com
Thu Sep 10 13:41:48 UTC 2020
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
001d6a9029 DRAGONS: Fixed cutscene dialogs for non US versions Trac#11613
Commit: 001d6a9029a098b4097901a693306effab9c9fd5
https://github.com/scummvm/scummvm/commit/001d6a9029a098b4097901a693306effab9c9fd5
Author: Eric Fry (yuv422 at users.noreply.github.com)
Date: 2020-09-10T23:41:23+10:00
Commit Message:
DRAGONS: Fixed cutscene dialogs for non US versions Trac#11613
Changed paths:
engines/dragons/cutscene.cpp
engines/dragons/dragons.cpp
engines/dragons/dragons.h
engines/dragons/talk.cpp
diff --git a/engines/dragons/cutscene.cpp b/engines/dragons/cutscene.cpp
index e5cfe393c2..37618affdd 100644
--- a/engines/dragons/cutscene.cpp
+++ b/engines/dragons/cutscene.cpp
@@ -341,7 +341,7 @@ void CutScene::scene1() {
dialog[0] = 0;
_vm->_talk->loadText(0x5ea2, dialog, 2000);
- _vm->_talk->displayDialogAroundPoint(dialog, 0x27, 0xc, 0xc01, 0, 0x5ea2);
+ _vm->_talk->displayDialogAroundPoint(dialog, 0x27, 0xc, 0xc01, 0, _vm->getDialogTextId(0x5ea2));
_actor_80072df0->waitUntilFlag8And4AreSet();
_actor_80072df0->_x_pos = 0xcf;
_actor_80072df0->_y_pos = 0x90;
@@ -351,7 +351,7 @@ void CutScene::scene1() {
dialog[0] = 0;
_vm->_talk->loadText(0x5ecc, dialog, 2000);
- _vm->_talk->displayDialogAroundPoint(dialog, 0x14, 6, 0xc01, 0, 0x5ecc);
+ _vm->_talk->displayDialogAroundPoint(dialog, 0x14, 6, 0xc01, 0, _vm->getDialogTextId(0x5ecc));
_vm->waitForFrames(0x3c);
break; // we do not need to loop in fact
@@ -479,6 +479,7 @@ void CutScene::closeUpKnightsAtTable() {
uint16 CutScene::fun_8003dab8(uint32 textId, uint16 x, uint16 y, uint16 param_4, int16 param_5) {
uint16 dialog[2000];
dialog[0] = 0;
+ textId = _vm->getDialogTextId(textId);
_vm->_talk->loadText(textId, dialog, 2000);
_vm->_talk->displayDialogAroundPoint(dialog, x, y, param_4, param_5, textId);
@@ -926,19 +927,19 @@ void CutScene::tournamentCutScene() {
tournamentUpdateCameraX = 0x140;
_vm->setVsyncUpdateFunction(tournamentUpdateFunction);
_vm->_talk->loadText(0x4C40C, dialogText, 1000);
- _vm->_talk->displayDialogAroundPoint(dialogText, 0, 0, 0x1e01, 1, 0x4C40C);
+ _vm->_talk->displayDialogAroundPoint(dialogText, 0, 0, 0x1e01, 1, _vm->getDialogTextId(0x4C40C));
_vm->_talk->loadText(0x4C530, dialogText, 1000);
- _vm->_talk->displayDialogAroundPoint(dialogText, 0, 0, 0xc01, 1, 0x4C530);
+ _vm->_talk->displayDialogAroundPoint(dialogText, 0, 0, 0xc01, 1, _vm->getDialogTextId(0x4C530));
_vm->_talk->loadText(0x4C588, dialogText, 1000);
- _vm->_talk->displayDialogAroundPoint(dialogText, 0, 0, 0x1e01, 1, 0x4C588);
+ _vm->_talk->displayDialogAroundPoint(dialogText, 0, 0, 0x1e01, 1, _vm->getDialogTextId(0x4C588));
_vm->_talk->loadText(0x4C6B0, dialogText, 1000);
- _vm->_talk->displayDialogAroundPoint(dialogText, 0, 0, 0xc01, 1, 0x4C6B0);
+ _vm->_talk->displayDialogAroundPoint(dialogText, 0, 0, 0xc01, 1, _vm->getDialogTextId(0x4C6B0));
_vm->_talk->loadText(0x4C6E8, dialogText, 1000);
- _vm->_talk->displayDialogAroundPoint(dialogText, 0, 0, 0x1e01, 1, 0x4C6E8);
+ _vm->_talk->displayDialogAroundPoint(dialogText, 0, 0, 0x1e01, 1, _vm->getDialogTextId(0x4C6E8));
_vm->setVsyncUpdateFunction(nullptr);
_vm->setFlags(ENGINE_FLAG_20000);
_vm->fadeToBlack();
@@ -957,9 +958,9 @@ void CutScene::tournamentCutScene() {
_vm->_scene->_camera.x = 0x3c0;
_vm->fadeFromBlack();
_vm->_talk->loadText(0x4C814, dialogText, 1000);
- _vm->_talk->displayDialogAroundPoint(dialogText, 0, 0, 0xc01, 1, 0x4C814);
+ _vm->_talk->displayDialogAroundPoint(dialogText, 0, 0, 0xc01, 1, _vm->getDialogTextId(0x4C814));
_vm->_talk->loadText(0x4C852, dialogText, 1000);
- _vm->_talk->displayDialogAroundPoint(dialogText, 0, 0, 0x1e01, 1, 0x4C852);
+ _vm->_talk->displayDialogAroundPoint(dialogText, 0, 0, 0x1e01, 1, _vm->getDialogTextId(0x4C852));
_vm->setFlags(ENGINE_FLAG_20000);
_vm->fadeToBlack();
}
diff --git a/engines/dragons/dragons.cpp b/engines/dragons/dragons.cpp
index 5ca276a7d2..bfcb0b8470 100644
--- a/engines/dragons/dragons.cpp
+++ b/engines/dragons/dragons.cpp
@@ -1849,6 +1849,205 @@ uint32 DragonsEngine::getMiniGame3DataOffset() {
return 0x4914;
}
+uint32 DragonsEngine::getDialogTextId(uint32 textId) {
+ switch (_language) {
+ case Common::EN_GRB : return getDialogTextIdGrb(textId);
+ case Common::DE_DEU : return getDialogTextIdDe(textId);
+ case Common::FR_FRA : return getDialogTextIdFr(textId);
+ default : break;
+ }
+ return textId;
+}
+
+uint32 DragonsEngine::getDialogTextIdGrb(uint32 textId) {
+ switch (textId) {
+
+ //scene 1
+ case 0x5ef2 : return 0x5ef0;
+ case 0x5ea2 : return 0x5ea0;
+ case 0x5ecc : return 0x5eca;
+
+ default: break;
+ }
+ return textId;
+}
+
+uint32 DragonsEngine::getDialogTextIdDe(uint32 textId) {
+ switch (textId) {
+ //diamond cutscene
+ case 0x4294a : return 0x4a584;
+ case 0x42A66 : return 0x4a6c4;
+ case 0x42AC2 : return 0x4a744;
+ case 0x42B56 : return 0x4a7f0;
+
+ //scene 1
+ case 0x4e26 : return 0x5c2c;
+ case 0x4ea2 : return 0x5ca0;
+ case 0x4eec : return 0x5cfa;
+ case 0x5000 : return 0x5de4;
+ case 0x5074 : return 0x5e78;
+ case 0x511c : return 0x5f0e;
+ case 0x5138 : return 0x5f28;
+ case 0x5152 : return 0x6000;
+ case 0x51fc : return 0x60e4;
+ case 0x52d6 : return 0x6208;
+ case 0x530c : return 0x6244;
+ case 0x54dc : return 0x6466;
+ case 0x55d4 : return 0x654e;
+ case 0x562c : return 0x65a6;
+ case 0x5780 : return 0x66f4;
+ case 0x581c : return 0x679c;
+ case 0x5942 : return 0x6910;
+ case 0x5aaa : return 0x6aa8;
+ case 0x5afc : return 0x6af4;
+ case 0x5b96 : return 0x6bc0;
+ case 0x5c4a : return 0x6c66;
+ case 0x5dc8 : return 0x6e30;
+ case 0x5ef2 : return 0x6f9c;
+ case 0x6000 : return 0x7000;
+ case 0x7dcc : return 0x92da;
+ case 0x60ee : return 0x710e;
+ case 0x5de8 : return 0x6e58;
+ case 0x5ea2 : return 0x6f46;
+ case 0x5ecc : return 0x6f6e;
+
+ // knights saved
+ case 0x7854 : return 0x8bb4;
+ case 0x78c6 : return 0x8c32;
+ case 0x78e8 : return 0x8c56;
+ case 0x7a1e : return 0x8d9e;
+ case 0x7aba : return 0x8e64;
+ case 0x7b60 : return 0x9000;
+ case 0x7c20 : return 0x90fa;
+ case 0x7c9c : return 0x9196;
+ case 0x7cf2 : return 0x91fa;
+// case 0x7dcc : return 0x92da;
+ case 0x7e1a : return 0x9324;
+ case 0x7e96 : return 0x93e2;
+ case 0x7f0a : return 0x9464;
+
+ // flame returns
+ case 0x8ab2 : return 0xa190;
+ case 0x8b40 : return 0xa274;
+ case 0x8bb6 : return 0xa2e0;
+ case 0x8bd8 : return 0xa304;
+ case 0x8c70 : return 0xa3d2;
+ case 0x8cd2 : return 0xa450;
+ case 0x8e1e : return 0xa5a2;
+
+ // knights saved again
+ case 0x9000 : return 0xa806;
+ case 0x90de : return 0xa8f8;
+ case 0x921c : return 0xaa8e;
+ case 0x92aa : return 0xab3c;
+ case 0x932c : return 0xabc0;
+ case 0x93d6 : return 0xac52;
+// case 0x7dcc : return 0x92da;
+ case 0x948c : return 0xad16;
+
+ // tournament
+ case 0x4c40c : return 0x552f8;
+ case 0x4c530 : return 0x55430;
+ case 0x4c588 : return 0x5547e;
+ case 0x4c6b0 : return 0x5557a;
+ case 0x4c6e8 : return 0x555a2;
+ case 0x4c814 : return 0x556c4;
+ case 0x4c852 : return 0x556fc;
+
+ default: break;
+ }
+ warning("Unhandled textID 0x%x", textId);
+ return textId;
+}
+
+uint32 DragonsEngine::getDialogTextIdFr(uint32 textId) {
+ switch (textId) {
+ //diamond cutscene
+ case 0x4294a : return 0x4c8b2;
+ case 0x42A66 : return 0x4ca14;
+ case 0x42AC2 : return 0x4ca76;
+ case 0x42B56 : return 0x4cb34;
+
+ //scene 1
+ case 0x4e26 : return 0x5844;
+ case 0x4ea2 : return 0x58e2;
+ case 0x4eec : return 0x5950;
+ case 0x5000 : return 0x5a32;
+ case 0x5074 : return 0x5ac0;
+ case 0x511c : return 0x5b7a;
+ case 0x5138 : return 0x5b98;
+ case 0x5152 : return 0x5bb4;
+ case 0x51fc : return 0x5c6c;
+ case 0x52d6 : return 0x5d8a;
+ case 0x530c : return 0x5dc8;
+ case 0x54dc : return 0x6000;
+ case 0x55d4 : return 0x610c;
+ case 0x562c : return 0x616a;
+ case 0x5780 : return 0x62ba;
+ case 0x581c : return 0x6332;
+ case 0x5942 : return 0x64b4;
+ case 0x5aaa : return 0x660e;
+ case 0x5afc : return 0x665e;
+ case 0x5b96 : return 0x6752;
+ case 0x5c4a : return 0x6838;
+ case 0x5dc8 : return 0x69d0;
+ case 0x5ef2 : return 0x6b1a;
+ case 0x6000 : return 0x6b76;
+ case 0x7dcc : return 0x8cc0;
+ case 0x60ee : return 0x6c56;
+ case 0x5de8 : return 0x69f2;
+ case 0x5ea2 : return 0x6ac4;
+ case 0x5ecc : return 0x6aec;
+
+ // knights saved
+ case 0x7854 : return 0x86d6;
+ case 0x78c6 : return 0x8736;
+ case 0x78e8 : return 0x8750;
+ case 0x7a1e : return 0x88b0;
+ case 0x7aba : return 0x8974;
+ case 0x7b60 : return 0x8a22;
+ case 0x7c20 : return 0x8afe;
+ case 0x7c9c : return 0x8b92;
+ case 0x7cf2 : return 0x8bda;
+// case 0x7dcc : return 0x8cc0;
+ case 0x7e1a : return 0x8d0e;
+ case 0x7e96 : return 0x8da6;
+ case 0x7f0a : return 0x8e30;
+
+ // flame returns
+ case 0x8ab2 : return 0x9ae2;
+ case 0x8b40 : return 0x9ba6;
+ case 0x8bb6 : return 0x9c16;
+ case 0x8bd8 : return 0x9c3c;
+ case 0x8c70 : return 0x9ccc;
+ case 0x8cd2 : return 0x9d22;
+ case 0x8e1e : return 0x9e8c;
+
+ // knights saved again
+ case 0x9000 : return 0xa086;
+ case 0x90de : return 0xa162;
+ case 0x921c : return 0xa2b8;
+ case 0x92aa : return 0xa35e;
+ case 0x932c : return 0xa400;
+ case 0x93d6 : return 0xa4d2;
+// case 0x7dcc : return 0x8cc0;
+ case 0x948c : return 0xa5b6;
+
+ // tournament
+ case 0x4c40c : return 0x577b4;
+ case 0x4c530 : return 0x578be;
+ case 0x4c588 : return 0x57908;
+ case 0x4c6b0 : return 0x57a26;
+ case 0x4c6e8 : return 0x57a4a;
+ case 0x4c814 : return 0x57bd6;
+ case 0x4c852 : return 0x57c08;
+
+ default: break;
+ }
+ warning("Unhandled textID 0x%x", textId);
+ return textId;
+}
+
void (*DragonsEngine::getSceneUpdateFunction())() {
return _sceneUpdateFunction;
}
diff --git a/engines/dragons/dragons.h b/engines/dragons/dragons.h
index a73eb1c904..44feeed7b8 100644
--- a/engines/dragons/dragons.h
+++ b/engines/dragons/dragons.h
@@ -362,6 +362,7 @@ public:
uint32 getMiniGame3StartingDialog();
uint32 getMiniGame3PickAHatDialog();
uint32 getMiniGame3DataOffset();
+ uint32 getDialogTextId(uint32 textId);
private:
bool savegame(const char *filename, const char *description);
bool loadgame(const char *filename);
@@ -399,6 +400,10 @@ private:
bool checkAudioVideoFiles();
bool validateAVFile(const char *filename);
+
+ uint32 getDialogTextIdGrb(uint32 textId);
+ uint32 getDialogTextIdDe(uint32 textId);
+ uint32 getDialogTextIdFr(uint32 textId);
};
DragonsEngine *getEngine();
diff --git a/engines/dragons/talk.cpp b/engines/dragons/talk.cpp
index 8f8cb15f93..3ac24b7b90 100644
--- a/engines/dragons/talk.cpp
+++ b/engines/dragons/talk.cpp
@@ -854,10 +854,14 @@ void Talk::exitTalkMenu(bool isFlag8Set, bool isFlag100Set, Common::Array<TalkDi
_vm->_fontManager->clearText();
}
+//TODO move to cutscene class
uint Talk::somethingTextAndSpeechAndAnimRelated(Actor *actor, int16 sequenceId1, int16 sequenceId2, uint32 textIndex,
uint16 param_5) {
uint16 dialog[2048];
dialog[0] = 0;
+
+ textIndex = _vm->getDialogTextId(textIndex);
+
_vm->_talk->loadText(textIndex, dialog, 2048);
if (sequenceId1 != -1) {
More information about the Scummvm-git-logs
mailing list