[Scummvm-cvs-logs] SF.net SVN: scummvm: [22308] scummvm/trunk/engines/kyra

lordhoto at users.sourceforge.net lordhoto at users.sourceforge.net
Wed May 3 06:41:03 CEST 2006


Revision: 22308
Author:   lordhoto
Date:     2006-05-03 06:40:21 -0700 (Wed, 03 May 2006)
ViewCVS:  http://svn.sourceforge.net/scummvm/?rev=22308&view=rev

Log Message:
-----------
- modifies loadBitmap not to crash if a image isn't found
- starts to clean up the engine initalisation code

Modified Paths:
--------------
    scummvm/trunk/engines/kyra/kyra.cpp
    scummvm/trunk/engines/kyra/kyra.h
    scummvm/trunk/engines/kyra/resource.cpp
    scummvm/trunk/engines/kyra/screen.cpp
    scummvm/trunk/engines/kyra/screen.h
    scummvm/trunk/engines/kyra/staticres.cpp
Modified: scummvm/trunk/engines/kyra/kyra.cpp
===================================================================
--- scummvm/trunk/engines/kyra/kyra.cpp	2006-05-03 13:19:21 UTC (rev 22307)
+++ scummvm/trunk/engines/kyra/kyra.cpp	2006-05-03 13:40:21 UTC (rev 22308)
@@ -287,11 +287,7 @@
 	:KyraEngine(system) {
 }
 
-KyraEngine_v2::KyraEngine_v2(OSystem *system)
-	:KyraEngine(system) {
-}
-
-int KyraEngine::init() {
+int KyraEngine_v1::setupGameFlags() {
 	// Detect game features based on MD5. Again brutally ripped from Gobliins.
 	uint8 md5sum[16];
 	char md5str[32 + 1];
@@ -361,6 +357,18 @@
 		return -1;
 	}
 
+	return 0;
+}
+
+KyraEngine_v2::KyraEngine_v2(OSystem *system)
+	:KyraEngine(system) {
+}
+
+int KyraEngine::init() {
+	if (setupGameFlags()) {
+		return -1;
+	}
+
 	// Setup mixer
 	if (!_mixer->isReady()) {
 		warning("Sound initialization failed.");
@@ -382,13 +390,6 @@
 	Common::addSpecialDebugLevel(kDebugLevelSequence, "Sequence", "Sequence debug level");
 	Common::addSpecialDebugLevel(kDebugLevelMovie, "Movie", "Movie debug level");
 
-	_system->beginGFXTransaction();
-		initCommonGFX(false);
-		//for debug reasons (see Screen::updateScreen)
-		//_system->initSize(640, 200);
-		_system->initSize(320, 200);
-	_system->endGFXTransaction();
-
 	// for now we prefer Adlib over native MIDI
 	int midiDriver = MidiDriver::detectMusicDriver(MDT_MIDI | MDT_ADLIB/* | MDT_PREFER_MIDI*/);
 
@@ -432,6 +433,7 @@
 	assert(_res);
 	_screen = new Screen(this, _system);
 	assert(_screen);
+	assert(_screen->init());
 	_sprites = new Sprites(this, _system);
 	assert(_sprites);
 	_seq = new SeqPlayer(this, _system);
@@ -442,6 +444,7 @@
 	assert(*_animator);
 	_text = new TextDisplayer(_screen);
 	assert(_text);
+
 	_staticres = new StaticResource(this);
 	assert(_staticres);
 	assert(_staticres->init());

Modified: scummvm/trunk/engines/kyra/kyra.h
===================================================================
--- scummvm/trunk/engines/kyra/kyra.h	2006-05-03 13:19:21 UTC (rev 22307)
+++ scummvm/trunk/engines/kyra/kyra.h	2006-05-03 13:40:21 UTC (rev 22308)
@@ -247,6 +247,8 @@
 
 	KyraEngine(OSystem *system);
 	~KyraEngine();
+
+	virtual int setupGameFlags() = 0;
 	
 	void errorString(const char *buf_input, char *buf_output);
 
@@ -987,15 +989,19 @@
 };
 
 class KyraEngine_v1 : public KyraEngine {
-	public:
-		KyraEngine_v1(OSystem *system);
-		~KyraEngine_v1();
+public:
+	KyraEngine_v1(OSystem *system);
+	~KyraEngine_v1();
+
+	int setupGameFlags();
 };
 
 class KyraEngine_v2 : public KyraEngine {
-	public:
-		KyraEngine_v2(OSystem *system);
-		~KyraEngine_v2();
+public:
+	KyraEngine_v2(OSystem *system);
+	~KyraEngine_v2();
+
+	int setupGameFlags() { return 0; }
 	
 	int go();
 };

Modified: scummvm/trunk/engines/kyra/resource.cpp
===================================================================
--- scummvm/trunk/engines/kyra/resource.cpp	2006-05-03 13:19:21 UTC (rev 22307)
+++ scummvm/trunk/engines/kyra/resource.cpp	2006-05-03 13:40:21 UTC (rev 22308)
@@ -397,16 +397,24 @@
 	debugC(9, kDebugLevelMain, "KyraEngine::loadBitmap('%s', %d, %d, %p)", filename, tempPage, dstPage, (void *)palData);
 	uint32 fileSize;
 	uint8 *srcData = _res->fileData(filename, &fileSize);
-	assert(srcData);
+
+	if (!srcData) {
+		warning("coudln't load bitmap: '%s'", filename);
+		return;
+	}
+
 	uint8 compType = srcData[2];
 	uint32 imgSize = READ_LE_UINT32(srcData + 4);
 	uint16 palSize = READ_LE_UINT16(srcData + 8);
+
 	if (palData && palSize) {
 		debugC(9, kDebugLevelMain,"Loading a palette of size %i from %s", palSize, filename);
 		memcpy(palData, srcData + 10, palSize);		
 	}
+
 	uint8 *srcPtr = srcData + 10 + palSize;
 	uint8 *dstData = _screen->getPagePtr(dstPage);
+
 	switch (compType) {
 	case 0:
 		memcpy(dstData, srcPtr, imgSize);
@@ -421,7 +429,8 @@
 		error("Unhandled bitmap compression %d", compType);
 		break;
 	}
-	delete[] srcData;
+
+	delete [] srcData;
 }
 
 } // end of namespace Kyra

Modified: scummvm/trunk/engines/kyra/screen.cpp
===================================================================
--- scummvm/trunk/engines/kyra/screen.cpp	2006-05-03 13:19:21 UTC (rev 22307)
+++ scummvm/trunk/engines/kyra/screen.cpp	2006-05-03 13:40:21 UTC (rev 22308)
@@ -32,6 +32,44 @@
 
 Screen::Screen(KyraEngine *vm, OSystem *system)
 	: _system(system), _vm(vm) {
+}
+
+Screen::~Screen() {
+	for (int pageNum = 0; pageNum < SCREEN_PAGE_NUM; pageNum += 2) {
+		free(_pagePtrs[pageNum]);
+		_pagePtrs[pageNum] = _pagePtrs[pageNum + 1] = 0;
+	}
+	for (int f = 0; f < ARRAYSIZE(_fonts); ++f) {
+		delete[] _fonts[f].fontData;
+		_fonts[f].fontData = NULL;
+	}
+	free(_currentPalette);
+	free(_screenPalette);
+	free(_decodeShapeBuffer);
+	free(_animBlockPtr);
+	for (int i = 0; i < 3; ++i) {
+		free(_palettes[i]);
+	}
+	delete [] _bitBlitRects;
+	for (int i = 0; i < ARRAYSIZE(_saveLoadPage); ++i) {
+		delete [] _saveLoadPage[i];
+		_saveLoadPage[i] = 0;
+	}
+
+	free(_unkPtr1);
+	free(_unkPtr2);
+}
+
+bool Screen::init() {
+	debugC(9, kDebugLevelScreen, "Screen::init()");
+
+	_system->beginGFXTransaction();
+		_vm->initCommonGFX(false);
+		//for debug reasons (see Screen::updateScreen)
+		//_system->initSize(640, 200);
+		_system->initSize(320, 200);
+	_system->endGFXTransaction();
+
 	_curPage = 0;
 	for (int pageNum = 0; pageNum < SCREEN_PAGE_NUM; pageNum += 2) {
 		uint8 *pagePtr = (uint8 *)malloc(SCREEN_PAGE_SIZE);
@@ -78,32 +116,8 @@
 	memset(_unkPtr1, 0, getRectSize(1, 144));
 	_unkPtr2 = (uint8*)malloc(getRectSize(1, 144));
 	memset(_unkPtr2, 0, getRectSize(1, 144));
-}
 
-Screen::~Screen() {
-	for (int pageNum = 0; pageNum < SCREEN_PAGE_NUM; pageNum += 2) {
-		free(_pagePtrs[pageNum]);
-		_pagePtrs[pageNum] = _pagePtrs[pageNum + 1] = 0;
-	}
-	for (int f = 0; f < ARRAYSIZE(_fonts); ++f) {
-		delete[] _fonts[f].fontData;
-		_fonts[f].fontData = NULL;
-	}
-	free(_currentPalette);
-	free(_screenPalette);
-	free(_decodeShapeBuffer);
-	free(_animBlockPtr);
-	for (int i = 0; i < 3; ++i) {
-		free(_palettes[i]);
-	}
-	delete [] _bitBlitRects;
-	for (int i = 0; i < ARRAYSIZE(_saveLoadPage); ++i) {
-		delete [] _saveLoadPage[i];
-		_saveLoadPage[i] = 0;
-	}
-
-	free(_unkPtr1);
-	free(_unkPtr2);
+	return true;
 }
 
 void Screen::updateScreen() {

Modified: scummvm/trunk/engines/kyra/screen.h
===================================================================
--- scummvm/trunk/engines/kyra/screen.h	2006-05-03 13:19:21 UTC (rev 22307)
+++ scummvm/trunk/engines/kyra/screen.h	2006-05-03 13:40:21 UTC (rev 22308)
@@ -89,6 +89,8 @@
 	Screen(KyraEngine *vm, OSystem *system);
 	~Screen();
 
+	bool init();
+
 	void updateScreen();
 	uint8 *getPagePtr(int pageNum);
 	void clearPage(int pageNum);

Modified: scummvm/trunk/engines/kyra/staticres.cpp
===================================================================
--- scummvm/trunk/engines/kyra/staticres.cpp	2006-05-03 13:19:21 UTC (rev 22307)
+++ scummvm/trunk/engines/kyra/staticres.cpp	2006-05-03 13:40:21 UTC (rev 22308)
@@ -750,6 +750,8 @@
 }
 
 void KyraEngine::loadMainScreen(int page) {
+	_screen->clearPage(page);
+
 	if ((_features & GF_ENGLISH) && (_features & GF_TALKIE)) 
 		loadBitmap("MAIN_ENG.CPS", page, page, 0);
 	else if(_features & GF_FRENCH)
@@ -765,6 +767,7 @@
 	
 	uint8 *_pageSrc = _screen->getPagePtr(page);
 	uint8 *_pageDst = _screen->getPagePtr(0);
+
 	memcpy(_pageDst, _pageSrc, 320*200);
 }
 


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.





More information about the Scummvm-git-logs mailing list