aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFilippos Karapetis2009-08-28 14:33:26 +0000
committerFilippos Karapetis2009-08-28 14:33:26 +0000
commit2874593dec865641fc5c478e5e0e96e468e84adc (patch)
tree77da001d2c22b5f7098deaa193e3df4e31be9e0b
parentaf2668145a0dc0a7175b71ce05304f80fb607209 (diff)
downloadscummvm-rg350-2874593dec865641fc5c478e5e0e96e468e84adc.tar.gz
scummvm-rg350-2874593dec865641fc5c478e5e0e96e468e84adc.tar.bz2
scummvm-rg350-2874593dec865641fc5c478e5e0e96e468e84adc.zip
The first part of the selector table (the first 83 entries) is almost the same in all SCI versions (up to and including the "z" selector), therefore the hardcoded selector tables can be simplified a lot
svn-id: r43780
-rw-r--r--engines/sci/engine/static_selectors.cpp541
1 files changed, 104 insertions, 437 deletions
diff --git a/engines/sci/engine/static_selectors.cpp b/engines/sci/engine/static_selectors.cpp
index 3e6b6f573b..bdfa320ac4 100644
--- a/engines/sci/engine/static_selectors.cpp
+++ b/engines/sci/engine/static_selectors.cpp
@@ -34,454 +34,115 @@ struct SelectorRemap {
const char *name;
uint32 slot;
};
-
+
+const int handleIndex = 41;
+const int canBeHereIndex = 54;
+
+const char *selectorNamesFirstPart[] = {
+ "y", "x", "view", "loop", "cel", // 0 - 4
+ "underBits", "nsTop", "nsLeft", "nsBottom", "nsRight", // 5 - 9
+ "lsTop", "lsLeft", "lsBottom", "lsRight", "signal", // 10 - 14
+ "illegalBits", "brTop", "brLeft", "brBottom", "brRight", // 15 - 19
+ "name", "key", "time", "text", "elements", // 20 - 24
+ "color", "back", "mode", "style", "state", // 25 - 29
+ "font", "type", "window", "cursor", "max", // 30 - 34
+ "mark", "who", "message", "edit", "play", // 35 - 39
+ "number", "nodePtr", "client", "dx", "dy", // 40 - 44
+ "b-moveCnt", "b-i1", "b-i2", "b-di", "b-xAxis", // 45 - 49
+ "b-incr", "xStep", "yStep", "moveSpeed", "canBeHere", // 50 - 54
+ "heading", "mover", "doit", "isBlocked", "looper", // 55 - 59
+ "priority", "modifiers", "replay", "setPri", "at", // 60 - 64
+ "next", "done", "width", "wordFail", "syntaxFail", // 65 - 69
+ "semanticFail", "pragmaFail", "said", "claimed", "value", // 70 - 74
+ "save", "restore", "title", "button", "icon", // 75 - 79
+ "draw", "delete", "z" // 80 - 82
+};
+
+void createFirstPart(Common::StringList &names, int offset, bool hasCantBeHere, bool hasNodePtr) {
+ int count = ARRAYSIZE(selectorNamesFirstPart) + offset;
+ int i;
+ names.resize(count);
+
+ for (i = 0; i < offset; i++)
+ names[i] = "";
+
+ for (i = offset; i < count; i++) {
+ names[i] = selectorNamesFirstPart[i - offset];
+ if (hasNodePtr && i == handleIndex + offset)
+ names[i] = "nodePtr";
+ if (hasCantBeHere && i == canBeHereIndex + offset)
+ names[i] = "cantBeHere";
+ }
+}
+
// Taken from King's Quest IV (Full Game)
+// offset: 3, hascantbehere: false, hasNodePtr: false
static const SelectorRemap kq4_demo_selectors[] = {
- { "init", 87 },
- { "play", 42 },
- { "replay", 65 },
- { "x", 4 },
- { "y", 3 },
- { "z", 85 },
- { "priority", 63 },
- { "view", 5 },
- { "loop", 6 },
- { "cel", 7 },
- { "brLeft", 20 },
- { "brRight", 22 },
- { "brTop", 19 },
- { "brBottom", 21 },
- { "xStep", 54 },
- { "yStep", 55 },
- { "nsBottom", 11 },
- { "nsTop", 9 },
- { "nsLeft", 10 },
- { "nsRight", 12 },
- { "font", 33 },
- { "text", 26 },
- { "type", 34 },
- { "state", 32 },
- { "doit", 60 },
- { "delete", 84 },
- { "signal", 17 },
- { "underBits", 8 },
- { "canBeHere", 57 },
- { "client", 45 },
- { "dx", 46 },
- { "dy", 47 },
- { "xStep", 54 },
- { "yStep", 55 },
- { "b-moveCnt", 48 },
- { "b-i1", 49 },
- { "b-i2", 50 },
- { "b-di", 51 },
- { "b-xAxis", 52 },
- { "b-incr", 53 },
- { "completed", 158 },
- { "illegalBits", 18 },
- { "dispose", 88 },
- { "prevSignal", 129 },
- { "message", 40 },
- { "modifiers", 64 },
- { "cue", 121 },
- { "owner", 130 },
- { "handle", 44 },
- { "number", 43 },
- { "max", 37 },
- { "cursor", 36 },
- { "claimed", 76 },
- { "wordFail", 71 },
- { "syntaxFail", 72 },
- { "cycler", 165 },
- { "elements", 27 },
- { "lsTop", 13 },
- { "lsBottom", 15 },
- { "lsLeft", 14 },
- { "lsRight", 16 },
- { "who", 39 },
- { "distance", 173 },
- { "mover", 59 },
- { "looper", 62 },
- { "isBlocked", 61 },
- { "heading", 58 },
- { "mode", 30 },
- { "caller", 119 },
- { "moveDone", 169 },
- { "size", 96 },
- { "moveSpeed", 56 },
- { "motionCue", 161 },
- { "setTarget", 171 }
+ { "init", 87 }, { "dispose", 88 }, { "size", 96 },
+ { "caller", 119 }, { "cue", 121 }, { "owner", 130 },
+ { "completed", 158 }, { "motionCue", 161 }, { "cycler", 165 },
+ { "moveDone", 169 }, { "setTarget", 171 }
};
-
+
+// Taken from Codename: Iceman (Full Game)
+// offset: 3, hascantbehere: false, hasNodePtr: false
+static const SelectorRemap iceman_demo_selectors[] = {
+ { "init", 87 }, { "dispose", 88 }, { "size", 96 },
+ { "caller", 119 }, { "cue", 121 }, { "owner", 130 },
+ { "completed", 159 }, { "motionCue", 162 }, { "cycler", 164 },
+ { "moveDone", 170 }, { "setTarget", 171 }, { "distance", 173 },
+ { "points", 316 }, { "flags", 368 }
+};
+
// Taken from EcoQuest 2 (Demo)
+// offset: 0, hascantbehere: true, hasNodePtr: true
static const SelectorRemap christmas1992_selectors[] = {
- { "init", 110 },
- { "play", 39 },
- { "replay", 62 },
- { "x", 1 },
- { "y", 0 },
- { "z", 82 },
- { "priority", 60 },
- { "view", 2 },
- { "loop", 3 },
- { "cel", 4 },
- { "brLeft", 17 },
- { "brRight", 19 },
- { "brTop", 16 },
- { "brBottom", 18 },
- { "xStep", 51 },
- { "yStep", 52 },
- { "nsBottom", 8 },
- { "nsTop", 6 },
- { "nsLeft", 7 },
- { "nsRight", 9 },
- { "font", 30 },
- { "text", 23 },
- { "type", 31 },
- { "state", 29 },
- { "doit", 57 },
- { "delete", 81 },
- { "signal", 14 },
- { "underBits", 5 },
- { "canBeHere", 450 },
- { "client", 42 },
- { "dx", 43 },
- { "dy", 44 },
- { "xStep", 51 },
- { "yStep", 52 },
- { "b-moveCnt", 45 },
- { "b-i1", 46 },
- { "b-i2", 47 },
- { "b-di", 48 },
- { "b-xAxis", 49 },
- { "b-incr", 50 },
- { "completed", 250 },
- { "illegalBits", 15 },
- { "dispose", 111 },
- { "prevSignal", 171 },
- { "message", 37 },
- { "modifiers", 61 },
- { "cue", 145 },
- { "owner", 172 },
- { "handle", 90 },
- { "number", 40 },
- { "max", 34 },
- { "cursor", 33 },
- { "claimed", 73 },
- { "wordFail", 68 },
- { "syntaxFail", 69 },
- { "cycler", 255 },
- { "elements", 24 },
- { "lsTop", 10 },
- { "lsBottom", 12 },
- { "lsLeft", 11 },
- { "lsRight", 13 },
- { "who", 36 },
- { "distance", 264 },
- { "mover", 56 },
- { "looper", 59 },
- { "isBlocked", 58 },
- { "heading", 55 },
- { "mode", 27 },
- { "caller", 143 },
- { "moveDone", 97 },
- { "vol", 94 },
- { "pri", 95 },
- { "min", 91 },
- { "sec", 92 },
- { "frame", 93 },
- { "dataInc", 89 },
- { "size", 86 },
- { "palette", 88 },
- { "moveSpeed", 53 },
- { "cantBeHere", 54 },
- { "nodePtr", 41 },
- { "flags", 99 },
- { "points", 87 },
- { "syncCue", 271 },
- { "syncTime", 270 },
- { "printLang", 84 },
- { "subtitleLang", 85 },
- { "parseLang", 83 },
- { "setVol", 178 }
+ { "parseLang", 83 }, { "printLang", 84 }, { "subtitleLang", 85 },
+ { "size", 86 }, { "points", 87 }, { "palette", 88 },
+ { "dataInc", 89 }, { "handle", 90 }, { "min", 91 },
+ { "sec", 92 }, { "frame", 93 }, { "vol", 94 },
+ { "pri", 95 }, { "moveDone", 97 }, { "flags", 99 },
+ { "init", 110 }, { "dispose", 111 }, { "cue", 145 },
+ { "owner", 172 }, { "completed", 250 }, { "canBeHere", 450 },
+ { "cycler", 255 }, { "distance", 264 }, { "caller", 143 },
+ { "syncCue", 271 }, { "syncTime", 270 }, { "setVol", 178 }
};
// Taken from Leisure Suit Larry 1 VGA (Full Game)
+// offset: 3, hascantbehere: true, hasNodePtr: true
static const SelectorRemap lsl1_demo_selectors[] = {
- { "init", 104 },
- { "play", 42 },
- { "replay", 65 },
- { "x", 4 },
- { "y", 3 },
- { "z", 85 },
- { "priority", 63 },
- { "view", 5 },
- { "loop", 6 },
- { "cel", 7 },
- { "brLeft", 20 },
- { "brRight", 22 },
- { "brTop", 19 },
- { "brBottom", 21 },
- { "xStep", 54 },
- { "yStep", 55 },
- { "nsBottom", 11 },
- { "nsTop", 9 },
- { "nsLeft", 10 },
- { "nsRight", 12 },
- { "font", 33 },
- { "text", 26 },
- { "type", 34 },
- { "state", 32 },
- { "doit", 60 },
- { "delete", 84 },
- { "signal", 17 },
- { "underBits", 8 },
- { "canBeHere", 232 },
- { "client", 45 },
- { "dx", 46 },
- { "dy", 47 },
- { "xStep", 54 },
- { "yStep", 55 },
- { "b-moveCnt", 48 },
- { "b-i1", 49 },
- { "b-i2", 50 },
- { "b-di", 51 },
- { "b-xAxis", 52 },
- { "b-incr", 53 },
- { "completed", 210 },
- { "illegalBits", 18 },
- { "dispose", 105 },
- { "prevSignal", 149 },
- { "message", 40 },
- { "modifiers", 64 },
- { "cue", 136 },
- { "owner", 150 },
- { "handle", 93 },
- { "number", 43 },
- { "max", 37 },
- { "cursor", 36 },
- { "claimed", 76 },
- { "wordFail", 71 },
- { "syntaxFail", 72 },
- { "cycler", 215 },
- { "elements", 27 },
- { "lsTop", 13 },
- { "lsBottom", 15 },
- { "lsLeft", 14 },
- { "lsRight", 16 },
- { "who", 39 },
- { "distance", 224 },
- { "mover", 59 },
- { "looper", 62 },
- { "isBlocked", 61 },
- { "heading", 58 },
- { "mode", 30 },
- { "caller", 134 },
- { "moveDone", 100 },
- { "vol", 97 },
- { "pri", 98 },
- { "min", 94 },
- { "sec", 95 },
- { "frame", 96 },
- { "dataInc", 92 },
- { "size", 89 },
- { "palette", 91 },
- { "moveSpeed", 56 },
- { "cantBeHere", 57 },
- { "nodePtr", 44 },
- { "flags", 102 },
- { "points", 90 },
- { "syncCue", 248 },
- { "syncTime", 247 },
- { "printLang", 87 },
- { "subtitleLang", 88 },
- { "parseLang", 86 },
- { "setVol", 156 },
- { "motionCue", 213 },
- { "setTarget", 221 },
- { "egoMoveSpeed", 370 }
-};
-
-// Taken from Codename: Iceman (Full Game)
-static const SelectorRemap iceman_demo_selectors[] = {
- { "init", 87 },
- { "play", 42 },
- { "replay", 65 },
- { "x", 4 },
- { "y", 3 },
- { "z", 85 },
- { "priority", 63 },
- { "view", 5 },
- { "loop", 6 },
- { "cel", 7 },
- { "brLeft", 20 },
- { "brRight", 22 },
- { "brTop", 19 },
- { "brBottom", 21 },
- { "xStep", 54 },
- { "yStep", 55 },
- { "nsBottom", 11 },
- { "nsTop", 9 },
- { "nsLeft", 10 },
- { "nsRight", 12 },
- { "font", 33 },
- { "text", 26 },
- { "type", 34 },
- { "state", 32 },
- { "doit", 60 },
- { "delete", 84 },
- { "signal", 17 },
- { "underBits", 8 },
- { "canBeHere", 57 },
- { "client", 45 },
- { "dx", 46 },
- { "dy", 47 },
- { "xStep", 54 },
- { "yStep", 55 },
- { "b-moveCnt", 48 },
- { "b-i1", 49 },
- { "b-i2", 50 },
- { "b-di", 51 },
- { "b-xAxis", 52 },
- { "b-incr", 53 },
- { "completed", 159 },
- { "illegalBits", 18 },
- { "dispose", 88 },
- { "prevSignal", 129 },
- { "message", 40 },
- { "modifiers", 64 },
- { "cue", 121 },
- { "owner", 130 },
- { "handle", 44 },
- { "number", 43 },
- { "max", 37 },
- { "cursor", 36 },
- { "claimed", 76 },
- { "wordFail", 71 },
- { "syntaxFail", 72 },
- { "cycler", 164 },
- { "elements", 27 },
- { "lsTop", 13 },
- { "lsBottom", 15 },
- { "lsLeft", 14 },
- { "lsRight", 16 },
- { "who", 39 },
- { "distance", 173 },
- { "mover", 59 },
- { "looper", 62 },
- { "isBlocked", 61 },
- { "heading", 58 },
- { "mode", 30 },
- { "caller", 119 },
- { "moveDone", 170 },
- { "size", 96 },
- { "moveSpeed", 56 },
- { "flags", 368 },
- { "points", 316 },
- { "motionCue", 162 },
- { "setTarget", 171 }
+ { "parseLang", 86 }, { "printLang", 87 }, { "subtitleLang", 88 },
+ { "size", 89 }, { "points", 90 }, { "palette", 91 },
+ { "dataInc", 92 }, { "handle", 93 }, { "min", 94 },
+ { "sec", 95 }, { "frame", 96 }, { "vol", 97 },
+ { "pri", 98 }, { "moveDone", 100 }, { "flags", 102 },
+ { "init", 104 }, { "dispose", 105 }, { "caller", 134 },
+ { "cue", 136 }, { "owner", 150 }, { "setVol", 156 },
+ { "completed", 210 }, { "motionCue", 213 }, { "cycler", 215 },
+ { "setTarget", 221 }, { "distance", 224 }, { "canBeHere", 232 },
+ { "syncTime", 247 }, { "syncCue", 248 }, { "egoMoveSpeed", 370 }
};
// Taken from Space Quest 1 VGA (Demo)
+// offset: 3, hascantbehere: false, hasNodePtr: true
static const SelectorRemap lsl5_demo_selectors[] = {
- { "init", 103 },
- { "play", 42 },
- { "replay", 65 },
- { "x", 4 },
- { "y", 3 },
- { "z", 85 },
- { "priority", 63 },
- { "view", 5 },
- { "loop", 6 },
- { "cel", 7 },
- { "brLeft", 20 },
- { "brRight", 22 },
- { "brTop", 19 },
- { "brBottom", 21 },
- { "xStep", 54 },
- { "yStep", 55 },
- { "nsBottom", 11 },
- { "nsTop", 9 },
- { "nsLeft", 10 },
- { "nsRight", 12 },
- { "font", 33 },
- { "text", 26 },
- { "type", 34 },
- { "state", 32 },
- { "doit", 60 },
- { "delete", 84 },
- { "signal", 17 },
- { "underBits", 8 },
- { "canBeHere", 57 },
- { "client", 45 },
- { "dx", 46 },
- { "dy", 47 },
- { "xStep", 54 },
- { "yStep", 55 },
- { "b-moveCnt", 48 },
- { "b-i1", 49 },
- { "b-i2", 50 },
- { "b-di", 51 },
- { "b-xAxis", 52 },
- { "b-incr", 53 },
- { "completed", 207 },
- { "illegalBits", 18 },
- { "dispose", 104 },
- { "prevSignal", 148 },
- { "message", 40 },
- { "modifiers", 64 },
- { "cue", 135 },
- { "owner", 149 },
- { "handle", 93 },
- { "number", 43 },
- { "max", 37 },
- { "cursor", 36 },
- { "claimed", 76 },
- { "wordFail", 71 },
- { "syntaxFail", 72 },
- { "cycler", 212 },
- { "elements", 27 },
- { "lsTop", 13 },
- { "lsBottom", 15 },
- { "lsLeft", 14 },
- { "lsRight", 16 },
- { "who", 39 },
- { "distance", 221 },
- { "mover", 59 },
- { "looper", 62 },
- { "isBlocked", 61 },
- { "heading", 58 },
- { "mode", 30 },
- { "caller", 133 },
- { "moveDone", 100 },
- { "vol", 97 },
- { "pri", 98 },
- { "min", 94 },
- { "sec", 95 },
- { "frame", 96 },
- { "dataInc", 92 },
- { "size", 89 },
- { "palette", 91 },
- { "moveSpeed", 56 },
- { "nodePtr", 44 },
- { "flags", 150 },
- { "points", 90 },
- { "printLang", 87 },
- { "subtitleLang", 88 },
- { "parseLang", 86 },
- { "motionCue", 210 },
- { "egoMoveSpeed", 357 }
+ { "parseLang", 86 }, { "printLang", 87 }, { "subtitleLang", 88 },
+ { "size", 89 }, { "points", 90 }, { "palette", 91 },
+ { "dataInc", 92 }, { "min", 94 }, { "sec", 95 },
+ { "frame", 96 }, { "vol", 97 }, { "pri", 98 },
+ { "moveDone", 100 }, { "init", 103 }, { "dispose", 104 },
+ { "caller", 133 }, { "cue", 135 }, { "owner", 149 },
+ { "flags", 150 }, { "completed", 207 }, { "motionCue", 210 },
+ { "cycler", 212 }, { "distance", 221 }, { "egoMoveSpeed", 357 }
};
// A macro for loading one of the above tables in the function below
#define USE_SELECTOR_TABLE(x) \
- do { \
- for (uint32 i = 0; i < ARRAYSIZE(x); i++) { \
- if (x[i].slot >= names.size()) \
- names.resize(x[i].slot + 1); \
- names[x[i].slot] = x[i].name; \
- } \
- } while (0)
+ for (uint32 i = 0; i < ARRAYSIZE(x); i++) { \
+ if (x[i].slot >= names.size()) \
+ names.resize(x[i].slot + 1); \
+ names[x[i].slot] = x[i].name; \
+ }
Common::StringList Kernel::checkStaticSelectorNames() {
Common::StringList names;
@@ -490,17 +151,23 @@ Common::StringList Kernel::checkStaticSelectorNames() {
Common::String gameID = ((SciEngine*)g_engine)->getGameID();
- if (gameID == "kq4sci")
+ if (gameID == "kq4sci") {
+ createFirstPart(names, 3, false, false);
USE_SELECTOR_TABLE(kq4_demo_selectors);
- else if (gameID == "lsl3" || gameID == "iceman") // identical, except iceman has "flags"
+ } else if (gameID == "lsl3" || gameID == "iceman") { // identical, except iceman has "flags"
+ createFirstPart(names, 3, false, false);
USE_SELECTOR_TABLE(iceman_demo_selectors);
- else if (gameID == "christmas1992")
+ } else if (gameID == "christmas1992") {
+ createFirstPart(names, 0, true, true);
USE_SELECTOR_TABLE(christmas1992_selectors);
- else if (gameID == "lsl1sci")
+ } else if (gameID == "lsl1sci") {
+ createFirstPart(names, 3, true, true);
USE_SELECTOR_TABLE(lsl1_demo_selectors);
- else if (gameID == "lsl5")
+ } else if (gameID == "lsl5") {
+ createFirstPart(names, 3, false, true);
USE_SELECTOR_TABLE(lsl5_demo_selectors);
-
+ }
+
return names;
}