From 6810993828452e3af46839a84cb8b80fe3d1fc38 Mon Sep 17 00:00:00 2001 From: Travis Howell Date: Tue, 24 Oct 2006 07:44:37 +0000 Subject: Add more menu code for Elvira 1 svn-id: r24486 --- engines/agos/agos.h | 9 ++++-- engines/agos/input.cpp | 12 ++++--- engines/agos/items.cpp | 16 ++++++++++ engines/agos/menus.cpp | 69 +++++++++++++++++++++++++++++++++++++++-- engines/agos/midiparser_s1d.cpp | 4 +-- 5 files changed, 99 insertions(+), 11 deletions(-) (limited to 'engines/agos') diff --git a/engines/agos/agos.h b/engines/agos/agos.h index 089dfa5961..4e07716932 100644 --- a/engines/agos/agos.h +++ b/engines/agos/agos.h @@ -561,6 +561,7 @@ protected: void loadVoice(uint speechId); int getUserFlag(Item *item, int a); + int getUserFlag1(Item *item, int a); int getUserItem(Item *item, int n); void setUserFlag(Item *item, int a, int b); void setUserItem(Item *item, int n, int m); @@ -696,11 +697,15 @@ protected: int weightOf(Item *x); void xPlace(Item *x, Item *y); - uint menuFor_e2(Item *item, uint id); + void drawMenuStrip(uint windowNum, uint menuNum); + void lightMenuStrip(int a); + void unlightMenuStrip(); + void lightMenuBox(uint hitarea); + + uint menuFor_e2(Item *item); uint menuFor_ww(Item *item, uint id); void clearMenuStrip(); void doMenuStrip(uint menuNum); - void drawMenuStrip(uint windowNum, uint menuNum); void checkLinkBox(); void hyperLinkOn(uint16 x); diff --git a/engines/agos/input.cpp b/engines/agos/input.cpp index 2c76d2f7e1..0f9c186e4a 100644 --- a/engines/agos/input.cpp +++ b/engines/agos/input.cpp @@ -170,7 +170,7 @@ void AGOSEngine::waitForInput() { _leftButtonDown = 0; _lastHitArea = 0; - _lastClickRem = 0; + //_lastClickRem = 0; _verbHitArea = 0; _hitAreaSubjectItem = NULL; _hitAreaObjectItem = NULL; @@ -263,10 +263,12 @@ startOver: break; } - if (getGameType() == GType_ELVIRA2) - doMenuStrip(menuFor_e2(ha->item_ptr, id)); - else if (getGameType() == GType_WW) + if (getGameType() == GType_WW) doMenuStrip(menuFor_ww(ha->item_ptr, id)); + else if (getGameType() == GType_ELVIRA2) + doMenuStrip(menuFor_e2(ha->item_ptr)); + else if (getGameType() == GType_ELVIRA1) + lightMenuStrip(getUserFlag1(ha->item_ptr, 6)); } else { // else 1 if (ha->verb == 0) { @@ -303,6 +305,8 @@ startOver: out_of_here: if (getGameType() == GType_ELVIRA2 || getGameType() == GType_WW) clearMenuStrip(); + else if (getGameType() == GType_ELVIRA1) + unlightMenuStrip(); _nameLocked = 0; _needHitAreaRecalc++; diff --git a/engines/agos/items.cpp b/engines/agos/items.cpp index 6d5e869038..64d8f639de 100644 --- a/engines/agos/items.cpp +++ b/engines/agos/items.cpp @@ -130,6 +130,22 @@ int AGOSEngine::getUserFlag(Item *item, int a) { return subUserFlag->userFlags[a]; } +int AGOSEngine::getUserFlag1(Item *item, int a) { + SubUserFlag *subUserFlag; + + if (item == NULL || item == _dummyItem2 || item == _dummyItem3) + return -1; + + subUserFlag = (SubUserFlag *) findChildOfType(item, 9); + if (subUserFlag == NULL) + return 0; + + if (a < 0 || a > 7) + return 0; + + return subUserFlag->userFlags[a]; +} + void AGOSEngine::setUserFlag(Item *item, int a, int b) { SubUserFlag *subUserFlag; diff --git a/engines/agos/menus.cpp b/engines/agos/menus.cpp index 6ef180b4f8..5383306fe9 100644 --- a/engines/agos/menus.cpp +++ b/engines/agos/menus.cpp @@ -123,9 +123,72 @@ void AGOSEngine::drawMenuStrip(uint windowNum, uint menuNum) { mouseOn(); } +void AGOSEngine::lightMenuStrip(int a) { + mouseOff(); + unlightMenuStrip(); + + for (int i = 120; i != 130; i++) { + if (a == 0) + break; + + if (a & (1 << i - 120)) { + enableBox(i); + lightMenuBox(i); + } + } + + mouseOn(); +} + +void AGOSEngine::unlightMenuStrip() { + byte *src; + int w, h, i; + + mouseOff(); + + src = getFrontBuf() + 2832; + w = 48; + h = 82; + + do { + for (i = 0; i != w; ++i) { + if (src[i] != 0) + src[i] = 14; + } + src += _dxSurfacePitch; + } while (--h); + + for (i = 120; i != 130; i++) + disableBox(i); + + mouseOn(); +} + +void AGOSEngine::lightMenuBox(uint hitarea) { + HitArea *ha = findBox(hitarea); + byte *src; + int w, h, i; + + mouseOff(); + + src = getFrontBuf() + ha->y * _dxSurfacePitch + ha->x; + w = ha->width; + h = ha->height; + + do { + for (i = 0; i != w; ++i) { + if (src[i] == 14) + src[i] = 15; + } + src += _dxSurfacePitch; + } while (--h); + + mouseOn(); +} + // Elvira 2 specific -uint AGOSEngine::menuFor_e2(Item *item, uint id) { - if (id == 0 || id == 2462 || id == 2480) +uint AGOSEngine::menuFor_e2(Item *item) { + if (item == NULL || item == _dummyItem2 || item == _dummyItem3) return 0xFFFF; SubObject *subObject = (SubObject *)findChildOfType(item, 2); @@ -142,7 +205,7 @@ uint AGOSEngine::menuFor_ww(Item *item, uint id) { if (id != 0xFFFF && id < 10 && _textMenu[id] != 0) return _textMenu[id]; - if (item == NULL || itemPtrToID(item) == 542 || itemPtrToID(item) == 558) + if (item == NULL || item == _dummyItem2 || item == _dummyItem3) return _agosMenu; SubObject *subObject = (SubObject *)findChildOfType(item, 2); diff --git a/engines/agos/midiparser_s1d.cpp b/engines/agos/midiparser_s1d.cpp index 8146d8c805..949224202b 100644 --- a/engines/agos/midiparser_s1d.cpp +++ b/engines/agos/midiparser_s1d.cpp @@ -144,12 +144,12 @@ void MidiParser_S1D::parseNextEvent(EventInfo &info) { _position._play_pos += info.length; break; default: - debug(0, "MidiParser_S1D: Unexpected type 0x%02X found", (int) info.event); + debug(10, "MidiParser_S1D: Unexpected type 0x%02X found", (int) info.event); break; } break; default: - debug(0, "MidiParser_S1D: Unexpected event 0x%02X found", (int) info.command()); + debug(10, "MidiParser_S1D: Unexpected event 0x%02X found", (int) info.command()); break; } } -- cgit v1.2.3