aboutsummaryrefslogtreecommitdiff
path: root/engines/agos/menus.cpp
diff options
context:
space:
mode:
authorTravis Howell2006-10-16 11:20:20 +0000
committerTravis Howell2006-10-16 11:20:20 +0000
commita833a2fb8e68e994d35f37317ac74da0dd931656 (patch)
treee10cbaaa73820c18406dfcf4ceeacdf2f9fcd3d5 /engines/agos/menus.cpp
parenta965e8140c166940f691b85d62c69272a6efefe2 (diff)
downloadscummvm-rg350-a833a2fb8e68e994d35f37317ac74da0dd931656.tar.gz
scummvm-rg350-a833a2fb8e68e994d35f37317ac74da0dd931656.tar.bz2
scummvm-rg350-a833a2fb8e68e994d35f37317ac74da0dd931656.zip
Enable menus in Elvira 2
svn-id: r24349
Diffstat (limited to 'engines/agos/menus.cpp')
-rw-r--r--engines/agos/menus.cpp52
1 files changed, 39 insertions, 13 deletions
diff --git a/engines/agos/menus.cpp b/engines/agos/menus.cpp
index 4159ae3c50..daefa4dc18 100644
--- a/engines/agos/menus.cpp
+++ b/engines/agos/menus.cpp
@@ -123,15 +123,35 @@ void AGOSEngine::drawMenuStrip(uint windowNum, uint menuNum) {
mouseOn();
}
-// Waxworks specific?
-uint AGOSEngine::menuFor(Item *item, uint id) {
- if (id != 0xFFFF && id < 10 && _textMenu[id] != 0) {
+// Elvira 2 specific
+uint AGOSEngine::menuFor_e2(Item *item, uint id) {
+ if (id = 0 || id == 2462 || id == 2480)
+ return 0xFFFF;
+
+ SubObject *subObject = (SubObject *)findChildOfType(item, 2);
+ if (subObject != NULL && subObject->objectFlags & kOFMenu) {
+ uint offs = getOffsetOfChild2Param(subObject, kOFMenu);
+ return subObject->objectFlagValue[offs];
+ }
+
+ return _agosMenu;
+}
+
+// Waxworks specific
+uint AGOSEngine::menuFor_ww(Item *item, uint id) {
+ if (id != 0xFFFF && id < 10 && _textMenu[id] != 0)
return _textMenu[id];
- } else {
- // TODO
+
+ if (item == NULL || itemPtrToID(item) == 542 || itemPtrToID(item) == 558)
+ return _agosMenu;
+
+ SubObject *subObject = (SubObject *)findChildOfType(item, 2);
+ if (subObject != NULL && subObject->objectFlags & kOFMenu) {
+ uint offs = getOffsetOfChild2Param(subObject, kOFMenu);
+ return subObject->objectFlagValue[offs];
}
- return 0;
+ return _agosMenu;
}
void AGOSEngine::clearMenuStrip() {
@@ -143,13 +163,15 @@ void AGOSEngine::clearMenuStrip() {
set_video_mode_internal(2, 101);
}
+// Elvira 2 and Waxworks specific
void AGOSEngine::doMenuStrip(uint menuNum) {
- int i;
+ uint i;
+ const uint var = (getGameType() == GType_WW) ? 11 : 1;
for (i = 111; i != 115; i++)
disableBox(i);
- for (i = 11; i != 16; i++)
+ for (i = var; i != (var + 5); i++)
_variableArray[i] = 0;
byte *srcPtr = _menuBase;
@@ -160,11 +182,11 @@ void AGOSEngine::doMenuStrip(uint menuNum) {
}
uint id = 111;
- uint var = 11;
+ uint v = var;
while (READ_BE_UINT16(srcPtr) != 0) {
uint verb = READ_BE_UINT16(srcPtr);
- _variableArray[var] = verb;
+ _variableArray[v] = verb;
HitArea *ha = findBox(id);
if (ha != NULL) {
@@ -174,11 +196,15 @@ void AGOSEngine::doMenuStrip(uint menuNum) {
id++;
srcPtr += 2;
- var++;
+ v++;
}
- _variableArray[15] = id - 111;
- set_video_mode_internal(2, 102);
+ _variableArray[var + 4] = id - 111;
+ if (getGameType() == GType_WW) {
+ set_video_mode_internal(2, 102);
+ } else {
+ set_video_mode_internal(2, 103);
+ }
}
} // End of namespace AGOS