aboutsummaryrefslogtreecommitdiff
path: root/engines/hopkins/talk.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/hopkins/talk.cpp')
-rw-r--r--engines/hopkins/talk.cpp201
1 files changed, 95 insertions, 106 deletions
diff --git a/engines/hopkins/talk.cpp b/engines/hopkins/talk.cpp
index ef2ff53e19..c339b0e1ad 100644
--- a/engines/hopkins/talk.cpp
+++ b/engines/hopkins/talk.cpp
@@ -100,9 +100,9 @@ void TalkManager::PARLER_PERSO(const Common::String &filename) {
_vm->_fileManager.constructLinuxFilename("TEMP.SCR");
if (_vm->_graphicsManager._lineNbr == SCREEN_WIDTH)
- _vm->_saveLoadManager.SAUVE_FICHIER(_vm->_globals.NFICHIER, _vm->_graphicsManager._vesaScreen, 0x4B000u);
+ _vm->_saveLoadManager.saveFile(_vm->_globals.NFICHIER, _vm->_graphicsManager._vesaScreen, 0x4B000u);
else if (_vm->_graphicsManager._lineNbr == (SCREEN_WIDTH * 2))
- _vm->_saveLoadManager.SAUVE_FICHIER(_vm->_globals.NFICHIER, _vm->_graphicsManager._vesaScreen, 0x96000u);
+ _vm->_saveLoadManager.saveFile(_vm->_globals.NFICHIER, _vm->_graphicsManager._vesaScreen, 0x96000u);
if (!_vm->_graphicsManager._lineNbr)
_vm->_graphicsManager.ofscroll = 0;
@@ -143,7 +143,7 @@ void TalkManager::PARLER_PERSO(const Common::String &filename) {
_vm->_graphicsManager.NB_SCREEN();
_vm->_globals.NECESSAIRE = false;
- _vm->_saveLoadManager.bload("TEMP.SCR", _vm->_graphicsManager._vesaScreen);
+ _vm->_saveLoadManager.load("TEMP.SCR", _vm->_graphicsManager._vesaScreen);
g_system->getSavefileManager()->removeSavefile("TEMP.SCR");
_vm->_objectsManager.PERSO_ON = false;
@@ -733,7 +733,7 @@ void TalkManager::BOB_VISU_PARLE(int idx) {
if ((int16)READ_LE_UINT16(v5 + 24)) {
_vm->_globals.Bob[idx]._isSpriteFl = true;
_vm->_globals.Bob[idx].field36 = 0;
- _vm->_globals.Bob[idx].field38 = 0;
+ _vm->_globals.Bob[idx]._modeFlag = 0;
_vm->_globals.Bob[idx]._animData = _vm->_globals.Bqe_Anim[idx]._data;
_vm->_globals.Bob[idx].field0 = 10;
v5 = _characterSprite;
@@ -741,7 +741,7 @@ void TalkManager::BOB_VISU_PARLE(int idx) {
_vm->_globals.Bob[idx].field1E = v4;
_vm->_globals.Bob[idx].field20 = -1;
_vm->_globals.Bob[idx].field22 = 0;
- _vm->_globals.Bob[idx].offsetY = 0;
+ _vm->_globals.Bob[idx]._offsetY = 0;
}
}
}
@@ -946,15 +946,13 @@ void TalkManager::REPONSE(int a1, int a2) {
byte *v6;
uint16 v7;
byte *v8;
- int v9;
int v10;
uint16 v11;
int v12;
int v13;
- int v14;
int v15;
int v16;
- int v17;
+ bool loopCond;
byte *ptr;
v2 = a1;
@@ -964,11 +962,11 @@ LABEL_2:
if (_vm->_globals.COUCOU != g_PTRNUL) {
v5 = _vm->_globals.COUCOU;
for (;;) {
- if ((*v5 == 'C') && (*(v5 + 1) == 'O') && (*(v5 + 2) == 'D')) {
- if ((*(v5 + 3) == v2) && (*(v5 + 4) == v3))
+ if (v5[0] == 'C' && v5[1] == 'O' && v5[2] == 'D') {
+ if (v5[3] == v2 && v5[4] == v3)
v15 = 1;
}
- if (*v5 == 'F' && *(v5 + 1) == 'I' && *(v5 + 2) == 'N')
+ if (v5[0] == 'F' && v5[1] == 'I' && v5[2] == 'N')
break;
if (!v15)
v5 = v5 + 1;
@@ -980,10 +978,10 @@ LABEL_2:
memset(ptr, 0, 620);
v7 = 0;
v12 = 0;
- v14 = 0;
+ loopCond = false;
do {
v16 = 0;
- if (*(v7 + v6) == 'F' && *(v6 + v7 + 1) == 'C') {
+ if (v6[v7] == 'F' && v6[v7 + 1] == 'C') {
++v12;
assert(v12 < (620 / 20));
@@ -991,26 +989,25 @@ LABEL_2:
v11 = 0;
do {
assert(v11 < 20);
- *(v11++ + v8) = *(v7++ + v6);
- if (*(v7 + v6) == 'F' && *(v6 + v7 + 1) == 'F') {
+ *(v11++ + v8) = v6[v7++];
+ if (v6[v7] == 'F' && v6[v7] == 'F') {
v16 = 1;
- v9 = v11;
- *(v9 + v8) = 'F';
- *(v8 + v9 + 1) = 'F';
+ v8[v11] = 'F';
+ v8[v11 + 1] = 'F';
++v7;
}
} while (v16 != 1);
}
if (v16 != 1) {
- if (*(v7 + v6) == 'C' && *(v6 + v7 + 1) == 'O' && *(v6 + v7 + 2) == 'D')
- v14 = 1;
- if (v16 != 1 && *(v7 + v6) == 'F' && *(v6 + v7 + 1) == 'I' && *(v6 + v7 + 2) == 'N')
- v14 = 1;
+ if (v6[v7] == 'C' && v6[v7 + 1] == 'O' && v6[v7 + 2] == 'D')
+ loopCond = true;
+ if (v16 != 1 && v6[v7] == 'F' && v6[v7 + 1] == 'I' && v6[v7 + 2] == 'N')
+ loopCond = true;
}
v6 += v7 + 1;
v7 = 0;
- } while (v14 != 1);
- v17 = 0;
+ } while (!loopCond);
+ loopCond = false;
v13 = 1;
do {
v10 = _vm->_scriptManager.Traduction(ptr + 20 * v13);
@@ -1019,21 +1016,23 @@ LABEL_2:
if (v10 == 2)
v13 = _vm->_scriptManager.Control_Goto(ptr + 20 * v13);
- if (v10 == 3)
+ else if (v10 == 3)
v13 = _vm->_scriptManager.Control_If(ptr, v13);
+
if (v13 == -1)
error("Invalid IFF function");
+
if (v10 == 1 || v10 == 4)
++v13;
- if (!v10 || v10 == 5)
- v17 = 1;
- if (v10 == 6) {
+ else if (!v10 || v10 == 5)
+ loopCond = true;
+ else if (v10 == 6) {
_vm->_globals.freeMemory(ptr);
v2 = _vm->_objectsManager.NVZONE;
v3 = _vm->_objectsManager.NVVERBE;
goto LABEL_2;
}
- } while (v17 != 1);
+ } while (!loopCond);
_vm->_globals.freeMemory(ptr);
_vm->_globals.SAUVEGARDE->data[svField2] = 0;
return;
@@ -1043,37 +1042,18 @@ LABEL_2:
}
void TalkManager::REPONSE2(int a1, int a2) {
- signed int v3;
- int v4;
- int v5;
- int v6;
- int v7;
- int v8;
- int v9;
- int v10;
- int v11;
-
- v3 = 0;
+ int indx = 0;
if (a2 == 5 && _vm->_globals.SAUVEGARDE->data[svField3] == 4) {
- if ((uint16)(a1 - 22) <= 1u) {
+ if (a1 == 22 || a1 == 23) {
_vm->_objectsManager.setFlipSprite(0, false);
_vm->_objectsManager.setSpriteIndex(0, 62);
_vm->_objectsManager.SPACTION(_vm->_globals.FORETSPR, "2,3,4,5,6,7,8,9,10,11,12,-1,", 0, 0, 4, 0);
if (a1 == 22) {
- v4 = _vm->_objectsManager.BOBX(3);
- _vm->_objectsManager.BLOQUE_ANIMX(6, v4);
- }
- if (a1 == 23) {
- v5 = _vm->_objectsManager.BOBX(4);
- _vm->_objectsManager.BLOQUE_ANIMX(6, v5);
- }
- if (a1 == 22) {
- v6 = _vm->_objectsManager.BOBX(3);
- _vm->_objectsManager.BLOQUE_ANIMX(8, v6);
- }
- if (a1 == 23) {
- v7 = _vm->_objectsManager.BOBX(4);
- _vm->_objectsManager.BLOQUE_ANIMX(8, v7);
+ _vm->_objectsManager.BLOQUE_ANIMX(6, _vm->_objectsManager.BOBX(3));
+ _vm->_objectsManager.BLOQUE_ANIMX(8, _vm->_objectsManager.BOBX(3));
+ } else { // a1 == 23
+ _vm->_objectsManager.BLOQUE_ANIMX(6, _vm->_objectsManager.BOBX(4));
+ _vm->_objectsManager.BLOQUE_ANIMX(8, _vm->_objectsManager.BOBX(4));
}
_vm->_objectsManager.BOBANIM_OFF(3);
_vm->_objectsManager.BOBANIM_OFF(4);
@@ -1082,46 +1062,46 @@ void TalkManager::REPONSE2(int a1, int a2) {
_vm->_objectsManager.SPACTION1(_vm->_globals.FORETSPR, "13,14,15,14,13,12,13,14,15,16,-1,", 0, 0, 4);
do
_vm->_eventsManager.VBL();
- while (_vm->_objectsManager.BOBPOSI(6) <= 12 && _vm->_objectsManager.BOBPOSI(6) != 12);
+ while (_vm->_objectsManager.BOBPOSI(6) < 12);
_vm->_objectsManager.BOBANIM_OFF(6);
_vm->_objectsManager.BOBANIM_ON(8);
- if (_vm->_globals.ECRAN == 35)
- v3 = 201;
- if (_vm->_globals.ECRAN == 36)
- v3 = 203;
- if (_vm->_globals.ECRAN == 37)
- v3 = 205;
- if (_vm->_globals.ECRAN == 38)
- v3 = 207;
- if (_vm->_globals.ECRAN == 39)
- v3 = 209;
- if (_vm->_globals.ECRAN == 40)
- v3 = 211;
- if (_vm->_globals.ECRAN == 41)
- v3 = 213;
- _vm->_globals.SAUVEGARDE->data[v3] = 2;
+
+ switch (_vm->_globals.ECRAN) {
+ case 35:
+ indx = 201;
+ break;
+ case 36:
+ indx = 203;
+ break;
+ case 37:
+ indx = 205;
+ break;
+ case 38:
+ indx = 207;
+ break;
+ case 39:
+ indx = 209;
+ break;
+ case 40:
+ indx = 211;
+ break;
+ case 41:
+ indx = 213;
+ break;
+ }
+ _vm->_globals.SAUVEGARDE->data[indx] = 2;
_vm->_objectsManager.ZONE_OFF(22);
_vm->_objectsManager.ZONE_OFF(23);
- }
- if ((uint16)(a1 - 20) <= 1u) {
+ } else if (a1 == 20 || a1 == 21) {
_vm->_objectsManager.setFlipSprite(0, true);
_vm->_objectsManager.setSpriteIndex(0, 62);
_vm->_objectsManager.SPACTION(_vm->_globals.FORETSPR, "2,3,4,5,6,7,8,9,10,11,12,-1,", 0, 0, 4, 1);
if (a1 == 20) {
- v8 = _vm->_objectsManager.BOBX(1);
- _vm->_objectsManager.BLOQUE_ANIMX(5, v8);
- }
- if (a1 == 21) {
- v9 = _vm->_objectsManager.BOBX(2);
- _vm->_objectsManager.BLOQUE_ANIMX(5, v9);
- }
- if (a1 == 20) {
- v10 = _vm->_objectsManager.BOBX(1);
- _vm->_objectsManager.BLOQUE_ANIMX(7, v10);
- }
- if (a1 == 21) {
- v11 = _vm->_objectsManager.BOBX(2);
- _vm->_objectsManager.BLOQUE_ANIMX(7, v11);
+ _vm->_objectsManager.BLOQUE_ANIMX(5, _vm->_objectsManager.BOBX(1));
+ _vm->_objectsManager.BLOQUE_ANIMX(7, _vm->_objectsManager.BOBX(1));
+ } else { // a1 == 21
+ _vm->_objectsManager.BLOQUE_ANIMX(5, _vm->_objectsManager.BOBX(2));
+ _vm->_objectsManager.BLOQUE_ANIMX(7, _vm->_objectsManager.BOBX(2));
}
_vm->_objectsManager.BOBANIM_OFF(1);
_vm->_objectsManager.BOBANIM_OFF(2);
@@ -1130,24 +1110,33 @@ void TalkManager::REPONSE2(int a1, int a2) {
_vm->_objectsManager.SPACTION1(_vm->_globals.FORETSPR, "13,14,15,14,13,12,13,14,15,16,-1,", 0, 0, 4);
do
_vm->_eventsManager.VBL();
- while (_vm->_objectsManager.BOBPOSI(5) <= 12 && _vm->_objectsManager.BOBPOSI(5) != 12);
+ while (_vm->_objectsManager.BOBPOSI(5) < 12);
_vm->_objectsManager.BOBANIM_OFF(5);
_vm->_objectsManager.BOBANIM_ON(7);
- if (_vm->_globals.ECRAN == 35)
- v3 = 200;
- if (_vm->_globals.ECRAN == 36)
- v3 = 202;
- if (_vm->_globals.ECRAN == 37)
- v3 = 204;
- if (_vm->_globals.ECRAN == 38)
- v3 = 206;
- if (_vm->_globals.ECRAN == 39)
- v3 = 208;
- if (_vm->_globals.ECRAN == 40)
- v3 = 210;
- if (_vm->_globals.ECRAN == 41)
- v3 = 212;
- _vm->_globals.SAUVEGARDE->data[v3] = 2;
+ switch (_vm->_globals.ECRAN) {
+ case 35:
+ indx = 200;
+ break;
+ case 36:
+ indx = 202;
+ break;
+ case 37:
+ indx = 204;
+ break;
+ case 38:
+ indx = 206;
+ break;
+ case 39:
+ indx = 208;
+ break;
+ case 40:
+ indx = 210;
+ break;
+ case 41:
+ indx = 212;
+ break;
+ }
+ _vm->_globals.SAUVEGARDE->data[indx] = 2;
_vm->_objectsManager.ZONE_OFF(21);
_vm->_objectsManager.ZONE_OFF(20);
}
@@ -1206,9 +1195,9 @@ void TalkManager::OBJET_VIVANT(const Common::String &a2) {
_vm->_fileManager.constructLinuxFilename("TEMP.SCR");
if (_vm->_graphicsManager._lineNbr == SCREEN_WIDTH)
- _vm->_saveLoadManager.SAUVE_FICHIER(_vm->_globals.NFICHIER, _vm->_graphicsManager._vesaScreen, 0x4B000u);
+ _vm->_saveLoadManager.saveFile(_vm->_globals.NFICHIER, _vm->_graphicsManager._vesaScreen, 0x4B000u);
else if (_vm->_graphicsManager._lineNbr == (SCREEN_WIDTH * 2))
- _vm->_saveLoadManager.SAUVE_FICHIER(_vm->_globals.NFICHIER, _vm->_graphicsManager._vesaScreen, 0x96000u);
+ _vm->_saveLoadManager.saveFile(_vm->_globals.NFICHIER, _vm->_graphicsManager._vesaScreen, 0x96000u);
if (!_vm->_graphicsManager._lineNbr)
_vm->_graphicsManager.ofscroll = 0;
@@ -1272,7 +1261,7 @@ void TalkManager::OBJET_VIVANT(const Common::String &a2) {
if (_vm->_globals.SORTIE == 101)
_vm->_globals.SORTIE = 0;
- _vm->_saveLoadManager.bload("TEMP.SCR", _vm->_graphicsManager._vesaScreen);
+ _vm->_saveLoadManager.load("TEMP.SCR", _vm->_graphicsManager._vesaScreen);
g_system->getSavefileManager()->removeSavefile("TEMP.SCR");
_vm->_objectsManager.PERSO_ON = false;