[Scummvm-git-logs] scummvm master -> 52eee0c696a359ec18ae1cba25f8f86c9bc8bca1
antoniou79
a.antoniou79 at gmail.com
Wed Jul 29 14:27:32 UTC 2020
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
52eee0c696 SKY: Ensure _systemVars is freed when quiting the game
Commit: 52eee0c696a359ec18ae1cba25f8f86c9bc8bca1
https://github.com/scummvm/scummvm/commit/52eee0c696a359ec18ae1cba25f8f86c9bc8bca1
Author: antoniou79 (a.antoniou79 at gmail.com)
Date: 2020-07-29T17:27:20+03:00
Commit Message:
SKY: Ensure _systemVars is freed when quiting the game
Returning to launcher via ScummVM popup menu would retain the values of _systemVars
This would cause relaunching the game (after returning back to launcher) to have wrong value for eg. pastIntro, thus allowing "Save" from the ScummVM popup menu during the intro sequence.
Changed paths:
engines/sky/compact.cpp
engines/sky/control.cpp
engines/sky/debug.cpp
engines/sky/detection.cpp
engines/sky/disk.cpp
engines/sky/logic.cpp
engines/sky/mouse.cpp
engines/sky/music/adlibchannel.cpp
engines/sky/music/adlibmusic.cpp
engines/sky/music/gmmusic.cpp
engines/sky/screen.cpp
engines/sky/sky.cpp
engines/sky/sky.h
engines/sky/sound.cpp
engines/sky/text.cpp
diff --git a/engines/sky/compact.cpp b/engines/sky/compact.cpp
index ec434621d5..160004eeb4 100644
--- a/engines/sky/compact.cpp
+++ b/engines/sky/compact.cpp
@@ -215,7 +215,7 @@ SkyCompact::SkyCompact() {
uint16 diffSize = _cptFile->readUint16LE();
uint16 *diffBuf = (uint16 *)malloc(diffSize * sizeof(uint16));
_cptFile->read(diffBuf, diffSize * sizeof(uint16));
- if (SkyEngine::_systemVars.gameVersion == 288) {
+ if (SkyEngine::_systemVars->gameVersion == 288) {
uint16 *diffPos = diffBuf;
for (cnt = 0; cnt < numDiffs; cnt++) {
uint16 cptId = READ_LE_UINT16(diffPos++);
diff --git a/engines/sky/control.cpp b/engines/sky/control.cpp
index f74cb370c2..e6134a03ca 100644
--- a/engines/sky/control.cpp
+++ b/engines/sky/control.cpp
@@ -281,7 +281,7 @@ void Control::initPanel() {
memset(_screenBuf, 0, GAME_SCREEN_WIDTH * FULL_SCREEN_HEIGHT);
uint16 volY = (127 - _skyMusic->giveVolume()) / 4 + 59 - MPNL_Y; // volume slider's Y coordinate
- uint16 spdY = (SkyEngine::_systemVars.gameSpeed - 2) / SPEED_MULTIPLY;
+ uint16 spdY = (SkyEngine::_systemVars->gameSpeed - 2) / SPEED_MULTIPLY;
spdY += MPNL_Y + 83; // speed slider's initial position
_sprites.controlPanel = _skyDisk->loadFile(60500);
@@ -293,7 +293,7 @@ void Control::initPanel() {
_sprites.slode = _skyDisk->loadFile(60506);
_sprites.slode2 = _skyDisk->loadFile(60507);
_sprites.slide2 = _skyDisk->loadFile(60508);
- if (SkyEngine::_systemVars.gameVersion < 368)
+ if (SkyEngine::_systemVars->gameVersion < 368)
_sprites.musicBodge = NULL;
else
_sprites.musicBodge = _skyDisk->loadFile(60509);
@@ -447,7 +447,7 @@ void Control::drawMainPanel() {
_slide2->drawToScreen(WITH_MASK);
_bodge->drawToScreen(WITH_MASK);
if (SkyEngine::isCDVersion())
- drawTextCross(SkyEngine::_systemVars.systemFlags & TEXT_FLAG_MASK);
+ drawTextCross(SkyEngine::_systemVars->systemFlags & TEXT_FLAG_MASK);
_statusBar->drawToScreen();
}
@@ -456,7 +456,7 @@ void Control::doLoadSavePanel() {
return; // I don't think this can even happen
initPanel();
_skyScreen->clearScreen();
- if (SkyEngine::_systemVars.gameVersion < 331)
+ if (SkyEngine::_systemVars->gameVersion < 331)
_skyScreen->setPalette(60509);
else
_skyScreen->setPalette(60510);
@@ -474,7 +474,7 @@ void Control::doLoadSavePanel() {
_system->copyRectToScreen(_screenBuf, GAME_SCREEN_WIDTH, 0, 0, GAME_SCREEN_WIDTH, FULL_SCREEN_HEIGHT);
_system->updateScreen();
_skyScreen->forceRefresh();
- _skyScreen->setPaletteEndian((uint8 *)_skyCompact->fetchCpt(SkyEngine::_systemVars.currentPalette));
+ _skyScreen->setPaletteEndian((uint8 *)_skyCompact->fetchCpt(SkyEngine::_systemVars->currentPalette));
removePanel();
_skyMouse->spriteMouse(_savedMouse, 0, 0);
_skyText->fnSetFont(_savedCharSet);
@@ -491,19 +491,19 @@ void Control::doControlPanel() {
_skyText->fnSetFont(2);
_skyScreen->clearScreen();
- if (SkyEngine::_systemVars.gameVersion < 331)
+ if (SkyEngine::_systemVars->gameVersion < 331)
_skyScreen->setPalette(60509);
else
_skyScreen->setPalette(60510);
// Set initial button lights
_fxPanButton->_curSprite =
- (SkyEngine::_systemVars.systemFlags & SF_FX_OFF ? 0 : 2);
+ (SkyEngine::_systemVars->systemFlags & SF_FX_OFF ? 0 : 2);
// music button only available in floppy version
if (!SkyEngine::isCDVersion())
_musicPanButton->_curSprite =
- (SkyEngine::_systemVars.systemFlags & SF_MUS_OFF ? 0 : 2);
+ (SkyEngine::_systemVars->systemFlags & SF_MUS_OFF ? 0 : 2);
drawMainPanel();
@@ -554,7 +554,7 @@ void Control::doControlPanel() {
if (!Engine::shouldQuit())
_system->updateScreen();
_skyScreen->forceRefresh();
- _skyScreen->setPaletteEndian((uint8 *)_skyCompact->fetchCpt(SkyEngine::_systemVars.currentPalette));
+ _skyScreen->setPaletteEndian((uint8 *)_skyCompact->fetchCpt(SkyEngine::_systemVars->currentPalette));
removePanel();
_skyMouse->spriteMouse(_savedMouse, 0, 0);
_skyText->fnSetFont(_savedCharSet);
@@ -757,13 +757,13 @@ uint16 Control::doSpeedSlide() {
_text->drawToScreen(WITH_MASK);
_system->updateScreen();
}
- SkyEngine::_systemVars.gameSpeed = speedDelay;
+ SkyEngine::_systemVars->gameSpeed = speedDelay;
return SPEED_CHANGED;
}
void Control::toggleFx(ConResource *pButton) {
- SkyEngine::_systemVars.systemFlags ^= SF_FX_OFF;
- if (SkyEngine::_systemVars.systemFlags & SF_FX_OFF) {
+ SkyEngine::_systemVars->systemFlags ^= SF_FX_OFF;
+ if (SkyEngine::_systemVars->systemFlags & SF_FX_OFF) {
pButton->_curSprite = 0;
_statusBar->setToText(0x7000 + 87);
} else {
@@ -771,15 +771,15 @@ void Control::toggleFx(ConResource *pButton) {
_statusBar->setToText(0x7000 + 86);
}
- ConfMan.setBool("sfx_mute", (SkyEngine::_systemVars.systemFlags & SF_FX_OFF) != 0);
+ ConfMan.setBool("sfx_mute", (SkyEngine::_systemVars->systemFlags & SF_FX_OFF) != 0);
pButton->drawToScreen(WITH_MASK);
_system->updateScreen();
}
uint16 Control::toggleText() {
- uint32 flags = SkyEngine::_systemVars.systemFlags & TEXT_FLAG_MASK;
- SkyEngine::_systemVars.systemFlags &= ~TEXT_FLAG_MASK;
+ uint32 flags = SkyEngine::_systemVars->systemFlags & TEXT_FLAG_MASK;
+ SkyEngine::_systemVars->systemFlags &= ~TEXT_FLAG_MASK;
if (flags == SF_ALLOW_TEXT) {
flags = SF_ALLOW_SPEECH;
@@ -795,7 +795,7 @@ uint16 Control::toggleText() {
ConfMan.setBool("subtitles", (flags & SF_ALLOW_TEXT) != 0);
ConfMan.setBool("speech_mute", (flags & SF_ALLOW_SPEECH) == 0);
- SkyEngine::_systemVars.systemFlags |= flags;
+ SkyEngine::_systemVars->systemFlags |= flags;
drawTextCross(flags);
@@ -804,18 +804,18 @@ uint16 Control::toggleText() {
}
void Control::toggleMusic(ConResource *pButton) {
- SkyEngine::_systemVars.systemFlags ^= SF_MUS_OFF;
- if (SkyEngine::_systemVars.systemFlags & SF_MUS_OFF) {
+ SkyEngine::_systemVars->systemFlags ^= SF_MUS_OFF;
+ if (SkyEngine::_systemVars->systemFlags & SF_MUS_OFF) {
_skyMusic->startMusic(0);
pButton->_curSprite = 0;
_statusBar->setToText(0x7000 + 89);
} else {
- _skyMusic->startMusic(SkyEngine::_systemVars.currentMusic);
+ _skyMusic->startMusic(SkyEngine::_systemVars->currentMusic);
pButton->_curSprite = 2;
_statusBar->setToText(0x7000 + 88);
}
- ConfMan.setBool("music_mute", (SkyEngine::_systemVars.systemFlags & SF_MUS_OFF) != 0);
+ ConfMan.setBool("music_mute", (SkyEngine::_systemVars->systemFlags & SF_MUS_OFF) != 0);
pButton->drawToScreen(WITH_MASK);
_system->updateScreen();
@@ -1109,7 +1109,7 @@ void Control::loadDescriptions(Common::StringArray &savenames) {
}
bool Control::loadSaveAllowed() {
- if (SkyEngine::_systemVars.systemFlags & SF_CHOOSING)
+ if (SkyEngine::_systemVars->systemFlags & SF_CHOOSING)
return false; // texts get lost during load/save, so don't allow it during choosing
if (Logic::_scriptVariables[SCREEN] >= 101)
return false; // same problem with LINC terminals
@@ -1193,7 +1193,7 @@ uint32 Control::prepareSaveData(uint8 *destBuf) {
memset(destBuf, 0, 4); // space for data size
uint8 *destPos = destBuf + 4;
STOSD(destPos, SAVE_FILE_REVISION);
- STOSD(destPos, SkyEngine::_systemVars.gameVersion);
+ STOSD(destPos, SkyEngine::_systemVars->gameVersion);
STOSW(destPos, _skySound->_saveSounds[0]);
STOSW(destPos, _skySound->_saveSounds[1]);
@@ -1201,7 +1201,7 @@ uint32 Control::prepareSaveData(uint8 *destBuf) {
STOSD(destPos, _skyMusic->giveCurrentMusic());
STOSD(destPos, _savedCharSet);
STOSD(destPos, _savedMouse);
- STOSD(destPos, SkyEngine::_systemVars.currentPalette);
+ STOSD(destPos, SkyEngine::_systemVars->currentPalette);
for (cnt = 0; cnt < 838; cnt++)
STOSD(destPos, Logic::_scriptVariables[cnt]);
uint32 *loadedFilesList = _skyDisk->giveLoadedFilesList();
@@ -1360,16 +1360,16 @@ uint16 Control::parseSaveData(uint8 *srcBuf) {
return RESTORE_FAILED;
}
LODSD(srcPos, gameVersion);
- if (gameVersion != SkyEngine::_systemVars.gameVersion) {
+ if (gameVersion != SkyEngine::_systemVars->gameVersion) {
if ((!SkyEngine::isCDVersion()) || (gameVersion < 365)) { // cd versions are compatible
displayMessage(NULL, "This saved game was created by\n"
"Beneath a Steel Sky v0.0%03d\n"
"It cannot be loaded by this version (v0.0%3d)",
- gameVersion, SkyEngine::_systemVars.gameVersion);
+ gameVersion, SkyEngine::_systemVars->gameVersion);
return RESTORE_FAILED;
}
}
- SkyEngine::_systemVars.systemFlags |= SF_GAME_RESTORED;
+ SkyEngine::_systemVars->systemFlags |= SF_GAME_RESTORED;
LODSW(srcPos, _skySound->_saveSounds[0]);
LODSW(srcPos, _skySound->_saveSounds[1]);
@@ -1424,11 +1424,11 @@ uint16 Control::parseSaveData(uint8 *srcBuf) {
error("Restore failed! Savegame data = %lu bytes. Expected size: %d", (long)(srcPos-srcBuf), size);
_skyDisk->refreshFilesList(reloadList);
- SkyEngine::_systemVars.currentMusic = (uint16)music;
- if (!(SkyEngine::_systemVars.systemFlags & SF_MUS_OFF))
+ SkyEngine::_systemVars->currentMusic = (uint16)music;
+ if (!(SkyEngine::_systemVars->systemFlags & SF_MUS_OFF))
_skyMusic->startMusic((uint16)music);
_savedMouse = (uint16)mouseType;
- SkyEngine::_systemVars.currentPalette = palette; // will be set when doControlPanel ends
+ SkyEngine::_systemVars->currentPalette = palette; // will be set when doControlPanel ends
return GAME_RESTORED;
}
@@ -1457,7 +1457,7 @@ uint16 Control::restoreGameFromFile(bool autoSave) {
}
uint16 res = parseSaveData(saveData);
- SkyEngine::_systemVars.pastIntro = true;
+ SkyEngine::_systemVars->pastIntro = true;
delete inf;
free(saveData);
return res;
@@ -1479,7 +1479,7 @@ uint16 Control::quickXRestore(uint16 slot) {
_system->copyRectToScreen(_screenBuf, GAME_SCREEN_WIDTH, 0, 0, FULL_SCREEN_WIDTH, FULL_SCREEN_HEIGHT);
_system->updateScreen();
- if (SkyEngine::_systemVars.gameVersion < 331)
+ if (SkyEngine::_systemVars->gameVersion < 331)
_skyScreen->setPalette(60509);
else
_skyScreen->setPalette(60510);
@@ -1497,7 +1497,7 @@ uint16 Control::quickXRestore(uint16 slot) {
memset(_skyScreen->giveCurrent(), 0, GAME_SCREEN_WIDTH * GAME_SCREEN_HEIGHT);
_skyScreen->showScreen(_skyScreen->giveCurrent());
_skyScreen->forceRefresh();
- _skyScreen->setPaletteEndian((uint8 *)_skyCompact->fetchCpt(SkyEngine::_systemVars.currentPalette));
+ _skyScreen->setPaletteEndian((uint8 *)_skyCompact->fetchCpt(SkyEngine::_systemVars->currentPalette));
} else {
memset(_screenBuf, 0, FULL_SCREEN_WIDTH * FULL_SCREEN_HEIGHT);
_system->copyRectToScreen(_screenBuf, GAME_SCREEN_WIDTH, 0, 0, GAME_SCREEN_WIDTH, FULL_SCREEN_HEIGHT);
@@ -1512,20 +1512,25 @@ uint16 Control::quickXRestore(uint16 slot) {
return result;
}
+/**
+ * Restarts the game (skipping intro) and places Foster (the player)
+ * already on the top level of the factory.
+ *
+*/
void Control::restartGame() {
- if (SkyEngine::_systemVars.gameVersion <= 267)
+ if (SkyEngine::_systemVars->gameVersion <= 267)
return; // no restart for floppy demo
- uint8 *resetData = _skyCompact->createResetData((uint16)SkyEngine::_systemVars.gameVersion);
+ uint8 *resetData = _skyCompact->createResetData((uint16)SkyEngine::_systemVars->gameVersion);
parseSaveData((uint8 *)resetData);
free(resetData);
_skyScreen->forceRefresh();
memset(_skyScreen->giveCurrent(), 0, GAME_SCREEN_WIDTH * FULL_SCREEN_HEIGHT);
_skyScreen->showScreen(_skyScreen->giveCurrent());
- _skyScreen->setPaletteEndian((uint8 *)_skyCompact->fetchCpt(SkyEngine::_systemVars.currentPalette));
+ _skyScreen->setPaletteEndian((uint8 *)_skyCompact->fetchCpt(SkyEngine::_systemVars->currentPalette));
_skyMouse->spriteMouse(_savedMouse, 0, 0);
- SkyEngine::_systemVars.pastIntro = true;
+ SkyEngine::_systemVars->pastIntro = true;
}
void Control::delay(unsigned int amount) {
@@ -1547,7 +1552,7 @@ void Control::delay(unsigned int amount) {
_keyPressed = event.kbd;
break;
case Common::EVENT_MOUSEMOVE:
- if (!(SkyEngine::_systemVars.systemFlags & SF_MOUSE_LOCKED))
+ if (!(SkyEngine::_systemVars->systemFlags & SF_MOUSE_LOCKED))
_skyMouse->mouseMoved(event.mouse.x, event.mouse.y);
break;
case Common::EVENT_LBUTTONDOWN:
@@ -1593,8 +1598,8 @@ void Control::showGameQuitMsg() {
_skyText->displayText(_quitTexts[8 * 2 + 0], textBuf1, true, 320, 255);
_skyText->displayText(_quitTexts[8 * 2 + 1], textBuf2, true, 320, 255);
} else {
- _skyText->displayText(_quitTexts[SkyEngine::_systemVars.language * 2 + 0], textBuf1, true, 320, 255);
- _skyText->displayText(_quitTexts[SkyEngine::_systemVars.language * 2 + 1], textBuf2, true, 320, 255);
+ _skyText->displayText(_quitTexts[SkyEngine::_systemVars->language * 2 + 0], textBuf1, true, 320, 255);
+ _skyText->displayText(_quitTexts[SkyEngine::_systemVars->language * 2 + 1], textBuf2, true, 320, 255);
}
uint8 *curLine1 = textBuf1 + sizeof(DataFileHeader);
uint8 *curLine2 = textBuf2 + sizeof(DataFileHeader);
diff --git a/engines/sky/debug.cpp b/engines/sky/debug.cpp
index 2d00c0b0b4..d7ac12d9c2 100644
--- a/engines/sky/debug.cpp
+++ b/engines/sky/debug.cpp
@@ -1275,9 +1275,9 @@ bool Debugger::Cmd_LogicCommand(int argc, const char **argv) {
}
bool Debugger::Cmd_Info(int argc, const char **argv) {
- debugPrintf("Beneath a Steel Sky version: 0.0%d\n", SkyEngine::_systemVars.gameVersion);
- debugPrintf("Speech: %s\n", (SkyEngine::_systemVars.systemFlags & SF_ALLOW_SPEECH) ? "on" : "off");
- debugPrintf("Text : %s\n", (SkyEngine::_systemVars.systemFlags & SF_ALLOW_TEXT) ? "on" : "off");
+ debugPrintf("Beneath a Steel Sky version: 0.0%d\n", SkyEngine::_systemVars->gameVersion);
+ debugPrintf("Speech: %s\n", (SkyEngine::_systemVars->systemFlags & SF_ALLOW_SPEECH) ? "on" : "off");
+ debugPrintf("Text : %s\n", (SkyEngine::_systemVars->systemFlags & SF_ALLOW_TEXT) ? "on" : "off");
return true;
}
diff --git a/engines/sky/detection.cpp b/engines/sky/detection.cpp
index b9dd4172ae..59c65a4096 100644
--- a/engines/sky/detection.cpp
+++ b/engines/sky/detection.cpp
@@ -431,11 +431,11 @@ Common::Error SkyEngine::saveGameState(int slot, const Common::String &desc, boo
}
bool SkyEngine::canLoadGameStateCurrently() {
- return _systemVars.pastIntro && _skyControl->loadSaveAllowed();
+ return _systemVars->pastIntro && _skyControl->loadSaveAllowed();
}
bool SkyEngine::canSaveGameStateCurrently() {
- return _systemVars.pastIntro && _skyControl->loadSaveAllowed();
+ return _systemVars->pastIntro && _skyControl->loadSaveAllowed();
}
} // End of namespace Sky
diff --git a/engines/sky/disk.cpp b/engines/sky/disk.cpp
index 25f4a125f1..cc8f13c6be 100644
--- a/engines/sky/disk.cpp
+++ b/engines/sky/disk.cpp
@@ -98,7 +98,7 @@ uint8 *Disk::loadFile(uint16 fileNr) {
fileOffset &= 0x7FFFFF;
if (cflag) {
- if (SkyEngine::_systemVars.gameVersion == 331)
+ if (SkyEngine::_systemVars->gameVersion == 331)
fileOffset <<= 3;
else
fileOffset <<= 4;
diff --git a/engines/sky/logic.cpp b/engines/sky/logic.cpp
index aa2d4f6468..44be85bc28 100644
--- a/engines/sky/logic.cpp
+++ b/engines/sky/logic.cpp
@@ -105,7 +105,7 @@ Logic::~Logic() {
void Logic::initScreen0() {
fnEnterSection(0, 0, 0);
_skyMusic->startMusic(2);
- SkyEngine::_systemVars.currentMusic = 2;
+ SkyEngine::_systemVars->currentMusic = 2;
}
void Logic::parseSaveData(uint32 *data) {
@@ -541,7 +541,7 @@ void Logic::talk() {
if (_skyMouse->wasClicked())
for (int i = 0; i < ARRAYSIZE(clickTable); i++)
if (clickTable[i] == (uint16)_scriptVariables[CUR_ID]) {
- if ((SkyEngine::_systemVars.systemFlags & SF_ALLOW_SPEECH) && (!_skySound->speechFinished()))
+ if ((SkyEngine::_systemVars->systemFlags & SF_ALLOW_SPEECH) && (!_skySound->speechFinished()))
_skySound->stopSpeech();
if ((_compact->spTextId > 0) &&
(_compact->spTextId < 0xFFFF)) {
@@ -648,7 +648,7 @@ void Logic::choose() {
fnNoHuman(0, 0, 0); // kill mouse again
- SkyEngine::_systemVars.systemFlags &= ~SF_CHOOSING; // restore save/restore
+ SkyEngine::_systemVars->systemFlags &= ~SF_CHOOSING; // restore save/restore
_compact->logic = L_SCRIPT; // and continue script
logicScript();
@@ -1158,7 +1158,7 @@ void Logic::initScriptVariables() {
_scriptVariables[SC40_LOCKER_4_FLAG] = 1;
_scriptVariables[SC40_LOCKER_5_FLAG] = 1;
- if (SkyEngine::_systemVars.gameVersion == 288)
+ if (SkyEngine::_systemVars->gameVersion == 288)
memcpy(_scriptVariables + 352, forwardList1b288, sizeof(forwardList1b288));
else
memcpy(_scriptVariables + 352, forwardList1b, sizeof(forwardList1b));
@@ -1407,7 +1407,7 @@ bool Logic::fnCacheFast(uint32 a, uint32 b, uint32 c) {
bool Logic::fnDrawScreen(uint32 a, uint32 b, uint32 c) {
debug(5, "Call: fnDrawScreen(%X, %X)",a,b);
- SkyEngine::_systemVars.currentPalette = a;
+ SkyEngine::_systemVars->currentPalette = a;
_skyScreen->fnDrawScreen(a, b);
if (Logic::_scriptVariables[SCREEN] == 32) {
@@ -1746,7 +1746,7 @@ bool Logic::fnChooser(uint32 a, uint32 b, uint32 c) {
// setup the text questions to be clicked on
// read from TEXT1 until 0
- SkyEngine::_systemVars.systemFlags |= SF_CHOOSING; // can't save/restore while choosing
+ SkyEngine::_systemVars->systemFlags |= SF_CHOOSING; // can't save/restore while choosing
_scriptVariables[THE_CHOSEN_ONE] = 0; // clear result
@@ -2233,7 +2233,7 @@ bool Logic::fnCustomJoey(uint32 id, uint32 b, uint32 c) {
bool Logic::fnSetPalette(uint32 a, uint32 b, uint32 c) {
_skyScreen->setPaletteEndian((uint8 *)_skyCompact->fetchCpt(a));
- SkyEngine::_systemVars.currentPalette = a;
+ SkyEngine::_systemVars->currentPalette = a;
return true;
}
@@ -2312,19 +2312,19 @@ bool Logic::fnEnterSection(uint32 sectionNo, uint32 b, uint32 c) {
_skyControl->showGameQuitMsg();
_scriptVariables[CUR_SECTION] = sectionNo;
- SkyEngine::_systemVars.currentMusic = 0;
+ SkyEngine::_systemVars->currentMusic = 0;
if (sectionNo == 5) //linc section - has different mouse icons
_skyMouse->replaceMouseCursors(60302);
- if ((sectionNo != _currentSection) || (SkyEngine::_systemVars.systemFlags & SF_GAME_RESTORED)) {
+ if ((sectionNo != _currentSection) || (SkyEngine::_systemVars->systemFlags & SF_GAME_RESTORED)) {
_currentSection = sectionNo;
sectionNo++;
_skyMusic->loadSection((byte)sectionNo);
_skySound->loadSection((byte)sectionNo);
_skyGrid->loadGrids();
- SkyEngine::_systemVars.systemFlags &= ~SF_GAME_RESTORED;
+ SkyEngine::_systemVars->systemFlags &= ~SF_GAME_RESTORED;
}
return true;
@@ -2355,8 +2355,14 @@ bool Logic::fnWaitSwingEnd(uint32 a, uint32 b, uint32 c) {
return true;
}
+/**
+ * This function is called by the script logic
+ * even when the intro sequence has completed without skipping it.
+ * This means that it (also) gets called at the point after the intro
+ * when Foster in on the top level of the factory and finished his monologue.
+*/
bool Logic::fnSkipIntroCode(uint32 a, uint32 b, uint32 c) {
- SkyEngine::_systemVars.pastIntro = true;
+ SkyEngine::_systemVars->pastIntro = true;
return true;
}
@@ -2452,15 +2458,15 @@ bool Logic::fnStopFx(uint32 a, uint32 b, uint32 c) {
}
bool Logic::fnStartMusic(uint32 a, uint32 b, uint32 c) {
- if (!(SkyEngine::_systemVars.systemFlags & SF_MUS_OFF))
+ if (!(SkyEngine::_systemVars->systemFlags & SF_MUS_OFF))
_skyMusic->startMusic((uint16)a);
- SkyEngine::_systemVars.currentMusic = (uint16)a;
+ SkyEngine::_systemVars->currentMusic = (uint16)a;
return true;
}
bool Logic::fnStopMusic(uint32 a, uint32 b, uint32 c) {
_skyMusic->startMusic(0);
- SkyEngine::_systemVars.currentMusic = 0;
+ SkyEngine::_systemVars->currentMusic = 0;
return true;
}
@@ -2470,7 +2476,7 @@ bool Logic::fnFadeDown(uint32 a, uint32 b, uint32 c) {
}
bool Logic::fnFadeUp(uint32 a, uint32 b, uint32 c) {
- SkyEngine::_systemVars.currentPalette = a;
+ SkyEngine::_systemVars->currentPalette = a;
_skyScreen->fnFadeUp(a,b);
return true;
}
@@ -2524,7 +2530,7 @@ void Logic::stdSpeak(Compact *target, uint32 textNum, uint32 animNum, uint32 bas
_skyScreen->setFocusRectangle(Common::Rect::center(x, y, 192, 128));
- if ((SkyEngine::_systemVars.systemFlags & SF_ALLOW_TEXT) || !speechFileFound) {
+ if ((SkyEngine::_systemVars->systemFlags & SF_ALLOW_TEXT) || !speechFileFound) {
// form the text sprite, if player wants subtitles or
// if we couldn't find the speech file
DisplayedText textInfo;
diff --git a/engines/sky/mouse.cpp b/engines/sky/mouse.cpp
index 3f0dcb1eea..e7409dfdfe 100644
--- a/engines/sky/mouse.cpp
+++ b/engines/sky/mouse.cpp
@@ -150,11 +150,11 @@ void Mouse::fnSaveCoods() {
}
void Mouse::lockMouse() {
- SkyEngine::_systemVars.systemFlags |= SF_MOUSE_LOCKED;
+ SkyEngine::_systemVars->systemFlags |= SF_MOUSE_LOCKED;
}
void Mouse::unlockMouse() {
- SkyEngine::_systemVars.systemFlags &= ~SF_MOUSE_LOCKED;
+ SkyEngine::_systemVars->systemFlags &= ~SF_MOUSE_LOCKED;
}
void Mouse::restoreMouseData(uint16 frameNum) {
diff --git a/engines/sky/music/adlibchannel.cpp b/engines/sky/music/adlibchannel.cpp
index 2f44add466..99250e4dcf 100644
--- a/engines/sky/music/adlibchannel.cpp
+++ b/engines/sky/music/adlibchannel.cpp
@@ -49,7 +49,7 @@ AdLibChannel::AdLibChannel(OPL::OPL *opl, uint8 *pMusicData, uint16 startOfData)
uint16 instrumentDataLoc;
- if (SkyEngine::_systemVars.gameVersion == 109) {
+ if (SkyEngine::_systemVars->gameVersion == 109) {
//instrumentDataLoc = (_musicData[0x11D0] << 8) | _musicData[0x11CF];
//_frequenceTable = (uint16 *)(_musicData + 0x835);
//_registerTable = _musicData + 0xE35;
@@ -61,7 +61,7 @@ AdLibChannel::AdLibChannel(OPL::OPL *opl, uint8 *pMusicData, uint16 startOfData)
_registerTable = _musicData + 0xE68;
_opOutputTable = _musicData + 0xE7A;
_adlibRegMirror = _musicData + 0xF7D;
- } else if (SkyEngine::_systemVars.gameVersion == 267) {
+ } else if (SkyEngine::_systemVars->gameVersion == 267) {
instrumentDataLoc = READ_LE_UINT16(_musicData + 0x11FB);
_frequenceTable = (uint16 *)(_musicData + 0x7F4);
_registerTable = _musicData + 0xDF4;
diff --git a/engines/sky/music/adlibmusic.cpp b/engines/sky/music/adlibmusic.cpp
index 3ffd3f612d..ea0ada4fa5 100644
--- a/engines/sky/music/adlibmusic.cpp
+++ b/engines/sky/music/adlibmusic.cpp
@@ -55,14 +55,14 @@ void AdLibMusic::onTimer() {
}
void AdLibMusic::setupPointers() {
- if (SkyEngine::_systemVars.gameVersion == 109) {
+ if (SkyEngine::_systemVars->gameVersion == 109) {
// disk demo uses a different AdLib driver version, some offsets have changed
//_musicDataLoc = (_musicData[0x11CC] << 8) | _musicData[0x11CB];
//_initSequence = _musicData + 0xEC8;
_musicDataLoc = READ_LE_UINT16(_musicData + 0x1200);
_initSequence = _musicData + 0xEFB;
- } else if (SkyEngine::_systemVars.gameVersion == 267) {
+ } else if (SkyEngine::_systemVars->gameVersion == 267) {
_musicDataLoc = READ_LE_UINT16(_musicData + 0x11F7);
_initSequence = _musicData + 0xE87;
} else {
diff --git a/engines/sky/music/gmmusic.cpp b/engines/sky/music/gmmusic.cpp
index 7dc82807d9..d23e83f1f8 100644
--- a/engines/sky/music/gmmusic.cpp
+++ b/engines/sky/music/gmmusic.cpp
@@ -75,7 +75,7 @@ void GmMusic::timerCall() {
}
void GmMusic::setupPointers() {
- if (SkyEngine::_systemVars.gameVersion == 109) {
+ if (SkyEngine::_systemVars->gameVersion == 109) {
_musicDataLoc = READ_LE_UINT16(_musicData + 0x79B);
_sysExSequence = _musicData + 0x1EF2;
} else {
diff --git a/engines/sky/screen.cpp b/engines/sky/screen.cpp
index b91403c6bf..79025deb63 100644
--- a/engines/sky/screen.cpp
+++ b/engines/sky/screen.cpp
@@ -245,7 +245,7 @@ void Screen::fnDrawScreen(uint32 palette, uint32 scroll) {
}
void Screen::fnFadeDown(uint32 scroll) {
- if (((scroll != 123) && (scroll != 321)) || (SkyEngine::_systemVars.systemFlags & SF_NO_SCROLL)) {
+ if (((scroll != 123) && (scroll != 321)) || (SkyEngine::_systemVars->systemFlags & SF_NO_SCROLL)) {
uint32 delayTime = _system->getMillis();
for (uint8 cnt = 0; cnt < 32; cnt++) {
delayTime += 20;
@@ -328,7 +328,7 @@ void Screen::fnFadeUp(uint32 palNum, uint32 scroll) {
if ((scroll != 123) && (scroll != 321))
scroll = 0;
- if ((scroll == 0) || (SkyEngine::_systemVars.systemFlags & SF_NO_SCROLL)) {
+ if ((scroll == 0) || (SkyEngine::_systemVars->systemFlags & SF_NO_SCROLL)) {
uint8 *palette = (uint8 *)_skyCompact->fetchCpt(palNum);
if (palette == NULL)
error("Screen::fnFadeUp: can't fetch compact %X", palNum);
diff --git a/engines/sky/sky.cpp b/engines/sky/sky.cpp
index d8fc9c4b02..1a82b5837d 100644
--- a/engines/sky/sky.cpp
+++ b/engines/sky/sky.cpp
@@ -69,13 +69,33 @@
namespace Sky {
void *SkyEngine::_itemList[300];
-
-SystemVars SkyEngine::_systemVars = {0, 0, 0, 0, 4316, 0, 0, false, false };
-
+SystemVars *SkyEngine::_systemVars = nullptr;
const char *SkyEngine::shortcutsKeymapId = "sky-shortcuts";
SkyEngine::SkyEngine(OSystem *syst)
- : Engine(syst), _fastMode(0), _debugger(0) {
+ : Engine(syst), _fastMode(0), _debugger(0) {
+ _systemVars = new SystemVars();
+ _systemVars->systemFlags = 0;
+ _systemVars->gameVersion = 0;
+ _systemVars->mouseFlag = 0;
+ _systemVars->language = 0;
+ _systemVars->currentPalette = 4316;
+ _systemVars->gameSpeed = 0;
+ _systemVars->currentMusic = 0;
+ _systemVars->pastIntro = false;
+ _systemVars->paused = false;
+
+ _action = kSkyActionNone;
+ _skyLogic = nullptr;
+ _skySound = nullptr;
+ _skyMusic = nullptr;
+ _skyText = nullptr;
+ _skyMouse = nullptr;
+ _skyScreen = nullptr;
+
+ _skyDisk = nullptr;
+ _skyControl = nullptr;
+ _skyCompact = nullptr;
}
SkyEngine::~SkyEngine() {
@@ -93,6 +113,8 @@ SkyEngine::~SkyEngine() {
for (int i = 0; i < 300; i++)
if (_itemList[i])
free(_itemList[i]);
+
+ delete _systemVars;
}
void SkyEngine::syncSoundSettings() {
@@ -103,10 +125,10 @@ void SkyEngine::syncSoundSettings() {
mute = ConfMan.getBool("mute");
if (ConfMan.getBool("sfx_mute")) // set mute sfx status for native options menu (F5)
- SkyEngine::_systemVars.systemFlags |= SF_FX_OFF;
+ SkyEngine::_systemVars->systemFlags |= SF_FX_OFF;
if (ConfMan.getBool("music_mute")) { // CD version allows to mute music from native options menu (F5)
- SkyEngine::_systemVars.systemFlags |= SF_MUS_OFF;
+ SkyEngine::_systemVars->systemFlags |= SF_MUS_OFF;
}
// SkyEngine native sound volume range is [0, 127]
// However, via ScummVM UI, the volume range can be set within [0, 256]
@@ -123,10 +145,10 @@ void SkyEngine::initVirgin() {
}
void SkyEngine::handleKey() {
- if ((_action != kSkyActionNone || _keyPressed.keycode) && _systemVars.paused) {
+ if ((_action != kSkyActionNone || _keyPressed.keycode) && _systemVars->paused) {
_skySound->fnUnPauseFx();
- _systemVars.paused = false;
- _skyScreen->setPaletteEndian((uint8 *)_skyCompact->fetchCpt(SkyEngine::_systemVars.currentPalette));
+ _systemVars->paused = false;
+ _skyScreen->setPaletteEndian((uint8 *)_skyCompact->fetchCpt(SkyEngine::_systemVars->currentPalette));
} else {
switch (_action) {
case kSkyActionToggleFastMode:
@@ -142,7 +164,7 @@ void SkyEngine::handleKey() {
break;
case kSkyActionSkip:
- if (!_systemVars.pastIntro)
+ if (!_systemVars->pastIntro)
_skyControl->restartGame();
break;
@@ -153,7 +175,7 @@ void SkyEngine::handleKey() {
case kSkyActionPause:
_skyScreen->halvePalette();
_skySound->fnPauseFx();
- _systemVars.paused = true;
+ _systemVars->paused = true;
break;
default:
@@ -177,7 +199,10 @@ Common::Error SkyEngine::go() {
if (result != GAME_RESTORED) {
bool introSkipped = false;
- if (_systemVars.gameVersion > 272) { // don't do intro for floppydemos
+ // Clear pastIntro here (set to false) explicilty
+ // It should be false already, but better to ensure it
+ _systemVars->pastIntro = false;
+ if (_systemVars->gameVersion > 272) { // don't do intro for floppydemos
Intro *skyIntro = new Intro(_skyDisk, _skyScreen, _skyMusic, _skySound, _skyText, _mixer, _system);
bool floppyIntro = ConfMan.getBool("alt_intro");
introSkipped = !skyIntro->doIntro(floppyIntro);
@@ -190,10 +215,13 @@ Common::Error SkyEngine::go() {
// initial animation where Foster is being chased. initScreen0()
// shows the first scene together with that animation. We can't
// call both, as they both load the same scene.
- if (introSkipped)
+ if (introSkipped) {
+ // restart game sets the _systemVars->pastIntro = true;
_skyControl->restartGame();
- else
+ } else {
+
_skyLogic->initScreen0();
+ }
}
}
@@ -202,12 +230,12 @@ Common::Error SkyEngine::go() {
_skySound->checkFxQueue();
_skyMouse->mouseEngine();
handleKey();
- if (_systemVars.paused) {
+ if (_systemVars->paused) {
do {
_system->updateScreen();
delay(50);
handleKey();
- } while (_systemVars.paused);
+ } while (_systemVars->paused);
delayCount = _system->getMillis();
}
@@ -229,9 +257,9 @@ Common::Error SkyEngine::go() {
else if (_fastMode & 1)
delay(10);
else {
- delayCount += _systemVars.gameSpeed;
+ delayCount += _systemVars->gameSpeed;
int needDelay = delayCount - (int)_system->getMillis();
- if ((needDelay < 0) || (needDelay > _systemVars.gameSpeed)) {
+ if ((needDelay < 0) || (needDelay > _systemVars->gameSpeed)) {
needDelay = 0;
delayCount = _system->getMillis();
}
@@ -252,14 +280,14 @@ Common::Error SkyEngine::init() {
_skyDisk = new Disk();
_skySound = new Sound(_mixer, _skyDisk, Audio::Mixer::kMaxChannelVolume);
- _systemVars.gameVersion = _skyDisk->determineGameVersion();
+ _systemVars->gameVersion = _skyDisk->determineGameVersion();
MidiDriver::DeviceHandle dev = MidiDriver::detectDevice(MDT_ADLIB | MDT_MIDI | MDT_PREFER_MT32);
if (MidiDriver::getMusicType(dev) == MT_ADLIB) {
- _systemVars.systemFlags |= SF_SBLASTER;
+ _systemVars->systemFlags |= SF_SBLASTER;
_skyMusic = new AdLibMusic(_mixer, _skyDisk);
} else {
- _systemVars.systemFlags |= SF_ROLAND;
+ _systemVars->systemFlags |= SF_ROLAND;
if ((MidiDriver::getMusicType(dev) == MT_MT32) || ConfMan.getBool("native_mt32"))
_skyMusic = new MT32Music(MidiDriver::createMidi(dev), _mixer, _skyDisk);
else
@@ -270,20 +298,20 @@ Common::Error SkyEngine::init() {
if (ConfMan.hasKey("nosubtitles")) {
warning("Configuration key 'nosubtitles' is deprecated. Use 'subtitles' instead");
if (!ConfMan.getBool("nosubtitles"))
- _systemVars.systemFlags |= SF_ALLOW_TEXT;
+ _systemVars->systemFlags |= SF_ALLOW_TEXT;
}
if (ConfMan.getBool("subtitles"))
- _systemVars.systemFlags |= SF_ALLOW_TEXT;
+ _systemVars->systemFlags |= SF_ALLOW_TEXT;
if (!ConfMan.getBool("speech_mute"))
- _systemVars.systemFlags |= SF_ALLOW_SPEECH;
+ _systemVars->systemFlags |= SF_ALLOW_SPEECH;
} else
- _systemVars.systemFlags |= SF_ALLOW_TEXT;
+ _systemVars->systemFlags |= SF_ALLOW_TEXT;
- _systemVars.systemFlags |= SF_PLAY_VOCS;
- _systemVars.gameSpeed = 80;
+ _systemVars->systemFlags |= SF_PLAY_VOCS;
+ _systemVars->gameSpeed = 80;
_skyCompact = new SkyCompact();
_skyText = new Text(_skyDisk, _skyCompact);
@@ -305,44 +333,44 @@ Common::Error SkyEngine::init() {
switch (Common::parseLanguage(ConfMan.get("language"))) {
case Common::EN_USA:
- _systemVars.language = SKY_USA;
+ _systemVars->language = SKY_USA;
break;
case Common::DE_DEU:
- _systemVars.language = SKY_GERMAN;
+ _systemVars->language = SKY_GERMAN;
break;
case Common::FR_FRA:
- _systemVars.language = SKY_FRENCH;
+ _systemVars->language = SKY_FRENCH;
break;
case Common::IT_ITA:
- _systemVars.language = SKY_ITALIAN;
+ _systemVars->language = SKY_ITALIAN;
break;
case Common::PT_BRA:
- _systemVars.language = SKY_PORTUGUESE;
+ _systemVars->language = SKY_PORTUGUESE;
break;
case Common::ES_ESP:
- _systemVars.language = SKY_SPANISH;
+ _systemVars->language = SKY_SPANISH;
break;
case Common::SE_SWE:
- _systemVars.language = SKY_SWEDISH;
+ _systemVars->language = SKY_SWEDISH;
break;
case Common::EN_GRB:
- _systemVars.language = SKY_ENGLISH;
+ _systemVars->language = SKY_ENGLISH;
break;
default:
- _systemVars.language = SKY_ENGLISH;
+ _systemVars->language = SKY_ENGLISH;
break;
}
- if (!_skyDisk->fileExists(60600 + SkyEngine::_systemVars.language * 8)) {
+ if (!_skyDisk->fileExists(60600 + SkyEngine::_systemVars->language * 8)) {
warning("The language you selected does not exist in your BASS version");
if (_skyDisk->fileExists(60600))
- SkyEngine::_systemVars.language = SKY_ENGLISH; // default to GB english if it exists..
+ SkyEngine::_systemVars->language = SKY_ENGLISH; // default to GB english if it exists..
else if (_skyDisk->fileExists(60600 + SKY_USA * 8))
- SkyEngine::_systemVars.language = SKY_USA; // try US english...
+ SkyEngine::_systemVars->language = SKY_USA; // try US english...
else
for (uint8 cnt = SKY_ENGLISH; cnt <= SKY_SPANISH; cnt++)
if (_skyDisk->fileExists(60600 + cnt * 8)) { // pick the first language we can find
- SkyEngine::_systemVars.language = cnt;
+ SkyEngine::_systemVars->language = cnt;
break;
}
}
@@ -410,16 +438,16 @@ void SkyEngine::delay(int32 amount) {
_keyPressed = event.kbd;
break;
case Common::EVENT_MOUSEMOVE:
- if (!(_systemVars.systemFlags & SF_MOUSE_LOCKED))
+ if (!(_systemVars->systemFlags & SF_MOUSE_LOCKED))
_skyMouse->mouseMoved(event.mouse.x, event.mouse.y);
break;
case Common::EVENT_LBUTTONDOWN:
- if (!(_systemVars.systemFlags & SF_MOUSE_LOCKED))
+ if (!(_systemVars->systemFlags & SF_MOUSE_LOCKED))
_skyMouse->mouseMoved(event.mouse.x, event.mouse.y);
_skyMouse->buttonPressed(2);
break;
case Common::EVENT_RBUTTONDOWN:
- if (!(_systemVars.systemFlags & SF_MOUSE_LOCKED))
+ if (!(_systemVars->systemFlags & SF_MOUSE_LOCKED))
_skyMouse->mouseMoved(event.mouse.x, event.mouse.y);
_skyMouse->buttonPressed(1);
break;
@@ -437,7 +465,7 @@ void SkyEngine::delay(int32 amount) {
}
bool SkyEngine::isDemo() {
- switch (_systemVars.gameVersion) {
+ switch (_systemVars->gameVersion) {
case 109: // PC Gamer demo
case 267: // English floppy demo
case 272: // German floppy demo
@@ -451,12 +479,12 @@ bool SkyEngine::isDemo() {
case 372:
return false;
default:
- error("Unknown game version %d", _systemVars.gameVersion);
+ error("Unknown game version %d", _systemVars->gameVersion);
}
}
bool SkyEngine::isCDVersion() {
- switch (_systemVars.gameVersion) {
+ switch (_systemVars->gameVersion) {
case 109:
case 267:
case 272:
@@ -470,7 +498,7 @@ bool SkyEngine::isCDVersion() {
case 372:
return true;
default:
- error("Unknown game version %d", _systemVars.gameVersion);
+ error("Unknown game version %d", _systemVars->gameVersion);
}
}
diff --git a/engines/sky/sky.h b/engines/sky/sky.h
index ecebcc6628..7e19db7960 100644
--- a/engines/sky/sky.h
+++ b/engines/sky/sky.h
@@ -108,9 +108,7 @@ public:
static void *fetchItem(uint32 num);
static void *_itemList[300];
-
- static SystemVars _systemVars;
-
+ static SystemVars *_systemVars;
static const char *shortcutsKeymapId;
protected:
diff --git a/engines/sky/sound.cpp b/engines/sky/sound.cpp
index d9343d10c7..1da2c10bcc 100644
--- a/engines/sky/sound.cpp
+++ b/engines/sky/sound.cpp
@@ -1055,7 +1055,7 @@ void Sound::loadSection(uint8 pSection) {
free(_soundData);
_soundData = _skyDisk->loadFile(pSection * 4 + SOUND_FILE_BASE);
uint16 asmOfs;
- if (SkyEngine::_systemVars.gameVersion == 109) {
+ if (SkyEngine::_systemVars->gameVersion == 109) {
if (pSection == 0)
asmOfs = 0x78;
else
@@ -1075,7 +1075,7 @@ void Sound::loadSection(uint8 pSection) {
_sfxInfo = _soundData + _sfxBaseOfs;
// if we just restored a savegame, the sfxqueue holds the sound we need to restart
- if (!(SkyEngine::_systemVars.systemFlags & SF_GAME_RESTORED))
+ if (!(SkyEngine::_systemVars->systemFlags & SF_GAME_RESTORED))
for (uint8 cnt = 0; cnt < 4; cnt++)
_sfxQueue[cnt].count = 0;
}
@@ -1132,7 +1132,7 @@ void Sound::playSound(uint16 sound, uint16 volume, uint8 channel) {
void Sound::fnStartFx(uint32 sound, uint8 channel) {
_saveSounds[channel] = 0xFFFF;
- if (sound < 256 || sound > MAX_FX_NUMBER || (SkyEngine::_systemVars.systemFlags & SF_FX_OFF))
+ if (sound < 256 || sound > MAX_FX_NUMBER || (SkyEngine::_systemVars->systemFlags & SF_FX_OFF))
return;
uint8 screen = (uint8)(Logic::_scriptVariables[SCREEN] & 0xff);
@@ -1156,9 +1156,9 @@ void Sound::fnStartFx(uint32 sound, uint8 channel) {
uint8 volume = _mainSfxVolume; // start with standard vol
- if (SkyEngine::_systemVars.systemFlags & SF_SBLASTER)
+ if (SkyEngine::_systemVars->systemFlags & SF_SBLASTER)
volume = roomList[i].adlibVolume;
- else if (SkyEngine::_systemVars.systemFlags & SF_ROLAND)
+ else if (SkyEngine::_systemVars->systemFlags & SF_ROLAND)
volume = roomList[i].rolandVolume;
volume = (volume * _mainSfxVolume) >> 8;
@@ -1222,7 +1222,7 @@ void Sound::stopSpeech() {
}
bool Sound::startSpeech(uint16 textNum) {
- if (!(SkyEngine::_systemVars.systemFlags & SF_ALLOW_SPEECH))
+ if (!(SkyEngine::_systemVars->systemFlags & SF_ALLOW_SPEECH))
return false;
uint16 speechFileNum = _speechConvertTable[textNum >> 12] + (textNum & 0xFFF);
diff --git a/engines/sky/text.cpp b/engines/sky/text.cpp
index bf7b8e3787..f31a70f5ae 100644
--- a/engines/sky/text.cpp
+++ b/engines/sky/text.cpp
@@ -125,7 +125,7 @@ void Text::getText(uint32 textNr) { //load text #"textNr" into textBuffer
if (SkyEngine::_itemList[FIRST_TEXT_SEC + sectionNo] == NULL) { //check if already loaded
debug(5, "Loading Text item(s) for Section %d", (sectionNo >> 2));
- uint32 fileNo = sectionNo + ((SkyEngine::_systemVars.language * NO_OF_TEXT_SECTIONS) + 60600);
+ uint32 fileNo = sectionNo + ((SkyEngine::_systemVars->language * NO_OF_TEXT_SECTIONS) + 60600);
SkyEngine::_itemList[FIRST_TEXT_SEC + sectionNo] = (void **)_skyDisk->loadFile((uint16)fileNo);
}
uint8 *textDataPtr = (uint8 *)SkyEngine::_itemList[FIRST_TEXT_SEC + sectionNo];
@@ -417,7 +417,7 @@ uint32 Text::giveCurrentCharSet() {
}
void Text::initHuffTree() {
- switch (SkyEngine::_systemVars.gameVersion) {
+ switch (SkyEngine::_systemVars->gameVersion) {
case 109:
_huffTree = _huffTree_00109;
break;
@@ -447,13 +447,13 @@ void Text::initHuffTree() {
_huffTree = _huffTree_00372;
break;
default:
- error("Unknown game version %d", SkyEngine::_systemVars.gameVersion);
+ error("Unknown game version %d", SkyEngine::_systemVars->gameVersion);
}
}
bool Text::patchMessage(uint32 textNum) {
- uint16 patchIdx = _patchLangIdx[SkyEngine::_systemVars.language];
- uint16 patchNum = _patchLangNum[SkyEngine::_systemVars.language];
+ uint16 patchIdx = _patchLangIdx[SkyEngine::_systemVars->language];
+ uint16 patchNum = _patchLangNum[SkyEngine::_systemVars->language];
for (uint16 cnt = 0; cnt < patchNum; cnt++) {
if (_patchedMessages[cnt + patchIdx].textNr == textNum) {
strcpy(_textBuffer, _patchedMessages[cnt + patchIdx].text);
More information about the Scummvm-git-logs
mailing list