diff --git a/README.md b/README.md index 482f5ef1..8d9acbbf 100644 --- a/README.md +++ b/README.md @@ -3,15 +3,15 @@ [Dynamic HTML table](https://trilarion.github.io/opensourcegames/) of the entries / Development [Blog](https://trilarion.blogspot.com/search/label/osgames) [comment]: # (start of autogenerated content, do not edit) -409 entries +412 entries - **[Action/Arcade](games/action/_toc.md)** (21) - **[Adventure & Visual novels](games/adventure/_toc.md)** (15) - **[Engines & Frameworks](games/framework/_toc.md)** (52) - **[Libraries](games/library/_toc.md)** (22) -- **[Role Playing](games/rpg/_toc.md)** (106) +- **[Role Playing](games/rpg/_toc.md)** (108) - **[Simulation](games/simulation/_toc.md)** (15) - **[Strategy](games/strategy/_toc.md)** (166) -- **[Tools & Manuals](games/misc/_toc.md)** (12) +- **[Tools & Manuals](games/misc/_toc.md)** (13) [comment]: # (end of autogenerated content) diff --git a/docs/data.json b/docs/data.json index 48335ade..9702743b 100644 --- a/docs/data.json +++ b/docs/data.json @@ -1260,6 +1260,15 @@ "", "Source - C++ - GPL-2.0" ], + [ + "Fujo (home, entry)", + "Fairly classical roguelike, but with animated graphics.", + "", + "Role Playing", + "mature / inactive since 2014", + "", + "Source - Python - CC BY-SA 4.0" + ], [ "GDash (home, entry)", "A Boulder Dash clone which is as close to the original as..", @@ -1492,7 +1501,7 @@ "Role Playing", "beta / inactive since 2013", "action-rpg", - "Source - C++ - GPL-3.0" + "Source - C++ - GPL-3.0" ], [ "Ilarion (home, entry)", @@ -1899,6 +1908,15 @@ "", "Source - C# - MPL" ], + [ + "Monster Generator (home, entry)", + "Creates D&D monsters of CR 1-50 for use with the..", + "Link", + "Tools & Manuals", + "mature / active", + "tool", + "Source - Java - MIT" + ], [ "Moria (home, entry)", "Roguelike computer game inspired by J. R. R. Tolkien's..", @@ -3069,6 +3087,15 @@ "", "Source - C - GPL-2.0" ], + [ + "The Endless Dungeons (home, entry)", + "A free random dungeon game RPG (Roguelike)", + "Link", + "Role Playing", + "mature / inactive since 2015", + "", + "Source - C - CC BY-NC-SA 2.0" + ], [ "The Epic of Heroes (home, entry)", "A cooperative turn-based RPG and Strategy Game where the..", diff --git a/games/misc/_toc.md b/games/misc/_toc.md index 1658e6d7..4c47ac69 100644 --- a/games/misc/_toc.md +++ b/games/misc/_toc.md @@ -6,6 +6,7 @@ - **[Dungeon Mapper](dungeon_mapper.md)** (C++, GPL-3.0, beta, inactive since 2013) - **[GM Tools](gm_tools.md)** (C++, GPL-2.0, beta, inactive since 2004) - **[JaNaG - Java Name Generator](java_ng.md)** (Java, GPL-2.0, mature, inactive since 2011) +- **[Monster Generator](monster_generator.md)** (Java, MIT, mature) - **[Open Legend RPG](open_legend_rpg.md)** (Text, Custom, mature) - **[PCGen](pcgen.md)** (Java, LGPL-2.1, mature) - **[Pymapper](pymapper.md)** (Python, GPL-3.0, mature) diff --git a/games/misc/monster_generator.md b/games/misc/monster_generator.md new file mode 100644 index 00000000..dd03f880 --- /dev/null +++ b/games/misc/monster_generator.md @@ -0,0 +1,15 @@ +# Monster Generator + +_Creates D&D monsters of CR 1-50 for use with the Pathfinder ruleset._ + +- Home: https://sourceforge.net/projects/monstergenerato/ +- State: mature +- Download: https://sourceforge.net/projects/monstergenerato/files/ +- Keywords: tool +- Code repository: https://git.code.sf.net/p/monstergenerato/code +- Code language: Java +- Code license: MIT + +## Building + +- Build system: manual diff --git a/games/rpg/_toc.md b/games/rpg/_toc.md index ad4d70a8..b975dc53 100644 --- a/games/rpg/_toc.md +++ b/games/rpg/_toc.md @@ -40,6 +40,7 @@ - **[Fallen Spire](fallen_spire.md)** (Python, GPL-3.0, beta, inactive since 2009) - **[Freedink](freedink.md)** (C++, GPL-3.0, mature) - **[FreedroidRPG](freedroid.md)** (C, GPL-2.0, mature) +- **[Fujo](fujo.md)** (Python, CC BY-SA 4.0, mature, inactive since 2014) - **[GalaxyMage Redux](galaxymage_redux.md)** (Python, GPL-2.0, beta, inactive since 2011) - **[GearHead](gearhead.md)** (Pascal, Python, LGPL-2.1, Apache-2.0, mature) - **[Gee Whiz](geewhiz.md)** (C, GPL-2.0, beta, inactive since 2004) @@ -90,6 +91,7 @@ - **[Summoning Wars](summoming_wars.md)** (C++, GPL-3.0, beta, inactive since 2014) - **[Tales of Maj'Eyal](tales_of_maj_eyal.md)** (C, Lua, GPL-3.0, mature) - **[The Clans](the_clans.md)** (C, GPL-2.0, beta, inactive since 2003) +- **[The Endless Dungeons](endless_dungeons.md)** (C, CC BY-NC-SA 2.0, mature, inactive since 2015) - **[The Mana World](mana_world.md)** (PHP, GPL-2.0, mature) - **[The hunt for the lost rainbow jewels (Jewelhunt)](jewelhunt.md)** (Java, GPL-2.0, beta) - **[Trinity Reign](trinity_reign.md)** (C++, GPL-3.0, beta, inactive since 2013) diff --git a/games/rpg/endless_dungeons.md b/games/rpg/endless_dungeons.md new file mode 100644 index 00000000..a26b8be4 --- /dev/null +++ b/games/rpg/endless_dungeons.md @@ -0,0 +1,17 @@ +# The Endless Dungeons + +_A free random dungeon game RPG (Roguelike)_ + +- Home: https://sourceforge.net/projects/endlessdungeons/ +- State: mature, inactive since 2015 +- Download: https://sourceforge.net/projects/endlessdungeons/files/ +- Platform: Windows +- Code repository: https://github.com/Trilarion/endlessdungeons +- Code language: C +- Code license: CC BY-NC-SA 2.0 +- Code dependencies: Allegro +- Assets license: CC BY-NC-SA 2.0 + +## Building + +- Build system: None diff --git a/games/rpg/fujo.md b/games/rpg/fujo.md new file mode 100644 index 00000000..450bd470 --- /dev/null +++ b/games/rpg/fujo.md @@ -0,0 +1,14 @@ +# Fujo + +_Fairly classical roguelike, but with animated graphics._ + +- Home: http://sheep.art.pl/Fujo +- State: mature, inactive since 2014 +- Download: (see home) +- Code repository: https://bitbucket.org/thesheep/fujo/src (hq) +- Code language: Python +- Code license: CC BY-SA 4.0 +- Code dependencies: Pygame +- Assets license: CC BY-SA 4.0 + +## Building diff --git a/games/rpg/holy_spirit.md b/games/rpg/holy_spirit.md index 6701188b..1b668c82 100644 --- a/games/rpg/holy_spirit.md +++ b/games/rpg/holy_spirit.md @@ -6,7 +6,7 @@ _2D isometric hack'n'slash game (action-rpg)._ - Download: https://sourceforge.net/projects/lechemindeladam/files - State: beta, inactive since 2013 - Keywords: action-rpg -- Code repository: https://svn.code.sf.net/p/lechemindeladam/code/ (svn), https://sourceforge.net/p/lechemindeladam/cvs/ (cvs) +- Code repository: https://gitlab.com/Trilarion/lechemindeladam.git (custom conversion of svn), https://svn.code.sf.net/p/lechemindeladam/code/ (svn), https://sourceforge.net/p/lechemindeladam/cvs/ (cvs) - Code language: C++ - Code license: GPL-3.0 - Dependencies: SFML diff --git a/games/statistics.md b/games/statistics.md index 40867d58..00989518 100644 --- a/games/statistics.md +++ b/games/statistics.md @@ -1,17 +1,17 @@ [comment]: # (autogenerated content, do not edit) # Statistics -analyzed 409 entries on 2018-07-05 10:14:37 +analyzed 412 entries on 2018-07-11 11:14:48 ## State -- mature: 243 (59.4%) -- beta: 166 (40.6%) -- inactive: 174 (42.5%) +- mature: 246 (59.7%) +- beta: 166 (40.3%) +- inactive: 176 (42.7%) ##### Inactive State -Zone of Control (2017), 3d.city (2016), Atlantis (2016), Atrinik (2016), Birth of the Empires (2016), DNT (2016), Dark Destiny (2016), Dungeon Monkey Eternal (2016), FreeRCT (2016), Mechanized Assault & eXploration Reloaded (2016), Polis (2016), Battleround (2015), Boulder Dash (2015), Dash Engine (2015), Delta Engine (2015), Egoboo (2015), Free heroes2 engine (2015), M.E.W.L. (2015), Project Helena (2015), Roguish (2015), The Epic of Heroes (2015), TwinEngine (2015), Witch Blast (2015), pyORPG (2015), Argentum Online (2014), Battles of Antargis (2014), Deity (2014), Drop Shock (2014), Dune Dynasty (2014), EternalWinterWars (2014), FAR Colony (2014), Hale (2014), Heroes of Wing Commander (2014), Kingdoms (2014), Lips of Suna (2014), Open RPG Maker (2014), Open Tibia (2014), Radakan (2014), SDL Game Engine 2D (2014), Sintel The Game (2014), Summoning Wars (2014), Supremacy (2014), Turious (2014), Xenowar (2014), rpge (2014), sandbox Game Maker (2014), Bos Wars (2013), C-evo (2013), Decker (2013), DemiGod (2013), Dungeon Mapper (2013), Holyspirit (2013), MechCommander 2 Omnitech (2013), Mpango (2013), Murder In The Public Domain (2013), OpenRPG (2013), Phantasy Star Rebirth (2013), Room for Change (2013), Source of Tales (2013), Trinity Reign (2013), VegaTrek (2013), BlackNova Traders (2012), Blitzkrieg (2012), Cataclysm (2012), CommandoJS (2012), Conquests (2012), Dark City (2012), Goblin Camp (2012), Hexwar (2012), PARPG (2012), Solar Empire (2012), Thousand Parsec (2012), UFO2000 (2012), Wizards Magic (2012), Age of Magic (2011), Battlefield Java (2011), Danger from the Deep (2011), Dawn (2011), GalaxyMage Redux (2011), JaNaG - Java Name Generator (2011), KQ Lives (2011), Kobold's Quest 2 (2011), OpenMOO2 (2011), RuneSword II (2011), Skrupel - Tribute Compilation (2011), Song of Albion (2011), Star Control II: The Ur-Quan Masters (2011), UlDunAd (2011), World of Phaos (2011), X-Force: Fight For Destiny (2011), AI Wars (2010), Crimson Fields (2010), Dragon History - Dračí Historie (2010), Endgame: Singularity (2010), Heroes of Wesnoth (2010), Labyrinth of Worlds (2010), Linwarrior 3D (2010), Mercenary Commander (2010), OpenHoMM (2010), Slay (2010), Solaris the Game (2010), SpaceTrader for Java (2010), XSera (2010), 8 Kingdoms (2009), Alien Assault Traders (2009), Annchienta (2009), Ardentryst (2009), Begin2 (2009), Crown and Cutlass (2009), Dark Oberon (2009), Duel Commander (2009), Fall of Imyrin (2009), Fallen Spire (2009), FreeTrain (2009), Glest (2009), Goblin Hack (2009), ORIENT (2009), OpenPop (2009), Secret Mario Chronicles (2009), Space Trader for Windows (2009), World of Heroes (2009), A Planet's Revenge (2008), Attal: Lords of doom (2008), Avanor (2008), Freestars (2008), Mars, Land of No Mercy (2008), Meritous (2008), S.C.O.U.R.G.E. (2008), Scoreos (2008), Sengoku: Warring States of Japan (2008), Space Opera (2008), Armies (2007), Eos, Dawn of Light: A Space Opera (2007), SharpKonquest (2007), Silvertree (2007), Slash'EM (2007), Underworld Adventures (2007), Arthur's Knights (2006), Betrayer's Moon Tactics (2006), Boson (2006), Eleconics (2006), JQuest (2006), Linley's Dungeon Crawl (2006), Metal Mech (2006), RPDungeon - computer aided role playing (2006), Rogue Clone IV (2006), Visions from the Other Side (2006), GalaxyNG (2005), H-World (2005), LinCity (2005), Spice Trade (2005), WAtomic (2005), Xconq (2005), ZAngband (2005), Colonization too (2004), GM Tools (2004), Gee Whiz (2004), Openglad (2004), Promisance (2004), T-Bots (2004), AntiChess (2003), Cat Mother Dead Justice (2003), Civil (2003), Machinations (2003), Pizza Business (2003), Planetary Hoppers (2003), The Clans (2003), Wargamer (2003), XArchon (2003), Umbra (2002), Greenius' Civil War (2001), Tux Racer (2001), Operation Citadel (2000), xdigger (1999) +Zone of Control (2017), 3d.city (2016), Atlantis (2016), Atrinik (2016), Birth of the Empires (2016), DNT (2016), Dark Destiny (2016), Dungeon Monkey Eternal (2016), FreeRCT (2016), Mechanized Assault & eXploration Reloaded (2016), Polis (2016), Battleround (2015), Boulder Dash (2015), Dash Engine (2015), Delta Engine (2015), Egoboo (2015), Free heroes2 engine (2015), M.E.W.L. (2015), Project Helena (2015), Roguish (2015), The Endless Dungeons (2015), The Epic of Heroes (2015), TwinEngine (2015), Witch Blast (2015), pyORPG (2015), Argentum Online (2014), Battles of Antargis (2014), Deity (2014), Drop Shock (2014), Dune Dynasty (2014), EternalWinterWars (2014), FAR Colony (2014), Fujo (2014), Hale (2014), Heroes of Wing Commander (2014), Kingdoms (2014), Lips of Suna (2014), Open RPG Maker (2014), Open Tibia (2014), Radakan (2014), SDL Game Engine 2D (2014), Sintel The Game (2014), Summoning Wars (2014), Supremacy (2014), Turious (2014), Xenowar (2014), rpge (2014), sandbox Game Maker (2014), Bos Wars (2013), C-evo (2013), Decker (2013), DemiGod (2013), Dungeon Mapper (2013), Holyspirit (2013), MechCommander 2 Omnitech (2013), Mpango (2013), Murder In The Public Domain (2013), OpenRPG (2013), Phantasy Star Rebirth (2013), Room for Change (2013), Source of Tales (2013), Trinity Reign (2013), VegaTrek (2013), BlackNova Traders (2012), Blitzkrieg (2012), Cataclysm (2012), CommandoJS (2012), Conquests (2012), Dark City (2012), Goblin Camp (2012), Hexwar (2012), PARPG (2012), Solar Empire (2012), Thousand Parsec (2012), UFO2000 (2012), Wizards Magic (2012), Age of Magic (2011), Battlefield Java (2011), Danger from the Deep (2011), Dawn (2011), GalaxyMage Redux (2011), JaNaG - Java Name Generator (2011), KQ Lives (2011), Kobold's Quest 2 (2011), OpenMOO2 (2011), RuneSword II (2011), Skrupel - Tribute Compilation (2011), Song of Albion (2011), Star Control II: The Ur-Quan Masters (2011), UlDunAd (2011), World of Phaos (2011), X-Force: Fight For Destiny (2011), AI Wars (2010), Crimson Fields (2010), Dragon History - Dračí Historie (2010), Endgame: Singularity (2010), Heroes of Wesnoth (2010), Labyrinth of Worlds (2010), Linwarrior 3D (2010), Mercenary Commander (2010), OpenHoMM (2010), Slay (2010), Solaris the Game (2010), SpaceTrader for Java (2010), XSera (2010), 8 Kingdoms (2009), Alien Assault Traders (2009), Annchienta (2009), Ardentryst (2009), Begin2 (2009), Crown and Cutlass (2009), Dark Oberon (2009), Duel Commander (2009), Fall of Imyrin (2009), Fallen Spire (2009), FreeTrain (2009), Glest (2009), Goblin Hack (2009), ORIENT (2009), OpenPop (2009), Secret Mario Chronicles (2009), Space Trader for Windows (2009), World of Heroes (2009), A Planet's Revenge (2008), Attal: Lords of doom (2008), Avanor (2008), Freestars (2008), Mars, Land of No Mercy (2008), Meritous (2008), S.C.O.U.R.G.E. (2008), Scoreos (2008), Sengoku: Warring States of Japan (2008), Space Opera (2008), Armies (2007), Eos, Dawn of Light: A Space Opera (2007), SharpKonquest (2007), Silvertree (2007), Slash'EM (2007), Underworld Adventures (2007), Arthur's Knights (2006), Betrayer's Moon Tactics (2006), Boson (2006), Eleconics (2006), JQuest (2006), Linley's Dungeon Crawl (2006), Metal Mech (2006), RPDungeon - computer aided role playing (2006), Rogue Clone IV (2006), Visions from the Other Side (2006), GalaxyNG (2005), H-World (2005), LinCity (2005), Spice Trade (2005), WAtomic (2005), Xconq (2005), ZAngband (2005), Colonization too (2004), GM Tools (2004), Gee Whiz (2004), Openglad (2004), Promisance (2004), T-Bots (2004), AntiChess (2003), Cat Mother Dead Justice (2003), Civil (2003), Machinations (2003), Pizza Business (2003), Planetary Hoppers (2003), The Clans (2003), Wargamer (2003), XArchon (2003), Umbra (2002), Greenius' Civil War (2001), Tux Racer (2001), Operation Citadel (2000), xdigger (1999) ## Code Languages @@ -21,15 +21,15 @@ Imperium, Land of Fire, Open AL, Open General, Solaris the Game ##### Language frequency -- C++ (36.4%) -- C (19.5%) -- Java (11.9%) -- Python (9.1%) +- C++ (36.2%) +- C (19.6%) +- Java (12.1%) +- Python (9.2%) - Lua (5.1%) - JavaScript (3.7%) - PHP (3.3%) - C# (2.7%) -- Pascal (2.3%) +- Pascal (2.2%) - Ren'py (0.8%) - Haxe (0.6%) - ActionScript (0.2%) @@ -63,10 +63,10 @@ Without license tag: 23 (5.6%) ##### Licenses frequency -- GPL-2.0 (39.1%) -- GPL-3.0 (25.7%) -- MIT (11.6%) -- Custom (5.7%) +- GPL-2.0 (38.8%) +- GPL-3.0 (25.5%) +- MIT (11.7%) +- Custom (5.6%) - Apache-2.0 (3.3%) - zlib (2.6%) - 3-clause BSD (2.3%) @@ -79,6 +79,8 @@ Without license tag: 23 (5.6%) - Artistic License (0.3%) - Boost license 1.0 (0.3%) - Boost-1.0 (0.3%) +- CC BY-NC-SA 2.0 (0.3%) +- CC BY-SA 4.0 (0.3%) - CC-BY-NC (0.3%) - CC-BY-NC-SA (0.3%) - CC-BY-SA-3 (0.3%) @@ -103,14 +105,14 @@ Without license tag: 23 (5.6%) - remake (7.4%) - MMO (7.0%) - online (7.0%) -- tool (5.3%) +- tool (5.7%) - SP (4.9%) - MP (3.3%) - 3D (2.9%) -- browser (2.1%) -- shooter (2.1%) -- sports (2.1%) -- visual novel (2.1%) +- browser (2.0%) +- shooter (2.0%) +- sports (2.0%) +- visual novel (2.0%) - engine (1.6%) - popular (1.6%) - puzzle (1.6%) @@ -137,3 +139,11 @@ Without license tag: 23 (5.6%) - source documentation generator (0.4%) - text-based (0.4%) +## Entries without download or play + +82: AI Wars, Advanced Strategic Command, Ancient Beast, Atomix, Battleround, Battles of Antargis, BrowserQuest, Cabbages and Kings, Call to Power 2, Cataclysm, Choria, Classic Blades of Exile, Colossal Cave Adventure, CommandoJS, Dark Destiny, Dash Engine, Dawn, DemiGod, Drop Shock, Dungeon Monkey Eternal, EPOH, EternalWinterWars, Evil Cult, FAR Colony, Fallen Spire, Free in the Dark (engine), FreeRCT, Freeciv WebGL, Freeminer, Freestars, GalaxyMage Redux, GameLV, Gigalomania, Greenius' Civil War, Harris, Heroes of Wesnoth, Hexwar, Jagged Alliance 2 Stracciatella, JiGS Interactive Game System, KAtomic, Land of Fire, Lips of Suna, M.E.W.L., MechCommander 2 Omnitech, Mercenary Commander, Micropolis, Open AL Soft, Open Legend RPG, Open Panzer, Open Soccer Star, Open Zelda, OpenSkyscraper, OpenSoccer, Pax Britannica, Polis, Roguish, Room for Change, Scorched Moon, Scoreos, Simple-Solitaire, Sintel The Game, Smash, Song of Albion, Source of Tales, Space Station 13, Terasology, Trinity Reign, Turious, Turn of War, TwinEngine, UlDunAd, War Of Kingdom, XSera, Xenowar, Zelda: Mystery of Solarus DX, Zetawar, diablo-js, micropolisJS, pyORPG, rpge, yaml-cpp, zlib + +## Entries with a code repository but not on a popular site + +26: Advanced Strategic Command, Deliantra, Eleconics, Fanwor, FreeRails, FreeType, Freedink, H-World, KAtomic, Libxml2, LordsAWar!, Mechanized Assault & eXploration Reloaded , Open AL Soft, Open Rails, PARPG, Ragel, Rocks'n'Diamonds , RuneSword II, Simple DirectMedia Layer, Tales of Maj'Eyal, Turious, Waste's Edge, Wolfpack Empire, XZ Utils, pkg-config, rpge + diff --git a/games/strategy/stareater.md b/games/strategy/stareater.md index 5a8520d5..dfff1101 100644 --- a/games/strategy/stareater.md +++ b/games/strategy/stareater.md @@ -5,11 +5,12 @@ _4X strategy game in space_ - Home: http://stareater4x.blogspot.com/, https://sourceforge.net/projects/zvjezdojedac/ - State: beta - Download: https://github.com/subchannel13/Stareater/releases -- Platform: Windows +- Platform: Windows, Linux, MacOS - Keywords: TBS - Code repository: https://github.com/subchannel13/Stareater - Code language: C# - Code license: GPL-3.0 +- Code dependencies: Mono ## Building diff --git a/tools/archives.json b/tools/archives.json index 773c31e1..3f5d2382 100644 --- a/tools/archives.json +++ b/tools/archives.json @@ -27,6 +27,7 @@ "https://git.code.sf.net/p/freelords/git", "https://git.code.sf.net/p/gigalomania/code", "https://git.code.sf.net/p/lipsofsuna/code", + "https://git.code.sf.net/p/monstergenerato/code", "https://git.code.sf.net/p/mpango/git", "https://git.code.sf.net/p/nazghul/git", "https://git.code.sf.net/p/rmoffice/code", @@ -122,6 +123,7 @@ "https://github.com/Trilarion/dark-oberon.git", "https://github.com/Trilarion/deity.git", "https://github.com/Trilarion/dungeonmap.git", + "https://github.com/Trilarion/endlessdungeons.git", "https://github.com/Trilarion/eos-game.git", "https://github.com/Trilarion/freetrain.git", "https://github.com/Trilarion/glest.git", @@ -328,6 +330,7 @@ "https://gitlab.com/Trilarion/janag.git", "https://gitlab.com/Trilarion/koboldsquest2.git", "https://gitlab.com/Trilarion/kursk.git", + "https://gitlab.com/Trilarion/lechemindeladam.git", "https://gitlab.com/Trilarion/lincity.git", "https://gitlab.com/Trilarion/machinations.git", "https://gitlab.com/Trilarion/mercenarycommander.git", @@ -380,7 +383,6 @@ "https://svn.code.sf.net/p/freesynd/code/", "https://svn.code.sf.net/p/fsc/code/", "https://svn.code.sf.net/p/kralovstvi/code/", - "https://svn.code.sf.net/p/lechemindeladam/code/", "https://svn.code.sf.net/p/low/code/", "https://svn.code.sf.net/p/opencity/code/", "https://svn.code.sf.net/p/opengeneral/code/", @@ -406,7 +408,8 @@ "https://bitbucket.org/giszmo/glob2", "https://bitbucket.org/mstrobel/supremacy", "https://bitbucket.org/rude/love", - "https://bitbucket.org/sumwars/sumwars-code/src" + "https://bitbucket.org/sumwars/sumwars-code/src", + "https://bitbucket.org/thesheep/fujo/src" ], "bzr": [ "https://code.launchpad.net/heroesofwesnoth", diff --git a/tools/lechemindeladam_svn_to_git.py b/tools/lechemindeladam_svn_to_git.py index a5169723..ddb62c4e 100644 --- a/tools/lechemindeladam_svn_to_git.py +++ b/tools/lechemindeladam_svn_to_git.py @@ -3,7 +3,7 @@ The svn is too big to be automatically imported to git (and Github) because ther Needs a manual solution. TODO use git lfs migrate later on the elements -TODO check for sufficient disc space before checkout +TODO instead of svn export for every revision, checkout and then update to revision (reduced bandwith) """ import json @@ -36,6 +36,13 @@ def special_treatment(destination, revision): """ + # copy content of trunk to base + if 2270 <= revision <= 2420: + source = os.path.join(destination, 'trunk') + if os.path.isdir(source): + copy_tree(source, destination) + shutil.rmtree(source) + # copy all important files from Holyspirit/Holyspirit and delete it if 5 <= revision <= 330: source = os.path.join(destination, 'Holyspirit', 'Holyspirit') @@ -49,31 +56,50 @@ def special_treatment(destination, revision): shutil.rmtree(os.path.join(destination, 'Holyspirit')) # copy all important files from Holyspirit and delete it - if 337 <= revision <= 1700: + if 337 <= revision <= 2268: source = os.path.join(destination, 'Holyspirit') if os.path.isdir(source): data = os.path.join(source, 'Data') if os.path.isdir(data): # shutil.copytree(data, os.path.join(destination, 'Data')) shutil.move(data, destination) - files = [x for x in os.listdir(source) if x.endswith('.txt') or x.endswith('.conf')] + target = os.path.join(destination, 'Meta') + if not os.path.isdir(target): + os.mkdir(target) + files = [x for x in os.listdir(source) if x.endswith('.txt') or x.endswith('.conf') or x.endswith('.ini')] for file in files: - shutil.move(os.path.join(source, file), destination) + shutil.move(os.path.join(source, file), target) + # remove it + shutil.rmtree(source) + + # copy data folder vom HolySpiritJE and delete it + if 2012 <= revision <= 2269: + source = os.path.join(destination, 'HolyspiritJE') + if os.path.isdir(source): + data = os.path.join(source, 'Data') + if os.path.isdir(data): + shutil.move(data, os.path.join(destination, 'DataJE')) + target = os.path.join(destination, 'MetaJE') + if not os.path.isdir(target): + os.mkdir(target) + files = [x for x in os.listdir(source) if x.endswith('.txt') or x.endswith('.conf') or x.endswith('.ini')] + for file in files: + shutil.move(os.path.join(source, file), target) # remove it shutil.rmtree(source) # remove Holyspirit3 folder - if 464 <= revision <= 1700: + if 464 <= revision <= 2268: remove_folders(destination, 'Holyspirit3') # remove Holyspirit2 folder - if 659 <= revision <= 1700: + if 659 <= revision <= 2268: remove_folders(destination, 'Holyspirit2') # remove Launcher/release - if 413 <= revision <= 1700: + if 413 <= revision <= 2420: source = os.path.join(destination, 'Launcher') - remove_folders(source, ('debug', 'release')) + remove_folders(source, ('bin', 'debug', 'release', 'obj')) # delete all *.dll, *.exe in base folder if 3 <= revision <= 9: @@ -87,11 +113,14 @@ def special_treatment(destination, revision): remove_folders(destination, 'Cross') # delete personal photos - if 374 <= revision <= 1700: + if 374 <= revision <= 2267: remove_folders(destination, 'Photos') + if 2268 <= revision <= 2420: + source = os.path.join(destination, 'Media') + remove_folders(source, 'Photos') # move empire of steam out - if 1173 <= revision <= 1700: + if 1173 <= revision <= 2420: folder = os.path.join(destination, 'EmpireOfSteam') if os.path.isdir(folder): # move to empire path @@ -99,27 +128,54 @@ def special_treatment(destination, revision): shutil.move(folder, empire) # holy editor cleanup - if 1078 <= revision <= 1700: + if 1078 <= revision <= 2420: source = os.path.join(destination, 'HolyEditor') remove_folders(source, ('bin', 'release', 'debug', 'obj')) remove_files(source, 'moc.exe') # source folder cleanup - if 939 <= revision <= 1700: + if 939 <= revision <= 2420: source = os.path.join(destination, 'Source') remove_folders(source, 'HS') remove_files(source, 'HS.zip') + # sourceM folder cleanup + if 2110 <= revision <= 2270: + source = os.path.join(destination, 'SourceM') + remove_folders(source, 'HS') + + # sourceNewApi cleanup + if 2261 <= revision <= 2269: + source = os.path.join(destination, 'SourceNewApi') + remove_folders(source, 'HS') + # Autres folder cleanup - if 1272 <= revision <= 1700: + if 1272 <= revision <= 2267: source = os.path.join(destination, 'Autres') remove_folders(source, ('conf', 'db', 'hooks', 'locks')) remove_files(source, ('format', 'maj.php')) + # Media/Other folder cleanup + if 2268 <= revision <= 2420: + source = os.path.join(destination, 'Media', 'Other') + remove_files(source, ('format', 'maj.php')) # remove Holyspirit-Demo - if 1668 <= revision <= 1700: + if 1668 <= revision <= 2268: remove_folders(destination, 'Holyspirit_Demo') + # remove Debug.rar + if 1950 <= revision <= 2420: + remove_files(destination, 'Debug.rar') + + # remove 3dparty folder + if 2273 <= revision <= 2420: + remove_folders(destination, '3dparty') + + # branches cleanup + if 2270 <= revision <= 2420: + remove_folders(destination, 'branches') + + def delete_global_excludes(folder): """ @@ -161,10 +217,13 @@ def list_large_unwanted_files(folder): return output -def checkout(revision_start, revision_end): +def checkout(revision_start, revision_end=None): """ """ + if not revision_end: + revision_end = revision_start + assert revision_end >= revision_start for revision in range(revision_start, revision_end + 1): @@ -182,7 +241,16 @@ def checkout(revision_start, revision_end): # checkout start_time = time.time() - subprocess_run(['svn', 'export', '-r{}'.format(revision), svn_url, destination]) + # sometimes checkout fails for reasons like "svn: E000024: Can't open file '/svn/p/lechemindeladam/code/db/revs/1865': Too many open files", we try again and again in these cases + while True: + try: + subprocess_run(['svn', 'export', '-r{}'.format(revision), svn_url, destination]) + break + except: + print('problem with export, will try again') + if os.path.isdir(destination): + shutil.rmtree(destination) + print('checkout took {:.1f}s'.format(time.time() - start_time)) @@ -410,4 +478,25 @@ if __name__ == "__main__": # fix_revision(1471, 1700) # gitify(1471, 1700) - checkout(1701, 2100) + # checkout(1701, 1900) + # fix_revision(1701, 1900) + # gitify(1701, 1900) + + # checkout(1901, 2140) + # fix_revision(1901, 2140) + # gitify(1901, 2140) + + # checkout(2141, 2388) + # fix_revision(2141, 2388) + # gitify(2141, 2388) + + # checkout(2389, 2420) + # fix_revision(2389, 2420) + # gitify(2389, 2420) + + # run the following commands in the git bash + # git config credential.useHttpPath true + # git lfs install + # git lfs migrate import --include-ref=master --include="Zombie_paysan.rs.hs,Witch_monster.rs.hs,WanderingStones.rs.hs,TwoWeapons.rs.hs,TwoHands.rs.hs,TwoHand.rs.hs,Reaper.rs.hs,Peasant_crossbow.rs.hs,Peasant_club.rs.hs,OneHand.rs.hs,Offspring_champion.rs.hs,Mimic.rs.hs,LordSkeleton.rs.hs,Goule.rs.hs,ErrantRoche.rs.hs,DemonicPriest0.rs.hs,DemonicPriest.rs.hs,Brute.rs.hs,20575__dobroide__20060706.night.forest02.wav,31464__offtheline__Morning_Sounds.wav,47989__Luftrum__forestsurroundings.wav,ambiance.wav,Catacombs0.wav,Pluie.wav,Taverne fusion.png,Abbey.ogg,AgrarianLands0.ogg,AgrarianLands1.ogg,Boss0.ogg,Catacombs0.ogg,Catacombs1.ogg,DarkForest.ogg,Forest_ambient0.ogg,Johannes.ogg,OWC.ogg" + + # then add remote and push (done) diff --git a/tools/maintenance.py b/tools/maintenance.py index bc1d36dc..d6cb8873 100644 --- a/tools/maintenance.py +++ b/tools/maintenance.py @@ -470,8 +470,39 @@ def generate_statistics(): unique_keywords = [(l, keywords.count(l) / len(keywords)) for l in unique_keywords] unique_keywords.sort(key=lambda x: x[0]) # first sort by name unique_keywords.sort(key=lambda x: -x[1]) # then sort by occurrence (highest occurrence first) - unique_keywords = ['- {} ({:.1f}%)\n'.format(x[0], x[1]*100) for x in unique_keywords] - statistics += '##### Keywords frequency\n\n' + ''.join(unique_keywords) + '\n' + unique_keywords = ['- {} ({:.1f}%)'.format(x[0], x[1]*100) for x in unique_keywords] + statistics += '##### Keywords frequency\n\n' + '\n'.join(unique_keywords) + '\n\n' + + # no download or play field + statistics += '## Entries without download or play\n\n' + + entries = [] + for info in infois: + if 'download' not in info and 'play' not in info: + entries.append(info['title']) + entries.sort() + statistics += '{}: '.format(len(entries)) + ', '.join(entries) + '\n\n' + + # code hosted not on github, gitlab, bitbucket, launchpad, sourceforge + popular_code_repositories = ('github.com', 'gitlab.com', 'bitbucket.org', 'code.sf.net', 'code.launchpad.net') + statistics += '## Entries with a code repository but not on a popular site\n\n' + + entries = [] + field = 'code repository' + for info in infois: + if info[field]: + popular = False + for repo in info[field]: + for popular_repo in popular_code_repositories: + if popular_repo in repo: + popular = True + break + # if there were repositories, but none popular, add them to the list + if not popular: + entries.append(info['title']) + # print(info[field]) + entries.sort() + statistics += '{}: '.format(len(entries)) + ', '.join(entries) + '\n\n' with open(statistics_path, mode='w', encoding='utf-8') as f: f.write(statistics) @@ -654,8 +685,9 @@ def update_primary_code_repositories(): if not consumed: unconsumed_entries.append([info['title'], info[field]]) - if info['code repository']: - print('Entry "{}" unconsumed repo: {}'.format(info['title'], info[field])) + # print output + #if info['code repository']: + # print('Entry "{}" unconsumed repo: {}'.format(info['title'], info[field])) #if not info['code repository']: # print('Entry "{}" unconsumed repo: {}'.format(info['title'], info[field])) diff --git a/tools/utils/utils.py b/tools/utils/utils.py index b8af0d98..4c816b2e 100644 --- a/tools/utils/utils.py +++ b/tools/utils/utils.py @@ -5,7 +5,6 @@ Utilities for the tools. import os import shutil import subprocess -import sys import tarfile import time import urllib.request @@ -156,12 +155,13 @@ def subprocess_run(cmd, display=True): print("error {} in call {}".format(result.returncode, cmd)) print(result.stdout.decode('cp1252')) print(result.stderr.decode('cp1252')) - sys.exit(-1) + raise RuntimeError() if display: print(' output: {}'.format(result.stdout.decode('cp1252'))) return result.stdout.decode('cp1252') +# TODO need move_tree def copy_tree(source, destination): """ Copies the full content of one directory into another avoiding the use of distutils.di_util.copy_tree because that