From 8d1901c39bbfd22ff3540e2db68897f2aae652d9 Mon Sep 17 00:00:00 2001 From: Walter van Niftrik Date: Fri, 18 Mar 2016 22:52:22 +0100 Subject: ADL: Implement hires2 cond opcodes 0x01 and 0x04 --- engines/adl/adl_v2.cpp | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) (limited to 'engines/adl/adl_v2.cpp') diff --git a/engines/adl/adl_v2.cpp b/engines/adl/adl_v2.cpp index 6c6a710a55..7560504c3c 100644 --- a/engines/adl/adl_v2.cpp +++ b/engines/adl/adl_v2.cpp @@ -43,7 +43,7 @@ void AdlEngine_v2::setupOpcodeTables() { OpcodeUnImpl(); Opcode(o2_isItemInRoom); // 0x04 - OpcodeUnImpl(); + Opcode(o2_isNounNotInRoom); Opcode(o1_isMovesGrEq); Opcode(o1_isVarEq); OpcodeUnImpl(); @@ -93,6 +93,17 @@ void AdlEngine_v2::setupOpcodeTables() { Opcode(o1_setRoomPic); } +int AdlEngine_v2::o2_isFirstTime(ScriptEnv &e) { + bool oldFlag = getCurRoom().isFirstTime; + + getCurRoom().isFirstTime = false; + + if (!oldFlag) + return -1; + + return 0; +} + int AdlEngine_v2::o2_isItemInRoom(ScriptEnv &e) { byte room = e.arg(2); @@ -105,6 +116,21 @@ int AdlEngine_v2::o2_isItemInRoom(ScriptEnv &e) { return 2; } +int AdlEngine_v2::o2_isNounNotInRoom(ScriptEnv &e) { + Common::Array::const_iterator item; + + byte room = e.arg(1); + + if (room == IDI_CUR_ROOM) + room = _state.room; + + for (item = _state.items.begin(); item != _state.items.end(); ++item) + if (item->noun == e.getNoun() && (item->room == room)) + return -1; + + return 1; +} + int AdlEngine_v2::o2_moveItem(ScriptEnv &e) { byte room = e.arg(2); -- cgit v1.2.3