[Scummvm-git-logs] scummvm master -> 586d7cccebda78a7193815195cb84ee80f60550f
dreammaster
paulfgilbert at gmail.com
Sat Oct 24 05:21:10 UTC 2020
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
586d7ccceb GLK: COMPREHEND: Added SET_WORD and CLEAR_WORD opcodes
Commit: 586d7cccebda78a7193815195cb84ee80f60550f
https://github.com/scummvm/scummvm/commit/586d7cccebda78a7193815195cb84ee80f60550f
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2020-10-23T22:20:25-07:00
Commit Message:
GLK: COMPREHEND: Added SET_WORD and CLEAR_WORD opcodes
Changed paths:
engines/glk/comprehend/debugger_dumper.cpp
engines/glk/comprehend/game_data.h
engines/glk/comprehend/game_opcodes.cpp
diff --git a/engines/glk/comprehend/debugger_dumper.cpp b/engines/glk/comprehend/debugger_dumper.cpp
index fc736971ad..1e6769b07b 100644
--- a/engines/glk/comprehend/debugger_dumper.cpp
+++ b/engines/glk/comprehend/debugger_dumper.cpp
@@ -116,6 +116,8 @@ DebuggerDumper::DebuggerDumper() : _game(nullptr) {
_opcodes[OPCODE_SET_FLAG40] = "set_flag40";
_opcodes[OPCODE_CLEAR_FLAG40] = "clear_flag40";
_opcodes[OPCODE_RANDOM_MSG] = "random_msg";
+ _opcodes[OPCODE_SET_WORD] = "set_word";
+ _opcodes[OPCODE_CLEAR_WORD] = "clear_word";
}
Common::String DebuggerDumper::dumpInstruction(ComprehendGame *game,
diff --git a/engines/glk/comprehend/game_data.h b/engines/glk/comprehend/game_data.h
index 3ae4c6bd5e..4a6931f086 100644
--- a/engines/glk/comprehend/game_data.h
+++ b/engines/glk/comprehend/game_data.h
@@ -134,7 +134,9 @@ enum ScriptOpcode {
OPCODE_SET_CAN_TAKE,
OPCODE_CLEAR_FLAG40,
OPCODE_SET_FLAG40,
- OPCODE_RANDOM_MSG
+ OPCODE_RANDOM_MSG,
+ OPCODE_SET_WORD,
+ OPCODE_CLEAR_WORD
};
/* Game state update flags */
diff --git a/engines/glk/comprehend/game_opcodes.cpp b/engines/glk/comprehend/game_opcodes.cpp
index 19f47d48a4..11ed59d641 100644
--- a/engines/glk/comprehend/game_opcodes.cpp
+++ b/engines/glk/comprehend/game_opcodes.cpp
@@ -72,6 +72,11 @@ void ComprehendGameOpcodes::execute_opcode(const Instruction *instr, const Sente
item->_flags &= ~ITEMF_INVISIBLE;
break;
+ case OPCODE_CLEAR_WORD:
+ item = get_item(instr->_operand[0]);
+ item->_word = 0;
+ break;
+
case OPCODE_CURRENT_OBJECT_NOT_VALID:
func_set_test_result(func_state, !noun);
break;
@@ -232,6 +237,13 @@ void ComprehendGameOpcodes::execute_opcode(const Instruction *instr, const Sente
}
break;
+ case OPCODE_SET_ROOM_GRAPHIC:
+ room = get_room(instr->_operand[0]);
+ room->_graphic = instr->_operand[1];
+ if (instr->_operand[0] == _currentRoom)
+ _updateFlags |= UPDATE_GRAPHICS;
+ break;
+
case OPCODE_SET_STRING_REPLACEMENT1:
_currentReplaceWord = (instr->_operand[0] & 0x80) - 1;
break;
@@ -240,6 +252,11 @@ void ComprehendGameOpcodes::execute_opcode(const Instruction *instr, const Sente
_currentReplaceWord = instr->_operand[0] - 1;
break;
+ case OPCODE_SET_WORD:
+ item = get_item(instr->_operand[0]);
+ item->_word = instr->_operand[1];
+ break;
+
case OPCODE_SPECIAL:
// Game specific opcode
handleSpecialOpcode(instr->_operand[0]);
@@ -388,12 +405,14 @@ ComprehendGameV1::ComprehendGameV1() {
_opcodeMap[0x99] = OPCODE_SET_FLAG;
_opcodeMap[0x92] = OPCODE_CALL_FUNC;
_opcodeMap[0x98] = OPCODE_TURN_TICK;
+ _opcodeMap[0x9a] = OPCODE_SET_WORD;
_opcodeMap[0x9d] = OPCODE_CLEAR_FLAG;
_opcodeMap[0x9e] = OPCODE_INVENTORY_ROOM;
_opcodeMap[0xa0] = OPCODE_TAKE_CURRENT_OBJECT;
_opcodeMap[0xa1] = OPCODE_SPECIAL;
_opcodeMap[0xa4] = OPCODE_DROP_CURRENT_OBJECT;
_opcodeMap[0xa2] = OPCODE_SET_ROOM_GRAPHIC;
+ _opcodeMap[0xad] = OPCODE_CLEAR_WORD;
_opcodeMap[0xb0] = OPCODE_REMOVE_CURRENT_OBJECT;
_opcodeMap[0xb1] = OPCODE_MOVE_DIR;
_opcodeMap[0xb5] = OPCODE_SET_STRING_REPLACEMENT1;
@@ -614,13 +633,6 @@ void ComprehendGameV1::execute_opcode(const Instruction *instr, const Sentence *
_updateFlags |= UPDATE_GRAPHICS;
break;
- case OPCODE_SET_ROOM_GRAPHIC:
- room = get_room(instr->_operand[0]);
- room->_graphic = instr->_operand[1];
- if (instr->_operand[0] == _currentRoom)
- _updateFlags |= UPDATE_GRAPHICS;
- break;
-
case OPCODE_TEST_FALSE:
// The original had two opcodes mapped to the same code that does
// a test, but ignores the result, and is always false
@@ -698,7 +710,9 @@ ComprehendGameV2::ComprehendGameV2() {
_opcodeMap[0x8e] = OPCODE_PRINT;
_opcodeMap[0x8f] = OPCODE_SET_OBJECT_LONG_DESCRIPTION;
_opcodeMap[0x92] = OPCODE_CALL_FUNC;
+ _opcodeMap[0x95] = OPCODE_CLEAR_WORD;
_opcodeMap[0x99] = OPCODE_SET_FLAG;
+ _opcodeMap[0x9a] = OPCODE_SET_WORD;
_opcodeMap[0x9d] = OPCODE_CLEAR_FLAG;
_opcodeMap[0xa0] = OPCODE_TAKE_CURRENT_OBJECT;
_opcodeMap[0xa1] = OPCODE_CLEAR_FLAG40;
@@ -707,6 +721,7 @@ ComprehendGameV2::ComprehendGameV2() {
_opcodeMap[0xa9] = OPCODE_CLEAR_INVISIBLE;
_opcodeMap[0xad] = OPCODE_SET_INVISIBLE;
_opcodeMap[0xc1] = OPCODE_VAR_DEC;
+ _opcodeMap[0xc2] = OPCODE_SET_ROOM_GRAPHIC;
_opcodeMap[0xc5] = OPCODE_SET_STRING_REPLACEMENT3;
_opcodeMap[0xc9] = OPCODE_SET_STRING_REPLACEMENT1;
_opcodeMap[0xcd] = OPCODE_SET_STRING_REPLACEMENT2;
@@ -735,7 +750,6 @@ ComprehendGameV2::ComprehendGameV2() {
_opcodeMap[0x90] = OPCODE_WAIT_KEY;
_opcodeMap[0x98] = OPCODE_TURN_TICK;
_opcodeMap[0x9e] = OPCODE_INVENTORY_ROOM;
- _opcodeMap[0xc2] = OPCODE_SET_ROOM_GRAPHIC;
_opcodeMap[0xc6] = OPCODE_SET_OBJECT_GRAPHIC;
_opcodeMap[0xd9] = OPCODE_DRAW_OBJECT;
_opcodeMap[0xf0] = OPCODE_DROP_CURRENT_OBJECT;
More information about the Scummvm-git-logs
mailing list