[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