GLK: COMPREHEND: Added VAR_GTE opcodes

This commit is contained in:
Paul Gilbert 2020-09-12 21:33:34 -07:00
parent 7451fc50d3
commit 9e4d151b8a
4 changed files with 19 additions and 0 deletions

View File

@ -53,6 +53,8 @@ DebuggerDumper::DebuggerDumper() : _game(nullptr) {
_opcodes[OPCODE_OR] = "or";
_opcodes[OPCODE_IN_ROOM] = "in_room";
_opcodes[OPCODE_VAR_EQ] = "var_eq";
_opcodes[OPCODE_VAR_GTE1] = "var_gte1";
_opcodes[OPCODE_VAR_GTE2] = "var_gte2";
_opcodes[OPCODE_CURRENT_OBJECT_NOT_VALID] = "current_object_not_valid";
_opcodes[OPCODE_INVENTORY_FULL] = "inventory_full";
_opcodes[OPCODE_OBJECT_PRESENT] = "object_present";

View File

@ -630,6 +630,18 @@ void ComprehendGame::eval_instruction(FunctionState *func_state,
_variables[instr->_operand[1]]);
break;
case OPCODE_VAR_GTE1:
func_set_test_result(func_state,
_variables[0] >=
_variables[instr->_operand[0]]);
break;
case OPCODE_VAR_GTE2:
func_set_test_result(func_state,
_variables[instr->_operand[0]] >=
_variables[instr->_operand[1]]);
break;
case OPCODE_TURN_TICK:
_variables[VAR_TURN_COUNT]++;
break;

View File

@ -55,6 +55,8 @@ enum {
OPCODE_OR,
OPCODE_IN_ROOM,
OPCODE_VAR_EQ,
OPCODE_VAR_GTE1,
OPCODE_VAR_GTE2,
OPCODE_CURRENT_OBJECT_TAKEABLE,
OPCODE_OBJECT_PRESENT,
OPCODE_ELSE,

View File

@ -46,6 +46,7 @@ void OpcodeMap::loadVersion1() {
_opcodeMap[0x06] = OPCODE_VAR_EQ;
_opcodeMap[0x08] = OPCODE_CURRENT_OBJECT_TAKEABLE;
_opcodeMap[0x09] = OPCODE_OBJECT_PRESENT;
_opcodeMap[0x0a] = OPCODE_VAR_GTE2;
_opcodeMap[0x0c] = OPCODE_ELSE;
_opcodeMap[0x0e] = OPCODE_OBJECT_IN_ROOM;
_opcodeMap[0x14] = OPCODE_CURRENT_OBJECT_NOT_VALID;
@ -55,6 +56,7 @@ void OpcodeMap::loadVersion1() {
_opcodeMap[0x20] = OPCODE_HAVE_CURRENT_OBJECT;
_opcodeMap[0x21] = OPCODE_OBJECT_IS_NOT_NOWHERE;
_opcodeMap[0x24] = OPCODE_CURRENT_OBJECT_PRESENT;
_opcodeMap[0x2d] = OPCODE_VAR_GTE1;
_opcodeMap[0x31] = OPCODE_TEST_ROOM_FLAG;
_opcodeMap[0x41] = OPCODE_NOT_HAVE_OBJECT;
_opcodeMap[0x45] = OPCODE_NOT_IN_ROOM;
@ -106,6 +108,7 @@ void OpcodeMap::loadVersion2() {
_opcodeMap[0x06] = OPCODE_VAR_EQ;
_opcodeMap[0x08] = OPCODE_CURRENT_IS_OBJECT;
_opcodeMap[0x09] = OPCODE_OBJECT_PRESENT;
_opcodeMap[0x0a] = OPCODE_VAR_GTE2;
_opcodeMap[0x0c] = OPCODE_ELSE;
_opcodeMap[0x11] = OPCODE_OBJECT_IS_NOWHERE;
_opcodeMap[0x14] = OPCODE_CURRENT_OBJECT_NOT_VALID;