aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrian Frühwirth2018-01-27 21:22:58 +0100
committerAdrian Frühwirth2018-03-21 16:47:10 +0100
commit0749507a3401452a23a16477e05dcc2bc2f93f30 (patch)
treeaa778ece36dce34e50d914ba3651170722ce5634
parent8ba85bc7b0abfff8bce27fcf413d3e0405683b2d (diff)
downloadscummvm-rg350-0749507a3401452a23a16477e05dcc2bc2f93f30.tar.gz
scummvm-rg350-0749507a3401452a23a16477e05dcc2bc2f93f30.tar.bz2
scummvm-rg350-0749507a3401452a23a16477e05dcc2bc2f93f30.zip
TUCKER: Add Location enum
-rw-r--r--engines/tucker/locations.cpp14
-rw-r--r--engines/tucker/resource.cpp56
-rw-r--r--engines/tucker/saveload.cpp38
-rw-r--r--engines/tucker/sequences.cpp38
-rw-r--r--engines/tucker/tucker.cpp141
-rw-r--r--engines/tucker/tucker.h103
6 files changed, 250 insertions, 140 deletions
diff --git a/engines/tucker/locations.cpp b/engines/tucker/locations.cpp
index 1e41dca3e4..d78eacc55d 100644
--- a/engines/tucker/locations.cpp
+++ b/engines/tucker/locations.cpp
@@ -217,7 +217,7 @@ void TuckerEngine::execData3PreUpdate_locationNum2Helper() {
return;
}
int start, end;
- if (_locationNum == 2) {
+ if (_location == kLocationBackAlley) {
start = 116;
end = 125;
} else {
@@ -2050,8 +2050,8 @@ void TuckerEngine::execData3PreUpdate_locationNum41() {
if (_panelLockedFlag && _yPosCurrent > 130 && _selectedObject._yPos > 135 && _nextAction == 0 && _flagsTable[223] == 0) {
_panelLockedFlag = false;
_csDataLoaded = false;
- _nextLocationNum = 0;
- _selectedObject._locationObjectLocationNum = 0;
+ _nextLocation = kLocationNone;
+ _selectedObject._locationObjectLocation = kLocationNone;
_locationMaskType = 0;
_nextAction = _flagsTable[163] + 32;
++_flagsTable[163];
@@ -2482,7 +2482,7 @@ void TuckerEngine::updateSprite_locationNum58(int i) {
void TuckerEngine::execData3PreUpdate_locationNum58() {
// workaround original game glitch #2872348: do not change position on location change
- if (_nextLocationNum == 0 && _flagsTable[190] < 3 && _xPosCurrent > 310) {
+ if (_nextLocation == kLocationNone && _flagsTable[190] < 3 && _xPosCurrent > 310) {
_xPosCurrent = 310;
_panelLockedFlag = false;
}
@@ -2903,15 +2903,15 @@ void TuckerEngine::execData3PreUpdate_locationNum66() {
// To work around this we only trigger Violet if Bud actually _walked_ past
// the trigger coordinates (as opposed to using the map).
// Fixes Trac#10452.
- if (_nextLocationNum != 0)
+ if (_nextLocation != kLocationNone)
return;
_flagsTable[137] = 0;
if (_xPosCurrent > 583 && _flagsTable[191] == 0 && _nextAction == 0 && _locationMaskType == 0) {
_panelLockedFlag = false;
_csDataLoaded = false;
- _nextLocationNum = 0;
- _selectedObject._locationObjectLocationNum = 0;
+ _nextLocation = kLocationNone;
+ _selectedObject._locationObjectLocation = kLocationNone;
if (_flagsTable[131] == 0) {
_nextAction = 13;
} else if (_flagsTable[130] == 0) {
diff --git a/engines/tucker/resource.cpp b/engines/tucker/resource.cpp
index 1159882381..5d7ae2c2d5 100644
--- a/engines/tucker/resource.cpp
+++ b/engines/tucker/resource.cpp
@@ -491,36 +491,36 @@ void TuckerEngine::loadCTable02() {
void TuckerEngine::loadLoc() {
Common::String filename;
- int i = _locationWidthTable[_locationNum];
- _locationHeight = (_locationNum < 73) ? 140 : 200;
- filename = Common::String::format((i == 1) ? "loc%02d.pcx" : "loc%02da.pcx", _locationNum);
+ int i = _locationWidthTable[_location];
+ _locationHeight = (_location < kLocationJesusCutscene1) ? 140 : 200;
+ filename = Common::String::format((i == 1) ? "loc%02d.pcx" : "loc%02da.pcx", _location);
copyLocBitmap(filename.c_str(), 0, false);
Graphics::copyRect(_quadBackgroundGfxBuf, 320, _locationBackgroundGfxBuf, 640, 320, _locationHeight);
if (_locationHeight == 200) {
return;
}
- filename = Common::String::format((i != 2) ? "path%02d.pcx" : "path%02da.pcx", _locationNum);
+ filename = Common::String::format((i != 2) ? "path%02d.pcx" : "path%02da.pcx", _location);
copyLocBitmap(filename.c_str(), 0, true);
if (i > 1) {
- filename = Common::String::format("loc%02db.pcx", _locationNum);
+ filename = Common::String::format("loc%02db.pcx", _location);
copyLocBitmap(filename.c_str(), 320, false);
Graphics::copyRect(_quadBackgroundGfxBuf + 44800, 320, _locationBackgroundGfxBuf + 320, 640, 320, _locationHeight);
if (i == 2) {
- filename = Common::String::format("path%02db.pcx", _locationNum);
+ filename = Common::String::format("path%02db.pcx", _location);
copyLocBitmap(filename.c_str(), 320, true);
}
}
if (i > 2) {
- filename = Common::String::format("loc%02dc.pcx", _locationNum);
+ filename = Common::String::format("loc%02dc.pcx", _location);
copyLocBitmap(filename.c_str(), 0, false);
Graphics::copyRect(_quadBackgroundGfxBuf + 89600, 320, _locationBackgroundGfxBuf, 640, 320, 140);
}
- if (_locationNum == 1) {
+ if (_location == kLocationHotelRoom) {
_loadLocBufPtr = _quadBackgroundGfxBuf + 89600;
loadImage("rochpath.pcx", _loadLocBufPtr, 0);
}
if (i > 3) {
- filename = Common::String::format("loc%02dd.pcx", _locationNum);
+ filename = Common::String::format("loc%02dd.pcx", _location);
copyLocBitmap(filename.c_str(), 0, false);
Graphics::copyRect(_quadBackgroundGfxBuf + 134400, 320, _locationBackgroundGfxBuf + 320, 640, 320, 140);
}
@@ -528,13 +528,15 @@ void TuckerEngine::loadLoc() {
}
void TuckerEngine::loadObj() {
- if (_locationNum == 99) {
+ if (_location == kLocationMap) {
return;
}
- if (_locationNum < 24) {
+ if (_location <= kLocationWarehouseCutscene) {
_part = kPartOne;
_speechSoundBaseNum = 2639;
- } else if (_locationNum < 41 || (_locationNum > 69 && _locationNum < 73) || (_locationNum > 78 && _locationNum < 83)) {
+ } else if (( _location <= kLocationFarDocks)
+ || (_location >= kLocationComputerScreen && _location <= kLocationSeedyStreetCutscene)
+ || (_location >= kLocationElvisCutscene && _location <= kLocationJesusCutscene2)) {
_part = kPartTwo;
_speechSoundBaseNum = 2679;
} else {
@@ -544,7 +546,7 @@ void TuckerEngine::loadObj() {
if (_part == _currentPart) {
return;
}
- debug(2, "loadObj() part %d locationNum %d", _part, _locationNum);
+ debug(2, "loadObj() part %d location %d", _part, _location);
// If a savegame is loaded from the launcher, skip the display chapter
if (_startSlot != -1)
_startSlot = -1;
@@ -631,7 +633,7 @@ void TuckerEngine::loadData3() {
loadFile("data3.c", _loadTempBuf);
DataTokenizer t(_loadTempBuf, _fileLoadSize);
_locationAnimationsCount = 0;
- if (t.findIndex(_locationNum)) {
+ if (t.findIndex(_location)) {
while (t.findNextToken(kDataTokenDw)) {
int num = t.getNextInteger();
if (num < 0) {
@@ -678,7 +680,7 @@ void TuckerEngine::loadData4() {
_displayGameHints = t.getNextInteger() != 0;
}
_locationObjectsCount = 0;
- if (t.findIndex(_locationNum)) {
+ if (t.findIndex(_location)) {
while (t.findNextToken(kDataTokenDw)) {
int i = t.getNextInteger();
if (i < 0)
@@ -694,8 +696,8 @@ void TuckerEngine::loadData4() {
d->_standY = t.getNextInteger();
d->_textNum = t.getNextInteger();
d->_cursorStyle = (CursorStyle)t.getNextInteger();
- d->_locationNum = t.getNextInteger();
- if (d->_locationNum > 0) {
+ d->_location = (Location)t.getNextInteger();
+ if (d->_location != kLocationNone) {
d->_toX = t.getNextInteger();
d->_toY = t.getNextInteger();
d->_toX2 = t.getNextInteger();
@@ -720,7 +722,7 @@ void TuckerEngine::loadActionFile() {
DataTokenizer t(_loadTempBuf, _fileLoadSize);
_actionsCount = 0;
- if (t.findIndex(_locationNum)) {
+ if (t.findIndex(_location)) {
while (t.findNextToken(kDataTokenDw)) {
int keyA = t.getNextInteger();
if (keyA < 0) {
@@ -753,7 +755,7 @@ void TuckerEngine::loadCharPos() {
loadFile("charpos.c", _loadTempBuf);
DataTokenizer t(_loadTempBuf, _fileLoadSize);
_charPosCount = 0;
- if (t.findIndex(_locationNum)) {
+ if (t.findIndex(_location)) {
while (t.findNextToken(kDataTokenDw)) {
const int i = t.getNextInteger();
if (i < 0) {
@@ -813,9 +815,9 @@ void TuckerEngine::loadCharPos() {
void TuckerEngine::loadSprA02_01() {
unloadSprA02_01();
- const int count = _sprA02LookupTable[_locationNum];
+ const int count = _sprA02LookupTable[_location];
for (int i = 1; i < count + 1; ++i) {
- Common::String filename = Common::String::format("sprites/a%02d_%02d.spr", _locationNum, i);
+ Common::String filename = Common::String::format("sprites/a%02d_%02d.spr", _location, i);
_sprA02Table[i] = loadFile(filename.c_str(), 0);
}
_sprA02Table[0] = _sprA02Table[1];
@@ -831,13 +833,13 @@ void TuckerEngine::unloadSprA02_01() {
void TuckerEngine::loadSprC02_01() {
unloadSprC02_01();
- const int count = _sprC02LookupTable[_locationNum];
+ const int count = _sprC02LookupTable[_location];
for (int i = 1; i < count + 1; ++i) {
- Common::String filename = Common::String::format("sprites/c%02d_%02d.spr", _locationNum, i);
+ Common::String filename = Common::String::format("sprites/c%02d_%02d.spr", _location, i);
_sprC02Table[i] = loadFile(filename.c_str(), 0);
}
_sprC02Table[0] = _sprC02Table[1];
- _spritesCount = _sprC02LookupTable2[_locationNum];
+ _spritesCount = _sprC02LookupTable2[_location];
for (int i = 0; i < kMaxCharacters; ++i) {
memset(&_spritesTable[i], 0, sizeof(Sprite));
_spritesTable[i]._state = -1;
@@ -856,7 +858,7 @@ void TuckerEngine::unloadSprC02_01() {
void TuckerEngine::loadFx() {
loadFile("fx.c", _loadTempBuf);
DataTokenizer t(_loadTempBuf, _fileLoadSize);
- if (t.findIndex(_locationNum)) {
+ if (t.findIndex(_location)) {
t.findNextToken(kDataTokenDw);
_locationSoundsCount = t.getNextInteger();
_currentFxSet = 0;
@@ -927,7 +929,7 @@ void TuckerEngine::loadFx() {
}
}
} else {
- error("loadFx() - Index not found for location %d", _locationNum);
+ error("loadFx() - Index not found for location %d", _location);
}
}
@@ -983,7 +985,7 @@ void TuckerEngine::loadActionsTable() {
do {
if (!_csDataLoaded) {
DataTokenizer t(_csDataBuf, _csDataSize);
- bool found = t.findIndex(_locationNum);
+ bool found = t.findIndex(_location);
assert(found);
for (int i = 0; i < _nextAction; ++i) {
found = t.findNextToken(kDataTokenDw);
diff --git a/engines/tucker/saveload.cpp b/engines/tucker/saveload.cpp
index 3abe645acb..7e78f24978 100644
--- a/engines/tucker/saveload.cpp
+++ b/engines/tucker/saveload.cpp
@@ -50,36 +50,44 @@ Common::String generateGameStateFileName(const char *target, int slot, bool pref
return name;
}
-static void saveOrLoadInt(Common::WriteStream &stream, int &i) {
+static void saveOrLoadVar(Common::WriteStream &stream, int &i) {
stream.writeSint32LE(i);
}
-static void saveOrLoadInt(Common::ReadStream &stream, int &i) {
+static void saveOrLoadVar(Common::ReadStream &stream, int &i) {
i = stream.readSint32LE();
}
+static void saveOrLoadVar(Common::WriteStream &stream, Location &location) {
+ stream.writeSint32LE((int)location);
+}
+
+static void saveOrLoadVar(Common::ReadStream &stream, Location &location) {
+ location = (Location)stream.readSint32LE();
+}
+
template<class S>
TuckerEngine::SavegameError TuckerEngine::saveOrLoadGameStateData(S &s) {
for (int i = 0; i < kFlagsTableSize; ++i) {
- saveOrLoadInt(s, _flagsTable[i]);
+ saveOrLoadVar(s, _flagsTable[i]);
}
for (int i = 0; i < 40; ++i) {
- saveOrLoadInt(s, _inventoryObjectsList[i]);
+ saveOrLoadVar(s, _inventoryObjectsList[i]);
}
for (int i = 0; i < 50; ++i) {
- saveOrLoadInt(s, _inventoryItemsState[i]);
+ saveOrLoadVar(s, _inventoryItemsState[i]);
}
for (int i = 0; i < 50; ++i) {
- saveOrLoadInt(s, _panelObjectsOffsetTable[i]);
+ saveOrLoadVar(s, _panelObjectsOffsetTable[i]);
}
- saveOrLoadInt(s, _mainSpritesBaseOffset);
- saveOrLoadInt(s, _selectedObject._xPos);
- saveOrLoadInt(s, _selectedObject._yPos);
- saveOrLoadInt(s, _locationNum);
- saveOrLoadInt(s, _xPosCurrent);
- saveOrLoadInt(s, _yPosCurrent);
- saveOrLoadInt(s, _inventoryObjectsCount);
- saveOrLoadInt(s, _inventoryObjectsOffset);
+ saveOrLoadVar(s, _mainSpritesBaseOffset);
+ saveOrLoadVar(s, _selectedObject._xPos);
+ saveOrLoadVar(s, _selectedObject._yPos);
+ saveOrLoadVar(s, _location);
+ saveOrLoadVar(s, _xPosCurrent);
+ saveOrLoadVar(s, _yPosCurrent);
+ saveOrLoadVar(s, _inventoryObjectsCount);
+ saveOrLoadVar(s, _inventoryObjectsOffset);
return s.err() ? kSavegameIoError : kSavegameNoError;
}
@@ -121,7 +129,7 @@ Common::Error TuckerEngine::loadGameState(int slot) {
g_engine->setTotalPlayTime(header.playTime * 1000);
- _nextLocationNum = _locationNum;
+ _nextLocation = _location;
setBlackPalette();
loadBudSpr();
_forceRedrawPanelItems = true;
diff --git a/engines/tucker/sequences.cpp b/engines/tucker/sequences.cpp
index b056facade..998183e99e 100644
--- a/engines/tucker/sequences.cpp
+++ b/engines/tucker/sequences.cpp
@@ -50,13 +50,13 @@ void TuckerEngine::handleCreditsSequence() {
int counter3 = 0;
int num = 0;
int imgNum = 0;
- int prevLocationNum = _locationNum;
+ Location prevLocation = _location;
int counter2 = 0;
int counter1 = 0;
loadCharset2();
showCursor(false);
stopSounds();
- _locationNum = 74;
+ _location = kLocationCredits;
_flagsTable[236] = 74;
uint8 *imgBuf = (uint8 *)malloc(16 * 64000);
loadSprC02_01();
@@ -151,7 +151,7 @@ void TuckerEngine::handleCreditsSequence() {
}
} while (!_quitGame && isSpeechSoundPlaying());
free(imgBuf);
- _locationNum = prevLocationNum;
+ _location = prevLocation;
do {
if (_fadePaletteCounter > 0) {
fadeInPalette();
@@ -211,8 +211,8 @@ void TuckerEngine::handleNewPartSequence() {
loadImage(filename.c_str(), _quadBackgroundGfxBuf, 1);
_spritesCount = 1;
clearSprites();
- int currentLocation = _locationNum;
- _locationNum = 98;
+ Location currentLocation = _location;
+ _location = kLocationNewPart;
unloadSprA02_01();
unloadSprC02_01();
switch (_part) {
@@ -260,7 +260,7 @@ void TuckerEngine::handleNewPartSequence() {
redrawScreen(0);
waitForTimer(3);
} while (_fadePaletteCounter > 0 && !_quitGame);
- _locationNum = currentLocation;
+ _location = currentLocation;
showCursor(true);
}
@@ -309,7 +309,7 @@ void TuckerEngine::handleMeanwhileSequence() {
void TuckerEngine::handleMapSequence() {
loadImage("map2.pcx", _quadBackgroundGfxBuf + 89600, 0);
loadImage("map1.pcx", _loadTempBuf, 1);
- _selectedObject._locationObjectLocationNum = 0;
+ _selectedObject._locationObjectLocation = kLocationNone;
if (_flagsTable[7] > 0) {
copyMapRect(0, 0, 140, 86);
}
@@ -334,45 +334,45 @@ void TuckerEngine::handleMapSequence() {
_fullRedraw = true;
if (_flagsTable[7] > 0 && _mousePosX > 30 && _mousePosX < 86 && _mousePosY > 36 && _mousePosY < 86) {
textNum = 13;
- _nextLocationNum = (_part == kPartOne) ? 3 : 65;
+ _nextLocation = (_part == kPartOne) ? kLocationSeedyStreet : kLocationSeedyStreetPartThree;
xPos = 620;
yPos = 130;
} else if (_flagsTable[7] > 1 && _mousePosX > 60 && _mousePosX < 120 && _mousePosY > 120 && _mousePosY < 170) {
textNum = 14;
- _nextLocationNum = (_part == kPartOne) ? 9 : 66;
+ _nextLocation = (_part == kPartOne) ? kLocationMall : kLocationMallPartThree;
xPos = 344;
yPos = 120;
} else if (_flagsTable[7] > 2 && _mousePosX > 160 && _mousePosX < 210 && _mousePosY > 110 && _mousePosY < 160) {
textNum = 15;
- _nextLocationNum = (_part == kPartOne) ? 16 : 61;
+ _nextLocation = (_part == kPartOne) ? kLocationPark : kLocationParkPartThree;
xPos = 590;
yPos = 130;
} else if ((_flagsTable[7] == 4 || _flagsTable[7] == 6) && _mousePosX > 150 && _mousePosX < 200 && _mousePosY > 20 && _mousePosY < 70) {
textNum = 16;
- _nextLocationNum = (_part == kPartOne) ? 20 : 68;
+ _nextLocation = (_part == kPartOne) ? kLocationOutsideMuseum : kLocationOutsideMuseumPartThree;
xPos = 20;
yPos = 130;
} else if (_flagsTable[120] == 1 && _mousePosX > 240 && _mousePosX < 290 && _mousePosY > 35 && _mousePosY < 90) {
textNum = 17;
- _nextLocationNum = (_part == kPartOne) ? 19 : 62;
+ _nextLocation = (_part == kPartOne) ? kLocationDocks : kLocationDocksPartThree;
xPos = 20;
yPos = 124;
} else if (_mousePosX > 135 && _mousePosX < 185 && _mousePosY > 170 && _mousePosY < 200) {
textNum = 18;
- _nextLocationNum = _locationNum;
+ _nextLocation = _location;
if (!_noPositionChangeAfterMap) {
xPos = _xPosCurrent;
yPos = _yPosCurrent;
- } else if (_locationNum == 3 || _locationNum == 65) {
+ } else if (_location == kLocationSeedyStreet || _location == kLocationSeedyStreetPartThree) {
xPos = 620;
yPos = 130;
- } else if (_locationNum == 9 || _locationNum == 66) {
+ } else if (_location == kLocationMall || _location == kLocationMallPartThree) {
xPos = 344;
yPos = 120;
- } else if (_locationNum == 16 || _locationNum == 61) {
+ } else if (_location == kLocationPark || _location == kLocationParkPartThree) {
xPos = 590;
yPos = 130;
- } else if (_locationNum == 20 || _locationNum == 68) {
+ } else if (_location == kLocationOutsideMuseum || _location == kLocationOutsideMuseumPartThree) {
xPos = 20;
yPos = 130;
} else {
@@ -398,11 +398,11 @@ void TuckerEngine::handleMapSequence() {
--_fadePaletteCounter;
}
_mouseClick = 1;
- if (_nextLocationNum == 9 && _noPositionChangeAfterMap) {
+ if (_nextLocation == kLocationMall && _noPositionChangeAfterMap) {
_backgroundSpriteCurrentAnimation = 2;
_backgroundSpriteCurrentFrame = 0;
setCursorState(kCursorStateDisabledHidden);
- } else if (_nextLocationNum == 66 && _noPositionChangeAfterMap) {
+ } else if (_nextLocation == kLocationMallPartThree && _noPositionChangeAfterMap) {
_backgroundSpriteCurrentAnimation = 1;
_backgroundSpriteCurrentFrame = 0;
setCursorState(kCursorStateDisabledHidden);
diff --git a/engines/tucker/tucker.cpp b/engines/tucker/tucker.cpp
index 66422d33ff..fe468a4170 100644
--- a/engines/tucker/tucker.cpp
+++ b/engines/tucker/tucker.cpp
@@ -157,11 +157,11 @@ void TuckerEngine::resetVariables() {
_mainLoopCounter1 = _mainLoopCounter2 = 0;
_timerCounter2 = 0;
_part = _currentPart = kPartInit;
- _locationNum = 0;
- _nextLocationNum = (_gameFlags & kGameFlagDemo) == 0 ? kStartupLocationGame : kStartupLocationDemo;
+ _location = kLocationNone;
+ _nextLocation = (_gameFlags & kGameFlagDemo) ? kLocationInitDemo : kLocationInit;
_gamePaused = false;
_gameDebug = false;
- _displaySpeechText = (_gameFlags & kGameFlagNoSubtitles) == 0 ? ConfMan.getBool("subtitles") : false;
+ _displaySpeechText = (_gameFlags & kGameFlagNoSubtitles) ? false : ConfMan.getBool("subtitles");
memset(_flagsTable, 0, sizeof(_flagsTable));
_gameHintsIndex = 0;
@@ -400,7 +400,7 @@ void TuckerEngine::mainLoop() {
loadGameState(slot);
}
} else if (ConfMan.hasKey("boot_param")) {
- _nextLocationNum = ConfMan.getInt("boot_param");
+ _nextLocation = (Location)ConfMan.getInt("boot_param");
}
do {
@@ -427,7 +427,7 @@ void TuckerEngine::mainLoop() {
if (_nextAction != 0) {
loadActionsTable();
}
- if (_nextLocationNum > 0) {
+ if (_nextLocation != kLocationNone) {
setupNewLocation();
}
updateCharPosition();
@@ -499,13 +499,13 @@ void TuckerEngine::mainLoop() {
}
}
_mainSpritesBaseOffset = 0;
- if (_locationWidthTable[_locationNum] > 3) {
+ if (_locationWidthTable[_location] > 3) {
++_currentGfxBackgroundCounter;
if (_currentGfxBackgroundCounter > 39) {
_currentGfxBackgroundCounter = 0;
}
_currentGfxBackground = _quadBackgroundGfxBuf + (_currentGfxBackgroundCounter / 10) * 44800;
- if (_fadePaletteCounter < 34 && _locationNum == 22) {
+ if (_fadePaletteCounter < 34 && _location == kLocationFishingTrawler) {
int offset = (_currentGfxBackgroundCounter > 29 ? 1 : (_currentGfxBackgroundCounter / 10));
_spritesTable[0]._gfxBackgroundOffset = offset * 640;
_mainSpritesBaseOffset = offset;
@@ -589,7 +589,7 @@ void TuckerEngine::mainLoop() {
}
if (_inputKeys[kInputKeyPause]) {
_inputKeys[kInputKeyPause] = false;
- if (_locationNum != 70) {
+ if (_location != kLocationComputerScreen) {
_gamePaused = true;
}
}
@@ -757,10 +757,10 @@ void TuckerEngine::showCursor(bool visible) {
}
void TuckerEngine::setupNewLocation() {
- debug(2, "setupNewLocation() current %d next %d", _locationNum, _nextLocationNum);
- _locationNum = _nextLocationNum;
+ debug(2, "setupNewLocation() current %d next %d", _location, _nextLocation);
+ _location = _nextLocation;
loadObj();
- _nextLocationNum = 0;
+ _nextLocation = kLocationNone;
_fadePaletteCounter = 0;
_mainLoopCounter2 = 0;
_mainLoopCounter1 = 0;
@@ -772,7 +772,7 @@ void TuckerEngine::setupNewLocation() {
_backgroundSpriteCurrentAnimation = -1;
_backgroundSpriteCurrentFrame = 0;
}
- if (!_panelLockedFlag || (_backgroundSpriteCurrentAnimation > 0 && _locationNum != 25)) {
+ if (!_panelLockedFlag || (_backgroundSpriteCurrentAnimation > 0 && _location != kLocationVentSystem)) {
_locationMaskType = 0;
} else {
_locationMaskType = 3;
@@ -803,7 +803,7 @@ void TuckerEngine::setupNewLocation() {
void TuckerEngine::copyLocBitmap(const char *filename, int offset, bool isMask) {
int type = !isMask ? 1 : 0;
- if (offset > 0 && _locationNum == 16) {
+ if (offset > 0 && _location == kLocationPark) {
type = 0;
}
loadImage(filename, _loadTempBuf, type);
@@ -863,7 +863,7 @@ void TuckerEngine::updateCharPosition() {
if (_currentActionVerb == kVerbWalk || _locationMaskCounter == 0) {
return;
}
- if (_currentActionVerb == kVerbLook && _locationNum != 18) {
+ if (_currentActionVerb == kVerbLook && _location != kLocationRoystonsHomeBoxroom) {
int pos;
_actionPosX = _xPosCurrent;
_actionPosY = _yPosCurrent - 64;
@@ -1066,10 +1066,10 @@ void TuckerEngine::setBlackPalette() {
void TuckerEngine::updateCursor() {
setCursorStyle(kCursorNormal);
- if (_backgroundSpriteCurrentAnimation == -1 && !_panelLockedFlag && _selectedObject._locationObjectLocationNum > 0) {
- _selectedObject._locationObjectLocationNum = 0;
+ if (_backgroundSpriteCurrentAnimation == -1 && !_panelLockedFlag && _selectedObject._locationObjectLocation != kLocationNone) {
+ _selectedObject._locationObjectLocation = kLocationNone;
}
- if (_locationMaskType > 0 || _selectedObject._locationObjectLocationNum > 0 || _pendingActionDelay > 0) {
+ if (_locationMaskType > 0 || _selectedObject._locationObjectLocation != kLocationNone || _pendingActionDelay > 0) {
return;
}
if (_rightMouseButtonPressed) {
@@ -1088,7 +1088,7 @@ void TuckerEngine::updateCursor() {
}
if (!_actionVerbLocked) {
setActionVerbUnderCursor();
- if (_actionVerb == kVerbWalk && _locationNum == 63) {
+ if (_actionVerb == kVerbWalk && _location == kLocationTV) {
_actionVerb = kVerbUse;
}
}
@@ -1201,7 +1201,7 @@ void TuckerEngine::updateCharactersPath() {
if (!_panelLockedFlag) {
return;
}
- if (_backgroundSpriteCurrentAnimation != -1 && _locationNum != 25) {
+ if (_backgroundSpriteCurrentAnimation != -1 && _location != kLocationVentSystem) {
if (_xPosCurrent == _selectedObject._xPos && _yPosCurrent == _selectedObject._yPos) {
_locationMaskCounter = 1;
_panelLockedFlag = false;
@@ -1255,7 +1255,7 @@ void TuckerEngine::updateCharactersPath() {
}
}
}
- if (_locationNum == 25) {
+ if (_location == kLocationVentSystem) {
if ((_backgroundSpriteCurrentAnimation != 3 || _characterBackFrontFacing) && (_backgroundSpriteCurrentAnimation != 6 || !_characterBackFrontFacing)) {
_xPosCurrent = xPos;
_yPosCurrent = yPos;
@@ -1274,7 +1274,7 @@ void TuckerEngine::updateCharactersPath() {
if (_characterPrevFacingDirection <= 0 || _characterPrevFacingDirection >= 5) {
return;
}
- if (_selectedObject._locationObjectLocationNum == 0) {
+ if (_selectedObject._locationObjectLocation == kLocationNone) {
_characterFacingDirection = 5;
while (_spriteAnimationFramesTable[_spriteAnimationFrameIndex] != 999) {
++_spriteAnimationFrameIndex;
@@ -1319,7 +1319,7 @@ void TuckerEngine::updateData3() {
a->_animCurrentCounter = a->_animInitCounter;
a->_drawFlag = false;
}
- if (_locationNum == 24 && i == 0) {
+ if (_location == kLocationStoreRoom && i == 0) {
// workaround bug #2872385: update fish animation sequence for correct
// position in aquarium.
if (a->_animInitCounter == 505 && a->_animCurrentCounter == 513) {
@@ -1541,11 +1541,11 @@ void TuckerEngine::drawConversationTexts() {
void TuckerEngine::updateScreenScrolling() {
int scrollPrevOffset = _scrollOffset;
- if (_locationWidthTable[_locationNum] != 2) {
+ if (_locationWidthTable[_location] != 2) {
_scrollOffset = 0;
} else if (_validInstructionId) {
_scrollOffset = _xPosCurrent - 200;
- } else if (_locationNum == 16 && _backgroundSpriteCurrentAnimation == 6 && _scrollOffset + 200 < _xPosCurrent) {
+ } else if (_location == kLocationPark && _backgroundSpriteCurrentAnimation == 6 && _scrollOffset + 200 < _xPosCurrent) {
++_scrollOffset;
if (_scrollOffset > 320) {
_scrollOffset = 320;
@@ -1641,7 +1641,7 @@ void TuckerEngine::drawData3() {
}
void TuckerEngine::execData3PreUpdate() {
- switch (_locationNum) {
+ switch (_location) {
case 1:
execData3PreUpdate_locationNum1();
break;
@@ -1774,11 +1774,13 @@ void TuckerEngine::execData3PreUpdate() {
case 70:
execData3PreUpdate_locationNum70();
break;
+ default:
+ break;
}
}
void TuckerEngine::execData3PostUpdate() {
- switch (_locationNum) {
+ switch (_location) {
case 1:
execData3PostUpdate_locationNum1();
break;
@@ -1815,6 +1817,8 @@ void TuckerEngine::execData3PostUpdate() {
case 66:
execData3PostUpdate_locationNum66();
break;
+ default:
+ break;
}
}
@@ -1825,18 +1829,18 @@ void TuckerEngine::drawBackgroundSprites() {
int srcH = READ_LE_UINT16(_backgroundSpriteDataPtr + frameOffset + 2);
int srcX = READ_LE_UINT16(_backgroundSpriteDataPtr + frameOffset + 8);
int srcY = READ_LE_UINT16(_backgroundSpriteDataPtr + frameOffset + 10);
- if (_locationNum == 22 && _backgroundSpriteCurrentAnimation > 1) {
+ if (_location == kLocationFishingTrawler && _backgroundSpriteCurrentAnimation > 1) {
srcY += _mainSpritesBaseOffset;
}
- if (_locationNum == 29 && _backgroundSpriteCurrentAnimation == 3) {
+ if (_location == kLocationSubmarineHangar && _backgroundSpriteCurrentAnimation == 3) {
srcX += 228;
- } else if (_locationNum == 58 && _backgroundSpriteCurrentAnimation == 1) {
+ } else if (_location == kLocationInsideMuseumPartThree && _backgroundSpriteCurrentAnimation == 1) {
srcX += 100;
} else if (_xPosCurrent > 320 && _xPosCurrent < 640) {
srcX += 320;
}
srcX += _backgroundSprOffset;
- Graphics::decodeRLE_248(_locationBackgroundGfxBuf + srcY * 640 + srcX, _backgroundSpriteDataPtr + frameOffset + 12, srcW, srcH, 0, _locationHeightTable[_locationNum], false);
+ Graphics::decodeRLE_248(_locationBackgroundGfxBuf + srcY * 640 + srcX, _backgroundSpriteDataPtr + frameOffset + 12, srcW, srcH, 0, _locationHeightTable[_location], false);
addDirtyRect(srcX, srcY, srcW, srcH);
}
}
@@ -1854,15 +1858,18 @@ void TuckerEngine::drawCurrentSprite() {
// [0xE0, ... ..., 0xEF]
static const int whitelistReservedColorsLocation48[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 };
static const int whitelistReservedColorsLocation61[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1 };
- switch (_locationNum) {
- case 48:
+ switch (_location) {
+ case kLocationCorridor:
whitelistReservedColors = (const int *)&whitelistReservedColorsLocation48;
break;
- case 61:
+ case kLocationParkPartThree:
if (_xPosCurrent <= 565)
whitelistReservedColors = (const int *)&whitelistReservedColorsLocation61;
break;
+
+ default:
+ break;
}
SpriteFrame *chr = &_spriteFramesTable[_currentSpriteAnimationFrame];
@@ -1874,7 +1881,7 @@ void TuckerEngine::drawCurrentSprite() {
xPos -= chr->_xSize + chr->_xOffset - 14;
}
Graphics::decodeRLE_248(_locationBackgroundGfxBuf + yPos * 640 + xPos, _spritesGfxBuf + chr->_sourceOffset, chr->_xSize, chr->_ySize,
- chr->_yOffset, _locationHeightTable[_locationNum], _mirroredDrawing, whitelistReservedColors);
+ chr->_yOffset, _locationHeightTable[_location], _mirroredDrawing, whitelistReservedColors);
addDirtyRect(xPos, yPos, chr->_xSize, chr->_ySize);
if (_currentSpriteAnimationLength > 1) {
SpriteFrame *chr2 = &_spriteFramesTable[_currentSpriteAnimationFrame2];
@@ -1886,7 +1893,7 @@ void TuckerEngine::drawCurrentSprite() {
xPos -= chr2->_xSize + chr2->_xOffset - 14;
}
Graphics::decodeRLE_248(_locationBackgroundGfxBuf + yPos * 640 + xPos, _spritesGfxBuf + chr2->_sourceOffset, chr2->_xSize, chr2->_ySize,
- chr2->_yOffset, _locationHeightTable[_locationNum], _mirroredDrawing, whitelistReservedColors);
+ chr2->_yOffset, _locationHeightTable[_location], _mirroredDrawing, whitelistReservedColors);
addDirtyRect(xPos, yPos, chr2->_xSize, chr2->_ySize);
}
}
@@ -2171,7 +2178,7 @@ void TuckerEngine::updateCharacterAnimation() {
assert(_backgroundSpriteCurrentAnimation >= 0 && _backgroundSpriteCurrentAnimation < kSprA02TableSize);
_backgroundSpriteDataPtr = _sprA02Table[_backgroundSpriteCurrentAnimation];
_backgroundSpriteLastFrame = READ_LE_UINT16(_backgroundSpriteDataPtr);
- } else if (_locationNum == 25 && !_panelLockedFlag && (_backgroundSpriteCurrentAnimation == 3 || _backgroundSpriteCurrentAnimation == 6)) {
+ } else if (_location == kLocationVentSystem && !_panelLockedFlag && (_backgroundSpriteCurrentAnimation == 3 || _backgroundSpriteCurrentAnimation == 6)) {
_backgroundSpriteCurrentFrame = 0;
_backgroundSpriteCurrentAnimation = -1;
} else {
@@ -2186,10 +2193,10 @@ void TuckerEngine::updateCharacterAnimation() {
}
}
}
- if (_locationNum == 24 && _flagsTable[103] == 0) {
+ if (_location == kLocationStoreRoom && _flagsTable[103] == 0) {
if (_panelLockedFlag) {
_panelLockedFlag = false;
- _selectedObject._locationObjectLocationNum = 0;
+ _selectedObject._locationObjectLocation = kLocationNone;
if (_actionVerb != kVerbTalk) {
_speechSoundNum = 2236;
startSpeechSound(_speechSoundNum, _speechVolume);
@@ -2222,7 +2229,7 @@ void TuckerEngine::updateCharacterAnimation() {
_backgroundSpriteDataPtr = _sprA02Table[_backgroundSpriteCurrentAnimation];
_backgroundSpriteLastFrame = READ_LE_UINT16(_backgroundSpriteDataPtr);
}
- } else if (_locationNum == 25) {
+ } else if (_location == kLocationVentSystem) {
if (_backgroundSpriteCurrentFrame == 0) {
if (!_characterBackFrontFacing) {
if (_characterBackFrontFacing != _characterPrevBackFrontFacing) {
@@ -2251,7 +2258,7 @@ void TuckerEngine::updateCharacterAnimation() {
_backgroundSpriteLastFrame = READ_LE_UINT16(_backgroundSpriteDataPtr);
}
_backgroundSprOffset = _xPosCurrent - 160;
- } else if (_locationNum == 63 && _backgroundSpriteCurrentFrame == 0) {
+ } else if (_location == kLocationTV && _backgroundSpriteCurrentFrame == 0) {
if (_charSpeechSoundCounter > 0 && _actionCharacterNum == 99) {
_backgroundSpriteCurrentAnimation = 1;
} else {
@@ -2262,7 +2269,7 @@ void TuckerEngine::updateCharacterAnimation() {
_backgroundSpriteLastFrame = READ_LE_UINT16(_backgroundSpriteDataPtr);
}
int frame = _spriteAnimationFramesTable[_spriteAnimationFrameIndex];
- if (!_panelLockedFlag && _characterFacingDirection < 5 && _selectedObject._locationObjectLocationNum == 0) {
+ if (!_panelLockedFlag && _characterFacingDirection < 5 && _selectedObject._locationObjectLocation == kLocationNone) {
_characterFacingDirection = 0;
}
if (_charSpeechSoundCounter > 0 && _characterFacingDirection != 6 && _actionCharacterNum == 99) {
@@ -2321,7 +2328,7 @@ void TuckerEngine::updateCharacterAnimation() {
num = 13;
} else if (getRandomNumber() < 3000) {
num = 14;
- if (_locationNum == 57) {
+ if (_location == kLocationFishShopPartThree) {
num = 18;
}
} else {
@@ -2409,7 +2416,7 @@ void TuckerEngine::handleMap() {
_panelLockedFlag = false;
}
}
- if (!_panelLockedFlag && (_backgroundSpriteCurrentAnimation == -1 || _locationNum == 25) && _locationMaskType == 3) {
+ if (!_panelLockedFlag && (_backgroundSpriteCurrentAnimation == -1 || _location == kLocationVentSystem) && _locationMaskType == 3) {
setCursorState(kCursorStateNormal);
if (_locationMaskCounter == 1) {
_characterFacingDirection = 0;
@@ -2417,10 +2424,10 @@ void TuckerEngine::handleMap() {
}
return;
}
- if (_selectedObject._locationObjectLocationNum != 0 && _locationMaskCounter != 0 && (_backgroundSpriteCurrentAnimation <= -1 || _locationNum == 25)) {
+ if (_selectedObject._locationObjectLocation != kLocationNone && _locationMaskCounter != 0 && (_backgroundSpriteCurrentAnimation <= -1 || _location == kLocationVentSystem)) {
// TODO
// This is actually "_locationNum != 25" in disassembly. Is this a typo?
- if (_locationNum == 25 || _backgroundSpriteCurrentAnimation != 4) {
+ if (_location == kLocationVentSystem || _backgroundSpriteCurrentAnimation != 4) {
if (_locationMaskType == 0) {
_locationMaskType = 1;
setCursorState(kCursorStateDisabledHidden);
@@ -2435,7 +2442,7 @@ void TuckerEngine::handleMap() {
}
_backgroundSpriteCurrentFrame = 0;
_mirroredDrawing = false;
- if (_locationNum == 25) {
+ if (_location == kLocationVentSystem) {
_backgroundSpriteDataPtr = _sprA02Table[_backgroundSpriteCurrentAnimation];
_backgroundSpriteLastFrame = READ_LE_UINT16(_backgroundSpriteDataPtr);
_backgroundSpriteCurrentFrame = 1;
@@ -2452,7 +2459,7 @@ void TuckerEngine::handleMap() {
_locationMaskType = 2;
_panelType = kPanelTypeNormal;
setCursorState(kCursorStateNormal);
- if (_selectedObject._locationObjectLocationNum == 99) {
+ if (_selectedObject._locationObjectLocation == kLocationMap) {
_noPositionChangeAfterMap = true;
handleMapSequence();
return;
@@ -2462,7 +2469,7 @@ void TuckerEngine::handleMap() {
redrawScreen(_scrollOffset);
_fadePaletteCounter = 34;
}
- _nextLocationNum = _selectedObject._locationObjectLocationNum;
+ _nextLocation = _selectedObject._locationObjectLocation;
_xPosCurrent = _selectedObject._locationObjectToX;
_yPosCurrent = _selectedObject._locationObjectToY;
if (_selectedObject._locationObjectToX2 > 800) {
@@ -2483,7 +2490,7 @@ void TuckerEngine::handleMap() {
_scrollOffset = 0;
_handleMapCounter = 0;
_locationMaskCounter = 0;
- _selectedObject._locationObjectLocationNum = 0;
+ _selectedObject._locationObjectLocation = kLocationNone;
}
}
}
@@ -2497,7 +2504,7 @@ void TuckerEngine::clearSprites() {
}
void TuckerEngine::updateSprites() {
- const int count = (_locationNum == 9) ? 3 : _spritesCount;
+ const int count = (_location == kLocationMall) ? 3 : _spritesCount;
for (int i = 0; i < count; ++i) {
if (_spritesTable[i]._stateIndex > -1) {
++_spritesTable[i]._stateIndex;
@@ -2564,7 +2571,7 @@ void TuckerEngine::updateSprite(int i) {
_updateSpriteFlag2 = false;
_spritesTable[i]._defaultUpdateDelay = 0;
_spritesTable[i]._updateDelay = 0;
- switch (_locationNum) {
+ switch (_location) {
case 2:
updateSprite_locationNum2();
break;
@@ -2937,6 +2944,8 @@ void TuckerEngine::updateSprite(int i) {
case 98:
_spritesTable[0]._state = 1;
break;
+ default:
+ break;
}
if (_spritesTable[i]._stateIndex <= -1) {
if (!_updateSpriteFlag1) {
@@ -3049,7 +3058,7 @@ bool TuckerEngine::testLocationMask(int x, int y) {
if (_locationMaskType > 0 || _locationMaskIgnore) {
return true;
}
- if (_locationNum == 26 || _locationNum == 32) {
+ if (_location == kLocationSubwayTunnel || _location == kLocationKitchen) {
y -= 3;
}
const int offset = y * 640 + x;
@@ -3308,7 +3317,7 @@ int TuckerEngine::executeTableInstruction() {
// As a workaround, do not ignore the location mask during this specific
// action when entering the club.
// This fixes Trac#5838.
- if (!(_locationNum == 6 && _nextAction == 59)) {
+ if (!(_location == kLocationStripJoint && _nextAction == 59)) {
_locationMaskIgnore = true;
}
_panelLockedFlag = true;
@@ -3383,7 +3392,7 @@ int TuckerEngine::executeTableInstruction() {
_characterAnimationNum = readTableInstructionParam(2);
return 0;
case kCode_loc:
- _nextLocationNum = readTableInstructionParam(2);
+ _nextLocation = (Location)readTableInstructionParam(2);
return 1;
case kCode_mof:
setCursorState(kCursorStateDisabledHidden);
@@ -3471,7 +3480,7 @@ int TuckerEngine::executeTableInstruction() {
// To work around the issue in the problematic versions we inject these two
// instructions after the first occurence of the 'wsm' instruction (which
// proves good enough).
- if (_locationNum == 24 && _nextAction == 61) {
+ if (_location == kLocationStoreRoom && _nextAction == 61) {
setCursorState(kCursorStateDisabledHidden);
_panelType = kPanelTypeEmpty;
}
@@ -3583,7 +3592,7 @@ void TuckerEngine::setSelectedObjectKey() {
_locationMaskCounter = 0;
_actionRequiresTwoObjects = false;
_selectedObject._yPos = 0;
- _selectedObject._locationObjectLocationNum = 0;
+ _selectedObject._locationObjectLocation = kLocationNone;
_pendingActionIndex = 0;
if (_selectedObjectType == 0) {
if (_selectedObjectNum == 0) {
@@ -3593,7 +3602,7 @@ void TuckerEngine::setSelectedObjectKey() {
_selectedObject._xPos = _locationObjectsTable[_selectedCharacterNum]._standX;
_selectedObject._yPos = _locationObjectsTable[_selectedCharacterNum]._standY;
if (_actionVerb == kVerbWalk || _actionVerb == kVerbUse) {
- _selectedObject._locationObjectLocationNum = _locationObjectsTable[_selectedCharacterNum]._locationNum;
+ _selectedObject._locationObjectLocation = _locationObjectsTable[_selectedCharacterNum]._location;
_selectedObject._locationObjectToX = _locationObjectsTable[_selectedCharacterNum]._toX;
_selectedObject._locationObjectToY = _locationObjectsTable[_selectedCharacterNum]._toY;
_selectedObject._locationObjectToX2 = _locationObjectsTable[_selectedCharacterNum]._toX2;
@@ -3623,14 +3632,14 @@ void TuckerEngine::setSelectedObjectKey() {
_selectedObject._yPos = _mousePosY;
}
_selectedObjectLocationMask = testLocationMask(_selectedObject._xPos, _selectedObject._yPos);
- if (!_selectedObjectLocationMask && _objectKeysLocationTable[_locationNum] == 1) {
- if (_selectedObject._yPos < _objectKeysPosYTable[_locationNum]) {
- while (!_selectedObjectLocationMask && _selectedObject._yPos < _objectKeysPosYTable[_locationNum]) {
+ if (!_selectedObjectLocationMask && _objectKeysLocationTable[_location] == 1) {
+ if (_selectedObject._yPos < _objectKeysPosYTable[_location]) {
+ while (!_selectedObjectLocationMask && _selectedObject._yPos < _objectKeysPosYTable[_location]) {
++_selectedObject._yPos;
_selectedObjectLocationMask = testLocationMask(_selectedObject._xPos, _selectedObject._yPos);
}
} else {
- while (!_selectedObjectLocationMask && _selectedObject._yPos < _objectKeysPosYTable[_locationNum]) {
+ while (!_selectedObjectLocationMask && _selectedObject._yPos < _objectKeysPosYTable[_location]) {
--_selectedObject._yPos;
_selectedObjectLocationMask = testLocationMask(_selectedObject._xPos, _selectedObject._yPos);
}
@@ -3638,12 +3647,12 @@ void TuckerEngine::setSelectedObjectKey() {
}
if (_selectedObjectLocationMask) {
_selectedObjectLocationMask = testLocationMaskArea(_xPosCurrent, _yPosCurrent, _selectedObject._xPos, _selectedObject._yPos);
- if (_selectedObjectLocationMask && _objectKeysPosXTable[_locationNum] > 0) {
+ if (_selectedObjectLocationMask && _objectKeysPosXTable[_location] > 0) {
_selectedObject._xDefaultPos = _selectedObject._xPos;
_selectedObject._yDefaultPos = _selectedObject._yPos;
- _selectedObject._xPos = _objectKeysPosXTable[_locationNum];
- _selectedObject._yPos = _objectKeysPosYTable[_locationNum];
- if (_objectKeysLocationTable[_locationNum] == 1) {
+ _selectedObject._xPos = _objectKeysPosXTable[_location];
+ _selectedObject._yPos = _objectKeysPosYTable[_location];
+ if (_objectKeysLocationTable[_location] == 1) {
_selectedObject._xPos = _selectedObject._xDefaultPos;
}
}
@@ -3730,7 +3739,7 @@ void TuckerEngine::handleMouseClickOnInventoryObject() {
break;
case 1:
if (_actionVerb == kVerbUse && _leftMouseButtonPressed) {
- if (_mapSequenceFlagsLocationTable[_locationNum - 1] == 1) {
+ if (_mapSequenceFlagsLocationTable[_location - 1] == 1) {
handleMapSequence();
} else {
_actionPosX = _xPosCurrent;
diff --git a/engines/tucker/tucker.h b/engines/tucker/tucker.h
index cd12939443..2a07348277 100644
--- a/engines/tucker/tucker.h
+++ b/engines/tucker/tucker.h
@@ -116,6 +116,99 @@ enum Part {
kPartThree = 3
};
+enum Location {
+ kLocationNone = 0,
+
+ kLocationHotelRoom = 1,
+ kLocationBackAlley = 2,
+ kLocationSeedyStreet = 3,
+ kLocationBakersShop = 4,
+ kLocationBakersKitchen = 5,
+ kLocationStripJoint = 6,
+ kLocationPoliceHQ = 7,
+ kLocationPoliceCell = 8,
+ kLocationMall = 9,
+ kLocationFishShop = 10,
+ kLocationBurgerJoint = 11,
+ kLocationRecordShop = 12,
+ kLocationDentist = 13,
+ kLocationPlugShop = 14,
+ kLocationTouristInfo = 15,
+ kLocationPark = 16,
+ kLocationRoystonsHomeHallway = 17,
+ kLocationRoystonsHomeBoxroom = 18,
+ kLocationDocks = 19,
+ kLocationOutsideMuseum = 20,
+ kLocationInsideMuseum = 21,
+ kLocationFishingTrawler = 22,
+ kLocationWarehouseCutscene = 23,
+ kLocationStoreRoom = 24,
+ kLocationVentSystem = 25,
+ kLocationSubwayTunnel = 26,
+ kLocationStrangeRoom = 27,
+ kLocationTopCorridor = 28,
+ kLocationSubmarineHangar = 29,
+ kLocationBunkRoom = 30,
+ kLocationBottomCorridor = 31,
+ kLocationKitchen = 32,
+ kLocationCommandCentre = 33,
+ kLocationSubmarineHatch = 34,
+ kLocationSubmarineWalkway = 35,
+ kLocationSubmarineBridge = 36,
+ kLocationSubmarineOffice = 37,
+ kLocationSubmarineEngineRoom = 38,
+ kLocationLuxuryApartment = 39,
+ kLocationFarDocks = 40,
+ kLocationAlleyway = 41,
+ kLocationBasement = 42,
+ kLocationTateTowerEntrance = 43,
+ kLocationRooftop = 44,
+ kLocationConferenceRoom = 45,
+ kLocationAnteChamber = 46,
+ kLocationHelipad = 47,
+ kLocationCorridor = 48,
+ kLocationWaitingRoom = 49,
+ kLocationkLocationCorridorCutscene = 50,
+ kLocationCells = 51,
+ kLocationMachineRoom = 52,
+ kLocationRecordShopPartThree = 53,
+ kLocationPlugShopPartThree = 54,
+ kLocationTouristInfoPartThree = 55,
+ kLocationDentistPartThree = 56,
+ kLocationFishShopPartThree = 57,
+ kLocationInsideMuseumPartThree = 58,
+ kLocationBakersShopPartThree = 59,
+ kLocationStripJointPartThree = 60,
+ kLocationParkPartThree = 61,
+ kLocationDocksPartThree = 62,
+ kLocationTV = 63,
+ kLocationSewer = 64,
+ kLocationSeedyStreetPartThree = 65,
+ kLocationMallPartThree = 66,
+ kLocationBurgerJointPartThree = 67,
+ kLocationOutsideMuseumPartThree = 68,
+ kLocation69Cutscene = 69,
+ kLocationComputerScreen = 70,
+ kLocationParkCutscene = 71,
+ kLocationSeedyStreetCutscene = 72,
+ kLocationJesusCutscene1 = 73,
+ kLocationCredits = 74,
+ kLocation75Cutscene = 75,
+ kLocationBeachCutscene = 76,
+ kLocationHospitalCutscene = 77,
+ kLocation78Cutscene = 78,
+ kLocationElvisCutscene = 79,
+ kLocationPyramidCutscene = 80,
+ kLocationCleopatraCutscene = 81,
+ kLocationJesusCutscene2 = 82,
+
+ kLocationNewPart = 98,
+ kLocationMap = 99,
+
+ kLocationInit = 1,
+ kLocationInitDemo = 9
+};
+
struct Action {
int _key;
int _testFlag1Num;
@@ -212,7 +305,7 @@ struct LocationObject {
int _xSize;
int _ySize;
int _textNum;
- int _locationNum;
+ Location _location;
int _toX;
int _toY;
int _toX2;
@@ -251,8 +344,6 @@ enum {
kScreenHeight = 200,
kScreenPitch = 640,
kFadePaletteStep = 5,
- kStartupLocationDemo = 9,
- kStartupLocationGame = 1,
kDefaultCharSpeechSoundCounter = 1,
kMaxSoundVolume = 127,
kLastSaveSlot = 99,
@@ -719,8 +810,8 @@ protected:
int _flagsTable[kFlagsTableSize];
Part _part;
Part _currentPart;
- int _locationNum;
- int _nextLocationNum;
+ Location _location;
+ Location _nextLocation;
bool _gamePaused;
bool _gameDebug;
bool _displayGameHints;
@@ -850,7 +941,7 @@ protected:
int _yDefaultPos;
int _xPos;
int _yPos;
- int _locationObjectLocationNum;
+ Location _locationObjectLocation;
int _locationObjectToX;
int _locationObjectToY;
int _locationObjectToX2;