aboutsummaryrefslogtreecommitdiff
path: root/sky/control.cpp
diff options
context:
space:
mode:
authorMax Horn2003-10-05 20:21:20 +0000
committerMax Horn2003-10-05 20:21:20 +0000
commitbfce5e500aa09d36b974c29acf91780e0b26b459 (patch)
tree4d750dac946597e0291a306fe649aeb374f79185 /sky/control.cpp
parent9f537f4b8cbb282af717a66d3912ad51602e174f (diff)
downloadscummvm-rg350-bfce5e500aa09d36b974c29acf91780e0b26b459.tar.gz
scummvm-rg350-bfce5e500aa09d36b974c29acf91780e0b26b459.tar.bz2
scummvm-rg350-bfce5e500aa09d36b974c29acf91780e0b26b459.zip
renamed SkyState to SkyEngine; cleaned the #include dependency mess a bit (try to only #include files when you *have* to -> this reduces compilation time to a minimum when header file changes are made)
svn-id: r10622
Diffstat (limited to 'sky/control.cpp')
-rw-r--r--sky/control.cpp116
1 files changed, 63 insertions, 53 deletions
diff --git a/sky/control.cpp b/sky/control.cpp
index a3d2e3ba7e..0f1f6defb7 100644
--- a/sky/control.cpp
+++ b/sky/control.cpp
@@ -19,11 +19,21 @@
*
*/
+#include "common/file.h"
+#include "common/util.h"
+#include "common/system.h"
+#include "sky/compact.h"
#include "sky/control.h"
-#include "sky/skydefs.h"
+#include "sky/disk.h"
+#include "sky/logic.h"
+#include "sky/music/musicbase.h"
+#include "sky/mouse.h"
+#include "sky/screen.h"
#include "sky/sky.h"
-#include "common/file.h"
-#include "base/gameDetector.h"
+#include "sky/skydefs.h"
+#include "sky/sound.h"
+#include "sky/struc.h"
+#include "sky/text.h"
#ifdef _WIN32_WCE
extern void force_keyboard(bool);
@@ -233,7 +243,7 @@ void SkyControl::initPanel(void) {
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 = (SkyState::_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, NULL);
@@ -245,7 +255,7 @@ void SkyControl::initPanel(void) {
_sprites.slode = _skyDisk->loadFile(60506, NULL);
_sprites.slode2 = _skyDisk->loadFile(60507, NULL);
_sprites.slide2 = _skyDisk->loadFile(60508, NULL);
- if (SkyState::_systemVars.gameVersion < 368)
+ if (SkyEngine::_systemVars.gameVersion < 368)
_sprites.musicBodge = NULL;
else
_sprites.musicBodge = _skyDisk->loadFile(60509, NULL);
@@ -260,12 +270,12 @@ void SkyControl::initPanel(void) {
_savePanButton = createResource( _sprites.button, 3, 0, 58, 39, 48, SAVE_GAME_PANEL, MAINPANEL);
_dosPanButton = createResource( _sprites.button, 3, 0, 58, 59, 93, QUIT_TO_DOS, MAINPANEL);
_restartPanButton = createResource( _sprites.button, 3, 0, 58, 79, 94, RESTART, MAINPANEL);
- if (SkyState::_systemVars.systemFlags & SF_FX_OFF)
+ if (SkyEngine::_systemVars.systemFlags & SF_FX_OFF)
_fxPanButton = createResource( _sprites.button, 3, 0, 58, 99, 87, TOGGLE_FX, MAINPANEL);
else
_fxPanButton = createResource( _sprites.button, 3, 2, 58, 99, 86, TOGGLE_FX, MAINPANEL);
- if (SkyState::isCDVersion()) { // CD Version: Toggle text/speech
+ if (SkyEngine::isCDVersion()) { // CD Version: Toggle text/speech
_musicPanButton = createResource( _sprites.button, 3, 0, 58, 119, 52, TOGGLE_TEXT, MAINPANEL);
} else { // disk version: toggle music on/off
_musicPanButton = createResource( _sprites.button, 3, 0, 58, 119, 91, TOGGLE_MS, MAINPANEL);
@@ -396,17 +406,17 @@ void SkyControl::drawMainPanel(void) {
_slide->drawToScreen(WITH_MASK);
_slide2->drawToScreen(WITH_MASK);
_bodge->drawToScreen(WITH_MASK);
- if (SkyState::isCDVersion())
- drawTextCross(SkyState::_systemVars.systemFlags & TEXT_FLAG_MASK);
+ if (SkyEngine::isCDVersion())
+ drawTextCross(SkyEngine::_systemVars.systemFlags & TEXT_FLAG_MASK);
_statusBar->drawToScreen();
}
void SkyControl::doLoadSavePanel(void) {
- if (SkyState::isDemo())
+ if (SkyEngine::isDemo())
return; // I don't think this can even happen
initPanel();
_skyScreen->clearScreen();
- if (SkyState::_systemVars.gameVersion < 331)
+ if (SkyEngine::_systemVars.gameVersion < 331)
_skyScreen->setPalette(60509);
else
_skyScreen->setPalette(60510);
@@ -425,7 +435,7 @@ void SkyControl::doLoadSavePanel(void) {
_system->copy_rect(_screenBuf, GAME_SCREEN_WIDTH, 0, 0, GAME_SCREEN_WIDTH, FULL_SCREEN_HEIGHT);
_system->update_screen();
_skyScreen->forceRefresh();
- _skyScreen->setPaletteEndian((uint8 *)SkyState::fetchCompact(SkyState::_systemVars.currentPalette));
+ _skyScreen->setPaletteEndian((uint8 *)SkyEngine::fetchCompact(SkyEngine::_systemVars.currentPalette));
removePanel();
_skyMouse->spriteMouse(_savedMouse, 0, 0);
_skyText->fnSetFont(_savedCharSet);
@@ -433,7 +443,7 @@ void SkyControl::doLoadSavePanel(void) {
void SkyControl::doControlPanel(void) {
- if (SkyState::isDemo()) {
+ if (SkyEngine::isDemo()) {
return ;
}
initPanel();
@@ -442,7 +452,7 @@ void SkyControl::doControlPanel(void) {
_skyText->fnSetFont(0);
_skyScreen->clearScreen();
- if (SkyState::_systemVars.gameVersion < 331)
+ if (SkyEngine::_systemVars.gameVersion < 331)
_skyScreen->setPalette(60509);
else
_skyScreen->setPalette(60510);
@@ -491,7 +501,7 @@ void SkyControl::doControlPanel(void) {
_system->copy_rect(_screenBuf, GAME_SCREEN_WIDTH, 0, 0, GAME_SCREEN_WIDTH, FULL_SCREEN_HEIGHT);
_system->update_screen();
_skyScreen->forceRefresh();
- _skyScreen->setPaletteEndian((uint8 *)SkyState::fetchCompact(SkyState::_systemVars.currentPalette));
+ _skyScreen->setPaletteEndian((uint8 *)SkyEngine::fetchCompact(SkyEngine::_systemVars.currentPalette));
removePanel();
_skyMouse->spriteMouse(_savedMouse, 0, 0);
_skyText->fnSetFont(_savedCharSet);
@@ -679,14 +689,14 @@ uint16 SkyControl::doSpeedSlide(void) {
_text->drawToScreen(WITH_MASK);
_system->update_screen();
}
- SkyState::_systemVars.gameSpeed = speedDelay;
+ SkyEngine::_systemVars.gameSpeed = speedDelay;
return SPEED_CHANGED;
}
uint16 SkyControl::toggleFx(SkyConResource *pButton) {
- SkyState::_systemVars.systemFlags ^= SF_FX_OFF;
- if (SkyState::_systemVars.systemFlags & SF_FX_OFF) {
+ SkyEngine::_systemVars.systemFlags ^= SF_FX_OFF;
+ if (SkyEngine::_systemVars.systemFlags & SF_FX_OFF) {
pButton->_curSprite = 0;
pButton->_text = 0x7000 + 87;
_statusBar->setToText(0x7000 + 87);
@@ -703,8 +713,8 @@ uint16 SkyControl::toggleFx(SkyConResource *pButton) {
uint16 SkyControl::toggleText(void) {
- uint32 flags = SkyState::_systemVars.systemFlags & TEXT_FLAG_MASK;
- SkyState::_systemVars.systemFlags &= ~TEXT_FLAG_MASK;
+ uint32 flags = SkyEngine::_systemVars.systemFlags & TEXT_FLAG_MASK;
+ SkyEngine::_systemVars.systemFlags &= ~TEXT_FLAG_MASK;
if (flags == SF_ALLOW_TEXT) {
@@ -718,7 +728,7 @@ uint16 SkyControl::toggleText(void) {
_statusBar->setToText(0x7000 + 35); // text only
}
- SkyState::_systemVars.systemFlags |= flags;
+ SkyEngine::_systemVars.systemFlags |= flags;
drawTextCross(flags);
@@ -728,12 +738,12 @@ uint16 SkyControl::toggleText(void) {
void SkyControl::toggleMusic(void) {
- if (SkyState::_systemVars.systemFlags & SF_MUS_OFF) {
- SkyState::_systemVars.systemFlags &= ~SF_MUS_OFF;
- _skyMusic->startMusic(SkyState::_systemVars.currentMusic);
+ if (SkyEngine::_systemVars.systemFlags & SF_MUS_OFF) {
+ SkyEngine::_systemVars.systemFlags &= ~SF_MUS_OFF;
+ _skyMusic->startMusic(SkyEngine::_systemVars.currentMusic);
_statusBar->setToText(0x7000 + 88);
} else {
- SkyState::_systemVars.systemFlags |= SF_MUS_OFF;
+ SkyEngine::_systemVars.systemFlags |= SF_MUS_OFF;
_skyMusic->startMusic(0);
_statusBar->setToText(0x7000 + 89);
}
@@ -772,10 +782,10 @@ bool SkyControl::autoSaveExists(void) {
bool test = false;
SaveFile *f;
char fName[20];
- if (SkyState::isCDVersion())
+ if (SkyEngine::isCDVersion())
strcpy(fName, "SKY-VM-CD.ASD");
else
- sprintf(fName, "SKY-VM%03d.ASD", SkyState::_systemVars.gameVersion);
+ sprintf(fName, "SKY-VM%03d.ASD", SkyEngine::_systemVars.gameVersion);
SaveFileManager *mgr = _system->get_savefile_manager();
f = mgr->open_savefile(fName, _savePath, false);
if (f != NULL) {
@@ -1029,7 +1039,7 @@ void SkyControl::loadDescriptions(uint8 *destBuf) {
bool SkyControl::loadSaveAllowed(void) {
- if (SkyState::_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 (SkyLogic::_scriptVariables[SCREEN] >= 101)
return false; // same problem with LINC terminals
@@ -1072,10 +1082,10 @@ void SkyControl::saveDescriptions(uint8 *srcBuf) {
void SkyControl::doAutoSave(void) {
char fName[20];
- if (SkyState::isCDVersion())
+ if (SkyEngine::isCDVersion())
strcpy(fName, "SKY-VM-CD.ASD");
else
- sprintf(fName, "SKY-VM%03d.ASD", SkyState::_systemVars.gameVersion);
+ sprintf(fName, "SKY-VM%03d.ASD", SkyEngine::_systemVars.gameVersion);
SaveFile *outf;
SaveFileManager *mgr = _system->get_savefile_manager();
outf = mgr->open_savefile(fName, _savePath, true);
@@ -1242,14 +1252,14 @@ uint32 SkyControl::prepareSaveData(uint8 *destBuf) {
uint8 *destPos = destBuf + 4;
STOSD(destPos, SAVE_FILE_REVISION);
- STOSD(destPos, SkyState::_systemVars.gameVersion);
+ STOSD(destPos, SkyEngine::_systemVars.gameVersion);
STOSW(destPos, _skySound->_saveSounds[0]);
STOSW(destPos, _skySound->_saveSounds[1]);
STOSD(destPos, _skyMusic->giveCurrentMusic());
STOSD(destPos, _savedCharSet);
STOSD(destPos, _savedMouse);
- STOSD(destPos, SkyState::_systemVars.currentPalette);
+ STOSD(destPos, SkyEngine::_systemVars.currentPalette);
for (cnt = 0; cnt < 838; cnt++)
STOSD(destPos, SkyLogic::_scriptVariables[cnt]);
uint32 *loadedFilesList = _skyDisk->giveLoadedFilesList();
@@ -1436,10 +1446,10 @@ uint16 SkyControl::parseSaveData(uint8 *srcBuf) {
uint32 music, mouseType, palette, gameVersion;
LODSD(srcPos, gameVersion);
- if (gameVersion != SkyState::_systemVars.gameVersion) {
- if ((!SkyState::isCDVersion()) || (gameVersion < 365)) { // cd versions are compatible
+ if (gameVersion != SkyEngine::_systemVars.gameVersion) {
+ if ((!SkyEngine::isCDVersion()) || (gameVersion < 365)) { // cd versions are compatible
printf("This savegame was created by Beneath a Steel Sky v0.0%03d\n", gameVersion);
- printf("It cannot be loaded by this version (v0.0%3d)\n", SkyState::_systemVars.gameVersion);
+ printf("It cannot be loaded by this version (v0.0%3d)\n", SkyEngine::_systemVars.gameVersion);
return RESTORE_FAILED;
}
}
@@ -1476,17 +1486,17 @@ uint16 SkyControl::parseSaveData(uint8 *srcBuf) {
if (srcPos - srcBuf != (int32)size)
error("Restore failed! Savegame data = %d bytes. Expected size: %d", srcPos-srcBuf, size);
- SkyState::_systemVars.systemFlags |= SF_GAME_RESTORED;
- if (!SkyState::isDemo()) {
+ SkyEngine::_systemVars.systemFlags |= SF_GAME_RESTORED;
+ if (!SkyEngine::isDemo()) {
_skyLogic->fnLeaveSection(oldSection, 0, 0);
_skyLogic->fnEnterSection(SkyLogic::_scriptVariables[CUR_SECTION], 0, 0);
}
_skyDisk->refreshFilesList(reloadList);
- SkyState::_systemVars.currentMusic = (uint16)music;
- if (!(SkyState::_systemVars.systemFlags & SF_MUS_OFF))
+ SkyEngine::_systemVars.currentMusic = (uint16)music;
+ if (!(SkyEngine::_systemVars.systemFlags & SF_MUS_OFF))
_skyMusic->startMusic((uint16)music);
_savedMouse = (uint16)mouseType;
- SkyState::_systemVars.currentPalette = palette; // will be set when doControlPanel ends
+ SkyEngine::_systemVars.currentPalette = palette; // will be set when doControlPanel ends
return GAME_RESTORED;
}
@@ -1498,10 +1508,10 @@ uint16 SkyControl::restoreGameFromFile(bool autoSave) {
char fName[20];
if (autoSave) {
- if (SkyState::isCDVersion())
+ if (SkyEngine::isCDVersion())
strcpy(fName, "SKY-VM-CD.ASD");
else
- sprintf(fName, "SKY-VM%03d.ASD", SkyState::_systemVars.gameVersion);
+ sprintf(fName, "SKY-VM%03d.ASD", SkyEngine::_systemVars.gameVersion);
} else
sprintf(fName,"SKY-VM.%03d", _selectedGame);
@@ -1527,7 +1537,7 @@ uint16 SkyControl::restoreGameFromFile(bool autoSave) {
}
uint16 res = parseSaveData(saveData);
- SkyState::_systemVars.pastIntro = true;
+ SkyEngine::_systemVars.pastIntro = true;
delete inf;
delete mgr;
free(saveData);
@@ -1545,7 +1555,7 @@ uint16 SkyControl::quickXRestore(uint16 slot) {
_system->copy_rect(_screenBuf, GAME_SCREEN_WIDTH, 0, 0, FULL_SCREEN_WIDTH, FULL_SCREEN_HEIGHT);
_system->update_screen();
- if (SkyState::_systemVars.gameVersion < 331)
+ if (SkyEngine::_systemVars.gameVersion < 331)
_skyScreen->setPalette(60509);
else
_skyScreen->setPalette(60510);
@@ -1563,7 +1573,7 @@ uint16 SkyControl::quickXRestore(uint16 slot) {
memset(_skyScreen->giveCurrent(), 0, GAME_SCREEN_WIDTH * GAME_SCREEN_HEIGHT);
_skyScreen->showScreen(_skyScreen->giveCurrent());
_skyScreen->forceRefresh();
- _skyScreen->setPaletteEndian((uint8 *)SkyState::fetchCompact(SkyState::_systemVars.currentPalette));
+ _skyScreen->setPaletteEndian((uint8 *)SkyEngine::fetchCompact(SkyEngine::_systemVars.currentPalette));
} else {
memset(_screenBuf, 0, FULL_SCREEN_WIDTH * FULL_SCREEN_HEIGHT);
_system->copy_rect(_screenBuf, GAME_SCREEN_WIDTH, 0, 0, GAME_SCREEN_WIDTH, FULL_SCREEN_HEIGHT);
@@ -1625,11 +1635,11 @@ void SkyControl::applyDiff(uint16 *data, uint16 *diffData, uint16 len) {
}
void SkyControl::restartGame(void) {
- if (SkyState::_systemVars.gameVersion <= 267)
+ if (SkyEngine::_systemVars.gameVersion <= 267)
return; // no restart for floppy demo
uint16 *resetData = lz77decode((uint16 *)_resetData288);
- switch (SkyState::_systemVars.gameVersion) {
+ switch (SkyEngine::_systemVars.gameVersion) {
case 303:
applyDiff(resetData, (uint16*)_resetDiff303, 206);
break;
@@ -1653,9 +1663,9 @@ void SkyControl::restartGame(void) {
_skyScreen->forceRefresh();
memset(_skyScreen->giveCurrent(), 0, GAME_SCREEN_WIDTH * FULL_SCREEN_HEIGHT);
_skyScreen->showScreen(_skyScreen->giveCurrent());
- _skyScreen->setPaletteEndian((uint8 *)SkyState::fetchCompact(SkyState::_systemVars.currentPalette));
+ _skyScreen->setPaletteEndian((uint8 *)SkyEngine::fetchCompact(SkyEngine::_systemVars.currentPalette));
_skyMouse->spriteMouse(_savedMouse, 0, 0);
- SkyState::_systemVars.pastIntro = true;
+ SkyEngine::_systemVars.pastIntro = true;
}
void SkyControl::delay(unsigned int amount) {
@@ -1693,7 +1703,7 @@ void SkyControl::delay(unsigned int amount) {
case OSystem::EVENT_RBUTTONDOWN:
break;
case OSystem::EVENT_QUIT:
- if (!SkyState::_systemVars.quitting)
+ if (!SkyEngine::_systemVars.quitting)
showGameQuitMsg(false);
break;
default:
@@ -1716,7 +1726,7 @@ void SkyControl::delay(unsigned int amount) {
void SkyControl::showGameQuitMsg(bool useScreen) {
- SkyState::_systemVars.quitting = true;
+ SkyEngine::_systemVars.quitting = true;
_skyText->fnSetFont(0);
uint8 *textBuf1 = (uint8 *)malloc(GAME_SCREEN_WIDTH * 14 + sizeof(dataFileHeader));
uint8 *textBuf2 = (uint8 *)malloc(GAME_SCREEN_WIDTH * 14 + sizeof(dataFileHeader));
@@ -1728,8 +1738,8 @@ void SkyControl::showGameQuitMsg(bool useScreen) {
screenData = _skyScreen->giveCurrent();
} else
screenData = _screenBuf;
- _skyText->displayText(_quitTexts[SkyState::_systemVars.language * 2 + 0], textBuf1, true, 320, 255);
- _skyText->displayText(_quitTexts[SkyState::_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);
uint8 *targetLine = screenData + GAME_SCREEN_WIDTH * 80;