synchronization inspirations between entries and inspirations list

This commit is contained in:
Trilarion 2020-09-06 10:05:36 +02:00
parent 469f9fa690
commit cd67ffe536
12 changed files with 384 additions and 176 deletions

View File

@ -2,92 +2,110 @@
Maintenance of inspirations.md and synchronization with the inspirations in the entries. Maintenance of inspirations.md and synchronization with the inspirations in the entries.
""" """
import time from utils import osg, osg_ui
from utils import constants as c, utils, osg, osg_ui
from utils import osg_wikipedia
valid_duplicates = ('Age of Empires', 'ARMA', 'Catacomb', 'Civilization', 'Company of Heroes', 'Descent', 'Duke Nukem', 'Dungeon Keeper',
'Final Fantasy', 'Heroes of Might and Magic', 'Jazz Jackrabbit', 'Marathon', 'Master of Orion', 'Quake',
'RollerCoaster Tycoon', 'Star Wars Jedi Knight', 'The Settlers', 'Ultima', 'Ship Simulator')
def check_for_duplicates(): class InspirationMaintainer:
"""
:param inspirations: def __init__(self):
:return: self.inspirations = None
""" self.entries = None
print('\nduplicate check')
inspiration_names = [x['name'] for x in inspirations]
for index, name in enumerate(inspiration_names):
for other_name in inspiration_names[index+1:]:
if osg.name_similarity(name, other_name) > 0.8:
print(' {} - {} is similar'.format(name, other_name))
def test(): def read_inspirations(self):
# assemble info self.inspirations = osg.read_inspirations()
t0 = time.process_time() print('{} inspirations read'.format(len(self.inspirations)))
entries = osg.read_entries()
print('took {}s'.format(time.process_time()-t0))
t0 = time.process_time()
# entries = osg.assemble_infos()
# osg.write_entries(entries)
print('took {}s'.format(time.process_time()-t0))
def write_inspirations(self):
if not self.inspirations:
print('inspirations not yet loaded')
return
osg.write_inspirations(self.inspirations)
print('inspirations written')
# assemble inspirations info from entries def check_for_duplicates(self):
entries_inspirations = {} if not self.inspirations:
for entry in entries: print('inspirations not yet loaded')
entry_name = entry['name'] return
keywords = entry['keywords'] inspiration_names = list(self.inspirations.keys())
entry_inspirations = [x for x in keywords if x.startswith('inspired by')] for index, name in enumerate(inspiration_names):
if entry_inspirations: for other_name in inspiration_names[index + 1:]:
entry_inspirations = entry_inspirations[0][len('inspired by'):] if any((name.startswith(x) and other_name.startswith(x) for x in valid_duplicates)):
entry_inspirations = entry_inspirations.split('+') continue
entry_inspirations = [x.strip() for x in entry_inspirations] if osg.name_similarity(name, other_name) > 0.8:
for entry_inspiration in entry_inspirations: print(' {} - {} is similar'.format(name, other_name))
if entry_inspiration in entries_inspirations: print('duplicates checked')
entries_inspirations[entry_inspiration].append(entry_name)
def check_for_orphans(self):
if not self.inspirations:
print('inspirations not yet loaded')
return
for inspiration in self.inspirations.values():
if not inspiration['inspired entries']:
print(' {} has no inspired entries'.format(inspiration['name']))
print('orphanes checked')
def check_for_missing_inspirations_in_entries(self):
if not self.inspirations:
print('inspirations not yet loaded')
return
if not self.entries:
print('entries not yet loaded')
return
for inspiration in self.inspirations.values():
inspiration_name = inspiration['name']
for entry_name in inspiration['inspired entries']:
x = [x for x in self.entries if x['title'] == entry_name]
assert len(x) <= 1
if not x:
print('Entry "{}" listed in inspiration "{}" but this entry does not exist'.format(entry_name, inspiration_name))
else: else:
entries_inspirations[entry_inspiration] = [ entry_name ] entry = x[0]
print('{} inspirations in the entries'.format(len(entries_inspirations))) if 'inspirations' not in entry or inspiration_name not in entry['inspirations']:
print('Entry "{}" listed in inspiration "{}" but not listed in this entry'.format(entry_name, inspiration_name))
print('missed inspirations checked')
# first check if all inspiration in entries are also in inspirations def update_inspired_entries(self):
inspiration_names = [x['name'] for x in inspirations] if not self.inspirations:
for inspiration, entries in entries_inspirations.items(): print('inspirations not yet loaded')
if inspiration not in inspiration_names: return
print('new inspiration {} for games {}'.format(inspiration, ', '.join(entries))) if not self.entries:
similar_names = [x for x in inspiration_names if osg.name_similarity(inspiration, x) > 0.8] print('entries not yet loaded')
if similar_names: return
print(' similar names {}'.format(', '.join(similar_names))) # loop over all inspirations and delete inspired entries
for inspiration in self.inspirations.values():
inspiration['inspired entries'] = []
# loop over all entries and add to inspirations of entry
for entry in self.entries:
entry_name = entry['title']
for inspiration in entry.get('inspirations', []):
if inspiration in self.inspirations:
self.inspirations[inspiration]['inspired entries'].append(entry_name)
else:
self.inspirations[inspiration] = {'name': inspiration, 'inspired entries': [entry_name]}
print('inspired entries updated')
# now the other way around def read_entries(self):
for index, name in enumerate(inspiration_names): self.entries = osg.read_entries()
if name not in entries_inspirations: print('{} entries read'.format(len(self.entries)))
print('potential removed inspiration {} from games {}'.format(name, inspirations[index]['inspired entries']))
similar_names = [x for x in entries_inspirations.keys() if osg.name_similarity(name, x) > 0.8]
if similar_names:
print(' similar names {}'.format(', '.join(similar_names)))
def read_inspirations():
inspirations = osg.read_inspirations_info()
print('{} inspirations in the inspirations database'.format(len(inspirations)))
def write_inspirations():
osg.write_inspirations_info(inspirations)
print('inspirations written')
if __name__ == "__main__": if __name__ == "__main__":
inspirations = osg.read_inspirations_info()
osg.write_inspirations_info(inspirations)
inspirations = None m = InspirationMaintainer()
entries = None
actions = { actions = {
'Read inspirations': read_inspirations, 'Read inspirations': m.read_inspirations,
'Write inspirations': write_inspirations, 'Write inspirations': m.write_inspirations,
'Check for duplicates': check_for_duplicates, 'Check for duplicates': m.check_for_duplicates,
'Check for orphans': m.check_for_orphans,
'Check for inspirations not listed': m.check_for_missing_inspirations_in_entries,
'Update inspirations from entries': m.update_inspired_entries,
'Read entries': m.read_entries
} }
osg_ui.run_simple_button_app('Maintenance inspirations', actions) osg_ui.run_simple_button_app('Maintenance inspirations', actions)

View File

@ -476,7 +476,7 @@ def write_developer_info(developers):
utils.write_text(developer_file, content) utils.write_text(developer_file, content)
def read_inspirations_info(): def read_inspirations():
""" """
Reads the info list about the games originals/inspirations from inspirations.md using the Lark parser grammar Reads the info list about the games originals/inspirations from inspirations.md using the Lark parser grammar
in grammar_listing.lark in grammar_listing.lark
@ -508,17 +508,23 @@ def read_inspirations_info():
duplicate_names = (name for name in names if names.count(name) > 1) duplicate_names = (name for name in names if names.count(name) > 1)
duplicate_names = set(duplicate_names) # to avoid duplicates in duplicate_names duplicate_names = set(duplicate_names) # to avoid duplicates in duplicate_names
if duplicate_names: if duplicate_names:
print('Warning: duplicate inspiration names: {}'.format(', '.join(duplicate_names))) raise RuntimeError('Duplicate inspiration names: {}'.format(', '.join(duplicate_names)))
# convert to dictionary
inspirations = {x['name']: x for x in inspirations}
return inspirations return inspirations
def write_inspirations_info(inspirations): def write_inspirations(inspirations):
""" """
Given an internal list of inspirations, write it into the inspirations file Given an internal dictionary of inspirations, write it into the inspirations file
:param inspirations: :param inspirations:
:return: :return:
""" """
# convert dictionary to list
inspirations = list(inspirations.values())
# comment # comment
content = '{}\n'.format(generic_comment_string) content = '{}\n'.format(generic_comment_string)
@ -544,7 +550,7 @@ def write_inspirations_info(inspirations):
field = field.capitalize() field = field.capitalize()
# lists get special treatment # lists get special treatment
if isinstance(value, list): if isinstance(value, list):
value.sort(key=str.casefold) value.sort(key=str.casefold) # sorted alphabetically
value = [x if not ',' in x else '"{}"'.format(x) for x in value] # surround those with a comma with quotation marks value = [x if not ',' in x else '"{}"'.format(x) for x in value] # surround those with a comma with quotation marks
value = ', '.join(value) value = ', '.join(value)
content += '- {}: {}\n'.format(field, value) content += '- {}: {}\n'.format(field, value)

View File

@ -2,9 +2,17 @@
Simple UI helpers with PyQt Simple UI helpers with PyQt
""" """
import sys
from PyQt5 import QtCore, QtGui, QtWidgets from PyQt5 import QtCore, QtGui, QtWidgets
def exception_hook(type, value, traceback):
"""
Use sys.__excepthook__, the standard hook.
"""
sys.__excepthook__(type, value, traceback)
def run_simple_button_app(title, actions): def run_simple_button_app(title, actions):
""" """
@ -12,6 +20,9 @@ def run_simple_button_app(title, actions):
:param actions: :param actions:
:return: :return:
""" """
# fix PyQt5 eating exceptions (see http://stackoverflow.com/q/14493081/1536976)
sys.excepthook = exception_hook
# create app # create app
app = QtWidgets.QApplication([]) app = QtWidgets.QApplication([])

View File

@ -1,7 +1,7 @@
# F.LF # F.LF
- Home: http://project-f.github.io/, https://web.archive.org/web/20190629133825/https://www.projectf.hk/F.LF/ - Home: http://project-f.github.io/, https://web.archive.org/web/20190629133825/https://www.projectf.hk/F.LF/
- Inspirations: Little Fighter 2 (http://lf2.net/) - Inspirations: Little Fighter 2
- State: mature - State: mature
- Platform: Web - Platform: Web
- Keywords: framework, clone, content commercial, requires original content - Keywords: framework, clone, content commercial, requires original content

View File

@ -1,7 +1,7 @@
# FreeRCT # FreeRCT
- Home: https://web.archive.org/web/*/http://www.freerct.org/, http://freerct.blogspot.com/ - Home: https://web.archive.org/web/*/http://www.freerct.org/, http://freerct.blogspot.com/
- Inspirations: RollerCoaster Tycoon (1 and 2) - Inspirations: RollerCoaster Tycoon, RollerCoaster Tycoon 2
- State: beta, inactive since 2016 - State: beta, inactive since 2016
- Keywords: strategy, remake - Keywords: strategy, remake
- Code repository: https://github.com/FreeRCT/FreeRCT.git - Code repository: https://github.com/FreeRCT/FreeRCT.git

View File

@ -1,7 +1,7 @@
# MiniPacman # MiniPacman
- Home: https://github.com/fastrgv/MiniPacman - Home: https://github.com/fastrgv/MiniPacman
- Inspirations: Pacman - Inspirations: Pac-Man
- State: mature - State: mature
- Download: https://github.com/fastrgv/MiniPacman/releases - Download: https://github.com/fastrgv/MiniPacman/releases
- Platform: Windows, Linux, macOS - Platform: Windows, Linux, macOS

View File

@ -1,7 +1,7 @@
# Not Pacman # Not Pacman
- Home: https://stabyourself.net/notpacman/ - Home: https://stabyourself.net/notpacman/
- Inspirations: Pacman - Inspirations: Pac-Man
- State: mature, inactive since 2013 - State: mature, inactive since 2013
- Platform: Windows, Linux, macOS - Platform: Windows, Linux, macOS
- Keywords: action, open content - Keywords: action, open content

View File

@ -9,7 +9,6 @@
- Code language: C, C++ - Code language: C, C++
- Code license: LGPL-2.1 - Code license: LGPL-2.1
Remake of Creatures.
Restarted in 2020. Restarted in 2020.
## Building ## Building

View File

@ -2,7 +2,7 @@
- Home: https://www.openttd.org/ - Home: https://www.openttd.org/
- Media: https://en.wikipedia.org/wiki/OpenTTD - Media: https://en.wikipedia.org/wiki/OpenTTD
- Inspirations: Transport Tycoon Deluxe - Inspirations: Transport Tycoon
- State: mature - State: mature
- Download: https://www.openttd.org/downloads/openttd-releases/latest.html - Download: https://www.openttd.org/downloads/openttd-releases/latest.html
- Keywords: simulation, can use original content, open content (swappable), remake - Keywords: simulation, can use original content, open content (swappable), remake

View File

@ -1,7 +1,7 @@
# Pacman # Pacman
- Home: https://github.com/ebuc99/pacman - Home: https://github.com/ebuc99/pacman
- Inspirations: Pacman - Inspirations: Pac-Man
- State: beta - State: beta
- Download: https://github.com/ebuc99/pacman/releases, https://github.com/ebuc99/pacman_win/releases - Download: https://github.com/ebuc99/pacman/releases, https://github.com/ebuc99/pacman_win/releases
- Keywords: arcade - Keywords: arcade

View File

@ -1,7 +1,6 @@
# Seven Kingdoms: Ancient Adversaries # Seven Kingdoms: Ancient Adversaries
- Home: https://7kfans.com/ - Home: https://7kfans.com/
- Media: <https://en.wikipedia.org/wiki/Seven_Kingdoms_(video_game)>
- Inspirations: Seven Kingdoms: Ancient Adversaries - Inspirations: Seven Kingdoms: Ancient Adversaries
- State: mature - State: mature
- Download: https://www.7kfans.com/wiki/index.php/Download, https://sourceforge.net/projects/skfans/files/, https://github.com/the3dfxdude/7kaa/releases - Download: https://www.7kfans.com/wiki/index.php/Download, https://sourceforge.net/projects/skfans/files/, https://github.com/the3dfxdude/7kaa/releases

View File

@ -1,5 +1,5 @@
[comment]: # (partly autogenerated content, edit with care, read the manual before) [comment]: # (partly autogenerated content, edit with care, read the manual before)
# Inspirations [510] # Inspirations [552]
## 1010! [1] ## 1010! [1]
@ -19,9 +19,9 @@
- Inspired entries: Open Horizon - Inspired entries: Open Horizon
- Media: https://en.wikipedia.org/wiki/Ace_Combat:_Assault_Horizon - Media: https://en.wikipedia.org/wiki/Ace_Combat:_Assault_Horizon
## Ace of Spades [2] ## Ace of Spades [3]
- Inspired entries: Iceball, OpenSpades - Inspired entries: BetterSpades, Iceball, OpenSpades
- Media: <https://en.wikipedia.org/wiki/Ace_of_Spades_(video_game)> - Media: <https://en.wikipedia.org/wiki/Ace_of_Spades_(video_game)>
## Achtung, die Kurve! [4] ## Achtung, die Kurve! [4]
@ -49,6 +49,10 @@
- Inspired entries: Aklabeth - Inspired entries: Aklabeth
- Media: https://en.wikipedia.org/wiki/Akalabeth:_World_of_Doom - Media: https://en.wikipedia.org/wiki/Akalabeth:_World_of_Doom
## Albion [1]
- Inspired entries: SR
## Allegiance [1] ## Allegiance [1]
- Inspired entries: Free Allegiance - Inspired entries: Free Allegiance
@ -59,6 +63,10 @@
- Inspired entries: Unknown Horizons - Inspired entries: Unknown Horizons
- Media: https://en.wikipedia.org/wiki/Anno_(series) - Media: https://en.wikipedia.org/wiki/Anno_(series)
## Anno 1404 [1]
- Inspired entries: Goblin Camp
## Another World 2: Heart of the Alien [1] ## Another World 2: Heart of the Alien [1]
- Inspired entries: Heart of the Alien - Inspired entries: Heart of the Alien
@ -131,13 +139,13 @@
- Inspired entries: SDL Asylum - Inspired entries: SDL Asylum
## Atomic Bomberman [1] ## Atomic Bomberman [2]
- Inspired entries: Bombman - Inspired entries: BomberClone, Bombman
## Atomix [4] ## Atomix [5]
- Inspired entries: Atomiks, Atomix, KAtomic, WAtomic - Inspired entries: Atomiks, Atomix, KAtomic, LMarbles, WAtomic
## Awesomenauts [1] ## Awesomenauts [1]
@ -163,9 +171,9 @@
- Inspired entries: Brutal Chess - Inspired entries: Brutal Chess
## Battle City [2] ## Battle City [3]
- Inspired entries: Battle City, Tank: Zone of Death - Inspired entries: Battle City, Cattle Bity, Tank: Zone of Death
- Media: https://en.wikipedia.org/wiki/Battle_City - Media: https://en.wikipedia.org/wiki/Battle_City
## Battle Isle series [2] ## Battle Isle series [2]
@ -254,9 +262,9 @@
- Inspired entries: bratwurst - Inspired entries: bratwurst
## Breakout [2] ## Breakout [4]
- Inspired entries: Breakout-VR, BRIQUOLO - Inspired entries: Breakout-VR, BRIQUOLO, LBreakoutHD, SDL-Ball
## Bubble Bobble [1] ## Bubble Bobble [1]
@ -311,9 +319,9 @@
- Inspired entries: Thunder&Lightning - Inspired entries: Thunder&Lightning
## Castle of the Winds [1] ## Castle of the Winds [2]
- Inspired entries: Castle of the Winds in Elm - Inspired entries: Castle of the Winds, Castle of the Winds in Elm
## Cataclysm [1] ## Cataclysm [1]
@ -379,17 +387,17 @@
- Inspired entries: Colobot: Gold Edition - Inspired entries: Colobot: Gold Edition
## Command & Conquer [1] ## Command & Conquer [2]
- Inspired entries: OpenRA - Inspired entries: OpenRA, Vanilla-Conquer
## Command & Conquer: Generals [2] ## Command & Conquer: Generals [2]
- Inspired entries: OpenSAGE, Thyme - Inspired entries: OpenSAGE, Thyme
## Command & Conquer: Red Alert [2] ## Command & Conquer: Red Alert [3]
- Inspired entries: Chronoshift, OpenRA - Inspired entries: Chronoshift, OpenRA, Vanilla-Conquer
## Commander Keen Series [4] ## Commander Keen Series [4]
@ -437,7 +445,7 @@
## Creatures [1] ## Creatures [1]
- Inspired entries: Open Creatures - Inspired entries: openc2e
## Crimsonland [2] ## Crimsonland [2]
@ -475,9 +483,13 @@
- Inspired entries: Performous, StepMania - Inspired entries: Performous, StepMania
## Death Rally [1] ## Dark Forces [1]
- Inspired entries: Dreerally - Inspired entries: The Force Engine
## Death Rally [2]
- Inspired entries: dRally, Dreerally
- Media: https://en.wikipedia.org/wiki/Death_Rally - Media: https://en.wikipedia.org/wiki/Death_Rally
## Deathchase [1] ## Deathchase [1]
@ -534,9 +546,9 @@
- Inspired entries: OpenDominion - Inspired entries: OpenDominion
## Doom [15] ## Doom [16]
- Inspired entries: Chocolate Doom, Classic RBDoom 3 BFG, Do It Yourself Doom With SDL, Doom Legacy, DOOM Retro, DOOM-iOS, Doomsday Engine, Freedoom, GZDoom, Mocha Doom, Odamex, PrBoom+, SLADE, The Eternity Engine, ZDoom - Inspired entries: Chocolate Doom, Classic RBDoom 3 BFG, Do It Yourself Doom With SDL, DOOM, Doom Legacy, DOOM Retro, DOOM-iOS, Doomsday Engine, Freedoom, GZDoom, Mocha Doom, Odamex, PrBoom+, SLADE, The Eternity Engine, ZDoom
## Doom 3 [3] ## Doom 3 [3]
@ -554,6 +566,14 @@
- Inspired entries: OpenBOR - Inspired entries: OpenBOR
## Dragon Wars [1]
- Inspired entries: Turn of War
## Driver 2 [1]
- Inspired entries: REDriver2
## Drugwars [2] ## Drugwars [2]
- Inspired entries: Dope Wars, Prescription Wars - Inspired entries: Dope Wars, Prescription Wars
@ -562,9 +582,9 @@
- Inspired entries: Dave Gnukem, Freenukum - Inspired entries: Dave Gnukem, Freenukum
## Duke Nukem 3D [6] ## Duke Nukem 3D [8]
- Inspired entries: Chocolate Duke3D, Duke3D, Duke3d_w32, EDuke32, JFDuke3D, xDuke - Inspired entries: Chocolate Duke3D, Duke3D, Duke3d_w32, DukeGDX, EDuke32, JFDuke3D, Rednukem, xDuke
## Duke Nukem II [1] ## Duke Nukem II [1]
@ -578,18 +598,18 @@
- Inspired entries: OpenRA - Inspired entries: OpenRA
## Dungeon Keeper [1] ## Dungeon Keeper [2]
- Inspired entries: OpenDungeons - Inspired entries: Goblin Camp, OpenDungeons
## Dungeon Keeper 2 [2] ## Dungeon Keeper 2 [2]
- Inspired entries: KeeperRL, OpenKeeper - Inspired entries: KeeperRL, OpenKeeper
- Media: https://en.wikipedia.org/wiki/Dungeon_Keeper_2 - Media: https://en.wikipedia.org/wiki/Dungeon_Keeper_2
## Dwarf Fortress [1] ## Dwarf Fortress [3]
- Inspired entries: Veloren - Inspired entries: DwarfCorp, Goblin Camp, Veloren
## E.T. the Extra-Terrestrial [1] ## E.T. the Extra-Terrestrial [1]
@ -620,6 +640,14 @@
- Inspired entries: Pioneer - Inspired entries: Pioneer
## Elona [1]
- Inspired entries: ElonaFoobar
## Empire [1]
- Inspired entries: Xconq
## Enduro [1] ## Enduro [1]
- Inspired entries: Enduro tribute - Inspired entries: Enduro tribute
@ -632,9 +660,9 @@
- Inspired entries: ResidualVM - Inspired entries: ResidualVM
## Escape Velocity [2] ## Escape Velocity [3]
- Inspired entries: Endless Sky, Naev - Inspired entries: Endless Sky, Naev, Nox Imperii
## F-1 Spirit [1] ## F-1 Spirit [1]
@ -674,13 +702,17 @@
- Inspired entries: OpenFire - Inspired entries: OpenFire
## Five Nights at Freddy's [1]
- Inspired entries: OpenFNaF
## Flag Catcher [1] ## Flag Catcher [1]
- Inspired entries: Gift Grabber - Inspired entries: Gift Grabber
## Flappy Bird [4] ## Flappy Bird [5]
- Inspired entries: Clumsy Bird, CrappyBird, Flappy Cow, Hocoslamfy - Inspired entries: Clumsy Bird, CrappyBird, Flappy Cow, Floppy Birb, Hocoslamfy
## Flying Shark [1] ## Flying Shark [1]
@ -698,11 +730,19 @@
- Inspired entries: Forsaken - Inspired entries: Forsaken
## Freeciv [1]
- Inspired entries: Freeciv-web
## Freelancer [1] ## Freelancer [1]
- Inspired entries: Librelancer - Inspired entries: Librelancer
- Media: <https://en.wikipedia.org/wiki/Freelancer_(video_game)> - Media: <https://en.wikipedia.org/wiki/Freelancer_(video_game)>
## Freeserf [1]
- Inspired entries: Freeserf.net
## Frets on Fire [1] ## Frets on Fire [1]
- Inspired entries: Frets on Fire X - Inspired entries: Frets on Fire X
@ -910,6 +950,10 @@
- Inspired entries: Cubosphere - Inspired entries: Cubosphere
## Kye [2]
- Inspired entries: Python Kye, Xye
## Ladder [2] ## Ladder [2]
- Inspired entries: ladder, Ladder - Inspired entries: ladder, Ladder
@ -954,6 +998,7 @@
## Little Fighter 2 [1] ## Little Fighter 2 [1]
- Inspired entries: F.LF - Inspired entries: F.LF
- Media: http://lf2.net/
## Lode Runner [2] ## Lode Runner [2]
@ -1000,6 +1045,14 @@
- Inspired entries: Krystal Drop - Inspired entries: Krystal Drop
## Magus [1]
- Inspired entries: Rot Magus
## Mah-Jong [1]
- Inspired entries: Mah-Jong
## Marathon [1] ## Marathon [1]
- Inspired entries: Aleph One - Inspired entries: Aleph One
@ -1082,6 +1135,10 @@
- Inspired entries: Dust Racing 2D, Microracers, Yorg - Inspired entries: Dust Racing 2D, Microracers, Yorg
## micropolis [1]
- Inspired entries: Divercity
## Microprose Falcon 4.0 Combat Simulator [1] ## Microprose Falcon 4.0 Combat Simulator [1]
- Inspired entries: FreeFalcon - Inspired entries: FreeFalcon
@ -1098,22 +1155,38 @@
- Inspired entries: OpenMC2 - Inspired entries: OpenMC2
## Might and Magic VI: The Mandate of Heaven [1]
- Inspired entries: World of Might and Magic
## Might and Magic VII: For Blood and Honor [1]
- Inspired entries: World of Might and Magic
## Might and Magic VIII: Day of the Destroyer [1]
- Inspired entries: World of Might and Magic
## Millipede [1] ## Millipede [1]
- Inspired entries: Monsters and Mushrooms - Inspired entries: Monsters and Mushrooms
## Minecraft [13] ## Minecraft [15]
- Inspired entries: Chunk Stories, Craft, Digbuild, Gnomescroll, Hematite, Manic Digger, MineCraft-One-Week-Challenge, Minetest, pycraft, Terasology, TrueCraft, Veloren, Voxelands - Inspired entries: Chunk Stories, Craft, Digbuild, DwarfCorp, Gnomescroll, Hematite, Manic Digger, MineCraft-One-Week-Challenge, minecraft-weekend, Minetest, pycraft, Terasology, TrueCraft, Veloren, Voxelands
## Minesweeper [4] ## Minesweeper [5]
- Inspired entries: Mines, Minesweeper (in C), Minesweeper.Zone, proxx - Inspired entries: Isometric-Minesweeper, Mines, Minesweeper (in C), Minesweeper.Zone, proxx
## Missile Command [2] ## Missile Command [2]
- Inspired entries: ICBM3D, Penguin Command - Inspired entries: ICBM3D, Penguin Command
## Moai [1]
- Inspired entries: adventure engine
## moon-patrol [1] ## moon-patrol [1]
- Inspired entries: Moon-buggy - Inspired entries: Moon-buggy
@ -1210,14 +1283,18 @@
- Inspired entries: OpenOMF - Inspired entries: OpenOMF
## Osu! Tatakae! Ouendan [1] ## Osu! Tatakae! Ouendan [2]
- Inspired entries: osu! - Inspired entries: opsu!, osu!
## Oubliette [1] ## Oubliette [1]
- Inspired entries: Liberal Crime Squad - Inspired entries: Liberal Crime Squad
## Outlaws [1]
- Inspired entries: The Force Engine
## Outpost [1] ## Outpost [1]
- Inspired entries: Outpost HD - Inspired entries: Outpost HD
@ -1230,13 +1307,10 @@
- Inspired entries: Enigma - Inspired entries: Enigma
## Pac-Man [5] ## Pac-Man [8]
- Inspired entries: EnTT Pacman, Ghostly, HTML5 Pacman, Pac Go, pacman-canvas - Inspired entries: EnTT Pacman, Ghostly, HTML5 Pacman, MiniPacman, Not Pacman, Pac Go, Pacman, pacman-canvas
- Media: https://en.wikipedia.org/wiki/Pac-Man
## Pacman [1]
- Inspired entries: MiniPacman
## Panzer General [2] ## Panzer General [2]
@ -1268,6 +1342,10 @@
- Inspired entries: OPMon, Tuxemon - Inspired entries: OPMon, Tuxemon
## Pong [1]
- Inspired entries: PSY PONG 3D
## Portal [1] ## Portal [1]
- Inspired entries: glPortal - Inspired entries: glPortal
@ -1280,9 +1358,13 @@
- Inspired entries: sandspiel, The Powder Toy - Inspired entries: sandspiel, The Powder Toy
## Powerslave [1] ## Powermonger [1]
- Inspired entries: Powerslave EX - Inspired entries: Battles of Antargis
## Powerslave [3]
- Inspired entries: PCExhumed, Powerslave EX, PowerslaveGDX
## Powerslide [1] ## Powerslide [1]
@ -1292,6 +1374,10 @@
- Inspired entries: FreePrince, Mininim, SDLPoP - Inspired entries: FreePrince, Mininim, SDLPoP
## Prince of Persia 2 [1]
- Inspired entries: Prince-Monogame
## Progress Quest [2] ## Progress Quest [2]
- Inspired entries: pq2, progress-quest - Inspired entries: pq2, progress-quest
@ -1320,9 +1406,9 @@
- Inspired entries: Jake2, Yamagi Quake II - Inspired entries: Jake2, Yamagi Quake II
## Quake 3 [4] ## Quake 3 [5]
- Inspired entries: FQuake3, ioquake3, OpenArena, QuakeJS - Inspired entries: FQuake3, ioquake3, OpenArena, Quake3e, QuakeJS
## Railroad Tycoon [1] ## Railroad Tycoon [1]
@ -1334,11 +1420,11 @@
## RARS [1] ## RARS [1]
- Inspired entries: "The Open Racing Car Simulator, TORCS" - Inspired entries: "TORCS, The Open Racing Car Simulator"
## Redneck Rampage [1] ## Redneck Rampage [3]
- Inspired entries: erampage - Inspired entries: erampage, RedneckGDX, Rednukem
## Rescue! [1] ## Rescue! [1]
@ -1365,6 +1451,10 @@
- Inspired entries: Rise of the Triad for Linux - Inspired entries: Rise of the Triad for Linux
## Risk [2]
- Inspired entries: Domination, Tenes Empanadas Graciela
## Rodent's Revenge [1] ## Rodent's Revenge [1]
- Inspired entries: Open Rodent's Revenge - Inspired entries: Open Rodent's Revenge
@ -1373,9 +1463,9 @@
- Inspired entries: FreeRCT, OpenRCT2 - Inspired entries: FreeRCT, OpenRCT2
## RollerCoaster Tycoon 2 [1] ## RollerCoaster Tycoon 2 [2]
- Inspired entries: OpenRCT2 - Inspired entries: FreeRCT, OpenRCT2
## RPG Maker [3] ## RPG Maker [3]
@ -1406,9 +1496,18 @@
- Inspired entries: One Way To Go, sensitive-js - Inspired entries: One Way To Go, sensitive-js
## Seven Kingdoms [1] ## Septerra Core: Legacy of the Creator [1]
- Inspired entries: SR
## Settlers [1]
- Inspired entries: Battles of Antargis
## Seven Kingdoms: Ancient Adversaries [1]
- Inspired entries: Seven Kingdoms: Ancient Adversaries - Inspired entries: Seven Kingdoms: Ancient Adversaries
- Media: <https://en.wikipedia.org/wiki/Seven_Kingdoms_(video_game)>
## sfxr [1] ## sfxr [1]
@ -1429,14 +1528,17 @@
## Ship Simulator 2006 [1] ## Ship Simulator 2006 [1]
- Inspired entries: Bridge Command - Inspired entries: Bridge Command
- Media: <https://en.wikipedia.org/wiki/Ship_Simulator_(video_game)>
## Ship Simulator 2008 [1] ## Ship Simulator 2008 [1]
- Inspired entries: Bridge Command - Inspired entries: Bridge Command
- Media: <https://en.wikipedia.org/wiki/Ship_Simulator_(video_game)>
## Ship Simulator Extremes [1] ## Ship Simulator Extremes [1]
- Inspired entries: Bridge Command - Inspired entries: Bridge Command
- Media: <https://en.wikipedia.org/wiki/Ship_Simulator_(video_game)>
## Shobon Action [1] ## Shobon Action [1]
@ -1466,9 +1568,9 @@
- Inspired entries: Danger from the Deep - Inspired entries: Danger from the Deep
## SimCity [8] ## SimCity [9]
- Inspired entries: 3d.city, Citybound, Cytopia, Lincity, LinCity-NG, Micropolis, micropolisJS, OpenCity - Inspired entries: 3d.city, Citybound, Cytopia, Divercity, Lincity, LinCity-NG, Micropolis, micropolisJS, OpenCity
- Media: <https://en.wikipedia.org/wiki/SimCity_(1989_video_game)> - Media: <https://en.wikipedia.org/wiki/SimCity_(1989_video_game)>
## SimCity 2000 [1] ## SimCity 2000 [1]
@ -1512,18 +1614,22 @@
- Inspired entries: Slot-Racers - Inspired entries: Slot-Racers
## Snake [2] ## Snake [5]
- Inspired entries: Gusty's Serpents, snake - Inspired entries: Armagetron Advanced, GLtron, Gusty's Serpents, KSnakeDuel, snake
## Sokoban [1] ## Sokoban [7]
- Inspired entries: CavePacker - Inspired entries: AdaGate, CavePacker, GJID, JSoko, Simple Sokoban, SokoSolve, Xye
## Solar Fox [1] ## Solar Fox [1]
- Inspired entries: SolarWolf - Inspired entries: SolarWolf
## Solomon's Key [1]
- Inspired entries: OpenSolomonsKey
## Sonic the Hedgehog [2] ## Sonic the Hedgehog [2]
- Inspired entries: Open Surge, Sonic Robo Blast 2 - Inspired entries: Open Surge, Sonic Robo Blast 2
@ -1580,18 +1686,18 @@
- Inspired entries: OpenSWE1R - Inspired entries: OpenSWE1R
## Star Wars Jedi Knight II: Jedi Outcast [1] ## Star Wars Jedi Knight II: Jedi Outcast [2]
- Inspired entries: JediOutcastLinux - Inspired entries: JediOutcastLinux, OpenJK
## Star Wars Jedi Knight: Dark Forces II [1] ## Star Wars Jedi Knight: Dark Forces II [1]
- Inspired entries: Gorc - Inspired entries: Gorc
- Media: https://en.wikipedia.org/wiki/Star_Wars_Jedi_Knight:_Dark_Forces_II - Media: https://en.wikipedia.org/wiki/Star_Wars_Jedi_Knight:_Dark_Forces_II
## Star Wars Jedi Knight: Jedi Academy [1] ## Star Wars Jedi Knight: Jedi Academy [2]
- Inspired entries: OpenJK - Inspired entries: JediAcademyLinux, OpenJK
- Media: https://en.wikipedia.org/wiki/Star_Wars_Jedi_Knight:_Jedi_Academy - Media: https://en.wikipedia.org/wiki/Star_Wars_Jedi_Knight:_Jedi_Academy
## Star Wars: Galactic Battlegrounds [1] ## Star Wars: Galactic Battlegrounds [1]
@ -1646,9 +1752,9 @@
- Inspired entries: sundog, SunDog Resurrection - Inspired entries: sundog, SunDog Resurrection
## Supaplex [3] ## Supaplex [4]
- Inspired entries: Rocks'n'Diamonds, splexhd, Supaxl - Inspired entries: OpenSupaplex, Rocks'n'Diamonds, splexhd, Supaxl
## Super Cars [1] ## Super Cars [1]
@ -1662,13 +1768,13 @@
- Inspired entries: Open Hexagon - Inspired entries: Open Hexagon
## Super Mario [4] ## Super Mario [5]
- Inspired entries: Mario Objects, Mega Mario, SuperTux, uMario - Inspired entries: Mario Objects, Mega Mario, ReTux, SuperTux, uMario
## Super Methane Brothers [2] ## Super Methane Brothers [2]
- Inspired entries: Super Methane Brothers, super-methane-brothers-gx - Inspired entries: Super Methane Brothers, Super Methane Brothers for Wii and GameCube
## Super Metroid [1] ## Super Metroid [1]
@ -1679,11 +1785,15 @@
- Inspired entries: irrlamb, Neverball, Nuncabola, Veraball - Inspired entries: irrlamb, Neverball, Nuncabola, Veraball
- Media: <https://en.wikipedia.org/wiki/Super_Monkey_Ball_(video_game)> - Media: <https://en.wikipedia.org/wiki/Super_Monkey_Ball_(video_game)>
## Super Smash Bros. [2] ## Super Smash Bros. [3]
- Inspired entries: Super Tilt Bro, TUSSLE - Inspired entries: Smash, Super Tilt Bro, TUSSLE
- Media: https://en.wikipedia.org/wiki/Super_Smash_Bros. - Media: https://en.wikipedia.org/wiki/Super_Smash_Bros.
## Super ZZT [3]
- Inspired entries: Reconstruction of Super ZZT, Roton, Zeta
## Supreme Commander [1] ## Supreme Commander [1]
- Inspired entries: Zero-K - Inspired entries: Zero-K
@ -1720,6 +1830,10 @@
- Inspired entries: Gang Garrison 2, Open Fortress - Inspired entries: Gang Garrison 2, Open Fortress
## TekWar [1]
- Inspired entries: TekwarGDX
## Tempest [1] ## Tempest [1]
- Inspired entries: Arashi-JS - Inspired entries: Arashi-JS
@ -1733,9 +1847,13 @@
- Inspired entries: OpenGL Test Drive Remake - Inspired entries: OpenGL Test Drive Remake
## Tetris [9] ## TetraVex [1]
- Inspired entries: 4D-TRIS, Hextris, Just another Tetris™ clone, NullpoMino, OpenBlok, Quadrapassel, Spludlow Tetris, Tetris (in C and NCURSES), vitetris - Inspired entries: TetraVex
## Tetris [16]
- Inspired entries: 2H4U, 4D-TRIS, Bastet, Cuyo, Gottet, Hextris, Just another Tetris™ clone, LTris, NullpoMino, OpenBlok, Quadrapassel, Spludlow Tetris, T^3, Tetris (in C and NCURSES), vitetris, Xultris
- Media: https://en.wikipedia.org/wiki/Tetris - Media: https://en.wikipedia.org/wiki/Tetris
## Tetris Attack [4] ## Tetris Attack [4]
@ -1754,6 +1872,10 @@
- Inspired entries: The Castles of Dr. Creep - Inspired entries: The Castles of Dr. Creep
## The Clans [1]
- Inspired entries: The Clans
## The Clue! [1] ## The Clue! [1]
- Inspired entries: Der Clou! - Inspired entries: Der Clou!
@ -1792,9 +1914,9 @@
- Inspired entries: The-Trail - Inspired entries: The-Trail
## The Settlers [1] ## The Settlers [2]
- Inspired entries: Freeserf - Inspired entries: Freeserf, Freeserf.net
## The Settlers II [2] ## The Settlers II [2]
@ -1867,6 +1989,7 @@
## Transport Tycoon [3] ## Transport Tycoon [3]
- Inspired entries: OpenTTD, Simutrans, TTDPatch - Inspired entries: OpenTTD, Simutrans, TTDPatch
- Media: https://en.wikipedia.org/wiki/Transport_Tycoon
## Tremulous [1] ## Tremulous [1]
@ -1914,7 +2037,7 @@
- Inspired entries: Anteform, Minima - Inspired entries: Anteform, Minima
## Ultima IV [1] ## Ultima IV: Quest of the Avatar [1]
- Inspired entries: xu4 - Inspired entries: xu4
@ -1927,19 +2050,31 @@
- Inspired entries: Haxima - Inspired entries: Haxima
## Ultima VI [1] ## Ultima Underworld [1]
- Inspired entries: UnderworldExporter
## Ultima Underworld 2: Labyrinth of Worlds [1]
- Inspired entries: Labyrinth of Worlds
## Ultima Underworld II: Labyrinth of Worlds [1]
- Inspired entries: UnderworldExporter
## Ultima V: Warriors of Destiny [1]
- Inspired entries: Ultima 5 Redux
## Ultima VI: The False Prophet [1]
- Inspired entries: Nuvie - Inspired entries: Nuvie
## Ultima VII [1]
- Inspired entries: Exult
## Ultima VII: The Black Gate [1] ## Ultima VII: The Black Gate [1]
- Inspired entries: Exult - Inspired entries: Exult
## Ultima VIII [1] ## Ultima VIII: Pagan [1]
- Inspired entries: Pentagram - Inspired entries: Pentagram
@ -1951,6 +2086,10 @@
- Inspired entries: Vocaluxe - Inspired entries: Vocaluxe
## Undertale [1]
- Inspired entries: UndertaleModTool
## Uninvited [1] ## Uninvited [1]
- Inspired entries: uninvited - Inspired entries: uninvited
@ -1963,6 +2102,10 @@
- Inspired entries: Alimer - Inspired entries: Alimer
## V-Wing [1]
- Inspired entries: Luola
## Visual Pinball [1] ## Visual Pinball [1]
- Inspired entries: Visual Pinball - Inspired entries: Visual Pinball
@ -1971,26 +2114,38 @@
- Inspired entries: Train - Inspired entries: Train
## VVVVVV [1] ## VVVVVV [2]
- Inspired entries: WWW - Inspired entries: VVVVVV, WWW
- Media: https://en.wikipedia.org/wiki/VVVVVV - Media: https://en.wikipedia.org/wiki/VVVVVV
## Warcraft [1]
- Inspired entries: Battles of Antargis
## Warcraft II [2] ## Warcraft II [2]
- Inspired entries: Dark Oberon, Wargus - Inspired entries: Dark Oberon, Wargus
## Warcraft: Orcs & Humans [1] ## Warcraft: Orcs & Humans [3]
- Inspired entries: warcraft-remake - Inspired entries: SR, War1, warcraft-remake
## Wargamer:Napoleon 1813 [1]
- Inspired entries: Wargamer
## Wario Land 3 [1] ## Wario Land 3 [1]
- Inspired entries: Wario-Land-3 - Inspired entries: Wario-Land-3
## Warlords II [1] ## WarioWare [1]
- Inspired entries: FreeLords - Inspired entries: Librerama
## Warlords II [2]
- Inspired entries: FreeLords, LordsAWar!
- Media: <https://en.wikipedia.org/wiki/Warlords_(game_series)> - Media: <https://en.wikipedia.org/wiki/Warlords_(game_series)>
## Warrior Kings [1] ## Warrior Kings [1]
@ -2025,6 +2180,10 @@
- Inspired entries: Ecksdee, H-Craft Championship, HexGL, The Rush - Inspired entries: Ecksdee, H-Craft Championship, HexGL, The Rush
## Witchaven [1]
- Inspired entries: WitchavenGDX
## Wizard of Wor [1] ## Wizard of Wor [1]
- Inspired entries: KnightOfWor - Inspired entries: KnightOfWor
@ -2034,9 +2193,9 @@
- Inspired entries: Wizardry Legacy - Inspired entries: Wizardry Legacy
## Wolfenstein 3D [1] ## Wolfenstein 3D [2]
- Inspired entries: ECWolf - Inspired entries: ECWolf, Wolf3dX
## Wolfenstein: Enemy Territory [1] ## Wolfenstein: Enemy Territory [1]
@ -2046,6 +2205,10 @@
- Inspired entries: Nuvie - Inspired entries: Nuvie
## Worms [3]
- Inspired entries: Atomic Tanks, GUSANOS, OpenLieroX
## Worms Series [2] ## Worms Series [2]
- Inspired entries: Hedgewars, WarMUX - Inspired entries: Hedgewars, WarMUX
@ -2054,13 +2217,17 @@
- Inspired entries: Open Apocalypse, OpenXcom, UFO2000, UFO: Alien Invasion, X-Force: Fight For Destiny, Xenowar - Inspired entries: Open Apocalypse, OpenXcom, UFO2000, UFO: Alien Invasion, X-Force: Fight For Destiny, Xenowar
## X-COM: Terror from the Deep [6] ## X-COM: Terror from the Deep [7]
- Inspired entries: Open Apocalypse, OpenXcom, UFO2000, UFO: Alien Invasion, X-Force: Fight For Destiny, Xenowar - Inspired entries: Open Apocalypse, OpenXcom, SR, UFO2000, UFO: Alien Invasion, X-Force: Fight For Destiny, Xenowar
## X-COM: UFO Defense [6] ## X-COM: UFO Defense [7]
- Inspired entries: Open Apocalypse, OpenXcom, UFO2000, UFO: Alien Invasion, X-Force: Fight For Destiny, Xenowar - Inspired entries: Open Apocalypse, OpenXcom, SR, UFO2000, UFO: Alien Invasion, X-Force: Fight For Destiny, Xenowar
## X-Moto [1]
- Inspired entries: Bloboats
## XKobo [1] ## XKobo [1]
@ -2078,6 +2245,14 @@
- Inspired entries: XPilot NG - Inspired entries: XPilot NG
## Yandere Simulator [1]
- Inspired entries: OpenYandere
## Yu-Gi-Oh! [1]
- Inspired entries: Heroes of Civilizations
## Z [2] ## Z [2]
- Inspired entries: Zed Online, Zod Engine - Inspired entries: Zed Online, Zod Engine