imports from backlog, synchronization with osgameclones

This commit is contained in:
Trilarion
2019-11-16 10:06:24 +01:00
parent 9f94543293
commit 4651db1801
116 changed files with 773 additions and 418 deletions

View File

@ -232,11 +232,13 @@
"https://github.com/Javanaise/mrboom-libretro.git",
"https://github.com/KDE/blinken.git",
"https://github.com/KOBUGE-Games/minilens.git",
"https://github.com/KaidemonLP/Open-Fortress-Source.git",
"https://github.com/Kerndog73/EnTT-Pacman.git",
"https://github.com/Kromster80/kam_remake.git",
"https://github.com/LIKO-12/LIKO-12.git",
"https://github.com/LRFLEW/OpenMC2.git",
"https://github.com/LWJGL/lwjgl3.git",
"https://github.com/LagoLunatic/wwrando.git",
"https://github.com/LambdaHack/LambdaHack.git",
"https://github.com/LastTryR/LastTry.git",
"https://github.com/Leejjon/Battleround.git",
@ -499,6 +501,7 @@
"https://github.com/delight-im/OpenSoccer.git",
"https://github.com/demonixis/C3DE.git",
"https://github.com/dgengin/DGEngine.git",
"https://github.com/dginovker/2006rebotted.git",
"https://github.com/dhewm/dhewm3.git",
"https://github.com/diasurgical/devilution.git",
"https://github.com/diasurgical/devilutionX.git",
@ -571,6 +574,7 @@
"https://github.com/goldeneye-source/ges-code.git",
"https://github.com/gondur/cartlife_src.git",
"https://github.com/graememcc/micropolisJS.git",
"https://github.com/greentwip/HarvestMoon.git",
"https://github.com/gregoryfenton/other-life.git",
"https://github.com/griefly/griefly.git",
"https://github.com/grit-engine/grit-engine.git",
@ -643,13 +647,16 @@
"https://github.com/jwvhewitt/gearhead-1.git",
"https://github.com/jwvhewitt/gearhead-2.git",
"https://github.com/kantoks/skrupel.git",
"https://github.com/karlb/castle-combat.git",
"https://github.com/kazzmir/paintown.git",
"https://github.com/kblaschke/Iris2.git",
"https://github.com/keendreams/keen.git",
"https://github.com/khakulov/CreepTD.git",
"https://github.com/kig/runfield.git",
"https://github.com/klembot/twinejs.git",
"https://github.com/kreezii/jsgam.git",
"https://github.com/kthakore/frozen-bubble.git",
"https://github.com/kyanha/crystal.git",
"https://github.com/laanwj/sundog.git",
"https://github.com/landoffire/lof-tmwa-client-data.git",
"https://github.com/landoffire/lof-tmwa-server-data.git",
@ -687,6 +694,7 @@
"https://github.com/matthewgrimes/itbs-code.git",
"https://github.com/mdsteele/azimuth.git",
"https://github.com/mdsteele/syzygy.git",
"https://github.com/melonjs/melonJS.git",
"https://github.com/metalvoidzz/Sourcehold.git",
"https://github.com/mgechev/mk.js.git",
"https://github.com/mgerhardy/caveexpress.git",
@ -755,6 +763,7 @@
"https://github.com/pentagram-u8/pentagram.git",
"https://github.com/performous/performous.git",
"https://github.com/phobos2077/sfall.git",
"https://github.com/photonstorm/phaser.git",
"https://github.com/pierreyoda/o2r.git",
"https://github.com/pioneerspacesim/pioneer.git",
"https://github.com/pistacchio/Dedalus.git",
@ -776,6 +785,7 @@
"https://github.com/pwmarcz/netacka.git",
"https://github.com/pychess/pychess.git",
"https://github.com/pygame/pygame.git",
"https://github.com/pyglet/pyglet.git",
"https://github.com/q-gears/q-gears.git",
"https://github.com/q4a/scourge.git",
"https://github.com/qbancoffee/infinite-tux.git",
@ -932,6 +942,7 @@
"https://github.com/widelands/widelands.git",
"https://github.com/worldforge/cyphesis.git",
"https://github.com/worldforge/ember.git",
"https://github.com/wxWidgets/Phoenix.git",
"https://github.com/wxWidgets/wxWidgets.git",
"https://github.com/xLAva/JediOutcastLinux.git",
"https://github.com/xesf/twin-e.git",

View File

@ -1,5 +1,4 @@
ftp://ftp.tuxpaint.org/unix/x/
Glitch the game, by Tiny Speck Inc. public domain
http://antongerdelan.net/blog/ (other projects besides TestDrive)
http://circularstudios.com/
http://cyxdown.free.fr/bs/
@ -23,25 +22,19 @@ http://icculus.org/hge-unix/ http://hge.relishgames.com/
http://icculus.org/jugglemaster/
http://icculus.org/pyddr/
http://icculus.org/toby/
http://ika.sourceforge.net/
http://insideastarfilledsky.net/
http://kursk.sourceforge.net/newfiles/Projects.htm
http://lazerbears.wixsite.com/lazerbears/cr-editor
http://lgames.sourceforge.net/ (all of them)
http://libagar.org/agar/index.html.en
http://libsdl-android.sourceforge.net/
http://lukaszjakowski.pl/ (games apart from uMario)
http://m484games.ucoz.com/
http://martindrapeau.github.io/backbone-game-engine/
http://melonjs.org/
http://onscripter.osdn.jp/onscripter.html
http://openapoc.pmprog.co.uk/
http://pathfinder.wikia.com/wiki/Pathfinder_Roleplaying_Game
http://phaser.io/
http://playir.com/
http://pyglet.org/
http://pyopengl.sourceforge.net/
http://pypy.org/
http://pypy.org/ (search for games)
http://rcbasic.com/
http://retrospec.sgn.net
http://roguebasin.roguelikedevelopment.org/index.php?title=Main_Page
@ -52,7 +45,6 @@ http://slick.ninjacave.com/
http://snowstorm.sourceforge.net/cgi-bin/site.cgi
http://sol.gfxile.net/ambrose3d/index.html
http://storygamecreator.webs.com/
http://stratagus.sourceforge.net/
http://sumwars.org/wiki/Main_Page
http://svn.assembla.com/svn/gdpl/
http://turbu-rpg.com/
@ -69,7 +61,6 @@ http://www.cafu.de/
http://www.celephais.net/fitzquake/
http://www.codeskulptor.org/
http://www.computerchess.org.uk/ccrl/4040/rating_list_all.html
http://www.crystalspace3d.org/main/Main_Page
http://www.divgo.net/
http://www.dosbox.com/download.php?main=1
http://www.drpetter.se/project_sfxr.html
@ -77,8 +68,8 @@ http://www.dungeoncrawl.org/?d.l
http://www.freemmorpgmaker.com/
http://www.gameplay3d.io/
http://www.garagegames.com/products/torque-3d
http://www.gnu.org/
http://www.happypenguin.org/show?XKobo
http://www.gnu.org/ (search for games)
http://www.happypenguin.org/show?XKobo (offline)
http://www.hard-light.net/
http://www.ibiblio.org/pub/Linux/games/strategy/ (and all others)
http://www.ifwiki.org/index.php/Main_Page
@ -102,11 +93,11 @@ http://www.linuxdevcenter.com/pub/a/linux/2003/04/24/exult.html
http://www.mekwars.org/
http://www.myandroidonline.com/category/games/
http://www.netgore.com/
http://www.newbreedsoftware.com/
http://www.newbreedsoftware.com/ (all)
http://www.oletus.fi/games/
http://www.ph2.net/zugspiel/
http://www.plasmapong.com/plasma-pong/plasma-pong/
http://www.roguebasin.com (all)
http://www.roguebasin.com/index.php?title=Advanced_Rogue
http://www.roguebasin.com/index.php?title=Category:Roguelike_games
http://www.roguebasin.com/index.php?title=UltraRogue
@ -117,15 +108,18 @@ http://www.sandboxgamemaker.com/
http://www.scirra.com/construct-classic
http://www.siedler25.org/index.php?com=dynamic&mod=1&lang=en&PHPSESSID=0hmj4aug1fqa80jbk15kcafh71
http://www.silversecond.com/WolfRPGEditor/
http://www.sourceforge.net/projects/ika
http://www.sourceforge.net/projects/lgames (all of them)
http://www.sourceforge.net/projects/stratagus
http://www.spheredev.org/
http://www.usgo.org/go-software
http://www.vbgore.com/Main_Page
http://www.zeldaroth.fr/us/zroth.php
http://www.zsnes.com/ emulator/platform
http://www.zsnes.com/ (emulator/platform)
https://001gamecreator.com/
https://agateau.com/games/
https://aleph-one-marathon.github.io/
https://alternativeto.net/ query with only open source as opten
https://alternativeto.net/ (query with only open source as opten)
https://app.assembla.com/spaces/openrpg/wiki
https://app.assembla.com/spaces/Project_Valkyrie2/wiki
https://appimage.github.io/categories/Game
@ -276,6 +270,7 @@ https://github.com/pld-linux/nexuiz/blob/master/nexuiz.spec
https://github.com/psuong/ig-developer-console
https://github.com/qiciengine/qiciengine
https://github.com/Quaver/Wobble
https://github.com/rds1983/Myra
https://github.com/Renanse/Ardor3D
https://github.com/RetroAchievements/RALibretro
https://github.com/RetroAchievements/RAWeb
@ -283,6 +278,8 @@ https://github.com/rizwan3d/MotoGameEngine
https://github.com/rlguy/FantasyMapGenerator
https://github.com/RoxasShadow/Sottaceto
https://github.com/rramsden/ymir
https://github.com/sabresaurus/SabreCSG
https://github.com/SadConsole/SadConsole
https://github.com/SanderMertens/flecs
https://github.com/saniv/free-game-art/blob/master/foss-copyright-infringement-records.md
https://github.com/scp-fs2open/fs2open.github.com
@ -297,6 +294,7 @@ https://github.com/stolencatkarma/CataclysmLD
https://github.com/tainicom/Aether.Physics2D
https://github.com/tangziwen/Cube-Engine
https://github.com/the-insulines
https://github.com/AxioDL/urde
https://github.com/theaigames
https://github.com/Tinob/Ishiiruka (https://github.com/shiiion/Ishiiruka, https://github.com/SirMangler/PrimeHack-Updater)
https://github.com/tizian/Cendric2
@ -315,11 +313,10 @@ https://gitlab.com/nyov/nyovs-nexuiz
https://gitlab.com/vgstation/vgstation-old (and vgstation in general)
https://gitlab.com/xonlegacy/xonlegacy
https://gitlab.openrsc.com/open-rsc
https://gottcode.org/
https://gottcode.org/ (all)
https://instead3.syscall.ru/
https://itch.io/ (scrape, look for open source)
https://jcrpg.blogspot.de/
https://kde.org/applications/games
https://kde.org/applications/games/ (all of them)
https://lgdb.org/ (ask on reddit for archived version)
https://lgdb.org/engine/rawgl
@ -361,19 +358,9 @@ https://rpgmaker.net/engines/rpg20xx/
https://rpgmaker.net/games/2664/
https://salsa.debian.org/games-team/etw
https://scorched-moon.github.io/site/
https://scratch.mit.edu/
https://scratch.mit.edu/ (https://en.scratch-wiki.info/wiki/Scratch_Source_Code)
https://senseis.xmp.net/?GNUGo
https://sourceforge.net/directory/games/games/os:windows/
https://sourceforge.net/projects/ad1000/
https://sourceforge.net/projects/alterciv/
https://sourceforge.net/projects/battlechess/
https://sourceforge.net/projects/biege/
https://sourceforge.net/projects/crownsandshadow/
https://sourceforge.net/projects/crpge/
https://sourceforge.net/projects/crystal/
https://sourceforge.net/projects/cyoadventures/
https://sourceforge.net/projects/deuterosx/
https://sourceforge.net/projects/dices/
https://sourceforge.net/projects/dmonkey/
https://sourceforge.net/projects/dsa-hl.berlios/
@ -385,16 +372,12 @@ https://sourceforge.net/projects/freya-engine/
https://sourceforge.net/projects/fruitwar/
https://sourceforge.net/projects/heroes-rebirth/
https://sourceforge.net/projects/instead/
https://sourceforge.net/projects/javasettlers/
https://sourceforge.net/projects/jbiclone/
https://sourceforge.net/projects/jisoman/?source=directory
https://sourceforge.net/projects/jsgam/
https://sourceforge.net/projects/kge/
https://sourceforge.net/projects/korax/
https://sourceforge.net/projects/l5r-rpgu/
https://sourceforge.net/projects/lasthope/
https://sourceforge.net/projects/lgames/files/barrage/
https://sourceforge.net/projects/lightbringer2015/
https://sourceforge.net/projects/lixoo/
https://sourceforge.net/projects/mage/
https://sourceforge.net/projects/migrationsimulationgame/
@ -409,17 +392,14 @@ https://sourceforge.net/projects/phprpg/
https://sourceforge.net/projects/pipmak/
https://sourceforge.net/projects/qua/
https://sourceforge.net/projects/quest/
https://sourceforge.net/projects/roguelike/
https://sourceforge.net/projects/roguelike/ (more rogues)
https://sourceforge.net/projects/roguelike/ (collection of other rogue-like sources https://sourceforge.net/projects/roguelike/files/, https://web.archive.org/web/20180418191859/http://rogue.rogueforge.net/)
https://sourceforge.net/projects/rpgstudio/
https://sourceforge.net/projects/rpgtoolkit/
https://sourceforge.net/projects/rptools.berlios/
https://sourceforge.net/projects/schwertreiter/
https://sourceforge.net/projects/solarconflict/
https://sourceforge.net/projects/spaxehilk/
https://sourceforge.net/projects/sphere/
https://sourceforge.net/projects/tbswwengine/
https://sourceforge.net/projects/terrastrategy/
https://sourceforge.net/projects/terratenebrae/
https://sourceforge.net/projects/tyrant/
https://sourceforge.net/projects/untitled-rpg/
@ -453,6 +433,7 @@ https://www.fosshub.com/about.html
https://www.fosslinux.com/
https://www.freegamesutopia.com/
https://www.frictionalgames.com/forum/forum-28.html
https://www.glitchthegame.com/ (Glitch the game, by Tiny Speck Inc. public domain)
https://www.libretro.com/
https://www.libsdl.org/
https://www.moddb.com/ (scrape, look for open source)
@ -473,5 +454,4 @@ https://www.seul.org/~grumbel/tmp/clanlib/games.html
https://www.tapatalk.com/groups/imperilist/
https://www.tuxfamily.org/ (if there are games)
https://www.wurfelengine.net/
https://wxpython.org/
https://zope.readthedocs.io/en/latest/

View File

@ -6,12 +6,12 @@ osgameclones has the following fields:
mandatory fields are: 'name', 'license', 'type', 'originals'
possible values:
osgc-development: ['active', 'complete', 'halted', 'sporadic', 'very active']
osgc-multiplayer: ['Co-op', 'Competitive', 'Hotseat', 'LAN', 'Local', 'Online', 'Split-screen']
osgc-type: ['clone', 'remake', 'similar', 'tool']
osgc-status: ['playable', 'semi-playable', 'unplayable']
osgc-development: active(337), complete(32), halted(330), sporadic(129), very active(6)
osgc-multiplayer: Co-op(5), Competitive(13), Hotseat(3), LAN(17), Local(3), Matchmaking(1), Online(33), Split-screen(7)
osgc-type: clone(171), remake(684), similar(11), tool(7)
osgc-status: playable(274), semi-playable(34), unplayable(34)
osgc-license: ['AFL3', 'AGPL3', 'Apache', 'Artistic', 'As-is', 'BSD', 'BSD2', 'BSD4', 'bzip2', 'CC-BY', 'CC-BY-NC', 'CC-BY-NC-ND', 'CC-BY-NC-SA', 'CC-BY-SA', 'CC0', 'Custom', 'GPL2', 'GPL3', 'IJG', 'ISC', 'JRL', 'LGPL2', 'LGPL3', 'Libpng', 'MAME', 'MIT', 'MPL', 'MS-PL', 'Multiple', 'NGPL', 'PD', 'WTFPL', 'Zlib']
osgc-content: ['commercial', 'free', 'open', 'swappable']
osgc-content: commercial(104), free(32), open(61), swappable(5)
Mapping osgameclones -> ours
@ -42,7 +42,7 @@ from utils import constants, utils, osg
# should change on osgameclones
osgc_name_aliases = {'4DTris': '4D-TRIS', 'fheroes2': 'Free Heroes 2', 'DrCreep': 'The Castles of Dr. Creep', 'Duke3d_win32': 'Duke3d_w32', 'erampage (EDuke32 fork)': 'erampage', 'GNOME Atomix': 'Atomix', 'Head over Heels 2': 'Head over Heels',
'Jazz² Resurrection': 'Jazz² Resurrection', 'mewl': 'M.E.W.L.', 'LinWarrior': 'Linwarrior 3D', 'Mice Men Remix': 'Mice Men: Remix', 'OpenApoc': 'Open Apocalypse', 'open-cube': 'Open Cube', 'open-horizon': 'Open Horizon', 'opengl_test_drive_clone': 'OpenGL Test Drive Remake',
'mewl': 'M.E.W.L.', 'LinWarrior': 'Linwarrior 3D', 'Mice Men Remix': 'Mice Men: Remix', 'OpenApoc': 'Open Apocalypse', 'open-cube': 'Open Cube', 'open-horizon': 'Open Horizon', 'opengl_test_drive_clone': 'OpenGL Test Drive Remake',
'Play Freeciv!': 'Freeciv-web', 'ProjectX': 'Forsaken', 'Siege of Avalon Open Source': 'Siege of Avalon : Open Source', 'ss13remake': 'SS13 Remake', 'shadowgrounds': 'Shadowgrounds', 'RxWars': 'Prescription Wars', 'Super Mario Bros And Level Editor in C#': 'Mario Objects',
'tetris': 'Just another Tetris™ clone', 'twin-e': 'TwinEngine', 'CrossUO: Ultima Online': 'CrossUO', 'Doomsday': 'Doomsday Engine', 'OpMon': 'OPMon'}
@ -56,10 +56,6 @@ osgc_ignored_entries = ["A Mouse's Vengeance", 'achtungkurve.com', 'AdaDoom3', '
, 'OpenGeneral', 'MonoStrategy', 'New RAW', 'OpenDeathValley', 'OpenOutcast', 'openStrato', 'OpenPop', 'pacman', 'Phavon', 'PKMN-FX', 'Project: Xenocide', 'pyspaceinvaders', 'PyTouhou', 'Racer', 'Ruby OMF 2097 Remake', 'Snipes', 'Spaceship Duel', 'Space Station 14', 'Starlane Empire'
, 'Styx', 'Super Mario Bros With SFML in C#', 'thromolusng', 'Tile World 2', 'Tranzam', 'Voxelstein 3D', 'XQuest 2', 'xrick', 'zedragon', 'Uncharted waters 2 remake', 'Desktop Adventures Engine for ScummVM', 'Open Sonic', 'Aladdin_DirectX', 'Alive_Reversing']
# ignore certain dependencies (not a framework)
osgc_ignored_dependencies = ['HTML5', 'HTML', 'HTML canvas']
def unique_field_contents(entries, field):
"""
"""
@ -75,6 +71,28 @@ def unique_field_contents(entries, field):
return unique_content
def compare_sets(a, b, name, limit=None):
"""
:param a:
:param b:
:param name:
:return:
"""
p = ''
if not isinstance(a, set):
a = set(a)
if not isinstance(b, set):
b = set(b)
d = sorted(list(a - b))
if d and limit != 'notus':
p += ' {} : us : {}\n'.format(name, ', '.join(d))
d = sorted(list(b - a))
if d and limit != 'notthem':
p += ' {} : them : {}\n'.format(name, ', '.join(d))
return p
if __name__ == "__main__":
similarity_threshold = 0.8
@ -91,21 +109,33 @@ if __name__ == "__main__":
osgc_entries = []
for file in files:
# read yaml
with open(os.path.join(osgc_path, file), 'r') as stream:
with open(os.path.join(osgc_path, file), 'r', encoding='utf-8') as stream:
try:
_ = yaml.safe_load(stream)
except yaml.YAMLError as exc:
raise exc
except Exception as exc:
print(file)
raise exc
# add to entries
osgc_entries.extend(_)
print('{} entries in osgameclones'.format(len(osgc_entries)))
print('Currently {} entries in osgameclones'.format(len(osgc_entries)))
for osgc_entry in osgc_entries:
name = osgc_entry['name']
if 'repo' in osgc_entry:
repos = osgc_entry['repo']
if isinstance(repos, str):
repos = [repos]
for repo in repos:
if 'github' in repo and any((repo.endswith(x) for x in ('/', '.git'))):
print('{} : {}'.format(osgc_entry['name'], repo))
# which fields do they have
osgc_fields = set()
for osgc_entry in osgc_entries:
osgc_fields.update(osgc_entry.keys())
print('unique osgc-fields: {}'.format(osgc_fields))
osgc_fields = sorted(list(osgc_fields))
print('Unique osgc-fields: {}'.format(', '.join(osgc_fields)))
for field in osgc_fields:
if field in ('video', 'feed', 'url', 'repo', 'info', 'updated', 'images', 'name', 'originals'):
@ -120,29 +150,28 @@ if __name__ == "__main__":
flat_content.append(c)
statistics = utils.unique_elements_and_occurrences(flat_content)
statistics.sort(key=str.casefold)
print('\n{}: {}'.format(field, ', '.join(statistics)))
print('{}: {}'.format(field, ', '.join(statistics)))
# eliminate the ignored entries
_ = [x['name'] for x in osgc_entries if x['name'] in osgc_ignored_entries] # those that will be ignored
_ = set(osgc_ignored_entries) - set(_) # those that shall be ignored minus those that will be ignored
if _:
print('Can un-ignore {}'.format(_))
osgc_entries = [x for x in osgc_entries if x['name'] not in osgc_ignored_entries]
# fix names and licenses (so they are not longer detected as deviations downstreams)
_ = [x['name'] for x in osgc_entries if x['name'] in osgc_name_aliases.keys()] # those that will be renamed
_ = set(osgc_name_aliases.keys()) - set(_) # those that shall be renamed minus those that will be renamed
if _:
print('Can un-rename {}'.format(_))
for index, entry in enumerate(osgc_entries):
name = entry['name']
if name in osgc_name_aliases:
entry['name'] = osgc_name_aliases[name]
if 'license' in entry:
licenses = entry['license']
licenses = [osgc_licenses_map.get(x, x) for x in licenses]
entry['license'] = licenses
if 'framework' in entry:
frameworks = entry['framework']
if type(frameworks) == str:
frameworks = [frameworks]
frameworks = [x for x in frameworks if x not in osgc_ignored_dependencies]
if frameworks:
entry['framework'] = frameworks
else:
del entry['framework']
osgc_licenses = entry['license']
osgc_licenses = [osgc_licenses_map.get(x, x) for x in osgc_licenses]
entry['license'] = osgc_licenses
osgc_entries[index] = entry # TODO is this necessary or is the entry modified anyway?
# which fields do they have
@ -180,10 +209,11 @@ if __name__ == "__main__":
print('{} in both, {} only in osgameclones, {} only with us'.format(len(common_names), len(osgc_names), len(our_names)))
# find similar names among the rest
for osgc_name in osgc_names:
for our_name in our_names:
if osg.game_name_similarity(osgc_name, our_name) > similarity_threshold:
print('{} - {}'.format(osgc_name, our_name))
#print('look for similar names')
#for osgc_name in osgc_names:
# for our_name in our_names:
# if osg.game_name_similarity(osgc_name, our_name) > similarity_threshold:
# print(' {} - {}'.format(osgc_name, our_name))
newly_created_entries = 0
# iterate over their entries
@ -204,39 +234,30 @@ if __name__ == "__main__":
# lang field
if 'lang' in osgc_entry:
languages = osgc_entry['lang']
if type(languages) == str:
languages = [languages]
osgc_languages = osgc_entry['lang']
if type(osgc_languages) == str:
osgc_languages = [osgc_languages]
our_languages = our_entry['code language'] # essential field
for lang in languages:
if lang not in our_languages:
p += ' code language {} missing\n'.format(lang)
p += compare_sets(osgc_languages, our_languages, 'code language')
# license
if 'license' in osgc_entry:
licenses = osgc_entry['license']
osgc_licenses = osgc_entry['license']
our_code_licenses = our_entry['code license'] # essential field
our_assets_licenses = our_entry.get('assets license', [])
for license in licenses:
# transform
if license not in our_code_licenses and license not in our_assets_licenses:
p += ' code/assets license {} missing\n'.format(license)
p += compare_sets(osgc_licenses, our_code_licenses + our_assets_licenses, 'licenses')
# framework (capitalization is ignored for now, HTML5 is ignored)
# framework (capitalization is ignored for now, only starts are compared)
if 'framework' in osgc_entry:
frameworks = osgc_entry['framework']
if type(frameworks) == str:
frameworks = [frameworks]
osgc_frameworks = osgc_entry['framework']
if type(osgc_frameworks) == str:
osgc_frameworks = [osgc_frameworks]
our_frameworks = our_entry.get('code dependencies', [])
our_frameworks = [x.casefold() for x in our_frameworks]
frameworks = [x.casefold() for x in frameworks]
for framework in frameworks:
if framework == 'html5':
continue
if framework not in our_frameworks:
p += ' code dependency {} missing\n'.format(framework)
osgc_frameworks = [x.casefold() for x in osgc_frameworks]
p += compare_sets(osgc_frameworks, our_frameworks, 'framework/dependencies')
# repo (ignore links to sourceforge project pages)
# repo (ignore links to sourceforge project pages, add download field from us)
if 'repo' in osgc_entry:
repos = osgc_entry['repo']
if type(repos) == str:
@ -250,67 +271,74 @@ if __name__ == "__main__":
# url (ignore http/https)
if 'url' in osgc_entry:
urls = osgc_entry['url']
if type(urls) == str:
urls = [urls]
urls = [utils.strip_url(url) for url in urls]
osgc_urls = osgc_entry['url']
if type(osgc_urls) == str:
osgc_urls = [osgc_urls]
osgc_urls = [utils.strip_url(url) for url in osgc_urls]
our_urls = our_entry['home']
our_urls = [utils.strip_url(url) for url in our_urls]
for url in urls:
if url not in our_urls:
p += ' home url {} missing\n'.format(url)
p += compare_sets(osgc_urls, our_urls, 'url/home')
# status
# status inconsistencies (playable can be beta/mature with us, but not playable must be beta)
if 'status' in osgc_entry:
status = osgc_entry['status']
osgc_status = osgc_entry['status']
our_status = our_entry['state'] # essential field
if status == 'playable' and 'mature' not in our_status:
p += ' status playable, not mature with us\n'
if status != 'playable' and 'mature' in our_status:
p += ' status {}, mature with us\n'.format(status)
if status == 'unplayable':
p += ' status unplayable\n'
if osgc_status != 'playable' and 'mature' in our_status:
p += ' status : mismatch : them {}, us mature\n'.format(osgc_status)
# development
# development inconsistencies
if 'development' in osgc_entry:
development = osgc_entry['development']
osgc_development = osgc_entry['development']
our_inactive = 'inactive' in our_entry
our_status = our_entry['state'] # essential field
if development == 'halted' and not our_inactive:
p += ' development halted, not inactive with us\n'
if (development == 'very active' or development == 'active' or development == 'sporadic') and our_inactive:
p += ' development {}, inactive with us\n'.format(development)
if development == 'complete' and 'mature' not in our_status:
p += ' development complete, not mature with us\n'
if osgc_development == 'halted' and not our_inactive:
p += ' development : mismatch : them halted - us not inactive\n'
if osgc_development in ['very active', 'active'] and our_inactive:
p += ' development : mismatch : them {}, us inactive\n'.format(osgc_development)
if osgc_development == 'complete' and 'mature' not in our_status:
p += ' development : mismatch : them complete, us not mature\n'
# originals
our_keywords = our_entry['keywords']
if 'originals' in osgc_entry:
originals = osgc_entry['originals']
for original in originals:
if 'inspired by ' + original not in our_keywords:
p += ' original {} not mentioned\n'.format(original)
osgc_originals = osgc_entry['originals']
osgc_originals = [x.replace(',', '') for x in osgc_originals] # we cannot have ',' or parts in parentheses in original names
our_originals = [x for x in our_keywords if x.startswith('inspired by ')]
if our_originals:
assert len(our_originals) == 1, '{}: {}'.format(our_name, our_originals)
our_originals = our_originals[0][11:].split('+')
our_originals = [x.strip() for x in our_originals]
our_originals = [x for x in our_originals if x not in ['Doom II']] # ignore
p += compare_sets(osgc_originals, our_originals, 'originals')
# multiplayer
# multiplayer (only lowercase comparison)
if 'multiplayer' in osgc_entry:
multiplayer = osgc_entry['multiplayer']
if type(multiplayer) == str:
multiplayer = [multiplayer]
for mp in multiplayer:
if mp not in our_keywords:
p += ' mp: {} not in keywords\n'.format(mp)
osgc_multiplayer = osgc_entry['multiplayer']
if type(osgc_multiplayer) == str:
osgc_multiplayer = [osgc_multiplayer]
osgc_multiplayer = [x.casefold() for x in osgc_multiplayer]
osgc_multiplayer = [x for x in osgc_multiplayer if x not in ['competitive']] # ignored
our_multiplayer = [x for x in our_keywords if x.startswith('multiplayer ')]
if our_multiplayer:
assert len(our_multiplayer) == 1
our_multiplayer = our_multiplayer[0][11:].split('+')
our_multiplayer = [x.strip().casefold() for x in our_multiplayer]
p += compare_sets(osgc_multiplayer, our_multiplayer, 'multiplayer')
# content
if 'content' in osgc_entry:
content = osgc_entry['content']
if content + ' content' not in our_keywords:
p += ' content: {} not in keywords\n'.format(content)
if isinstance(content, str):
content = [content]
p += compare_sets(content, our_keywords, 'content/keywords', 'notthem')
# type
if 'type' in osgc_entry:
game_type = osgc_entry['type']
if game_type not in our_keywords:
p += ' type: {} not in keywords\n'.format(game_type)
if isinstance(game_type, str):
game_type = [game_type]
p += compare_sets(game_type, our_keywords, 'type/keywords', 'notthem')
if p:
print('{}\n{}'.format(name, p))
@ -323,8 +351,10 @@ if __name__ == "__main__":
continue
game_type = osgc_entry.get('type', None)
status = osgc_entry.get('status', None)
if status == 'unplayable':
osgc_status = osgc_entry.get('status', None)
# we sort some out here (maybe we want to have a closer look at them later)
if osgc_status == 'unplayable':
# for now not the unplayable ones
continue
if 'license' not in osgc_entry or 'As-is' in osgc_entry['license']:
@ -353,7 +383,7 @@ if __name__ == "__main__":
entry += '- Home: {}\n'.format(home)
# state
entry += '- State: {}'.format(status)
entry += '- State: {}'.format(osgc_status)
if 'development' in osgc_entry:
if osgc_entry['development'] == 'halted':
entry += ', inactive since XX'
@ -372,15 +402,15 @@ if __name__ == "__main__":
if game_type:
keywords.append(game_type)
if 'originals' in osgc_entry:
originals = osgc_entry['originals']
if type(originals) == str:
originals = [originals]
keywords.append('inspired by {}'.format(' + '.join(originals)))
osgc_originals = osgc_entry['originals']
if type(osgc_originals) == str:
osgc_originals = [osgc_originals]
keywords.append('inspired by {}'.format(' + '.join(osgc_originals)))
if 'multiplayer' in osgc_entry:
multiplayer = osgc_entry['multiplayer']
if type(multiplayer) == str:
multiplayer = [multiplayer]
keywords.append('multiplayer {}'.format(' + '.join(multiplayer)))
osgc_multiplayer = osgc_entry['multiplayer']
if type(osgc_multiplayer) == str:
osgc_multiplayer = [osgc_multiplayer]
keywords.append('multiplayer {}'.format(' + '.join(osgc_multiplayer)))
if 'content' in osgc_entry:
content = osgc_entry['content']
keywords.append('{} content'.format(content))
@ -402,10 +432,10 @@ if __name__ == "__main__":
# code dependencies (if existing)
if 'framework' in osgc_entry:
frameworks = osgc_entry['framework']
if type(frameworks) == str:
frameworks = [frameworks]
entry += '- Code dependencies: {}\n'.format(', '.join(frameworks))
osgc_frameworks = osgc_entry['framework']
if type(osgc_frameworks) == str:
osgc_frameworks = [osgc_frameworks]
entry += '- Code dependencies: {}\n'.format(', '.join(osgc_frameworks))
# write info (if existing)
if 'info' in osgc_entry:
@ -418,5 +448,28 @@ if __name__ == "__main__":
utils.write_text(target_file, entry)
newly_created_entries += 1
# now iterate over our entries and test if we can add anything to them
print('entry that could be added to them')
for our_entry in our_entries:
our_name = our_entry['name']
# only if contains a keyword starting with "inspired by" and not "tools", "framework" or "library"
our_keywords = our_entry['keywords']
if not any([x.startswith('inspired by ') for x in our_keywords]):
continue
if any([x in ['tool', 'library', 'framework'] for x in our_keywords]):
continue
is_included = False
for osgc_entry in osgc_entries:
osgc_name = osgc_entry['name']
if osgc_name == our_name:
is_included = True
if not is_included:
# that could be added to them
print('- [{}]({})'.format(our_name, 'https://github.com/Trilarion/opensourcegames/blob/master/entries/' + our_entry['file']))

View File

@ -1,9 +1,12 @@
1000 AD (https://sourceforge.net/projects/ad1000/, http://game.1000ad.net/): No license information
8 Kingdoms (https://sourceforge.net/projects/kralovstvi/, https://svn.code.sf.net/p/kralovstvi/code/): No license found
Adventure Game Biege (https://sourceforge.net/projects/biege/): No license information next to source code, no contact possibility (https://github.com/Trilarion/opensourcegames/issues/61)
Aeron (https://sourceforge.net/projects/aeron/, https://svn.code.sf.net/p/aeron/code/): Very early development
Age of Magic (https://sourceforge.net/projects/ageofmagic/, https://svn.code.sf.net/p/ageofmagic/code/): Only supports outdated Hardware (Symbian)
Aladdin_DirectX (https://github.com/phanletrunghieu/Aladdin_DirectX.git): Very early development, Inactive, no license information
Alive_Reversing (https://github.com/AliveTeam/alive_reversing.git): No license information, reverse engineered, likely not licensable ever
Altera Terra (https://sourceforge.net/projects/alteraterra/, https://svn.code.sf.net/p/alteraterra/code/): Early development stage, no clear license information
AlterCiv (https://sourceforge.net/projects/alterciv/): Very early development
android_snake_game (https://github.com/codepath/android_snake_game): No license information found
Antigravitaattori (http://www.luolamies.org/software/antigrav/, https://packages.debian.org/stable/games/antigravitaattori): Very early development
Apricot JS (http://apricot-js.tumblr.com/): Difficult to find the source code, no license information, may not be used in games
@ -14,6 +17,7 @@ Atral Clades (https://sourceforge.net/projects/astralclades/, https://svn.code.s
Balazar III (https://web.archive.org/web/20180521213818/http://www.lesfleursdunormal.fr/static/informatique/old/balazar_iii/index_en.html, http://gna.org/svn/?group=balazar): Early development, sources lost (gna.org) - a pity, was fine otherwise
Balder3D (): Very early development, Balder2D instead
Barbie Seahorse Adventures (http://www.imitationpickles.org/barbie/, https://pyweek.org/e/toba4/): Source is all rights reserved (source in svn has license allegedly, but it lost)
BattleChess (https://sourceforge.net/projects/battlechess/): No source code found
Begin2 (https://sourceforge.net/projects/begin2/, https://svn.code.sf.net/p/begin2/code/): No source available
Berserk (https://github.com/EgorOrachyov/Berserk): No license information found
biju-game (https://github.com/fdfragoso/biju-game, http://crocidb.com/labs/biju-game/, https://github.com/CrociDB/biju-game): Very early development, No license added
@ -23,12 +27,15 @@ Camelia Girls (https://web.archive.org/web/20140523011334/http://pigux.com:80/ca
Cheese Boys (http://sourceforge.net/projects/cheeseboys/, http://cheeseboys.keul.it/, https://github.com/keul/Cheese-Boys, http://www.pygame.org/project-Cheese+Boys-692-.html): Very early development, Abandoned, License unclear
Clippers (http://sourceforge.net/projects/clippers/): No license attached to source code (will contact)
Codewars (http://sourceforge.net/projects/codewars): Very early development phase (especially client)
Complete Roll Playing Game Engine (https://sourceforge.net/projects/crpge/): Very early development, long abandoned
CRAFT: The Vicious Vikings (http://web.archive.org/web/20030402062302/borneo.gmd.de/AS/janus/craft/): Source code not available anymore
Crowns and Shadows (https://sourceforge.net/projects/crownsandshadow/): No license information, no contact possibility (see also https://github.com/Trilarion/opensourcegames/issues/14)
Crystal Picnic (https://github.com/Cloudxtreme/crystal-picnic, https://nooskewl.ca/crystal-picnic/): No license of their source code found (or is it zlib?, check again), is commercialized
Cycle (https://sourceforge.net/projects/meegocycle/): Proprietary license (freeware, source available)
dart-rpg (https://github.com/brad811/dart-rpg): No license information found
Desktop Adventures Engine for ScummVM (https://github.com/digitall/scummvm-deskadv.git): GPL-2.0 but early development and inactive since long time
digger (https://github.com/lutzroeder/digger): No license information
DeuterosX (https://sourceforge.net/projects/deuterosx/): No license information found, no contact with the author (https://github.com/Trilarion/opensourcegames/issues/25), long abandoned
Digger (https://github.com/lutzroeder/digger): No license information
DQM (http://idusale.tk): Homepage redirects to unrelated site
Drop Shock (http://www.tinywarz.com/index.php, https://sourceforge.net/projects/dropshock/, https://git.code.sf.net/p/dropshock/code): No license found
EarthShakerDS (http://simianzombie.com/posts/2011/05/10/earth-shaker-ds-released, https://github.com/ant512/EarthShakerDS.git): Target only Nintendo DS as hardware platform
@ -64,15 +71,18 @@ Imperium: Sticks (http://rtciv.sourceforge.net/, http://sourceforge.net/projects
Inline-Engine (https://github.com/petiaccja/Inline-Engine): Commercial license
Interstate Outlaws (http://www.interstateoutlaws.com/): Very early development, No clear indication of license with source code, Abandoned since long time
Ironclad (https://github.com/mikera/ironclad): No license information, asked but did not get a reply
Java Settlers of Catan (https://sourceforge.net/projects/javasettlers/): No license information, very early development
Jumping Jack 2 Worryingly Familiar (http://retrospec.sgn.net/game/jj2, http://retrospec.sgn.net/users/nwalker/jack/jjwf.zip): No compliant license found
Jumping Jack Further Adventures (http://retrospec.sgn.net/game/jj, http://retrospec.sgn.net/users/nwalker/jack/jj.zip): No compliant license found
Jumpman (http://www.oldskool.org/pc/jumpman, http://www.oldskool.org/pc/jumpman/jump_src.zip): Only runs on DOS, License problems (taken without asking for permission)
KDE Games (): Has been separated into individual packages. Will add them separately.
Kochol Game Engine (https://sourceforge.net/projects/kge/, http://kge3d.org/): Very early development
KZap (http://kzap.sourceforge.net/): Very early development
LastNinja (http://lastninja.sourceforge.net/, https://sourceforge.net/projects/lastninja/): Early development, Abandoned, Needs original material that is probably not obtainable legally
LegacyClone (http://sourceforge.net/projects/legacyclone/): Very early development
legion (https://github.com/mahho/legion.git): No compatible license found
Lemmix (http://www.ericenzwaan.nl/eric/lemmings/lemmix.htm, http://www.ericenzwaan.nl/eric/lemmings/LemOpenSource.zip): Custom license, requires original content that is probably not obtainable legally
Lightbringer Engine (https://sourceforge.net/projects/lightbringer2015/): Very early development
linball (http://linball.sourceforge.net/, https://sourceforge.net/projects/linball/): Very early development stage
luminesk5 (https://github.com/kaikai2/luminesk5.git): No clear license information found. Not clear if runnable or if playable.
Manic Miner (http://retrospec.sgn.net/game/mm): Unclear license (freeware?), probably many from retrospec.sgn.net
@ -107,6 +117,7 @@ Racer (http://racer.sourceforge.net/, http://sourceforge.net/projects/racer/): V
realmforge (https://sourceforge.net/projects/realmforge/): Went commercial
Ruby OMF 2097 Remake (http://rubyomf2097.rubyforge.org/, svn://rubyforge.org/var/svn/rubyomf2097): No source code found, web site offline
RuneSword II (https://sourceforge.net/projects/runesword/, http://runesword.sourceforge.net/, https://github.com/mattiascibien/Runesword.net, https://github.com/aceofspades19/Runesword-II-OS.Net, http://www.runesword.com/rs2.html): No license found
Schwertreiter (https://sourceforge.net/projects/schwertreiter/): No license information, early development, long abandoned
Scions of Darkness (): No link found.
sCoreForge Pathfinder Character Creator (https://sourceforge.net/projects/scoreforge/): No license found
Scoreus (https://web.archive.org/web/20120618143653/http://scoreos.org:80/about, https://code.google.com/archive/p/scoreos/, https://github.com/Lozza999/scoreos.git, https://code.google.com/archive/p/scoreos/): Source code not found
@ -124,6 +135,7 @@ Styx (http://retrospec.sgn.net/game/styx, http://retrospec.sgn.net/game-links.ph
Sudoku86 (http://sudoku86.sourceforge.net/): Does only run under DOS. Not the preferred OS for this database.
Super Mario Bros With SFML in C# (https://mario.codeplex.com/, https://mario.codeplex.com/SourceControl/latest): Codeplex cannot access archive, therefore no source, might be just a previous state of Mario Objects
Sworsorc (https://github.com/cjeffery/sworsorc, https://svn.code.sf.net/p/alteraterra/code/): Proprietary license (copyright headers in files)
Terra Reconstructed (https://sourceforge.net/projects/terrastrategy/, http://mori.pyco.eu/drupal): No license information, very early development, long abandoned
Tesseract Trainer (http://www.mushware.com/): Sources lost, license unclear, very early development, long abandoned
thromolusng (https://github.com/segfaulthunter/thromolusng.git): Very early development, not playable, no build instructions, abandoned since 2010
Tranzam (http://retrospec.sgn.net/game/tranzam, http://retrospec.sgn.net/download/files/TranzAm.1.1.zip): see other retrospec.sgn.net entries, license unclear, probably not open source as we want it