From 3102ff4a1951ca0a3ca6446f8b5bc67849fe3d73 Mon Sep 17 00:00:00 2001 From: Walter van Niftrik Date: Sat, 19 Mar 2016 14:40:39 +0100 Subject: ADL: Clean up handling of room value 0xfc --- engines/adl/adl.cpp | 14 ++++++++++---- engines/adl/adl.h | 1 + engines/adl/adl_v2.cpp | 50 ++++++++++++-------------------------------------- engines/adl/adl_v2.h | 2 +- 4 files changed, 24 insertions(+), 43 deletions(-) (limited to 'engines/adl') diff --git a/engines/adl/adl.cpp b/engines/adl/adl.cpp index 9bd22f89c3..1f4ebcd4bb 100644 --- a/engines/adl/adl.cpp +++ b/engines/adl/adl.cpp @@ -347,6 +347,10 @@ bool AdlEngine::matchesCurrentPic(byte pic) const { return pic == getCurRoom().curPicture; } +byte AdlEngine::roomArg(byte room) const { + return room; +} + void AdlEngine::clearScreen() const { _display->setMode(DISPLAY_MODE_MIXED); _display->clear(0x00); @@ -857,7 +861,7 @@ void AdlEngine::getInput(uint &verb, uint &noun) { typedef Common::Functor1Mem OpcodeV1; int AdlEngine::o1_isItemInRoom(ScriptEnv &e) { - if (getItem(e.arg(1)).room == e.arg(2)) + if (getItem(e.arg(1)).room == roomArg(e.arg(2))) return 2; return -1; } @@ -980,9 +984,11 @@ int AdlEngine::o1_quit(ScriptEnv &e) { } int AdlEngine::o1_placeItem(ScriptEnv &e) { - getItem(e.arg(1)).room = e.arg(2); - getItem(e.arg(1)).position.x = e.arg(3); - getItem(e.arg(1)).position.y = e.arg(4); + Item &item = getItem(e.arg(1)); + + item.room = roomArg(e.arg(2)); + item.position.x = e.arg(3); + item.position.y = e.arg(4); return 4; } diff --git a/engines/adl/adl.h b/engines/adl/adl.h index ea6a51c68a..595386cb29 100644 --- a/engines/adl/adl.h +++ b/engines/adl/adl.h @@ -176,6 +176,7 @@ protected: virtual void setupOpcodeTables(); virtual bool matchesCurrentPic(byte pic) const; + virtual byte roomArg(byte room) const; // Opcodes int o1_isItemInRoom(ScriptEnv &e); diff --git a/engines/adl/adl_v2.cpp b/engines/adl/adl_v2.cpp index 3383a6307a..1a07d0e9ab 100644 --- a/engines/adl/adl_v2.cpp +++ b/engines/adl/adl_v2.cpp @@ -48,7 +48,7 @@ void AdlEngine_v2::setupOpcodeTables() { OpcodeUnImpl(); Opcode(o2_isFirstTime); Opcode(o2_isRandomGT); - Opcode(o2_isItemInRoom); + Opcode(o1_isItemInRoom); // 0x04 Opcode(o2_isNounNotInRoom); Opcode(o1_isMovesGT); @@ -104,6 +104,12 @@ bool AdlEngine_v2::matchesCurrentPic(byte pic) const { return pic == getCurRoom().curPicture || pic == IDI_ANY; } +byte AdlEngine_v2::roomArg(byte room) const { + if (room == IDI_CUR_ROOM) + return _state.room; + return room; +} + int AdlEngine_v2::o2_isFirstTime(ScriptEnv &e) { bool oldFlag = getCurRoom().isFirstTime; @@ -124,28 +130,11 @@ int AdlEngine_v2::o2_isRandomGT(ScriptEnv &e) { return -1; } -int AdlEngine_v2::o2_isItemInRoom(ScriptEnv &e) { - byte room = e.arg(2); - - if (room == IDI_CUR_ROOM) - room = _state.room; - - if (getItem(e.arg(1)).room == room) - return 2; - - return -1; -} - 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)) + if (item->noun == e.getNoun() && (item->room == roomArg(e.arg(1)))) return -1; return 1; @@ -161,10 +150,7 @@ int AdlEngine_v2::o2_isCarryingSomething(ScriptEnv &e) { } int AdlEngine_v2::o2_moveItem(ScriptEnv &e) { - byte room = e.arg(2); - - if (room == IDI_CUR_ROOM) - room = _state.room; + byte room = roomArg(e.arg(2)); Item &item = getItem(e.arg(1)); @@ -177,15 +163,8 @@ int AdlEngine_v2::o2_moveItem(ScriptEnv &e) { } int AdlEngine_v2::o2_moveAllItems(ScriptEnv &e) { - byte room1 = e.arg(1); - - if (room1 == IDI_CUR_ROOM) - room1 = _state.room; - - byte room2 = e.arg(2); - - if (room2 == IDI_CUR_ROOM) - room2 = _state.room; + byte room1 = roomArg(e.arg(1)); + byte room2 = roomArg(e.arg(2)); Common::Array::iterator item; @@ -200,14 +179,9 @@ int AdlEngine_v2::o2_moveAllItems(ScriptEnv &e) { } int AdlEngine_v2::o2_placeItem(ScriptEnv &e) { - byte room = e.arg(2); - - if (room == IDI_CUR_ROOM) - room = _state.room; - Item &item = getItem(e.arg(1)); - item.room = room; + item.room = roomArg(e.arg(2)); item.position.x = e.arg(3); item.position.y = e.arg(4); item.state = IDI_ITEM_NOT_MOVED; diff --git a/engines/adl/adl_v2.h b/engines/adl/adl_v2.h index d6c18e19c3..e21c43c107 100644 --- a/engines/adl/adl_v2.h +++ b/engines/adl/adl_v2.h @@ -46,10 +46,10 @@ protected: virtual void setupOpcodeTables(); bool matchesCurrentPic(byte pic) const; + byte roomArg(byte room) const; int o2_isFirstTime(ScriptEnv &e); int o2_isRandomGT(ScriptEnv &e); - int o2_isItemInRoom(ScriptEnv &e); int o2_isNounNotInRoom(ScriptEnv &e); int o2_isCarryingSomething(ScriptEnv &e); int o2_moveAllItems(ScriptEnv &e); -- cgit v1.2.3