aboutsummaryrefslogtreecommitdiff
path: root/engines/agos
diff options
context:
space:
mode:
authorTravis Howell2006-10-24 07:44:37 +0000
committerTravis Howell2006-10-24 07:44:37 +0000
commit6810993828452e3af46839a84cb8b80fe3d1fc38 (patch)
treec38388361cbfed661dc893a3bc961ee40427c09f /engines/agos
parent3197cb6a2389000ec47bf9d27056403b98ceb0b8 (diff)
downloadscummvm-rg350-6810993828452e3af46839a84cb8b80fe3d1fc38.tar.gz
scummvm-rg350-6810993828452e3af46839a84cb8b80fe3d1fc38.tar.bz2
scummvm-rg350-6810993828452e3af46839a84cb8b80fe3d1fc38.zip
Add more menu code for Elvira 1
svn-id: r24486
Diffstat (limited to 'engines/agos')
-rw-r--r--engines/agos/agos.h9
-rw-r--r--engines/agos/input.cpp12
-rw-r--r--engines/agos/items.cpp16
-rw-r--r--engines/agos/menus.cpp69
-rw-r--r--engines/agos/midiparser_s1d.cpp4
5 files changed, 99 insertions, 11 deletions
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;
}
}