[Scummvm-git-logs] scummvm master -> 45b57f18d2267a65feeaf1bd5398a5af8c79764f

yuv422 yuv422 at users.noreply.github.com
Thu Sep 10 13:40:37 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:
45b57f18d2 DRAGONS: Fixed cutscene dialogs for non US versions Trac#11613


Commit: 45b57f18d2267a65feeaf1bd5398a5af8c79764f
    https://github.com/scummvm/scummvm/commit/45b57f18d2267a65feeaf1bd5398a5af8c79764f
Author: Eric Fry (yuv422 at users.noreply.github.com)
Date: 2020-09-10T23:37:21+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 47353ced2e..3042db70e4 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