aboutsummaryrefslogtreecommitdiff
path: root/engines/adl/adl_v5.cpp
diff options
context:
space:
mode:
authorWalter van Niftrik2017-02-18 22:24:23 +0100
committerWalter van Niftrik2017-02-19 12:33:43 +0100
commit2e3e425d5b34ca1e618d13433e6490cac7fd3ecf (patch)
tree0571f304d921b421db4a28b3aafd677f10a7a235 /engines/adl/adl_v5.cpp
parentdc04cd44343bb7252bca600300dd2d922647ab55 (diff)
downloadscummvm-rg350-2e3e425d5b34ca1e618d13433e6490cac7fd3ecf.tar.gz
scummvm-rg350-2e3e425d5b34ca1e618d13433e6490cac7fd3ecf.tar.bz2
scummvm-rg350-2e3e425d5b34ca1e618d13433e6490cac7fd3ecf.zip
ADL: Implement hires6 action opcode 0x12
Diffstat (limited to 'engines/adl/adl_v5.cpp')
-rw-r--r--engines/adl/adl_v5.cpp24
1 files changed, 22 insertions, 2 deletions
diff --git a/engines/adl/adl_v5.cpp b/engines/adl/adl_v5.cpp
index 011ef88848..31d0033dea 100644
--- a/engines/adl/adl_v5.cpp
+++ b/engines/adl/adl_v5.cpp
@@ -33,6 +33,22 @@ AdlEngine_v5::AdlEngine_v5(OSystem *syst, const AdlGameDescription *gd) :
AdlEngine_v4(syst, gd) {
}
+void AdlEngine_v5::initRoomState(RoomState &roomState) const {
+ roomState.picture = 0xff;
+ roomState.isFirstTime = 0xff;
+}
+
+void AdlEngine_v5::restoreRoomState(byte room) {
+ const RoomState &backup = getCurRegion().rooms[room - 1];
+
+ if (backup.isFirstTime != 0xff) {
+ getRoom(room).curPicture = getRoom(room).picture = backup.picture;
+
+ if (backup.isFirstTime != 1)
+ getRoom(room).isFirstTime = false;
+ }
+}
+
AdlEngine_v5::RegionChunkType AdlEngine_v5::getRegionChunkType(const uint16 addr) const {
switch (addr) {
case 0x7b00:
@@ -181,8 +197,12 @@ int AdlEngine_v5::o5_setTextMode(ScriptEnv &e) {
int AdlEngine_v5::o5_setRegionRoom(ScriptEnv &e) {
OP_DEBUG_2("\tSET_REGION_ROOM(%d, %d)", e.arg(1), e.arg(2));
- // TODO
- return 2;
+ getCurRoom().curPicture = getCurRoom().picture;
+ getCurRoom().isFirstTime = false;
+ switchRegion(e.arg(1));
+ _state.room = e.arg(2);
+ restoreRoomState(_state.room);
+ return -1;
}
int AdlEngine_v5::o_winGame(ScriptEnv &e) {