diff options
author | Johannes Schickel | 2006-01-14 21:14:27 +0000 |
---|---|---|
committer | Johannes Schickel | 2006-01-14 21:14:27 +0000 |
commit | ff7a1c734f4ea32b330dfacf212b719f3b590955 (patch) | |
tree | 0d075a7c929ab085f317aee5d999d765c37ec989 | |
parent | a61e62db95d30c9886cf2e66e84f9e753c04f2d5 (diff) | |
download | scummvm-rg350-ff7a1c734f4ea32b330dfacf212b719f3b590955.tar.gz scummvm-rg350-ff7a1c734f4ea32b330dfacf212b719f3b590955.tar.bz2 scummvm-rg350-ff7a1c734f4ea32b330dfacf212b719f3b590955.zip |
Implemented "cmd_loadPageFromDisk" and "cmd_savePageToDisk".
svn-id: r20032
-rw-r--r-- | kyra/kyra.cpp | 2 | ||||
-rw-r--r-- | kyra/kyra.h | 1 | ||||
-rw-r--r-- | kyra/screen.cpp | 21 | ||||
-rw-r--r-- | kyra/screen.h | 4 | ||||
-rw-r--r-- | kyra/script_v1.cpp | 30 |
5 files changed, 39 insertions, 19 deletions
diff --git a/kyra/kyra.cpp b/kyra/kyra.cpp index 2c12ce07d8..ec85b2ec35 100644 --- a/kyra/kyra.cpp +++ b/kyra/kyra.cpp @@ -389,8 +389,6 @@ int KyraEngine::init(GameDetector &detector) { _lastProcessedItem = 0; _lastProcessedItemHeight = 16; - _hidPage = _screenPage = 0; - _unkScreenVar1 = 1; _unkScreenVar2 = 0; _unkScreenVar3 = 0; diff --git a/kyra/kyra.h b/kyra/kyra.h index b845267a73..a68651e111 100644 --- a/kyra/kyra.h +++ b/kyra/kyra.h @@ -614,7 +614,6 @@ protected: bool _mousePressFlag; uint8 _flagsTable[53]; uint8 *_unkPtr1, *_unkPtr2; - uint8 *_hidPage, *_screenPage; uint8 *_shapes[377]; uint16 _gameSpeed; uint16 _tickLength; diff --git a/kyra/screen.cpp b/kyra/screen.cpp index 3677132056..f3a217f043 100644 --- a/kyra/screen.cpp +++ b/kyra/screen.cpp @@ -70,6 +70,7 @@ Screen::Screen(KyraEngine *vm, OSystem *system) assert(_bitBlitRects); memset(_bitBlitRects, 0, sizeof(Rect)*BITBLIT_RECTS); _bitBlitNum = 0; + memset(_saveLoadPage, 0, sizeof(_saveLoadPage)); } Screen::~Screen() { @@ -89,6 +90,10 @@ Screen::~Screen() { free(_palettes[i]); } delete [] _bitBlitRects; + for (int i = 0; i < ARRAYSIZE(_saveLoadPage); ++i) { + delete [] _saveLoadPage[i]; + _saveLoadPage[i] = 0; + } } void Screen::updateScreen() { @@ -1881,4 +1886,20 @@ void Screen::bitBlitRects() { ++cur; } } + +void Screen::savePageToDisk(const char *file, int page) { + debug(9, "Screen::savePageToDisk('%s', %d)", file, page); + if (!_saveLoadPage[page/2]) { + _saveLoadPage[page/2] = new uint8[SCREEN_W * SCREEN_H]; + assert(_saveLoadPage[page/2]); + } + memcpy(_saveLoadPage[page/2], getPagePtr(page), SCREEN_W * SCREEN_H); +} + +void Screen::loadPageFromDisk(const char *file, int page) { + debug(9, "Screen::loadPageFromDisk('%s', %d)", file, page); + copyBlockToPage(page, 0, 0, SCREEN_W, SCREEN_H, _saveLoadPage[page/2]); + delete [] _saveLoadPage[page/2]; + _saveLoadPage[page/2] = 0; +} } // End of namespace Kyra diff --git a/kyra/screen.h b/kyra/screen.h index cdf9761106..d2ee052317 100644 --- a/kyra/screen.h +++ b/kyra/screen.h @@ -143,6 +143,9 @@ public: void addBitBlitRect(int x, int y, int w, int h); void bitBlitRects(); + + void savePageToDisk(const char *file, int page); + void loadPageFromDisk(const char *file, int page); int _charWidth; int _charOffset; @@ -162,6 +165,7 @@ private: void copyScreenToRect(int x, int y, int w, int h, uint8 *ptr); uint8 *_pagePtrs[16]; + uint8 *_saveLoadPage[8]; uint8 *_screenPalette; uint8 *_palettes[3]; FontId _currentFont; diff --git a/kyra/script_v1.cpp b/kyra/script_v1.cpp index 88900dd0b9..46d63a0944 100644 --- a/kyra/script_v1.cpp +++ b/kyra/script_v1.cpp @@ -74,8 +74,8 @@ int KyraEngine::cmd_pauseTicks(ScriptState *script) { } int KyraEngine::cmd_drawSceneAnimShape(ScriptState *script) { - debug(3, "cmd_drawSceneAnimShape(0x%X) (%d, %d, %d, %d)", script, stackPos(0), stackPos(1), stackPos(2), stackPos(3)); - _screen->drawShape(stackPos(4), _sprites->_sceneShapes[stackPos(0)], stackPos(1), stackPos(2), 0, stackPos(3)); + debug(3, "cmd_drawSceneAnimShape(0x%X) (%d, %d, %d, %d, %d)", script, stackPos(0), stackPos(1), stackPos(2), stackPos(3), stackPos(4)); + _screen->drawShape(stackPos(4), _sprites->_sceneShapes[stackPos(0)], stackPos(1), stackPos(2), 0, (stackPos(3) != 0) ? 1 : 0); return 0; } @@ -202,7 +202,8 @@ int KyraEngine::cmd_createMouseItem(ScriptState *script) { } int KyraEngine::cmd_savePageToDisk(ScriptState *script) { - warning("STUB: cmd_savePageToDisk"); + debug(3, "cmd_savePageToDisk(0x%X) ('%s', %d)", script, stackPosString(0), stackPos(1)); + _screen->savePageToDisk(stackPosString(0), stackPos(1)); return 0; } @@ -605,7 +606,9 @@ int KyraEngine::cmd_setCustomPaletteRange(ScriptState *script) { } int KyraEngine::cmd_loadPageFromDisk(ScriptState *script) { - warning("STUB: cmd_loadPageFromDisk"); + debug(3, "cmd_loadPageFromDisk(0x%X) ('%s', %d)", script, stackPosString(0), stackPos(1)); + _screen->loadPageFromDisk(stackPosString(0), stackPos(1)); + _animator->_updateScreen = true; return 0; } @@ -678,7 +681,8 @@ int KyraEngine::cmd_copyWSARegion(ScriptState *script) { int height = stackPos(3); int srcPage = stackPos(4); int dstPage = stackPos(5); - _screen->copyRegion(xpos, ypos, xpos, ypos, width, height, srcPage, dstPage, 0); + _screen->copyRegion(xpos, ypos, xpos, ypos, width, height, srcPage, dstPage); + _animator->_updateScreen = true; return 0; } @@ -709,12 +713,12 @@ int KyraEngine::cmd_displayWSAFrameOnHidPage(ScriptState *script) { int wsaIndex = stackPos(4); _screen->hideMouse(); + uint32 continueTime = waitTime * _tickLength + _system->getMillis(); _movieObjects[wsaIndex]->_x = xpos; _movieObjects[wsaIndex]->_y = ypos; _movieObjects[wsaIndex]->_drawPage = 2; _movieObjects[wsaIndex]->displayFrame(frame); _animator->_updateScreen = true; - uint32 continueTime = waitTime * _tickLength + _system->getMillis(); while (_system->getMillis() < continueTime) { _sprites->updateSceneAnims(); _animator->updateAllObjectShapes(); @@ -1032,12 +1036,9 @@ int KyraEngine::cmd_walkCharacterToPoint(ScriptState *script) { int KyraEngine::cmd_specialEventDisplayBrynnsNote(ScriptState *script) { debug(3, "cmd_specialEventDisplayBrynnsNote(0x%X) ()", script); - _hidPage = (uint8*)malloc(320*200); - _screenPage = (uint8*)malloc(320*200); - assert(_hidPage && _screenPage); _screen->hideMouse(); - _screen->copyRegionToBuffer(0, 0, 0, 320, 200, _screenPage); - _screen->copyRegionToBuffer(2, 0, 0, 320, 200, _hidPage); + _screen->savePageToDisk("HIDPAGE.TMP", 2); + _screen->savePageToDisk("SEENPAGE.TMP", 0); if (_features & GF_TALKIE) { if (_features & GF_ENGLISH) { loadBitmap("NOTEENG.CPS", 3, 3, 0); @@ -1059,11 +1060,8 @@ int KyraEngine::cmd_specialEventDisplayBrynnsNote(ScriptState *script) { int KyraEngine::cmd_specialEventRemoveBrynnsNote(ScriptState *script) { debug(3, "cmd_specialEventRemoveBrynnsNote(0x%X) ()", script); _screen->hideMouse(); - assert(_hidPage && _screenPage); - _screen->copyBlockToPage(0, 0, 0, 320, 200, _screenPage); - _screen->copyBlockToPage(2, 0, 0, 320, 200, _hidPage); - free(_screenPage); - free(_hidPage); + _screen->loadPageFromDisk("SEENPAGE.TMP", 0); + _screen->loadPageFromDisk("HIDPAGE.TMP", 2); _screen->updateScreen(); _screen->showMouse(); _screen->setFont(Screen::FID_8_FNT); |