mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-22 04:01:23 +00:00
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.
This commit is contained in:
parent
3d4940b22d
commit
52eee0c696
@ -215,7 +215,7 @@ SkyCompact::SkyCompact() {
|
|||||||
uint16 diffSize = _cptFile->readUint16LE();
|
uint16 diffSize = _cptFile->readUint16LE();
|
||||||
uint16 *diffBuf = (uint16 *)malloc(diffSize * sizeof(uint16));
|
uint16 *diffBuf = (uint16 *)malloc(diffSize * sizeof(uint16));
|
||||||
_cptFile->read(diffBuf, diffSize * sizeof(uint16));
|
_cptFile->read(diffBuf, diffSize * sizeof(uint16));
|
||||||
if (SkyEngine::_systemVars.gameVersion == 288) {
|
if (SkyEngine::_systemVars->gameVersion == 288) {
|
||||||
uint16 *diffPos = diffBuf;
|
uint16 *diffPos = diffBuf;
|
||||||
for (cnt = 0; cnt < numDiffs; cnt++) {
|
for (cnt = 0; cnt < numDiffs; cnt++) {
|
||||||
uint16 cptId = READ_LE_UINT16(diffPos++);
|
uint16 cptId = READ_LE_UINT16(diffPos++);
|
||||||
|
@ -281,7 +281,7 @@ void Control::initPanel() {
|
|||||||
memset(_screenBuf, 0, GAME_SCREEN_WIDTH * FULL_SCREEN_HEIGHT);
|
memset(_screenBuf, 0, GAME_SCREEN_WIDTH * FULL_SCREEN_HEIGHT);
|
||||||
|
|
||||||
uint16 volY = (127 - _skyMusic->giveVolume()) / 4 + 59 - MPNL_Y; // volume slider's Y coordinate
|
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
|
spdY += MPNL_Y + 83; // speed slider's initial position
|
||||||
|
|
||||||
_sprites.controlPanel = _skyDisk->loadFile(60500);
|
_sprites.controlPanel = _skyDisk->loadFile(60500);
|
||||||
@ -293,7 +293,7 @@ void Control::initPanel() {
|
|||||||
_sprites.slode = _skyDisk->loadFile(60506);
|
_sprites.slode = _skyDisk->loadFile(60506);
|
||||||
_sprites.slode2 = _skyDisk->loadFile(60507);
|
_sprites.slode2 = _skyDisk->loadFile(60507);
|
||||||
_sprites.slide2 = _skyDisk->loadFile(60508);
|
_sprites.slide2 = _skyDisk->loadFile(60508);
|
||||||
if (SkyEngine::_systemVars.gameVersion < 368)
|
if (SkyEngine::_systemVars->gameVersion < 368)
|
||||||
_sprites.musicBodge = NULL;
|
_sprites.musicBodge = NULL;
|
||||||
else
|
else
|
||||||
_sprites.musicBodge = _skyDisk->loadFile(60509);
|
_sprites.musicBodge = _skyDisk->loadFile(60509);
|
||||||
@ -447,7 +447,7 @@ void Control::drawMainPanel() {
|
|||||||
_slide2->drawToScreen(WITH_MASK);
|
_slide2->drawToScreen(WITH_MASK);
|
||||||
_bodge->drawToScreen(WITH_MASK);
|
_bodge->drawToScreen(WITH_MASK);
|
||||||
if (SkyEngine::isCDVersion())
|
if (SkyEngine::isCDVersion())
|
||||||
drawTextCross(SkyEngine::_systemVars.systemFlags & TEXT_FLAG_MASK);
|
drawTextCross(SkyEngine::_systemVars->systemFlags & TEXT_FLAG_MASK);
|
||||||
_statusBar->drawToScreen();
|
_statusBar->drawToScreen();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -456,7 +456,7 @@ void Control::doLoadSavePanel() {
|
|||||||
return; // I don't think this can even happen
|
return; // I don't think this can even happen
|
||||||
initPanel();
|
initPanel();
|
||||||
_skyScreen->clearScreen();
|
_skyScreen->clearScreen();
|
||||||
if (SkyEngine::_systemVars.gameVersion < 331)
|
if (SkyEngine::_systemVars->gameVersion < 331)
|
||||||
_skyScreen->setPalette(60509);
|
_skyScreen->setPalette(60509);
|
||||||
else
|
else
|
||||||
_skyScreen->setPalette(60510);
|
_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->copyRectToScreen(_screenBuf, GAME_SCREEN_WIDTH, 0, 0, GAME_SCREEN_WIDTH, FULL_SCREEN_HEIGHT);
|
||||||
_system->updateScreen();
|
_system->updateScreen();
|
||||||
_skyScreen->forceRefresh();
|
_skyScreen->forceRefresh();
|
||||||
_skyScreen->setPaletteEndian((uint8 *)_skyCompact->fetchCpt(SkyEngine::_systemVars.currentPalette));
|
_skyScreen->setPaletteEndian((uint8 *)_skyCompact->fetchCpt(SkyEngine::_systemVars->currentPalette));
|
||||||
removePanel();
|
removePanel();
|
||||||
_skyMouse->spriteMouse(_savedMouse, 0, 0);
|
_skyMouse->spriteMouse(_savedMouse, 0, 0);
|
||||||
_skyText->fnSetFont(_savedCharSet);
|
_skyText->fnSetFont(_savedCharSet);
|
||||||
@ -491,19 +491,19 @@ void Control::doControlPanel() {
|
|||||||
_skyText->fnSetFont(2);
|
_skyText->fnSetFont(2);
|
||||||
|
|
||||||
_skyScreen->clearScreen();
|
_skyScreen->clearScreen();
|
||||||
if (SkyEngine::_systemVars.gameVersion < 331)
|
if (SkyEngine::_systemVars->gameVersion < 331)
|
||||||
_skyScreen->setPalette(60509);
|
_skyScreen->setPalette(60509);
|
||||||
else
|
else
|
||||||
_skyScreen->setPalette(60510);
|
_skyScreen->setPalette(60510);
|
||||||
|
|
||||||
// Set initial button lights
|
// Set initial button lights
|
||||||
_fxPanButton->_curSprite =
|
_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
|
// music button only available in floppy version
|
||||||
if (!SkyEngine::isCDVersion())
|
if (!SkyEngine::isCDVersion())
|
||||||
_musicPanButton->_curSprite =
|
_musicPanButton->_curSprite =
|
||||||
(SkyEngine::_systemVars.systemFlags & SF_MUS_OFF ? 0 : 2);
|
(SkyEngine::_systemVars->systemFlags & SF_MUS_OFF ? 0 : 2);
|
||||||
|
|
||||||
drawMainPanel();
|
drawMainPanel();
|
||||||
|
|
||||||
@ -554,7 +554,7 @@ void Control::doControlPanel() {
|
|||||||
if (!Engine::shouldQuit())
|
if (!Engine::shouldQuit())
|
||||||
_system->updateScreen();
|
_system->updateScreen();
|
||||||
_skyScreen->forceRefresh();
|
_skyScreen->forceRefresh();
|
||||||
_skyScreen->setPaletteEndian((uint8 *)_skyCompact->fetchCpt(SkyEngine::_systemVars.currentPalette));
|
_skyScreen->setPaletteEndian((uint8 *)_skyCompact->fetchCpt(SkyEngine::_systemVars->currentPalette));
|
||||||
removePanel();
|
removePanel();
|
||||||
_skyMouse->spriteMouse(_savedMouse, 0, 0);
|
_skyMouse->spriteMouse(_savedMouse, 0, 0);
|
||||||
_skyText->fnSetFont(_savedCharSet);
|
_skyText->fnSetFont(_savedCharSet);
|
||||||
@ -757,13 +757,13 @@ uint16 Control::doSpeedSlide() {
|
|||||||
_text->drawToScreen(WITH_MASK);
|
_text->drawToScreen(WITH_MASK);
|
||||||
_system->updateScreen();
|
_system->updateScreen();
|
||||||
}
|
}
|
||||||
SkyEngine::_systemVars.gameSpeed = speedDelay;
|
SkyEngine::_systemVars->gameSpeed = speedDelay;
|
||||||
return SPEED_CHANGED;
|
return SPEED_CHANGED;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Control::toggleFx(ConResource *pButton) {
|
void Control::toggleFx(ConResource *pButton) {
|
||||||
SkyEngine::_systemVars.systemFlags ^= SF_FX_OFF;
|
SkyEngine::_systemVars->systemFlags ^= SF_FX_OFF;
|
||||||
if (SkyEngine::_systemVars.systemFlags & SF_FX_OFF) {
|
if (SkyEngine::_systemVars->systemFlags & SF_FX_OFF) {
|
||||||
pButton->_curSprite = 0;
|
pButton->_curSprite = 0;
|
||||||
_statusBar->setToText(0x7000 + 87);
|
_statusBar->setToText(0x7000 + 87);
|
||||||
} else {
|
} else {
|
||||||
@ -771,15 +771,15 @@ void Control::toggleFx(ConResource *pButton) {
|
|||||||
_statusBar->setToText(0x7000 + 86);
|
_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);
|
pButton->drawToScreen(WITH_MASK);
|
||||||
_system->updateScreen();
|
_system->updateScreen();
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16 Control::toggleText() {
|
uint16 Control::toggleText() {
|
||||||
uint32 flags = SkyEngine::_systemVars.systemFlags & TEXT_FLAG_MASK;
|
uint32 flags = SkyEngine::_systemVars->systemFlags & TEXT_FLAG_MASK;
|
||||||
SkyEngine::_systemVars.systemFlags &= ~TEXT_FLAG_MASK;
|
SkyEngine::_systemVars->systemFlags &= ~TEXT_FLAG_MASK;
|
||||||
|
|
||||||
if (flags == SF_ALLOW_TEXT) {
|
if (flags == SF_ALLOW_TEXT) {
|
||||||
flags = SF_ALLOW_SPEECH;
|
flags = SF_ALLOW_SPEECH;
|
||||||
@ -795,7 +795,7 @@ uint16 Control::toggleText() {
|
|||||||
ConfMan.setBool("subtitles", (flags & SF_ALLOW_TEXT) != 0);
|
ConfMan.setBool("subtitles", (flags & SF_ALLOW_TEXT) != 0);
|
||||||
ConfMan.setBool("speech_mute", (flags & SF_ALLOW_SPEECH) == 0);
|
ConfMan.setBool("speech_mute", (flags & SF_ALLOW_SPEECH) == 0);
|
||||||
|
|
||||||
SkyEngine::_systemVars.systemFlags |= flags;
|
SkyEngine::_systemVars->systemFlags |= flags;
|
||||||
|
|
||||||
drawTextCross(flags);
|
drawTextCross(flags);
|
||||||
|
|
||||||
@ -804,18 +804,18 @@ uint16 Control::toggleText() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Control::toggleMusic(ConResource *pButton) {
|
void Control::toggleMusic(ConResource *pButton) {
|
||||||
SkyEngine::_systemVars.systemFlags ^= SF_MUS_OFF;
|
SkyEngine::_systemVars->systemFlags ^= SF_MUS_OFF;
|
||||||
if (SkyEngine::_systemVars.systemFlags & SF_MUS_OFF) {
|
if (SkyEngine::_systemVars->systemFlags & SF_MUS_OFF) {
|
||||||
_skyMusic->startMusic(0);
|
_skyMusic->startMusic(0);
|
||||||
pButton->_curSprite = 0;
|
pButton->_curSprite = 0;
|
||||||
_statusBar->setToText(0x7000 + 89);
|
_statusBar->setToText(0x7000 + 89);
|
||||||
} else {
|
} else {
|
||||||
_skyMusic->startMusic(SkyEngine::_systemVars.currentMusic);
|
_skyMusic->startMusic(SkyEngine::_systemVars->currentMusic);
|
||||||
pButton->_curSprite = 2;
|
pButton->_curSprite = 2;
|
||||||
_statusBar->setToText(0x7000 + 88);
|
_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);
|
pButton->drawToScreen(WITH_MASK);
|
||||||
_system->updateScreen();
|
_system->updateScreen();
|
||||||
@ -1109,7 +1109,7 @@ void Control::loadDescriptions(Common::StringArray &savenames) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool Control::loadSaveAllowed() {
|
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
|
return false; // texts get lost during load/save, so don't allow it during choosing
|
||||||
if (Logic::_scriptVariables[SCREEN] >= 101)
|
if (Logic::_scriptVariables[SCREEN] >= 101)
|
||||||
return false; // same problem with LINC terminals
|
return false; // same problem with LINC terminals
|
||||||
@ -1193,7 +1193,7 @@ uint32 Control::prepareSaveData(uint8 *destBuf) {
|
|||||||
memset(destBuf, 0, 4); // space for data size
|
memset(destBuf, 0, 4); // space for data size
|
||||||
uint8 *destPos = destBuf + 4;
|
uint8 *destPos = destBuf + 4;
|
||||||
STOSD(destPos, SAVE_FILE_REVISION);
|
STOSD(destPos, SAVE_FILE_REVISION);
|
||||||
STOSD(destPos, SkyEngine::_systemVars.gameVersion);
|
STOSD(destPos, SkyEngine::_systemVars->gameVersion);
|
||||||
|
|
||||||
STOSW(destPos, _skySound->_saveSounds[0]);
|
STOSW(destPos, _skySound->_saveSounds[0]);
|
||||||
STOSW(destPos, _skySound->_saveSounds[1]);
|
STOSW(destPos, _skySound->_saveSounds[1]);
|
||||||
@ -1201,7 +1201,7 @@ uint32 Control::prepareSaveData(uint8 *destBuf) {
|
|||||||
STOSD(destPos, _skyMusic->giveCurrentMusic());
|
STOSD(destPos, _skyMusic->giveCurrentMusic());
|
||||||
STOSD(destPos, _savedCharSet);
|
STOSD(destPos, _savedCharSet);
|
||||||
STOSD(destPos, _savedMouse);
|
STOSD(destPos, _savedMouse);
|
||||||
STOSD(destPos, SkyEngine::_systemVars.currentPalette);
|
STOSD(destPos, SkyEngine::_systemVars->currentPalette);
|
||||||
for (cnt = 0; cnt < 838; cnt++)
|
for (cnt = 0; cnt < 838; cnt++)
|
||||||
STOSD(destPos, Logic::_scriptVariables[cnt]);
|
STOSD(destPos, Logic::_scriptVariables[cnt]);
|
||||||
uint32 *loadedFilesList = _skyDisk->giveLoadedFilesList();
|
uint32 *loadedFilesList = _skyDisk->giveLoadedFilesList();
|
||||||
@ -1360,16 +1360,16 @@ uint16 Control::parseSaveData(uint8 *srcBuf) {
|
|||||||
return RESTORE_FAILED;
|
return RESTORE_FAILED;
|
||||||
}
|
}
|
||||||
LODSD(srcPos, gameVersion);
|
LODSD(srcPos, gameVersion);
|
||||||
if (gameVersion != SkyEngine::_systemVars.gameVersion) {
|
if (gameVersion != SkyEngine::_systemVars->gameVersion) {
|
||||||
if ((!SkyEngine::isCDVersion()) || (gameVersion < 365)) { // cd versions are compatible
|
if ((!SkyEngine::isCDVersion()) || (gameVersion < 365)) { // cd versions are compatible
|
||||||
displayMessage(NULL, "This saved game was created by\n"
|
displayMessage(NULL, "This saved game was created by\n"
|
||||||
"Beneath a Steel Sky v0.0%03d\n"
|
"Beneath a Steel Sky v0.0%03d\n"
|
||||||
"It cannot be loaded by this version (v0.0%3d)",
|
"It cannot be loaded by this version (v0.0%3d)",
|
||||||
gameVersion, SkyEngine::_systemVars.gameVersion);
|
gameVersion, SkyEngine::_systemVars->gameVersion);
|
||||||
return RESTORE_FAILED;
|
return RESTORE_FAILED;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
SkyEngine::_systemVars.systemFlags |= SF_GAME_RESTORED;
|
SkyEngine::_systemVars->systemFlags |= SF_GAME_RESTORED;
|
||||||
|
|
||||||
LODSW(srcPos, _skySound->_saveSounds[0]);
|
LODSW(srcPos, _skySound->_saveSounds[0]);
|
||||||
LODSW(srcPos, _skySound->_saveSounds[1]);
|
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);
|
error("Restore failed! Savegame data = %lu bytes. Expected size: %d", (long)(srcPos-srcBuf), size);
|
||||||
|
|
||||||
_skyDisk->refreshFilesList(reloadList);
|
_skyDisk->refreshFilesList(reloadList);
|
||||||
SkyEngine::_systemVars.currentMusic = (uint16)music;
|
SkyEngine::_systemVars->currentMusic = (uint16)music;
|
||||||
if (!(SkyEngine::_systemVars.systemFlags & SF_MUS_OFF))
|
if (!(SkyEngine::_systemVars->systemFlags & SF_MUS_OFF))
|
||||||
_skyMusic->startMusic((uint16)music);
|
_skyMusic->startMusic((uint16)music);
|
||||||
_savedMouse = (uint16)mouseType;
|
_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;
|
return GAME_RESTORED;
|
||||||
}
|
}
|
||||||
@ -1457,7 +1457,7 @@ uint16 Control::restoreGameFromFile(bool autoSave) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
uint16 res = parseSaveData(saveData);
|
uint16 res = parseSaveData(saveData);
|
||||||
SkyEngine::_systemVars.pastIntro = true;
|
SkyEngine::_systemVars->pastIntro = true;
|
||||||
delete inf;
|
delete inf;
|
||||||
free(saveData);
|
free(saveData);
|
||||||
return res;
|
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->copyRectToScreen(_screenBuf, GAME_SCREEN_WIDTH, 0, 0, FULL_SCREEN_WIDTH, FULL_SCREEN_HEIGHT);
|
||||||
_system->updateScreen();
|
_system->updateScreen();
|
||||||
|
|
||||||
if (SkyEngine::_systemVars.gameVersion < 331)
|
if (SkyEngine::_systemVars->gameVersion < 331)
|
||||||
_skyScreen->setPalette(60509);
|
_skyScreen->setPalette(60509);
|
||||||
else
|
else
|
||||||
_skyScreen->setPalette(60510);
|
_skyScreen->setPalette(60510);
|
||||||
@ -1497,7 +1497,7 @@ uint16 Control::quickXRestore(uint16 slot) {
|
|||||||
memset(_skyScreen->giveCurrent(), 0, GAME_SCREEN_WIDTH * GAME_SCREEN_HEIGHT);
|
memset(_skyScreen->giveCurrent(), 0, GAME_SCREEN_WIDTH * GAME_SCREEN_HEIGHT);
|
||||||
_skyScreen->showScreen(_skyScreen->giveCurrent());
|
_skyScreen->showScreen(_skyScreen->giveCurrent());
|
||||||
_skyScreen->forceRefresh();
|
_skyScreen->forceRefresh();
|
||||||
_skyScreen->setPaletteEndian((uint8 *)_skyCompact->fetchCpt(SkyEngine::_systemVars.currentPalette));
|
_skyScreen->setPaletteEndian((uint8 *)_skyCompact->fetchCpt(SkyEngine::_systemVars->currentPalette));
|
||||||
} else {
|
} else {
|
||||||
memset(_screenBuf, 0, FULL_SCREEN_WIDTH * FULL_SCREEN_HEIGHT);
|
memset(_screenBuf, 0, FULL_SCREEN_WIDTH * FULL_SCREEN_HEIGHT);
|
||||||
_system->copyRectToScreen(_screenBuf, GAME_SCREEN_WIDTH, 0, 0, GAME_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;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Restarts the game (skipping intro) and places Foster (the player)
|
||||||
|
* already on the top level of the factory.
|
||||||
|
*
|
||||||
|
*/
|
||||||
void Control::restartGame() {
|
void Control::restartGame() {
|
||||||
if (SkyEngine::_systemVars.gameVersion <= 267)
|
if (SkyEngine::_systemVars->gameVersion <= 267)
|
||||||
return; // no restart for floppy demo
|
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);
|
parseSaveData((uint8 *)resetData);
|
||||||
free(resetData);
|
free(resetData);
|
||||||
_skyScreen->forceRefresh();
|
_skyScreen->forceRefresh();
|
||||||
|
|
||||||
memset(_skyScreen->giveCurrent(), 0, GAME_SCREEN_WIDTH * FULL_SCREEN_HEIGHT);
|
memset(_skyScreen->giveCurrent(), 0, GAME_SCREEN_WIDTH * FULL_SCREEN_HEIGHT);
|
||||||
_skyScreen->showScreen(_skyScreen->giveCurrent());
|
_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);
|
_skyMouse->spriteMouse(_savedMouse, 0, 0);
|
||||||
SkyEngine::_systemVars.pastIntro = true;
|
SkyEngine::_systemVars->pastIntro = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Control::delay(unsigned int amount) {
|
void Control::delay(unsigned int amount) {
|
||||||
@ -1547,7 +1552,7 @@ void Control::delay(unsigned int amount) {
|
|||||||
_keyPressed = event.kbd;
|
_keyPressed = event.kbd;
|
||||||
break;
|
break;
|
||||||
case Common::EVENT_MOUSEMOVE:
|
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);
|
_skyMouse->mouseMoved(event.mouse.x, event.mouse.y);
|
||||||
break;
|
break;
|
||||||
case Common::EVENT_LBUTTONDOWN:
|
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 + 0], textBuf1, true, 320, 255);
|
||||||
_skyText->displayText(_quitTexts[8 * 2 + 1], textBuf2, true, 320, 255);
|
_skyText->displayText(_quitTexts[8 * 2 + 1], textBuf2, true, 320, 255);
|
||||||
} else {
|
} else {
|
||||||
_skyText->displayText(_quitTexts[SkyEngine::_systemVars.language * 2 + 0], textBuf1, 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);
|
_skyText->displayText(_quitTexts[SkyEngine::_systemVars->language * 2 + 1], textBuf2, true, 320, 255);
|
||||||
}
|
}
|
||||||
uint8 *curLine1 = textBuf1 + sizeof(DataFileHeader);
|
uint8 *curLine1 = textBuf1 + sizeof(DataFileHeader);
|
||||||
uint8 *curLine2 = textBuf2 + sizeof(DataFileHeader);
|
uint8 *curLine2 = textBuf2 + sizeof(DataFileHeader);
|
||||||
|
@ -1275,9 +1275,9 @@ bool Debugger::Cmd_LogicCommand(int argc, const char **argv) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool Debugger::Cmd_Info(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("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("Speech: %s\n", (SkyEngine::_systemVars->systemFlags & SF_ALLOW_SPEECH) ? "on" : "off");
|
||||||
debugPrintf("Text : %s\n", (SkyEngine::_systemVars.systemFlags & SF_ALLOW_TEXT) ? "on" : "off");
|
debugPrintf("Text : %s\n", (SkyEngine::_systemVars->systemFlags & SF_ALLOW_TEXT) ? "on" : "off");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -431,11 +431,11 @@ Common::Error SkyEngine::saveGameState(int slot, const Common::String &desc, boo
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool SkyEngine::canLoadGameStateCurrently() {
|
bool SkyEngine::canLoadGameStateCurrently() {
|
||||||
return _systemVars.pastIntro && _skyControl->loadSaveAllowed();
|
return _systemVars->pastIntro && _skyControl->loadSaveAllowed();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SkyEngine::canSaveGameStateCurrently() {
|
bool SkyEngine::canSaveGameStateCurrently() {
|
||||||
return _systemVars.pastIntro && _skyControl->loadSaveAllowed();
|
return _systemVars->pastIntro && _skyControl->loadSaveAllowed();
|
||||||
}
|
}
|
||||||
|
|
||||||
} // End of namespace Sky
|
} // End of namespace Sky
|
||||||
|
@ -98,7 +98,7 @@ uint8 *Disk::loadFile(uint16 fileNr) {
|
|||||||
fileOffset &= 0x7FFFFF;
|
fileOffset &= 0x7FFFFF;
|
||||||
|
|
||||||
if (cflag) {
|
if (cflag) {
|
||||||
if (SkyEngine::_systemVars.gameVersion == 331)
|
if (SkyEngine::_systemVars->gameVersion == 331)
|
||||||
fileOffset <<= 3;
|
fileOffset <<= 3;
|
||||||
else
|
else
|
||||||
fileOffset <<= 4;
|
fileOffset <<= 4;
|
||||||
|
@ -105,7 +105,7 @@ Logic::~Logic() {
|
|||||||
void Logic::initScreen0() {
|
void Logic::initScreen0() {
|
||||||
fnEnterSection(0, 0, 0);
|
fnEnterSection(0, 0, 0);
|
||||||
_skyMusic->startMusic(2);
|
_skyMusic->startMusic(2);
|
||||||
SkyEngine::_systemVars.currentMusic = 2;
|
SkyEngine::_systemVars->currentMusic = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Logic::parseSaveData(uint32 *data) {
|
void Logic::parseSaveData(uint32 *data) {
|
||||||
@ -541,7 +541,7 @@ void Logic::talk() {
|
|||||||
if (_skyMouse->wasClicked())
|
if (_skyMouse->wasClicked())
|
||||||
for (int i = 0; i < ARRAYSIZE(clickTable); i++)
|
for (int i = 0; i < ARRAYSIZE(clickTable); i++)
|
||||||
if (clickTable[i] == (uint16)_scriptVariables[CUR_ID]) {
|
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();
|
_skySound->stopSpeech();
|
||||||
if ((_compact->spTextId > 0) &&
|
if ((_compact->spTextId > 0) &&
|
||||||
(_compact->spTextId < 0xFFFF)) {
|
(_compact->spTextId < 0xFFFF)) {
|
||||||
@ -648,7 +648,7 @@ void Logic::choose() {
|
|||||||
|
|
||||||
fnNoHuman(0, 0, 0); // kill mouse again
|
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
|
_compact->logic = L_SCRIPT; // and continue script
|
||||||
logicScript();
|
logicScript();
|
||||||
@ -1158,7 +1158,7 @@ void Logic::initScriptVariables() {
|
|||||||
_scriptVariables[SC40_LOCKER_4_FLAG] = 1;
|
_scriptVariables[SC40_LOCKER_4_FLAG] = 1;
|
||||||
_scriptVariables[SC40_LOCKER_5_FLAG] = 1;
|
_scriptVariables[SC40_LOCKER_5_FLAG] = 1;
|
||||||
|
|
||||||
if (SkyEngine::_systemVars.gameVersion == 288)
|
if (SkyEngine::_systemVars->gameVersion == 288)
|
||||||
memcpy(_scriptVariables + 352, forwardList1b288, sizeof(forwardList1b288));
|
memcpy(_scriptVariables + 352, forwardList1b288, sizeof(forwardList1b288));
|
||||||
else
|
else
|
||||||
memcpy(_scriptVariables + 352, forwardList1b, sizeof(forwardList1b));
|
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) {
|
bool Logic::fnDrawScreen(uint32 a, uint32 b, uint32 c) {
|
||||||
debug(5, "Call: fnDrawScreen(%X, %X)",a,b);
|
debug(5, "Call: fnDrawScreen(%X, %X)",a,b);
|
||||||
SkyEngine::_systemVars.currentPalette = a;
|
SkyEngine::_systemVars->currentPalette = a;
|
||||||
_skyScreen->fnDrawScreen(a, b);
|
_skyScreen->fnDrawScreen(a, b);
|
||||||
|
|
||||||
if (Logic::_scriptVariables[SCREEN] == 32) {
|
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
|
// setup the text questions to be clicked on
|
||||||
// read from TEXT1 until 0
|
// 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
|
_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) {
|
bool Logic::fnSetPalette(uint32 a, uint32 b, uint32 c) {
|
||||||
_skyScreen->setPaletteEndian((uint8 *)_skyCompact->fetchCpt(a));
|
_skyScreen->setPaletteEndian((uint8 *)_skyCompact->fetchCpt(a));
|
||||||
SkyEngine::_systemVars.currentPalette = a;
|
SkyEngine::_systemVars->currentPalette = a;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2312,19 +2312,19 @@ bool Logic::fnEnterSection(uint32 sectionNo, uint32 b, uint32 c) {
|
|||||||
_skyControl->showGameQuitMsg();
|
_skyControl->showGameQuitMsg();
|
||||||
|
|
||||||
_scriptVariables[CUR_SECTION] = sectionNo;
|
_scriptVariables[CUR_SECTION] = sectionNo;
|
||||||
SkyEngine::_systemVars.currentMusic = 0;
|
SkyEngine::_systemVars->currentMusic = 0;
|
||||||
|
|
||||||
if (sectionNo == 5) //linc section - has different mouse icons
|
if (sectionNo == 5) //linc section - has different mouse icons
|
||||||
_skyMouse->replaceMouseCursors(60302);
|
_skyMouse->replaceMouseCursors(60302);
|
||||||
|
|
||||||
if ((sectionNo != _currentSection) || (SkyEngine::_systemVars.systemFlags & SF_GAME_RESTORED)) {
|
if ((sectionNo != _currentSection) || (SkyEngine::_systemVars->systemFlags & SF_GAME_RESTORED)) {
|
||||||
_currentSection = sectionNo;
|
_currentSection = sectionNo;
|
||||||
|
|
||||||
sectionNo++;
|
sectionNo++;
|
||||||
_skyMusic->loadSection((byte)sectionNo);
|
_skyMusic->loadSection((byte)sectionNo);
|
||||||
_skySound->loadSection((byte)sectionNo);
|
_skySound->loadSection((byte)sectionNo);
|
||||||
_skyGrid->loadGrids();
|
_skyGrid->loadGrids();
|
||||||
SkyEngine::_systemVars.systemFlags &= ~SF_GAME_RESTORED;
|
SkyEngine::_systemVars->systemFlags &= ~SF_GAME_RESTORED;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@ -2355,8 +2355,14 @@ bool Logic::fnWaitSwingEnd(uint32 a, uint32 b, uint32 c) {
|
|||||||
return true;
|
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) {
|
bool Logic::fnSkipIntroCode(uint32 a, uint32 b, uint32 c) {
|
||||||
SkyEngine::_systemVars.pastIntro = true;
|
SkyEngine::_systemVars->pastIntro = true;
|
||||||
return 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) {
|
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);
|
_skyMusic->startMusic((uint16)a);
|
||||||
SkyEngine::_systemVars.currentMusic = (uint16)a;
|
SkyEngine::_systemVars->currentMusic = (uint16)a;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Logic::fnStopMusic(uint32 a, uint32 b, uint32 c) {
|
bool Logic::fnStopMusic(uint32 a, uint32 b, uint32 c) {
|
||||||
_skyMusic->startMusic(0);
|
_skyMusic->startMusic(0);
|
||||||
SkyEngine::_systemVars.currentMusic = 0;
|
SkyEngine::_systemVars->currentMusic = 0;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2470,7 +2476,7 @@ bool Logic::fnFadeDown(uint32 a, uint32 b, uint32 c) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool Logic::fnFadeUp(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);
|
_skyScreen->fnFadeUp(a,b);
|
||||||
return true;
|
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));
|
_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
|
// form the text sprite, if player wants subtitles or
|
||||||
// if we couldn't find the speech file
|
// if we couldn't find the speech file
|
||||||
DisplayedText textInfo;
|
DisplayedText textInfo;
|
||||||
|
@ -150,11 +150,11 @@ void Mouse::fnSaveCoods() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Mouse::lockMouse() {
|
void Mouse::lockMouse() {
|
||||||
SkyEngine::_systemVars.systemFlags |= SF_MOUSE_LOCKED;
|
SkyEngine::_systemVars->systemFlags |= SF_MOUSE_LOCKED;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Mouse::unlockMouse() {
|
void Mouse::unlockMouse() {
|
||||||
SkyEngine::_systemVars.systemFlags &= ~SF_MOUSE_LOCKED;
|
SkyEngine::_systemVars->systemFlags &= ~SF_MOUSE_LOCKED;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Mouse::restoreMouseData(uint16 frameNum) {
|
void Mouse::restoreMouseData(uint16 frameNum) {
|
||||||
|
@ -49,7 +49,7 @@ AdLibChannel::AdLibChannel(OPL::OPL *opl, uint8 *pMusicData, uint16 startOfData)
|
|||||||
|
|
||||||
uint16 instrumentDataLoc;
|
uint16 instrumentDataLoc;
|
||||||
|
|
||||||
if (SkyEngine::_systemVars.gameVersion == 109) {
|
if (SkyEngine::_systemVars->gameVersion == 109) {
|
||||||
//instrumentDataLoc = (_musicData[0x11D0] << 8) | _musicData[0x11CF];
|
//instrumentDataLoc = (_musicData[0x11D0] << 8) | _musicData[0x11CF];
|
||||||
//_frequenceTable = (uint16 *)(_musicData + 0x835);
|
//_frequenceTable = (uint16 *)(_musicData + 0x835);
|
||||||
//_registerTable = _musicData + 0xE35;
|
//_registerTable = _musicData + 0xE35;
|
||||||
@ -61,7 +61,7 @@ AdLibChannel::AdLibChannel(OPL::OPL *opl, uint8 *pMusicData, uint16 startOfData)
|
|||||||
_registerTable = _musicData + 0xE68;
|
_registerTable = _musicData + 0xE68;
|
||||||
_opOutputTable = _musicData + 0xE7A;
|
_opOutputTable = _musicData + 0xE7A;
|
||||||
_adlibRegMirror = _musicData + 0xF7D;
|
_adlibRegMirror = _musicData + 0xF7D;
|
||||||
} else if (SkyEngine::_systemVars.gameVersion == 267) {
|
} else if (SkyEngine::_systemVars->gameVersion == 267) {
|
||||||
instrumentDataLoc = READ_LE_UINT16(_musicData + 0x11FB);
|
instrumentDataLoc = READ_LE_UINT16(_musicData + 0x11FB);
|
||||||
_frequenceTable = (uint16 *)(_musicData + 0x7F4);
|
_frequenceTable = (uint16 *)(_musicData + 0x7F4);
|
||||||
_registerTable = _musicData + 0xDF4;
|
_registerTable = _musicData + 0xDF4;
|
||||||
|
@ -55,14 +55,14 @@ void AdLibMusic::onTimer() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void AdLibMusic::setupPointers() {
|
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
|
// disk demo uses a different AdLib driver version, some offsets have changed
|
||||||
//_musicDataLoc = (_musicData[0x11CC] << 8) | _musicData[0x11CB];
|
//_musicDataLoc = (_musicData[0x11CC] << 8) | _musicData[0x11CB];
|
||||||
//_initSequence = _musicData + 0xEC8;
|
//_initSequence = _musicData + 0xEC8;
|
||||||
|
|
||||||
_musicDataLoc = READ_LE_UINT16(_musicData + 0x1200);
|
_musicDataLoc = READ_LE_UINT16(_musicData + 0x1200);
|
||||||
_initSequence = _musicData + 0xEFB;
|
_initSequence = _musicData + 0xEFB;
|
||||||
} else if (SkyEngine::_systemVars.gameVersion == 267) {
|
} else if (SkyEngine::_systemVars->gameVersion == 267) {
|
||||||
_musicDataLoc = READ_LE_UINT16(_musicData + 0x11F7);
|
_musicDataLoc = READ_LE_UINT16(_musicData + 0x11F7);
|
||||||
_initSequence = _musicData + 0xE87;
|
_initSequence = _musicData + 0xE87;
|
||||||
} else {
|
} else {
|
||||||
|
@ -75,7 +75,7 @@ void GmMusic::timerCall() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void GmMusic::setupPointers() {
|
void GmMusic::setupPointers() {
|
||||||
if (SkyEngine::_systemVars.gameVersion == 109) {
|
if (SkyEngine::_systemVars->gameVersion == 109) {
|
||||||
_musicDataLoc = READ_LE_UINT16(_musicData + 0x79B);
|
_musicDataLoc = READ_LE_UINT16(_musicData + 0x79B);
|
||||||
_sysExSequence = _musicData + 0x1EF2;
|
_sysExSequence = _musicData + 0x1EF2;
|
||||||
} else {
|
} else {
|
||||||
|
@ -245,7 +245,7 @@ void Screen::fnDrawScreen(uint32 palette, uint32 scroll) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Screen::fnFadeDown(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();
|
uint32 delayTime = _system->getMillis();
|
||||||
for (uint8 cnt = 0; cnt < 32; cnt++) {
|
for (uint8 cnt = 0; cnt < 32; cnt++) {
|
||||||
delayTime += 20;
|
delayTime += 20;
|
||||||
@ -328,7 +328,7 @@ void Screen::fnFadeUp(uint32 palNum, uint32 scroll) {
|
|||||||
if ((scroll != 123) && (scroll != 321))
|
if ((scroll != 123) && (scroll != 321))
|
||||||
scroll = 0;
|
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);
|
uint8 *palette = (uint8 *)_skyCompact->fetchCpt(palNum);
|
||||||
if (palette == NULL)
|
if (palette == NULL)
|
||||||
error("Screen::fnFadeUp: can't fetch compact %X", palNum);
|
error("Screen::fnFadeUp: can't fetch compact %X", palNum);
|
||||||
|
@ -69,13 +69,33 @@
|
|||||||
namespace Sky {
|
namespace Sky {
|
||||||
|
|
||||||
void *SkyEngine::_itemList[300];
|
void *SkyEngine::_itemList[300];
|
||||||
|
SystemVars *SkyEngine::_systemVars = nullptr;
|
||||||
SystemVars SkyEngine::_systemVars = {0, 0, 0, 0, 4316, 0, 0, false, false };
|
|
||||||
|
|
||||||
const char *SkyEngine::shortcutsKeymapId = "sky-shortcuts";
|
const char *SkyEngine::shortcutsKeymapId = "sky-shortcuts";
|
||||||
|
|
||||||
SkyEngine::SkyEngine(OSystem *syst)
|
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() {
|
SkyEngine::~SkyEngine() {
|
||||||
@ -93,6 +113,8 @@ SkyEngine::~SkyEngine() {
|
|||||||
for (int i = 0; i < 300; i++)
|
for (int i = 0; i < 300; i++)
|
||||||
if (_itemList[i])
|
if (_itemList[i])
|
||||||
free(_itemList[i]);
|
free(_itemList[i]);
|
||||||
|
|
||||||
|
delete _systemVars;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SkyEngine::syncSoundSettings() {
|
void SkyEngine::syncSoundSettings() {
|
||||||
@ -103,10 +125,10 @@ void SkyEngine::syncSoundSettings() {
|
|||||||
mute = ConfMan.getBool("mute");
|
mute = ConfMan.getBool("mute");
|
||||||
|
|
||||||
if (ConfMan.getBool("sfx_mute")) // set mute sfx status for native options menu (F5)
|
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)
|
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]
|
// SkyEngine native sound volume range is [0, 127]
|
||||||
// However, via ScummVM UI, the volume range can be set within [0, 256]
|
// However, via ScummVM UI, the volume range can be set within [0, 256]
|
||||||
@ -123,10 +145,10 @@ void SkyEngine::initVirgin() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void SkyEngine::handleKey() {
|
void SkyEngine::handleKey() {
|
||||||
if ((_action != kSkyActionNone || _keyPressed.keycode) && _systemVars.paused) {
|
if ((_action != kSkyActionNone || _keyPressed.keycode) && _systemVars->paused) {
|
||||||
_skySound->fnUnPauseFx();
|
_skySound->fnUnPauseFx();
|
||||||
_systemVars.paused = false;
|
_systemVars->paused = false;
|
||||||
_skyScreen->setPaletteEndian((uint8 *)_skyCompact->fetchCpt(SkyEngine::_systemVars.currentPalette));
|
_skyScreen->setPaletteEndian((uint8 *)_skyCompact->fetchCpt(SkyEngine::_systemVars->currentPalette));
|
||||||
} else {
|
} else {
|
||||||
switch (_action) {
|
switch (_action) {
|
||||||
case kSkyActionToggleFastMode:
|
case kSkyActionToggleFastMode:
|
||||||
@ -142,7 +164,7 @@ void SkyEngine::handleKey() {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case kSkyActionSkip:
|
case kSkyActionSkip:
|
||||||
if (!_systemVars.pastIntro)
|
if (!_systemVars->pastIntro)
|
||||||
_skyControl->restartGame();
|
_skyControl->restartGame();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -153,7 +175,7 @@ void SkyEngine::handleKey() {
|
|||||||
case kSkyActionPause:
|
case kSkyActionPause:
|
||||||
_skyScreen->halvePalette();
|
_skyScreen->halvePalette();
|
||||||
_skySound->fnPauseFx();
|
_skySound->fnPauseFx();
|
||||||
_systemVars.paused = true;
|
_systemVars->paused = true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@ -177,7 +199,10 @@ Common::Error SkyEngine::go() {
|
|||||||
|
|
||||||
if (result != GAME_RESTORED) {
|
if (result != GAME_RESTORED) {
|
||||||
bool introSkipped = false;
|
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);
|
Intro *skyIntro = new Intro(_skyDisk, _skyScreen, _skyMusic, _skySound, _skyText, _mixer, _system);
|
||||||
bool floppyIntro = ConfMan.getBool("alt_intro");
|
bool floppyIntro = ConfMan.getBool("alt_intro");
|
||||||
introSkipped = !skyIntro->doIntro(floppyIntro);
|
introSkipped = !skyIntro->doIntro(floppyIntro);
|
||||||
@ -190,10 +215,13 @@ Common::Error SkyEngine::go() {
|
|||||||
// initial animation where Foster is being chased. initScreen0()
|
// initial animation where Foster is being chased. initScreen0()
|
||||||
// shows the first scene together with that animation. We can't
|
// shows the first scene together with that animation. We can't
|
||||||
// call both, as they both load the same scene.
|
// call both, as they both load the same scene.
|
||||||
if (introSkipped)
|
if (introSkipped) {
|
||||||
|
// restart game sets the _systemVars->pastIntro = true;
|
||||||
_skyControl->restartGame();
|
_skyControl->restartGame();
|
||||||
else
|
} else {
|
||||||
|
|
||||||
_skyLogic->initScreen0();
|
_skyLogic->initScreen0();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -202,12 +230,12 @@ Common::Error SkyEngine::go() {
|
|||||||
_skySound->checkFxQueue();
|
_skySound->checkFxQueue();
|
||||||
_skyMouse->mouseEngine();
|
_skyMouse->mouseEngine();
|
||||||
handleKey();
|
handleKey();
|
||||||
if (_systemVars.paused) {
|
if (_systemVars->paused) {
|
||||||
do {
|
do {
|
||||||
_system->updateScreen();
|
_system->updateScreen();
|
||||||
delay(50);
|
delay(50);
|
||||||
handleKey();
|
handleKey();
|
||||||
} while (_systemVars.paused);
|
} while (_systemVars->paused);
|
||||||
delayCount = _system->getMillis();
|
delayCount = _system->getMillis();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -229,9 +257,9 @@ Common::Error SkyEngine::go() {
|
|||||||
else if (_fastMode & 1)
|
else if (_fastMode & 1)
|
||||||
delay(10);
|
delay(10);
|
||||||
else {
|
else {
|
||||||
delayCount += _systemVars.gameSpeed;
|
delayCount += _systemVars->gameSpeed;
|
||||||
int needDelay = delayCount - (int)_system->getMillis();
|
int needDelay = delayCount - (int)_system->getMillis();
|
||||||
if ((needDelay < 0) || (needDelay > _systemVars.gameSpeed)) {
|
if ((needDelay < 0) || (needDelay > _systemVars->gameSpeed)) {
|
||||||
needDelay = 0;
|
needDelay = 0;
|
||||||
delayCount = _system->getMillis();
|
delayCount = _system->getMillis();
|
||||||
}
|
}
|
||||||
@ -252,14 +280,14 @@ Common::Error SkyEngine::init() {
|
|||||||
_skyDisk = new Disk();
|
_skyDisk = new Disk();
|
||||||
_skySound = new Sound(_mixer, _skyDisk, Audio::Mixer::kMaxChannelVolume);
|
_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);
|
MidiDriver::DeviceHandle dev = MidiDriver::detectDevice(MDT_ADLIB | MDT_MIDI | MDT_PREFER_MT32);
|
||||||
if (MidiDriver::getMusicType(dev) == MT_ADLIB) {
|
if (MidiDriver::getMusicType(dev) == MT_ADLIB) {
|
||||||
_systemVars.systemFlags |= SF_SBLASTER;
|
_systemVars->systemFlags |= SF_SBLASTER;
|
||||||
_skyMusic = new AdLibMusic(_mixer, _skyDisk);
|
_skyMusic = new AdLibMusic(_mixer, _skyDisk);
|
||||||
} else {
|
} else {
|
||||||
_systemVars.systemFlags |= SF_ROLAND;
|
_systemVars->systemFlags |= SF_ROLAND;
|
||||||
if ((MidiDriver::getMusicType(dev) == MT_MT32) || ConfMan.getBool("native_mt32"))
|
if ((MidiDriver::getMusicType(dev) == MT_MT32) || ConfMan.getBool("native_mt32"))
|
||||||
_skyMusic = new MT32Music(MidiDriver::createMidi(dev), _mixer, _skyDisk);
|
_skyMusic = new MT32Music(MidiDriver::createMidi(dev), _mixer, _skyDisk);
|
||||||
else
|
else
|
||||||
@ -270,20 +298,20 @@ Common::Error SkyEngine::init() {
|
|||||||
if (ConfMan.hasKey("nosubtitles")) {
|
if (ConfMan.hasKey("nosubtitles")) {
|
||||||
warning("Configuration key 'nosubtitles' is deprecated. Use 'subtitles' instead");
|
warning("Configuration key 'nosubtitles' is deprecated. Use 'subtitles' instead");
|
||||||
if (!ConfMan.getBool("nosubtitles"))
|
if (!ConfMan.getBool("nosubtitles"))
|
||||||
_systemVars.systemFlags |= SF_ALLOW_TEXT;
|
_systemVars->systemFlags |= SF_ALLOW_TEXT;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ConfMan.getBool("subtitles"))
|
if (ConfMan.getBool("subtitles"))
|
||||||
_systemVars.systemFlags |= SF_ALLOW_TEXT;
|
_systemVars->systemFlags |= SF_ALLOW_TEXT;
|
||||||
|
|
||||||
if (!ConfMan.getBool("speech_mute"))
|
if (!ConfMan.getBool("speech_mute"))
|
||||||
_systemVars.systemFlags |= SF_ALLOW_SPEECH;
|
_systemVars->systemFlags |= SF_ALLOW_SPEECH;
|
||||||
|
|
||||||
} else
|
} else
|
||||||
_systemVars.systemFlags |= SF_ALLOW_TEXT;
|
_systemVars->systemFlags |= SF_ALLOW_TEXT;
|
||||||
|
|
||||||
_systemVars.systemFlags |= SF_PLAY_VOCS;
|
_systemVars->systemFlags |= SF_PLAY_VOCS;
|
||||||
_systemVars.gameSpeed = 80;
|
_systemVars->gameSpeed = 80;
|
||||||
|
|
||||||
_skyCompact = new SkyCompact();
|
_skyCompact = new SkyCompact();
|
||||||
_skyText = new Text(_skyDisk, _skyCompact);
|
_skyText = new Text(_skyDisk, _skyCompact);
|
||||||
@ -305,44 +333,44 @@ Common::Error SkyEngine::init() {
|
|||||||
|
|
||||||
switch (Common::parseLanguage(ConfMan.get("language"))) {
|
switch (Common::parseLanguage(ConfMan.get("language"))) {
|
||||||
case Common::EN_USA:
|
case Common::EN_USA:
|
||||||
_systemVars.language = SKY_USA;
|
_systemVars->language = SKY_USA;
|
||||||
break;
|
break;
|
||||||
case Common::DE_DEU:
|
case Common::DE_DEU:
|
||||||
_systemVars.language = SKY_GERMAN;
|
_systemVars->language = SKY_GERMAN;
|
||||||
break;
|
break;
|
||||||
case Common::FR_FRA:
|
case Common::FR_FRA:
|
||||||
_systemVars.language = SKY_FRENCH;
|
_systemVars->language = SKY_FRENCH;
|
||||||
break;
|
break;
|
||||||
case Common::IT_ITA:
|
case Common::IT_ITA:
|
||||||
_systemVars.language = SKY_ITALIAN;
|
_systemVars->language = SKY_ITALIAN;
|
||||||
break;
|
break;
|
||||||
case Common::PT_BRA:
|
case Common::PT_BRA:
|
||||||
_systemVars.language = SKY_PORTUGUESE;
|
_systemVars->language = SKY_PORTUGUESE;
|
||||||
break;
|
break;
|
||||||
case Common::ES_ESP:
|
case Common::ES_ESP:
|
||||||
_systemVars.language = SKY_SPANISH;
|
_systemVars->language = SKY_SPANISH;
|
||||||
break;
|
break;
|
||||||
case Common::SE_SWE:
|
case Common::SE_SWE:
|
||||||
_systemVars.language = SKY_SWEDISH;
|
_systemVars->language = SKY_SWEDISH;
|
||||||
break;
|
break;
|
||||||
case Common::EN_GRB:
|
case Common::EN_GRB:
|
||||||
_systemVars.language = SKY_ENGLISH;
|
_systemVars->language = SKY_ENGLISH;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
_systemVars.language = SKY_ENGLISH;
|
_systemVars->language = SKY_ENGLISH;
|
||||||
break;
|
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");
|
warning("The language you selected does not exist in your BASS version");
|
||||||
if (_skyDisk->fileExists(60600))
|
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))
|
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
|
else
|
||||||
for (uint8 cnt = SKY_ENGLISH; cnt <= SKY_SPANISH; cnt++)
|
for (uint8 cnt = SKY_ENGLISH; cnt <= SKY_SPANISH; cnt++)
|
||||||
if (_skyDisk->fileExists(60600 + cnt * 8)) { // pick the first language we can find
|
if (_skyDisk->fileExists(60600 + cnt * 8)) { // pick the first language we can find
|
||||||
SkyEngine::_systemVars.language = cnt;
|
SkyEngine::_systemVars->language = cnt;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -410,16 +438,16 @@ void SkyEngine::delay(int32 amount) {
|
|||||||
_keyPressed = event.kbd;
|
_keyPressed = event.kbd;
|
||||||
break;
|
break;
|
||||||
case Common::EVENT_MOUSEMOVE:
|
case Common::EVENT_MOUSEMOVE:
|
||||||
if (!(_systemVars.systemFlags & SF_MOUSE_LOCKED))
|
if (!(_systemVars->systemFlags & SF_MOUSE_LOCKED))
|
||||||
_skyMouse->mouseMoved(event.mouse.x, event.mouse.y);
|
_skyMouse->mouseMoved(event.mouse.x, event.mouse.y);
|
||||||
break;
|
break;
|
||||||
case Common::EVENT_LBUTTONDOWN:
|
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->mouseMoved(event.mouse.x, event.mouse.y);
|
||||||
_skyMouse->buttonPressed(2);
|
_skyMouse->buttonPressed(2);
|
||||||
break;
|
break;
|
||||||
case Common::EVENT_RBUTTONDOWN:
|
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->mouseMoved(event.mouse.x, event.mouse.y);
|
||||||
_skyMouse->buttonPressed(1);
|
_skyMouse->buttonPressed(1);
|
||||||
break;
|
break;
|
||||||
@ -437,7 +465,7 @@ void SkyEngine::delay(int32 amount) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool SkyEngine::isDemo() {
|
bool SkyEngine::isDemo() {
|
||||||
switch (_systemVars.gameVersion) {
|
switch (_systemVars->gameVersion) {
|
||||||
case 109: // PC Gamer demo
|
case 109: // PC Gamer demo
|
||||||
case 267: // English floppy demo
|
case 267: // English floppy demo
|
||||||
case 272: // German floppy demo
|
case 272: // German floppy demo
|
||||||
@ -451,12 +479,12 @@ bool SkyEngine::isDemo() {
|
|||||||
case 372:
|
case 372:
|
||||||
return false;
|
return false;
|
||||||
default:
|
default:
|
||||||
error("Unknown game version %d", _systemVars.gameVersion);
|
error("Unknown game version %d", _systemVars->gameVersion);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SkyEngine::isCDVersion() {
|
bool SkyEngine::isCDVersion() {
|
||||||
switch (_systemVars.gameVersion) {
|
switch (_systemVars->gameVersion) {
|
||||||
case 109:
|
case 109:
|
||||||
case 267:
|
case 267:
|
||||||
case 272:
|
case 272:
|
||||||
@ -470,7 +498,7 @@ bool SkyEngine::isCDVersion() {
|
|||||||
case 372:
|
case 372:
|
||||||
return true;
|
return true;
|
||||||
default:
|
default:
|
||||||
error("Unknown game version %d", _systemVars.gameVersion);
|
error("Unknown game version %d", _systemVars->gameVersion);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -108,9 +108,7 @@ public:
|
|||||||
|
|
||||||
static void *fetchItem(uint32 num);
|
static void *fetchItem(uint32 num);
|
||||||
static void *_itemList[300];
|
static void *_itemList[300];
|
||||||
|
static SystemVars *_systemVars;
|
||||||
static SystemVars _systemVars;
|
|
||||||
|
|
||||||
static const char *shortcutsKeymapId;
|
static const char *shortcutsKeymapId;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
@ -1055,7 +1055,7 @@ void Sound::loadSection(uint8 pSection) {
|
|||||||
free(_soundData);
|
free(_soundData);
|
||||||
_soundData = _skyDisk->loadFile(pSection * 4 + SOUND_FILE_BASE);
|
_soundData = _skyDisk->loadFile(pSection * 4 + SOUND_FILE_BASE);
|
||||||
uint16 asmOfs;
|
uint16 asmOfs;
|
||||||
if (SkyEngine::_systemVars.gameVersion == 109) {
|
if (SkyEngine::_systemVars->gameVersion == 109) {
|
||||||
if (pSection == 0)
|
if (pSection == 0)
|
||||||
asmOfs = 0x78;
|
asmOfs = 0x78;
|
||||||
else
|
else
|
||||||
@ -1075,7 +1075,7 @@ void Sound::loadSection(uint8 pSection) {
|
|||||||
|
|
||||||
_sfxInfo = _soundData + _sfxBaseOfs;
|
_sfxInfo = _soundData + _sfxBaseOfs;
|
||||||
// if we just restored a savegame, the sfxqueue holds the sound we need to restart
|
// 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++)
|
for (uint8 cnt = 0; cnt < 4; cnt++)
|
||||||
_sfxQueue[cnt].count = 0;
|
_sfxQueue[cnt].count = 0;
|
||||||
}
|
}
|
||||||
@ -1132,7 +1132,7 @@ void Sound::playSound(uint16 sound, uint16 volume, uint8 channel) {
|
|||||||
|
|
||||||
void Sound::fnStartFx(uint32 sound, uint8 channel) {
|
void Sound::fnStartFx(uint32 sound, uint8 channel) {
|
||||||
_saveSounds[channel] = 0xFFFF;
|
_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;
|
return;
|
||||||
|
|
||||||
uint8 screen = (uint8)(Logic::_scriptVariables[SCREEN] & 0xff);
|
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
|
uint8 volume = _mainSfxVolume; // start with standard vol
|
||||||
|
|
||||||
if (SkyEngine::_systemVars.systemFlags & SF_SBLASTER)
|
if (SkyEngine::_systemVars->systemFlags & SF_SBLASTER)
|
||||||
volume = roomList[i].adlibVolume;
|
volume = roomList[i].adlibVolume;
|
||||||
else if (SkyEngine::_systemVars.systemFlags & SF_ROLAND)
|
else if (SkyEngine::_systemVars->systemFlags & SF_ROLAND)
|
||||||
volume = roomList[i].rolandVolume;
|
volume = roomList[i].rolandVolume;
|
||||||
volume = (volume * _mainSfxVolume) >> 8;
|
volume = (volume * _mainSfxVolume) >> 8;
|
||||||
|
|
||||||
@ -1222,7 +1222,7 @@ void Sound::stopSpeech() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool Sound::startSpeech(uint16 textNum) {
|
bool Sound::startSpeech(uint16 textNum) {
|
||||||
if (!(SkyEngine::_systemVars.systemFlags & SF_ALLOW_SPEECH))
|
if (!(SkyEngine::_systemVars->systemFlags & SF_ALLOW_SPEECH))
|
||||||
return false;
|
return false;
|
||||||
uint16 speechFileNum = _speechConvertTable[textNum >> 12] + (textNum & 0xFFF);
|
uint16 speechFileNum = _speechConvertTable[textNum >> 12] + (textNum & 0xFFF);
|
||||||
|
|
||||||
|
@ -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
|
if (SkyEngine::_itemList[FIRST_TEXT_SEC + sectionNo] == NULL) { //check if already loaded
|
||||||
debug(5, "Loading Text item(s) for Section %d", (sectionNo >> 2));
|
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);
|
SkyEngine::_itemList[FIRST_TEXT_SEC + sectionNo] = (void **)_skyDisk->loadFile((uint16)fileNo);
|
||||||
}
|
}
|
||||||
uint8 *textDataPtr = (uint8 *)SkyEngine::_itemList[FIRST_TEXT_SEC + sectionNo];
|
uint8 *textDataPtr = (uint8 *)SkyEngine::_itemList[FIRST_TEXT_SEC + sectionNo];
|
||||||
@ -417,7 +417,7 @@ uint32 Text::giveCurrentCharSet() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Text::initHuffTree() {
|
void Text::initHuffTree() {
|
||||||
switch (SkyEngine::_systemVars.gameVersion) {
|
switch (SkyEngine::_systemVars->gameVersion) {
|
||||||
case 109:
|
case 109:
|
||||||
_huffTree = _huffTree_00109;
|
_huffTree = _huffTree_00109;
|
||||||
break;
|
break;
|
||||||
@ -447,13 +447,13 @@ void Text::initHuffTree() {
|
|||||||
_huffTree = _huffTree_00372;
|
_huffTree = _huffTree_00372;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
error("Unknown game version %d", SkyEngine::_systemVars.gameVersion);
|
error("Unknown game version %d", SkyEngine::_systemVars->gameVersion);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Text::patchMessage(uint32 textNum) {
|
bool Text::patchMessage(uint32 textNum) {
|
||||||
uint16 patchIdx = _patchLangIdx[SkyEngine::_systemVars.language];
|
uint16 patchIdx = _patchLangIdx[SkyEngine::_systemVars->language];
|
||||||
uint16 patchNum = _patchLangNum[SkyEngine::_systemVars.language];
|
uint16 patchNum = _patchLangNum[SkyEngine::_systemVars->language];
|
||||||
for (uint16 cnt = 0; cnt < patchNum; cnt++) {
|
for (uint16 cnt = 0; cnt < patchNum; cnt++) {
|
||||||
if (_patchedMessages[cnt + patchIdx].textNr == textNum) {
|
if (_patchedMessages[cnt + patchIdx].textNr == textNum) {
|
||||||
strcpy(_textBuffer, _patchedMessages[cnt + patchIdx].text);
|
strcpy(_textBuffer, _patchedMessages[cnt + patchIdx].text);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user