entries cleanup
This commit is contained in:
parent
ec233f2f6a
commit
cd63ad2c20
@ -7,6 +7,7 @@ https://github.com/SadConsole/SadConsole
|
||||
https://github.com/tlgkccampbell/ultraviolet
|
||||
https://github.com/amerkoleci/Vortice.Windows
|
||||
https://github.com/horde3d/Horde3D
|
||||
https://github.com/delaford/game
|
||||
https://github.com/cxong/cdogs-sdl
|
||||
https://moaiwebsite.github.io/
|
||||
http://cyxdown.free.fr/bs/
|
||||
|
@ -18,118 +18,47 @@ import re
|
||||
import utils.constants
|
||||
from utils import constants as c, utils, osg
|
||||
|
||||
|
||||
def update_readme_and_tocs(infos):
|
||||
def extract_links():
|
||||
"""
|
||||
Recounts entries in sub categories and writes them to the readme.
|
||||
Also updates the _toc files in the categories directories.
|
||||
|
||||
Note: The Readme must have a specific structure at the beginning, starting with "# Open Source Games" and ending
|
||||
on "A collection.."
|
||||
|
||||
Needs to be performed regularly.
|
||||
"""
|
||||
print('update readme and toc files')
|
||||
|
||||
# completely delete content of toc path
|
||||
for file in os.listdir(c.tocs_path):
|
||||
os.remove(os.path.join(c.tocs_path, file))
|
||||
|
||||
# read readme
|
||||
readme_file = os.path.join(c.root_path, 'README.md')
|
||||
readme_text = utils.read_text(readme_file)
|
||||
|
||||
# compile regex for identifying the building blocks in the readme
|
||||
regex = re.compile(r"(.*?)(\[comment\]: # \(start.*?end of autogenerated content\))(.*)", re.DOTALL)
|
||||
|
||||
# apply regex
|
||||
matches = regex.findall(readme_text)
|
||||
if len(matches) != 1:
|
||||
raise RuntimeError('readme file has invalid structure')
|
||||
matches = matches[0]
|
||||
start = matches[0]
|
||||
end = matches[2]
|
||||
|
||||
tocs_text = ''
|
||||
|
||||
# split infos
|
||||
infos_games, infos_tools, infos_frameworks, infos_libraries = osg.split_infos(infos)
|
||||
|
||||
# create games, tools, frameworks, libraries tocs
|
||||
title = 'Games'
|
||||
file = '_games.md'
|
||||
tocs_text += '**[{}](entries/tocs/{}#{})** ({}) - '.format(title, file, title, len(infos_games))
|
||||
create_toc(title, file, infos_games)
|
||||
|
||||
title = 'Tools'
|
||||
file = '_tools.md'
|
||||
tocs_text += '**[{}](entries/tocs/{}#{})** ({}) - '.format(title, file, title, len(infos_tools))
|
||||
create_toc(title, file, infos_tools)
|
||||
|
||||
title = 'Frameworks'
|
||||
file = '_frameworks.md'
|
||||
tocs_text += '**[{}](entries/tocs/{}#{})** ({}) - '.format(title, file, title, len(infos_frameworks))
|
||||
create_toc(title, file, infos_frameworks)
|
||||
|
||||
title = 'Libraries'
|
||||
file = '_libraries.md'
|
||||
tocs_text += '**[{}](entries/tocs/{}#{})** ({})\n'.format(title, file, title, len(infos_libraries))
|
||||
create_toc(title, file, infos_libraries)
|
||||
|
||||
# create by category
|
||||
categories_text = []
|
||||
for keyword in utils.constants.recommended_keywords:
|
||||
infos_filtered = [x for x in infos if keyword in x['keywords']]
|
||||
title = keyword.capitalize()
|
||||
name = keyword.replace(' ', '-')
|
||||
file = '_{}.md'.format(name)
|
||||
categories_text.append('**[{}](entries/tocs/{}#{})** ({})'.format(title, file, name, len(infos_filtered)))
|
||||
create_toc(title, file, infos_filtered)
|
||||
categories_text.sort()
|
||||
tocs_text += '\nBy category: {}\n'.format(', '.join(categories_text))
|
||||
|
||||
# create by platform
|
||||
platforms_text = []
|
||||
for platform in utils.constants.valid_platforms:
|
||||
infos_filtered = [x for x in infos if platform in x.get('platform', [])]
|
||||
title = platform
|
||||
name = platform.lower()
|
||||
file = '_{}.md'.format(name)
|
||||
platforms_text.append('**[{}](entries/tocs/{}#{})** ({})'.format(title, file, name, len(infos_filtered)))
|
||||
create_toc(title, file, infos_filtered)
|
||||
tocs_text += '\nBy platform: {}\n'.format(', '.join(platforms_text))
|
||||
|
||||
# insert new text in the middle (the \n before the second comment is necessary, otherwise Markdown displays it as part of the bullet list)
|
||||
text = start + "[comment]: # (start of autogenerated content, do not edit)\n" + tocs_text + "\n[comment]: # (end of autogenerated content)" + end
|
||||
|
||||
# write to readme
|
||||
utils.write_text(readme_file, text)
|
||||
|
||||
|
||||
def create_toc(title, file, entries):
|
||||
Parses all entries and extracts http(s) links from them
|
||||
"""
|
||||
|
||||
# regex for finding urls (can be in <> or in ]() or after a whitespace
|
||||
regex = re.compile(r"[\s\n]<(http.+?)>|]\((http.+?)\)|[\s\n](http[^\s\n,]+?)[\s\n,]")
|
||||
|
||||
# iterate over all entries
|
||||
urls = set()
|
||||
for _, _, content in entry_iterator():
|
||||
|
||||
# apply regex
|
||||
matches = regex.findall(content)
|
||||
|
||||
# for each match
|
||||
for match in matches:
|
||||
|
||||
# for each possible clause
|
||||
for url in match:
|
||||
|
||||
# if there was something (and not a sourceforge git url)
|
||||
if url:
|
||||
urls.add(url)
|
||||
urls = sorted(list(urls), key=str.casefold)
|
||||
return urls
|
||||
|
||||
def split_infos(infos):
|
||||
"""
|
||||
# file path
|
||||
toc_file = os.path.join(c.tocs_path, file)
|
||||
Split into games, tools, frameworks, libraries
|
||||
"""
|
||||
games = [x for x in infos if not any([y in x['keywords'] for y in ('tool', 'framework', 'library')])]
|
||||
tools = [x for x in infos if 'tool' in x['keywords']]
|
||||
frameworks = [x for x in infos if 'framework' in x['keywords']]
|
||||
libraries = [x for x in infos if 'library' in x['keywords']]
|
||||
return games, tools, frameworks, libraries
|
||||
|
||||
# header line
|
||||
text = '[comment]: # (autogenerated content, do not edit)\n# {}\n\n'.format(title)
|
||||
|
||||
# assemble rows
|
||||
rows = []
|
||||
for entry in entries:
|
||||
rows.append('- **[{}]({})** ({})'.format(entry['Name'], '../' + entry['file'], ', '.join(
|
||||
entry['code language'] + entry['code license'] + entry['state'])))
|
||||
|
||||
# sort rows (by title)
|
||||
rows.sort(key=str.casefold)
|
||||
|
||||
# add to text
|
||||
text += '\n'.join(rows)
|
||||
|
||||
# write to toc file
|
||||
utils.write_text(toc_file, text)
|
||||
|
||||
|
||||
def check_validity_external_links():
|
||||
@ -220,28 +149,6 @@ def check_validity_external_links():
|
||||
print('{}: {} - exception {}'.format(names, url, error_name))
|
||||
|
||||
|
||||
def check_template_leftovers():
|
||||
"""
|
||||
Checks for template leftovers.
|
||||
|
||||
Should be run only occasionally.
|
||||
"""
|
||||
|
||||
print('check for template leftovers')
|
||||
|
||||
# load template and get all lines
|
||||
text = utils.read_text(os.path.join(c.root_path, 'template.md'))
|
||||
text = text.split('\n')
|
||||
check_strings = [x for x in text if x and not x.startswith('##')]
|
||||
|
||||
# iterate over all entries
|
||||
for _, entry_path, content in osg.entry_iterator():
|
||||
|
||||
for check_string in check_strings:
|
||||
if content.find(check_string) >= 0:
|
||||
raise RuntimeError('{}: found {}'.format(os.path.basename(entry_path), check_string))
|
||||
|
||||
|
||||
def fix_entries():
|
||||
"""
|
||||
Fixes the keywords, code dependencies, build systems, .. entries, mostly by automatically sorting them.
|
||||
@ -879,72 +786,6 @@ def check_validity_backlog():
|
||||
print('{} redirected to {}, {}'.format(url, r.url, r.history))
|
||||
|
||||
|
||||
def update_inspirations(infos):
|
||||
"""
|
||||
|
||||
"""
|
||||
|
||||
print('update inspirations')
|
||||
|
||||
# collect information
|
||||
originals = {}
|
||||
for info in infos:
|
||||
name = info['Name']
|
||||
keywords = info['keywords']
|
||||
ins = [x[12:] for x in keywords if x.startswith('inspired by ')]
|
||||
if ins:
|
||||
ins = ins[0].split(' + ')
|
||||
for original in ins:
|
||||
if original in originals:
|
||||
originals[original].append(name)
|
||||
else:
|
||||
originals[original] = [name]
|
||||
|
||||
inspirations_file = os.path.join(c.root_path, 'inspirations.md')
|
||||
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
|
||||
for original, names in sorted(originals.items(), key=lambda x: str.casefold(x[0])):
|
||||
inspirations += '## {} ({})\n\n'.format(original, len(names))
|
||||
inspirations += '- Inspired entries: {}\n\n'.format(', '.join(sorted(names, key=str.casefold)))
|
||||
|
||||
# write to statistics file
|
||||
utils.write_text(inspirations_file, inspirations)
|
||||
|
||||
|
||||
def update_developer(infos):
|
||||
"""
|
||||
|
||||
"""
|
||||
|
||||
print('update developer')
|
||||
|
||||
# collect information
|
||||
developer = {}
|
||||
for info in infos:
|
||||
if 'developer' in info:
|
||||
name = info['Name']
|
||||
devs = info['developer']
|
||||
for dev in devs:
|
||||
if dev in developer:
|
||||
developer[dev].append(name)
|
||||
else:
|
||||
developer[dev] = [name]
|
||||
|
||||
developer_file = os.path.join(c.root_path, 'developer.md')
|
||||
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
|
||||
for dev, names in sorted(developer.items(), key=lambda x: str.casefold(x[0])):
|
||||
content += '## {} ({})\n\n'.format(dev, len(names))
|
||||
content += '- Games: {}\n\n'.format(', '.join(sorted(names, key=str.casefold)))
|
||||
|
||||
# write to statistics file
|
||||
utils.write_text(developer_file, content)
|
||||
|
||||
|
||||
def check_code_dependencies(infos):
|
||||
"""
|
||||
|
||||
@ -984,50 +825,20 @@ def check_code_dependencies(infos):
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
# check_validity_backlog()
|
||||
check_validity_backlog()
|
||||
|
||||
|
||||
# clean backlog
|
||||
game_urls = osg.extract_links()
|
||||
text = utils.read_text(os.path.join(c.root_path, 'code', 'rejected.txt'))
|
||||
regex = re.compile(r"\((http.*?)\)", re.MULTILINE)
|
||||
matches = regex.findall(text)
|
||||
rejected_urls = []
|
||||
for match in matches:
|
||||
urls = match.split(',')
|
||||
urls = [x.strip() for x in urls]
|
||||
rejected_urls.extend(urls)
|
||||
game_urls.extend(rejected_urls)
|
||||
more_urls = []
|
||||
for url in game_urls:
|
||||
if url.startswith('https://web.archive.org/web'):
|
||||
# print(url) # sometimes the http is missing in archive links (would need proper parsing)
|
||||
url = url[url.index('http', 5):]
|
||||
more_urls.append(url)
|
||||
game_urls.extend(more_urls)
|
||||
stripped_game_urls = [utils.strip_url(x) for x in game_urls]
|
||||
clean_backlog(stripped_game_urls)
|
||||
|
||||
# check for unfilled template lines
|
||||
check_template_leftovers()
|
||||
|
||||
# fix entries
|
||||
fix_entries()
|
||||
|
||||
# assemble info
|
||||
infos = osg.assemble_infos()
|
||||
|
||||
# recount and write to readme and to tocs
|
||||
update_readme_and_tocs(infos)
|
||||
|
||||
# generate report
|
||||
update_statistics(infos)
|
||||
|
||||
# update inspirations
|
||||
# update_inspirations(infos)
|
||||
|
||||
# update developers
|
||||
# update_developer(infos)
|
||||
|
||||
# update database for html table
|
||||
export_json(infos)
|
||||
|
||||
|
@ -43,7 +43,7 @@ valid_fields = ('File', 'Title') + valid_properties + ('Note', 'Building')
|
||||
|
||||
url_fields = ('Home', 'Media', 'Play', 'Download', 'Code repository')
|
||||
|
||||
valid_url_prefixes = ('http://', 'https://', 'git://', 'svn://', 'ftp://', 'bzr://', '@see-')
|
||||
valid_url_prefixes = ('http://', 'https://', 'git://', 'svn://', 'ftp://', 'bzr://', '@see-', '@not-', '?')
|
||||
|
||||
valid_building_properties = ('Build system', 'Build instructions')
|
||||
valid_building_fields = valid_building_properties + ('Note',)
|
||||
@ -63,8 +63,8 @@ known_languages = (
|
||||
'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')
|
||||
"Ren'Py", 'Ruby', 'Rust', 'Scala', 'Scheme', 'Script', 'Shell', 'Swift', 'TorqueScript', 'TypeScript', 'Vala',
|
||||
'Visual Basic', 'XUL', 'ZenScript', 'ooc', '?')
|
||||
|
||||
# known licenses, anything outside of this will result in a warning during a maintenance operation
|
||||
# only these will be used when gathering statistics
|
||||
@ -73,7 +73,7 @@ known_licenses = (
|
||||
'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')
|
||||
'None', 'Proprietary', 'Public domain', 'SWIG license', 'Unlicense', 'WTFPL', 'wxWindows license', 'zlib', '?')
|
||||
|
||||
# valid multiplayer modes (can be combined with "+" )
|
||||
valid_multiplayer_modes = (
|
||||
|
@ -15,17 +15,6 @@ def name_similarity(a, b):
|
||||
return SequenceMatcher(None, str.casefold(a), str.casefold(b)).ratio()
|
||||
|
||||
|
||||
def split_infos(infos):
|
||||
"""
|
||||
Split into games, tools, frameworks, libraries
|
||||
"""
|
||||
games = [x for x in infos if not any([y in x['keywords'] for y in ('tool', 'framework', 'library')])]
|
||||
tools = [x for x in infos if 'tool' in x['keywords']]
|
||||
frameworks = [x for x in infos if 'framework' in x['keywords']]
|
||||
libraries = [x for x in infos if 'library' in x['keywords']]
|
||||
return games, tools, frameworks, libraries
|
||||
|
||||
|
||||
def entry_iterator():
|
||||
"""
|
||||
|
||||
@ -63,235 +52,6 @@ def canonical_entry_name(name):
|
||||
return name
|
||||
|
||||
|
||||
def parse_entry(content):
|
||||
"""
|
||||
Returns a dictionary of the features of the content.
|
||||
|
||||
Raises errors when a major error in the structure is expected, prints a warning for minor errors.
|
||||
"""
|
||||
|
||||
info = {}
|
||||
|
||||
# read name
|
||||
regex = re.compile(r"^# (.*)") # start of content, starting with "# " and then everything until the end of line
|
||||
matches = regex.findall(content)
|
||||
if len(matches) != 1 or not matches[0]: # name must be there
|
||||
raise RuntimeError('Name not found in entry "{}" : {}'.format(content, matches))
|
||||
info['name'] = matches[0]
|
||||
|
||||
# read description
|
||||
regex = re.compile(r"^.*\n\n_(.*)_\n") # third line from top, everything between underscores
|
||||
matches = regex.findall(content)
|
||||
if len(matches) != 1 or not matches[0]: # description must be there
|
||||
raise RuntimeError('Description not found in entry "{}"'.format(content))
|
||||
info['description'] = matches[0]
|
||||
|
||||
# first read all field names
|
||||
regex = re.compile(r"^- (.*?): ",
|
||||
re.MULTILINE) # start of each line having "- ", then everything until a colon, then ": "
|
||||
fields = regex.findall(content)
|
||||
|
||||
# check that essential fields are there
|
||||
for field in essential_fields:
|
||||
if field not in fields: # essential fields must be there
|
||||
raise RuntimeError('Essential field "{}" missing in entry "{}"'.format(field, info['name']))
|
||||
|
||||
# check that all fields are valid fields and are existing in that order
|
||||
index = 0
|
||||
for field in fields:
|
||||
while index < len(valid_fields) and field != valid_fields[index]:
|
||||
index += 1
|
||||
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']))
|
||||
|
||||
# iterate over found fields
|
||||
for field in fields:
|
||||
regex = re.compile(r"- {}: (.*)".format(field))
|
||||
matches = regex.findall(content)
|
||||
if len(matches) != 1: # every field must be present only once
|
||||
raise RuntimeError('Field "{}" in entry "{}" exist multiple times.'.format(field, info['name']))
|
||||
v = matches[0]
|
||||
|
||||
# first store as is
|
||||
info[field.lower() + '-raw'] = v
|
||||
|
||||
# remove parenthesis with content
|
||||
v = re.sub(r'\([^)]*\)', '', v)
|
||||
|
||||
# split on ', '
|
||||
v = v.split(', ')
|
||||
|
||||
# strip
|
||||
v = [x.strip() for x in v]
|
||||
|
||||
# remove all being false (empty) that were for example just comments
|
||||
v = [x for x in v if x]
|
||||
|
||||
# if entry is of structure <..> remove <>
|
||||
v = [x[1:-1] if x[0] == '<' and x[-1] == '>' else x for x in v]
|
||||
|
||||
# empty fields will not be stored
|
||||
if not v:
|
||||
continue
|
||||
|
||||
# store in info
|
||||
info[field.lower()] = v
|
||||
|
||||
# check again that essential fields made it through
|
||||
for field in ('home', 'state', 'keywords', 'code language', 'code license'):
|
||||
if field not in info: # essential fields must still be inside
|
||||
raise RuntimeError('Essential field "{}" empty in entry "{}"'.format(field, info['name']))
|
||||
|
||||
# now checks on the content of fields
|
||||
|
||||
# name and description should not have spaces at the begin or end
|
||||
for field in ('name', 'description'):
|
||||
v = info[field]
|
||||
if len(v) != len(v.strip()): # warning about that
|
||||
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
|
||||
v = info['state']
|
||||
for t in v:
|
||||
if t != 'beta' and t != 'mature' and not t.startswith('inactive since '):
|
||||
raise RuntimeError('Unknown state tage "{}" in entry "{}"'.format(t, info['name']))
|
||||
if 'beta' in v != 'mature' in v:
|
||||
raise RuntimeError('State must be one of <"beta", "mature"> in entry "{}"'.format(info['name']))
|
||||
|
||||
# extract inactive year
|
||||
phrase = 'inactive since '
|
||||
inactive_year = [x[len(phrase):] for x in v if x.startswith(phrase)]
|
||||
assert len(inactive_year) <= 1
|
||||
if inactive_year:
|
||||
info['inactive'] = inactive_year[0]
|
||||
|
||||
# urls in home, download, play and code repositories must start with http or https (or git) and should not contain spaces
|
||||
for field in ['home', 'download', 'play', 'code repository']:
|
||||
if field in info:
|
||||
for url in info[field]:
|
||||
if not any(
|
||||
[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:
|
||||
raise RuntimeError('URL "{}" in entry "{}" contains a space'.format(url, info['name']))
|
||||
|
||||
# github/gitlab repositories should end on .git and should start with https
|
||||
if 'code repository' in info:
|
||||
for repo in info['code repository']:
|
||||
if any((x in repo for x in ('github', 'gitlab', 'git.tuxfamily', 'git.savannah'))):
|
||||
if not repo.startswith('https://'):
|
||||
print('Warning: Repo {} in entry "{}" should start with https://'.format(repo, info['name']))
|
||||
if not repo.endswith('.git'):
|
||||
print('Warning: Repo {} in entry "{}" should end on .git.'.format(repo, info['name']))
|
||||
|
||||
# check that all platform tags are valid tags and are existing in that order
|
||||
if 'platform' in info:
|
||||
index = 0
|
||||
for platform in info['platform']:
|
||||
while index < len(valid_platforms) and platform != valid_platforms[index]:
|
||||
index += 1
|
||||
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']))
|
||||
|
||||
# there must be at least one keyword
|
||||
if 'keywords' not in info:
|
||||
raise RuntimeError('Need at least one keyword in entry "{}"'.format(info['name']))
|
||||
|
||||
# check for existence of at least one recommended keywords
|
||||
fail = True
|
||||
for recommended_keyword in recommended_keywords:
|
||||
if recommended_keyword in info['keywords']:
|
||||
fail = False
|
||||
break
|
||||
if fail: # must be at least one recommended keyword
|
||||
raise RuntimeError('Entry "{}" contains no recommended keyword'.format(info['name']))
|
||||
|
||||
# languages should be known
|
||||
languages = info['code language']
|
||||
for language in languages:
|
||||
if language not in known_languages:
|
||||
print('Warning: Language {} in entry "{}" is not a known language. Misspelled or new?'.format(language,
|
||||
info['name']))
|
||||
|
||||
# licenses should be known
|
||||
licenses = info['code license']
|
||||
for license in licenses:
|
||||
if license not in known_licenses:
|
||||
print('Warning: License {} in entry "{}" is not a known license. Misspelled or new?'.format(license,
|
||||
info['name']))
|
||||
|
||||
return info
|
||||
|
||||
|
||||
def assemble_infos():
|
||||
"""
|
||||
Parses all entries and assembles interesting infos about them.
|
||||
"""
|
||||
|
||||
print('assemble game infos')
|
||||
|
||||
# a database of all important infos about the entries
|
||||
infos = []
|
||||
|
||||
# iterate over all entries
|
||||
for entry, _, content in entry_iterator():
|
||||
|
||||
# parse entry
|
||||
info = parse_entry(content)
|
||||
|
||||
# add file information
|
||||
info['file'] = entry
|
||||
|
||||
# check canonical file name
|
||||
canonical_file_name = canonical_entry_name(info['name']) + '.md'
|
||||
# we also allow -X with X =2..9 as possible extension (because of duplicate canonical file names)
|
||||
if canonical_file_name != entry and canonical_file_name != entry[:-5] + '.md':
|
||||
print('Warning: file {} should be {}'.format(entry, canonical_file_name))
|
||||
source_file = os.path.join(entries_path, entry)
|
||||
target_file = os.path.join(entries_path, canonical_file_name)
|
||||
if not os.path.isfile(target_file):
|
||||
pass
|
||||
# os.rename(source_file, target_file)
|
||||
|
||||
# add to list
|
||||
infos.append(info)
|
||||
|
||||
return infos
|
||||
|
||||
|
||||
def extract_links():
|
||||
"""
|
||||
Parses all entries and extracts http(s) links from them
|
||||
"""
|
||||
|
||||
# regex for finding urls (can be in <> or in ]() or after a whitespace
|
||||
regex = re.compile(r"[\s\n]<(http.+?)>|]\((http.+?)\)|[\s\n](http[^\s\n,]+?)[\s\n,]")
|
||||
|
||||
# iterate over all entries
|
||||
urls = set()
|
||||
for _, _, content in entry_iterator():
|
||||
|
||||
# apply regex
|
||||
matches = regex.findall(content)
|
||||
|
||||
# for each match
|
||||
for match in matches:
|
||||
|
||||
# for each possible clause
|
||||
for url in match:
|
||||
|
||||
# if there was something (and not a sourceforge git url)
|
||||
if url:
|
||||
urls.add(url)
|
||||
urls = sorted(list(urls), key=str.casefold)
|
||||
return urls
|
||||
|
||||
|
||||
def read_developers():
|
||||
"""
|
||||
|
||||
@ -564,11 +324,53 @@ def check_and_process_entry(entry):
|
||||
if not any(value.startswith(x) for x in valid_url_prefixes):
|
||||
message += 'URL "{}" in field "{}" does not start with a valid prefix'.format(value, field)
|
||||
|
||||
# github/gitlab repositories should end on .git and should start with https
|
||||
for repo in entry['Code repository']:
|
||||
if any(repo.startswith(x) for x in ('@', '?')):
|
||||
continue
|
||||
repo = repo.value.split(' ')[0].strip()
|
||||
if any((x in repo for x in ('github', 'gitlab', 'git.tuxfamily', 'git.savannah'))):
|
||||
if not repo.startswith('https://'):
|
||||
message += 'Repo "{}" should start with https://'.format(repo)
|
||||
if not repo.endswith('.git'):
|
||||
message += 'Repo "{}" should end on .git.'.format(repo)
|
||||
|
||||
# check that all platform tags are valid tags and are existing in that order
|
||||
if 'Platform' in entry:
|
||||
index = 0
|
||||
for platform in entry['Platform']:
|
||||
while index < len(valid_platforms) and platform != valid_platforms[index]:
|
||||
index += 1
|
||||
if index == len(valid_platforms): # must be valid platforms and must be in that order
|
||||
message += 'Platform tag "{}" either misspelled or in wrong order'.format(platform)
|
||||
|
||||
# there must be at least one keyword
|
||||
if not entry['Keywords']:
|
||||
message += 'Need at least one keyword'
|
||||
|
||||
# check for existence of at least one recommended keywords
|
||||
keywords = entry['Keywords']
|
||||
if not any(keyword in keywords for keyword in recommended_keywords):
|
||||
message += 'Entry contains no recommended keywords'
|
||||
|
||||
# languages should be known
|
||||
languages = entry['Code language']
|
||||
for language in languages:
|
||||
if language not in known_languages:
|
||||
message += 'Language "{}" is not a known code language. Misspelled or new?'.format(language)
|
||||
|
||||
# licenses should be known
|
||||
licenses = entry['Code license']
|
||||
for license in licenses:
|
||||
if license not in known_licenses:
|
||||
message += 'License "{}" is not a known license. Misspelled or new?'.format(license)
|
||||
|
||||
if message:
|
||||
raise RuntimeError(message)
|
||||
|
||||
return entry
|
||||
|
||||
|
||||
def extract_inactive_year(entry):
|
||||
state = entry['State']
|
||||
phrase = 'inactive since '
|
||||
@ -590,6 +392,7 @@ def write_entries(entries):
|
||||
for entry in entries:
|
||||
write_entry(entry)
|
||||
|
||||
|
||||
def write_entry(entry):
|
||||
"""
|
||||
|
||||
@ -618,6 +421,18 @@ def create_entry_content(entry):
|
||||
# title
|
||||
content = '# {}\n\n'.format(entry['Title'])
|
||||
|
||||
# we automatically sort some fields
|
||||
sort_fun = lambda x: str.casefold(x.value)
|
||||
for field in ('Media', 'Inspirations', 'Code Language'):
|
||||
if field in entry:
|
||||
values = entry[field]
|
||||
entry[field] = sorted(values, key=sort_fun)
|
||||
# we also sort keywords, but first the recommend ones and then other ones
|
||||
keywords = entry['Keywords']
|
||||
a = [x for x in keywords if x in recommended_keywords]
|
||||
b = [x for x in keywords if x not in recommended_keywords]
|
||||
entry['Keywords'] = sorted(a, key=sort_fun) + sorted(b, key=sort_fun)
|
||||
|
||||
# now properties in the recommended order
|
||||
for field in valid_properties:
|
||||
if field in entry:
|
||||
@ -651,4 +466,4 @@ def create_entry_content(entry):
|
||||
content += '\n'
|
||||
content += entry['Building']['Note']
|
||||
|
||||
return content
|
||||
return content
|
||||
|
@ -1,7 +1,7 @@
|
||||
# 0 A.D.
|
||||
|
||||
- Home: https://play0ad.com/, https://sourceforge.net/projects/zero-ad/
|
||||
- Media: <https://en.wikipedia.org/wiki/0_A.D._(video_game)>
|
||||
- Media: https://en.wikipedia.org/wiki/0_A.D._(video_game)
|
||||
- Inspirations: Age of Empires
|
||||
- State: beta
|
||||
- Download: https://play0ad.com/download/
|
||||
|
@ -5,7 +5,7 @@
|
||||
- State: mature
|
||||
- Download: https://gitlab.com/KilgoreTroutMaskReplicant/1oom/-/tags
|
||||
- Platform: Windows, Linux
|
||||
- Keywords: strategy, commercial content, engine recreation, remake
|
||||
- Keywords: remake, strategy, commercial content, engine recreation
|
||||
- Code repository: https://gitlab.com/KilgoreTroutMaskReplicant/1oom.git
|
||||
- Code language: C
|
||||
- Code license: GPL-2.0
|
||||
|
@ -4,7 +4,7 @@
|
||||
- Inspirations: Runescape Classic
|
||||
- State: mature
|
||||
- Download: https://github.com/2006rebotted/2006rebotted/releases
|
||||
- Keywords: role playing, commercial content, multiplayer online + co-op, remake
|
||||
- Keywords: remake, role playing, commercial content, multiplayer online + co-op
|
||||
- Code repository: https://github.com/2006rebotted/2006rebotted.git
|
||||
- Code language: Java
|
||||
- Code license: 2-clause BSD
|
||||
|
@ -1,6 +1,6 @@
|
||||
# 2048
|
||||
|
||||
- Home: https://play2048.co/, <https://en.wikipedia.org/wiki/2048_(video_game)>
|
||||
- Home: https://play2048.co/, https://en.wikipedia.org/wiki/2048_(video_game)
|
||||
- State: mature
|
||||
- Play: https://play2048.co/
|
||||
- Platform: Web
|
||||
|
@ -4,7 +4,7 @@
|
||||
- State: mature
|
||||
- Download: https://github.com/jkroepke/2Moons/releases
|
||||
- Platform: Web
|
||||
- Keywords: simulation, framework, space, strategy
|
||||
- Keywords: framework, simulation, strategy, space
|
||||
- Code repository: https://github.com/jkroepke/2Moons.git (archived), https://github.com/steemnova/steemnova.git @add
|
||||
- Code language: PHP, JavaScript
|
||||
- Code license: MIT
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
- Home: https://packages.debian.org/sid/3dchess, http://www.ibiblio.org/pub/Linux/games/strategy/3Dc-0.8.1.tar.gz
|
||||
- State: mature, inactive since 2000
|
||||
- Keywords: puzzle, board, chess, open content
|
||||
- Keywords: board, puzzle, chess, open content
|
||||
- Code repository: @see-home
|
||||
- Code language: C
|
||||
- Code license: GPL-2.0
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
- Home: https://packages.debian.org/sid/acm, https://web.archive.org/web/20130114223737/http://www.websimulations.com/
|
||||
- State: mature, inactive since 2000
|
||||
- Keywords: action, flight, open content, simulation
|
||||
- Keywords: action, simulation, flight, open content
|
||||
- Code repository: @see-home
|
||||
- Code language: C
|
||||
- Code license: GPL-2.0
|
||||
|
@ -5,7 +5,7 @@
|
||||
- State: mature, inactive since 2012
|
||||
- Download: http://perso.b2b2c.ca/~sarrazip/dev/afternoonstalker.html#download
|
||||
- Platform: Linux
|
||||
- Keywords: action, clone, remake
|
||||
- Keywords: action, remake, clone
|
||||
- Code repository: @see-download
|
||||
- Code language: C++
|
||||
- Code license: GPL-2.0
|
||||
|
@ -1,7 +1,7 @@
|
||||
# Alimer
|
||||
|
||||
- Home: https://github.com/amerkoleci/alimer
|
||||
- Inspirations: Urho3D, OGRE
|
||||
- Inspirations: OGRE, Urho3D
|
||||
- State: beta
|
||||
- Keywords: game engine, 2D, 3D
|
||||
- Code repository: https://github.com/amerkoleci/alimer.git
|
||||
|
@ -1,7 +1,7 @@
|
||||
# alive
|
||||
|
||||
- Home: https://github.com/paulsapps/alive
|
||||
- Inspirations: Oddworld: Abe's Oddysee, Oddworld: Abe's Exoddus
|
||||
- Inspirations: Oddworld: Abe's Exoddus, Oddworld: Abe's Oddysee
|
||||
- State: beta
|
||||
- Platform: Windows, Linux
|
||||
- Keywords: action, remake
|
||||
|
@ -1,7 +1,7 @@
|
||||
# Allegro
|
||||
|
||||
- Home: https://liballeg.org/
|
||||
- Media: <https://en.wikipedia.org/wiki/Allegro_(software)>
|
||||
- Media: https://en.wikipedia.org/wiki/Allegro_(software)
|
||||
- State: mature
|
||||
- Download: https://liballeg.org/download.html
|
||||
- Keywords: framework
|
||||
|
@ -3,7 +3,7 @@
|
||||
- Home: http://www.allureofthestars.com/
|
||||
- State: beta
|
||||
- Play: http://www.allureofthestars.com/play/
|
||||
- Keywords: role playing, open content, roguelike, strategy, turn-based
|
||||
- Keywords: role playing, strategy, open content, roguelike, turn-based
|
||||
- Code repository: https://github.com/AllureOfTheStars/Allure.git
|
||||
- Code language: Haskell
|
||||
- Code license: AGPL-3.0
|
||||
|
@ -1,7 +1,7 @@
|
||||
# Angband
|
||||
|
||||
- Home: http://rephial.org/
|
||||
- Media: <https://en.wikipedia.org/wiki/Angband_(video_game)>
|
||||
- Media: https://en.wikipedia.org/wiki/Angband_(video_game)
|
||||
- State: mature
|
||||
- Download: http://rephial.org/release/
|
||||
- Keywords: role playing, roguelike
|
||||
|
@ -4,7 +4,7 @@
|
||||
- Inspirations: Ares
|
||||
- State: beta
|
||||
- Download: @see-home
|
||||
- Keywords: strategy, real time, remake, shooter
|
||||
- Keywords: remake, strategy, real time, shooter
|
||||
- Code repository: https://github.com/arescentral/antares.git
|
||||
- Code language: C++
|
||||
- Code license: LGPL-3.0
|
||||
|
@ -4,7 +4,7 @@
|
||||
- Inspirations: Armor Alley
|
||||
- State: beta
|
||||
- Platform: Web
|
||||
- Keywords: action, shooter, content open + non-commercial, remake, strategy
|
||||
- Keywords: action, remake, strategy, content open + non-commercial, shooter
|
||||
- Code repository: https://github.com/scottschiller/ArmorAlley.git
|
||||
- Code language: JavaScript
|
||||
- Code license: CC-BY-NC-3.0 (https://github.com/scottschiller/ArmorAlley/blob/master/LICENSE.txt)
|
||||
|
@ -5,7 +5,7 @@
|
||||
- Inspirations: Arx Fatalis
|
||||
- State: mature
|
||||
- Download: https://wiki.arx-libertatis.org/Download
|
||||
- Keywords: role playing, commercial content, remake, requires original content (Arx Fatalis)
|
||||
- Keywords: remake, role playing, commercial content, requires original content (Arx Fatalis)
|
||||
- Code repository: https://github.com/arx/ArxLibertatis.git
|
||||
- Code language: C++
|
||||
- Code license: GPL-3.0
|
||||
|
@ -5,7 +5,7 @@
|
||||
- State: mature, inactive since 2016
|
||||
- Download: https://sourceforge.net/projects/atanks/files/
|
||||
- Platform: Windows, Linux
|
||||
- Keywords: action, artillery, open content, remake
|
||||
- Keywords: action, remake, artillery, open content
|
||||
- Code repository: https://git.code.sf.net/p/atanks/atanks, https://gitlab.com/osgames/atanks.git @add
|
||||
- Code language: C++
|
||||
- Code license: GPL-2.0
|
||||
|
@ -4,7 +4,7 @@
|
||||
- Inspirations: Atomix
|
||||
- State: mature, inactive since 2015
|
||||
- Download: https://sourceforge.net/projects/atomiks/files
|
||||
- Keywords: puzzle, commercial content, remake
|
||||
- Keywords: puzzle, remake, commercial content
|
||||
- Code repository: https://gitlab.com/osgames/atomiks.git (backup of svn), https://svn.code.sf.net/p/atomiks/code (svn)
|
||||
- Code language: C
|
||||
- Code license: GPL-3.0
|
||||
|
@ -4,8 +4,8 @@
|
||||
- Media: https://en.wikipedia.org/wiki/Ballerburg
|
||||
- Inspirations: Ballerburg
|
||||
- State: mature
|
||||
- Keywords: action, artillery, remake
|
||||
- Code repository: https://git.tuxfamily.org/baller/baller.git, https://gitlab.com/osgames/ballerburg.git (@add, import of original source downloads)
|
||||
- Keywords: action, remake, artillery
|
||||
- Code repository: https://git.tuxfamily.org/baller/baller.git, https://gitlab.com/osgames/ballerburg.git @add (import of original source downloads)
|
||||
- Code language: C
|
||||
- Code license: GPL-3.0
|
||||
- Code dependencies: SDL2
|
||||
|
@ -3,7 +3,7 @@
|
||||
- Home: http://www.baronygame.com/
|
||||
- Inspirations: Barony
|
||||
- State: mature
|
||||
- Keywords: role playing, commercial content, multiplayer co-op + online + LAN, remake, roguelike
|
||||
- Keywords: remake, role playing, commercial content, multiplayer co-op + online + LAN, roguelike
|
||||
- Code repository: https://github.com/TurningWheel/Barony.git
|
||||
- Code language: C++
|
||||
- Code license: GPL-3.0
|
||||
|
@ -3,7 +3,7 @@
|
||||
- Home: https://aos.party/jenkins/job/BetterSpades/
|
||||
- Inspirations: Ace of Spades
|
||||
- State: beta
|
||||
- Keywords: cards, multiplayer online, open content, remake
|
||||
- Keywords: cards, remake, multiplayer online, open content
|
||||
- Code repository: https://github.com/xtreme8000/BetterSpades.git
|
||||
- Code language: C
|
||||
- Code license: GPL-3.0
|
||||
|
@ -4,7 +4,7 @@
|
||||
- State: beta, inactive since 2012
|
||||
- Download: http://www.nongnu.org/billiards/#downloads, http://download.savannah.nongnu.org/releases/billiards/
|
||||
- Platform: Linux
|
||||
- Keywords: sports, simulation
|
||||
- Keywords: simulation, sports
|
||||
- Code repository: https://gitlab.com/osgames/billiards.git (import of cvs), http://cvs.savannah.nongnu.org:/sources/billiards (cvs)
|
||||
- Code language: Lua, Objective-C
|
||||
- Code license: GPL-3.0
|
||||
|
@ -3,7 +3,7 @@
|
||||
- Home: https://boardgame.io/
|
||||
- State: beta
|
||||
- Platform: Web
|
||||
- Keywords: strategy, game engine, turn-based
|
||||
- Keywords: game engine, strategy, turn-based
|
||||
- Code repository: https://github.com/boardgameio/boardgame.io.git
|
||||
- Code language: JavaScript, TypeScript
|
||||
- Code license: MIT
|
||||
|
@ -3,7 +3,7 @@
|
||||
- Home: https://gitlab.com/drummyfish/
|
||||
- Inspirations: Atomic Bomberman
|
||||
- State: mature
|
||||
- Keywords: action, open content, remake
|
||||
- Keywords: action, remake, open content
|
||||
- Code repository: https://gitlab.com/drummyfish/Bombman.git
|
||||
- Code language: Python
|
||||
- Code license: CC0
|
||||
|
@ -1,7 +1,7 @@
|
||||
# Boost (C++ Libraries)
|
||||
|
||||
- Home: https://www.boost.org/
|
||||
- Media: <https://en.wikipedia.org/wiki/Boost_(C%2B%2B_libraries)>
|
||||
- Media: https://en.wikipedia.org/wiki/Boost_(C%2B%2B_libraries)
|
||||
- State: mature
|
||||
- Download: https://www.boost.org/users/download/
|
||||
- Keywords: library
|
||||
|
@ -6,7 +6,7 @@
|
||||
- Keywords: role playing, roguelike
|
||||
- Code repository: https://github.com/tsadok/brogue.git
|
||||
- Code language: C
|
||||
- Code license: AGPL
|
||||
- Code license: AGPL-3.0
|
||||
|
||||
Traditional roguelike game inspired from the original Rogue. Your quest is to find the Amulet of Yendor.
|
||||
|
||||
|
@ -5,7 +5,7 @@
|
||||
- State: mature
|
||||
- Download: https://github.com/bibendovsky/bstone/releases
|
||||
- Platform: Windows
|
||||
- Keywords: role playing, remake
|
||||
- Keywords: remake, role playing
|
||||
- Code repository: https://github.com/bibendovsky/bstone.git
|
||||
- Code language: C++
|
||||
- Code license: GPL-2.0
|
||||
|
@ -3,7 +3,7 @@
|
||||
- Home: http://identicalsoftware.com/btbuilder/
|
||||
- Inspirations: Bard's Tale Contruction Set
|
||||
- State: beta
|
||||
- Keywords: tool, remake
|
||||
- Keywords: remake, tool
|
||||
- Code repository: https://github.com/dulsi/btbuilder.git
|
||||
- Code language: C, C++
|
||||
- Code license: GPL-3.0
|
||||
|
@ -3,7 +3,7 @@
|
||||
- Home: https://github.com/maikmerten/c64-nuclearreaction
|
||||
- Inspirations: Nuclear Reaction
|
||||
- State: mature, inactive since 2014
|
||||
- Keywords: strategy, remake
|
||||
- Keywords: remake, strategy
|
||||
- Code repository: https://github.com/maikmerten/c64-nuclearreaction.git
|
||||
- Code language: C, Assembly
|
||||
- Code license: GPL-3.0
|
||||
|
@ -4,7 +4,7 @@
|
||||
- Inspirations: Cadaver
|
||||
- State: beta, inactive since 2009
|
||||
- Download: https://jotd.pagesperso-orange.fr/cadaver/bin/Cadaver-001.zip
|
||||
- Keywords: action, commercial content, remake, requires original content
|
||||
- Keywords: action, remake, commercial content, requires original content
|
||||
- Code repository: @see-download
|
||||
- Code language: C++
|
||||
- Code license: GPL-2.0
|
||||
|
@ -5,7 +5,7 @@
|
||||
- State: beta
|
||||
- Download: https://bitbucket.org/dalerank/caesaria/wiki/Releases
|
||||
- Platform: Windows, Linux, macOS
|
||||
- Keywords: strategy, remake
|
||||
- Keywords: remake, strategy
|
||||
- Code repository: https://bitbucket.org/dalerank/caesaria.git, https://github.com/dalerank/caesaria-game.git
|
||||
- Code language: C++, JavaScript
|
||||
- Code license: GPL-3.0
|
||||
|
@ -4,7 +4,7 @@
|
||||
- Inspirations: Outrun
|
||||
- State: beta
|
||||
- Download: https://github.com/djyt/cannonball/wiki#downloads
|
||||
- Keywords: action, commercial content, remake
|
||||
- Keywords: action, remake, commercial content
|
||||
- Code repository: https://github.com/djyt/cannonball.git
|
||||
- Code language: C++
|
||||
- Code license: MAME
|
||||
|
@ -4,7 +4,7 @@
|
||||
- State: mature, inactive since 2010
|
||||
- Download: https://sourceforge.net/projects/caphgame/files/
|
||||
- Platform: Windows, Linux
|
||||
- Keywords: puzzle, open content, sandbox, simulation
|
||||
- Keywords: puzzle, simulation, open content, sandbox
|
||||
- Code repository: https://git.code.sf.net/p/caphgame/code
|
||||
- Code language: C
|
||||
- Code license: GPL-3.0
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
- Home: https://web.archive.org/web/20190126033549/https://cardstories.org/
|
||||
- State: beta, inactive since 2012
|
||||
- Keywords: puzzle, cards, open content
|
||||
- Keywords: cards, puzzle, open content
|
||||
- Code repository: https://github.com/farsides/cardstories.git, https://gitorious.org/cardstories/cardstories.git (read-only)
|
||||
- Code language: JavaScript, Python
|
||||
- Code license: AGPL-3.0
|
||||
|
@ -4,7 +4,7 @@
|
||||
- Inspirations: Rampart
|
||||
- State: beta, inactive since 2006
|
||||
- Download: https://sourceforge.net/projects/castle-combat/files/
|
||||
- Keywords: strategy, remake
|
||||
- Keywords: remake, strategy
|
||||
- Code repository: https://github.com/karlb/castle-combat.git
|
||||
- Code language: Python
|
||||
- Code license: GPL-2.0
|
||||
|
@ -3,7 +3,7 @@
|
||||
- Home: https://castle-engine.io/
|
||||
- State: mature
|
||||
- Download: @see-home
|
||||
- Keywords: game engine, framework
|
||||
- Keywords: framework, game engine
|
||||
- Code repository: https://github.com/castle-engine/castle-engine.git
|
||||
- Code language: Pascal
|
||||
- Code license: LGPL-2.0 (visual editor and some other assets GPL-2.0)
|
||||
|
@ -4,7 +4,7 @@
|
||||
- Inspirations: Castle of the Winds
|
||||
- State: beta, inactive since 2016
|
||||
- Play: http://game.castleofthewinds.com/
|
||||
- Keywords: role playing, remake
|
||||
- Keywords: remake, role playing
|
||||
- Code repository: https://github.com/mordrax/cotwmtor.git
|
||||
- Code language: JavaScript
|
||||
- Code license: MIT
|
||||
|
@ -3,7 +3,7 @@
|
||||
- Home: http://game.castleofthewinds.com/
|
||||
- Inspirations: Castle of the Winds
|
||||
- State: beta
|
||||
- Keywords: role playing, remake
|
||||
- Keywords: remake, role playing
|
||||
- Code repository: https://github.com/mordrax/cotwelm.git
|
||||
- Code language: Elm, JavaScript
|
||||
- Code license: MIT
|
||||
|
@ -5,7 +5,7 @@
|
||||
- State: mature
|
||||
- Download: https://cataclysmdda.org/releases/
|
||||
- Platform: Windows, Linux, macOS
|
||||
- Keywords: role playing, remake, roguelike
|
||||
- Keywords: remake, role playing, roguelike
|
||||
- Code repository: https://github.com/CleverRaven/Cataclysm-DDA.git
|
||||
- Code language: C++
|
||||
- Code license: CC-BY-SA-3.0
|
||||
|
@ -4,7 +4,7 @@
|
||||
- Inspirations: Sid Meier's Colonization
|
||||
- State: beta
|
||||
- Platform: Web
|
||||
- Keywords: action, commercial content, remake, requires original content, strategy
|
||||
- Keywords: action, remake, strategy, commercial content, requires original content
|
||||
- Code repository: https://github.com/institution/cc94.git
|
||||
- Code language: C++, Python
|
||||
- Code license: AGPL-3.0
|
||||
|
@ -3,7 +3,7 @@
|
||||
- Home: https://github.com/DataRealms/CCOSS
|
||||
- Inspirations: Cortex Command
|
||||
- State: beta
|
||||
- Keywords: strategy, commercial content, multiplayer split-screen + online + LAN, real time, remake
|
||||
- Keywords: remake, strategy, commercial content, multiplayer split-screen + online + LAN, real time
|
||||
- Code repository: https://github.com/cortex-command-community/Cortex-Command-Community-Project-Source.git, https://github.com/DataRealms/CCOSS.git @add
|
||||
- Code language: C++
|
||||
- Code license: AGPL-3.0
|
||||
|
@ -3,7 +3,7 @@
|
||||
- Home: http://cr.freewarepoint.de/
|
||||
- Inspirations: Nuclear Reaction
|
||||
- State: mature, inactive since 2017
|
||||
- Keywords: strategy, remake
|
||||
- Keywords: remake, strategy
|
||||
- Code repository: https://github.com/maikmerten/chainreaction.git
|
||||
- Code language: Java
|
||||
- Code license: LGPL-3.0
|
||||
|
@ -3,7 +3,7 @@
|
||||
- Home: http://yanngranjon.com/static/games/chess3D/
|
||||
- State: mature, inactive since 2016
|
||||
- Platform: Web
|
||||
- Keywords: strategy, board, chess, open content
|
||||
- Keywords: board, strategy, chess, open content
|
||||
- Code repository: https://github.com/FrenchYann/Chess3D.git
|
||||
- Code language: JavaScript, Python
|
||||
- Code license: GPL-3.0
|
||||
|
@ -3,7 +3,7 @@
|
||||
- Home: https://github.com/fabiensanglard/chocolate_duke3D
|
||||
- Inspirations: Duke Nukem 3D
|
||||
- State: beta, inactive since 2016
|
||||
- Keywords: action, commercial content, original content required, remake
|
||||
- Keywords: action, remake, commercial content, original content required
|
||||
- Code repository: https://github.com/fabiensanglard/chocolate_duke3D.git
|
||||
- Code language: C
|
||||
- Code license: GPL-2.0, Custom
|
||||
|
@ -7,7 +7,8 @@
|
||||
- Keywords: action, shooter, top-down
|
||||
- Code repository: https://git.code.sf.net/p/chromium-bsu/code
|
||||
- Code language: C++
|
||||
- Code license: Artistic License
|
||||
- Code license: Artistic License-1.0 (clarified version)
|
||||
- Developer: Paul Wise
|
||||
|
||||
Arcade-style, top-scrolling space shooter.
|
||||
|
||||
|
@ -5,7 +5,7 @@
|
||||
- State: beta
|
||||
- Download: http://chunkstories.xyz/downloads.php
|
||||
- Platform: Windows, Linux, macOS
|
||||
- Keywords: simulation, game engine, sandbox, voxel
|
||||
- Keywords: game engine, simulation, sandbox, voxel
|
||||
- Code repository: https://github.com/Hugobros3/chunkstories.git
|
||||
- Code language: Kotlin, Java
|
||||
- Code license: LGPL-3.0
|
||||
|
@ -4,7 +4,7 @@
|
||||
- Media: https://en.wikipedia.org/wiki/Call_to_Power_II#Source_code_release
|
||||
- Inspirations: Call to Power II
|
||||
- State: mature
|
||||
- Keywords: strategy, remake, turn-based
|
||||
- Keywords: remake, strategy, turn-based
|
||||
- Code repository: https://github.com/civctp2/civctp2.git (mirror), http://ctp2.darkdust.net/anonsvn/ (svn)
|
||||
- Code language: C, C++
|
||||
- Code license: Custom (Activision CTP2 source EULA)
|
||||
|
@ -3,7 +3,7 @@
|
||||
- Home: https://web.archive.org/web/20181127195119/https://www.civone.org/
|
||||
- Inspirations: Civilization
|
||||
- State: beta
|
||||
- Keywords: strategy, commercial content, remake, requires original content
|
||||
- Keywords: remake, strategy, commercial content, requires original content
|
||||
- Code repository: https://github.com/SWY1985/CivOne.git
|
||||
- Code language: C#
|
||||
- Code license: CC0
|
||||
|
@ -1,7 +1,7 @@
|
||||
# Classic Blades of Exile
|
||||
|
||||
- Home: http://www.spiderwebsoftware.com/blades/opensource.html, http://spiderwebforums.ipbhost.com/forum/12-blades-of-exile/, https://github.com/calref/cboe
|
||||
- Media: <https://en.wikipedia.org/wiki/Exile_(1995_video_game_series)#Blades_of_Exile>
|
||||
- Media: https://en.wikipedia.org/wiki/Exile_(1995_video_game_series)#Blades_of_Exile
|
||||
- State: mature
|
||||
- Keywords: role playing
|
||||
- Code repository: https://github.com/calref/cboe.git
|
||||
|
@ -6,7 +6,7 @@
|
||||
- State: mature
|
||||
- Download: https://github.com/MadDeCoDeR/Classic-RBDOOM-3-BFG/releases
|
||||
- Platform: Windows, Linux
|
||||
- Keywords: action, commercial content, first-person, game engine, remake, requires original content, shooter
|
||||
- Keywords: action, game engine, remake, commercial content, first-person, requires original content, shooter
|
||||
- Code repository: https://github.com/MadDeCoDeR/Classic-RBDOOM-3-BFG.git
|
||||
- Code language: C, C++
|
||||
- Code license: GPL-3.0
|
||||
|
@ -3,7 +3,7 @@
|
||||
- Home: https://github.com/simeonpilgrim/coab, https://web.archive.org/web/20150506070020/http://code.google.com/p/coab/
|
||||
- Inspirations: Curse of the Azure Bonds
|
||||
- State: mature
|
||||
- Keywords: role playing, remake
|
||||
- Keywords: remake, role playing
|
||||
- Code repository: https://github.com/simeonpilgrim/coab.git
|
||||
- Code language: C#
|
||||
- Code license: ? (BSD)
|
||||
|
@ -6,7 +6,7 @@
|
||||
- State: mature
|
||||
- Download: https://github.com/aperture-software/colditz-escape/releases
|
||||
- Platform: Windows, Linux, macOS
|
||||
- Keywords: strategy, remake
|
||||
- Keywords: remake, strategy
|
||||
- Code repository: https://github.com/aperture-software/colditz-escape.git
|
||||
- Code language: C
|
||||
- Code license: GPL-3.0
|
||||
|
@ -4,7 +4,7 @@
|
||||
- Inspirations: Colobot
|
||||
- State: mature
|
||||
- Download: https://colobot.info/download-colobot-gold/
|
||||
- Keywords: strategy, open content, programming, real time, remake
|
||||
- Keywords: remake, strategy, open content, programming, real time
|
||||
- Code repository: https://github.com/colobot/colobot.git
|
||||
- Code language: C++
|
||||
- Code license: GPL-3.0
|
||||
|
@ -4,7 +4,7 @@
|
||||
- Inspirations: Theme Hospital
|
||||
- State: mature
|
||||
- Download: https://github.com/CorsixTH/CorsixTH/releases
|
||||
- Keywords: strategy, commercial content, remake, requires original content
|
||||
- Keywords: remake, strategy, commercial content, requires original content
|
||||
- Code repository: https://github.com/CorsixTH/CorsixTH.git
|
||||
- Code language: Lua, C++
|
||||
- Code license: MIT
|
||||
|
@ -1,10 +1,10 @@
|
||||
# Cosmo-Engine
|
||||
|
||||
- Home: https://github.com/yuv422/cosmo-engine
|
||||
- Media: https://en.wikipedia.org/wiki/Cosmo%27s_Cosmic_Adventure, https://3drealms.com/catalog/cosmos-cosmic-adventure_37/
|
||||
- Media: https://3drealms.com/catalog/cosmos-cosmic-adventure_37/, https://en.wikipedia.org/wiki/Cosmo%27s_Cosmic_Adventure
|
||||
- Inspirations: Cosmo's Cosmic Adventure
|
||||
- State: beta
|
||||
- Keywords: platform, commercial content, remake, requires original content
|
||||
- Keywords: platform, remake, commercial content, requires original content
|
||||
- Code repository: https://github.com/yuv422/cosmo-engine.git
|
||||
- Code language: C
|
||||
- Code license: GPL-2.0
|
||||
|
@ -3,7 +3,7 @@
|
||||
- Home: http://critterding.sourceforge.net/, https://sourceforge.net/projects/critterding/
|
||||
- State: beta, inactive since 2013
|
||||
- Download: https://sourceforge.net/projects/critterding/files/critterding/
|
||||
- Keywords: simulation, evolution, open content, strategy
|
||||
- Keywords: simulation, strategy, evolution, open content
|
||||
- Code repository: @see-download
|
||||
- Code language: C++
|
||||
- Code license: GPL-2.0
|
||||
|
@ -1,7 +1,7 @@
|
||||
# Crossfire
|
||||
|
||||
- Home: http://crossfire.real-time.com/, https://sourceforge.net/projects/crossfire/
|
||||
- Media: <https://en.wikipedia.org/wiki/Crossfire_(1992_video_game)>
|
||||
- Media: https://en.wikipedia.org/wiki/Crossfire_(1992_video_game)
|
||||
- State: mature
|
||||
- Download: http://crossfire.real-time.com/download/index.html, https://sourceforge.net/projects/crossfire/files/
|
||||
- Keywords: role playing, multiplayer online + massive
|
||||
|
@ -4,7 +4,7 @@
|
||||
- State: mature
|
||||
- Download: https://sourceforge.net/projects/xwords/files/
|
||||
- Platform: Android
|
||||
- Keywords: role playing, board, open content
|
||||
- Keywords: board, role playing, open content
|
||||
- Code repository: https://git.code.sf.net/p/xwords/git, https://svn.code.sf.net/p/xwords/svn (svn)
|
||||
- Code language: Java
|
||||
- Code license: GPL-2.0
|
||||
|
@ -4,7 +4,7 @@
|
||||
- Inspirations: Sid Meier's Pirates!
|
||||
- State: beta, inactive since 2009
|
||||
- Download: https://sourceforge.net/projects/crownandcutlass/files/crownandcutlass/
|
||||
- Keywords: strategy, remake
|
||||
- Keywords: remake, strategy
|
||||
- Code repository: https://gitlab.com/osgames/crownandcutlass.git (backup of svn), https://svn.code.sf.net/p/crownandcutlass/code (svn)
|
||||
- Code language: C++
|
||||
- Code license: Custom (almost identical to BSD)
|
||||
|
@ -7,7 +7,7 @@
|
||||
- Keywords: library
|
||||
- Code repository: @see-home
|
||||
- Code language: C
|
||||
- Code license: BSD
|
||||
- Code license: ? (BSD version?)
|
||||
|
||||
Terminal control library for Unix-like systems.
|
||||
|
||||
|
@ -5,7 +5,7 @@
|
||||
- State: mature
|
||||
- Download: https://www.dfworkshop.net/projects/daggerfall-unity/live-builds/
|
||||
- Platform: Windows, Linux, macOS
|
||||
- Keywords: role playing, remake, requires additional content
|
||||
- Keywords: remake, role playing, requires additional content
|
||||
- Code repository: https://github.com/Interkarma/daggerfall-unity.git
|
||||
- Code language: C#
|
||||
- Code license: MIT
|
||||
|
@ -1,7 +1,7 @@
|
||||
# Daimonin
|
||||
|
||||
- Home: https://www.daimonin.org/, https://sourceforge.net/projects/daimonin/
|
||||
- Media: <https://en.wikipedia.org/wiki/Crossfire_(1992_video_game)#Influence_on_other_online_games>
|
||||
- Media: https://en.wikipedia.org/wiki/Crossfire_(1992_video_game)#Influence_on_other_online_games
|
||||
- State: mature
|
||||
- Download: https://www.daimonin.org/downloads/
|
||||
- Keywords: role playing, multiplayer online + massive
|
||||
|
@ -4,7 +4,7 @@
|
||||
- Inspirations: Silent Hunter 4
|
||||
- State: beta, inactive since 2011
|
||||
- Download: http://dangerdeep.sourceforge.net/downloads/, https://sourceforge.net/projects/dangerdeep/files/
|
||||
- Keywords: simulation, remake
|
||||
- Keywords: remake, simulation
|
||||
- Code repository: https://gitlab.com/osgames/dangerdeep.git (conversion and cleanup of git), https://git.code.sf.net/p/dangerdeep/git @add, https://svn.code.sf.net/p/dangerdeep/code (svn)
|
||||
- Code language: C++
|
||||
- Code license: GPL-2.0
|
||||
|
@ -2,10 +2,10 @@
|
||||
|
||||
- Home: http://www.darkdestiny.at/, http://www.thedarkdestiny.at/portalApp/#/, https://sourceforge.net/projects/darkdestiny/
|
||||
- State: mature, inactive since 2016
|
||||
- Keywords: strategy, multiplayer online + massive
|
||||
- Keywords: strategy, multiplayer online + massive, turn based
|
||||
- Code repository: https://gitlab.com/osgames/darkdestiny.git (import of svn), https://svn.code.sf.net/p/darkdestiny/code (svn)
|
||||
- Code language: Java, JavaScript
|
||||
- Code license: GPL
|
||||
- Code license: ? (GPL version?)
|
||||
- Assets license: Custom (artwork can be freely used for modification and sharing)
|
||||
|
||||
Turn-based online space strategy game playable in internet browsers.
|
||||
|
@ -1,6 +1,6 @@
|
||||
# Decker
|
||||
|
||||
- Home: <https://web.archive.org/web/20110926115405/http://www10.caro.net:80/dsi/decker/>, https://sourceforge.net/projects/decker/
|
||||
- Home: https://web.archive.org/web/20110926115405/http://www10.caro.net:80/dsi/decker/, https://sourceforge.net/projects/decker/
|
||||
- State: beta, inactive since 2013
|
||||
- Download: https://sourceforge.net/projects/decker/files
|
||||
- Keywords: role playing
|
||||
|
@ -3,7 +3,7 @@
|
||||
- Home: https://github.com/pistacchio/Dedalus
|
||||
- State: beta, inactive since 2018
|
||||
- Platform: Web
|
||||
- Keywords: adventure, game engine, text-based, tool
|
||||
- Keywords: adventure, game engine, tool, text-based
|
||||
- Code repository: https://github.com/pistacchio/Dedalus.git
|
||||
- Code language: JavaScript
|
||||
- Code license: GPL-2.0
|
||||
|
@ -3,7 +3,7 @@
|
||||
- Home: https://github.com/Interrupt/delverengine
|
||||
- Inspirations: Delver
|
||||
- State: mature
|
||||
- Keywords: game engine, commercial content, remake
|
||||
- Keywords: game engine, remake, commercial content
|
||||
- Code repository: https://github.com/Interrupt/delverengine.git
|
||||
- Code language: Java
|
||||
- Code license: Custom (modified zlib)
|
||||
|
@ -3,7 +3,7 @@
|
||||
- Home: https://github.com/shinyquagsire23/DesktopAdventures
|
||||
- Inspirations: Indiana Jones and his Desktop Adventures, Star Wars: Yoda Stories
|
||||
- State: beta
|
||||
- Keywords: game engine, commercial content, remake
|
||||
- Keywords: game engine, remake, commercial content
|
||||
- Code repository: https://github.com/shinyquagsire23/DesktopAdventures.git
|
||||
- Code language: C
|
||||
- Code license: LGPL-2.1
|
||||
|
@ -3,7 +3,7 @@
|
||||
- Home: https://github.com/diasurgical/devilution
|
||||
- Inspirations: Diablo
|
||||
- State: mature
|
||||
- Keywords: action, commercial content, engine recreation, remake, requires original content (Diablo 1)
|
||||
- Keywords: action, remake, commercial content, engine recreation, requires original content (Diablo 1)
|
||||
- Code repository: https://github.com/diasurgical/devilution.git
|
||||
- Code language: C, C++
|
||||
- Code license: Unlicense
|
||||
|
@ -3,7 +3,7 @@
|
||||
- Home: https://github.com/diasurgical/devilutionX, https://web.archive.org/web/20130602191141/http://iphone.keyvisuals.com/apps/doom-classic-for-iphone-source-code-available/
|
||||
- Inspirations: Diablo
|
||||
- State: mature
|
||||
- Keywords: action, commercial content, engine recreation, remake, requires original content (Diablo 1)
|
||||
- Keywords: action, remake, commercial content, engine recreation, requires original content (Diablo 1)
|
||||
- Code repository: https://github.com/diasurgical/devilutionX.git
|
||||
- Code language: C, C++
|
||||
- Code license: Unlicense
|
||||
|
@ -3,7 +3,7 @@
|
||||
- Home: https://github.com/dgengin/DGEngine/wiki
|
||||
- Inspirations: Diablo
|
||||
- State: beta
|
||||
- Keywords: action, commercial content, remake, requires original content
|
||||
- Keywords: action, remake, commercial content, requires original content
|
||||
- Code repository: https://github.com/dgengin/DGEngine.git
|
||||
- Code language: C++
|
||||
- Code license: zlib, GPL-3.0 (depending on the use mode)
|
||||
|
@ -5,7 +5,7 @@
|
||||
- State: mature
|
||||
- Download: https://github.com/dhewm/dhewm3/releases
|
||||
- Platform: Windows, Linux, macOS
|
||||
- Keywords: action, commercial content, remake, requires original content, shooter
|
||||
- Keywords: action, remake, commercial content, requires original content, shooter
|
||||
- Code repository: https://github.com/dhewm/dhewm3.git
|
||||
- Code language: C, C++
|
||||
- Code license: GPL-3.0
|
||||
|
@ -7,8 +7,8 @@
|
||||
- Platform: Windows, Linux, macOS
|
||||
- Keywords: adventure, visual novel
|
||||
- Code repository: https://gitlab.com/osgames/digitalalovestory.git (copy of version 1.1)
|
||||
- Code language: Ren'py
|
||||
- Code license: CC-BY-NC-SA-3.0 @see-home
|
||||
- Code language: Ren'Py
|
||||
- Code license: CC-BY-NC-SA-3.0 (see home)
|
||||
|
||||
A computer mystery/romance set five minutes into the future of 1988.
|
||||
See also https://loveconquersallgam.es/tagged/digital%3A-a-love-story
|
||||
|
@ -1,7 +1,7 @@
|
||||
# Divercity
|
||||
|
||||
- Home: https://team--rocket.github.io/divercity/
|
||||
- Inspirations: SimCity, micropolis
|
||||
- Inspirations: micropolis, SimCity
|
||||
- State: beta, inactive since 2015
|
||||
- Keywords: simulation, clone, open content
|
||||
- Code repository: https://github.com/Team--Rocket/divercity.git
|
||||
|
@ -5,7 +5,7 @@
|
||||
- State: mature
|
||||
- Download: http://domination.sourceforge.net/download.shtml, https://sourceforge.net/projects/domination/files/
|
||||
- Platform: Windows, Linux, macOS, Android
|
||||
- Keywords: strategy, board
|
||||
- Keywords: board, strategy
|
||||
- Code repository: https://svn.code.sf.net/p/domination/code (svn active)
|
||||
- Code language: Java
|
||||
- Code license: GPL-3.0
|
||||
|
@ -4,7 +4,7 @@
|
||||
- Inspirations: Doom, Doom II, Heretic, Hexen
|
||||
- State: mature, inactive since 2012
|
||||
- Platform: iOS
|
||||
- Keywords: action, commercial content, remake, requires original content, shooter
|
||||
- Keywords: action, remake, commercial content, requires original content, shooter
|
||||
- Code repository: https://github.com/id-Software/DOOM-iOS.git
|
||||
- Code language: C++
|
||||
- Code license: GPL-2.0
|
||||
|
@ -4,7 +4,7 @@
|
||||
- Inspirations: Doom
|
||||
- State: mature, inactive since 2012
|
||||
- Platform: Linux
|
||||
- Keywords: action, first-person, game engine, shooter
|
||||
- Keywords: action, game engine, first-person, shooter
|
||||
- Code repository: https://github.com/id-Software/DOOM.git
|
||||
- Code language: C
|
||||
- Code license: Custom
|
||||
|
@ -5,7 +5,7 @@
|
||||
- State: mature
|
||||
- Download: https://doom64ex.wordpress.com/downloads/
|
||||
- Platform: Windows, macOS
|
||||
- Keywords: action, commercial content, original content required, remake
|
||||
- Keywords: action, remake, commercial content, original content required
|
||||
- Code repository: https://github.com/svkaiser/Doom64EX.git
|
||||
- Code language: C, C++
|
||||
- Code license: GPL-2.0
|
||||
|
@ -5,7 +5,7 @@
|
||||
- State: mature
|
||||
- Download: https://sourceforge.net/projects/doomlegacy/files/
|
||||
- Platform: Windows, Linux, macOS
|
||||
- Keywords: action, commercial content, original content required, remake, shooter
|
||||
- Keywords: action, remake, commercial content, original content required, shooter
|
||||
- Code repository: https://git.code.sf.net/p/doomlegacy/legacy2, https://git.code.sf.net/p/doomlegacy/masterserver @add, https://svn.code.sf.net/p/doomlegacy/svn (svn), http://doomlegacy.cvs.sourceforge.net (cvs)
|
||||
- Code language: C++
|
||||
- Code license: GPL-2.0
|
||||
|
@ -5,7 +5,7 @@
|
||||
- State: mature
|
||||
- Download: https://github.com/bradharding/doomretro/releases
|
||||
- Platform: Windows
|
||||
- Keywords: action, commercial content, remake, requires original content
|
||||
- Keywords: action, remake, commercial content, requires original content
|
||||
- Code repository: https://github.com/bradharding/doomretro.git
|
||||
- Code language: C, C++
|
||||
- Code license: GPL-3.0
|
||||
|
@ -5,7 +5,7 @@
|
||||
- State: mature
|
||||
- Download: https://sourceforge.net/projects/deng/files/
|
||||
- Platform: Windows, Linux, macOS
|
||||
- Keywords: action, commercial content, remake, requires original content
|
||||
- Keywords: action, remake, commercial content, requires original content
|
||||
- Code repository: https://github.com/skyjake/Doomsday-Engine.git, https://git.code.sf.net/p/deng/code @add
|
||||
- Code language: C, C++
|
||||
- Code license: GPL-2.0 (see source files), GPL-3.0, LGPL-3.0 (core)
|
||||
|
@ -5,7 +5,7 @@
|
||||
- State: mature, inactive since 2013
|
||||
- Download: https://dopewars.sourceforge.io/download.html
|
||||
- Platform: Windows, Linux
|
||||
- Keywords: simulation, remake
|
||||
- Keywords: remake, simulation
|
||||
- Code repository: https://svn.code.sf.net/p/dopewars/code (svn)
|
||||
- Code language: C
|
||||
- Code license: GPL-2.0
|
||||
|
@ -4,7 +4,7 @@
|
||||
- Media: https://en.wikipedia.org/wiki/Doxygen
|
||||
- State: mature
|
||||
- Download: https://www.doxygen.nl/download.html
|
||||
- Keywords: tool, library, source documentation generator
|
||||
- Keywords: library, tool, source documentation generator
|
||||
- Code repository: https://github.com/doxygen/doxygen.git
|
||||
- Code language: C++
|
||||
- Code license: GPL-2.0
|
||||
|
@ -3,7 +3,7 @@
|
||||
- Home: https://github.com/urxp/drally
|
||||
- Inspirations: Death Rally
|
||||
- State: beta
|
||||
- Keywords: action, commercial content, racing, remake
|
||||
- Keywords: action, remake, commercial content, racing
|
||||
- Code repository: https://github.com/urxp/drally.git
|
||||
- Code language: Assembly, C
|
||||
- Code license: MIT
|
||||
|
@ -4,7 +4,7 @@
|
||||
- State: beta
|
||||
- Download: https://www.dreamchess.org/downloads, https://sourceforge.net/projects/dreamchess/files/
|
||||
- Platform: Windows, Linux, macOS
|
||||
- Keywords: strategy, board, chess
|
||||
- Keywords: board, strategy, chess
|
||||
- Code repository: https://github.com/dreamchess/dreamchess.git
|
||||
- Code language: C
|
||||
- Code license: GPL-3.0
|
||||
|
@ -3,7 +3,7 @@
|
||||
- Home: https://dreerally.com/
|
||||
- Inspirations: Death Rally
|
||||
- State: beta
|
||||
- Keywords: game engine, commercial content, remake, requires original content
|
||||
- Keywords: game engine, remake, commercial content, requires original content
|
||||
- Code repository: https://github.com/enriquesomolinos/DreeRally.git
|
||||
- Code language: C, C++
|
||||
- Code license: Custom (may only be used with a copy of Death Rally)
|
||||
|
@ -1,7 +1,7 @@
|
||||
# DRL
|
||||
|
||||
- Home: https://drl.chaosforge.org/
|
||||
- Media: <https://en.wikipedia.org/wiki/DRL_(video_game)>
|
||||
- Media: https://en.wikipedia.org/wiki/DRL_(video_game)
|
||||
- State: mature
|
||||
- Download: https://drl.chaosforge.org/downloads
|
||||
- Platform: Windows, Linux, macOS
|
||||
|
@ -5,7 +5,7 @@
|
||||
- State: mature, inactive since 2016
|
||||
- Download: https://github.com/SimonLarsen/duckmarines/releases
|
||||
- Platform: Windows, Linux (using LÖVE), macOS
|
||||
- Keywords: puzzle, open content (but NC and ND), remake
|
||||
- Keywords: puzzle, remake, open content (but NC and ND)
|
||||
- Code repository: https://github.com/SimonLarsen/duckmarines.git
|
||||
- Code language: Lua
|
||||
- Code license: zlib
|
||||
|
@ -3,7 +3,7 @@
|
||||
- Home: http://icculus.org/duke3d/
|
||||
- Inspirations: Duke Nukem 3D
|
||||
- State: beta, inactive since 2009
|
||||
- Keywords: action, commercial content, multiplayer LAN, remake, requires original content, shooter
|
||||
- Keywords: action, remake, commercial content, multiplayer LAN, requires original content, shooter
|
||||
- Code repository: http://svn.icculus.org/duke3d/ (svn)
|
||||
- Code language: C
|
||||
- Code license: GPL-2.0
|
||||
|
@ -4,7 +4,7 @@
|
||||
- Inspirations: Duke Nukem 3D
|
||||
- State: beta, inactive since 2008
|
||||
- Download: http://www.rancidmeat.com/projects/duke3d_w32/duke3d_w32_b20_src.zip
|
||||
- Keywords: action, commercial content, multiplayer LAN, remake, requires original content, shooter
|
||||
- Keywords: action, remake, commercial content, multiplayer LAN, requires original content, shooter
|
||||
- Code repository: @see-download
|
||||
- Code language: C
|
||||
- Code license: GPL-2.0
|
||||
|
@ -4,7 +4,7 @@
|
||||
- Media: https://en.wikipedia.org/wiki/Dune_II#Legacy
|
||||
- Inspirations: Dune 2
|
||||
- State: beta
|
||||
- Keywords: strategy, real time, remake
|
||||
- Keywords: remake, strategy, real time
|
||||
- Code repository: https://github.com/Fundynamic/dune2themaker4j.git
|
||||
- Code language: Java
|
||||
- Code license: MIT
|
||||
|
@ -4,7 +4,7 @@
|
||||
- Inspirations: Dune 2
|
||||
- State: mature, inactive since 2014
|
||||
- Download: https://sourceforge.net/projects/dunedynasty
|
||||
- Keywords: strategy, remake, requires original content (Dune 2)
|
||||
- Keywords: remake, strategy, requires original content (Dune 2)
|
||||
- Code repository: https://git.code.sf.net/p/dunedynasty/dunedynasty, https://gitlab.com/osgames/dunedynasty.git @add
|
||||
- Code language: C
|
||||
- Code license: GPL-2.0
|
||||
|
@ -4,7 +4,7 @@
|
||||
- Inspirations: Dune 2
|
||||
- State: mature
|
||||
- Download: http://dunelegacy.sourceforge.net/website/downloads.html, https://sourceforge.net/projects/dunelegacy/files
|
||||
- Keywords: strategy, remake, requires original content
|
||||
- Keywords: remake, strategy, requires original content
|
||||
- Code repository: https://git.code.sf.net/p/dunelegacy/code
|
||||
- Code language: C++
|
||||
- Code license: GPL-2.0
|
||||
|
@ -4,7 +4,7 @@
|
||||
- Inspirations: Forgotten Realms: Unlimited Adventures
|
||||
- State: mature
|
||||
- Download: https://sourceforge.net/projects/uaf/files/
|
||||
- Keywords: role playing, remake
|
||||
- Keywords: remake, role playing
|
||||
- Code repository: https://gitlab.com/osgames/uaf.git (mirror), http://uaf.cvs.sourceforge.net (cvs)
|
||||
- Code language: C++
|
||||
- Code license: GPL-2.0
|
||||
|
@ -1,10 +1,10 @@
|
||||
# Dunnet
|
||||
|
||||
- Home: http://www.driver-aces.com/ronnie.html#dunnet
|
||||
- Media: <https://en.wikipedia.org/wiki/Dunnet_(video_game)>
|
||||
- Media: https://en.wikipedia.org/wiki/Dunnet_(video_game)
|
||||
- State: mature, inactive since 1992
|
||||
- Keywords: adventure, text-based
|
||||
- Code repository: (http://git.savannah.gnu.org/cgit/emacs.git/tree/lisp/play/dunnet.el?h=emacs-25)
|
||||
- Code repository: ? (http://git.savannah.gnu.org/cgit/emacs.git/tree/lisp/play/dunnet.el?h=emacs-25)
|
||||
- Code language: Emacs Lisp
|
||||
- Code license: GPL-3.0
|
||||
- Developer: Ron Schnell
|
||||
|
@ -5,7 +5,7 @@
|
||||
- State: mature
|
||||
- Download: https://github.com/juzzlin/DustRacing2D/releases
|
||||
- Platform: Windows, Linux
|
||||
- Keywords: sports, 2D, multiplayer split-screen, open content, racing, remake
|
||||
- Keywords: remake, sports, 2D, multiplayer split-screen, open content, racing
|
||||
- Code repository: https://github.com/juzzlin/DustRacing2D.git
|
||||
- Code language: C, C++
|
||||
- Code license: GPL-3.0
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user