[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