diff options
Diffstat (limited to 'tools')
-rw-r--r-- | tools/convbdf.c | 8 | ||||
-rw-r--r-- | tools/create_msvc/create_msvc.cpp | 13 | ||||
-rwxr-xr-x | tools/credits.pl | 31 | ||||
-rw-r--r-- | tools/make-scumm-fontdata.c | 2 | ||||
-rw-r--r-- | tools/md5table.c | 1 | ||||
-rw-r--r-- | tools/module.mk | 1 | ||||
-rwxr-xr-x | tools/po2c | 260 | ||||
-rw-r--r-- | tools/scumm-md5.txt | 43 |
8 files changed, 327 insertions, 32 deletions
diff --git a/tools/convbdf.c b/tools/convbdf.c index 4341eac2e7..ad0d9d2373 100644 --- a/tools/convbdf.c +++ b/tools/convbdf.c @@ -38,12 +38,12 @@ #include <time.h> int READ_UINT16(void *addr) { - unsigned char *buf = addr; + unsigned char *buf = (unsigned char *)addr; return (buf[0] << 8) | buf[1]; } void WRITE_UINT16(void *addr, int value) { - unsigned char *buf = addr; + unsigned char *buf = (unsigned char *)addr; buf[0] = (value >> 8) & 0xFF; buf[1] = value & 0xFF; } @@ -611,7 +611,7 @@ int bdf_read_bitmaps(FILE *fp, struct font* pf) { /* determine whether font doesn't require encode table*/ l = 0; for (i = 0; i < pf->size; ++i) { - if (pf->offset[i] != l) { + if (pf->offset[i] != (unsigned long)l) { encodetable = 1; break; } @@ -648,7 +648,7 @@ int bdf_read_bitmaps(FILE *fp, struct font* pf) { /* reallocate bits array to actual bits used*/ if (ofs < pf->bits_size) { - pf->bits = realloc(pf->bits, ofs * sizeof(bitmap_t)); + pf->bits = (bitmap_t *)realloc(pf->bits, ofs * sizeof(bitmap_t)); pf->bits_size = ofs; } else { diff --git a/tools/create_msvc/create_msvc.cpp b/tools/create_msvc/create_msvc.cpp index a78c9c46a1..71cc35f8e2 100644 --- a/tools/create_msvc/create_msvc.cpp +++ b/tools/create_msvc/create_msvc.cpp @@ -838,11 +838,14 @@ const Feature s_features[] = { { "mpeg2", "USE_MPEG2", "libmpeg2.lib", false, "mpeg2 codec for cutscenes" }, // ScummVM feature flags - { "scalers", "USE_SCALERS", "", true, "Scalers" }, - { "hqscalers", "USE_HQ_SCALERS", "", true, "HQ scalers" }, - { "16bit", "USE_RGB_COLOR", "", true, "16bit color support" }, - { "mt32emu", "USE_MT32EMU", "", true, "integrated MT-32 emulator" }, - { "nasm", "USE_NASM", "", true, "IA-32 assembly support" }, // This feature is special in the regard, that it needs additional handling. + { "scalers", "USE_SCALERS", "", true, "Scalers" }, + { "hqscalers", "USE_HQ_SCALERS", "", true, "HQ scalers" }, + { "16bit", "USE_RGB_COLOR", "", true, "16bit color support" }, + { "mt32emu", "USE_MT32EMU", "", true, "integrated MT-32 emulator" }, + { "nasm", "USE_NASM", "", true, "IA-32 assembly support" }, // This feature is special in the regard, that it needs additional handling. + { "translation", "USE_TRANSLATION", "", true, "Translation support" }, + { "langdetect", "USE_DETECTLANG", "", true, "System language detection support" } // This feature actually depends on "translation", there + // is just no current way of properly detecting this... }; } // End of anonymous namespace diff --git a/tools/credits.pl b/tools/credits.pl index bff1251f7a..02a42c12cc 100755 --- a/tools/credits.pl +++ b/tools/credits.pl @@ -854,6 +854,31 @@ begin_credits("Credits"); add_person("Johannes Schickel", "LordHoto", ""); end_section(); end_section(); + + begin_section("Translations"); + begin_persons(); + add_person("Thierry Crozat", "criezy", "Translation Lead"); + end_persons(); + begin_section("Catalan"); + add_person("Jordi Vilalta Prat", "jvprat", ""); + end_section(); + begin_section("French"); + add_person("Thierry Crozat", "criezy", ""); + end_section(); + begin_section("German"); + add_person("Simon Sawatzki", "SimSaw", ""); + add_person("Lothar Serra Mari", "Lothar93", ""); + end_section(); + begin_section("Hungarian"); + add_person("Alex Bevilacqua", "", ""); + end_section(); + begin_section("Italian"); + add_person("Matteo Angelino", "Maff", ""); + end_section(); + begin_section("Russian"); + add_person("Eugene Sandulenko", "sev", ""); + end_section(); + end_section(); begin_section("Websites (design)"); begin_persons(); @@ -922,7 +947,7 @@ begin_credits("Credits"); add_person("Ravi I.", "", "SCI0 sound resource specification"); add_person("Ruediger Hanke", "", "Port to the MorphOS platform"); add_person("Rune Orsval", "", "Configuration file editor"); - add_person("Rickard Lind", "", "MT32->GM MIDI mapping magic, sound research"); + add_person("Rickard Lind", "", "MT-32->GM MIDI mapping magic, sound research"); add_person("Rink Springer", "", "Port to the DOS platform, several bug fixes"); add_person("Robey Pointer", "", "Bug tracking system hosting"); add_person("Sergey Lapin", "", "Port of Carl's type 2 decompression code"); @@ -933,8 +958,8 @@ begin_credits("Credits"); add_person("Sean Terrell", "", ""); end_persons(); add_paragraph("Special thanks to Prof. Dr. Gary Nutt ". - "for allowing the FreeSCI VM extension as a ". - "course project in his Advanced OS course."); + "for allowing the FreeSCI VM extension as a ". + "course project in his Advanced OS course."); add_paragraph("Special thanks to Bob Heitman and Corey Cole for their support of FreeSCI."); end_section(); diff --git a/tools/make-scumm-fontdata.c b/tools/make-scumm-fontdata.c index f251a22b80..991d49831a 100644 --- a/tools/make-scumm-fontdata.c +++ b/tools/make-scumm-fontdata.c @@ -821,7 +821,7 @@ static const unsigned char spanishCharsetDataV2[] = { unsigned char *specialCharsetData = NULL; int numSpecialChars = 0; -void compressCharset(const unsigned char *data, char *var, char *name) { +void compressCharset(const unsigned char *data, const char *var, const char *name) { int i; printf("// %s\n", name); diff --git a/tools/md5table.c b/tools/md5table.c index 6823607b27..7d76b7541d 100644 --- a/tools/md5table.c +++ b/tools/md5table.c @@ -77,6 +77,7 @@ typedef struct { * common/util.h). */ static const StringMap platformMap[] = { + { "2gs", "kPlatformApple2GS" }, { "3DO", "kPlatform3DO" }, { "Amiga", "kPlatformAmiga" }, { "Atari", "kPlatformAtariST" }, diff --git a/tools/module.mk b/tools/module.mk index 896a2e504b..2c62e427ea 100644 --- a/tools/module.mk +++ b/tools/module.mk @@ -65,7 +65,6 @@ md5scumm: tools/md5table$(EXEEXT) tools/md5table$(EXEEXT) --c++ < $(srcdir)/tools/scumm-md5.txt > $(srcdir)/engines/scumm/scumm-md5.h cp $(srcdir)/tools/scumm-md5.txt $(srcdir)/../../web/trunk/data/scumm-md5.txt - # # Rules which automatically and implicitly rebuild the credits and # MD5 tables when needed. diff --git a/tools/po2c b/tools/po2c new file mode 100755 index 0000000000..9dbc5e0fb7 --- /dev/null +++ b/tools/po2c @@ -0,0 +1,260 @@ +#!/usr/bin/perl + +# +# po2c - Converts .po files to C code +# +# Copyright (C) 2004 Angel Ortega <angel@triptico.com> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# http://www.triptico.com +# + +$VERSION = "1.0.2-scummvm"; + +if(scalar(@ARGV) == 0) +{ + print "Usage: po2c {po file[s]}\n"; + exit 1; +} + +%msgs = (); +%msgids = (); + +# stage 1: loading + +# arguments are .po files +foreach my $f (@ARGV) +{ + my ($lang); + my ($langDesc); + + next unless(($lang) = ($f =~ /([^\/]+)\.po$/)); + + if(open F, $f) + { + my ($msgid, $val, %a); + + while(<F>) + { + chomp; + + # ignore blank lines or comments + next if /^$/ or /^#/; + + if(/^msgid\s+\"(.*)\"\s*$/) + { + # store previous msgid + if(defined($msgid)) + { + $a{$msgid} = $val; + $msgids{$msgid} ++; + } + + # start of msgid + $val = $1; + } + elsif(/^msgstr\s+\"(.*)\"\s*$/) + { + # store previous msgid + $msgid = $val; + + # start of msgstr + $val = $1; + } + elsif(/^\"(.*)\"\s*$/) + { + # add to current value + $val .= $1; + } + } + + # store previous msgid + if(defined($msgid)) + { + $a{$msgid} = $val; + $msgids{$msgid} ++; + } + + close F; + + # add to the global message pool + $msgs{$lang} = \%a; + } +} + +# stage 2: convert the data + +# stores all sorted msgids into @msgids +@msgids = sort(keys(%msgids)); + +# travels again, storing indexes into %msgids +for(my $n = 0;$n < scalar(@msgids);$n++) +{ + $msgids{$msgids[$n]} = $n; +} + +# stage 3: dump as C++ code + +print "// generated by po2c $VERSION - Do not modify\n\n"; + +# dump first the msgid array +print "static const char * const _messageIds[] = {\n"; + +for(my $n = 0;$n < scalar(@msgids);$n++) +{ + print "\t/* $n */ \"" . $msgids[$n] . "\",\n"; +} + +print "\tNULL\n};\n\n"; + +# dump the lang structure +print "struct PoMessageEntry {\n"; +print "\tint msgid;\n"; +print "\tconst char *msgstr;\n"; +print "};\n\n"; + +# dump now each language + +foreach my $l (keys(%msgs)) +{ + print "static const PoMessageEntry _translation_${l}\[\] = {\n"; + + # get the translation table for the language $l + my ($m) = $msgs{$l}; + +# while (my ($msgstr, $msgid) = each (%$m)) + foreach my $msgid (sort(keys(%$m))) + { + my ($msgstr) = ""; + + # make it 7-bit safe + foreach $c (split(//, $m->{$msgid})) { + if (ord($c) > 0x7f) { + $msgstr .= sprintf("\\%o", ord($c)); + } else { + $msgstr .= $c; + } + } + + print "\t{ " . $msgids{$msgid} . ", \"" . $msgstr . "\" },\n" + if $msgstr; + } + + print "\t{ -1, NULL }\n};\n\n"; +} + +# finally, dump the languages + +print "struct PoLangEntry {\n"; +print "\tconst char *lang;\n"; +print "\tconst char *charset;\n"; +print "\tconst PoMessageEntry *msgs;\n"; +print "};\n\n"; +print "const PoLangEntry _translations[] = {\n"; + +foreach my $l (keys(%msgs)) +{ + $header = $msgs{$l}->{""}; + $header =~ /charset=([^\\]+)/; + $charset = $1; + print "\t{ \"" . $l . "\", \"" . $charset . "\", _translation_${l} },\n"; +} + +print "\t{ NULL, NULL, NULL }\n};\n\n"; + +print "// code\n"; +print << 'EOF'; + +static const PoMessageEntry *_currentTranslation = NULL; +static int _currentTranslationMessageEntryCount = 0; +static const char *_currentTranslationCharset = NULL; + +void po2c_setlang(const char *lang) { + _currentTranslation = NULL; + _currentTranslationMessageEntryCount = 0; + _currentTranslationCharset = NULL; + + // if lang is NULL or "", deactivate it + if (lang == NULL || *lang == '\0') + return; + + // searches for a valid language array + for (int i = 0; _currentTranslation == NULL && _translations[i].lang != NULL; ++i) { + if (strcmp(lang, _translations[i].lang) == 0) { + _currentTranslation = _translations[i].msgs; + _currentTranslationCharset = _translations[i].charset; + } + } + + // try partial searches + for (int i = 0; _currentTranslation == NULL && _translations[i].lang != NULL; ++i) { + if (strncmp(lang, _translations[i].lang, 2) == 0) { + _currentTranslation = _translations[i].msgs; + _currentTranslationCharset = _translations[i].charset; + } + } + + // if found, count entries + if (_currentTranslation != NULL) { + for (const PoMessageEntry *m = _currentTranslation; m->msgid != -1; ++m) + ++_currentTranslationMessageEntryCount; + } +} + +const char *po2c_gettext(const char *msgid) { + // if no language is set or msgid is empty, return msgid as is + if (_currentTranslation == NULL || *msgid == '\0') + return msgid; + + // binary-search for the msgid + int leftIndex = 0; + int rightIndex = _currentTranslationMessageEntryCount - 1; + + while (rightIndex >= leftIndex) { + const int midIndex = (leftIndex + rightIndex) / 2; + const PoMessageEntry * const m = &_currentTranslation[midIndex]; + + const int compareResult = strcmp(msgid, _messageIds[m->msgid]); + + if (compareResult == 0) + return m->msgstr; + else if (compareResult < 0) + rightIndex = midIndex - 1; + else + leftIndex = midIndex + 1; + } + + return msgid; +} + +const char *po2c_getcharset(void) { + if (_currentTranslationCharset) + return _currentTranslationCharset; + else + return "ASCII"; +} + +int po2c_getnumlangs(void) { + return ARRAYSIZE(_translations) - 1; +} + +const char *po2c_getlang(const int num) { + assert(num < ARRAYSIZE(_translations)); + return _translations[num].lang; +} +EOF + +exit 0; diff --git a/tools/scumm-md5.txt b/tools/scumm-md5.txt index 0637c386d7..c3e48d6c5a 100644 --- a/tools/scumm-md5.txt +++ b/tools/scumm-md5.txt @@ -60,7 +60,7 @@ maniac Maniac Mansion 7f45ddd6dbfbf8f80c0c0efea4c295bc 1972 en DOS V1 V1 - Fingolfin - 17f7296f63c78642724f057fd8e736a7 -1 gb NES NES - + 17f7296f63c78642724f057fd8e736a7 2082 gb NES NES - 91d5db93187fab54d823f73bd6441cb6 -1 us NES NES - 1c7e7db2cfab1ad62746ab680a634204 -1 fr NES NES - 3a5ec90d556d4920976c5578bfbfaf79 -1 de NES NES - @@ -172,10 +172,10 @@ loom Loom 5d88b9d6a88e6f8e90cded9d01b7f082 8307 en DOS VGA VGA CD Version v1.0 from 10. Feb 92 (Talkie) Peter Eckerlein, Fingolfin - c5d10e190d4b4d59114b824f2fdbd00e -1 en FM-TOWNS FM-TOWNS - - dhewg, Andrea Petrucci + c5d10e190d4b4d59114b824f2fdbd00e 7540 en FM-TOWNS FM-TOWNS - - dhewg, Andrea Petrucci 31b8fda4c8c7413fa6b39997e776eba4 -1 jp FM-TOWNS FM-TOWNS - - khalek, Andrea Petrucci - 0aa050f4ad79402fbe9c4f78fb8ac494 -1 en PC-Engine PC-Engine - - Kirben + 0aa050f4ad79402fbe9c4f78fb8ac494 6532 en PC-Engine PC-Engine - - Kirben 79b05f628586837e7166e82b2279bb50 -1 jp PC-Engine PC-Engine - - clone2727 5a35e36fd777e9c37a49c5b2faca52f9 6108 en DOS EGA EGA Demo non-interactive Fingolfin @@ -189,7 +189,7 @@ monkey The Secret of Monkey Island 49210e124e4c2b30f1290a9ef6306301 8357 en DOS EGA EGA 8 disk v1.0, 9/18/90 Fingolfin 1dd3c11ea4439adfe681e4e405b624e1 -1 fr DOS EGA EGA 8 disk Andrea Petrucci - fc6b6148e80d67939d9a18697c0f626a -1 de DOS EGA EGA 8 disk ghoostkilla + fc6b6148e80d67939d9a18697c0f626a 8367 de DOS EGA EGA 8 disk ghoostkilla 910e31cffb28226bd68c569668a0d6b4 -1 es DOS EGA EGA 8 disk Andrea Petrucci 1d05cd189e4908f79b57e78a4402f292 -1 en DOS EGA EGA 4 disk Andrea Petrucci ce6a4cef315b20fef58a95bc40a2d8d3 -1 fr DOS EGA EGA 4 disk Matthieu Milan @@ -225,12 +225,12 @@ monkey The Secret of Monkey Island c13225cb1bbd3bc9fe578301696d8021 -1 en SEGA SEGA - - 057c9b456dedcc4d71b991a3072a20b3 9465 jp SEGA SEGA - - GloKidd - 8eb84cee9b429314c7f0bdcf560723eb -1 en FM-TOWNS FM-TOWNS - - Paul Priest, Andrea Petrucci + 8eb84cee9b429314c7f0bdcf560723eb 9925 en FM-TOWNS FM-TOWNS - - Paul Priest, Andrea Petrucci e17db1ddf91b39ca6bbc8ad3ed19e883 -1 jp FM-TOWNS FM-TOWNS - - Paul Priest, Andrea Petrucci 71523b539491527d9860f4407faf0411 7607 en DOS Demo EGA Demo - Fingolfin 771bc18ec6f93837b839c992b211904b -1 de DOS Demo EGA Demo - khalek - 54a936ad06161ff7bfefcb96200f7bff -1 en Amiga VGA VGA Demo - khalek + 54a936ad06161ff7bfefcb96200f7bff 7617 en Amiga VGA VGA Demo - khalek pass Passport to Adventure e6cd81b25ab1453a8a6d3482118c391e 7857 en DOS - - v1.0 9/14/90 Fingolfin @@ -279,8 +279,9 @@ atlantis Indiana Jones and the Fate of Atlantis 1a6e5ae2777a6a33f06ffc0226210934 -1 en Mac - CD - Scott Summers 2d9d46f23cb07bbc90b8ad464d3e4ff8 -1 en Mac - CD Mac bundle Joachim Eberhard 8e9417564f33790815445b2136efa667 11915 jp Mac - CD - Petr Maruska + e8d0697906e53fee8b7e9f5652696da8 11915 jp DOS - CD - Petr Maruska, tracker #3017219 - c7be10f775404fd9785a8b92a06d240c -1 en FM-TOWNS - - - dhewg, Andrea Petrucci + c7be10f775404fd9785a8b92a06d240c 12030 en FM-TOWNS - - - dhewg, Andrea Petrucci 4d34042713958b971cb139fba4658586 -1 jp FM-TOWNS - - - Andrea Petrucci 035deab53b47bc43abc763560d0f8d4b -1 en DOS Floppy Demo - @@ -325,7 +326,7 @@ samnmax Sam & Max Hit the Road 0f6f2e716ba896a44e5059bba1de7ca9 -1 it All? - CD - Andrea Petrucci 4ba7fb331296c283e73d8f5b2096e551 -1 es All? - CD - Andrea Petrucci d43352a805d78b5f4936c6d7779bf575 -1 ru DOS - CD - - 166553538ff320c69edafeee29525419 -1 en Mac - CD Mac bundle Joachim Eberhard + 166553538ff320c69edafeee29525419 199195304 en Mac - CD Mac bundle Joachim Eberhard 3a5d13675e9a23aedac0bac7730f0ac1 -1 fr Mac - CD Mac bundle ThierryFR c3196c5349e53e387aaff1533d95e53a -1 en DOS Floppy Demo - @@ -386,7 +387,7 @@ football Backyard Football 7fc6cdb46b4c9d384c52327f4bca6416 -1 en All - - - sev 425205754fa749f4f0b0dd9d09fa45fd -1 en All - Demo - Joachim Eberhard - 5bd335265a61caa3d78956ad9f88ba23 -1 en All - Demo - sev + 5bd335265a61caa3d78956ad9f88ba23 23135 en All - Demo - sev football2002 Backyard Football 2002 a095616d2d23ccf43b8e257711202cba -1 en All - - - clone2727 @@ -484,6 +485,12 @@ freddi Freddi Fish 1: The Case of the Missing Kelp Seeds a197a87ae77f3b3333f09a7a2c448fe2 -1 en Windows HE 99 Updated - Jonathan af2bd1a43b50b55915d87994e093203d 34829 de Windows HE 99 Updated - Lightkey 57a5cfec9ef231a007043cc1917e8988 -1 en Wii HE 100 - - sanguinehearts + 56b5922751be7ffd771b38dda56b028b 34837 nl Wii HE 100 - - George Kormendi + 3ae7f002d9256b8bdf76aaf8a3a069f8 34837 gb Wii HE 100 - - George Kormendi + 30d1903b0715759af064be2127381cd0 34837 de Wii HE 100 - - George Kormendi + 4afb734df8315ee412669c812d4cf0a1 34837 fr Wii HE 100 - - George Kormendi + a59a438cb182124c30c4447d8ed469e9 34837 nb Wii HE 100 - - George Kormendi + 880c5ca5b944648b3f8b03feb41705a8 34837 se Wii HE 100 - - George Kormendi c7c492a107ec520d7a7943037d0ca54a -1 nl Windows HE 71 Demo - DarthBo 084ed0fa98a6d1e9368d67fe9cfbd417 -1 en Windows HE 71 Demo - khalek @@ -557,7 +564,7 @@ freddicove Freddi Fish 5: The Case of the Creature of Coral Cove 4ce2d5b355964bbcb5e5ce73236ef868 -1 ru Windows HE 100 - - sev 6b257bb2827dd894b8109a50a1a18b5a -1 nl All HE 100 Demo - Kirben, sev - 45082a5c9f42ba14dacfe1fdeeba819d -1 en All HE 100 Demo - sev + 45082a5c9f42ba14dacfe1fdeeba819d 18422 en All HE 100 Demo - sev maze Freddi Fish and Luther's Maze Madness 4f04b321a95d4315ce6d65f8e1dd0368 -1 us All HE 80 - - Kirben @@ -588,7 +595,7 @@ airport Let's Explore the Airport with Buzzy 7ea2da67ebabea4ac20cee9f4f9d2934 -1 en Mac - Demo - khalek 8ffd618a776a4c0d8922bb28b09f8ce8 -1 en Windows - Demo - khalek - e144f5f49d9241d2a9dee2576b3d09cb -1 en Windows - Demo - khalek + e144f5f49d9241d2a9dee2576b3d09cb 51152 en Windows - Demo - khalek 86c9902b7bec1a17926d4dae85beaa45 -1 en Windows HE 71 Demo - khalek farm Let's Explore the Farm with Buzzy @@ -601,7 +608,7 @@ farm Let's Explore the Farm with Buzzy 39fd6db10d0222d817025c4d3346e3b4 -1 en Mac - Demo - Joachim Eberhard bf8b52fdd9a69c67f34e8e9fec72661c -1 en Windows HE 71 Demo - khalek, sev 0557df19f046a84c2fdc63507c6616cb -1 nl Windows HE 72 Demo - adutchguy - 8d479e36f35e80257dfc102cf4b8a912 -1 en Windows HE 72 Demo - khalek, sev + 8d479e36f35e80257dfc102cf4b8a912 34333 en Windows HE 72 Demo - khalek, sev jungle Let's Explore the Jungle with Buzzy 659942b9a6b519f123a13cca3c333a13 -1 en Mac - - - Joachim Eberhard @@ -654,13 +661,13 @@ pajama3 Pajama Sam 3: You Are What You Eat From Your Head to Your Feet f08145577e4f13584cc90b3d6e9caa55 -1 nl All - Demo - joostp a654fb60c3b67d6317a7894ffd9f25c5 -1 us All - Demo - sev a9f2f04b1ecaab9495b59befffe9bf88 -1 us All - Demo - sev - 0c45eb4baff0c12c3d9dfa889c8070ab -1 de All - Demo - Joachim Eberhard + 0c45eb4baff0c12c3d9dfa889c8070ab 13884 de All - Demo - Joachim Eberhard 4fe6a2e8df3c4536b278fdd2fbcb181e -1 en Windows - Mini Game - Trekky 679855cf61932f9bf995c8f3677380ed -1 fr Windows - Demo - Mevi c8c5baadcbfc8d0372ed4335abace8a7 -1 fr Windows - Demo - Mevi 784b499c98d07260a30952685758636b 13911 de Windows - Demo - George Kormendi 3e48298920fab9b7aec5a971e1bd1fab -1 gb Windows - Demo - eriktorbjorn - cf90b4db5486ef798db78fe6fbf897e5 -1 us Windows - Demo - khalek + cf90b4db5486ef798db78fe6fbf897e5 13902 us Windows - Demo - khalek pjgames Pajama Sam: Games to Play on Any Day 8a484262363a8e18be87112454f1456b -1 us All - - - Kirben @@ -752,10 +759,10 @@ puttzoo Putt-Putt Saves the Zoo 3a3e592b074f595489f7f11e150c398d -1 us Windows HE 99 Updated - Adrian c5cc7cba02a2fbd539c4439e775b0536 43470 de Windows HE 99 Updated - Lightkey - 3486ede0f904789267d4bcc5537a46d4 -1 en Mac - Demo - khalek + 3486ede0f904789267d4bcc5537a46d4 14337 en Mac - Demo - khalek d220d154aafbfa12bd6f3ab1b2dae420 -1 de Mac - Demo - Joachim Eberhard aa81aa6d5545ce172fdba81f2e2f9d36 -1 nl Windows - Demo - DarthBo - de4efb910210736813c9a1185384bace -1 en Windows HE 72 Demo - khalek + de4efb910210736813c9a1185384bace 14337 en Windows HE 72 Demo - khalek f3d55aea441e260e9e9c7d2a187097e0 14337 en Windows - Demo - khalek 65fa23d6884e8ca23d5d2406d70de7e8 -1 fr Windows - Demo - gist974 2a446817ffcabfef8716e0c456ecaf81 -1 de Windows - Demo - Joachim Eberhard @@ -834,7 +841,7 @@ spyfox2 SPY Fox 2: Some Assembly Required 90e2f0af4f779629695c6394a65bb702 -1 fr All - - - gist974, ThierryFR bc4700bc0e12879f6d25d14d6be6cfdd -1 de All - - - Joachim Eberhard cea91e3dd47f2518ea418e41611aa77f -1 ru All - - - sev - 9fd66fb3b04703bd50da4356e4202558 -1 en Mac - - - pix_climber + 9fd66fb3b04703bd50da4356e4202558 51295 en Mac - - - pix_climber 71fe97c3108678cf604f14abe342341b -1 nl Windows - - - adutchguy 1c792d28376d45e145cb916bca0400a2 -1 nl All - Demo - joostp @@ -853,7 +860,7 @@ spyozon SPY Fox 3: Operation Ozone 7015b059ab72cff3a0ef9fb4d5e9889d -1 de Windows - - - andy482 be39a5d4db60e8aa736b9086778cb45c -1 gb Windows - - - - ebd0b2c8a387f18887282afe6cad894a -1 en All - Demo - Kirben + ebd0b2c8a387f18887282afe6cad894a 15317 en All - Demo - Kirben a99c39ba65b6086be28aef576da69595 -1 fr Windows - Demo - Mevi 65563295c3a06493351870f20a1630cf 5235008 All All HE CUP Preview - sev |