diff options
| -rw-r--r-- | backends/sdl/graphics.cpp | 2 | ||||
| -rw-r--r-- | base/engine.cpp | 25 | ||||
| -rw-r--r-- | base/engine.h | 5 | ||||
| -rw-r--r-- | base/main.cpp | 31 | ||||
| -rw-r--r-- | kyra/kyra.cpp | 8 | ||||
| -rw-r--r-- | kyra/kyra.h | 2 | ||||
| -rw-r--r-- | queen/queen.cpp | 7 | ||||
| -rw-r--r-- | queen/queen.h | 2 | ||||
| -rw-r--r-- | saga/gfx.cpp | 10 | ||||
| -rw-r--r-- | saga/gfx.h | 2 | ||||
| -rw-r--r-- | saga/saga.cpp | 4 | ||||
| -rw-r--r-- | saga/saga.h | 2 | ||||
| -rw-r--r-- | scumm/scumm.cpp | 7 | ||||
| -rw-r--r-- | scumm/scumm.h | 2 | ||||
| -rw-r--r-- | simon/simon.cpp | 7 | ||||
| -rw-r--r-- | simon/simon.h | 2 | ||||
| -rw-r--r-- | sky/sky.cpp | 7 | ||||
| -rw-r--r-- | sky/sky.h | 2 | ||||
| -rw-r--r-- | sword1/sword1.cpp | 26 | ||||
| -rw-r--r-- | sword1/sword1.h | 2 | ||||
| -rw-r--r-- | sword2/sword2.cpp | 7 | ||||
| -rw-r--r-- | sword2/sword2.h | 2 | 
22 files changed, 93 insertions, 71 deletions
diff --git a/backends/sdl/graphics.cpp b/backends/sdl/graphics.cpp index ea16da6694..81bd672c9a 100644 --- a/backends/sdl/graphics.cpp +++ b/backends/sdl/graphics.cpp @@ -1062,8 +1062,6 @@ void OSystem_SDL::toggleMouseGrab() {  }  void OSystem_SDL::draw_mouse() { -	assert (_transactionMode == kTransactionNone); -  	if (_mouseDrawn || !_mouseVisible)  		return; diff --git a/base/engine.cpp b/base/engine.cpp index 252b9d752b..7cdbc7c663 100644 --- a/base/engine.cpp +++ b/base/engine.cpp @@ -23,10 +23,10 @@  #include <malloc.h>  #endif  #include "base/engine.h" -#include "base/gameDetector.h"  #include "common/config-manager.h"  #include "common/file.h"  #include "common/timer.h" +#include "common/scaler.h"	// For GFX_NORMAL  #include "sound/mixer.h"  /* FIXME - BIG HACK for MidiEmu */ @@ -58,6 +58,29 @@ Engine::~Engine() {  	g_engine = NULL;  } +void Engine::initCommonGFX(GameDetector &detector) { +	const bool useDefaultGraphicsMode = +		!ConfMan.hasKey("gfx_mode", detector._targetName) || +		!scumm_stricmp(ConfMan.get("gfx_mode", detector._targetName).c_str(), "normal") || +		!scumm_stricmp(ConfMan.get("gfx_mode", detector._targetName).c_str(), "default"); + +	// See if the game should default to 1x scaler +	if (useDefaultGraphicsMode && (detector._game.features & GF_DEFAULT_TO_1X_SCALER)) { +		_system->setGraphicsMode(GFX_NORMAL); +	} else { +		// Override global scaler with any game-specific define +		if (ConfMan.hasKey("gfx_mode")) { +			_system->setGraphicsMode(ConfMan.get("gfx_mode").c_str()); +		} +	} +	 +	// (De)activate aspect-ratio correction as determined by the config settings +	_system->setFeatureState(OSystem::kFeatureAspectRatioCorrection, ConfMan.getBool("aspect_ratio")); +		 +	// (De)activate fullscreen mode as determined by the config settings  +	_system->setFeatureState(OSystem::kFeatureFullscreenMode, ConfMan.getBool("fullscreen")); +} +  const char *Engine::getSavePath() const {  #if defined(__PALM_OS__) diff --git a/base/engine.h b/base/engine.h index 3774c52ac8..47bf5d5b02 100644 --- a/base/engine.h +++ b/base/engine.h @@ -24,6 +24,7 @@  #include "common/scummsys.h"  #include "common/str.h"  #include "common/system.h" +#include "base/gameDetector.h"  class SoundMixer;  class Timer; @@ -46,7 +47,7 @@ public:  	 * Init the engine.  	 * @return 0 for success, else an error code.  	 */ -	virtual int init() = 0; +	virtual int init(GameDetector &detector) = 0;  	/**  	 * Start the main engine loop. @@ -64,6 +65,8 @@ public:  	/** Specific for each engine: prepare error string. */  	virtual void errorString(const char *buf_input, char *buf_output) = 0; + +	void initCommonGFX(GameDetector &detector);  };  extern Engine *g_engine; diff --git a/base/main.cpp b/base/main.cpp index 695df68546..3abb77bc94 100644 --- a/base/main.cpp +++ b/base/main.cpp @@ -35,7 +35,6 @@  #include "base/version.h"  #include "common/config-manager.h"  #include "common/file.h" -#include "common/scaler.h"	// For GFX_NORMAL  #include "common/timer.h"  #include "gui/newgui.h"  #include "gui/launcher.h" @@ -247,11 +246,6 @@ static int runGame(GameDetector &detector, OSystem *system) {  		system->setWindowCaption(caption.c_str());  	} -	const bool useDefaultGraphicsMode = -		!ConfMan.hasKey("gfx_mode", detector._targetName) || -		!scumm_stricmp(ConfMan.get("gfx_mode", detector._targetName).c_str(), "normal") || -		!scumm_stricmp(ConfMan.get("gfx_mode", detector._targetName).c_str(), "default"); -  	// Create the game engine  	Engine *engine = detector.createEngine(system);  	assert(engine); @@ -265,29 +259,8 @@ static int runGame(GameDetector &detector, OSystem *system) {  	int result; -	// Start GFX transaction -	system->beginGFXTransaction(); - -		// See if the game should default to 1x scaler -		if (useDefaultGraphicsMode && (detector._game.features & GF_DEFAULT_TO_1X_SCALER)) { -			system->setGraphicsMode(GFX_NORMAL); -		} else { -			// Override global scaler with any game-specific define -			if (ConfMan.hasKey("gfx_mode")) { -				system->setGraphicsMode(ConfMan.get("gfx_mode").c_str()); -			} -		} -	 -		// (De)activate aspect-ratio correction as determined by the config settings -		system->setFeatureState(OSystem::kFeatureAspectRatioCorrection, ConfMan.getBool("aspect_ratio")); -		 -		// (De)activate fullscreen mode as determined by the config settings  -		system->setFeatureState(OSystem::kFeatureFullscreenMode, ConfMan.getBool("fullscreen")); -		 -		// Init the engine (this might change the screen parameters -		result = engine->init(); - -	system->endGFXTransaction(); +	// Init the engine (this might change the screen parameters +	result = engine->init(detector);  	// Run the game engine if the initialization was successful.  	if (result == 0) { diff --git a/kyra/kyra.cpp b/kyra/kyra.cpp index 32f2dea384..27012257cb 100644 --- a/kyra/kyra.cpp +++ b/kyra/kyra.cpp @@ -123,10 +123,14 @@ KyraEngine::KyraEngine(GameDetector *detector, OSystem *syst)  	}  } -int KyraEngine::init() { +int KyraEngine::init(GameDetector &detector) {  	// Initialize backen -	_system->initSize(320, 200); +	_system->beginGFXTransaction(); +		initCommonGFX(detector); +		_system->initSize(320, 200); +	_system->endGFXTransaction(); +  	_screen = new uint8[320*200];  	memset(_screen, 0, sizeof(uint8) * 320 * 200); diff --git a/kyra/kyra.h b/kyra/kyra.h index e269ad71d2..e299ba8026 100644 --- a/kyra/kyra.h +++ b/kyra/kyra.h @@ -68,7 +68,7 @@ public:  protected:  	int go(); -	int init(); +	int init(GameDetector &detector);  	void shutdown();  	Resourcemanager* _resMgr;  	MusicPlayer* _midiDriver; diff --git a/queen/queen.cpp b/queen/queen.cpp index dffdf208a4..88b0463452 100644 --- a/queen/queen.cpp +++ b/queen/queen.cpp @@ -316,8 +316,11 @@ int QueenEngine::go() {  	return 0;  } -int QueenEngine::init() { -	_system->initSize(GAME_SCREEN_WIDTH, GAME_SCREEN_HEIGHT); +int QueenEngine::init(GameDetector &detector) { +	_system->beginGFXTransaction(); +		initCommonGFX(detector); +		_system->initSize(GAME_SCREEN_WIDTH, GAME_SCREEN_HEIGHT); +	_system->endGFXTransaction();  	_bam = new BamScene(this);  	_resource = new Resource(); diff --git a/queen/queen.h b/queen/queen.h index ceb895d2ce..6ef5d463c6 100644 --- a/queen/queen.h +++ b/queen/queen.h @@ -124,7 +124,7 @@ protected:  	void errorString(const char *buf_input, char *buf_output);  	int go(); -	int init(); +	int init(GameDetector &detector);  	int _talkSpeed; diff --git a/saga/gfx.cpp b/saga/gfx.cpp index 7a7a5397c6..436ddfdb2e 100644 --- a/saga/gfx.cpp +++ b/saga/gfx.cpp @@ -35,11 +35,13 @@  namespace Saga { -Gfx::Gfx(OSystem *system, int width, int height) { +Gfx::Gfx(OSystem *system, int width, int height, GameDetector &detector) : _system(system) {  	SURFACE back_buf; -	_system = system; -	_system->initSize(width, height); +	_system->beginGFXTransaction(); +		_vm->initCommonGFX(detector); +		_system->initSize(width, height); +	_system->endGFXTransaction();  	debug(0, "Init screen %dx%d", width, height);  	// Convert surface data to R surface data @@ -61,7 +63,7 @@ Gfx::Gfx(OSystem *system, int width, int height) {  	// For now, always show the mouse cursor.  	setCursor(1); -	g_system->showMouse(true); +	_system->showMouse(true);  }  /* diff --git a/saga/gfx.h b/saga/gfx.h index 8bccae32c8..7188d7f134 100644 --- a/saga/gfx.h +++ b/saga/gfx.h @@ -98,7 +98,7 @@ bool hitTestPoly(const Point *points, unsigned int npoints, const Point& test_po  class Gfx {  public: -	Gfx(OSystem *system, int width, int height); +	Gfx(OSystem *system, int width, int height, GameDetector &detector);  	SURFACE *getBackBuffer();  	int getWhite();  	int getBlack(); diff --git a/saga/saga.cpp b/saga/saga.cpp index 236ed78ae2..b71c1313d1 100644 --- a/saga/saga.cpp +++ b/saga/saga.cpp @@ -124,7 +124,7 @@ void SagaEngine::errorString(const char *buf1, char *buf2) {  	strcpy(buf2, buf1);  } -int SagaEngine::init() { +int SagaEngine::init(GameDetector &detector) {  	_soundEnabled = 1;  	_musicEnabled = 1; @@ -183,7 +183,7 @@ int SagaEngine::init() {  	// Initialize graphics  	GAME_DISPLAYINFO disp_info;  	GAME_GetDisplayInfo(&disp_info); -	_gfx = new Gfx(_system, disp_info.logical_w, disp_info.logical_h); +	_gfx = new Gfx(_system, disp_info.logical_w, disp_info.logical_h, detector);  	// Graphics should be initialized before music  	int midiDriver = GameDetector::detectMusicDriver(MDT_NATIVE | MDT_ADLIB | MDT_PREFER_NATIVE); diff --git a/saga/saga.h b/saga/saga.h index e140839740..7a7abe765b 100644 --- a/saga/saga.h +++ b/saga/saga.h @@ -89,7 +89,7 @@ class SagaEngine : public Engine {  protected:  	int go(); -	int init(); +	int init(GameDetector &detector);  public:  	SagaEngine(GameDetector * detector, OSystem * syst); diff --git a/scumm/scumm.cpp b/scumm/scumm.cpp index bdb91a1d99..864d261207 100644 --- a/scumm/scumm.cpp +++ b/scumm/scumm.cpp @@ -976,10 +976,13 @@ ScummEngine_v70he::ScummEngine_v70he(GameDetector *detector, OSystem *syst, cons  #pragma mark --- Initialization ---  #pragma mark - -int ScummEngine::init() { +int ScummEngine::init(GameDetector &detector) {  	// Initialize backend -	_system->initSize(_screenWidth, _screenHeight); +	_system->beginGFXTransaction(); +		initCommonGFX(detector); +		_system->initSize(_screenWidth, _screenHeight); +	_system->endGFXTransaction();  	int cd_num = ConfMan.getInt("cdrom");  	if (cd_num >= 0 && (_features & GF_AUDIOTRACKS)) diff --git a/scumm/scumm.h b/scumm/scumm.h index 43b7728958..25aeaac501 100644 --- a/scumm/scumm.h +++ b/scumm/scumm.h @@ -388,7 +388,7 @@ public:  	int go();  	// Init functions -	int init(); +	int init(GameDetector &detector);  	virtual void setupScummVars();  	void initScummVars(); diff --git a/simon/simon.cpp b/simon/simon.cpp index 44332bc3ba..193619f937 100644 --- a/simon/simon.cpp +++ b/simon/simon.cpp @@ -661,14 +661,17 @@ SimonEngine::SimonEngine(GameDetector *detector, OSystem *syst)  		"\x5\x5\x4\x6\x5\x3\x4\x5\x6\x3\x5\x5\x4\x6\x5\x3\x4\x6\x5\x6\x6\x6\x5\x5\x5\x6\x5\x6\x6\x6\x6\x6", 32);  } -int SimonEngine::init() { +int SimonEngine::init(GameDetector &detector) {  	// Setup mixer  	if (!_mixer->isReady())  		warning("Sound initialization failed. "  						"Features of the game that depend on sound synchronization will most likely break");  	set_volume(ConfMan.getInt("sfx_volume")); -	_system->initSize(320, 200); +	_system->beginGFXTransaction(); +		initCommonGFX(detector); +		_system->initSize(320, 200); +	_system->endGFXTransaction();  	// Setup midi driver  	MidiDriver *driver = 0; diff --git a/simon/simon.h b/simon/simon.h index b0c72491c1..b27781abe2 100644 --- a/simon/simon.h +++ b/simon/simon.h @@ -740,7 +740,7 @@ protected:  	void resfile_read(void *dst, uint32 offs, uint32 size); -	int init(); +	int init(GameDetector &detector);  	int go();  	void openGameFile(); diff --git a/sky/sky.cpp b/sky/sky.cpp index 17a2747191..bde61fcd0d 100644 --- a/sky/sky.cpp +++ b/sky/sky.cpp @@ -245,8 +245,11 @@ int SkyEngine::go() {  	return 0;  } -int SkyEngine::init() { -	_system->initSize(320, 200); +int SkyEngine::init(GameDetector &detector) { +	_system->beginGFXTransaction(); +		initCommonGFX(detector); +		_system->initSize(320, 200); +	_system->endGFXTransaction();  	if (!_mixer->isReady())  		warning("Sound initialisation failed"); @@ -100,7 +100,7 @@ protected:  	uint32 _lastSaveTime;  	Text *getText(); -	int init(); +	int init(GameDetector &detector);  	void initItemList();  	void initVirgin(); diff --git a/sword1/sword1.cpp b/sword1/sword1.cpp index 4033ec8704..fa8d4d2258 100644 --- a/sword1/sword1.cpp +++ b/sword1/sword1.cpp @@ -109,6 +109,16 @@ SwordEngine::SwordEngine(GameDetector *detector, OSystem *syst)  	if (!_mixer->isReady())  		warning("Sound initialization failed"); + +	// Add default file directories +	File::addDefaultDirectory(_gameDataPath + "CLUSTERS/"); +	File::addDefaultDirectory(_gameDataPath + "MUSIC/"); +	File::addDefaultDirectory(_gameDataPath + "SPEECH/"); +	File::addDefaultDirectory(_gameDataPath + "VIDEO/"); +	File::addDefaultDirectory(_gameDataPath + "clusters/"); +	File::addDefaultDirectory(_gameDataPath + "music/"); +	File::addDefaultDirectory(_gameDataPath + "speech/"); +	File::addDefaultDirectory(_gameDataPath + "video/");  }  SwordEngine::~SwordEngine() { @@ -123,19 +133,13 @@ SwordEngine::~SwordEngine() {  	delete _resMan;  } -int SwordEngine::init() { +int SwordEngine::init(GameDetector &detector) { -	// Add default file directories -	File::addDefaultDirectory(_gameDataPath + "CLUSTERS/"); -	File::addDefaultDirectory(_gameDataPath + "MUSIC/"); -	File::addDefaultDirectory(_gameDataPath + "SPEECH/"); -	File::addDefaultDirectory(_gameDataPath + "VIDEO/"); -	File::addDefaultDirectory(_gameDataPath + "clusters/"); -	File::addDefaultDirectory(_gameDataPath + "music/"); -	File::addDefaultDirectory(_gameDataPath + "speech/"); -	File::addDefaultDirectory(_gameDataPath + "video/"); +	_system->beginGFXTransaction(); +		initCommonGFX(detector); +		_system->initSize(640, 480); +	_system->endGFXTransaction(); -	_system->initSize(640, 480);  	debug(5, "Starting resource manager");  	_resMan = new ResMan("swordres.rif");  	debug(5, "Starting object manager"); diff --git a/sword1/sword1.h b/sword1/sword1.h index 835e4701e3..52db32e867 100644 --- a/sword1/sword1.h +++ b/sword1/sword1.h @@ -76,7 +76,7 @@ public:  	uint32 _features;  protected:  	int go(); -	int init(); +	int init(GameDetector &detector);  private:  	void delay(uint amount); diff --git a/sword2/sword2.cpp b/sword2/sword2.cpp index 05ba3bf340..ffdb700d4a 100644 --- a/sword2/sword2.cpp +++ b/sword2/sword2.cpp @@ -223,11 +223,14 @@ void Sword2Engine::setupPersistentResources() {  	_resman->openResource(CUR_PLAYER_ID);  } -int Sword2Engine::init() { +int Sword2Engine::init(GameDetector &detector) {  	// Get some falling RAM and put it in your pocket, never let it slip  	// away -	_graphics = new Graphics(this, 640, 480); +	_system->beginGFXTransaction(); +		initCommonGFX(detector); +		_graphics = new Graphics(this, 640, 480); +	_system->endGFXTransaction();  	// Create the debugger as early as possible (but not before the  	// graphics object!) so that errors can be displayed in it. In diff --git a/sword2/sword2.h b/sword2/sword2.h index e775195dd4..84a3084c73 100644 --- a/sword2/sword2.h +++ b/sword2/sword2.h @@ -171,7 +171,7 @@ public:  	Sword2Engine(GameDetector *detector, OSystem *syst);  	~Sword2Engine();  	int go(); -	int init(); +	int init(GameDetector &detector);  	void setupPersistentResources();  | 
