aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWalter van Niftrik2018-07-25 10:40:30 +0200
committerWalter van Niftrik2018-12-27 12:33:10 +0100
commit76a0c20481bd68d60d8347fd922a74b292421d51 (patch)
treee74166628b3ffbbcb3d1cd98a91daefee3e43ac6
parentb37a41286099faf4a36e73e69b377022345091e7 (diff)
downloadscummvm-rg350-76a0c20481bd68d60d8347fd922a74b292421d51.tar.gz
scummvm-rg350-76a0c20481bd68d60d8347fd922a74b292421d51.tar.bz2
scummvm-rg350-76a0c20481bd68d60d8347fd922a74b292421d51.zip
ADL: Refactor opcode tables
-rw-r--r--engines/adl/adl.cpp97
-rw-r--r--engines/adl/adl.h8
-rw-r--r--engines/adl/adl_v2.cpp109
-rw-r--r--engines/adl/adl_v3.cpp4
-rw-r--r--engines/adl/hires5.cpp109
-rw-r--r--engines/adl/hires6.cpp110
6 files changed, 173 insertions, 264 deletions
diff --git a/engines/adl/adl.cpp b/engines/adl/adl.cpp
index f4f306aa8f..d752ab7ac5 100644
--- a/engines/adl/adl.cpp
+++ b/engines/adl/adl.cpp
@@ -415,69 +415,42 @@ bool AdlEngine::isInputValid(const Commands &commands, byte verb, byte noun, boo
return false;
}
-typedef Common::Functor1Mem<ScriptEnv &, int, AdlEngine> OpcodeV1;
-#define SetOpcodeTable(x) table = &x;
-#define Opcode(x) table->push_back(new OpcodeV1(this, &AdlEngine::x))
-#define OpcodeUnImpl() table->push_back(new OpcodeV1(this, 0))
-
void AdlEngine::setupOpcodeTables() {
- Common::Array<const Opcode *> *table = 0;
-
- SetOpcodeTable(_condOpcodes);
- // 0x00
- OpcodeUnImpl();
- OpcodeUnImpl();
- OpcodeUnImpl();
- Opcode(o1_isItemInRoom);
- // 0x04
- OpcodeUnImpl();
- Opcode(o1_isMovesGT);
- Opcode(o1_isVarEQ);
- OpcodeUnImpl();
- // 0x08
- OpcodeUnImpl();
- Opcode(o1_isCurPicEQ);
- Opcode(o1_isItemPicEQ);
-
- SetOpcodeTable(_actOpcodes);
- // 0x00
- OpcodeUnImpl();
- Opcode(o1_varAdd);
- Opcode(o1_varSub);
- Opcode(o1_varSet);
- // 0x04
- Opcode(o1_listInv);
- Opcode(o1_moveItem);
- Opcode(o1_setRoom);
- Opcode(o1_setCurPic);
- // 0x08
- Opcode(o1_setPic);
- Opcode(o1_printMsg);
- Opcode(o1_setLight);
- Opcode(o1_setDark);
- // 0x0c
- OpcodeUnImpl();
- Opcode(o1_quit);
- OpcodeUnImpl();
- Opcode(o1_save);
- // 0x10
- Opcode(o1_restore);
- Opcode(o1_restart);
- Opcode(o1_placeItem);
- Opcode(o1_setItemPic);
- // 0x14
- Opcode(o1_resetPic);
- Opcode(o1_goDirection<IDI_DIR_NORTH>);
- Opcode(o1_goDirection<IDI_DIR_SOUTH>);
- Opcode(o1_goDirection<IDI_DIR_EAST>);
- // 0x18
- Opcode(o1_goDirection<IDI_DIR_WEST>);
- Opcode(o1_goDirection<IDI_DIR_UP>);
- Opcode(o1_goDirection<IDI_DIR_DOWN>);
- Opcode(o1_takeItem);
- // 0x1c
- Opcode(o1_dropItem);
- Opcode(o1_setRoomPic);
+ _condOpcodes.resize(0x0b);
+ _condOpcodes[0x03] = opcode(o1_isItemInRoom);
+ _condOpcodes[0x05] = opcode(o1_isMovesGT);
+ _condOpcodes[0x06] = opcode(o1_isVarEQ);
+ _condOpcodes[0x09] = opcode(o1_isCurPicEQ);
+ _condOpcodes[0x0a] = opcode(o1_isItemPicEQ);
+
+ _actOpcodes.resize(0x1e);
+ _actOpcodes[0x01] = opcode(o1_varAdd);
+ _actOpcodes[0x02] = opcode(o1_varSub);
+ _actOpcodes[0x03] = opcode(o1_varSet);
+ _actOpcodes[0x04] = opcode(o1_listInv);
+ _actOpcodes[0x05] = opcode(o1_moveItem);
+ _actOpcodes[0x06] = opcode(o1_setRoom);
+ _actOpcodes[0x07] = opcode(o1_setCurPic);
+ _actOpcodes[0x08] = opcode(o1_setPic);
+ _actOpcodes[0x09] = opcode(o1_printMsg);
+ _actOpcodes[0x0a] = opcode(o1_setLight);
+ _actOpcodes[0x0b] = opcode(o1_setDark);
+ _actOpcodes[0x0d] = opcode(o1_quit);
+ _actOpcodes[0x0f] = opcode(o1_save);
+ _actOpcodes[0x10] = opcode(o1_restore);
+ _actOpcodes[0x11] = opcode(o1_restart);
+ _actOpcodes[0x12] = opcode(o1_placeItem);
+ _actOpcodes[0x13] = opcode(o1_setItemPic);
+ _actOpcodes[0x14] = opcode(o1_resetPic);
+ _actOpcodes[0x15] = opcode(o1_goDirection<IDI_DIR_NORTH>);
+ _actOpcodes[0x16] = opcode(o1_goDirection<IDI_DIR_SOUTH>);
+ _actOpcodes[0x17] = opcode(o1_goDirection<IDI_DIR_EAST>);
+ _actOpcodes[0x18] = opcode(o1_goDirection<IDI_DIR_WEST>);
+ _actOpcodes[0x19] = opcode(o1_goDirection<IDI_DIR_UP>);
+ _actOpcodes[0x1a] = opcode(o1_goDirection<IDI_DIR_DOWN>);
+ _actOpcodes[0x1b] = opcode(o1_takeItem);
+ _actOpcodes[0x1c] = opcode(o1_dropItem);
+ _actOpcodes[0x1d] = opcode(o1_setRoomPic);
}
void AdlEngine::initState() {
diff --git a/engines/adl/adl.h b/engines/adl/adl.h
index 143b07471c..24b6ead8d9 100644
--- a/engines/adl/adl.h
+++ b/engines/adl/adl.h
@@ -284,6 +284,13 @@ protected:
void loadDroppedItemOffsets(Common::ReadStream &stream, byte count);
// Opcodes
+ typedef Common::Functor1<ScriptEnv &, int> Opcode;
+
+ template <class T>
+ Opcode *opcode(int (T::*f)(ScriptEnv &)) {
+ return new Common::Functor1Mem<ScriptEnv &, int, T>(static_cast<T *>(this), f);
+ }
+
int o1_isItemInRoom(ScriptEnv &e);
int o1_isMovesGT(ScriptEnv &e);
int o1_isVarEQ(ScriptEnv &e);
@@ -357,7 +364,6 @@ protected:
bool _textMode;
// Opcodes
- typedef Common::Functor1<ScriptEnv &, int> Opcode;
Common::Array<const Opcode *> _condOpcodes, _actOpcodes;
// Message strings in data file
Common::Array<DataBlockPtr> _messages;
diff --git a/engines/adl/adl_v2.cpp b/engines/adl/adl_v2.cpp
index 4089ab3e30..757ea91a42 100644
--- a/engines/adl/adl_v2.cpp
+++ b/engines/adl/adl_v2.cpp
@@ -54,73 +54,50 @@ void AdlEngine_v2::insertDisk(byte volume) {
_currentVolume = volume;
}
-typedef Common::Functor1Mem<ScriptEnv &, int, AdlEngine_v2> OpcodeV2;
-#define SetOpcodeTable(x) table = &x;
-#define Opcode(x) table->push_back(new OpcodeV2(this, &AdlEngine_v2::x))
-#define OpcodeUnImpl() table->push_back(new OpcodeV2(this, 0))
-
void AdlEngine_v2::setupOpcodeTables() {
- Common::Array<const Opcode *> *table = 0;
-
- SetOpcodeTable(_condOpcodes);
- // 0x00
- OpcodeUnImpl();
- Opcode(o2_isFirstTime);
- Opcode(o2_isRandomGT);
- Opcode(o1_isItemInRoom);
- // 0x04
- Opcode(o2_isNounNotInRoom);
- Opcode(o1_isMovesGT);
- Opcode(o1_isVarEQ);
- Opcode(o2_isCarryingSomething);
- // 0x08
- OpcodeUnImpl();
- Opcode(o1_isCurPicEQ);
- Opcode(o1_isItemPicEQ);
-
- SetOpcodeTable(_actOpcodes);
- // 0x00
- OpcodeUnImpl();
- Opcode(o1_varAdd);
- Opcode(o1_varSub);
- Opcode(o1_varSet);
- // 0x04
- Opcode(o1_listInv);
- Opcode(o2_moveItem);
- Opcode(o1_setRoom);
- Opcode(o2_setCurPic);
- // 0x08
- Opcode(o2_setPic);
- Opcode(o1_printMsg);
- Opcode(o1_setLight);
- Opcode(o1_setDark);
- // 0x0c
- Opcode(o2_moveAllItems);
- Opcode(o1_quit);
- OpcodeUnImpl();
- Opcode(o2_save);
- // 0x10
- Opcode(o2_restore);
- Opcode(o1_restart);
- Opcode(o2_placeItem);
- Opcode(o1_setItemPic);
- // 0x14
- Opcode(o1_resetPic);
- Opcode(o1_goDirection<IDI_DIR_NORTH>);
- Opcode(o1_goDirection<IDI_DIR_SOUTH>);
- Opcode(o1_goDirection<IDI_DIR_EAST>);
- // 0x18
- Opcode(o1_goDirection<IDI_DIR_WEST>);
- Opcode(o1_goDirection<IDI_DIR_UP>);
- Opcode(o1_goDirection<IDI_DIR_DOWN>);
- Opcode(o1_takeItem);
- // 0x1c
- Opcode(o1_dropItem);
- Opcode(o1_setRoomPic);
- Opcode(o2_tellTime);
- Opcode(o2_setRoomFromVar);
- // 0x20
- Opcode(o2_initDisk);
+ _condOpcodes.resize(0x0b);
+ _condOpcodes[0x01] = opcode(o2_isFirstTime);
+ _condOpcodes[0x02] = opcode(o2_isRandomGT);
+ _condOpcodes[0x03] = opcode(o1_isItemInRoom);
+ _condOpcodes[0x04] = opcode(o2_isNounNotInRoom);
+ _condOpcodes[0x05] = opcode(o1_isMovesGT);
+ _condOpcodes[0x06] = opcode(o1_isVarEQ);
+ _condOpcodes[0x07] = opcode(o2_isCarryingSomething);
+ _condOpcodes[0x09] = opcode(o1_isCurPicEQ);
+ _condOpcodes[0x0a] = opcode(o1_isItemPicEQ);
+
+ _actOpcodes.resize(0x21);
+ _actOpcodes[0x01] = opcode(o1_varAdd);
+ _actOpcodes[0x02] = opcode(o1_varSub);
+ _actOpcodes[0x03] = opcode(o1_varSet);
+ _actOpcodes[0x04] = opcode(o1_listInv);
+ _actOpcodes[0x05] = opcode(o2_moveItem);
+ _actOpcodes[0x06] = opcode(o1_setRoom);
+ _actOpcodes[0x07] = opcode(o2_setCurPic);
+ _actOpcodes[0x08] = opcode(o2_setPic);
+ _actOpcodes[0x09] = opcode(o1_printMsg);
+ _actOpcodes[0x0a] = opcode(o1_setLight);
+ _actOpcodes[0x0b] = opcode(o1_setDark);
+ _actOpcodes[0x0c] = opcode(o2_moveAllItems);
+ _actOpcodes[0x0d] = opcode(o1_quit);
+ _actOpcodes[0x0f] = opcode(o2_save);
+ _actOpcodes[0x10] = opcode(o2_restore);
+ _actOpcodes[0x11] = opcode(o1_restart);
+ _actOpcodes[0x12] = opcode(o2_placeItem);
+ _actOpcodes[0x13] = opcode(o1_setItemPic);
+ _actOpcodes[0x14] = opcode(o1_resetPic);
+ _actOpcodes[0x15] = opcode(o1_goDirection<IDI_DIR_NORTH>);
+ _actOpcodes[0x16] = opcode(o1_goDirection<IDI_DIR_SOUTH>);
+ _actOpcodes[0x17] = opcode(o1_goDirection<IDI_DIR_EAST>);
+ _actOpcodes[0x18] = opcode(o1_goDirection<IDI_DIR_WEST>);
+ _actOpcodes[0x19] = opcode(o1_goDirection<IDI_DIR_UP>);
+ _actOpcodes[0x1a] = opcode(o1_goDirection<IDI_DIR_DOWN>);
+ _actOpcodes[0x1b] = opcode(o1_takeItem);
+ _actOpcodes[0x1c] = opcode(o1_dropItem);
+ _actOpcodes[0x1d] = opcode(o1_setRoomPic);
+ _actOpcodes[0x1e] = opcode(o2_tellTime);
+ _actOpcodes[0x1f] = opcode(o2_setRoomFromVar);
+ _actOpcodes[0x20] = opcode(o2_initDisk);
}
void AdlEngine_v2::initState() {
diff --git a/engines/adl/adl_v3.cpp b/engines/adl/adl_v3.cpp
index 46af211695..f68a81916c 100644
--- a/engines/adl/adl_v3.cpp
+++ b/engines/adl/adl_v3.cpp
@@ -56,12 +56,10 @@ void AdlEngine_v3::loadItemDescriptions(Common::SeekableReadStream &stream, byte
error("Error loading item descriptions");
}
-typedef Common::Functor1Mem<ScriptEnv &, int, AdlEngine_v3> OpcodeV3;
-
void AdlEngine_v3::setupOpcodeTables() {
AdlEngine_v2::setupOpcodeTables();
delete _condOpcodes[0x04];
- _condOpcodes[0x04] = new OpcodeV3(this, &AdlEngine_v3::o3_isNounNotInRoom);
+ _condOpcodes[0x04] = opcode(o3_isNounNotInRoom);
}
int AdlEngine_v3::o3_isNounNotInRoom(ScriptEnv &e) {
diff --git a/engines/adl/hires5.cpp b/engines/adl/hires5.cpp
index efe69a7e58..24e24c7596 100644
--- a/engines/adl/hires5.cpp
+++ b/engines/adl/hires5.cpp
@@ -134,73 +134,50 @@ void HiRes5Engine::animateLights() const {
}
}
-typedef Common::Functor1Mem<ScriptEnv &, int, HiRes5Engine> OpcodeH5;
-#define SetOpcodeTable(x) table = &x;
-#define Opcode(x) table->push_back(new OpcodeH5(this, &HiRes5Engine::x))
-#define OpcodeUnImpl() table->push_back(new OpcodeH5(this, 0))
-
void HiRes5Engine::setupOpcodeTables() {
- Common::Array<const Opcode *> *table = 0;
-
- SetOpcodeTable(_condOpcodes);
- // 0x00
- OpcodeUnImpl();
- Opcode(o2_isFirstTime);
- Opcode(o2_isRandomGT);
- Opcode(o4_isItemInRoom);
- // 0x04
- Opcode(o3_isNounNotInRoom);
- Opcode(o1_isMovesGT);
- Opcode(o1_isVarEQ);
- Opcode(o2_isCarryingSomething);
- // 0x08
- Opcode(o4_isVarGT);
- Opcode(o1_isCurPicEQ);
- OpcodeUnImpl();
-
- SetOpcodeTable(_actOpcodes);
- // 0x00
- OpcodeUnImpl();
- Opcode(o1_varAdd);
- Opcode(o1_varSub);
- Opcode(o1_varSet);
- // 0x04
- Opcode(o1_listInv);
- Opcode(o4_moveItem);
- Opcode(o1_setRoom);
- Opcode(o2_setCurPic);
- // 0x08
- Opcode(o2_setPic);
- Opcode(o1_printMsg);
- Opcode(o4_setRegionToPrev);
- Opcode(o_checkItemTimeLimits);
- // 0x0c
- Opcode(o4_moveAllItems);
- Opcode(o1_quit);
- Opcode(o4_setRegion);
- Opcode(o4_save);
- // 0x10
- Opcode(o4_restore);
- Opcode(o4_restart);
- Opcode(o4_setRegionRoom);
- Opcode(o_startAnimation);
- // 0x14
- Opcode(o1_resetPic);
- Opcode(o1_goDirection<IDI_DIR_NORTH>);
- Opcode(o1_goDirection<IDI_DIR_SOUTH>);
- Opcode(o1_goDirection<IDI_DIR_EAST>);
- // 0x18
- Opcode(o1_goDirection<IDI_DIR_WEST>);
- Opcode(o1_goDirection<IDI_DIR_UP>);
- Opcode(o1_goDirection<IDI_DIR_DOWN>);
- Opcode(o1_takeItem);
- // 0x1c
- Opcode(o1_dropItem);
- Opcode(o4_setRoomPic);
- Opcode(o_winGame);
- OpcodeUnImpl();
- // 0x20
- Opcode(o2_initDisk);
+ _condOpcodes.resize(0x0a);
+ _condOpcodes[0x01] = opcode(o2_isFirstTime);
+ _condOpcodes[0x02] = opcode(o2_isRandomGT);
+ _condOpcodes[0x03] = opcode(o4_isItemInRoom);
+ _condOpcodes[0x04] = opcode(o3_isNounNotInRoom);
+ _condOpcodes[0x05] = opcode(o1_isMovesGT);
+ _condOpcodes[0x06] = opcode(o1_isVarEQ);
+ _condOpcodes[0x07] = opcode(o2_isCarryingSomething);
+ _condOpcodes[0x08] = opcode(o4_isVarGT);
+ _condOpcodes[0x09] = opcode(o1_isCurPicEQ);
+
+ _actOpcodes.resize(0x21);
+ _actOpcodes[0x01] = opcode(o1_varAdd);
+ _actOpcodes[0x02] = opcode(o1_varSub);
+ _actOpcodes[0x03] = opcode(o1_varSet);
+ _actOpcodes[0x04] = opcode(o1_listInv);
+ _actOpcodes[0x05] = opcode(o4_moveItem);
+ _actOpcodes[0x06] = opcode(o1_setRoom);
+ _actOpcodes[0x07] = opcode(o2_setCurPic);
+ _actOpcodes[0x08] = opcode(o2_setPic);
+ _actOpcodes[0x09] = opcode(o1_printMsg);
+ _actOpcodes[0x0a] = opcode(o4_setRegionToPrev);
+ _actOpcodes[0x0b] = opcode(o_checkItemTimeLimits);
+ _actOpcodes[0x0c] = opcode(o4_moveAllItems);
+ _actOpcodes[0x0d] = opcode(o1_quit);
+ _actOpcodes[0x0e] = opcode(o4_setRegion);
+ _actOpcodes[0x0f] = opcode(o4_save);
+ _actOpcodes[0x10] = opcode(o4_restore);
+ _actOpcodes[0x11] = opcode(o4_restart);
+ _actOpcodes[0x12] = opcode(o4_setRegionRoom);
+ _actOpcodes[0x13] = opcode(o_startAnimation);
+ _actOpcodes[0x14] = opcode(o1_resetPic);
+ _actOpcodes[0x15] = opcode(o1_goDirection<IDI_DIR_NORTH>);
+ _actOpcodes[0x16] = opcode(o1_goDirection<IDI_DIR_SOUTH>);
+ _actOpcodes[0x17] = opcode(o1_goDirection<IDI_DIR_EAST>);
+ _actOpcodes[0x18] = opcode(o1_goDirection<IDI_DIR_WEST>);
+ _actOpcodes[0x19] = opcode(o1_goDirection<IDI_DIR_UP>);
+ _actOpcodes[0x1a] = opcode(o1_goDirection<IDI_DIR_DOWN>);
+ _actOpcodes[0x1b] = opcode(o1_takeItem);
+ _actOpcodes[0x1c] = opcode(o1_dropItem);
+ _actOpcodes[0x1d] = opcode(o4_setRoomPic);
+ _actOpcodes[0x1e] = opcode(o_winGame);
+ _actOpcodes[0x20] = opcode(o2_initDisk);
}
bool HiRes5Engine::isInventoryFull() {
diff --git a/engines/adl/hires6.cpp b/engines/adl/hires6.cpp
index 7f1a285d71..96eb59b47f 100644
--- a/engines/adl/hires6.cpp
+++ b/engines/adl/hires6.cpp
@@ -94,73 +94,51 @@ void HiRes6Engine::gameLoop() {
}
}
-typedef Common::Functor1Mem<ScriptEnv &, int, HiRes6Engine> OpcodeH6;
-#define SetOpcodeTable(x) table = &x;
-#define Opcode(x) table->push_back(new OpcodeH6(this, &HiRes6Engine::x))
-#define OpcodeUnImpl() table->push_back(new OpcodeH6(this, 0))
-
void HiRes6Engine::setupOpcodeTables() {
- Common::Array<const Opcode *> *table = 0;
-
- SetOpcodeTable(_condOpcodes);
- // 0x00
- OpcodeUnImpl();
- Opcode(o2_isFirstTime);
- Opcode(o2_isRandomGT);
- Opcode(o4_isItemInRoom);
- // 0x04
- Opcode(o5_isNounNotInRoom);
- Opcode(o1_isMovesGT);
- Opcode(o1_isVarEQ);
- Opcode(o2_isCarryingSomething);
- // 0x08
- Opcode(o4_isVarGT);
- Opcode(o1_isCurPicEQ);
- Opcode(o5_abortScript);
-
- SetOpcodeTable(_actOpcodes);
- // 0x00
- OpcodeUnImpl();
- Opcode(o1_varAdd);
- Opcode(o1_varSub);
- Opcode(o1_varSet);
- // 0x04
- Opcode(o1_listInv);
- Opcode(o4_moveItem);
- Opcode(o1_setRoom);
- Opcode(o2_setCurPic);
- // 0x08
- Opcode(o2_setPic);
- Opcode(o1_printMsg);
- Opcode(o5_dummy);
- Opcode(o5_setTextMode);
- // 0x0c
- Opcode(o4_moveAllItems);
- Opcode(o1_quit);
- Opcode(o5_dummy);
- Opcode(o4_save);
- // 0x10
- Opcode(o4_restore);
- Opcode(o1_restart);
- Opcode(o5_setRegionRoom);
- Opcode(o5_dummy);
- // 0x14
- Opcode(o1_resetPic);
- Opcode(o_goDirection<IDI_DIR_NORTH>);
- Opcode(o_goDirection<IDI_DIR_SOUTH>);
- Opcode(o_goDirection<IDI_DIR_EAST>);
- // 0x18
- Opcode(o_goDirection<IDI_DIR_WEST>);
- Opcode(o_goDirection<IDI_DIR_UP>);
- Opcode(o_goDirection<IDI_DIR_DOWN>);
- Opcode(o1_takeItem);
- // 0x1c
- Opcode(o1_dropItem);
- Opcode(o5_setRoomPic);
- Opcode(o_fluteSound);
- OpcodeUnImpl();
- // 0x20
- Opcode(o2_initDisk);
+ _condOpcodes.resize(0x0b);
+ _condOpcodes[0x01] = opcode(o2_isFirstTime);
+ _condOpcodes[0x02] = opcode(o2_isRandomGT);
+ _condOpcodes[0x03] = opcode(o4_isItemInRoom);
+ _condOpcodes[0x04] = opcode(o5_isNounNotInRoom);
+ _condOpcodes[0x05] = opcode(o1_isMovesGT);
+ _condOpcodes[0x06] = opcode(o1_isVarEQ);
+ _condOpcodes[0x07] = opcode(o2_isCarryingSomething);
+ _condOpcodes[0x08] = opcode(o4_isVarGT);
+ _condOpcodes[0x09] = opcode(o1_isCurPicEQ);
+ _condOpcodes[0x0a] = opcode(o5_abortScript);
+
+ _actOpcodes.resize(0x21);
+ _actOpcodes[0x01] = opcode(o1_varAdd);
+ _actOpcodes[0x02] = opcode(o1_varSub);
+ _actOpcodes[0x03] = opcode(o1_varSet);
+ _actOpcodes[0x04] = opcode(o1_listInv);
+ _actOpcodes[0x05] = opcode(o4_moveItem);
+ _actOpcodes[0x06] = opcode(o1_setRoom);
+ _actOpcodes[0x07] = opcode(o2_setCurPic);
+ _actOpcodes[0x08] = opcode(o2_setPic);
+ _actOpcodes[0x09] = opcode(o1_printMsg);
+ _actOpcodes[0x0a] = opcode(o5_dummy);
+ _actOpcodes[0x0b] = opcode(o5_setTextMode);
+ _actOpcodes[0x0c] = opcode(o4_moveAllItems);
+ _actOpcodes[0x0d] = opcode(o1_quit);
+ _actOpcodes[0x0e] = opcode(o5_dummy);
+ _actOpcodes[0x0f] = opcode(o4_save);
+ _actOpcodes[0x10] = opcode(o4_restore);
+ _actOpcodes[0x11] = opcode(o1_restart);
+ _actOpcodes[0x12] = opcode(o5_setRegionRoom);
+ _actOpcodes[0x13] = opcode(o5_dummy);
+ _actOpcodes[0x14] = opcode(o1_resetPic);
+ _actOpcodes[0x15] = opcode(o_goDirection<IDI_DIR_NORTH>);
+ _actOpcodes[0x16] = opcode(o_goDirection<IDI_DIR_SOUTH>);
+ _actOpcodes[0x17] = opcode(o_goDirection<IDI_DIR_EAST>);
+ _actOpcodes[0x18] = opcode(o_goDirection<IDI_DIR_WEST>);
+ _actOpcodes[0x19] = opcode(o_goDirection<IDI_DIR_UP>);
+ _actOpcodes[0x1a] = opcode(o_goDirection<IDI_DIR_DOWN>);
+ _actOpcodes[0x1b] = opcode(o1_takeItem);
+ _actOpcodes[0x1c] = opcode(o1_dropItem);
+ _actOpcodes[0x1d] = opcode(o5_setRoomPic);
+ _actOpcodes[0x1e] = opcode(o_fluteSound);
+ _actOpcodes[0x20] = opcode(o2_initDisk);
}
template <Direction D>