diff options
| author | Max Horn | 2003-10-05 20:21:20 +0000 | 
|---|---|---|
| committer | Max Horn | 2003-10-05 20:21:20 +0000 | 
| commit | bfce5e500aa09d36b974c29acf91780e0b26b459 (patch) | |
| tree | 4d750dac946597e0291a306fe649aeb374f79185 | |
| parent | 9f537f4b8cbb282af717a66d3912ad51602e174f (diff) | |
| download | scummvm-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
40 files changed, 455 insertions, 348 deletions
| diff --git a/sky/autoroute.cpp b/sky/autoroute.cpp index 6605c1bd3a..278d1278ca 100644 --- a/sky/autoroute.cpp +++ b/sky/autoroute.cpp @@ -19,7 +19,12 @@   *   */ -#include "autoroute.h" +#include "common/util.h" +#include "sky/autoroute.h" +#include "sky/compact.h" +#include "sky/grid.h" +#include "sky/skydefs.h" +#include "sky/struc.h"  #define ROUTE_GRID_WIDTH ((GAME_SCREEN_WIDTH/8)+2)  #define ROUTE_GRID_HEIGHT ((GAME_SCREEN_HEIGHT/8)+2) diff --git a/sky/autoroute.h b/sky/autoroute.h index e42eba4b77..e73d713761 100644 --- a/sky/autoroute.h +++ b/sky/autoroute.h @@ -23,12 +23,9 @@  #define AUTOROUTE_H  #include "stdafx.h" -#include "sky/sky.h" -#include "struc.h" -#include "compact.h" -#include "grid.h" -#include "skydefs.h" +#include "common/scummsys.h" +struct Compact;  class SkyGrid;  class SkyAutoRoute { diff --git a/sky/compact.cpp b/sky/compact.cpp index f890f4ee19..0b377e7581 100644 --- a/sky/compact.cpp +++ b/sky/compact.cpp @@ -20,6 +20,7 @@   */  #include "stdafx.h" +#include "common/util.h"  #include "sky/compact.h"  #include "sky/compacts/0compact.h"  #include "sky/compacts/1compact.h" @@ -65,7 +66,7 @@ uint16 *getGrafixPtr(Compact *cpt) {  			error("::getGrafixPtr: request for AR pointer, extCompact is NULL, though.");  		return (cpt->extCompact->animScratch + cpt->grafixProg.pos);  	case COMPACT: -		buf = (uint16*)SkyState::fetchCompact(cpt->grafixProg.ptrTarget); +		buf = (uint16*)SkyEngine::fetchCompact(cpt->grafixProg.ptrTarget);  		if (buf == NULL)  			error("::getGrafixPtr: request for cpt %d pointer. It's NULL.", cpt->grafixProg.ptrTarget);  		return (buf + cpt->grafixProg.pos); diff --git a/sky/compacts/savedata.cpp b/sky/compacts/savedata.cpp index a976c483a1..29f18aa9a2 100644 --- a/sky/compacts/savedata.cpp +++ b/sky/compacts/savedata.cpp @@ -1,3 +1,25 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2003 The ScummVM project + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. + * + * $Header$  + * + */ + +#include "sky/compact.h"  #include "sky/control.h"  Compact *SkyControl::_saveLoadCpts[833] = { 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; diff --git a/sky/control.h b/sky/control.h index c3a1c3e762..7fae6b948a 100644 --- a/sky/control.h +++ b/sky/control.h @@ -24,16 +24,18 @@  #include "common/stdafx.h"  #include "common/scummsys.h" -#include "sky/struc.h" -#include "base/engine.h" -#include "sky/screen.h" -#include "sky/disk.h" -#include "sky/mouse.h" -#include "sky/logic.h" +class SkyDisk;  class SkyScreen;  class SkyLogic;  class SkyMouse; +class SkyText; +class SkyMusicBase; +class SkySound; +class OSystem; +struct Compact; +struct dataFileHeader; +struct MegaSet;  #define MAX_SAVE_GAMES 999  #define MAX_TEXT_LEN 80 diff --git a/sky/debug.cpp b/sky/debug.cpp index cb7ddb067f..65015ee264 100644 --- a/sky/debug.cpp +++ b/sky/debug.cpp @@ -20,6 +20,7 @@   */  #include "stdafx.h" +#include "common/util.h"  #include "sky/debug.h"  static const char *section_0_compacts[] = { diff --git a/sky/debug.h b/sky/debug.h index 1e36e7c1b5..8f0de080fe 100644 --- a/sky/debug.h +++ b/sky/debug.h @@ -19,7 +19,11 @@   *   */ -#include "sky/sky.h" +#ifndef SKY_DEBUG_H +#define SKY_DEBUG_H + +#include "stdafx.h" +#include "common/scummsys.h"  class SkyDebug {  public: @@ -29,3 +33,4 @@ public:  	static void mcode(uint32 mcode, uint32 a, uint32 b, uint32 c);  }; +#endif diff --git a/sky/disk.cpp b/sky/disk.cpp index 59f7b5810f..0bc256c22f 100644 --- a/sky/disk.cpp +++ b/sky/disk.cpp @@ -20,12 +20,13 @@   */  #include "stdafx.h" +#include "common/file.h" +#include "common/util.h"  #include "common/scummsys.h" -#include "base/engine.h"  #include "sky/disk.h" -#include "sky/skydefs.h" -#include "sky/sky.h"  #include "sky/rnc_deco.h" +#include "sky/sky.h" +#include "sky/struc.h"  static const char *dataFilename = "sky.dsk";  static const char *dinnerFilename = "sky.dnr"; @@ -138,7 +139,7 @@ uint8 *SkyDisk::loadFile(uint16 fileNr, uint8 *dest) {  	_fileOffset &= 0x7FFFFF;  	if (cflag) { -		if (SkyState::_systemVars.gameVersion == 331) +		if (SkyEngine::_systemVars.gameVersion == 331)  			_fileOffset <<= 3;  		else  			_fileOffset <<= 4; @@ -295,7 +296,7 @@ void SkyDisk::fnCacheChip(uint32 list) {  	// fnCacheChip is called after fnCacheFast  	uint16 cnt = 0;  	while (_buildList[cnt]) cnt++; -	uint16 *fList = (uint16 *)SkyState::fetchCompact(list); +	uint16 *fList = (uint16 *)SkyEngine::fetchCompact(list);  	uint16 fCnt = 0;  	do {  		_buildList[cnt + fCnt] = fList[fCnt] & 0x7FFFU; @@ -308,7 +309,7 @@ void SkyDisk::fnCacheFast(uint32 list) {  	if (list == 0) return;  	uint8 cnt = 0; -	uint16 *fList = (uint16 *)SkyState::fetchCompact(list); +	uint16 *fList = (uint16 *)SkyEngine::fetchCompact(list);  	do {  		_buildList[cnt] = fList[cnt] & 0x7FFFU;  		cnt++; @@ -331,8 +332,8 @@ void SkyDisk::fnCacheFiles(void) {  			_loadedFilesList[targCnt] = _loadedFilesList[lCnt];  			targCnt++;  		} else { -			free(SkyState::_itemList[_loadedFilesList[lCnt] & 2047]); -			SkyState::_itemList[_loadedFilesList[lCnt] & 2047] = NULL;		 +			free(SkyEngine::_itemList[_loadedFilesList[lCnt] & 2047]); +			SkyEngine::_itemList[_loadedFilesList[lCnt] & 2047] = NULL;		  		}  		lCnt++;  	} @@ -358,8 +359,8 @@ void SkyDisk::fnCacheFiles(void) {  		_loadedFilesList[targCnt] = _buildList[bCnt] & 0x7FFFU;  		targCnt++;  		_loadedFilesList[targCnt] = 0; -		SkyState::_itemList[_buildList[bCnt] & 2047] = (void**)loadFile(_buildList[bCnt] & 0x7FFF, NULL); -		if (!SkyState::_itemList[_buildList[bCnt] & 2047]) +		SkyEngine::_itemList[_buildList[bCnt] & 2047] = (void**)loadFile(_buildList[bCnt] & 0x7FFF, NULL); +		if (!SkyEngine::_itemList[_buildList[bCnt] & 2047])  			warning("fnCacheFiles: SkyDisk::loadFile() returned NULL for file %d",_buildList[bCnt] & 0x7FFF);  		bCnt++;  	} @@ -370,15 +371,15 @@ void SkyDisk::refreshFilesList(uint32 *list) {  	uint8 cnt = 0;  	while (_loadedFilesList[cnt]) { -		if (SkyState::_itemList[_loadedFilesList[cnt] & 2047]) -			free(SkyState::_itemList[_loadedFilesList[cnt] & 2047]); -		SkyState::_itemList[_loadedFilesList[cnt] & 2047] = NULL; +		if (SkyEngine::_itemList[_loadedFilesList[cnt] & 2047]) +			free(SkyEngine::_itemList[_loadedFilesList[cnt] & 2047]); +		SkyEngine::_itemList[_loadedFilesList[cnt] & 2047] = NULL;  		cnt++;  	}  	cnt = 0;  	while (list[cnt]) {  		_loadedFilesList[cnt] = list[cnt]; -		SkyState::_itemList[_loadedFilesList[cnt] & 2047] = (void**)loadFile((uint16)(_loadedFilesList[cnt] & 0x7FFF), NULL); +		SkyEngine::_itemList[_loadedFilesList[cnt] & 2047] = (void**)loadFile((uint16)(_loadedFilesList[cnt] & 0x7FFF), NULL);  		cnt++;  	}  	_loadedFilesList[cnt] = 0; @@ -393,7 +394,7 @@ void SkyDisk::fnMiniLoad(uint16 fileNum) {  	}  	_loadedFilesList[cnt] = fileNum & 0x7FFFU;  	_loadedFilesList[cnt + 1] = 0; -	SkyState::_itemList[fileNum & 2047] = (void**)loadFile(fileNum, NULL); +	SkyEngine::_itemList[fileNum & 2047] = (void**)loadFile(fileNum, NULL);  }  void SkyDisk::fnFlushBuffers(void) { @@ -401,8 +402,8 @@ void SkyDisk::fnFlushBuffers(void) {  	// dump all loaded sprites  	uint8 lCnt = 0;  	while (_loadedFilesList[lCnt]) { -		free(SkyState::_itemList[_loadedFilesList[lCnt] & 2047]); -		SkyState::_itemList[_loadedFilesList[lCnt] & 2047] = 0; +		free(SkyEngine::_itemList[_loadedFilesList[lCnt] & 2047]); +		SkyEngine::_itemList[_loadedFilesList[lCnt] & 2047] = 0;  		lCnt++;  	}  	_loadedFilesList[0] = 0; diff --git a/sky/disk.h b/sky/disk.h index f382ba79bd..eaf9be4e58 100644 --- a/sky/disk.h +++ b/sky/disk.h @@ -22,7 +22,10 @@  #ifndef SKYDISK_H  #define SKYDISK_H -#include "common/file.h" +#include "stdafx.h" +#include "common/scummsys.h" + +class File;  #define MAX_FILES_IN_LIST 60 diff --git a/sky/grid.cpp b/sky/grid.cpp index 9a26876e19..1069e6f936 100644 --- a/sky/grid.cpp +++ b/sky/grid.cpp @@ -19,8 +19,10 @@   *   */ -#include "grid.h" -#include "compact.h" +#include "sky/compact.h" +#include "sky/disk.h" +#include "sky/grid.h" +#include "sky/logic.h"  #define	GRID_FILE_START	60000 @@ -141,7 +143,7 @@ void SkyGrid::loadGrids(void) {  	// no endian conversion necessary as I'm using uint8* instead of uint32*  	for (uint8 cnt = 0; cnt < TOT_NO_GRIDS; cnt++)  		_skyDisk->loadFile(GRID_FILE_START + cnt, _gameGrids + (cnt * GRID_SIZE)); -	if (!SkyState::isDemo()) { // single disk demos never get that far +	if (!SkyEngine::isDemo()) { // single disk demos never get that far  		// Reloading the grids can sometimes cause problems eg when reichs door is  		// open the door grid bit gets replaced so you can't get back in (or out)  		if (SkyLogic::_scriptVariables[REICH_DOOR_FLAG]) diff --git a/sky/grid.h b/sky/grid.h index e214415aca..b71554cc28 100644 --- a/sky/grid.h +++ b/sky/grid.h @@ -23,9 +23,10 @@  #define SKYGRID_H  #include "stdafx.h" -#include "disk.h" -#include "struc.h" -#include "compact.h" +#include "common/scummsys.h" + +struct Compact; +class SkyDisk;  class SkyGrid {  public: diff --git a/sky/intro.cpp b/sky/intro.cpp index 8f8ce3e200..3093702b79 100644 --- a/sky/intro.cpp +++ b/sky/intro.cpp @@ -20,8 +20,15 @@   */  #include "stdafx.h" +#include "common/util.h" +#include "sky/disk.h"  #include "sky/intro.h" +#include "sky/music/musicbase.h" +#include "sky/screen.h"  #include "sky/sky.h" +#include "sky/sound.h" +#include "sky/struc.h" +#include "sky/text.h"  #define SHOWSCREEN		 0  #define COMMANDEND		 0 // end of COMMANDFLIRT block @@ -631,7 +638,7 @@ SkyIntro::~SkyIntro(void) {  bool SkyIntro::doIntro(bool floppyIntro) { -	if (!SkyState::isCDVersion()) +	if (!SkyEngine::isCDVersion())  		floppyIntro = true;  	_skyDisk->prefetchFile(60112); diff --git a/sky/intro.h b/sky/intro.h index 396cab5e50..e26f5b961d 100644 --- a/sky/intro.h +++ b/sky/intro.h @@ -22,8 +22,15 @@  #ifndef INTRO_H  #define INTRO_H -#include "sky/screen.h" -#include "sky/disk.h" +#include "stdafx.h" +#include "common/scummsys.h" +#include "sound/mixer.h" + +class SkyDisk; +class SkyScreen; +class SkyMusicBase; +class SkySound; +class SkyText;  class SkyIntro {  public: diff --git a/sky/logic.cpp b/sky/logic.cpp index ab6d75b6d0..d83157204f 100644 --- a/sky/logic.cpp +++ b/sky/logic.cpp @@ -20,12 +20,25 @@   */  #include "stdafx.h" -#include "sky/logic.h" -#include "sky/debug.h" +#include "sky/autoroute.h"  #include "sky/compact.h" -#include "sky/skydefs.h" +#include "sky/control.h" +#include "sky/debug.h" +#include "sky/disk.h" +#include "sky/grid.h" +#include "sky/logic.h" +#include "sky/mouse.h" +#include "sky/music/musicbase.h" +#include "sky/text.h" +#include "sky/screen.h" +#include "sky/sky.h" +#include "sky/sound.h" +#include "sky/struc.h"  #include "sky/talks.h" +/* +#include "sky/skydefs.h"  #include "base/gameDetector.h" +*/  uint32 SkyLogic::_scriptVariables[838]; @@ -85,17 +98,17 @@ bool SkyLogic::checkProtection(void) {  }  void SkyLogic::engine() { -	uint16 *logicList = (uint16 *)SkyState::fetchCompact(_scriptVariables[LOGIC_LIST_NO]); +	uint16 *logicList = (uint16 *)SkyEngine::fetchCompact(_scriptVariables[LOGIC_LIST_NO]);  	while (uint16 id = *logicList++) { // 0 means end of list  		if (id == 0xffff) {  			// Change logic data address -			logicList = (uint16 *)SkyState::fetchCompact(*logicList); +			logicList = (uint16 *)SkyEngine::fetchCompact(*logicList);  			continue;  		}  		_scriptVariables[CUR_ID] = id; -		_compact = SkyState::fetchCompact(id); +		_compact = SkyEngine::fetchCompact(id);  		// check the id actually wishes to be processed  		if (!(_compact->status & (1 << 6))) @@ -191,7 +204,7 @@ void SkyLogic::arAnim() {  		// fine because the later collision will almost certainly  		// take longer to clear than the earlier one. -		if (collide(SkyState::fetchCompact(_compact->extCompact->waitingFor))) { +		if (collide(SkyEngine::fetchCompact(_compact->extCompact->waitingFor))) {  			stopAndWait();  			return;  		} @@ -204,13 +217,13 @@ void SkyLogic::arAnim() {  	// ok, our turn to check for collisions -	uint16 *logicList = (uint16 *)SkyState::fetchCompact(_scriptVariables[LOGIC_LIST_NO]); +	uint16 *logicList = (uint16 *)SkyEngine::fetchCompact(_scriptVariables[LOGIC_LIST_NO]);  	Compact *cpt = 0;  	while (uint16 id = *logicList++) { // get an id  		if (id == 0xffff) { // address change? -			logicList = (uint16 *)SkyState::fetchCompact(*logicList); // get new logic list +			logicList = (uint16 *)SkyEngine::fetchCompact(*logicList); // get new logic list  			continue;  		} @@ -218,7 +231,7 @@ void SkyLogic::arAnim() {  			continue;  		_scriptVariables[HIT_ID] = id; // save target id for any possible c_mini_bump -		cpt = SkyState::fetchCompact(id); // let's have a closer look +		cpt = SkyEngine::fetchCompact(id); // let's have a closer look  		if (!(cpt->status & (1 << ST_COLLISION_BIT))) // can it collide?  			continue; @@ -381,7 +394,7 @@ void SkyLogic::anim() {  		} else if (*grafixProg >= LF_START_FX) { // do sync  			grafixProg++; -			Compact *cpt = SkyState::fetchCompact(*grafixProg++); +			Compact *cpt = SkyEngine::fetchCompact(*grafixProg++);  			cpt->sync = *grafixProg++;  		} else { // put coordinates and frame in @@ -484,13 +497,13 @@ void SkyLogic::talk() {  	if (_skyMouse->wasClicked())  		for (int i = 0; i < ARRAYSIZE(clickTable); i++)  			if (clickTable[i] == (uint16)_scriptVariables[CUR_ID]) { -				if ((SkyState::_systemVars.systemFlags & SF_ALLOW_SPEECH) && (!_skySound->speechFinished())) +				if ((SkyEngine::_systemVars.systemFlags & SF_ALLOW_SPEECH) && (!_skySound->speechFinished()))  					_skySound->stopSpeech(); -				if ((SkyState::_systemVars.systemFlags & SF_ALLOW_TEXT) && +				if ((SkyEngine::_systemVars.systemFlags & SF_ALLOW_TEXT) &&  					(_compact->extCompact->spTextId > 0) &&  					(_compact->extCompact->spTextId < 0xFFFF)) { -					SkyState::fetchCompact(_compact->extCompact->spTextId)->status = 0; +					SkyEngine::fetchCompact(_compact->extCompact->spTextId)->status = 0;  				}  				if (SkyCompact::getGrafixPtr(_compact)) {  					_compact->frame = _compact->getToFlag; // set character to stand @@ -542,7 +555,7 @@ void SkyLogic::talk() {  		// ok, speech has finished  		if (_compact->extCompact->spTextId) { -			Compact *cpt = SkyState::fetchCompact(_compact->extCompact->spTextId); // get text id to kill +			Compact *cpt = SkyEngine::fetchCompact(_compact->extCompact->spTextId); // get text id to kill  			cpt->status = 0; // kill the text  		} @@ -554,7 +567,7 @@ void SkyLogic::talk() {  void SkyLogic::listen() {  	/// Stay in this mode until id in getToFlag leaves L_TALK mode -	Compact *cpt = SkyState::fetchCompact(_compact->flag); +	Compact *cpt = SkyEngine::fetchCompact(_compact->flag);  	if (cpt->logic == L_TALK)  		return; @@ -570,7 +583,7 @@ void SkyLogic::stopped() {  	/// that will be one level higher than the script we  	/// would wish to restart from -	Compact *cpt = SkyState::fetchCompact(_compact->extCompact->waitingFor); +	Compact *cpt = SkyEngine::fetchCompact(_compact->extCompact->waitingFor);  	if (cpt)  		if (!cpt->mood && collide(cpt)) @@ -593,7 +606,7 @@ void SkyLogic::choose() {  	fnNoHuman(0, 0, 0); // kill mouse again -	SkyState::_systemVars.systemFlags &= ~SF_CHOOSING; // restore save/restore +	SkyEngine::_systemVars.systemFlags &= ~SF_CHOOSING; // restore save/restore  	_compact->logic = L_SCRIPT; // and continue script  	logicScript(); @@ -653,7 +666,7 @@ void SkyLogic::simpleAnim() {  		grafixProg++;  		// *grafix_prog: id to sync -		Compact *compact2 = SkyState::fetchCompact(*grafixProg); +		Compact *compact2 = SkyEngine::fetchCompact(*grafixProg);  		grafixProg++;  		// *grafix_prog: sync @@ -1131,7 +1144,7 @@ void SkyLogic::initScriptVariables() {  	_scriptVariables[820] = 1;  	_scriptVariables[821] = 1; -	if (SkyState::_systemVars.gameVersion == 288) +	if (SkyEngine::_systemVars.gameVersion == 288)  		memcpy(_scriptVariables + 352, forwardList1b288, sizeof(forwardList1b288));  	else  		memcpy(_scriptVariables + 352, forwardList1b, sizeof(forwardList1b)); @@ -1350,7 +1363,7 @@ bool SkyLogic::fnCacheFast(uint32 a, uint32 b, uint32 c) {  bool SkyLogic::fnDrawScreen(uint32 a, uint32 b, uint32 c) {  	debug(5, "Call: fnDrawScreen(%X, %X)",a,b); -	SkyState::_systemVars.currentPalette = a; +	SkyEngine::_systemVars.currentPalette = a;  	_skyScreen->fnDrawScreen(a, b);  	return true;  } @@ -1383,7 +1396,7 @@ bool SkyLogic::fnIdle(uint32 a, uint32 b, uint32 c) {  bool SkyLogic::fnInteract(uint32 targetId, uint32 b, uint32 c) {  	_compact->mode += 4; // next level up  	_compact->logic = L_SCRIPT; -	Compact *cpt = SkyState::fetchCompact(targetId); +	Compact *cpt = SkyEngine::fetchCompact(targetId);  	*SkyCompact::getSub(_compact, _compact->mode) = cpt->actionScript;  	*SkyCompact::getSub(_compact, _compact->mode + 2) = 0; @@ -1399,7 +1412,7 @@ bool SkyLogic::fnStartSub(uint32 scr, uint32 b, uint32 c) {  }  bool SkyLogic::fnTheyStartSub(uint32 mega, uint32 scr, uint32 c) { -	Compact *cpt = SkyState::fetchCompact(mega); +	Compact *cpt = SkyEngine::fetchCompact(mega);  	cpt->mode += 4;  	*SkyCompact::getSub(cpt, cpt->mode) = (uint16)(scr & 0xffff);  	*SkyCompact::getSub(cpt, cpt->mode + 2) = (uint16)(scr >> 16); @@ -1407,7 +1420,7 @@ bool SkyLogic::fnTheyStartSub(uint32 mega, uint32 scr, uint32 c) {  }  bool SkyLogic::fnAssignBase(uint32 id, uint32 scr, uint32 c) { -	Compact *cpt = SkyState::fetchCompact(id); +	Compact *cpt = SkyEngine::fetchCompact(id);  	cpt->mode = C_BASE_MODE;  	cpt->logic = L_SCRIPT;  	cpt->baseSub     = (uint16)(scr & 0xffff); @@ -1471,7 +1484,7 @@ bool SkyLogic::fnCloseHand(uint32 a, uint32 b, uint32 c) {  bool SkyLogic::fnGetTo(uint32 targetPlaceId, uint32 mode, uint32 c) {   	_compact->upFlag = (uint16)mode; // save mode for action script  	_compact->mode += 4; // next level up -	Compact *cpt = SkyState::fetchCompact(_compact->place); +	Compact *cpt = SkyEngine::fetchCompact(_compact->place);  	if (!cpt) {   		warning("can't find _compact's getToTable. Place compact is NULL");  		return false;  @@ -1552,7 +1565,7 @@ bool SkyLogic::fnSetAlternate(uint32 scr, uint32 b, uint32 c) {  }  bool SkyLogic::fnAltSetAlternate(uint32 target, uint32 scr, uint32 c) { -	Compact *cpt = SkyState::fetchCompact(target); +	Compact *cpt = SkyEngine::fetchCompact(target);  	cpt->extCompact->alt = (uint16)(scr & 0xffff);  	cpt->logic = L_ALT;  	return false; @@ -1560,7 +1573,7 @@ bool SkyLogic::fnAltSetAlternate(uint32 target, uint32 scr, uint32 c) {  bool SkyLogic::fnKillId(uint32 id, uint32 b, uint32 c) {  	if (id) { -		Compact *cpt = SkyState::fetchCompact(id); +		Compact *cpt = SkyEngine::fetchCompact(id);  		if (cpt->status & (1 << 7))  			_skyGrid->removeObjectFromWalk(cpt);  		cpt->status = 0; @@ -1613,7 +1626,7 @@ bool SkyLogic::fnQuit(uint32 a, uint32 b, uint32 c) {  }  bool SkyLogic::fnSpeakMe(uint32 targetId, uint32 mesgNum, uint32 animNum) { -	stdSpeak(SkyState::fetchCompact(targetId), mesgNum, animNum, 0); +	stdSpeak(SkyEngine::fetchCompact(targetId), mesgNum, animNum, 0);  	return false; 	//drop out of script  } @@ -1652,7 +1665,7 @@ bool SkyLogic::fnSpeakWaitDir(uint32 a, uint32 b, uint32 c) {  	_compact->flag = (uint16)a;  	_compact->logic = L_LISTEN; -	Compact *speaker = SkyState::fetchCompact(a); +	Compact *speaker = SkyEngine::fetchCompact(a);  	if (c) {  		c += speaker->extCompact->dir << 1;  		stdSpeak(speaker, b, c, speaker->extCompact->dir << 1); @@ -1667,7 +1680,7 @@ bool SkyLogic::fnChooser(uint32 a, uint32 b, uint32 c) {  	// setup the text questions to be clicked on  	// read from TEXT1 until 0 -	SkyState::_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 @@ -1697,7 +1710,7 @@ bool SkyLogic::fnChooser(uint32 a, uint32 b, uint32 c) {  			index += 2;  		} -		Compact *textCompact = SkyState::fetchCompact(lowText.compactNum); +		Compact *textCompact = SkyEngine::fetchCompact(lowText.compactNum);  		textCompact->getToFlag = (uint16)textNum;  		textCompact->downFlag = (uint16)*p++; // get animation number @@ -1722,8 +1735,8 @@ bool SkyLogic::fnHighlight(uint32 itemNo, uint32 pen, uint32 c) {  	pen -= 11;  	pen ^= 1;  	pen += 241; -	Compact *textCompact = SkyState::fetchCompact(itemNo); -	uint8 *sprData = (uint8 *)SkyState::fetchItem(textCompact->flag); +	Compact *textCompact = SkyEngine::fetchCompact(itemNo); +	uint8 *sprData = (uint8 *)SkyEngine::fetchItem(textCompact->flag);  	_skyText->changeTextSpriteColour(sprData, (uint8)pen);  	return true;  } @@ -1734,7 +1747,7 @@ bool SkyLogic::fnTextKill(uint32 a, uint32 b, uint32 c) {  	uint32 id = FIRST_TEXT_COMPACT;  	for (int i = 10; i > 0; i--) { -		Compact *cpt = SkyState::fetchCompact(id); +		Compact *cpt = SkyEngine::fetchCompact(id);  		if (cpt->status & (1 << 4))  			cpt->status = 0;  		id++; @@ -1757,25 +1770,25 @@ bool SkyLogic::fnWeWait(uint32 id, uint32 b, uint32 c) {  }  bool SkyLogic::fnSendSync(uint32 mega, uint32 sync, uint32 c) { -	Compact *cpt = SkyState::fetchCompact(mega); +	Compact *cpt = SkyEngine::fetchCompact(mega);  	cpt->sync = (uint16)(sync & 0xffff);  	return false;  }  bool SkyLogic::fnSendFastSync(uint32 mega, uint32 sync, uint32 c) { -	Compact *cpt = SkyState::fetchCompact(mega); +	Compact *cpt = SkyEngine::fetchCompact(mega);  	cpt->sync = (uint16)(sync & 0xffff);  	return true;  }  bool SkyLogic::fnSendRequest(uint32 target, uint32 scr, uint32 c) { -	Compact *cpt = SkyState::fetchCompact(target); +	Compact *cpt = SkyEngine::fetchCompact(target);  	cpt->extCompact->request = (uint16)(scr & 0xffff);  	return false;  }  bool SkyLogic::fnClearRequest(uint32 target, uint32 b, uint32 c) { -	Compact *cpt = SkyState::fetchCompact(target); +	Compact *cpt = SkyEngine::fetchCompact(target);  	cpt->extCompact->request = 0;  	return true;  } @@ -1804,11 +1817,11 @@ bool SkyLogic::fnStartMenu(uint32 firstObject, uint32 b, uint32 c) {  	// (1) FIRST, SET UP THE 2 ARROWS SO THEY APPEAR ON SCREEN -	Compact *cpt = SkyState::fetchCompact(47); +	Compact *cpt = SkyEngine::fetchCompact(47);  	cpt->status = ST_MOUSE + ST_FOREGROUND + ST_LOGIC + ST_RECREATE;  	cpt->screen = (uint16)(_scriptVariables[SCREEN] & 0xffff); -	cpt = SkyState::fetchCompact(48); +	cpt = SkyEngine::fetchCompact(48);  	cpt->status = ST_MOUSE + ST_FOREGROUND + ST_LOGIC + ST_RECREATE;  	cpt->screen = (uint16)(_scriptVariables[SCREEN] & 0xffff); @@ -1834,7 +1847,7 @@ bool SkyLogic::fnStartMenu(uint32 firstObject, uint32 b, uint32 c) {  	for (i = 0; i < ARRAYSIZE(_objectList); i++) {  		if (_objectList[i]) -			(SkyState::fetchCompact(_objectList[i]))->status = ST_LOGIC; +			(SkyEngine::fetchCompact(_objectList[i]))->status = ST_LOGIC;  		else break;  	} @@ -1849,7 +1862,7 @@ bool SkyLogic::fnStartMenu(uint32 firstObject, uint32 b, uint32 c) {  	uint16 rollingX = TOP_LEFT_X + 28;  	for (i = 0; i < 11; i++) { -		cpt = SkyState::fetchCompact( +		cpt = SkyEngine::fetchCompact(  				_objectList[_scriptVariables[SCROLL_OFFSET] + i]);  		cpt->status = ST_MOUSE + ST_FOREGROUND + ST_LOGIC + ST_RECREATE; @@ -1868,7 +1881,7 @@ bool SkyLogic::fnStartMenu(uint32 firstObject, uint32 b, uint32 c) {  }  bool SkyLogic::fnUnhighlight(uint32 item, uint32 b, uint32 c) { -	Compact *cpt = SkyState::fetchCompact(item); +	Compact *cpt = SkyEngine::fetchCompact(item);  	cpt->frame--;  	cpt->getToFlag = 0;  	return true; @@ -1878,7 +1891,7 @@ bool SkyLogic::fnFaceId(uint32 otherId, uint32 b, uint32 c) {  	/// return the direction to turn to face another id  	/// pass back result in c_just_flag -	Compact *cpt = SkyState::fetchCompact(otherId); +	Compact *cpt = SkyEngine::fetchCompact(otherId);  	int16 x = _compact->xcood - cpt->xcood; @@ -1911,7 +1924,7 @@ bool SkyLogic::fnFaceId(uint32 otherId, uint32 b, uint32 c) {  bool SkyLogic::fnForeground(uint32 sprite, uint32 b, uint32 c) {  	/// Make sprite a foreground sprite -	Compact *cpt = SkyState::fetchCompact(sprite); +	Compact *cpt = SkyEngine::fetchCompact(sprite);  	cpt->status &= 0xfff8;  	cpt->status |= ST_FOREGROUND;  	return true; @@ -1926,14 +1939,14 @@ bool SkyLogic::fnBackground(uint32 a, uint32 b, uint32 c) {  bool SkyLogic::fnNewBackground(uint32 sprite, uint32 b, uint32 c) {  	/// Make sprite a background sprite -	Compact *cpt = SkyState::fetchCompact(sprite); +	Compact *cpt = SkyEngine::fetchCompact(sprite);  	cpt->status &= 0xfff8;  	cpt->status |= ST_BACKGROUND;  	return true;  }  bool SkyLogic::fnSort(uint32 mega, uint32 b, uint32 c) { -	Compact *cpt = SkyState::fetchCompact(mega); +	Compact *cpt = SkyEngine::fetchCompact(mega);  	cpt->status &= 0xfff8;  	cpt->status |= ST_SORT;  	return true; @@ -1949,7 +1962,7 @@ bool SkyLogic::fnNoSpriteEngine(uint32 a, uint32 b, uint32 c) {  bool SkyLogic::fnNoSpritesA6(uint32 us, uint32 b, uint32 c) {  	/// stop the compact printing  	/// remove foreground, background & sort -	Compact *cpt = SkyState::fetchCompact(us); +	Compact *cpt = SkyEngine::fetchCompact(us);  	cpt->status &= 0xfff8;  	return true;	  } @@ -1959,8 +1972,8 @@ bool SkyLogic::fnResetId(uint32 id, uint32 resetBlock, uint32 c) {  	/// eg - when a smaller mega turn to larger  	/// - a mega changes rooms... -	Compact *cpt = SkyState::fetchCompact(id); -	uint16 *rst = (uint16 *)SkyState::fetchCompact(resetBlock); +	Compact *cpt = SkyEngine::fetchCompact(id); +	uint16 *rst = (uint16 *)SkyEngine::fetchCompact(resetBlock);  	if (!cpt) {  		warning("fnResetId(): Compact %d (id) == NULL",id); @@ -1995,7 +2008,7 @@ bool SkyLogic::fnRunAnimMod(uint32 animNo, uint32 b, uint32 c) {  	_compact->grafixProg.ptrTarget = animNo;  	_compact->grafixProg.pos = 0; -	//uint16 *animation = (uint16 *)SkyState::fetchCompact(animNo); +	//uint16 *animation = (uint16 *)SkyEngine::fetchCompact(animNo);  	//uint16 sprite = *animation++; // get sprite set  	//_compact->offset = sprite;  	_compact->offset = *SkyCompact::getGrafixPtr(_compact); @@ -2011,7 +2024,7 @@ bool SkyLogic::fnSimpleMod(uint32 animSeqNo, uint32 b, uint32 c) {  	_compact->grafixProg.ptrType = COMPACT;  	_compact->grafixProg.ptrTarget = animSeqNo;  	_compact->grafixProg.pos = 0; -	//uint16 *animSeq = (uint16 *)SkyState::fetchCompact(animSeqNo); +	//uint16 *animSeq = (uint16 *)SkyEngine::fetchCompact(animSeqNo);  	//_compact->offset = *animSeq++;  	//assert(*animSeq != 0);  	_compact->offset = *SkyCompact::getGrafixPtr(_compact); @@ -2026,7 +2039,7 @@ bool SkyLogic::fnRunFrames(uint32 sequenceNo, uint32 b, uint32 c) {  	_compact->grafixProg.ptrType = COMPACT;  	_compact->grafixProg.ptrTarget = sequenceNo;  	_compact->grafixProg.pos = 0; -	//uint16 *sequence = (uint16 *)SkyState::fetchCompact(sequenceNo); +	//uint16 *sequence = (uint16 *)SkyEngine::fetchCompact(sequenceNo);  	_compact->logic = L_FRAMES;  	//_compact->offset = *sequence++; @@ -2056,7 +2069,7 @@ bool SkyLogic::fnDecMegaSet(uint32 a, uint32 b, uint32 c) {  }  bool SkyLogic::fnSetMegaSet(uint32 mega, uint32 setNo, uint32 c) { -	Compact *cpt = SkyState::fetchCompact(mega); +	Compact *cpt = SkyEngine::fetchCompact(mega);  	cpt->extCompact->megaSet = (uint16) (setNo * NEXT_MEGA_SET);  	return true;  } @@ -2067,7 +2080,7 @@ bool SkyLogic::fnMoveItems(uint32 listNo, uint32 screenNo, uint32 c) {  	for (int i = 0; i < 2; i++) {  		if (!*p)  			return true; -		Compact *cpt = SkyState::fetchCompact(*p++); +		Compact *cpt = SkyEngine::fetchCompact(*p++);  		cpt->screen = (uint16)(screenNo & 0xffff);  	}  	return true; @@ -2096,46 +2109,46 @@ bool SkyLogic::fnRandom(uint32 a, uint32 b, uint32 c) {  }  bool SkyLogic::fnPersonHere(uint32 id, uint32 room, uint32 c) { -	Compact *cpt = SkyState::fetchCompact(id); +	Compact *cpt = SkyEngine::fetchCompact(id);  	_scriptVariables[RESULT] = cpt->screen == room ? 1 : 0;  	return true;  }  bool SkyLogic::fnToggleMouse(uint32 a, uint32 b, uint32 c) { -	SkyState::fetchCompact(a)->status ^= ST_MOUSE; +	SkyEngine::fetchCompact(a)->status ^= ST_MOUSE;  	return true;  }  bool SkyLogic::fnMouseOn(uint32 a, uint32 b, uint32 c) {  	//switch on the mouse highlight -	Compact *cpt = SkyState::fetchCompact(a); +	Compact *cpt = SkyEngine::fetchCompact(a);  	cpt->status |= ST_MOUSE;  	return true;  }  bool SkyLogic::fnMouseOff(uint32 a, uint32 b, uint32 c) {  	//switch on (off??) the mouse highlight -	Compact *cpt = SkyState::fetchCompact(a); +	Compact *cpt = SkyEngine::fetchCompact(a);  	cpt->status &= ~ST_MOUSE;  	return true;  }  bool SkyLogic::fnFetchX(uint32 id, uint32 b, uint32 c) { -	Compact *cpt = SkyState::fetchCompact(id); +	Compact *cpt = SkyEngine::fetchCompact(id);  	_scriptVariables[RESULT] = cpt->xcood;  	return true;  }  bool SkyLogic::fnFetchY(uint32 id, uint32 b, uint32 c) { -	Compact *cpt = SkyState::fetchCompact(id); +	Compact *cpt = SkyEngine::fetchCompact(id);  	_scriptVariables[RESULT] = cpt->ycood;  	return true;  }  bool SkyLogic::fnTestList(uint32 id, uint32 x, uint32 y) {  	_scriptVariables[RESULT] = 0; // assume fail -	uint16 *list = (uint16 *)SkyState::fetchCompact(id); +	uint16 *list = (uint16 *)SkyEngine::fetchCompact(id);  	while (*list) {  		if ((x >= list[0]) && (x < list[1]) && (y >= list[2]) && (y < list[3])) @@ -2146,7 +2159,7 @@ bool SkyLogic::fnTestList(uint32 id, uint32 x, uint32 y) {  }  bool SkyLogic::fnFetchPlace(uint32 id, uint32 b, uint32 c) { -	Compact *cpt = SkyState::fetchCompact(id); +	Compact *cpt = SkyEngine::fetchCompact(id);  	_scriptVariables[RESULT] = cpt->place;  	return true;  } @@ -2156,7 +2169,7 @@ bool SkyLogic::fnCustomJoey(uint32 id, uint32 b, uint32 c) {  	/// used by Joey-Logic - done in code like this because scripts can't  	/// get access to another megas compact as easily -	Compact *cpt = SkyState::fetchCompact(id); +	Compact *cpt = SkyEngine::fetchCompact(id);  	_scriptVariables[PLAYER_X] = cpt->xcood;  	_scriptVariables[PLAYER_Y] = cpt->ycood; @@ -2166,8 +2179,8 @@ bool SkyLogic::fnCustomJoey(uint32 id, uint32 b, uint32 c) {  }  bool SkyLogic::fnSetPalette(uint32 a, uint32 b, uint32 c) { -	_skyScreen->setPaletteEndian((uint8 *)SkyState::fetchCompact(a)); -	SkyState::_systemVars.currentPalette = a; +	_skyScreen->setPaletteEndian((uint8 *)SkyEngine::fetchCompact(a)); +	SkyEngine::_systemVars.currentPalette = a;  	return true;  } @@ -2177,7 +2190,7 @@ bool SkyLogic::fnTextModule(uint32 a, uint32 b, uint32 c) {  }  bool SkyLogic::fnChangeName(uint32 id, uint32 textNo, uint32 c) { -	Compact *cpt = SkyState::fetchCompact(id); +	Compact *cpt = SkyEngine::fetchCompact(id);  	cpt->cursorText = (uint16) textNo;  	return true;  } @@ -2216,8 +2229,8 @@ bool SkyLogic::fnEyeball(uint32 id, uint32 b, uint32 c) {  	// set 'result' to frame no. pointing to foster, according to table used  	// eg. FN_eyeball (id_eye_90_table); -	uint16 *eyeTable = (uint16 *)SkyState::fetchCompact(id); -	Compact *cpt = SkyState::fetchCompact(ID_BLUE_FOSTER); +	uint16 *eyeTable = (uint16 *)SkyEngine::fetchCompact(id); +	Compact *cpt = SkyEngine::fetchCompact(ID_BLUE_FOSTER);  	uint32 x = cpt->xcood; // 168 < x < 416  	x -= 168; @@ -2232,7 +2245,7 @@ bool SkyLogic::fnEyeball(uint32 id, uint32 b, uint32 c) {  }  bool SkyLogic::fnLeaveSection(uint32 sectionNo, uint32 b, uint32 c) { -	if (SkyState::isDemo()) +	if (SkyEngine::isDemo())  		_skyControl->showGameQuitMsg();  	if (sectionNo == 5) //linc section - has different mouse icons @@ -2245,23 +2258,23 @@ bool SkyLogic::fnLeaveSection(uint32 sectionNo, uint32 b, uint32 c) {  bool SkyLogic::fnEnterSection(uint32 sectionNo, uint32 b, uint32 c) { -	if (SkyState::isDemo() && (sectionNo > 2)) +	if (SkyEngine::isDemo() && (sectionNo > 2))  		_skyControl->showGameQuitMsg();  	_scriptVariables[CUR_SECTION] = sectionNo; -	SkyState::_systemVars.currentMusic = 0; +	SkyEngine::_systemVars.currentMusic = 0;  	if (sectionNo == 5) //linc section - has different mouse icons  		_skyMouse->replaceMouseCursors(60302); -	if ((sectionNo != _currentSection) || (SkyState::_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(); -		SkyState::_systemVars.systemFlags &= ~SF_GAME_RESTORED; +		SkyEngine::_systemVars.systemFlags &= ~SF_GAME_RESTORED;  	}  	return true; @@ -2295,7 +2308,7 @@ bool SkyLogic::fnWaitSwingEnd(uint32 a, uint32 b, uint32 c) {  }  bool SkyLogic::fnSkipIntroCode(uint32 a, uint32 b, uint32 c) { -	SkyState::_systemVars.pastIntro = true; +	SkyEngine::_systemVars.pastIntro = true;  	return true;  } @@ -2307,7 +2320,7 @@ bool SkyLogic::fnBlankScreen(uint32 a, uint32 b, uint32 c) {  bool SkyLogic::fnPrintCredit(uint32 a, uint32 b, uint32 c) {  	lowTextManager_t creditText = _skyText->lowTextManager(a , 240, 0, 248, true); -	Compact *credCompact = SkyState::fetchCompact(creditText.compactNum); +	Compact *credCompact = SkyEngine::fetchCompact(creditText.compactNum);  	credCompact->xcood = 168;  	if ((a == 558) && (c == 215))  		credCompact->ycood = 211; @@ -2320,7 +2333,7 @@ bool SkyLogic::fnPrintCredit(uint32 a, uint32 b, uint32 c) {  bool SkyLogic::fnLookAt(uint32 a, uint32 b, uint32 c) {  	struct lowTextManager_t textInfo = _skyText->lowTextManager(a, 240, 0, 248, true); -	Compact *textCpt = SkyState::fetchCompact(textInfo.compactNum); +	Compact *textCpt = SkyEngine::fetchCompact(textInfo.compactNum);  	textCpt->xcood = 168;  	textCpt->ycood = (uint16)c; @@ -2352,7 +2365,7 @@ bool SkyLogic::fnLincTextModule(uint32 textPos, uint32 textNo, uint32 buttonActi  	lowTextManager_t text = _skyText->lowTextManager(textNo, 220, 0, 215, false); -	Compact *textCpt = SkyState::fetchCompact(text.compactNum); +	Compact *textCpt = SkyEngine::fetchCompact(text.compactNum);  	if (textPos < 20) { // line number (for text)  		textCpt->xcood = 152; @@ -2371,7 +2384,7 @@ bool SkyLogic::fnTextKill2(uint32 a, uint32 b, uint32 c) {  	uint32 id = FIRST_TEXT_COMPACT;  	for (int i = 10; i > 0; i--) { -		Compact *cpt = SkyState::fetchCompact(id); +		Compact *cpt = SkyEngine::fetchCompact(id);  		cpt->status = 0;  		id++;  	} @@ -2394,15 +2407,15 @@ bool SkyLogic::fnStopFx(uint32 a, uint32 b, uint32 c) {  }  bool SkyLogic::fnStartMusic(uint32 a, uint32 b, uint32 c) { -	if (!(SkyState::_systemVars.systemFlags & SF_MUS_OFF)) +	if (!(SkyEngine::_systemVars.systemFlags & SF_MUS_OFF))  		_skyMusic->startMusic((uint16)a); -	SkyState::_systemVars.currentMusic = (uint16)a; +	SkyEngine::_systemVars.currentMusic = (uint16)a;  	return true;  }  bool SkyLogic::fnStopMusic(uint32 a, uint32 b, uint32 c) {  	_skyMusic->startMusic(0); -	SkyState::_systemVars.currentMusic = 0; +	SkyEngine::_systemVars.currentMusic = 0;  	return true;  } @@ -2412,7 +2425,7 @@ bool SkyLogic::fnFadeDown(uint32 a, uint32 b, uint32 c) {  }  bool SkyLogic::fnFadeUp(uint32 a, uint32 b, uint32 c) { -	SkyState::_systemVars.currentPalette = a; +	SkyEngine::_systemVars.currentPalette = a;  	_skyScreen->fnFadeUp(a,b);  	return true;  } @@ -2448,7 +2461,7 @@ void SkyLogic::stdSpeak(Compact *target, uint32 textNum, uint32 animNum, uint32  		target->grafixProg.ptrType = TALKTABLE;  		target->grafixProg.ptrTarget = animNum;  	} else {	//then it must be a value -		//animPtr = (uint16 *)SkyState::fetchCompact(SkyTalkAnims::animTalkTableVal[animNum]); +		//animPtr = (uint16 *)SkyEngine::fetchCompact(SkyTalkAnims::animTalkTableVal[animNum]);  		target->grafixProg.ptrType = COMPACT;  		target->grafixProg.ptrTarget = SkyTalkAnims::animTalkTableVal[animNum];  	} @@ -2465,12 +2478,12 @@ void SkyLogic::stdSpeak(Compact *target, uint32 textNum, uint32 animNum, uint32  	bool speechUsed = false;  	// startSpeech returns false if no speech file exists for that text -	if (SkyState::isCDVersion()) +	if (SkyEngine::isCDVersion())  		speechUsed = _skySound->startSpeech((uint16)textNum);  	// if sky is configured to speech-only return now - except if we're running another  	// language than english -	if (speechUsed && (!(SkyState::_systemVars.systemFlags & SF_ALLOW_TEXT))) { +	if (speechUsed && (!(SkyEngine::_systemVars.systemFlags & SF_ALLOW_TEXT))) {  		target->extCompact->spTime = 10;  		target->logic = L_TALK;   		return ; @@ -2479,7 +2492,7 @@ void SkyLogic::stdSpeak(Compact *target, uint32 textNum, uint32 animNum, uint32  	//now form the text sprite  	struct lowTextManager_t textInfo;  	textInfo = _skyText->lowTextManager(textNum, FIXED_TEXT_WIDTH, 0, (uint8)target->extCompact->spColour, true); -	Compact *textCompact = SkyState::fetchCompact(textInfo.compactNum); +	Compact *textCompact = SkyEngine::fetchCompact(textInfo.compactNum);  	target->extCompact->spTextId = textInfo.compactNum;	//So we know what text to kill  	byte *textGfx = textInfo.textData; @@ -2489,7 +2502,7 @@ void SkyLogic::stdSpeak(Compact *target, uint32 textNum, uint32 animNum, uint32  	if (_scriptVariables[SCREEN] == target->screen) { // Only use coordinates if we are on the current screen   		//talking on-screen -		byte *targetGfx = (byte *)SkyState::fetchItem(target->frame >> 6); +		byte *targetGfx = (byte *)SkyEngine::fetchItem(target->frame >> 6);  		uint16 xPos = target->xcood + ((struct dataFileHeader *)targetGfx)->s_offset_x;  		uint16 width = (((struct dataFileHeader *)targetGfx)->s_width >> 1); diff --git a/sky/logic.h b/sky/logic.h index 8b0859591b..78554cd96a 100644 --- a/sky/logic.h +++ b/sky/logic.h @@ -22,14 +22,10 @@  #ifndef SKYLOGIC_H  #define SKYLOGIC_H -#include "sky/sky.h" -#include "sky/disk.h" -#include "sky/grid.h" -#include "sky/autoroute.h" -#include "sky/music/musicbase.h" -#include "sky/mouse.h" -#include "sky/screen.h" -#include "sky/control.h" +#include "stdafx.h" +#include "common/util.h" + +struct Compact;  enum scriptVariableOffsets {  	RESULT = 0, @@ -83,13 +79,24 @@ enum scriptVariableOffsets {  };  class SkyAutoRoute; -class SkyScreen; -class SkyMouse;  class SkyControl; +class SkyDisk; +class SkyGrid; +class SkyMouse; +class SkyMusicBase; +class SkyScreen; +class SkySound; +class SkyText;  class SkyLogic {  public: -	SkyLogic(SkyScreen *skyScreen, SkyDisk *skyDisk, SkyText *skyText, SkyMusicBase *skyMusic, SkyMouse *skyMouse, SkySound *skySound); +	SkyLogic( +		SkyScreen *skyScreen, +		SkyDisk *skyDisk, +		SkyText *skyText, +		SkyMusicBase *skyMusic, +		SkyMouse *skyMouse, +		SkySound *skySound);  	void engine();  	bool checkProtection(void);  	void useControlInstance(SkyControl *control) { _skyControl = control; }; diff --git a/sky/mouse.cpp b/sky/mouse.cpp index cb4c84b7a4..d5d44813c5 100644 --- a/sky/mouse.cpp +++ b/sky/mouse.cpp @@ -19,8 +19,13 @@   *   */ -#include "stdafx.h" +#include "common/system.h" +#include "sky/disk.h" +#include "sky/logic.h" +#include "sky/mouse.h"  #include "sky/sky.h" +#include "sky/skydefs.h" +#include "sky/struc.h"  #define MICE_FILE	60300  #define NO_MAIN_OBJECTS	24 @@ -137,11 +142,11 @@ void SkyMouse::fnSaveCoods(void) {  }  void SkyMouse::lockMouse(void) { -	SkyState::_systemVars.systemFlags |= SF_MOUSE_LOCKED; +	SkyEngine::_systemVars.systemFlags |= SF_MOUSE_LOCKED;  }  void SkyMouse::unlockMouse(void) { -	SkyState::_systemVars.systemFlags &= ~SF_MOUSE_LOCKED; +	SkyEngine::_systemVars.systemFlags &= ~SF_MOUSE_LOCKED;  }  void SkyMouse::restoreMouseData(uint16 frameNum) { @@ -224,10 +229,10 @@ void SkyMouse::pointerEngine(uint16 xPos, uint16 yPos) {  	uint32 currentListNum = SkyLogic::_scriptVariables[MOUSE_LIST_NO];  	uint16 *currentList;  	do { -		currentList = (uint16 *)SkyState::fetchCompact(currentListNum); +		currentList = (uint16 *)SkyEngine::fetchCompact(currentListNum);  		while ((*currentList != 0) && (*currentList != 0xFFFF)) {  			uint16 itemNum = *currentList; -			Compact *itemData = SkyState::fetchCompact(itemNum); +			Compact *itemData = SkyEngine::fetchCompact(itemNum);  			currentList++;  			if ((itemData->screen == SkyLogic::_scriptVariables[SCREEN]) &&	(itemData->status & 16)) {  				if (itemData->xcood + ((int16)itemData->mouseRelX) > xPos) continue; @@ -270,7 +275,7 @@ void SkyMouse::buttonEngine1(void) {  	if (_mouseB) {	//anything pressed?  		SkyLogic::_scriptVariables[BUTTON] = _mouseB;  		if (SkyLogic::_scriptVariables[SPECIAL_ITEM]) { //over anything? -			Compact *item = SkyState::fetchCompact(SkyLogic::_scriptVariables[SPECIAL_ITEM]); +			Compact *item = SkyEngine::fetchCompact(SkyLogic::_scriptVariables[SPECIAL_ITEM]);  			if (item->mouseClick)  				_skyLogic->mouseScript(item->mouseClick, item);  		} diff --git a/sky/mouse.h b/sky/mouse.h index 2d18b77eaa..b56d382459 100644 --- a/sky/mouse.h +++ b/sky/mouse.h @@ -23,10 +23,10 @@  #define SKYMOUSE_H  #include "stdafx.h" -#include "sky/disk.h" -#include "sky/logic.h" -#include "sky/struc.h" +#include "common/scummsys.h" +class OSystem; +class SkyDisk;  class SkyLogic;  class SkyMouse { diff --git a/sky/music/adlibchannel.cpp b/sky/music/adlibchannel.cpp index a5215ca2b5..4e68c4458f 100644 --- a/sky/music/adlibchannel.cpp +++ b/sky/music/adlibchannel.cpp @@ -19,8 +19,9 @@   *   */ -#include "adlibchannel.h" -#include "sound/fmopl.h" +#include "common/util.h" +#include "sky/music/adlibchannel.h" +#include "sky/sky.h"  SkyAdlibChannel::SkyAdlibChannel(FM_OPL *opl, uint8 *pMusicData, uint16 startOfData)  { @@ -42,7 +43,7 @@ SkyAdlibChannel::SkyAdlibChannel(FM_OPL *opl, uint8 *pMusicData, uint16 startOfD  	uint16 instrumentDataLoc; -	if (SkyState::_systemVars.gameVersion == 109) { +	if (SkyEngine::_systemVars.gameVersion == 109) {  		//instrumentDataLoc = (_musicData[0x11D0] << 8) | _musicData[0x11CF];  		//_frequenceTable = (uint16*)(_musicData + 0x835);  		//_registerTable = _musicData + 0xE35; @@ -54,7 +55,7 @@ SkyAdlibChannel::SkyAdlibChannel(FM_OPL *opl, uint8 *pMusicData, uint16 startOfD  		_registerTable = _musicData + 0xE68;  		_opOutputTable = _musicData + 0xE7A;  		_adlibRegMirror = _musicData + 0xF7D; -	} else if (SkyState::_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/sky/music/adlibchannel.h b/sky/music/adlibchannel.h index f13fb78e96..e7f9d27e13 100644 --- a/sky/music/adlibchannel.h +++ b/sky/music/adlibchannel.h @@ -22,9 +22,6 @@  #ifndef ADLIBCHANNEL_H  #define ADLIBCHANNEL_H -#include "stdafx.h" -#include "base/engine.h" -#include "sky/sky.h"  #include "sky/music/musicbase.h"  #include "sound/fmopl.h" diff --git a/sky/music/adlibmusic.cpp b/sky/music/adlibmusic.cpp index d3916269bd..d8f80d772a 100644 --- a/sky/music/adlibmusic.cpp +++ b/sky/music/adlibmusic.cpp @@ -20,7 +20,9 @@   */  #include "sky/music/adlibmusic.h" -#include "sound/fmopl.h" +#include "sky/music/adlibchannel.h" +#include "sound/mixer.h" +#include "sky/sky.h"  void SkyAdlibMusic::passMixerFunc(void *param, int16 *buf, uint len) { @@ -91,14 +93,14 @@ void SkyAdlibMusic::premixerCall(int16 *data, uint len) {  void SkyAdlibMusic::setupPointers(void) { -	if (SkyState::_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 (SkyState::_systemVars.gameVersion == 267) { +	} else if (SkyEngine::_systemVars.gameVersion == 267) {  		_musicDataLoc = READ_LE_UINT16(_musicData + 0x11F7);  		_initSequence = _musicData + 0xE87;  	} else { diff --git a/sky/music/adlibmusic.h b/sky/music/adlibmusic.h index b1b366c402..09782f5512 100644 --- a/sky/music/adlibmusic.h +++ b/sky/music/adlibmusic.h @@ -22,14 +22,11 @@  #ifndef ADLIBMUSIC_H  #define ADLIBMUSIC_H -#include "stdafx.h" -#include "sky/sky.h" -#include "sound/mixer.h" -#include "base/engine.h" -#include "adlibchannel.h" -#include "musicbase.h" +#include "sky/music/musicbase.h"  #include "sound/fmopl.h" +class SoundMixer; +  class SkyAdlibMusic : public SkyMusicBase {  public:  	SkyAdlibMusic(SoundMixer *pMixer, SkyDisk *pSkyDisk, OSystem *system); diff --git a/sky/music/gmchannel.cpp b/sky/music/gmchannel.cpp index 16e493db52..5635f9a20d 100644 --- a/sky/music/gmchannel.cpp +++ b/sky/music/gmchannel.cpp @@ -21,6 +21,7 @@  #include "gmchannel.h"  #include "common/util.h" +#include "sound/mididrv.h"  SkyGmChannel::SkyGmChannel(uint8 *pMusicData, uint16 startOfData, MidiDriver *pMidiDrv, byte *pInstMap, uint8 *veloTab) { diff --git a/sky/music/gmchannel.h b/sky/music/gmchannel.h index 8105141890..7214168586 100644 --- a/sky/music/gmchannel.h +++ b/sky/music/gmchannel.h @@ -22,10 +22,10 @@  #ifndef SKYGMCHANNEL_H  #define SKYGMCHANNEL_H -#include "stdafx.h" -#include "sound/mididrv.h"  #include "sky/music/musicbase.h" +class MidiDriver; +  typedef struct {  	uint16 eventDataPtr;  	int32 nextEventTime; diff --git a/sky/music/gmmusic.cpp b/sky/music/gmmusic.cpp index 581ebd841e..4bdef54e46 100644 --- a/sky/music/gmmusic.cpp +++ b/sky/music/gmmusic.cpp @@ -20,7 +20,10 @@   */  #include "sky/music/gmmusic.h" +#include "sky/music/gmchannel.h"  #include "sky/sky.h" +#include "common/util.h" +#include "sound/mididrv.h"  void SkyGmMusic::passTimerFunc(void *param) { @@ -34,7 +37,7 @@ SkyGmMusic::SkyGmMusic(MidiDriver *pMidiDrv, SkyDisk *pSkyDisk, OSystem *system)  	_midiDrv = pMidiDrv;  	int midiRes = _midiDrv->open();  	if (midiRes != 0) { -		error("Can't open midi device. Errorcode: %d",midiRes); +		error("Can't open midi device. Errorcode: %d", midiRes);  	}  	_midiDrv->setTimerCallback(this, passTimerFunc);  	_ignoreNextPoll = false; @@ -73,7 +76,7 @@ void SkyGmMusic::timerCall(void) {  void SkyGmMusic::setupPointers(void) { -	if (SkyState::_systemVars.gameVersion == 109) { +	if (SkyEngine::_systemVars.gameVersion == 109) {  		_musicDataLoc = (_musicData[0x79C] << 8) | _musicData[0x79B];  		_sysExSequence = _musicData + 0x1EF2;  	} else { diff --git a/sky/music/gmmusic.h b/sky/music/gmmusic.h index 78aaea4d7f..85bb43d033 100644 --- a/sky/music/gmmusic.h +++ b/sky/music/gmmusic.h @@ -22,11 +22,9 @@  #ifndef GMMUSIC_H  #define GMMUSIC_H -#include "stdafx.h" -#include "base/engine.h" -#include "musicbase.h" -#include "sound/mididrv.h" -#include "gmchannel.h" +#include "sky/music/musicbase.h" + +class MidiDriver;  class SkyGmMusic : public SkyMusicBase {  public: diff --git a/sky/music/mt32music.cpp b/sky/music/mt32music.cpp index 9e062546f4..d5bf335422 100644 --- a/sky/music/mt32music.cpp +++ b/sky/music/mt32music.cpp @@ -20,7 +20,9 @@   */  #include "sky/music/mt32music.h" +#include "sky/music/gmchannel.h"  #include "common/util.h" +#include "sound/mididrv.h"  void SkyMT32Music::passTimerFunc(void *param) { diff --git a/sky/music/mt32music.h b/sky/music/mt32music.h index d9624229b3..78cc439ac9 100644 --- a/sky/music/mt32music.h +++ b/sky/music/mt32music.h @@ -22,10 +22,9 @@  #ifndef MT32MUSIC_H  #define MT32MUSIC_H -#include "stdafx.h" -#include "musicbase.h" -#include "sound/mididrv.h" -#include "gmchannel.h" +#include "sky/music/musicbase.h" + +class MidiDriver;  class SkyMT32Music : public SkyMusicBase {  public: diff --git a/sky/music/musicbase.cpp b/sky/music/musicbase.cpp index fecfff6dae..368a9c308d 100644 --- a/sky/music/musicbase.cpp +++ b/sky/music/musicbase.cpp @@ -19,7 +19,8 @@   *   */ -#include "musicbase.h" +#include "sky/music/musicbase.h" +#include "sky/disk.h"  #include "common/util.h"  SkyMusicBase::SkyMusicBase(SkyDisk *pSkyDisk, OSystem *system) { diff --git a/sky/music/musicbase.h b/sky/music/musicbase.h index 1fa34be2bf..d5d17986c8 100644 --- a/sky/music/musicbase.h +++ b/sky/music/musicbase.h @@ -23,9 +23,12 @@  #define MUSICBASE_H  #include "stdafx.h" -#include "sky/disk.h" +#include "common/scummsys.h"  #include "common/system.h" +class SkyDisk; +class OSystem; +  #define FILES_PER_SECTION 4  typedef struct { diff --git a/sky/rnc_deco.h b/sky/rnc_deco.h index ef97caa3e9..a6f875e511 100644 --- a/sky/rnc_deco.h +++ b/sky/rnc_deco.h @@ -22,6 +22,8 @@  #ifndef RNC_DECO_H  #define RNC_DECO_H +#include "stdafx.h" +  class RncDecoder {  protected: diff --git a/sky/screen.cpp b/sky/screen.cpp index f2584b53b4..de8f50158f 100644 --- a/sky/screen.cpp +++ b/sky/screen.cpp @@ -19,7 +19,13 @@   *   */ -#include "screen.h" +#include "common/system.h" +#include "sky/disk.h" +#include "sky/logic.h" +#include "sky/screen.h" +#include "sky/sky.h" +#include "sky/skydefs.h" +#include "sky/struc.h"  uint8 SkyScreen::_top16Colours[16*3] =  { @@ -164,9 +170,9 @@ void SkyScreen::recreate(void) {  	// check the game grid for changed blocks  	if (!SkyLogic::_scriptVariables[LAYER_0_ID]) return ;  	uint8 *gridPos = _gameGrid; -	uint8 *screenData = (uint8 *)SkyState::fetchItem(SkyLogic::_scriptVariables[LAYER_0_ID]); +	uint8 *screenData = (uint8 *)SkyEngine::fetchItem(SkyLogic::_scriptVariables[LAYER_0_ID]);  	if (!screenData) { -		error("SkyScreen::recreate():\nSkyState::fetchItem(SkyLogic::_scriptVariables[LAYER_0_ID](%X)) returned NULL",SkyLogic::_scriptVariables[LAYER_0_ID]); +		error("SkyScreen::recreate():\nSkyEngine::fetchItem(SkyLogic::_scriptVariables[LAYER_0_ID](%X)) returned NULL",SkyLogic::_scriptVariables[LAYER_0_ID]);  	}  	uint8 *screenPos = _currentScreen; @@ -229,7 +235,7 @@ void SkyScreen::fnDrawScreen(uint32 palette, uint32 scroll) {  void SkyScreen::fnFadeDown(uint32 scroll) { -	if (scroll && (!(SkyState::_systemVars.systemFlags & SF_NO_SCROLL))) { +	if (scroll && (!(SkyEngine::_systemVars.systemFlags & SF_NO_SCROLL))) {  		// scrolling is performed by fnFadeUp. It's just prepared here  		_scrollScreen = _currentScreen;  		_currentScreen = (uint8 *)malloc(FULL_SCREEN_WIDTH * FULL_SCREEN_HEIGHT); @@ -301,8 +307,8 @@ void SkyScreen::fnFadeUp(uint32 palNum, uint32 scroll) {  		scroll = 0;  	} -	if ((scroll == 0) || (SkyState::_systemVars.systemFlags & SF_NO_SCROLL)) { -		uint8 *palette = (uint8 *)SkyState::fetchCompact(palNum); +	if ((scroll == 0) || (SkyEngine::_systemVars.systemFlags & SF_NO_SCROLL)) { +		uint8 *palette = (uint8 *)SkyEngine::fetchCompact(palNum);  		if (palette == NULL)  			error("SkyScreen::fnFadeUp: can't fetch compact %X", palNum);  #ifdef SCUMM_BIG_ENDIAN @@ -392,7 +398,7 @@ void SkyScreen::startSequence(uint16 fileNum) {  void SkyScreen::startSequenceItem(uint16 itemNum) { -	_seqInfo.seqData = (uint8 *)SkyState::fetchItem(itemNum); +	_seqInfo.seqData = (uint8 *)SkyEngine::fetchItem(itemNum);  	_seqInfo.framesLeft = _seqInfo.seqData[0] - 1;  	_seqInfo.seqDataPos = _seqInfo.seqData + 1;  	_seqInfo.delay = SEQ_DELAY; @@ -506,7 +512,7 @@ void SkyScreen::sortSprites(void) {  		currDrawList++;  		do { // a_new_draw_list: -			uint16 *drawListData = (uint16 *)SkyState::fetchCompact(loadDrawList); +			uint16 *drawListData = (uint16 *)SkyEngine::fetchCompact(loadDrawList);  			nextDrawList = false;  			while ((!nextDrawList) && (drawListData[0])) {  				if (drawListData[0] == 0xFFFF) { @@ -514,11 +520,11 @@ void SkyScreen::sortSprites(void) {  					nextDrawList = true;  				} else {  					// process_this_id: -					Compact *spriteComp = SkyState::fetchCompact(drawListData[0]); +					Compact *spriteComp = SkyEngine::fetchCompact(drawListData[0]);  					if ((spriteComp->status & 4) && // is it sortable playfield?(!?!)  						(spriteComp->screen == SkyLogic::_scriptVariables[SCREEN])) { // on current screen  							dataFileHeader *spriteData =  -								(dataFileHeader *)SkyState::fetchItem(spriteComp->frame >> 6); +								(dataFileHeader *)SkyEngine::fetchItem(spriteComp->frame >> 6);  							if (!spriteData) {  								debug(9,"Missing file %d",spriteComp->frame >> 6);  								spriteComp->status = 0; @@ -568,17 +574,17 @@ void SkyScreen::doSprites(uint8 layer) {  		idNum = SkyLogic::_scriptVariables[drawListNum];  		drawListNum++; -		drawList = (uint16 *)SkyState::fetchCompact(idNum); +		drawList = (uint16 *)SkyEngine::fetchCompact(idNum);  		while(drawList[0]) {  			// new_draw_list:  			while ((drawList[0] != 0) && (drawList[0] != 0xFFFF)) {  				// back_loop:  				// not_new_list -				Compact *spriteData = SkyState::fetchCompact(drawList[0]); +				Compact *spriteData = SkyEngine::fetchCompact(drawList[0]);  				drawList++;  				if ((spriteData->status & (1 << layer)) &&   						(spriteData->screen == SkyLogic::_scriptVariables[SCREEN])) { -					uint8 *toBeDrawn = (uint8 *)SkyState::fetchItem(spriteData->frame >> 6); +					uint8 *toBeDrawn = (uint8 *)SkyEngine::fetchItem(spriteData->frame >> 6);  					if (!toBeDrawn) {  						debug(9, "Spritedata %d not loaded",spriteData->frame >> 6);  						spriteData->status = 0; @@ -591,7 +597,7 @@ void SkyScreen::doSprites(uint8 layer) {  				}  			}  			while (drawList[0] == 0xFFFF) -				drawList = (uint16 *)SkyState::fetchCompact(drawList[1]); +				drawList = (uint16 *)SkyEngine::fetchCompact(drawList[1]);  		}  	}  } @@ -702,7 +708,7 @@ void SkyScreen::vertMaskSub(uint16 *grid, uint32 gridOfs, uint8 *screenPtr, uint  			if (!(FROM_LE_16(grid[gridOfs]) & 0x8000)) {  				uint32 gridVal = FROM_LE_16(grid[gridOfs]) - 1;  				gridVal *= GRID_W * GRID_H; -				uint8 *dataSrc = (uint8 *)SkyState::fetchItem(SkyLogic::_scriptVariables[layerId]) + gridVal; +				uint8 *dataSrc = (uint8 *)SkyEngine::fetchItem(SkyLogic::_scriptVariables[layerId]) + gridVal;  				uint8 *dataTrg = screenPtr;  				for (uint32 grdCntY = 0; grdCntY < GRID_H; grdCntY++) {  					for (uint32 grdCntX = 0; grdCntX < GRID_W; grdCntX++) @@ -730,7 +736,7 @@ void SkyScreen::verticalMask(void) {  			uint32 nLayerCnt = layerCnt;  			while (SkyLogic::_scriptVariables[nLayerCnt + 3]) {  				uint16 *scrGrid; -				scrGrid = (uint16 *)SkyState::fetchItem(SkyLogic::_scriptVariables[layerCnt + 3]); +				scrGrid = (uint16 *)SkyEngine::fetchItem(SkyLogic::_scriptVariables[layerCnt + 3]);  				if (scrGrid[gridOfs]) {  					vertMaskSub(scrGrid, gridOfs, screenPtr, layerCnt);  					break; diff --git a/sky/screen.h b/sky/screen.h index 555cb0401d..c891267fde 100644 --- a/sky/screen.h +++ b/sky/screen.h @@ -23,13 +23,14 @@  #define SKYSCREEN_H  #include "stdafx.h" -#include <string.h> -#include "base/engine.h"  #include "common/scummsys.h" -#include "sky/disk.h"  #include "sky/skydefs.h" -#include "sky/sky.h" -#include "sky/logic.h" + +class OSystem; +class SkyDisk; +class SkyEngine; +struct Compact; +struct dataFileHeader;  #define SCROLL_JUMP		16  #define VGA_COLOURS		256 @@ -45,8 +46,6 @@ typedef struct {  	dataFileHeader *sprite;  } StSortList; -class SkyState; -  class SkyScreen {  public:  	SkyScreen(OSystem *pSystem, SkyDisk *pDisk); diff --git a/sky/sky.cpp b/sky/sky.cpp index 0b8b3acc41..8d7264f258 100644 --- a/sky/sky.cpp +++ b/sky/sky.cpp @@ -25,16 +25,27 @@  #include "base/plugins.h"  #include "common/file.h" +#include "common/timer.h" -#include "sky/sky.h" -#include "sky/skydefs.h" //game specific defines  #include "sky/compact.h" -#include "sky/logic.h" +#include "sky/control.h"  #include "sky/debug.h" +#include "sky/disk.h" +#include "sky/intro.h" +#include "sky/logic.h"  #include "sky/mouse.h" +#include "sky/music/adlibmusic.h" +#include "sky/music/gmmusic.h" +#include "sky/music/mt32music.h" +#include "sky/music/musicbase.h" +#include "sky/screen.h" +#include "sky/sky.h" +#include "sky/skydefs.h" +#include "sky/sound.h" +#include "sky/text.h" -#include <errno.h> -#include <time.h> +#include "sound/mididrv.h" +#include "sound/mixer.h"  extern uint16 _debugLevel; @@ -75,16 +86,16 @@ const TargetSettings *Engine_SKY_targetList() {  }  Engine *Engine_SKY_create(GameDetector *detector, OSystem *syst) { -	return new SkyState(detector, syst); +	return new SkyEngine(detector, syst);  }  REGISTER_PLUGIN("Beneath a Steel Sky", Engine_SKY_targetList, Engine_SKY_create); -void **SkyState::_itemList[300]; +void **SkyEngine::_itemList[300]; -SystemVars SkyState::_systemVars = {0, 0, 0, 0, 4316, 0, 0, false, false }; +SystemVars SkyEngine::_systemVars = {0, 0, 0, 0, 4316, 0, 0, false, false }; -SkyState::SkyState(GameDetector *detector, OSystem *syst) +SkyEngine::SkyEngine(GameDetector *detector, OSystem *syst)  	: Engine(detector, syst) {  	_game = detector->_game.id; @@ -105,7 +116,7 @@ SkyState::SkyState(GameDetector *detector, OSystem *syst)  	_system->init_size(320, 200);  } -SkyState::~SkyState() { +SkyEngine::~SkyEngine() {  	delete _skyLogic;  	delete _skySound; @@ -115,17 +126,17 @@ SkyState::~SkyState() {  	delete _skyScreen;  } -void SkyState::errorString(const char *buf1, char *buf2) { +void SkyEngine::errorString(const char *buf1, char *buf2) {  	strcpy(buf2, buf1);  } -void SkyState::initVirgin() { +void SkyEngine::initVirgin() {  	_skyScreen->setPalette(60111);  	_skyScreen->showScreen(60110);  } -uint8 SkyState::_languageTable[11] = { +uint8 SkyEngine::_languageTable[11] = {  	SKY_USA, // EN_USA  	SKY_GERMAN, // DE_DEU  	SKY_FRENCH, // FR_FRA @@ -139,7 +150,7 @@ uint8 SkyState::_languageTable[11] = {  	SKY_ENGLISH  // EN_GRB  }; -void SkyState::doCheat(uint8 num) { +void SkyEngine::doCheat(uint8 num) {  	switch(num) {  	case 1: warning("executed cheat: get jammer"); @@ -163,7 +174,7 @@ void SkyState::doCheat(uint8 num) {  	}  } -void SkyState::handleKey(void) { +void SkyEngine::handleKey(void) {  	if (_key_pressed == 63)  		_skyControl->doControlPanel(); @@ -184,7 +195,7 @@ void SkyState::handleKey(void) {  	_key_pressed = 0;  } -void SkyState::go() { +void SkyEngine::go() {  	if (!_dump_file)  		_dump_file = stdout; @@ -238,7 +249,7 @@ void SkyState::go() {  	}  } -void SkyState::initialise(void) { +void SkyEngine::initialise(void) {  	_skyDisk = new SkyDisk(_gameDataPath);  	_skySound = new SkySound(_mixer, _skyDisk, _detector->_sfx_volume); @@ -290,16 +301,16 @@ void SkyState::initialise(void) {  	else  		_systemVars.language = _languageTable[_detector->_language]; -	if (!_skyDisk->fileExists(60600 + SkyState::_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)) -			SkyState::_systemVars.language = SKY_ENGLISH; +			SkyEngine::_systemVars.language = SKY_ENGLISH;  		else if (_skyDisk->fileExists(60600 + SKY_USA * 8)) -			SkyState::_systemVars.language = SKY_USA; +			SkyEngine::_systemVars.language = SKY_USA;  		else  			for (uint8 cnt = SKY_ENGLISH; cnt <= SKY_SPANISH; cnt++)  				if (_skyDisk->fileExists(60600 + cnt * 8)) { -					SkyState::_systemVars.language = cnt; +					SkyEngine::_systemVars.language = cnt;  					break;  				}  	} @@ -316,7 +327,7 @@ void SkyState::initialise(void) {  	_skyMusic->setVolume(_detector->_music_volume >> 1);  } -void SkyState::initItemList() { +void SkyEngine::initItemList() {  	//See List.asm for (cryptic) item # descriptions @@ -338,14 +349,14 @@ void SkyState::initItemList() {  	}  } -void SkyState::loadBase0(void) { +void SkyEngine::loadBase0(void) {  	_skyLogic->fnEnterSection(0, 0, 0);  	_skyMusic->startMusic(2);  	_systemVars.currentMusic = 2;  } -void SkyState::loadFixedItems(void) { +void SkyEngine::loadFixedItems(void) {  	if (!isDemo())  		_itemList[36] = (void **)_skyDisk->loadFile(36, NULL); @@ -369,22 +380,22 @@ void SkyState::loadFixedItems(void) {  } -void **SkyState::fetchItem(uint32 num) { +void **SkyEngine::fetchItem(uint32 num) {  	return _itemList[num];  } -void SkyState::timerHandler(void *refCon) { +void SkyEngine::timerHandler(void *refCon) { -	((SkyState *)refCon)->gotTimerTick(); +	((SkyEngine *)refCon)->gotTimerTick();  } -void SkyState::gotTimerTick(void) { +void SkyEngine::gotTimerTick(void) {  	_skyScreen->handleTimer();  } -Compact *SkyState::fetchCompact(uint32 a) { +Compact *SkyEngine::fetchCompact(uint32 a) {  	SkyDebug::fetchCompact(a);  	uint32 sectionNum = (a & 0xf000) >> 12;  	uint32 compactNum = (a & 0x0fff); @@ -392,7 +403,7 @@ Compact *SkyState::fetchCompact(uint32 a) {  	return (Compact *)(_itemList[119 + sectionNum][compactNum]);  } -void SkyState::delay(uint amount) { //copied and mutilated from Simon.cpp +void SkyEngine::delay(uint amount) { //copied and mutilated from Simon.cpp  	OSystem::Event event; @@ -438,7 +449,7 @@ void SkyState::delay(uint amount) { //copied and mutilated from Simon.cpp  				_skyMouse->buttonPressed(1);  				break;  			case OSystem::EVENT_QUIT: -				if (!SkyState::_systemVars.quitting) +				if (!SkyEngine::_systemVars.quitting)  					_skyControl->showGameQuitMsg(); // will call _system->quit()  				break;  			default: @@ -462,7 +473,7 @@ void SkyState::delay(uint amount) { //copied and mutilated from Simon.cpp  	} while (cur < start + amount);  } -bool SkyState::isDemo(void) { +bool SkyEngine::isDemo(void) {  	switch (_systemVars.gameVersion) {  	case 109: // pc gamer demo  	case 267: // floppy demo @@ -480,7 +491,7 @@ bool SkyState::isDemo(void) {  	}  } -bool SkyState::isCDVersion(void) { +bool SkyEngine::isCDVersion(void) {  	switch (_systemVars.gameVersion) {  	case 109: @@ -22,24 +22,8 @@  #ifndef SKYMAIN_H  #define SKYMAIN_H -#include <stdio.h> +#include "stdafx.h"  #include "base/engine.h" -#include "common/util.h" -#include "common/timer.h" -#include "sound/mixer.h" -#include "sky/sound.h" -#include "sky/text.h" -#include "sky/disk.h" -#include "sky/struc.h" -#include "sky/screen.h" -#include "sky/music/musicbase.h" -#include "sky/music/adlibmusic.h" -#include "sky/music/gmmusic.h" -#include "sky/music/mt32music.h" -#include "sky/mouse.h" -#include "sky/control.h" -#include "sky/intro.h" -#include "common/config-file.h"  struct SystemVars {  	uint32 systemFlags; @@ -53,12 +37,18 @@ struct SystemVars {  	bool quitting;  }; +struct Compact; +class SkySound; +class SkyDisk; +class SkyText;  class SkyLogic; +class SkyMouse;  class SkyScreen;  class SkyControl; +class SkyMusicBase;  class SkyIntro; -class SkyState : public Engine { +class SkyEngine : public Engine {  	void errorString(const char *buf_input, char *buf_output);  protected:  	byte _game; @@ -71,8 +61,6 @@ protected:  	int _numScreenUpdates; -	Timer *_timer; -  	FILE *_dump_file;  	int _number_of_savegames; @@ -92,8 +80,8 @@ protected:  	GameDetector *_detector; // necessary for music  public: -	SkyState(GameDetector *detector, OSystem *syst); -	virtual ~SkyState(); +	SkyEngine(GameDetector *detector, OSystem *syst); +	virtual ~SkyEngine();  	static bool isDemo(void);  	static bool isCDVersion(void); diff --git a/sky/skydefs.h b/sky/skydefs.h index 369ce317f8..2cb382b20d 100644 --- a/sky/skydefs.h +++ b/sky/skydefs.h @@ -22,7 +22,7 @@  #ifndef SKYDEFS_H  #define SKYDEFS_H -#include "struc.h" +#include "stdafx.h"  //This file is incomplete, several flags still missing. diff --git a/sky/sound.cpp b/sky/sound.cpp index 671bd720fd..e3ff675bee 100644 --- a/sky/sound.cpp +++ b/sky/sound.cpp @@ -20,9 +20,12 @@   */  #include "stdafx.h" +#include "sky/disk.h" +#include "sky/logic.h" +#include "sky/sky.h" +#include "sky/skydefs.h"  #include "sky/sound.h"  #include "sky/struc.h" -#include "sky/logic.h"  #define SOUND_FILE_BASE 60203  #define MAX_FX_NUMBER 393 @@ -1065,7 +1068,7 @@ void SkySound::loadSection(uint8 pSection) {  	if (_soundData) free(_soundData);  	_soundData = _skyDisk->loadFile(pSection * 4 + SOUND_FILE_BASE, NULL);  	uint16 asmOfs; -	if (SkyState::_systemVars.gameVersion == 109) { +	if (SkyEngine::_systemVars.gameVersion == 109) {  		if (pSection == 0)  			asmOfs = 0x78;  		else @@ -1085,7 +1088,7 @@ void SkySound::loadSection(uint8 pSection) {  	_sampleRates = _soundData + sRateTabOfs;  	_sfxInfo = _soundData + _sfxBaseOfs;  	// if we just restored a savegame, the sfxqueue holds the sound we need to restart -	if (!(SkyState::_systemVars.systemFlags & SF_GAME_RESTORED)) +	if (!(SkyEngine::_systemVars.systemFlags & SF_GAME_RESTORED))  		for (uint8 cnt = 0; cnt < 4; cnt++)  			_sfxQueue[cnt].count = 0;  } @@ -1137,7 +1140,7 @@ void SkySound::playSound(uint16 sound, uint16 volume, uint8 channel) {  void SkySound::fnStartFx(uint32 sound, uint8 channel) {  	_saveSounds[channel] = 0xFFFF; -	if (sound < 256 || sound > MAX_FX_NUMBER || (SkyState::_systemVars.systemFlags & SF_FX_OFF)) +	if (sound < 256 || sound > MAX_FX_NUMBER || (SkyEngine::_systemVars.systemFlags & SF_FX_OFF))  		return;  	uint8 screen = (uint8)(SkyLogic::_scriptVariables[SCREEN] & 0xff); @@ -1161,9 +1164,9 @@ void SkySound::fnStartFx(uint32 sound, uint8 channel) {  	uint8 volume = _mainSfxVolume; // start with standard vol -	if (SkyState::_systemVars.systemFlags & SF_SBLASTER) +	if (SkyEngine::_systemVars.systemFlags & SF_SBLASTER)  		volume = roomList[i].adlibVolume; -	else if (SkyState::_systemVars.systemFlags & SF_ROLAND) +	else if (SkyEngine::_systemVars.systemFlags & SF_ROLAND)  	 	volume = roomList[i].rolandVolume;  	volume = (volume * _mainSfxVolume) >> 8; @@ -1229,7 +1232,7 @@ void SkySound::stopSpeech(void) {  bool SkySound::startSpeech(uint16 textNum) { -	if (!(SkyState::_systemVars.systemFlags & SF_ALLOW_SPEECH)) +	if (!(SkyEngine::_systemVars.systemFlags & SF_ALLOW_SPEECH))  		return false;  	uint16 speechFileNum = _speechConvertTable[textNum >> 12] + (textNum & 0xFFF); diff --git a/sky/sound.h b/sky/sound.h index 084726dd97..298ba1ef0b 100644 --- a/sky/sound.h +++ b/sky/sound.h @@ -22,9 +22,11 @@  #ifndef SKYSOUND_H  #define SKYSOUND_H +#include "stdafx.h" +#include "common/scummsys.h"  #include "sound/mixer.h" -#include "sky/disk.h" -#include "base/engine.h" + +class SkyDisk;  enum {  	SOUND_CH0    = 0, diff --git a/sky/text.cpp b/sky/text.cpp index cf81edb7aa..a05c730f96 100644 --- a/sky/text.cpp +++ b/sky/text.cpp @@ -19,12 +19,12 @@   *   */ -#include "stdafx.h" -#include "common/scummsys.h" -#include "sky/skydefs.h" -#include "sky/sky.h" -#include "sky/text.h" +#include "sky/disk.h"  #include "sky/logic.h" +#include "sky/text.h" +#include "sky/sky.h" +#include "sky/skydefs.h" +#include "sky/struc.h"  #define FIRST_TEXT_SEC	77  #define	FIRST_TEXT_BUFFER	274 @@ -45,7 +45,7 @@ SkyText::SkyText(SkyDisk *skyDisk) {  	fnSetFont(0); -	if (!SkyState::isDemo()) { +	if (!SkyEngine::isDemo()) {  		_controlCharacterSet.addr = _skyDisk->loadFile(60520, NULL);  		_controlCharacterSet.charHeight = 12;  		_controlCharacterSet.charSpacing = 0; @@ -60,7 +60,7 @@ SkyText::SkyText(SkyDisk *skyDisk) {  		_linkCharacterSet.addr = NULL;  	} -	if (SkyState::isCDVersion()) { +	if (SkyEngine::isCDVersion()) {  		_preAfterTableArea = _skyDisk->loadFile(60522, NULL);  	} else _preAfterTableArea = NULL;  } @@ -96,7 +96,7 @@ void SkyText::patchLINCCharset() {  	// the width for every character by one, except for space which needs  	// to be one pixel wider than before. -	if (SkyState::_systemVars.gameVersion == 288) { +	if (SkyEngine::_systemVars.gameVersion == 288) {  		for (int i = 1; i < CHAR_SET_HEADER; i++)  			charSetPtr[i]--;  		charSetPtr[0]++; @@ -204,7 +204,7 @@ void SkyText::patchLINCCharset() {  	patchChar(charSetPtr, 5, charHeight, 93, U_umlaut);  	patchChar(charSetPtr, 5, charHeight, 74, normal_j);  	patchChar(charSetPtr, 6, charHeight, 17, normal_1); -	if (SkyState::_systemVars.gameVersion <= 303) { +	if (SkyEngine::_systemVars.gameVersion <= 303) {  		patchChar(charSetPtr, 5, charHeight, 10, a_umlaut);  	} else {  		patchChar(charSetPtr, 5, charHeight, 94, A_umlaut); @@ -244,10 +244,10 @@ void SkyText::fnSetFont(uint32 fontNr) {  void SkyText::fnTextModule(uint32 textInfoId, uint32 textNo) {  	fnSetFont(1); -	uint16* msgData = (uint16 *)SkyState::fetchCompact(textInfoId); +	uint16* msgData = (uint16 *)SkyEngine::fetchCompact(textInfoId);  	lowTextManager_t textId = lowTextManager(textNo, msgData[1], msgData[2], 209, false);  	SkyLogic::_scriptVariables[RESULT] = textId.compactNum; -	Compact *textCompact = SkyState::fetchCompact(textId.compactNum); +	Compact *textCompact = SkyEngine::fetchCompact(textId.compactNum);  	textCompact->xcood = msgData[3];  	textCompact->ycood = msgData[4];  	fnSetFont(0); @@ -260,13 +260,13 @@ void SkyText::getText(uint32 textNr) { //load text #"textNr" into textBuffer  	uint32 sectionNo = (textNr & 0x0F000) >> 12; -	if (SkyState::_itemList[FIRST_TEXT_SEC + sectionNo] == (void **)NULL) { //check if already loaded +	if (SkyEngine::_itemList[FIRST_TEXT_SEC + sectionNo] == (void **)NULL) { //check if already loaded  		debug(5, "Loading Text item(s) for Section %d", (sectionNo>>2)); -		uint32 fileNo = sectionNo + ((SkyState::_systemVars.language * NO_OF_TEXT_SECTIONS) + 60600); -		SkyState::_itemList[FIRST_TEXT_SEC + sectionNo] = (void **)_skyDisk->loadFile((uint16)fileNo, NULL); +		uint32 fileNo = sectionNo + ((SkyEngine::_systemVars.language * NO_OF_TEXT_SECTIONS) + 60600); +		SkyEngine::_itemList[FIRST_TEXT_SEC + sectionNo] = (void **)_skyDisk->loadFile((uint16)fileNo, NULL);  	} -	_textItemPtr = (uint8 *)SkyState::_itemList[FIRST_TEXT_SEC + sectionNo]; +	_textItemPtr = (uint8 *)SkyEngine::_itemList[FIRST_TEXT_SEC + sectionNo];  	uint32 offset = 0;   	uint32 nr32MsgBlocks = (textNr & 0x0fe0); @@ -328,7 +328,7 @@ void SkyText::getText(uint32 textNr) { //load text #"textNr" into textBuffer  void SkyText::fnPointerText(uint32 pointedId, uint16 mouseX, uint16 mouseY) { -	Compact *ptrComp = SkyState::fetchCompact(pointedId); +	Compact *ptrComp = SkyEngine::fetchCompact(pointedId);  	lowTextManager_t text = lowTextManager(ptrComp->cursorText, TEXT_MOUSE_WIDTH, L_CURSOR, 242, false);  	SkyLogic::_scriptVariables[CURSOR_ID] = text.compactNum;  	if (SkyLogic::_scriptVariables[MENU]) { @@ -340,7 +340,7 @@ void SkyText::fnPointerText(uint32 pointedId, uint16 mouseX, uint16 mouseY) {  		if (mouseX < 150) _mouseOfsX = TOP_LEFT_X + 13;  		else _mouseOfsX = TOP_LEFT_X - 8 - _lowTextWidth;  	} -	Compact *textCompact = SkyState::fetchCompact(text.compactNum); +	Compact *textCompact = SkyEngine::fetchCompact(text.compactNum);  	logicCursor(textCompact, mouseX, mouseY);  } @@ -541,17 +541,17 @@ lowTextManager_t SkyText::lowTextManager(uint32 textNum, uint16 width, uint16 lo  	uint32 compactNum = FIRST_TEXT_COMPACT; -	Compact *cpt = SkyState::fetchCompact(compactNum); +	Compact *cpt = SkyEngine::fetchCompact(compactNum);  	while (cpt->status != 0) {   		compactNum++; -		cpt = SkyState::fetchCompact(compactNum); +		cpt = SkyEngine::fetchCompact(compactNum);  	}  	cpt->flag = (uint16)(compactNum - FIRST_TEXT_COMPACT) + FIRST_TEXT_BUFFER; -	byte *oldText = (byte *)SkyState::_itemList[cpt->flag]; -	SkyState::_itemList[cpt->flag] = (void **)textData;  +	byte *oldText = (byte *)SkyEngine::_itemList[cpt->flag]; +	SkyEngine::_itemList[cpt->flag] = (void **)textData;   	if (oldText != NULL)  		free (oldText); @@ -576,7 +576,7 @@ void SkyText::changeTextSpriteColour(uint8 *sprData, uint8 newCol) {  }  void SkyText::initHuffTree() { -	switch (SkyState::_systemVars.gameVersion) { +	switch (SkyEngine::_systemVars.gameVersion) {  	case 109:  		_huffTree = _huffTree_00109;  		break; @@ -605,7 +605,7 @@ void SkyText::initHuffTree() {  		_huffTree = _huffTree_00372;  		break;  	default: -		error("Unknown game version %d", SkyState::_systemVars.gameVersion); +		error("Unknown game version %d", SkyEngine::_systemVars.gameVersion);  	}  } @@ -624,8 +624,8 @@ char SkyText::getTextChar() {  bool SkyText::patchMessage(uint32 textNum) { -	uint16 patchIdx = _patchLangIdx[SkyState::_systemVars.language]; -	uint16 patchNum = _patchLangNum[SkyState::_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); diff --git a/sky/text.h b/sky/text.h index bd9e4f4fef..d659711a18 100644 --- a/sky/text.h +++ b/sky/text.h @@ -22,8 +22,11 @@  #ifndef SKYTEXT_H  #define SKYTEXT_H -#include "sky/disk.h" -#include "sky/struc.h" +#include "stdafx.h" +#include "common/scummsys.h" + +struct Compact; +class SkyDisk;  struct HuffTree {  	unsigned char lChild; | 
