HOPKINS: More private members in LinesManager

This commit is contained in:
Strangerke 2013-01-27 22:28:10 +01:00
parent b9f9b2c75b
commit 0f13ff5cc1
7 changed files with 101 additions and 95 deletions

View File

@ -161,14 +161,13 @@ Globals::Globals() {
_oceanDirection = 0;
// Initialise pointers
// Initialize pointers
ICONE = NULL;
BUF_ZONE = NULL;
for (int idx = 0; idx < 6; ++idx)
CACHE_BANQUE[idx] = NULL;
SPRITE_ECRAN = NULL;
_saveData = NULL;
BUFFERTAPE = NULL;
inventaire2 = NULL;
GESTE = NULL;
_inventoryObject = NULL;
@ -214,7 +213,6 @@ Globals::~Globals() {
CACHE_BANQUE[idx] = freeMemory(CACHE_BANQUE[idx]);
freeMemory(SPRITE_ECRAN);
freeMemory((byte *)_saveData);
freeMemory(BUFFERTAPE);
freeMemory(inventaire2);
freeMemory(GESTE);
freeMemory(_inventoryObject);
@ -299,38 +297,11 @@ void Globals::clearAll() {
ZONEP[idx]._spriteIndex = 0;
}
_vm->_linesManager.essai0 = (int16 *)g_PTRNUL;
_vm->_linesManager.essai1 = (int16 *)g_PTRNUL;
_vm->_linesManager.essai2 = (int16 *)g_PTRNUL;
_vm->_linesManager.BufLig = (int16 *)g_PTRNUL;
_vm->_linesManager._route = (int16 *)g_PTRNUL;
for (int idx = 0; idx < MAX_LINES; ++idx) {
_vm->_linesManager.Ligne[idx]._lineDataEndIdx = 0;
_vm->_linesManager.Ligne[idx].field2 = 0;
_vm->_linesManager.Ligne[idx]._direction = 0;
_vm->_linesManager.Ligne[idx].field6 = 0;
_vm->_linesManager.Ligne[idx].field8 = 0;
_vm->_linesManager.Ligne[idx]._lineData = (int16 *)g_PTRNUL;
_vm->_linesManager._zoneLine[idx]._count = 0;
_vm->_linesManager._zoneLine[idx].field2 = 0;
_vm->_linesManager._zoneLine[idx]._zoneData = (int16 *)g_PTRNUL;
}
for (int idx = 0; idx < 100; ++idx) {
_vm->_linesManager.CarreZone[idx]._enabledFl = 0;
}
BUFFERTAPE = allocMemory(85000);
_vm->_linesManager.clearAll();
_saveData = (Sauvegarde *)malloc(sizeof(Sauvegarde));
memset(_saveData, 0, sizeof(Sauvegarde));
_vm->_linesManager.essai0 = (int16 *)BUFFERTAPE;
_vm->_linesManager.essai1 = (int16 *)(BUFFERTAPE + 25000);
_vm->_linesManager.essai2 = (int16 *)(BUFFERTAPE + 50000);
_vm->_linesManager.BufLig = (int16 *)(BUFFERTAPE + 75000);
_boxWidth = 240;
_vm->_eventsManager._objectBuf = allocMemory(2500);

View File

@ -315,7 +315,6 @@ public:
byte *BUF_ZONE;
byte *SPRITE_ECRAN;
Sauvegarde *_saveData;
byte *BUFFERTAPE;
byte *inventaire2;
byte *GESTE;
int NUM_FICHIER_OBJ;

View File

@ -58,7 +58,12 @@ LinesManager::LinesManager() {
essai2 = NULL;
BufLig = (int16 *)g_PTRNUL;
_route = (int16 *)g_PTRNUL;
SegmentEnCours = 0;
_currentSegmentId = 0;
BUFFERTAPE = NULL;
}
LinesManager::~LinesManager() {
_vm->_globals.freeMemory(BUFFERTAPE);
}
void LinesManager::setParent(HopkinsEngine *vm) {
@ -87,14 +92,6 @@ void LinesManager::loadLines(const Common::String &file) {
_vm->_globals.freeMemory(ptr);
}
/**
* Clear all zones and reset nextLine
*/
void LinesManager::clearAllZones() {
for (int idx = 0; idx < MAX_LINES; ++idx)
removeZoneLine(idx);
}
/**
* Check Hotspots in Inventory screen
* Returns the ID of the hotspot under mouse
@ -158,14 +155,6 @@ int LinesManager::checkInventoryHotspotsRow(int posX, int minZoneNum, bool lastR
return 0;
}
/**
* Remove Zone Line
*/
void LinesManager::removeZoneLine(int idx) {
assert (idx <= MAX_LINES);
_zoneLine[idx]._zoneData = (int16 *)_vm->_globals.freeMemory((byte *)_zoneLine[idx]._zoneData);
}
/**
* Add Zone Line
*/
@ -217,21 +206,6 @@ void LinesManager::addZoneLine(int idx, int a2, int a3, int a4, int a5, int bobZ
}
}
void LinesManager::resetLines() {
for (int idx = 0; idx < MAX_LINES; ++idx) {
removeLine(idx);
Ligne[idx]._lineDataEndIdx = 0;
Ligne[idx]._lineData = (int16 *)g_PTRNUL;
}
}
// Remove Line
void LinesManager::removeLine(int idx) {
if (idx > MAX_LINES)
error("Attempting to add a line obstacle > MAX_LIGNE.");
Ligne[idx]._lineData = (int16 *)_vm->_globals.freeMemory((byte *)Ligne[idx]._lineData);
}
/**
* Add Line
*/
@ -274,8 +248,7 @@ void LinesManager::addLine(int idx, int a2, int a3, int a4, int a5, int a6, int
v34 = v8;
v10 = _vm->_globals.allocMemory(4 * v34 + 8);
if (v10 == g_PTRNUL)
error("AJOUTE LIGNE OBSTACLE");
assert (v10 != g_PTRNUL);
Common::fill(v10, v10 + 4 * v34 + 8, 0);
Ligne[idx]._lineData = (int16 *)v10;
@ -2865,7 +2838,6 @@ bool LinesManager::PLAN_TEST(int paramX, int paramY, int a3, int a4, int a5) {
int superRouteIdx = a3;
if (v33 == 1) {
essai0 = essai0;
for (int i = 0; i < Ligne[idxTest]._lineDataEndIdx; i++) {
super_parcours[superRouteIdx] = Ligne[idxTest]._lineData[2 * i];
super_parcours[superRouteIdx + 1] = Ligne[idxTest]._lineData[2 * i + 1];
@ -3028,7 +3000,7 @@ int LinesManager::MZONE() {
}
}
}
SegmentEnCours = 0;
_currentSegmentId = 0;
for (int squareZoneId = 0; squareZoneId <= 99; squareZoneId++) {
if (_vm->_globals.ZONEP[squareZoneId]._enabledFl && CarreZone[squareZoneId]._enabledFl == 1
&& CarreZone[squareZoneId]._left <= xp && CarreZone[squareZoneId]._right >= xp
@ -3037,12 +3009,12 @@ int LinesManager::MZONE() {
_vm->_globals.oldzone_46 = _zoneLine[CarreZone[squareZoneId]._minZoneLineIdx].field2;
return _vm->_globals.oldzone_46;
}
Segment[SegmentEnCours].field2 = CarreZone[squareZoneId]._minZoneLineIdx;
Segment[SegmentEnCours].field4 = CarreZone[squareZoneId]._maxZoneLineIdx;
++SegmentEnCours;
Segment[_currentSegmentId].field2 = CarreZone[squareZoneId]._minZoneLineIdx;
Segment[_currentSegmentId].field4 = CarreZone[squareZoneId]._maxZoneLineIdx;
++_currentSegmentId;
}
}
if (!SegmentEnCours) {
if (!_currentSegmentId) {
_vm->_globals.oldzone_46 = -1;
return -1;
}
@ -3102,13 +3074,13 @@ int LinesManager::MZONE() {
}
int LinesManager::colision(int xp, int yp) {
if (SegmentEnCours <= 0)
if (_currentSegmentId <= 0)
return -1;
int xMax = xp + 4;
int xMin = xp - 4;
for (int idx = 0; idx <= SegmentEnCours; ++idx) {
for (int idx = 0; idx <= _currentSegmentId; ++idx) {
int field2 = Segment[idx].field2;
if (Segment[idx].field4 < field2)
continue;
@ -3199,4 +3171,67 @@ void LinesManager::CARRE_ZONE() {
}
}
void LinesManager::clearAll() {
_vm->_linesManager.essai0 = (int16 *)g_PTRNUL;
_vm->_linesManager.essai1 = (int16 *)g_PTRNUL;
_vm->_linesManager.essai2 = (int16 *)g_PTRNUL;
_vm->_linesManager.BufLig = (int16 *)g_PTRNUL;
_vm->_linesManager._route = (int16 *)g_PTRNUL;
for (int idx = 0; idx < MAX_LINES; ++idx) {
_vm->_linesManager.Ligne[idx]._lineDataEndIdx = 0;
_vm->_linesManager.Ligne[idx].field2 = 0;
_vm->_linesManager.Ligne[idx]._direction = 0;
_vm->_linesManager.Ligne[idx].field6 = 0;
_vm->_linesManager.Ligne[idx].field8 = 0;
_vm->_linesManager.Ligne[idx]._lineData = (int16 *)g_PTRNUL;
_vm->_linesManager._zoneLine[idx]._count = 0;
_vm->_linesManager._zoneLine[idx].field2 = 0;
_vm->_linesManager._zoneLine[idx]._zoneData = (int16 *)g_PTRNUL;
}
for (int idx = 0; idx < 100; ++idx) {
_vm->_linesManager.CarreZone[idx]._enabledFl = 0;
}
BUFFERTAPE = _vm->_globals.allocMemory(85000);
_vm->_linesManager.essai0 = (int16 *)BUFFERTAPE;
_vm->_linesManager.essai1 = (int16 *)(BUFFERTAPE + 25000);
_vm->_linesManager.essai2 = (int16 *)(BUFFERTAPE + 50000);
_vm->_linesManager.BufLig = (int16 *)(BUFFERTAPE + 75000);
}
/**
* Clear all zones and reset nextLine
*/
void LinesManager::clearAllZones() {
for (int idx = 0; idx < MAX_LINES; ++idx)
removeZoneLine(idx);
}
/**
* Remove Zone Line
*/
void LinesManager::removeZoneLine(int idx) {
assert (idx <= MAX_LINES);
_zoneLine[idx]._zoneData = (int16 *)_vm->_globals.freeMemory((byte *)_zoneLine[idx]._zoneData);
}
void LinesManager::resetLines() {
for (int idx = 0; idx < MAX_LINES; ++idx) {
removeLine(idx);
Ligne[idx]._lineDataEndIdx = 0;
Ligne[idx]._lineData = (int16 *)g_PTRNUL;
}
}
// Remove Line
void LinesManager::removeLine(int idx) {
if (idx > MAX_LINES)
error("Attempting to add a line obstacle > MAX_LIGNE.");
Ligne[idx]._lineData = (int16 *)_vm->_globals.freeMemory((byte *)Ligne[idx]._lineData);
}
} // End of namespace Hopkins

View File

@ -80,6 +80,15 @@ private:
int NVPY;
int _smoothMoveDirection;
int16 super_parcours[32002];
byte *BUFFERTAPE;
int16 *essai0;
int16 *essai1;
int16 *BufLig;
LigneZoneItem _zoneLine[401];
LigneItem Ligne[400];
SegmentItem Segment[101];
CarreZoneItem CarreZone[101];
int _currentSegmentId;
int CALC_PROPRE(int idx);
int checkInventoryHotspotsRow(int posX, int minZoneNum, bool lastRow);
@ -99,21 +108,14 @@ private:
public:
int _lastLine;
int _linesNumb;
LigneZoneItem _zoneLine[401];
LigneItem Ligne[400];
int _maxLineIdx;
SegmentItem Segment[101];
CarreZoneItem CarreZone[101];
int SegmentEnCours;
int16 *essai2;
public:
int16 *essai0;
int16 *essai1;
int16 *essai2;
int16 *BufLig;
int16 *_route;
LinesManager();
~LinesManager();
void setParent(HopkinsEngine *vm);
int checkInventoryHotspots(int posX, int posY);
@ -129,6 +131,7 @@ public:
int colision(int xp, int yp);
int MZONE();
void CARRE_ZONE();
void clearAll();
};
} // End of namespace Hopkins

View File

@ -3335,21 +3335,19 @@ void ObjectsManager::SPECIAL_INI() {
}
}
void ObjectsManager::OPTI_BOBON(int idx1, int idx2, int idx3, int a4, int a5, int a6, int a7) {
void ObjectsManager::OPTI_BOBON(int idx1, int idx2, int idx3, int a4, int a5, int a6) {
if (idx1 != -1)
setBobAnimation(idx1);
if (idx2 != -1)
setBobAnimation(idx2);
if (idx3 != -1)
setBobAnimation(idx3);
if (!a7) {
if (idx1 != -1)
SET_BOBPOSI(idx1, a4);
if (idx2 != -1)
SET_BOBPOSI(idx2, a5);
if (idx3 != -1)
SET_BOBPOSI(idx3, a6);
}
if (idx1 != -1)
SET_BOBPOSI(idx1, a4);
if (idx2 != -1)
SET_BOBPOSI(idx2, a5);
if (idx3 != -1)
SET_BOBPOSI(idx3, a6);
}
void ObjectsManager::SCI_OPTI_ONE(int idx, int a2, int a3, int a4) {

View File

@ -189,7 +189,7 @@ public:
void INILINK(const Common::String &file);
void SPECIAL_INI();
void OPTI_BOBON(int idx1, int idx2, int idx3, int a4, int a5, int a6, int a7);
void OPTI_BOBON(int idx1, int idx2, int idx3, int a4, int a5, int a6);
void SCI_OPTI_ONE(int idx, int a2, int a3, int a4);
void disableVerb(int idx, int a2);
void enableVerb(int idx, int a2);

View File

@ -736,7 +736,7 @@ int ScriptManager::handleOpcode(byte *dataP) {
_vm->_globals.NOT_VERIF = true;
_vm->_soundManager.loadSample(1, "SOUND44.WAV");
_vm->_soundManager.loadSample(2, "SOUND45.WAV");
_vm->_objectsManager.OPTI_BOBON(9, 10, -1, 0, 0, 0, 0);
_vm->_objectsManager.OPTI_BOBON(9, 10, -1, 0, 0, 0);
bool v15 = false;
do {
if (_vm->shouldQuit())
@ -805,7 +805,7 @@ int ScriptManager::handleOpcode(byte *dataP) {
case 49: {
_vm->_globals.CACHE_OFF();
_vm->_objectsManager.removeSprite(0);
_vm->_objectsManager.OPTI_BOBON(9, 10, -1, 0, 0, 0, 0);
_vm->_objectsManager.OPTI_BOBON(9, 10, -1, 0, 0, 0);
int v19 = 12;
if (_vm->_globals._saveData->_data[svField133] == 1)
v19 = 41;