From 4b900edfeb984518d910bd46d85db4adc2061921 Mon Sep 17 00:00:00 2001 From: Travis Howell Date: Fri, 6 Oct 2006 15:16:56 +0000 Subject: Add more code for Elvira 2 svn-id: r24142 --- engines/agos/rooms.cpp | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) (limited to 'engines/agos/rooms.cpp') diff --git a/engines/agos/rooms.cpp b/engines/agos/rooms.cpp index c42180377f..2d9bce0588 100644 --- a/engines/agos/rooms.cpp +++ b/engines/agos/rooms.cpp @@ -30,6 +30,19 @@ using Common::File; namespace AGOS { +uint16 AGOSEngine::getBackExit(int n) { + switch (n) { + case 0:return 2; + case 1:return 3; + case 2:return 0; + case 3:return 1; + case 4:return 5; + case 5:return 4; + } + + return 0; +} + uint16 AGOSEngine::getDoorOf(Item *i, uint16 d) { SubGenExit *g; Item *x; @@ -116,6 +129,53 @@ uint16 AGOSEngine::getExitState(Item *i, uint16 x, uint16 d) { return n; } +void AGOSEngine::changeDoorState(SubRoom *r, uint16 d, uint16 n) { + uint16 mask=3; + d <<= 1; + mask <<= d; + n <<= d; + r->roomExitStates &= ~mask; + r->roomExitStates|= n; +} + +void AGOSEngine::setDoorState(Item *i, uint16 d, uint16 n) { + Item *j; + SubRoom *r, *r1; + uint16 d1; + uint16 y = 0; + + r = (SubRoom *)findChildOfType(i, 1); + if (r == NULL) + return; + d1 = d; + while (d > y) { + if (getDoorState(i, y) == 0) + d1--; + y++; + } + changeDoorState(r, d, n); + + j = derefItem(r->roomExit[d1]); + if (j == NULL) + return; + r1 = (SubRoom *)findChildOfType(j, 1); + if (r1 == NULL) + return; + d = getBackExit(d); + d1 = d; + y = 0; + while(d > y) { + if (getDoorState(j, y) == 0) + d1--; + y++; + } + /* Check are a complete exit pair */ + if (derefItem(r1->roomExit[d1]) != i) + return; + /* Change state of exit coming back */ + changeDoorState(r1, d, n); +} + void AGOSEngine::moveDirn_e1(Item *i, uint x) { Item *d, *p; uint16 n; -- cgit v1.2.3