From a80a6b5208e27d47b62675928b2ae6905eef13c1 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 12 Sep 2020 22:05:09 -0700 Subject: [PATCH] GLK: COMPREHEND: Added OBJECT_CAN_TAKE opcode --- engines/glk/comprehend/debugger_dumper.cpp | 1 + engines/glk/comprehend/game.cpp | 5 +++++ engines/glk/comprehend/game_data.h | 3 ++- engines/glk/comprehend/opcode_map.cpp | 1 + 4 files changed, 9 insertions(+), 1 deletion(-) diff --git a/engines/glk/comprehend/debugger_dumper.cpp b/engines/glk/comprehend/debugger_dumper.cpp index 0f347c1a8cf..bd8d6ea871b 100644 --- a/engines/glk/comprehend/debugger_dumper.cpp +++ b/engines/glk/comprehend/debugger_dumper.cpp @@ -108,6 +108,7 @@ DebuggerDumper::DebuggerDumper() : _game(nullptr) { _opcodes[OPCODE_DRAW_OBJECT] = "draw_object"; _opcodes[OPCODE_WAIT_KEY] = "wait_key"; _opcodes[OPCODE_TEST_FALSE] = "test_false"; + _opcodes[OPCODE_OBJECT_CAN_TAKE] = "object_can_take"; } Common::String DebuggerDumper::dumpInstruction(ComprehendGame *game, diff --git a/engines/glk/comprehend/game.cpp b/engines/glk/comprehend/game.cpp index fca1fd83efc..d84237af034 100644 --- a/engines/glk/comprehend/game.cpp +++ b/engines/glk/comprehend/game.cpp @@ -733,6 +733,11 @@ void ComprehendGame::eval_instruction(FunctionState *func_state, func_set_test_result(func_state, !item || item->_room != _currentRoom); break; + case OPCODE_OBJECT_CAN_TAKE: + item = get_item(instr->_operand[0] - 1); + func_set_test_result(func_state, item->_flags & ITEMF_CAN_TAKE); + break; + case OPCODE_CURRENT_OBJECT_NOT_IN_ROOM: item = get_item_by_noun(noun); func_set_test_result(func_state, !item || item->_room != _currentRoom); diff --git a/engines/glk/comprehend/game_data.h b/engines/glk/comprehend/game_data.h index 3f1b011c39a..b1611a8c1b0 100644 --- a/engines/glk/comprehend/game_data.h +++ b/engines/glk/comprehend/game_data.h @@ -126,7 +126,8 @@ enum { OPCODE_TEST_FALSE, OPCODE_CAN_TAKE, OPCODE_TOO_HEAVY, - OPCODE_NOT_MAX_WEIGHT + OPCODE_NOT_MAX_WEIGHT, + OPCODE_OBJECT_CAN_TAKE }; /* Game state update flags */ diff --git a/engines/glk/comprehend/opcode_map.cpp b/engines/glk/comprehend/opcode_map.cpp index 319b3fd907d..3778a211b09 100644 --- a/engines/glk/comprehend/opcode_map.cpp +++ b/engines/glk/comprehend/opcode_map.cpp @@ -122,6 +122,7 @@ void OpcodeMap::loadVersion2() { _opcodeMap[0x20] = OPCODE_HAVE_CURRENT_OBJECT; _opcodeMap[0x21] = OPCODE_OBJECT_PRESENT; _opcodeMap[0x22] = OPCODE_OBJECT_IN_ROOM; + _opcodeMap[0x2d] = OPCODE_OBJECT_CAN_TAKE; _opcodeMap[0x30] = OPCODE_CURRENT_OBJECT_PRESENT; _opcodeMap[0x31] = OPCODE_TEST_ROOM_FLAG; _opcodeMap[0x38] = OPCODE_INVENTORY_FULL;