aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
Diffstat (limited to 'engines')
-rw-r--r--engines/access/amazon/amazon_scripts.cpp5
-rw-r--r--engines/access/amazon/amazon_scripts.h2
-rw-r--r--engines/access/screen.cpp18
-rw-r--r--engines/access/screen.h6
-rw-r--r--engines/access/scripts.cpp21
-rw-r--r--engines/access/scripts.h2
6 files changed, 53 insertions, 1 deletions
diff --git a/engines/access/amazon/amazon_scripts.cpp b/engines/access/amazon/amazon_scripts.cpp
index 1d3e7b4b76..d7e84394b5 100644
--- a/engines/access/amazon/amazon_scripts.cpp
+++ b/engines/access/amazon/amazon_scripts.cpp
@@ -31,6 +31,11 @@ namespace Amazon {
AmazonScripts::AmazonScripts(AccessEngine *vm) : Scripts(vm) {
}
+void AmazonScripts::executeSpecial(int commandIndex, int param1, int param2) {
+ warning("TODO");
+}
+
+
} // End of namespace Amazon
} // End of namespace Access
diff --git a/engines/access/amazon/amazon_scripts.h b/engines/access/amazon/amazon_scripts.h
index 08fbc3a0f2..b8fdaaa7f3 100644
--- a/engines/access/amazon/amazon_scripts.h
+++ b/engines/access/amazon/amazon_scripts.h
@@ -31,6 +31,8 @@ namespace Access {
namespace Amazon {
class AmazonScripts: public Scripts {
+protected:
+ virtual void executeSpecial(int commandIndex, int param1, int param2);
public:
AmazonScripts(AccessEngine *vm);
};
diff --git a/engines/access/screen.cpp b/engines/access/screen.cpp
index 6f9b53994d..4673bb6136 100644
--- a/engines/access/screen.cpp
+++ b/engines/access/screen.cpp
@@ -40,6 +40,7 @@ Screen::Screen(AccessEngine *vm) : _vm(vm) {
Common::fill(&_manPal[0], &_manPal[0x60], 0);
Common::fill(&_scaleTable1[0], &_scaleTable1[256], 0);
Common::fill(&_scaleTable2[0], &_scaleTable2[256], 0);
+ _savedPaletteCount = 0;
_vesaMode = 0;
_vesaCurrentWin = 0;
_currentPanel = 0;
@@ -114,6 +115,23 @@ void Screen::updatePalette() {
updateScreen();
}
+void Screen::savePalette() {
+ Common::copy(&_rawPalette[0], &_rawPalette[PALETTE_SIZE],
+ &_savedPalettes[_savedPaletteCount][0]);
+
+ if (++_savedPaletteCount == 2)
+ _savedPaletteCount = 1;
+}
+
+void Screen::restorePalette() {
+ if (--_savedPaletteCount < 0)
+ _savedPaletteCount = 0;
+
+ Common::copy(&_savedPalettes[_savedPaletteCount][0],
+ &_savedPalettes[_savedPaletteCount][PALETTE_SIZE], &_rawPalette[0]);
+}
+
+
void Screen::forceFadeOut() {
const int FADE_AMOUNT = 2;
bool repeatFlag;
diff --git a/engines/access/screen.h b/engines/access/screen.h
index 6ede482e61..d759ae119e 100644
--- a/engines/access/screen.h
+++ b/engines/access/screen.h
@@ -52,6 +52,8 @@ private:
AccessEngine *_vm;
byte _tempPalette[PALETTE_SIZE];
byte _rawPalette[PALETTE_SIZE];
+ byte _savedPalettes[2][PALETTE_SIZE];
+ int _savedPaletteCount;
int _vesaCurrentWin;
int _currentPanel;
Common::Point _msVirtualOffset;
@@ -117,6 +119,10 @@ public:
void loadRawPalette(Common::SeekableReadStream *stream);
+ void savePalette();
+
+ void restorePalette();
+
/**
* Copy a buffer to the screen
*/
diff --git a/engines/access/scripts.cpp b/engines/access/scripts.cpp
index 19633544f4..0e1d421c34 100644
--- a/engines/access/scripts.cpp
+++ b/engines/access/scripts.cpp
@@ -326,7 +326,26 @@ void Scripts::cmdRemoveLast() {
--_vm->_numAnimTimers;
}
-void Scripts::CMDSPECIAL() { error("TODO"); }
+void Scripts::CMDSPECIAL() {
+ _specialFunction = _data->readUint16LE();
+ int p1 = _data->readUint16LE();
+ int p2 = _data->readUint16LE();
+
+ if (_specialFunction == 1) {
+ if (_vm->_establishTable[p2] == 1)
+ return;
+
+ _vm->_screen->savePalette();
+ }
+
+ executeSpecial(_specialFunction, p1, p2);
+
+ if (_specialFunction == 1) {
+ _vm->_screen->restorePalette();
+ _vm->_room->_function = 3;
+ }
+}
+
void Scripts::CMDSETCYCLE() { error("TODO"); }
void Scripts::CMDCYCLE() { error("TODO"); }
void Scripts::CMDCHARSPEAK() { error("TODO"); }
diff --git a/engines/access/scripts.h b/engines/access/scripts.h
index 495c4c5f9f..0916b9e9b1 100644
--- a/engines/access/scripts.h
+++ b/engines/access/scripts.h
@@ -37,9 +37,11 @@ class Scripts {
private:
const byte *_rawData;
Common::MemoryReadStream *_data;
+ int _specialFunction;
protected:
AccessEngine *_vm;
+ virtual void executeSpecial(int commandIndex, int param1, int param2) = 0;
virtual void executeCommand(int commandIndex);
void CMDOBJECT();
void CMDENDOBJECT();