synchronization inspirations between entries and inspirations list
This commit is contained in:
parent
469f9fa690
commit
cd67ffe536
@ -2,92 +2,110 @@
|
||||
Maintenance of inspirations.md and synchronization with the inspirations in the entries.
|
||||
"""
|
||||
|
||||
import time
|
||||
from utils import constants as c, utils, osg, osg_ui
|
||||
from utils import osg_wikipedia
|
||||
from utils import osg, osg_ui
|
||||
|
||||
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:
|
||||
:return:
|
||||
"""
|
||||
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 __init__(self):
|
||||
self.inspirations = None
|
||||
self.entries = None
|
||||
|
||||
def test():
|
||||
# assemble info
|
||||
t0 = time.process_time()
|
||||
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 read_inspirations(self):
|
||||
self.inspirations = osg.read_inspirations()
|
||||
print('{} inspirations read'.format(len(self.inspirations)))
|
||||
|
||||
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
|
||||
entries_inspirations = {}
|
||||
for entry in entries:
|
||||
entry_name = entry['name']
|
||||
keywords = entry['keywords']
|
||||
entry_inspirations = [x for x in keywords if x.startswith('inspired by')]
|
||||
if entry_inspirations:
|
||||
entry_inspirations = entry_inspirations[0][len('inspired by'):]
|
||||
entry_inspirations = entry_inspirations.split('+')
|
||||
entry_inspirations = [x.strip() for x in entry_inspirations]
|
||||
for entry_inspiration in entry_inspirations:
|
||||
if entry_inspiration in entries_inspirations:
|
||||
entries_inspirations[entry_inspiration].append(entry_name)
|
||||
def check_for_duplicates(self):
|
||||
if not self.inspirations:
|
||||
print('inspirations not yet loaded')
|
||||
return
|
||||
inspiration_names = list(self.inspirations.keys())
|
||||
for index, name in enumerate(inspiration_names):
|
||||
for other_name in inspiration_names[index + 1:]:
|
||||
if any((name.startswith(x) and other_name.startswith(x) for x in valid_duplicates)):
|
||||
continue
|
||||
if osg.name_similarity(name, other_name) > 0.8:
|
||||
print(' {} - {} is similar'.format(name, other_name))
|
||||
print('duplicates checked')
|
||||
|
||||
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:
|
||||
entries_inspirations[entry_inspiration] = [ entry_name ]
|
||||
print('{} inspirations in the entries'.format(len(entries_inspirations)))
|
||||
entry = x[0]
|
||||
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
|
||||
inspiration_names = [x['name'] for x in inspirations]
|
||||
for inspiration, entries in entries_inspirations.items():
|
||||
if inspiration not in inspiration_names:
|
||||
print('new inspiration {} for games {}'.format(inspiration, ', '.join(entries)))
|
||||
similar_names = [x for x in inspiration_names if osg.name_similarity(inspiration, x) > 0.8]
|
||||
if similar_names:
|
||||
print(' similar names {}'.format(', '.join(similar_names)))
|
||||
def update_inspired_entries(self):
|
||||
if not self.inspirations:
|
||||
print('inspirations not yet loaded')
|
||||
return
|
||||
if not self.entries:
|
||||
print('entries not yet loaded')
|
||||
return
|
||||
# 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
|
||||
for index, name in enumerate(inspiration_names):
|
||||
if name not in entries_inspirations:
|
||||
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_entries(self):
|
||||
self.entries = osg.read_entries()
|
||||
print('{} entries read'.format(len(self.entries)))
|
||||
|
||||
|
||||
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__":
|
||||
inspirations = osg.read_inspirations_info()
|
||||
osg.write_inspirations_info(inspirations)
|
||||
|
||||
inspirations = None
|
||||
entries = None
|
||||
m = InspirationMaintainer()
|
||||
|
||||
actions = {
|
||||
'Read inspirations': read_inspirations,
|
||||
'Write inspirations': write_inspirations,
|
||||
'Check for duplicates': check_for_duplicates,
|
||||
'Read inspirations': m.read_inspirations,
|
||||
'Write inspirations': m.write_inspirations,
|
||||
'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)
|
||||
|
||||
|
||||
|
@ -476,7 +476,7 @@ def write_developer_info(developers):
|
||||
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
|
||||
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 = set(duplicate_names) # to avoid duplicates in 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
|
||||
|
||||
|
||||
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:
|
||||
:return:
|
||||
"""
|
||||
# convert dictionary to list
|
||||
inspirations = list(inspirations.values())
|
||||
|
||||
# comment
|
||||
content = '{}\n'.format(generic_comment_string)
|
||||
|
||||
@ -544,7 +550,7 @@ def write_inspirations_info(inspirations):
|
||||
field = field.capitalize()
|
||||
# lists get special treatment
|
||||
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 = ', '.join(value)
|
||||
content += '- {}: {}\n'.format(field, value)
|
||||
|
@ -2,9 +2,17 @@
|
||||
Simple UI helpers with PyQt
|
||||
"""
|
||||
|
||||
import sys
|
||||
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):
|
||||
"""
|
||||
|
||||
@ -12,6 +20,9 @@ def run_simple_button_app(title, actions):
|
||||
:param actions:
|
||||
:return:
|
||||
"""
|
||||
# fix PyQt5 eating exceptions (see http://stackoverflow.com/q/14493081/1536976)
|
||||
sys.excepthook = exception_hook
|
||||
|
||||
# create app
|
||||
app = QtWidgets.QApplication([])
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
# 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
|
||||
- Platform: Web
|
||||
- Keywords: framework, clone, content commercial, requires original content
|
||||
|
@ -1,7 +1,7 @@
|
||||
# FreeRCT
|
||||
|
||||
- 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
|
||||
- Keywords: strategy, remake
|
||||
- Code repository: https://github.com/FreeRCT/FreeRCT.git
|
||||
|
@ -1,7 +1,7 @@
|
||||
# MiniPacman
|
||||
|
||||
- Home: https://github.com/fastrgv/MiniPacman
|
||||
- Inspirations: Pacman
|
||||
- Inspirations: Pac-Man
|
||||
- State: mature
|
||||
- Download: https://github.com/fastrgv/MiniPacman/releases
|
||||
- Platform: Windows, Linux, macOS
|
||||
|
@ -1,7 +1,7 @@
|
||||
# Not Pacman
|
||||
|
||||
- Home: https://stabyourself.net/notpacman/
|
||||
- Inspirations: Pacman
|
||||
- Inspirations: Pac-Man
|
||||
- State: mature, inactive since 2013
|
||||
- Platform: Windows, Linux, macOS
|
||||
- Keywords: action, open content
|
||||
|
@ -9,7 +9,6 @@
|
||||
- Code language: C, C++
|
||||
- Code license: LGPL-2.1
|
||||
|
||||
Remake of Creatures.
|
||||
Restarted in 2020.
|
||||
|
||||
## Building
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
- Home: https://www.openttd.org/
|
||||
- Media: https://en.wikipedia.org/wiki/OpenTTD
|
||||
- Inspirations: Transport Tycoon Deluxe
|
||||
- Inspirations: Transport Tycoon
|
||||
- State: mature
|
||||
- Download: https://www.openttd.org/downloads/openttd-releases/latest.html
|
||||
- Keywords: simulation, can use original content, open content (swappable), remake
|
||||
|
@ -1,7 +1,7 @@
|
||||
# Pacman
|
||||
|
||||
- Home: https://github.com/ebuc99/pacman
|
||||
- Inspirations: Pacman
|
||||
- Inspirations: Pac-Man
|
||||
- State: beta
|
||||
- Download: https://github.com/ebuc99/pacman/releases, https://github.com/ebuc99/pacman_win/releases
|
||||
- Keywords: arcade
|
||||
|
@ -1,7 +1,6 @@
|
||||
# Seven Kingdoms: Ancient Adversaries
|
||||
|
||||
- Home: https://7kfans.com/
|
||||
- Media: <https://en.wikipedia.org/wiki/Seven_Kingdoms_(video_game)>
|
||||
- Inspirations: Seven Kingdoms: Ancient Adversaries
|
||||
- State: mature
|
||||
- Download: https://www.7kfans.com/wiki/index.php/Download, https://sourceforge.net/projects/skfans/files/, https://github.com/the3dfxdude/7kaa/releases
|
||||
|
363
inspirations.md
363
inspirations.md
@ -1,5 +1,5 @@
|
||||
[comment]: # (partly autogenerated content, edit with care, read the manual before)
|
||||
# Inspirations [510]
|
||||
# Inspirations [552]
|
||||
|
||||
## 1010! [1]
|
||||
|
||||
@ -19,9 +19,9 @@
|
||||
- Inspired entries: Open 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)>
|
||||
|
||||
## Achtung, die Kurve! [4]
|
||||
@ -49,6 +49,10 @@
|
||||
- Inspired entries: Aklabeth
|
||||
- Media: https://en.wikipedia.org/wiki/Akalabeth:_World_of_Doom
|
||||
|
||||
## Albion [1]
|
||||
|
||||
- Inspired entries: SR
|
||||
|
||||
## Allegiance [1]
|
||||
|
||||
- Inspired entries: Free Allegiance
|
||||
@ -59,6 +63,10 @@
|
||||
- Inspired entries: Unknown Horizons
|
||||
- Media: https://en.wikipedia.org/wiki/Anno_(series)
|
||||
|
||||
## Anno 1404 [1]
|
||||
|
||||
- Inspired entries: Goblin Camp
|
||||
|
||||
## Another World 2: Heart of the Alien [1]
|
||||
|
||||
- Inspired entries: Heart of the Alien
|
||||
@ -131,13 +139,13 @@
|
||||
|
||||
- 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]
|
||||
|
||||
@ -163,9 +171,9 @@
|
||||
|
||||
- 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
|
||||
|
||||
## Battle Isle series [2]
|
||||
@ -254,9 +262,9 @@
|
||||
|
||||
- Inspired entries: bratwurst
|
||||
|
||||
## Breakout [2]
|
||||
## Breakout [4]
|
||||
|
||||
- Inspired entries: Breakout-VR, BRIQUOLO
|
||||
- Inspired entries: Breakout-VR, BRIQUOLO, LBreakoutHD, SDL-Ball
|
||||
|
||||
## Bubble Bobble [1]
|
||||
|
||||
@ -311,9 +319,9 @@
|
||||
|
||||
- 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]
|
||||
|
||||
@ -379,17 +387,17 @@
|
||||
|
||||
- Inspired entries: Colobot: Gold Edition
|
||||
|
||||
## Command & Conquer [1]
|
||||
## Command & Conquer [2]
|
||||
|
||||
- Inspired entries: OpenRA
|
||||
- Inspired entries: OpenRA, Vanilla-Conquer
|
||||
|
||||
## Command & Conquer: Generals [2]
|
||||
|
||||
- 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]
|
||||
|
||||
@ -437,7 +445,7 @@
|
||||
|
||||
## Creatures [1]
|
||||
|
||||
- Inspired entries: Open Creatures
|
||||
- Inspired entries: openc2e
|
||||
|
||||
## Crimsonland [2]
|
||||
|
||||
@ -475,9 +483,13 @@
|
||||
|
||||
- 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
|
||||
|
||||
## Deathchase [1]
|
||||
@ -534,9 +546,9 @@
|
||||
|
||||
- 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]
|
||||
|
||||
@ -554,6 +566,14 @@
|
||||
|
||||
- Inspired entries: OpenBOR
|
||||
|
||||
## Dragon Wars [1]
|
||||
|
||||
- Inspired entries: Turn of War
|
||||
|
||||
## Driver 2 [1]
|
||||
|
||||
- Inspired entries: REDriver2
|
||||
|
||||
## Drugwars [2]
|
||||
|
||||
- Inspired entries: Dope Wars, Prescription Wars
|
||||
@ -562,9 +582,9 @@
|
||||
|
||||
- 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]
|
||||
|
||||
@ -578,18 +598,18 @@
|
||||
|
||||
- Inspired entries: OpenRA
|
||||
|
||||
## Dungeon Keeper [1]
|
||||
## Dungeon Keeper [2]
|
||||
|
||||
- Inspired entries: OpenDungeons
|
||||
- Inspired entries: Goblin Camp, OpenDungeons
|
||||
|
||||
## Dungeon Keeper 2 [2]
|
||||
|
||||
- Inspired entries: KeeperRL, OpenKeeper
|
||||
- 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]
|
||||
|
||||
@ -620,6 +640,14 @@
|
||||
|
||||
- Inspired entries: Pioneer
|
||||
|
||||
## Elona [1]
|
||||
|
||||
- Inspired entries: ElonaFoobar
|
||||
|
||||
## Empire [1]
|
||||
|
||||
- Inspired entries: Xconq
|
||||
|
||||
## Enduro [1]
|
||||
|
||||
- Inspired entries: Enduro tribute
|
||||
@ -632,9 +660,9 @@
|
||||
|
||||
- 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]
|
||||
|
||||
@ -674,13 +702,17 @@
|
||||
|
||||
- Inspired entries: OpenFire
|
||||
|
||||
## Five Nights at Freddy's [1]
|
||||
|
||||
- Inspired entries: OpenFNaF
|
||||
|
||||
## Flag Catcher [1]
|
||||
|
||||
- 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]
|
||||
|
||||
@ -698,11 +730,19 @@
|
||||
|
||||
- Inspired entries: Forsaken
|
||||
|
||||
## Freeciv [1]
|
||||
|
||||
- Inspired entries: Freeciv-web
|
||||
|
||||
## Freelancer [1]
|
||||
|
||||
- Inspired entries: Librelancer
|
||||
- Media: <https://en.wikipedia.org/wiki/Freelancer_(video_game)>
|
||||
|
||||
## Freeserf [1]
|
||||
|
||||
- Inspired entries: Freeserf.net
|
||||
|
||||
## Frets on Fire [1]
|
||||
|
||||
- Inspired entries: Frets on Fire X
|
||||
@ -910,6 +950,10 @@
|
||||
|
||||
- Inspired entries: Cubosphere
|
||||
|
||||
## Kye [2]
|
||||
|
||||
- Inspired entries: Python Kye, Xye
|
||||
|
||||
## Ladder [2]
|
||||
|
||||
- Inspired entries: ladder, Ladder
|
||||
@ -954,6 +998,7 @@
|
||||
## Little Fighter 2 [1]
|
||||
|
||||
- Inspired entries: F.LF
|
||||
- Media: http://lf2.net/
|
||||
|
||||
## Lode Runner [2]
|
||||
|
||||
@ -1000,6 +1045,14 @@
|
||||
|
||||
- Inspired entries: Krystal Drop
|
||||
|
||||
## Magus [1]
|
||||
|
||||
- Inspired entries: Rot Magus
|
||||
|
||||
## Mah-Jong [1]
|
||||
|
||||
- Inspired entries: Mah-Jong
|
||||
|
||||
## Marathon [1]
|
||||
|
||||
- Inspired entries: Aleph One
|
||||
@ -1082,6 +1135,10 @@
|
||||
|
||||
- Inspired entries: Dust Racing 2D, Microracers, Yorg
|
||||
|
||||
## micropolis [1]
|
||||
|
||||
- Inspired entries: Divercity
|
||||
|
||||
## Microprose Falcon 4.0 Combat Simulator [1]
|
||||
|
||||
- Inspired entries: FreeFalcon
|
||||
@ -1098,22 +1155,38 @@
|
||||
|
||||
- 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]
|
||||
|
||||
- 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]
|
||||
|
||||
- Inspired entries: ICBM3D, Penguin Command
|
||||
|
||||
## Moai [1]
|
||||
|
||||
- Inspired entries: adventure engine
|
||||
|
||||
## moon-patrol [1]
|
||||
|
||||
- Inspired entries: Moon-buggy
|
||||
@ -1210,14 +1283,18 @@
|
||||
|
||||
- Inspired entries: OpenOMF
|
||||
|
||||
## Osu! Tatakae! Ouendan [1]
|
||||
## Osu! Tatakae! Ouendan [2]
|
||||
|
||||
- Inspired entries: osu!
|
||||
- Inspired entries: opsu!, osu!
|
||||
|
||||
## Oubliette [1]
|
||||
|
||||
- Inspired entries: Liberal Crime Squad
|
||||
|
||||
## Outlaws [1]
|
||||
|
||||
- Inspired entries: The Force Engine
|
||||
|
||||
## Outpost [1]
|
||||
|
||||
- Inspired entries: Outpost HD
|
||||
@ -1230,13 +1307,10 @@
|
||||
|
||||
- Inspired entries: Enigma
|
||||
|
||||
## Pac-Man [5]
|
||||
## Pac-Man [8]
|
||||
|
||||
- Inspired entries: EnTT Pacman, Ghostly, HTML5 Pacman, Pac Go, pacman-canvas
|
||||
|
||||
## Pacman [1]
|
||||
|
||||
- Inspired entries: MiniPacman
|
||||
- Inspired entries: EnTT Pacman, Ghostly, HTML5 Pacman, MiniPacman, Not Pacman, Pac Go, Pacman, pacman-canvas
|
||||
- Media: https://en.wikipedia.org/wiki/Pac-Man
|
||||
|
||||
## Panzer General [2]
|
||||
|
||||
@ -1268,6 +1342,10 @@
|
||||
|
||||
- Inspired entries: OPMon, Tuxemon
|
||||
|
||||
## Pong [1]
|
||||
|
||||
- Inspired entries: PSY PONG 3D
|
||||
|
||||
## Portal [1]
|
||||
|
||||
- Inspired entries: glPortal
|
||||
@ -1280,9 +1358,13 @@
|
||||
|
||||
- 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]
|
||||
|
||||
@ -1292,6 +1374,10 @@
|
||||
|
||||
- Inspired entries: FreePrince, Mininim, SDLPoP
|
||||
|
||||
## Prince of Persia 2 [1]
|
||||
|
||||
- Inspired entries: Prince-Monogame
|
||||
|
||||
## Progress Quest [2]
|
||||
|
||||
- Inspired entries: pq2, progress-quest
|
||||
@ -1320,9 +1406,9 @@
|
||||
|
||||
- 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]
|
||||
|
||||
@ -1334,11 +1420,11 @@
|
||||
|
||||
## 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]
|
||||
|
||||
@ -1365,6 +1451,10 @@
|
||||
|
||||
- Inspired entries: Rise of the Triad for Linux
|
||||
|
||||
## Risk [2]
|
||||
|
||||
- Inspired entries: Domination, Tenes Empanadas Graciela
|
||||
|
||||
## Rodent's Revenge [1]
|
||||
|
||||
- Inspired entries: Open Rodent's Revenge
|
||||
@ -1373,9 +1463,9 @@
|
||||
|
||||
- Inspired entries: FreeRCT, OpenRCT2
|
||||
|
||||
## RollerCoaster Tycoon 2 [1]
|
||||
## RollerCoaster Tycoon 2 [2]
|
||||
|
||||
- Inspired entries: OpenRCT2
|
||||
- Inspired entries: FreeRCT, OpenRCT2
|
||||
|
||||
## RPG Maker [3]
|
||||
|
||||
@ -1406,9 +1496,18 @@
|
||||
|
||||
- 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
|
||||
- Media: <https://en.wikipedia.org/wiki/Seven_Kingdoms_(video_game)>
|
||||
|
||||
## sfxr [1]
|
||||
|
||||
@ -1429,14 +1528,17 @@
|
||||
## Ship Simulator 2006 [1]
|
||||
|
||||
- Inspired entries: Bridge Command
|
||||
- Media: <https://en.wikipedia.org/wiki/Ship_Simulator_(video_game)>
|
||||
|
||||
## Ship Simulator 2008 [1]
|
||||
|
||||
- Inspired entries: Bridge Command
|
||||
- Media: <https://en.wikipedia.org/wiki/Ship_Simulator_(video_game)>
|
||||
|
||||
## Ship Simulator Extremes [1]
|
||||
|
||||
- Inspired entries: Bridge Command
|
||||
- Media: <https://en.wikipedia.org/wiki/Ship_Simulator_(video_game)>
|
||||
|
||||
## Shobon Action [1]
|
||||
|
||||
@ -1466,9 +1568,9 @@
|
||||
|
||||
- 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)>
|
||||
|
||||
## SimCity 2000 [1]
|
||||
@ -1512,18 +1614,22 @@
|
||||
|
||||
- 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]
|
||||
|
||||
- Inspired entries: SolarWolf
|
||||
|
||||
## Solomon's Key [1]
|
||||
|
||||
- Inspired entries: OpenSolomonsKey
|
||||
|
||||
## Sonic the Hedgehog [2]
|
||||
|
||||
- Inspired entries: Open Surge, Sonic Robo Blast 2
|
||||
@ -1580,18 +1686,18 @@
|
||||
|
||||
- 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]
|
||||
|
||||
- Inspired entries: Gorc
|
||||
- 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
|
||||
|
||||
## Star Wars: Galactic Battlegrounds [1]
|
||||
@ -1646,9 +1752,9 @@
|
||||
|
||||
- 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]
|
||||
|
||||
@ -1662,13 +1768,13 @@
|
||||
|
||||
- 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]
|
||||
|
||||
- Inspired entries: Super Methane Brothers, super-methane-brothers-gx
|
||||
- Inspired entries: Super Methane Brothers, Super Methane Brothers for Wii and GameCube
|
||||
|
||||
## Super Metroid [1]
|
||||
|
||||
@ -1679,11 +1785,15 @@
|
||||
- Inspired entries: irrlamb, Neverball, Nuncabola, Veraball
|
||||
- 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.
|
||||
|
||||
## Super ZZT [3]
|
||||
|
||||
- Inspired entries: Reconstruction of Super ZZT, Roton, Zeta
|
||||
|
||||
## Supreme Commander [1]
|
||||
|
||||
- Inspired entries: Zero-K
|
||||
@ -1720,6 +1830,10 @@
|
||||
|
||||
- Inspired entries: Gang Garrison 2, Open Fortress
|
||||
|
||||
## TekWar [1]
|
||||
|
||||
- Inspired entries: TekwarGDX
|
||||
|
||||
## Tempest [1]
|
||||
|
||||
- Inspired entries: Arashi-JS
|
||||
@ -1733,9 +1847,13 @@
|
||||
|
||||
- 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
|
||||
|
||||
## Tetris Attack [4]
|
||||
@ -1754,6 +1872,10 @@
|
||||
|
||||
- Inspired entries: The Castles of Dr. Creep
|
||||
|
||||
## The Clans [1]
|
||||
|
||||
- Inspired entries: The Clans
|
||||
|
||||
## The Clue! [1]
|
||||
|
||||
- Inspired entries: Der Clou!
|
||||
@ -1792,9 +1914,9 @@
|
||||
|
||||
- Inspired entries: The-Trail
|
||||
|
||||
## The Settlers [1]
|
||||
## The Settlers [2]
|
||||
|
||||
- Inspired entries: Freeserf
|
||||
- Inspired entries: Freeserf, Freeserf.net
|
||||
|
||||
## The Settlers II [2]
|
||||
|
||||
@ -1867,6 +1989,7 @@
|
||||
## Transport Tycoon [3]
|
||||
|
||||
- Inspired entries: OpenTTD, Simutrans, TTDPatch
|
||||
- Media: https://en.wikipedia.org/wiki/Transport_Tycoon
|
||||
|
||||
## Tremulous [1]
|
||||
|
||||
@ -1914,7 +2037,7 @@
|
||||
|
||||
- Inspired entries: Anteform, Minima
|
||||
|
||||
## Ultima IV [1]
|
||||
## Ultima IV: Quest of the Avatar [1]
|
||||
|
||||
- Inspired entries: xu4
|
||||
|
||||
@ -1927,19 +2050,31 @@
|
||||
|
||||
- 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
|
||||
|
||||
## Ultima VII [1]
|
||||
|
||||
- Inspired entries: Exult
|
||||
|
||||
## Ultima VII: The Black Gate [1]
|
||||
|
||||
- Inspired entries: Exult
|
||||
|
||||
## Ultima VIII [1]
|
||||
## Ultima VIII: Pagan [1]
|
||||
|
||||
- Inspired entries: Pentagram
|
||||
|
||||
@ -1951,6 +2086,10 @@
|
||||
|
||||
- Inspired entries: Vocaluxe
|
||||
|
||||
## Undertale [1]
|
||||
|
||||
- Inspired entries: UndertaleModTool
|
||||
|
||||
## Uninvited [1]
|
||||
|
||||
- Inspired entries: uninvited
|
||||
@ -1963,6 +2102,10 @@
|
||||
|
||||
- Inspired entries: Alimer
|
||||
|
||||
## V-Wing [1]
|
||||
|
||||
- Inspired entries: Luola
|
||||
|
||||
## Visual Pinball [1]
|
||||
|
||||
- Inspired entries: Visual Pinball
|
||||
@ -1971,26 +2114,38 @@
|
||||
|
||||
- Inspired entries: Train
|
||||
|
||||
## VVVVVV [1]
|
||||
## VVVVVV [2]
|
||||
|
||||
- Inspired entries: WWW
|
||||
- Inspired entries: VVVVVV, WWW
|
||||
- Media: https://en.wikipedia.org/wiki/VVVVVV
|
||||
|
||||
## Warcraft [1]
|
||||
|
||||
- Inspired entries: Battles of Antargis
|
||||
|
||||
## Warcraft II [2]
|
||||
|
||||
- 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]
|
||||
|
||||
- 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)>
|
||||
|
||||
## Warrior Kings [1]
|
||||
@ -2025,6 +2180,10 @@
|
||||
|
||||
- Inspired entries: Ecksdee, H-Craft Championship, HexGL, The Rush
|
||||
|
||||
## Witchaven [1]
|
||||
|
||||
- Inspired entries: WitchavenGDX
|
||||
|
||||
## Wizard of Wor [1]
|
||||
|
||||
- Inspired entries: KnightOfWor
|
||||
@ -2034,9 +2193,9 @@
|
||||
|
||||
- Inspired entries: Wizardry Legacy
|
||||
|
||||
## Wolfenstein 3D [1]
|
||||
## Wolfenstein 3D [2]
|
||||
|
||||
- Inspired entries: ECWolf
|
||||
- Inspired entries: ECWolf, Wolf3dX
|
||||
|
||||
## Wolfenstein: Enemy Territory [1]
|
||||
|
||||
@ -2046,6 +2205,10 @@
|
||||
|
||||
- Inspired entries: Nuvie
|
||||
|
||||
## Worms [3]
|
||||
|
||||
- Inspired entries: Atomic Tanks, GUSANOS, OpenLieroX
|
||||
|
||||
## Worms Series [2]
|
||||
|
||||
- Inspired entries: Hedgewars, WarMUX
|
||||
@ -2054,13 +2217,17 @@
|
||||
|
||||
- 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]
|
||||
|
||||
@ -2078,6 +2245,14 @@
|
||||
|
||||
- Inspired entries: XPilot NG
|
||||
|
||||
## Yandere Simulator [1]
|
||||
|
||||
- Inspired entries: OpenYandere
|
||||
|
||||
## Yu-Gi-Oh! [1]
|
||||
|
||||
- Inspired entries: Heroes of Civilizations
|
||||
|
||||
## Z [2]
|
||||
|
||||
- Inspired entries: Zed Online, Zod Engine
|
||||
|
Loading…
x
Reference in New Issue
Block a user