aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Gilbert2014-08-19 20:43:32 -0400
committerPaul Gilbert2014-08-19 20:43:32 -0400
commit23a442443f22f63a32e602b4e796981dbb9ee561 (patch)
tree04d43b8ddf76b0b35a284f73c3c12c8f5c53e0cd
parent6066afb020b6213bc6f9ef5ba5c3d7171c695340 (diff)
downloadscummvm-rg350-23a442443f22f63a32e602b4e796981dbb9ee561.tar.gz
scummvm-rg350-23a442443f22f63a32e602b4e796981dbb9ee561.tar.bz2
scummvm-rg350-23a442443f22f63a32e602b4e796981dbb9ee561.zip
ACCESS: Implemented cmdNewRoom opcode
-rw-r--r--engines/access/access.cpp6
-rw-r--r--engines/access/access.h2
-rw-r--r--engines/access/scripts.cpp16
-rw-r--r--engines/access/scripts.h2
4 files changed, 23 insertions, 3 deletions
diff --git a/engines/access/access.cpp b/engines/access/access.cpp
index 71271230dd..6fcd64ecca 100644
--- a/engines/access/access.cpp
+++ b/engines/access/access.cpp
@@ -338,4 +338,10 @@ void AccessEngine::doLoadSave() {
error("TODO: doLoadSave");
}
+void AccessEngine::freeChar() {
+ _scripts->freeScriptData();
+ _animation->clearTimers();
+ _animation->freeAnimationData();
+}
+
} // End of namespace Access
diff --git a/engines/access/access.h b/engines/access/access.h
index f775310805..8cb1e72cfc 100644
--- a/engines/access/access.h
+++ b/engines/access/access.h
@@ -227,6 +227,8 @@ public:
void copyBF2Vid();
void doLoadSave();
+
+ void freeChar();
};
} // End of namespace Access
diff --git a/engines/access/scripts.cpp b/engines/access/scripts.cpp
index 57f5788022..3a3fb06b1a 100644
--- a/engines/access/scripts.cpp
+++ b/engines/access/scripts.cpp
@@ -99,7 +99,7 @@ void Scripts::executeCommand(int commandIndex) {
&Scripts::cmdPrint, &Scripts::cmdRetPos, &Scripts::cmdAnim,
&Scripts::cmdSetFlag, &Scripts::cmdCheckFlag, &Scripts::cmdGoto,
&Scripts::cmdSetInventory, &Scripts::cmdSetInventory, &Scripts::cmdCheckInventory,
- &Scripts::cmdSetTex, &Scripts::CMDNEWROOM, &Scripts::CMDCONVERSE,
+ &Scripts::cmdSetTex, &Scripts::cmdNewRoom, &Scripts::CMDCONVERSE,
&Scripts::cmdCheckFrame, &Scripts::cmdCheckAnim, &Scripts::cmdSnd,
&Scripts::cmdRetNeg, &Scripts::cmdRetPos, &Scripts::cmdCheckLoc,
&Scripts::cmdSetAnim, &Scripts::cmdDispInv, &Scripts::cmdSetTimer,
@@ -296,7 +296,19 @@ void Scripts::cmdSetTex() {
_vm->_room->setWallCodes();
}
-void Scripts::CMDNEWROOM() { error("TODO CMDNEWROOM"); }
+#define CURRENT_ROOM 0xFF
+
+void Scripts::cmdNewRoom() {
+ int roomNumber = _data->readByte();
+ if (roomNumber != CURRENT_ROOM)
+ _vm->_player->_roomNumber = roomNumber;
+
+ _vm->_room->_function = 1;
+ _vm->freeChar();
+ _vm->_converseMode = 0;
+ cmdRetPos();
+}
+
void Scripts::CMDCONVERSE() { error("TODO CMDCONVERSE"); }
void Scripts::cmdCheckFrame() {
diff --git a/engines/access/scripts.h b/engines/access/scripts.h
index 40f667a2f1..4b224c32bd 100644
--- a/engines/access/scripts.h
+++ b/engines/access/scripts.h
@@ -78,7 +78,7 @@ protected:
void cmdSetInventory();
void cmdCheckInventory();
void cmdSetTex();
- void CMDNEWROOM();
+ void cmdNewRoom();
void CMDCONVERSE();
void cmdCheckFrame();
void cmdCheckAnim();