aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Gilbert2018-12-12 19:38:29 -0800
committerPaul Gilbert2018-12-12 19:38:29 -0800
commit48d3b829d6a82cab5a62d84e07a51b2687a63572 (patch)
tree025eb0b3a7cfb500e055ce4ef7d7c19db76513d5
parentd31e37683c8790ff41cdd7356344bd01861fb414 (diff)
downloadscummvm-rg350-48d3b829d6a82cab5a62d84e07a51b2687a63572.tar.gz
scummvm-rg350-48d3b829d6a82cab5a62d84e07a51b2687a63572.tar.bz2
scummvm-rg350-48d3b829d6a82cab5a62d84e07a51b2687a63572.zip
GLK: FROTZ: Adding detection entries, add ability to read serials from Blorb archives
-rw-r--r--engines/glk/blorb.cpp13
-rw-r--r--engines/glk/blorb.h6
-rw-r--r--engines/glk/frotz/detection.cpp20
-rw-r--r--engines/glk/frotz/detection_tables.h250
4 files changed, 282 insertions, 7 deletions
diff --git a/engines/glk/blorb.cpp b/engines/glk/blorb.cpp
index 1438abb66b..1f95919401 100644
--- a/engines/glk/blorb.cpp
+++ b/engines/glk/blorb.cpp
@@ -58,6 +58,12 @@ Blorb::Blorb(const Common::String &filename, InterpreterType interpType) :
error("Could not parse blorb file");
}
+Blorb::Blorb(const Common::FSNode &fileNode, InterpreterType interpType) :
+ Common::Archive(), _fileNode(fileNode), _interpType(interpType) {
+ if (load() != Common::kNoError)
+ error("Could not parse blorb file");
+}
+
bool Blorb::hasFile(const Common::String &name) const {
for (uint idx = 0; idx < _chunks.size(); ++idx) {
if (_chunks[idx]._filename.equalsIgnoreCase(name))
@@ -86,7 +92,8 @@ Common::SeekableReadStream *Blorb::createReadStreamForMember(const Common::Strin
for (uint idx = 0; idx < _chunks.size(); ++idx) {
if (_chunks[idx]._filename.equalsIgnoreCase(name)) {
Common::File f;
- if (!f.open(_filename))
+ if ((!_filename.empty() && !f.open(_filename)) ||
+ (_filename.empty() && !f.open(_fileNode)))
error("Reading failed");
f.seek(_chunks[idx]._offset);
@@ -103,7 +110,9 @@ Common::SeekableReadStream *Blorb::createReadStreamForMember(const Common::Strin
Common::ErrorCode Blorb::load() {
// First, chew through the file and index the chunks
Common::File f;
- if (!f.open(_filename) || f.size() < 12)
+ if ((!_filename.empty() && !f.open(_filename)) ||
+ (_filename.empty() && !f.open(_fileNode)) ||
+ f.size() < 12)
return Common::kReadingFailed;
if (f.readUint32BE() != ID_FORM)
diff --git a/engines/glk/blorb.h b/engines/glk/blorb.h
index afd52af6d9..fbc1dd6583 100644
--- a/engines/glk/blorb.h
+++ b/engines/glk/blorb.h
@@ -48,6 +48,7 @@ struct ChunkEntry {
class Blorb : public Common::Archive {
private:
Common::String _filename;
+ Common::FSNode _fileNode;
InterpreterType _interpType;
Common::Array<ChunkEntry> _chunks; ///< list of chunk descriptors
private:
@@ -62,6 +63,11 @@ public:
Blorb(const Common::String &filename, InterpreterType interpType);
/**
+ * Constructor
+ */
+ Blorb(const Common::FSNode &fileNode, InterpreterType interpType);
+
+ /**
* Check if a member with the given name is present in the Archive.
* Patterns are not allowed, as this is meant to be a quick File::exists()
* replacement.
diff --git a/engines/glk/frotz/detection.cpp b/engines/glk/frotz/detection.cpp
index 47767f480f..d7725e72a4 100644
--- a/engines/glk/frotz/detection.cpp
+++ b/engines/glk/frotz/detection.cpp
@@ -23,6 +23,7 @@
#include "glk/frotz/detection.h"
#include "glk/frotz/detection_tables.h"
#include "glk/frotz/quetzal.h"
+#include "glk/blorb.h"
#include "common/debug.h"
#include "common/file.h"
#include "common/md5.h"
@@ -60,13 +61,15 @@ bool FrotzMetaEngine::detectGames(const Common::FSList &fslist, DetectedGames &g
if (!hasExt)
continue;
- // Open up the file and calculate the md5
+ // Open up the file and calculate the md5, and get the serial
Common::File gameFile;
if (!gameFile.open(*file))
continue;
Common::String md5 = Common::computeStreamMD5AsString(gameFile, 5000);
size_t filesize = gameFile.size();
char serial[9] = "";
+ bool emptyBlorb = false;
+
if (!filename.hasSuffixIgnoreCase(".zblorb")) {
gameFile.seek(18);
strcpy(&serial[0], "\"");
@@ -74,6 +77,19 @@ bool FrotzMetaEngine::detectGames(const Common::FSList &fslist, DetectedGames &g
strcpy(&serial[7], "\"");
}
gameFile.close();
+ if (filename.hasSuffixIgnoreCase(".zblorb")) {
+ Blorb b(*file, INTERPRETER_FROTZ);
+ Common::SeekableReadStream *f = b.createReadStreamForMember("game");
+ emptyBlorb = f == nullptr;
+
+ if (!emptyBlorb) {
+ f->seek(18);
+ strcpy(&serial[0], "\"");
+ f->read(&serial[1], 6);
+ strcpy(&serial[7], "\"");
+ delete f;
+ }
+ }
// Check for known games. Note that there has been some variation in exact filesizes
// for Infocom games due to padding at the end of files. So we match on md5s for the
@@ -86,7 +102,7 @@ bool FrotzMetaEngine::detectGames(const Common::FSList &fslist, DetectedGames &g
DetectedGame gd;
if (!p->_gameId) {
// Generic .dat/.zip files don't get reported as matches unless they have a known md5
- if (filename.hasSuffixIgnoreCase(".dat") || filename.hasSuffixIgnoreCase(".zip"))
+ if (filename.hasSuffixIgnoreCase(".dat") || filename.hasSuffixIgnoreCase(".zip") || emptyBlorb)
continue;
if (gDebugLevel > 0) {
diff --git a/engines/glk/frotz/detection_tables.h b/engines/glk/frotz/detection_tables.h
index 2abca7d2dd..62a033ba36 100644
--- a/engines/glk/frotz/detection_tables.h
+++ b/engines/glk/frotz/detection_tables.h
@@ -569,6 +569,7 @@ const PlainGameDescriptor FROTZ_GAME_LIST[] = {
{ "ralph", "Ralph, An Interactive Sniffing" },
{ "rameses", "Rameses, a Tale of Heroes" },
{ "rans", "RANS, an interworld progress" },
+ { "ranshints", "RANS Hints" },
{ "rachaelbadday", "Rachel has a bad day" },
{ "readinginmay", "A Reading in May" },
{ "relief", "The Hunt For Relief" },
@@ -750,11 +751,14 @@ const PlainGameDescriptor FROTZ_GAME_LIST[] = {
{ "weirdcity", "Weird City Interloper" },
{ "weirdness", "Weirdness: Strange, Different, and Altogether Weird" },
{ "wwwanderer", "Werewolves and Wanderer" },
- { "wernersquest", "Werner's Quest Parts 1-4" },
+ { "wernersquest1", "Werner's Quest Parts 1" },
+ { "wernersquest2", "Werner's Quest Parts 2" },
+ { "wernersquest3", "Werner's Quest Parts 3" },
+ { "wernersquest4", "Werner's Quest Parts 4" },
{ "whispers", "The Corn Identity, an \"IF Whispers\" collaborative project" },
{ "whitehouses", "White Houses" },
{ "wildflowers", "Wildflowers" },
- { "windchester", "Winchester's Nightmare" },
+ { "winchester", "Winchester's Nightmare" },
{ "windhall", "The Windhall Chronicles, Volume One" },
{ "winterwonderland", "Winter Wonderland" },
{ "wir1", "When in Rome 1: Accounting for Taste" },
@@ -1379,7 +1383,247 @@ const FrotzGameDescription FROTZ_GAMES[] = {
ENTRY0("punkpoints", "010108", "ffb32fb83c4480a3109755572819623a", 136704),
ENTRY0("putpbaa", "010618", "458a35f2318afa617fe4679f8c0ec9a5", 132096),
ENTRY0("pytho", "020223", "a5e3d0ebd1f81ca341cf93a721f6ed3c", 293376),
-
+ ENTRY0("muffinquest", "120326", "58eedaa233021cbd8f90ea503b0c3fc1", 438082),
+ ENTRY0("muffinquest3", "120505", "41462801e25ca195c377ad34ee080c9c", 439162),
+ ENTRY0("simpletheft2", "110601", "21c13d6583c2ce9714e9bdc31adcab82", 357818),
+ ENTRY0("quidditch1954", "121022", "ae9626ce114047e0d1247d226cd9cc4a", 330710),
+ ENTRY0("ralph", "040309", "ff6d29e293d82c49b4a5f4b21ce96655", 78848),
+ ENTRY0("rameses", "061023", "6ea654d98a64cb50eff35d7a613cdfb1", 167166),
+ ENTRY0("rans", "000918", "1577894d9022d221f9db27f7a96d4d4f", 180224),
+ ENTRY0("ranshints", "000917", "b509a63314d10abf17272244db3f3bb0", 64000),
+ ENTRY0("rachaelbadday", "070328", "3147589b43da574303bffb26c5f317ba", 269312),
+ ENTRY0("readinginmay", "120109", "9ae7c7c4f4162262ea3fdfe49c30c0e7", 196096),
+ ENTRY0("relief", "000820", "91046311f44a670f51738fcf5dc5a6cd", 94720),
+ ENTRY0("reorsbushcave", "170416", "1d010db82d499b06e27c28375f867fcb", 329216),
+ ENTRY0("reorsbushcave", "170406", "f84a6d0aaebc242b5b12fdf3f9315a33", 1058880),
+ ENTRY0("reser", "050209", "ba7e7d973ce19279d7eacf9c5ef80136", 90112),
+ ENTRY0("resident", "970908", "ae5612cc75ac734de51d864c9e8d9976", 136704),
+ ENTRY0("retrofatale", "110713", "b7816c11b5dc619c9b1e37ffb6575577", 222208),
+ ENTRY0("reverb", "990110", "fb3d80d0f92857286a4fd7e6c2892293", 106496),
+ ENTRY0("reverzi", "991218", "31252071da0fb3dde08ae45f74a768f9", 9728),
+ ENTRY0("ribbons", "010702", "7c45bffcbbd611a499e0803805fa87ea", 110080),
+ ENTRY0("risenecropolis", "171208", "c01ccee1f849be82cccc85a1ab62d52b", 473566),
+ ENTRY0("risorg", "171114", "e6e6c0e75711a28aac39afe185bea1f6", 475616),
+ ENTRY0("robots", "980115", "0f9ad287635965ae521c62d29329eb2d", 6144),
+ ENTRY0("rogue", "980706", "c4e104c4dec6381ee1a8943aa4e008e5", 116736),
+ ENTRY0("roomserial", "120627", "9470b6e7a2cdcb43422e75deba20b864", 302080),
+ ENTRY0("rota", "060430", "ca0f6e049bf7b17407e28a3f88e19416", 671830),
+ ENTRY0("rpn", "090531", "d74a5da655a81e03447b4a241c1b5b21", 142720),
+ ENTRY0("rtdoom", "000831", "5a8494839033e8c4dd036b6875e1641e", 179200),
+ ENTRY0("samegame", "980731", "ffe1011cf0a3cae333825fcda58153da", 7168),
+ ENTRY0("samhain", "001021", "9cb11fc72283939161b456c1592b00d0", 69120),
+ ENTRY0("sangraal", "111115", "b663b3dd73ca57b4ddd6fafe7ec4ac0d", 150016),
+ ENTRY0("santassleighride", "081227", "a4b5276e5885ed3e93f1ae0319488404", 441730),
+ ENTRY0("saveprinceton", "041125", "13f9e45a4cbf39d541dea08b774377d1", 288256),
+ ENTRY0("savoirfaire", "040205", "eb122ee416ee8fa1e6f909b6de6ad9c0", 442212),
+ ENTRY0("scald", "180206", "07fb2e2748c3835bf4d1aaba70a708c7", 194048),
+ ENTRY0("informschool", "991217", "388c8e73dd3611e67ed335b6234f4e2e", 241664),
+ ENTRY0("schooldays", "092800", "2c3334c637e37b1b80ea089d6911477a", 192000),
+ ENTRY0("scopa", "110321", "621b223a5f02c7e49d18ae0d6b588d19", 101376),
+ ENTRY0("finalselection", "061009", "2dd1a94db68abf9626f55e8bd6fa91a7", 151040),
+ ENTRY0("sfiction", "120706", "662d83be00d1a832e37bdedc565c1a71", 275968),
+ ENTRY0("shadowgate", "040616", "9015104db32c046798870273f0754d3c", 141824),
+ ENTRY0("sherlock1", "021024", "97577dc5e6be837277acd5c134620d92", 230912),
+ ENTRY0("sherlock2", "021101", "b4e67e63abe681449d5cc727b161e4ea", 285794),
+ ENTRY0("sherlock3", "021114", "605303b5dfddc04e590e6f060369463f", 220672),
+ ENTRY0("sherlock4", "021231", "7b231c7acafc9a4959c859b68578d528", 217600),
+ ENTRY0("shade", "001127", "e9ef7c17a40a4d0a30bb30c37ae1e4c5", 108544),
+ ENTRY0("shadowofmemories", "061124", "07b4c14e309c00f8adec901afbc0e58b", 179094),
+ ENTRY0("shadowsoldiers", "070625", "985406d500afb5e29a3b174b28b1f21e", 150418),
+ ENTRY0("shallow", "121109", "cc2d82b5453ec921e69a80c04e1f1ad7", 245696),
+ ENTRY0("sherbet", "961216", "46a865c6f01a800536463ffe93fb3d9d", 174592),
+ ENTRY0("shrapnel", "000212", "cce4edfddaa7ce948cacdb0fde52fb2d", 98304),
+ ENTRY0("sixgrayrats", "150331", "1a2b10729ebb83a08a38f0c80020a34d", 428544),
+ ENTRY0("slackerx", "971009", "c7014f074407ddebc685dcd7bce5bd37", 55296),
+ ENTRY0("sleepcycle", "101217", "5c9c1b6c46c057099cdc6ad04f30407d", 253892),
+ ENTRY0("snafufun", "990925", "2b04ac88022c9df74b4ae59cb3f75f27", 13312),
+ ENTRY0("snowquest", "100127", "2442363dd6f7f2ee6a6ca840ca9d9881", 1034206),
+ ENTRY0("sofar", "961218", "026e1c0b7ef555011df2a9f72a2db574", 300032),
+ ENTRY0("softporn", "971018", "6624ea7bffdef1e14e28f57a90b621b0", 105984),
+ ENTRY0("solitary", "040607", "18011f0b8e3cf6aa6403313bdec2df0e", 97280),
+ ENTRY0("somewhere", "080129", "abbd658087b2c7d0a52a5a787c75c0a3", 189952),
+ ENTRY0("soreality", "100127", "1a43e51209ae7a2fa51081aff804b3c6", 146944),
+ ENTRY0("neverplayed", "140327", "69d214a7a657a8ea7f2cb951b8bc3edd", 980260),
+ ENTRY0("spacestation", "040130", "1bcf00508a8054c366d07dd507f81b22", 137216),
+ ENTRY0("spaceinvaderz", "980710", "51ebab3a743c783ed284a582346b90ba", 22528),
+ ENTRY0("spadventure", "971030", "519630c6c94fd783104061e439d57a8c", 143360),
+ ENTRY0("spiritwrak", "960606", "bfa367d09a262d4efc83cb1ba1a99efc", 260096),
+ ENTRY0("sporkery1", "080111", "eebd7008071529686b367b6641b9c52b", 147968),
+ ENTRY0("spot", "021025", "0f1feec607bd423d9f1a95748dbd1245", 55296),
+ ENTRY0("spring", "080207", "e74ccd9b57ee13df8ad2d20c14cb76b4", 330240),
+ ENTRY0("spycatcher", "111115", "628c860890e6393f22d81af5c96e9bcb", 126464),
+ ENTRY0("starborn", "110116", "0f22fb91edc9e64ad292fd6a7ca39f2e", 418624),
+ ENTRY0("seeksorrow", "160602", "6108059cd52dc1aba9112b554d6aee0f", 1365918),
+ ENTRY0("stealingthestolen", "161222", "6daa42b7ae7f933fcf2fa441e702ea70", 424914),
+ ENTRY0("stiffmst", "690609", "33746a619e4ac30a1b9be82349187062", 82432),
+ ENTRY0("stinkorswim", "090105", "7ed52b7400c044b4c3b47fa44154b5bb", 232448),
+ ENTRY0("stonecave", "091103", "87858ce7d11ae814029c5b550682c255", 220672),
+ ENTRY0("stormcellar", "081022", "c38434a33b97a9616956ce48a7d69404", 384600),
+ ENTRY0("strangeworld", "091012", "d7c09eadf30d77858c88dc0f6706ceaa", 247230),
+ ENTRY0("suicide", "101103", "a936b12bd8f8c80e5948f6035e1eb86b", 343040),
+ ENTRY0("sunburn", "150214", "598cc42e8184a840bab2d38c6d6dece0", 471332),
+ ENTRY0("sunburst", "070222", "9f1eee6db8dce7cfb803e5c430fe942a", 65532),
+ ENTRY0("sundayafternoon", "121213", "73d9c96d54922bcd58781aff41e449ed", 347136),
+ ENTRY0("briantimmons", "130114", "94545a75f7c9f0bc33a171a925f49af6", 544936),
+ ENTRY0("sushi", "010416", "a8a04fb57890e1cd1d13bae889a5e2af", 327668),
+ ENTRY0("sutwin", "970402", "b4fe3b29aab816470906ce3ae0613ba4", 31744),
+ ENTRY0("suvehnux", "071226", "e82d434c1c0a73a8755a9394a7c2e088", 248320),
+ ENTRY0("swineback", "060422", "853342a5b088a2998201123b0c5faa73", 111104),
+ ENTRY0("sycamoratree", "980107", "335cb583a295cfd8a3de4e9cd2a267ee", 54272),
+ ENTRY0("taipan", "020520", "0bd7a62517400c66fc961908688d1671", 37888),
+ ENTRY0("spiderandweb", "980226", "2bac499c020fcdd75b9c4b65e4c1d85d", 221184),
+ ENTRY0("tatctae", "970521", "21cf40691e0ba92d8e699b0fa3e18728", 378368),
+ ENTRY0("tauntingdonut", "080612", "4d8443e896e7f294cc4a250c6090f6cf", 167482),
+ ENTRY0("tcoty", "060908", "8bff4a19b0c1b9aa661f6e00d86df3b4", 471950),
+ ENTRY0("teacherfeature", "071126", "be559856dd11f6b1fa5c5ed10f83f90a", 118784),
+ ENTRY0("williamtell", "021025", "4f098036ffdc7463000c4f81b6300123", 68096),
+ ENTRY0("telling", "060518", "cfcbfc5d4a7faad9724f7bae961ee71b", 316014),
+ ENTRY0("temple", "021118", "1592469a7f1f503789443d2f56f5113f", 107008),
+ ENTRY0("terrortabby", "080514", "86d448c209e93f1caa12a319406313fa", 204800),
+ ENTRY0("tesseract", "031227", "583899fe706bd1367e31ad5a9f1c8ed2", 93696),
+ ENTRY0("tgm", "050330", "e345e2527801880bffc74981571875c9", 44544),
+ ENTRY0("thatdamnremote", "091214", "2b10cdcc7a83f6e82d3909838e5b439f", 251490),
+ ENTRY0("thatdamnelevator", "160710", "4986a2629b35b9092b5bddf40df5417b", 415184),
+ ENTRY0("penury", "120528", "58939b4506dc1e27b36cb7e75a1e2479", 231424),
+ ENTRY0("penury", "120528", "5d0cb16db2d9e72ce9f27d3764a375a9", 250436),
+ ENTRY0("cenricfamilycurse", "131022", "f0496ff6c8bc01931f6034373fbf1d44", 281730),
+ ENTRY0("cenricfamilycurse", "131218", "4fa3db6430e3a54f88962a75857ebb2f", 289096),
+ ENTRY0("tcomremake", "121103", "a36310280c2a70393dfa8750ce31c3dd", 1174070),
+ ENTRY0("tcomremake", "121103", "2fd621df080f2b8c5fbe78ca99dc00c4", 176640),
+ ENTRY0("tcomremake", "121103", "aa9995de3edd044db0f10fee2ba0f3ba", 256500),
+ ENTRY0("house", "070714", "4b146b3d5b81a3b3359ed3f3059910ab", 468830),
+ ENTRY0("advhoudini", "120511", "51982015d7f804d5bf5a25e2906b281a", 579228),
+ ENTRY0("theatre", "951203", "8b3db2f9039696ffa0114d55ac219ab9", 185856),
+ ENTRY0("dayishothitler", "081206", "2bb145727b016ab76c35acfae729293e", 175616),
+ ENTRY0("doghouse", "101130", "6476e788310c44c52d5249a66d07d037", 712070),
+ ENTRY0("emptyroom", "100813", "9b3b2c5ae701ef457baaf3db6e2aa06e", 320960),
+ ENTRY0("forgottengirls", "120817", "421e83ead89a7a0f2fd05791f9b87db7", 410034),
+ ENTRY0("henribeauchamp", "080621", "d9088b3260fdaf30fa81cde478472eca", 179712),
+ ENTRY0("garliccage", "120209", "04a598fea9264a290e2c34f0b63f8042", 176640),
+ ENTRY0("grandquest", "091209", "3fd8b15a0282e9eb9ef642776bbd916e", 181760),
+ ENTRY0("thegreat", "010902", "285ad766a386886e814e6c22ed990a7f", 91648),
+ ENTRY0("greatpancake", "180117", "9f4e359b40bc53631937c2c44ee5082c", 264268),
+ ENTRY0("horriblepyramid", "131201", "b3dfa0f543f7ca3343ca62cc5ec7847f", 365004),
+ ENTRY0("houseoffear", "141121", "86812b0b8866038dcce67ba265e5bd5e", 572530),
+ ENTRY0("island", "130226", "6ee80981b5921ad6f159ed740b54dd1a", 354882),
+ ENTRY0("kazooist", "130105", "9ae3841d39c8b6f8dffa9c84408d9744", 204308),
+ ENTRY0("priceoffreedom", "120919", "589c7d77bae5aaa502807021e506fb6b", 178072),
+ ENTRY0("prize", "120827", "9dc341cb340b6950602c52bd8ef76305", 408786),
+ ENTRY0("nascarexperience", "130827", "d45dc3ab1f9898cf85a09854db0a6b17", 152576),
+ ENTRY0("smallroom", "100805", "5102ac48e17b26b69ab8737ceb00b3d5", 154112),
+ ENTRY0("spotlight", "140531", "ac25066421da9530f5f19c7245d0f6d9", 336384),
+ ENTRY0("stargods", "111216", "92a0b939e5d12178f74b3e23ece89ca1", 268288),
+ ENTRY0("terribleoldmanse", "100819", "518a610437203e063fa550d5c240e664", 891570),
+ ENTRY0("townmusicians", "120125", "35624466eb61b2dcbc408cd6c75a6ab9", 414042),
+ ENTRY0("warblersnest", "131221", "147d80b524cf8ee812459c0a7426cb87", 863268),
+ ENTRY0("vergingpaths", "151027", "c6df1e824df593e8c4995502e6704571", 1131672),
+ ENTRY0("minimalistgame", "101102", "4ea052eed3e86283912bff5e817151fb", 151040),
+ ENTRY0("talemorning", "140109", "234a6da218d56ca47410f7e03c2b89a8", 286756),
+ ENTRY0("paperbagprincess", "150818", "fdf4a244b41e4a314cfa189ba85453cb", 398848),
+ ENTRY0("worldupsidedown", "151224", "1b7311638555848aaf3a50857ed4035b", 457496),
+ ENTRY0("thorn", "030701", "63faf28ec7cad962816e9ed3a7310a74", 75776),
+ ENTRY0("threecows", "120208", "449fd20d3b0981ba6f8a7d929e56c820", 153088),
+ ENTRY0("threediopolis", "140817", "76929b10a1fddcbba4e704b9d7fecdc0", 584032),
+ ENTRY0("threemore", "120110", "d89d23f3cacd8541df1b1792362b206b", 155136),
+ ENTRY0("timefortea", "100617", "af469380d1ace75480a80f578091ac4f", 313344),
+ ENTRY0("tirehoax", "080104", "09b696f73a1d2d37ee376fac97a2c406", 228746),
+ ENTRY0("tk1", "950925", "7c93a305295c891ba9de5cad4c190f8c", 52224),
+ ENTRY0("tkatc", "151121", "cecca5aa05f7ea35550b473b90c3766e", 408576),
+ ENTRY0("tok", "100227", "1b3b24c4616bf7e47e99eacca7308153", 241590),
+ ENTRY0("downtowntokyo", "000615", "8d9ef45f2bc4fdb8eccf7d9991a2c76b", 107520),
+ ENTRY0("tower", "151228", "04de5c49bb3eecb4e4d1cb0fd5ea4a93", 391156),
+ ENTRY0("toxinx", "110519", "2223181742216f1c1bb74bca88dda729", 200704),
+ ENTRY0("trapped", "110413", "b05f8909d1bbedb97f6c50eac19d6b2a", 254362),
+ ENTRY0("toask", "130614", "1491b55bbcb2a0e7b1bfe99b94a9d387", 524288),
+ ENTRY0("troll", "980518", "3e0f69e678dd289cd32bf41b2be58bd6", 64000),
+ ENTRY0("trw", "021229", "1fdb2baeefcabb635ddbbb3433b1b125", 126464),
+ ENTRY0("trystoffate", "970629", "7f7eb7e7df03025b9046139d042dd363", 165888),
+ ENTRY0("tubetrouble", "950901", "478a208e21def77097309c2b152a968e", 50176),
+ ENTRY0("tutorial", "111030", "36147ba605eb49902f9d514a08638cd1", 468142),
+ ENTRY0("tutorialhotel", "100713", "2d57f52f53fa0845eb19ea97a29005fa", 154624),
+ ENTRY0("tuuli", "180501", "0b7e2bb3f6887f30fb98b54230acf039", 611734),
+ ENTRY0("typo", "041119", "549875ea83b4230896fa7d3fa18ba0a3", 100864),
+ ENTRY0("uhohdemo", "980218", "4e8b90354c96760f36bfbfa2ba4fc04c", 176640),
+ ENTRY0("underdoos", "970329", "3ef9b348b4223b901bdfacb854fee16e", 58880),
+ ENTRY0("underthebed", "120522", "96659568d70385c022a9ecc41fd6219c", 246272),
+ ENTRY0("ungodlyhour", "140927", "d91b088567ff78a3caaa863cfc6db7b0", 333874),
+ ENTRY0("uninvited", "121216", "2f364062b6d1f05c8b518a11d58c399b", 193536),
+ ENTRY0("uninvited", "121216", "c2b16596310202bf40c512c5de571858", 623410),
+ ENTRY0("unicornpool", "100914", "8bf72169c75e347b52aa592b544e1357", 111616),
+ ENTRY0("vacation", "060527", "0a0da195fa5c41a59028e69eeae2d9e0", 248320),
+ ENTRY0("vagueness", "080825", "6d3641b71d42516e573ff0cff90cd40e", 298402),
+ ENTRY0("vampiresun", "020405", "3364b9d9d1a754e1e3bab61a96957ed2", 254464),
+ ENTRY0("notinvenice", "120117", "191d800215e21a764394ec46efe9a728", 194560),
+ ENTRY0("vespers", "051128", "35377bb25ea1f3038377c8fb51795d6c", 309760),
+ ENTRY0("varicella", "990831", "f5791cd7d8ebfd568928eb2b888a5264", 501760),
+ ENTRY0("vigilance", "070106", "97364e2e3f4197bf9dcfeef8fa6e6ee9", 183296),
+ ENTRY0("vindaloo", "960613", "d4e69f29f435b55dff5057a1d0d5bd45", 53248),
+ ENTRY0("violet", "081123", "0941c8db96a7ef82ebf10fe6cdd1859e", 601262),
+ ENTRY0("virtuality", "100131", "a68fe31bf3cce9b3dea7da0d733f45b0", 397244),
+ ENTRY0("lackofvision", "980412", "25a2830653906a2225742505e1fd7cac", 47616),
+ ENTRY0("visitor", "000321", "9786e58864fdd7429c3218b07d023498", 56832),
+ ENTRY0("vosr", "060925", "73746a1dd6938ca4b034eb424936ffe7", 267776),
+ ENTRY0("wadewar3", "020512", "458b5b368a71329dcfc59223c449cf88", 143872),
+ ENTRY0("walkinthepark", "100213", "d116d7a9a5160fc336b36f7e8a077a42", 145408),
+ ENTRY0("walkamongus", "181031", "5b6b726c28b897d299d4add5fcd3943e", 2292016),
+ ENTRY0("wallpaper", "061117", "b25d80417e7b783bdc377302a3b53138", 344978),
+ ENTRY0("warp", "640101", "3554d76096e5d06d9417e20a21e95ea0", 70144),
+ ENTRY0("wizardscastle", "000918", "b205946471d687d83b8dfc988734ab43", 34304),
+ ENTRY0("weapon", "010706", "b28a2d2ab4a2ba54e5c5d980764c26a4", 142336),
+ ENTRY0("weather", "960613", "00f90d5b28604243708ad41cc6a7dcea", 93696),
+ ENTRY0("thewedding", "970602", "40b0b13d420f894ebac54106f0e92ff8", 151552),
+ ENTRY0("thewedding", "100221", "b3749fb3d3999331bcd4415969cb6602", 255940),
+ ENTRY0("weirdcity", "140613", "0a434b5011389e47b391b707ccf6611a", 339786),
+ ENTRY0("weirdness", "030922", "e98bc679d94c0c1c6a241737f7c8ae28", 89600),
+ ENTRY0("wwwanderer", "080705", "a401b781048229b05b444bdbb68e5b71", 283592),
+ ENTRY0("wernersquest1", "020225", "e158f13e9f55eef58a0f7a6affec180e", 52736),
+ ENTRY0("wernersquest2", "020225", "6ebf8ffd5687674754473f4851df4c01", 52736),
+ ENTRY0("wernersquest3", "020225", "690a16946cacccaf2d5fd3ca2cf9fc4a", 52736),
+ ENTRY0("wernersquest4", "020225", "2098db329eff1b0d1cad56f89bd38723", 52736),
+ ENTRY0("weareunfinished", "160419", "28d307b40b627af2708c71aaf43a64d5", 413298),
+ ENTRY0("whispers", "050926", "360c24ec5c47ced2b03ce38c6e4e2e8d", 177152),
+ ENTRY0("whitehouses", "140511", "bfa0206e9903d19551db483f810efa09", 423362),
+ ENTRY0("wildflowers", "140825", "11df47a8f9ddebbe3ed903ef8c85597a", 518936),
+ ENTRY0("winchester", "020131", "9abc235bc791a3f38ee81aa6496112d0", 293888),
+ ENTRY0("windhall", "960828", "eced9e2a38a5b694ceab8ffa4c120b90", 320000),
+ ENTRY0("winterwonderland", "030227", "0994f3c477e8e221d9c70df72fb936df", 194560),
+ ENTRY0("wir1", "060503", "f9b1425b5c55f1b3f3caa50a7963be17", 652866),
+ ENTRY0("wir2", "060503", "c64dfefbc7a320126342f6a522a3b8bd", 514520),
+ ENTRY0("wireless", "040909", "2af916f6295f32533eadd97afccb11d8", 140800),
+ ENTRY0("insidewoman", "090628", "c9505d9dc5badfd95a6be7b4b4edc2a8", 478720),
+ ENTRY0("wossname", "000225", "ddf9652869c0892cc2d2150607dbf0c0", 77312),
+ ENTRY0("wrenlaw", "130429", "24e41af3de0fd4052ef537d0e82b067c", 1835620),
+ ENTRY0("wscholars", "071107", "03d438cfb4920cc831da090e0c150f2a", 587032),
+ ENTRY0("wump2ka", "041119", "64e790c40f04ab7fe2405807f0cecb9f", 174080),
+ ENTRY0("wumpus", "991216", "abdd37af526d03538cbb20d91a941489", 12800),
+ ENTRY0("wurm", "021126", "0ffbc60fcccaccf1abfa877acf293b2a", 4096),
+ ENTRY0("xenophobia", "111115", "d132c3b5defcef212f36e03a7c9a2e74", 124928),
+ ENTRY0("yagwad", "001121", "6d74b0e48dc46e589efd071e3d329f45", 167936),
+ ENTRY0("yakshaving", "101127", "3c4114a0999f2a68bd08c58fe0494a97", 394958),
+ ENTRY0("yomomma", "100228", "325cd63060b5509300c71af58902670c", 1081664),
+ ENTRY0("stewgoing", "150410", "93fdaa375c1db772b27918f096f43f53", 1604582),
+ ENTRY0("zlife", "960121", "36bc7d2fdd0bbac996466e05af239924", 6656),
+ ENTRY0("zassball", "980314", "ab906aa444b7fdd0a92119828616bb58", 12288),
+ ENTRY0("zbefunge", "021128", "6ae16ce61922211922edf777bb6113ce", 56320),
+ ENTRY0("zcamel", "000918", "96b316f9b7e133eaccbec98a4fb0cf46", 6656),
+ ENTRY0("zchess", "040124", "456fe3c2d3d986e8652c4a439e738686", 6656),
+ ENTRY0("zdungeon", "040826", "ddcf45ee10cc5f42ac1b273eb9a0d1f8", 188928),
+ ENTRY0("zedfunge", "031111", "3198856622768685e17ffba6b8313e49", 108032),
+ ENTRY0("zedit", "971103", "40a26af1581ebdbbd867b18229ce8187", 65024),
+ ENTRY0("zegro", "041112", "bb7a0ef8d23cfb88afb2dc1e40be9613", 261632),
+ ENTRY0("zenon", "100122", "2c82b81ac43fcfbf2abee4d8c4f98cad", 67584),
+ ENTRY0("zenspeak", "990217", "53a344bef35a5778307aeb937a31f001", 123392),
+ ENTRY0("zcatalog", "980519", "f5ad7533e0d33ced32429a04473ec3d0", 126976),
+ ENTRY0("zokoban", "990810", "e599ec4ff1eee51afbd6a3f8e8d8680e", 18944),
+ ENTRY0("zombies", "990524", "4535f316650ee6c76b95ced1100b12d0", 7680),
+ ENTRY0("zorkianstories1", "121014", "dbf1900ac273a3051cc2bd405aef4620", 380454),
+ ENTRY0("zorknplus9", "120517", "3d95fc9e6e60d372413bf10a90570b2e", 402874),
+ ENTRY0("zracer", "071203", "04d60a3f69b68955b008cf7a7b08017f", 40960),
+ ENTRY0("zsnake", "010201", "f6aca196d9a1de4f05df6af74327f8f8", 11264),
+ ENTRY0("ztornado", "030711", "dd3edc31ee39d186566a6386c29aafe1", 20992),
+ ENTRY0("ztrek", "000229", "99653ccefa7203a37e8f0ed71c88fa98", 29696),
+ ENTRY0("ztuu", "970828", "ee5f33204264a1316c6acdb1036d19a9", 229888),
+ ENTRY0("zugzwang", "990710", "e538e90a90a7c280a078b50d2ad2e44d", 58880),
// Painless Little Stupid Games