[Scummvm-git-logs] scummvm master -> 14da53647ca2b10be4cb4c8cfcfa5407c848fbf4
dreammaster
paulfgilbert at gmail.com
Sat Dec 12 19:04:39 UTC 2020
This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
4665c65d84 GLK: COMPREHEND: Implement CALL_FUNC2 opcode
14da53647c GLK: COMPREHEND: Add further string loading
Commit: 4665c65d849d5f32cc3189ad9c701cd73dc29ede
https://github.com/scummvm/scummvm/commit/4665c65d849d5f32cc3189ad9c701cd73dc29ede
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2020-12-12T11:04:17-08:00
Commit Message:
GLK: COMPREHEND: Implement CALL_FUNC2 opcode
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 4f9eef88d5..96d3942bf2 100644
--- a/engines/glk/comprehend/debugger_dumper.cpp
+++ b/engines/glk/comprehend/debugger_dumper.cpp
@@ -88,6 +88,7 @@ DebuggerDumper::DebuggerDumper() : _game(nullptr) {
_opcodes[OPCODE_REMOVE_OBJECT] = "remove_object";
_opcodes[OPCODE_SET_FLAG] = "set_flag";
_opcodes[OPCODE_CALL_FUNC] = "call_func";
+ _opcodes[OPCODE_CALL_FUNC2] = "call_func2";
_opcodes[OPCODE_TURN_TICK] = "turn_tick";
_opcodes[OPCODE_CLEAR_FLAG] = "clear_flag";
_opcodes[OPCODE_INVENTORY_ROOM] = "inventory_room";
diff --git a/engines/glk/comprehend/game_data.h b/engines/glk/comprehend/game_data.h
index 098e508346..8b9fe3725e 100644
--- a/engines/glk/comprehend/game_data.h
+++ b/engines/glk/comprehend/game_data.h
@@ -102,6 +102,7 @@ enum ScriptOpcode {
OPCODE_REMOVE_OBJECT,
OPCODE_SET_FLAG,
OPCODE_CALL_FUNC,
+ OPCODE_CALL_FUNC2,
OPCODE_TURN_TICK,
OPCODE_CLEAR_FLAG,
OPCODE_INVENTORY_ROOM,
diff --git a/engines/glk/comprehend/game_opcodes.cpp b/engines/glk/comprehend/game_opcodes.cpp
index abffa35812..0c5400f1e0 100644
--- a/engines/glk/comprehend/game_opcodes.cpp
+++ b/engines/glk/comprehend/game_opcodes.cpp
@@ -45,6 +45,9 @@ void ComprehendGameOpcodes::execute_opcode(const Instruction *instr, const Sente
byte opcode = getOpcode(instr);
switch (_opcodeMap[opcode]) {
case OPCODE_CALL_FUNC:
+ case OPCODE_CALL_FUNC2:
+ // Note: CALL_FUNC2 in the original did some extra backing of data which is
+ // redundant in the ScummVM version, so it can be handled the same as CALL_FUNC.
index = instr->_operand[0];
if (instr->_operand[1] == 0x81)
index += 256;
@@ -707,6 +710,7 @@ ComprehendGameV2::ComprehendGameV2() {
_opcodeMap[0x90] = OPCODE_WAIT_KEY;
_opcodeMap[0x92] = OPCODE_CALL_FUNC;
_opcodeMap[0x95] = OPCODE_CLEAR_WORD;
+ _opcodeMap[0x96] = OPCODE_CALL_FUNC2;
_opcodeMap[0x98] = OPCODE_TURN_TICK;
_opcodeMap[0x99] = OPCODE_SET_FLAG;
_opcodeMap[0x9a] = OPCODE_SET_WORD;
Commit: 14da53647ca2b10be4cb4c8cfcfa5407c848fbf4
https://github.com/scummvm/scummvm/commit/14da53647ca2b10be4cb4c8cfcfa5407c848fbf4
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2020-12-12T11:04:17-08:00
Commit Message:
GLK: COMPREHEND: Add further string loading
Changed paths:
engines/glk/comprehend/game_tm.cpp
diff --git a/engines/glk/comprehend/game_tm.cpp b/engines/glk/comprehend/game_tm.cpp
index eb84d2cfe7..c0d9b7f61a 100644
--- a/engines/glk/comprehend/game_tm.cpp
+++ b/engines/glk/comprehend/game_tm.cpp
@@ -55,6 +55,9 @@ void TalismanGame::loadStrings() {
int bankOffsets[BANKS_COUNT];
int stringOffsets[STRINGS_PER_BANK + 1];
+ _strings.clear();
+ _strings2.clear();
+
Common::File f;
if (!f.open("novel.exe"))
error("novel.exe is a required file");
@@ -63,26 +66,37 @@ void TalismanGame::loadStrings() {
if (md5 != "0e7f002971acdb055f439020363512ce")
error("Unrecognised novel.exe encountered");
- f.seek(STRINGS_SEGMENT1);
- for (int bank = 0; bank < BANKS_COUNT; ++bank)
- bankOffsets[bank] = f.readUint16LE();
-
- // Iterate through the banks loading the strings
- for (int bank = 0; bank < BANKS_COUNT; ++bank) {
- if (!bankOffsets[bank])
- continue;
-
- f.seek(STRINGS_SEGMENT1 + bankOffsets[bank]);
- for (int strNum = 0; strNum <= STRINGS_PER_BANK; ++strNum)
- stringOffsets[strNum] = f.readUint16LE();
-
- for (int strNum = 0; strNum < STRINGS_PER_BANK; ++strNum) {
- int size = stringOffsets[strNum + 1] - stringOffsets[strNum];
- assert(size > 0);
-
- f.seek(STRINGS_SEGMENT1 + bankOffsets[bank] + stringOffsets[strNum]);
- FileBuffer fb(&f, size);
- _strings.push_back(parseString(&fb));
+ const int STRING_SEGMENTS[2] = { STRINGS_SEGMENT1, STRINGS_SEGMENT2 };
+
+ // TODO: Figure out use of string segment 2
+ for (int strings = 0; strings < 1; ++strings) {
+ f.seek(STRING_SEGMENTS[strings]);
+ for (int bank = 0; bank < BANKS_COUNT; ++bank)
+ bankOffsets[bank] = f.readUint16LE();
+
+ // Iterate through the banks loading the strings
+ for (int bank = 0; bank < BANKS_COUNT; ++bank) {
+ if (!bankOffsets[bank])
+ continue;
+
+ f.seek(STRING_SEGMENTS[strings] + bankOffsets[bank]);
+ for (int strNum = 0; strNum <= STRINGS_PER_BANK; ++strNum)
+ stringOffsets[strNum] = f.readUint16LE();
+
+ for (int strNum = 0; strNum < STRINGS_PER_BANK; ++strNum) {
+ int size = stringOffsets[strNum + 1] - stringOffsets[strNum];
+ if (size < 0)
+ size = 0xfff;
+
+ f.seek(STRING_SEGMENTS[strings] + bankOffsets[bank] + stringOffsets[strNum]);
+ FileBuffer fb(&f, size);
+ Common::String str = parseString(&fb);
+
+ if (bank < 8)
+ _strings.push_back(str);
+ else
+ _strings2.push_back(str);
+ }
}
}
}
More information about the Scummvm-git-logs
mailing list