scummvm/engines/hopkins/objects.cpp

7231 lines
200 KiB
C++
Raw Normal View History

/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*/
#include "common/system.h"
#include "graphics/palette.h"
#include "common/file.h"
#include "common/rect.h"
#include "engines/util.h"
#include "hopkins/objects.h"
#include "hopkins/dialogs.h"
#include "hopkins/files.h"
#include "hopkins/globals.h"
#include "hopkins/hopkins.h"
namespace Hopkins {
2012-09-20 22:02:55 +10:00
ObjectsManager::ObjectsManager() {
PRIORITY = 0;
inventairex = inventairey = 0;
inventairel = inventaireh = 0;
old_cadx = old_cady = old_cadi = 0;
cadx = cady = cadi = 0;
SL_X = SL_Y = 0;
I_old_x = I_old_y = 0;
FLAG_VISIBLE_EFFACE = 0;
_vm->_globals.Winventaire = PTRNUL;
inventaire2 = PTRNUL;
SL_SPR = PTRNUL;
SL_SPR2 = PTRNUL;
_vm->_objectsManager.PERSO_ON = false;
SL_FLAG = false;
FLAG_VISIBLE = false;
DESACTIVE_INVENT = false;
BOBTOUS = false;
2012-09-20 22:02:55 +10:00
}
void ObjectsManager::setParent(HopkinsEngine *vm) {
_vm = vm;
}
byte *ObjectsManager::CHANGE_OBJET(int objIndex) {
byte *result = ObjectsManager::CAPTURE_OBJET(objIndex, 1);
_vm->_globals.Bufferobjet = result;
_vm->_globals.Nouv_objet = 1;
_vm->_globals.OBJET_EN_COURS = objIndex;
return result;
}
byte *ObjectsManager::CAPTURE_OBJET(int objIndex, int mode) {
byte *result = NULL;
byte *dataP;
dataP = 0;
int val1 = _vm->_globals.ObjetW[objIndex].field0;
int val2 = _vm->_globals.ObjetW[objIndex].field1;
if (mode == 1)
++val2;
if (val1 != _vm->_globals.NUM_FICHIER_OBJ) {
if (_vm->_globals.ADR_FICHIER_OBJ != PTRNUL)
ObjectsManager::DEL_FICHIER_OBJ();
if (val1 == 1) {
FileManager::CONSTRUIT_SYSTEM("OBJET1.SPR");
_vm->_globals.ADR_FICHIER_OBJ = ObjectsManager::CHARGE_SPRITE(_vm->_globals.NFICHIER);
}
_vm->_globals.NUM_FICHIER_OBJ = val1;
}
int width = ObjectsManager::Get_Largeur(_vm->_globals.ADR_FICHIER_OBJ, val2);
int height = ObjectsManager::Get_Hauteur(_vm->_globals.ADR_FICHIER_OBJ, val2);
_vm->_globals.OBJL = width;
_vm->_globals.OBJH = height;
switch (mode) {
case 0:
dataP = _vm->_globals.dos_malloc2(height * width);
if (dataP == PTRNUL)
error("CAPTURE_OBJET");
ObjectsManager::capture_mem_sprite(_vm->_globals.ADR_FICHIER_OBJ, dataP, val2);
break;
case 1:
ObjectsManager::sprite_alone(_vm->_globals.ADR_FICHIER_OBJ, _vm->_globals.Bufferobjet, val2);
result = _vm->_globals.Bufferobjet;
break;
case 3:
ObjectsManager::capture_mem_sprite(_vm->_globals.ADR_FICHIER_OBJ, _vm->_globals.INVENTAIRE_OBJET, val2);
result = _vm->_globals.INVENTAIRE_OBJET;
break;
default:
result = dataP;
break;
}
return result;
}
void ObjectsManager::DELETE_OBJET(int objIndex) {
int v1;
int v2;
int i;
v1 = 0;
v2 = 0;
do {
++v2;
if (_vm->_globals.INVENTAIRE[v2] == objIndex)
v1 = 1;
if (v2 > 32)
v1 = 1;
} while (v1 != 1);
if (v2 <= 32) {
if (v2 == 32) {
_vm->_globals.INVENTAIRE[32] = 0;
} else {
for (i = v2; i < 32; ++i)
_vm->_globals.INVENTAIRE[i] = _vm->_globals.INVENTAIRE[i + 1];
}
}
CHANGE_OBJET(14);
}
void ObjectsManager::set_offsetxy(byte *data, int idx, int xp, int yp, bool isSize) {
byte *startP = data + 3;
for (int i = idx; i; --i)
startP += READ_LE_UINT32(startP) + 16;
byte *rectP = startP + 8;
if (isSize == 1) {
// Set size
byte *pointP = rectP + 4;
WRITE_LE_UINT16(pointP, xp);
WRITE_LE_UINT16(pointP + 2, yp);
} else {
// Set position
WRITE_LE_UINT16(rectP, xp);
WRITE_LE_UINT16(rectP + 2, yp);
}
}
int ObjectsManager::get_offsetx(const byte *spriteData, int spriteIndex, bool isSize) {
const byte *v3 = spriteData + 3;
for (int i = spriteIndex; i; --i)
v3 += READ_LE_UINT16(v3) + 16;
const byte *v5 = v3 + 8;
int result = READ_LE_UINT16(v5);
if (isSize)
result = READ_LE_UINT16(v5 + 4);
return result;
}
int ObjectsManager::get_offsety(const byte *spriteData, int spriteIndex, bool isSize) {
const byte *v3 = spriteData + 3;
for (int i = spriteIndex; i; --i)
v3 += READ_LE_UINT16(v3) + 16;
const byte *v5 = v3 + 10;
int result = READ_LE_UINT16(v5);
if (isSize)
result = READ_LE_UINT16(v5 + 4);
return result;
}
int ObjectsManager::Get_Largeur(const byte *objectData, int idx) {
const byte *rectP = objectData + 3;
for (int i = idx; i; --i)
rectP += READ_LE_UINT32(rectP) + 16;
return (int16)READ_LE_UINT16(rectP + 4);
}
int ObjectsManager::Get_Hauteur(const byte *objectData, int idx) {
const byte *rectP = objectData + 3;
for (int i = idx; i; --i)
rectP += READ_LE_UINT32(rectP) + 16;
return (int16)READ_LE_UINT16(rectP + 6);
}
int ObjectsManager::sprite_alone(const byte *objectData, byte *sprite, int objIndex) {
const byte *objP = objectData + 3;
for (int i = objIndex; i; --i) {
objP += READ_LE_UINT32(objP) + 16;
}
objP += 4;
int result = READ_LE_UINT16(objP) * READ_LE_UINT16(objP + 2);
memcpy(sprite + 3, objP - 4, result + 16);
return result;
}
byte *ObjectsManager::DEL_FICHIER_OBJ() {
_vm->_globals.NUM_FICHIER_OBJ = 0;
if (_vm->_globals.ADR_FICHIER_OBJ != PTRNUL)
_vm->_globals.ADR_FICHIER_OBJ = FileManager::LIBERE_FICHIER(_vm->_globals.ADR_FICHIER_OBJ);
byte *result = PTRNUL;
_vm->_globals.ADR_FICHIER_OBJ = PTRNUL;
return result;
}
byte *ObjectsManager::CHARGE_SPRITE(const Common::String &file) {
FileManager::DMESS1();
return FileManager::CHARGE_FICHIER(file);
}
int ObjectsManager::capture_mem_sprite(const byte *objectData, byte *sprite, int objIndex) {
const byte *objP = objectData + 3;
for (int i = objIndex; i; --i) {
objP += READ_LE_UINT32(objP) + 16;
}
objP += 4;
int result = READ_LE_UINT16(objP) * READ_LE_UINT16(objP + 2);
memcpy(sprite, objP + 12, result);
return result;
}
int ObjectsManager::AJOUTE_OBJET(int objIndex) {
bool flag = false;
int arrIndex = 0;
do {
++arrIndex;
if (!_vm->_globals.INVENTAIRE[arrIndex])
flag = true;
if (arrIndex == 32)
flag = true;
} while (!flag);
_vm->_globals.INVENTAIRE[arrIndex] = objIndex;
return arrIndex;
}
void ObjectsManager::AFF_SPRITES() {
int v0;
int v1;
int v2;
int destX;
int destY;
int v5;
int v6;
int v7;
int v8;
int v9;
int v10;
int v11;
uint16 *v12;
int v13;
int v14;
int v15;
int v16;
int v17;
int v18;
int v19;
int v20;
int v21;
int v23;
int v24;
int v25;
int v26;
int v27;
int v28;
int v29;
int v30;
int v31;
int v32;
int v33;
2012-09-30 21:21:09 +10:00
int v34;
int v35;
int v36;
int v37;
int v38;
uint16 arr[50];
_vm->_globals.NBTRI = 0;
v30 = 0;
do {
v0 = v30;
if (_vm->_fontManager.ListeTxt[v0].field0 && _vm->_fontManager.Txt[v30].field3FC != 2) {
v1 = _vm->_fontManager.ListeTxt[v30].x1;
v28 = v1 - 2;
if ((int16)(v1 - 2) < _vm->_graphicsManager.min_x)
v28 = _vm->_graphicsManager.min_x;
v2 = _vm->_fontManager.ListeTxt[v30].y1;
v23 = v2 - 2;
if ((int16)(v2 - 2) < _vm->_graphicsManager.min_y)
v23 = _vm->_graphicsManager.min_y;
destX = v1 - 2;
if (destX < _vm->_graphicsManager.min_x)
destX = _vm->_graphicsManager.min_x;
destY = v2 - 2;
if (destY < _vm->_graphicsManager.min_y)
destY = _vm->_graphicsManager.min_y;
_vm->_graphicsManager.SCOPY(_vm->_graphicsManager.VESA_SCREEN, v28, v23,
_vm->_fontManager.ListeTxt[v30].x2 + 4, _vm->_fontManager.ListeTxt[destX].y2 + 4,
_vm->_graphicsManager.VESA_BUFFER,
destX, destY);
_vm->_fontManager.ListeTxt[v0].field0 = 0;
}
++v30;
} while (v30 <= 10);
if (!_vm->_objectsManager.PERSO_ON) {
v31 = 0;
do {
v5 = v31;
if (_vm->_globals.Liste[v5].field0) {
v6 = _vm->_globals.Liste[v5].field2;
v29 = v6 - 2;
if ((int16)(v6 - 2) < _vm->_graphicsManager.min_x)
v29 = _vm->_graphicsManager.min_x;
v7 = _vm->_globals.Liste[v31].field4;
v24 = v7 - 2;
if ((int16)(v7 - 2) < _vm->_graphicsManager.min_y)
v24 = _vm->_graphicsManager.min_y;
v8 = v6 - 2;
if (v8 < _vm->_graphicsManager.min_x)
v8 = _vm->_graphicsManager.min_x;
v9 = v7 - 2;
if (v9 < _vm->_graphicsManager.min_y)
v9 = _vm->_graphicsManager.min_y;
_vm->_graphicsManager.SCOPY(_vm->_graphicsManager.VESA_SCREEN, v29, v24,
_vm->_globals.Liste[v31].width + 4, _vm->_globals.Liste[v31].height + 4,
_vm->_graphicsManager.VESA_BUFFER, v8, v9);
_vm->_globals.Liste[v5].field0 = 0;
}
++v31;
} while (v31 <= 4);
}
AFF_BOB_ANIM();
AFF_VBOB();
if (!_vm->_objectsManager.PERSO_ON) {
v32 = 0;
do {
_vm->_globals.Liste[v32].field0 = 0;
v10 = v32;
if (Sprite[v10].field0 == 1) {
CALCUL_SPRITE(v32);
if (Sprite[v10].field2A == 1)
AvantTri(2, v32, Sprite[v10].field32 + Sprite[v10].field2E);
}
++v32;
} while (v32 <= 4);
if (_vm->_globals.CACHEFLAG)
VERIFCACHE();
}
if (PRIORITY == 1 && _vm->_globals.NBTRI) {
v33 = 1;
do {
arr[v33] = v33;
++v33;
} while (v33 <= 48);
v25 = _vm->_globals.NBTRI;
do {
v27 = 0;
v34 = 1;
if (v25 > 1) {
v26 = _vm->_globals.NBTRI;
do {
v11 = arr[v34];
v12 = &arr[v34 + 1];
if (_vm->_globals.Tri[arr[v34]].field4 > _vm->_globals.Tri[*v12].field4) {
arr[v34] = *v12;
*v12 = v11;
++v27;
}
++v34;
} while (v34 < v26);
}
} while (v27);
v35 = 1;
if (_vm->_globals.NBTRI + 1 > 1) {
do {
v13 = arr[v35];
if (_vm->_globals.Tri[v13].field0 == 1)
DEF_BOB(_vm->_globals.Tri[v13].field2);
if (_vm->_globals.Tri[v13].field0 == 2)
DEF_SPRITE(_vm->_globals.Tri[v13].field2);
if (_vm->_globals.Tri[v13].field0 == 3)
DEF_CACHE(_vm->_globals.Tri[v13].field2);
_vm->_globals.Tri[v13].field0 = 0;
++v35;
} while (v35 < _vm->_globals.NBTRI + 1);
}
} else {
v36 = 1;
if (_vm->_globals.NBTRI + 1 > 1) {
do {
v14 = v36;
if (_vm->_globals.Tri[v14].field0 == 1)
DEF_BOB(_vm->_globals.Tri[v14].field2);
if (_vm->_globals.Tri[v14].field0 == 2)
DEF_SPRITE(_vm->_globals.Tri[v14].field2);
if (_vm->_globals.Tri[v14].field0 == 3)
DEF_CACHE(_vm->_globals.Tri[v14].field2);
_vm->_globals.Tri[v14].field0 = 0;
++v36;
} while (v36 < _vm->_globals.NBTRI + 1);
}
}
v37 = 0;
do {
v15 = v37;
_vm->_globals.Tri[v15].field0 = 0;
_vm->_globals.Tri[v15].field4 = 0;
_vm->_globals.Tri[v15].field2 = 0;
_vm->_globals.Tri[v15].field6 = 0;
++v37;
} while (v37 <= 49);
_vm->_globals.NBTRI = 0;
if (_vm->_globals.AFFINVEN == 1) {
_vm->_graphicsManager.Restore_Mem(_vm->_graphicsManager.VESA_BUFFER, _vm->_globals.Winventaire, inventairex, inventairey, inventairel, inventaireh);
if (old_cadx && old_cady)
_vm->_graphicsManager.Sprite_Vesa(_vm->_graphicsManager.VESA_BUFFER, inventaire2, old_cadx + 300, old_cady + 300, old_cadi + 1);
if (cadx && cady)
_vm->_graphicsManager.Sprite_Vesa(_vm->_graphicsManager.VESA_BUFFER, inventaire2, cadx + 300, cady + 300, cadi);
_vm->_graphicsManager.Ajoute_Segment_Vesa(inventairex, inventairey, inventairex + inventairel, inventairey + inventaireh);
}
if (SL_FLAG == 1) {
_vm->_graphicsManager.Restore_Mem(_vm->_graphicsManager.VESA_BUFFER, SL_SPR, _vm->_eventsManager.start_x + 183, 60, 0x112u, 353);
if (SL_X && SL_Y)
_vm->_graphicsManager.Sprite_Vesa(_vm->_graphicsManager.VESA_BUFFER, SL_SPR2, SL_X + _vm->_eventsManager.start_x + 300, SL_Y + 300, 0);
_vm->_graphicsManager.Ajoute_Segment_Vesa(_vm->_eventsManager.start_x + 183, 60, _vm->_eventsManager.start_x + 457, 413);
}
if (_vm->_globals.OPTION_FLAG) {
_vm->_graphicsManager.Sprite_Vesa(_vm->_graphicsManager.VESA_BUFFER, _vm->_globals.OPTION_SPR,
_vm->_eventsManager.start_x + 464, 407, 0);
_vm->_graphicsManager.Sprite_Vesa(_vm->_graphicsManager.VESA_BUFFER, _vm->_globals.OPTION_SPR,
_vm->_eventsManager.start_x + 657, 556, _vm->_globals.opt_vitesse);
_vm->_graphicsManager.Sprite_Vesa(_vm->_graphicsManager.VESA_BUFFER, _vm->_globals.OPTION_SPR,
_vm->_eventsManager.start_x + 731, 495, _vm->_globals.opt_txt);
_vm->_graphicsManager.Sprite_Vesa(_vm->_graphicsManager.VESA_BUFFER, _vm->_globals.OPTION_SPR,
_vm->_eventsManager.start_x + 731, 468, _vm->_globals.opt_voice);
_vm->_graphicsManager.Sprite_Vesa(_vm->_graphicsManager.VESA_BUFFER, _vm->_globals.OPTION_SPR,
_vm->_eventsManager.start_x + 731, 441, _vm->_globals.opt_sound);
_vm->_graphicsManager.Sprite_Vesa(_vm->_graphicsManager.VESA_BUFFER, _vm->_globals.OPTION_SPR,
_vm->_eventsManager.start_x + 731, 414, _vm->_globals.opt_music);
_vm->_graphicsManager.Sprite_Vesa(_vm->_graphicsManager.VESA_BUFFER, _vm->_globals.OPTION_SPR,
_vm->_eventsManager.start_x + 600, 522, _vm->_globals.opt_anm);
_vm->_graphicsManager.Sprite_Vesa(_vm->_graphicsManager.VESA_BUFFER, _vm->_globals.OPTION_SPR,
_vm->_eventsManager.start_x + 611, 502, _vm->_globals.opt_scrspeed);
_vm->_graphicsManager.Ajoute_Segment_Vesa(_vm->_eventsManager.start_x + 164, 107, _vm->_eventsManager.start_x + 498, 320);
}
v38 = 0;
do {
v16 = v38;
if (_vm->_fontManager.Txt[v16].field0 == 1) {
if ((uint16)(_vm->_fontManager.Txt[v16].field3FC - 2) > 1)
2012-09-26 22:13:15 +10:00
_vm->_fontManager.BOITE(v38,
_vm->_fontManager.Txt[v16].fieldC, _vm->_fontManager.Txt[v16].field4,
_vm->_eventsManager.start_x + _vm->_fontManager.Txt[v16].field8, _vm->_fontManager.Txt[v16].fieldA);
else
2012-09-26 22:13:15 +10:00
_vm->_fontManager.BOITE(
v38,
_vm->_fontManager.Txt[v16].fieldC,
_vm->_fontManager.Txt[v16].field4,
_vm->_fontManager.Txt[v16].field8,
_vm->_fontManager.Txt[v16].fieldA);
_vm->_fontManager.ListeTxt[v38].field0 = 1;
v17 = v38;
if ((uint16)(_vm->_fontManager.Txt[v17].field3FC - 2) > 1)
_vm->_fontManager.ListeTxt[v38].x1 = _vm->_eventsManager.start_x + _vm->_fontManager.Txt[v17].field8;
else
_vm->_fontManager.ListeTxt[v38].x1 = _vm->_fontManager.Txt[v17].field8;
v18 = v38;
v19 = v38;
_vm->_fontManager.ListeTxt[v18].y1 = _vm->_fontManager.Txt[v19].fieldA;
_vm->_fontManager.ListeTxt[v18].x2 = _vm->_fontManager.Txt[v19].field404;
_vm->_fontManager.ListeTxt[v18].y2 = _vm->_fontManager.Txt[v19].field406;
if (_vm->_fontManager.ListeTxt[v38].x1 < _vm->_graphicsManager.min_x)
_vm->_fontManager.ListeTxt[v38].x1 = _vm->_graphicsManager.min_x - 1;
if (_vm->_fontManager.ListeTxt[v38].y1 < _vm->_graphicsManager.min_y)
_vm->_fontManager.ListeTxt[v38].y1 = _vm->_graphicsManager.min_y - 1;
v20 = _vm->_fontManager.ListeTxt[v38].x1;
if (_vm->_fontManager.ListeTxt[v38].x2 + v20 > _vm->_graphicsManager.max_x)
_vm->_fontManager.ListeTxt[v38].x2 = _vm->_graphicsManager.max_x - v20;
v21 = _vm->_fontManager.ListeTxt[v38].y1;
if (_vm->_fontManager.ListeTxt[v38].y2 + v21 > _vm->_graphicsManager.max_y)
_vm->_fontManager.ListeTxt[v38].y2 = _vm->_graphicsManager.max_y - v21;
if (_vm->_fontManager.ListeTxt[v38].x2 <= 0 || _vm->_fontManager.ListeTxt[v38].y2 <= 0)
_vm->_fontManager.ListeTxt[v18].field0 = 0;
}
++v38;
} while (v38 <= 10);
INVENT_ANIM();
}
2012-09-20 22:02:55 +10:00
void ObjectsManager::INIT_BOB() {
for (int idx = 0; idx < 35; ++idx) {
BOB_ZERO(idx);
}
}
void ObjectsManager::BOB_ZERO(int idx) {
BobItem &bob = _vm->_globals.Bob[idx];
Liste2Item &item = _vm->_globals.Liste2[idx];
bob.field0 = 0;
bob.field4 = PTRNUL;
bob.field8 = 0;
bob.fieldA = 0;
bob.fieldC = 0;
bob.fieldE = 0;
bob.field10 = 0;
bob.field12 = 0;
bob.field14 = 0;
bob.field16 = 0;
bob.field18 = PTRNUL;
bob.field1A = 0;
bob.field1C = 0;
bob.field1E = 0;
bob.field20 = 0;
bob.field22 = 0;
bob.field24 = 0;
bob.field26 = 0;
bob.field28 = 0;
bob.field2A = 0;
bob.field2C = 0;
bob.field30 = PTRNUL;
bob.field34 = 0;
bob.field36 = 0;
bob.field38 = 0;
bob.field46 = 0;
item.field0 = 0;
item.field2 = 0;
item.field4 = 0;
item.width = 0;
item.height = 0;
2012-09-20 22:02:55 +10:00
}
void ObjectsManager::DEF_BOB(int idx) {
int v2;
int v3;
int v4;
int v5;
int v6;
int v7;
int v8;
int v9;
int v10;
int v11;
int v12;
int v13;
v2 = idx;
if (_vm->_globals.Bob[v2].field40) {
v12 = _vm->_globals.Bob[v2].field42;
v13 = _vm->_globals.Bob[v2].field44;
if (_vm->_globals.Bob[v2].field3E)
_vm->_graphicsManager.Sprite_Vesa(_vm->_graphicsManager.VESA_BUFFER, _vm->_globals.Bob[v2].field4,
v12 + 300, v13 + 300, _vm->_globals.Bob[v2].fieldC);
else
_vm->_graphicsManager.Affiche_Perfect(_vm->_graphicsManager.VESA_BUFFER,
_vm->_globals.Bob[v2].field4, v12 + 300,
_vm->_globals.Bob[v2].field44 + 300, _vm->_globals.Bob[v2].fieldC,
_vm->_globals.Bob[v2].field4A, _vm->_globals.Bob[v2].field48,
_vm->_globals.Bob[v2].field38);
v3 = idx;
_vm->_globals.Liste2[v3].field0 = 1;
_vm->_globals.Liste2[v3].field2 = v12;
_vm->_globals.Liste2[v3].field4 = v13;
v4 = idx;
_vm->_globals.Liste2[v3].width = _vm->_globals.Bob[v4].field46;
_vm->_globals.Liste2[v3].height = _vm->_globals.Bob[v4].field48;
v5 = _vm->_globals.Liste2[v3].field2;
v6 = _vm->_graphicsManager.min_x;
if (v5 < _vm->_graphicsManager.min_x) {
_vm->_globals.Liste2[v3].width -= _vm->_graphicsManager.min_x - v5;
_vm->_globals.Liste2[v3].field2 = v6;
}
v7 = _vm->_globals.Liste2[v3].field4;
v8 = _vm->_graphicsManager.min_y;
if (v7 < _vm->_graphicsManager.min_y) {
_vm->_globals.Liste2[v3].height -= _vm->_graphicsManager.min_y - v7;
_vm->_globals.Liste2[v3].field4 = v8;
}
v9 = _vm->_globals.Liste2[v3].field2;
if (_vm->_globals.Liste2[v3].width + v9 > _vm->_graphicsManager.max_x)
_vm->_globals.Liste2[v3].width = _vm->_graphicsManager.max_x - v9;
v10 = _vm->_globals.Liste2[v3].field4;
if (_vm->_globals.Liste2[v3].height + v10 > _vm->_graphicsManager.max_y)
_vm->_globals.Liste2[v3].height = _vm->_graphicsManager.max_y - v10;
if (_vm->_globals.Liste2[v3].width <= 0 || _vm->_globals.Liste2[v3].height <= 0)
_vm->_globals.Liste2[v3].field0 = 0;
v11 = idx;
if (_vm->_globals.Liste2[v11].field0 == 1)
_vm->_graphicsManager.Ajoute_Segment_Vesa(
_vm->_globals.Liste2[v11].field2,
_vm->_globals.Liste2[v11].field4,
_vm->_globals.Liste2[v11].field2 + _vm->_globals.Liste2[v11].width,
_vm->_globals.Liste2[v11].field4 + _vm->_globals.Liste2[v11].height);
}
}
2012-09-20 22:02:55 +10:00
void ObjectsManager::BOB_VISU(int idx) {
int v1;
const byte *data;
int16 v6;
int16 v7;
int16 v8;
int16 v9;
PRIORITY = 1;
if (!_vm->_globals.Bob[idx].field0) {
BOB_ZERO(idx);
data = _vm->_globals.Bqe_Anim[idx].data;
v1 = READ_LE_UINT16(data);
v9 = READ_LE_UINT16(data + 2);
v8 = READ_LE_UINT16(data + 4);
v7 = READ_LE_UINT16(data + 6);
v6 = READ_LE_UINT16(data + 8);
if (READ_LE_UINT16(data)) {
if (_vm->_globals.Bank[idx].field4) {
if (!v9)
v9 = 1;
if (!v6)
v6 = -1;
if (READ_LE_UINT16(data + 24)) {
_vm->_globals.Bob[idx].field3A = 0;
if (_vm->_globals.Bank[idx].fileHeader == 1) {
_vm->_globals.Bob[idx].field3A = 1;
_vm->_globals.Bob[idx].field36 = 0;
_vm->_globals.Bob[idx].field38 = 0;
}
_vm->_globals.Bob[idx].field18 = _vm->_globals.Bqe_Anim[idx].data;
_vm->_globals.Bob[idx].field0 = 10;
_vm->_globals.Bob[idx].field4 = _vm->_globals.Bank[idx].data;
_vm->_globals.Bob[idx].field1E = v9;
_vm->_globals.Bob[idx].field20 = v6;
_vm->_globals.Bob[idx].field22 = v8;
_vm->_globals.Bob[idx].field24 = v7;
}
}
}
}
}
void ObjectsManager::BOB_OFF(int idx) {
if (_vm->_globals.Bob[idx].field0 == 3)
_vm->_globals.Bob[idx].field0 = 4;
else if (_vm->_globals.Bob[idx].field0 == 10)
_vm->_globals.Bob[idx].field0 = 11;
}
void ObjectsManager::BOB_OFFSET(int idx, int v) {
_vm->_globals.Bob[idx].field46 = v;
}
void ObjectsManager::BOB_ADJUST(int idx, int v) {
_vm->_globals.Bob[idx].field46 = v;
}
void ObjectsManager::BOB_OFFSETY(int idx, int v) {
_vm->_globals.Bob[idx].field24 = v;
}
void ObjectsManager::SCBOB(int idx) {
int v1;
2012-09-30 21:21:09 +10:00
int v2;
int v3;
int v4;
int v6;
int v7;
int v8;
2012-09-30 21:21:09 +10:00
int v9;
v1 = idx;
if (_vm->_globals.Cache[idx].fieldA > 0) {
v8 = 0;
do {
v1 = v8;
if (_vm->_globals.Bob[v1].field0) {
if (!_vm->_globals.Bob[v8].field16) {
if (!_vm->_globals.Bob[v8].field34) {
if ( _vm->_globals.Bob[v8].fieldC != 250) {
v2 = _vm->_globals.Bob[v8].field42;;
v9 = _vm->_globals.Bob[v8].field46 + _vm->_globals.Bob[v8].field42;
v6 = _vm->_globals.Bob[v8].field48 + _vm->_globals.Bob[v8].field44;
v3 =_vm->_globals.Cache[idx].field0;
v4 =_vm->_globals.Cache[idx].field4;;
v7 =_vm->_globals.Cache[idx].field6 + v3;
v1 =_vm->_globals.Cache[idx].field14 +_vm->_globals.Cache[idx].field8 + v4;
if (v6 > v4) {
2012-09-30 21:21:09 +10:00
if (v6 < v1) {
v1 = 0;
2012-09-30 21:21:09 +10:00
if (v9 >= v3 && v9 <= (_vm->_globals.Cache[idx].field6 + v3)) {
++_vm->_globals.Cache[idx].fieldA;
v1 = 1;
}
if (!(uint16)v1) {
if (v2 >= v3 && v7 >= v2) {
++_vm->_globals.Cache[idx].fieldA;
v1 = 1;
}
if (!(uint16)v1) {
if ( v7 >= v2 && v2 >= v3 ) {
++_vm->_globals.Cache[idx].fieldA;
v1 = 1;
}
if (!(uint16)v1) {
if (v2 >= v3 && v9 <= v7) {
++_vm->_globals.Cache[idx].fieldA;
v1 = 1;
}
if (!(uint16)v1 && v2 <= v3 && v9 >= v7)
++_vm->_globals.Cache[idx].fieldA;
}
}
}
}
}
}
}
}
}
++v8;
} while (v8 <= 20);
}
}
void ObjectsManager::CALCUL_BOB(int idx) {
int result;
int v3;
int v4;
int v5;
int v6;
int v7;
int v8;
int v9;
int v10;
int v11;
int v13;
int v14;
int v15;
int v17;
2012-09-30 21:21:09 +10:00
int v20;
int v21;
int v22;
_vm->_globals.Bob[idx].field3C = 0;
if (_vm->_globals.Bob[idx].field3A == 1) {
_vm->_globals.Bob[idx].field38 = 0;
_vm->_globals.Bob[idx].field36 = 0;
}
result = _vm->_globals.Bob[idx].fieldC;
if (result != 250) {
if (_vm->_globals.Bob[idx].field38) {
v4 = get_offsetx(_vm->_globals.Bob[idx].field4, result, 1);
v22 = v4;
v15 = v4;
v5 = get_offsety(_vm->_globals.Bob[idx].field4, _vm->_globals.Bob[idx].fieldC, 1);
} else {
v3 = get_offsetx(_vm->_globals.Bob[idx].field4, result, 0);
v22 = v3;
v15 = v3;
v5 = get_offsety(_vm->_globals.Bob[idx].field4, _vm->_globals.Bob[idx].fieldC, 0);
}
v17 = v5;
v6 = v5;
v21 = 0;
v20 = 0;
v7 = _vm->_globals.Bob[idx].field36;
2012-09-30 21:21:09 +10:00
if (v7 < 0) {
v7 = v7;
if (v7 < 0)
v7 = -v7;
v20 = v7;
2012-09-30 21:21:09 +10:00
if (v7 > 95)
v20 = 95;
}
if (_vm->_globals.Bob[idx].field36 > 0)
v21 = _vm->_globals.Bob[idx].field36;
if (v21) {
if (v15 >= 0) {
v22 = _vm->_graphicsManager.Reel_Zoom(v15, v21);
} else {
v8 = v15;
if (v15 < 0)
v8 = -v15;
v15 = v8;
2012-09-30 21:21:09 +10:00
v22 = -_vm->_graphicsManager.Reel_Zoom(v8, v21);
}
if (v6 >= 0) {
v17 = _vm->_graphicsManager.Reel_Zoom(v6, v21);
} else {
v9 = v15;
if (v15 < 0)
v9 = -v15;
v6 = v9;
2012-09-30 21:21:09 +10:00
v17 = -_vm->_graphicsManager.Reel_Zoom(v9, v21);
}
}
if (v20) {
if (v15 >= 0) {
v22 = _vm->_graphicsManager.Reel_Reduc(v15, v20);
} else {
v10 = v15;
if (v15 < 0)
v10 = -v15;
v15 = v10;
2012-09-30 21:21:09 +10:00
v22 = -_vm->_graphicsManager.Reel_Reduc(v10, v20);
}
if (v6 >= 0) {
v17 = _vm->_graphicsManager.Reel_Reduc(v6, v20);
} else {
v11 = v15;
if (v15 < 0)
v11 = -v15;
2012-09-30 21:21:09 +10:00
v17 = -_vm->_graphicsManager.Reel_Reduc(v11, v20);
}
}
idx = idx;
v13 = _vm->_globals.Bob[idx].field8 - v22;
v14 = _vm->_globals.Bob[idx].fieldA - v17;
_vm->_globals.Bob[idx].field3C = 1;
_vm->_globals.Bob[idx].field3E = v13;
_vm->_globals.Bob[idx].field40 = v14;
_vm->_globals.Bob[idx].field48 = v21;
_vm->_globals.Bob[idx].field4A = v20;
_vm->_globals.Liste2[idx].field0 = 1;
_vm->_globals.Liste2[idx].field2 = v13;
_vm->_globals.Liste2[idx].field4 = v14;
int width = Get_Largeur(_vm->_globals.Bob[idx].field4, _vm->_globals.Bob[idx].fieldC);
int height = Get_Hauteur(_vm->_globals.Bob[idx].field4, _vm->_globals.Bob[idx].fieldC);
if (v21) {
width = _vm->_graphicsManager.Reel_Zoom(width, v21);
height = _vm->_graphicsManager.Reel_Zoom(height, v21);
}
if (v20) {
height = _vm->_graphicsManager.Reel_Reduc(height, v20);
width = _vm->_graphicsManager.Reel_Reduc(width, v20);
}
_vm->_globals.Liste2[idx].width = width;
_vm->_globals.Liste2[idx].height = height;
_vm->_globals.Bob[idx].field42 = width;
_vm->_globals.Bob[idx].field44 = height;
}
}
void ObjectsManager::VERIFCACHE() {
int v1;
2012-09-30 21:21:09 +10:00
int v2;
int v3;
int v4;
int v5;
int v6;
int v7;
int v8;
int v9;
int v10;
int v11;
v8 = 0;
do {
if (_vm->_globals.Cache[v8].fieldA > 0) {
v7 = _vm->_globals.Cache[v8].fieldA;
v10 = 0;
do {
if (Sprite[v10].field0 == 1) {
if (Sprite[v10].field10 != 250) {
v1 = Sprite[v10].field2C;
v11 = Sprite[v10].field30 + v1;
v2 = Sprite[v10].field32 + Sprite[v10].field2E;
v6 = _vm->_globals.Cache[v8].field0;
v3 = _vm->_globals.Cache[v8].field4;
v9 = _vm->_globals.Cache[v8].field6 + v6;
if (v2 > v3) {
if (v2 < (_vm->_globals.Cache[v8].field14 + _vm->_globals.Cache[v8].field8 + v3)) {
v4 = 0;
if (v11 >= v6 && v11 <= v9) {
++_vm->_globals.Cache[v8].fieldA;
v4 = 1;
}
if (!v4) {
if (v6 <= v1 && v9 >= v1) {
++_vm->_globals.Cache[v8].fieldA;
v4 = 1;
}
if (!v4) {
if (v9 >= v1 && v6 <= v1) {
++_vm->_globals.Cache[v8].fieldA;
v4 = 1;
}
if (!v4) {
if (v6 <= v1 && v11 <= v9) {
++_vm->_globals.Cache[v8].fieldA;
v4 = 1;
}
if (!v4 && v6 >= v1 && v11 >= v9)
++_vm->_globals.Cache[v8].fieldA;
}
}
}
}
}
}
}
++v10;
} while (v10 <= 4);
SCBOB(v8);
if (_vm->_globals.Cache[v8].fieldA == v7) {
if (_vm->_globals.Cache[v8].field10 == 1) {
_vm->_globals.Cache[v8].field10 = 0;
_vm->_globals.Cache[v8].fieldA = 1;
}
} else {
v5 = _vm->_globals.Cache[v8].field14 + _vm->_globals.Cache[v8].field8 +
_vm->_globals.Cache[v8].field4;
if (v5 > 440)
v5 = 500;
AvantTri(3, v8, v5);
_vm->_globals.Cache[v8].fieldA = 1;
_vm->_globals.Cache[v8].field10 = 1;
}
}
++v8;
} while (v8 <= 19);
}
void ObjectsManager::INVENT_ANIM() {
int v0;
2012-09-30 21:21:09 +10:00
int v1;
if (!DESACTIVE_INVENT) {
if (FLAG_VISIBLE_EFFACE && !FLAG_VISIBLE) {
_vm->_graphicsManager.SCOPY(_vm->_graphicsManager.VESA_SCREEN, I_old_x, 27, 48, 38,
_vm->_graphicsManager.VESA_BUFFER, I_old_x, 27);
_vm->_graphicsManager.Ajoute_Segment_Vesa(I_old_x, 27, I_old_x + 48, 65);
--FLAG_VISIBLE_EFFACE;
}
if (FLAG_VISIBLE) {
if (I_old_x <= 1)
I_old_x = 2;
_vm->_graphicsManager.SCOPY(_vm->_graphicsManager.VESA_SCREEN, I_old_x, 27, 48, 38,
_vm->_graphicsManager.VESA_BUFFER, I_old_x, 27);
_vm->_graphicsManager.Ajoute_Segment_Vesa(I_old_x, 27, I_old_x + 48, 65);
v0 = _vm->_graphicsManager.ofscroll + 2;
v1 = _vm->_graphicsManager.ofscroll + 2;
_vm->_graphicsManager.Sprite_Vesa(_vm->_graphicsManager.VESA_BUFFER, _vm->_globals.ICONE, v1 + 300, 327, 0);
_vm->_graphicsManager.Ajoute_Segment_Vesa(v1, 27, v1 + 45, 62);
I_old_x = v0;
}
if (_vm->_globals.SAUVEGARDE->data[svField357] == 1) {
if (_vm->_globals.SAUVEGARDE->data[svField353] == 1)
_vm->_graphicsManager.Affiche_Perfect(_vm->_graphicsManager.VESA_BUFFER, _vm->_globals.TETE, 832, 325, 0, 0, 0, 0);
if (_vm->_globals.SAUVEGARDE->data[svField355] == 1)
_vm->_graphicsManager.Affiche_Perfect(_vm->_graphicsManager.VESA_BUFFER, _vm->_globals.TETE, 866, 325, 1, 0, 0, 0);
_vm->_graphicsManager.Ajoute_Segment_Vesa(532, 25, 560, 60);
_vm->_graphicsManager.Ajoute_Segment_Vesa(566, 25, 594, 60);
}
if (_vm->_globals.SAUVEGARDE->data[svField356] == 1) {
_vm->_graphicsManager.Affiche_Perfect(_vm->_graphicsManager.VESA_BUFFER, _vm->_globals.TETE, 832, 325, 0, 0, 0, 0);
_vm->_graphicsManager.Ajoute_Segment_Vesa(532, 25, 560, 60);
}
if (_vm->_globals.SAUVEGARDE->data[svField354] == 1) {
_vm->_graphicsManager.Affiche_Perfect(_vm->_graphicsManager.VESA_BUFFER, _vm->_globals.TETE, 832, 325, 0, 0, 0, 0);
_vm->_graphicsManager.Ajoute_Segment_Vesa(532, 25, 560, 60);
}
}
}
void ObjectsManager::DEF_SPRITE(int idx) {
int v2;
int v3;
int v4;
int v5;
int v6;
int v7;
int v8;
int v9;
int v10;
int v11;
int v12;
int v13;
v2 = idx;
if (Sprite[v2].field2A) {
v3 = Sprite[v2].field2C;
v4 = Sprite[v2].field2E;
if (Sprite[v2].field28)
_vm->_graphicsManager.Sprite_Vesa(_vm->_graphicsManager.VESA_BUFFER, Sprite[v2].spriteData,
v3 + 300, v4 + 300, Sprite[v2].field10);
else
_vm->_graphicsManager.Affiche_Perfect(_vm->_graphicsManager.VESA_BUFFER, Sprite[v2].spriteData,
v3 + 300, v4 + 300, Sprite[v2].field10, Sprite[v2].field36, Sprite[v2].field34, Sprite[v2].fieldE);
v5 = idx;
v6 = idx;
_vm->_globals.Liste[v5].width = Sprite[v6].field30;
_vm->_globals.Liste[v5].height = Sprite[v6].field32;
v7 = _vm->_globals.Liste[v5].field2;
v8 = _vm->_graphicsManager.min_x;
if (v7 < _vm->_graphicsManager.min_x) {
_vm->_globals.Liste[v5].width -= _vm->_graphicsManager.min_x - v7;
_vm->_globals.Liste[v5].field2 = v8;
}
v9 = _vm->_globals.Liste[v5].field4;
v10 = _vm->_graphicsManager.min_y;
if (v9 < _vm->_graphicsManager.min_y) {
_vm->_globals.Liste[v5].height -= _vm->_graphicsManager.min_y - v9;
_vm->_globals.Liste[v5].field4 = v10;
}
v11 = _vm->_globals.Liste[v5].field2;
if (_vm->_globals.Liste[v5].width + v11 > _vm->_graphicsManager.max_x)
_vm->_globals.Liste[v5].width = _vm->_graphicsManager.max_x - v11;
v12 = _vm->_globals.Liste[v5].field4;
if ( _vm->_globals.Liste[v5].height + v12 > _vm->_graphicsManager.max_y)
_vm->_globals.Liste[v5].height = _vm->_graphicsManager.max_y - v12;
if ( _vm->_globals.Liste[v5].width <= 0 || _vm->_globals.Liste[v5].height <= 0)
_vm->_globals.Liste[v5].field0 = 0;
v13 = idx;
if (_vm->_globals.Liste[v13].field0 == 1)
_vm->_graphicsManager.Ajoute_Segment_Vesa(
_vm->_globals.Liste[v13].field2,
_vm->_globals.Liste[v13].field4,
_vm->_globals.Liste[v13].field2 + _vm->_globals.Liste[v13].width,
_vm->_globals.Liste[v13].field4 + _vm->_globals.Liste[v13].height);
}
}
void ObjectsManager::DEF_CACHE(int idx) {
_vm->_graphicsManager.Sprite_Vesa(_vm->_graphicsManager.VESA_BUFFER, _vm->_globals.CACHE_BANQUE[1],
_vm->_globals.Cache[idx].field0 + 300, _vm->_globals.Cache[idx].field4 + 300,
_vm->_globals.Cache[idx].field2);
_vm->_graphicsManager.Ajoute_Segment_Vesa(_vm->_globals.Cache[idx].field0,
_vm->_globals.Cache[idx].field4,
_vm->_globals.Cache[idx].field0 + _vm->_globals.Cache[idx].field6,
_vm->_globals.Cache[idx].field4 + _vm->_globals.Cache[idx].field8);
}
void ObjectsManager::CALCUL_SPRITE(int idx) {
int width, height;
int v3;
int v4;
int v5;
int v6;
int v7;
int v8;
int v9;
int v10;
int v11;
int v12;
int v13;
int v15;
int v16;
int v17;
int v22;
Sprite[idx + 42].field2A = 0;
int v0 = Sprite[idx].field10;
if (v0 != 250) {
if (Sprite[idx].fieldE) {
v5 = get_offsetx(Sprite[idx].spriteData, v0, 1);
v22 = Sprite[idx].field12 + v5;
v4 = Sprite[idx].field12 + v5;
v6 = get_offsety(Sprite[idx].spriteData, Sprite[idx].field10, 1);
} else {
v3 = get_offsetx(Sprite[idx].spriteData, v0, 0);
v22 = Sprite[idx].field12 + v3;
v4 = Sprite[idx].field12 + v3;
v6 = get_offsety(Sprite[idx].spriteData, Sprite[idx].field10, 0);
}
v9 = Sprite[idx].field14 + v6;
v7 = v9;
v8 = v9;
int zoomPercent = 0;
int reducePercent = 0;
v9 = Sprite[idx].fieldC;
2012-09-30 21:21:09 +10:00
if (v9 < 0) {
v9 = v9;
if (v9 < 0)
v9 = -v9;
reducePercent = v9;
2012-09-30 21:21:09 +10:00
if (v9 > 95)
reducePercent = 95;
}
if (Sprite[idx].fieldC > 0)
zoomPercent = Sprite[idx].fieldC;
if (zoomPercent) {
if (v4 >= 0) {
v22 = _vm->_graphicsManager.Reel_Zoom(v4, zoomPercent);
} else {
v10 = v4;
if (v4 < 0)
v10 = -v4;
v4 = v10;
2012-09-30 21:21:09 +10:00
v22 = -_vm->_graphicsManager.Reel_Zoom(v10, zoomPercent);
}
if (v8 >= 0) {
v7 = _vm->_graphicsManager.Reel_Zoom(v8, zoomPercent);
} else {
v11 = v4;
if (v4 < 0)
v11 = -v4;
v8 = v11;
2012-09-30 21:21:09 +10:00
v7 = -_vm->_graphicsManager.Reel_Zoom(v11, zoomPercent);
}
}
if (reducePercent) {
if (v4 >= 0) {
v22 = _vm->_graphicsManager.Reel_Reduc(v4, reducePercent);
} else {
v12 = v4;
if (v4 < 0)
v12 = -v4;
v4 = v12;
2012-09-30 21:21:09 +10:00
v22 = -_vm->_graphicsManager.Reel_Reduc(v12, reducePercent);
}
if (v8 >= 0) {
v7 = _vm->_graphicsManager.Reel_Reduc(v8, reducePercent);
} else {
v13 = v4;
if (v4 < 0)
v13 = -v4;
2012-09-30 21:21:09 +10:00
v7 = -_vm->_graphicsManager.Reel_Reduc(v13, reducePercent);
}
}
v15 = Sprite[idx].field8 - v22;
v16 = Sprite[idx].fieldA - v7;
Sprite[idx].field2C = v15;
Sprite[idx].field2E = v16;
Sprite[idx].field2A = 1;
Sprite[idx].field34 = zoomPercent;
Sprite[idx].field36 = reducePercent;
v17 = idx;
_vm->_globals.Liste[v17].field0 = 1;
_vm->_globals.Liste[v17].field2 = v15;
_vm->_globals.Liste[v17].field4 = v16;
width = Get_Largeur(Sprite[idx].spriteData, Sprite[idx].field10);
height = Get_Hauteur(Sprite[idx].spriteData, Sprite[idx].field10);
if (zoomPercent) {
width = _vm->_graphicsManager.Reel_Zoom(width, zoomPercent);
height = _vm->_graphicsManager.Reel_Zoom(height, zoomPercent);
}
if (reducePercent) {
height = _vm->_graphicsManager.Reel_Reduc(height, reducePercent);
width = _vm->_graphicsManager.Reel_Reduc(width, reducePercent);
}
Sprite[idx].field30 = width;
Sprite[idx].field32 = height;
}
}
int ObjectsManager::AvantTri(int a1, int a2, int a3) {
int result;
++_vm->_globals.NBTRI;
if (_vm->_globals.NBTRI > 48)
error("NBTRI TROP GRAND");
result = _vm->_globals.NBTRI;
_vm->_globals.Tri[result].field0 = a1;
_vm->_globals.Tri[result].field2 = a2;
_vm->_globals.Tri[result].field4 = a3;
return result;
}
void ObjectsManager::AFF_BOB_ANIM() {
2012-09-30 21:21:09 +10:00
int v1;
int v2;
2012-09-30 21:21:09 +10:00
int v5;
int v6;
int v7;
int v8;
2012-09-30 21:21:09 +10:00
int v10;
int v11;
int v12;
int v13;
int v14;
int v18;
int v19;
byte *v20;
byte *v21;
int v22;
int v24;
int v26;
int v27;
int v28;
int idx = 0;
do {
++idx;
if (idx <= 20 && _vm->_objectsManager.PERSO_ON == 1) {
_vm->_globals.Bob[idx].field1C = 0;
continue;
}
if (_vm->_globals.Bob[idx].field0 == 10) {
_vm->_globals.Bob[idx].field1C = 0;
v1 = _vm->_globals.Bob[idx].field20;
if (v1 == -1)
v1 = 50;
if (_vm->_globals.Bob[idx].field18 == PTRNUL || _vm->_globals.Bob[idx].field16 || v1 <= 0)
goto LABEL_38;
v2 = _vm->_globals.Bob[idx].field14;
if (_vm->_globals.Bob[idx].field12 == v2) {
_vm->_globals.Bob[idx].field1C = 1;
} else {
_vm->_globals.Bob[idx].field14 = v2 + 1;
_vm->_globals.Bob[idx].field1C = 0;
}
if (_vm->_globals.Bob[idx].field1C != 1)
goto LABEL_38;
v20 = _vm->_globals.Bob[idx].field18 + 20;
v24 = _vm->_globals.Bob[idx].field10;
_vm->_globals.Bob[idx].field8 = READ_LE_UINT16(v20 + 2 * v24);
if (_vm->_globals.BL_ANIM[idx].v1 == 1)
_vm->_globals.Bob[idx].field8 = _vm->_globals.BL_ANIM[idx].v2;
if ( _vm->_objectsManager.PERSO_ON == 1 && idx > 20 )
_vm->_globals.Bob[idx].field8 += _vm->_eventsManager.start_x;
_vm->_globals.Bob[idx].fieldA = READ_LE_UINT16(v20 + 2 * v24 + 2);
_vm->_globals.Bob[idx].field12 = READ_LE_UINT16(v20 + 2 * v24 + 4);
_vm->_globals.Bob[idx].field36 = READ_LE_UINT16(v20 + 2 * v24 + 6);
_vm->_globals.Bob[idx].fieldC = *(v20 + 2 * v24 + 8);
_vm->_globals.Bob[idx].field38 = *(v20 + 2 * v24 + 9);
_vm->_globals.Bob[idx].field10 += 5;
v5 = _vm->_globals.Bob[idx].field12;
if (v5 > 0) {
v6 = v5 / _vm->_globals.vitesse;
_vm->_globals.Bob[idx].field12 = v5 / _vm->_globals.vitesse;
if (v6 > 0) {
LABEL_37:
_vm->_globals.Bob[idx].field14 = 1;
LABEL_38:
v12 = idx;
if ((unsigned int)(_vm->_globals.Bob[v12].field1E - 1) <= 1u)
_vm->_globals.Bob[v12].field1C = 1;
continue;
}
_vm->_globals.Bob[idx].field12 = 1;
}
if (!_vm->_globals.Bob[idx].field12) {
v7 = _vm->_globals.Bob[idx].field20;
if (v7 > 0)
_vm->_globals.Bob[idx].field20 = v7 - 1;
v8 = _vm->_globals.Bob[idx].field20;
if (v8 != -1 && v8 <= 0) {
_vm->_globals.Bob[idx].field0 = 11;
} else {
_vm->_globals.Bob[idx].field10 = 0;
v21 = _vm->_globals.Bob[idx].field18 + 20;
_vm->_globals.Bob[idx].field8 = READ_LE_UINT16(v21);
if (_vm->_globals.BL_ANIM[idx].v1 == 1)
_vm->_globals.Bob[idx].field8 = _vm->_globals.BL_ANIM[idx].v2;
if (_vm->_objectsManager.PERSO_ON == 1 && idx > 20)
_vm->_globals.Bob[idx].field8 += _vm->_eventsManager.start_x;
_vm->_globals.Bob[idx].fieldA = READ_LE_UINT16(v21 + 2);
_vm->_globals.Bob[idx].field12 = READ_LE_UINT16(v21 + 4);
_vm->_globals.Bob[idx].field36 = READ_LE_UINT16(v21 + 6);
_vm->_globals.Bob[idx].fieldC = *(v21 + 8);
_vm->_globals.Bob[idx].field38 = *(v21 + 9);
_vm->_globals.Bob[idx].field10 += 5;
v10 = _vm->_globals.Bob[idx].field12;
if (v10 > 0) {
v11 = v10 / _vm->_globals.vitesse;
_vm->_globals.Bob[idx].field12 = v10 / _vm->_globals.vitesse;
if (v11 <= 0)
_vm->_globals.Bob[idx].field12 = 1;
}
}
}
goto LABEL_37;
}
} while (idx != 35);
if (!_vm->_objectsManager.PERSO_ON && BOBTOUS == 1) {
v26 = 0;
do {
v13 = v26;
if (_vm->_globals.Bob[v13].field0 == 10 && !_vm->_globals.Bob[v13].field16)
_vm->_globals.Bob[v13].field1C = 1;
++v26;
} while (v26 != 35);
}
BOBTOUS = 0;
v27 = 0;
do {
++v27;
if (v27 > 20 || _vm->_objectsManager.PERSO_ON != 1) {
if (_vm->_globals.Bob[v27].field0 == 10) {
if (_vm->_globals.Bob[v27].field1C == 1) {
v14 = _vm->_globals.Bob[v27].field1E;
if (v14 != 2) {
if (v14 != 4) {
if (_vm->_globals.Liste2[v27].field0) {
_vm->_graphicsManager.SCOPY(_vm->_graphicsManager.VESA_SCREEN,
_vm->_globals.Liste2[v27].field2, _vm->_globals.Liste2[v27].field4,
_vm->_globals.Liste2[v27].width, _vm->_globals.Liste2[v27].height,
_vm->_graphicsManager.VESA_BUFFER, _vm->_globals.Liste2[v27].field2,
_vm->_globals.Liste2[v27].field4);
_vm->_globals.Liste2[v27].field0 = 0;
}
}
}
}
}
v22 = v27;
if (_vm->_globals.Bob[v22].field0 == 11) {
if (_vm->_globals.Liste2[v27].field0) {
_vm->_graphicsManager.SCOPY(_vm->_graphicsManager.VESA_SCREEN,
_vm->_globals.Liste2[v27].field2, _vm->_globals.Liste2[v27].field4,
_vm->_globals.Liste2[v27].width, _vm->_globals.Liste2[v27].height,
_vm->_graphicsManager.VESA_BUFFER,
_vm->_globals.Liste2[v27].field2, _vm->_globals.Liste2[v27].field4);
_vm->_globals.Liste2[v27].field0 = 0;
}
_vm->_globals.Bob[v22].field0 = 0;
}
}
} while (v27 != 35);
v28 = 0;
do {
++v28;
v18 = v28;
_vm->_globals.Bob[v18].field40 = 0;
if (_vm->_globals.Bob[v18].field0 == 10 && !_vm->_globals.Bob[v18].field16 && _vm->_globals.Bob[v18].field1C == 1) {
CALCUL_BOB(v28);
int v = _vm->_globals.Bob[v18].field44 + _vm->_globals.Bob[v18].field40;
v19 = _vm->_globals.Bob[v18].field46 + v;
if (v19 > 450)
v19 = 600;
if (_vm->_globals.Bob[v18].field3C == 1)
AvantTri(1, v28, v19);
}
} while (v28 != 35);
}
void ObjectsManager::AFF_VBOB() {
int width, height;
int idx = 0;
do {
if (_vm->_globals.VBob[idx].field4 == 4) {
width = Get_Largeur(_vm->_globals.VBob[idx].field0, _vm->_globals.VBob[idx].fieldA);
height = Get_Hauteur(_vm->_globals.VBob[idx].field0, _vm->_globals.VBob[idx].fieldA);
_vm->_graphicsManager.Restore_Mem(_vm->_graphicsManager.VESA_SCREEN,
_vm->_globals.VBob[idx].field10, _vm->_globals.VBob[idx].field6,
_vm->_globals.VBob[idx].field8,
width, height);
_vm->_graphicsManager.Restore_Mem(
_vm->_graphicsManager.VESA_BUFFER, _vm->_globals.VBob[idx].field10,
_vm->_globals.VBob[idx].field6, _vm->_globals.VBob[idx].field8,
width, height);
_vm->_graphicsManager.Ajoute_Segment_Vesa(
_vm->_globals.VBob[idx].field6, _vm->_globals.VBob[idx].field8,
_vm->_globals.VBob[idx].field6 + width,
height + _vm->_globals.VBob[idx].field8);
if (PTRNUL != _vm->_globals.VBob[idx].field10)
_vm->_globals.dos_free2(_vm->_globals.VBob[idx].field10);
_vm->_globals.VBob[idx].field4 = 0;
_vm->_globals.VBob[idx].field10 = PTRNUL;
_vm->_globals.VBob[idx].field0 = PTRNUL;
_vm->_globals.VBob[idx].field6 = 0;
_vm->_globals.VBob[idx].field8 = 0;
_vm->_globals.VBob[idx].field14 = 0;
_vm->_globals.VBob[idx].field16 = 0;
_vm->_globals.VBob[idx].fieldA = 0;
_vm->_globals.VBob[idx].field18 = 0;
_vm->_globals.VBob[idx].field1C = PTRNUL;
}
if (_vm->_globals.VBob[idx].field4 == 3) {
width = Get_Largeur(_vm->_globals.VBob[idx].field1C, _vm->_globals.VBob[idx].field18);
height = Get_Hauteur(_vm->_globals.VBob[idx].field1C, _vm->_globals.VBob[idx].field18);
_vm->_graphicsManager.Restore_Mem(_vm->_graphicsManager.VESA_SCREEN,
_vm->_globals.VBob[idx].field10, _vm->_globals.VBob[idx].field14,
_vm->_globals.VBob[idx].field16,
width, height);
_vm->_graphicsManager.Restore_Mem(_vm->_graphicsManager.VESA_BUFFER,
_vm->_globals.VBob[idx].field10, _vm->_globals.VBob[idx].field14,
_vm->_globals.VBob[idx].field16,
width, height);
_vm->_graphicsManager.Ajoute_Segment_Vesa(_vm->_globals.VBob[idx].field14,
_vm->_globals.VBob[idx].field16, _vm->_globals.VBob[idx].field14 + width,
_vm->_globals.VBob[idx].field16 + height);
_vm->_globals.VBob[idx].field4 = 1;
_vm->_globals.VBob[idx].field1C = _vm->_globals.VBob[idx].field0;
if (PTRNUL != _vm->_globals.VBob[idx].field10)
_vm->_globals.dos_free2(_vm->_globals.VBob[idx].field10);
_vm->_globals.VBob[idx].field10 = PTRNUL;
_vm->_globals.VBob[idx].field14 = _vm->_globals.VBob[idx].field6;
_vm->_globals.VBob[idx].field16 = _vm->_globals.VBob[idx].field8;
_vm->_globals.VBob[idx].field18 = _vm->_globals.VBob[idx].fieldA;
}
if (_vm->_globals.VBob[idx].field4 == 1) {
width = Get_Largeur(_vm->_globals.VBob[idx].field0, _vm->_globals.VBob[idx].fieldA);
height = Get_Hauteur(_vm->_globals.VBob[idx].field0, _vm->_globals.VBob[idx].fieldA);
if (PTRNUL != _vm->_globals.VBob[idx].field10)
_vm->_globals.dos_free2(_vm->_globals.VBob[idx].field10);
byte *surface = _vm->_globals.dos_malloc2(height * width);
_vm->_globals.VBob[idx].field10 = surface;
_vm->_graphicsManager.Capture_Mem(_vm->_graphicsManager.VESA_SCREEN, surface,
_vm->_globals.VBob[idx].field6, _vm->_globals.VBob[idx].field8, width, height);
byte *v10 = _vm->_globals.VBob[idx].field0;
if (*v10 == 78) {
_vm->_graphicsManager.Affiche_Perfect(_vm->_graphicsManager.VESA_SCREEN, v10,
_vm->_globals.VBob[idx].field6 + 300,
_vm->_globals.VBob[idx].field8 + 300,
_vm->_globals.VBob[idx].fieldA,
0, 0, 0);
_vm->_graphicsManager.Affiche_Perfect(_vm->_graphicsManager.VESA_BUFFER,
_vm->_globals.VBob[idx].field0,
_vm->_globals.VBob[idx].field6 + 300, _vm->_globals.VBob[idx].field8 + 300,
_vm->_globals.VBob[idx].fieldA,
0, 0, 0);
} else {
_vm->_graphicsManager.Sprite_Vesa(_vm->_graphicsManager.VESA_BUFFER,
v10, _vm->_globals.VBob[idx].field6 + 300, _vm->_globals.VBob[idx].field8 + 300,
_vm->_globals.VBob[idx].fieldA);
_vm->_graphicsManager.Sprite_Vesa(_vm->_graphicsManager.VESA_SCREEN, _vm->_globals.VBob[idx].field0,
_vm->_globals.VBob[idx].field6 + 300, _vm->_globals.VBob[idx].field8 + 300,
_vm->_globals.VBob[idx].fieldA);
}
_vm->_graphicsManager.Ajoute_Segment_Vesa(_vm->_globals.VBob[idx].field6,
_vm->_globals.VBob[idx].field8, _vm->_globals.VBob[idx].field6 + width,
_vm->_globals.VBob[idx].field8 + height);
_vm->_globals.VBob[idx].field4 = 2;
}
++idx;
} while ( idx <= 29 );
}
int ObjectsManager::XSPR(int idx) {
if (idx > 5)
error("request of the Coord. x a sprite > MAX_SPRITE.");
return Sprite[idx].field8;
}
int ObjectsManager::YSPR(int idx) {
if (idx > 5)
error("request of the Coord. y a sprite > MAX_SPRITE.");
return Sprite[idx].fieldA;
}
void ObjectsManager::SPRITE_NOW(const byte *spriteData, int a2, int a3, int a4, int a5, int a6, int a7, int a8) {
_vm->_graphicsManager.Affiche_Perfect(_vm->_graphicsManager.VESA_BUFFER, spriteData, a2, a3, a5, a6, a7, a8);
}
void ObjectsManager::CLEAR_SPR() {
int idx;
idx = 0;
do {
Sprite[idx].field1C = PTRNUL;
Sprite[idx].spriteData = PTRNUL;
Sprite[idx].field0 = 0;
++idx;
} while (idx <= 4);
idx = 0;
do {
_vm->_globals.Liste[idx].field0 = 0;
_vm->_globals.Liste[idx].field2 = 0;
_vm->_globals.Liste[idx].field4 = 0;
_vm->_globals.Liste[idx].width = 0;
_vm->_globals.Liste[idx].height = 0;
_vm->_globals.Liste[idx].fieldA = 0;
++idx;
} while (idx <= 4);
}
void ObjectsManager::SPRITE_ON(int idx) {
if (idx > 5)
error("Tentative d'affichage d'un sprite > MAX_SPRITE.");
Sprite[idx].field0 = 1;
}
void ObjectsManager::SPRITE(const byte *spriteData, int a2, int a3, int idx, int a5, int a6, int a7, int a8, int a9) {
if (idx > 5)
error("Tentative d'affichage d'un sprite > MAX_SPRITE.");
Sprite[idx].spriteData = spriteData;
Sprite[idx].field8 = a2;
Sprite[idx].fieldA = a3;
Sprite[idx].field10 = a5;
Sprite[idx].fieldC = a6;
Sprite[idx].field12 = a8;
Sprite[idx].field14 = a9;
Sprite[idx].field1C = PTRNUL;
Sprite[idx].field20 = 0;
Sprite[idx].field24 = 0;
Sprite[idx].field26 = 0;
Sprite[idx].field22 = 0;
Sprite[idx].field0 = 0;
Sprite[idx].field28 = 0;
Sprite[idx].fieldE = a7;
if (*spriteData == 'R' && *(spriteData + 1) == 'L' && *(spriteData + 2) == 'E')
Sprite[idx].field28 = 1;
if (Sprite[idx].field28 == 1) {
Sprite[idx].fieldC = 0;
Sprite[idx].fieldE = 0;
}
}
void ObjectsManager::SPRITE2(const byte *spriteData, int idx, byte *a3, int a4, int a5) {
Sprite[idx].spriteData = spriteData;
Sprite[idx].field1C = a3;
Sprite[idx].field20 = a4;
Sprite[idx].field24 = 0;
Sprite[idx].field26 = 0;
Sprite[idx].fieldC = 0;
Sprite[idx].fieldE = 0;
Sprite[idx].field0 = 1;
Sprite[idx].field22 = 0;
Sprite[idx].field14 = a5;
if (*spriteData == 'R' && *(spriteData + 1) == 'L' && *(spriteData + 2) == 'E')
Sprite[idx].field28 = 1;
if (Sprite[idx].field28 == 1) {
Sprite[idx].fieldC = 0;
Sprite[idx].fieldE = 0;
}
}
void ObjectsManager::SPRITE_OFF(int idx) {
Sprite[idx].field0 = 3;
if (Sprite[idx].field1C != PTRNUL)
_vm->_globals.dos_free2(Sprite[idx].field1C);
Sprite[idx].field1C = PTRNUL;
}
void ObjectsManager::SPRITE_GEL(int idx) {
Sprite[idx].field0 = 3;
}
int ObjectsManager::SXSPR(int idx) {
if (idx > 5)
error("request of the size of a sprite x > MAX_SPRITE.");
return Get_Largeur(Sprite[idx].spriteData, Sprite[idx].field10);
}
int ObjectsManager::SYSPR(int idx) {
if (idx > 5)
error("request of the size of a sprite y > MAX_SPRITE.");
return Get_Hauteur(Sprite[idx].spriteData, Sprite[idx].field10);
}
int ObjectsManager::POSISPR(int idx) {
return Sprite[idx].field22 / 6;
}
void ObjectsManager::SETPOSISPR(int idx, int a2) {
Sprite[idx].field22 = 6 * a2;
Sprite[idx].field24 = 0;
Sprite[idx].field26 = 0;
}
void ObjectsManager::SETXSPR(int idx, int xp) {
if (idx > 5)
error("Set the Coord. x a sprite> MAX_SPRITE.");
Sprite[idx].field8 = xp;
}
void ObjectsManager::SETANISPR(int idx, int a2) {
if (idx > 5)
error("Set the Coord. x a sprite> MAX_SPRITE.");
Sprite[idx].field10 = a2;
}
void ObjectsManager::SETYSPR(int idx, int yp) {
if ( idx > 5 )
error("Set the Coord. y a sprite> MAX_SPRITE.");
Sprite[idx].fieldA = yp;
}
void ObjectsManager::SETTAILLESPR(int idx, int a2) {
if (idx > 5)
error("Set the Coord. there a sprite> MAX_SPRITE.");
if (Sprite[idx].field28 != 1)
Sprite[idx].fieldC = a2;
}
void ObjectsManager::SETFLIPSPR(int idx, int a2) {
if (Sprite[idx].field28 != 1) {
if (idx > 5)
error("Set the Coord. there a sprite> MAX_SPRITE.");
Sprite[idx].fieldE = a2;
}
}
void ObjectsManager::VERIFZONE() {
2012-09-30 21:21:09 +10:00
int v0;
int v1;
2012-09-30 21:21:09 +10:00
int v2;
uint16 v3;
int v4;
v0 = _vm->_eventsManager.XMOUSE();
v1 = _vm->_eventsManager.YMOUSE();
v2 = v1;
if (_vm->_globals.PLAN_FLAG
|| _vm->_eventsManager.start_x >= v0
|| (v1 = _vm->_graphicsManager.ofscroll + 54, v0 >= v1)
2012-09-30 21:21:09 +10:00
|| (v1 = v2 - 1, (uint16)(v2 - 1) > 0x3Bu)) {
if (FLAG_VISIBLE == 1)
FLAG_VISIBLE_EFFACE = 4;
FLAG_VISIBLE = 0;
} else {
FLAG_VISIBLE = 1;
}
if (FORCEZONE == 1) {
_vm->_globals.compteur_71 = 100;
_vm->_globals.old_zone_68 = -1;
_vm->_globals.old_x_69 = -200;
_vm->_globals.old_y_70 = -220;
FORCEZONE = 0;
}
v3 = _vm->_globals.compteur_71 + 1;
_vm->_globals.compteur_71 = v3;
if (v3 > 1u) {
if (_vm->_globals.NOMARCHE || (_vm->_globals.chemin == PTRNUL) || v3 > 4u) {
_vm->_globals.compteur_71 = 0;
if (_vm->_globals.old_x_69 != v0 || _vm->_globals.old_y_70 != v2) {
v4 = MZONE();
} else {
v4 = _vm->_globals.old_zone_68;
}
if (_vm->_globals.old_zone_68 != v4) {
_vm->_graphicsManager.SETCOLOR4(251, 100, 100, 100);
_vm->_eventsManager.btsouris = 4;
_vm->_eventsManager.CHANGE_MOUSE(4);
if (_vm->_globals.zozo_73 == 1) {
_vm->_fontManager.TEXTE_OFF(5);
_vm->_globals.zozo_73 = 0;
return;
}
if (_vm->_globals.old_zone_68 != v4)
goto LABEL_54;
}
if (v4 != -1) {
LABEL_54:
if (v4 != -1
&& ((_vm->_globals.ZONEP[v4].field6)
|| _vm->_globals.ZONEP[v4].field7
|| _vm->_globals.ZONEP[v4].field8
|| _vm->_globals.ZONEP[v4].field9
|| _vm->_globals.ZONEP[v4].fieldA
|| _vm->_globals.ZONEP[v4].fieldB
|| _vm->_globals.ZONEP[v4].fieldC
|| _vm->_globals.ZONEP[v4].fieldD
|| _vm->_globals.ZONEP[v4].fieldE
|| _vm->_globals.ZONEP[v4].fieldF)) {
if (_vm->_globals.old_zone_68 != v4) {
_vm->_fontManager.DOS_TEXT(5, _vm->_globals.ZONEP[v4].field12, _vm->_globals.FICH_ZONE, 0, 430, 20, 25, 0, 0, 252);
_vm->_fontManager.TEXTE_ON(5);
_vm->_globals.zozo_73 = 1;
}
_vm->_globals.force_to_data_0 += 25;
if (_vm->_globals.force_to_data_0 > 100)
_vm->_globals.force_to_data_0 = 0;
_vm->_graphicsManager.SETCOLOR4(251, _vm->_globals.force_to_data_0, _vm->_globals.force_to_data_0,
_vm->_globals.force_to_data_0);
if (_vm->_eventsManager.btsouris == 4) {
v1 = 5 * v4;
if (_vm->_globals.ZONEP[v4].field6 == 2) {
_vm->_eventsManager.CHANGE_MOUSE(16);
_vm->_eventsManager.btsouris = 16;
verbe = 16;
}
}
} else {
_vm->_graphicsManager.SETCOLOR4(251, 100, 100, 100);
_vm->_eventsManager.btsouris = 4;
_vm->_eventsManager.CHANGE_MOUSE(4);
}
}
_vm->_objectsManager.NUMZONE = v4;
_vm->_globals.old_x_69 = v0;
_vm->_globals.old_y_70 = v2;
_vm->_globals.old_zone_68 = v4;
if (_vm->_globals.NOMARCHE == 1) {
if (_vm->_eventsManager.btsouris == 4) {
v1 = v4 + 1;
2012-09-30 21:21:09 +10:00
if ((uint16)(v4 + 1) > 1u)
BTDROITE();
}
}
if ((_vm->_globals.PLAN_FLAG == 1 && v4 == -1) || !v4) {
verbe = 0;
_vm->_eventsManager.btsouris = 0;
_vm->_eventsManager.CHANGE_MOUSE(0);
}
}
}
}
void ObjectsManager::GOHOME() {
warning("GOHOME");
}
void ObjectsManager::GOHOME2() {
warning("GOHOME2");
}
void ObjectsManager::CHARGE_OBSTACLE(const Common::String &file) {
warning("CHARGE_OBSTACLE");
}
void ObjectsManager::CHARGE_CACHE(const Common::String &file) {
warning("CHARGE_CACHE");
}
void ObjectsManager::CHARGE_ZONE(const Common::String &file) {
warning("CHARGE_ZONE");
}
void ObjectsManager::CARRE_ZONE() {
byte *v3;
int v4;
int v5;
byte *v6;
int v7;
int v8;
int v10;
int v11;
int v12;
int v13;
int v14;
for (int idx = 0; idx < 100; ++idx) {
_vm->_globals.CarreZone[idx].field0 = 0;
_vm->_globals.CarreZone[idx].fieldE = 0;
_vm->_globals.CarreZone[idx].field2 = 1280;
_vm->_globals.CarreZone[idx].field4 = 0;
_vm->_globals.CarreZone[idx].field6 = 460;
_vm->_globals.CarreZone[idx].field8 = 0;
_vm->_globals.CarreZone[idx].fieldA = 401;
_vm->_globals.CarreZone[idx].fieldC = 0;
}
for (int idx = 0; idx < 400; ++idx) {
v3 = _vm->_linesManager.LigneZone[idx].field4;
if (v3 != PTRNUL) {
v4 = _vm->_linesManager.LigneZone[idx].field2;
_vm->_globals.CarreZone[v4].field0 = 1;
if (_vm->_globals.CarreZone[v4].fieldC < idx)
_vm->_globals.CarreZone[v4].fieldC = idx;
if (_vm->_globals.CarreZone[v4].fieldA > idx)
_vm->_globals.CarreZone[v4].fieldA = idx;
v13 = 0;
v12 = _vm->_linesManager.LigneZone[idx].field0;
if (v12 > 0) {
do {
v5 = READ_LE_UINT16(v3);
v6 = v3 + 2;
v11 = READ_LE_UINT16(v6);
v3 = v6 + 2;
if (_vm->_globals.CarreZone[v4].field2 >= v5)
_vm->_globals.CarreZone[v4].field2 = v5;
if (_vm->_globals.CarreZone[v4].field4 <= v5)
_vm->_globals.CarreZone[v4].field4 = v5;
if (_vm->_globals.CarreZone[v4].field6 >= v11)
_vm->_globals.CarreZone[v4].field6 = v11;
if (_vm->_globals.CarreZone[v4].field8 <= v11)
_vm->_globals.CarreZone[v4].field8 = v11;
++v13;
} while (v13 < v12);
}
}
}
v7 = 0;
do {
v8 = v7;
v10 = _vm->_globals.CarreZone[v8].field2 - _vm->_globals.CarreZone[v8].field4;
if (v10 < 0)
v10 = -v10;
v14 = _vm->_globals.CarreZone[v8].field6 - _vm->_globals.CarreZone[v8].field8;
if (v14 < 0)
v14 = -v14;
if (v10 == v14)
_vm->_globals.CarreZone[v8].fieldE = 1;
++v7;
} while (v7 <= 99);
}
void ObjectsManager::PLAN_BETA() {
int v1;
int v2;
int v3;
int v4;
int v5;
v1 = 0;
INVENTFLAG = false;
KEY_INVENT = 0;
_vm->_globals.Max_Propre = 1;
_vm->_globals.Max_Ligne_Long = 1;
_vm->_globals.Max_Propre_Gen = 1;
_vm->_globals.Max_Perso_Y = 440;
_vm->_globals.NOSPRECRAN = 1;
_vm->_globals.PLAN_FLAG = 1;
_vm->_graphicsManager.NOFADE = false;
_vm->_globals.NOMARCHE = 0;
sprite_ptr = PTRNUL;
_vm->_globals.SORTIE = 0;
_vm->_globals.AFFLI = 0;
_vm->_globals.AFFIVBL = 0;
_vm->_globals.NOT_VERIF = 1;
_vm->_soundManager.WSOUND(31);
_vm->_globals.iRegul = 1;
_vm->_graphicsManager.LOAD_IMAGE("PLAN");
CHARGE_OBSTACLE("PLAN.OB2");
CHARGE_CACHE("PLAN.CA2");
CHARGE_ZONE("PLAN.ZO2");
FileManager::CONSTRUIT_SYSTEM("VOITURE.SPR");
sprite_ptr = FileManager::CHARGE_FICHIER(_vm->_globals.NFICHIER);
_vm->_animationManager.CHARGE_ANIM("PLAN");
_vm->_graphicsManager.VISU_ALL();
_vm->_graphicsManager.INI_ECRAN2("PLAN");
v2 = 0;
do {
_vm->_globals.CACHE_OFF(v2++);
} while (v2 <= 15);
_vm->_globals.CACHE_OFF(19);
_vm->_globals.CACHE_OFF(20);
_vm->_globals.CACHE_ON();
if (!_vm->_globals.PLANX && !_vm->_globals.PLANY) {
_vm->_globals.PLANX = 900;
_vm->_globals.PLANY = 319;
_vm->_globals.PLANI = 1;
}
SPRITE(sprite_ptr, _vm->_globals.PLANX, _vm->_globals.PLANY, 0, _vm->_globals.PLANI, 0, 0, 5, 5);
_vm->_eventsManager.souris_xy(_vm->_globals.PLANX, _vm->_globals.PLANY);
my_anim = 0;
_vm->_eventsManager.MOUSE_ON();
v3 = XSPR(0);
_vm->_graphicsManager.SCROLL_ECRAN(v3 - 320);
_vm->_graphicsManager.ofscroll = XSPR(0) - 320;
SPRITE_ON(0);
_vm->_globals.chemin = PTRNUL;
_vm->_graphicsManager.SETCOLOR3(252, 100, 100, 100);
_vm->_graphicsManager.SETCOLOR3(253, 100, 100, 100);
_vm->_graphicsManager.SETCOLOR3(251, 100, 100, 100);
_vm->_graphicsManager.SETCOLOR3(254, 0, 0, 0);
_vm->_globals.BPP_NOAFF = 1;
v4 = 0;
do {
_vm->_eventsManager.VBL();
++v4;
} while (v4 <= 4);
_vm->_globals.BPP_NOAFF = 0;
_vm->_globals.iRegul = 1;
_vm->_graphicsManager.FADE_INW();
_vm->_eventsManager.CHANGE_MOUSE(4);
_vm->_graphicsManager.NOFADE = false;
do {
v5 = _vm->_eventsManager.BMOUSE();
if (v5) {
if (_vm->_globals.SAUVEGARDE->data[svField170] == 1 && !_vm->_globals.SAUVEGARDE->data[svField171]) {
_vm->_globals.SAUVEGARDE->data[svField171] = 1;
_vm->_globals.NOPARLE = true;
_vm->_talkManager.PARLER_PERSO("APPEL1.pe2");
_vm->_globals.NOPARLE = false;
v5 = 0;
}
if (_vm->_globals.SAUVEGARDE->data[svField180] == 1 && !_vm->_globals.SAUVEGARDE->data[svField172]) {
_vm->_globals.SAUVEGARDE->data[svField172] = 1;
_vm->_globals.NOPARLE = 1;
_vm->_talkManager.PARLER_PERSO("APPEL2.pe2");
_vm->_globals.NOPARLE = 0;
v5 = 0;
_vm->_eventsManager.souris_bb = false;
}
if (v5 == 1)
BTGAUCHE();
}
VERIFZONE();
GOHOME2();
if (_vm->_globals.chemin == PTRNUL && _vm->_globals.GOACTION == 1)
PARADISE();
_vm->_eventsManager.VBL();
if (_vm->_globals.SORTIE)
v1 = 1;
} while (v1 != 1);
if (!_vm->_graphicsManager.NOFADE)
_vm->_graphicsManager.FADE_OUTW();
_vm->_globals.iRegul = 0;
_vm->_graphicsManager.NOFADE = false;
_vm->_globals.PLANX = XSPR(0);
_vm->_globals.PLANY = YSPR(0);
_vm->_globals.PLANI = 1;
SPRITE_OFF(0);
_vm->_globals.AFFLI = 0;
sprite_ptr = _vm->_globals.LIBERE_FICHIER(sprite_ptr);
CLEAR_ECRAN();
_vm->_globals.NOSPRECRAN = 0;
_vm->_globals.PLAN_FLAG = 0;
}
void ObjectsManager::BTGAUCHE() {
int v0;
2012-09-30 21:21:09 +10:00
int v1;
int v2;
byte *v3;
byte *v4;
byte *v5;
int v6;
2012-09-30 21:21:09 +10:00
int v7;
int v8;
byte *v9;
2012-09-30 21:21:09 +10:00
int v10;
int v11;
int v12;
byte *v13;
2012-09-30 21:21:09 +10:00
int v14;
int v15;
byte *v16;
2012-09-30 21:21:09 +10:00
int v17;
int v18;
int v19;
_vm->_fontManager.TEXTE_OFF(9);
v19 = _vm->_eventsManager.XMOUSE();
v0 = _vm->_eventsManager.YMOUSE();
if (!INVENTFLAG && !_vm->_globals.PLAN_FLAG && v19 > _vm->_graphicsManager.ofscroll - 30 && v19 < _vm->_graphicsManager.ofscroll + 50 && (uint16)(v0 + 29) <= 0x4Eu) {
v1 = _vm->_eventsManager.btsouris;
INVENTFLAG = 1;
INVENT();
INVENTFLAG = 0;
KEY_INVENT = 0;
if (!_vm->_globals.SORTIE) {
INVENTFLAG = 0;
_vm->_eventsManager.btsouris = v1;
}
return;
}
if (_vm->_globals.SAUVEGARDE->data[svField354] == 1
&& !_vm->_globals.PLAN_FLAG
&& (uint16)(v19 - 533) <= 0x1Au
&& (uint16)(v0 - 26) <= 0x21u) {
CHANGE_TETE(1, 0);
return;
}
if (_vm->_globals.SAUVEGARDE->data[svField356] == 1
&& !_vm->_globals.PLAN_FLAG
&& (uint16)(v19 - 533) <= 0x1Au
&& (uint16)(v0 - 26) <= 0x21u) {
CHANGE_TETE(2, 0);
return;
}
if (_vm->_globals.SAUVEGARDE->data[svField357] == 1) {
if (_vm->_globals.SAUVEGARDE->data[svField353] == 1
&& !_vm->_globals.PLAN_FLAG
&& (uint16)(v19 - 533) <= 0x1Au
&& (uint16)(v0 - 26) <= 0x21u) {
CHANGE_TETE(0, 1);
return;
}
if (_vm->_globals.SAUVEGARDE->data[svField355] == 1
&& !_vm->_globals.PLAN_FLAG
&& (uint16)(v19 - 567) <= 0x1Au
&& (uint16)(v0 - 26) <= 0x21u) {
CHANGE_TETE(0, 2);
return;
}
}
if (_vm->_globals.PLAN_FLAG == 1) {
if (GOACTION != 1)
goto LABEL_38;
VERIFZONE();
if (_vm->_objectsManager.NUMZONE <= 0)
return;
v2 = 0;
v3 = _vm->_globals.essai2;
v4 = _vm->_globals.chemin;
do {
WRITE_LE_UINT16(v3 + 2 * v2, READ_LE_UINT16(v4 + 2 * v2));
++v2;
} while ((int16)READ_LE_UINT16(v4 + 2 * v2) != -1);
v5 = _vm->_globals.essai2;
WRITE_LE_UINT16(_vm->_globals.essai2 + 2 * v2, (uint16)-1);
WRITE_LE_UINT16(v5 + 2 * v2 + 2, (uint16)-1);
WRITE_LE_UINT16(v5 + 2 * v2 + 4, (uint16)-1);
WRITE_LE_UINT16(v5 + 2 * v2 + 6, (uint16)-1);
}
if (GOACTION == 1) {
VERIFZONE();
GOACTION = 0;
_vm->_globals.SAUVEGARDE->data[svField1] = 0;
_vm->_globals.SAUVEGARDE->data[svField2] = 0;
}
LABEL_38:
if (_vm->_globals.PLAN_FLAG == 1 && (_vm->_eventsManager.btsouris != 4 || _vm->_objectsManager.NUMZONE <= 0))
return;
if ((uint16)(_vm->_objectsManager.NUMZONE + 1) > 1u) {
v6 = _vm->_objectsManager.NUMZONE;
v7 = _vm->_globals.ZONEP[v6].field0;
if (v7) {
v8 = _vm->_globals.ZONEP[v6].field2;
if (v8) {
if (v8 != 31) {
v19 = v7;
v0 = v8;
}
}
}
}
GOACTION = 0;
v9 = _vm->_globals.chemin;
_vm->_globals.chemin = PTRNUL;
if (_vm->_globals.FORET && ((uint16)(_vm->_objectsManager.NUMZONE - 20) <= 1u || (uint16)(_vm->_objectsManager.NUMZONE - 22) <= 1u)) {
2012-09-30 21:21:09 +10:00
if (YSPR(0) <= 374 || YSPR(0) > 410) {
v10 = XSPR(0);
v11 = YSPR(0);
v12 = XSPR(0);
v13 = _vm->_linesManager.PARCOURS2(v12, v11, v10, 390);
_vm->_globals.chemin = v13;
if (PTRNUL != v13)
PACOURS_PROPRE(v13);
g_old_x = XSPR(0);
g_old_y = YSPR(0);
_vm->_globals.Compteur = 0;
if (PTRNUL != _vm->_globals.chemin || v9 == _vm->_globals.chemin) {
LABEL_64:
_vm->_globals.g_old_sens = -1;
goto LABEL_65;
}
goto LABEL_63;
}
_vm->_globals.chemin = PTRNUL;
SETANISPR(0, _vm->_globals.g_old_sens2 + 59);
_vm->_globals.ACTION_SENS = 0;
_vm->_globals.chemin = PTRNUL;
VERIFTAILLE();
SETFLIPSPR(0, 0);
_vm->_globals.Compteur = 0;
_vm->_globals.g_old_sens = -1;
goto LABEL_65;
}
if (!_vm->_globals.NOMARCHE) {
if (!_vm->_globals.PLAN_FLAG) {
v14 = YSPR(0);
v15 = XSPR(0);
v16 = _vm->_linesManager.PARCOURS2(v15, v14, v19, v0);
_vm->_globals.chemin = v16;
if (PTRNUL != v16)
PACOURS_PROPRE(v16);
g_old_x = XSPR(0);
g_old_y = YSPR(0);
_vm->_globals.Compteur = 0;
if (PTRNUL != _vm->_globals.chemin || v9 == _vm->_globals.chemin)
goto LABEL_64;
LABEL_63:
_vm->_globals.chemin = v9;
}
LABEL_65:
if (!_vm->_globals.NOMARCHE && _vm->_globals.PLAN_FLAG == 1) {
v17 = YSPR(0);
v18 = XSPR(0);
_vm->_globals.chemin = PARC_VOITURE(v18, v17, v19, v0);
}
}
if ((uint16)(_vm->_objectsManager.NUMZONE + 1) > 1u) {
// TODO: Reformat the weird if statement generated by the decompiler
if (_vm->_eventsManager.btsouris == 23 || (_vm->_globals.SAUVEGARDE->data[svField1] = _vm->_eventsManager.btsouris, _vm->_eventsManager.btsouris == 23))
_vm->_globals.SAUVEGARDE->data[svField1] = 5;
if (_vm->_globals.PLAN_FLAG == 1)
_vm->_globals.SAUVEGARDE->data[svField1] = 6;
_vm->_globals.SAUVEGARDE->data[svField2] = _vm->_objectsManager.NUMZONE;
_vm->_globals.SAUVEGARDE->data[svField3] = _vm->_globals.OBJET_EN_COURS;
GOACTION = 1;
}
_vm->_fontManager.TEXTE_OFF(5);
_vm->_graphicsManager.SETCOLOR4(251, 100, 100, 100);
ARRET_PERSO_FLAG = 0;
if (_vm->_eventsManager.btsouris == 21 && _vm->_globals.BOBZONE[_vm->_objectsManager.NUMZONE]) {
ARRET_PERSO_FLAG = 1;
ARRET_PERSO_NUM = _vm->_globals.BOBZONE[_vm->_objectsManager.NUMZONE];
}
if (_vm->_globals.ECRAN == 20 && _vm->_globals.SAUVEGARDE->data[svField13] == 1 && _vm->_globals.OBJET_EN_COURS == 20 && _vm->_objectsManager.NUMZONE == 12
&& _vm->_eventsManager.btsouris == 23) {
_vm->_globals.chemin = PTRNUL;
XSPR(0);
YSPR(0);
}
}
void ObjectsManager::PARADISE() {
2012-09-30 21:21:09 +10:00
int v1;
char result;
int v3;
uint16 v4;
int v5;
uint16 v6;
v1 = 0;
ARRET_PERSO_FLAG = 0;
ARRET_PERSO_NUM = 0;
result = _vm->_globals.SAUVEGARDE->data[svField1];
if (result && _vm->_globals.SAUVEGARDE->data[svField2] && result != 4 && result > 3) {
_vm->_fontManager.TEXTE_OFF(5);
if (_vm->_globals.FORET != 1 || ((uint16)(_vm->_objectsManager.NUMZONE - 20) > 1u && (uint16)(_vm->_objectsManager.NUMZONE - 22) > 1u)) {
if (_vm->_graphicsManager.DOUBLE_ECRAN == 1) {
_vm->_graphicsManager.no_scroll = 2;
2012-09-30 21:21:09 +10:00
if (_vm->_eventsManager.start_x >= XSPR(0) - 320)
goto LABEL_64;
2012-09-30 21:21:09 +10:00
v3 = _vm->_eventsManager.start_x + 320 - XSPR(0);
if (v3 < 0)
v3 = -v3;
if (v3 <= 160) {
LABEL_64:
2012-09-30 21:21:09 +10:00
if (_vm->_eventsManager.start_x > XSPR(0) - 320) {
v5 = _vm->_eventsManager.start_x + 320 - XSPR(0);
if (v5 < 0)
v5 = -v5;
if (v5 > 160) {
_vm->_graphicsManager.no_scroll = 2;
do {
_vm->_graphicsManager.SCROLL -= _vm->_graphicsManager.SPEED_SCROLL;
if (_vm->_graphicsManager.SCROLL < 0) {
_vm->_graphicsManager.SCROLL = 0;
v1 = 1;
}
if (_vm->_graphicsManager.SCROLL > 640) {
_vm->_graphicsManager.SCROLL = 640;
v1 = 1;
}
2012-09-30 21:21:09 +10:00
if (_vm->_eventsManager.XMOUSE() > _vm->_graphicsManager.SCROLL + 620) {
v6 = _vm->_eventsManager.YMOUSE();
_vm->_eventsManager.souris_xy(_vm->_eventsManager.souris_x - 4, v6);
}
_vm->_eventsManager.VBL();
2012-09-30 21:21:09 +10:00
} while (v1 != 1 && _vm->_eventsManager.start_x > XSPR(0) - 320);
}
}
} else {
do {
_vm->_graphicsManager.SCROLL += _vm->_graphicsManager.SPEED_SCROLL;
if (_vm->_graphicsManager.SCROLL < 0) {
_vm->_graphicsManager.SCROLL = 0;
v1 = 1;
}
if (_vm->_graphicsManager.SCROLL > 640) {
_vm->_graphicsManager.SCROLL = 640;
v1 = 1;
}
2012-09-30 21:21:09 +10:00
if (_vm->_eventsManager.XMOUSE() < _vm->_graphicsManager.SCROLL + 10) {
v4 = _vm->_eventsManager.YMOUSE();
_vm->_eventsManager.souris_xy(_vm->_eventsManager.souris_x + 4, v4);
}
_vm->_eventsManager.VBL();
2012-09-30 21:21:09 +10:00
} while (v1 != 1 && _vm->_eventsManager.start_x < XSPR(0) - 320);
}
2012-09-30 21:21:09 +10:00
if (_vm->_eventsManager.XMOUSE() > _vm->_graphicsManager.SCROLL + 620)
_vm->_eventsManager.souris_xy(_vm->_graphicsManager.SCROLL + 610, 0);
2012-09-30 21:21:09 +10:00
if (_vm->_eventsManager.XMOUSE() < _vm->_graphicsManager.SCROLL + 10)
_vm->_eventsManager.souris_xy(_vm->_graphicsManager.SCROLL + 10, 0);
_vm->_eventsManager.VBL();
_vm->_graphicsManager.no_scroll = 0;
}
_vm->_talkManager.REPONSE(_vm->_globals.SAUVEGARDE->data[svField2], _vm->_globals.SAUVEGARDE->data[svField1]);
} else {
_vm->_talkManager.REPONSE2(_vm->_globals.SAUVEGARDE->data[svField2], _vm->_globals.SAUVEGARDE->data[svField1]);
}
_vm->_eventsManager.CHANGE_MOUSE(4);
if ((uint16)(_vm->_objectsManager.NUMZONE + 1) > 1u && !_vm->_globals.ZONEP[_vm->_objectsManager.NUMZONE].field16) {
_vm->_objectsManager.NUMZONE = -1;
FORCEZONE = 1;
}
if (_vm->_objectsManager.NUMZONE != _vm->_globals.SAUVEGARDE->data[svField2] || (uint16)(_vm->_objectsManager.NUMZONE + 1) <= 1u) {
_vm->_eventsManager.btsouris = 4;
CHANGEVERBE = 0;
} else {
_vm->_eventsManager.btsouris = _vm->_globals.SAUVEGARDE->data[svField1];
if (CHANGEVERBE == 1) {
VERBEPLUS();
CHANGEVERBE = 0;
}
if (_vm->_eventsManager.btsouris == 5)
_vm->_eventsManager.btsouris = 4;
}
if (_vm->_eventsManager.btsouris != 23)
_vm->_eventsManager.CHANGE_MOUSE(_vm->_eventsManager.btsouris);
_vm->_objectsManager.NUMZONE = 0;
_vm->_globals.SAUVEGARDE->data[svField1] = 0;
_vm->_globals.SAUVEGARDE->data[svField2] = 0;
}
if (_vm->_globals.PLAN_FLAG == 1) {
_vm->_eventsManager.btsouris = 0;
_vm->_eventsManager.CHANGE_MOUSE(0);
}
if (_vm->_globals.NOMARCHE == 1) {
if (_vm->_eventsManager.btsouris == 4) {
result = _vm->_objectsManager.NUMZONE + 1;
if ((uint16)(_vm->_objectsManager.NUMZONE + 1) > 1u)
BTDROITE();
}
}
GOACTION = 0;
}
void ObjectsManager::CLEAR_ECRAN() {
2012-09-30 21:21:09 +10:00
int v1;
int v2;
CLEAR_SPR();
_vm->_graphicsManager.FIN_VISU();
_vm->_fontManager.TEXTE_OFF(5);
_vm->_fontManager.TEXTE_OFF(9);
_vm->_globals.CLEAR_VBOB();
_vm->_animationManager.CLEAR_ANIM();
_vm->_linesManager.CLEAR_ZONE();
_vm->_linesManager.RESET_OBSTACLE();
_vm->_globals.RESET_CACHE();
v1 = 0;
do {
v2 = v1;
_vm->_globals.BOBZONE[v2] = 0;
_vm->_globals.BOBZONE_FLAG[v2] = 0;
++v1;
} while (v1 <= 48);
_vm->_eventsManager.btsouris = 4;
verbe = 4;
_vm->_objectsManager.NUMZONE = 0;
Vold_taille = 0;
SPEED_FLAG = 0;
SPEED_PTR = PTRNUL;
SPEED_X = 0;
SPEED_Y = 0;
SPEED_IMAGE = 0;
FORCEZONE = 1;
_vm->_linesManager.TOTAL_LIGNES = 0;
DERLIGNE = 0;
_vm->_globals.chemin = PTRNUL;
if (_vm->_globals.COUCOU != PTRNUL)
_vm->_globals.COUCOU = FileManager::LIBERE_FICHIER(_vm->_globals.COUCOU);
if (PTRNUL != _vm->_globals.SPRITE_ECRAN)
_vm->_globals.SPRITE_ECRAN = FileManager::LIBERE_FICHIER(_vm->_globals.SPRITE_ECRAN);
_vm->_eventsManager.start_x = 0;
_vm->_eventsManager.souris_n = 0;
Vold_taille = 200;
_vm->_globals.SAUVEGARDE->data[svField1] = 0;
_vm->_globals.SAUVEGARDE->data[svField2] = 0;
GOACTION = 0;
FORCEZONE = 1;
CHANGEVERBE = 0;
_vm->_globals.NOSPRECRAN = 0;
_vm->_globals.chemin = PTRNUL;
g_old_sens = -1;
my_anim = 1;
A_ANIM = 0;
MA_ANIM = 0;
MA_ANIM1 = 0;
A_DEPA = 0;
MAX_DEPA = 0;
MAX_DEPA1 = 0;
_vm->_graphicsManager.RESET_SEGMENT_VESA();
}
void ObjectsManager::INVENT() {
2012-09-30 21:21:09 +10:00
int v1;
size_t filesize;
2012-09-30 21:21:09 +10:00
int v4;
int v5;
int v6;
byte *v7;
2012-09-30 21:21:09 +10:00
int v8;
int v9;
int v10;
int v11;
int v12;
int v13;
int v14;
int v15;
int v16;
int v17;
int v18;
int v19;
int v20;
Common::File f;
v13 = 0;
if (VIRE_INVENT != 1 && AFFINVEN != 1 && _vm->_globals.DESACTIVE_INVENT != 1) {
_vm->_graphicsManager.no_scroll = 1;
FLAG_VISIBLE_EFFACE = 4;
FLAG_VISIBLE = 0;
v1 = 0;
do {
INVENT_ANIM();
_vm->_eventsManager.XMOUSE();
_vm->_eventsManager.YMOUSE();
_vm->_eventsManager.VBL();
++v1;
} while (v1 <= 1);
_vm->_globals.Winventaire = PTRNUL;
LABEL_7:
_vm->_eventsManager.souris_bb = 0;
_vm->_eventsManager.souris_b = 0;
_vm->_globals.DESACTIVE_INVENT = 1;
_vm->_graphicsManager.SETCOLOR4(251, 100, 100, 100);
if (_vm->_globals.FR == 1)
FileManager::CONSTRUIT_SYSTEM("INVENTFR.SPR");
if (!_vm->_globals.FR)
FileManager::CONSTRUIT_SYSTEM("INVENTAN.SPR");
if (_vm->_globals.FR == 2)
FileManager::CONSTRUIT_SYSTEM("INVENTES.SPR");
if (!f.open(_vm->_globals.NFICHIER))
error("Error opening file - %s", _vm->_globals.NFICHIER.c_str());
filesize = f.size();
_vm->_globals.Winventaire = _vm->_globals.dos_malloc2(filesize);
FileManager::bload_it(f, _vm->_globals.Winventaire, filesize);
f.close();
FileManager::CONSTRUIT_SYSTEM("INVENT2.SPR");
inventaire2 = FileManager::CHARGE_FICHIER(_vm->_globals.NFICHIER);
v19 = _vm->_graphicsManager.ofscroll + 152;
v18 = Get_Largeur(_vm->_globals.Winventaire, 0);
v17 = Get_Hauteur(_vm->_globals.Winventaire, 0);
inventairex = v19;
inventairey = 114;
inventairel = v18;
inventaireh = v17;
_vm->_graphicsManager.Affiche_Perfect(_vm->_graphicsManager.VESA_BUFFER, _vm->_globals.Winventaire, v19 + 300, 414, 0, 0, 0, 0);
v15 = 0;
v4 = 0;
v14 = 1;
do {
v16 = 0;
v5 = 1;
do {
++v4;
v6 = _vm->_globals.INVENTAIRE[v4];
if (v6 && v4 <= 29) {
v7 = CAPTURE_OBJET(v6, 0);
_vm->_graphicsManager.Restore_Mem(_vm->_graphicsManager.VESA_BUFFER, v7, v19 + v16 + 6, v15 + 120, _vm->_globals.OBJL, _vm->_globals.OBJH);
_vm->_globals.dos_free2(v7);
}
v16 += 54;
++v5;
} while (v5 <= 6);
v15 += 38;
++v14;
} while (v14 <= 5);
_vm->_graphicsManager.Capture_Mem(_vm->_graphicsManager.VESA_BUFFER, _vm->_globals.Winventaire, inventairex, inventairey, inventairel, inventaireh);
_vm->_eventsManager.souris_bb = 0;
v20 = 0;
while (1) {
AFFINVEN = 1;
v8 = _vm->_eventsManager.XMOUSE();
v9 = _vm->_eventsManager.YMOUSE();
v12 = _vm->_eventsManager.BMOUSE();
v10 = v13;
v11 = _vm->_linesManager.ZONE_OBJET(v8, v9);
v13 = v11;
if (v11 != v10)
PARAMCADRE(v11);
if (_vm->_eventsManager.btsouris != 16) {
2012-09-30 21:21:09 +10:00
if ((uint16)(_vm->_eventsManager.btsouris - 1) > 1u) {
if (_vm->_eventsManager.btsouris != 3) {
if (v12 == 2) {
OBJETPLUS(v13);
if (_vm->_eventsManager.btsouris != 23)
_vm->_eventsManager.CHANGE_MOUSE(_vm->_eventsManager.btsouris);
}
}
}
}
if (v12 == 1) {
2012-09-30 21:21:09 +10:00
if (_vm->_eventsManager.btsouris == 1 || _vm->_eventsManager.btsouris == 16 || !_vm->_eventsManager.btsouris || (uint16)(_vm->_eventsManager.btsouris - 2) <= 1u)
break;
v9 = v13;
VALID_OBJET(_vm->_globals.INVENTAIRE[v13]);
if (_vm->_eventsManager.btsouris == 8)
v20 = 1;
if (v20 != 1) {
TRAVAILOBJET = 1;
_vm->_globals.SAUVEGARDE->data[svField3] = _vm->_globals.OBJET_EN_COURS;
_vm->_globals.SAUVEGARDE->data[svField8] = _vm->_globals.INVENTAIRE[v13];
_vm->_globals.SAUVEGARDE->data[svField9] = _vm->_eventsManager.btsouris;
OPTI_OBJET();
TRAVAILOBJET = 0;
if (_vm->_soundManager.VOICEOFF == 1) {
do
_vm->_eventsManager.VBL();
while (!_vm->_globals.SORTIE && _vm->_eventsManager.BMOUSE() != 1);
_vm->_fontManager.TEXTE_OFF(9);
}
if (_vm->_globals.SORTIE) {
if (_vm->_globals.SORTIE == 2)
v20 = 1;
_vm->_globals.SORTIE = 0;
if (v20 != 1) {
inventaire2 = _vm->_globals.dos_free2(inventaire2);
if (PTRNUL != _vm->_globals.Winventaire)
_vm->_globals.Winventaire = _vm->_globals.dos_free2(_vm->_globals.Winventaire);
goto LABEL_7;
}
} else if (v20 != 1) {
AFFINVEN = 1;
}
}
}
if (VIRE_INVENT == 1)
v20 = 1;
if (v20 == 1)
break;
_vm->_eventsManager.VBL();
2012-09-30 21:21:09 +10:00
if ((uint16)(_vm->_globals.ECRAN - 35) <= 5u)
SPECIAL_JEU();
}
_vm->_fontManager.TEXTE_OFF(9);
if (AFFINVEN == 1) {
AFFINVEN = 0;
v9 = 114;
_vm->_graphicsManager.SCOPY(_vm->_graphicsManager.VESA_SCREEN, v19, 114, v18, v17, _vm->_graphicsManager.VESA_BUFFER, v19, 114);
_vm->_graphicsManager.Ajoute_Segment_Vesa(v19, 114, v19 + v18, v18 + 114);
BOBTOUS = 1;
}
if (PTRNUL != _vm->_globals.Winventaire)
_vm->_globals.Winventaire = _vm->_globals.dos_free2(_vm->_globals.Winventaire);
inventaire2 = _vm->_globals.dos_free2(inventaire2);
if (_vm->_eventsManager.btsouris == 1)
OptionsDialog::show(_vm);
if (_vm->_eventsManager.btsouris == 3)
_vm->_menuManager.CHARGE_PARTIE();//v9);
if (_vm->_eventsManager.btsouris == 2)
_vm->_menuManager.SAUVE_PARTIE();//v9);
_vm->_eventsManager.btsouris = 4;
_vm->_eventsManager.CHANGE_MOUSE(4);
old_cady = 0;
cady = 0;
old_cadx = 0;
cadx = 0;
_vm->_globals.DESACTIVE_INVENT = 0;
_vm->_graphicsManager.no_scroll = 0;
}
}
void ObjectsManager::CHANGE_TETE(int a1, int a2) {
int v2;
Sauvegarde1 *v3;
Sauvegarde1 *v4;
Sauvegarde1 *v5;
Sauvegarde1 *v6;
Sauvegarde1 *v7;
Sauvegarde1 *v8;
Sauvegarde1 *v9;
CH_TETE = 1;
_vm->_graphicsManager.SCOPY(_vm->_graphicsManager.VESA_SCREEN, 532, 25, 65, 40, _vm->_graphicsManager.VESA_BUFFER, 532, 25);
_vm->_graphicsManager.Ajoute_Segment_Vesa(532, 25, 597, 65);
_vm->_globals.NOT_VERIF = 1;
_vm->_globals.chemin = PTRNUL;
if (a1 == 2) {
if (!a2) {
if (_vm->_globals.SAUVEGARDE->data[svField188] == _vm->_globals.ECRAN) {
CH_TETE = 0;
v3 = &_vm->_globals.SAUVEGARDE->field380;
v3->field0 = XSPR(0);
v3->field1 = YSPR(0);
v3->field2 = 64;
v3->field3 = _vm->_globals.ECRAN;
v3->field4 = Sprite[0].field0;
SPRITE_OFF(1);
SPRITE(_vm->_globals.TETE, v3->field0, v3->field1, 1, 3, v3->field4, 0, 20, 127);
SPRITE_ON(1);
SPRITE_OFF(0);
_vm->_globals.SAUVEGARDE->data[svField354] = 0;
_vm->_globals.SAUVEGARDE->data[svField356] = 0;
_vm->_globals.SAUVEGARDE->data[svField357] = 1;
T_RECTIF = 0;
v4 = &_vm->_globals.SAUVEGARDE->field370;
FileManager::CONSTRUIT_SYSTEM("PERSO.SPR");
FileManager::CHARGE_FICHIER2(_vm->_globals.NFICHIER, _vm->_globals.PERSO);
_vm->_globals.PERSO_TYPE = 0;
SPRITE(_vm->_globals.PERSO, v4->field0, v4->field1, 0, 64, v4->field4, 0, 34, 190);
LABEL_9:
SPRITE_ON(0);
return;
}
}
}
if (!a1) {
if (a2 == 2 && _vm->_globals.SAUVEGARDE->data[svField193] == _vm->_globals.ECRAN) {
CH_TETE = 0;
v5 = &_vm->_globals.SAUVEGARDE->field370;
v5->field0 = XSPR(0);
v5->field1 = YSPR(0);
v5->field2 = 64;
v5->field3 = _vm->_globals.ECRAN;
v5->field4 = Sprite[0].fieldC;
SPRITE_OFF(1);
SPRITE(_vm->_globals.TETE, v5->field0, v5->field1, 1, 2, v5->field4, 0, 34, 190);
SPRITE_ON(1);
SPRITE_OFF(0);
_vm->_globals.SAUVEGARDE->data[svField354] = 0;
_vm->_globals.SAUVEGARDE->data[svField356] = 1;
_vm->_globals.SAUVEGARDE->data[svField357] = 0;
v6 = &_vm->_globals.SAUVEGARDE->field380;
FileManager::CONSTRUIT_SYSTEM("PSAMAN.SPR");
FileManager::CHARGE_FICHIER2(_vm->_globals.NFICHIER, _vm->_globals.PERSO);
_vm->_globals.PERSO_TYPE = 2;
SPRITE(_vm->_globals.PERSO, v6->field0, v6->field1, 0, 64, v6->field4, 0, 20, 127);
goto LABEL_9;
}
v7 = &_vm->_globals.SAUVEGARDE->field370;
v7->field0 = XSPR(0);
v7->field1 = YSPR(0);
v7->field2 = 64;
v7->field3 = _vm->_globals.ECRAN;
v7->field4 = Sprite[0].fieldC;
}
if (a1 == 1) {
v8 = &_vm->_globals.SAUVEGARDE->field360;
v8->field0 = XSPR(0);
v8->field1 = YSPR(0);
v8->field2 = 64;
v8->field3 = _vm->_globals.ECRAN;
v8->field4 = Sprite[0].fieldC;
}
if (a1 == 2) {
v9 = &_vm->_globals.SAUVEGARDE->field380;
v9->field0 = XSPR(0);
v9->field1 = YSPR(0);
v9->field2 = 64;
v9->field3 = _vm->_globals.ECRAN;
v9->field4 = Sprite[0].fieldC;
}
if (!a2) {
_vm->_globals.SAUVEGARDE->data[svField121] = 0;
_vm->_globals.SAUVEGARDE->data[svField354] = 0;
_vm->_globals.SAUVEGARDE->data[svField356] = 0;
_vm->_globals.SAUVEGARDE->data[svField357] = 1;
_vm->_globals.SORTIE = _vm->_globals.SAUVEGARDE->data[svField188];
}
if (a2 == 1) {
_vm->_globals.SAUVEGARDE->data[svField121] = 1;
_vm->_globals.SAUVEGARDE->data[svField354] = 1;
_vm->_globals.SAUVEGARDE->data[svField356] = 0;
_vm->_globals.SAUVEGARDE->data[svField357] = 0;
_vm->_globals.SORTIE = _vm->_globals.SAUVEGARDE->data[svField183];
}
if (a2 == 2) {
_vm->_globals.SAUVEGARDE->data[svField121] = 0;
_vm->_globals.SAUVEGARDE->data[svField354] = 0;
_vm->_globals.SAUVEGARDE->data[svField356] = 1;
_vm->_globals.SAUVEGARDE->data[svField357] = 0;
v2 = _vm->_globals.SAUVEGARDE->data[svField193];
_vm->_globals.SORTIE = _vm->_globals.SAUVEGARDE->data[svField193];
}
}
void ObjectsManager::VERIFTAILLE() {
int v0;
int v1;
int v2;
v0 = _vm->_globals.STAILLE[YSPR(0)];
if (_vm->_globals.PERSO_TYPE == 1) {
v1 = v0;
if (v0 < 0)
v1 = -v0;
v0 = 20 * (5 * v1 - 100) / -80;
}
if (_vm->_globals.PERSO_TYPE == 2) {
v2 = v0;
if (v0 < 0)
v2 = -v0;
v0 = 20 * (5 * v2 - 165) / -67;
}
SETTAILLESPR(0, v0);
}
void ObjectsManager::PACOURS_PROPRE(byte *a1) {
int v1;
int v2;
int v4;
int v5;
int v6;
int v7;
int v8;
int v9;
int v10;
int v11;
int v12;
int v13;
int v14;
int v15;
v1 = 0;
v13 = 0;
v14 = -1;
v2 = READ_LE_UINT16(a1 + 2);
v15 = READ_LE_UINT16(a1 + 4);
if ((int16)READ_LE_UINT16(a1) != -1 || v2 != -1) {
while (1) {
if (v14 != -1 && v15 != v14) {
v11 = v1;
v12 = 0;
v10 = CALC_PROPRE(v2);
v4 = READ_LE_UINT16(a1 + 2 * v1);
v9 = READ_LE_UINT16(a1 + 2 * v1);
v5 = READ_LE_UINT16(a1 + 2 * v1 + 2);
v6 = 0;
while (v4 != -1 || v5 != -1) {
int idx = v1;
v1 += 4;
++v12;
if (READ_LE_UINT16(a1 + 2 * idx + 4) != v15)
v6 = 1;
if (v6 == 1)
break;
v4 = READ_LE_UINT16(a1 + 2 * v1);
v9 = READ_LE_UINT16(a1 + 2 * v1);
v5 = READ_LE_UINT16(a1 + 2 * v1 + 2);
}
if (v12 < v10) {
v7 = v11;
v8 = 0;
if (v12 > 0) {
do {
WRITE_LE_UINT16(a1 + 2 * v7 + 4, v14);
v7 += 4;
++v8;
} while (v12 > v8);
}
v15 = v14;
}
v1 = v11;
if (v9 == -1 && v5 == -1)
v13 = 1;
}
v1 += 4;
if (v13 == 1)
break;
v14 = v15;
v2 = READ_LE_UINT16(a1 + 2 * v1 + 2);
v15 = READ_LE_UINT16(a1 + 2 * v1 + 4);
if (READ_LE_UINT16(a1 + 2 * v1) == -1) {
if (v2 == -1)
break;
}
}
}
}
byte *ObjectsManager::PARC_VOITURE(int a1, int a2, int a3, int a4) {
int v4;
int v5;
int v6;
int v7;
int v8;
int v9;
int v10;
int v11;
int v12;
int v13;
int v14;
int v15;
int v16;
int v17;
int v18;
int v19;
int v20;
int v21;
byte *result;
int v23;
int v24;
int v25;
int v26;
int v27;
int v28;
int v29;
int v30;
int v31;
int v32;
byte *v33;
int v34;
int v35;
int i;
byte *v37;
int v38;
int v39;
int v40;
byte *v41;
int v42;
int v43;
int k;
byte *v45;
int v46;
int v47;
int v48;
int v49;
byte *v50;
int v51;
int v52;
int v53;
byte *v54;
int v55;
int v56;
int v57;
byte *v58;
int v59;
int v60;
int v61;
int v62;
int v63;
int v64;
int v65;
int v66;
int v67;
int v68;
int v69;
int j;
int l;
int v72;
int v73;
int v74;
int v75;
int v76[10];
int v77;
int v78;
int v79;
int v80;
int v81;
int v82;
int v83 = 0;
int v84 = 0;
int v85 = 0;
int v86 = 0;
int v87;
int v88 = 0;
int v89 = 0;
int v90 = 0;
int v91 = 0;
v4 = a3;
v5 = a4;
v67 = 0;
if (a3 <= 14)
v4 = 15;
if (a4 <= 14)
v5 = 15;
if (v4 > _vm->_graphicsManager.max_x - 10)
v4 = _vm->_graphicsManager.max_x - 10;
if (v5 > 445)
v5 = 440;
v75 = v4;
v74 = v5;
v6 = 0;
v7 = v74;
if (_vm->_graphicsManager.max_y > v74) {
v8 = 5;
do {
v62 = v8;
v9 = _vm->_linesManager.colision2_ligne(v75, v7, &v85, &v90, 0, DERLIGNE);
v8 = v62;
if (v9 == 1 && *(&v87 + v62) <= DERLIGNE)
break;
*(&v82 + v62) = 0;
*(&v87 + v62) = -1;
++v6;
++v7;
} while (_vm->_graphicsManager.max_y > v7);
}
v80 = v6;
v10 = 0;
v11 = v74;
if (_vm->_graphicsManager.min_y < v74) {
v12 = 1;
do {
v63 = v12;
v13 = _vm->_linesManager.colision2_ligne(v75, v11, &v83, &v88, 0, DERLIGNE);
v12 = v63;
if (v13 == 1 && *(&v87 + v63) <= DERLIGNE)
break;
*(&v82 + v63) = 0;
*(&v87 + v63) = -1;
if (v80 < v10) {
if (v90 != -1)
break;
}
++v10;
--v11;
} while (_vm->_graphicsManager.min_y < v11);
}
v78 = v10;
v14 = 0;
v15 = v75;
if (_vm->_graphicsManager.max_x > v75) {
v16 = 3;
do {
v64 = v16;
v17 = _vm->_linesManager.colision2_ligne(v15, v74, &v84, &v89, 0, DERLIGNE);
v16 = v64;
if (v17 == 1 && *(&v87 + v64) <= DERLIGNE)
break;
*(&v82 + v64) = 0;
*(&v87 + v64) = -1;
++v14;
if (v78 < v14) {
if (v88 != -1)
break;
}
if (v80 < v14 && v90 != -1)
break;
++v15;
} while (_vm->_graphicsManager.max_x > v15);
}
v79 = v14;
v18 = 0;
v19 = v75;
if (_vm->_graphicsManager.min_x < v75) {
v20 = 7;
do {
v65 = v20;
v21 = _vm->_linesManager.colision2_ligne(v19, v74, &v86, &v91, 0, DERLIGNE);
v20 = v65;
if (v21 == 1 && *(&v87 + v65) <= DERLIGNE)
break;
*(&v82 + v65) = 0;
*(&v87 + v65) = -1;
++v18;
if (v78 < v18) {
if (v88 != -1)
break;
}
if (v80 < v18 && v90 != -1)
break;
if (v79 < v18 && v89 != -1)
break;
--v19;
} while (_vm->_graphicsManager.min_x < v19);
}
v81 = v18;
if (v88 == -1)
v78 = 1300;
if (v89 == -1)
v79 = 1300;
if (v90 == -1)
v80 = 1300;
if (v91 == -1)
v81 = 1300;
if (v88 != -1 || v89 != -1 || v90 != -1 || v91 != -1) {
v23 = 0;
if (v90 != -1 && v78 >= v80 && v79 >= v80 && v81 >= v80) {
v73 = v90;
v72 = v85;
v23 = 1;
}
if (v88 != -1 && !v23 && v80 >= v78 && v79 >= v78 && v81 >= v78) {
v73 = v88;
v72 = v83;
v23 = 1;
}
if (v89 != -1 && !v23 && v78 >= v79 && v80 >= v79 && v81 >= v79) {
v73 = v89;
v72 = v84;
v23 = 1;
}
if (v91 != -1 && !v23 && v80 >= v81 && v79 >= v81 && v78 >= v81) {
v73 = v91;
v72 = v86;
}
v24 = 0;
do {
v25 = v24;
*(&v87 + v25) = -1;
*(&v82 + v25) = 0;
*(&v77 + v25) = 1300;
v76[v25] = 1300;
++v24;
} while (v24 <= 8);
v26 = _vm->_linesManager.colision2_ligne(a1, a2, &v83, &v88, 0, DERLIGNE);
if (v26 == 1) {
v69 = v88;
v68 = v83;
}
if (!v26) {
if (_vm->_linesManager.colision2_ligne(a1, a2, &v83, &v88, 0, _vm->_linesManager.TOTAL_LIGNES) == 1) {
v27 = 0;
while (1) {
v28 = READ_LE_UINT16(_vm->_globals.essai2 + 2 * (signed __int16)v27);
v29 = READ_LE_UINT16(_vm->_globals.essai2 + 2 * (signed __int16)v27 + 2);
v66 = READ_LE_UINT16(_vm->_globals.essai2 + 2 * (signed __int16)v27 + 4);
v27 = v27 + 4;
v30 = v27;
v31 = _vm->_linesManager.colision2_ligne(v28, v29, &v83, &v88, 0, DERLIGNE);
v27 = v30;
if (v31)
break;
v32 = v67;
_vm->_globals.super_parcours[v32] = v28;
_vm->_globals.super_parcours[v32 + 1] = v29;
_vm->_globals.super_parcours[v32 + 2] = v66;
_vm->_globals.super_parcours[v32 + 3] = 0;
v33 = _vm->_globals.essai0;
WRITE_LE_UINT16(_vm->_globals.essai0 + 2 * v32, v28);
WRITE_LE_UINT16(v33 + 2 * v32 + 2, v29);
WRITE_LE_UINT16(v33 + 2 * v32 + 4, v66);
WRITE_LE_UINT16(v33 + 2 * v32 + 6, 0);
v67 += 4;
if (v28 == -1)
goto LABEL_90;
}
v69 = v88;
v68 = v83;
} else {
v69 = 1;
v68 = 1;
v67 = 0;
}
}
LABEL_90:
if (v69 < v73) {
v34 = v68;
v35 = v68;
for (i = _vm->_linesManager.Ligne[v69].field0; v35 < (i - 2); i = _vm->_linesManager.Ligne[v69].field0) {
v37 = _vm->_linesManager.Ligne[v69].fieldC;
v38 = READ_LE_UINT16(v37 + 4 * v35);
int v37_2 = READ_LE_UINT16(v37 + 4 * v35 + 2);
v39 = v67;
_vm->_globals.super_parcours[v39] = v38;
_vm->_globals.super_parcours[v39 + 1] = v37_2;
_vm->_globals.super_parcours[v39 + 2] = _vm->_linesManager.Ligne[v69].field6;
_vm->_globals.super_parcours[v39 + 3] = 0;
v67 += 4;
++v34;
v35 = v34;
}
for (j = v69 + 1; j < v73; ++j) {
if (_vm->_linesManager.PLAN_TEST(
READ_LE_UINT16(_vm->_linesManager.Ligne[j].fieldC),
READ_LE_UINT16(_vm->_linesManager.Ligne[j].fieldC + 2),
v67,
j,
v73,
0) == 1) {
LABEL_88:
v69 = _vm->_linesManager.NV_LIGNEDEP;
v68 = _vm->_linesManager.NV_LIGNEOFS;
v67 = _vm->_linesManager.NV_POSI;
goto LABEL_90;
}
v40 = 0;
if (_vm->_linesManager.Ligne[j].field0 - 2 > 0) {
do {
v41 = _vm->_linesManager.Ligne[j].fieldC;
v42 = READ_LE_UINT16(v41 + 4 * v40);
int v41_2 = READ_LE_UINT16(v41 + 4 * v40 + 2);
v43 = v67;
_vm->_globals.super_parcours[v43] = v42;
_vm->_globals.super_parcours[v43 + 1] = v41_2;
_vm->_globals.super_parcours[v43 + 2] = _vm->_linesManager.Ligne[j].field6;
_vm->_globals.super_parcours[v43 + 3] = 0;
v67 += 4;
++v40;
} while (v40 < _vm->_linesManager.Ligne[j].field0 - 2);
}
}
v68 = 0;
v69 = v73;
}
if (v69 > v73) {
for (k = v68; k > 0; --k) {
v45 = _vm->_linesManager.Ligne[v69].fieldC;
v46 = READ_LE_UINT16(v45 + 4 * k);
int v45_2 = READ_LE_UINT16(v45 + 4 * k + 2);
v47 = v67;
_vm->_globals.super_parcours[v47] = v46;
_vm->_globals.super_parcours[v47 + 1] = v45_2;
_vm->_globals.super_parcours[v47 + 2] = _vm->_linesManager.Ligne[v69].field8;
_vm->_globals.super_parcours[v47 + 3] = 0;
v67 += 4;
}
for (l = v69 - 1; l > v73; --l) {
v48 = l;
if (_vm->_linesManager.PLAN_TEST(
READ_LE_UINT16(_vm->_linesManager.Ligne[l].fieldC + 4 * _vm->_linesManager.Ligne[v48].field0 - 4),
READ_LE_UINT16(_vm->_linesManager.Ligne[l].fieldC + 4 * _vm->_linesManager.Ligne[v48].field0 - 2),
v67,
l,
v73,
0) == 1)
goto LABEL_88;
v49 = _vm->_linesManager.Ligne[v48].field0 - 2;
if ((_vm->_linesManager.Ligne[v48].field0 - 2) > 0) {
do {
v50 = _vm->_linesManager.Ligne[l].fieldC;
v51 = READ_LE_UINT16(v50 + 4 * v49);
int v50_2 = READ_LE_UINT16(v50 + 4 * v49 + 2);
v52 = v67;
_vm->_globals.super_parcours[v52] = v51;
_vm->_globals.super_parcours[v52 + 1] = v50_2;
_vm->_globals.super_parcours[v52 + 2] = _vm->_linesManager.Ligne[l].field8;
_vm->_globals.super_parcours[v52 + 3] = 0;
v67 += 4;
--v49;
} while (v49 > 0);
}
}
v68 = _vm->_linesManager.Ligne[v73].field0 - 1;
v69 = v73;
}
if (v69 == v73) {
if (v68 <= v72) {
if (v68 < v72) {
v57 = v68;
do {
v58 = _vm->_linesManager.Ligne[v73].fieldC;
v59 = READ_LE_UINT16(v58 + 4 * v57);
int v58_2 = READ_LE_UINT16(v58 + 4 * v57 + 2);
v60 = v67;
_vm->_globals.super_parcours[v60] = v59;
_vm->_globals.super_parcours[v60 + 1] = v58_2;
_vm->_globals.super_parcours[v60 + 2] = _vm->_linesManager.Ligne[v73].field6;
_vm->_globals.super_parcours[v60 + 3] = 0;
v67 += 4;
++v57;
} while (v72 > v57);
}
} else {
v53 = v68;
do {
v54 = _vm->_linesManager.Ligne[v73].fieldC;
v55 = READ_LE_UINT16(v54 + 4 * v53);
int v54_2 = READ_LE_UINT16(v54 + 4 * v53 + 2);
v56 = v67;
_vm->_globals.super_parcours[2 * v56] = v55;
_vm->_globals.super_parcours[2 * v56 + 1] = v54_2;
_vm->_globals.super_parcours[2 * v56 + 2] = _vm->_linesManager.Ligne[v73].field8;
_vm->_globals.super_parcours[2 * v56 + 3] = 0;
v67 += 4;
--v53;
} while (v72 < v53);
}
}
v61 = v67;
_vm->_globals.super_parcours[v61] = -1;
_vm->_globals.super_parcours[v61 + 1] = -1;
_vm->_globals.super_parcours[v61 + 2] = -1;
_vm->_globals.super_parcours[v61 + 3] = -1;
result = (byte *)&_vm->_globals.super_parcours[0];
} else {
result = PTRNUL;
}
return result;
}
void ObjectsManager::VERBEPLUS() {
int v;
v = _vm->_eventsManager.btsouris + 1;
_vm->_eventsManager.btsouris = v;
if (v == 4)
goto LABEL_24;
if (v == 5)
goto LABEL_28;
if (v == 6)
goto LABEL_29;
if (v == 7)
goto LABEL_31;
if (v == 8)
goto LABEL_33;
if (v == 9)
goto LABEL_35;
if (v == 10)
goto LABEL_37;
if (v == 11)
goto LABEL_39;
if (v == 12)
goto LABEL_41;
if (v == 13)
goto LABEL_43;
if (v == 14)
goto LABEL_45;
if (v == 15)
goto LABEL_47;
if (v == 16)
goto LABEL_49;
if (v == 17)
goto LABEL_51;
if (v == 18)
goto LABEL_53;
if (v == 19)
goto LABEL_55;
if (v == 20)
goto LABEL_57;
if (v == 21)
goto LABEL_59;
if (v == 22)
goto LABEL_61;
if (v == 23)
goto LABEL_63;
if (v == 24)
goto LABEL_65;
if (v == 25)
goto LABEL_67;
do {
do {
_vm->_eventsManager.btsouris = 4;
LABEL_24:
if (_vm->_globals.NOMARCHE != 1 || (v = _vm->_objectsManager.NUMZONE + 1, (uint16)(_vm->_objectsManager.NUMZONE + 1) <= 1u)) {
if (_vm->_eventsManager.btsouris == 4)
return;
} else {
_vm->_eventsManager.btsouris = 5;
}
LABEL_28:
++_vm->_eventsManager.btsouris;
if (_vm->_eventsManager.btsouris == 6) {
LABEL_29:
v = 5 * _vm->_objectsManager.NUMZONE;
if (_vm->_globals.ZONEP[_vm->_objectsManager.NUMZONE].field6 == 1)
return;
}
++_vm->_eventsManager.btsouris;
if (_vm->_eventsManager.btsouris == 7) {
LABEL_31:
v = 5 * _vm->_objectsManager.NUMZONE;
if (_vm->_globals.ZONEP[_vm->_objectsManager.NUMZONE].field7 == 1)
return;
}
++_vm->_eventsManager.btsouris;
if (_vm->_eventsManager.btsouris == 8) {
LABEL_33:
v = 5 * _vm->_objectsManager.NUMZONE;
if (_vm->_globals.ZONEP[_vm->_objectsManager.NUMZONE].field8 == 1)
return;
}
++_vm->_eventsManager.btsouris;
if (_vm->_eventsManager.btsouris == 9) {
LABEL_35:
v = 5 * _vm->_objectsManager.NUMZONE;
if (_vm->_globals.ZONEP[_vm->_objectsManager.NUMZONE].field9 == 1)
return;
}
++_vm->_eventsManager.btsouris;
if (_vm->_eventsManager.btsouris == 10) {
LABEL_37:
v = 5 * _vm->_objectsManager.NUMZONE;
if (_vm->_globals.ZONEP[_vm->_objectsManager.NUMZONE].fieldA == 1)
return;
}
++_vm->_eventsManager.btsouris;
if (_vm->_eventsManager.btsouris == 11) {
LABEL_39:
v = 5 * _vm->_objectsManager.NUMZONE;
if (_vm->_globals.ZONEP[_vm->_objectsManager.NUMZONE].fieldB == 1)
return;
}
++_vm->_eventsManager.btsouris;
if (_vm->_eventsManager.btsouris == 12) {
LABEL_41:
v = 5 * _vm->_objectsManager.NUMZONE;
if (_vm->_globals.ZONEP[_vm->_objectsManager.NUMZONE].fieldC == 1)
return;
}
++_vm->_eventsManager.btsouris;
if (_vm->_eventsManager.btsouris == 13) {
LABEL_43:
v = 5 * _vm->_objectsManager.NUMZONE;
if (_vm->_globals.ZONEP[_vm->_objectsManager.NUMZONE].fieldD == 1)
return;
}
++_vm->_eventsManager.btsouris;
if (_vm->_eventsManager.btsouris == 14) {
LABEL_45:
v = 5 * _vm->_objectsManager.NUMZONE;
if (_vm->_globals.ZONEP[_vm->_objectsManager.NUMZONE].fieldE == 1)
return;
}
++_vm->_eventsManager.btsouris;
if (_vm->_eventsManager.btsouris == 15) {
LABEL_47:
v = 5 * _vm->_objectsManager.NUMZONE;
if (_vm->_globals.ZONEP[_vm->_objectsManager.NUMZONE].fieldF == 1)
return;
}
++_vm->_eventsManager.btsouris;
if (_vm->_eventsManager.btsouris == 16) {
LABEL_49:
v = 5 * _vm->_objectsManager.NUMZONE;
if (_vm->_globals.ZONEP[_vm->_objectsManager.NUMZONE].field6 == 2)
return;
}
++_vm->_eventsManager.btsouris;
if (_vm->_eventsManager.btsouris == 17) {
LABEL_51:
v = 5 * _vm->_objectsManager.NUMZONE;
if (_vm->_globals.ZONEP[_vm->_objectsManager.NUMZONE].field9 == 2)
return;
}
++_vm->_eventsManager.btsouris;
if (_vm->_eventsManager.btsouris == 18) {
LABEL_53:
v = 5 * _vm->_objectsManager.NUMZONE;
if (_vm->_globals.ZONEP[_vm->_objectsManager.NUMZONE].fieldA == 2)
return;
}
++_vm->_eventsManager.btsouris;
if (_vm->_eventsManager.btsouris == 19) {
LABEL_55:
v = 5 * _vm->_objectsManager.NUMZONE;
if (_vm->_globals.ZONEP[_vm->_objectsManager.NUMZONE].fieldB == 2)
return;
}
++_vm->_eventsManager.btsouris;
if (_vm->_eventsManager.btsouris == 20) {
LABEL_57:
v = 5 * _vm->_objectsManager.NUMZONE;
if (_vm->_globals.ZONEP[_vm->_objectsManager.NUMZONE].fieldC == 2)
return;
}
++_vm->_eventsManager.btsouris;
if (_vm->_eventsManager.btsouris == 21) {
LABEL_59:
v = 5 * _vm->_objectsManager.NUMZONE;
if (_vm->_globals.ZONEP[_vm->_objectsManager.NUMZONE].fieldF == 2)
return;
}
++_vm->_eventsManager.btsouris;
if (_vm->_eventsManager.btsouris == 22) {
LABEL_61:
v = 5 * _vm->_objectsManager.NUMZONE;
if (_vm->_globals.ZONEP[_vm->_objectsManager.NUMZONE].fieldD == 2)
return;
}
++_vm->_eventsManager.btsouris;
if (_vm->_eventsManager.btsouris == 23) {
LABEL_63:
v = 5 * _vm->_objectsManager.NUMZONE;
if (_vm->_globals.ZONEP[_vm->_objectsManager.NUMZONE].field8 == 2)
return;
}
++_vm->_eventsManager.btsouris;
if (_vm->_eventsManager.btsouris == 24) {
LABEL_65:
v = 5 * _vm->_objectsManager.NUMZONE;
if (_vm->_globals.ZONEP[_vm->_objectsManager.NUMZONE].field9 == 3)
return;
}
v = _vm->_eventsManager.btsouris + 1;
_vm->_eventsManager.btsouris = v;
} while (v != 25);
LABEL_67:
v = 5 * _vm->_objectsManager.NUMZONE;
} while (_vm->_globals.ZONEP[_vm->_objectsManager.NUMZONE].fieldE != 2);
}
void ObjectsManager::BTDROITE() {
if ((uint16)(_vm->_objectsManager.NUMZONE + 1) > 1u) {
VERBEPLUS();
if (_vm->_eventsManager.btsouris != 23)
_vm->_eventsManager.CHANGE_MOUSE(_vm->_eventsManager.btsouris);
verbe = _vm->_eventsManager.btsouris;
}
}
int ObjectsManager::MZONE() {
signed int result;
__int16 v1;
__int16 v2;
int v3;
__int16 v4;
__int16 v5;
int v6;
__int16 v7;
int v8;
int v9;
__int16 i;
__int16 v11;
__int16 j;
__int16 k;
__int16 l;
int v15;
__int16 v16;
__int16 v17;
__int16 v18;
__int16 v19;
__int16 v20;
__int16 v21;
v19 = 0;
v18 = 0;
v17 = 0;
v16 = 0;
v21 = _vm->_eventsManager.souris_x + _vm->_eventsManager.ofset_souris_x;
v20 = _vm->_eventsManager.souris_y + _vm->_eventsManager.ofset_souris_y;
if ((_vm->_eventsManager.souris_y + _vm->_eventsManager.ofset_souris_y) > 19) {
v1 = 0;
do {
v2 = _vm->_globals.BOBZONE[v1];
if (v2) {
if (_vm->_globals.BOBZONE_FLAG[v1] == 1) {
v3 = v2;
v15 = v3;
if (_vm->_globals.Bob[v3].field0) {
if (_vm->_globals.Bob[v3].fieldC != 250) {
if (!_vm->_globals.Bob[v3].field16) {
v4 = _vm->_globals.Bob[v3].field3E;
if (v21 > v4) {
if (v21 < _vm->_globals.Bob[v3].field42 + v4) {
v5 = _vm->_globals.Bob[v3].field40;
if (v20 > v5) {
if (v20 < _vm->_globals.Bob[v3].field44 + v5) {
v6 = v1;
if (_vm->_globals.ZONEP[v1].field4 == -1) {
_vm->_globals.ZONEP[v6].field0 = 0;
_vm->_globals.ZONEP[v1].field2 = 0;
}
if (!_vm->_globals.ZONEP[v6].field0) {
if (!_vm->_globals.ZONEP[v1].field2) {
_vm->_globals.ZONEP[v6].field0 = _vm->_globals.Bob[v15].field42 + _vm->_globals.Bob[v15].field3E;
_vm->_globals.ZONEP[v1].field2 = _vm->_globals.Bob[v15].field44 + _vm->_globals.Bob[v15].field40 + 6;
_vm->_globals.ZONEP[v1].field4 = -1;
}
}
return v1;
}
}
}
}
}
}
}
}
}
++v1;
} while (v1 <= 48);
_vm->_globals.SegmentEnCours = 0;
v7 = 0;
do {
if (_vm->_globals.ZONEP[v7].field10 == 1) {
v8 = v7;
if (_vm->_globals.CarreZone[v8].field0 == 1) {
if (_vm->_globals.CarreZone[v7].field2 <= v21
&& _vm->_globals.CarreZone[v7].field4 >= v21
&& _vm->_globals.CarreZone[v7].field6 <= v20
&& _vm->_globals.CarreZone[v7].field8 >= v20) {
if (_vm->_globals.CarreZone[v7].fieldE == 1) {
_vm->_globals.oldzone_46 = _vm->_linesManager.LigneZone[_vm->_globals.CarreZone[v7].fieldA].field2;
return _vm->_globals.oldzone_46;
}
v9 = _vm->_globals.SegmentEnCours;
_vm->_globals.Segment[v9].field2 = _vm->_globals.CarreZone[v7].fieldA;
_vm->_globals.Segment[v9].field4 = _vm->_globals.CarreZone[v7].fieldC;
++_vm->_globals.SegmentEnCours;
}
}
}
++v7;
} while (v7 <= 99);
if (!_vm->_globals.SegmentEnCours)
goto LABEL_58;
for (i = v20; i >= 0; --i) {
v11 = colision(v21, i);
v19 = v11;
if (v11 != -1 && _vm->_globals.ZONEP[v11].field10 == 1)
break;
}
if (v19 == -1)
goto LABEL_58;
for (j = v20; _vm->_graphicsManager.max_y > j; ++j) {
v18 = colision(v21, j);
if (v18 != -1 && _vm->_globals.ZONEP[v19].field10 == 1)
break;
}
if (v18 == -1)
goto LABEL_58;
for (k = v21; k >= 0; --k) {
v16 = colision(k, v20);
if (v16 != -1 && _vm->_globals.ZONEP[v19].field10 == 1)
break;
}
if (v16 == -1)
goto LABEL_58;
for (l = v21; _vm->_graphicsManager.max_x > l; ++l) {
v17 = colision(l, v20);
if (v17 != -1 && _vm->_globals.ZONEP[v19].field10 == 1)
break;
}
if (v19 == v18 && v19 == v16 && v19 == v17) {
_vm->_globals.oldzone_46 = v19;
result = v19;
} else {
LABEL_58:
_vm->_globals.oldzone_46 = -1;
result = -1;
}
} else {
result = 0;
}
return result;
}
void ObjectsManager::PARAMCADRE(int a1) {
old_cadx = cadx;
old_cady = cady;
old_cadi = cadi;
if ((uint16)(a1 - 1) <= 5u)
cady = 120;
if ((uint16)(a1 - 7) <= 5u)
cady = 158;
if ((uint16)(a1 - 13) <= 5u)
cady = 196;
if ((uint16)(a1 - 19) <= 5u)
cady = 234;
if ((uint16)(a1 - 25) <= 4u)
cady = 272;
if (a1 == 1 || a1 == 7 || a1 == 13 || a1 == 19 || a1 == 25)
cadx = _vm->_graphicsManager.ofscroll + 158;
if (a1 == 2 || a1 == 8 || a1 == 14 || a1 == 20 || a1 == 26)
cadx = _vm->_graphicsManager.ofscroll + 212;
if (a1 == 3 || a1 == 9 || a1 == 15 || a1 == 21 || a1 == 27)
cadx = _vm->_graphicsManager.ofscroll + 266;
if (a1 == 4 || a1 == 10 || a1 == 16 || a1 == 22 || a1 == 28)
cadx = _vm->_graphicsManager.ofscroll + 320;
if (a1 == 5 || a1 == 11 || a1 == 17 || a1 == 23 || a1 == 29)
cadx = _vm->_graphicsManager.ofscroll + 374;
if (a1 == 6 || a1 == 12 || a1 == 18 || a1 == 24 || (uint16)(a1 - 30) <= 1u)
cadx = _vm->_graphicsManager.ofscroll + 428;
if ((uint16)(a1 - 1) <= 0x1Cu)
cadi = 0;
if ((uint16)(a1 - 30) <= 1u)
cadi = 2;
if (a1 == 30)
cady = 272;
if (a1 == 31)
cady = 290;
if (!a1 || a1 == 32) {
cadx = 0;
cady = 0;
cadi = 0;
}
if (!a1)
_vm->_eventsManager.btsouris = 0;
if (a1 == 32)
_vm->_eventsManager.btsouris = 16;
if (a1 == 30)
_vm->_eventsManager.btsouris = 2;
if (a1 == 31)
_vm->_eventsManager.btsouris = 3;
if ((uint16)(a1 - 1) <= 0x1Cu)
_vm->_eventsManager.btsouris = 8;
if (a1 == 29)
_vm->_eventsManager.btsouris = 1;
if ((uint16)(a1 - 1) <= 0x1Bu && !_vm->_globals.INVENTAIRE[a1]) {
_vm->_eventsManager.btsouris = 0;
cadx = 0;
cady = 0;
cadi = 0;
}
if (_vm->_eventsManager.btsouris != 23)
_vm->_eventsManager.CHANGE_MOUSE(_vm->_eventsManager.btsouris);
_vm->_eventsManager.XMOUSE();
_vm->_eventsManager.YMOUSE();
}
void ObjectsManager::OBJETPLUS(int idx) {
int v1;
int v2;
int v3;
v1 = _vm->_eventsManager.btsouris;
if (_vm->_eventsManager.btsouris && _vm->_eventsManager.btsouris != 16 && (uint16)(_vm->_eventsManager.btsouris - 2) > 1u) {
v2 = _vm->_eventsManager.btsouris++ + 1;
if (v1 == 5)
goto LABEL_24;
if (v2 == 7)
goto LABEL_26;
if (v2 != 8) {
if (v2 == 9)
_vm->_eventsManager.btsouris = 10;
if (_vm->_eventsManager.btsouris == 10)
goto LABEL_29;
if (_vm->_eventsManager.btsouris == 11)
goto LABEL_31;
if (_vm->_eventsManager.btsouris == 12)
_vm->_eventsManager.btsouris = 13;
if (_vm->_eventsManager.btsouris == 13)
goto LABEL_33;
if (_vm->_eventsManager.btsouris == 14)
_vm->_eventsManager.btsouris = 15;
if (_vm->_eventsManager.btsouris == 15)
goto LABEL_35;
if ((uint16)(_vm->_eventsManager.btsouris - 16) <= 6u)
_vm->_eventsManager.btsouris = 23;
if (_vm->_eventsManager.btsouris == 23)
goto LABEL_37;
if (_vm->_eventsManager.btsouris == 24)
_vm->_eventsManager.btsouris = 25;
if (_vm->_eventsManager.btsouris == 25)
goto LABEL_39;
do {
_vm->_eventsManager.btsouris = 6;
LABEL_24:
if (_vm->_globals.ObjetW[_vm->_globals.INVENTAIRE[idx]].field2 == 1)
break;
++_vm->_eventsManager.btsouris;
if (_vm->_eventsManager.btsouris == 7) {
LABEL_26:
if (_vm->_globals.ObjetW[_vm->_globals.INVENTAIRE[idx]].field3 == 1)
return;
}
v3 = _vm->_eventsManager.btsouris++;
if (_vm->_eventsManager.btsouris == 8)
break;
_vm->_eventsManager.btsouris = v3 + 3;
if (v3 == 7) {
LABEL_29:
if (_vm->_globals.ObjetW[_vm->_globals.INVENTAIRE[idx]].field7 == 1)
return;
}
++_vm->_eventsManager.btsouris;
if (_vm->_eventsManager.btsouris == 11) {
LABEL_31:
if (_vm->_globals.ObjetW[_vm->_globals.INVENTAIRE[idx]].field4 == 1)
return;
}
_vm->_eventsManager.btsouris += 2;
if (_vm->_eventsManager.btsouris == 13) {
LABEL_33:
if (_vm->_globals.ObjetW[_vm->_globals.INVENTAIRE[idx]].field5 == 1)
return;
}
_vm->_eventsManager.btsouris += 2;
if (_vm->_eventsManager.btsouris == 15) {
LABEL_35:
if (_vm->_globals.ObjetW[_vm->_globals.INVENTAIRE[idx]].field6 == 1)
return;
}
_vm->_eventsManager.btsouris = 23;
LABEL_37:
if (_vm->_globals.ObjetW[_vm->_globals.INVENTAIRE[idx]].field6 == 2)
break;
_vm->_eventsManager.btsouris = 25;
LABEL_39:
;
} while (_vm->_globals.ObjetW[_vm->_globals.INVENTAIRE[idx]].field7 != 2);
}
}
}
void ObjectsManager::VALID_OBJET(int a1) {
if (_vm->_eventsManager.btsouris == 8)
CHANGE_OBJET(a1);
}
void ObjectsManager::OPTI_OBJET() {
byte *data;
Common::String file;
int v0 = 1;
int v5;
int v7;
file = "OBJET1.ini";
data = FileManager::RECHERCHE_CAT(file, 1);
if (data == PTRNUL) {
FileManager::CONSTRUIT_FICHIER(_vm->_globals.HOPLINK, file);
data = FileManager::CHARGE_FICHIER(_vm->_globals.NFICHIER);
}
if ((data == PTRNUL) || *data != 'I' || *(data + 1) != 'N' || *(data + 2) != 'I') {
error("Not an INI file");
} else {
v7 = 0;
do {
v5 = Traduction(data + 20 * v0);
if (v5 == 2)
v0 = Control_Goto(data + 20 * v0);
if (v5 == 3)
v0 = Control_If(data, v0);
if (v0 == -1)
error("defective IFF function");
if (v5 == 1 || v5 == 4)
++v0;
if (!v5 || v5 == 5)
v7 = 1;
} while (v7 != 1);
}
_vm->_globals.dos_free2(data);
}
void ObjectsManager::SPECIAL_JEU() {
byte *v1;
byte *v2;
byte *v3;
if ((uint16)(_vm->_globals.ECRAN - 35) <= 6u) {
if (_vm->_globals.OLD_ECRAN == 16 && _vm->_globals.ECRAN == 35)
TEST_FORET(35, 500, 555, 100, 440, 1);
if (_vm->_globals.OLD_ECRAN == 36 && _vm->_globals.ECRAN == 35)
TEST_FORET(35, 6, 84, 100, 440, 4);
if (_vm->_globals.OLD_ECRAN == 35 && _vm->_globals.ECRAN == 36)
TEST_FORET(36, 551, 633, 100, 440, 2);
if (_vm->_globals.OLD_ECRAN == 37 && _vm->_globals.ECRAN == 36)
TEST_FORET(36, 6, 84, 100, 440, 4);
if (_vm->_globals.OLD_ECRAN == 36 && _vm->_globals.ECRAN == 37)
TEST_FORET(37, 551, 633, 100, 440, 1);
if (_vm->_globals.OLD_ECRAN == 38 && _vm->_globals.ECRAN == 37)
TEST_FORET(37, 392, 529, 100, 440, 2);
if (_vm->_globals.OLD_ECRAN == 37 && _vm->_globals.ECRAN == 38)
TEST_FORET(38, 133, 252, 100, 440, 4);
if (_vm->_globals.OLD_ECRAN == 39 && _vm->_globals.ECRAN == 38)
TEST_FORET(38, 6, 84, 100, 440, 3);
if (_vm->_globals.OLD_ECRAN == 38 && _vm->_globals.ECRAN == 39)
TEST_FORET(39, 551, 633, 100, 440, 2);
if (_vm->_globals.OLD_ECRAN == 40 && _vm->_globals.ECRAN == 39)
TEST_FORET(39, 6, 84, 100, 440, 3);
if (_vm->_globals.OLD_ECRAN == 39 && _vm->_globals.ECRAN == 40)
TEST_FORET(40, 133, 252, 100, 440, 4);
if (_vm->_globals.OLD_ECRAN == 41 && _vm->_globals.ECRAN == 40)
TEST_FORET(40, 392, 529, 100, 440, 2);
if (_vm->_globals.OLD_ECRAN == 40 && _vm->_globals.ECRAN == 41)
TEST_FORET(41, 551, 633, 100, 440, 1);
if (_vm->_globals.OLD_ECRAN == 17 && _vm->_globals.ECRAN == 41)
TEST_FORET(41, 6, 84, 100, 440, 3);
}
if (_vm->_globals.ECRAN == 5) {
if (YSPR(0) <= 399) {
if (!_vm->_globals.SAUVEGARDE->data[svField173]) {
_vm->_globals.SAUVEGARDE->data[svField173] = 1;
_vm->_globals.NOPARLE = 1;
_vm->_talkManager.PARLER_PERSO("flicspe1.pe2");
_vm->_globals.NOPARLE = 0;
if (!_vm->_globals.CENSURE) {
v1 = _vm->_globals.dos_malloc2(0x3E8u);
memcpy(v1, _vm->_graphicsManager.Palette, 0x301u);
FileManager::CONSTRUIT_LINUX("TEMP1.SCR");
FileManager::SAUVE_FICHIER(_vm->_globals.NFICHIER, _vm->_graphicsManager.VESA_SCREEN, 0x4B000u);
if (!_vm->_graphicsManager.nbrligne)
_vm->_graphicsManager.ofscroll = 0;
_vm->_graphicsManager.NB_SCREEN();
_vm->_soundManager.SPECIAL_SOUND = 198;
_vm->_objectsManager.PERSO_ON = 1;
_vm->_animationManager.NO_SEQ = 1;
_vm->_animationManager.CLS_ANM = 0;
_vm->_animationManager.PLAY_ANM("otage.ANM", 1, 24, 500);
_vm->_animationManager.NO_SEQ = 0;
_vm->_soundManager.SPECIAL_SOUND = 0;
_vm->_globals.NECESSAIRE = 1;
_vm->_graphicsManager.NB_SCREEN();
_vm->_globals.NECESSAIRE = 0;
FileManager::CONSTRUIT_LINUX("TEMP1.SCR");
FileManager::bload(_vm->_globals.NFICHIER, _vm->_graphicsManager.VESA_SCREEN);
_vm->_objectsManager.PERSO_ON = 0;
memcpy(_vm->_graphicsManager.Palette, v1, 0x301u);
_vm->_graphicsManager.SHOW_PALETTE();
_vm->_globals.dos_free2(v1);
_vm->_graphicsManager.DD_Lock();
if (_vm->_graphicsManager.Winbpp == 2) {
if (_vm->_graphicsManager.SDL_ECHELLE)
_vm->_graphicsManager.m_scroll16A(_vm->_graphicsManager.VESA_SCREEN, _vm->_eventsManager.start_x, 0, 640, 480, 0, 0);
else
_vm->_graphicsManager.m_scroll16(_vm->_graphicsManager.VESA_SCREEN, _vm->_eventsManager.start_x, 0, 640, 480, 0, 0);
}
if (_vm->_graphicsManager.Winbpp == 1) {
if (_vm->_graphicsManager.SDL_ECHELLE)
_vm->_graphicsManager.m_scroll2A(_vm->_graphicsManager.VESA_SCREEN, _vm->_eventsManager.start_x, 0, 640, 480, 0, 0);
else
_vm->_graphicsManager.m_scroll2(_vm->_graphicsManager.VESA_SCREEN, _vm->_eventsManager.start_x, 0, 640, 480, 0, 0);
}
_vm->_graphicsManager.DD_Unlock();
v2 = _vm->_graphicsManager.VESA_BUFFER;
v3 = _vm->_graphicsManager.VESA_SCREEN;
memcpy(_vm->_graphicsManager.VESA_BUFFER, _vm->_graphicsManager.VESA_SCREEN, 0x95FFCu);
v3 = v3 + 614396;
v2 = v2 + 614396;
*v2 = *v3;
v2 = v2 + 2;
*v2 = *(v3 + 2);
_vm->_graphicsManager.no_scroll = 0;
_vm->_graphicsManager.DD_VBL();
}
}
}
}
if (_vm->_globals.ECRAN == 20)
_vm->_globals.SAUVEGARDE->data[svField132] = XSPR(0) > 65
&& XSPR(0) <= 124
&& YSPR(0) > 372
&& YSPR(0) <= 398;
if (_vm->_globals.ECRAN == 57) {
_vm->_globals.DESACTIVE_INVENT = 1;
if (_vm->_globals.SAUVEGARDE->data[svField261] == 1 && BOBPOSI(5) == 37) {
BOBANIM_OFF(5);
SET_BOBPOSI(5, 0);
BOBANIM_ON(6);
_vm->_globals.SAUVEGARDE->data[svField261] = 2;
ZONE_OFF(15);
_vm->_soundManager.PLAY_SOUND("SOUND75.WAV");
}
if (_vm->_globals.SAUVEGARDE->data[svField261] == 2 && BOBPOSI(6) == 6) {
BOBANIM_OFF(6);
SET_BOBPOSI(6, 0);
BOBANIM_ON(7);
ZONE_ON(14);
_vm->_globals.SAUVEGARDE->data[svField261] = 3;
}
_vm->_globals.DESACTIVE_INVENT = 0;
}
if (_vm->_globals.ECRAN == 93 && !_vm->_globals.SAUVEGARDE->data[svField333]) {
_vm->_globals.DESACTIVE_INVENT = 1;
do
_vm->_eventsManager.VBL();
while (BOBPOSI(8) != 3);
_vm->_globals.NOPARLE = 1;
_vm->_talkManager.PARLER_PERSO("GM3.PE2");
BOBANIM_OFF(8);
_vm->_globals.SAUVEGARDE->data[svField333] = 1;
_vm->_globals.DESACTIVE_INVENT = 0;
}
}
int ObjectsManager::Traduction(byte *a1) {
2012-09-30 21:21:09 +10:00
int v1;
int v2;
int v3;
int v4;
int v5;
int v6;
int v7;
int v8;
int v9;
int v10;
int v11;
int v12;
int v13;
int v14;
int v15;
int v16;
int v17;
int v18;
int v19;
int v20;
int v21;
int v22;
int v23;
int v24;
int v25;
int v26;
int v27;
int v28;
int v29;
int v30;
int v31;
int v32;
int v33;
int v34;
int v35;
int v36;
int v37;
int v38;
int v39;
int v40;
int v41;
int v42;
int v43;
int v44;
int v45;
int v46;
char v47;
char v48;
char v49;
2012-09-30 21:21:09 +10:00
int v50;
Sauvegarde1 *v51;
2012-09-30 21:21:09 +10:00
int v52;
Sauvegarde1 *v53;
int v54;
2012-09-30 21:21:09 +10:00
int v55;
int v56;
int v57;
int v58;
int v59;
int v60;
int v61;
int v62;
int v63;
2012-09-30 21:21:09 +10:00
int v65;
int v66;
int v67;
int v68;
int v69;
int v70;
int v71;
int v72;
int v73;
int v74;
int v75;
int v76;
char v77[12];
Common::String s;
char v79;
char v80;
char v81;
char v82[16];
v1 = 0;
v70 = 0;
if (*a1 != 'F' || *(a1 + 1) != 'C')
return 0;
if (*(a1 + 2) == 'T' && *(a1 + 3) == 'X' && *(a1 + 4) == 'T') {
v70 = *(a1 + 6);
v2 = *(a1 + 7);
v69 = *(a1 + 8);
v67 = READ_LE_UINT16(a1 + 9);
v65 = READ_LE_UINT16(a1 + 11);
v3 = READ_LE_UINT16(a1 + 13);
v1 = 1;
if (!TRAVAILOBJET) {
if (_vm->_globals.SAUVEGARDE->data[svField356] == 1) {
if (v3 == 53)
v3 = 644;
if (v3 == 624)
v3 = 639;
if (v3 == 627)
v3 = 630;
if (v3 == 625)
v3 = 639;
if (v3 == 8)
v3 = 637;
if (v3 == 53)
v3 = 644;
if (v3 == 557)
v3 = 636;
if (v3 == 51)
v3 = 644;
if (v3 == 287)
v3 = 636;
if (v3 == 619)
v3 = 633;
if (v3 == 620)
v3 = 634;
if (v3 == 622)
v3 = 644;
if (v3 == 297)
v3 = 636;
if (v3 == 612)
v3 = 636;
2012-09-30 21:21:09 +10:00
if ((uint16)(v3 - 613) <= 1u || v3 == 134)
v3 = 636;
if (v3 == 615)
v3 = 635;
if (v3 == 618)
v3 = 632;
if (v3 == 611)
v3 = 642;
if (v3 == 610)
v3 = 641;
if (v3 == 18)
v3 = 643;
if (v3 == 602)
v3 = 645;
if (v3 == 603)
v3 = 646;
if (v3 == 604)
v3 = 647;
if (v3 == 51)
v3 = 644;
if (v3 == 607)
v3 = 650;
if (v3 == 605)
v3 = 648;
if (v3 == 606)
v3 = 649;
if (v3 == 601)
v3 = 652;
if (v3 == 37)
v3 = 636;
if (v3 == 595)
v3 = 633;
if (v3 == 596)
v3 = 634;
if (v3 == 532)
v3 = 636;
if (v3 == 599)
v3 = 636;
if (v3 == 363)
v3 = 636;
}
if (!_vm->_soundManager.SOUNDOFF && _vm->_soundManager.SOUND_FLAG == 1) {
do
_vm->_eventsManager.VBL();
while (_vm->_soundManager.SOUND_FLAG);
}
if (!_vm->_soundManager.TEXTOFF) {
_vm->_fontManager.DOS_TEXT(9, v3, _vm->_globals.FICH_TEXTE, 2 * v67, 2 * v65 + 40, 20, 25, 6, v2, 253);
if (!_vm->_soundManager.TEXTOFF)
_vm->_fontManager.TEXTE_ON(9);
}
if (!_vm->_soundManager.VOICEOFF)
_vm->_soundManager.VOICE_MIX(v3, 4);
}
if (TRAVAILOBJET == 1) {
if (_vm->_globals.SAUVEGARDE->data[svField356]) {
_vm->_fontManager.DOS_TEXT(9, 635, _vm->_globals.FICH_TEXTE, 55, 20, 20, 25, v69, 35, 253);
if (!_vm->_soundManager.TEXTOFF)
_vm->_fontManager.TEXTE_ON(9);
if (!_vm->_soundManager.VOICEOFF)
_vm->_soundManager.VOICE_MIX(635, 4);
goto LABEL_104;
}
if (_vm->_globals.FR == 1 && !_vm->_soundManager.TEXTOFF)
_vm->_fontManager.DOS_TEXT(9, v3, "OBJET1.TXT", 2 * v67, 60, 20, 25, 6, v2, 253);
if (!_vm->_globals.FR && !_vm->_soundManager.TEXTOFF)
_vm->_fontManager.DOS_TEXT(9, v3, "OBJETAN.TXT", 2 * v67, 60, 20, 25, 6, v2, 253);
if (_vm->_globals.FR == 2) {
if (_vm->_soundManager.TEXTOFF) {
LABEL_98:
if (!_vm->_soundManager.VOICEOFF)
_vm->_soundManager.VOICE_MIX(v3, 5);
goto LABEL_104;
}
_vm->_fontManager.DOS_TEXT(9, v3, "OBJETES.TXT", 2 * v67, 60, 20, 25, 6, v2, 253);
}
if (!_vm->_soundManager.TEXTOFF)
_vm->_fontManager.TEXTE_ON(9);
goto LABEL_98;
}
}
LABEL_104:
if (*(a1 + 2) == 'B' && *(a1 + 3) == 'O' && *(a1 + 4) == 'B') {
if (DESACTIVE != 1) {
v72 = *(a1 + 5);
v70 = *(a1 + 6);
v4 = *(a1 + 7);
v68 = READ_LE_UINT16(a1 + 8);
v66 = READ_LE_UINT16(a1 + 10);
if (v72 == 52) {
_vm->_graphicsManager.AFFICHE_SPEED(_vm->_globals.SPRITE_ECRAN, v68, READ_LE_UINT16(a1 + 10), v70);
} else if (v72 == 51) {
BOB_VIVANT(v70);
} else {
if (v72 == 50)
goto LABEL_1141;
VBOB(_vm->_globals.SPRITE_ECRAN, v72, v68, v66, v70);
if (v4)
v4 /= _vm->_globals.vitesse;
if (v4 > 1) {
do {
--v4;
_vm->_eventsManager.VBL();
} while (v4);
}
if (v72 == 50)
LABEL_1141:
AFFICHE_SPEED1(_vm->_globals.SPRITE_ECRAN, v68, v66, v70);
}
}
v1 = 1;
}
if (*(a1 + 2) == 'S') {
if (*(a1 + 3) == 'T' && *(a1 + 4) == 'P') {
if (DESACTIVE != 1) {
DEUXPERSO = 0;
v5 = *(a1 + 5);
v6 = *(a1 + 8);
PERX = READ_LE_UINT16(a1 + 6);
PERY = v6;
PERI = v5;
if (CH_TETE == 1) {
if (_vm->_globals.SAUVEGARDE->data[svField354] == 1
&& _vm->_globals.SAUVEGARDE->data[svField180]
&& _vm->_globals.SAUVEGARDE->data[svField181]
&& _vm->_globals.SAUVEGARDE->data[svField182]
&& _vm->_globals.SAUVEGARDE->data[svField183]) {
PERX = _vm->_globals.SAUVEGARDE->data[svField180];
PERY = _vm->_globals.SAUVEGARDE->data[svField181];
PERI = _vm->_globals.SAUVEGARDE->data[svField182];
}
if (_vm->_globals.SAUVEGARDE->data[svField356] == 1
&& _vm->_globals.SAUVEGARDE->data[svField190]
&& _vm->_globals.SAUVEGARDE->data[svField191]
&& _vm->_globals.SAUVEGARDE->data[svField192]
&& _vm->_globals.SAUVEGARDE->data[svField193]) {
PERX = _vm->_globals.SAUVEGARDE->data[svField190];
PERY = _vm->_globals.SAUVEGARDE->data[svField191];
PERI = _vm->_globals.SAUVEGARDE->data[svField192];
}
if (_vm->_globals.SAUVEGARDE->data[svField357] == 1
&& _vm->_globals.SAUVEGARDE->data[svField185]
&& _vm->_globals.SAUVEGARDE->data[svField186]
&& _vm->_globals.SAUVEGARDE->data[svField187]
&& _vm->_globals.SAUVEGARDE->data[svField188]) {
PERX = _vm->_globals.SAUVEGARDE->data[svField185];
PERY = _vm->_globals.SAUVEGARDE->data[svField186];
PERI = _vm->_globals.SAUVEGARDE->data[svField187];
}
}
if (_vm->_globals.SAUVEGARDE->data[svField356] == 1 && _vm->_globals.SAUVEGARDE->data[svField188] == _vm->_globals.ECRAN) {
SPRITE(
_vm->_globals.TETE,
_vm->_globals.SAUVEGARDE->data[svField185],
_vm->_globals.SAUVEGARDE->data[svField186],
1,
2,
_vm->_globals.SAUVEGARDE->data[svField189],
0,
34,
190);
SPRITE_ON(1);
DEUXPERSO = 1;
}
if (_vm->_globals.SAUVEGARDE->data[svField357] == 1
&& _vm->_globals.SAUVEGARDE->data[svField355] == 1
&& _vm->_globals.SAUVEGARDE->data[svField193] == _vm->_globals.ECRAN) {
SPRITE(
_vm->_globals.TETE,
_vm->_globals.SAUVEGARDE->data[svField190],
_vm->_globals.SAUVEGARDE->data[svField191],
1,
3,
_vm->_globals.SAUVEGARDE->data[svField194],
0,
20,
127);
SPRITE_ON(1);
DEUXPERSO = 1;
}
}
v1 = 1;
CH_TETE = 0;
}
if (*(a1 + 2) == 'S' && *(a1 + 3) == 'T' && *(a1 + 4) == 'E') {
if (DESACTIVE != 1) {
v7 = *(a1 + 5);
v70 = *(a1 + 6);
v8 = *(a1 + 7);
v9 = *(a1 + 8);
RECALL = 0;
_vm->_globals.OLD_ECRAN = _vm->_globals.ECRAN;
_vm->_globals.SAUVEGARDE->data[svField6] = _vm->_globals.ECRAN;
_vm->_globals.ECRAN = v7;
_vm->_globals.SAUVEGARDE->data[svField5] = v7;
PTAILLE = v70;
PEROFX = v8;
PEROFY = v9;
}
v1 = 1;
}
}
if (*(a1 + 2) == 'B' && *(a1 + 3) == 'O' && *(a1 + 4) == 'F') {
if (DESACTIVE != 1)
VBOB_OFF(READ_LE_UINT16(a1 + 5));
v1 = 1;
}
if (*(a1 + 2) == 'P' && *(a1 + 3) == 'E' && *(a1 + 4) == 'R') {
v73 = READ_LE_UINT16(a1 + 5);
if (!_vm->_globals.SAUVEGARDE->data[svField122] && !_vm->_globals.SAUVEGARDE->data[svField356]) {
v70 = 0;
if (READ_LE_UINT16(a1 + 5) == 14)
v73 = 1;
if (v73 == 17)
v73 = 7;
if (v73 == 18)
v73 = 8;
if (v73 == 19)
v73 = 4;
if (v73 == 15)
v73 = 11;
if (v73 == 16)
v73 = 12;
if (v73 == 1) {
if (_vm->_globals.ACTION_SENS == 1)
ACTION_DOS(4);
if (_vm->_globals.ACTION_SENS == 3)
ACTION_DROITE(4);
if (_vm->_globals.ACTION_SENS == 2)
Q_DROITE(4);
if (_vm->_globals.ACTION_SENS == 5)
ACTION_FACE(4);
if (_vm->_globals.ACTION_SENS == 8)
Q_GAUCHE(4);
if (_vm->_globals.ACTION_SENS == 7)
ACTION_GAUCHE(4);
}
if (v73 == 2) {
if (_vm->_globals.ACTION_SENS == 1)
ACTION_DOS(7);
if (_vm->_globals.ACTION_SENS == 3)
ACTION_DROITE(7);
if (_vm->_globals.ACTION_SENS == 2)
Q_DROITE(7);
if (_vm->_globals.ACTION_SENS == 5)
ACTION_FACE(7);
if (_vm->_globals.ACTION_SENS == 8)
Q_GAUCHE(7);
if (_vm->_globals.ACTION_SENS == 7)
ACTION_GAUCHE(7);
if (_vm->_globals.ACTION_SENS == 1)
ACTION_DOS(8);
if (_vm->_globals.ACTION_SENS == 3)
ACTION_DROITE(8);
if (_vm->_globals.ACTION_SENS == 2)
Q_DROITE(8);
if (_vm->_globals.ACTION_SENS == 5)
ACTION_FACE(8);
if (_vm->_globals.ACTION_SENS == 8)
Q_GAUCHE(8);
if (_vm->_globals.ACTION_SENS == 7)
ACTION_GAUCHE(8);
}
if (v73 == 4) {
if (_vm->_globals.ACTION_SENS == 1)
ACTION_DOS(1);
if (_vm->_globals.ACTION_SENS == 3)
ACTION_DROITE(1);
if (_vm->_globals.ACTION_SENS == 2)
Q_DROITE(1);
if (_vm->_globals.ACTION_SENS == 5)
ACTION_FACE(1);
if (_vm->_globals.ACTION_SENS == 8)
Q_GAUCHE(1);
if (_vm->_globals.ACTION_SENS == 7)
ACTION_GAUCHE(1);
}
if (v73 == 5) {
if (_vm->_globals.ACTION_SENS == 1)
ACTION_DOS(5);
if (_vm->_globals.ACTION_SENS == 3)
ACTION_DROITE(5);
if (_vm->_globals.ACTION_SENS == 2)
Q_DROITE(5);
if (_vm->_globals.ACTION_SENS == 5)
ACTION_FACE(5);
if (_vm->_globals.ACTION_SENS == 8)
Q_GAUCHE(5);
if (_vm->_globals.ACTION_SENS == 7)
ACTION_GAUCHE(5);
if (_vm->_globals.ACTION_SENS == 1)
ACTION_DOS(6);
if (_vm->_globals.ACTION_SENS == 3)
ACTION_DROITE(6);
if (_vm->_globals.ACTION_SENS == 2)
Q_DROITE(6);
if (_vm->_globals.ACTION_SENS == 5)
ACTION_FACE(6);
if (_vm->_globals.ACTION_SENS == 8)
Q_GAUCHE(6);
if (_vm->_globals.ACTION_SENS == 7)
ACTION_GAUCHE(6);
}
if (v73 == 7) {
if (_vm->_globals.ACTION_SENS == 1)
ACTION_DOS(2);
if (_vm->_globals.ACTION_SENS == 3)
ACTION_DROITE(2);
if (_vm->_globals.ACTION_SENS == 2)
Q_DROITE(2);
if (_vm->_globals.ACTION_SENS == 5)
ACTION_FACE(2);
if (_vm->_globals.ACTION_SENS == 8)
Q_GAUCHE(2);
if (_vm->_globals.ACTION_SENS == 7)
ACTION_GAUCHE(2);
}
if (v73 == 8) {
if (_vm->_globals.ACTION_SENS == 1)
ACTION_DOS(3);
if (_vm->_globals.ACTION_SENS == 3)
ACTION_DROITE(3);
if (_vm->_globals.ACTION_SENS == 2)
Q_DROITE(3);
if (_vm->_globals.ACTION_SENS == 5)
ACTION_FACE(3);
if (_vm->_globals.ACTION_SENS == 8)
Q_GAUCHE(3);
if (_vm->_globals.ACTION_SENS == 7)
ACTION_GAUCHE(3);
}
if (v73 == 9) {
if (_vm->_globals.ACTION_SENS == 1)
ACTION_DOS(5);
if (_vm->_globals.ACTION_SENS == 3)
ACTION_DROITE(5);
if (_vm->_globals.ACTION_SENS == 2)
Q_DROITE(5);
if (_vm->_globals.ACTION_SENS == 5)
ACTION_FACE(5);
if (_vm->_globals.ACTION_SENS == 8)
Q_GAUCHE(5);
if (_vm->_globals.ACTION_SENS == 7)
ACTION_GAUCHE(5);
}
if (v73 == 10) {
if (_vm->_globals.ACTION_SENS == 1)
ACTION_DOS(6);
if (_vm->_globals.ACTION_SENS == 3)
ACTION_DROITE(6);
if (_vm->_globals.ACTION_SENS == 2)
Q_DROITE(6);
if (_vm->_globals.ACTION_SENS == 5)
ACTION_FACE(6);
if (_vm->_globals.ACTION_SENS == 8)
Q_GAUCHE(6);
if (_vm->_globals.ACTION_SENS == 7)
ACTION_GAUCHE(6);
}
if (v73 == 11) {
if (_vm->_globals.ACTION_SENS == 1)
ACTION_DOS(7);
if (_vm->_globals.ACTION_SENS == 3)
ACTION_DROITE(7);
if (_vm->_globals.ACTION_SENS == 2)
Q_DROITE(7);
if (_vm->_globals.ACTION_SENS == 5)
ACTION_FACE(7);
if (_vm->_globals.ACTION_SENS == 8)
Q_GAUCHE(7);
if (_vm->_globals.ACTION_SENS == 7)
ACTION_GAUCHE(7);
}
if (v73 == 12) {
if (_vm->_globals.ACTION_SENS == 1)
ACTION_DOS(8);
if (_vm->_globals.ACTION_SENS == 3)
ACTION_DROITE(8);
if (_vm->_globals.ACTION_SENS == 2)
Q_DROITE(8);
if (_vm->_globals.ACTION_SENS == 5)
ACTION_FACE(8);
if (_vm->_globals.ACTION_SENS == 8)
Q_GAUCHE(8);
if (_vm->_globals.ACTION_SENS == 7)
ACTION_GAUCHE(8);
}
}
v1 = 1;
}
if (*(a1 + 2) == 'M' && *(a1 + 3) == 'U' && *(a1 + 4) == 'S')
v1 = 1;
if (*(a1 + 2) == 'W' && *(a1 + 3) == 'A' && *(a1 + 4) == 'I') {
v74 = READ_LE_UINT16(a1 + 5) / _vm->_globals.vitesse;
if (!v74)
v74 = 1;
v10 = 0;
if (v74 + 1 > 0) {
do {
_vm->_eventsManager.VBL();
++v10;
} while (v10 < v74 + 1);
}
v1 = 1;
}
if (*(a1 + 2) == 'O') {
if (*(a1 + 3) == 'B' && *(a1 + 4) == 'P') {
v1 = 1;
AJOUTE_OBJET(READ_LE_UINT16(a1 + 5));
}
if (*(a1 + 2) == 'O' && *(a1 + 3) == 'B' && *(a1 + 4) == 'M') {
v1 = 1;
DELETE_OBJET(READ_LE_UINT16(a1 + 5));
}
}
if (*(a1 + 2) == 'G' && *(a1 + 3) == 'O' && *(a1 + 4) == 'T')
v1 = 2;
if (*(a1 + 2) == 'Z') {
if (*(a1 + 3) == 'O' && *(a1 + 4) == 'N') {
ZONE_ON(READ_LE_UINT16(a1 + 5));
v1 = 1;
}
if (*(a1 + 2) == 'Z' && *(a1 + 3) == 'O' && *(a1 + 4) == 'F') {
ZONE_OFF(READ_LE_UINT16(a1 + 5));
v1 = 1;
}
}
if (*(a1 + 2) == 'E' && *(a1 + 3) == 'X' && *(a1 + 4) == 'I')
v1 = 5;
if (*(a1 + 2) == 'S' && *(a1 + 3) == 'O' && *(a1 + 4) == 'R') {
_vm->_globals.SORTIE = READ_LE_UINT16(a1 + 5);
v1 = 5;
}
if (*(a1 + 2) == 'B' && *(a1 + 3) == 'C' && *(a1 + 4) == 'A') {
_vm->_globals.CACHE_OFF(READ_LE_UINT16(a1 + 5));
v1 = 1;
}
if (*(a1 + 2) == 'A' && *(a1 + 3) == 'N' && *(a1 + 4) == 'I') {
v75 = READ_LE_UINT16(a1 + 5);
if (v75 <= 100)
BOBANIM_ON(v75);
else
BOBANIM_OFF(v75 - 100);
v1 = 1;
}
if (*(a1 + 2) == 'S' && *(a1 + 3) == 'P' && *(a1 + 4) == 'E') {
v76 = READ_LE_UINT16(a1 + 5);
if (v76 == 7)
_vm->_talkManager.PARLER_PERSO("rueh1.pe2");
if (v76 == 8)
_vm->_talkManager.PARLER_PERSO("ruef1.pe2");
if (v76 == 6) {
SPRITE_OFF(0);
OPTI_ONE(20, 0, 14, 4);
}
if (v76 == 12) {
_vm->_fontManager.TEXTE_OFF(9);
_vm->_eventsManager.VBL();
_vm->_eventsManager.VBL();
_vm->_talkManager.PARLER_PERSO("bqetueur.pe2");
}
if (v76 == 600) {
if (!_vm->_globals.internet) {
_vm->_graphicsManager.FADE_LINUX = 2;
_vm->_graphicsManager.FADESPD = 1;
if (_vm->_globals.SVGA == 2)
_vm->_animationManager.PLAY_ANM("BOMBE1A.ANM", 100, 18, 100);
if (_vm->_globals.SVGA == 1)
_vm->_animationManager.PLAY_ANM("BOMBE1.ANM", 100, 18, 100);
}
_vm->_graphicsManager.LOAD_IMAGE("BOMBEB");
_vm->_graphicsManager.SETCOLOR3(252, 100, 100, 100);
_vm->_graphicsManager.SETCOLOR3(253, 100, 100, 100);
_vm->_graphicsManager.SETCOLOR3(251, 100, 100, 100);
_vm->_graphicsManager.SETCOLOR3(254, 0, 0, 0);
_vm->_graphicsManager.OPTI_INI("BOMBE", 2);
_vm->_graphicsManager.FADE_INS();
}
if (v76 == 601) {
_vm->_globals.NO_VISU = 1;
_vm->_graphicsManager.AFFICHE_SPEED(_vm->_globals.SPRITE_ECRAN, 513, 163, 7);
_vm->_globals.NO_VISU = 0;
OPTI_ONE(2, 0, 16, 4);
}
if (v76 == 602) {
_vm->_globals.NO_VISU = 1;
_vm->_graphicsManager.AFFICHE_SPEED(_vm->_globals.SPRITE_ECRAN, 513, 163, 7);
_vm->_globals.NO_VISU = 0;
OPTI_ONE(4, 0, 16, 4);
}
if (v76 == 603) {
_vm->_globals.NO_VISU = 1;
_vm->_graphicsManager.AFFICHE_SPEED(_vm->_globals.SPRITE_ECRAN, 513, 163, 7);
_vm->_globals.NO_VISU = 0;
OPTI_ONE(3, 0, 16, 4);
_vm->_soundManager.SPECIAL_SOUND = 199;
_vm->_graphicsManager.FADE_LINUX = 2;
if (_vm->_globals.SVGA == 1)
_vm->_animationManager.PLAY_ANM("BOMBE2.ANM", 50, 14, 500);
if (_vm->_globals.SVGA == 2)
_vm->_animationManager.PLAY_ANM("BOMBE2A.ANM", 50, 14, 500);
_vm->_soundManager.SPECIAL_SOUND = 0;
memset(_vm->_graphicsManager.VESA_BUFFER, 0, 0x96000u);
_vm->_graphicsManager.NOFADE = 1;
_vm->_globals.SORTIE = 151;
}
if (v76 == 604) {
_vm->_globals.NO_VISU = 1;
_vm->_graphicsManager.AFFICHE_SPEED(_vm->_globals.SPRITE_ECRAN, 513, 163, 7);
_vm->_globals.NO_VISU = 0;
OPTI_ONE(1, 0, 16, 4);
_vm->_soundManager.SPECIAL_SOUND = 199;
if (_vm->_globals.SVGA == 1)
_vm->_animationManager.PLAY_ANM("BOMBE2.ANM", 50, 14, 500);
if (_vm->_globals.SVGA == 2)
_vm->_animationManager.PLAY_ANM("BOMBE2A.ANM", 50, 14, 500);
_vm->_soundManager.SPECIAL_SOUND = 0;
_vm->_graphicsManager.NOFADE = 1;
memset(_vm->_graphicsManager.VESA_BUFFER, 0, 0x96000u);
_vm->_globals.SORTIE = 151;
}
if (v76 == 605) {
_vm->_globals.NO_VISU = 1;
_vm->_graphicsManager.AFFICHE_SPEED(_vm->_globals.SPRITE_ECRAN, 513, 163, 7);
_vm->_globals.NO_VISU = 0;
OPTI_ONE(5, 0, 16, 4);
_vm->_graphicsManager.FADE_OUTS();
_vm->_soundManager.SPECIAL_SOUND = 199;
_vm->_graphicsManager.FADE_LINUX = 2;
if (_vm->_globals.SVGA == 1)
_vm->_animationManager.PLAY_ANM("BOMBE2.ANM", 50, 14, 500);
if (_vm->_globals.SVGA == 2)
_vm->_animationManager.PLAY_ANM("BOMBE2A.ANM", 50, 14, 500);
_vm->_soundManager.SPECIAL_SOUND = 0;
_vm->_graphicsManager.NOFADE = 1;
memset(_vm->_graphicsManager.VESA_BUFFER, 0, 0x96000u);
_vm->_globals.SORTIE = 151;
}
if (v76 == 606) {
_vm->_globals.NO_VISU = 1;
_vm->_graphicsManager.AFFICHE_SPEED(_vm->_globals.SPRITE_ECRAN, 513, 163, 7);
_vm->_globals.NO_VISU = 0;
OPTI_ONE(6, 0, 16, 4);
if (_vm->_globals.SVGA == 1)
_vm->_animationManager.PLAY_ANM("BOMBE3.ANM", 50, 14, 500);
if (_vm->_globals.SVGA == 2)
_vm->_animationManager.PLAY_ANM("BOMBE3A.ANM", 50, 14, 500);
memset(_vm->_graphicsManager.VESA_BUFFER, 0, 0x96000u);
_vm->_globals.SORTIE = 6;
}
if (v76 == 607) {
if (!_vm->_globals.internet) {
memcpy(_vm->_graphicsManager.OLD_PAL, _vm->_graphicsManager.Palette, 0x301u);
v1 = _vm->_graphicsManager.OLD_PAL[769];
_vm->_animationManager.PLAY_ANM2("plan.ANm", 50, 10, 800);
}
_vm->_globals.NBBLOC = 0;
}
if (v76 == 608) {
BOBANIM_OFF(2);
BOBANIM_OFF(3);
BOBANIM_OFF(4);
BOBANIM_OFF(6);
BOBANIM_OFF(11);
BOBANIM_OFF(10);
}
if (v76 == 609) {
BOBANIM_ON(2);
BOBANIM_ON(3);
BOBANIM_ON(4);
BOBANIM_ON(6);
BOBANIM_ON(11);
BOBANIM_ON(10);
}
if (v76 == 611) {
BOBANIM_ON(5);
BOBANIM_ON(7);
BOBANIM_ON(8);
BOBANIM_ON(9);
BOBANIM_ON(12);
BOBANIM_ON(13);
}
if (v76 == 610) {
BOBANIM_OFF(5);
BOBANIM_OFF(7);
BOBANIM_OFF(8);
BOBANIM_OFF(9);
BOBANIM_OFF(12);
BOBANIM_OFF(13);
}
if (v76 == 10)
_vm->_talkManager.PARLER_PERSO("bqeflic1.pe2");
if (v76 == 11)
_vm->_talkManager.PARLER_PERSO("bqeflic2.pe2");
if (v76 == 16)
_vm->_talkManager.PARLER_PERSO("ftoubib.pe2");
if (v76 == 17)
_vm->_talkManager.PARLER_PERSO("flic2b.pe2");
if (v76 == 18)
_vm->_talkManager.PARLER_PERSO("fjour.pe2");
if (v76 == 13) {
_vm->_eventsManager.souris_b = _vm->_eventsManager.souris_bb;
_vm->_globals.DESACTIVE_INVENT = 1;
_vm->_graphicsManager.FADE_OUTW();
_vm->_globals.CACHE_OFF();
SPRITE_OFF(0);
_vm->_fontManager.TEXTE_OFF(5);
_vm->_fontManager.TEXTE_OFF(9);
_vm->_graphicsManager.FIN_VISU();
CLEAR_ECRAN();
_vm->_soundManager.PLAY_SOUND("SOUND17.WAV");
_vm->_graphicsManager.FADE_LINUX = 2;
_vm->_soundManager.PLAY_SEQ2("HELICO.SEQ", 10, 4, 10);
_vm->_animationManager.CHARGE_ANIM("otage");
_vm->_graphicsManager.LOAD_IMAGE("IM05");
_vm->_graphicsManager.VISU_ALL();
v11 = 0;
do {
_vm->_eventsManager.VBL();
++v11;
} while (v11 <= 4);
_vm->_eventsManager.MOUSE_OFF();
_vm->_graphicsManager.FADE_INW_LINUX(_vm->_graphicsManager.VESA_BUFFER);
do
_vm->_eventsManager.VBL();
while (BOBPOSI(3) != 100);
_vm->_graphicsManager.FADE_OUTW_LINUX(_vm->_graphicsManager.VESA_BUFFER);
_vm->_graphicsManager.FIN_VISU();
if (!_vm->_globals.CENSURE) {
_vm->_soundManager.SPECIAL_SOUND = 16;
_vm->_graphicsManager.FADE_LINUX = 2;
_vm->_animationManager.PLAY_ANM("EGORGE.ANM", 50, 28, 500);
_vm->_soundManager.SPECIAL_SOUND = 0;
}
_vm->_animationManager.CHARGE_ANIM("ASCEN");
_vm->_eventsManager.MOUSE_OFF();
_vm->_graphicsManager.LOAD_IMAGE("ASCEN");
_vm->_graphicsManager.VISU_ALL();
v12 = 0;
do {
_vm->_eventsManager.VBL();
++v12;
} while (v12 <= 4);
_vm->_eventsManager.MOUSE_OFF();
_vm->_graphicsManager.FADE_INW_LINUX(_vm->_graphicsManager.VESA_BUFFER);
SCI_OPTI_ONE(1, 0, 17, 3);
_vm->_graphicsManager.FADE_OUTW_LINUX(_vm->_graphicsManager.VESA_BUFFER);
_vm->_graphicsManager.FIN_VISU();
_vm->_soundManager.SPECIAL_SOUND = 14;
_vm->_graphicsManager.FADE_LINUX = 2;
_vm->_soundManager.PLAY_SEQ2("ASSOM.SEQ", 10, 4, 500);
_vm->_soundManager.SPECIAL_SOUND = 0;
_vm->_globals.DESACTIVE_INVENT = 0;
_vm->_globals.HELICO = 1;
}
if (v76 == 36) {
if (_vm->_globals.SAUVEGARDE->data[svField270] == 2 && _vm->_globals.SAUVEGARDE->data[svField94] == 1 && _vm->_globals.SAUVEGARDE->data[svField95] == 1)
_vm->_globals.SAUVEGARDE->data[svField270] = 3;
if (!_vm->_globals.SAUVEGARDE->data[svField270])
_vm->_talkManager.PARLER_PERSO2("PATRON0.pe2");
if (_vm->_globals.SAUVEGARDE->data[svField270] == 1)
_vm->_talkManager.PARLER_PERSO2("PATRON1.pe2");
if (_vm->_globals.SAUVEGARDE->data[svField270] == 2)
_vm->_talkManager.PARLER_PERSO2("PATRON2.pe2");
if (_vm->_globals.SAUVEGARDE->data[svField270] == 3)
_vm->_talkManager.PARLER_PERSO2("PATRON3.pe2");
if (_vm->_globals.SAUVEGARDE->data[svField270] > 3) {
_vm->_talkManager.PARLER_PERSO2("PATRON4.pe2");
_vm->_globals.SAUVEGARDE->data[svField270] = 5;
}
}
if (v76 == 37) {
_vm->_graphicsManager.FADE_LINUX = 2;
_vm->_soundManager.PLAY_SEQ2("corde.SEQ", 32, 32, 100);
_vm->_graphicsManager.NOFADE = 1;
}
if (v76 == 38) {
_vm->_soundManager.CHARGE_SAMPLE(1, "SOUND44.WAV");
_vm->_soundManager.CHARGE_SAMPLE(2, "SOUND42.WAV");
_vm->_soundManager.CHARGE_SAMPLE(3, "SOUND41.WAV");
_vm->_soundManager.SPECIAL_SOUND = 17;
_vm->_soundManager.PLAY_SEQ(v1, "grenade.SEQ", 1, 32, 100);
_vm->_soundManager.SPECIAL_SOUND = 0;
_vm->_graphicsManager.FADE_LINUX = 2;
_vm->_animationManager.PLAY_ANM("CREVE17.ANM", 24, 24, 200);
_vm->_soundManager.DEL_SAMPLE(1);
_vm->_soundManager.DEL_SAMPLE(2);
_vm->_soundManager.DEL_SAMPLE(3);
_vm->_graphicsManager.NOFADE = 1;
}
if (v76 == 29) {
_vm->_globals.DESACTIVE_INVENT = 1;
_vm->_talkManager.OBJET_VIVANT("TELEP.pe2");
_vm->_globals.DESACTIVE_INVENT = 0;
}
if (v76 == 22)
_vm->_talkManager.OBJET_VIVANT("CADAVRE1.pe2");
if (v76 == 20)
_vm->_talkManager.PARLER_PERSO("PUNK.pe2");
if (v76 == 23)
_vm->_talkManager.PARLER_PERSO2("CHERCHE1.pe2");
if (v76 == 35) {
if (!_vm->_soundManager.SOUNDOFF) {
do
_vm->_eventsManager.VBL();
while (_vm->_soundManager.SOUND_FLAG);
}
_vm->_talkManager.PARLER_PERSO("PTLAB.pe2");
}
if (v76 == 46) {
_vm->_globals.NOT_VERIF = 1;
_vm->_globals.chemin = PTRNUL;
v13 = YSPR(0);
v14 = XSPR(0);
_vm->_globals.chemin = _vm->_linesManager.PARCOURS2(v14, v13, 564, 420);
_vm->_objectsManager.NUMZONE = -1;
do {
GOHOME();
_vm->_eventsManager.VBL();
} while (_vm->_globals.chemin != PTRNUL);
SPRITE_OFF(0);
_vm->_globals.NOT_VERIF = 1;
_vm->_soundManager.CHARGE_SAMPLE(1, "SOUND44.WAV");
_vm->_soundManager.CHARGE_SAMPLE(2, "SOUND45.WAV");
OPTI_BOBON(9, 10, -1, 0, 0, 0, 0);
v15 = 0;
do {
if (BOBPOSI(9) == 4 && !v15) {
_vm->_soundManager.PLAY_SAMPLE2(1);
v15 = 1;
}
if (BOBPOSI(9) == 5)
v15 = 0;
if (BOBPOSI(9) == 16 && !v15) {
_vm->_soundManager.PLAY_SAMPLE2(1);
v15 = 1;
}
if (BOBPOSI(9) == 17)
v15 = 0;
if (BOBPOSI(9) == 28 && !v15) {
_vm->_soundManager.PLAY_SAMPLE2(1);
v15 = 1;
}
if (BOBPOSI(9) == 29)
v15 = 0;
if (BOBPOSI(10) == 10 && !v15) {
_vm->_soundManager.PLAY_SAMPLE2(2);
v15 = 1;
}
if (BOBPOSI(10) == 11)
v15 = 0;
if (BOBPOSI(10) == 22 && !v15) {
_vm->_soundManager.PLAY_SAMPLE2(2);
v15 = 1;
}
if (BOBPOSI(10) == 23)
v15 = 0;
if (BOBPOSI(10) == 33 && !v15) {
_vm->_soundManager.PLAY_SAMPLE2(2);
v15 = 1;
}
if (BOBPOSI(10) == 34)
v15 = 0;
if (BOBPOSI(10) == 12)
_vm->_graphicsManager.AFFICHE_SPEED(_vm->_globals.SPRITE_ECRAN, 513, 249, 1);
if (BOBPOSI(10) == 23)
_vm->_graphicsManager.AFFICHE_SPEED(_vm->_globals.SPRITE_ECRAN, 513, 249, 2);
if (BOBPOSI(10) == 34)
_vm->_graphicsManager.AFFICHE_SPEED(_vm->_globals.SPRITE_ECRAN, 513, 249, 3);
_vm->_eventsManager.VBL();
} while (BOBPOSI(9) != 36);
SPRITE_ON(0);
BOBANIM_OFF(9);
BOBANIM_OFF(10);
_vm->_soundManager.DEL_SAMPLE(1);
_vm->_soundManager.DEL_SAMPLE(2);
}
if (v76 == 59) {
_vm->_globals.NOT_VERIF = 1;
g_old_x = XSPR(0);
g_old_sens = -1;
_vm->_globals.Compteur = 0;
_vm->_globals.chemin = PTRNUL;
v16 = YSPR(0);
v17 = XSPR(0);
_vm->_globals.chemin = _vm->_linesManager.PARCOURS2(v17, v16, 445, 332);
_vm->_globals.NOT_VERIF = 1;
do {
GOHOME();
_vm->_eventsManager.VBL();
} while (_vm->_globals.chemin != PTRNUL);
SPRITE_OFF(0);
BOBANIM_ON(7);
SET_BOBPOSI(7, 0);
v18 = 0;
_vm->_soundManager.CHARGE_SAMPLE(1, "SOUND40.WAV");
do {
if (BOBPOSI(7) == 10 && !v18) {
_vm->_soundManager.PLAY_SAMPLE2(1);
v18 = 1;
}
if (BOBPOSI(7) == 11)
v18 = 0;
if (BOBPOSI(7) == 18 && !v18) {
_vm->_soundManager.PLAY_SAMPLE2(1);
v18 = 1;
}
if (BOBPOSI(7) == 19)
v18 = 0;
if (BOBPOSI(7) == 19)
BOBANIM_ON(3);
_vm->_eventsManager.VBL();
} while (BOBPOSI(3) != 48);
_vm->_soundManager.DEL_SAMPLE(1);
SETANISPR(0, 62);
SPRITE_ON(0);
BOBANIM_ON(6);
BOBANIM_OFF(7);
BOBANIM_OFF(3);
}
if (v76 == 50) {
_vm->_soundManager.PLAY_SOUND("SOUND46.WAv");
OPTI_ONE(11, 0, 23, 0);
}
if (v76 == 49) {
_vm->_globals.CACHE_OFF();
SPRITE_OFF(0);
OPTI_BOBON(9, 10, -1, 0, 0, 0, 0);
v19 = 12;
if (_vm->_globals.SAUVEGARDE->data[svField133] == 1)
v19 = 41;
v20 = 0;
do {
if (BOBPOSI(9) == 4 && !v20) {
_vm->_soundManager.PLAY_SOUND2("SOUND44.WAV");
v20 = 1;
}
if (BOBPOSI(9) == 5)
v20 = 0;
if (BOBPOSI(9) == 18 && !v20) {
_vm->_soundManager.PLAY_SOUND2("SOUND46.WAV");
v20 = 1;
}
if (BOBPOSI(9) == 19)
v20 = 0;
if (BOBPOSI(10) == 11 && !v20) {
_vm->_soundManager.PLAY_SOUND2("SOUND45.WAV");
v20 = 1;
}
if (BOBPOSI(10) == 12)
v20 = 0;
_vm->_eventsManager.VBL();
} while (BOBPOSI(9) != v19);
if (v19 == 12) {
SPRITE_ON(0);
BOBANIM_OFF(9);
}
_vm->_globals.CACHE_ON();
}
if (v76 == 80) {
SPRITE_OFF(0);
BOBANIM_ON(12);
BOBANIM_ON(13);
SET_BOBPOSI(12, 0);
SET_BOBPOSI(13, 0);
v21 = 0;
_vm->_soundManager.LOAD_WAV("SOUND44.WAV", 1);
_vm->_soundManager.LOAD_WAV("SOUND71.WAV", 2);
do {
if (BOBPOSI(12) == 4 && !v21) {
_vm->_soundManager._vm->_soundManager.PLAY_WAV(1);
v21 = 1;
}
if (BOBPOSI(12) == 5)
v21 = 0;
if (BOBPOSI(4) == 5 && !v21) {
_vm->_soundManager._vm->_soundManager.PLAY_WAV(2);
v21 = 1;
}
if (BOBPOSI(4) == 6)
v21 = 0;
if (BOBPOSI(13) == 8) {
BOBANIM_OFF(13);
BOBANIM_OFF(3);
BOBANIM_ON(4);
SET_BOBPOSI(4, 0);
SET_BOBPOSI(13, 0);
}
_vm->_eventsManager.VBL();
} while (BOBPOSI(4) != 16);
BOBANIM_OFF(12);
BOBANIM_OFF(4);
SPRITE_ON(0);
OBSSEUL = 1;
INILINK("IM27a");
OBSSEUL = 0;
}
if (v76 == 81) {
_vm->_globals.NOT_VERIF = 1;
g_old_x = XSPR(0);
g_old_sens = -1;
_vm->_globals.Compteur = 0;
_vm->_globals.chemin = PTRNUL;
v22 = YSPR(0);
v23 = XSPR(0);
_vm->_globals.chemin = _vm->_linesManager.PARCOURS2(v23, v22, 119, 268);
_vm->_globals.NOT_VERIF = 1;
do {
GOHOME();
_vm->_eventsManager.VBL();
} while (_vm->_globals.chemin != PTRNUL);
SPRITE_OFF(0);
BOBANIM_ON(11);
BOBANIM_ON(8);
SET_BOBPOSI(11, 0);
SET_BOBPOSI(8, 0);
_vm->_soundManager.LOAD_WAV("SOUND44.WAV", 1);
_vm->_soundManager.LOAD_WAV("SOUND48.WAV", 2);
_vm->_soundManager.LOAD_WAV("SOUND49.WAV", 3);
v24 = 0;
do {
if (BOBPOSI(11) == 4 && !v24) {
_vm->_soundManager._vm->_soundManager.PLAY_WAV(1);
v24 = 1;
}
if (BOBPOSI(11) == 5)
v24 = 0;
if (BOBPOSI(8) == 11 && !v24) {
_vm->_soundManager._vm->_soundManager.PLAY_WAV(2);
v24 = 1;
}
if (BOBPOSI(8) == 12)
v24 = 0;
_vm->_eventsManager.VBL();
} while (BOBPOSI(8) != 32);
_vm->_graphicsManager.AFFICHE_SPEED(_vm->_globals.SPRITE_ECRAN, 201, 14, 1);
SPRITE_ON(0);
BOBANIM_OFF(11);
BOBANIM_OFF(8);
BOBANIM_ON(5);
BOBANIM_ON(6);
SET_BOBPOSI(5, 0);
SET_BOBPOSI(6, 0);
_vm->_soundManager._vm->_soundManager.PLAY_WAV(3);
do
_vm->_eventsManager.VBL();
while (BOBPOSI(5) != 74);
BOBANIM_OFF(5);
BOBANIM_OFF(6);
BOBANIM_ON(9);
BOBANIM_ON(7);
}
if (v76 == 95) {
BOBANIM_ON(9);
BOBANIM_ON(10);
BOBANIM_ON(12);
SET_BOBPOSI(9, 0);
SET_BOBPOSI(10, 0);
SET_BOBPOSI(12, 0);
SPRITE_OFF(0);
do
_vm->_eventsManager.VBL();
while (BOBPOSI(9) != 15);
BOBANIM_OFF(9);
SPRITE_ON(0);
_vm->_soundManager.PLAY_SOUND("SOUND50.WAV");
do
_vm->_eventsManager.VBL();
while (BOBPOSI(12) != 117);
_vm->_graphicsManager.AFFICHE_SPEED(_vm->_globals.SPRITE_ECRAN, 830, 122, 0);
BOBANIM_OFF(12);
BOBANIM_OFF(10);
BOBANIM_ON(11);
}
if (v76 == 85) {
BOBANIM_OFF(3);
BOBANIM_ON(5);
SET_BOBPOSI(5, 0);
do
_vm->_eventsManager.VBL();
while (BOBPOSI(5) != 6);
BOBANIM_OFF(5);
BOBANIM_ON(6);
OBSSEUL = 1;
INILINK("IM24a");
OBSSEUL = 0;
}
if (v76 == 88) {
if (_vm->_globals.SAUVEGARDE->data[svField183] == 1) {
SET_BOBPOSI(1, 0);
SET_BOBPOSI(2, 0);
BOBANIM_ON(1);
BOBANIM_ON(2);
_vm->_soundManager.CHARGE_SAMPLE(1, "SOUND40.WAV");
v25 = 0;
do {
if (BOBPOSI(1) == 1 && !v25) {
_vm->_soundManager.PLAY_SAMPLE2(1);
v25 = 1;
}
if (BOBPOSI(1) == 2)
v25 = 0;
if (BOBPOSI(1) == 3 && !v25) {
_vm->_soundManager.PLAY_SAMPLE2(1);
v25 = 1;
}
if (BOBPOSI(1) == 4)
v25 = 0;
if (BOBPOSI(1) == 5 && !v25) {
_vm->_soundManager.PLAY_SAMPLE2(1);
v25 = 1;
}
if (BOBPOSI(1) == 6)
v25 = 0;
if (BOBPOSI(1) == 7 && !v25) {
_vm->_soundManager.PLAY_SAMPLE2(1);
v25 = 1;
}
if (BOBPOSI(1) == 8)
v25 = 0;
_vm->_eventsManager.VBL();
} while (BOBPOSI(1) != 9);
BOBANIM_OFF(1);
BOBANIM_OFF(2);
_vm->_graphicsManager.AFFICHE_SPEED(_vm->_globals.SPRITE_ECRAN, 283, 160, 6);
_vm->_soundManager.DEL_SAMPLE(1);
}
if (_vm->_globals.SAUVEGARDE->data[svField183] == 2) {
SET_BOBPOSI(1, 0);
SET_BOBPOSI(3, 0);
BOBANIM_ON(1);
BOBANIM_ON(3);
_vm->_soundManager.CHARGE_SAMPLE(1, "SOUND40.WAV");
v26 = 0;
do {
if (BOBPOSI(1) == 1 && !v26) {
_vm->_soundManager.PLAY_SAMPLE2(1);
v26 = 1;
}
if (BOBPOSI(1) == 2)
v26 = 0;
if (BOBPOSI(1) == 3 && !v26) {
_vm->_soundManager.PLAY_SAMPLE2(1);
v26 = 1;
}
if (BOBPOSI(1) == 4)
v26 = 0;
if (BOBPOSI(1) == 5 && !v26) {
_vm->_soundManager.PLAY_SAMPLE2(1);
v26 = 1;
}
if (BOBPOSI(1) == 6)
v26 = 0;
if (BOBPOSI(1) == 7 && !v26) {
_vm->_soundManager.PLAY_SAMPLE2(1);
v26 = 1;
}
if (BOBPOSI(1) == 8)
v26 = 0;
_vm->_eventsManager.VBL();
} while (BOBPOSI(1) != 9);
BOBANIM_OFF(1);
BOBANIM_OFF(3);
_vm->_graphicsManager.AFFICHE_SPEED(_vm->_globals.SPRITE_ECRAN, 283, 161, 8);
_vm->_soundManager.DEL_SAMPLE(1);
}
}
if (v76 == 90) {
_vm->_soundManager.PLAY_SOUND("SOUND52.WAV");
if (!_vm->_globals.SAUVEGARDE->data[svField186]) {
_vm->_soundManager.PLAY_SEQ(v1, "CIB5A.SEQ", 1, 12, 1);
_vm->_graphicsManager.AFFICHE_SPEED(_vm->_globals.SPRITE_ECRAN, 155, 29, 0);
}
if (_vm->_globals.SAUVEGARDE->data[svField186] == 1) {
_vm->_soundManager.PLAY_SEQ(v1, "CIB5C.SEQ", 1, 12, 1);
_vm->_graphicsManager.AFFICHE_SPEED(_vm->_globals.SPRITE_ECRAN, 155, 29, 0);
_vm->_graphicsManager.AFFICHE_SPEED(_vm->_globals.SPRITE_ECRAN, 329, 87, 2);
}
}
if (v76 == 91) {
_vm->_soundManager.PLAY_SOUND("SOUND52.WAV");
if (!_vm->_globals.SAUVEGARDE->data[svField186]) {
_vm->_soundManager.PLAY_SEQ(v1, "CIB5B.SEQ", 1, 12, 1);
_vm->_graphicsManager.AFFICHE_SPEED(_vm->_globals.SPRITE_ECRAN, 155, 29, 5);
}
if (_vm->_globals.SAUVEGARDE->data[svField186] == 1) {
_vm->_soundManager.PLAY_SEQ(v1, "CIB5D.SEQ", 1, 12, 1);
_vm->_graphicsManager.AFFICHE_SPEED(_vm->_globals.SPRITE_ECRAN, 155, 29, 5);
_vm->_graphicsManager.AFFICHE_SPEED(_vm->_globals.SPRITE_ECRAN, 283, 160, 6);
}
}
if (v76 == 92) {
_vm->_soundManager.PLAY_SOUND("SOUND52.WAV");
if (!_vm->_globals.SAUVEGARDE->data[svField184]) {
_vm->_soundManager.PLAY_SEQ(v1, "CIB6A.SEQ", 1, 12, 1);
_vm->_graphicsManager.AFFICHE_SPEED(_vm->_globals.SPRITE_ECRAN, 155, 29, 0);
}
if (_vm->_globals.SAUVEGARDE->data[svField184] == 1) {
_vm->_soundManager.PLAY_SEQ(v1, "CIB6C.SEQ", 1, 12, 1);
_vm->_graphicsManager.AFFICHE_SPEED(_vm->_globals.SPRITE_ECRAN, 155, 29, 0);
_vm->_graphicsManager.AFFICHE_SPEED(_vm->_globals.SPRITE_ECRAN, 293, 139, 3);
}
}
if (v76 == 93) {
_vm->_soundManager.PLAY_SOUND("SOUND52.WAV");
if (!_vm->_globals.SAUVEGARDE->data[svField184]) {
_vm->_soundManager.PLAY_SEQ(v1, "CIB6B.SEQ", 1, 12, 1);
_vm->_graphicsManager.AFFICHE_SPEED(_vm->_globals.SPRITE_ECRAN, 155, 29, 5);
}
if (_vm->_globals.SAUVEGARDE->data[svField184] == 1) {
_vm->_soundManager.PLAY_SEQ(v1, "CIB6D.SEQ", 1, 12, 1);
_vm->_graphicsManager.AFFICHE_SPEED(_vm->_globals.SPRITE_ECRAN, 155, 29, 5);
_vm->_graphicsManager.AFFICHE_SPEED(_vm->_globals.SPRITE_ECRAN, 283, 161, 8);
}
}
if (v76 == 62)
_vm->_talkManager.OBJET_VIVANT("SBCADA.pe2");
if (v76 == 65)
_vm->_talkManager.OBJET_VIVANT("ScCADA.pe2");
if (v76 == 105) {
_vm->_globals.NOT_VERIF = 1;
g_old_x = XSPR(0);
g_old_sens = -1;
_vm->_globals.Compteur = 0;
_vm->_globals.chemin = PTRNUL;
if (_vm->_globals.SAUVEGARDE->data[svField253] == 1) {
v27 = YSPR(0);
v28 = XSPR(0);
_vm->_globals.chemin = _vm->_linesManager.PARCOURS2(v28, v27, 201, 294);
}
if (_vm->_globals.SAUVEGARDE->data[svField253] == 2) {
v29 = YSPR(0);
v30 = XSPR(0);
_vm->_globals.chemin = _vm->_linesManager.PARCOURS2(v30, v29, 158, 338);
}
if (_vm->_globals.SAUVEGARDE->data[svField253] > 2) {
v31 = YSPR(0);
v32 = XSPR(0);
_vm->_globals.chemin = _vm->_linesManager.PARCOURS2(v32, v31, 211, 393);
}
_vm->_globals.NOT_VERIF = 1;
do {
GOHOME();
_vm->_eventsManager.VBL();
} while (_vm->_globals.chemin != PTRNUL);
SPRITE_OFF(0);
SETANISPR(0, 60);
_vm->_soundManager.CHARGE_SAMPLE(1, "SOUND63.WAV");
if (_vm->_globals.SAUVEGARDE->data[svField253] > 2) {
BOBANIM_ON(4);
v33 = 0;
do {
if (BOBPOSI(4) == 9 && !v33) {
_vm->_soundManager.PLAY_SAMPLE2(1);
v33 = 1;
}
if (BOBPOSI(4) == 10)
v33 = 0;
if (BOBPOSI(4) == 32 && !v33) {
_vm->_soundManager.PLAY_SAMPLE2(1);
v33 = 1;
}
if (BOBPOSI(4) == 33)
v33 = 0;
if (BOBPOSI(4) == 55 && !v33) {
_vm->_soundManager.PLAY_SAMPLE2(1);
v33 = 1;
}
if (BOBPOSI(4) == 56)
v33 = 0;
_vm->_eventsManager.VBL();
} while (BOBPOSI(4) != 72);
BOBANIM_OFF(4);
}
if (_vm->_globals.SAUVEGARDE->data[svField253] == 1) {
BOBANIM_ON(6);
v34 = 0;
do {
if (BOBPOSI(6) == 9 && !v34) {
_vm->_soundManager.PLAY_SAMPLE2(1);
v34 = 1;
}
if (BOBPOSI(6) == 10)
v34 = 0;
if (BOBPOSI(6) == 32 && !v34) {
_vm->_soundManager.PLAY_SAMPLE2(1);
v34 = 1;
}
if (BOBPOSI(6) == 33)
v34 = 0;
if (BOBPOSI(6) == 55 && !v34) {
_vm->_soundManager.PLAY_SAMPLE2(1);
v34 = 1;
}
if (BOBPOSI(6) == 56)
v34 = 0;
_vm->_eventsManager.VBL();
} while (BOBPOSI(6) != 72);
BOBANIM_OFF(6);
}
if (_vm->_globals.SAUVEGARDE->data[svField253] == 2) {
BOBANIM_ON(5);
v35 = 0;
do {
if (BOBPOSI(5) == 9 && !v35) {
_vm->_soundManager.PLAY_SAMPLE2(1);
v35 = 1;
}
if (BOBPOSI(5) == 10)
v35 = 0;
if (BOBPOSI(5) == 32 && !v35) {
_vm->_soundManager.PLAY_SAMPLE2(1);
v35 = 1;
}
if (BOBPOSI(5) == 33)
v35 = 0;
if (BOBPOSI(5) == 55 && !v35) {
_vm->_soundManager.PLAY_SAMPLE2(1);
v35 = 1;
}
if (BOBPOSI(5) == 56)
v35 = 0;
_vm->_eventsManager.VBL();
} while (BOBPOSI(5) != 72);
BOBANIM_OFF(5);
}
SPRITE_ON(0);
ACTION_DOS(1);
_vm->_soundManager.DEL_SAMPLE(1);
}
if (v76 == 106) {
SPRITE_OFF(0);
BOBANIM_ON(4);
SET_BOBPOSI(4, 0);
_vm->_soundManager.LOAD_WAV("SOUND61.WAV", 1);
_vm->_soundManager.LOAD_WAV("SOUND62.WAV", 2);
_vm->_soundManager.LOAD_WAV("SOUND61.WAV", 3);
do
_vm->_eventsManager.VBL();
while (BOBPOSI(4) != 10);
_vm->_soundManager._vm->_soundManager.PLAY_WAV(1);
do
_vm->_eventsManager.VBL();
while (BOBPOSI(4) != 18);
_vm->_soundManager._vm->_soundManager.PLAY_WAV(2);
do
_vm->_eventsManager.VBL();
while (BOBPOSI(4) != 62);
_vm->_soundManager._vm->_soundManager.PLAY_WAV(3);
do
_vm->_eventsManager.VBL();
while (BOBPOSI(4) != 77);
BOBANIM_OFF(4);
SPRITE_ON(0);
}
if (v76 == 107) {
SPRITE_OFF(0);
BOBANIM_ON(5);
SET_BOBPOSI(5, 0);
_vm->_soundManager.LOAD_WAV("SOUND61.WAV", 1);
_vm->_soundManager.LOAD_WAV("SOUND62.WAV", 2);
_vm->_soundManager.LOAD_WAV("SOUND61.WAV", 3);
do
_vm->_eventsManager.VBL();
while (BOBPOSI(5) != 10);
_vm->_soundManager._vm->_soundManager.PLAY_WAV(1);
do
_vm->_eventsManager.VBL();
while (BOBPOSI(5) != 18);
_vm->_soundManager._vm->_soundManager.PLAY_WAV(2);
do
_vm->_eventsManager.VBL();
while (BOBPOSI(5) != 38);
_vm->_soundManager._vm->_soundManager.PLAY_WAV(3);
do
_vm->_eventsManager.VBL();
while (BOBPOSI(5) != 53);
BOBANIM_OFF(5);
SPRITE_ON(0);
}
if (v76 == 210) {
_vm->_animationManager.NO_SEQ = 1;
_vm->_soundManager.SPECIAL_SOUND = 210;
_vm->_soundManager.PLAY_SEQ2("SECRET1.SEQ", 1, 12, 1);
_vm->_soundManager.SPECIAL_SOUND = 0;
_vm->_graphicsManager.AFFICHE_SPEED(_vm->_globals.SPRITE_ECRAN, 192, 152, 0);
BOBANIM_ON(9);
OBSSEUL = 1;
INILINK("IM73a");
OBSSEUL = 0;
_vm->_globals.CACHE_ON();
_vm->_animationManager.NO_SEQ = 0;
_vm->_globals.CACHE_ADD(0);
_vm->_globals.CACHE_ADD(1);
_vm->_graphicsManager.SETCOLOR4(252, 100, 100, 100);
_vm->_graphicsManager.SETCOLOR4(253, 100, 100, 100);
_vm->_graphicsManager.SETCOLOR4(251, 100, 100, 100);
_vm->_graphicsManager.SETCOLOR4(254, 0, 0, 0);
}
if (v76 == 211) {
SPRITE_OFF(0);
_vm->_globals.CACHE_OFF();
_vm->_animationManager.NO_SEQ = 1;
_vm->_globals.NO_VISU = 0;
_vm->_soundManager.SPECIAL_SOUND = 211;
_vm->_soundManager.PLAY_SEQ(v1, "SECRET2.SEQ", 1, 12, 100);
_vm->_soundManager.SPECIAL_SOUND = 0;
_vm->_animationManager.NO_SEQ = 0;
_vm->_graphicsManager.NOFADE = 1;
_vm->_graphicsManager.FADE_OUTW();
v36 = 1;
do {
_vm->_eventsManager.VBL();
++v36;
} while (v36 <= 39);
_vm->_graphicsManager.SETCOLOR4(252, 100, 100, 100);
_vm->_graphicsManager.SETCOLOR4(253, 100, 100, 100);
_vm->_graphicsManager.SETCOLOR4(251, 100, 100, 100);
_vm->_graphicsManager.SETCOLOR4(254, 0, 0, 0);
}
if (v76 == 207)
_vm->_talkManager.OBJET_VIVANT("PANNEAU.PE2");
if (v76 == 208) {
_vm->_globals.DESACTIVE_INVENT = 1;
if (_vm->_globals.SAUVEGARDE->data[svField6] != _vm->_globals.SAUVEGARDE->data[svField401]) {
_vm->_soundManager.SPECIAL_SOUND = 208;
_vm->_eventsManager.NOESC = true;
_vm->_soundManager.PLAY_SEQ(v1, "SORT.SEQ", 10, 4, 10);
_vm->_eventsManager.NOESC = false;
_vm->_soundManager.SPECIAL_SOUND = 0;
}
_vm->_globals.NOT_VERIF = 1;
_vm->_globals.chemin = PTRNUL;
v37 = YSPR(0);
v38 = XSPR(0);
_vm->_globals.chemin = _vm->_linesManager.PARCOURS2(v38, v37, 330, 418);
_vm->_globals.NOT_VERIF = 1;
_vm->_objectsManager.NUMZONE = 0;
do {
GOHOME();
_vm->_eventsManager.VBL();
} while (_vm->_globals.chemin != PTRNUL);
SETANISPR(0, 64);
_vm->_globals.SORTIE = _vm->_globals.SAUVEGARDE->data[svField401];
_vm->_globals.DESACTIVE_INVENT = 0;
}
if (v76 == 209) {
SET_BOBPOSI(1, 0);
SET_BOBPOSI(2, 0);
SETANISPR(0, 60);
BOBANIM_OFF(4);
BOBANIM_ON(1);
do
_vm->_eventsManager.VBL();
while (BOBPOSI(1) != 9);
BOBANIM_OFF(1);
_vm->_globals.NO_VISU = 1;
_vm->_globals.chemin = PTRNUL;
_vm->_globals.NOT_VERIF = 1;
v39 = YSPR(0);
v40 = XSPR(0);
_vm->_globals.chemin = _vm->_linesManager.PARCOURS2(v40, v39, 330, 314);
_vm->_objectsManager.NUMZONE = 0;
_vm->_globals.NOT_VERIF = 1;
do {
GOHOME();
_vm->_eventsManager.VBL();
} while (_vm->_globals.chemin != PTRNUL);
SETANISPR(0, 64);
BOBANIM_ON(2);
_vm->_soundManager.PLAY_SOUND("SOUND66.WAV");
do
_vm->_eventsManager.VBL();
while (BOBPOSI(2) != 10);
BOBANIM_OFF(2);
BOBANIM_ON(4);
}
if (v76 == 201) {
BOBANIM_ON(3);
do
_vm->_eventsManager.VBL();
while (BOBPOSI(3) != 18);
BOBANIM_OFF(3);
BOBANIM_ON(4);
}
if (v76 == 203) {
_vm->_globals.NO_VISU = 1;
SPRITE_OFF(0);
BOBANIM_ON(4);
do {
_vm->_eventsManager.VBL();
if (BOBPOSI(4) == 18)
_vm->_graphicsManager.AFFICHE_SPEED(_vm->_globals.SPRITE_ECRAN, 18, 334, 0);
} while (BOBPOSI(4) != 26);
BOBANIM_OFF(4);
_vm->_globals.NO_VISU = 0;
SPRITE_ON(0);
}
if (v76 == 204) {
SPRITE_OFF(0);
BOBANIM_ON(3);
_vm->_soundManager.LOAD_WAV("SOUND67.WAV", 1);
v41 = 0;
do {
if (BOBPOSI(3) == 10 && !v41) {
_vm->_soundManager._vm->_soundManager.PLAY_WAV(1);
v41 = 1;
}
if (BOBPOSI(3) == 11)
v41 = 0;
_vm->_eventsManager.VBL();
} while (BOBPOSI(3) != 50);
BOBANIM_OFF(3);
SPRITE_ON(0);
}
if (v76 == 205) {
SPRITE_OFF(0);
BOBANIM_ON(4);
_vm->_soundManager.LOAD_WAV("SOUND69.WAV", 1);
v42 = 0;
do {
if (BOBPOSI(4) == 10 && !v42) {
_vm->_soundManager.PLAY_WAV(1);
v42 = 1;
}
if (BOBPOSI(4) == 11)
v42 = 0;
_vm->_eventsManager.VBL();
} while (BOBPOSI(4) != 24);
BOBANIM_OFF(4);
SPRITE_ON(0);
}
if (v76 == 175) {
SETANISPR(0, 55);
SPRITE_OFF(0);
BOBANIM_ON(9);
BOBANIM_ON(10);
BOB_OFFSET(10, 300);
_vm->_soundManager.PLAY_SOUND("SOUND44.WAV");
do
_vm->_eventsManager.VBL();
while (BOBPOSI(10) != 7);
BOBANIM_ON(6);
BOBANIM_OFF(3);
do
_vm->_eventsManager.VBL();
while (BOBPOSI(6) != 10);
_vm->_soundManager.PLAY_SOUND("SOUND71.WAV");
BOBANIM_ON(7);
BOBANIM_OFF(4);
do
_vm->_eventsManager.VBL();
while (BOBPOSI(7) != 15);
BOBANIM_OFF(5);
BOBANIM_ON(8);
_vm->_soundManager.PLAY_SOUND("SOUND70.WAV");
do
_vm->_eventsManager.VBL();
while (BOBPOSI(8) != 76);
BOBANIM_OFF(6);
BOBANIM_OFF(7);
BOBANIM_OFF(8);
BOBANIM_OFF(9);
BOBANIM_OFF(10);
SPRITE_ON(0);
}
if (v76 == 229) {
_vm->_soundManager.SPECIAL_SOUND = 229;
_vm->_soundManager.PLAY_SEQ(v1, "MUR.SEQ", 1, 12, 1);
_vm->_soundManager.SPECIAL_SOUND = 0;
_vm->_graphicsManager.AFFICHE_SPEED(_vm->_globals.SPRITE_ECRAN, 340, 157, 2);
}
if (v76 == 230) {
OBSSEUL = 1;
INILINK("IM93a");
OBSSEUL = 0;
_vm->_globals.CACHE_ON();
_vm->_globals.NOT_VERIF = 1;
g_old_x = XSPR(0);
g_old_sens = -1;
_vm->_globals.Compteur = 0;
_vm->_globals.chemin = PTRNUL;
_vm->_globals.NOT_VERIF = 1;
v43 = YSPR(0);
v44 = XSPR(0);
_vm->_globals.chemin = _vm->_linesManager.PARCOURS2(v44, v43, 488, 280);
_vm->_globals.NOT_VERIF = 1;
do {
GOHOME();
_vm->_eventsManager.VBL();
} while (_vm->_globals.chemin != PTRNUL);
SPRITE_OFF(0);
v45 = 0;
BOBANIM_ON(7);
do {
if (BOBPOSI(7) == 9 && !v45) {
v45 = 1;
_vm->_soundManager.PLAY_SOUND("SOUND81.WAV");
}
_vm->_eventsManager.VBL();
} while (BOBPOSI(7) != 15);
BOBANIM_OFF(7);
SETXSPR(0, 476);
SETYSPR(0, 278);
SPRITE_ON(0);
_vm->_graphicsManager.AFFICHE_SPEED(_vm->_globals.SPRITE_ECRAN, 337, 154, 3);
OBSSEUL = 1;
INILINK("IM93c");
OBSSEUL = 0;
_vm->_globals.CACHE_ON();
}
if (v76 == 231) {
_vm->_globals.CACHE_OFF();
SPRITE_OFF(0);
BOBANIM_ON(12);
do
_vm->_eventsManager.VBL();
while (BOBPOSI(12) != 6);
_vm->_globals.NOPARLE = 1;
_vm->_talkManager.PARLER_PERSO("PRMORT.pe2");
_vm->_globals.NOPARLE = 0;
do
_vm->_eventsManager.VBL();
while (BOBPOSI(12) != 12);
SPRITE_ON(0);
BOBANIM_OFF(12);
_vm->_globals.CACHE_ON();
}
if (v76 == 233) {
_vm->_globals.CACHE_OFF();
SPRITE_OFF(0);
BOBANIM_ON(11);
v46 = 0;
do {
_vm->_eventsManager.VBL();
if (BOBPOSI(11) == 10 && !v46)
v46 = 1;
} while (BOBPOSI(11) != 13);
BOBANIM_OFF(11);
_vm->_globals.CACHE_ON();
BOBANIM_ON(13);
do
_vm->_eventsManager.VBL();
while (BOBPOSI(13) != 48);
_vm->_globals.NOPARLE = 1;
_vm->_talkManager.PARLER_PERSO("HRADIO.PE2");
_vm->_globals.NOPARLE = 0;
_vm->_graphicsManager.FADE_OUTW();
BOBANIM_OFF(13);
_vm->_graphicsManager.NOFADE = 1;
_vm->_globals.SORTIE = 94;
}
if (v76 == 52) {
_vm->_globals.NOPARLE = 1;
_vm->_talkManager.PARLER_PERSO("GARDE.PE2");
_vm->_globals.NOPARLE = 0;
}
if (v76 == 53)
_vm->_talkManager.PARLER_PERSO("GARDE1.pe2");
if (v76 == 54)
_vm->_talkManager.PARLER_PERSO("GARDE2.pe2");
if (v76 == 40)
_vm->_talkManager.PARLER_PERSO("MAGE.pe2");
if (v76 == 236) {
v47 = _vm->_globals.SAUVEGARDE->data[svField341];
if (v47) {
if (v47 == 2)
v70 = 5;
if (v47 == 3)
v70 = 4;
if (v47 == 1)
v70 = 6;
_vm->_soundManager._vm->_soundManager.PLAY_SOUND("SOUND83.WAV");
OPTI_ONE(v70, 26, 50, 0);
if (_vm->_globals.SAUVEGARDE->data[svField341] == 1)
_vm->_graphicsManager.AFFICHE_SPEED(_vm->_globals.SPRITE_ECRAN, 27, 117, 0);
if (_vm->_globals.SAUVEGARDE->data[svField341] == 2)
_vm->_graphicsManager.AFFICHE_SPEED(_vm->_globals.SPRITE_ECRAN, 145, 166, 2);
if (_vm->_globals.SAUVEGARDE->data[svField341] == 3)
_vm->_graphicsManager.AFFICHE_SPEED(_vm->_globals.SPRITE_ECRAN, 296, 212, 4);
if (_vm->_globals.SAUVEGARDE->data[svField341] == 1)
_vm->_globals.SAUVEGARDE->data[svField338] = 0;
if (_vm->_globals.SAUVEGARDE->data[svField341] == 2)
_vm->_globals.SAUVEGARDE->data[svField339] = 0;
if (_vm->_globals.SAUVEGARDE->data[svField341] == 3)
_vm->_globals.SAUVEGARDE->data[svField340] = 0;
}
_vm->_soundManager._vm->_soundManager.PLAY_SOUND("SOUND83.WAV");
OPTI_ONE(6, 0, 23, 0);
_vm->_graphicsManager.AFFICHE_SPEED(_vm->_globals.SPRITE_ECRAN, 27, 117, 1);
}
if (v76 == 237) {
v48 = _vm->_globals.SAUVEGARDE->data[svField341];
if (v48) {
if (v48 == 2)
v70 = 5;
if (v48 == 3)
v70 = 4;
if (v48 == 1)
v70 = 6;
_vm->_soundManager._vm->_soundManager.PLAY_SOUND("SOUND83.WAV");
OPTI_ONE(v70, 26, 50, 0);
if (_vm->_globals.SAUVEGARDE->data[svField341] == 1)
_vm->_graphicsManager.AFFICHE_SPEED(_vm->_globals.SPRITE_ECRAN, 27, 117, 0);
if (_vm->_globals.SAUVEGARDE->data[svField341] == 2)
_vm->_graphicsManager.AFFICHE_SPEED(_vm->_globals.SPRITE_ECRAN, 145, 166, 2);
if (_vm->_globals.SAUVEGARDE->data[svField341] == 3)
_vm->_graphicsManager.AFFICHE_SPEED(_vm->_globals.SPRITE_ECRAN, 296, 212, 4);
if (_vm->_globals.SAUVEGARDE->data[svField341] == 1)
_vm->_globals.SAUVEGARDE->data[svField338] = 0;
if (_vm->_globals.SAUVEGARDE->data[svField341] == 2)
_vm->_globals.SAUVEGARDE->data[svField339] = 0;
if (_vm->_globals.SAUVEGARDE->data[svField341] == 3)
_vm->_globals.SAUVEGARDE->data[svField340] = 0;
}
_vm->_soundManager._vm->_soundManager.PLAY_SOUND("SOUND83.WAV");
OPTI_ONE(5, 0, 23, 0);
_vm->_graphicsManager.AFFICHE_SPEED(_vm->_globals.SPRITE_ECRAN, 145, 166, 3);
}
if (v76 == 238) {
v49 = _vm->_globals.SAUVEGARDE->data[svField341];
if (v49) {
if (v49 == 2)
v70 = 5;
if (v49 == 3)
v70 = 4;
if (v49 == 1)
v70 = 6;
_vm->_soundManager._vm->_soundManager.PLAY_SOUND("SOUND83.WAV");
OPTI_ONE(v70, 26, 50, 0);
if (_vm->_globals.SAUVEGARDE->data[svField341] == 1)
_vm->_graphicsManager.AFFICHE_SPEED(_vm->_globals.SPRITE_ECRAN, 27, 117, 0);
if (_vm->_globals.SAUVEGARDE->data[svField341] == 2)
_vm->_graphicsManager.AFFICHE_SPEED(_vm->_globals.SPRITE_ECRAN, 145, 166, 2);
if (_vm->_globals.SAUVEGARDE->data[svField341] == 3)
_vm->_graphicsManager.AFFICHE_SPEED(_vm->_globals.SPRITE_ECRAN, 296, 212, 4);
if (_vm->_globals.SAUVEGARDE->data[svField341] == 1)
_vm->_globals.SAUVEGARDE->data[svField338] = 0;
if (_vm->_globals.SAUVEGARDE->data[svField341] == 2)
_vm->_globals.SAUVEGARDE->data[svField339] = 0;
if (_vm->_globals.SAUVEGARDE->data[svField341] == 3)
_vm->_globals.SAUVEGARDE->data[svField340] = 0;
}
_vm->_soundManager._vm->_soundManager.PLAY_SOUND("SOUND83.WAV");
OPTI_ONE(4, 0, 23, 0);
_vm->_graphicsManager.AFFICHE_SPEED(_vm->_globals.SPRITE_ECRAN, 296, 212, 5);
}
if (v76 == 239) {
SPRITE_OFF(0);
_vm->_soundManager._vm->_soundManager.PLAY_SOUND("SOUND84.WAV");
OPTI_ONE(16, 0, 10, 0);
}
if (v76 == 240) {
BOBANIM_ON(1);
v50 = 0;
do {
_vm->_eventsManager.VBL();
if (BOBPOSI(1) == 12 && !v50) {
_vm->_soundManager._vm->_soundManager.PLAY_SOUND("SOUND86.WAV");
v50 = 1;
}
if (BOBPOSI(1) == 13)
v50 = 0;
if (BOBPOSI(1) == 25 && !v50) {
_vm->_soundManager._vm->_soundManager.PLAY_SOUND("SOUND85.WAV");
v50 = 1;
}
if (BOBPOSI(1) == 25)
v50 = 0;
} while (BOBPOSI(1) != 32);
BOBANIM_OFF(1);
BOBANIM_ON(2);
_vm->_fontManager.TEXTE_OFF(9);
if (!_vm->_soundManager.TEXTOFF) {
_vm->_fontManager.DOS_TEXT(9, 617, _vm->_globals.FICH_TEXTE, 91, 41, 20, 25, 3, 30, 253);
_vm->_fontManager.TEXTE_ON(9);
}
if (!_vm->_soundManager.VOICEOFF)
_vm->_soundManager.VOICE_MIX(617, 4);
v71 = 0;
do {
_vm->_eventsManager.VBL();
++v71;
} while (v71 <= 29);
v51 = &_vm->_globals.SAUVEGARDE->field370;
v51->field0 = XSPR(0);
v51->field1 = YSPR(0);
v51->field2 = 57;
v51->field3 = 97;
_vm->_globals.SAUVEGARDE->data[svField121] = 1;
_vm->_globals.SAUVEGARDE->data[svField352] = 1;
_vm->_globals.SAUVEGARDE->data[svField353] = 1;
_vm->_globals.SAUVEGARDE->data[svField354] = 1;
}
if (v76 == 56) {
FileManager::CONSTRUIT_SYSTEM("HOPFEM.SPR");
FileManager::CHARGE_FICHIER2(_vm->_globals.NFICHIER, _vm->_globals.PERSO);
_vm->_globals.PERSO_TYPE = 1;
_vm->_globals.SAUVEGARDE->data[svField122] = 1;
_vm->_globals.HOPKINS_DATA();
Sprite[18].field0 = 28;
Sprite[20].field0 = 155;
VERIFTAILLE();
}
if (v76 == 57) {
FileManager::CONSTRUIT_SYSTEM("PERSO.SPR");
FileManager::CHARGE_FICHIER2(_vm->_globals.NFICHIER, _vm->_globals.PERSO);
_vm->_globals.PERSO_TYPE = 0;
_vm->_globals.SAUVEGARDE->data[svField122] = 0;
_vm->_globals.HOPKINS_DATA();
Sprite[18].field0 = 34;
Sprite[20].field0 = 190;
VERIFTAILLE();
}
if (v76 == 25)
_vm->_talkManager.PARLER_PERSO("AGENT1.pe2");
if (v76 == 26)
_vm->_talkManager.PARLER_PERSO("AGENT2.pe2");
if (v76 == 87) {
if (_vm->_globals.SAUVEGARDE->data[svField188])
_vm->_talkManager.PARLER_PERSO("stand2.pe2");
else
_vm->_talkManager.PARLER_PERSO("stand1.pe2");
}
if (v76 == 86) {
if (_vm->_globals.SAUVEGARDE->data[svField231] == 1) {
_vm->_talkManager.PARLER_PERSO("chotess1.pe2");
} else {
_vm->_globals.NOPARLE = 1;
_vm->_talkManager.PARLER_PERSO("chotesse.pe2");
_vm->_globals.NOPARLE = 0;
}
}
if (v76 == 51) {
_vm->_graphicsManager.FADE_OUTW();
_vm->_globals.CACHE_OFF();
SPRITE_OFF(0);
_vm->_fontManager.TEXTE_OFF(5);
_vm->_fontManager.TEXTE_OFF(9);
_vm->_graphicsManager.FIN_VISU();
_vm->_graphicsManager.LOAD_IMAGE("IM20f");
_vm->_animationManager.CHARGE_ANIM("ANIM20f");
_vm->_graphicsManager.VISU_ALL();
_vm->_eventsManager.MOUSE_OFF();
_vm->_graphicsManager.FADE_INW();
v52 = 0;
_vm->_soundManager.LOAD_WAV("SOUND46.WAV", 1);
do {
if (BOBPOSI(12) == 5 && !v52) {
_vm->_soundManager.PLAY_WAV(1);
v52 = 1;
}
_vm->_eventsManager.VBL();
} while (BOBPOSI(12) != 34);
BOBANIM_OFF(2);
_vm->_graphicsManager.FADE_OUTW();
_vm->_graphicsManager.NOFADE = 1;
_vm->_globals.SORTIE = 20;
}
if (v76 == 41)
_vm->_talkManager.PARLER_PERSO("MORT3.pe2");
if (v76 == 44)
_vm->_talkManager.PARLER_PERSO("MORT3A.pe2");
if (v76 == 42)
_vm->_talkManager.PARLER_PERSO("MORT2.pe2");
if (v76 == 43)
_vm->_talkManager.PARLER_PERSO("MORT1.pe2");
if (v76 == 47)
_vm->_talkManager.PARLER_PERSO("BARMAN.pe2");
if (v76 == 45)
_vm->_talkManager.PARLER_PERSO("FEM3.pe2");
if (v76 == 48)
_vm->_talkManager.PARLER_PERSO("SAMAN2.pe2");
if (v76 == 21)
_vm->_talkManager.PARLER_PERSO("MEDLEG.pe2");
if (v76 == 94) {
if (!_vm->_globals.SAUVEGARDE->data[svField228])
_vm->_talkManager.PARLER_PERSO("flicn.pe2");
if (_vm->_globals.SAUVEGARDE->data[svField228] == 1)
_vm->_talkManager.PARLER_PERSO("flicn1.pe2");
}
if (v76 == 27) {
if (_vm->_globals.SAUVEGARDE->data[svField94] != 1 || _vm->_globals.SAUVEGARDE->data[svField95] != 1)
_vm->_talkManager.PARLER_PERSO("STANDAR.pe2");
else
_vm->_talkManager.PARLER_PERSO("STANDAR1.pe2");
}
if (v76 == 58) {
_vm->_globals.NOPARLE = 1;
_vm->_talkManager.PARLER_PERSO("Gm1.PE2");
_vm->_globals.SAUVEGARDE->data[svField176] = 1;
_vm->_globals.SAUVEGARDE->data[svField270] = 2;
_vm->_globals.NOPARLE = 0;
}
if (v76 == 200) {
_vm->_globals.NOPARLE = 1;
_vm->_talkManager.PARLER_PERSO("Gm2.PE2");
_vm->_globals.NOPARLE = 0;
}
if (v76 == 84) {
_vm->_globals.NOPARLE = 1;
_vm->_talkManager.PARLER_PERSO("CVIGIL1.PE2");
_vm->_globals.NOPARLE = 0;
}
if (v76 == 98) {
_vm->_globals.NOPARLE = 1;
_vm->_talkManager.PARLER_PERSO("CVIGIL2.PE2");
_vm->_globals.NOPARLE = 0;
}
if (v76 == 83)
_vm->_talkManager.PARLER_PERSO("CVIGIL.pe2");
if (v76 == 32)
_vm->_talkManager.PARLER_PERSO("SAMAN.pe2");
if (v76 == 215) {
_vm->_globals.NOPARLE = 1;
_vm->_talkManager.PARLER_PERSO("aviat.pe2");
_vm->_globals.NOPARLE = 0;
}
if (v76 == 216) {
_vm->_globals.NOPARLE = 1;
_vm->_talkManager.PARLER_PERSO("aviat1.pe2");
_vm->_globals.NOPARLE = 0;
}
if (v76 == 170)
_vm->_talkManager.PARLER_PERSO("GRED.pe2");
if (v76 == 172)
_vm->_talkManager.PARLER_PERSO("GBLEU.pe2");
if (v76 == 100)
_vm->_talkManager.PARLER_PERSO("tourist.pe2");
if (v76 == 103) {
_vm->_globals.NOPARLE = 1;
_vm->_talkManager.PARLER_PERSO("tourist1.pe2");
_vm->_globals.NOPARLE = 0;
if (_vm->_globals.SVGA == 1)
_vm->_animationManager.PLAY_ANM2("T421.ANM", 100, 14, 500);
if (_vm->_globals.SVGA == 2)
_vm->_animationManager.PLAY_ANM2("T421a.ANM", 100, 14, 500);
_vm->_eventsManager.VBL();
_vm->_eventsManager.VBL();
_vm->_eventsManager.VBL();
_vm->_globals.NOPARLE = 1;
_vm->_talkManager.PARLER_PERSO("tourist2.pe2");
_vm->_globals.NOPARLE = 0;
}
if (v76 == 104) {
_vm->_globals.NOPARLE = 1;
_vm->_talkManager.PARLER_PERSO("tourist3.pe2");
_vm->_globals.NOPARLE = 0;
}
if (v76 == 108) {
_vm->_globals.NOPARLE = 1;
_vm->_talkManager.PARLER_PERSO("peche1.pe2");
_vm->_globals.NOPARLE = 0;
}
if (v76 == 109) {
_vm->_globals.NOPARLE = 1;
_vm->_talkManager.PARLER_PERSO("peche2.pe2");
_vm->_globals.NOPARLE = 0;
}
if (v76 == 110) {
_vm->_globals.NOPARLE = 1;
_vm->_talkManager.PARLER_PERSO("peche3.pe2");
_vm->_globals.NOPARLE = 0;
}
if (v76 == 111) {
_vm->_globals.NOPARLE = 1;
_vm->_talkManager.PARLER_PERSO("peche4.pe2");
_vm->_globals.NOPARLE = 0;
}
if (v76 == 112) {
_vm->_globals.NOPARLE = 1;
_vm->_talkManager.PARLER_PERSO("teint1.pe2");
_vm->_globals.NOPARLE = 0;
}
if (v76 == 176) {
_vm->_globals.NOPARLE = 1;
_vm->_talkManager.PARLER_PERSO("gred2.pe2");
_vm->_globals.NOPARLE = 0;
}
if (v76 == 177) {
_vm->_globals.NOPARLE = 1;
_vm->_talkManager.PARLER_PERSO("gbleu2.pe2");
_vm->_globals.NOPARLE = 0;
}
if (v76 == 113)
_vm->_talkManager.PARLER_PERSO("teint.pe2");
if (v76 == 114)
_vm->_talkManager.PARLER_PERSO("tahibar.pe2");
if (v76 == 115)
_vm->_talkManager.PARLER_PERSO("ilebar.pe2");
if (v76 == 116)
_vm->_talkManager.PARLER_PERSO("Profred.pe2");
if (v76 == 101)
_vm->_talkManager.PARLER_PERSO("tahi1.pe2");
if (v76 == 243) {
_vm->_soundManager._vm->_soundManager.PLAY_SOUND("SOUND88.WAV");
if (_vm->_globals.SAUVEGARDE->data[svField341] == 2) {
_vm->_animationManager.NO_SEQ = 1;
_vm->_soundManager.PLAY_SEQ(v1, "RESU.SEQ", 2, 24, 2);
_vm->_animationManager.NO_SEQ = 0;
} else {
OPTI_ONE(7, 0, 14, 0);
}
}
if (v76 == 242) {
_vm->_soundManager.PLAY_SOUND("SOUND87.WAV");
_vm->_animationManager.NO_SEQ = 1;
_vm->_soundManager.PLAY_SEQ(v1, "RESUF.SEQ", 1, 24, 1);
_vm->_animationManager.NO_SEQ = 0;
v53 = &_vm->_globals.SAUVEGARDE->field380;
v53->field0 = 404;
v53->field1 = 395;
v53->field2 = 64;
v53->field3 = _vm->_globals.ECRAN;
v54 = _vm->_globals.STAILLE[790 / 2];
if (_vm->_globals.STAILLE[790 / 2] < 0)
v54 = -_vm->_globals.STAILLE[790 / 2];
2012-09-30 21:21:09 +10:00
v76 = -(100 * (67 - (100 - v54)) / 67);
v53->field4 = v76;
_vm->_globals.SAUVEGARDE->data[svField357] = 1;
_vm->_globals.SAUVEGARDE->data[svField354] = 0;
_vm->_globals.SAUVEGARDE->data[svField356] = 0;
_vm->_globals.SAUVEGARDE->data[svField355] = 1;
DEUXPERSO = 1;
_vm->_graphicsManager.AFFICHE_SPEED(_vm->_globals.SPRITE_ECRAN, 373, 191, 3);
SPRITE(_vm->_globals.TETE, v53->field0, v53->field1, 1, 3, v53->field4, 0, 20, 127);
SPRITE_ON(1);
}
if (v76 == 245) {
_vm->_soundManager.PLAY_SOUND("SOUND89.WAV");
OPTI_ONE(5, 0, 6, 0);
_vm->_globals.ZONEP[4].field0 = 276;
VERBE_ON(4, 19);
_vm->_graphicsManager.AFFICHE_SPEED(_vm->_globals.SPRITE_ECRAN, 285, 379, 0);
_vm->_globals.SAUVEGARDE->data[svField399] = 1;
}
if (v76 == 246) {
SPRITE_OFF(0);
OPTI_ONE(6, 0, 15, 0);
_vm->_objectsManager.PERSO_ON = 1;
_vm->_graphicsManager.NB_SCREEN();
_vm->_animationManager.NO_SEQ = 1;
_vm->_soundManager.PLAY_SEQ2("TUNNEL.SEQ", 1, 18, 20);
_vm->_animationManager.NO_SEQ = 0;
_vm->_graphicsManager.NOFADE = 1;
_vm->_graphicsManager.FADE_OUTW();
_vm->_objectsManager.PERSO_ON = 0;
_vm->_globals.SORTIE = 100;
}
if (v76 == 55) {
BOBANIM_OFF(1);
OPTI_ONE(15, 0, 12, 0);
BOBANIM_OFF(15);
OBSSEUL = 1;
INILINK("IM19a");
OBSSEUL = 0;
}
if (v76 == 241)
_vm->_talkManager.PARLER_PERSO("RECEP.PE2");
if (v76 == 171) {
_vm->_globals.NOPARLE = 1;
_vm->_talkManager.PARLER_PERSO("gred1.pe2");
_vm->_globals.NOPARLE = 0;
_vm->_globals.NOT_VERIF = 1;
g_old_x = XSPR(0);
g_old_sens = -1;
_vm->_globals.Compteur = 0;
_vm->_globals.chemin = PTRNUL;
_vm->_globals.NOT_VERIF = 1;
v55 = YSPR(0);
v56 = XSPR(0);
_vm->_globals.chemin = _vm->_linesManager.PARCOURS2(v56, v55, 361, 325);
_vm->_globals.NOT_VERIF = 1;
_vm->_objectsManager.NUMZONE = -1;
do {
GOHOME();
_vm->_eventsManager.VBL();
} while (_vm->_globals.chemin != PTRNUL);
_vm->_globals.SORTIE = 59;
}
if (v76 == 173) {
_vm->_globals.NOPARLE = 1;
_vm->_talkManager.PARLER_PERSO("gbleu1.pe2");
_vm->_globals.NOPARLE = 0;
_vm->_globals.NOT_VERIF = 1;
g_old_x = XSPR(0);
g_old_sens = -1;
_vm->_globals.Compteur = 0;
_vm->_globals.chemin = PTRNUL;
_vm->_globals.NOT_VERIF = 1;
v57 = YSPR(0);
v58 = XSPR(0);
_vm->_globals.chemin = _vm->_linesManager.PARCOURS2(v58, v57, 361, 325);
_vm->_globals.NOT_VERIF = 1;
_vm->_objectsManager.NUMZONE = -1;
do {
GOHOME();
_vm->_eventsManager.VBL();
} while (_vm->_globals.chemin != PTRNUL);
_vm->_globals.SORTIE = 59;
}
if (v76 == 174)
_vm->_talkManager.PARLER_PERSO("Profbl.pe2");
if (v76 == 202) {
_vm->_globals.NOPARLE = 1;
_vm->_talkManager.PARLER_PERSO("SVGARD2.PE2");
_vm->_globals.NOPARLE = 0;
}
v1 = 1;
}
if (*(a1 + 2) == 69 && *(a1 + 3) == 73 && *(a1 + 4) == 70)
v1 = 4;
if (*(a1 + 2) == 86 && *(a1 + 3) == 65 && *(a1 + 4) == 76) {
v1 = 1;
_vm->_globals.SAUVEGARDE->data[READ_LE_UINT16(a1 + 5)] = READ_LE_UINT16(a1 + 7);
}
if (*(a1 + 2) == 65 && *(a1 + 3) == 68 && *(a1 + 4) == 68) {
v1 = 1;
_vm->_globals.SAUVEGARDE->data[READ_LE_UINT16(a1 + 5)] += *(a1 + 7);
}
if (*(a1 + 2) == 66 && *(a1 + 3) == 79 && *(a1 + 4) == 83) {
v1 = 1;
BOB_OFFSET(READ_LE_UINT16(a1 + 5), READ_LE_UINT16(a1 + 7));
}
if (*(a1 + 2) == 86 && *(a1 + 3) == 79 && *(a1 + 4) == 78) {
VERBE_ON(READ_LE_UINT16(a1 + 5), READ_LE_UINT16(a1 + 7));
v1 = 1;
}
if (*(a1 + 2) == 90 && *(a1 + 3) == 67 && *(a1 + 4) == 72) {
_vm->_globals.ZONEP[READ_LE_UINT16(a1 + 5)].field12 = READ_LE_UINT16(a1 + 7);
v1 = 1;
}
if (*(a1 + 2) == 74 && *(a1 + 3) == 85 && *(a1 + 4) == 77) {
v59 = READ_LE_UINT16(a1 + 7);
NVZONE = READ_LE_UINT16(a1 + 5);
NVVERBE = v59;
v1 = 6;
}
if (*(a1 + 2) == 83 && *(a1 + 3) == 79 && *(a1 + 4) == 85) {
v60 = READ_LE_UINT16(a1 + 5);
memset(&s, 0, 0x13u);
memset(v77, 0, 5u);
sprintf(v77, "%d", v60);
s = 83;
v79 = 79;
v80 = 85;
v81 = 78;
v82[0] = 68;
v61 = 5;
v62 = 0;
do
*(&s + v61++) = v77[v62++];
while (v77[v62]);
v63 = v61;
*(&s + v63) = 46;
*(&v79 + v63) = 87;
*(&v80 + v63) = 65;
*(&v81 + v63) = 86;
v82[v63] = 0;
_vm->_soundManager.PLAY_SOUND(s);
v1 = 1;
}
if (*(a1 + 2) == 86 && *(a1 + 3) == 79 && *(a1 + 4) == 70) {
VERBE_OFF(READ_LE_UINT16(a1 + 5), READ_LE_UINT16(a1 + 7));
v1 = 1;
}
if (*(a1 + 2) == 73 && *(a1 + 3) == 73) {
if (*(a1 + 4) == 70)
v1 = 3;
}
return v1;
}
void ObjectsManager::BOB_VIVANT(int idx) {
int v1;
int v2;
int v3;
int v4;
v1 = 5 * idx;
v2 = READ_LE_UINT16(_vm->_talkManager.ADR_ANIM + 2 * v1);
v3 = READ_LE_UINT16(_vm->_talkManager.ADR_ANIM + 2 * v1 + 2);
v4 = *(_vm->_talkManager.ADR_ANIM + 2 * v1 + 8);
if (READ_LE_UINT16(_vm->_talkManager.ADR_ANIM + 2 * v1 + 4)) {
if (!_vm->_globals.NO_OFFSET)
_vm->_graphicsManager.AFFICHE_SPEED(_vm->_talkManager.PERSOSPR,
_vm->_graphicsManager.ofscroll + v2, v3,
*(_vm->_talkManager.ADR_ANIM + 2 * v1 + 8));
if (_vm->_globals.NO_OFFSET)
_vm->_graphicsManager.AFFICHE_SPEED(_vm->_talkManager.PERSOSPR, v2, v3, v4);
}
}
void ObjectsManager::VBOB(byte *a1, int idx, int a3, int a4, int a5) {
if (idx > 29)
error("MAX_VBOB exceeded");
if (_vm->_globals.VBob[idx].field4 <= 1u) {
_vm->_globals.VBob[idx].field4 = 1;
_vm->_globals.VBob[idx].field6 = a3;
_vm->_globals.VBob[idx].field8 = a4;
_vm->_globals.VBob[idx].fieldA = a5;
_vm->_globals.VBob[idx].field14 = a3;
_vm->_globals.VBob[idx].field16 = a4;
_vm->_globals.VBob[idx].field18 = a5;
_vm->_globals.VBob[idx].field0 = a1;
_vm->_globals.VBob[idx].field1C = a1;
if (_vm->_globals.VBob[idx].field10 != PTRNUL)
_vm->_globals.VBob[idx].field10 = _vm->_globals.dos_free2(_vm->_globals.VBob[idx].field10);
}
int f4 = _vm->_globals.VBob[idx].field4;
if (f4 == 2 || f4 == 4) {
_vm->_globals.VBob[idx].field4 = 3;
_vm->_globals.VBob[idx].field14 = _vm->_globals.VBob[idx].field6;
_vm->_globals.VBob[idx].field16 = _vm->_globals.VBob[idx].field8;
_vm->_globals.VBob[idx].field1C = _vm->_globals.VBob[idx].field0;
_vm->_globals.VBob[idx].field18 = _vm->_globals.VBob[idx].fieldA;
_vm->_globals.VBob[idx].field6 = a3;
_vm->_globals.VBob[idx].field8 = a4;
_vm->_globals.VBob[idx].fieldA = a5;
_vm->_globals.VBob[idx].field0 = a1;
}
}
void ObjectsManager::VBOB_OFF(int idx) {
if (idx > 29)
error("MAX_VBOB exceeded");
if (_vm->_globals.VBob[idx].field4 <= 1)
_vm->_globals.VBob[idx].field4 = 0;
else
_vm->_globals.VBob[idx].field4 = 4;
}
void ObjectsManager::ACTION_DOS(int idx) {
if (_vm->_globals.GESTE_FLAG != 1) {
if (PTRNUL != _vm->_globals.GESTE)
_vm->_globals.GESTE = _vm->_globals.dos_free2(_vm->_globals.GESTE);
_vm->_globals.GESTE_FLAG = 1;
FileManager::CONSTRUIT_SYSTEM("DOS.SPR");
_vm->_globals.GESTE = FileManager::CHARGE_FICHIER(_vm->_globals.NFICHIER);
}
if (idx == 1)
ACTION(_vm->_globals.GESTE, "0,1,2,3,4,5,6,7,8,8,8,8,8,8,7,6,5,4,3,2,1,0,-1,", 0, 0, 8, 0);
if (idx == 2)
SPACTION(_vm->_globals.GESTE, "0,1,2,3,4,5,6,7,8,9,10,11,12,13,-1,", 0, 0, 8, 0);
if (idx == 3)
SPACTION1(_vm->_globals.GESTE, "12,11,10,9,8,7,6,5,4,3,2,1,0,-1,", 0, 0, 8);
if (idx == 4)
ACTION(
_vm->_globals.GESTE,
"0,1,2,3,4,5,6,7,8,8,8,8,8,8,9,10,11,12,13,12,11,12,13,12,11,12,13,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,",
0,
0,
8,
0);
if (idx == 5)
SPACTION(_vm->_globals.GESTE, "15,16,17,18,19,20,21,-1,", 0, 0, 8, 0);
if (idx == 6)
SPACTION1(_vm->_globals.GESTE, "20,19,18,17,16,15,-1,", 0, 0, 8);
if (idx == 7)
SPACTION(_vm->_globals.GESTE, "15,16,17,18,19,20,21,22,23,24,-1,", 0, 0, 8, 0);
if (idx == 8)
SPACTION1(_vm->_globals.GESTE, "23,22,21,20,19,18,17,16,15,-1,", 0, 0, 8);
if (idx == 9)
SPACTION(_vm->_globals.GESTE, "15,16,17,18,19,20,21,22,23,24,-1,", 0, 0, 8, 0);
if (idx == 10)
SPACTION1(_vm->_globals.GESTE, "23,22,21,20,19,18,17,16,15,-1,", 0, 0, 8);
}
void ObjectsManager::ACTION_DROITE(int idx) {
if (_vm->_globals.GESTE_FLAG != 3) {
if (_vm->_globals.GESTE != PTRNUL)
_vm->_globals.GESTE = _vm->_globals.dos_free2(_vm->_globals.GESTE);
_vm->_globals.GESTE_FLAG = 3;
FileManager::CONSTRUIT_SYSTEM("PROFIL.SPR");
_vm->_globals.GESTE = FileManager::CHARGE_FICHIER(_vm->_globals.NFICHIER);
}
if (idx == 1)
ACTION(_vm->_globals.GESTE, "20,19,18,17,16,15,14,13,13,13,13,13,14,15,16,17,18,19,20,-1,", 0, 0, 8, 0);
if (idx == 2)
SPACTION(_vm->_globals.GESTE, "1,2,3,4,5,6,7,8,-1,", 0, 0, 8, 0);
if (idx == 3)
SPACTION1(_vm->_globals.GESTE, "9,10,11,12,13,14,15,16,17,18,19,20,-1,", 0, 0, 8);
if (idx == 4)
ACTION(_vm->_globals.GESTE, "1,2,3,4,5,6,7,8,8,7,6,5,4,3,2,1,-1,", 0, 0, 8, 0);
if (idx == 5)
SPACTION(_vm->_globals.GESTE, "23,24,25,-1,", 0, 0, 8, 0);
if (idx == 6)
SPACTION1(_vm->_globals.GESTE, "24,,23,-1,", 0, 0, 8);
if (idx == 7)
SPACTION(_vm->_globals.GESTE, "23,24,25,26,27,-1,", 0, 0, 8, 0);
if (idx == 8)
SPACTION1(_vm->_globals.GESTE, "26,25,24,23,-1,", 0, 0, 8);
if (idx == 9)
SPACTION(_vm->_globals.GESTE, "23,24,25,26,27,28,29,-1,", 0, 0, 8, 0);
if (idx == 10)
SPACTION1(_vm->_globals.GESTE, "28,27,26,25,24,23,-1,", 0, 0, 8);
}
void ObjectsManager::Q_DROITE(int idx) {
if (_vm->_globals.GESTE_FLAG != 4) {
if (_vm->_globals.GESTE != PTRNUL)
_vm->_globals.GESTE = _vm->_globals.dos_free2(_vm->_globals.GESTE);
_vm->_globals.GESTE_FLAG = 4;
FileManager::CONSTRUIT_SYSTEM("3Q.SPR");
_vm->_globals.GESTE = FileManager::CHARGE_FICHIER(_vm->_globals.NFICHIER);
}
if (idx == 1)
ACTION(_vm->_globals.GESTE, "0,1,2,3,4,5,6,7,8,8,8,8,8,7,6,5,4,3,2,1,0,-1,", 0, 0, 8, 0);
if (idx == 2)
SPACTION(_vm->_globals.GESTE, "0,1,2,3,4,5,6,7,8,9,10,11,12,-1,", 0, 0, 8, 0);
if (idx == 3)
SPACTION1(_vm->_globals.GESTE, "11,10,9,8,7,6,5,4,3,2,1,0,-1,", 0, 0, 8);
if (idx == 4)
ACTION(_vm->_globals.GESTE, "0,1,2,3,4,5,6,7,8,9,10,11,12,11,12,11,12,11,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,", 0, 0, 8, 0);
if (idx == 5)
SPACTION(_vm->_globals.GESTE, "15,16,17,18,-1,", 0, 0, 8, 0);
if (idx == 6)
SPACTION1(_vm->_globals.GESTE, "17,16,15,-1,", 0, 0, 8);
if (idx == 7)
SPACTION(_vm->_globals.GESTE, "15,16,17,18,19,20-1,", 0, 0, 8, 0);
if (idx == 8)
SPACTION1(_vm->_globals.GESTE, "19,18,17,16,15,-1,", 0, 0, 8);
if (idx == 9)
SPACTION(_vm->_globals.GESTE, "15,16,17,18,19,20,21,-1,", 0, 0, 8, 0);
if (idx == 10)
SPACTION1(_vm->_globals.GESTE, "20,19,18,17,15,-1,", 0, 0, 8);
}
void ObjectsManager::ACTION_FACE(int idx) {
if (_vm->_globals.GESTE_FLAG != 2) {
if (_vm->_globals.GESTE != PTRNUL)
_vm->_globals.GESTE = _vm->_globals.dos_free2(_vm->_globals.GESTE);
_vm->_globals.GESTE_FLAG = 2;
FileManager::CONSTRUIT_SYSTEM("FACE.SPR");
_vm->_globals.GESTE = FileManager::CHARGE_FICHIER(_vm->_globals.NFICHIER);
}
if (idx == 1)
ACTION(_vm->_globals.GESTE, "0,1,2,3,4,5,6,7,9,9,9,9,9,9,7,6,5,4,3,2,1,0,-1,", 0, 0, 8, 0);
if (idx == 2)
SPACTION(_vm->_globals.GESTE, "0,1,2,3,4,5,6,7,9,10,11,12,13,14,15,-1,", 0, 0, 8, 0);
if (idx == 3)
SPACTION1(_vm->_globals.GESTE, "14,13,12,11,10,9,7,6,5,4,3,2,1,0,-1,", 0, 0, 8);
if (idx == 4)
ACTION(_vm->_globals.GESTE, "0,1,2,3,4,5,6,7,9,10,11,12,13,14,13,12,11,10,9,7,6,5,4,3,2,1,0,-1,", 0, 0, 8, 0);
}
void ObjectsManager::Q_GAUCHE(int idx) {
if (_vm->_globals.GESTE_FLAG != 4) {
if (_vm->_globals.GESTE != PTRNUL)
_vm->_globals.GESTE = _vm->_globals.dos_free2(_vm->_globals.GESTE);
_vm->_globals.GESTE_FLAG = 4;
FileManager::CONSTRUIT_SYSTEM("3Q.SPR");
_vm->_globals.GESTE = FileManager::CHARGE_FICHIER(_vm->_globals.NFICHIER);
}
if (idx == 1)
ACTION(_vm->_globals.GESTE, "0,1,2,3,4,5,6,7,8,8,8,8,8,7,6,5,4,3,2,1,0,-1,", 0, 0, 8, 1);
if (idx == 2)
SPACTION(_vm->_globals.GESTE, "0,1,2,3,4,5,6,7,8,9,10,11,12,-1,", 0, 0, 8, 1);
if (idx == 3)
SPACTION1(_vm->_globals.GESTE, "11,10,9,8,7,6,5,4,3,2,1,0,-1,", 0, 0, 8);
if (idx == 4)
ACTION(_vm->_globals.GESTE, "0,1,2,3,4,5,6,7,8,9,10,11,12,11,12,11,12,11,12,11,10,9,8,7,6,5,4,3,2,1,0,-1,", 0, 0, 8, 1);
if (idx == 5)
SPACTION(_vm->_globals.GESTE, "15,16,17,18,-1,", 0, 0, 8, 1);
if (idx == 6)
SPACTION1(_vm->_globals.GESTE, "17,16,15,-1,", 0, 0, 8);
if (idx == 7)
SPACTION(_vm->_globals.GESTE, "15,16,17,18,19,20-1,", 0, 0, 8, 1);
if (idx == 8)
SPACTION1(_vm->_globals.GESTE, "19,18,17,16,15,-1,", 0, 0, 8);
if (idx == 9)
SPACTION(_vm->_globals.GESTE, "15,16,17,18,19,20,21,-1,", 0, 0, 8, 1);
if (idx == 10)
SPACTION1(_vm->_globals.GESTE, "20,19,18,17,15,-1,", 0, 0, 8);
}
void ObjectsManager::ACTION_GAUCHE(int idx) {
if (_vm->_globals.GESTE_FLAG != 3) {
if (_vm->_globals.GESTE != PTRNUL)
_vm->_globals.GESTE = _vm->_globals.dos_free2(_vm->_globals.GESTE);
_vm->_globals.GESTE_FLAG = 3;
FileManager::CONSTRUIT_SYSTEM("PROFIL.SPR");
_vm->_globals.GESTE = FileManager::CHARGE_FICHIER(_vm->_globals.NFICHIER);
}
if (idx == 1)
ACTION(_vm->_globals.GESTE, "20,19,18,17,16,15,14,13,13,13,13,13,14,15,16,17,18,19,20,-1,", 0, 0, 8, 1);
if (idx == 2)
SPACTION(_vm->_globals.GESTE, "1,2,3,4,5,6,7,8,-1,", 0, 0, 8, 1);
if (idx == 3)
SPACTION1(_vm->_globals.GESTE, "9,10,11,12,13,14,15,16,17,18,19,20,-1,", 0, 0, 8);
if (idx == 4)
ACTION(_vm->_globals.GESTE, "1,2,3,4,5,6,7,8,8,7,6,5,4,3,2,1,-1,", 0, 0, 8, 1);
if (idx == 5)
SPACTION(_vm->_globals.GESTE, "23,24,25,-1,", 0, 0, 8, 1);
if (idx == 6)
SPACTION1(_vm->_globals.GESTE, "24,,23,-1,", 0, 0, 8);
if (idx == 7)
SPACTION(_vm->_globals.GESTE, "23,24,25,26,27,-1,", 0, 0, 8, 1);
if (idx == 8)
SPACTION1(_vm->_globals.GESTE, "26,25,24,23,-1,", 0, 0, 8);
if (idx == 9)
SPACTION(_vm->_globals.GESTE, "23,24,25,26,27,28,29,-1,", 0, 0, 8, 1);
if (idx == 10)
SPACTION1(_vm->_globals.GESTE, "28,27,26,25,24,23,-1,", 0, 0, 8);
}
void ObjectsManager::ZONE_ON(int idx) {
if (_vm->_globals.BOBZONE[idx]) {
_vm->_globals.BOBZONE_FLAG[idx] = 1;
} else {
_vm->_globals.ZONEP[idx].field10 = 1;
}
}
void ObjectsManager::ZONE_OFF(int idx) {
if (_vm->_globals.BOBZONE[idx]) {
_vm->_globals.BOBZONE_FLAG[idx] = 0;
} else {
_vm->_globals.ZONEP[idx].field10 = 0;
}
}
void ObjectsManager::OPTI_ONE(int idx, int a2, int a3, int a4) {
if (a4 != 3) {
BOBANIM_ON(idx);
SET_BOBPOSI(idx, a2);
}
do {
_vm->_eventsManager.VBL();
} while (a3 != BOBPOSI(idx));
if (!a4)
BOBANIM_OFF(idx);
if (a4 == 4) {
_vm->_graphicsManager.AFFICHE_SPEED(
_vm->_globals.Bob[idx].field4,
_vm->_globals.Bob[idx].field3E,
_vm->_globals.Bob[idx].field40,
_vm->_globals.Bob[idx].fieldC);
BOBANIM_OFF(idx);
_vm->_eventsManager.VBL();
}
}
void ObjectsManager::AFFICHE_SPEED1(byte *speedData, int xp, int yp, int img) {
SPEED_FLAG = true;
SPEED_PTR = speedData;
SPEED_X = xp;
SPEED_Y = yp;
SPEED_IMAGE = img;
}
int ObjectsManager::BOBPOSI(int idx) {
return _vm->_globals.Bob[idx].field10 / 5;
}
void ObjectsManager::BOBANIM_ON(int idx) {
if (_vm->_globals.Bob[idx].field16) {
_vm->_globals.Bob[idx].field16 = 0;
_vm->_globals.Bob[idx].field10 = 5;
_vm->_globals.Bob[idx].fieldC = 250;
_vm->_globals.Bob[idx].field12 = 0;
_vm->_globals.Bob[idx].field14 = 0;
}
}
void ObjectsManager::BOBANIM_OFF(int idx) {
_vm->_globals.Bob[idx].field16 = 1;
}
void ObjectsManager::SET_BOBPOSI(int idx, int a2) {
_vm->_globals.Bob[idx].field10 = 5 * a2;
_vm->_globals.Bob[idx].field12 = 0;
_vm->_globals.Bob[idx].field14 = 0;
}
int ObjectsManager::BOBX(int idx) {
return _vm->_globals.Bob[idx].field8;
}
int ObjectsManager::BOBY(int idx) {
return _vm->_globals.Bob[idx].fieldA;
}
int ObjectsManager::BOBA(int idx) {
return _vm->_globals.Bob[idx].fieldC;
}
void ObjectsManager::INILINK(const Common::String &file) {
int v1;
int v2;
int v8;
int v9;
int v10;
int v11;
int v12;
byte *v13;
int v14;
int v15;
byte *v16;
byte *v17;
int v18;
int v19;
int v20;
int v21;
byte *v22;
int v23;
int v24;
int v25;
int v27;
int v28;
int v29;
int v30;
int v31;
int v32;
int v33;
int v34;
int v35;
int v36;
byte *v37;
int v40;
size_t v41;
size_t v42;
size_t nbytes;
byte *ptr;
Common::String filename, filename2;
Common::File f;
v1 = 0;
v2 = 0;
filename = file + ".LNK";
ptr = FileManager::RECHERCHE_CAT(filename, 3);
nbytes = _vm->_globals.CAT_TAILLE;
if (ptr == PTRNUL) {
FileManager::CONSTRUIT_FICHIER(_vm->_globals.HOPLINK, filename);
if (!f.open(_vm->_globals.NFICHIER))
error("Error opening file - %s", _vm->_globals.NFICHIER.c_str());
nbytes = f.size();
ptr = _vm->_globals.dos_malloc2(nbytes);
if (PTRNUL == ptr)
error("INILINK");
FileManager::bload_it(f, ptr, nbytes);
f.close();
}
if (!OBSSEUL) {
for (int idx = 0; idx < 500; ++idx)
_vm->_globals.STAILLE[idx] = READ_LE_UINT16((uint16 *)ptr + idx);
_vm->_globals.RESET_CACHE();
filename2 = Common::String((const char *)ptr + 1000);
if (!filename2.empty()) {
_vm->_globals.CACHE_BANQUE[1] = FileManager::RECHERCHE_CAT(filename2, 8);
if (_vm->_globals.CACHE_BANQUE[1]) {
_vm->_globals.CAT_FLAG = 0;
FileManager::CONSTRUIT_FICHIER(_vm->_globals.HOPLINK, filename2);
} else {
_vm->_globals.CAT_FLAG = 1;
FileManager::CONSTRUIT_FICHIER(_vm->_globals.HOPLINK, "RES_SLI.RES");
}
_vm->_globals.CACHE_BANQUE[1] = FileManager::CHARGE_FICHIER(_vm->_globals.NFICHIER);
_vm->_globals.CAT_FLAG = 0;
v36 = 60;
v37 = ptr + 1000;
v40 = 0;
do {
v8 = READ_LE_UINT16(v37 + 2 * v36);
v9 = READ_LE_UINT16(v37 + 2 * v36 + 2);
v10 = READ_LE_UINT16(v37 + 2 * v36 + 4);
v11 = v40;
_vm->_globals.Cache[v11].field14 = READ_LE_UINT16(v37 + 2 * v36 + 8);
_vm->_globals.Cache[v11].field2 = v8;
_vm->_globals.Cache[v11].field0 = v9;
_vm->_globals.Cache[v11].field4 = v10;
_vm->_globals.Cache[v11].field12 = 1;
if (_vm->_globals.CACHE_BANQUE[1]) {
_vm->_globals.Cache[v40].fieldA = 0;
} else {
v12 = v8;
v13 = _vm->_globals.CACHE_BANQUE[1];
v14 = Get_Largeur(v13, v8);
v15 = Get_Hauteur(v13, v12);
_vm->_globals.Cache[v40].fieldC = v13;
_vm->_globals.Cache[v40].field6 = v14;
_vm->_globals.Cache[v40].field8 = v15;
_vm->_globals.Cache[v40].fieldA = 1;
}
if (!_vm->_globals.Cache[v40].field0 && !_vm->_globals.Cache[v40].field4
&& !_vm->_globals.Cache[v40].field2)
_vm->_globals.Cache[v40].fieldA = 0;
v36 += 5;
++v40;
} while (v40 <= 21);
_vm->_globals.CACHE_ON();
}
}
_vm->_linesManager.RESET_OBSTACLE();
v41 = 0;
if (nbytes) {
do {
if (*(ptr + v41) == 79 && *(ptr + v41 + 1) == 66 && *(ptr + v41 + 2) == 50) {
v16 = ptr + v41 + 4;
v32 = 0;
v34 = 0;
_vm->_linesManager.TOTAL_LIGNES = 0;
do {
v27 = READ_LE_UINT16(v16 + 2 * v32);
if (v27 != -1) {
_vm->_linesManager.AJOUTE_LIGNE(
v34,
v27,
READ_LE_UINT16(v16 + 2 * v32 + 2),
READ_LE_UINT16(v16 + 2 * v32 + 4),
READ_LE_UINT16(v16 + 2 * v32 + 6),
READ_LE_UINT16(v16 + 2 * v32 + 8),
1);
++_vm->_linesManager.TOTAL_LIGNES;
}
v32 += 5;
++v34;
} while (v27 != -1);
_vm->_linesManager.INIPARCOURS();
}
++v41;
} while (nbytes > v41);
}
if (!OBSSEUL) {
v42 = 0;
if (nbytes) {
do {
if (*(ptr + v42) == 'Z' && *(ptr + v42 + 1) == 'O' && *(ptr + v42 + 2) == '2') {
v17 = ptr + v42 + 4;
v33 = 0;
v35 = 0;
v18 = 1;
do {
v19 = 20 * v18;
_vm->_globals.ZONEP[v19].field0 = 0;
_vm->_globals.ZONEP[v19].field2 = 0;
_vm->_globals.ZONEP[v19].field4 = 0;
_vm->_globals.ZONEP[v19].field6 = 0;
_vm->_globals.ZONEP[v19].field7 = 0;
_vm->_globals.ZONEP[v19].field8 = 0;
_vm->_globals.ZONEP[v19].field9 = 0;
_vm->_globals.ZONEP[v19].fieldA = 0;
_vm->_globals.ZONEP[v19].fieldB = 0;
_vm->_globals.ZONEP[v19].fieldC = 0;
_vm->_globals.ZONEP[v19].fieldD = 0;
_vm->_globals.ZONEP[v19].fieldE = 0;
_vm->_globals.ZONEP[v19].fieldF = 0;
_vm->_globals.ZONEP[v19].field12 = 0;
++v18;
} while (v18 <= 100);
v31 = 0;
do {
v28 = READ_LE_UINT16(v17 + 2 * v33);
if (v28 != -1) {
_vm->_linesManager.AJOUTE_LIGNE_ZONE(
v35,
READ_LE_UINT16(v17 + 2 * v33 + 2),
READ_LE_UINT16(v17 + 2 * v33 + 4),
READ_LE_UINT16(v17 + 2 * v33 + 6),
READ_LE_UINT16(v17 + 2 * v33 + 8),
v28);
_vm->_globals.ZONEP[v28].field10 = 1;
}
v33 += 5;
++v35;
++v31;
} while (v28 != -1);
v20 = 1;
do {
v21 = 20 * v20;
_vm->_globals.ZONEP[v21].field0 = READ_LE_UINT16(v17 + 2 * v33);
_vm->_globals.ZONEP[v21].field2 = READ_LE_UINT16(v17 + 2 * v33 + 2);
_vm->_globals.ZONEP[v21].field4 = READ_LE_UINT16(v17 + 2 * v33 + 4);
v33 += 3;
++v20;
} while (v20 <= 100);
v22 = ptr + v42 + (10 * v31 + 606) + 4;
v29 = 0;
v23 = 1;
do {
v24 = 20 * v23;
_vm->_globals.ZONEP[v24].field6 = *(v29 + v22);
_vm->_globals.ZONEP[v24].field7 = *(v22 + v29 + 1);
_vm->_globals.ZONEP[v24].field8 = *(v22 + v29 + 2);
_vm->_globals.ZONEP[v24].field9 = *(v22 + v29 + 3);
_vm->_globals.ZONEP[v24].fieldA = *(v22 + v29 + 4);
_vm->_globals.ZONEP[v24].fieldB = *(v22 + v29 + 5);
_vm->_globals.ZONEP[v24].fieldC = *(v22 + v29 + 6);
_vm->_globals.ZONEP[v24].fieldD = *(v22 + v29 + 7);
_vm->_globals.ZONEP[v24].fieldE = *(v22 + v29 + 8);
_vm->_globals.ZONEP[v24].fieldF = *(v22 + v29 + 9);
v29 += 10;
++v23;
} while (v23 <= 100);
v30 = 0;
v25 = 1;
do
_vm->_globals.ZONEP[v25].field12 = READ_LE_UINT16(v22 + 1010 + 2 * v30++);
while (++v25 <= 100);
CARRE_ZONE();
}
++v42;
} while (nbytes > v42);
}
}
_vm->_globals.dos_free2(ptr);
}
void ObjectsManager::OPTI_BOBON(int a1, int a2, int a3, int a4, int a5, int a6, int a7) {
if (a1 != -1)
_vm->_objectsManager.BOBANIM_ON(a1);
if (a2 != -1)
_vm->_objectsManager.BOBANIM_ON(a2);
if (a3 != -1)
_vm->_objectsManager.BOBANIM_ON(a3);
if (!a7) {
if (a1 != -1)
SET_BOBPOSI(a1, a4);
if (a2 != -1)
SET_BOBPOSI(a2, a5);
if (a3 != -1)
SET_BOBPOSI(a3, a6);
}
}
void ObjectsManager::SCI_OPTI_ONE(int a1, int a2, int a3, int a4) {
_vm->_eventsManager.souris_bb = 0;
_vm->_eventsManager.souris_b = 0;
if (a4 != 3) {
_vm->_objectsManager.BOBANIM_ON(a1);
SET_BOBPOSI(a1, a2);
}
do {
_vm->_eventsManager.VBL();
if (_vm->_eventsManager.souris_bb)
break;
} while (a3 != BOBPOSI(a1));
if (!a4)
_vm->_objectsManager.BOBANIM_OFF(a1);
}
int ObjectsManager::Control_Goto(const byte *dataP) {
return READ_LE_UINT16(dataP + 5);
}
int ObjectsManager::Control_If(const byte *dataP, int a2) {
int v2;
int v3;
int v4;
int v5;
int v6;
int v7;
const byte *v8;
int v9;
int v10;
int v11;
int v12;
int v14;
int v15;
int v16;
int v17;
int v18;
int v19;
int v20;
v2 = a2;
LABEL_2:
v3 = v2;
do {
++v3;
v4 = Traduction2(dataP + 20 * v3);
if (v3 > 400) {
v5 = v4;
error("Control if failed");
v4 = v5;
}
} while (v4 != 4);
v20 = v3;
v6 = v2;
v7 = 0;
do {
++v6;
if (Traduction2(dataP + 20 * v6) == 3)
v7 = 1;
if (v6 > 400)
error("Control if failed ");
if (v7 == 1) {
v2 = v20;
goto LABEL_2;
}
} while (v20 != v6);
v8 = dataP + 20 * a2;
v9 = *(v8 + 13);
v17 = *(v8 + 14);
v16 = *(v8 + 15);
v10 = READ_LE_UINT16(v8 + 5);
v11 = READ_LE_UINT16(v8 + 7);
v19 = READ_LE_UINT16(v8 + 9);
v18 = READ_LE_UINT16(v8 + 11);
v14 = 0;
v15 = 0;
if (v9 == 1 && _vm->_globals.SAUVEGARDE->data[v10] == v11)
v14 = 1;
if (v9 == 2 && _vm->_globals.SAUVEGARDE->data[v10] != v11)
v14 = 1;
if (v9 == 3 && _vm->_globals.SAUVEGARDE->data[v10] <= v11)
v14 = 1;
if (v9 == 4 && _vm->_globals.SAUVEGARDE->data[v10] >= v11)
v14 = 1;
if (v9 == 5 && _vm->_globals.SAUVEGARDE->data[v10] > v11)
v14 = 1;
if (v9 == 6 && _vm->_globals.SAUVEGARDE->data[v10] < v11)
v14 = 1;
if (v16 == 3)
goto LABEL_68;
if (v17 == 1 && v18 == _vm->_globals.SAUVEGARDE->data[v19])
v15 = 1;
if (v17 == 2 && v18 != _vm->_globals.SAUVEGARDE->data[v19])
v15 = 1;
if (v17 == 3 && v18 >= _vm->_globals.SAUVEGARDE->data[v19])
v15 = 1;
if (v17 == 4 && v18 <= _vm->_globals.SAUVEGARDE->data[v19])
v15 = 1;
if (v17 == 5 && v18 < _vm->_globals.SAUVEGARDE->data[v19])
v15 = 1;
if (v17 == 6 && v18 > _vm->_globals.SAUVEGARDE->data[v19])
v15 = 1;
if (v16 == 3) {
LABEL_68:
if (v14 == 1) {
v12 = a2;
return (v12 + 1);
}
if (!v14) {
LABEL_63:
v12 = v20;
return (v12 + 1);
}
}
if (v16 == 1) {
if (v14 == 1 && v15 == 1) {
v12 = a2;
return (v12 + 1);
}
goto LABEL_63;
}
if (v16 == 2) {
if (v14 == 1 || v15 == 1) {
v12 = a2;
return (v12 + 1);
}
goto LABEL_63;
}
return -1;
}
int ObjectsManager::Traduction2(const byte *dataP) {
signed __int16 result;
result = 0;
if (*dataP != 'F' || *(dataP + 1) != 'C') {
result = 0;
} else {
if (*(dataP + 'T') == 84 && *(dataP + 3) == 'X' && *(dataP + 4) == 'T')
result = 1;
if (*(dataP + 2) == 'B') {
if (*(dataP + 3) == 'O' && *(dataP + 4) == 'B')
result = 1;
if (*(dataP + 2) == 'B' && *(dataP + 3) == 'O' && *(dataP + 4) == 'F')
result = 1;
}
if (*(dataP + 2) == 'P' && *(dataP + 3) == 'E' && *(dataP + 4) == 'R')
result = 1;
if (*(dataP + 2) == 'S' && *(dataP + 3) == 'O' && *(dataP + 4) == 'U')
result = 1;
if (*(dataP + 2) == 'M' && *(dataP + 3) == 'U' && *(dataP + 4) == 'S')
result = 1;
if (*(dataP + 2) == 'O') {
if (*(dataP + 3) == 'B' && *(dataP + 4) == 'P')
result = 1;
if (*(dataP + 2) == 'O' && *(dataP + 3) == 'B' && *(dataP + 4) == 'M')
result = 1;
}
if (*(dataP + 2) == 'G' && *(dataP + 3) == 'O' && *(dataP + 4) == 'T')
result = 2;
if (*(dataP + 2) == 'Z') {
if (*(dataP + 3) == 'O' && *(dataP + 4) == 'N')
result = 1;
if (*(dataP + 2) == 'Z' && *(dataP + 3) == 'O' && *(dataP + 4) == 'F')
result = 1;
}
if (*(dataP + 2) == 'E' && *(dataP + 3) == 'X' && *(dataP + 4) == 'I')
result = 5;
if (*(dataP + 2) == 'S' && *(dataP + 3) == 'O' && *(dataP + 4) == 'R')
result = 5;
if (*(dataP + 2) == 'A' && *(dataP + 3) == 'N' && *(dataP + 4) == 'I')
result = 1;
if (*(dataP + 2) == 'S' && *(dataP + 3) == 'P' && *(dataP + 4) == 'E')
result = 1;
if (*(dataP + 2) == 'E' && *(dataP + 3) == 'I' && *(dataP + 4) == 'F')
result = 4;
if (*(dataP + 2) == 'V') {
if (*(dataP + 3) == 'A' && *(dataP + 4) == 'L')
result = 1;
if (*(dataP + 2) == 'V') {
if (*(dataP + 3) == 'O' && *(dataP + 4) == 'N')
result = 1;
if (*(dataP + 2) == 'V' && *(dataP + 3) == 'O' && *(dataP + 4) == 'F')
result = 1;
}
}
if (*(dataP + 2) == 'I' && *(dataP + 3) == 'I' && *(dataP + 4) == 'F')
result = 3;
if (*(dataP + 2) == 'J' && *(dataP + 3) == 'U' && *(dataP + 4) == 'M')
result = 6;
if (*(dataP + 2) == 'B') {
if (*(dataP + 3) == 'C' && *(dataP + 4) == 'A')
result = 1;
if (*(dataP + 2) == 'B' && *(dataP + 3) == 'O' && *(dataP + 4) == 'S')
result = 1;
}
if (*(dataP + 2) == 'Z' && *(dataP + 3) == 'C') {
if (*(dataP + 4) == 'H')
result = 1;
}
}
return result;
}
void ObjectsManager::VERBE_OFF(int idx, int a2) {
if (a2 == 6) {
_vm->_globals.ZONEP[idx].field6 = 0;
}
if (a2 == 7) {
_vm->_globals.ZONEP[idx].field7 = 0;
}
if (a2 == 8) {
_vm->_globals.ZONEP[idx].field8 = 0;
}
if (a2 == 9) {
_vm->_globals.ZONEP[idx].field9 = 0;
}
if (a2 == 10) {
_vm->_globals.ZONEP[idx].fieldA = 0;
}
if (a2 == 11) {
_vm->_globals.ZONEP[idx].fieldB = 0;
}
if (a2 == 12) {
_vm->_globals.ZONEP[idx].fieldC = 0;
}
if (a2 == 13) {
_vm->_globals.ZONEP[idx].fieldD = 0;
}
if (a2 == 14 || a2 == 25) {
_vm->_globals.ZONEP[idx].fieldE = 0;
}
if (a2 == 15) {
_vm->_globals.ZONEP[idx].fieldF = 0;
}
if (a2 == 16) {
_vm->_globals.ZONEP[idx].field6 = 0;
}
if (a2 == 5) {
_vm->_globals.ZONEP[idx].field8 = 0;
}
if (a2 == 17) {
_vm->_globals.ZONEP[idx].field9 = 0;
}
if (a2 == 18) {
_vm->_globals.ZONEP[idx].fieldA = 0;
}
if (a2 == 19) {
_vm->_globals.ZONEP[idx].fieldB = 0;
}
if (a2 == 20) {
_vm->_globals.ZONEP[idx].fieldC = 0;
}
if (a2 == 22) {
_vm->_globals.ZONEP[idx].fieldD = 0;
}
if (a2 == 21) {
_vm->_globals.ZONEP[idx].fieldE = 0;
}
if (a2 == 24) {
_vm->_globals.ZONEP[idx].field9 = 0;
}
CHANGEVERBE = 1;
}
void ObjectsManager::VERBE_ON(int idx, int a2) {
if (a2 == 6) {
_vm->_globals.ZONEP[idx].field6 = 1;
}
if (a2 == 7) {
_vm->_globals.ZONEP[idx].field7 = 1;
}
if (a2 == 8) {
_vm->_globals.ZONEP[idx].field8 = 1;
}
if (a2 == 9) {
_vm->_globals.ZONEP[idx].field9 = 1;
}
if (a2 == 10) {
_vm->_globals.ZONEP[idx].fieldA = 1;
}
if (a2 == 11) {
_vm->_globals.ZONEP[idx].fieldB = 1;
}
if (a2 == 12) {
_vm->_globals.ZONEP[idx].fieldC = 1;
}
if (a2 == 13) {
_vm->_globals.ZONEP[idx].fieldD = 1;
}
if (a2 == 14) {
_vm->_globals.ZONEP[idx].fieldD = 1;
}
if (a2 == 15) {
_vm->_globals.ZONEP[idx].fieldE = 1;
}
if (a2 == 16) {
_vm->_globals.ZONEP[idx].field6 = 2;
}
if (a2 == 5) {
_vm->_globals.ZONEP[idx].field8 = 2;
}
if (a2 == 17) {
_vm->_globals.ZONEP[idx].field9 = 2;
}
if (a2 == 18) {
_vm->_globals.ZONEP[idx].fieldA = 2;
}
if (a2 == 19) {
_vm->_globals.ZONEP[idx].fieldB = 2;
}
if (a2 == 20) {
_vm->_globals.ZONEP[idx].fieldC = 2;
}
if (a2 == 22) {
_vm->_globals.ZONEP[idx].fieldD = 2;
}
if (a2 == 21) {
_vm->_globals.ZONEP[idx].fieldE = 2;
}
if (a2 == 24) {
_vm->_globals.ZONEP[idx].field9 = 3;
}
if (a2 == 25) {
_vm->_globals.ZONEP[idx].fieldE = 2;
}
}
int ObjectsManager::CALC_PROPRE(int idx) {
int v1;
int v2;
int v3;
int v4;
v1 = 25;
v2 = _vm->_globals.STAILLE[idx];
if (_vm->_globals.PERSO_TYPE == 1) {
v3 = _vm->_globals.STAILLE[idx];
if (v2 < 0)
v3 = -v2;
v2 = 20 * (5 * v3 - 100) / -80;
}
if (_vm->_globals.PERSO_TYPE == 2) {
v4 = v2;
if (v2 < 0)
v4 = -v2;
v2 = 20 * (5 * v4 - 165) / -67;
}
if (v2 < 0)
return _vm->_graphicsManager.Reel_Reduc(0x19u, -v2);
if (v2 > 0)
return _vm->_graphicsManager.Reel_Zoom(0x19u, v2);
return v1;
}
int ObjectsManager::colision(int a1, int a2) {
if (_vm->_globals.SegmentEnCours <= 0)
return -1;
int v2 = a1;
int v3 = v2;
int v4 = v2 + 4;
int v5 = v2 - 4;
for (int idx = 0; idx <= _vm->_globals.SegmentEnCours; ++idx) {
int v8 = _vm->_globals.Segment[idx].field2;
if (v8 < _vm->_globals.Segment[idx].field4)
continue;
int v6 = a2 + 4;
int v7 = a2 - 4;
int v9 = v3 + 1;
do {
byte *srcP = _vm->_linesManager.LigneZone[v8].field4;
if (srcP != PTRNUL) {
bool flag = true;
int v11 = READ_LE_UINT16(srcP + _vm->_linesManager.LigneZone[v8].field0 * 2);
int dataV2 = READ_LE_UINT16(srcP + _vm->_linesManager.LigneZone[v8].field0 * 2 + 2);
int v12 = READ_LE_UINT16(srcP + _vm->_linesManager.LigneZone[v8].field0 * 4 - 4);
int v13 = READ_LE_UINT16(srcP + _vm->_linesManager.LigneZone[v8].field0 * 4 - 2);
int v10 = v13;
if (v11 < v12 && v4 >= v11 && v5 > v13)
flag = false;
if (v11 >= v12 && v5 <= v13 && v4 < v13)
flag = false;
if (dataV2 < v10 && v6 >= dataV2 && v7 > v10)
flag = false;
if (dataV2 >= v10 && v7 <= dataV2 && v6 < v10)
flag = false;
if (!flag) {
if (v11 < _vm->_linesManager.LigneZone[v8].field0) {
for (; v11 < _vm->_linesManager.LigneZone[v8].field0; ++idx) {
int v11 = READ_LE_UINT16(srcP);
int v12 = READ_LE_UINT16(srcP + 2);
srcP += 4;
if ((v2 == v11 || v9 == v11) && a2 == v12)
return _vm->_linesManager.LigneZone[v8].field2;
}
}
}
}
} while (++v8 < _vm->_globals.Segment[idx].field0);
}
return -1;
}
void ObjectsManager::ACTION(const byte *spriteData, const Common::String &a2, int a3, int a4, int a5, int a6) {
int v6;
int v7;
char v8;
int v9;
int v10;
int v11;
int v13;
const byte *v14;
char v15;
int v16;
int v17;
int v18;
Common::String v19;
v18 = 0;
v6 = 0;
v13 = 0;
v15 = a5;
v19 = " ";
if (_vm->_globals.vitesse == 2)
v15 = a5 / 2;
if (_vm->_globals.vitesse == 3)
v15 = a5 / 3;
v14 = Sprite[0].spriteData;
v17 = Sprite[0].field10;
v16 = Sprite[0].fieldE;
Sprite[0].field12 += a3;
Sprite[0].field14 += a4;
Sprite[0].fieldE = a6;
for (;;) {
v7 = 0;
v8 = a2[v18];
if (v8 == ',') {
v9 = atoi(v19.c_str());
v13 = v9;
v6 = 0;
v19 = " ";
v7 = 1;
} else {
v9 = v6;
v19 += v8;
v6 = v6 + 1;
}
++v18;
if (v7 == 1) {
if (v13 == -1) {
Sprite[0].spriteData = v14;
Sprite[0].field10 = v17;
Sprite[0].field12 -= a3;
Sprite[0].field14 -= a4;
Sprite[0].fieldE = v16;
} else {
Sprite[0].spriteData = spriteData;
Sprite[0].field10 = v13;
}
v10 = 0;
v9 = v15;
if (v15 > 0) {
do {
v11 = v9;
_vm->_eventsManager.VBL();
++v10;
v9 = v11;
} while (v10 < v11);
}
if (v13 == -1)
break;
}
}
return;
}
void ObjectsManager::SPACTION(byte *a1, const Common::String &a2, int a3, int a4, int a5, int a6) {
warning("TODO: SPACTION");
}
void ObjectsManager::SPACTION1(byte *a1, const Common::String &a2, int a3, int a4, int a5) {
warning("TODO: SPACTION1");
}
void ObjectsManager::TEST_FORET(int a1, int a2, int a3, int a4, int a5, int a6) {
signed int v6;
char v7;
v6 = a1;
if (_vm->_globals.ECRAN == a1) {
if (a1 == 35) {
if (a6 > 2 || (v6 = 200, a6 > 2))
v6 = 201;
}
if (_vm->_globals.ECRAN == 36) {
if (a6 > 2 || (v6 = 202, a6 > 2))
v6 = 203;
}
if (_vm->_globals.ECRAN == 37) {
if (a6 > 2 || (v6 = 204, a6 > 2))
v6 = 205;
}
if (_vm->_globals.ECRAN == 38) {
if (a6 > 2 || (v6 = 206, a6 > 2))
v6 = 207;
}
if (_vm->_globals.ECRAN == 39) {
if (a6 > 2 || (v6 = 208, a6 > 2))
v6 = 209;
}
if (_vm->_globals.ECRAN == 40) {
if (a6 > 2 || (v6 = 210, a6 > 2))
v6 = 211;
}
if (_vm->_globals.ECRAN == 41) {
if (a6 > 2 || (v6 = 212, a6 > 2))
v6 = 213;
}
v7 = _vm->_globals.SAUVEGARDE->data[v6];
if (v7 != 2) {
if (v7) {
if (v7 == 1) {
if (a6 == 1 && BOBPOSI(1) == 26) {
VIRE_INVENT = 1;
_vm->_soundManager.PLAY_SAMPLE2(1);
_vm->_globals.SAUVEGARDE->data[v6] = 4;
}
if (a6 == 2 && BOBPOSI(2) == 26) {
VIRE_INVENT = 1;
_vm->_soundManager.PLAY_SAMPLE2(1);
_vm->_globals.SAUVEGARDE->data[v6] = 4;
}
if (a6 == 3 && BOBPOSI(3) == 27) {
VIRE_INVENT = 1;
_vm->_soundManager.PLAY_SAMPLE2(1);
_vm->_globals.SAUVEGARDE->data[v6] = 4;
}
if (a6 == 4 && BOBPOSI(4) == 27) {
VIRE_INVENT = 1;
_vm->_soundManager.PLAY_SAMPLE2(1);
VIRE_INVENT = 1;
_vm->_globals.SAUVEGARDE->data[v6] = 4;
}
}
if (_vm->_globals.SAUVEGARDE->data[v6] == 4) {
if (a6 == 1 && (signed int)BOBPOSI(1) > 30)
_vm->_globals.SAUVEGARDE->data[v6] = 3;
if (a6 == 2 && (signed int)BOBPOSI(2) > 30)
_vm->_globals.SAUVEGARDE->data[v6] = 3;
if (a6 == 3 && (signed int)BOBPOSI(3) > 30)
_vm->_globals.SAUVEGARDE->data[v6] = 3;
if (a6 == 4 && (signed int)BOBPOSI(4) > 30)
_vm->_globals.SAUVEGARDE->data[v6] = 3;
}
if (_vm->_globals.SAUVEGARDE->data[v6] == 3) {
_vm->_graphicsManager.FADE_LINUX = 2;
_vm->_animationManager.PLAY_ANM("CREVE2.ANM", 100, 24, 500);
_vm->_globals.SORTIE = 150;
_vm->_graphicsManager.NOFADE = 1;
BOB_OFF(1);
BOB_OFF(2);
BOB_OFF(3);
BOB_OFF(4);
}
} else if (a2 < XSPR(0)
&& a3 > XSPR(0)
&& a4 < YSPR(0)
&& a5 > YSPR(0)) {
if (a6 == 1)
BOBANIM_ON(1);
if (a6 == 2)
BOBANIM_ON(2);
if (a6 == 3)
BOBANIM_ON(3);
if (a6 == 4)
BOBANIM_ON(4);
_vm->_globals.SAUVEGARDE->data[v6] = 1;
}
}
}
}
void ObjectsManager::BLOQUE_ANIMX(int idx, int a2) {
_vm->_globals.BL_ANIM[idx].v1 = 1;
_vm->_globals.BL_ANIM[idx].v2 = a2;
}
} // End of namespace Hopkins