[Scummvm-cvs-logs] SF.net SVN: scummvm: [24193] scummvm/trunk/engines/agos
kirben at users.sourceforge.net
kirben at users.sourceforge.net
Sun Oct 8 10:35:40 CEST 2006
Revision: 24193
http://svn.sourceforge.net/scummvm/?rev=24193&view=rev
Author: kirben
Date: 2006-10-08 01:35:25 -0700 (Sun, 08 Oct 2006)
Log Message:
-----------
Add opcode for Elvira 1 and remove errors that don't occur in original games
Modified Paths:
--------------
scummvm/trunk/engines/agos/agos.h
scummvm/trunk/engines/agos/debug.h
scummvm/trunk/engines/agos/items.cpp
scummvm/trunk/engines/agos/rooms.cpp
Modified: scummvm/trunk/engines/agos/agos.h
===================================================================
--- scummvm/trunk/engines/agos/agos.h 2006-10-08 08:18:33 UTC (rev 24192)
+++ scummvm/trunk/engines/agos/agos.h 2006-10-08 08:35:25 UTC (rev 24193)
@@ -1068,6 +1068,7 @@
void oe1_setUserItem();
void oe1_getUserItem();
void oe1_whereTo();
+ void oe1_doorExit();
void oe1_clearUserItem();
void oe1_findMaster();
void oe1_nextMaster();
Modified: scummvm/trunk/engines/agos/debug.h
===================================================================
--- scummvm/trunk/engines/agos/debug.h 2006-10-08 08:18:33 UTC (rev 24192)
+++ scummvm/trunk/engines/agos/debug.h 2006-10-08 08:35:25 UTC (rev 24193)
@@ -64,7 +64,7 @@
NULL,
/* 28 */
NULL,
- NULL,
+ "WJ|CHANCE",
"IJ|IS_PLAYER",
NULL,
/* 32 */
@@ -254,9 +254,9 @@
NULL,
/* 180 */
"IWW|WHERE_TO",
+ "IIW|DOOR_EXIT",
NULL,
NULL,
- NULL,
/* 184 */
NULL,
NULL,
Modified: scummvm/trunk/engines/agos/items.cpp
===================================================================
--- scummvm/trunk/engines/agos/items.cpp 2006-10-08 08:18:33 UTC (rev 24192)
+++ scummvm/trunk/engines/agos/items.cpp 2006-10-08 08:35:25 UTC (rev 24193)
@@ -270,6 +270,7 @@
op[178] = &AGOSEngine::oe1_clearUserItem;
op[180] = &AGOSEngine::oe1_whereTo;
+ op[181] = &AGOSEngine::oe1_doorExit;
op[198] = &AGOSEngine::o_comment;
@@ -1072,47 +1073,30 @@
void AGOSEngine::o_getParent() {
// 90: set minusitem to parent
- Item *item = derefItem(getNextItemPtr()->parent);
- switch (getVarOrByte()) {
- case 0:
- _objectItem = item;
- break;
- case 1:
- _subjectItem = item;
- break;
- default:
- error("o_getParent: invalid subcode");
- }
+ Item *i = getNextItemPtr();
+ if (getVarOrByte() == 1)
+ _subjectItem = derefItem(i->parent);
+ else
+ _objectItem = derefItem(i->parent);
}
void AGOSEngine::o_getNext() {
// 91: set minusitem to next
- Item *item = derefItem(getNextItemPtr()->next);
- switch (getVarOrByte()) {
- case 0:
- _objectItem = item;
- break;
- case 1:
- _subjectItem = item;
- break;
- default:
- error("o_getNext: invalid subcode");
- }
+ Item *i = getNextItemPtr();
+ if (getVarOrByte() == 1)
+ _subjectItem = derefItem(i->next);
+ else
+ _objectItem = derefItem(i->next);
}
void AGOSEngine::o_getChildren() {
// 92: set minusitem to child
- Item *item = derefItem(getNextItemPtr()->child);
- switch (getVarOrByte()) {
- case 0:
- _objectItem = item;
- break;
- case 1:
- _subjectItem = item;
- break;
- default:
- error("o_getChildren: invalid subcode");
- }
+ Item *i = getNextItemPtr();
+ if (getVarOrByte() == 1)
+ _subjectItem = derefItem(i->child);
+
+ else
+ _objectItem = derefItem(i->child);
}
void AGOSEngine::o_picture() {
@@ -1972,8 +1956,8 @@
void AGOSEngine::oe1_whereTo() {
// 180: where to
Item *i = getNextItemPtr();
- int16 d = getVarOrByte();
- int16 f = getVarOrByte();
+ int16 d = getVarOrWord();
+ int16 f = getVarOrWord();
if (f == 1)
_subjectItem = derefItem(getExitOf_e1(i, d));
@@ -1981,6 +1965,31 @@
_objectItem = derefItem(getExitOf_e1(i, d));
}
+void AGOSEngine::oe1_doorExit() {
+ // 181: door exit
+ Item *x;
+ Item *a = (Item *)-1;
+ SubUserChain *c;
+ Item *i = getNextItemPtr();
+ Item *d = getNextItemPtr();
+ int16 f = getVarOrWord();
+ int16 ct = 0;
+
+
+ c = (SubUserChain *)findChildOfType(d, 8);
+ if (c)
+ a = derefItem(c->chChained);
+ while (ct < 6) {
+ x = derefItem(getDoorOf(i, ct));
+ if ((x == d) | (x == a)) {
+ writeVariable(f, ct);
+ return;
+ }
+ ct++;
+ }
+ writeVariable(f, 255);
+}
+
void AGOSEngine::oe1_clearUserItem() {
// 178: clear user item
Item *i = getNextItemPtr();
@@ -3091,6 +3100,7 @@
if (opcode == 203) {
flag = true;
opcode = getVarOrWord();
+ debug(1, "runScript: opcode %d", opcode);
if (opcode == 10000)
return 0;
}
Modified: scummvm/trunk/engines/agos/rooms.cpp
===================================================================
--- scummvm/trunk/engines/agos/rooms.cpp 2006-10-08 08:18:33 UTC (rev 24192)
+++ scummvm/trunk/engines/agos/rooms.cpp 2006-10-08 08:35:25 UTC (rev 24193)
@@ -54,7 +54,7 @@
x = derefItem(g->dest[d]);
if (x == NULL)
return 0;
- if (findChildOfType(x, 1))
+ if (isRoom(x))
return 0;
return itemPtrToID(x);
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Scummvm-git-logs
mailing list