diff options
author | Walter van Niftrik | 2017-02-18 22:24:23 +0100 |
---|---|---|
committer | Walter van Niftrik | 2017-02-19 12:33:43 +0100 |
commit | 2e3e425d5b34ca1e618d13433e6490cac7fd3ecf (patch) | |
tree | 0571f304d921b421db4a28b3aafd677f10a7a235 /engines/adl/adl_v5.cpp | |
parent | dc04cd44343bb7252bca600300dd2d922647ab55 (diff) | |
download | scummvm-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.cpp | 24 |
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) { |