further improvement of maintenance scripts

This commit is contained in:
Trilarion 2020-09-09 13:01:44 +02:00
parent c985780dc2
commit 60f9523906
77 changed files with 424 additions and 478 deletions

View File

@ -566,6 +566,7 @@
"https://github.com/dmecke/OpenSoccerStar.git",
"https://github.com/dogballs/cattle-bity.git",
"https://github.com/dorkster/freeblocks.git",
"https://github.com/dougmencken/HeadOverHeels.git",
"https://github.com/doxygen/doxygen.git",
"https://github.com/dreamchess/dreamchess.git",
"https://github.com/dsallen7/ransack-python.git",
@ -666,6 +667,7 @@
"https://github.com/ihofmann/open-websoccer.git",
"https://github.com/indyjo/Thunder-Lightning.git",
"https://github.com/inexorgame/inexor-core.git",
"https://github.com/inexorgame/vulkan-renderer.git",
"https://github.com/infidel-/cult.git",
"https://github.com/inolen/quakejs.git",
"https://github.com/instead-hub/instead.git",

View File

@ -1,298 +0,0 @@
import json
import textwrap
import os
import re
import utils.constants
from utils import constants as c, utils
def export_json(infos):
"""
Parses all entries, collects interesting info and stores it in a json file suitable for displaying
with a dynamic table in a browser.
"""
print('export to json for web display')
# make database out of it
db = {'headings': ['Game', 'Description', 'Download', 'State', 'Keywords', 'Source']}
entries = []
for info in infos:
# game & description
entry = ['{} (<a href="{}">home</a>, <a href="{}">entry</a>)'.format(info['Name'], info['home'][0],
r'https://github.com/Trilarion/opensourcegames/blob/master/entries/' +
info['file']),
textwrap.shorten(info['description'], width=60, placeholder='..')]
# download
field = 'download'
if field in info and info[field]:
entry.append('<a href="{}">Link</a>'.format(info[field][0]))
else:
entry.append('')
# state (field state is essential)
entry.append('{} / {}'.format(info['state'][0],
'inactive since {}'.format(info['inactive']) if 'inactive' in info else 'active'))
# keywords
field = 'keywords'
if field in info and info[field]:
entry.append(', '.join(info[field]))
else:
entry.append('')
# source
text = []
field = 'code repository'
if field in info and info[field]:
text.append('<a href="{}">Source</a>'.format(info[field][0]))
field = 'code language'
if field in info and info[field]:
text.append(', '.join(info[field]))
field = 'code license'
if field in info and info[field]:
text.append(info[field][0])
entry.append(' - '.join(text))
# append to entries
entries.append(entry)
# sort entries by game name
entries.sort(key=lambda x: str.casefold(x[0]))
db['data'] = entries
# output
json_path = os.path.join(c.entries_path, os.path.pardir, 'docs', 'data.json')
text = json.dumps(db, indent=1)
utils.write_text(json_path, text)
def git_repo(repo):
"""
Tests if a repo is a git repo, then returns the repo url, possibly modifying it slightly.
"""
# generic (https://*.git) or (http://*.git) ending on git
if (repo.startswith('https://') or repo.startswith('http://')) and repo.endswith('.git'):
return repo
# for all others we just check if they start with the typical urls of git services
services = ['https://git.tuxfamily.org/', 'http://git.pond.sub.org/', 'https://gitorious.org/',
'https://git.code.sf.net/p/']
for service in services:
if repo.startswith(service):
return repo
if repo.startswith('git://'):
return repo
# the rest is ignored
return None
def svn_repo(repo):
"""
"""
if repo.startswith('https://svn.code.sf.net/p/'):
return repo
if repo.startswith('http://svn.uktrainsim.com/svn/'):
return repo
if repo == 'https://rpg.hamsterrepublic.com/source/wip':
return repo
if repo.startswith('http://svn.savannah.gnu.org/svn/'):
return repo
if repo.startswith('svn://'):
return repo
if repo.startswith('https://svn.icculus.org/') or repo.startswith('http://svn.icculus.org/'):
return repo
# not svn
return None
def hg_repo(repo):
"""
"""
if repo.startswith('https://bitbucket.org/') and not repo.endswith('.git'):
return repo
if repo.startswith('http://hg.'):
return repo
# not hg
return None
def export_primary_code_repositories_json(infos):
"""
"""
print('export to json for local repository update')
primary_repos = {'git': [], 'svn': [], 'hg': []}
unconsumed_entries = []
# for every entry filter those that are known git repositories (add additional repositories)
field = 'code repository-raw'
for info in infos:
# if field 'Code repository' is available
if field in info:
consumed = False
repos = info[field]
if repos:
# split at comma
repos = repos.split(',')
# keep the first and all others containing "(+)"
additional_repos = [x for x in repos[1:] if "(+)" in x]
repos = repos[0:1]
repos.extend(additional_repos)
for repo in repos:
# remove parenthesis and strip of white spaces
repo = re.sub(r'\([^)]*\)', '', repo)
repo = repo.strip()
url = git_repo(repo)
if url:
primary_repos['git'].append(url)
consumed = True
continue
url = svn_repo(repo)
if url:
primary_repos['svn'].append(url)
consumed = True
continue
url = hg_repo(repo)
if url:
primary_repos['hg'].append(url)
consumed = True
continue
if not consumed:
unconsumed_entries.append([info['Name'], info[field]])
# print output
if 'code repository' in info:
print('Entry "{}" unconsumed repo: {}'.format(info['Name'], info[field]))
# sort them alphabetically (and remove duplicates)
for k, v in primary_repos.items():
primary_repos[k] = sorted(set(v))
# statistics of gits
git_repos = primary_repos['git']
print('{} Git repositories'.format(len(git_repos)))
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))
# write them to code/git
json_path = os.path.join(c.root_path, 'code', 'archives.json')
text = json.dumps(primary_repos, indent=1)
utils.write_text(json_path, text)
def export_git_code_repositories_json():
"""
"""
urls = []
field = 'code repository'
# for every entry, get all git
for info in infos:
# if field 'Code repository' is available
if field in info:
repos = info[field]
if repos:
# take the first
repo = repos[0]
url = git_repo(repo)
if url:
urls.append(url)
# sort them alphabetically (and remove duplicates)
urls.sort()
# write them to code/git
json_path = os.path.join(c.root_path, 'code', 'git_repositories.json')
text = json.dumps(urls, indent=1)
utils.write_text(json_path, text)
def check_validity_backlog():
import requests
# read backlog and split
file = os.path.join(c.root_path, 'code', 'backlog.txt')
text = utils.read_text(file)
urls = text.split('\n')
urls = [x.split(' ')[0] for x in urls]
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64)'}
for url in urls:
try:
r = requests.get(url, headers=headers, timeout=5)
except Exception as e:
print('{} gave error: {}'.format(url, e))
else:
if r.status_code != requests.codes.ok:
print('{} returned status code: {}'.format(url, r.status_code))
if r.is_redirect or r.history:
print('{} redirected to {}, {}'.format(url, r.url, r.history))
def check_code_dependencies(infos):
"""
"""
# get all names of frameworks and library also using osg.code_dependencies_aliases
valid_dependencies = list(utils.constants.general_code_dependencies_without_entry.keys())
for info in infos:
if any((x in ('framework', 'library', 'game engine') for x in info['keywords'])):
name = info['Name']
if name in utils.constants.code_dependencies_aliases:
valid_dependencies.extend(utils.constants.code_dependencies_aliases[name])
else:
valid_dependencies.append(name)
# get all referenced code dependencies
referenced_dependencies = {}
for info in infos:
deps = info.get('code dependencies', [])
for dependency in deps:
if dependency in referenced_dependencies:
referenced_dependencies[dependency] += 1
else:
referenced_dependencies[dependency] = 1
# delete those that are valid dependencies
referenced_dependencies = [(k, v) for k, v in referenced_dependencies.items() if k not in valid_dependencies]
# sort by number
referenced_dependencies.sort(key=lambda x: x[1], reverse=True)
# print out
print('Code dependencies not included as entry')
for dep in referenced_dependencies:
print('{} ({})'.format(*dep))

View File

@ -1,17 +1,40 @@
"""
Runs a series of maintenance operations on the collection of entry files, updating the table of content files for
each category as well as creating a statistics file.
Runs a series of maintenance operations on the collection of entry files, updating the table of content files for
each category as well as creating a statistics file.
Counts the number of records each sub-folder and updates the overview.
Sorts the entries in the contents files of each sub folder alphabetically.
Counts the number of records each sub-folder and updates the overview.
Sorts the entries in the contents files of each sub folder alphabetically.
"""
import os
import re
import datetime
import json
import textwrap
from utils import osg, osg_ui, utils, constants as c
import requests
def check_validity_backlog():
import requests
# read backlog and split
file = os.path.join(c.root_path, 'code', 'backlog.txt')
text = utils.read_text(file)
urls = text.split('\n')
urls = [x.split(' ')[0] for x in urls]
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64)'}
for url in urls:
try:
r = requests.get(url, headers=headers, timeout=5)
except Exception as e:
print('{} gave error: {}'.format(url, e))
else:
if r.status_code != requests.codes.ok:
print('{} returned status code: {}'.format(url, r.status_code))
if r.is_redirect or r.history:
print('{} redirected to {}, {}'.format(url, r.url, r.history))
def create_toc(title, file, entries):
"""
@ -89,6 +112,78 @@ class EntriesMaintainer:
print('{}: found {}'.format(os.path.basename(entry_path), check_string))
print('checked for template leftovers')
def check_inconsistencies(self):
"""
:return:
"""
if not self.entries:
print('entries not yet loaded')
return
# get all keywords and print similar keywords
keywords = []
for entry in self.entries:
keywords.extend(entry['Keywords'])
if b'first\xe2\x80\x90person'.decode() in entry['Keywords']:
print(entry['File'])
keywords = [x.value for x in keywords]
# reduce those starting with "multiplayer"
keywords = [x if not x.startswith('multiplayer') else 'multiplayer' for x in keywords]
# check unique keywords
unique_keywords = list(set(keywords))
unique_keywords_counts = [keywords.count(l) for l in unique_keywords]
for index, name in enumerate(unique_keywords):
for other_index in range(index+1, len(unique_keywords)):
other_name = unique_keywords[other_index]
if osg.name_similarity(name, other_name) > 0.8:
print(' Keywords {} ({}) - {} ({}) are similar'.format(name, unique_keywords_counts[index], other_name, unique_keywords_counts[other_index]))
# get all names of frameworks and library also using osg.code_dependencies_aliases
valid_dependencies = list(c.general_code_dependencies_without_entry.keys())
for entry in self.entries:
if any((x in ('framework', 'library', 'game engine') for x in entry['Keywords'])):
name = entry['Title']
if name in c.code_dependencies_aliases:
valid_dependencies.extend(c.code_dependencies_aliases[name])
else:
valid_dependencies.append(name)
# get all referenced code dependencies
referenced_dependencies = {}
for entry in self.entries:
deps = entry.get('Code dependencies', [])
for dependency in deps:
dependency = dependency.value
if dependency in referenced_dependencies:
referenced_dependencies[dependency] += 1
else:
referenced_dependencies[dependency] = 1
# delete those that are valid dependencies
referenced_dependencies = [(k, v) for k, v in referenced_dependencies.items() if k not in valid_dependencies]
# sort by number
referenced_dependencies.sort(key=lambda x: x[1], reverse=True)
# print out
print('Code dependencies not included as entry')
for dep in referenced_dependencies:
print('{} ({})'.format(*dep))
# if there is the "Play" field, it should have "Web" as Platform
for entry in self.entries:
name = entry['File']
if 'Play' in entry:
if not 'Platform' in entry:
print('Entry "{}" has "Play" field but not "Platform" field, add it with "Web"'.format(name))
elif not 'Web' in entry['Platform']:
print('Entry "{}" has "Play" field but not "Web" in "Platform" field'.format(name))
# javascript/typescript as language but not web as platform?
# if there is a @see-download there should be download fields...
def clean_rejected(self):
"""
@ -548,10 +643,171 @@ class EntriesMaintainer:
print('statistics updated')
def update_html(self):
pass
"""
Parses all entries, collects interesting info and stores it in a json file suitable for displaying
with a dynamic table in a browser.
"""
if not self.entries:
print('entries not yet loaded')
return
# make database out of it
db = {'headings': ['Game', 'Description', 'Download', 'State', 'Keywords', 'Source']}
entries = []
for info in self.entries:
# game & description
entry = ['{} (<a href="{}">home</a>, <a href="{}">entry</a>)'.format(info['Title'], info['Home'][0],
r'https://github.com/Trilarion/opensourcegames/blob/master/entries/' +
info['File']),
textwrap.shorten(info.get('Note', ''), width=60, placeholder='..')]
# download
field = 'Download'
if field in info and info[field]:
entry.append('<a href="{}">Link</a>'.format(info[field][0]))
else:
entry.append('')
# state (field state is essential)
entry.append('{} / {}'.format(info['State'][0],
'inactive since {}'.format(osg.extract_inactive_year(info)) if osg.is_inactive(info) else 'active'))
# keywords
keywords = info['Keywords']
keywords = [x.value for x in keywords]
entry.append(', '.join(keywords))
# source
text = []
field = 'Code repository'
if field in info and info[field]:
text.append('<a href="{}">Source</a>'.format(info[field][0].value))
languages = info['Code language']
languages = [x.value for x in languages]
text.append(', '.join(languages))
licenses = info['Code license']
licenses = [x.value for x in licenses]
text.append(', '.join(licenses))
entry.append(' - '.join(text))
# append to entries
entries.append(entry)
# sort entries by game name
entries.sort(key=lambda x: str.casefold(x[0]))
db['data'] = entries
# output
text = json.dumps(db, indent=1)
utils.write_text(c.json_db_file, text)
print('HTML updated')
def update_repos(self):
pass
"""
export to json for local repository update of primary repos
"""
if not self.entries:
print('entries not yet loaded')
return
primary_repos = {'git': [], 'svn': [], 'hg': []}
unconsumed_entries = []
# for every entry filter those that are known git repositories (add additional repositories)
for entry in self.entries:
repos = entry['Code repository']
repos = [x.value for x in repos]
# keep the first and all others containing @add
if not repos:
continue
repos = [repos[0]] + [x for x in repos[1:] if "@add" in x]
for repo in repos:
consumed = False
repo = repo.split(' ')[0].strip()
url = osg.git_repo(repo)
if url:
primary_repos['git'].append(url)
consumed = True
continue
url = osg.svn_repo(repo)
if url:
primary_repos['svn'].append(url)
consumed = True
continue
url = osg.hg_repo(repo)
if url:
primary_repos['hg'].append(url)
consumed = True
continue
if not consumed:
unconsumed_entries.append([entry['Title'], repo])
print('Entry "{}" unconsumed repo: {}'.format(entry['File'], repo))
# sort them alphabetically (and remove duplicates)
for k, v in primary_repos.items():
primary_repos[k] = sorted(set(v))
# statistics of gits
git_repos = primary_repos['git']
print('{} Git repositories'.format(len(git_repos)))
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))
# write them to code/git
json_path = os.path.join(c.root_path, 'code', 'archives.json')
text = json.dumps(primary_repos, indent=1)
utils.write_text(json_path, text)
print('Repositories updated')
def collect_git_repos(self):
"""
for every entry, get all git
:return:
"""
git_repos = []
for entry in self.entries:
repos = entry['Code repository']
repos = [x.value for x in repos]
for repo in repos:
repo = repo.split(' ')[0].strip()
url = osg.git_repo(repo)
if url:
git_repos.append(repo)
# sort them alphabetically (and remove duplicates)
git_repos = sorted(list(set(git_repos)), key=str.casefold)
# write them to code/git
json_path = os.path.join(c.root_path, 'code', 'git_repositories.json')
text = json.dumps(git_repos, indent=1)
utils.write_text(json_path, text)
def special_ops(self):
"""
For special operations that are one-time and may change.
:return:
"""
if not self.entries:
print('entries not yet loaded')
return
# remove all downloads that only have a single entry with @see-home (this is the default anyway)
field = 'Download'
for entry in self.entries:
if field in entry:
content = entry[field]
if len(content) == 1 and content[0].value == '@see-home' and not content[0].comment:
del entry[field]
print('special ops finished')
def complete_run(self):
pass
@ -566,6 +822,7 @@ if __name__ == "__main__":
'Write entries': m.write_entries,
'Check template leftovers': m.check_template_leftovers,
'Check external links': m.check_external_links,
'Check inconsistencies': m.check_inconsistencies,
'Check rejected entries': m.clean_rejected,
'Check external links (takes quite long)': m.check_external_links,
'Clean backlog': m.clean_backlog,
@ -573,6 +830,7 @@ if __name__ == "__main__":
'Update statistics': m.update_statistics,
'Update HTML': m.update_html,
'Update repository list': m.update_repos,
'Special': m.special_ops,
'Complete run': m.complete_run
}

View File

@ -17,6 +17,7 @@ developer_file = os.path.join(root_path, 'developers.md')
backlog_file = os.path.join(code_path, 'backlog.txt')
rejected_file = os.path.join(code_path, 'rejected.txt')
statistics_file = os.path.join(root_path, 'statistics.md')
json_db_file = os.path.join(root_path, 'docs', 'data.json')
# local config
local_config_file = os.path.join(root_path, 'local-config.ini')

View File

@ -504,4 +504,55 @@ def all_urls(entries):
subvalue = subvalue.strip()
if is_url(subvalue):
urls[subvalue] = urls.get(subvalue, []) + [file]
return urls
return urls
def git_repo(repo):
"""
Tests if a repo URL is a git repo, then returns the repo url.
"""
# everything that starts with 'git://'
if repo.startswith('git://'):
return repo
# generic (https://*.git) or (http://*.git) ending on git
if (repo.startswith('https://') or repo.startswith('http://')) and repo.endswith('.git'):
return repo
# for all others we just check if they start with the typical urls of git services
services = ['https://git.tuxfamily.org/', 'http://git.pond.sub.org/', 'https://gitorious.org/',
'https://git.code.sf.net/p/']
if any(repo.startswith(service) for service in services):
return repo
# the rest is not recognized as a git url
return None
def svn_repo(repo):
"""
Tests if a repo URL is a svn repo, then returns the repo url.
"""
# we can just go for known providers of svn
services = ('svn://', 'https://svn.code.sf.net/p/', 'http://svn.savannah.gnu.org/svn/', 'https://svn.icculus.org/', 'http://svn.icculus.org/', 'http://svn.uktrainsim.com/svn/', 'https://rpg.hamsterrepublic.com/source/wip')
if any(repo.startswith(service) for service in services):
return repo
# not svn
return None
def hg_repo(repo):
"""
Tests if a repo URL is a hg repo, then returns the repo url.
"""
if repo.startswith('https://bitbucket.org/') and not repo.endswith('.git'):
return repo
if repo.startswith('http://hg.'):
return repo
# not hg
return None

View File

@ -10,6 +10,4 @@
- Code license: MIT
- Developer: Jan-Otto Kröpke, Ozan Kurt, Hilarious001
Space browsergame framework.
## Building

View File

@ -3,12 +3,10 @@
- Home: http://www.newbreedsoftware.com/3dpong/
- State: beta, inactive since 2004
- Platform: Linux, macOS
- Keywords: arcade, online
- Keywords: arcade, online, 3D
- Code repository: @see-home
- Code language: C
- Code license: GPL-2.0
- Developer: New Breed Software
Three dimensional sports game.
## Building

View File

@ -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: board, puzzle, chess, open content
- Keywords: board, puzzle, chess, open content, 3D
- Code repository: @see-home
- Code language: C
- Code license: GPL-2.0
@ -10,6 +10,4 @@
- Assets license: GPL-2.0
- Developer: Paul Hicks, Bernard Kennedy
Chess game on 3 boards.
## Building

View File

@ -1,9 +1,10 @@
# 3d.city
- Home: http://lo-th.github.io/3d.city/index.html, https://github.com/lo-th/3d.city
- Inspirations: SimCity
- Inspirations: SimCity, micropolis
- State: mature, inactive since 2016
- Play: http://lo-th.github.io/3d.city/index.html
- Platform: Web
- Keywords: simulation, clone, open content
- Code repository: https://github.com/lo-th/3d.city.git
- Code language: JavaScript

View File

@ -3,6 +3,7 @@
- Home: http://www.allureofthestars.com/
- State: beta
- Play: http://www.allureofthestars.com/play/
- Platform: Web
- Keywords: role playing, strategy, open content, roguelike, turn-based
- Code repository: https://github.com/AllureOfTheStars/Allure.git
- Code language: Haskell

View File

@ -3,7 +3,6 @@
- Home: https://arescentral.org/antares
- Inspirations: Ares
- State: beta
- Download: @see-home
- Keywords: remake, strategy, real time, shooter
- Code repository: https://github.com/arescentral/antares.git
- Code language: C++

View File

@ -2,7 +2,6 @@
- Home: https://www.atrinik.org/, https://github.com/atrinik
- State: mature, inactive since 2016
- Download: @see-home
- Keywords: role playing
- Code repository: https://github.com/atrinik/atrinik.git
- Code language: C, Python

View File

@ -4,6 +4,7 @@
- Media: https://en.wikipedia.org/wiki/BrowserQuest
- State: mature
- Play: @see-home
- Platform: Web
- Keywords: role playing, multiplayer online + massive
- Code repository: https://github.com/mozilla/BrowserQuest.git
- Code language: JavaScript

View File

@ -2,7 +2,6 @@
- Home: https://castle-engine.io/
- State: mature
- Download: @see-home
- Keywords: framework, game engine
- Code repository: https://github.com/castle-engine/castle-engine.git
- Code language: Pascal

View File

@ -4,6 +4,7 @@
- Inspirations: Castle of the Winds
- State: beta, inactive since 2016
- Play: http://game.castleofthewinds.com/
- Platform: Web
- Keywords: remake, role playing
- Code repository: https://github.com/mordrax/cotwmtor.git
- Code language: JavaScript

View File

@ -3,7 +3,6 @@
- Home: https://www.michaelfogleman.com/projects/craft/
- Inspirations: Minecraft
- State: mature, inactive since 2017
- Download: @see-home
- Platform: Windows, Linux, macOS
- Keywords: puzzle, clone, multiplayer online, open content, sandbox, voxel
- Code repository: https://github.com/fogleman/Craft.git

View File

@ -4,6 +4,7 @@
- Inspirations: Flappy Bird
- State: mature, inactive since 2017
- Play: @see-home
- Platform: Web
- Keywords: puzzle, remake
- Code repository: https://github.com/varunpant/CrappyBird.git
- Code language: JavaScript

View File

@ -3,7 +3,6 @@
- Home: http://www.descent2.de/, https://sourceforge.net/projects/d2x-xl/
- Inspirations: Descent, Descent II
- State: mature, inactive since 2015
- Download: @see-home
- Platform: Windows, Linux, macOS
- Keywords: remake, non-free content, shooter
- Code repository: https://svn.code.sf.net/p/d2x-xl/code (svn)

View File

@ -5,7 +5,7 @@
- State: mature
- Download: https://www.dfworkshop.net/projects/daggerfall-unity/live-builds/
- Platform: Windows, Linux, macOS
- Keywords: remake, role playing, requires additional content
- Keywords: remake, role playing, requires original content
- Code repository: https://github.com/Interkarma/daggerfall-unity.git
- Code language: C#
- Code license: MIT

View File

@ -2,7 +2,7 @@
- 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, turn based
- 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 version?)

View File

@ -3,7 +3,6 @@
- Home: http://scoutshonour.com/digital/
- Media: https://web.archive.org/web/20160507142946/https://lgdb.org/game/digital_love_story
- State: mature
- Download: @see-home
- Platform: Windows, Linux, macOS
- Keywords: adventure, visual novel
- Code repository: https://gitlab.com/osgames/digitalalovestory.git (copy of version 1.1)

View File

@ -2,7 +2,6 @@
- Home: http://emhsoft.com/dh.html, http://savannah.nongnu.org/projects/dragon-hunt
- State: mature
- Download: @see-home
- Keywords: role playing
- Code repository: https://gitlab.com/osgames/dragon-hunt.git (backup of cvs), http://savannah.nongnu.org/cvs/?group=dragon-hunt (cvs)
- Code language: Python

View File

@ -2,7 +2,6 @@
- Home: http://www.emhsoft.com/singularity/
- State: beta
- Download: @see-home
- Keywords: strategy
- Code repository: https://github.com/singularity/singularity.git
- Code language: Python

View File

@ -4,6 +4,7 @@
- Inspirations: Enduro
- State: mature
- Play: https://rafaelcastrocouto.github.io/enduro/
- Platform: Web
- Keywords: remake, open content
- Code repository: https://github.com/rafaelcastrocouto/enduro.git
- Code language: JavaScript

View File

@ -3,7 +3,6 @@
- Home: https://fanwor.tuxfamily.org/
- Inspirations: Legend of Zelda
- State: mature
- Download: @see-home
- Keywords: adventure, remake
- Code repository: https://git.tuxfamily.org/fanwor/fanwor.git
- Code language: C

View File

@ -4,6 +4,7 @@
- Inspirations: Plasma Pong
- State: mature, inactive since 2013
- Play: http://anirudhjoshi.github.io/fluid_table_tennis/
- Platform: Web
- Keywords: arcade, remake, multiplayer competitive + local, open content
- Code repository: https://github.com/anirudhjoshi/fluid_table_tennis.git
- Code language: JavaScript

View File

@ -3,7 +3,6 @@
- Home: https://freeablo.org/
- Inspirations: Diablo
- State: beta
- Download: @see-home
- Platform: Windows, Linux, macOS
- Keywords: action, remake, role playing, commercial content, requires original content
- Code repository: https://github.com/wheybags/freeablo.git

View File

@ -2,7 +2,6 @@
- Home: http://sheep.art.pl/Fujo
- State: mature, inactive since 2014
- Download: @see-home
- Keywords: role playing
- Code repository: https://gitlab.com/osgames/fujo.git
- Code language: Python

View File

@ -3,7 +3,6 @@
- Home: https://geshl2.com/
- Inspirations: GoldenEye 007
- State: mature
- Download: @see-home
- Keywords: action, remake, requires original engine (?), shooter
- Code repository: https://github.com/goldeneye-source/ges-code.git
- Code language: C, C++

View File

@ -4,6 +4,7 @@
- Inspirations: Flag Catcher
- State: mature
- Play: https://ceva24.github.io/
- Platform: Web
- Keywords: puzzle, remake
- Code repository: https://github.com/Ceva24/ceva24.github.io.git
- Code language: JavaScript

View File

@ -3,7 +3,6 @@
- Home: http://www.goblincamp.com/, https://web.archive.org/web/20151106001905/https://bitbucket.org/genericcontainer/goblin-camp
- Inspirations: Anno 1404, Dungeon Keeper, Dwarf Fortress
- State: beta, inactive since 2012
- Download: @see-home
- Keywords: strategy
- Code repository: https://gitlab.com/osgames/goblin-camp.git, https://github.com/y2s82/goblin_camp.git @add
- Code language: C++

View File

@ -2,7 +2,6 @@
- Home: http://grobots.sourceforge.net/, https://sourceforge.net/projects/grobots/
- State: mature, inactive since 2014
- Download: @see-home
- Platform: Windows, Linux, macOS
- Keywords: simulation, programming
- Code repository: http://hg.code.sf.net/p/grobots/trunk (hg), https://gitlab.com/osgames/grobots.git @add

View File

@ -3,7 +3,6 @@
- Home: https://harfbuzz.github.io/, https://web.archive.org/web/20200616182117/https://www.freedesktop.org/wiki/Software/HarfBuzz/
- Media: https://en.wikipedia.org/wiki/HarfBuzz
- State: mature
- Download: @see-home
- Keywords: library
- Code repository: https://github.com/harfbuzz/harfbuzz.git
- Code language: C++

View File

@ -3,7 +3,7 @@
- Home: https://inexor.org/
- Inspirations: Cube 2: Sauerbraten
- State: beta, inactive since 2018
- Keywords: remake, first person, shooter
- Keywords: remake, first-person, shooter
- Code repository: https://github.com/inexorgame/vulkan-renderer.git, https://github.com/inexorgame/inexor-core.git @add (@archived)
- Code language: C++, JavaScript
- Code license: zlib

View File

@ -4,6 +4,7 @@
- Inspirations: Fallout 2
- State: beta, inactive since 2017
- Play: http://ajxs.github.io/jsFO/ (demo)
- Platform: Web
- Keywords: remake, role playing, commercial content, requires original content
- Code repository: https://github.com/ajxs/jsFO.git
- Code language: JavaScript, Python

View File

@ -2,7 +2,6 @@
- Home: http://anttisalonen.github.io/kingdoms/
- State: beta, inactive since 2014
- Download: @see-home
- Platform: Linux
- Keywords: strategy
- Code repository: https://github.com/anttisalonen/kingdoms.git

View File

@ -4,7 +4,6 @@
- Media: https://en.wikipedia.org/wiki/Panzer_General#LGeneral
- Inspirations: Panzer General
- State: mature, inactive since 2017
- Download: @see-home
- Platform: Android
- Keywords: remake, strategy, turn-based
- Code repository: https://github.com/AndO3131/lgeneral.git (mirror), https://svn.code.sf.net/p/lgeneral/code (svn), http://lgeneral.cvs.sourceforge.net (cvs)

View File

@ -3,7 +3,6 @@
- Home: http://libpng.org/pub/png/libpng.html, https://libpng.sourceforge.io/
- Media: https://en.wikipedia.org/wiki/Libpng
- State: mature
- Download: @see-home
- Keywords: library
- Code repository: https://github.com/glennrp/libpng.git, https://sourceforge.net/p/libpng/code/ci/master/tree/
- Code language: C

View File

@ -4,7 +4,6 @@
- Media: https://en.wikipedia.org/wiki/Lincity
- Inspirations: SimCity
- State: mature, inactive since 2005
- Download: @see-home
- Keywords: simulation, clone
- Code repository: https://gitlab.com/osgames/lincity.git (backup of cvs), http://lincity.cvs.sourceforge.net/ (cvs)
- Code language: C

View File

@ -4,7 +4,6 @@
- Media: https://en.wikipedia.org/wiki/Warlords_(game_series)#LordsAWar!
- Inspirations: Warlords II
- State: mature
- Download: @see-home
- Keywords: strategy, turn-based
- Code repository: https://git.savannah.nongnu.org/git/lordsawar.git
- Code language: C++

View File

@ -2,7 +2,6 @@
- Home: https://love2d.org/
- State: mature
- Download: @see-home
- Platform: Windows, Linux, macOS, Android, iOS
- Keywords: framework
- Code repository: https://github.com/love2d/love.git

View File

@ -3,7 +3,6 @@
- Home: http://www.asceai.net/meritous/
- Media: https://libregamewiki.org/Meritous
- State: mature, inactive since 2008
- Download: @see-home
- Keywords: role playing
- Code repository: https://github.com/Nop90-Switch/Meritous-Switch.git (import of version 1.2)
- Code language: C

View File

@ -4,6 +4,7 @@
- Inspirations: Minesweeper
- State: mature
- Play: https://minesweeper.zone/
- Platform: Web
- Keywords: puzzle, remake, open content
- Code repository: https://github.com/reed-jones/minesweeper_js.git
- Code language: JavaScript, PHP

View File

@ -3,7 +3,6 @@
- Home: http://oitofelix.github.io/mininim/
- Inspirations: Prince of Persia
- State: beta, inactive since 2017
- Download: @see-home
- Platform: Windows, Linux
- Keywords: action, remake, open content
- Code repository: https://github.com/oitofelix/mininim.git

View File

@ -3,7 +3,6 @@
- Home: https://github.com/Ancurio/mkxp
- Inspirations: RPG Maker
- State: mature
- Download: @see-home
- Keywords: framework, clone
- Code repository: https://github.com/Ancurio/mkxp.git
- Code language: C++, C

View File

@ -3,8 +3,7 @@
- Home: https://www.netrek.org/, https://sourceforge.net/projects/netrek/, http://mactrek.sourceforge.net/Welcome.html
- Media: https://en.wikipedia.org/wiki/Netrek
- State: mature, inactive since 2009
- Play: https://www.playnetrek.org/
- Download: https://www.netrek.org/downloads/
- Download: https://www.netrek.org/downloads/, https://www.playnetrek.org/
- Platform: Windows, Linux, macOS
- Keywords: action, multiplayer, online
- Code repository: http://netrek.cvs.sourceforge.net (cvs)

View File

@ -9,8 +9,8 @@
- Code repository: https://gitlab.com/osgames/night-hawk.git (conversion of cvs), http://night-hawk.cvs.sourceforge.net (cvs)
- Code language: C++
- Code license: GPL-2.0
- Developer: Jason Nunn, Eric Gillespie
- Developer: Jason Nunn, Eric Gillespie (brickviking@GH)
Remake of Paradroid.
Remake of Paradroid. May be uploaded in the future under https://github.com/brickviking
## Building

View File

@ -3,7 +3,6 @@
- Home: https://davidgow.net/keen/omnispeak.html
- Inspirations: Commander Keen Series
- State: mature
- Download: @see-home
- Keywords: remake, commercial content, requires original content
- Code repository: https://github.com/sulix/omnispeak.git
- Code language: C

View File

@ -3,7 +3,6 @@
- Home: https://runescapeclassic.dev/, https://web.archive.org/web/20200510133848/https://openrsc.com/
- Inspirations: Runescape Classic
- State: mature
- Download: @see-home
- Platform: Windows, Linux, macOS, Android
- Keywords: remake, role playing, multiplayer online + massive
- Code repository: https://gitlab.com/open-runescape-classic/core.git, https://gitlab.com/open-runescape-classic/single-player.git @add, https://github.com/Open-RSC/Core-Framework.git (mirror)

View File

@ -2,7 +2,6 @@
- Home: http://metasepia.icecavern.net/OurPersonalSpace/index.html
- State: mature
- Download: @see-home
- Keywords: simulation, visual novel
- Code repository: https://github.com/qirien/personal-space.git
- Code language: Ren'Py

View File

@ -3,7 +3,6 @@
- Home: http://quakeone.com/proquake/
- Inspirations: Quake
- State: mature, inactive since 2018
- Download: @see-home
- Keywords: remake
- Code repository: @see-home (and https://web.archive.org/web/20200211052147/http://quakeone.com/proquake/older_sources/)
- Code language: C

View File

@ -3,7 +3,6 @@
- Home: https://sourceware.org/pthreads-win32/
- Media: https://en.wikipedia.org/wiki/POSIX_Threads#POSIX_Threads_for_Windows
- State: mature
- Download: @see-home
- Keywords: library
- Code repository: https://github.com/GerHobbelt/pthread-win32.git (for cvs see home)
- Code language: C

View File

@ -3,7 +3,6 @@
- Home: http://www.colm.net/open-source/ragel/
- Media: https://en.wikipedia.org/wiki/Ragel
- State: mature
- Download: @see-home
- Keywords: library
- Code repository: git://git.colm.net/ragel.git
- Code language: C++

View File

@ -4,7 +4,6 @@
- Media: https://en.wikipedia.org/wiki/Rigs_of_Rods
- Inspirations: BeamNG.drive
- State: mature
- Download: @see-home
- Platform: Windows
- Keywords: simulation, cars, multiplayer online, open content
- Code repository: https://github.com/RigsOfRods/rigs-of-rods.git

View File

@ -4,7 +4,6 @@
- Media: https://en.wikipedia.org/wiki/RuneScape
- Inspirations: Old School RuneScape
- State: mature
- Download: @see-home
- Keywords: remake, role playing, client, commercial content, multiplayer competitive + online + co-op
- Code repository: https://github.com/runelite/runelite.git
- Code language: Java

View File

@ -4,14 +4,13 @@
- Media: https://en.wikipedia.org/wiki/Ryzom
- Inspirations: Ryzom
- State: mature
- Play: https://www.ryzom.com/ (commercial)
- Keywords: remake, role playing, multiplayer massive + online, requires server (?)
- Code repository: https://github.com/ryzom/ryzomcore.git, https://gitlab.com/ryzom/ryzom-core.git (mirror)
- Code language: C++
- Code license: AGPL-3.0
- Assets license: CC
MMORPG with open world play.
MMORPG with open world play. Play at https://www.ryzom.com/ (commercial)
## Building

View File

@ -2,7 +2,6 @@
- Home: http://scrabble.sourceforge.net/wiki/, https://sourceforge.net/projects/scrabble/
- State: mature, inactive since 2015
- Download: @see-home
- Platform: Windows, Linux, macOS
- Keywords: board, strategy
- Code repository: https://gitlab.com/osgames/scrabble3d.git (conversion of svn), https://github.com/HeikoTietze/scrabble3d.git @add, https://svn.code.sf.net/p/scrabble/code (svn)

View File

@ -3,7 +3,6 @@
- Home: https://web.archive.org/web/20200114185344/http://www.linuxmotors.com/SDL_bomber/
- Inspirations: Bomberman
- State: mature, inactive since 2012
- Download: @see-home
- Platform: Linux
- Keywords: action, remake
- Code repository: @see-download

View File

@ -2,7 +2,6 @@
- Home: https://pyweek.org/e/np8g/
- State: mature
- Download: @see-home
- Keywords: adventure
- Code repository: https://github.com/blakeohare/pyweek-sentientstorage.git (JavaScript version)
- Code language: Python

View File

@ -2,7 +2,6 @@
- Home: https://stendhalgame.org/, https://sourceforge.net/projects/arianne/
- State: mature
- Download: @see-home
- Keywords: role playing, multiplayer, online
- Code repository: https://github.com/arianne/stendhal.git, https://git.code.sf.net/p/arianne/stendhal @add
- Code language: Java

View File

@ -3,7 +3,6 @@
- Home: https://tof.p1x.in/, https://w84death.itch.io/tanks-of-freedom
- Inspirations: Advance Wars
- State: mature
- Download: @see-home
- Keywords: strategy, clone, multiplayer hotseat + online, open content
- Code repository: https://github.com/w84death/Tanks-of-Freedom.git
- Code language: GDScript

View File

@ -4,7 +4,7 @@
- Media: https://en.wikipedia.org/wiki/William_Shatner%27s_TekWar
- Inspirations: TekWar
- State: beta
- Keywords: action, remake, commercial content, first person, shooter
- Keywords: action, remake, commercial content, first-person, shooter
- Code repository: https://gitlab.com/m210/TekwarGDX.git
- Code language: Java
- Code license: Custom (see buildlic.txt + GPL-3.0)

View File

@ -3,7 +3,7 @@
- Home: http://www.terminal-overload.org/
- Inspirations: Revenge Of The Cats: Ethernet
- State: beta, inactive since 2016
- Keywords: framework, firstperson, open content, shooter
- Keywords: framework, first-person, open content, shooter
- Code repository: https://github.com/fr1tz/terminal-overload.git
- Code language: C++, C, C#
- Code license: GPL-3.0

View File

@ -3,12 +3,12 @@
- Home: https://sourceforge.net/projects/epicheroes/
- State: beta, inactive since 2015
- Download: https://sourceforge.net/projects/epicheroes/files
- Keywords: strategy
- Keywords: strategy, turn-based, role playing
- Code repository: https://git.code.sf.net/p/epicheroes/code, https://gitlab.com/osgames/epicheroes.git @add
- Code language: C++
- Code license: GPL-3.0
A cooperative turn-based RPG and Strategy Game where the main goal is to defeat the evil empire.
A cooperative game where the main goal is to defeat the evil empire.
## Building

View File

@ -4,7 +4,7 @@
- Media: https://en.wikipedia.org/wiki/Star_Wars:_Dark_Forces
- Inspirations: Dark Forces, Outlaws
- State: beta
- Keywords: action, game engine, remake, commercial content, first person, requires original content, shooter
- Keywords: action, game engine, remake, commercial content, first-person, requires original content, shooter
- Code repository: https://github.com/luciusDXL/TheForceEngine.git
- Code language: C++
- Code license: GPL-2.0

View File

@ -9,6 +9,4 @@
- Code language: C
- Code license: GPL-2.0
2D platform game.
## Building

View File

@ -3,7 +3,6 @@
- Home: https://powdertoy.co.uk/
- Inspirations: Powder Game
- State: mature
- Download: @see-home
- Platform: Windows, Linux, macOS, Android
- Keywords: simulation, clone, open content
- Code repository: https://github.com/The-Powder-Toy/The-Powder-Toy.git

View File

@ -10,8 +10,7 @@
- Code language: C++, AngelScript, JavaScript
- Code license: GPL-3.0
Similar of Spore.
Only the Microbe stage is playable now. Really open content?
Similar of Spore. Only the Microbe stage is playable now. Really open content?
## Building

View File

@ -4,7 +4,6 @@
- Media: https://en.wikipedia.org/wiki/Total_Annihilation
- Inspirations: Total Annihilation
- State: beta, inactive since 2017
- Download: @see-home
- Platform: Windows, Linux, macOS
- Keywords: remake, strategy, real time
- Code repository: https://github.com/zuzuf/TA3D.git

View File

@ -4,7 +4,6 @@
- Media: https://en.wikipedia.org/wiki/Mad_TV_(video_game)#Remakes
- Inspirations: Mad TV
- State: mature
- Download: @see-home
- Keywords: remake, strategy
- Code repository: https://github.com/TVTower/TVTower.git
- Code language: BlitzMax, Lua

View File

@ -3,7 +3,6 @@
- Home: http://ufo2000.sourceforge.net/
- Inspirations: UFO: Enemy Unknown, X-COM: Apocalypse, X-COM: Terror from the Deep, X-COM: UFO Defense
- State: mature, inactive since 2012
- Download: @see-home
- Keywords: remake, strategy
- Code repository: https://github.com/ufo2000/ufo2000.git (mirror of svn), https://svn.code.sf.net/p/ufo2000/code (svn)
- Code language: C, C++, Lua

View File

@ -4,7 +4,7 @@
- Inspirations: Command & Conquer, Command & Conquer: Red Alert
- State: mature
- Platform: Windows, Linux
- Keywords: remake, strategy, commercial content, realtime, requires original content
- Keywords: remake, strategy, commercial content, real time, requires original content
- Code repository: https://github.com/Vanilla-Conquer/Vanilla-Conquer.git, https://github.com/electronicarts/CnC_Remastered_Collection.git @add
- Code language: C, C++, Assembly
- Code license: GPL-3.0

View File

@ -3,7 +3,6 @@
- Home: https://vcmi.eu/, https://sourceforge.net/projects/vcmi/
- Inspirations: Heroes of Might and Magic III
- State: mature
- Download: @see-home
- Keywords: remake, strategy, commercial content, requires original content
- Code repository: https://github.com/vcmi/vcmi.git, https://svn.code.sf.net/p/vcmi/code (svn)
- Code language: C++

View File

@ -2,7 +2,6 @@
- Home: http://vdrift.net/, https://sourceforge.net/projects/vdrift/
- State: mature, inactive since 2014
- Download: @see-home
- Platform: Windows, Linux, macOS
- Keywords: simulation, cars, racing
- Code repository: https://github.com/VDrift/vdrift.git, https://svn.code.sf.net/p/vdrift/code (svn)

View File

@ -2,7 +2,6 @@
- Home: http://adonthell.nongnu.org/download/index.html
- State: beta
- Download: @see-home
- Keywords: role playing
- Code repository: https://git.savannah.gnu.org/git/adonthell/adonthell-wastesedge.git
- Code language: Python

View File

@ -3,7 +3,6 @@
- Home: https://tukaani.org/xz/
- Media: https://en.wikipedia.org/wiki/XZ_Utils
- State: mature
- Download: @see-home
- Keywords: library
- Code repository: https://git.tukaani.org/xz.git (https://git.tukaani.org/?p=xz.git)
- Code language: C

File diff suppressed because one or more lines are too long