updates on developer information (parsing with lark)

This commit is contained in:
Trilarion 2020-02-03 15:50:24 +01:00
parent 10625a854a
commit eeb20a670a
66 changed files with 354 additions and 104 deletions

View File

@ -6,6 +6,8 @@ http://circularstudios.com/
http://cyxdown.free.fr/bs/ 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/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/
http://evolonline.org/about http://evolonline.org/about
@ -222,6 +224,7 @@ https://github.com/Cortrah/SpaceOperaDesign, https://github.com/Cortrah/SpaceOpe
https://github.com/cping/LGame https://github.com/cping/LGame
https://github.com/cymonsgames/CymonsGames (collection) https://github.com/cymonsgames/CymonsGames (collection)
https://github.com/DaanVanYperen/artemis-odb-contrib https://github.com/DaanVanYperen/artemis-odb-contrib
https://github.com/David20321/7DFPS (http://www.wolfire.com/receiver, not open source, for rejected list)
https://github.com/DeflatedPickle/FAOSDance https://github.com/DeflatedPickle/FAOSDance
https://github.com/delaford/game https://github.com/delaford/game
https://github.com/Donerkebap13/DonerComponents https://github.com/Donerkebap13/DonerComponents
@ -336,6 +339,7 @@ https://github.com/skypjack/entt
https://github.com/smlinux/nexuiz https://github.com/smlinux/nexuiz
https://github.com/SPC-Some-Polish-Coders/PopHead https://github.com/SPC-Some-Polish-Coders/PopHead
https://github.com/SPC-Some-Polish-Coders/PopHead/ https://github.com/SPC-Some-Polish-Coders/PopHead/
https://github.com/Squalr/Squally
https://github.com/stackos/Viry3D https://github.com/stackos/Viry3D
https://github.com/stolencatkarma/CataclysmLD https://github.com/stolencatkarma/CataclysmLD
https://github.com/Suprcode/mir3-zircon https://github.com/Suprcode/mir3-zircon

15
code/grammar_entries.lark Normal file
View File

@ -0,0 +1,15 @@
start: title description property+ _E note _E? building
title: "# " /(?! ).+(?<! )/ "\n" _E // not starting or ending with a space
description: "_" /(?! ).+(?<![ _])/ "_\n" _E // single line not ending with underscore
property: "- " _key ": " _value "\n" // a property on a single line "- key: value"
_key: /(?! ).+?(?=:)/ // key: everything until next ":"
_value: /.+(?<! )/ // everything until the end of the line
building: "## Building\n" _E property+ _E? note // the "building" section
note: /(?![\-#]).*\n/* // Unstructured text, not starting with - or #
_E: /^$\n/m // empty new line (filtered from tree)

17
code/grammar_listing.lark Normal file
View File

@ -0,0 +1,17 @@
start: header entries*
header: "# " name " (" number ")\n" _E
entries: "## " name " (" number ")\n" _E property+ _E
property: "- " _key ": " _value "\n"
_key: /(?! ).+?(?=:)(?<! )/ // key: everything until next ":", not beginning or ending with a space
_value: /.+(?<! )/ // everything until the end of the line, not ending with a space
name: /.+?(?= \()/ // developer name: everything until " ("
number: /[0-9]+/
COMMENT: /^\[comment\]: #.*$\n/m // [comment]: # xxx
_E: /^$\n/m // empty new line
%ignore COMMENT

View File

@ -25,7 +25,7 @@ def download_lgw_content():
# parameters # parameters
base_url = 'https://libregamewiki.org' base_url = 'https://libregamewiki.org'
destination_path = os.path.join(constants.root_path, 'tools', 'lgw-import') destination_path = os.path.join(constants.root_path, 'code', 'lgw-import')
utils.recreate_directory(destination_path) utils.recreate_directory(destination_path)
# read and process the base url (get all games and categories) # read and process the base url (get all games and categories)
@ -64,7 +64,7 @@ def download_lgw_content():
def parse_lgw_content(): def parse_lgw_content():
# paths # paths
import_path = os.path.join(constants.root_path, 'tools', 'lgw-import') import_path = os.path.join(constants.root_path, 'code', 'lgw-import')
entries_file = os.path.join(import_path, '_lgw.json') entries_file = os.path.join(import_path, '_lgw.json')
# iterate over all imported files # iterate over all imported files
@ -250,7 +250,7 @@ def ignore_nonnumbers(entries, fields):
def clean_lgw_content(): def clean_lgw_content():
# paths # paths
import_path = os.path.join(constants.root_path, 'tools', 'lgw-import') import_path = os.path.join(constants.root_path, 'code', 'lgw-import')
entries_file = os.path.join(import_path, '_lgw.json') entries_file = os.path.join(import_path, '_lgw.json')
cleaned_entries_file = os.path.join(import_path, '_lgw.cleaned.json') cleaned_entries_file = os.path.join(import_path, '_lgw.cleaned.json')

View File

@ -71,7 +71,7 @@ if __name__ == "__main__":
maximal_newly_created_entries = 40 maximal_newly_created_entries = 40
# paths # paths
lgw_import_path = os.path.join(constants.root_path, 'tools', 'lgw-import') lgw_import_path = os.path.join(constants.root_path, 'code', 'lgw-import')
lgw_entries_file = os.path.join(lgw_import_path, '_lgw.cleaned.json') lgw_entries_file = os.path.join(lgw_import_path, '_lgw.cleaned.json')
# import lgw import # import lgw import

View File

@ -739,8 +739,8 @@ def export_primary_code_repositories_json(infos):
for domain in ('repo.or.cz', 'anongit.kde.org', 'bitbucket.org', 'git.code.sf.net', 'git.savannah', 'git.tuxfamily', 'github.com', 'gitlab.com', 'gitlab.com/osgames', 'gitlab.gnome.org'): for domain in ('repo.or.cz', 'anongit.kde.org', 'bitbucket.org', 'git.code.sf.net', 'git.savannah', 'git.tuxfamily', 'github.com', 'gitlab.com', 'gitlab.com/osgames', 'gitlab.gnome.org'):
print('{} on {}'.format(sum(1 if domain in x else 0 for x in git_repos), domain)) print('{} on {}'.format(sum(1 if domain in x else 0 for x in git_repos), domain))
# write them to tools/git # write them to code/git
json_path = os.path.join(c.root_path, 'tools', 'archives.json') json_path = os.path.join(c.root_path, 'code', 'archives.json')
text = json.dumps(primary_repos, indent=1) text = json.dumps(primary_repos, indent=1)
utils.write_text(json_path, text) utils.write_text(json_path, text)
@ -768,8 +768,8 @@ def export_git_code_repositories_json():
# sort them alphabetically (and remove duplicates) # sort them alphabetically (and remove duplicates)
urls.sort() urls.sort()
# write them to tools/git # write them to code/git
json_path = os.path.join(c.root_path, 'tools', 'git_repositories.json') json_path = os.path.join(c.root_path, 'code', 'git_repositories.json')
text = json.dumps(urls, indent=1) text = json.dumps(urls, indent=1)
utils.write_text(json_path, text) utils.write_text(json_path, text)
@ -789,7 +789,7 @@ def sort_text_file(file, name):
def clean_backlog(stripped_game_urls): def clean_backlog(stripped_game_urls):
# read backlog and split # read backlog and split
file = os.path.join(c.root_path, 'tools', 'backlog.txt') file = os.path.join(c.root_path, 'code', 'backlog.txt')
text = utils.read_text(file) text = utils.read_text(file)
text = text.split('\n') text = text.split('\n')
@ -809,7 +809,7 @@ def check_validity_backlog():
import requests import requests
# read backlog and split # read backlog and split
file = os.path.join(c.root_path, 'tools', 'backlog.txt') file = os.path.join(c.root_path, 'code', 'backlog.txt')
text = utils.read_text(file) text = utils.read_text(file)
urls = text.split('\n') urls = text.split('\n')
urls = [x.split(' ')[0] for x in urls] urls = [x.split(' ')[0] for x in urls]
@ -835,9 +835,6 @@ def update_inspirations(infos):
print('update inspirations') print('update inspirations')
inspirations_file = os.path.join(c.root_path, 'inspirations.md')
inspirations = '[comment]: # (partly autogenerated content, edit with care, read the manual before)\n# Inspirations\n\n'
# collect information # collect information
originals = {} originals = {}
for info in infos: for info in infos:
@ -852,8 +849,9 @@ def update_inspirations(infos):
else: else:
originals[original] = [name] originals[original] = [name]
# number of inspirations inspirations_file = os.path.join(c.root_path, 'inspirations.md')
inspirations += '{} games listed as inspirations.\n\n'.format(len(originals)) inspirations = '[comment]: # (partly autogenerated content, edit with care, read the manual before)\n'
inspirations += '# Inspirations ({})\n\n'.format(len(originals)) # add number of inspirations
# iterate through originals alphabetically sorted # iterate through originals alphabetically sorted
for original, names in sorted(originals.items(), key=lambda x: str.casefold(x[0])): for original, names in sorted(originals.items(), key=lambda x: str.casefold(x[0])):
@ -871,9 +869,6 @@ def update_developer(infos):
print('update developer') print('update developer')
developer_file = os.path.join(c.root_path, 'developer.md')
content = '[comment]: # (partly autogenerated content, edit with care, read the manual before)\n# Developer\n\n'
# collect information # collect information
developer = {} developer = {}
for info in infos: for info in infos:
@ -886,8 +881,9 @@ def update_developer(infos):
else: else:
developer[dev] = [name] developer[dev] = [name]
# number of developers developer_file = os.path.join(c.root_path, 'developer.md')
content += '{} listed developer(s).\n\n'.format(len(developer)) content = '[comment]: # (partly autogenerated content, edit with care, read the manual before)\n'
content += '# Developer ({})\n\n'.format(len(developer)) # add number of developer
# iterate through developers alphabetically sorted # iterate through developers alphabetically sorted
for dev, names in sorted(developer.items(), key=lambda x: str.casefold(x[0])): for dev, names in sorted(developer.items(), key=lambda x: str.casefold(x[0])):
@ -936,7 +932,7 @@ if __name__ == "__main__":
# backlog # backlog
game_urls = osg.extract_links() game_urls = osg.extract_links()
text = utils.read_text(os.path.join(c.root_path, 'tools', 'rejected.txt')) text = utils.read_text(os.path.join(c.root_path, 'code', 'rejected.txt'))
regex = re.compile(r"\((http.*?)\)", re.MULTILINE) regex = re.compile(r"\((http.*?)\)", re.MULTILINE)
matches = regex.findall(text) matches = regex.findall(text)
rejected_urls = [] rejected_urls = []
@ -992,5 +988,5 @@ if __name__ == "__main__":
# check_validity_external_links() # check_validity_external_links()
# sort backlog and rejected # sort backlog and rejected
# sort_text_file(os.path.join(c.root_path, 'tools', 'backlog.txt'), 'backlog') # sort_text_file(os.path.join(c.root_path, 'code', 'backlog.txt'), 'backlog')
sort_text_file(os.path.join(c.root_path, 'tools', 'rejected.txt'), 'rejected games list') sort_text_file(os.path.join(c.root_path, 'code', 'rejected.txt'), 'rejected games list')

View File

@ -471,7 +471,7 @@ if __name__ == "__main__":
for our_entry in our_entries: for our_entry in our_entries:
our_name = our_entry['name'] our_name = our_entry['name']
# only if contains a keyword starting with "inspired by" and not "tools", "framework" or "library" # only if contains a keyword starting with "inspired by" and not "tool", "framework" or "library"
our_keywords = our_entry['keywords'] our_keywords = our_entry['keywords']
if not any([x.startswith('inspired by ') for x in our_keywords]): if not any([x.startswith('inspired by ') for x in our_keywords]):
continue continue

2
code/requirements.txt Normal file
View File

@ -0,0 +1,2 @@
pygithub
lark-parser

View File

@ -8,5 +8,6 @@ import os
root_path = os.path.realpath(os.path.join(os.path.dirname(__file__), os.path.pardir, os.path.pardir)) root_path = os.path.realpath(os.path.join(os.path.dirname(__file__), os.path.pardir, os.path.pardir))
entries_path = os.path.join(root_path, 'entries') entries_path = os.path.join(root_path, 'entries')
tocs_path = os.path.join(entries_path, 'tocs') tocs_path = os.path.join(entries_path, 'tocs')
code_path = os.path.join(root_path, 'code')
local_properties_file = os.path.join(root_path, 'local.properties') local_properties_file = os.path.join(root_path, 'local.properties')

View File

@ -6,24 +6,73 @@ import re
import os import os
from difflib import SequenceMatcher from difflib import SequenceMatcher
from utils import utils, constants as c from utils import utils, constants as c
import lark
class ListingTransformer(lark.Transformer):
def number(self, x):
raise lark.Discard
def property(self, x):
return (x[0].value, x[1].value)
def name(self, x):
return ('name', x[0].value)
def entries(self, x):
d = {}
for key, value in x:
d[key] = value
return d
def header(self, x):
raise lark.Discard
def start(self, x):
return x
essential_fields = ('Home', 'State', 'Keywords', 'Code repository', 'Code language', 'Code license') essential_fields = ('Home', 'State', 'Keywords', 'Code repository', 'Code language', 'Code license')
valid_fields = ('Home', 'Media', 'State', 'Play', 'Download', 'Platform', 'Keywords', 'Code repository', 'Code language', valid_fields = (
'Code license', 'Code dependencies', 'Assets license', 'Developer', 'Build system', 'Build instructions') 'Home', 'Media', 'State', 'Play', 'Download', 'Platform', 'Keywords', 'Code repository', 'Code language',
'Code license', 'Code dependencies', 'Assets license', 'Developer', 'Build system', 'Build instructions')
valid_platforms = ('Windows', 'Linux', 'macOS', 'Android', 'iOS', 'Web') valid_platforms = ('Windows', 'Linux', 'macOS', 'Android', 'iOS', 'Web')
recommended_keywords = ('action', 'arcade', 'adventure', 'visual novel', 'sports', 'platform', 'puzzle', 'role playing', 'simulation', 'strategy', 'cards', 'board', 'music', 'educational', 'tool', 'game engine', 'framework', 'library', 'remake') recommended_keywords = (
known_languages = ('AGS Script', 'ActionScript', 'Ada', 'AngelScript', 'Assembly', 'Basic', 'Blender Script', 'BlitzMax', 'C', 'C#', 'C++', 'Clojure', 'CoffeeScript', 'ColdFusion', 'D', 'DM', 'Dart', 'Dia', 'Elm', 'Emacs Lisp', 'F#', 'GDScript', 'Game Maker Script', 'Go', 'Groovy', 'Haskell', 'Haxe', 'Io', 'Java', 'JavaScript', 'Kotlin', 'Lisp', 'Lua', 'MegaGlest Script', 'MoonScript', 'None', 'OCaml', 'Objective-C', 'PHP', 'Pascal', 'Perl', 'Python', 'QuakeC', 'R', "Ren'py", 'Ruby', 'Rust', 'Scala', 'Scheme', 'Script', 'Shell', 'Swift', 'TorqueScript', 'TypeScript', 'Vala', 'Visual Basic', 'XUL', 'ZenScript', 'ooc') 'action', 'arcade', 'adventure', 'visual novel', 'sports', 'platform', 'puzzle', 'role playing', 'simulation',
known_licenses = ('2-clause BSD', '3-clause BSD', 'AFL-3.0', 'AGPL-3.0', 'Apache-2.0', 'Artistic License-1.0', 'Artistic License-2.0', 'Boost-1.0', 'CC-BY-NC-3.0', 'CC-BY-NC-SA-2.0', 'CC-BY-NC-SA-3.0', 'CC-BY-SA-3.0', 'CC-BY-NC-SA-4.0', 'CC-BY-SA-4.0', 'CC0', 'Custom', 'EPL-2.0', 'GPL-2.0', 'GPL-3.0', 'IJG', 'ISC', 'Java Research License', 'LGPL-2.0', 'LGPL-2.1', 'LGPL-3.0', 'MAME', 'MIT', 'MPL-1.1', 'MPL-2.0', 'MS-PL', 'MS-RL', 'NetHack General Public License', 'None', 'Proprietary', 'Public domain', 'SWIG license', 'Unlicense', 'WTFPL', 'wxWindows license', 'zlib') 'strategy', 'cards', 'board', 'music', 'educational', 'tool', 'game engine', 'framework', 'library', 'remake')
known_multiplayer_modes = ('competitive', 'co-op', 'hotseat', 'LAN', 'local', 'massive', 'matchmaking', 'online', 'split-screen') known_languages = (
'AGS Script', 'ActionScript', 'Ada', 'AngelScript', 'Assembly', 'Basic', 'Blender Script', 'BlitzMax', 'C', 'C#',
'C++', 'Clojure', 'CoffeeScript', 'ColdFusion', 'D', 'DM', 'Dart', 'Dia', 'Elm', 'Emacs Lisp', 'F#', 'GDScript',
'Game Maker Script', 'Go', 'Groovy', 'Haskell', 'Haxe', 'Io', 'Java', 'JavaScript', 'Kotlin', 'Lisp', 'Lua',
'MegaGlest Script', 'MoonScript', 'None', 'OCaml', 'Objective-C', 'PHP', 'Pascal', 'Perl', 'Python', 'QuakeC', 'R',
"Ren'py", 'Ruby', 'Rust', 'Scala', 'Scheme', 'Script', 'Shell', 'Swift', 'TorqueScript', 'TypeScript', 'Vala',
'Visual Basic', 'XUL', 'ZenScript', 'ooc')
known_licenses = (
'2-clause BSD', '3-clause BSD', 'AFL-3.0', 'AGPL-3.0', 'Apache-2.0', 'Artistic License-1.0', 'Artistic License-2.0',
'Boost-1.0', 'CC-BY-NC-3.0', 'CC-BY-NC-SA-2.0', 'CC-BY-NC-SA-3.0', 'CC-BY-SA-3.0', 'CC-BY-NC-SA-4.0',
'CC-BY-SA-4.0',
'CC0', 'Custom', 'EPL-2.0', 'GPL-2.0', 'GPL-3.0', 'IJG', 'ISC', 'Java Research License', 'LGPL-2.0', 'LGPL-2.1',
'LGPL-3.0', 'MAME', 'MIT', 'MPL-1.1', 'MPL-2.0', 'MS-PL', 'MS-RL', 'NetHack General Public License', 'None',
'Proprietary', 'Public domain', 'SWIG license', 'Unlicense', 'WTFPL', 'wxWindows license', 'zlib')
known_multiplayer_modes = (
'competitive', 'co-op', 'hotseat', 'LAN', 'local', 'massive', 'matchmaking', 'online', 'split-screen')
# TODO put the abbreviations directly in the name line (parenthesis maybe), that is more natural # TODO put the abbreviations directly in the name line (parenthesis maybe), that is more natural
code_dependencies_aliases = {'Simple DirectMedia Layer': ('SDL', 'SDL2'), 'Simple and Fast Multimedia Library': 'SFML', 'Boost (C++ Libraries)': 'Boost', 'SGE Game Engine': 'SGE'} code_dependencies_aliases = {'Simple DirectMedia Layer': ('SDL', 'SDL2'), 'Simple and Fast Multimedia Library': 'SFML',
code_dependencies_without_entry = {'OpenGL': 'https://www.opengl.org/', 'GLUT': 'https://www.opengl.org/resources/libraries/', 'WebGL': 'https://www.khronos.org/webgl/', 'Unity': 'https://unity.com/solutions/game', 'Boost (C++ Libraries)': 'Boost', 'SGE Game Engine': 'SGE'}
'.NET': 'https://dotnet.microsoft.com/', 'Vulkan': 'https://www.khronos.org/vulkan/', 'KDE Frameworks': 'https://kde.org/products/frameworks/'} code_dependencies_without_entry = {'OpenGL': 'https://www.opengl.org/',
'GLUT': 'https://www.opengl.org/resources/libraries/',
'WebGL': 'https://www.khronos.org/webgl/',
'Unity': 'https://unity.com/solutions/game',
'.NET': 'https://dotnet.microsoft.com/', 'Vulkan': 'https://www.khronos.org/vulkan/',
'KDE Frameworks': 'https://kde.org/products/frameworks/'}
regex_sanitize_name = re.compile(r"[^A-Za-z 0-9-+]+") 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" +")
comment_string = '[comment]: # (partly autogenerated content, edit with care, read the manual before)'
def name_similarity(a, b): def name_similarity(a, b):
return SequenceMatcher(None, str.casefold(a), str.casefold(b)).ratio() return SequenceMatcher(None, str.casefold(a), str.casefold(b)).ratio()
@ -87,26 +136,27 @@ def parse_entry(content):
info = {} info = {}
# read name # read name
regex = re.compile(r"^# (.*)") # start of content, starting with "# " and then everything until the end of line regex = re.compile(r"^# (.*)") # start of content, starting with "# " and then everything until the end of line
matches = regex.findall(content) matches = regex.findall(content)
if len(matches) != 1 or not matches[0]: # name must be there if len(matches) != 1 or not matches[0]: # name must be there
raise RuntimeError('Name not found in entry "{}" : {}'.format(content, matches)) raise RuntimeError('Name not found in entry "{}" : {}'.format(content, matches))
info['name'] = matches[0] info['name'] = matches[0]
# read description # read description
regex = re.compile(r"^.*\n\n_(.*)_\n") # third line from top, everything between underscores regex = re.compile(r"^.*\n\n_(.*)_\n") # third line from top, everything between underscores
matches = regex.findall(content) matches = regex.findall(content)
if len(matches) != 1 or not matches[0]: # description must be there if len(matches) != 1 or not matches[0]: # description must be there
raise RuntimeError('Description not found in entry "{}"'.format(content)) raise RuntimeError('Description not found in entry "{}"'.format(content))
info['description'] = matches[0] info['description'] = matches[0]
# first read all field names # first read all field names
regex = re.compile(r"^- (.*?): ", re.MULTILINE) # start of each line having "- ", then everything until a colon, then ": " regex = re.compile(r"^- (.*?): ",
re.MULTILINE) # start of each line having "- ", then everything until a colon, then ": "
fields = regex.findall(content) fields = regex.findall(content)
# check that essential fields are there # check that essential fields are there
for field in essential_fields: for field in essential_fields:
if field not in fields: # essential fields must be there if field not in fields: # essential fields must be there
raise RuntimeError('Essential field "{}" missing in entry "{}"'.format(field, info['name'])) raise RuntimeError('Essential field "{}" missing in entry "{}"'.format(field, info['name']))
# check that all fields are valid fields and are existing in that order # check that all fields are valid fields and are existing in that order
@ -114,19 +164,20 @@ def parse_entry(content):
for field in fields: for field in fields:
while index < len(valid_fields) and field != valid_fields[index]: while index < len(valid_fields) and field != valid_fields[index]:
index += 1 index += 1
if index == len(valid_fields): # must be valid fields and must be in the right order if index == len(valid_fields): # must be valid fields and must be in the right order
raise RuntimeError('Field "{}" in entry "{}" either misspelled or in wrong order'.format(field, info['name'])) raise RuntimeError(
'Field "{}" in entry "{}" either misspelled or in wrong order'.format(field, info['name']))
# iterate over found fields # iterate over found fields
for field in fields: for field in fields:
regex = re.compile(r"- {}: (.*)".format(field)) regex = re.compile(r"- {}: (.*)".format(field))
matches = regex.findall(content) matches = regex.findall(content)
if len(matches) != 1: # every field must be present only once if len(matches) != 1: # every field must be present only once
raise RuntimeError('Field "{}" in entry "{}" exist multiple times.'.format(field, info['name'])) raise RuntimeError('Field "{}" in entry "{}" exist multiple times.'.format(field, info['name']))
v = matches[0] v = matches[0]
# first store as is # first store as is
info[field.lower()+'-raw'] = v info[field.lower() + '-raw'] = v
# remove parenthesis with content # remove parenthesis with content
v = re.sub(r'\([^)]*\)', '', v) v = re.sub(r'\([^)]*\)', '', v)
@ -152,7 +203,7 @@ def parse_entry(content):
# check again that essential fields made it through # check again that essential fields made it through
for field in ('home', 'state', 'keywords', 'code language', 'code license'): for field in ('home', 'state', 'keywords', 'code language', 'code license'):
if field not in info: # essential fields must still be inside if field not in info: # essential fields must still be inside
raise RuntimeError('Essential field "{}" empty in entry "{}"'.format(field, info['name'])) raise RuntimeError('Essential field "{}" empty in entry "{}"'.format(field, info['name']))
# now checks on the content of fields # now checks on the content of fields
@ -160,7 +211,7 @@ def parse_entry(content):
# name and description should not have spaces at the begin or end # name and description should not have spaces at the begin or end
for field in ('name', 'description'): for field in ('name', 'description'):
v = info[field] v = info[field]
if len(v) != len(v.strip()): # warning about that if len(v) != len(v.strip()): # warning about that
print('Warning: No leading or trailing spaces in field {} in entry "{}"'.format(field, info['name'])) print('Warning: No leading or trailing spaces in field {} in entry "{}"'.format(field, info['name']))
# state (essential field) must contain either beta or mature but not both, but at least one # state (essential field) must contain either beta or mature but not both, but at least one
@ -182,8 +233,11 @@ def parse_entry(content):
for field in ['home', 'download', 'play', 'code repository']: for field in ['home', 'download', 'play', 'code repository']:
if field in info: if field in info:
for url in info[field]: for url in info[field]:
if not any([url.startswith(x) for x in ['http://', 'https://', 'git://', 'svn://', 'ftp://', 'bzr://']]): if not any(
raise RuntimeError('URL "{}" in entry "{}" does not start with http/https/git/svn/ftp/bzr'.format(url, info['name'])) [url.startswith(x) for x in ['http://', 'https://', 'git://', 'svn://', 'ftp://', 'bzr://']]):
raise RuntimeError(
'URL "{}" in entry "{}" does not start with http/https/git/svn/ftp/bzr'.format(url,
info['name']))
if ' ' in url: if ' ' in url:
raise RuntimeError('URL "{}" in entry "{}" contains a space'.format(url, info['name'])) raise RuntimeError('URL "{}" in entry "{}" contains a space'.format(url, info['name']))
@ -202,8 +256,10 @@ def parse_entry(content):
for platform in info['platform']: for platform in info['platform']:
while index < len(valid_platforms) and platform != valid_platforms[index]: while index < len(valid_platforms) and platform != valid_platforms[index]:
index += 1 index += 1
if index == len(valid_platforms): # must be valid platforms and must be in that order if index == len(valid_platforms): # must be valid platforms and must be in that order
raise RuntimeError('Platform tag "{}" in entry "{}" either misspelled or in wrong order'.format(platform, info['name'])) raise RuntimeError(
'Platform tag "{}" in entry "{}" either misspelled or in wrong order'.format(platform,
info['name']))
# there must be at least one keyword # there must be at least one keyword
if 'keywords' not in info: if 'keywords' not in info:
@ -215,20 +271,22 @@ def parse_entry(content):
if recommended_keyword in info['keywords']: if recommended_keyword in info['keywords']:
fail = False fail = False
break break
if fail: # must be at least one recommended keyword if fail: # must be at least one recommended keyword
raise RuntimeError('Entry "{}" contains no recommended keyword'.format(info['name'])) raise RuntimeError('Entry "{}" contains no recommended keyword'.format(info['name']))
# languages should be known # languages should be known
languages = info['code language'] languages = info['code language']
for language in languages: for language in languages:
if language not in known_languages: if language not in known_languages:
print('Warning: Language {} in entry "{}" is not a known language. Misspelled or new?'.format(language, info['name'])) print('Warning: Language {} in entry "{}" is not a known language. Misspelled or new?'.format(language,
info['name']))
# licenses should be known # licenses should be known
licenses = info['code license'] licenses = info['code license']
for license in licenses: for license in licenses:
if license not in known_licenses: if license not in known_licenses:
print('Warning: License {} in entry "{}" is not a known license. Misspelled or new?'.format(license, info['name'])) print('Warning: License {} in entry "{}" is not a known license. Misspelled or new?'.format(license,
info['name']))
return info return info
@ -295,3 +353,57 @@ def extract_links():
urls.add(url) urls.add(url)
urls = sorted(list(urls), key=str.casefold) urls = sorted(list(urls), key=str.casefold)
return urls return urls
def read_and_parse(content_file, grammar_file, transformer):
"""
:param content_file:
:param grammar_file:
:param transformer:
:return:
"""
content = utils.read_text(content_file)
grammar = utils.read_text(grammar_file)
parser = lark.Lark(grammar, debug=False)
tree = parser.parse(content)
return transformer.transform(tree)
def read_developer_info():
"""
:return:
"""
developer_file = os.path.join(c.root_path, 'developer.md')
grammar_file = os.path.join(c.code_path, 'grammar_listing.lark')
transformer = ListingTransformer()
return read_and_parse(developer_file, grammar_file, transformer)
def write_developer_info(developers):
"""
:return:
"""
developer_file = os.path.join(c.root_path, 'developer.md')
def read_inspirations_info():
"""
:return:
"""
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)
def write_inspirations_info(inspirations):
"""
:param inspirations:
:return:
"""
inspirations_file = os.path.join(c.root_path, 'inspirations.md')

View File

@ -1,7 +1,10 @@
[comment]: # (partly autogenerated content, edit with care, read the manual before) [comment]: # (partly autogenerated content, edit with care, read the manual before)
# Developer # Developer (336)
336 listed developer(s). ## Andy Southgate (1)
- Games: Adanaxis
- Organization: Mushware Limited
## Akira Higuchi (1) ## Akira Higuchi (1)
@ -54,6 +57,7 @@
## Andreas Røsdal (1) ## Andreas Røsdal (1)
- Games: OpenRTS - Games: OpenRTS
- Contact: rtsfan@SF
## Andy Southgate (1) ## Andy Southgate (1)
@ -62,6 +66,7 @@
## Anthony Mariette Louis Liekens (1) ## Anthony Mariette Louis Liekens (1)
- Games: Qonk - Games: Qonk
- Contact: aliekens@SF
## Antoine Morineau (1) ## Antoine Morineau (1)
@ -114,6 +119,7 @@
## Bill Kendrick (3) ## Bill Kendrick (3)
- Games: Gem Drop X, ICBM3D, Tux Paint - Games: Gem Drop X, ICBM3D, Tux Paint
- Organization: New Breed Software
## Bjørn Hansen (1) ## Bjørn Hansen (1)
@ -150,6 +156,7 @@
## Chris Hopp (2) ## Chris Hopp (2)
- Games: buggyGame, Pillows - Games: buggyGame, Pillows
- Home: https://fydo.net/
## Chris Laurel (1) ## Chris Laurel (1)
@ -190,6 +197,7 @@
## Daniel Roux (1) ## Daniel Roux (1)
- Games: Colobot: Gold Edition - Games: Colobot: Gold Edition
- Organization: Epsitec
## Daniele Napolitano (1) ## Daniele Napolitano (1)
@ -202,10 +210,17 @@
## darkrose (1) ## darkrose (1)
- Games: Turious - Games: Turious
- 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
- Contact: dagibbs@SF
## David Igreja (1) ## David Igreja (1)
@ -251,9 +266,20 @@
- 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
- Contact: del23@SF
## Don Woods (1) ## Don Woods (1)
@ -270,6 +296,7 @@
## Eben Upton (1) ## Eben Upton (1)
- Games: Ajax3d - Games: Ajax3d
- Contact: ebenupton@SF
## Ed James (1) ## Ed James (1)
@ -290,6 +317,7 @@
## Eric Gillespie (1) ## Eric Gillespie (1)
- Games: Nighthawk - Games: Nighthawk
- Contact: viking667@SF
## Eric House (1) ## Eric House (1)
@ -374,6 +402,7 @@
## Gabor Torok (1) ## Gabor Torok (1)
- Games: Abe's Amazing Adventure - Games: Abe's Amazing Adventure
- Contact: gabortorok@SF
## Ghoulsblade (1) ## Ghoulsblade (1)
@ -382,6 +411,7 @@
## Gil Megidish (1) ## Gil Megidish (1)
- Games: Heart of the Alien - Games: Heart of the Alien
- Contact: gilm@SF
## Gnome (2) ## Gnome (2)
@ -410,6 +440,7 @@
## Haeric (1) ## Haeric (1)
- Games: phpRPG - Games: phpRPG
- Contact: haeric@SF
## Hagish (1) ## Hagish (1)
@ -442,10 +473,12 @@
## Holger Schäkel (1) ## Holger Schäkel (1)
- Games: FooBillard++ - Games: FooBillard++
- Contact: holger110462@SF
## Horst Kevin (1) ## Horst Kevin (1)
- Games: Fictional Air Combat - Games: Fictional Air Combat
- Contact: horstkevin@SF
## Hubert Lamontagne (1) ## Hubert Lamontagne (1)
@ -474,6 +507,7 @@
## Jacob L. Anawalt (1) ## Jacob L. Anawalt (1)
- Games: Batalla Naval - Games: Batalla Naval
- Contact: jlanawalt@SF
## James Canete (1) ## James Canete (1)
@ -510,6 +544,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
## Jay Fenlason (1) ## Jay Fenlason (1)
@ -534,6 +569,7 @@
## Jens Fursund (1) ## Jens Fursund (1)
- Games: Qonk - Games: Qonk
- Contact: fursund@SF
## Jeremy Sheeley (1) ## Jeremy Sheeley (1)
@ -546,6 +582,7 @@
## Jetro Lauha (1) ## Jetro Lauha (1)
- Games: Pathogen Warrior - Games: Pathogen Warrior
- Home: https://jet.ro/
## Jim Gilloghy (1) ## Jim Gilloghy (1)
@ -554,6 +591,7 @@
## Jimmy Christensen (2) ## Jimmy Christensen (2)
- Games: OldSkool Gravity Game, SDL-Ball - Games: OldSkool Gravity Game, SDL-Ball
- Contact: dusteddk@SF, DusteDdk@GH
## Joan Queralt Molina (1) ## Joan Queralt Molina (1)
@ -590,6 +628,7 @@
## John-Paul Gignac (1) ## John-Paul Gignac (1)
- Games: Pathological - Games: Pathological
- Contact: jjgignac@SF
## Jonas Eschenburg (1) ## Jonas Eschenburg (1)
@ -610,6 +649,7 @@
## Joseph Hewitt (3) ## Joseph Hewitt (3)
- Games: Dungeon Monkey Eternal, GearHead, GearHead 2 - Games: Dungeon Monkey Eternal, GearHead, GearHead 2
- Contact: jwvhewitt@GH, jwvhewitt@SF
## Jujucece (1) ## Jujucece (1)
@ -635,6 +675,30 @@
- 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
@ -674,6 +738,7 @@
## krys (1) ## krys (1)
- Games: Krystal Drop - Games: Krystal Drop
- Contact: krys@SF
## Laurence R. Brothers (1) ## Laurence R. Brothers (1)
@ -698,6 +763,7 @@
## Loek (1) ## Loek (1)
- Games: Qonk - Games: Qonk
- Contact: exinion@SF
## Lori Angela Nagel (1) ## Lori Angela Nagel (1)
@ -710,6 +776,7 @@
## LucKey Productions (1) ## LucKey Productions (1)
- Games: Quatter - Games: Quatter
- Home: https://luckeyproductions.nl/, https://libregamewiki.org/LucKey_Productions
## Luismv (1) ## Luismv (1)
@ -738,6 +805,7 @@
## Marios Visvardis (1) ## Marios Visvardis (1)
- Games: MUSoSu - Games: MUSoSu
- Contact: marios_v@SF
## Mark Harman (1) ## Mark Harman (1)
@ -766,6 +834,7 @@
## Mateusz Viste (2) ## Mateusz Viste (2)
- Games: Atomiks, Simple Sokoban - Games: Atomiks, Simple Sokoban
- Contact: mv_fox@SF
## Mathew Velasquez (1) ## Mathew Velasquez (1)
@ -850,6 +919,7 @@
## Mikey Lubker (1) ## Mikey Lubker (1)
- Games: Snowballz - Games: Snowballz
- Contact: ratchet@SF
## Mikhail Kourinny (1) ## Mikhail Kourinny (1)
@ -858,6 +928,7 @@
## Mikkhail Kurin (1) ## Mikkhail Kurin (1)
- Games: AstroMenace - Games: AstroMenace
- Contact: viewizard@SF
## Mohammed Morsi (1) ## Mohammed Morsi (1)
@ -878,6 +949,7 @@
## New Breed Software (2) ## New Breed Software (2)
- Games: 3D Pong, Tux Paint - Games: 3D Pong, Tux Paint
- Home: http://newbreedsoftware.com/
## Nicolas Hadacek (1) ## Nicolas Hadacek (1)
@ -890,6 +962,7 @@
## Norbert Drexl (1) ## Norbert Drexl (1)
- Games: GL-117 - Games: GL-117
- Contact: heptargon@SF
## Oliver Baker (1) ## Oliver Baker (1)
@ -942,6 +1015,7 @@
## Paul Elms (1) ## Paul Elms (1)
- Games: Froggix - Games: Froggix
- Contact: scifly@SF
## Paul Hicks (1) ## Paul Hicks (1)
@ -950,6 +1024,7 @@
## Paul Mueller (1) ## Paul Mueller (1)
- Games: Free Space Colonization - Games: Free Space Colonization
- Contact: bitnapper@SF
## Paul Rouget (1) ## Paul Rouget (1)
@ -966,10 +1041,12 @@
## Peter Rogers (1) ## Peter Rogers (1)
- Games: PGU - Games: PGU
- Contact: parogers@GH
## Phil Hassey (1) ## Phil Hassey (1)
- Games: PGU - Games: PGU
- Home: http://www.philhassey.com/blog/
## Philip Dorrell (1) ## Philip Dorrell (1)
@ -982,6 +1059,7 @@
## Philippe Bousquet (1) ## Philippe Bousquet (1)
- Games: DarkCity - Games: DarkCity
- Contact: darken33@SF
## Piotr Pawlow (1) ## Piotr Pawlow (1)
@ -1002,6 +1080,7 @@
## Quetzy Garcia (1) ## Quetzy Garcia (1)
- Games: PSY PONG 3D - Games: PSY PONG 3D
- Contact: quetzyg@SF
## Rafal Zawadzki (1) ## Rafal Zawadzki (1)
@ -1022,10 +1101,12 @@
## Ricardo Cruz (1) ## Ricardo Cruz (1)
- Games: Microracers - Games: Microracers
- Contact: rmcruz@SF
## Ricardo Quesada (1) ## Ricardo Quesada (1)
- Games: Batalla Naval - Games: Batalla Naval
- Contact: riq@SF
## Richard Langridge (1) ## Richard Langridge (1)
@ -1034,6 +1115,7 @@
## Richard Sweeney (1) ## Richard Sweeney (1)
- Games: Project: Starfighter - Games: Project: Starfighter
- Organization: Parallel Realities
## Richard T. Jones (1) ## Richard T. Jones (1)
@ -1046,14 +1128,17 @@
## Rob Norman (1) ## Rob Norman (1)
- Games: phpRPG - Games: phpRPG
- Contact: stinx@SF
## Robert Noll (1) ## Robert Noll (1)
- Games: StressFreeZone - Games: StressFreeZone
- Contact: doomhammer@SF
## Robert Schuster (1) ## Robert Schuster (1)
- Games: Qonk - Games: Qonk
- Contact: thebohemian@SF
## Roman Belov (1) ## Roman Belov (1)
@ -1106,6 +1191,7 @@
## Sasha Bilton (1) ## Sasha Bilton (1)
- Games: Freya Game Engine - Games: Freya Game Engine
- Contact: pond@SF
## Shard (1) ## Shard (1)
@ -1118,6 +1204,7 @@
## Sheldon Simms (1) ## Sheldon Simms (1)
- Games: Omega-rpg - Games: Omega-rpg
- Contact: wsxyz@SF
## SiENcE (1) ## SiENcE (1)
@ -1190,10 +1277,12 @@
## Stephen Sweeney (2) ## Stephen Sweeney (2)
- Games: Blob Wars Episode 2 : Blob And Conquer, Project: Starfighter - Games: Blob Wars Episode 2 : Blob And Conquer, Project: Starfighter
- Organization: Parallel Realities
## Stephen Thorne (1) ## Stephen Thorne (1)
- Games: Pathological - Games: Pathological
- Contact: jerub@SF
## Steve Baker (1) ## Steve Baker (1)
@ -1250,6 +1339,7 @@
## Thorsten Kohnhorst (1) ## Thorsten Kohnhorst (1)
- Games: Krank - Games: Krank
- Contact: monsterkodi@SF
## Tim Edmonds (1) ## Tim Edmonds (1)
@ -1262,6 +1352,7 @@
## Timothy Chung (1) ## Timothy Chung (1)
- Games: phpRPG - Games: phpRPG
- Contact: ttschung@SF
## Toby A. Inkster (1) ## Toby A. Inkster (1)
@ -1270,6 +1361,7 @@
## Toddd (1) ## Toddd (1)
- Games: Open Quartz - Games: Open Quartz
- Contact: rsmd@SF
## Tom Beaumont (1) ## Tom Beaumont (1)
@ -1286,6 +1378,7 @@
## Tony Oakden (1) ## Tony Oakden (1)
- Games: Go Ollie! - Games: Go Ollie!
- Organization: Charlie Dog Games
## Troels Kofoed Jacobsen (1) ## Troels Kofoed Jacobsen (1)
@ -1298,6 +1391,7 @@
## UPi (1) ## UPi (1)
- Games: OpenMortal - Games: OpenMortal
- Contact: upi@SF
## Vianney Lecroart (1) ## Vianney Lecroart (1)
@ -1322,6 +1416,7 @@
## William Tanksley (1) ## William Tanksley (1)
- Games: Omega-rpg - Games: Omega-rpg
- Contact: wtanksle@SF
## XBlast development team (1) ## XBlast development team (1)
@ -1334,10 +1429,13 @@
## Yura (1) ## Yura (1)
- Games: Rescue! Max - Games: Rescue! Max
- Contact: yuranet@SF
## 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
## Zack Middleton (1) ## Zack Middleton (1)

View File

@ -11,6 +11,7 @@ _Master of Orion (1993) game engine recreation._
- Code language: C - Code language: C
- Code license: GPL-2.0 - Code license: GPL-2.0
- Code dependencies: Allegro, SDL, SDL2 - Code dependencies: Allegro, SDL, SDL2
- Developer: Kilgore Trout Mask Replicant
## Building ## Building

View File

@ -10,6 +10,7 @@ _Remake of Runescape Classic._
- Code repository: https://github.com/dginovker/2006rebotted.git - Code repository: https://github.com/dginovker/2006rebotted.git
- Code language: Java - Code language: Java
- Code license: 2-clause BSD - Code license: 2-clause BSD
- Developer: Daniel Ginovker
Open source 2006 Runescape emulation with botting. Open source 2006 Runescape emulation with botting.

View File

@ -11,6 +11,7 @@ _Sliding block puzzle game._
- Code language: JavaScript - Code language: JavaScript
- Code license: MIT - Code license: MIT
- Assets license: MIT (very few assets) - Assets license: MIT (very few assets)
- Developer: Gabriele Cirulli, Jerry Jiang (Android port)
Port to Android: https://github.com/tpcstld/2048 Port to Android: https://github.com/tpcstld/2048

View File

@ -10,5 +10,6 @@ _Mix between a Tetris-like game and a wall breaker._
- Code language: C++ - Code language: C++
- Code license: GPL-2.0 - Code license: GPL-2.0
- Code dependencies: SDL - Code dependencies: SDL
- Developer: Piwai
## Building ## Building

View File

@ -10,6 +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
## Building ## Building

View File

@ -10,6 +10,7 @@ _WebGL version of micropolisJS._
- Code language: JavaScript - Code language: JavaScript
- Code license: GPL-3.0 (with additional terms) - Code license: GPL-3.0 (with additional terms)
- Code dependencies: SEA3D, Three.js - Code dependencies: SEA3D, Three.js
- Developer: lo-th
## Building ## Building

View File

@ -11,7 +11,7 @@ _Side scrolling platform game._
- Code language: C - Code language: C
- Code license: GPL-2.0 - Code license: GPL-2.0
- Code dependencies: SDL - Code dependencies: SDL
- Developer: Gabor Torok (gabortorok@SF) - Developer: Gabor Torok
## Building ## Building

View File

@ -10,6 +10,6 @@ _Deep space first-person shooter._
- Code license: GPL-2.0 (non-free file in the commercial version) - Code license: GPL-2.0 (non-free file in the commercial version)
- Code dependencies: GLUT - Code dependencies: GLUT
- Assets license: GPL-2.0 - Assets license: GPL-2.0
- Developer: Mushware Limited (Andy Southgate) - Developer: Andy Southgate
## Building ## Building

View File

@ -10,6 +10,6 @@ _Remake of Zarch._
- Code repository: https://gitlab.com/osgames/ajax3d.git (conversion of cvs), http://ajax3d.cvs.sourceforge.net (cvs) - Code repository: https://gitlab.com/osgames/ajax3d.git (conversion of cvs), http://ajax3d.cvs.sourceforge.net (cvs)
- Code language: JavaScript - Code language: JavaScript
- Code license: GPL-2.0 - Code license: GPL-2.0
- Developer: Eben Upton (ebenupton@SF) - Developer: Eben Upton
## Building ## Building

View File

@ -9,7 +9,7 @@ _3D space scroll-shooter with spaceship upgrade possibilities._
- Code repository: https://github.com/viewizard/astromenace.git - Code repository: https://github.com/viewizard/astromenace.git
- Code language: C++, C - Code language: C++, C
- Code license: GPL-3.0 - Code license: GPL-3.0
- Developer: Mikkhail Kurin (Viewizard) - Developer: Mikkhail Kurin
## Building ## Building

View File

@ -9,7 +9,7 @@ _Battleship game._
- Code repository: https://gitlab.com/osgames/batnav.git (import of cvs), http://batnav.cvs.sourceforge.net (cvs) - Code repository: https://gitlab.com/osgames/batnav.git (import of cvs), http://batnav.cvs.sourceforge.net (cvs)
- Code language: C - Code language: C
- Code license: GPL-2.0 - Code license: GPL-2.0
- Developer: Ricardo Quesada (riq@SF), Jacob L. Anawalt (jlanawalt@SF) - Developer: Ricardo Quesada, Jacob L. Anawalt
## Building ## Building

View File

@ -11,7 +11,7 @@ _Blob Wars: Blob And Conquer is a 3D action game created by Parallel Realities._
- Code license: GPL-2.0 - Code license: GPL-2.0
- Code dependencies: SDL - Code dependencies: SDL
- Assets license: commercial - Assets license: commercial
- Developer: Stephen Sweeney (Parallel Realities) - Developer: Stephen Sweeney
## Building ## Building

View File

@ -10,7 +10,7 @@ _Real-time strategy game, where you can program your units (bots) in a language
- Code language: C++ - Code language: C++
- Code license: GPL-3.0 - Code license: GPL-3.0
- Code dependencies: SDL2 - Code dependencies: SDL2
- Developer: Daniel Roux (Epsitec), TerranovaTeam - Developer: Daniel Roux, TerranovaTeam
Updated version of the Colobot original source code. Updated version of the Colobot original source code.

View File

@ -9,7 +9,7 @@ _DarkCity is a MMORPG game, in text mode on the Internet._
- Code repository: https://gitlab.com/osgames/darkcity.git (backup of svn), https://svn.code.sf.net/p/darkcity/code (svn) - Code repository: https://gitlab.com/osgames/darkcity.git (backup of svn), https://svn.code.sf.net/p/darkcity/code (svn)
- Code language: PHP - Code language: PHP
- Code license: GPL-3.0 - Code license: GPL-3.0
- Developer: Philippe Bousquet (darken33) - Developer: Philippe Bousquet
## Building ## Building

View File

@ -9,7 +9,7 @@ _Third game in the dungeon monkey series._
- Code language: Python - Code language: Python
- Code license: GPL-2.0 - Code license: GPL-2.0
- Code dependencies: pygame, pyglet - Code dependencies: pygame, pyglet
- Developer: Joseph Hewitt (jwvhewitt) - Developer: Joseph Hewitt
## Building ## Building

View File

@ -9,6 +9,7 @@ _A turn based combat-oriented tactics RPG._
- Code repository: https://gitlab.com/osgames/dm-unlimited.git (conversion of svn), https://svn.code.sf.net/p/dmonkey/code (svn) - Code repository: https://gitlab.com/osgames/dm-unlimited.git (conversion of svn), https://svn.code.sf.net/p/dmonkey/code (svn)
- Code language: Pascal - Code language: Pascal
- Code license: LGPL-2.1 - Code license: LGPL-2.1
- Developer: Joseph Hewitt
Download of version 1.001 slightly different from last state of SVN repository. Download of version 1.001 slightly different from last state of SVN repository.

View File

@ -8,6 +8,6 @@ _Flight simulator that does not simulate real aircraft or historical war scenari
- Code repository: https://svn.code.sf.net/p/facsimulation/code (svn) - Code repository: https://svn.code.sf.net/p/facsimulation/code (svn)
- Code language: C, C++ - Code language: C, C++
- Code license: GPL-3.0 - Code license: GPL-3.0
- Developer: Horst Kevin (horstkevin), Stefan Aldinger - Developer: Horst Kevin, Stefan Aldinger
## Building ## Building

View File

@ -11,6 +11,6 @@ _Simple arcade game where you control a guy who is trying to sort the garbage fa
- Code license: LGPL-2.1 - Code license: LGPL-2.1
- Code dependencies: FLTK, libpng - Code dependencies: FLTK, libpng
- Assets license: LGPL - Assets license: LGPL
- Developer: Yuri D'Elia (wave++) - Developer: Yuri D'Elia
## Building ## Building

View File

@ -11,7 +11,7 @@ _3D billiard game._
- Code language: C - Code language: C
- Code license: GPL-2.0 - Code license: GPL-2.0
- Code dependencies: GLUT, SDL - Code dependencies: GLUT, SDL
- Developer: Holger Schäkel (holger110462) - Developer: Holger Schäkel
Based on [FooBillard](foobillard.md). Based on [FooBillard](foobillard.md).

View File

@ -9,7 +9,7 @@ _Game of colonization, research, diplomacy and trade. A 4X approach.It is played
- Code repository: https://gitlab.com/osgames/fsc.git (conversion of svn), https://svn.code.sf.net/p/fsc/code (svn) - Code repository: https://gitlab.com/osgames/fsc.git (conversion of svn), https://svn.code.sf.net/p/fsc/code (svn)
- Code language: C - Code language: C
- Code license: GPL-2.0 - Code license: GPL-2.0
- Developer: Paul Mueller (bitnapper@SF) - Developer: Paul Mueller
requires SDL requires SDL

View File

@ -9,6 +9,6 @@ _Engine for writing multiplayer turn based games._
- Code repository: https://gitlab.com/osgames/freya-engine.git (conversion of cvs), http://freya-engine.cvs.sourceforge.net (cvs) - Code repository: https://gitlab.com/osgames/freya-engine.git (conversion of cvs), http://freya-engine.cvs.sourceforge.net (cvs)
- Code language: Java - Code language: Java
- Code license: LGPL-2.1 - Code license: LGPL-2.1
- Developer: Sasha Bilton (pond@SF) - Developer: Sasha Bilton
## Building ## Building

View File

@ -10,6 +10,6 @@ _Remake of Frogger._
- Code language: Python - Code language: Python
- Code license: GPL-3.0 - Code license: GPL-3.0
- Code dependencies: pygame - Code dependencies: pygame
- Developer: Paul Elms (scifly@SF) - Developer: Paul Elms
## Building ## Building

View File

@ -10,6 +10,6 @@ _Math game similar to BSD's "arithmetic" or TuxMath._
- Code license: LGPL-2.1 - Code license: LGPL-2.1
- Code dependencies: GLUT - Code dependencies: GLUT
- Assets license: LGPL - Assets license: LGPL
- Developer: Yuri D'Elia (wave++) - Developer: Yuri D'Elia
## Building ## Building

View File

@ -11,6 +11,6 @@ _Fast puzzle game. Placing gems in vertical lines destroys them and ultimately l
- Code language: C - Code language: C
- Code license: GPL-2.0 - Code license: GPL-2.0
- Code dependencies: SDL - Code dependencies: SDL
- Developer: Bill Kendrick (New Breed Software) - Developer: Bill Kendrick
## Building ## Building

View File

@ -12,7 +12,7 @@ _Combat flight simulator._
- Code license: GPL-2.0 - Code license: GPL-2.0
- Code dependencies: GLUT, SDL - Code dependencies: GLUT, SDL
- Assets license: GPL-2.0 - Assets license: GPL-2.0
- Developer: Thomas Drexl (heptargon@SF), Jean-Marc Le Peuvedic, Eugene Andreeschev, Eric Cheung, Piotr Pawlow, Louens Veen, Arne Reiners, Norbert Drexl, James Stone, Bernhard Kaindl, Cedric Delfosse - Developer: Thomas Drexl, Jean-Marc Le Peuvedic, Eugene Andreeschev, Eric Cheung, Piotr Pawlow, Louens Veen, Arne Reiners, Norbert Drexl, James Stone, Bernhard Kaindl, Cedric Delfosse
## Building ## Building

View File

@ -12,6 +12,6 @@ _Go Ollie! is a mouse controlled platformer about an earth worm._
- Code license: GPL-3.0 - Code license: GPL-3.0
- Code dependencies: SDL - Code dependencies: SDL
- Assets license: CC-BY-SA-3.0 - Assets license: CC-BY-SA-3.0
- Developer: Tony Oakden (Charlie Dog Games) - Developer: Tony Oakden
## Building ## Building

View File

@ -11,6 +11,6 @@ _Remake of Another World 2: Heart of the Alien._
- Code language: C - Code language: C
- Code license: GPL-2.0 - Code license: GPL-2.0
- Code dependencies: SDL - Code dependencies: SDL
- Developer: Gil Megidish (gilm@SF) - Developer: Gil Megidish
## Building ## Building

View File

@ -12,6 +12,6 @@ _Game of dexterity._
- Code license: Public domain - Code license: Public domain
- Code dependencies: pygame - Code dependencies: pygame
- Assets license: Public domain (probably non-free backgrounds and a font in the original distribution, see debian distribution) - Assets license: Public domain (probably non-free backgrounds and a font in the original distribution, see debian distribution)
- Developer: Thorsten Kohnhorst (aka monsterkodi), legoluft (sound), Slava Anishenko (replacement free images) - Developer: Thorsten Kohnhorst, legoluft (sound), Slava Anishenko (replacement free images)
## Building ## Building

View File

@ -11,6 +11,6 @@ _Remake of Magical Drop._
- Code language: C++ - Code language: C++
- Code license: GPL-2.0 - Code license: GPL-2.0
- Code dependencies: SDL - Code dependencies: SDL
- Developer: krys (krys@SF) - Developer: krys
## Building ## Building

View File

@ -9,7 +9,7 @@ _Remake of Micro Machines._
- Code repository: https://github.com/rpmcruz/microracers.git, https://gitlab.com/osgames/microracers.git (+) (conversion of cvs), http://microracers.cvs.sourceforge.net (cvs) - Code repository: https://github.com/rpmcruz/microracers.git, https://gitlab.com/osgames/microracers.git (+) (conversion of cvs), http://microracers.cvs.sourceforge.net (cvs)
- Code language: C, C++ - Code language: C, C++
- Code license: GPL-2.0 - Code license: GPL-2.0
- Developer: Ricardo Cruz (rmcruz@SF) - Developer: Ricardo Cruz
Not really beta? Not really beta?

View File

@ -9,7 +9,7 @@ _Sudoku puzzle game (generator and solver)._
- Code repository: https://gitlab.com/osgames/musosu.git (import of sources) - Code repository: https://gitlab.com/osgames/musosu.git (import of sources)
- Code language: Java - Code language: Java
- Code license: GPL-3.0 - Code license: GPL-3.0
- Developer: Marios Visvardis (marios_v@SF) - Developer: Marios Visvardis
## Building ## Building

View File

@ -10,6 +10,6 @@ _Remake of Paradroid._
- Code repository: https://gitlab.com/osgames/night-hawk.git (conversion of cvs), https://night-hawk.cvs.sourceforge.net (cvs) - Code repository: https://gitlab.com/osgames/night-hawk.git (conversion of cvs), https://night-hawk.cvs.sourceforge.net (cvs)
- Code language: C++ - Code language: C++
- Code license: GPL-2.0 - Code license: GPL-2.0
- Developer: Jason Nunn, Eric Gillespie (vikin667@SF) - Developer: Jason Nunn, Eric Gillespie
## Building ## Building

View File

@ -12,7 +12,7 @@ _Side-scroller/arcade lunar-lander-like game._
- Code license: GPL-3.0 - Code license: GPL-3.0
- Code dependencies: OpenGL, SDL - Code dependencies: OpenGL, SDL
- Assets license: Artistic license-1.0 (font) - Assets license: Artistic license-1.0 (font)
- Developer: Jimmy Christensen (dusteddk@SF, DusteDdk@GH) - Developer: Jimmy Christensen
## Building ## Building

View File

@ -8,7 +8,7 @@ _Single player roguelike game._
- Code repository: https://gitlab.com/osgames/omega-roguelike.git (conversion of cvs), http://omega-roguelike.cvs.sourceforge.net (cvs) - Code repository: https://gitlab.com/osgames/omega-roguelike.git (conversion of cvs), http://omega-roguelike.cvs.sourceforge.net (cvs)
- Code language: C - Code language: C
- Code license: LGPL-2.0 - Code license: LGPL-2.0
- Developer: Laurence R. Brothers, Sheldon Simms (wsxyz@SF), David Gibbs (dagibbs@SF), William Tanksley (wtanksle@SF) - Developer: Laurence R. Brothers, Sheldon Simms, David Gibbs, William Tanksley
## Building ## Building

View File

@ -11,7 +11,7 @@ _Implementation of the GPL Quake source._
- Code language: C - Code language: C
- Code license: GPL-2.0 - Code license: GPL-2.0
- Assets license: ? (GPL) - Assets license: ? (GPL)
- Developer: Toddd (rsmd@SF) - Developer: Toddd
## Building ## Building

View File

@ -10,7 +10,7 @@ _Clone of Mortal Kombat._
- Code repository: https://gitlab.com/osgames/openmortal.git (conversion of cvs), http://openmortal.cvs.sourceforge.net (cvs) - Code repository: https://gitlab.com/osgames/openmortal.git (conversion of cvs), http://openmortal.cvs.sourceforge.net (cvs)
- Code language: C++, Perl - Code language: C++, Perl
- Code license: GPL-2.0 - Code license: GPL-2.0
- Developer: UPi (upi@SF) - Developer: UPi
## Building ## Building

View File

@ -10,7 +10,7 @@ _Isometric real-time strategy game._
- Code language: Python - Code language: Python
- Code license: GPL-2.0 - Code license: GPL-2.0
- Code dependencies: PGU, pygame - Code dependencies: PGU, pygame
- Developer: Andreas Røsdal (rtsfan@SF) - Developer: Andreas Røsdal
Also known as arrakis. Also known as arrakis.

View File

@ -8,7 +8,7 @@ _Simple game about matching a pathogen molecular structure on a hexagonal grid._
- Code repository: https://gitlab.com/osgames/pathogen-warrior.git (import of sources) - Code repository: https://gitlab.com/osgames/pathogen-warrior.git (import of sources)
- Code language: C++ - Code language: C++
- Code license: GPL-2.0 - Code license: GPL-2.0
- Developer: Jetro Lauha (tonic) - Developer: Jetro Lauha
## Building ## Building

View File

@ -9,7 +9,7 @@ _Remake of Log!cal._
- Code language: Python - Code language: Python
- Code license: GPL-2.0 - Code license: GPL-2.0
- Code dependencies: pygame - Code dependencies: pygame
- Developer: Stephen Thorne (jerub@SF), John-Paul Gignac (jjgignac@SF) - Developer: Stephen Thorne, John-Paul Gignac
## Building ## Building

View File

@ -10,7 +10,7 @@ _Collection of useful modules for writing games with PyGame._
- Code repository: https://github.com/parogers/pgu.git - Code repository: https://github.com/parogers/pgu.git
- Code language: Python - Code language: Python
- Code license: LGPL-2.1 - Code license: LGPL-2.1
- Developer: Phil Hassey (http://www.philhassey.com/blog/), Peter Rogers (parogers@GH) - Developer: Phil Hassey, Peter Rogers
## Building ## Building

View File

@ -10,7 +10,7 @@ _Multiplayer role playing game engine which shares common qualities between mult
- Code repository: https://gitlab.com/osgames/phprpg.git (conversion from cvs), http://phprpg.cvs.sourceforge.net (cvs) - Code repository: https://gitlab.com/osgames/phprpg.git (conversion from cvs), http://phprpg.cvs.sourceforge.net (cvs)
- Code language: PHP - Code language: PHP
- Code license: GPL-2.0 - Code license: GPL-2.0
- Developer: Haeric (haeric@SF), Rob Norman (stinx@SF), Timothy Chung (ttschung@SF) - Developer: Haeric, Rob Norman, Timothy Chung
## Building ## Building

View File

@ -11,6 +11,6 @@ _Save-the-world arcade game._
- Code license: GPL-2.0 - Code license: GPL-2.0
- Code dependencies: pygame - Code dependencies: pygame
- Assets license: FAL - Assets license: FAL
- Developer: Chris Hopp (fydo.net) - Developer: Chris Hopp
## Building ## Building

View File

@ -12,6 +12,6 @@ _Puzzle game._
- Code license: Public domain - Code license: Public domain
- Code dependencies: SDL - Code dependencies: SDL
- Assets license: Public domain - Assets license: Public domain
- Developer: Jason Rohrer (jcr13@SF) - Developer: Jason Rohrer
## Building ## Building

View File

@ -12,6 +12,6 @@ _2D shoot'em up game._
- Code license: GPL-3.0 - Code license: GPL-3.0
- Code dependencies: SDL - Code dependencies: SDL
- Assets license: various - Assets license: various
- Developer: Stephen Sweeney (Parallel Realities), Richard Sweeney (Parallel Realities) - Developer: Stephen Sweeney, Richard Sweeney
## Building ## Building

View File

@ -9,6 +9,6 @@ _3D pong clone._
- Code repository: (see download) - Code repository: (see download)
- Code language: C - Code language: C
- Code license: GPL-3.0 - Code license: GPL-3.0
- Developer: Quetzy Garcia (quetzyg) - Developer: Quetzy Garcia
## Building ## Building

View File

@ -10,7 +10,7 @@ _Simple real-time space conquering game._
- Code language: C++ - Code language: C++
- Code license: GPL-2.0 - Code license: GPL-2.0
- Code dependencies: SDL - Code dependencies: SDL
- Developer: Anthony Mariette Louis Liekens (aliekens@SF), Jens Fursund (fursund@SF), Loek (exinion@SF), Robert Schuster (thebohemian@SF), Troels Kofoed Jacobsen - Developer: Anthony Mariette Louis Liekens, Jens Fursund, Loek, Robert Schuster, Troels Kofoed Jacobsen
## Building ## Building

View File

@ -9,6 +9,6 @@ _Remake of Rescue!._
- Code repository: https://gitlab.com/osgames/rescue.git (conversion of svn), http://svn.code.sf.net/p/rescue/code (svn) - Code repository: https://gitlab.com/osgames/rescue.git (conversion of svn), http://svn.code.sf.net/p/rescue/code (svn)
- Code language: Java - Code language: Java
- Code license: GPL-3.0 - Code license: GPL-3.0
- Developer: Yura (yuranet@SF) - Developer: Yura
## Building ## Building

View File

@ -11,7 +11,7 @@ _Simple Sokoban game aimed at playability and portability across systems._
- Code license: GPL-3.0 - Code license: GPL-3.0
- Code dependencies: SDL - Code dependencies: SDL
- Assets license: ? (GPL) - Assets license: ? (GPL)
- Developer: Mateusz Viste (mv_fox@SF) - Developer: Mateusz Viste
## Building ## Building

View File

@ -10,6 +10,6 @@ _Real time strategy game._
- Code license: GPL - Code license: GPL
- Code dependencies: pygame, pyglet, Rabbyt - Code dependencies: pygame, pyglet, Rabbyt
- Assets license: GPL - Assets license: GPL
- Developer: Joey Marshall, Mikey Lubker (ratchet@SF) - Developer: Joey Marshall, Mikey Lubker
## Building ## Building

View File

@ -10,7 +10,7 @@ _Space simulation focused on cooperative (non-massive)-multiplayer and intuitive
- Code language: C++, Lua - Code language: C++, Lua
- Code license: GPL-3.0 - Code license: GPL-3.0
- Code dependencies: Lugre - Code dependencies: Lugre
- Developer: Mark Saward, Robert Noll (doomhammer@SF) - Developer: Mark Saward, Robert Noll
## Building ## Building

View File

@ -12,6 +12,6 @@ _Abstract 2D shooter game._
- Code license: ? (GPL, Public domain) - Code license: ? (GPL, Public domain)
- Code dependencies: GLUT, X - Code dependencies: GLUT, X
- Assets license: ? (GPL) - Assets license: ? (GPL)
- Developer: Jason Rohrer (jcr13) - Developer: Jason Rohrer
## Building ## Building

View File

@ -9,7 +9,7 @@ _Turn-Based Strategy Game._
- Code language: C - Code language: C
- Code license: GPL-3.0 - Code license: GPL-3.0
- Code dependencies: Rosethorn - Code dependencies: Rosethorn
- Developer: darkrose (darkrose@GL) - Developer: darkrose
## Building ## Building

View File

@ -9,6 +9,6 @@ _3D invaders game using wireframe vector graphics._
- Code language: C - Code language: C
- Code license: GPL-2.0 - Code license: GPL-2.0
- Assets license: no media - Assets license: no media
- Developer: Don Llopis (del23@SF) - Developer: Don Llopis
## Building ## Building

View File

@ -1,7 +1,5 @@
[comment]: # (partly autogenerated content, edit with care, read the manual before) [comment]: # (partly autogenerated content, edit with care, read the manual before)
# Inspirations # Inspirations (510)
510 games listed as inspirations.
## 1010! (1) ## 1010! (1)

View File

@ -1,7 +1,7 @@
[comment]: # (autogenerated content, do not edit) [comment]: # (autogenerated content, do not edit)
# Statistics # Statistics
analyzed 1387 entries on 2020-01-09 11:33:59 analyzed 1387 entries on 2020-01-28 10:19:50
## State ## State