[Scummvm-git-logs] scummvm master -> 7732097080ea1a4affcf43820b2717c60863109f
neuromancer
noreply at scummvm.org
Fri May 10 05:56:06 UTC 2024
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:
7732097080 FREESCAPE: some code to parse riddles in castle
Commit: 7732097080ea1a4affcf43820b2717c60863109f
https://github.com/scummvm/scummvm/commit/7732097080ea1a4affcf43820b2717c60863109f
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2024-05-10T07:57:03+02:00
Commit Message:
FREESCAPE: some code to parse riddles in castle
Changed paths:
engines/freescape/games/castle/amiga.cpp
engines/freescape/games/castle/castle.cpp
engines/freescape/games/castle/castle.h
engines/freescape/games/castle/dos.cpp
engines/freescape/loaders/8bitBinaryLoader.cpp
diff --git a/engines/freescape/games/castle/amiga.cpp b/engines/freescape/games/castle/amiga.cpp
index 65a70078637..f17842ab9a9 100644
--- a/engines/freescape/games/castle/amiga.cpp
+++ b/engines/freescape/games/castle/amiga.cpp
@@ -34,7 +34,8 @@ void CastleEngine::loadAssetsAmigaDemo() {
if (!file.isOpen())
error("Failed to open 'x' file");
- loadMessagesVariableSize(&file, 0x8bb2, 164);
+ loadMessagesVariableSize(&file, 0x8bb2, 178);
+ loadRiddles(&file, 0x96c9, 20);
load8bitBinary(&file, 0x162a6, 16);
loadPalettes(&file, 0x151a6);
diff --git a/engines/freescape/games/castle/castle.cpp b/engines/freescape/games/castle/castle.cpp
index 2487889b14b..93336946f7b 100644
--- a/engines/freescape/games/castle/castle.cpp
+++ b/engines/freescape/games/castle/castle.cpp
@@ -188,6 +188,36 @@ void CastleEngine::executePrint(FCLInstruction &instruction) {
}
+void CastleEngine::loadRiddles(Common::SeekableReadStream *file, int offset, int number) {
+ file->seek(offset);
+ debugC(1, kFreescapeDebugParser, "Riddle table:");
+
+ for (int i = 0; i < 6 * number; i++) {
+ if (i % 6 == 0 && i > 0) {
+ debug("extra byte: %x", file->readByte());
+ }
+ int size = file->readByte();
+ if (size > 22)
+ size = 22;
+ debugC(1, kFreescapeDebugParser, "size: %d", size);
+ debugC(1, kFreescapeDebugParser, "extra byte: %x", file->readByte());
+ Common::String message = "";
+ while (size-- > 0) {
+ byte c = file->readByte();
+ if (c != 0)
+ message = message + c;
+ }
+ if (isAmiga() || isAtariST())
+ debug("extra byte: %x", file->readByte());
+ debugC(1, kFreescapeDebugParser, "extra byte: %x", file->readByte());
+ debugC(1, kFreescapeDebugParser, "extra byte: %x", file->readByte());
+ _riddleList.push_back(message);
+ debugC(1, kFreescapeDebugParser, "'%s'", _riddleList[i].c_str());
+ }
+ debugC(1, kFreescapeDebugParser, "End of riddles at %lx", file->pos());
+}
+
+
Common::Error CastleEngine::saveGameStreamExtended(Common::WriteStream *stream, bool isAutosave) {
return Common::kNoError;
}
diff --git a/engines/freescape/games/castle/castle.h b/engines/freescape/games/castle/castle.h
index d127b9b2f6e..1695540b8ea 100644
--- a/engines/freescape/games/castle/castle.h
+++ b/engines/freescape/games/castle/castle.h
@@ -39,8 +39,11 @@ public:
void gotoArea(uint16 areaID, int entranceID) override;
Common::Error saveGameStreamExtended(Common::WriteStream *stream, bool isAutosave = false) override;
Common::Error loadGameStreamExtended(Common::SeekableReadStream *stream) override;
+
+ Common::StringArray _riddleList;
private:
Common::SeekableReadStream *decryptFile(const Common::Path &filename);
+ void loadRiddles(Common::SeekableReadStream *file, int offset, int number);
};
extern byte kFreescapeCastleFont[];
diff --git a/engines/freescape/games/castle/dos.cpp b/engines/freescape/games/castle/dos.cpp
index d9243f89b46..0828be2020a 100644
--- a/engines/freescape/games/castle/dos.cpp
+++ b/engines/freescape/games/castle/dos.cpp
@@ -140,6 +140,15 @@ void CastleEngine::loadAssetsDOSDemo() {
if (_renderMode == Common::kRenderEGA) {
_viewArea = Common::Rect(40, 33, 280, 152);
+ file.open("CMDE.EXE");
+ stream = unpackEXE(file);
+ if (stream) {
+ loadSpeakerFxDOS(stream, 0x636d + 0x200, 0x63ed + 0x200);
+ }
+
+ delete stream;
+ file.close();
+
file.open("CMLE.DAT");
_title = load8bitBinImage(&file, 0x0);
_title->setPalette((byte *)&kEGADefaultPalette, 0, 16);
@@ -156,9 +165,18 @@ void CastleEngine::loadAssetsDOSDemo() {
file.close();
stream = decryptFile("CMLD"); // Only english
-
loadFonts(kFreescapeCastleFont, 59);
loadMessagesVariableSize(stream, 0x11, 164);
+ loadRiddles(stream, 0xaaf, 2);
+
+ /*for (int i = 0; i < 16; i++) {
+ debug("%lx", stream->pos());
+ for (int j = 0; j < 16; j++) {
+ byte c = stream->readByte();
+ debugN("%x/%c", c, c);
+ }
+ debugN("\n");
+ }*/
delete stream;
stream = decryptFile("CDEDF");
diff --git a/engines/freescape/loaders/8bitBinaryLoader.cpp b/engines/freescape/loaders/8bitBinaryLoader.cpp
index 711e1f601f5..e39cd167205 100644
--- a/engines/freescape/loaders/8bitBinaryLoader.cpp
+++ b/engines/freescape/loaders/8bitBinaryLoader.cpp
@@ -937,6 +937,8 @@ void FreescapeEngine::loadMessagesVariableSize(Common::SeekableReadStream *file,
Common::String message = "";
while (true) {
byte c = file->readByte();
+ if (c > 0xf0)
+ c = ' ';
if (c <= 1)
break;
message = message + c;
@@ -945,6 +947,7 @@ void FreescapeEngine::loadMessagesVariableSize(Common::SeekableReadStream *file,
_messagesList.push_back(message);
debugC(1, kFreescapeDebugParser, "'%s'", _messagesList[i].c_str());
}
+ debugC(1, kFreescapeDebugParser, "End of messages at %lx", file->pos());
}
void FreescapeEngine::loadGlobalObjects(Common::SeekableReadStream *file, int offset, int size) {
More information about the Scummvm-git-logs
mailing list