[Scummvm-git-logs] scummvm master -> 0b1d02c5bbde416027a5bd45cf98efcc6a481ea1
dreammaster
paulfgilbert at gmail.com
Wed Dec 9 03:15:03 UTC 2020
This automated email contains information about 4 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
1f4fe8d3ec GLK: COMPREHEND: Specify Talisman title screen file
5ac16b804e GLK: COMPREHEND: Talisman data loading workarounds
cdc4716535 GLK: COMPREHEND: Simplify detection of single image title files
0b1d02c5bb GLK: COMPREHEND: Fix OO-Topos version from graphicsmagician.com
Commit: 1f4fe8d3ec999bc48efb108abc82b22eb1cf4c04
https://github.com/scummvm/scummvm/commit/1f4fe8d3ec999bc48efb108abc82b22eb1cf4c04
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2020-12-08T19:14:36-08:00
Commit Message:
GLK: COMPREHEND: Specify Talisman title screen file
Changed paths:
engines/glk/comprehend/game_tm.cpp
engines/glk/comprehend/game_tm.h
diff --git a/engines/glk/comprehend/game_tm.cpp b/engines/glk/comprehend/game_tm.cpp
index ecc6b0cccf..8243060c7e 100644
--- a/engines/glk/comprehend/game_tm.cpp
+++ b/engines/glk/comprehend/game_tm.cpp
@@ -22,6 +22,7 @@
#include "glk/comprehend/comprehend.h"
#include "glk/comprehend/game_tm.h"
+#include "glk/comprehend/pics.h"
namespace Glk {
namespace Comprehend {
@@ -42,6 +43,18 @@ TalismanGame::TalismanGame() : ComprehendGameV2() {
_itemGraphicFiles.push_back("OB");
_itemGraphicFiles.push_back("OE");
_itemGraphicFiles.push_back("OF");
+
+ _titleGraphicFile = "t0";
+}
+
+void TalismanGame::beforeGame() {
+ // Draw the title
+ g_comprehend->drawPicture(TITLE_IMAGE);
+
+ // Print game information
+ g_comprehend->readChar();
+
+ g_comprehend->glk_window_clear(g_comprehend->_bottomWindow);
}
} // namespace Comprehend
diff --git a/engines/glk/comprehend/game_tm.h b/engines/glk/comprehend/game_tm.h
index d5be035a09..b8c2dacb53 100644
--- a/engines/glk/comprehend/game_tm.h
+++ b/engines/glk/comprehend/game_tm.h
@@ -32,6 +32,8 @@ class TalismanGame : public ComprehendGameV2 {
public:
TalismanGame();
~TalismanGame() override {}
+
+ void beforeGame() override;
};
} // namespace Comprehend
Commit: 5ac16b804e47b980640e8adb69f2dddc7ca6a244
https://github.com/scummvm/scummvm/commit/5ac16b804e47b980640e8adb69f2dddc7ca6a244
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2020-12-08T19:14:36-08:00
Commit Message:
GLK: COMPREHEND: Talisman data loading workarounds
Changed paths:
engines/glk/comprehend/comprehend.cpp
engines/glk/comprehend/game_data.cpp
engines/glk/comprehend/game_tm.cpp
diff --git a/engines/glk/comprehend/comprehend.cpp b/engines/glk/comprehend/comprehend.cpp
index 8b39755301..66787734ab 100644
--- a/engines/glk/comprehend/comprehend.cpp
+++ b/engines/glk/comprehend/comprehend.cpp
@@ -112,7 +112,7 @@ void Comprehend::createGame() {
else if (_gameDescription._gameId == "ootopos")
_game = new OOToposGame();
else if (_gameDescription._gameId == "talisman")
- _game = new OOToposGame();
+ _game = new TalismanGame();
else if (_gameDescription._gameId == "transylvania")
_game = new TransylvaniaGame();
else
diff --git a/engines/glk/comprehend/game_data.cpp b/engines/glk/comprehend/game_data.cpp
index 13a80e5e31..d155d16a31 100644
--- a/engines/glk/comprehend/game_data.cpp
+++ b/engines/glk/comprehend/game_data.cpp
@@ -243,6 +243,10 @@ void GameData::parse_vm(FileBuffer *fb) {
break;
_functions.push_back(func);
+
+ // WORKAROUND: Parsing functions for Talisman
+ if (_functions.size() == 0x1d8 && g_vm->getGameID() == "talisman")
+ break;
}
}
@@ -478,11 +482,13 @@ done:
void GameData::parse_string_table(FileBuffer *fb, unsigned start_addr,
uint32 end_addr, StringTable *table) {
- fb->seek(start_addr);
- while (1) {
- table->push_back(parseString(fb));
- if (fb->pos() >= (int32)end_addr)
- break;
+ if (start_addr < end_addr) {
+ fb->seek(start_addr);
+ while (1) {
+ table->push_back(parseString(fb));
+ if (fb->pos() >= (int32)end_addr)
+ break;
+ }
}
}
diff --git a/engines/glk/comprehend/game_tm.cpp b/engines/glk/comprehend/game_tm.cpp
index 8243060c7e..0e4e3052e5 100644
--- a/engines/glk/comprehend/game_tm.cpp
+++ b/engines/glk/comprehend/game_tm.cpp
@@ -27,8 +27,6 @@
namespace Glk {
namespace Comprehend {
-/* FIXME - This is broken */
-
TalismanGame::TalismanGame() : ComprehendGameV2() {
_gameDataFile = "G0";
Commit: cdc471653571b449e5cffb45354198dec598f1cb
https://github.com/scummvm/scummvm/commit/cdc471653571b449e5cffb45354198dec598f1cb
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2020-12-08T19:14:36-08:00
Commit Message:
GLK: COMPREHEND: Simplify detection of single image title files
Changed paths:
engines/glk/comprehend/pics.cpp
engines/glk/comprehend/pics.h
diff --git a/engines/glk/comprehend/pics.cpp b/engines/glk/comprehend/pics.cpp
index 60457d4e30..571b38adc5 100644
--- a/engines/glk/comprehend/pics.cpp
+++ b/engines/glk/comprehend/pics.cpp
@@ -101,7 +101,7 @@ void Pics::ImageContext::lineFixes() {
/*-------------------------------------------------------*/
-Pics::ImageFile::ImageFile(const Common::String &filename) {
+Pics::ImageFile::ImageFile(const Common::String &filename, bool isSingleImage) {
Common::File f;
uint16 version;
int i;
@@ -110,19 +110,15 @@ Pics::ImageFile::ImageFile(const Common::String &filename) {
if (!f.open(filename))
error("Could not open file - %s", filename.c_str());
- /*
- * In earlier versions of Comprehend the first word is 0x1000 and
- * the image offsets start four bytes in. In newer versions the
- * image offsets start at the beginning of the image file.
- */
- version = f.readUint16LE();
- if (version == 0x6300 /* Single image file */
- || version == 0x81f3 /* OO-Topos title - t0 */) {
+ if (isSingleImage) {
+ // It's a title image file, which has only a single image with no
+ // table of image offsets
_imageOffsets.resize(1);
_imageOffsets[0] = 4;
return;
}
+ version = f.readUint16LE();
if (version == 0x1000)
f.seek(4);
else
@@ -345,7 +341,7 @@ void Pics::load(const Common::StringArray &roomFiles,
_items.push_back(ImageFile(itemFiles[idx]));
if (!titleFile.empty())
- _title = ImageFile(titleFile);
+ _title = ImageFile(titleFile, true);
}
int Pics::getPictureNumber(const Common::String &filename) const {
diff --git a/engines/glk/comprehend/pics.h b/engines/glk/comprehend/pics.h
index c38cef8c61..9bf2d9533b 100644
--- a/engines/glk/comprehend/pics.h
+++ b/engines/glk/comprehend/pics.h
@@ -84,7 +84,7 @@ class Pics : public Common::Archive {
void doResetOp(ImageContext *ctx, byte param) const;
public:
ImageFile() {}
- ImageFile(const Common::String &filename);
+ ImageFile(const Common::String &filename, bool isSingleImage = false);
void draw(uint index, ImageContext *ctx) const;
};
Commit: 0b1d02c5bbde416027a5bd45cf98efcc6a481ea1
https://github.com/scummvm/scummvm/commit/0b1d02c5bbde416027a5bd45cf98efcc6a481ea1
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2020-12-08T19:14:36-08:00
Commit Message:
GLK: COMPREHEND: Fix OO-Topos version from graphicsmagician.com
Changed paths:
engines/glk/comprehend/game_oo.cpp
diff --git a/engines/glk/comprehend/game_oo.cpp b/engines/glk/comprehend/game_oo.cpp
index 5274f04c88..655a6b0f03 100644
--- a/engines/glk/comprehend/game_oo.cpp
+++ b/engines/glk/comprehend/game_oo.cpp
@@ -24,6 +24,7 @@
#include "glk/comprehend/comprehend.h"
#include "glk/comprehend/draw_surface.h"
#include "glk/comprehend/pics.h"
+#include "common/md5.h"
namespace Glk {
namespace Comprehend {
@@ -66,11 +67,31 @@ OOToposGame::OOToposGame() : ComprehendGameV2(), _restartMode(RESTART_IMMEDIATE)
_gameDataFile = "g0";
// Extra strings are (annoyingly) stored in the game binary
- _stringFiles.push_back(StringFile("NOVEL.EXE", 0x16564, 0x17640));
- _stringFiles.push_back(StringFile("NOVEL.EXE", 0x17702, 0x18600));
- _stringFiles.push_back(StringFile("NOVEL.EXE", 0x186b2, 0x19b80));
- _stringFiles.push_back(StringFile("NOVEL.EXE", 0x19c62, 0x1a590));
- _stringFiles.push_back(StringFile("NOVEL.EXE", 0x1a634, 0x1b080));
+ Common::File f;
+ if (!f.open("novel.exe"))
+ error("novel.exe is a required file");
+
+ Common::String md5 = Common::computeStreamMD5AsString(f, 1024);
+ f.close();
+
+ if (md5 == "3fc2072f6996b17d2f21f0a92e53cdcc") {
+ // DOS version from if-archive
+ _stringFiles.push_back(StringFile("NOVEL.EXE", 0x16564, 0x17640));
+ _stringFiles.push_back(StringFile("NOVEL.EXE", 0x17702, 0x18600));
+ _stringFiles.push_back(StringFile("NOVEL.EXE", 0x186b2, 0x19b80));
+ _stringFiles.push_back(StringFile("NOVEL.EXE", 0x19c62, 0x1a590));
+ _stringFiles.push_back(StringFile("NOVEL.EXE", 0x1a634, 0x1b080));
+ } else if (md5 == "e26858f2aaa9dcc28f468b07902813c5") {
+ // DOS version from graphicsmagician.com
+ _stringFiles.push_back(StringFile("NOVEL.EXE", 0x164c4, 0x175a0));
+ _stringFiles.push_back(StringFile("NOVEL.EXE", 0x17662, 0x18560));
+ _stringFiles.push_back(StringFile("NOVEL.EXE", 0x18612, 0x19ae0));
+ _stringFiles.push_back(StringFile("NOVEL.EXE", 0x19bc2, 0x1a4f0));
+ _stringFiles.push_back(StringFile("NOVEL.EXE", 0x1a594, 0x1afe0));
+ } else {
+ error("Unrecognised novel.exe encountered");
+ }
+
_locationGraphicFiles.push_back("RA");
_locationGraphicFiles.push_back("RB");
_locationGraphicFiles.push_back("RC");
More information about the Scummvm-git-logs
mailing list