diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..a09c56df --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/.idea diff --git a/README.md b/README.md index 8d35483b..e3065145 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,14 @@ # Open Source Games [comment]: # (start of autogenerated content, do not edit) -198 entries +206 entries - **[Action games](games/action/_toc.md)** (1) - **[Adventure games & Visual novels](games/adventure/_toc.md)** (15) - **[Game frameworks](games/framework/_toc.md)** (47) - **[Popular required libraries](games/library/_toc.md)** (22) - **[Role Playing Games](games/rpg/_toc.md)** (61) - **[Simulation games](games/simulation/_toc.md)** (10) -- **[Strategy games](games/strategy/_toc.md)** (41) +- **[Strategy games](games/strategy/_toc.md)** (49) - **[Tools & Manuals](games/misc/_toc.md)** (1) [comment]: # (end of autogenerated content) @@ -16,7 +16,7 @@ A collection of open source games sorted by genre. The projects are at least in into an executable demo. Related infos and tips geared toward building the games are collected here. Emphasis is on support for Windows, Linux and Android. -See also the list of [popular games on Github](https://github.com/leereilly/games) by Lee Reilly. +See also the list of [popular games on Github](https://github.com/leereilly/games) by Lee Reilly or [List of open-source video games](https://en.wikipedia.org/wiki/List_of_open-source_video_games) on Wikipedia. ## Contributing diff --git a/games/maintenance.py b/games/maintenance.py index 46213e6f..06476e5b 100644 --- a/games/maintenance.py +++ b/games/maintenance.py @@ -1,12 +1,13 @@ """ Counts the number of records each subfolder and updates the overview. Sorts the entries in the contents files of - each subfolder alphabetically. + each sub folder alphabetically. This script runs with Python 3, it could also with Python 2 with some minor tweaks probably, but that's not important. TODO get number of games with github or bitbucket repository and list those who have neither TODO Which C, C++ projects do not use CMake TODO for those games with github repositories get activity, number of open issues, number of merge requests and display in a health monitor file + TODO search for ?? and replace with either nothing or missing information """ import os @@ -72,7 +73,7 @@ def read_interesting_info_from_file(file): def update_readme(): """ - Recounts entries in subcategories and writes them to the readme. Needs to be performed regularly. + Recounts entries in sub categories and writes them to the readme. Needs to be performed regularly. """ print('update readme file') @@ -104,7 +105,7 @@ def update_readme(): # combine titles, category names, numbers in one list info = zip(titles, [os.path.basename(path) for path in category_paths], n) - # sort according to title + # sort according to sub category title (should be unique) info = sorted(info, key=lambda x:x[0]) # assemble output @@ -145,7 +146,7 @@ def update_category_tocs(): # combine name and file name info = zip(titles, [os.path.basename(path) for path in entry_paths], more) - # sort according to title + # sort according to entry title (should be unique) info = sorted(info, key=lambda x:x[0]) # assemble output @@ -277,7 +278,7 @@ def check_template_leftovers(): """ Checks for template leftovers. """ - check_strings = ['# {NAME}', '_{One line description}_', '- Home: {URL}', '- Media: {URL}', '- Download: {URL}', '- State: beta, mature (inactive since)', '- Keywords: SP, MP, RTS, TBS (if none, remove the line)', '- Code: primary repository (type if not git), other repositories (type if not git)', '- Language(s): {XX}', '- License: {XX} (if special, include link)', '{XXX}'] + check_strings = ['# {NAME}', '_{One line description}_', '- Home: {URL}', '- Media: {URL}', '- Download: {URL}', '- State: beta, mature, inactive since', '- Keywords: SP, MP, RTS, TBS (if none, remove the line)', '- Code: primary repository (type if not git), other repositories (type if not git)', '- Language(s): {XX}', '- License: {XX} (if special, include link)', '{XXX}'] # get category paths category_paths = get_category_paths() @@ -376,7 +377,8 @@ def generate_statistics(): if number_inactive > 0: entries_inactive = [(x['file'], x['inactive']) for x in infos if 'inactive' in x] - entries_inactive.sort(key=lambda x: -x[1]) # sort by inactive year (more recently first) + entries_inactive.sort(key=lambda x: x[0]) # first sort by name + entries_inactive.sort(key=lambda x: -x[1]) # then sort by inactive year (more recently first) entries_inactive = ['{} ({})'.format(*x) for x in entries_inactive] statistics += '##### Inactive State\n\n' + ', '.join(entries_inactive) + '\n\n' @@ -402,7 +404,8 @@ def generate_statistics(): unique_languages = set(languages) unique_languages = [(l, languages.count(l) / len(languages)) for l in unique_languages] - unique_languages.sort(key=lambda x: -x[1]) + unique_languages.sort(key=lambda x: x[0]) # first sort by name + unique_languages.sort(key=lambda x: -x[1]) # then sort by occurrence (highest occurrence first) unique_languages = ['- {} ({:.1f}%)\n'.format(x[0], x[1]*100) for x in unique_languages] statistics += '##### Language frequency\n\n' + ''.join(unique_languages) + '\n' @@ -423,7 +426,8 @@ def generate_statistics(): unique_licenses = set(licenses) unique_licenses = [(l, licenses.count(l) / len(licenses)) for l in unique_licenses] - unique_licenses.sort(key=lambda x: -x[1]) + unique_licenses.sort(key=lambda x: x[0]) # first sort by name + unique_licenses.sort(key=lambda x: -x[1]) # then sort by occurrence (highest occurrence first) unique_licenses = ['- {} ({:.1f}%)\n'.format(x[0], x[1]*100) for x in unique_licenses] statistics += '##### Licenses frequency\n\n' + ''.join(unique_licenses) + '\n' diff --git a/games/statistics.md b/games/statistics.md index 4bd5bc27..bb9611ff 100644 --- a/games/statistics.md +++ b/games/statistics.md @@ -1,17 +1,17 @@ [comment]: # (autogenerated content, do not edit) # Statistics -analyzed 198 entries on 2017-12-13 13:41:30 +analyzed 206 entries on 2018-01-29 16:25:05 ## State -- mature: 103 (52.0%) -- beta: 49 (24.7%) -- inactive: 35 (17.7%) +- mature: 104 (50.5%) +- beta: 56 (27.2%) +- inactive: 41 (19.9%) ##### Inactive State -dnt (2016), egoboo (2015), roguish (2015), sintel (2014), openrpgmaker (2014), rpge (2014), argentum_online (2014), hale (2014), lips_of_suna (2014), open_tibia (2014), summoming_wars (2014), openrpg (2013), trinity_reign (2013), vegatrek (2013), c_evo (2013), dark_city (2012), parpg (2012), dawn (2011), kobolds_quest_2 (2011), kq_lives (2011), project_diaspora (2011), world_of_phaos (2011), star_control_2 (2011), radakan (2010), singularity (2010), annchienta (2009), fall_of_imiryn (2009), goblin_hack (2009), glest (2009), silvertree (2007), crown_and_cutless (2006), geewhiz (2004), openglad (2004), civil (2003), umbra (2002) +zoc (2017), dnt (2016), egoboo (2015), roguish (2015), argentum_online (2014), hale (2014), lips_of_suna (2014), open_tibia (2014), openrpgmaker (2014), rpge (2014), sintel (2014), summoming_wars (2014), sworsorc (2014), xenowar (2014), c_evo (2013), openrpg (2013), trinity_reign (2013), vegatrek (2013), dark_city (2012), hexwar (2012), parpg (2012), dawn (2011), kobolds_quest_2 (2011), kq_lives (2011), project_diaspora (2011), star_control_2 (2011), world_of_phaos (2011), radakan (2010), singularity (2010), 8kingdoms (2009), annchienta (2009), fall_of_imiryn (2009), glest (2009), goblin_hack (2009), a_planets_revenge (2008), silvertree (2007), crown_and_cutless (2006), geewhiz (2004), openglad (2004), civil (2003), umbra (2002) ##### Without state tag (46) @@ -19,43 +19,45 @@ dnt (2016), egoboo (2015), roguish (2015), sintel (2014), openrpgmaker (2014), r ## Languages -Without language tag: 16 (8.1%) +Without language tag: 16 (7.8%) crimson_fields, dragon_history, evol_online, imperium, land_of_fire, meritous, murder_in_the_public_domain, open_general, openal, openrpgmaker, parpg, solaris, space_station_13, star_maiden_rio, vegatrek, xconq ##### Language frequency -- C++ (40.3%) -- C (24.3%) +- C++ (39.7%) +- C (24.1%) - Java (8.4%) - Python (8.4%) -- Lua (4.4%) -- Javascript (2.2%) -- Ren'py (1.8%) +- Lua (4.2%) +- Javascript (3.0%) +- Ren'py (1.7%) - C# (1.3%) - PHP (1.3%) -- Haxe (0.9%) -- Delphi (0.4%) -- D (0.4%) -- Typescript (0.4%) -- Angelscript (0.4%) +- Haxe (0.8%) - ActionScript (0.4%) -- Text (0.4%) -- Objective C (0.4%) -- VB (0.4%) -- Pascal (0.4%) -- Basic (0.4%) - Ada (0.4%) +- Angelscript (0.4%) +- Basic (0.4%) - Clojure (0.4%) -- Kotlin (0.4%) -- GDScript (0.4%) +- D (0.4%) +- Delphi (0.4%) - Delphi Pascal (0.4%) +- GDScript (0.4%) +- Kotlin (0.4%) +- Objective C (0.4%) +- Pascal (0.4%) +- Ruby (0.4%) +- Rust (0.4%) +- Text (0.4%) +- Typescript (0.4%) +- VB (0.4%) ## Code licenses -Without license tag: 28 (14.1%) +Without license tag: 36 (17.5%) -atrinik, camelia_girls, catch_challenger, clou, crimson_fields, digital, dragon_hunt, evol_online, freerails, geewhiz, heroes_of_wesnoth, imperium, kobolds_quest_2, kq_lives, land_of_fire, meritous, open_general, openglad, openrpg, openrpgmaker, other_life, parpg, sintel, solaris, space_station_13, star_maiden_rio, warzone_2100, wastes_edge +8kingdoms, a_planets_revenge, atrinik, camelia_girls, catch_challenger, clou, crimson_fields, digital, dragon_hunt, epoh, evol_online, freerails, geewhiz, heroes_of_wesnoth, hexwar, imperium, kobolds_quest_2, kq_lives, land_of_fire, meritous, open_general, openglad, openrpg, openrpgmaker, other_life, parpg, sintel, solaris, space_station_13, star_maiden_rio, sworsorc, war_of_kingdom, warzone_2100, wastes_edge, xenowar, zoc ##### Licenses frequency @@ -70,19 +72,19 @@ atrinik, camelia_girls, catch_challenger, clou, crimson_fields, digital, dragon_ - LGPL-2.0 (1.2%) - LGPL-2.1 (1.2%) - Mixed (1.2%) -- BSD (0.6%) +- AGPL-3.0 (0.6%) - Artistic License (0.6%) -- Freeware (0.6%) +- BSD (0.6%) - Boost-1.0 (0.6%) -- LGPL-3.0 (0.6%) -- GPl-3.0 (0.6%) -- zlib (core) (0.6%) -- None found (0.6%) - Different, see file Copying, liblzma is public domain (0.6%) -- Proprietary (0.6%) +- Freeware (0.6%) +- GPl-3.0 (0.6%) - ISC (0.6%) -- Public Domain (0.6%) +- LGPL-3.0 (0.6%) - MPL-2.0 (0.6%) - Ms-MPL MIT (0.6%) -- AGPL-3.0 (0.6%) +- None found (0.6%) +- Proprietary (0.6%) +- Public Domain (0.6%) +- zlib (core) (0.6%) diff --git a/games/strategy/8kingdoms.md b/games/strategy/8kingdoms.md new file mode 100644 index 00000000..04edcc3d --- /dev/null +++ b/games/strategy/8kingdoms.md @@ -0,0 +1,12 @@ +# 8 Kingdoms + +_3D turn-based fantasy strategic game in which players become kings, build their empires and conquer enemy kingdoms._ + +- Home: https://sourceforge.net/projects/kralovstvi/ +- Download: https://sourceforge.net/projects/kralovstvi/files/Legacy/8%20Kingdoms%201.1.0/ +- State: beta, inactive since 2009 +- Code: https://svn.code.sf.net/p/kralovstvi/code/ +- Language(s): C++ + +## Building + diff --git a/games/strategy/_toc.md b/games/strategy/_toc.md index 930b7554..6a1e6e8e 100644 --- a/games/strategy/_toc.md +++ b/games/strategy/_toc.md @@ -2,6 +2,8 @@ [comment]: # (start of autogenerated content, do not edit) - **[0AD](0ad.md)** (C++, beta) +- **[8 Kingdoms](8kingdoms.md)** (C++, beta, inactive since 2009) +- **[A Planet's Revenge](a_planets_revenge.md)** (Python, beta, inactive since 2008) - **[Advanced Strategic Command](asc.md)** (C++, mature) - **[Battle for Wesnoth](wesnoth.md)** (C++, mature) - **[Birth of the Empires](birth_of_the_empires.md)** (C++) @@ -9,6 +11,7 @@ - **[Civil](civil.md)** (Python, beta, inactive since 2003) - **[Crimson Fields](crimson_fields.md)** () - **[Crown and Cutless](crown_and_cutless.md)** (C++, beta, inactive since 2006) +- **[EPOH](epoh.md)** (Javascript, MIT, beta) - **[Endgame: Singularity](singularity.md)** (Python, beta, inactive since 2010) - **[Free Orion](freeorion.md)** (C++, Python, beta) - **[FreeCol](freecol.md)** (Java, mature) @@ -19,6 +22,7 @@ - **[Glest](glest.md)** (C++, mature, inactive since 2009) - **[Globulation2](globulation2.md)** (C++, mature) - **[Heroes of Wesnoth](heroes_of_wesnoth.md)** (C++, beta) +- **[Hexwar](hexwar.md)** (Ruby, Javascript, unknown, beta, inactive since 2012) - **[LGeneral](lgeneral.md)** (C, mature) - **[LordsAWar!](lordsawar.md)** (C++, mature) - **[Mechanized Assault & eXploration Reloaded ](maxr.md)** (C++, C) @@ -32,15 +36,19 @@ - **[Pax Britannica](pax_britannica.md)** (Lua, C, mature) - **[Spring RTS engine](spring.md)** (C++, C, Lua, mature) - **[Star Control II: The Ur-Quan Masters](star_control_2.md)** (C, mature, inactive since 2011) +- **[Sworsorc](sworsorc.md)** (Java, beta, inactive since 2014) - **[Tanks of Freedom](tanks_of_freedom.md)** (GDScript) - **[TripleA](triplea.md)** (Java, mature) - **[UFO2000](ufo2000.md)** (C++) - **[Ufo: Alien Invasion](ufo_alien_invasion.md)** (C, C++, mature) - **[Unknown Horizons](unknown_horizons.md)** (Python, beta) +- **[War Of Kingdom](war_of_kingdom.md)** (C, C++, beta) - **[Warzone 2100](warzone_2100.md)** (C++) - **[Widelands](widelands.md)** (C++, Lua, mature) - **[Xconq](xconq.md)** (mature) +- **[Xenowar](xenowar.md)** (C, C++, GPL-3.0, mature, inactive since 2014) - **[Zero-K](zero_k.md)** (Lua) - **[Zetawar](zetawar.md)** (Clojure, mature) +- **[Zone of Control](zoc.md)** (Rust, Apache-2.0, beta, inactive since 2017) [comment]: # (end of autogenerated content) \ No newline at end of file diff --git a/games/strategy/a_planets_revenge.md b/games/strategy/a_planets_revenge.md new file mode 100644 index 00000000..e44cefd1 --- /dev/null +++ b/games/strategy/a_planets_revenge.md @@ -0,0 +1,12 @@ +# A Planet's Revenge + +_A text-based, turn-based strategy game set in space. It is similar to a 4X game and is inspired by Space Federation: Galactice Conquest._ + +- Home: https://sourceforge.net/projects/aplanetsrevenge/ +- Download: https://sourceforge.net/projects/aplanetsrevenge/files/aplanetsrevenge/apr-1.0-alpha/ +- State: beta, inactive since 2008 +- Code: see download +- Language(s): Python + +## Building + diff --git a/games/strategy/epoh.md b/games/strategy/epoh.md new file mode 100644 index 00000000..2ea383f6 --- /dev/null +++ b/games/strategy/epoh.md @@ -0,0 +1,13 @@ +# EPOH + +_Multiplayer turn-based browser strategy game._ + +- Home: http://www.epoh.io/ +- State: beta +- Keywords: online +- Code: https://github.com/tautvilas/epoh +- Language(s): Javascript +- License: MIT + +## Building + diff --git a/games/strategy/hexwar.md b/games/strategy/hexwar.md new file mode 100644 index 00000000..8543a74a --- /dev/null +++ b/games/strategy/hexwar.md @@ -0,0 +1,13 @@ +# Hexwar + +_Simple turn based, hexagon map, strategy game in the tradition of Panzer General, Uniwar, and Battle for Wesnoth._ + +- Home: https://github.com/mgfreshour/hexwar +- State: beta, inactive since 2012 +- Keywords: TBS, online +- Code: https://github.com/mgfreshour/hexwar +- Language(s): Ruby, Javascript +- License: unknown + +## Building + diff --git a/games/strategy/sworsorc.md b/games/strategy/sworsorc.md new file mode 100644 index 00000000..5264c967 --- /dev/null +++ b/games/strategy/sworsorc.md @@ -0,0 +1,11 @@ +# Sworsorc + +_Online, turn-based epic swords and sorcery strategy game._ + +- State: beta, inactive since 2014 +- Keywords: online +- Code: https://github.com/cjeffery/sworsorc +- Language(s): Java + +## Building + diff --git a/games/strategy/war_of_kingdom.md b/games/strategy/war_of_kingdom.md new file mode 100644 index 00000000..10832730 --- /dev/null +++ b/games/strategy/war_of_kingdom.md @@ -0,0 +1,10 @@ +# War Of Kingdom + +_Turn-based tactical strategy game._ + +- State: beta +- Code: https://github.com/freeors/War-Of-Kingdom +- Language(s): C, C++ + +## Building + diff --git a/games/strategy/xenowar.md b/games/strategy/xenowar.md new file mode 100644 index 00000000..9db11cef --- /dev/null +++ b/games/strategy/xenowar.md @@ -0,0 +1,13 @@ +# Xenowar + +_Turned based strategy game for Win32 and Android OS influenced by X-COM._ + +- Home: http://xenowar.net +- State: mature, inactive since 2014 +- Keywords: TBS +- Code: https://github.com/leethomason/unflobtactical +- Language(s): C, C++ +- License: GPL-3.0 + +## Building + diff --git a/games/strategy/zoc.md b/games/strategy/zoc.md new file mode 100644 index 00000000..99e41a92 --- /dev/null +++ b/games/strategy/zoc.md @@ -0,0 +1,12 @@ +# Zone of Control + +_Turn-based hexagonal strategy game written in Rust._ + +- Download: https://github.com/ozkriff/zoc/releases +- State: beta, inactive since 2017 +- Code: https://github.com/ozkriff/zoc +- Language(s): Rust +- License: Apache-2.0 + +## Building + diff --git a/games/template_long.md b/games/template_long.md index 1dc25299..037706b6 100644 --- a/games/template_long.md +++ b/games/template_long.md @@ -6,8 +6,8 @@ _{One line description}_ - Media: {URL} // Wikipedia, ... - Download: {URL} {- Play: {URL}} -- State: beta, mature (inactive since) // no need to be more fine grained than beta, mature -- Keywords: SP (single-player), MP (multi-player), MMO (multi massive online), RTS (real time strategy), TBS +- State: beta, mature, inactive since XX // no need to be more fine grained than beta, mature +- Keywords: SP (single-player), MP (multi-player), MMO (multi massive online), RTS (real time strategy), TBS, online - Code: primary repository (type if not git), other repositories (type if not git) - Language(s): {XX} - License: {XX} // Only with respect to code! MIT, (L)GPL, BSD, zlib, Apache, Special (if other or modified)