diff --git a/code/backlog.txt b/code/backlog.txt index 4f2e1e2e..7c54828c 100644 --- a/code/backlog.txt +++ b/code/backlog.txt @@ -7,6 +7,11 @@ http://cyxdown.free.fr/bs/ http://cyxdown.free.fr/f2b/ http://dead-code.org/home/ https://github.com/restorer/gloomy-dungeons-2 +https://github.com/WohlSoft/PGE-Project +https://en.wikipedia.org/wiki/List_of_free_and_open-source_Android_applications#Games +https://notabug.org/Calinou/awesome-gamedev#games +https://forum.freegamedev.net/viewtopic.php?f=20&t=11627 +https://www.old-games.ru/forum/threads/nekommercheskie-analogi-izvestnyx-igr.40868/page-9 https://github.com/MyreMylar/pygame_gui http://e-adventure.e-ucm.es/login/index.php (games of eAdventure) http://ethernet.wasted.ch/ diff --git a/code/grammar_entries.lark b/code/grammar_entries.lark index 6e1f9f86..455e486f 100644 --- a/code/grammar_entries.lark +++ b/code/grammar_entries.lark @@ -1,4 +1,4 @@ -start: title description property+ _E note _E? building +start: title description property+ _E note? _E? building title: "# " /(?! ).+(? 1) + duplicate_names = set(duplicate_names) # to avoid duplicates in duplicate_names + if duplicate_names: + print('Warning: duplicate developer names: {}'.format(', '.join(duplicate_names))) return developers @@ -445,7 +483,27 @@ def read_inspirations_info(): inspirations_file = os.path.join(c.root_path, 'inspirations.md') grammar_file = os.path.join(c.code_path, 'grammar_listing.lark') transformer = ListingTransformer() - return read_and_parse(inspirations_file, grammar_file, transformer) + inspirations = read_and_parse(inspirations_file, grammar_file, transformer) + # now transform a bit more + for index, inspiration in enumerate(inspirations): + # check for valid keys + for field in inspiration.keys(): + if field not in valid_inspiration_fields: + raise RuntimeError('Unknown field "{}" for inspiration: {}.'.format(field, inspiration['name'])) + # split lists + for field in ('inspired entries', ): + if field in inspiration: + content = inspiration[field] + content = content.split(',') + content = [x.strip() for x in content] + inspiration[field] = content + # check for duplicate names entries + names = [inspiration['name'] for inspiration in inspirations] + duplicate_names = (name for name in names if names.count(name) > 1) + duplicate_names = set(duplicate_names) # to avoid duplicates in duplicate_names + if duplicate_names: + print('Warning: duplicate inspiration names: {}'.format(', '.join(duplicate_names))) + return inspirations def write_inspirations_info(inspirations): @@ -454,4 +512,79 @@ def write_inspirations_info(inspirations): :param inspirations: :return: """ - inspirations_file = os.path.join(c.root_path, 'inspirations.md') + # comment + content = '{}\n'.format(comment_string) + + # number of developer + content += '# Inspirations ({})\n\n'.format(len(inspirations)) + + # sort by name + inspirations.sort(key=lambda x: str.casefold(x['name'])) + + # iterate over them + for inspiration in inspirations: + # inspiration name + content += '## {} ({})\n\n'.format(inspiration['name'], len(inspiration['inspired entries'])) + + # games + content += '- Inspired entries: {}\n'.format(', '.join(sorted(inspiration['inspired entries'], key=str.casefold))) + + # all the remaining in alphabetical order + for field in sorted(inspiration.keys()): + if field not in ('name', 'inspired entries'): + value = inspiration[field] + field = field.capitalize() + if isinstance(value, str): + content += '- {}: {}\n'.format(field, value) + else: + content += '- {}: {}\n'.format(field, ', '.join(sorted(value, key=str.casefold))) + content += '\n' + + # write + inspirations_file = os.path.join(c.root_path, 'inspirations2.md') + utils.write_text(inspirations_file, content) + + + +def compare_entries_developers(entries, developers): + """ + Cross checks the game entries lists and the developers lists. + :param entries: List of game entries + :param developers: List of developers + """ + + # from the entries create a dictionary with developer names + devs1 = {} + for entry in entries: + name = entry['name'] + for dev in entry.get('developer', []): + if dev in devs1: + devs1[dev].append(name) + else: + devs1[dev] = [name] + devs1_names = set(devs1.keys()) + + # from the developers create a dictionary with developer names + devs2 = dict(zip((dev['name'] for dev in developers), (dev['games'] for dev in developers))) + devs2_names = set(devs2.keys()) + + # devs only in entries + for dev in devs1_names - devs2_names: + print('Warning: dev "{}" only in entries ({}), not in developers'.format(dev, ','.join(devs1[dev]))) + # devs only in developers + for dev in devs2_names - devs1_names: + print('Warning: dev "{}" only in developers ({}), not in entries'.format(dev, ','.join(devs2[dev]))) + # for those in both, check that the games lists are equal + for dev in devs1_names.intersection(devs2_names): + games1 = set(devs1[dev]) + games2 = set(devs2[dev]) + delta = games1 - games2 + if delta: + print('Warning: dev "{}" has games in entries ({}) that are not present in developers'.format(dev, ', '.join(delta))) + delta = games2 - games1 + if delta: + print('Warning: dev "{}" has games in developers ({}) that are not present in entries'.format(dev, ', '.join(delta))) + + + + diff --git a/developer.md b/developer.md index fd724f99..9d156d80 100644 --- a/developer.md +++ b/developer.md @@ -1,10 +1,5 @@ [comment]: # (partly autogenerated content, edit with care, read the manual before) -# Developer (336) - -## Andy Southgate (1) - -- Games: Adanaxis -- Organization: Mushware Limited +# Developer (369) ## Akira Higuchi (1) @@ -22,6 +17,11 @@ - Games: Blinken +## Alex Clark (1) + +- Games: Abe's Amazing Adventure +- Contact: jazkat@SF + ## Alex Gleason (1) - Games: Vegan on a Desert Island @@ -59,9 +59,10 @@ - Games: OpenRTS - Contact: rtsfan@SF -## Andy Southgate (1) +## Andy Southgate (2) -- Games: SDL Asylum +- Games: Adanaxis, SDL Asylum +- Organization: Mushware Limited ## Anthony Mariette Louis Liekens (1) @@ -81,6 +82,11 @@ - Games: Hex-a-hop - Contact: amuzen@SF +## Armin Bajramovic (1) + +- Games: Advanced Strategic Command +- Contact: armin906@SF + ## Arne Reiners (1) - Games: GL-117 @@ -93,6 +99,12 @@ - Games: Slingshot +## Ben Brian (1) + +- Games: 0 A.D. +- Contact: historic_bruno@SF, historicbruno@GH +- Home: https://benbrian.net/ + ## Ben Kibbey (1) - Games: CBoard @@ -138,12 +150,6 @@ - Games: XBill -## Ben Brian (1) - -- Games: 0 A.D. -- Home: https://benbrian.net/ -- Contact: historic_bruno@SF, historicbruno@GH - ## Bruno Ethvignot (2) - Games: Powermanga, TecnoballZ @@ -173,6 +179,11 @@ - Games: RedShift +## Christian Schramm (1) + +- Games: Advanced Strategic Command +- Contact: Ed-von-Schleck@GH + ## Chuck Simmons (1) - Games: VMS Empire @@ -197,6 +208,12 @@ - Games: Gilbert and the doors +## Daniel Ginovker (1) + +- Games: 2006-rebotted +- Contact: dginovker@GH +- Home: https://dginovker.github.io/ + ## Daniel Loreck (1) - Games: JSkat @@ -206,21 +223,6 @@ - Games: Colobot: Gold Edition - Organization: Epsitec -## Nicolas Auvray (1) - -- Games: 0 A.D. -- Contact: itms@SF, na-Itms@GH - -## Philip Taylor (1) - -- Games: 0 A.D. -- Contact: philiptaylor@SF, philiptaylor@GH - -## Lancelot de Ferrière (1) - -- Games: 0 A.D. -- Contact: wraitii@SF, wraitii@GH - ## Daniele Napolitano (1) - Games: Gweled @@ -234,11 +236,6 @@ - Games: Turious - Contact: darkrose@GL -## Jan-Otto Kröpke (1) - -- Games: 2Moons Browsergame Engine -- Contact: jkroepke@GH - ## David Gibbs (1) - Games: Omega-rpg @@ -288,16 +285,6 @@ - Games: Ri-li -## Piwai (1) - -- Games: 2H4U -- Contact: insa_piwai@SF - -## Kilgore Trout Mask Replicant (1) - -- Games: 1oom -- Contact: KilgoreTroutMaskReplicant@GL - ## Don Llopis (1) - Games: XInvaders 3D @@ -311,6 +298,11 @@ - Games: iortcw +## Dorfdrull (1) + +- Games: Advanced Strategic Command +- Contact: dorfdrull@SF + ## Drummyfish (1) - Games: Steamer Duck @@ -361,6 +353,11 @@ - Games: Kobo Deluxe +## Erik Johansson (1) + +- Games: 0 A.D. +- Contact: feneur@SF + ## Etienne Sobole (1) - Games: Powermanga @@ -409,6 +406,11 @@ - Games: Ksudoku +## Frederik Kesting (1) + +- Games: Advanced Strategic Command +- Contact: ocl4nis@SF + ## Fredrik Portstrom (1) - Games: Sinatra @@ -426,6 +428,12 @@ - Games: Abe's Amazing Adventure - Contact: gabortorok@SF +## Gabriele Cirulli (1) + +- Games: 2048 +- Contact: gabrielecirulli@GH +- Home: https://www.gabrielecirulli.com/ + ## Ghoulsblade (1) - Games: Iris2 @@ -472,31 +480,6 @@ - Games: Fairy-Max -## Dorfdrull (1) - -- Games: Advanced Strategic Command -- Contact: dorfdrull@SF - -## Michael Moerz (1) - -- Games: Advanced Strategic Command -- Contact: natoka@SF - -## Armin Bajramovic (1) - -- Games: Advanced Strategic Command -- Contact: armin906@SF - -## Frederik Kesting (1) - -- Games: Advanced Strategic Command -- Contact: ocl4nis@SF - -## Torsten Maekler (1) - -- Games: Advanced Strategic Command -- Contact: tmaekler@SF - ## Harmen van der Wal (1) - Games: Hypercube @@ -513,6 +496,11 @@ - Games: Xjig +## Hilarious001 (1) + +- Games: 2Moons Browsergame Engine +- Contact: Hilarious001@GH + ## HoleInTheHeadStudios (2) - Games: Magic Gardeners Tournament, Search for the Red Herring @@ -525,7 +513,7 @@ ## Horst Kevin (1) - Games: Fictional Air Combat -- Contact: horstkevin@SF +- Contact: horstkevin@SF ## Hubert Lamontagne (1) @@ -576,6 +564,11 @@ - Games: JSkat +## Jan-Otto Kröpke (1) + +- Games: 2Moons Browsergame Engine +- Contact: jkroepke@GH + ## Jani Kajala (1) - Games: Cat Mother Dead Justice @@ -591,7 +584,7 @@ ## Jason Rohrer (8) - Games: Between, Cultivation, Gravitation, One Hour One Life, Passage, Primrose, Sleep Is Death, Transcend -- Contact: jcr13@SF, jasonrohrer@GH +- Contact: jasonrohrer@GH, jcr13@SF ## Jay Fenlason (1) @@ -622,6 +615,12 @@ - Games: Kobo Deluxe +## Jerry Jiang (1) + +- Games: 2048 +- Contact: tpcstld@GH +- Home: https://tpcstld.me/ + ## Jesse Smith (1) - Games: Atomic Tanks @@ -638,7 +637,7 @@ ## Jimmy Christensen (2) - Games: OldSkool Gravity Game, SDL-Ball -- Contact: dusteddk@SF, DusteDdk@GH +- Contact: DusteDdk@GH, dusteddk@SF ## Joan Queralt Molina (1) @@ -661,11 +660,6 @@ - Games: Alex the Allegator 4 - Contact: peitz@SF -## Erik Johansson (1) - -- Games: 0 A.D. -- Contact: feneur@SF - ## Johannes Bergmeier (1) - Games: Ksudoku @@ -699,9 +693,9 @@ - Games: Trip on the Funny Boat -## Joseph Hewitt (3) +## Joseph Hewitt (4) -- Games: Dungeon Monkey Eternal, GearHead, GearHead 2 +- Games: Dungeon Monkey Eternal, GearHead, GearHead 2, Dungeon Monkey Unlimited - Contact: jwvhewitt@GH, jwvhewitt@SF ## Jujucece (1) @@ -728,30 +722,6 @@ - Games: Blasphemer -## Jerry Jiang (1) - -- Games: 2048 -- Home: https://tpcstld.me/ -- Contact: tpcstld@GH - -## Gabriele Cirulli (1) - -- Games: 2048 -- Home: https://www.gabrielecirulli.com/ -- Contact: gabrielecirulli@GH - -## Daniel Ginovker (1) - -- Games: 2006-rebotted -- Home: https://dginovker.github.io/ -- Contact: dginovker@GH - -## lo-th (1) - -- Games: 3d.city -- Home: http://lo-th.github.io/labs/index.html -- Contact: lo-th@GH - ## Jérôme Bolot (1) - Games: TecnoballZ @@ -764,6 +734,11 @@ - Games: Cannon Smash +## kantharos (1) + +- Games: Aklabeth +- Contact: kantharos@SF + ## Karel Fiser (1) - Games: Bombic2 @@ -776,10 +751,26 @@ - Games: Deer Portal +## Kayl (1) + +- Games: 2H4U +- Contact: kaylnet@SF + ## Kenta Cho (2) - Games: A7Xpg, Consomaton +## Kieran Pilkington (1) + +- Games: 0 A.D. +- Contact: KieranP@GH +- Home: https://k776.tumblr.com/ + +## Kilgore Trout Mask Replicant (1) + +- Games: 1oom +- Contact: KilgoreTroutMaskReplicant@GL + ## Klivo (1) - Games: Pendumito @@ -793,28 +784,44 @@ - Games: Krystal Drop - Contact: krys@SF +## Lancelot de Ferrière (1) + +- Games: 0 A.D. +- Contact: wraitii@GH, wraitii@SF + ## Laurence R. Brothers (1) - Games: Omega-rpg +## Laurent (1) + +- Games: 2048 +- Contact: marg51@GH +- Home: https://uto.io/ + ## Laurent Guyon (1) - Games: TecnoballZ -## Laurent (1) - -- Games: 2048 -- Home: https://uto.io/ -- Contact: marg51@GH - ## legoluft (1) - Games: Krank +## leper (1) + +- Games: 0 A.D. +- Contact: leper@GH + ## Linley Henzell (2) - Games: Liberation Circuit, Overgod +## lo-th (1) + +- Games: 3d.city +- Contact: lo-th@GH +- Home: http://lo-th.github.io/labs/index.html + ## Locomalito (1) - Games: L'Abbaye des Morts @@ -866,6 +873,11 @@ - Games: MUSoSu - Contact: marios_v@SF +## Mark Dickenson (1) + +- Games: Alien Assault Traders +- Contact: akapanamajack@SF + ## Mark Harman (1) - Games: Apricots @@ -882,24 +894,14 @@ - Games: JSkat -## Martin Trautmann (1) - -- Games: Holtz - ## Martin Bickel (1) - Games: Advanced Strategic Command -- Contact: valharis@SF, ValHaris@GH +- Contact: ValHaris@GH, valharis@SF -## Christian Schramm (1) +## Martin Trautmann (1) -- Games: Advanced Strategic Command -- Contact: Ed-von-Schleck@GH - -## valuial (1) - -- Games: Advanced Strategic Command -- Contact: valuial@GH +- Games: Holtz ## Masanao Izumo (1) @@ -966,6 +968,11 @@ - Games: Terminal Overload +## Michael Moerz (1) + +- Games: Advanced Strategic Command +- Contact: natoka@SF + ## Michael Speck (4) - Games: LBreakout2, LBreakoutHD, LTris, Online Chess Club @@ -1016,15 +1023,16 @@ - Games: OpenAlchemist -## Mushware Limited (1) - -- Games: Adanaxis - ## New Breed Software (2) - Games: 3D Pong, Tux Paint - Home: http://newbreedsoftware.com/ +## Nicolas Auvray (1) + +- Games: 0 A.D. +- Contact: itms@SF, na-Itms@GH + ## Nicolas Hadacek (1) - Games: KMines @@ -1070,6 +1078,11 @@ - Games: OGS Mahjong +## Ozan Kurt (1) + +- Games: 2Moons Browsergame Engine +- Contact: OzanKurt@GH + ## Pascal von der Heiden (1) - Games: Bloodmasters @@ -1100,15 +1113,24 @@ - Games: Free Space Colonization - Contact: bitnapper@SF +## Paul Robson (1) + +- Games: Aklabeth + ## Paul Rouget (1) - Games: Runfield -## Paul Wise (1) +## Paul Wise (2) -- Games: Hex-a-hop +- Games: Hex-a-hop, Alex the Allegator 4 - Contact: pabs3@SF +## Pedro Izecksohn (1) + +- Games: Abe's Amazing Adventure +- Contact: izecksohn@SF + ## Pete Shinners (1) - Games: SolarWolf @@ -1131,6 +1153,11 @@ - Games: KMines +## Philip Taylor (1) + +- Games: 0 A.D. +- Contact: philiptaylor@GH, philiptaylor@SF + ## Philippe Bousquet (1) - Games: DarkCity @@ -1140,19 +1167,24 @@ - Games: GL-117 +## Piwai (1) + +- Games: 2H4U +- Contact: insa_piwai@SF + ## plaimi (2) - Games: Limbs Off, Q -## Puskutraktori (1) - -- Games: Trip on the Funny Boat - ## Pureon (1) - Games: 0 A.D. - Contact: ipureon@SF +## Puskutraktori (1) + +- Games: Trip on the Funny Boat + ## PyMike (1) - Games: Mrfuze @@ -1201,6 +1233,11 @@ - Games: Bouncy the Hungry Rabbit +## Rick Thomson (1) + +- Games: Alien Assault Traders +- Contact: tarnus@SF + ## Riley Rainey (1) - Games: ACM @@ -1248,6 +1285,11 @@ - Games: TecnoballZ +## s0600204 (1) + +- Games: 0 A.D. +- Contact: s0600204@GH + ## Sam Hocevar (2) - Games: Not Pacman, Powermanga @@ -1273,11 +1315,6 @@ - Games: Freya Game Engine - Contact: pond@SF -## Kayl (1) - -- Games: 2H4U -- Contact: kaylnet@SF - ## Shard (1) - Games: Anagramarama @@ -1304,32 +1341,6 @@ - Games: 4D-TRIS - Contact: simzer@SF -## s0600204 (1) - -- Games: 0 A.D. -- Contact: s0600204@GH - -## Hilarious001 (1) - -- Games: 2Moons Browsergame Engine -- Contact: Hilarious001@GH - -## Ozan Kurt (1) - -- Games: 2Moons Browsergame Engine -- Contact: OzanKurt@GH - -## leper (1) - -- Games: 0 A.D. -- Contact: leper@GH - -## Kieran Pilkington (1) - -- Games: 0 A.D. -- Home: https://k776.tumblr.com/ -- Contact: KieranP@GH - ## Simon Peter (1) - Games: Kobo Deluxe @@ -1492,20 +1503,15 @@ - Games: Go Ollie! - Organization: Charlie Dog Games +## Torsten Maekler (1) + +- Games: Advanced Strategic Command +- Contact: tmaekler@SF + ## Troels Kofoed Jacobsen (1) - Games: Qonk -## Alex Clark (1) - -- Games: Abe's Amazing Adventure -- Contact: jazkat@SF - -## Pedro Izecksohn (1) - -- Games: Abe's Amazing Adventure -- Contact: izecksohn@SF - ## Tuscan Knox (1) - Games: Shotgun Debugger @@ -1515,6 +1521,11 @@ - Games: OpenMortal - Contact: upi@SF +## valuial (1) + +- Games: Advanced Strategic Command +- Contact: valuial@GH + ## Vianney Lecroart (1) - Games: Mtp Target @@ -1556,8 +1567,8 @@ ## Yuri D'Elia (2) - Games: FLTK Recycling Game!, Garith -- Home: http://www.thregr.org/~wavexx/ - Contact: wavexx@GL +- Home: http://www.thregr.org/~wavexx/ ## Zack Middleton (1) diff --git a/entries/2moons_browsergame_engine.md b/entries/2moons_browsergame_engine.md index 36f68c25..51b92ca4 100644 --- a/entries/2moons_browsergame_engine.md +++ b/entries/2moons_browsergame_engine.md @@ -10,7 +10,7 @@ _Space browsergame framework._ - Code repository: https://github.com/jkroepke/2Moons.git (archived), https://github.com/steemnova/steemnova.git (+) - Code language: PHP, JavaScript - Code license: MIT -- Developer: Jan-Otto Kröpke, Ozan Kurt +- Developer: Jan-Otto Kröpke, Ozan Kurt, Hilarious001 ## Building diff --git a/entries/aklabeth.md b/entries/aklabeth.md index 26164b25..f30d1a89 100644 --- a/entries/aklabeth.md +++ b/entries/aklabeth.md @@ -9,6 +9,7 @@ _Remake of Akalabeth: World of Doom aka Ultima 0._ - Code repository: (see download) - Code language: C - Code license: GPL-2.0 +- Developer: kantharos, Paul Robson Aklabeth is a remake of Akalabeth, or 'Ultima 0' as it is often called, that was programmed by Richard Garriott for the Apple II computer in 1980. Aklabeth 1.0 has been written by Paul Robson and was originally released in 2004 under the GPL 2. His homepage has disappeared a long time ago. diff --git a/entries/alien_assault_traders.md b/entries/alien_assault_traders.md index 11e5a203..94497401 100644 --- a/entries/alien_assault_traders.md +++ b/entries/alien_assault_traders.md @@ -9,6 +9,7 @@ _Alien Assault Traders is an online, web-based, turn-based strategy space tradin - Code repository: https://github.com/tarnus/aatraders.git, https://gitlab.com/osgames/aatraders.git (+) - Code language: PHP - Code license: GPL-2.0 +- Developer: Mark Dickenson, Rick Thomson ## Building