From 48d3b829d6a82cab5a62d84e07a51b2687a63572 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Wed, 12 Dec 2018 19:38:29 -0800 Subject: GLK: FROTZ: Adding detection entries, add ability to read serials from Blorb archives --- engines/glk/blorb.cpp | 13 +- engines/glk/blorb.h | 6 + engines/glk/frotz/detection.cpp | 20 ++- engines/glk/frotz/detection_tables.h | 250 ++++++++++++++++++++++++++++++++++- 4 files changed, 282 insertions(+), 7 deletions(-) (limited to 'engines/glk') 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 _chunks; ///< list of chunk descriptors private: @@ -61,6 +62,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() 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 -- cgit v1.2.3