diff options
Diffstat (limited to 'gob/map.cpp')
| -rw-r--r-- | gob/map.cpp | 522 |
1 files changed, 266 insertions, 256 deletions
diff --git a/gob/map.cpp b/gob/map.cpp index 955742503a..85983a72de 100644 --- a/gob/map.cpp +++ b/gob/map.cpp @@ -31,28 +31,38 @@ namespace Gob { -int8 map_passMap[kMapHeight][kMapWidth]; // [y][x] -int16 map_itemsMap[kMapHeight][kMapWidth]; // [y][x] - -Map_Point map_wayPoints[40]; -int16 map_nearestWayPoint = 0; -int16 map_nearestDest = 0; - -int16 map_curGoblinX; -int16 map_curGoblinY; -int16 map_destX; -int16 map_destY; - -Map_ItemPos map_itemPoses[40]; -int8 map_loadFromAvo; -char map_sourceFile[15]; -static char *map_avoDataPtr; - -void map_placeItem(int16 x, int16 y, int16 id) { - if ((map_itemsMap[y][x] & 0xff00) != 0) - map_itemsMap[y][x] = (map_itemsMap[y][x] & 0xff00) | id; +Map::Map(GobEngine *vm) : _vm(vm) { + for (int i = 0; i < kMapHeight; i++) + for (int j = 0; j < kMapWidth; j++) { + passMap[i][j] = 0; + itemsMap[i][j] = 0; + } + for (int i = 0; i < 40; i++) { + wayPoints[i].x = 0; + wayPoints[i].y = 0; + } + for (int i = 0; i < 40; i++) { + itemPoses[i].x = 0; + itemPoses[i].y = 0; + itemPoses[i].orient = 0; + } + + nearestWayPoint = 0; + nearestDest = 0; + curGoblinX = 0; + curGoblinY = 0; + destX = 0; + destY = 0; + loadFromAvo = 0; + sourceFile[0] = 0; + avoDataPtr = 0; +} + +void Map::placeItem(int16 x, int16 y, int16 id) { + if ((itemsMap[y][x] & 0xff00) != 0) + itemsMap[y][x] = (itemsMap[y][x] & 0xff00) | id; else - map_itemsMap[y][x] = (map_itemsMap[y][x] & 0x00ff) | (id << 8); + itemsMap[y][x] = (itemsMap[y][x] & 0x00ff) | (id << 8); } enum { @@ -62,7 +72,7 @@ enum { kDown = (1 << 3) }; -int16 map_getDirection(int16 x0, int16 y0, int16 x1, int16 y1) { +int16 Map::getDirection(int16 x0, int16 y0, int16 x1, int16 y1) { int16 dir = 0; if (x0 == x1 && y0 == y1) @@ -81,63 +91,63 @@ int16 map_getDirection(int16 x0, int16 y0, int16 x1, int16 y1) { else if (x1 < x0) dir |= kLeft; - if (map_passMap[y0][x0] == 3 && (dir & kUp)) { - if (map_passMap[y0 - 1][x0] != 0) + if (passMap[y0][x0] == 3 && (dir & kUp)) { + if (passMap[y0 - 1][x0] != 0) return kDirN; } - if (map_passMap[y0][x0] == 3 && (dir & kDown)) { - if (map_passMap[y0 + 1][x0] != 0) + if (passMap[y0][x0] == 3 && (dir & kDown)) { + if (passMap[y0 + 1][x0] != 0) return kDirS; } - if (map_passMap[y0][x0] == 6 && (dir & kUp)) { - if (map_passMap[y0 - 1][x0] != 0) + if (passMap[y0][x0] == 6 && (dir & kUp)) { + if (passMap[y0 - 1][x0] != 0) return kDirN; } - if (map_passMap[y0][x0] == 6 && (dir & kDown)) { - if (map_passMap[y0 + 1][x0] != 0) + if (passMap[y0][x0] == 6 && (dir & kDown)) { + if (passMap[y0 + 1][x0] != 0) return kDirS; } if (dir == kLeft) { - if (x0 - 1 >= 0 && map_passMap[y0][x0 - 1] != 0) + if (x0 - 1 >= 0 && passMap[y0][x0 - 1] != 0) return kDirW; return 0; } if (dir == kRight) { - if (x0 + 1 < kMapWidth && map_passMap[y0][x0 + 1] != 0) + if (x0 + 1 < kMapWidth && passMap[y0][x0 + 1] != 0) return kDirE; return 0; } if (dir == kUp) { - if (y0 - 1 >= 0 && map_passMap[y0 - 1][x0] != 0) + if (y0 - 1 >= 0 && passMap[y0 - 1][x0] != 0) return kDirN; if (y0 - 1 >= 0 && x0 - 1 >= 0 - && map_passMap[y0 - 1][x0 - 1] != 0) + && passMap[y0 - 1][x0 - 1] != 0) return kDirNW; if (y0 - 1 >= 0 && x0 + 1 < kMapWidth - && map_passMap[y0 - 1][x0 + 1] != 0) + && passMap[y0 - 1][x0 + 1] != 0) return kDirNE; return 0; } if (dir == kDown) { - if (y0 + 1 < kMapHeight && map_passMap[y0 + 1][x0] != 0) + if (y0 + 1 < kMapHeight && passMap[y0 + 1][x0] != 0) return kDirS; if (y0 + 1 < kMapHeight && x0 - 1 >= 0 - && map_passMap[y0 + 1][x0 - 1] != 0) + && passMap[y0 + 1][x0 - 1] != 0) return kDirSW; if (y0 + 1 < kMapHeight && x0 + 1 < kMapWidth - && map_passMap[y0 + 1][x0 + 1] != 0) + && passMap[y0 + 1][x0 + 1] != 0) return kDirSE; return 0; @@ -145,13 +155,13 @@ int16 map_getDirection(int16 x0, int16 y0, int16 x1, int16 y1) { if (dir == (kRight | kUp)) { if (y0 - 1 >= 0 && x0 + 1 < kMapWidth - && map_passMap[y0 - 1][x0 + 1] != 0) + && passMap[y0 - 1][x0 + 1] != 0) return kDirNE; - if (y0 - 1 >= 0 && map_passMap[y0 - 1][x0] != 0) + if (y0 - 1 >= 0 && passMap[y0 - 1][x0] != 0) return kDirN; - if (x0 + 1 < kMapWidth && map_passMap[y0][x0 + 1] != 0) + if (x0 + 1 < kMapWidth && passMap[y0][x0 + 1] != 0) return kDirE; return 0; @@ -159,13 +169,13 @@ int16 map_getDirection(int16 x0, int16 y0, int16 x1, int16 y1) { if (dir == (kRight | kDown)) { if (x0 + 1 < kMapWidth && y0 + 1 < kMapHeight - && map_passMap[y0 + 1][x0 + 1] != 0) + && passMap[y0 + 1][x0 + 1] != 0) return kDirSE; - if (y0 + 1 < kMapHeight && map_passMap[y0 + 1][x0] != 0) + if (y0 + 1 < kMapHeight && passMap[y0 + 1][x0] != 0) return kDirS; - if (x0 + 1 < kMapWidth && map_passMap[y0][x0 + 1] != 0) + if (x0 + 1 < kMapWidth && passMap[y0][x0 + 1] != 0) return kDirE; return 0; @@ -173,13 +183,13 @@ int16 map_getDirection(int16 x0, int16 y0, int16 x1, int16 y1) { if (dir == (kLeft | kUp)) { if (x0 - 1 >= 0 && y0 - 1 >= 0 - && map_passMap[y0 - 1][x0 - 1] != 0) + && passMap[y0 - 1][x0 - 1] != 0) return kDirNW; - if (y0 - 1 >= 0 && map_passMap[y0 - 1][x0] != 0) + if (y0 - 1 >= 0 && passMap[y0 - 1][x0] != 0) return kDirN; - if (x0 - 1 >= 0 && map_passMap[y0][x0 - 1] != 0) + if (x0 - 1 >= 0 && passMap[y0][x0 - 1] != 0) return kDirW; return 0; @@ -187,13 +197,13 @@ int16 map_getDirection(int16 x0, int16 y0, int16 x1, int16 y1) { if (dir == (kLeft | kDown)) { if (x0 - 1 >= 0 && y0 + 1 < kMapHeight - && map_passMap[y0 + 1][x0 - 1] != 0) + && passMap[y0 + 1][x0 - 1] != 0) return kDirSW; - if (y0 + 1 < kMapHeight && map_passMap[y0 + 1][x0] != 0) + if (y0 + 1 < kMapHeight && passMap[y0 + 1][x0] != 0) return kDirS; - if (x0 - 1 >= 0 && map_passMap[y0][x0 - 1] != 0) + if (x0 - 1 >= 0 && passMap[y0][x0 - 1] != 0) return kDirW; return 0; @@ -201,8 +211,8 @@ int16 map_getDirection(int16 x0, int16 y0, int16 x1, int16 y1) { return -1; } -int16 map_findNearestWayPoint(int16 x, int16 y) { - int16 nearestWayPoint = -1; +int16 Map::findNearestWayPoint(int16 x, int16 y) { + int16 lnearestWayPoint = -1; int16 length; int16 i; int16 tmp; @@ -210,41 +220,41 @@ int16 map_findNearestWayPoint(int16 x, int16 y) { length = 30000; for (i = 0; i < 40; i++) { - if (map_wayPoints[i].x < 0 || - map_wayPoints[i].x >= kMapWidth || - map_wayPoints[i].y < 0 || map_wayPoints[i].y >= kMapHeight) + if (wayPoints[i].x < 0 || + wayPoints[i].x >= kMapWidth || + wayPoints[i].y < 0 || wayPoints[i].y >= kMapHeight) return -1; - tmp = ABS(x - map_wayPoints[i].x) + ABS(y - map_wayPoints[i].y); + tmp = ABS(x - wayPoints[i].x) + ABS(y - wayPoints[i].y); if (tmp <= length) { - nearestWayPoint = i; + lnearestWayPoint = i; length = tmp; } } - return nearestWayPoint; + return lnearestWayPoint; } -void map_findNearestToGob(void) { - int16 wayPoint = map_findNearestWayPoint(map_curGoblinX, map_curGoblinY); +void Map::findNearestToGob(void) { + int16 wayPoint = findNearestWayPoint(curGoblinX, curGoblinY); if (wayPoint != -1) - map_nearestWayPoint = wayPoint; + nearestWayPoint = wayPoint; } -void map_findNearestToDest(void) { - int16 wayPoint = map_findNearestWayPoint(map_destX, map_destY); +void Map::findNearestToDest(void) { + int16 wayPoint = findNearestWayPoint(destX, destY); if (wayPoint != -1) - map_nearestDest = wayPoint; + nearestDest = wayPoint; } -int16 map_checkDirectPath(int16 x0, int16 y0, int16 x1, int16 y1) { +int16 Map::checkDirectPath(int16 x0, int16 y0, int16 x1, int16 y1) { uint16 dir; while (1) { - dir = map_getDirection(x0, y0, x1, y1); + dir = getDirection(x0, y0, x1, y1); if (x0 == x1 && y0 == y1) return 1; @@ -292,7 +302,7 @@ int16 map_checkDirectPath(int16 x0, int16 y0, int16 x1, int16 y1) { } } -int16 map_checkLongPath(int16 x0, int16 y0, int16 x1, int16 y1, int16 i0, int16 i1) { +int16 Map::checkLongPath(int16 x0, int16 y0, int16 x1, int16 y1, int16 i0, int16 i1) { uint16 dir; int16 curX; int16 curY; @@ -309,30 +319,30 @@ int16 map_checkLongPath(int16 x0, int16 y0, int16 x1, int16 y1, int16 i0, int16 nextLink = 1; if (nextLink != 0) { - if (map_checkDirectPath(x0, y0, x1, y1) == 1) + if (checkDirectPath(x0, y0, x1, y1) == 1) return 1; nextLink = 0; if (i0 > i1) { - curX = map_wayPoints[i0].x; - curY = map_wayPoints[i0].y; + curX = wayPoints[i0].x; + curY = wayPoints[i0].y; i0--; } else if (i0 < i1) { - curX = map_wayPoints[i0].x; - curY = map_wayPoints[i0].y; + curX = wayPoints[i0].x; + curY = wayPoints[i0].y; i0++; } else if (i0 == i1) { - curX = map_wayPoints[i0].x; - curY = map_wayPoints[i0].y; + curX = wayPoints[i0].x; + curY = wayPoints[i0].y; } } - if (i0 == i1 && map_wayPoints[i0].x == x0 - && map_wayPoints[i0].y == y0) { - if (map_checkDirectPath(x0, y0, x1, y1) == 1) + if (i0 == i1 && wayPoints[i0].x == x0 + && wayPoints[i0].y == y0) { + if (checkDirectPath(x0, y0, x1, y1) == 1) return 1; return 0; } - dir = map_getDirection(x0, y0, curX, curY); + dir = getDirection(x0, y0, curX, curY); switch (dir) { case 0: return 0; @@ -376,54 +386,54 @@ int16 map_checkLongPath(int16 x0, int16 y0, int16 x1, int16 y1, int16 i0, int16 } } -void map_optimizePoints(void) { +void Map::optimizePoints(void) { int16 i; - if (map_nearestWayPoint < map_nearestDest) { - for (i = map_nearestWayPoint; i <= map_nearestDest; i++) { - if (map_checkDirectPath(map_curGoblinX, map_curGoblinY, - map_wayPoints[i].x, map_wayPoints[i].y) == 1) - map_nearestWayPoint = i; + if (nearestWayPoint < nearestDest) { + for (i = nearestWayPoint; i <= nearestDest; i++) { + if (checkDirectPath(curGoblinX, curGoblinY, + wayPoints[i].x, wayPoints[i].y) == 1) + nearestWayPoint = i; } - } else if (map_nearestWayPoint > map_nearestDest) { - for (i = map_nearestWayPoint; i >= map_nearestDest; i--) { - if (map_checkDirectPath(map_curGoblinX, map_curGoblinY, - map_wayPoints[i].x, map_wayPoints[i].y) == 1) - map_nearestWayPoint = i; + } else if (nearestWayPoint > nearestDest) { + for (i = nearestWayPoint; i >= nearestDest; i--) { + if (checkDirectPath(curGoblinX, curGoblinY, + wayPoints[i].x, wayPoints[i].y) == 1) + nearestWayPoint = i; } } } -void map_loadDataFromAvo(char *dest, int16 size) { - memcpy(dest, map_avoDataPtr, size); - map_avoDataPtr += size; +void Map::loadDataFromAvo(char *dest, int16 size) { + memcpy(dest, avoDataPtr, size); + avoDataPtr += size; } -uint16 map_loadFromAvo_LE_UINT16() { - uint16 tmp = READ_LE_UINT16(map_avoDataPtr); - map_avoDataPtr += 2; +uint16 Map::loadFromAvo_LE_UINT16() { + uint16 tmp = READ_LE_UINT16(avoDataPtr); + avoDataPtr += 2; return tmp; } -void map_loadItemToObject(void) { +void Map::loadItemToObject(void) { int16 flag; int16 count; int16 i; - flag = map_loadFromAvo_LE_UINT16(); + flag = loadFromAvo_LE_UINT16(); if (flag == 0) return; - map_avoDataPtr += 1456; - count = map_loadFromAvo_LE_UINT16(); + avoDataPtr += 1456; + count = loadFromAvo_LE_UINT16(); for (i = 0; i < count; i++) { - map_avoDataPtr += 20; - gob_itemToObject[i] = map_loadFromAvo_LE_UINT16(); - map_avoDataPtr += 5; + avoDataPtr += 20; + _vm->_goblin->itemToObject[i] = loadFromAvo_LE_UINT16(); + avoDataPtr += 5; } } -void map_loadMapObjects(char *avjFile) { +void Map::loadMapObjects(char *avjFile) { int16 i; char avoName[128]; int16 handle; @@ -436,7 +446,7 @@ void map_loadMapObjects(char *avjFile) { int16 state; int16 col; int32 flag; - Gob_State *pState; + Goblin::Gob_State *pState; char buf[128]; char sndNames[20][14]; char *dataBuf; @@ -445,154 +455,154 @@ void map_loadMapObjects(char *avjFile) { int16 count2; int16 count3; - strcpy(avoName, map_sourceFile); + strcpy(avoName, sourceFile); strcat(avoName, ".avo"); - handle = data_openData(avoName); + handle = _vm->_dataio->openData(avoName); if (handle >= 0) { - map_loadFromAvo = 1; - data_closeData(handle); - map_avoDataPtr = data_getData(avoName); - dataBuf = map_avoDataPtr; - map_loadDataFromAvo((char *)map_passMap, kMapHeight * kMapWidth); + loadFromAvo = 1; + _vm->_dataio->closeData(handle); + avoDataPtr = _vm->_dataio->getData(avoName); + dataBuf = avoDataPtr; + loadDataFromAvo((char *)passMap, kMapHeight * kMapWidth); for (y = 0; y < kMapHeight; y++) { for (x = 0; x < kMapWidth; x++) { - map_loadDataFromAvo(&item, 1); - map_itemsMap[y][x] = item; + loadDataFromAvo(&item, 1); + itemsMap[y][x] = item; } } for (i = 0; i < 40; i++) { - map_wayPoints[i].x = map_loadFromAvo_LE_UINT16(); - map_wayPoints[i].y = map_loadFromAvo_LE_UINT16(); + wayPoints[i].x = loadFromAvo_LE_UINT16(); + wayPoints[i].y = loadFromAvo_LE_UINT16(); } - map_loadDataFromAvo((char *)map_itemPoses, szMap_ItemPos * 20); + loadDataFromAvo((char *)itemPoses, szMap_ItemPos * 20); } else { - map_loadFromAvo = 0; - map_avoDataPtr = data_getData(avjFile); - dataBuf = map_avoDataPtr; + loadFromAvo = 0; + avoDataPtr = _vm->_dataio->getData(avjFile); + dataBuf = avoDataPtr; } - map_avoDataPtr += 32; - map_avoDataPtr += 76; - map_avoDataPtr += 4; - map_avoDataPtr += 20; + avoDataPtr += 32; + avoDataPtr += 76; + avoDataPtr += 4; + avoDataPtr += 20; for (i = 0; i < 3; i++) { - tmp = map_loadFromAvo_LE_UINT16(); - map_avoDataPtr += tmp * 14; + tmp = loadFromAvo_LE_UINT16(); + avoDataPtr += tmp * 14; } - soundCount = map_loadFromAvo_LE_UINT16(); - savedPtr = map_avoDataPtr; + soundCount = loadFromAvo_LE_UINT16(); + savedPtr = avoDataPtr; - map_avoDataPtr += 14 * soundCount; - map_avoDataPtr += 4; - map_avoDataPtr += 24; + avoDataPtr += 14 * soundCount; + avoDataPtr += 4; + avoDataPtr += 24; - count2 = map_loadFromAvo_LE_UINT16(); - count3 = map_loadFromAvo_LE_UINT16(); + count2 = loadFromAvo_LE_UINT16(); + count3 = loadFromAvo_LE_UINT16(); - savedPtr2 = map_avoDataPtr; - map_avoDataPtr += count2 * 8; + savedPtr2 = avoDataPtr; + avoDataPtr += count2 * 8; - savedPtr3 = map_avoDataPtr; - map_avoDataPtr += count3 * 8; + savedPtr3 = avoDataPtr; + avoDataPtr += count3 * 8; - gob_gobsCount = map_loadFromAvo_LE_UINT16(); - for (i = 0; i < gob_gobsCount; i++) { - gob_goblins[i] = (Gob_Object *)malloc(sizeof(Gob_Object)); + _vm->_goblin->gobsCount = loadFromAvo_LE_UINT16(); + for (i = 0; i < _vm->_goblin->gobsCount; i++) { + _vm->_goblin->goblins[i] = (Goblin::Gob_Object *)malloc(sizeof(Goblin::Gob_Object)); - gob_goblins[i]->xPos = READ_LE_UINT16(savedPtr2); + _vm->_goblin->goblins[i]->xPos = READ_LE_UINT16(savedPtr2); savedPtr2 += 2; - gob_goblins[i]->yPos = READ_LE_UINT16(savedPtr2); + _vm->_goblin->goblins[i]->yPos = READ_LE_UINT16(savedPtr2); savedPtr2 += 2; - gob_goblins[i]->order = READ_LE_UINT16(savedPtr2); + _vm->_goblin->goblins[i]->order = READ_LE_UINT16(savedPtr2); savedPtr2 += 2; - gob_goblins[i]->state = READ_LE_UINT16(savedPtr2); + _vm->_goblin->goblins[i]->state = READ_LE_UINT16(savedPtr2); savedPtr2 += 2; if (i == 3) - gob_goblins[i]->stateMach = (Gob_StateLine *)malloc(szGob_StateLine * 70); + _vm->_goblin->goblins[i]->stateMach = (Goblin::Gob_StateLine *)malloc(szGob_StateLine * 70); else - gob_goblins[i]->stateMach = (Gob_StateLine *)malloc(szGob_StateLine * 40); + _vm->_goblin->goblins[i]->stateMach = (Goblin::Gob_StateLine *)malloc(szGob_StateLine * 40); - // FIXME: All is wrong further. We should unwind calls to map_loadDataFromAvo() - map_loadDataFromAvo((char *)gob_goblins[i]->stateMach, 40 * szGob_StateLine); - map_avoDataPtr += 160; - gob_goblins[i]->multObjIndex = *map_avoDataPtr; - map_avoDataPtr += 2; + // FIXME: All is wrong further. We should unwind calls to loadDataFromAvo() + loadDataFromAvo((char *)_vm->_goblin->goblins[i]->stateMach, 40 * szGob_StateLine); + avoDataPtr += 160; + _vm->_goblin->goblins[i]->multObjIndex = *avoDataPtr; + avoDataPtr += 2; - gob_goblins[i]->realStateMach = gob_goblins[i]->stateMach; + _vm->_goblin->goblins[i]->realStateMach = _vm->_goblin->goblins[i]->stateMach; for (state = 0; state < 40; state++) { for (col = 0; col < 6; col++) { - if (gob_goblins[i]->stateMach[state][col] == 0) + if (_vm->_goblin->goblins[i]->stateMach[state][col] == 0) continue; - Gob_State *tmpState = (Gob_State *)malloc(sizeof(Gob_State)); - gob_goblins[i]->stateMach[state][col] = tmpState; + Goblin::Gob_State *tmpState = (Goblin::Gob_State *)malloc(sizeof(Goblin::Gob_State)); + _vm->_goblin->goblins[i]->stateMach[state][col] = tmpState; - tmpState->animation = map_loadFromAvo_LE_UINT16(); - tmpState->layer = map_loadFromAvo_LE_UINT16(); - map_avoDataPtr += 8; - tmpState->unk0 = map_loadFromAvo_LE_UINT16(); - tmpState->unk1 = map_loadFromAvo_LE_UINT16(); + tmpState->animation = loadFromAvo_LE_UINT16(); + tmpState->layer = loadFromAvo_LE_UINT16(); + avoDataPtr += 8; + tmpState->unk0 = loadFromAvo_LE_UINT16(); + tmpState->unk1 = loadFromAvo_LE_UINT16(); - map_avoDataPtr += 2; - if (READ_LE_UINT32(map_avoDataPtr) != 0) { - map_avoDataPtr += 4; - tmpState->sndItem = map_loadFromAvo_LE_UINT16(); + avoDataPtr += 2; + if (READ_LE_UINT32(avoDataPtr) != 0) { + avoDataPtr += 4; + tmpState->sndItem = loadFromAvo_LE_UINT16(); } else { - map_avoDataPtr += 6; + avoDataPtr += 6; tmpState->sndItem = -1; } - tmpState->freq = map_loadFromAvo_LE_UINT16(); - tmpState->repCount = map_loadFromAvo_LE_UINT16(); - tmpState->sndFrame = map_loadFromAvo_LE_UINT16(); + tmpState->freq = loadFromAvo_LE_UINT16(); + tmpState->repCount = loadFromAvo_LE_UINT16(); + tmpState->sndFrame = loadFromAvo_LE_UINT16(); } } } - pState = (Gob_State *)malloc(sizeof(Gob_State)); - gob_goblins[0]->stateMach[39][0] = pState; + pState = (Goblin::Gob_State *)malloc(sizeof(Goblin::Gob_State)); + _vm->_goblin->goblins[0]->stateMach[39][0] = pState; pState->animation = 0; pState->layer = 98; pState->unk0 = 0; pState->unk1 = 0; pState->sndItem = -1; - pState = (Gob_State *) malloc(sizeof(Gob_State)); - gob_goblins[1]->stateMach[39][0] = pState; + pState = (Goblin::Gob_State *) malloc(sizeof(Goblin::Gob_State)); + _vm->_goblin->goblins[1]->stateMach[39][0] = pState; pState->animation = 0; pState->layer = 99; pState->unk0 = 0; pState->unk1 = 0; pState->sndItem = -1; - pState = (Gob_State *) malloc(sizeof(Gob_State)); - gob_goblins[2]->stateMach[39][0] = pState; + pState = (Goblin::Gob_State *) malloc(sizeof(Goblin::Gob_State)); + _vm->_goblin->goblins[2]->stateMach[39][0] = pState; pState->animation = 0; pState->layer = 100; pState->unk0 = 0; pState->unk1 = 0; pState->sndItem = -1; - gob_goblins[2]->stateMach[10][0]->sndFrame = 13; - gob_goblins[2]->stateMach[11][0]->sndFrame = 13; - gob_goblins[2]->stateMach[28][0]->sndFrame = 13; - gob_goblins[2]->stateMach[29][0]->sndFrame = 13; + _vm->_goblin->goblins[2]->stateMach[10][0]->sndFrame = 13; + _vm->_goblin->goblins[2]->stateMach[11][0]->sndFrame = 13; + _vm->_goblin->goblins[2]->stateMach[28][0]->sndFrame = 13; + _vm->_goblin->goblins[2]->stateMach[29][0]->sndFrame = 13; - gob_goblins[1]->stateMach[10][0]->sndFrame = 13; - gob_goblins[1]->stateMach[11][0]->sndFrame = 13; + _vm->_goblin->goblins[1]->stateMach[10][0]->sndFrame = 13; + _vm->_goblin->goblins[1]->stateMach[11][0]->sndFrame = 13; for (state = 40; state < 70; state++) { - pState = (Gob_State *)malloc(sizeof(Gob_State)); - gob_goblins[3]->stateMach[state][0] = pState; - gob_goblins[3]->stateMach[state][1] = 0; + pState = (Goblin::Gob_State *)malloc(sizeof(Goblin::Gob_State)); + _vm->_goblin->goblins[3]->stateMach[state][0] = pState; + _vm->_goblin->goblins[3]->stateMach[state][1] = 0; pState->animation = 9; pState->layer = state - 40; @@ -600,70 +610,70 @@ void map_loadMapObjects(char *avjFile) { pState->sndFrame = 0; } - gob_objCount = map_loadFromAvo_LE_UINT16(); - for (i = 0; i < gob_objCount; i++) { - gob_objects[i] = - (Gob_Object *) malloc(sizeof(Gob_Object)); + _vm->_goblin->objCount = loadFromAvo_LE_UINT16(); + for (i = 0; i < _vm->_goblin->objCount; i++) { + _vm->_goblin->objects[i] = + (Goblin::Gob_Object *) malloc(sizeof(Goblin::Gob_Object)); - gob_objects[i]->xPos = READ_LE_UINT16(savedPtr3); + _vm->_goblin->objects[i]->xPos = READ_LE_UINT16(savedPtr3); savedPtr3 += 2; - gob_objects[i]->yPos = READ_LE_UINT16(savedPtr3); + _vm->_goblin->objects[i]->yPos = READ_LE_UINT16(savedPtr3); savedPtr3 += 2; - gob_objects[i]->order = READ_LE_UINT16(savedPtr3); + _vm->_goblin->objects[i]->order = READ_LE_UINT16(savedPtr3); savedPtr3 += 2; - gob_objects[i]->state = READ_LE_UINT16(savedPtr3); + _vm->_goblin->objects[i]->state = READ_LE_UINT16(savedPtr3); savedPtr3 += 2; - gob_objects[i]->stateMach = (Gob_StateLine *)malloc(szGob_StateLine * 40); + _vm->_goblin->objects[i]->stateMach = (Goblin::Gob_StateLine *)malloc(szGob_StateLine * 40); - map_loadDataFromAvo((char *)gob_objects[i]->stateMach, 40 * szGob_StateLine); - map_avoDataPtr += 160; - gob_objects[i]->multObjIndex = *map_avoDataPtr; - map_avoDataPtr += 2; + loadDataFromAvo((char *)_vm->_goblin->objects[i]->stateMach, 40 * szGob_StateLine); + avoDataPtr += 160; + _vm->_goblin->objects[i]->multObjIndex = *avoDataPtr; + avoDataPtr += 2; - gob_objects[i]->realStateMach = gob_objects[i]->stateMach; + _vm->_goblin->objects[i]->realStateMach = _vm->_goblin->objects[i]->stateMach; for (state = 0; state < 40; state++) { for (col = 0; col < 6; col++) { - if (gob_objects[i]->stateMach[state][col] == 0) + if (_vm->_goblin->objects[i]->stateMach[state][col] == 0) continue; - Gob_State *tmpState = (Gob_State *)malloc(sizeof(Gob_State)); - gob_objects[i]->stateMach[state][col] = tmpState; + Goblin::Gob_State *tmpState = (Goblin::Gob_State *)malloc(sizeof(Goblin::Gob_State)); + _vm->_goblin->objects[i]->stateMach[state][col] = tmpState; - tmpState->animation = map_loadFromAvo_LE_UINT16(); - tmpState->layer = map_loadFromAvo_LE_UINT16(); - map_avoDataPtr += 8; - tmpState->unk0 = map_loadFromAvo_LE_UINT16(); - tmpState->unk1 = map_loadFromAvo_LE_UINT16(); + tmpState->animation = loadFromAvo_LE_UINT16(); + tmpState->layer = loadFromAvo_LE_UINT16(); + avoDataPtr += 8; + tmpState->unk0 = loadFromAvo_LE_UINT16(); + tmpState->unk1 = loadFromAvo_LE_UINT16(); - map_avoDataPtr += 2; - if (READ_LE_UINT32(map_avoDataPtr) != 0) { - map_avoDataPtr += 4; - tmpState->sndItem = map_loadFromAvo_LE_UINT16(); + avoDataPtr += 2; + if (READ_LE_UINT32(avoDataPtr) != 0) { + avoDataPtr += 4; + tmpState->sndItem = loadFromAvo_LE_UINT16(); } else { - map_avoDataPtr += 6; + avoDataPtr += 6; tmpState->sndItem = -1; } - tmpState->freq = map_loadFromAvo_LE_UINT16(); - tmpState->repCount = map_loadFromAvo_LE_UINT16(); - tmpState->sndFrame = map_loadFromAvo_LE_UINT16(); + tmpState->freq = loadFromAvo_LE_UINT16(); + tmpState->repCount = loadFromAvo_LE_UINT16(); + tmpState->sndFrame = loadFromAvo_LE_UINT16(); } } } - gob_objects[10] = (Gob_Object *)malloc(sizeof(Gob_Object)); - memset(gob_objects[10], 0, sizeof(Gob_Object)); + _vm->_goblin->objects[10] = (Goblin::Gob_Object *)malloc(sizeof(Goblin::Gob_Object)); + memset(_vm->_goblin->objects[10], 0, sizeof(Goblin::Gob_Object)); - gob_objects[10]->stateMach = (Gob_StateLine *)malloc(szGob_StateLine * 40); - memset(gob_objects[10]->stateMach, 0, szGob_StateLine * 40); + _vm->_goblin->objects[10]->stateMach = (Goblin::Gob_StateLine *)malloc(szGob_StateLine * 40); + memset(_vm->_goblin->objects[10]->stateMach, 0, szGob_StateLine * 40); - pState = (Gob_State *)malloc(sizeof(Gob_State)); - gob_objects[10]->stateMach[0][0] = pState; + pState = (Goblin::Gob_State *)malloc(sizeof(Goblin::Gob_State)); + _vm->_goblin->objects[10]->stateMach[0][0] = pState; - memset(pState, 0, sizeof(Gob_State)); + memset(pState, 0, sizeof(Goblin::Gob_State)); pState->animation = 9; pState->layer = 27; pState->unk0 = 0; @@ -671,84 +681,84 @@ void map_loadMapObjects(char *avjFile) { pState->sndItem = -1; pState->sndFrame = 0; - gob_placeObject(gob_objects[10], 1); + _vm->_goblin->placeObject(_vm->_goblin->objects[10], 1); - gob_objects[10]->realStateMach = gob_objects[10]->stateMach; - gob_objects[10]->type = 1; - gob_objects[10]->unk14 = 1; + _vm->_goblin->objects[10]->realStateMach = _vm->_goblin->objects[10]->stateMach; + _vm->_goblin->objects[10]->type = 1; + _vm->_goblin->objects[10]->unk14 = 1; - state = map_loadFromAvo_LE_UINT16(); + state = loadFromAvo_LE_UINT16(); for (i = 0; i < state; i++) { - map_avoDataPtr += 30; + avoDataPtr += 30; - map_loadDataFromAvo((char *)&flag, 4); - map_avoDataPtr += 56; + loadDataFromAvo((char *)&flag, 4); + avoDataPtr += 56; if (flag != 0) - map_avoDataPtr += 30; + avoDataPtr += 30; } - map_loadDataFromAvo((char *)&tmp, 2); - map_avoDataPtr += 48; - map_loadItemToObject(); - map_avoDataPtr = savedPtr; + loadDataFromAvo((char *)&tmp, 2); + avoDataPtr += 48; + loadItemToObject(); + avoDataPtr = savedPtr; for (i = 0; i < soundCount; i++) { - map_loadDataFromAvo(buf, 14); + loadDataFromAvo(buf, 14); strcat(buf, ".SND"); strcpy(sndNames[i], buf); } free(dataBuf); - gob_soundData[14] = snd_loadSoundData("diamant1.snd"); + _vm->_goblin->soundData[14] = _vm->_snd->loadSoundData("diamant1.snd"); for (i = 0; i < soundCount; i++) { - handle = data_openData(sndNames[i]); + handle = _vm->_dataio->openData(sndNames[i]); if (handle < 0) continue; - data_closeData(handle); - gob_soundData[i] = snd_loadSoundData(sndNames[i]); + _vm->_dataio->closeData(handle); + _vm->_goblin->soundData[i] = _vm->_snd->loadSoundData(sndNames[i]); } } -void map_loadMapsInitGobs(void) { +void Map::loadMapsInitGobs(void) { int16 layer; int16 i; - if (map_loadFromAvo == 0) - error("map_load: Loading .pas/.pos files is not supported!"); + if (loadFromAvo == 0) + error("load: Loading .pas/.pos files is not supported!"); for (i = 0; i < 3; i++) { - gob_nextLayer(gob_goblins[i]); + _vm->_goblin->nextLayer(_vm->_goblin->goblins[i]); } for (i = 0; i < 3; i++) { layer = - gob_goblins[i]->stateMach[gob_goblins[i]->state][0]->layer; + _vm->_goblin->goblins[i]->stateMach[_vm->_goblin->goblins[i]->state][0]->layer; - scen_updateAnim(layer, 0, gob_goblins[i]->animation, 0, - gob_goblins[i]->xPos, gob_goblins[i]->yPos, 0); + _vm->_scenery->updateAnim(layer, 0, _vm->_goblin->goblins[i]->animation, 0, + _vm->_goblin->goblins[i]->xPos, _vm->_goblin->goblins[i]->yPos, 0); - gob_goblins[i]->yPos = (gob_gobPositions[i].y + 1) * 6 - - (scen_toRedrawBottom - scen_animTop); + _vm->_goblin->goblins[i]->yPos = (_vm->_goblin->gobPositions[i].y + 1) * 6 - + (_vm->_scenery->toRedrawBottom - _vm->_scenery->animTop); - gob_goblins[i]->xPos = gob_gobPositions[i].x * 12 - - (scen_toRedrawLeft - scen_animLeft); + _vm->_goblin->goblins[i]->xPos = _vm->_goblin->gobPositions[i].x * 12 - + (_vm->_scenery->toRedrawLeft - _vm->_scenery->animLeft); - gob_goblins[i]->order = scen_toRedrawBottom / 24 + 3; + _vm->_goblin->goblins[i]->order = _vm->_scenery->toRedrawBottom / 24 + 3; } - gob_currentGoblin = 0; - gob_pressedMapX = gob_gobPositions[0].x; - gob_pressedMapY = gob_gobPositions[0].y; - gob_pathExistence = 0; + _vm->_goblin->currentGoblin = 0; + _vm->_goblin->pressedMapX = _vm->_goblin->gobPositions[0].x; + _vm->_goblin->pressedMapY = _vm->_goblin->gobPositions[0].y; + _vm->_goblin->pathExistence = 0; - gob_goblins[0]->doAnim = 0; - gob_goblins[1]->doAnim = 1; - gob_goblins[2]->doAnim = 1; + _vm->_goblin->goblins[0]->doAnim = 0; + _vm->_goblin->goblins[1]->doAnim = 1; + _vm->_goblin->goblins[2]->doAnim = 1; } } // End of namespace Gob |
