aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
Diffstat (limited to 'engines')
-rw-r--r--engines/cryo/defs.h40
-rw-r--r--engines/cryo/eden.cpp728
-rw-r--r--engines/cryo/eden.h36
-rw-r--r--engines/cryo/module.mk1
-rw-r--r--engines/cryo/staticdata.cpp495
5 files changed, 443 insertions, 857 deletions
diff --git a/engines/cryo/defs.h b/engines/cryo/defs.h
index b7206dc7e4..617172d6e6 100644
--- a/engines/cryo/defs.h
+++ b/engines/cryo/defs.h
@@ -312,7 +312,7 @@ struct perso_t {
uint16 _partyMask; // party bit mask
byte _id; // character
byte _flags; // flags and kind
- byte _roomBankId;// index in kPersoRoomBankTable for specific room banks
+ byte _roomBankId;// index in _personRoomBankTable for specific room banks
byte _spriteBank; // sprite bank
uint16 _items; // inventory
uint16 _powers; // obj of power bitmask
@@ -340,7 +340,7 @@ enum ObjectFlags {
struct object_t {
byte _id;
byte _flags;
- int _locations; // index in kObjectLocations
+ int _locations; // index in _objectLocations
uint16 _itemMask;
uint16 _powerMask; // object of power bitmask
int16 _count;
@@ -764,11 +764,6 @@ struct Citadel {
int16 _video[8];
};
-/////////////// vars
-
-extern Follower followerList[];
-
-
/*
Labyrinth of Mo
@@ -783,33 +778,6 @@ enum {
LAB_W
};
-extern byte kLabyrinthPath[];
-
-extern char kDinoSpeedForCitaLevel[16];
-
-extern char kTabletView[];
-
-// special character backgrounds for specific rooms
-extern char kPersoRoomBankTable[];
-
-// area transition descriptors
-extern Goto gotos[];
-extern object_t _objects[];
-extern uint16 kObjectLocations[100];
-extern perso_t kPersons[];
-extern Citadel _citadelList[];
-
-struct prect_t {
- int16 left, top, right, bottom;
-};
-
-extern prect_t _characterRects[];
-extern byte _characterArray[][5];
-extern Area kAreasTable[];
-extern int16 tab_2CEF0[64];
-extern int16 tab_2CF70[64];
-extern int16 kActionCursors[299];
-
struct CubeFace {
int tri;
char ff_4;
@@ -833,10 +801,6 @@ struct Cube {
Point3D *_vertices;
};
-extern float _translationZ;
-extern float flt_2DF80;
-extern float flt_2DF84;
-
struct XYZ {
signed short x, y, z;
};
diff --git a/engines/cryo/eden.cpp b/engines/cryo/eden.cpp
index b8e191c50b..9bd2e8db3b 100644
--- a/engines/cryo/eden.cpp
+++ b/engines/cryo/eden.cpp
@@ -48,12 +48,11 @@
namespace Cryo {
-int16 _torchTick = 0;
-int16 _glowIndex = 0;
-int16 _torchCurIndex = 0;
-
-bool _allowDoubled = true;
-int _cursCenter = 11;
+#define CRYO_DAT_VER 1 // 1 byte
+#define Z_RESET -3400
+#define Z_STEP 200
+#define Z_UP 1
+#define Z_DOWN -1
EdenGame::EdenGame(CryoEngine *vm) : _vm(vm), kMaxMusicSize(2200000) {
static uint8 statTab2CB1E[8][4] = {
@@ -168,6 +167,14 @@ EdenGame::EdenGame(CryoEngine *vm) : _vm(vm), kMaxMusicSize(2200000) {
for (int j = 0; j < 4; j++)
tab_2CB1E[i][j] = statTab2CB1E[i][j];
}
+
+ _translationZ = Z_RESET;
+ _zDirection = Z_UP;
+
+ _torchTick = 0;
+ _glowIndex = 0;
+ _torchCurIndex = 0;
+ _cursCenter = 11;
}
void EdenGame::removeConsole() {
@@ -280,7 +287,7 @@ void EdenGame::displayFollower(Follower *follower, int16 x, int16 y) {
void EdenGame::characterInMirror() {
Icon *icon1 = &_gameIcons[3];
Icon *icon = &_gameIcons[_roomIconsBase];
- Follower *suiveur = followerList;
+ Follower *suiveur = _followerList;
int16 num = 1;
for (int i = 0; i < 16; i++) {
if (_globals->_party & (1 << i))
@@ -300,7 +307,7 @@ void EdenGame::characterInMirror() {
displayFollower(suiveur, suiveur->sx, suiveur->sy);
for (; suiveur->_id != -1; suiveur++) {
perso_t *perso;
- for (perso = kPersons; perso != &kPersons[PER_UNKN_156]; perso++) {
+ for (perso = _persons; perso != &_persons[PER_UNKN_156]; perso++) {
if (perso->_id != suiveur->_id)
continue;
@@ -356,7 +363,7 @@ void EdenGame::flipMode() {
if (_personTalking) {
endCharacterSpeech();
if (_globals->_displayFlags == DisplayFlags::dfPerson) {
- if (_globals->_characterPtr == &kPersons[PER_TAU] && _globals->_phaseNum >= 80)
+ if (_globals->_characterPtr == &_persons[PER_TAU] && _globals->_phaseNum >= 80)
displaySubtitles();
else {
getDataSync();
@@ -508,7 +515,7 @@ void EdenGame::deplaval(uint16 roomNum) {
if (c1 == 0xFF) {
_globals->_eventType = EventType::etEventE;
showEvents();
- if (!kPersons[PER_ELOI]._roomNum && checkEloiReturn())
+ if (!_persons[PER_ELOI]._roomNum && checkEloiReturn())
setChrono(800);
return;
}
@@ -524,9 +531,9 @@ void EdenGame::deplaval(uint16 roomNum) {
newRoomNum |= 1;
_globals->_newRoomNum = newRoomNum;
if (newAreaNum == Areas::arTausCave)
- gotoPlace(&gotos[0]);
+ gotoPlace(&_gotos[0]);
else {
- for (Goto *go = gotos + 1; go->_curAreaNum != 0xFF; go++) {
+ for (Goto *go = _gotos + 1; go->_curAreaNum != 0xFF; go++) {
if (go->_curAreaNum == curAreaNum) {
gotoPlace(go);
break;
@@ -705,7 +712,7 @@ void EdenGame::actionChoose() {
// Original name: dinaparle
void EdenGame::handleDinaDialog() {
- perso_t *perso = &kPersons[PER_DINA];
+ perso_t *perso = &_persons[PER_DINA];
if (perso->_partyMask & (_globals->_party | _globals->_partyOutside)) {
if (_globals->_frescoNumber < 3)
_globals->_frescoNumber = 3;
@@ -871,7 +878,7 @@ void EdenGame::actionGetTablet() {
// Original name: voirlac
void EdenGame::actionLookLake() {
- perso_t *perso = &kPersons[PER_MORKUS];
+ perso_t *perso = &_persons[PER_MORKUS];
Room *room = _globals->_roomPtr;
Area *area = _globals->_areaPtr;
int16 vid = _globals->_curObjectId == Objects::obApple ? 81 : 54;
@@ -1608,7 +1615,7 @@ void EdenGame::drawTopScreen() { // Draw top bar (location / party / map)
noclipax(36, 83, 0);
noclipax(_globals->_areaPtr->_num - 1, 0, 0);
noclipax(23, 145, 0);
- for (perso_t *perso = &kPersons[PER_DINA]; perso != &kPersons[PER_UNKN_156]; perso++) {
+ for (perso_t *perso = &_persons[PER_DINA]; perso != &_persons[PER_UNKN_156]; perso++) {
if ((perso->_flags & PersonFlags::pfInParty) && !(perso->_flags & PersonFlags::pf80))
noclipax(perso->_targetLoc + 18, perso->_lastLoc + 120, 0);
}
@@ -1622,7 +1629,7 @@ void EdenGame::drawTopScreen() { // Draw top bar (location / party / map)
void EdenGame::displayValleyMap() { // Draw mini-map
if (_globals->_areaPtr->_type == AreaType::atValley) {
noclipax(_globals->_areaPtr->_num + 9, 266, 1);
- for (perso_t *perso = &kPersons[PER_UNKN_18C]; perso->_roomNum != 0xFFFF; perso++) {
+ for (perso_t *perso = &_persons[PER_UNKN_18C]; perso->_roomNum != 0xFFFF; perso++) {
if (((perso->_roomNum >> 8) == _globals->_areaNum)
&& !(perso->_flags & PersonFlags::pf80) && (perso->_flags & PersonFlags::pf20))
displayMapMark(33, perso->_roomNum & 0xFF);
@@ -1714,7 +1721,7 @@ void EdenGame::saveAdamMapMark(int16 x, int16 y) {
bool EdenGame::istrice(int16 roomNum) {
char loc = roomNum & 0xFF;
int16 area = roomNum & 0xFF00;
- for (perso_t *perso = &kPersons[PER_UNKN_18C]; perso != &kPersons[PER_UNKN_372]; perso++) {
+ for (perso_t *perso = &_persons[PER_UNKN_18C]; perso != &_persons[PER_UNKN_372]; perso++) {
if ((perso->_flags & PersonFlags::pf80) || (perso->_flags & PersonFlags::pfTypeMask) != PersonFlags::pftTriceraptor)
continue;
if (perso->_roomNum == (area | (loc - 16)))
@@ -1733,7 +1740,7 @@ bool EdenGame::istyran(int16 roomNum) {
char loc = roomNum & 0xFF;
int16 area = roomNum & 0xFF00;
// TODO: orig bug: this ptr is not initialized when first called from getsalle
- // PC version scans kPersons[] directly and is not affected
+ // PC version scans _persons[] directly and is not affected
if (!_tyranPtr)
return false;
@@ -1755,7 +1762,7 @@ bool EdenGame::istyran(int16 roomNum) {
void EdenGame::istyranval(Area *area) {
byte areaNum = area->_num;
area->_flags &= ~AreaFlags::HasTyrann;
- for (perso_t *perso = &kPersons[PER_UNKN_372]; perso->_roomNum != 0xFFFF; perso++) {
+ for (perso_t *perso = &_persons[PER_UNKN_372]; perso->_roomNum != 0xFFFF; perso++) {
if (perso->_flags & PersonFlags::pf80)
continue;
@@ -1806,7 +1813,7 @@ bool EdenGame::canMoveThere(char loc, perso_t *perso) {
continue;
if (!(room->_flags & RoomFlags::rf01))
return false;
- for (perso = &kPersons[PER_UNKN_18C]; perso->_roomNum != 0xFFFF; perso++) {
+ for (perso = &_persons[PER_UNKN_18C]; perso->_roomNum != 0xFFFF; perso++) {
if (perso->_flags & PersonFlags::pf80)
continue;
if (perso->_roomNum == roomNum)
@@ -1847,7 +1854,7 @@ void EdenGame::scrambleDirections() {
}
bool EdenGame::naitredino(char persoType) {
- for (perso_t *perso = &kPersons[PER_MORKUS]; (++perso)->_roomNum != 0xFFFF;) {
+ for (perso_t *perso = &_persons[PER_MORKUS]; (++perso)->_roomNum != 0xFFFF;) {
char areaNum = perso->_roomNum >> 8;
if (areaNum != _globals->_citadelAreaNum)
continue;
@@ -1877,7 +1884,7 @@ void EdenGame::newCitadel(char area, int16 level, Room *room) {
// Original name: citaevol
void EdenGame::evolveCitadel(int16 level) {
Room *room = _globals->_curAreaPtr->_citadelRoomPtr;
- perso_t *perso = &kPersons[PER_UNKN_372];
+ perso_t *perso = &_persons[PER_UNKN_372];
byte loc = room->_location;
if (level >= 80 && !istrice((_globals->_citadelAreaNum << 8) | loc)) {
room->_level = 79;
@@ -1897,7 +1904,7 @@ void EdenGame::evolveCitadel(int16 level) {
}
room->_level = level;
newCitadel(_globals->_citadelAreaNum, level, room);
- byte speed = kDinoSpeedForCitaLevel[room->_level >> 4];
+ byte speed = _dinoSpeedForCitadelLevel[room->_level >> 4];
for (; perso->_roomNum != 0xFFFF; perso++) {
if (perso->_flags & PersonFlags::pf80)
continue;
@@ -1908,7 +1915,7 @@ void EdenGame::evolveCitadel(int16 level) {
// Original name: citacapoute
void EdenGame::destroyCitadelRoom(int16 roomNum) {
- perso_t *perso = &kPersons[PER_UNKN_18C];
+ perso_t *perso = &_persons[PER_UNKN_18C];
Room *room = _globals->_curAreaPtr->_citadelRoomPtr;
room->_flags |= RoomFlags::rf01;
room->_flags &= ~RoomFlags::rfHasCitadel;
@@ -1972,7 +1979,7 @@ void EdenGame::buildCitadel() {
Room *room = _globals->_curAreaPtr->_citadelRoomPtr;
byte loc = room->_location;
- _tyranPtr = &kPersons[PER_UNKN_372];
+ _tyranPtr = &_persons[PER_UNKN_372];
if (istyran((_globals->_citadelAreaNum << 8) | loc)) {
if (!(_globals->_curAreaPtr->_flags & AreaFlags::TyrannSighted)) {
addInfo(_globals->_citadelAreaNum + ValleyNews::vnTyrannIn);
@@ -2039,7 +2046,7 @@ void EdenGame::moveDino(perso_t *perso) {
// Original name: deplaalldino
void EdenGame::moveAllDino() {
- for (perso_t *perso = &kPersons[PER_UNKN_18C]; perso->_roomNum != 0xFFFF; perso++) {
+ for (perso_t *perso = &_persons[PER_UNKN_18C]; perso->_roomNum != 0xFFFF; perso++) {
if (((perso->_roomNum >> 8) & 0xFF) != _globals->_citadelAreaNum)
continue;
if ((perso->_flags & PersonFlags::pf80) || !perso->_targetLoc)
@@ -2058,7 +2065,7 @@ void EdenGame::moveAllDino() {
void EdenGame::newValley() {
static int16 roomNumList[] = { 2075, 2080, 2119, -1};
- perso_t *perso = &kPersons[PER_UNKN_372];
+ perso_t *perso = &_persons[PER_UNKN_372];
int16 *ptr = roomNumList;
int16 roomNum = *ptr++;
while (roomNum != -1) {
@@ -2069,7 +2076,7 @@ void EdenGame::newValley() {
roomNum = *ptr++;
}
perso->_roomNum = 0xFFFF;
- kAreasTable[7]._flags |= AreaFlags::HasTyrann;
+ _areasTable[7]._flags |= AreaFlags::HasTyrann;
_globals->_worldHasTyran = 32;
}
@@ -2138,7 +2145,7 @@ void EdenGame::placeVava(Area *area) {
}
void EdenGame::vivredino() {
- for (perso_t *perso = &kPersons[PER_UNKN_18C]; perso->_roomNum != 0xFFFF; perso++) {
+ for (perso_t *perso = &_persons[PER_UNKN_18C]; perso->_roomNum != 0xFFFF; perso++) {
if (((perso->_roomNum >> 8) & 0xFF) != _globals->_citadelAreaNum)
continue;
if (perso->_flags & PersonFlags::pf80)
@@ -2173,7 +2180,7 @@ void EdenGame::vivredino() {
case PersonFlags::pftVelociraptor:
if (perso->_flags & PersonFlags::pf10) {
if (perso->_roomNum == _globals->_roomNum) {
- perso_t *perso2 = &kPersons[PER_UNKN_372];
+ perso_t *perso2 = &_persons[PER_UNKN_372];
bool found = false;
for (; perso2->_roomNum != 0xFFFF; perso2++) {
if ((perso->_roomNum & ~0xFF) == (perso2->_roomNum & ~0xFF)) {
@@ -2188,7 +2195,7 @@ void EdenGame::vivredino() {
if (found)
continue;
} else {
- _tyranPtr = &kPersons[PER_UNKN_372];
+ _tyranPtr = &_persons[PER_UNKN_372];
if (istyran(perso->_roomNum)) {
if (_globals->_phaseNum < 481 && (perso->_powers & (1 << (_globals->_citadelAreaNum - 3)))) {
_tyranPtr->_flags |= PersonFlags::pf80;
@@ -2228,7 +2235,7 @@ void EdenGame::vivredino() {
void EdenGame::vivreval(int16 areaNum) {
_globals->_citadelAreaNum = areaNum;
- _globals->_curAreaPtr = &kAreasTable[areaNum - 1];
+ _globals->_curAreaPtr = &_areasTable[areaNum - 1];
_globals->_citaAreaFirstRoom = &_gameRooms[_globals->_curAreaPtr->_firstRoomIdx];
moveAllDino();
buildCitadel();
@@ -2357,7 +2364,7 @@ void EdenGame::addanim() {
_globals->_curCharacterAnimPtr = _globals->_persoSpritePtr;
getanimrnd();
_animationActive = true;
- if (_globals->_characterPtr == &kPersons[PER_KING])
+ if (_globals->_characterPtr == &_persons[PER_KING])
return;
setCharacterSprite(_globals->_persoSpritePtr + READ_LE_UINT16(_globals->_persoSpritePtr)); //TODO: GetElem(0)
_mouthAnimations = _imageDesc + 200;
@@ -2654,7 +2661,7 @@ void EdenGame::closeCharacterScreen() {
// Original name: af_fondsuiveur
void EdenGame::displayBackgroundFollower() {
char id = _globals->_characterPtr->_id;
- for (Follower *follower = followerList; follower->_id != -1; follower++) {
+ for (Follower *follower = _followerList; follower->_id != -1; follower++) {
if (follower->_id == id) {
int bank = 326;
if (follower->sx >= 320)
@@ -2669,7 +2676,7 @@ void EdenGame::displayBackgroundFollower() {
void EdenGame::displayNoFollower(int16 bank) {
if (bank) {
useBank(bank);
- if (_globals->_characterPtr == &kPersons[PER_UNKN_156])
+ if (_globals->_characterPtr == &_persons[PER_UNKN_156])
noclipax_avecnoir(0, 0, 16);
else
noclipax(0, 0, 16);
@@ -2680,7 +2687,7 @@ void EdenGame::displayNoFollower(int16 bank) {
void EdenGame::displayCharacterBackground1() {
byte bank;
char *ptab;
- if (_globals->_characterPtr == &kPersons[PER_ELOI]) {
+ if (_globals->_characterPtr == &_persons[PER_ELOI]) {
_gameIcons[0].sx = 0;
_characterRects[PER_ELOI].left = 2;
bank = _globals->_characterBackgroundBankIdx;
@@ -2692,14 +2699,14 @@ void EdenGame::displayCharacterBackground1() {
_gameIcons[0].sx = 60;
_characterRects[PER_ELOI].left = 62;
}
- if (_globals->_characterPtr == &kPersons[PER_TAU]) {
+ if (_globals->_characterPtr == &_persons[PER_TAU]) {
bank = 37;
if (_globals->_curObjectId == Objects::obShell) {
displayNoFollower(bank);
return;
}
}
- ptab = kPersoRoomBankTable + _globals->_characterPtr->_roomBankId;
+ ptab = _personRoomBankTable + _globals->_characterPtr->_roomBankId;
bank = *ptab++;
if (!(_globals->_characterPtr->_partyMask & _globals->_party)) {
while ((bank = *ptab++) != 0xFF) {
@@ -2710,7 +2717,7 @@ void EdenGame::displayCharacterBackground1() {
ptab++;
}
if (bank == 0xFF) {
- ptab = kPersoRoomBankTable + _globals->_characterPtr->_roomBankId;
+ ptab = _personRoomBankTable + _globals->_characterPtr->_roomBankId;
bank = *ptab++;
}
}
@@ -2731,7 +2738,7 @@ void EdenGame::setCharacterIcon() {
if (_globals->_iconsIndex == 4)
return;
- if (_globals->_characterPtr == &kPersons[PER_ELOI] && _globals->_eventType == EventType::etEventE) {
+ if (_globals->_characterPtr == &_persons[PER_ELOI] && _globals->_eventType == EventType::etEventE) {
_globals->_iconsIndex = 123;
return;
}
@@ -2756,7 +2763,7 @@ void EdenGame::showCharacter() {
loadCharacter(perso);
setCharacterIcon();
displayCharacterBackground();
- if (perso == &kPersons[PER_TAU] && _globals->_curObjectId == Objects::obShell) {
+ if (perso == &_persons[PER_TAU] && _globals->_curObjectId == Objects::obShell) {
displaySubtitles();
updateCursor();
_paletteUpdateRequired = true;
@@ -2773,10 +2780,10 @@ void EdenGame::showCharacter() {
}
_restartAnimation = true;
animCharacter();
- if (perso != &kPersons[PER_UNKN_156])
+ if (perso != &_persons[PER_UNKN_156])
updateCursor();
_paletteUpdateRequired = true;
- if (perso != &kPersons[PER_UNKN_156])
+ if (perso != &_persons[PER_UNKN_156])
rundcurs();
display();
} else {
@@ -2799,10 +2806,10 @@ void EdenGame::displayCharacterPanel() {
if (_globals->_drawFlags & DrawFlags::drDrawFlag8)
return;
animCharacter();
- if (perso != &kPersons[PER_UNKN_156])
+ if (perso != &_persons[PER_UNKN_156])
updateCursor();
display();
- if (perso != &kPersons[PER_UNKN_156])
+ if (perso != &_persons[PER_UNKN_156])
rundcurs();
_globals->_drawFlags |= DrawFlags::drDrawFlag8;
_globals->_iconsIndex = 112;
@@ -3247,7 +3254,7 @@ void EdenGame::parle_moi() {
if (!ok) {
parlemoiNormalFlag = true;
if (_globals->_var60) {
- if (_globals->_characterPtr == &kPersons[PER_ELOI]) {
+ if (_globals->_characterPtr == &_persons[PER_ELOI]) {
_globals->_dialogType = DialogType::dtTalk;
if (_globals->_eloiHaveNews)
parlemoi_normal();
@@ -3276,7 +3283,7 @@ void EdenGame::initCharacterPointers(perso_t *perso) {
void EdenGame::perso1(perso_t *perso) {
_globals->_phaseActionsCount++;
- if (perso == &kPersons[PER_TAU])
+ if (perso == &_persons[PER_TAU])
_globals->_phaseActionsCount--;
_globals->_characterPtr = perso;
initCharacterPointers(perso);
@@ -3292,7 +3299,7 @@ void EdenGame::perso_normal(perso_t *perso) {
// Original name: persoparle
void EdenGame::handleCharacterDialog(int16 pers) {
- perso_t *perso = &kPersons[pers];
+ perso_t *perso = &_persons[pers];
_globals->_characterPtr = perso;
_globals->_dialogType = DialogType::dtInspect;
uint16 idx = perso->_id * 8 | _globals->_dialogType;
@@ -3306,53 +3313,53 @@ void EdenGame::handleCharacterDialog(int16 pers) {
// Original name: roi
void EdenGame::actionKing() {
- perso_normal(&kPersons[PER_KING]);
+ perso_normal(&_persons[PER_KING]);
}
// Original name: dina
void EdenGame::actionDina() {
- perso_normal(&kPersons[PER_DINA]);
+ perso_normal(&_persons[PER_DINA]);
}
// Original name: thoo
void EdenGame::actionThoo() {
- perso_normal(&kPersons[PER_TAU]);
+ perso_normal(&_persons[PER_TAU]);
}
// Original name: monk
void EdenGame::actionMonk() {
- perso_normal(&kPersons[PER_MONK]);
+ perso_normal(&_persons[PER_MONK]);
}
// Original name: bourreau
void EdenGame::actionTormentor() {
- perso_normal(&kPersons[PER_JABBER]);
+ perso_normal(&_persons[PER_JABBER]);
}
// Original name: messager
void EdenGame::actionMessenger() {
- perso_normal(&kPersons[PER_ELOI]);
+ perso_normal(&_persons[PER_ELOI]);
}
// Original name: mango
void EdenGame::actionMango() {
- perso_normal(&kPersons[PER_MUNGO]);
+ perso_normal(&_persons[PER_MUNGO]);
}
// Original name: eve
void EdenGame::actionEve() {
- perso_normal(&kPersons[PER_EVE]);
+ perso_normal(&_persons[PER_EVE]);
}
// Original name: azia
void EdenGame::actionAzia() {
- perso_normal(&kPersons[PER_SHAZIA]);
+ perso_normal(&_persons[PER_SHAZIA]);
}
// Original name: mammi
void EdenGame::actionMammi() {
perso_t *perso;
- for (perso = &kPersons[PER_MAMMI]; perso->_partyMask == PersonMask::pmLeader; perso++) {
+ for (perso = &_persons[PER_MAMMI]; perso->_partyMask == PersonMask::pmLeader; perso++) {
if (perso->_roomNum == _globals->_roomNum) {
perso_normal(perso);
break;
@@ -3362,23 +3369,23 @@ void EdenGame::actionMammi() {
// Original name: gardes
void EdenGame::actionGuards() {
- perso_normal(&kPersons[PER_GUARDS]);
+ perso_normal(&_persons[PER_GUARDS]);
}
// Original name: bambou
void EdenGame::actionBamboo() {
- perso_normal(&kPersons[PER_BAMBOO]);
+ perso_normal(&_persons[PER_BAMBOO]);
}
// Original name: kabuka
void EdenGame::actionKabuka() {
- if (_globals->_roomNum == 0x711) perso_normal(&kPersons[PER_KABUKA]);
+ if (_globals->_roomNum == 0x711) perso_normal(&_persons[PER_KABUKA]);
else actionBamboo();
}
// Original name: fisher
void EdenGame::actionFisher() {
- if (_globals->_roomNum == 0x902) perso_normal(&kPersons[PER_FISHER]);
+ if (_globals->_roomNum == 0x902) perso_normal(&_persons[PER_FISHER]);
else actionKabuka();
}
@@ -3403,13 +3410,13 @@ void EdenGame::actionDino() {
waitEndSpeak();
if (_vm->shouldQuit())
return;
- perso = &kPersons[PER_MUNGO];
+ perso = &_persons[PER_MUNGO];
if (!(_globals->_party & PersonMask::pmMungo)) {
- perso = &kPersons[PER_DINA];
+ perso = &_persons[PER_DINA];
if (!(_globals->_party & PersonMask::pmDina)) {
- perso = &kPersons[PER_EVE];
+ perso = &_persons[PER_EVE];
if (!(_globals->_party & PersonMask::pmEve)) {
- perso = &kPersons[PER_GUARDS];
+ perso = &_persons[PER_GUARDS];
}
}
}
@@ -3434,13 +3441,13 @@ void EdenGame::actionTyran() {
_globals->_roomCharacterFlags = perso->_flags;
_globals->_characterPtr = perso;
initCharacterPointers(perso);
- perso = &kPersons[PER_MUNGO];
+ perso = &_persons[PER_MUNGO];
if (!(_globals->_party & PersonMask::pmMungo)) {
- perso = &kPersons[PER_DINA];
+ perso = &_persons[PER_DINA];
if (!(_globals->_party & PersonMask::pmDina)) {
- perso = &kPersons[PER_EVE];
+ perso = &_persons[PER_EVE];
if (!(_globals->_party & PersonMask::pmEve)) {
- perso = &kPersons[PER_GUARDS];
+ perso = &_persons[PER_GUARDS];
}
}
}
@@ -3452,15 +3459,15 @@ void EdenGame::actionTyran() {
// Original name: morkus
void EdenGame::actionMorkus() {
- perso_normal(&kPersons[PER_MORKUS]);
+ perso_normal(&_persons[PER_MORKUS]);
}
void EdenGame::comment() {
- perso_t *perso = &kPersons[PER_DINA];
+ perso_t *perso = &_persons[PER_DINA];
if (!(_globals->_party & PersonMask::pmDina)) {
- perso = &kPersons[PER_EVE];
+ perso = &_persons[PER_EVE];
if (!(_globals->_party & PersonMask::pmEve)) {
- perso = &kPersons[PER_GUARDS];
+ perso = &_persons[PER_GUARDS];
if (!(_globals->_party & PersonMask::pmThugg))
return;
}
@@ -3501,12 +3508,12 @@ void EdenGame::actionAdam() {
updateRoom(_globals->_roomNum);
} else {
_globals->_dialogType = DialogType::dtHint;
- perso1(&kPersons[PER_EVE]);
+ perso1(&_persons[PER_EVE]);
}
break;
case Objects::obShell:
_globals->_dialogType = DialogType::dtHint;
- perso1(&kPersons[PER_TAU]);
+ perso1(&_persons[PER_TAU]);
break;
case Objects::obFlute:
case Objects::obTrumpet:
@@ -3526,7 +3533,7 @@ void EdenGame::actionAdam() {
if ((_globals->_partyOutside & PersonMask::pmDina)
&& _globals->_curObjectId == Objects::obTablet1 && _globals->_phaseNum == 370)
incPhase();
- char *objvid = &kTabletView[(_globals->_curObjectId - Objects::obTablet1) * 2];
+ char *objvid = &_tabletView[(_globals->_curObjectId - Objects::obTablet1) * 2];
object_t *object = getObjectPtr(*objvid++);
int16 vid = 84;
if (!object->_count)
@@ -3548,7 +3555,7 @@ void EdenGame::actionAdam() {
case Objects::obDrum:
if (_globals->_party & PersonMask::pmThugg) {
_globals->_dialogType = DialogType::dtHint;
- perso1(&kPersons[PER_GUARDS]);
+ perso1(&_persons[PER_GUARDS]);
}
break;
default:
@@ -3585,7 +3592,7 @@ void EdenGame::specialEmptyNest(perso_t *perso) {
perso->_flags |= PersonFlags::pf10;
_globals->_roomCharacterFlags |= PersonFlags::pf10;
_globals->_gameFlags |= GameFlags::gfFlag400;
- if (_globals->_characterPtr == &kPersons[PER_EVE]) {
+ if (_globals->_characterPtr == &_persons[PER_EVE]) {
_globals->_areaPtr->_flags |= AreaFlags::afFlag4;
_globals->_curAreaFlags |= AreaFlags::afFlag4;
perso->_flags |= PersonFlags::pfInParty;
@@ -3599,7 +3606,7 @@ void EdenGame::specialEmptyNest(perso_t *perso) {
// Original name: SpcNido
void EdenGame::specialNestWithEggs(perso_t *perso) {
- if (perso == &kPersons[PER_GUARDS])
+ if (perso == &_persons[PER_GUARDS])
giveObject();
}
@@ -3628,7 +3635,7 @@ void EdenGame::specialGold(perso_t *perso) {
// Original name: SpcPrisme
void EdenGame::specialPrism(perso_t *perso) {
- if (perso == &kPersons[PER_DINA]) {
+ if (perso == &_persons[PER_DINA]) {
if (_globals->_partyOutside & PersonMask::pmMonk)
_globals->_gameFlags |= GameFlags::gfPrismAndMonk;
}
@@ -3636,13 +3643,13 @@ void EdenGame::specialPrism(perso_t *perso) {
// Original name: SpcTalisman
void EdenGame::specialTalisman(perso_t *perso) {
- if (perso == &kPersons[PER_DINA])
+ if (perso == &_persons[PER_DINA])
addToParty(PER_DINA);
}
// Original name: SpcMasque
void EdenGame::specialMask(perso_t *perso) {
- if (perso == &kPersons[PER_BAMBOO]) {
+ if (perso == &_persons[PER_BAMBOO]) {
dialautoon();
parlemoiNormalFlag = true;
}
@@ -3652,7 +3659,7 @@ void EdenGame::specialMask(perso_t *perso) {
void EdenGame::specialBag(perso_t *perso) {
if (_globals->_textToken1 != 3)
return;
- if (perso == &kPersons[PER_KABUKA] || perso == &kPersons[PER_MAMMI_3])
+ if (perso == &_persons[PER_KABUKA] || perso == &_persons[PER_MAMMI_3])
loseObject(_curSpecialObject->_id);
}
@@ -3680,14 +3687,14 @@ void EdenGame::specialWeapons(perso_t *perso) {
void EdenGame::specialInstrument(perso_t *perso) {
if (!isAnswerYes())
return;
- if (perso == &kPersons[PER_MONK]) {
+ if (perso == &_persons[PER_MONK]) {
_globals->_partyInstruments &= ~1; //TODO: check me
if (_curSpecialObject->_id == Objects::obRing) {
_globals->_partyInstruments |= 1;
_globals->_monkGotRing++; //TODO: |= 1 ?
}
}
- if (perso == &kPersons[PER_GUARDS]) {
+ if (perso == &_persons[PER_GUARDS]) {
_globals->_partyInstruments &= ~2;
if (_curSpecialObject->_id == Objects::obDrum)
_globals->_partyInstruments |= 2;
@@ -3776,7 +3783,7 @@ void EdenGame::dialautooff() {
void EdenGame::follow() {
if (_globals->_roomCharacterType == PersonFlags::pfType12) {
- debug("follow: hiding person %ld", _globals->_roomCharacterPtr - kPersons);
+ debug("follow: hiding person %ld", _globals->_roomCharacterPtr - _persons);
_globals->_roomCharacterPtr->_flags |= PersonFlags::pf80;
_globals->_roomCharacterPtr->_roomNum = 0;
_globals->_gameFlags |= GameFlags::gfFlag8;
@@ -3797,7 +3804,7 @@ void EdenGame::dialonfollow() {
// Original name: abortdial
void EdenGame::abortDialogue() {
_globals->_varF6++;
- if (_globals->_roomCharacterType != PersonFlags::pftTriceraptor || _globals->_characterPtr != &kPersons[PER_EVE])
+ if (_globals->_roomCharacterType != PersonFlags::pftTriceraptor || _globals->_characterPtr != &_persons[PER_EVE])
return;
_globals->_areaPtr->_flags |= AreaFlags::afFlag4;
_globals->_curAreaFlags |= AreaFlags::afFlag4;
@@ -3829,11 +3836,11 @@ void EdenGame::handleNarrator() {
}
_globals->_varF5 |= 0x80;
_globals->_varF2 &= ~1; //TODO: check me
- _globals->_characterPtr = &kPersons[PER_UNKN_156];
+ _globals->_characterPtr = &_persons[PER_UNKN_156];
_globals->_var60 = 0;
_globals->_eventType = 0;
_globals->_var103 = 69;
- if (dialogEvent(&kPersons[PER_UNKN_156])) {
+ if (dialogEvent(&_persons[PER_UNKN_156])) {
_globals->_narratorDialogPtr = _globals->_dialogPtr;
dialautoon();
_globals->_varF2 |= 1;
@@ -3899,7 +3906,7 @@ byte *EdenGame::getPhrase(int16 id) {
// Original name: gotocarte
void EdenGame::actionGotoMap() {
- Goto *go = &gotos[_curSpot2->_objectId];
+ Goto *go = &_gotos[_curSpot2->_objectId];
endCharacterSpeech();
byte newArea = go->_areaNum;
_globals->_newRoomNum = (go->_areaNum << 8) | 1;
@@ -3933,7 +3940,7 @@ void EdenGame::record() {
if (_globals->_curObjectId)
return;
- if (_globals->_characterPtr >= &kPersons[PER_UNKN_18C])
+ if (_globals->_characterPtr >= &_persons[PER_UNKN_18C])
return;
if (_globals->_eventType == EventType::etEventE || _globals->_eventType >= EventType::etGotoArea)
@@ -3956,9 +3963,9 @@ void EdenGame::record() {
}
perso_t *perso = _globals->_characterPtr;
- if (perso == &kPersons[PER_EVE])
- perso = _globals->_phaseNum >= 352 ? &kPersons[PER_UNKN_372]
- : &kPersons[PER_UNKN_402];
+ if (perso == &_persons[PER_EVE])
+ perso = _globals->_phaseNum >= 352 ? &_persons[PER_UNKN_372]
+ : &_persons[PER_UNKN_402];
tape->_textNum = _globals->_textNum;
tape->_perso = perso;
tape->_party = _globals->_party;
@@ -4016,7 +4023,7 @@ bool EdenGame::dial_scan(Dialog *dial) {
if (!skipFl) {
perso_t *perso;
- for (perso = kPersons; !(perso->_partyMask == mask && perso->_roomNum == _globals->_roomNum); perso++)
+ for (perso = _persons; !(perso->_partyMask == mask && perso->_roomNum == _globals->_roomNum); perso++)
; //Find matching
_globals->_characterPtr = perso;
@@ -4087,7 +4094,7 @@ bool EdenGame::dialogEvent(perso_t *perso) {
// Original name: stay_here
void EdenGame::characterStayHere() {
- if (_globals->_characterPtr == &kPersons[PER_DINA] && _globals->_roomNum == 260)
+ if (_globals->_characterPtr == &_persons[PER_DINA] && _globals->_roomNum == 260)
_globals->_gameFlags |= GameFlags::gfFlag1000;
removeCharacterFromParty();
}
@@ -4160,9 +4167,9 @@ void EdenGame::setChrono(int16 t) {
// Original name: prechargephrases
void EdenGame::preloadDialogs(int16 vid) {
- perso_t *perso = &kPersons[PER_MORKUS];
+ perso_t *perso = &_persons[PER_MORKUS];
if (vid == 170)
- perso = &kPersons[PER_UNKN_156];
+ perso = &_persons[PER_UNKN_156];
_globals->_characterPtr = perso;
_globals->_dialogType = DialogType::dtInspect;
int num = (perso->_id << 3) | _globals->_dialogType;
@@ -4601,7 +4608,7 @@ void EdenGame::loadIconFile(uint16 num, Icon *buffer) {
debug("* Loading icon - Resource %d (%s) at 0x%X, %d bytes", num, file->_name.c_str(), offs, size);
_bigfile.seek(offs, SEEK_SET);
- int count = size / sizeof(Icon);
+ int count = size / 18; // sizeof(Icon)
for (int i = 0; i < count; i++) {
if (_vm->getPlatform() == Common::kPlatformMacintosh) {
buffer[i].sx = _bigfile.readSint16BE();
@@ -4636,7 +4643,7 @@ void EdenGame::loadRoomFile(uint16 num, Room *buffer) {
debug("* Loading room - Resource %d (%s) at 0x%X, %d bytes", num, file->_name.c_str(), offs, size);
_bigfile.seek(offs, SEEK_SET);
- int count = size / sizeof(Room);
+ int count = size / 14; // sizeof(Room)
for (int i = 0; i < count; i++) {
buffer[i]._id = _bigfile.readByte();
for (int j = 0; j < 4; j++)
@@ -4727,17 +4734,68 @@ void EdenGame::convertMacToPC() {
}
void EdenGame::loadpermfiles() {
+ Common::File f;
+ const int kNumIcons = 136;
+ const int kNumRooms = 424;
+ const int kNumFollowers = 15;
+ const int kNumLabyrinthPath = 70;
+ const int kNumDinoSpeedForCitaLevel = 16;
+ const int kNumTabletView = 12;
+ const int kNumPersoRoomBankTable = 84;
+ const int kNumGotos = 130;
+ const int kNumObjects = 42;
+ const int kNumObjectLocations = 45;
+ const int kNumPersons = 58;
+ const int kNumCitadel = 7;
+ const int kNumCharacterRects = 19;
+ const int kNumCharacters = 20;
+ const int kNumAreas = 12;
+ // tab_2CEF0
+ // tab_2CF70
+ const int kNumActionCursors = 299;
+
+ const int expectedDataSize =
+ kNumIcons * 18 + // sizeof(Icon)
+ kNumRooms * 14 + // sizeof(Room)
+ kNumFollowers * 16 + // sizeof(Follower)
+ kNumLabyrinthPath +
+ kNumDinoSpeedForCitaLevel +
+ kNumTabletView +
+ kNumPersoRoomBankTable +
+ kNumGotos * 5 + // sizeof(Goto)
+ kNumObjects * 12 + // sizeof(object_t)
+ kNumObjectLocations * 2 +
+ kNumPersons * 18 + // sizeof(perso_t)
+ kNumCitadel * 34 + // sizeof(Citadel)
+ kNumCharacterRects * 8 +
+ kNumCharacters * 5 +
+ kNumAreas * 10 + // (sizeof(Area) - 4)
+ 64 * 2 +
+ 64 * 2 +
+ kNumActionCursors +
+ 12 +
+ 3 * 6 * 2 * 3 * 2;
+
+ if (f.open("cryo.dat")) {
+ const int dataSize = f.size() - 8 - 4; // CRYODATA + version
+ char headerId[9];
+
+ f.read(headerId, 8);
+ headerId[8] = '\0';
+ if (strcmp(headerId, "CRYODATA"))
+ error("Invalid cryo.dat aux data file");
+
+ if (f.readUint32LE() != CRYO_DAT_VER)
+ error("Incorrect data version for cryo.dat");
+
+ if (dataSize != expectedDataSize)
+ error("Mismatching data in cryo.dat aux data file (got %d, expected %d)", dataSize, expectedDataSize);
+ } else
+ error("Can not load cryo.dat");
+
switch (_vm->getPlatform()) {
case Common::kPlatformDOS:
- {
// Since PC version stores hotspots and rooms info in the executable, load them from premade resource file
- Common::File f;
-
- if (f.open("led.dat")) {
- const int kNumIcons = 136;
- const int kNumRooms = 424;
- if (f.size() != kNumIcons * sizeof(Icon) + kNumRooms * sizeof(Room))
- error("Mismatching aux data");
for (int i = 0; i < kNumIcons; i++) {
_gameIcons[i].sx = f.readSint16LE();
_gameIcons[i].sy = f.readSint16LE();
@@ -4748,7 +4806,7 @@ void EdenGame::loadpermfiles() {
_gameIcons[i]._objectId = f.readUint32LE();
}
- for (int i = 0; i <kNumRooms; i++) {
+ for (int i = 0; i < kNumRooms; i++) {
_gameRooms[i]._id = f.readByte();
for (int j = 0; j < 4; j++)
_gameRooms[i]._exits[j] = f.readByte();
@@ -4760,22 +4818,111 @@ void EdenGame::loadpermfiles() {
_gameRooms[i]._location = f.readByte();
_gameRooms[i]._backgroundBankNum = f.readByte();
}
-
- f.close();
- } else
- error("Can not load aux data");
- }
break;
case Common::kPlatformMacintosh:
loadIconFile(2498, _gameIcons);
loadRoomFile(2497, _gameRooms);
loadRawFile(2486, _gameLipsync);
convertMacToPC();
+
+ // Skip the icons and rooms of the DOS version
+ f.skip(kNumIcons * 14 + kNumRooms * 11);
break;
default:
error("Unsupported platform");
}
+ // Read the common static data
+
+ for (int i = 0; i < kNumFollowers; i++) {
+ _followerList[i]._id = f.readSByte();
+ _followerList[i]._spriteNum = f.readSByte();
+ _followerList[i].sx = f.readSint16LE();
+ _followerList[i].sy = f.readSint16LE();
+ _followerList[i].ex = f.readSint16LE();
+ _followerList[i].ey = f.readSint16LE();
+ _followerList[i]._spriteBank = f.readSint16LE();
+ _followerList[i].ff_C = f.readSint16LE();
+ _followerList[i].ff_E = f.readSint16LE();
+ }
+
+ f.read(_labyrinthPath, kNumLabyrinthPath);
+ f.read(_dinoSpeedForCitadelLevel, kNumDinoSpeedForCitaLevel);
+ f.read(_tabletView, kNumTabletView);
+ f.read(_personRoomBankTable, kNumPersoRoomBankTable);
+ f.read(_gotos, kNumGotos * 5); // sizeof(Goto)
+
+ for (int i = 0; i < kNumObjects; i++) {
+ _objects[i]._id = f.readByte();
+ _objects[i]._flags = f.readByte();
+ _objects[i]._locations = f.readUint32LE();
+ _objects[i]._itemMask = f.readUint16LE();
+ _objects[i]._powerMask = f.readUint16LE();
+ _objects[i]._count = f.readSint16LE();
+ }
+
+ for (int i = 0; i < kNumObjectLocations; i++) {
+ _objectLocations[i] = f.readUint16LE();
+ }
+
+ for (int i = 0; i < kNumPersons; i++) {
+ _persons[i]._roomNum = f.readUint16LE();
+ _persons[i]._actionId = f.readUint16LE();
+ _persons[i]._partyMask = f.readUint16LE();
+ _persons[i]._id = f.readByte();
+ _persons[i]._flags = f.readByte();
+ _persons[i]._roomBankId = f.readByte();
+ _persons[i]._spriteBank = f.readByte();
+ _persons[i]._items = f.readUint16LE();
+ _persons[i]._powers = f.readUint16LE();
+ _persons[i]._targetLoc = f.readByte();
+ _persons[i]._lastLoc = f.readByte();
+ _persons[i]._speed = f.readByte();
+ _persons[i]._steps = f.readByte();
+ }
+
+ for (int i = 0; i < kNumCitadel; i++) {
+ _citadelList[i]._id = f.readSint16LE();
+ for (int j = 0; j < 8; j++)
+ _citadelList[i]._bank[j] = f.readSint16LE();
+ for (int j = 0; j < 8; j++)
+ _citadelList[i]._video[j] = f.readSint16LE();
+ }
+
+ for (int i = 0; i < kNumCharacterRects; i++) {
+ _characterRects[i].left = f.readSint16LE();
+ _characterRects[i].top = f.readSint16LE();
+ _characterRects[i].right = f.readSint16LE();
+ _characterRects[i].bottom = f.readSint16LE();
+ }
+
+ f.read(_characterArray, kNumCharacters * 5);
+
+ for (int i = 0; i < kNumAreas; i++) {
+ _areasTable[i]._num = f.readByte();
+ _areasTable[i]._type = f.readByte();
+ _areasTable[i]._flags = f.readUint16LE();
+ _areasTable[i]._firstRoomIdx = f.readUint16LE();
+ _areasTable[i]._citadelLevel = f.readByte();
+ _areasTable[i]._placeNum = f.readByte();
+ _areasTable[i]._citadelRoomPtr = nullptr;
+ _areasTable[i]._visitCount = f.readSint16LE();
+ }
+
+ for (int i = 0; i < 64; i++) {
+ tab_2CEF0[i] = f.readSint16LE();
+ }
+
+ for (int i = 0; i < 64; i++) {
+ tab_2CF70[i] = f.readSint16LE();
+ }
+
+ f.read(_actionCursors, kNumActionCursors);
+ f.read(_mapMode, 12);
+ f.read(_cubeTextureCoords, 3 * 6 * 2 * 3 * 2);
+
+ f.close();
+
loadRawFile(0, _mainBankBuf);
loadRawFile(402, _gameFont);
loadRawFile(404, _gameDialogs);
@@ -4878,7 +5025,7 @@ void EdenGame::expandHSQ(byte *input, byte *output) {
// Original name: ajouinfo
void EdenGame::addInfo(byte info) {
byte idx = _globals->_nextInfoIdx;
- if (kPersons[PER_ELOI]._roomNum)
+ if (_persons[PER_ELOI]._roomNum)
info |= 0x80;
_infoList[idx] = info;
if (idx == _globals->_lastInfoIdx)
@@ -5146,7 +5293,7 @@ void EdenGame::displaySingleRoom(Room *room) {
if (addIcon) {
icon->_actionId = b0;
icon->_objectId = b0;
- icon->_cursorId = kActionCursors[b0];
+ icon->_cursorId = _actionCursors[b0];
int16 x = READ_LE_UINT16(ptr);
ptr += 2;
int16 y = READ_LE_UINT16(ptr);
@@ -5246,14 +5393,14 @@ void EdenGame::specialout() {
if (_globals->_phaseNum >= 32 && _globals->_phaseNum < 48) {
if (_globals->_newLocation == 9 || _globals->_newLocation == 4 || _globals->_newLocation == 24) {
- kPersons[PER_ELOI]._roomNum = 263;
+ _persons[PER_ELOI]._roomNum = 263;
return;
}
}
if ((_globals->_phaseNum == 434) && (_globals->_newLocation == 5)) {
removeFromParty(PER_JABBER);
- kPersons[PER_JABBER]._roomNum = 264;
+ _persons[PER_JABBER]._roomNum = 264;
return;
}
@@ -5285,7 +5432,7 @@ void EdenGame::specialin() {
_gameRooms[129]._exits[0] = 0;
_gameRooms[129]._exits[2] = 1;
_globals->_roomNum = 3074;
- kPersons[PER_MUNGO]._roomNum = 3074;
+ _persons[PER_MUNGO]._roomNum = 3074;
_globals->_eventType = EventType::etEvent5;
updateRoom(_globals->_roomNum);
return;
@@ -5297,7 +5444,7 @@ void EdenGame::specialin() {
if (_globals->_roomNum == 259 && _globals->_phaseNum == 129)
_globals->_narratorSequence = 12;
if (_globals->_roomNum >= 289 && _globals->_roomNum < 359)
- _globals->_labyrinthDirections = kLabyrinthPath[(_globals->_roomNum & 0xFF) - 33];
+ _globals->_labyrinthDirections = _labyrinthPath[(_globals->_roomNum & 0xFF) - 33];
if (_globals->_roomNum == 305 && _globals->_prevLocation == 103)
_globals->_gameFlags &= ~GameFlags::gfFlag2000;
if (_globals->_roomNum == 304 && _globals->_prevLocation == 105)
@@ -5334,7 +5481,7 @@ void EdenGame::getdino(Room *room) {
assert(tab_2CEF0[4] == 0x25);
room->_flags &= ~0xC;
- for (perso_t *perso = &kPersons[PER_UNKN_18C]; perso->_roomNum != 0xFFFF; perso++) {
+ for (perso_t *perso = &_persons[PER_UNKN_18C]; perso->_roomNum != 0xFFFF; perso++) {
if (perso->_flags & PersonFlags::pf80)
continue;
if (perso->_roomNum != _globals->_roomNum)
@@ -5408,7 +5555,7 @@ void EdenGame::initPlace(int16 roomNum) {
_globals->_gameFlags |= GameFlags::gfFlag4000;
_gameIcons[18]._cursorId |= 0x8000;
_globals->_lastAreaPtr = _globals->_areaPtr;
- _globals->_areaPtr = &kAreasTable[((roomNum >> 8) & 0xFF) - 1];
+ _globals->_areaPtr = &_areasTable[((roomNum >> 8) & 0xFF) - 1];
Area *area = _globals->_areaPtr;
area->_visitCount++;
_globals->_areaVisitCount = area->_visitCount;
@@ -5733,19 +5880,18 @@ void EdenGame::signon(const char *s) {
void EdenGame::FRDevents() {
_vm->pollEvents();
- if (_allowDoubled) {
+
#if 0 // CLKeyboard_IsScanCodeDown currently always returns false
- if (_vm->isScanCodeDown(0x30)) { //TODO: const
- if (!_keyboardHeld) {
- _doubledScreen = !_doubledScreen;
- _mainView->_doubled = _doubledScreen;
- CLBlitter_FillScreenView(0);
- _keyboardHeld = true;
- }
- } else
+ if (_vm->isScanCodeDown(0x30)) { //TODO: const
+ if (!_keyboardHeld) {
+ _doubledScreen = !_doubledScreen;
+ _mainView->_doubled = _doubledScreen;
+ CLBlitter_FillScreenView(0);
+ _keyboardHeld = true;
+ }
+ } else
#endif
- _keyboardHeld = false;
- }
+ _keyboardHeld = false;
int16 mouseY;
int16 mouseX;
@@ -6219,19 +6365,19 @@ void EdenGame::showMovie(char arg1) {
CLBlitter_CopyView2Screen(_hnmView);
assert(_vm->_screenView->_pitch == 320);
_vm->pollEvents();
- if (_allowDoubled) {
+
#if 0 // CLKeyboard_IsScanCodeDown currently always returns false
- if (_vm->isScanCodeDown(0x30)) { //TODO: const
- if (!_keyboardHeld) {
- _doubledScreen = !_doubledScreen;
- _hnmView->_doubled = _doubledScreen; //TODO: but mainview ?
- CLBlitter_FillScreenView(0);
- _keyboardHeld = true;
- }
- } else
+ if (_vm->isScanCodeDown(0x30)) { //TODO: const
+ if (!_keyboardHeld) {
+ _doubledScreen = !_doubledScreen;
+ _hnmView->_doubled = _doubledScreen; //TODO: but mainview ?
+ CLBlitter_FillScreenView(0);
+ _keyboardHeld = true;
+ }
+ } else
#endif
- _keyboardHeld = false;
- }
+ _keyboardHeld = false;
+
if (arg1) {
if (_vm->isMouseButtonDown()) {
if (!_mouseHeld) {
@@ -6366,23 +6512,23 @@ void EdenGame::handleHNMSubtitles() {
switch (_globals->_curVideoNum) {
case 170:
frames = kFramesVid170;
- perso = &kPersons[PER_UNKN_156];
+ perso = &_persons[PER_UNKN_156];
break;
case 83:
frames = kFramesVid83;
- perso = &kPersons[PER_MORKUS];
+ perso = &_persons[PER_MORKUS];
break;
case 88:
frames = kFramesVid88;
- perso = &kPersons[PER_MORKUS];
+ perso = &_persons[PER_MORKUS];
break;
case 89:
frames = kFramesVid89;
- perso = &kPersons[PER_MORKUS];
+ perso = &_persons[PER_MORKUS];
break;
case 94:
frames = kFramesVid94;
- perso = &kPersons[PER_MORKUS];
+ perso = &_persons[PER_MORKUS];
break;
default:
return;
@@ -6685,7 +6831,7 @@ void EdenGame::lostObject() {
// Original name: objecthere
bool EdenGame::isObjectHere(int16 id) {
object_t *object = getObjectPtr(id);
- for (_currentObjectLocation = &kObjectLocations[object->_locations]; *_currentObjectLocation != 0xFFFF; _currentObjectLocation++) {
+ for (_currentObjectLocation = &_objectLocations[object->_locations]; *_currentObjectLocation != 0xFFFF; _currentObjectLocation++) {
if (*_currentObjectLocation == _globals->_roomNum)
return true;
}
@@ -6736,7 +6882,7 @@ void EdenGame::putObject() {
void EdenGame::newObject(int16 id, int16 arg2) {
object_t *object = getObjectPtr(id);
- uint16 e, *t = &kObjectLocations[object->_locations];
+ uint16 e, *t = &_objectLocations[object->_locations];
while ((e = *t) != 0xFFFF) {
e &= ~0x8000;
if ((e >> 8) == arg2)
@@ -6747,7 +6893,7 @@ void EdenGame::newObject(int16 id, int16 arg2) {
void EdenGame::giveobjectal(int16 id) {
if (id == Objects::obKnife)
- kObjectLocations[2] = 0;
+ _objectLocations[2] = 0;
if (id == Objects::obApple)
_globals->_stepsToFindAppleNormal = 0;
if (id >= Objects::obEyeInTheStorm && id < (Objects::obRiverThatWinds + 1) && _globals->_roomCharacterType == PersonFlags::pftVelociraptor) {
@@ -6802,7 +6948,7 @@ void EdenGame::newEmptyNest() {
if (_objects[Objects::obNest - 1]._count)
return;
object_t *obj = getObjectPtr(Objects::obNest);
- for (uint16 *ptr = kObjectLocations + obj->_locations; *ptr != 0xFFFF; ptr++) {
+ for (uint16 *ptr = _objectLocations + obj->_locations; *ptr != 0xFFFF; ptr++) {
if ((*ptr & ~0x8000) >> 8 != _globals->_citadelAreaNum)
continue;
*ptr &= ~0x8000;
@@ -6826,7 +6972,7 @@ void EdenGame::newNestWithEggs() {
if (_objects[Objects::obNest - 1]._count)
return;
object_t *obj = getObjectPtr(Objects::obFullNest);
- for (uint16 *ptr = kObjectLocations + obj->_locations; *ptr != 0xFFFF; ptr++) {
+ for (uint16 *ptr = _objectLocations + obj->_locations; *ptr != 0xFFFF; ptr++) {
if ((*ptr & ~0x8000) >> 8 != _globals->_citadelAreaNum)
continue;
*ptr &= ~0x8000;
@@ -6934,9 +7080,9 @@ void EdenGame::cancel2() {
void EdenGame::testvoice() {
_globals->_frescoNumber = 0;
- _globals->_characterPtr = kPersons;
+ _globals->_characterPtr = _persons;
_globals->_dialogType = DialogType::dtInspect;
- int16 num = (kPersons[PER_KING]._id << 3) | _globals->_dialogType;
+ int16 num = (_persons[PER_KING]._id << 3) | _globals->_dialogType;
dialoscansvmas((Dialog *)getElem(_gameDialogs, num));
restoreUnderSubtitles();
displaySubtitles();
@@ -7002,9 +7148,9 @@ void EdenGame::initafterload() {
_gameIcons[18]._cursorId |= 0x8000;
if (_globals->_curAreaType == AreaType::atValley)
_gameIcons[18]._cursorId &= ~0x8000;
- kPersoRoomBankTable[30] = 27;
+ _personRoomBankTable[30] = 27;
if (_globals->_phaseNum >= 352)
- kPersoRoomBankTable[30] = 26;
+ _personRoomBankTable[30] = 26;
_animateTalking = false;
_animationActive = false;
_globals->_var100 = 0;
@@ -7059,9 +7205,9 @@ void EdenGame::panelrestart() {
_gameIcons[18]._cursorId |= 0x8000;
if (_globals->_curAreaType == AreaType::atValley)
_gameIcons[18]._cursorId &= ~0x8000;
- kPersoRoomBankTable[30] = 27;
+ _personRoomBankTable[30] = 27;
if (_globals->_phaseNum >= 352)
- kPersoRoomBankTable[30] = 26;
+ _personRoomBankTable[30] = 26;
_animateTalking = false;
_animationActive = false;
_globals->_var100 = 0;
@@ -7372,9 +7518,9 @@ void EdenGame::displayTopPanel() {
// Original name: affresult
void EdenGame::displayResult() {
restoreUnderSubtitles();
- _globals->_characterPtr = &kPersons[19];
+ _globals->_characterPtr = &_persons[19];
_globals->_dialogType = DialogType::dtInspect;
- int16 num = (kPersons[PER_UNKN_156]._id << 3) | _globals->_dialogType;
+ int16 num = (_persons[PER_UNKN_156]._id << 3) | _globals->_dialogType;
if (dialoscansvmas((Dialog *)getElem(_gameDialogs, num)))
displaySubtitles();
_globals->_varCA = 0;
@@ -7450,7 +7596,7 @@ void EdenGame::evenements(perso_t *perso) {
if (_globals->_var113)
return;
- if (perso >= &kPersons[PER_UNKN_18C])
+ if (perso >= &_persons[PER_UNKN_18C])
return;
if (!dialogEvent(perso))
@@ -7493,7 +7639,7 @@ void EdenGame::rangermammi(perso_t *perso, Room *room) {
}
void EdenGame::perso_ici(int16 action) {
- perso_t *perso = &kPersons[PER_UNKN_156];
+ perso_t *perso = &_persons[PER_UNKN_156];
// room_t *room = p_global->last_area_ptr->room_ptr; //TODO: compiler opt bug? causes access to zero ptr??? last_area_ptr == 0
switch (action) {
case 0:
@@ -7512,7 +7658,7 @@ void EdenGame::perso_ici(int16 action) {
rangermammi(perso, _globals->_lastAreaPtr->_citadelRoomPtr);
break;
}
- perso = kPersons;
+ perso = _persons;
do {
if (perso->_roomNum == _globals->_roomNum && !(perso->_flags & PersonFlags::pf80)) {
switch (action) {
@@ -7539,7 +7685,7 @@ void EdenGame::perso_ici(int16 action) {
// Original name: setpersohere
void EdenGame::setCharacterHere() {
- debug("setCharacterHere, perso is %ld", _globals->_characterPtr - kPersons);
+ debug("setCharacterHere, perso is %ld", _globals->_characterPtr - _persons);
_globals->_partyOutside = 0;
_globals->_party = 0;
_globals->_roomCharacterPtr = nullptr;
@@ -7565,7 +7711,7 @@ void EdenGame::faire_suivre(int16 roomNum) {
// Original name: suis_moi5
void EdenGame::AddCharacterToParty() {
- debug("adding person %ld to party", _globals->_characterPtr - kPersons);
+ debug("adding person %ld to party", _globals->_characterPtr - _persons);
_globals->_characterPtr->_flags |= PersonFlags::pfInParty;
_globals->_characterPtr->_roomNum = _globals->_roomNum;
_globals->_party |= _globals->_characterPtr->_partyMask;
@@ -7575,14 +7721,14 @@ void EdenGame::AddCharacterToParty() {
// Original name: suis_moi
void EdenGame::addToParty(int16 index) {
perso_t *old_perso = _globals->_characterPtr;
- _globals->_characterPtr = &kPersons[index];
+ _globals->_characterPtr = &_persons[index];
AddCharacterToParty();
_globals->_characterPtr = old_perso;
}
// Original name: reste_ici5
void EdenGame::removeCharacterFromParty() {
- debug("removing person %ld from party", _globals->_characterPtr - kPersons);
+ debug("removing person %ld from party", _globals->_characterPtr - _persons);
_globals->_characterPtr->_flags &= ~PersonFlags::pfInParty;
_globals->_partyOutside |= _globals->_characterPtr->_partyMask;
_globals->_party &= ~_globals->_characterPtr->_partyMask;
@@ -7592,7 +7738,7 @@ void EdenGame::removeCharacterFromParty() {
// Original name: reste_ici
void EdenGame::removeFromParty(int16 index) {
perso_t *old_perso = _globals->_characterPtr;
- _globals->_characterPtr = &kPersons[index];
+ _globals->_characterPtr = &_persons[index];
removeCharacterFromParty();
_globals->_characterPtr = old_perso;
}
@@ -7601,8 +7747,8 @@ void EdenGame::removeFromParty(int16 index) {
void EdenGame::handleEloiDeparture() {
removeFromParty(PER_ELOI);
_globals->_gameFlags &= ~GameFlags::gfFlag4000;
- kPersons[PER_ELOI]._roomNum = 0;
- _globals->_partyOutside &= ~kPersons[PER_ELOI]._partyMask;
+ _persons[PER_ELOI]._roomNum = 0;
+ _globals->_partyOutside &= ~_persons[PER_ELOI]._partyMask;
if (_globals->_roomNum == 2817)
setChrono(3000);
_globals->_eloiDepartureDay = _globals->_gameDays;
@@ -7625,8 +7771,8 @@ bool EdenGame::checkEloiReturn() {
// Original name: eloirevient
void EdenGame::handleEloiReturn() {
- if (_globals->_areaPtr->_type == AreaType::atValley && !kPersons[PER_ELOI]._roomNum)
- kPersons[PER_ELOI]._roomNum = (_globals->_roomNum & 0xFF00) + 1;
+ if (_globals->_areaPtr->_type == AreaType::atValley && !_persons[PER_ELOI]._roomNum)
+ _persons[PER_ELOI]._roomNum = (_globals->_roomNum & 0xFF00) + 1;
}
//// phase.c
void EdenGame::incPhase() {
@@ -7670,7 +7816,7 @@ void EdenGame::incPhase() {
void EdenGame::phase113() {
removeFromParty(PER_DINA);
- kPersons[PER_DINA]._roomNum = 274;
+ _persons[PER_DINA]._roomNum = 274;
}
void EdenGame::phase130() {
@@ -7681,7 +7827,7 @@ void EdenGame::phase130() {
void EdenGame::phase161() {
Area *area = _globals->_areaPtr;
addToParty(PER_MAMMI);
- kPersons[PER_MAMMI]._flags |= PersonFlags::pf10;
+ _persons[PER_MAMMI]._flags |= PersonFlags::pf10;
area->_flags |= AreaFlags::afFlag1;
_globals->_curAreaFlags |= AreaFlags::afFlag1;
}
@@ -7700,8 +7846,8 @@ void EdenGame::phase257() {
void EdenGame::phase353() {
removeFromParty(PER_DINA);
- kPersons[PER_DINA]._roomNum = 0;
- kTabletView[1] = 88;
+ _persons[PER_DINA]._roomNum = 0;
+ _tabletView[1] = 88;
}
void EdenGame::phase369() {
@@ -7742,8 +7888,8 @@ void EdenGame::phase418() {
void EdenGame::phase433() {
dialautoon();
- kPersons[PER_MAMMI_4]._flags &= ~PersonFlags::pf80;
- kPersons[PER_JABBER]._flags &= ~PersonFlags::pf80;
+ _persons[PER_MAMMI_4]._flags &= ~PersonFlags::pf80;
+ _persons[PER_JABBER]._flags &= ~PersonFlags::pf80;
setCharacterHere();
_globals->_chronoFlag = 0;
_globals->_chrono = 0;
@@ -7857,11 +8003,11 @@ void EdenGame::phase48() {
void EdenGame::phase64() {
addToParty(PER_DINA);
- kPersons[PER_ELOI]._roomNum = 259;
+ _persons[PER_ELOI]._roomNum = 259;
}
void EdenGame::phase80() {
- kPersons[PER_TAU]._roomNum = 0;
+ _persons[PER_TAU]._roomNum = 0;
}
void EdenGame::phase96() {
@@ -7892,7 +8038,7 @@ void EdenGame::phase176() {
void EdenGame::phase192() {
Area *area = _globals->_areaPtr;
addToParty(PER_MAMMI_1);
- kPersons[PER_MAMMI_1]._flags |= PersonFlags::pf10;
+ _persons[PER_MAMMI_1]._flags |= PersonFlags::pf10;
dialautoon();
area->_flags |= AreaFlags::afFlag1;
_globals->_curAreaFlags |= AreaFlags::afFlag1;
@@ -7911,7 +8057,7 @@ void EdenGame::phase224() {
void EdenGame::phase240() {
Area *area = _globals->_areaPtr;
addToParty(PER_MAMMI_2);
- kPersons[PER_MAMMI_2]._flags |= PersonFlags::pf10;
+ _persons[PER_MAMMI_2]._flags |= PersonFlags::pf10;
area->_flags |= AreaFlags::afFlag1;
_globals->_curAreaFlags |= AreaFlags::afFlag1;
}
@@ -7927,7 +8073,7 @@ void EdenGame::phase272() {
void EdenGame::phase288() {
setChoiceYes();
- kPersons[PER_MUNGO]._roomNum = 0;
+ _persons[PER_MUNGO]._roomNum = 0;
removeFromParty(PER_MUNGO);
addToParty(PER_ELOI);
_globals->_narratorSequence = 8;
@@ -7937,7 +8083,7 @@ void EdenGame::phase304() {
Area *area = _globals->_areaPtr;
addToParty(PER_EVE);
addToParty(PER_MAMMI_5);
- kPersons[PER_MAMMI_5]._flags |= PersonFlags::pf10;
+ _persons[PER_MAMMI_5]._flags |= PersonFlags::pf10;
dialautoon();
area->_flags |= AreaFlags::afFlag1;
_globals->_curAreaFlags |= AreaFlags::afFlag1;
@@ -7955,10 +8101,10 @@ void EdenGame::phase336() {
}
void EdenGame::phase352() {
- kPersoRoomBankTable[30] = 26;
- kPersons[PER_EVE]._spriteBank = 9;
- kPersons[PER_EVE]._targetLoc = 8;
- followerList[13]._spriteNum = 2;
+ _personRoomBankTable[30] = 26;
+ _persons[PER_EVE]._spriteBank = 9;
+ _persons[PER_EVE]._targetLoc = 8;
+ _followerList[13]._spriteNum = 2;
dialautoon();
_gameRooms[288]._exits[0] = 0xFF;
_gameRooms[289]._exits[0] = 0xFF;
@@ -7969,8 +8115,8 @@ void EdenGame::phase352() {
void EdenGame::phase368() {
removeFromParty(PER_EVE);
dialautoon();
- kPersons[PER_ELOI]._roomNum = 1811;
- kPersons[PER_DINA]._roomNum = 1607;
+ _persons[PER_ELOI]._roomNum = 1811;
+ _persons[PER_DINA]._roomNum = 1607;
}
void EdenGame::phase384() {
@@ -7985,10 +8131,10 @@ void EdenGame::phase384() {
void EdenGame::phase400() {
dialonfollow();
- kPersons[PER_KING]._roomNum = 0;
- kPersons[PER_MONK]._roomNum = 259;
+ _persons[PER_KING]._roomNum = 0;
+ _persons[PER_MONK]._roomNum = 259;
_globals->_eloiHaveNews = 0;
- kObjectLocations[20] = 259;
+ _objectLocations[20] = 259;
}
void EdenGame::phase416() {
@@ -8000,9 +8146,9 @@ void EdenGame::phase416() {
void EdenGame::phase432() {
_globals->_narratorSequence = 3;
- kPersons[PER_MAMMI_4]._flags |= PersonFlags::pf80;
- kPersons[PER_JABBER]._flags |= PersonFlags::pf80;
- kPersons[PER_ELOI]._roomNum = 257;
+ _persons[PER_MAMMI_4]._flags |= PersonFlags::pf80;
+ _persons[PER_JABBER]._flags |= PersonFlags::pf80;
+ _persons[PER_ELOI]._roomNum = 257;
_gameRooms[0]._exits[0] = 0xFF;
_globals->_drawFlags |= DrawFlags::drDrawTopScreen;
}
@@ -8015,7 +8161,7 @@ void EdenGame::phase448() {
void EdenGame::phase464() {
_globals->_areaPtr->_flags |= AreaFlags::afFlag1;
_globals->_curAreaFlags |= AreaFlags::afFlag1;
- kPersons[PER_MAMMI_6]._flags |= PersonFlags::pf10;
+ _persons[PER_MAMMI_6]._flags |= PersonFlags::pf10;
addToParty(PER_SHAZIA);
_globals->_citadelAreaNum = _globals->_areaNum;
naitredino(8);
@@ -8025,7 +8171,7 @@ void EdenGame::phase480() {
giveObject();
newValley();
handleEloiReturn();
- kTabletView[1] = 94;
+ _tabletView[1] = 94;
}
void EdenGame::phase496() {
@@ -8058,7 +8204,7 @@ void EdenGame::phase544() {
}
void EdenGame::phase560() {
- kPersons[PER_ELOI]._roomNum = 3073;
+ _persons[PER_ELOI]._roomNum = 3073;
_gameRooms[127]._exits[1] = 0;
}
@@ -8086,23 +8232,23 @@ h->write(ptr, *size);
size = (char *)(&_gameIcons[134]) - (char *)(&_gameIcons[123]);
CLFile_Write(handle, &_gameIcons[123], &size);
lieuoffsetout();
- size = (char *)(&kAreasTable[12]) - (char *)(&kAreasTable[0]);
- CLFile_Write(handle, &kAreasTable[0], &size);
+ size = (char *)(&_areasTable[12]) - (char *)(&_areasTable[0]);
+ CLFile_Write(handle, &_areasTable[0], &size);
size = (char *)(&_gameRooms[423]) - (char *)(&_gameRooms[0]);
CLFile_Write(handle, &_gameRooms[0], &size);
size = (char *)(&_objects[42]) - (char *)(&_objects[0]);
CLFile_Write(handle, &_objects[0], &size);
- size = (char *)(&kObjectLocations[45]) - (char *)(&kObjectLocations[0]);
- CLFile_Write(handle, &kObjectLocations[0], &size);
- size = (char *)(&followerList[14]) - (char *)(&followerList[13]);
- CLFile_Write(handle, &followerList[13], &size);
- size = (char *)(&kPersons[PER_UNKN_3DE]) - (char *)(&kPersons[PER_KING]);
- CLFile_Write(handle, &kPersons[PER_KING], &size);
+ size = (char *)(&_objectLocations[45]) - (char *)(&_objectLocations[0]);
+ CLFile_Write(handle, &_objectLocations[0], &size);
+ size = (char *)(&_followerList[14]) - (char *)(&_followerList[13]);
+ CLFile_Write(handle, &_followerList[13], &size);
+ size = (char *)(&_persons[PER_UNKN_3DE]) - (char *)(&_persons[PER_KING]);
+ CLFile_Write(handle, &_persons[PER_KING], &size);
bandeoffsetout();
size = (char *)(&_tapes[16]) - (char *)(&_tapes[0]);
CLFile_Write(handle, &_tapes[0], &size);
- size = (char *)(&kTabletView[6]) - (char *)(&kTabletView[0]);
- CLFile_Write(handle, &kTabletView[0], &size);
+ size = (char *)(&_tabletView[6]) - (char *)(&_tabletView[0]);
+ CLFile_Write(handle, &_tabletView[0], &size);
size = (char *)(&_gameDialogs[10240]) - (char *)(&_gameDialogs[0]); //TODO: const size 10240
CLFile_Write(handle, &_gameDialogs[0], &size);
@@ -8130,8 +8276,8 @@ void EdenGame::loadrestart() {
size = (char *)(&_gameIcons[134]) - (char *)(&_gameIcons[123]);
loadpartoffile(2495, &_gameIcons[123], offs, size);
offs += size;
- size = (char *)(&kAreasTable[12]) - (char *)(&kAreasTable[0]);
- loadpartoffile(2495, &kAreasTable[0], offs, size);
+ size = (char *)(&_areasTable[12]) - (char *)(&_areasTable[0]);
+ loadpartoffile(2495, &_areasTable[0], offs, size);
offs += size;
lieuoffsetin();
size = (char *)(&_gameRooms[423]) - (char *)(&_gameRooms[0]);
@@ -8140,21 +8286,21 @@ void EdenGame::loadrestart() {
size = (char *)(&_objects[42]) - (char *)(&_objects[0]);
loadpartoffile(2495, &_objects[0], offs, size);
offs += size;
- size = (char *)(&kObjectLocations[45]) - (char *)(&kObjectLocations[0]);
- loadpartoffile(2495, &kObjectLocations[0], offs, size);
+ size = (char *)(&_objectLocations[45]) - (char *)(&_objectLocations[0]);
+ loadpartoffile(2495, &_objectLocations[0], offs, size);
offs += size;
- size = (char *)(&followerList[14]) - (char *)(&followerList[13]);
- loadpartoffile(2495, &followerList[13], offs, size);
+ size = (char *)(&_followerList[14]) - (char *)(&_followerList[13]);
+ loadpartoffile(2495, &_followerList[13], offs, size);
offs += size;
- size = (char *)(&kPersons[PER_UNKN_3DE]) - (char *)(&kPersons[PER_KING]);
- loadpartoffile(2495, &kPersons[PER_KING], offs, size);
+ size = (char *)(&_persons[PER_UNKN_3DE]) - (char *)(&_persons[PER_KING]);
+ loadpartoffile(2495, &_persons[PER_KING], offs, size);
offs += size;
size = (char *)(&_tapes[16]) - (char *)(&_tapes[0]);
loadpartoffile(2495, &_tapes[0], offs, size);
offs += size;
bandeoffsetin();
- size = (char *)(&kTabletView[6]) - (char *)(&kTabletView[0]);
- loadpartoffile(2495, &kTabletView[0], offs, size);
+ size = (char *)(&_tabletView[6]) - (char *)(&_tabletView[0]);
+ loadpartoffile(2495, &_tabletView[0], offs, size);
offs += size;
size = (char *)(&_gameDialogs[10240]) - (char *)(&_gameDialogs[0]); //TODO: const size 10240
loadpartoffile(2495, &_gameDialogs[0], offs, size);
@@ -8179,24 +8325,24 @@ void EdenGame::loadgame(char *name) {
vavaoffsetin();
size = (char *)(&_gameIcons[134]) - (char *)(&_gameIcons[123]);
CLFile_Read(handle, &_gameIcons[123], &size);
- size = (char *)(&kAreasTable[12]) - (char *)(&kAreasTable[0]);
- CLFile_Read(handle, &kAreasTable[0], &size);
+ size = (char *)(&_areasTable[12]) - (char *)(&_areasTable[0]);
+ CLFile_Read(handle, &_areasTable[0], &size);
lieuoffsetin();
size = (char *)(&_gameRooms[423]) - (char *)(&_gameRooms[0]);
CLFile_Read(handle, &_gameRooms[0], &size);
size = (char *)(&_objects[42]) - (char *)(&_objects[0]);
CLFile_Read(handle, &_objects[0], &size);
- size = (char *)(&kObjectLocations[45]) - (char *)(&kObjectLocations[0]);
- CLFile_Read(handle, &kObjectLocations[0], &size);
- size = (char *)(&followerList[14]) - (char *)(&followerList[13]);
- CLFile_Read(handle, &followerList[13], &size);
- size = (char *)(&kPersons[55]) - (char *)(&kPersons[0]);
- CLFile_Read(handle, &kPersons[0], &size);
+ size = (char *)(&_objectLocations[45]) - (char *)(&_objectLocations[0]);
+ CLFile_Read(handle, &_objectLocations[0], &size);
+ size = (char *)(&_followerList[14]) - (char *)(&_followerList[13]);
+ CLFile_Read(handle, &_followerList[13], &size);
+ size = (char *)(&_persons[55]) - (char *)(&_persons[0]);
+ CLFile_Read(handle, &_persons[0], &size);
size = (char *)(&_tapes[16]) - (char *)(&_tapes[0]);
CLFile_Read(handle, &_tapes[0], &size);
bandeoffsetin();
- size = (char *)(&kTabletView[6]) - (char *)(&kTabletView[0]);
- CLFile_Read(handle, &kTabletView[0], &size);
+ size = (char *)(&_tabletView[6]) - (char *)(&_tabletView[0]);
+ CLFile_Read(handle, &_tabletView[0], &size);
size = (char *)(&_gameDialogs[10240]) - (char *)(&_gameDialogs[0]); //TODO: const size 10240
CLFile_Read(handle, &_gameDialogs[0], &size);
@@ -8221,11 +8367,11 @@ void EdenGame::vavaoffsetout() {
OFSOUT(_globals->_nextRoomIcon, _gameIcons, Icon);
OFSOUT(_globals->_roomPtr, _gameRooms, Room);
OFSOUT(_globals->_citaAreaFirstRoom, _gameRooms, Room);
- OFSOUT(_globals->_areaPtr, kAreasTable, Area);
- OFSOUT(_globals->_lastAreaPtr, kAreasTable, Area);
- OFSOUT(_globals->_curAreaPtr, kAreasTable, Area);
- OFSOUT(_globals->_characterPtr, kPersons, perso_t);
- OFSOUT(_globals->_roomCharacterPtr, kPersons, perso_t);
+ OFSOUT(_globals->_areaPtr, _areasTable, Area);
+ OFSOUT(_globals->_lastAreaPtr, _areasTable, Area);
+ OFSOUT(_globals->_curAreaPtr, _areasTable, Area);
+ OFSOUT(_globals->_characterPtr, _persons, perso_t);
+ OFSOUT(_globals->_roomCharacterPtr, _persons, perso_t);
}
void EdenGame::vavaoffsetin() {
@@ -8237,33 +8383,33 @@ void EdenGame::vavaoffsetin() {
OFSIN(_globals->_nextRoomIcon, _gameIcons, Icon);
OFSIN(_globals->_roomPtr, _gameRooms, Room);
OFSIN(_globals->_citaAreaFirstRoom, _gameRooms, Room);
- OFSIN(_globals->_areaPtr, kAreasTable, Area);
- OFSIN(_globals->_lastAreaPtr, kAreasTable, Area);
- OFSIN(_globals->_curAreaPtr, kAreasTable, Area);
- OFSIN(_globals->_characterPtr, kPersons, perso_t);
- OFSIN(_globals->_roomCharacterPtr, kPersons, perso_t);
+ OFSIN(_globals->_areaPtr, _areasTable, Area);
+ OFSIN(_globals->_lastAreaPtr, _areasTable, Area);
+ OFSIN(_globals->_curAreaPtr, _areasTable, Area);
+ OFSIN(_globals->_characterPtr, _persons, perso_t);
+ OFSIN(_globals->_roomCharacterPtr, _persons, perso_t);
}
void EdenGame::lieuoffsetout() {
for (int i = 0; i < 12; i++)
- OFSOUT(kAreasTable[i]._citadelRoomPtr, _gameRooms, Room);
+ OFSOUT(_areasTable[i]._citadelRoomPtr, _gameRooms, Room);
}
void EdenGame::lieuoffsetin() {
for (int i = 0; i < 12; i++)
- OFSIN(kAreasTable[i]._citadelRoomPtr, _gameRooms, Room);
+ OFSIN(_areasTable[i]._citadelRoomPtr, _gameRooms, Room);
}
void EdenGame::bandeoffsetout() {
for (int i = 0; i < 16; i++) {
- OFSOUT(_tapes[i]._perso, kPersons, perso_t);
+ OFSOUT(_tapes[i]._perso, _persons, perso_t);
OFSOUT(_tapes[i]._dialog, _gameDialogs, Dialog);
}
}
void EdenGame::bandeoffsetin() {
for (int i = 0; i < 16; i++) {
- OFSIN(_tapes[i]._perso, kPersons, perso_t);
+ OFSIN(_tapes[i]._perso, _persons, perso_t);
OFSIN(_tapes[i]._dialog, _gameDialogs, Dialog);
}
}
@@ -8691,77 +8837,15 @@ int EdenGame::nextVal(char **ptr, char *error) {
}
void EdenGame::selectMap(int16 num) {
- static const char mapMode[12] = { 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 2, 0 };
- // Cube faces to texture coords mapping
- // each entry is num_polys(6) * num_faces_per_poly(2) * vertex_per_face(3) * uv(2)
-
- static const int16 cube_texcoords[3][6 * 2 * 3 * 2] = {
- {
- 32, 32, 0, 32, 0, 0,
- 32, 32, 0, 0, 32, 0,
-
- 0, 32, 0, 0, 32, 0,
- 0, 32, 32, 0, 32, 32,
-
- 32, 32, 0, 32, 0, 0,
- 32, 32, 0, 0, 32, 0,
-
- 32, 0, 32, 32, 0, 32,
- 32, 0, 0, 32, 0, 0,
-
- 0, 0, 32, 0, 32, 32,
- 0, 0, 32, 32, 0, 32,
-
- 0, 32, 0, 0, 32, 0,
- 0, 32, 32, 0, 32, 32
- }, {
- 32, 32, 0, 32, 0, 0,
- 32, 32, 0, 0, 32, 0,
-
- 32, 0, 32, 32, 0, 32,
- 32, 0, 0, 32, 0, 0,
-
- 32, 0, 32, 32, 0, 32,
- 32, 0, 0, 32, 0, 0,
-
- 0, 32, 0, 0, 32, 0,
- 0, 32, 32, 0, 32, 32,
-
- 32, 0, 32, 32, 0, 32,
- 32, 0, 0, 32, 0, 0,
-
- 32, 0, 32, 32, 0, 32,
- 32, 0, 0, 32, 0, 0
- }, {
- 30, 30, 2, 30, 2, 2,
- 30, 30, 2, 2, 30, 2,
-
- 2, 30, 2, 2, 30, 2,
- 2, 30, 30, 2, 30, 30,
-
- 30, 30, 2, 30, 2, 2,
- 30, 30, 2, 2, 30, 2,
-
- 30, 2, 30, 30, 2, 30,
- 30, 2, 2, 30, 2, 2,
-
- 2, 2, 30, 2, 30, 30,
- 2, 2, 30, 30, 2, 30,
-
- 2, 30, 2, 2, 30, 2,
- 2, 30, 30, 2, 30, 30
- }
- };
-
_cursCurPCMap = num;
int16 k = 0;
- int mode = mapMode[num];
+ int mode = _mapMode[num];
int16 x = (num & 7) * 32;
int16 y = (num & 0x18) * 4;
for (int i = 0; i < 6 * 2; i++) {
for (int j = 0; j < 3; j++) {
- _cube._faces[i]->_uv[j * 2 ] = x + cube_texcoords[mode][k++];
- _cube._faces[i]->_uv[j * 2 + 1] = y + cube_texcoords[mode][k++];
+ _cube._faces[i]->_uv[j * 2 ] = x + _cubeTextureCoords[mode][k++];
+ _cube._faces[i]->_uv[j * 2 + 1] = y + _cubeTextureCoords[mode][k++];
}
}
}
@@ -8809,14 +8893,14 @@ void EdenGame::Eden_dep_and_rot() {
case 5:
_rotationAngleZ = 0;
_rotationAngleX = 0;
- _translationZ += flt_2DF84;
- if ((_translationZ < -3600.0 + flt_2DF80) || _translationZ > flt_2DF80)
- flt_2DF84 = -flt_2DF84;
+ _translationZ += _zDirection * Z_STEP;
+ if ((_translationZ < -3600 + Z_RESET) || _translationZ > Z_RESET)
+ _zDirection = -_zDirection;
break;
case 6:
_rotationAngleZ = 0;
_rotationAngleX = 0;
- _translationZ = flt_2DF80;
+ _translationZ = Z_RESET;
break;
case 7:
_rotationAngleZ -= 2;
@@ -8828,22 +8912,22 @@ void EdenGame::Eden_dep_and_rot() {
case 8:
_rotationAngleZ = 0;
_rotationAngleX = 0;
- _translationZ = flt_2DF80;
+ _translationZ = Z_RESET;
break;
case 9:
_rotationAngleZ = 0;
_rotationAngleX = 0;
- _translationZ = flt_2DF80;
+ _translationZ = Z_RESET;
break;
}
}
void EdenGame::restoreZDEP() {
- flt_2DF84 = 200.0;
- if (_translationZ < flt_2DF80)
- _translationZ += flt_2DF84;
- if (_translationZ > flt_2DF80)
- _translationZ -= flt_2DF84;
+ _zDirection = Z_UP;
+ if (_translationZ < Z_RESET)
+ _translationZ += _zDirection * Z_STEP;
+ if (_translationZ > Z_RESET)
+ _translationZ -= _zDirection * Z_STEP;
}
// Original name: affiche_polygone_mapping
diff --git a/engines/cryo/eden.h b/engines/cryo/eden.h
index b6d8f25485..e3078b1d5b 100644
--- a/engines/cryo/eden.h
+++ b/engines/cryo/eden.h
@@ -576,7 +576,7 @@ private:
int _lastAnimFrameNumb;
int _curAnimFrameNumb;
int _lastAnimTicks;
- prect_t *_curCharacterRect;
+ Common::Rect *_curCharacterRect;
int16 _numAnimFrames;
int16 _maxPersoDesc;
int16 _numImgDesc;
@@ -737,6 +737,40 @@ private:
uint8 tab_2CB1E[8][4];
const unsigned int kMaxMusicSize; // largest .mus file size
+
+ // Loaded from cryo.dat
+ Follower _followerList[15];
+ byte _labyrinthPath[70];
+ char _dinoSpeedForCitadelLevel[16];
+ char _tabletView[12];
+ char _personRoomBankTable[84]; // special character backgrounds for specific rooms
+
+ // Loaded from cryo.dat - Area transition descriptors
+ Goto _gotos[130];
+ object_t _objects[42];
+ uint16 _objectLocations[45];
+ perso_t _persons[58];
+ Citadel _citadelList[7];
+
+ // Loaded from cryo.dat
+ Common::Rect _characterRects[19];
+ byte _characterArray[20][5];
+ Area _areasTable[12];
+ int16 tab_2CEF0[64];
+ int16 tab_2CF70[64];
+ byte _actionCursors[299];
+ byte _mapMode[12];
+ byte _cubeTextureCoords[3][6 * 2 * 3 * 2];
+
+ int32 _translationZ;
+ int8 _zDirection; // 1 (up) or -1 (down)
+
+ // Torch/glow related
+ int16 _torchTick;
+ int16 _glowIndex;
+ int16 _torchCurIndex;
+
+ int _cursCenter;
};
}
diff --git a/engines/cryo/module.mk b/engines/cryo/module.mk
index d0eae378b7..aa9649ff82 100644
--- a/engines/cryo/module.mk
+++ b/engines/cryo/module.mk
@@ -7,7 +7,6 @@ MODULE_OBJS = \
detection.o \
eden.o \
sound.o \
- staticdata.o \
video.o
# This module can be built as a plugin
diff --git a/engines/cryo/staticdata.cpp b/engines/cryo/staticdata.cpp
deleted file mode 100644
index 1184791850..0000000000
--- a/engines/cryo/staticdata.cpp
+++ /dev/null
@@ -1,495 +0,0 @@
-/* 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 "cryo/defs.h"
-#include "cryo/cryolib.h"
-
-namespace Cryo {
-
-Follower followerList[] = {
-// char, X, sx, sy, ex, ey,bank,
- { PersonId::pidGregor, 5, 211, 9, 320, 176, 228, 0, 0 },
- { PersonId::pidEloi, 4, 162, 47, 223, 176, 228, 112, 78 },
- { PersonId::pidDina, 3, 55, 0, 172, 176, 228, 90, 16 },
- { PersonId::pidChongOfChamaar, 4, 0, 5, 114, 176, 229, 0, 16 },
- { PersonId::pidKommalaOfKoto, 3, 0, 15, 102, 176, 229, 0, 16 },
- { PersonId::pidUlanOfUlele, 1, 0, 0, 129, 176, 230, 0, 16 },
- { PersonId::pidCabukaOfCantura, 2, 0, 0, 142, 176, 230, 0, 16 },
- { PersonId::pidFuggOfTamara, 0, 0, 17, 102, 176, 230, 0, 16 },
- { PersonId::pidJabber, 2, 0, 6, 134, 176, 228, 0, 16 },
- { PersonId::pidShazia, 1, 90, 17, 170, 176, 228, 50, 22 },
- { PersonId::pidThugg, 0, 489, 8, 640, 176, 228, 160, 24 },
- { PersonId::pidMungo, 5, 361, 0, 517, 176, 229, 0, 16 },
- { PersonId::pidMonk, 0, 419, 22, 569, 176, 229, 100, 30 },
- { PersonId::pidEve, 1, 300, 28, 428, 176, 229, 0, 38 },
- { -1, -1, -1, -1, -1, -1, -1, -1, -1 }
-};
-
-
-/*
- Labyrinth of Mo
-
- | | | | | | | |
-
-*/
-
-byte kLabyrinthPath[] = {
-// each nibble tells which direction to choose to exit the labyrinth
- 0x11, 0x11, 0x11, 0x22, 0x33, 0x55, 0x25, 0x44, 0x25, 0x11, 0x11, 0x11,
- 0x11, 0x35, 0x55, 0x45, 0x45, 0x44, 0x44, 0x34, 0x44, 0x34, 0x32, 0x52,
- 0x33, 0x23, 0x24, 0x44, 0x24, 0x22, 0x54, 0x22, 0x54, 0x54, 0x44, 0x22,
- 0x22, 0x42, 0x45, 0x22, 0x42, 0x45, 0x35, 0x11, 0x44, 0x34, 0x52, 0x11,
- 0x44, 0x32, 0x55, 0x11, 0x11, 0x33, 0x11, 0x11, 0x53, 0x11, 0x11, 0x53,
- 0x54, 0x24, 0x11, 0x22, 0x25, 0x33, 0x53, 0x54, 0x23, 0x44
-};
-
-char kDinoSpeedForCitaLevel[16] = { 1, 2, 3, 4, 4, 5, 6, 7, 8, 9 };
-
-char kTabletView[] = { //TODO: make as struct?
- // opposite tablet id, video id
- Objects::obUnused10, 83,
- Objects::obUnused10, 84,
- Objects::obTablet4, 85,
- Objects::obTablet3, 86,
- Objects::obTablet6, 87,
- Objects::obTablet5, 85
-};
-
-// special character backgrounds for specific rooms
-char kPersoRoomBankTable[] = {
- // first entry is default bank, then pairs of [roomNum, bankNum], terminated by -1
- 0, 3, 33, -1,
- 21, 17, 35, -1,
- 0, 2, 36, -1,
- 22, 9, 38, 3, 39, -1,
- 23, 8, 40, -1,
- 0, 3, 41, 7, 42, -1,
- 25, -1,
- 27, 17, 45, -1,
- 28, 26, 46, -1,
- 29, 51, 48, -1,
- 30, 53, 49, -1,
- 0, 27, 50, -1,
- 32, 17, 51, -1,
- 52, 2, 52, -1,
- -3, 3, -3, -1,
- 31, -1,
- 24, 6, 43, -1,
- 47, -1,
- 0, 2, 64, -1,
- 54, 3, 54, -1,
- 27, -1,
- 26, 17, 45, -1
-};
-
-// area transition descriptors
-Goto gotos[] = {
-// area, oldarea, vid, time, valleyVid
- { 0, 1, 0, 2, 20 },
- { 0, 1, 162, 3, 168 },
- { 0, 2, 0, 2, 21 },
- { 0, 6, 0, 3, 108 },
- { 0, 9, 151, 3, 0 },
- { 0, 7, 106, 2, 101 },
- { 0, 10, 79, 3, 102 },
- { 0, 12, 0, 3, 0 },
- { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },
- { 1, 3, 58, 2, 104 },
- { 1, 4, 100, 4, 104 },
- { 1, 5, 107, 6, 104 },
- { 1, 6, 155, 8, 104 },
- { 1, 7, 165, 6, 104 },
- { 1, 8, 169, 6, 104 },
- { 1, 10, 111, 2, 104 },
- { 1, 11, 164, 4, 104 },
- { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },
- { 1, 3, 161, 3, 102 },
- { 1, 4, 163, 6, 102 },
- { 1, 5, 157, 9, 102 },
- { 1, 9, 160, 9, 102 },
- { 1, 10, 79, 3, 102 },
- { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },
- { 1, 3, 0, 3, 153 }, // 24
- { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },
- { 3, 1, 154, 2, 103 },
- { 3, 4, 100, 2, 103 },
- { 3, 5, 107, 4, 103 },
- { 3, 6, 155, 6, 103 },
- { 3, 7, 165, 8, 103 },
- { 3, 8, 169, 6, 103 },
- { 3, 10, 111, 4, 103 },
- { 3, 11, 164, 6, 103 },
- { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },
- { 3, 1, 162, 3, 22 },
- { 3, 4, 163, 6, 22 },
- { 3, 5, 157, 9, 22 },
- { 3, 9, 160, 9, 22 },
- { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },
- { 3, 1, 0, 3, 166 }, // 40
- { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },
- { 4, 1, 154, 4, 51 },
- { 4, 3, 58, 2, 51 },
- { 4, 5, 107, 2, 51 },
- { 4, 6, 155, 4, 51 },
- { 4, 7, 165, 6, 51 },
- { 4, 8, 169, 8, 51 },
- { 4, 10, 111, 6, 51 },
- { 4, 11, 164, 8, 51 },
- { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },
- { 4, 1, 162, 3, 109 }, // 51
- { 4, 3, 161, 6, 109 },
- { 4, 5, 157, 9, 109 },
- { 4, 9, 160, 9, 109 },
- { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },
- { 5, 1, 154, 6, 33 },
- { 5, 3, 58, 4, 33 },
- { 5, 4, 100, 2, 33 },
- { 5, 6, 155, 2, 33 },
- { 5, 7, 165, 4, 33 },
- { 5, 8, 169, 8, 33 },
- { 5, 10, 111, 8, 33 },
- { 5, 11, 164, 8, 33 },
- { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },
- { 5, 1, 162, 3, 99 }, // 65
- { 5, 3, 161, 6, 99 },
- { 5, 4, 163, 9, 99 },
- { 5, 9, 160, 9, 99 },
- { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },
- { 9, 1, 162, 3, 167 }, // 70
- { 9, 3, 161, 6, 167 },
- { 9, 4, 163, 9, 167 },
- { 9, 5, 157, 9, 167 },
- { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },
- { 6, 1, 154, 8, 105 }, // 75
- { 6, 3, 58, 6, 105 },
- { 6, 4, 100, 4, 105 },
- { 6, 5, 107, 2, 105 },
- { 6, 7, 165, 2, 105 },
- { 6, 8, 169, 10, 105 },
- { 6, 10, 111, 6, 105 },
- { 6, 11, 164, 8, 105 },
- { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },
- { 7, 1, 154, 4, 158 }, // 84
- { 7, 3, 58, 6, 158 },
- { 7, 4, 100, 6, 158 },
- { 7, 5, 107, 4, 158 },
- { 7, 6, 155, 2, 158 },
- { 7, 8, 169, 8, 158 },
- { 7, 10, 111, 4, 158 },
- { 7, 11, 164, 6, 158 },
- { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },
- { 8, 1, 154, 2, 159 }, // 93
- { 8, 3, 58, 4, 159 },
- { 8, 4, 100, 6, 159 },
- { 8, 5, 107, 8, 159 },
- { 8, 6, 155, 10, 159 },
- { 8, 7, 165, 8, 159 },
- { 8, 10, 111, 6, 159 },
- { 8, 11, 164, 4, 159 },
- { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },
- { 10, 1, 154, 2, 77 }, // 102
- { 10, 3, 58, 4, 77 },
- { 10, 4, 100, 6, 77 },
- { 10, 5, 107, 8, 77 },
- { 10, 6, 155, 6, 77 },
- { 10, 7, 165, 4, 77 },
- { 10, 8, 169, 6, 77 },
- { 10, 11, 164, 4, 77 },
- { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },
- { 11, 1, 154, 2, 80 }, // 111
- { 11, 3, 58, 4, 80 },
- { 11, 4, 100, 6, 80 },
- { 11, 5, 107, 8, 80 },
- { 11, 6, 155, 8, 80 },
- { 11, 7, 165, 6, 80 },
- { 11, 8, 169, 2, 80 },
- { 11, 10, 111, 4, 80 },
- { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },
- { 12, 1, 154, 8, 56 }, // 120
- { 12, 3, 58, 4, 56 },
- { 12, 4, 100, 4, 56 },
- { 12, 5, 107, 6, 56 },
- { 12, 6, 155, 8, 56 },
- { 12, 7, 165, 10, 56 },
- { 12, 8, 169, 4, 56 },
- { 12, 10, 111, 10, 56 },
- { 12, 11, 164, 6, 56 },
- { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },
-};
-
-object_t _objects[] = {
- //id,fl,loc,masklow,maskhi,ct
- { 1, 0, 3, 1, 0, 0}, // Eve's Way Stone
- { 2, 0, 3, 2, 0, 0}, // Thau's Seashell
- { 3, 0, 3, 4, 0, 0}, // Talisman of bravery
- { 4, 0, 3, 8, 0, 0}, // An old tooth. Very old! Whoever lost it most certainly has no further use for it!
- { 5, 0, 0, 0x10, 0, 0}, // Prism
- { 6, 0, 3, 0, 0, 0}, // Flute
- { 7, 0, 3, 0x4000, 0, 0}, // Apple
- { 8, 0, 4, 0x1000, 0, 0}, // Egg of Destiny
- { 9, 0, 3, 0x800, 0, 0}, // Root
- { 10, 0, 3, 0, 0, 0}, // ???
- { 11, 0, 6, 0, 0, 0}, // Mushroom
- { 12, 0, 13, 0, 0, 0}, // Poisonous Mushroom
- { 13, 0, 2, 0x400, 0, 0}, // Graa's Knife
- { 14, 0, 22, 0, 0, 0}, // Empty Nest
- { 15, 0, 26, 0, 0, 0}, // Full Nest
- { 16, 0, 33, 0x20, 0, 0}, // Gold
- { 17, 0, 3, 0, 0, 0}, // Sign of Shadow Mistress (moon stone)
- { 18, 0, 3, 0, 0, 0}, // Sign of Mother of all (bag of soil)
- { 19, 0, 40, 0, 0, 0}, // Sign of the life-giving (sun star)
- { 20, 0, 20, 0x200, 0, 0}, // King's Horn
- { 21, 0, 3, 0, 0, 0}, // Golden Sword of Mashaar
- // Masks
- { 22, 0, 3, 0x40, 0, 0}, // Mask of Death
- { 23, 0, 3, 0x80, 0, 0}, // Mask of Bonding
- { 24, 0, 3, 0x100, 0, 0}, // Mask of Birth
- // Objects of power
- { 25, 0, 3, 0, 1, 0}, // Eye in the Storm
- { 26, 0, 3, 0, 2, 0}, // Sky Hammer
- { 27, 0, 3, 0, 4, 0}, // Fire in the Clouds
- { 28, 0, 3, 0, 8, 0}, // Within and Without
- { 29, 0, 3, 0, 0x10, 0}, // Eye in the Cyclone
- { 30, 0, 3, 0, 0x20, 0}, // River that Winds
- // Musical instruments
- { 31, 0, 3, 0, 0x40, 0}, // Trumpet
- { 32, 0, 3, 0, 0x80, 0}, // -- unused (but still has a dialog line)
- { 33, 0, 3, 0, 0x100, 0}, // Drum
- { 34, 0, 3, 0, 0x200, 0}, // -- unused (but still has a dialog line)
- { 35, 0, 3, 0, 0x400, 0}, // -- unused (but still has a dialog line)
- { 36, 0, 3, 0, 0x800, 0}, // Ring
- // Tablets
- { 37, 0, 3, 0, 0, 0}, // Tablet #1 (Mo)
- { 38, 0, 42, 0x2000, 0, 0}, // Tablet #2 (Morkus' Lair)
- { 39, 0, 3, 0, 0, 0}, // Tablet #3 (White Arch?)
- { 40, 0, 3, 0, 0, 0}, // Tablet #4
- { 41, 0, 3, 0, 0, 0}, // Tablet #5
- { 42, 0, 3, 0x8000, 0, 0} // Tablet #6 (Castra)
-};
-
-uint16 kObjectLocations[100] = {
- 0x112, 0xFFFF,
- 0x202, 0xFFFF,
- 0x120, 0xFFFF,
- 0x340, 0x44B, 0x548, 0x640, 0x717, 0x830, 0xFFFF,
- 0x340, 0x44B, 0x548, 0x640, 0x717, 0x830, 0xFFFF,
- 0, 0xFFFF,
- 0x344, 0x53A, 0x831, 0xFFFF,
- 0x331, 0x420, 0x54B, 0x637, 0x716, 0x840, 0xFFFF,
- 0x834A, 0x8430, 0x8531, 0x644, 0x745, 0x838, 0xFFFF,
- 0x510, 0xFFFF,
- 0xC04, 0xFFFF,
- 0xFFFF
-};
-
-perso_t kPersons[] = {
- // room, aid, party mask, id, flags, X,bank,X, X,sprId,sprX,speed, X
- { 0x103, 230, PersonMask::pmGregor, PersonId::pidGregor , 0, 0, 1, 0, 0, 0, 0, 0, 0 },
- { 0x116, 231, PersonMask::pmDina , PersonId::pidDina , 0, 4, 2, 0, 0, 3, 9, 0, 0 },
- { 0x202, 232, PersonMask::pmTau , PersonId::pidTau , 0, 8, 3, 0, 0, 0, 0, 0, 0 },
- { 0x109, 233, PersonMask::pmMonk , PersonId::pidMonk , 0, 12, 4, 0, 0, 6, 52, 0, 0 },
- { 0x108, 234, PersonMask::pmJabber, PersonId::pidJabber , 0, 18, 5, 0, 0, 2, 0, 0, 0 },
- { 0x103, 235, PersonMask::pmEloi , PersonId::pidEloi , 0, 22, 6, 0, 0, 4, 20, 0, 0 },
- { 0x301, 236, PersonMask::pmMungo , PersonId::pidMungo , 0, 28, 8, 0, 0, 11, 45, 0, 0 },
- { 0x628, 237, PersonMask::pmEve , PersonId::pidEve , 0, 30, 10, 0, 0, 7, 35, 0, 0 },
- { 0x81A, 238, PersonMask::pmShazia, PersonId::pidShazia , 0, 34, 11, 0, 0, 1, 11, 0, 0 },
- { 0x330, 239, PersonMask::pmLeader, PersonId::pidChongOfChamaar , 0, 38, 13, 0, 0, 10, 0, 0, 0 },
- { 0x41B, 239, PersonMask::pmLeader, PersonId::pidUlanOfUlele , 0, 46, 15, 0, 0, 13, 0, 0, 0 },
- { 0x53B, 239, PersonMask::pmLeader, PersonId::pidKommalaOfKoto , 0, 42, 14, 0, 0, 9, 0, 0, 0 },
- { 0x711, 239, PersonMask::pmLeader, PersonId::pidCabukaOfCantura , 0, 50, 16, 0, 0, 14, 0, 0, 0 },
- { 0xA02, 239, PersonMask::pmLeader, PersonId::pidMarindaOfEmbalmers, 0, 54, 17, 0, 0, 0, 0, 0, 0 },
- { 0x628, 239, PersonMask::pmLeader, PersonId::pidFuggOfTamara , 0, 62, 18, 0, 0, 12, 0, 0, 0 },
- { 0x801, 239, PersonMask::pmLeader, PersonId::pidChongOfChamaar , 0, 38, 13, 0, 0, 10, 0, 0, 0 },
- { 0x41B, 10, PersonMask::pmQuest , PersonId::pidUlanOfUlele , PersonFlags::pfType2 , 46, 15, 0, 0, 13, 0, 0, 0 },
- { 0x711, 11, PersonMask::pmQuest , PersonId::pidCabukaOfCantura , PersonFlags::pfType2 , 50, 16, 0, 0, 14, 0, 0, 0 },
- { 0x106, 240, PersonMask::pmThugg , PersonId::pidThugg , 0, 64, 7, 0, 0, 0, 61, 0, 0 },
- { 0, 13, 0, PersonId::pidNarrator , 0, 68, 12, 0, 0, 0, 0, 0, 0 },
- { 0x902, 241, PersonMask::pmQuest , PersonId::pidNarrim , 0, 70, 19, 0, 0, 0, 0, 0, 0 },
- { 0xC03, 244, PersonMask::pmMorkus, PersonId::pidMorkus , 0, 74, 20, 0, 0, 0, 0, 0, 0 },
- // dinos in each valley
- { 0x332, 242, PersonMask::pmDino , PersonId::pidDinosaur , PersonFlags::pfType8 , 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0x329, 242, PersonMask::pmDino , PersonId::pidDinosaur , PersonFlags::pfType8 , 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0x33B, 242, PersonMask::pmDino , PersonId::pidDinosaur , PersonFlags::pf80 | PersonFlags::pftTriceraptor , 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0x317, 242, PersonMask::pmDino , PersonId::pidDinosaur , PersonFlags::pf80 | PersonFlags::pftVelociraptor, 0, 0, 0, 0, 0, 0, 1, 0 },
- { 0x320, 242, PersonMask::pmDino , PersonId::pidDinosaur , PersonFlags::pfType12 , 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0x349, 242, PersonMask::pmDino , PersonId::pidDinosaur , PersonFlags::pf80 | PersonFlags::pftMosasaurus , 0, 0, 0, 0, 0, 0, 0, 0 },
-
- { 0x429, 242, PersonMask::pmDino , PersonId::pidDinosaur , PersonFlags::pfType8 , 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0x43B, 242, PersonMask::pmDino , PersonId::pidDinosaur , PersonFlags::pf80 | PersonFlags::pftTriceraptor , 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0x422, 242, PersonMask::pmDino , PersonId::pidDinosaur , PersonFlags::pf80 | PersonFlags::pftVelociraptor, 0, 0, 0, 0, 0, 0, 1, 0 },
- { 0x432, 242, PersonMask::pmDino , PersonId::pidDinosaur , PersonFlags::pf80 | PersonFlags::pftMosasaurus , 0, 0, 0, 0, 0, 0, 0, 0 },
-
- { 0x522, 242, PersonMask::pmDino , PersonId::pidDinosaur , PersonFlags::pfType8 , 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0x534, 242, PersonMask::pmDino , PersonId::pidDinosaur , PersonFlags::pf80 | PersonFlags::pftTriceraptor , 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0x515, 242, PersonMask::pmDino , PersonId::pidDinosaur , PersonFlags::pftVelociraptor , 0, 0, 0, 0, 0, 0, 1, 0 },
- { 0x533, 242, PersonMask::pmDino , PersonId::pidDinosaur , PersonFlags::pf80 | PersonFlags::pftMosasaurus , 0, 0, 0, 0, 0, 0, 0, 0 },
-
- { 0x622, 242, PersonMask::pmDino , PersonId::pidDinosaur , PersonFlags::pfType8 , 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0x630, 242, PersonMask::pmDino , PersonId::pidDinosaur , PersonFlags::pf80 | PersonFlags::pftTriceraptor , 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0x643, 242, PersonMask::pmDino , PersonId::pidDinosaur , PersonFlags::pf80 | PersonFlags::pftVelociraptor, 0, 0, 0, 0, 0, 0, 1, 0 },
- { 0x63A, 242, PersonMask::pmDino , PersonId::pidDinosaur , PersonFlags::pf80 | PersonFlags::pftMosasaurus , 0, 0, 0, 0, 0, 0, 0, 0 },
-
- { 0x737, 242, PersonMask::pmDino , PersonId::pidDinosaur , PersonFlags::pfType8 , 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0x739, 242, PersonMask::pmDino , PersonId::pidDinosaur , PersonFlags::pf80 | PersonFlags::pftTriceraptor , 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0x74A, 242, PersonMask::pmDino , PersonId::pidDinosaur , PersonFlags::pf80 | PersonFlags::pftVelociraptor, 0, 0, 0, 0, 0, 0, 1, 0 },
- { 0x726, 242, PersonMask::pmDino , PersonId::pidDinosaur , PersonFlags::pf80 | PersonFlags::pftMosasaurus , 0, 0, 0, 0, 0, 0, 0, 0 },
-
- { 0x842, 242, PersonMask::pmDino , PersonId::pidDinosaur , PersonFlags::pf80 | PersonFlags::pfType8 , 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0x822, 242, PersonMask::pmDino , PersonId::pidDinosaur , PersonFlags::pf80 | PersonFlags::pftTriceraptor , 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0x828, 242, PersonMask::pmDino , PersonId::pidDinosaur , PersonFlags::pftVelociraptor , 0, 0, 0, 0, 0, 0, 1, 0 },
- { 0x84B, 242, PersonMask::pmDino , PersonId::pidDinosaur , PersonFlags::pf80 | PersonFlags::pftMosasaurus , 0, 0, 0, 0, 0, 0, 0, 0 },
-
- { 0xB03, 242, PersonMask::pmDino , PersonId::pidDinosaur , PersonFlags::pfType8 , 58, 252, 0, 0, 0, 0, 0, 0 },
- // enemy dinos
- { 0x311, 243, PersonMask::pmEnemy , PersonId::pidEnemy , PersonFlags::pf80 | PersonFlags::pftTyrann , 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0x410, 243, PersonMask::pmEnemy , PersonId::pidEnemy , PersonFlags::pf80 | PersonFlags::pftTyrann , 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0x51B, 243, PersonMask::pmEnemy , PersonId::pidEnemy , PersonFlags::pf80 | PersonFlags::pftTyrann , 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0x618, 243, PersonMask::pmEnemy , PersonId::pidEnemy , PersonFlags::pf80 | PersonFlags::pftTyrann , 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0x71B, 243, PersonMask::pmEnemy , PersonId::pidEnemy , PersonFlags::pf80 | PersonFlags::pftTyrann , 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0x81B, 243, PersonMask::pmEnemy , PersonId::pidEnemy , PersonFlags::pf80 | PersonFlags::pftTyrann , 0, 0, 0, 0, 0, 0, 0, 0 },
- { 0xFFFF, 0xFFFF, 0xFFFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFFFF, 0xFFFF, 0xFF, 0xFF, 0xFF, 0xFF},
- { 0x628, 237, PersonMask::pmEve , PersonId::pidEve , 0, 80, 9, 0, 0, 8, 35, 0, 0 },
- { 0x628, 237, PersonMask::pmEve , PersonId::pidEve , 0, 78, 10, 0, 0, 7, 35, 0, 0 }
-};
-
-Citadel _citadelList[] = {
- { 1, { 163, 182, 0, 0, 124, 147, 193, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0 } },
- { 48, { 285, 286, 0, 0, 287, 288, 284, 0 }, { 114, 115, 0, 0, 116, 117, 113, 0 } },
- { 63, { 290, 291, 0, 0, 292, 293, 289, 0 }, { 119, 120, 0, 0, 121, 122, 118, 0 } },
- { 95, { 295, 296, 0, 0, 297, 298, 294, 0 }, { 124, 125, 0, 0, 126, 127, 123, 0 } },
- { 127, { 300, 301, 0, 0, 302, 303, 299, 0 }, { 129, 130, 0, 0, 131, 132, 128, 0 } },
- { 159, { 305, 306, 0, 0, 307, 308, 304, 0 }, { 134, 135, 0, 0, 136, 137, 133, 0 } },
- { 255, { 310, 311, 0, 0, 312, 313, 309, 0 }, { 139, 140, 0, 0, 141, 142, 138, 0 } }
-};
-
-prect_t _characterRects[] = { //TODO: just an array of int16s?
- { 93, 69, 223, 176},
- { 102, 86, 162, 126},
- { 88, 103, 168, 163},
- { 116, 66, 192, 176},
- { 129, 92, 202, 153},
- { 60, 95, 160, 176},
- { 155, 97, 230, 145},
- { 100, 77, 156, 145},
- { 110, 78, 170, 156},
- { 84, 76, 166, 162},
- { 57, 77, 125, 114},
- { 93, 69, 223, 175},
- { 93, 69, 223, 176},
- { 93, 69, 223, 176},
- { 154, 54, 245, 138},
- { 200, 50, 261, 116},
- { 70, 84, 162, 176},
- { 125, 101, 222, 172},
- { 188, 83, 251, 158}
-};
-
-byte _characterArray[][5] = { //TODO: struc?
- { 8, 15, 23, 25, 0xFF},
- { 0, 9, 0xFF },
- { 0, 9, 0xFF },
- { 0, 9, 0xFF },
- { 0, 13, 0xFF },
- { 16, 21, 0xFF },
- { 11, 20, 0xFF },
- { 0, 12, 0xFF },
- { 0, 9, 0xFF },
- { 0, 9, 0xFF },
- { 5, 13, 0xFF },
- { 0xFF },
- { 0, 8, 0xFF },
- { 0xFF },
- { 0, 7, 0xFF },
- { 0, 8, 0xFF },
- { 8, 12, 0xFF },
- { 0, 5, 0xFF },
- { 0, 4, 0xFF },
- { 0xFF }
-};
-
-Area kAreasTable[] = {
- { Areas::arMo , AreaType::atCitadel, 0, 0, 0, 1, 0, 0},
- { Areas::arTausCave , AreaType::atCave , 0, 112, 0, 2, 0, 0},
- { Areas::arChamaar , AreaType::atValley , 0, 133, 0, 3, 0, 0},
- { Areas::arUluru , AreaType::atValley , 0, 187, 0, 4, 0, 0},
- { Areas::arKoto , AreaType::atValley , AreaFlags::HasVelociraptors, 236, 0, 5, 0, 0},
- { Areas::arTamara , AreaType::atValley , 0, 288, 0, 6, 0, 0},
- { Areas::arCantura , AreaType::atValley , 0, 334, 0, 7, 0, 0},
- { Areas::arShandovra , AreaType::atValley , 0, 371, 0, 8, 0, 0},
- { Areas::arNarimsCave , AreaType::atCave , 0, 115, 0, 9, 0, 0},
- { Areas::arEmbalmersCave, AreaType::atCave , 0, 118, 0, 10, 0, 0},
- { Areas::arWhiteArch , AreaType::atCave , 0, 122, 0, 11, 0, 0},
- { Areas::arMoorkusLair , AreaType::atCave , 0, 127, 0, 12, 0, 0}
-};
-
-int16 tab_2CEF0[64] = {
- 25, 257, 0, 0, 37, 258, 38, 259, 0, 0, 24, 260, 0, 0, 0, 0,
- 0, 0, 53, 265, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 39, 261, 0, 0, 40, 262, 62, 263, 0, 0, 63, 264, 0, 0, 0, 0,
- 18, 275, 0, 0, 35, 254, 36, 255, 19, 318, 23, 256, 0, 0, 0, 0
-};
-
-int16 tab_2CF70[64] = {
- 65, 266, 0, 0, 66, 267, 67, 268, 0, 0, 68, 269, 0, 0, 0, 0,
- 0, 0, 73, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 69, 270, 0, 0, 70, 271, 71, 272, 0, 0, 72, 273, 0, 0, 0, 0,
- 18, 275, 0, 0, 35, 254, 36, 255, 19, 318, 23, 256, 0, 0, 0, 0,
-};
-
-int16 kActionCursors[299] = {
- 3, 1, 2, 4, 5, 5, 5, 0, 5, 5,
- 5, 5, 5, 3, 2, 5, 5, 5, 3, 2,
- 4, 5, 7, 7, 4, 5, 5, 0, 0, 0,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 0, 0, 0, 0, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 0, 0,
- 0, 0, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 0, 0, 0, 0, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 0, 5, 6,
- 6, 1, 6, 6, 0, 0, 6, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 6, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 0, 0, 6, 6,
- 53, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0
-};
-
-float _translationZ = -3400;
-float flt_2DF80 = -3400;
-float flt_2DF84 = 200;
-
-} // End of namespace Cryo