diff options
Diffstat (limited to 'engines/agi')
-rw-r--r-- | engines/agi/graphics.cpp | 14 | ||||
-rw-r--r-- | engines/agi/graphics.h | 3 | ||||
-rw-r--r-- | engines/agi/op_cmd.cpp | 4 | ||||
-rw-r--r-- | engines/agi/savegame.cpp | 11 |
4 files changed, 28 insertions, 4 deletions
diff --git a/engines/agi/graphics.cpp b/engines/agi/graphics.cpp index 1b696dd333..d2a686d298 100644 --- a/engines/agi/graphics.cpp +++ b/engines/agi/graphics.cpp @@ -378,7 +378,12 @@ void GfxMgr::gfxSetPalette() { //Gets AGIPAL Data void GfxMgr::setAGIPal(int p0) { - //report("Using AGIPAL hack\n"); + //If 0 from savefile, do not use + if (p0 == 0) + return; + + _agipalFileNum = p0; + Common::File agipal; char filename[15]; @@ -406,10 +411,17 @@ void GfxMgr::setAGIPal(int p0) { initPalette(_agipalPalette); gfxSetPalette(); + + debug(1, "Using AGIPAL palette from pal.%d", p0); + free(palData); palData = 0; } +int GfxMgr::getAGIPalFileNum() { + return _agipalFileNum; +} + /* put a block onto the screen */ void GfxMgr::gfxPutBlock(int x1, int y1, int x2, int y2) { if (x1 >= GFX_WIDTH) diff --git a/engines/agi/graphics.h b/engines/agi/graphics.h index 3212f3cbbe..9c9dba0cb0 100644 --- a/engines/agi/graphics.h +++ b/engines/agi/graphics.h @@ -47,12 +47,14 @@ private: uint8 *_shakeH, *_shakeV; uint8 _agipalPalette[16 * 3]; + int _agipalFileNum; public: GfxMgr(AgiEngine *vm) { _vm = vm; _shakeH = NULL; _shakeV = NULL; + _agipalFileNum = 0; } void gfxPutBlock(int x1, int y1, int x2, int y2); @@ -83,6 +85,7 @@ public: void restoreBlock(int, int, int, int, uint8 *); void initPalette(uint8 *); void setAGIPal(int); + int getAGIPalFileNum(); void drawFrame(int x1, int y1, int x2, int y2, int c1, int c2); void putPixel(int, int, int); diff --git a/engines/agi/op_cmd.cpp b/engines/agi/op_cmd.cpp index d1f7053818..f9017da320 100644 --- a/engines/agi/op_cmd.cpp +++ b/engines/agi/op_cmd.cpp @@ -1227,10 +1227,10 @@ cmd(mouse_posn) { cmd(shake_screen) { int i; - /* AGIPAL uses shake.screen values between 100 and 109 to + /* AGIPAL uses shake.screen values between 101 and 109 to * set the palette. */ - if ((g_agi->getFeatures() & GF_AGIPAL) && p0 >= 100 && p0 < 110) { + if ((g_agi->getFeatures() & GF_AGIPAL) && p0 >= 101 && p0 < 110) { g_gfx->setAGIPal(p0); return; } else diff --git a/engines/agi/savegame.cpp b/engines/agi/savegame.cpp index 8a58d67f58..566f2945b0 100644 --- a/engines/agi/savegame.cpp +++ b/engines/agi/savegame.cpp @@ -36,12 +36,13 @@ #include "agi/keyboard.h" #include "agi/menu.h" -#define SAVEGAME_VERSION 2 +#define SAVEGAME_VERSION 3 /* * Version 0 (Sarien): view table has 64 entries * Version 1 (Sarien): view table has 256 entries (needed in KQ3) * Version 2 (ScummVM): first ScummVM version + * Version 3 (ScummVM): adding AGIPAL save/load support */ namespace Agi { @@ -200,6 +201,10 @@ int AgiEngine::saveGame(const char *fileName, const char *description) { } out->writeByte(0); + //Write which file number AGIPAL is using (0 if not being used) + if ((getFeatures() & GF_AGIPAL)) + out->writeSint16BE(_gfx->getAGIPalFileNum()); + out->finalize(); if (out->ioFailed()) warning("Can't write file '%s'. (Disk full?)", fileName); @@ -434,6 +439,10 @@ int AgiEngine::loadGame(const char *fileName) { parm[3], parm[4], parm[5], parm[6]); } + //Load AGIPAL Data + if ((getFeatures() & GF_AGIPAL) && (saveVersion >= 3)) + _gfx->setAGIPal(in->readSint16BE()); + delete in; debugC(3, kDebugLevelMain | kDebugLevelSavegame, "Closed %s", fileName); |