This commit is contained in:
Trilarion 2020-04-16 20:21:14 +02:00
parent 48ade4bc0b
commit 1ca7c6c12d
10 changed files with 346 additions and 183 deletions

View File

@ -7,6 +7,11 @@ http://cyxdown.free.fr/bs/
http://cyxdown.free.fr/f2b/ http://cyxdown.free.fr/f2b/
http://dead-code.org/home/ http://dead-code.org/home/
https://github.com/restorer/gloomy-dungeons-2 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 https://github.com/MyreMylar/pygame_gui
http://e-adventure.e-ucm.es/login/index.php (games of eAdventure) http://e-adventure.e-ucm.es/login/index.php (games of eAdventure)
http://ethernet.wasted.ch/ http://ethernet.wasted.ch/

View File

@ -1,4 +1,4 @@
start: title description property+ _E note _E? building start: title description property+ _E note? _E? building
title: "# " /(?! ).+(?<! )/ "\n" _E // not starting or ending with a space title: "# " /(?! ).+(?<! )/ "\n" _E // not starting or ending with a space
@ -12,4 +12,4 @@ building: "## Building\n" _E property+ _E? note // the "building" section
note: /(?![\-#]).*\n/* // Unstructured text, not starting with - or # note: /(?![\-#]).*\n/* // Unstructured text, not starting with - or #
_E: /^$\n/m // empty new line (filtered from tree) _E: /^$\n/m // empty new line

View File

@ -1,8 +1,8 @@
start: header entries* start: header entry*
header: "# " name " (" number ")\n" _E header: "# " name " (" number ")\n" _E
entries: "## " name " (" number ")\n" _E property+ _E entry: "## " name " (" number ")\n" _E property+ _E
property: "- " _key ": " _value "\n" property: "- " _key ": " _value "\n"
_key: /(?! ).+?(?=:)(?<! )/ // key: everything until next ":", not beginning or ending with a space _key: /(?! ).+?(?=:)(?<! )/ // key: everything until next ":", not beginning or ending with a space

View File

@ -22,11 +22,14 @@ if __name__ == "__main__":
# read developer info # read developer info
developer_info = osg.read_developer_info() developer_info = osg.read_developer_info()
osg.write_developer_info(developer_info) osg.write_developer_info(developer_info) # write again just to make nice
# assemble info # assemble info
entries = osg.assemble_infos() entries = osg.assemble_infos()
# cross-check
osg.compare_entries_developers(entries, developer_info)
# loop over infos # loop over infos
developers = '' developers = ''
try: try:

View File

@ -0,0 +1,9 @@
from utils import constants as c, utils, osg
if __name__ == "__main__":
inspirations = osg.read_inspirations_info()
osg.write_inspirations_info(inspirations) # write again just to check integrity
# assemble info
entries = osg.assemble_infos()

View File

@ -20,7 +20,7 @@ class ListingTransformer(lark.Transformer):
def name(self, x): def name(self, x):
return ('name', x[0].value) return ('name', x[0].value)
def entries(self, x): def entry(self, x):
d = {} d = {}
for key, value in x: for key, value in x:
d[key] = value d[key] = value
@ -32,6 +32,34 @@ class ListingTransformer(lark.Transformer):
def start(self, x): def start(self, x):
return x return x
# transformer
class EntryTransformer(lark.Transformer):
def start(self, x):
d = {}
for key, value in x:
d[key] = value
return d
def title(self, x):
return ('title', x[0].value)
def description(self, x):
return ('description', x[0].value)
def property(self, x):
return (str.casefold(x[0].value), x[1].value)
def note(self, x):
return ('note', x[0].value)
def building(self, x):
d = {}
for key, value in x:
d[key] = value
return ('building', d)
essential_fields = ('Home', 'State', 'Keywords', 'Code repository', 'Code language', 'Code license') essential_fields = ('Home', 'State', 'Keywords', 'Code repository', 'Code language', 'Code license')
valid_fields = ( valid_fields = (
@ -72,6 +100,7 @@ regex_sanitize_name = re.compile(r"[^A-Za-z 0-9-+]+")
regex_sanitize_name_space_eater = re.compile(r" +") regex_sanitize_name_space_eater = re.compile(r" +")
valid_developer_fields = ('name', 'games', 'contact', 'organization', 'home') valid_developer_fields = ('name', 'games', 'contact', 'organization', 'home')
valid_inspiration_fields = ('name', 'inspired entries')
comment_string = '[comment]: # (partly autogenerated content, edit with care, read the manual before)' comment_string = '[comment]: # (partly autogenerated content, edit with care, read the manual before)'
@ -383,18 +412,27 @@ def read_developer_info():
developers = read_and_parse(developer_file, grammar_file, transformer) developers = read_and_parse(developer_file, grammar_file, transformer)
# now transform a bit more # now transform a bit more
for index, dev in enumerate(developers): for index, dev in enumerate(developers):
# check for valid keys
for field in dev.keys(): for field in dev.keys():
if field not in valid_developer_fields: if field not in valid_developer_fields:
raise RuntimeError('Unknown developer field "{}" for developer: {}.'.format(field, dev['name'])) raise RuntimeError('Unknown developer field "{}" for developer: {}.'.format(field, dev['name']))
# strip from name or organization (just in case)
for field in ('name', 'organization'): for field in ('name', 'organization'):
if field in dev: if field in dev:
dev[field] = dev[field].strip() dev[field] = dev[field].strip()
# split games, contact (are lists)
for field in ('games', 'contact'): for field in ('games', 'contact'):
if field in dev: if field in dev:
content = dev[field] content = dev[field]
content = content.split(',') content = content.split(',')
content = [x.strip() for x in content] content = [x.strip() for x in content]
dev[field] = content dev[field] = content
# check for duplicate names entries
names = [dev['name'] for dev in developers]
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 developer names: {}'.format(', '.join(duplicate_names)))
return developers return developers
@ -445,7 +483,27 @@ def read_inspirations_info():
inspirations_file = os.path.join(c.root_path, 'inspirations.md') inspirations_file = os.path.join(c.root_path, 'inspirations.md')
grammar_file = os.path.join(c.code_path, 'grammar_listing.lark') grammar_file = os.path.join(c.code_path, 'grammar_listing.lark')
transformer = ListingTransformer() 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): def write_inspirations_info(inspirations):
@ -454,4 +512,79 @@ def write_inspirations_info(inspirations):
:param inspirations: :param inspirations:
:return: :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)))

View File

@ -1,10 +1,5 @@
[comment]: # (partly autogenerated content, edit with care, read the manual before) [comment]: # (partly autogenerated content, edit with care, read the manual before)
# Developer (336) # Developer (369)
## Andy Southgate (1)
- Games: Adanaxis
- Organization: Mushware Limited
## Akira Higuchi (1) ## Akira Higuchi (1)
@ -22,6 +17,11 @@
- Games: Blinken - Games: Blinken
## Alex Clark (1)
- Games: Abe's Amazing Adventure
- Contact: jazkat@SF
## Alex Gleason (1) ## Alex Gleason (1)
- Games: Vegan on a Desert Island - Games: Vegan on a Desert Island
@ -59,9 +59,10 @@
- Games: OpenRTS - Games: OpenRTS
- Contact: rtsfan@SF - Contact: rtsfan@SF
## Andy Southgate (1) ## Andy Southgate (2)
- Games: SDL Asylum - Games: Adanaxis, SDL Asylum
- Organization: Mushware Limited
## Anthony Mariette Louis Liekens (1) ## Anthony Mariette Louis Liekens (1)
@ -81,6 +82,11 @@
- Games: Hex-a-hop - Games: Hex-a-hop
- Contact: amuzen@SF - Contact: amuzen@SF
## Armin Bajramovic (1)
- Games: Advanced Strategic Command
- Contact: armin906@SF
## Arne Reiners (1) ## Arne Reiners (1)
- Games: GL-117 - Games: GL-117
@ -93,6 +99,12 @@
- Games: Slingshot - Games: Slingshot
## Ben Brian (1)
- Games: 0 A.D.
- Contact: historic_bruno@SF, historicbruno@GH
- Home: https://benbrian.net/
## Ben Kibbey (1) ## Ben Kibbey (1)
- Games: CBoard - Games: CBoard
@ -138,12 +150,6 @@
- Games: XBill - Games: XBill
## Ben Brian (1)
- Games: 0 A.D.
- Home: https://benbrian.net/
- Contact: historic_bruno@SF, historicbruno@GH
## Bruno Ethvignot (2) ## Bruno Ethvignot (2)
- Games: Powermanga, TecnoballZ - Games: Powermanga, TecnoballZ
@ -173,6 +179,11 @@
- Games: RedShift - Games: RedShift
## Christian Schramm (1)
- Games: Advanced Strategic Command
- Contact: Ed-von-Schleck@GH
## Chuck Simmons (1) ## Chuck Simmons (1)
- Games: VMS Empire - Games: VMS Empire
@ -197,6 +208,12 @@
- Games: Gilbert and the doors - Games: Gilbert and the doors
## Daniel Ginovker (1)
- Games: 2006-rebotted
- Contact: dginovker@GH
- Home: https://dginovker.github.io/
## Daniel Loreck (1) ## Daniel Loreck (1)
- Games: JSkat - Games: JSkat
@ -206,21 +223,6 @@
- Games: Colobot: Gold Edition - Games: Colobot: Gold Edition
- Organization: Epsitec - 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) ## Daniele Napolitano (1)
- Games: Gweled - Games: Gweled
@ -234,11 +236,6 @@
- Games: Turious - Games: Turious
- Contact: darkrose@GL - Contact: darkrose@GL
## Jan-Otto Kröpke (1)
- Games: 2Moons Browsergame Engine
- Contact: jkroepke@GH
## David Gibbs (1) ## David Gibbs (1)
- Games: Omega-rpg - Games: Omega-rpg
@ -288,16 +285,6 @@
- Games: Ri-li - Games: Ri-li
## Piwai (1)
- Games: 2H4U
- Contact: insa_piwai@SF
## Kilgore Trout Mask Replicant (1)
- Games: 1oom
- Contact: KilgoreTroutMaskReplicant@GL
## Don Llopis (1) ## Don Llopis (1)
- Games: XInvaders 3D - Games: XInvaders 3D
@ -311,6 +298,11 @@
- Games: iortcw - Games: iortcw
## Dorfdrull (1)
- Games: Advanced Strategic Command
- Contact: dorfdrull@SF
## Drummyfish (1) ## Drummyfish (1)
- Games: Steamer Duck - Games: Steamer Duck
@ -361,6 +353,11 @@
- Games: Kobo Deluxe - Games: Kobo Deluxe
## Erik Johansson (1)
- Games: 0 A.D.
- Contact: feneur@SF
## Etienne Sobole (1) ## Etienne Sobole (1)
- Games: Powermanga - Games: Powermanga
@ -409,6 +406,11 @@
- Games: Ksudoku - Games: Ksudoku
## Frederik Kesting (1)
- Games: Advanced Strategic Command
- Contact: ocl4nis@SF
## Fredrik Portstrom (1) ## Fredrik Portstrom (1)
- Games: Sinatra - Games: Sinatra
@ -426,6 +428,12 @@
- Games: Abe's Amazing Adventure - Games: Abe's Amazing Adventure
- Contact: gabortorok@SF - Contact: gabortorok@SF
## Gabriele Cirulli (1)
- Games: 2048
- Contact: gabrielecirulli@GH
- Home: https://www.gabrielecirulli.com/
## Ghoulsblade (1) ## Ghoulsblade (1)
- Games: Iris2 - Games: Iris2
@ -472,31 +480,6 @@
- Games: Fairy-Max - 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) ## Harmen van der Wal (1)
- Games: Hypercube - Games: Hypercube
@ -513,6 +496,11 @@
- Games: Xjig - Games: Xjig
## Hilarious001 (1)
- Games: 2Moons Browsergame Engine
- Contact: Hilarious001@GH
## HoleInTheHeadStudios (2) ## HoleInTheHeadStudios (2)
- Games: Magic Gardeners Tournament, Search for the Red Herring - Games: Magic Gardeners Tournament, Search for the Red Herring
@ -525,7 +513,7 @@
## Horst Kevin (1) ## Horst Kevin (1)
- Games: Fictional Air Combat - Games: Fictional Air Combat
- Contact: horstkevin@SF - Contact: horstkevin@SF
## Hubert Lamontagne (1) ## Hubert Lamontagne (1)
@ -576,6 +564,11 @@
- Games: JSkat - Games: JSkat
## Jan-Otto Kröpke (1)
- Games: 2Moons Browsergame Engine
- Contact: jkroepke@GH
## Jani Kajala (1) ## Jani Kajala (1)
- Games: Cat Mother Dead Justice - Games: Cat Mother Dead Justice
@ -591,7 +584,7 @@
## Jason Rohrer (8) ## Jason Rohrer (8)
- Games: Between, Cultivation, Gravitation, One Hour One Life, Passage, Primrose, Sleep Is Death, Transcend - 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) ## Jay Fenlason (1)
@ -622,6 +615,12 @@
- Games: Kobo Deluxe - Games: Kobo Deluxe
## Jerry Jiang (1)
- Games: 2048
- Contact: tpcstld@GH
- Home: https://tpcstld.me/
## Jesse Smith (1) ## Jesse Smith (1)
- Games: Atomic Tanks - Games: Atomic Tanks
@ -638,7 +637,7 @@
## Jimmy Christensen (2) ## Jimmy Christensen (2)
- Games: OldSkool Gravity Game, SDL-Ball - Games: OldSkool Gravity Game, SDL-Ball
- Contact: dusteddk@SF, DusteDdk@GH - Contact: DusteDdk@GH, dusteddk@SF
## Joan Queralt Molina (1) ## Joan Queralt Molina (1)
@ -661,11 +660,6 @@
- Games: Alex the Allegator 4 - Games: Alex the Allegator 4
- Contact: peitz@SF - Contact: peitz@SF
## Erik Johansson (1)
- Games: 0 A.D.
- Contact: feneur@SF
## Johannes Bergmeier (1) ## Johannes Bergmeier (1)
- Games: Ksudoku - Games: Ksudoku
@ -699,9 +693,9 @@
- Games: Trip on the Funny Boat - 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 - Contact: jwvhewitt@GH, jwvhewitt@SF
## Jujucece (1) ## Jujucece (1)
@ -728,30 +722,6 @@
- Games: Blasphemer - 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) ## Jérôme Bolot (1)
- Games: TecnoballZ - Games: TecnoballZ
@ -764,6 +734,11 @@
- Games: Cannon Smash - Games: Cannon Smash
## kantharos (1)
- Games: Aklabeth
- Contact: kantharos@SF
## Karel Fiser (1) ## Karel Fiser (1)
- Games: Bombic2 - Games: Bombic2
@ -776,10 +751,26 @@
- Games: Deer Portal - Games: Deer Portal
## Kayl (1)
- Games: 2H4U
- Contact: kaylnet@SF
## Kenta Cho (2) ## Kenta Cho (2)
- Games: A7Xpg, Consomaton - 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) ## Klivo (1)
- Games: Pendumito - Games: Pendumito
@ -793,28 +784,44 @@
- Games: Krystal Drop - Games: Krystal Drop
- Contact: krys@SF - Contact: krys@SF
## Lancelot de Ferrière (1)
- Games: 0 A.D.
- Contact: wraitii@GH, wraitii@SF
## Laurence R. Brothers (1) ## Laurence R. Brothers (1)
- Games: Omega-rpg - Games: Omega-rpg
## Laurent (1)
- Games: 2048
- Contact: marg51@GH
- Home: https://uto.io/
## Laurent Guyon (1) ## Laurent Guyon (1)
- Games: TecnoballZ - Games: TecnoballZ
## Laurent (1)
- Games: 2048
- Home: https://uto.io/
- Contact: marg51@GH
## legoluft (1) ## legoluft (1)
- Games: Krank - Games: Krank
## leper (1)
- Games: 0 A.D.
- Contact: leper@GH
## Linley Henzell (2) ## Linley Henzell (2)
- Games: Liberation Circuit, Overgod - 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) ## Locomalito (1)
- Games: L'Abbaye des Morts - Games: L'Abbaye des Morts
@ -866,6 +873,11 @@
- Games: MUSoSu - Games: MUSoSu
- Contact: marios_v@SF - Contact: marios_v@SF
## Mark Dickenson (1)
- Games: Alien Assault Traders
- Contact: akapanamajack@SF
## Mark Harman (1) ## Mark Harman (1)
- Games: Apricots - Games: Apricots
@ -882,24 +894,14 @@
- Games: JSkat - Games: JSkat
## Martin Trautmann (1)
- Games: Holtz
## Martin Bickel (1) ## Martin Bickel (1)
- Games: Advanced Strategic Command - Games: Advanced Strategic Command
- Contact: valharis@SF, ValHaris@GH - Contact: ValHaris@GH, valharis@SF
## Christian Schramm (1) ## Martin Trautmann (1)
- Games: Advanced Strategic Command - Games: Holtz
- Contact: Ed-von-Schleck@GH
## valuial (1)
- Games: Advanced Strategic Command
- Contact: valuial@GH
## Masanao Izumo (1) ## Masanao Izumo (1)
@ -966,6 +968,11 @@
- Games: Terminal Overload - Games: Terminal Overload
## Michael Moerz (1)
- Games: Advanced Strategic Command
- Contact: natoka@SF
## Michael Speck (4) ## Michael Speck (4)
- Games: LBreakout2, LBreakoutHD, LTris, Online Chess Club - Games: LBreakout2, LBreakoutHD, LTris, Online Chess Club
@ -1016,15 +1023,16 @@
- Games: OpenAlchemist - Games: OpenAlchemist
## Mushware Limited (1)
- Games: Adanaxis
## New Breed Software (2) ## New Breed Software (2)
- Games: 3D Pong, Tux Paint - Games: 3D Pong, Tux Paint
- Home: http://newbreedsoftware.com/ - Home: http://newbreedsoftware.com/
## Nicolas Auvray (1)
- Games: 0 A.D.
- Contact: itms@SF, na-Itms@GH
## Nicolas Hadacek (1) ## Nicolas Hadacek (1)
- Games: KMines - Games: KMines
@ -1070,6 +1078,11 @@
- Games: OGS Mahjong - Games: OGS Mahjong
## Ozan Kurt (1)
- Games: 2Moons Browsergame Engine
- Contact: OzanKurt@GH
## Pascal von der Heiden (1) ## Pascal von der Heiden (1)
- Games: Bloodmasters - Games: Bloodmasters
@ -1100,15 +1113,24 @@
- Games: Free Space Colonization - Games: Free Space Colonization
- Contact: bitnapper@SF - Contact: bitnapper@SF
## Paul Robson (1)
- Games: Aklabeth
## Paul Rouget (1) ## Paul Rouget (1)
- Games: Runfield - Games: Runfield
## Paul Wise (1) ## Paul Wise (2)
- Games: Hex-a-hop - Games: Hex-a-hop, Alex the Allegator 4
- Contact: pabs3@SF - Contact: pabs3@SF
## Pedro Izecksohn (1)
- Games: Abe's Amazing Adventure
- Contact: izecksohn@SF
## Pete Shinners (1) ## Pete Shinners (1)
- Games: SolarWolf - Games: SolarWolf
@ -1131,6 +1153,11 @@
- Games: KMines - Games: KMines
## Philip Taylor (1)
- Games: 0 A.D.
- Contact: philiptaylor@GH, philiptaylor@SF
## Philippe Bousquet (1) ## Philippe Bousquet (1)
- Games: DarkCity - Games: DarkCity
@ -1140,19 +1167,24 @@
- Games: GL-117 - Games: GL-117
## Piwai (1)
- Games: 2H4U
- Contact: insa_piwai@SF
## plaimi (2) ## plaimi (2)
- Games: Limbs Off, Q - Games: Limbs Off, Q
## Puskutraktori (1)
- Games: Trip on the Funny Boat
## Pureon (1) ## Pureon (1)
- Games: 0 A.D. - Games: 0 A.D.
- Contact: ipureon@SF - Contact: ipureon@SF
## Puskutraktori (1)
- Games: Trip on the Funny Boat
## PyMike (1) ## PyMike (1)
- Games: Mrfuze - Games: Mrfuze
@ -1201,6 +1233,11 @@
- Games: Bouncy the Hungry Rabbit - Games: Bouncy the Hungry Rabbit
## Rick Thomson (1)
- Games: Alien Assault Traders
- Contact: tarnus@SF
## Riley Rainey (1) ## Riley Rainey (1)
- Games: ACM - Games: ACM
@ -1248,6 +1285,11 @@
- Games: TecnoballZ - Games: TecnoballZ
## s0600204 (1)
- Games: 0 A.D.
- Contact: s0600204@GH
## Sam Hocevar (2) ## Sam Hocevar (2)
- Games: Not Pacman, Powermanga - Games: Not Pacman, Powermanga
@ -1273,11 +1315,6 @@
- Games: Freya Game Engine - Games: Freya Game Engine
- Contact: pond@SF - Contact: pond@SF
## Kayl (1)
- Games: 2H4U
- Contact: kaylnet@SF
## Shard (1) ## Shard (1)
- Games: Anagramarama - Games: Anagramarama
@ -1304,32 +1341,6 @@
- Games: 4D-TRIS - Games: 4D-TRIS
- Contact: simzer@SF - 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) ## Simon Peter (1)
- Games: Kobo Deluxe - Games: Kobo Deluxe
@ -1492,20 +1503,15 @@
- Games: Go Ollie! - Games: Go Ollie!
- Organization: Charlie Dog Games - Organization: Charlie Dog Games
## Torsten Maekler (1)
- Games: Advanced Strategic Command
- Contact: tmaekler@SF
## Troels Kofoed Jacobsen (1) ## Troels Kofoed Jacobsen (1)
- Games: Qonk - 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) ## Tuscan Knox (1)
- Games: Shotgun Debugger - Games: Shotgun Debugger
@ -1515,6 +1521,11 @@
- Games: OpenMortal - Games: OpenMortal
- Contact: upi@SF - Contact: upi@SF
## valuial (1)
- Games: Advanced Strategic Command
- Contact: valuial@GH
## Vianney Lecroart (1) ## Vianney Lecroart (1)
- Games: Mtp Target - Games: Mtp Target
@ -1556,8 +1567,8 @@
## Yuri D'Elia (2) ## Yuri D'Elia (2)
- Games: FLTK Recycling Game!, Garith - Games: FLTK Recycling Game!, Garith
- Home: http://www.thregr.org/~wavexx/
- Contact: wavexx@GL - Contact: wavexx@GL
- Home: http://www.thregr.org/~wavexx/
## Zack Middleton (1) ## Zack Middleton (1)

View File

@ -10,7 +10,7 @@ _Space browsergame framework._
- Code repository: https://github.com/jkroepke/2Moons.git (archived), https://github.com/steemnova/steemnova.git (+) - Code repository: https://github.com/jkroepke/2Moons.git (archived), https://github.com/steemnova/steemnova.git (+)
- Code language: PHP, JavaScript - Code language: PHP, JavaScript
- Code license: MIT - Code license: MIT
- Developer: Jan-Otto Kröpke, Ozan Kurt - Developer: Jan-Otto Kröpke, Ozan Kurt, Hilarious001
## Building ## Building

View File

@ -9,6 +9,7 @@ _Remake of Akalabeth: World of Doom aka Ultima 0._
- Code repository: (see download) - Code repository: (see download)
- Code language: C - Code language: C
- Code license: GPL-2.0 - 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 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. 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.

View File

@ -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 repository: https://github.com/tarnus/aatraders.git, https://gitlab.com/osgames/aatraders.git (+)
- Code language: PHP - Code language: PHP
- Code license: GPL-2.0 - Code license: GPL-2.0
- Developer: Mark Dickenson, Rick Thomson
## Building ## Building