converted source releases to git

This commit is contained in:
Trilarion 2018-06-28 10:39:14 +02:00
parent 37ff720f05
commit f7fd84817e
24 changed files with 829 additions and 56 deletions

2
.gitignore vendored
View File

@ -1,2 +1,2 @@
/.idea
/tools/archive/*
/tools/archive/**

View File

@ -196,7 +196,7 @@
"Strategy",
"beta / inactive since 2006",
"",
"C++ - Educational"
"C++, C# - Educational"
],
[
"Arx Libertatis (<a href=\"http://arx-libertatis.org/\">home</a>, <a href=\"https://github.com/Trilarion/opensourcegames/blob/master/games/rpg/arx_libertatis.md\">entry</a>)",
@ -736,7 +736,7 @@
"Strategy",
"beta / active",
"browser",
"PHP - BSD"
"<a href=\"https://gitlab.com/Trilarion/devana.git\">Source</a> - PHP - BSD"
],
[
"Digital: A Love Story (<a href=\"http://scoutshonour.com/digital/\">home</a>, <a href=\"https://github.com/Trilarion/opensourcegames/blob/master/games/adventure/digital_a_love_story.md\">entry</a>)",
@ -757,13 +757,13 @@
"<a href=\"https://github.com/doxygen/doxygen\">Source</a> - C++ - GPL-2.0"
],
[
"Dragon History (<a href=\"http://www.ucw.cz/draci-historie/index-en.html\">home</a>, <a href=\"https://github.com/Trilarion/opensourcegames/blob/master/games/adventure/dragon_history.md\">entry</a>)",
"Dragon History - Dra\u010d\u00ed Historie (<a href=\"http://www.ucw.cz/draci-historie/index-en.html\">home</a>, <a href=\"https://github.com/Trilarion/opensourcegames/blob/master/games/adventure/dragon_history.md\">entry</a>)",
"Czech adventure game.",
"<a href=\"http://www.ucw.cz/draci-historie/index-en.html#download\">Link</a>",
"Adventure & Visual novels",
"mature / inactive since 2010",
"",
"Pascal, Script - GPL-2.0"
"<a href=\"https://gitlab.com/Trilarion/dragon-history.git\">Source</a> - Pascal, Script - GPL-2.0"
],
[
"Dragon Hunt (<a href=\"http://emhsoft.com/dh.html\">home</a>, <a href=\"https://github.com/Trilarion/opensourcegames/blob/master/games/rpg/dragon_hunt.md\">entry</a>)",
@ -789,8 +789,8 @@
"<a href=\"https://sourceforge.net/projects/duelcommander/files\">Link</a>",
"Strategy",
"beta / inactive since 2009",
"",
"C - GPL-3.0"
"text-based",
"<a href=\"https://gitlab.com/Trilarion/duelcommander.git\">Source</a> - C - GPL-3.0"
],
[
"Dune Dynasty (<a href=\"http://dunedynasty.sourceforge.net/\">home</a>, <a href=\"https://github.com/Trilarion/opensourcegames/blob/master/games/strategy/dune_dynasty.md\">entry</a>)",
@ -1663,7 +1663,7 @@
"Role Playing",
"mature / inactive since 2006",
"roguelike",
"C - Custom"
"<a href=\"https://gitlab.com/Trilarion/dungeoncrawl.git\">Source</a> - C - Custom"
],
[
"Linwarrior 3D (<a href=\"http://www.hackcraft.de/games/linwarrior_3d/index.htm\">home</a>, <a href=\"https://github.com/Trilarion/opensourcegames/blob/master/games/action/linwarrior.md\">entry</a>)",
@ -2046,11 +2046,11 @@
[
"Open RPG Maker (<a href=\"http://openrpgmaker.sourceforge.net/\">home</a>, <a href=\"https://github.com/Trilarion/opensourcegames/blob/master/games/framework/open_rpg_maker.md\">entry</a>)",
"Open RPG Maker is a free and open source 2D RPG creation..",
"<a href=\"https://sourceforge.net/projects/openrpgmaker/files/\">Link</a>",
"<a href=\"http://openrpgmaker.sourceforge.net/wiki/index.php/Download\">Link</a>",
"Engines & Frameworks",
"beta / inactive since 2014",
"",
"C++ - GPL-3.0"
"<a href=\"https://gitlab.com/Trilarion/openrpgmaker.git\">Source</a> - C++ - GPL-3.0"
],
[
"Open Rails (<a href=\"http://openrails.org/\">home</a>, <a href=\"https://github.com/Trilarion/opensourcegames/blob/master/games/simulation/open_rails.md\">entry</a>)",
@ -2242,13 +2242,13 @@
"<a href=\"https://git.code.sf.net/p/snowstorm/git\">Source</a> - C++ - GPL-2.0"
],
[
"Operation Citadel (<a href=\"http://kursk.sourceforge.net/newfiles/Projects.htm\">home</a>, <a href=\"https://github.com/Trilarion/opensourcegames/blob/master/games/strategy/operation_citadel.md\">entry</a>)",
"Operation Citadel (<a href=\"http://kursk.sourceforge.net/\">home</a>, <a href=\"https://github.com/Trilarion/opensourcegames/blob/master/games/strategy/operation_citadel.md\">entry</a>)",
"A WWII, turn based platoon, company level war game on the..",
"<a href=\"https://sourceforge.net/projects/kursk/files\">Link</a>",
"Strategy",
"beta / inactive since 2000",
"",
"C++ - GPL-2.0"
"<a href=\"https://gitlab.com/Trilarion/kursk.git\">Source</a> - C++ - GPL-2.0"
],
[
"Orx (<a href=\"http://orx-project.org/about\">home</a>, <a href=\"https://github.com/Trilarion/opensourcegames/blob/master/games/framework/orx.md\">entry</a>)",
@ -2743,7 +2743,7 @@
"Strategy",
"beta / inactive since 2010",
"",
"Java - GPL-3.0"
"<a href=\"https://gitlab.com/Trilarion/slaygame.git\">Source</a> - Java - GPL-3.0"
],
[
"Smash (<a href=\"http://smash.gouchon.com/\">home</a>, <a href=\"https://github.com/Trilarion/opensourcegames/blob/master/games/action/smash.md\">entry</a>)",
@ -2955,11 +2955,11 @@
[
"Supremacy (<a href=\"https://archive.codeplex.com/?p=supremacy\">home</a>, <a href=\"https://github.com/Trilarion/opensourcegames/blob/master/games/strategy/supremacy.md\">entry</a>)",
"\"4X\" (eXplore, eXpand, eXploit, eXterminate) turn-based,..",
"",
"<a href=\"http://www.startreksupremacy.com/download.html\">Link</a>",
"Strategy",
"beta / active",
"beta / inactive since 2014",
"",
"C# - Ms-RL"
"<a href=\"https://bitbucket.org/mstrobel/supremacy\">Source</a> - C# - Ms-RL"
],
[
"T-Bots (<a href=\"https://sourceforge.net/projects/tbots/\">home</a>, <a href=\"https://github.com/Trilarion/opensourcegames/blob/master/games/strategy/t_bots.md\">entry</a>)",
@ -2986,7 +2986,7 @@
"Role Playing",
"mature / active",
"roguelike",
"<a href=\"http://git.net-core.org/tome/t-engine4.git\">Source</a> - C, Lua - GPL-3.0"
"<a href=\"https://git.net-core.org/tome/t-engine4.git\">Source</a> - C, Lua - GPL-3.0"
],
[
"Tanks of Freedom (<a href=\"https://w84death.itch.io/tanks-of-freedom\">home</a>, <a href=\"https://github.com/Trilarion/opensourcegames/blob/master/games/strategy/tanks_of_freedom.md\">entry</a>)",
@ -3031,7 +3031,7 @@
"Role Playing",
"mature / active",
"MMO",
"PHP - GPL-2.0"
"<a href=\"https://github.com/themanaworld/tmwa\">Source</a> - PHP - GPL-2.0"
],
[
"The hunt for the lost rainbow jewels (Jewelhunt) (<a href=\"https://sourceforge.net/projects/jewelhunt/\">home</a>, <a href=\"https://github.com/Trilarion/opensourcegames/blob/master/games/rpg/jewelhunt.md\">entry</a>)",
@ -3238,7 +3238,7 @@
"Strategy",
"mature / inactive since 2005",
"remake",
"Pascal - GPL-2.0"
"<a href=\"https://gitlab.com/Trilarion/watomic.git\">Source</a> - Pascal - GPL-2.0"
],
[
"War Of Kingdom (<a href=\"http://www.freeors.com/\">home</a>, <a href=\"https://github.com/Trilarion/opensourcegames/blob/master/games/strategy/war_of_kingdom.md\">entry</a>)",
@ -3337,7 +3337,7 @@
"Strategy",
"beta / inactive since 2009",
"",
"Python - BSD"
"<a href=\"https://gitlab.com/Trilarion/worldofheroes.git\">Source</a> - Python - BSD"
],
[
"World of Phaos (<a href=\"http://worldofphaos.com/index.php?site=online_rpg\">home</a>, <a href=\"https://github.com/Trilarion/opensourcegames/blob/master/games/rpg/world_of_phaos.md\">entry</a>)",
@ -3346,7 +3346,7 @@
"Role Playing",
"mature / inactive since 2011",
"online",
"PHP - GPL-2.0"
"<a href=\"https://gitlab.com/Trilarion/phaosrpg.git\">Source</a> - PHP - GPL-2.0"
],
[
"WorldForge (<a href=\"https://www.worldforge.org/\">home</a>, <a href=\"https://github.com/Trilarion/opensourcegames/blob/master/games/framework/worldforge.md\">entry</a>)",

View File

@ -5,7 +5,7 @@
- **[Clou!](clou.md)** (C, Custom, beta)
- **[Colossal Cave Adventure](colossal_cave.md)** (Python, Apache-2.0, mature)
- **[Digital: A Love Story](digital_a_love_story.md)** (Ren'py, CC-BY-NC-SA, mature)
- **[Dragon History](dragon_history.md)** (Pascal, Script, GPL-2.0, mature, inactive since 2010)
- **[Dragon History - Dračí Historie](dragon_history.md)** (Pascal, Script, GPL-2.0, mature, inactive since 2010)
- **[Fanwor](fanwor.md)** (C, GPL-2.0, mature)
- **[Free in the Dark (engine)](fitd.md)** (C, C++, GPL-2.0, beta)
- **[GameLV](gamelv.md)** (C++, GPL, beta)

View File

@ -1,11 +1,11 @@
# Dragon History
# Dragon History - Dračí Historie
_Czech adventure game._
- Home: http://www.ucw.cz/draci-historie/index-en.html
- Download: http://www.ucw.cz/draci-historie/index-en.html#download
- State: mature, inactive since 2010
- Code repository: (see download)
- Code repository: https://gitlab.com/Trilarion/dragon-history.git (snapshot of source releases)
- Code language: Pascal (old engine), Script (runs on ScummVM)
- Code license: GPL-2.0

View File

@ -2,7 +2,7 @@
_Included in Blender is a complete game engine, allowing you to create a fully featured 3d game right inside Blender._
- Home: https://www.blender.org/features/game-creation/
- Home: https://www.blender.org/features/game-creation/, https://docs.blender.org/manual/en/dev/game_engine/index.html
- Download: https://www.blender.org/download/
- State: mature
- Code repository: (https://developer.blender.org/diffusion/)

View File

@ -2,10 +2,10 @@
_Open RPG Maker is a free and open source 2D RPG creation utility, similar to the popular RPG Maker series._
- Home: http://openrpgmaker.sourceforge.net/
- Download: https://sourceforge.net/projects/openrpgmaker/files/
- Home: http://openrpgmaker.sourceforge.net/, https://sourceforge.net/projects/openrpgmaker/
- Download: http://openrpgmaker.sourceforge.net/wiki/index.php/Download, https://sourceforge.net/projects/openrpgmaker/files/
- State: beta, inactive since 2014
- Code repository: (see download)
- Code repository: https://gitlab.com/Trilarion/openrpgmaker.git (snapshot of source releases)
- Code language: C++
- Code license: GPL-3.0

View File

@ -4,10 +4,10 @@ _Roguelike molded in the tradition of the early greats of the genre: Rogue, Hack
- Home: http://www.dungeoncrawl.org/
- Media: https://en.wikipedia.org/wiki/Linley%27s_Dungeon_Crawl, http://nethack.wikia.com/wiki/Linley%27s_Dungeon_Crawl
- Download: http://www.dungeoncrawl.org/?d
- Download: http://www.dungeoncrawl.org/?d, ftp://ftp.dungeoncrawl.org/
- State: mature, inactive since 2006
- Keywords: roguelike
- Code repository: (see download)
- Code repository: https://gitlab.com/Trilarion/dungeoncrawl.git (snapshot of source releases)
- Code language: C
- Code license: Custom (Crawl General Public License)

View File

@ -6,7 +6,7 @@ _2D open source MMORPG._
- Download: https://www.themanaworld.org/index.php/Downloads
- State: mature
- Keywords: MMO
- Code repository: (https://github.com/themanaworld which of the repos contains relevant code)
- Code repository: https://github.com/themanaworld/tmwa (https://github.com/themanaworld), https://gitlab.com/manaplus/manaplus.git (+)
- Code language: PHP
- Code license: GPL-2.0

View File

@ -6,7 +6,7 @@ _Online Roleplaying Game browser based, which takes place in the high fantasy wo
- Download: https://sourceforge.net/projects/phaosrpg/files/
- State: mature, inactive since 2011
- Keywords: online
- Code repository: (see download)
- Code repository: https://gitlab.com/Trilarion/phaosrpg.git (snapshot of source releases)
- Code language: PHP
- Code license: GPL-2.0
- Assets license: Restricted (see license)

View File

@ -1,17 +1,17 @@
[comment]: # (autogenerated content, do not edit)
# Statistics
analyzed 403 entries on 2018-06-24 11:00:32
analyzed 403 entries on 2018-06-28 10:38:05
## State
- mature: 238 (59.1%)
- beta: 165 (40.9%)
- inactive: 171 (42.4%)
- inactive: 172 (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), WarGame (2016), 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), 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 (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), Moria (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), 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)
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), WarGame (2016), 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), Moria (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), 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)
## Code Languages
@ -21,14 +21,14 @@ Imperium, Land of Fire, Open AL, Open General, Solaris the Game, VegaTrek, Xconq
##### Language frequency
- C++ (36.9%)
- C++ (36.8%)
- C (19.7%)
- Java (11.5%)
- Python (8.8%)
- Lua (5.2%)
- JavaScript (3.8%)
- PHP (3.4%)
- C# (2.3%)
- PHP (3.3%)
- C# (2.5%)
- Pascal (2.3%)
- Ren'py (0.8%)
- Haxe (0.6%)
@ -99,7 +99,7 @@ Without license tag: 23 (5.7%)
##### Keywords frequency
- TBS (10.8%)
- RTS (8.8%)
- RTS (8.7%)
- requires original content (7.9%)
- roguelike (7.9%)
- remake (7.5%)
@ -138,4 +138,5 @@ Without license tag: 23 (5.7%)
- language binding (0.4%)
- point&click (0.4%)
- source documentation generator (0.4%)
- text-based (0.4%)

View File

@ -12,7 +12,7 @@
- **[Antares](antares.md)** (C++, LGPL-3.0, beta)
- **[AntiChess](antichess.md)** (Java, MIT, mature, inactive since 2003)
- **[Armies](armies.md)** (C++, mature, inactive since 2007)
- **[Arthur's Knights](arthurs_knights.md)** (C++, Educational, beta, inactive since 2006)
- **[Arthur's Knights](arthurs_knights.md)** (C++, C#, Educational, beta, inactive since 2006)
- **[Atomiks](atomiks.md)** (C, GPL, mature)
- **[Atomix](atomix.md)** (C, GPL-2.0, mature)
- **[Attal: Lords of doom](attal.md)** (C++, GPL-2.0, mature, inactive since 2008)
@ -133,7 +133,7 @@
- **[Spring RTS engine](spring.md)** (C++, C, Lua, GPL-2.0, mature)
- **[Star Control II: The Ur-Quan Masters](star_control_2.md)** (C, GPL-2.0, mature, inactive since 2011)
- **[Stars! Nova](stars_nova.md)** (C#, GPL-2.0, beta)
- **[Supremacy](supremacy.md)** (C#, Ms-RL, beta, inactive)
- **[Supremacy](supremacy.md)** (C#, Ms-RL, beta, inactive since 2014)
- **[T-Bots](t_bots.md)** (C, GPL-2.0, beta, inactive since 2004)
- **[TVTower](tvtower.md)** (BlitzMax, Lua, Custom, mature)
- **[Tanks of Freedom](tanks_of_freedom.md)** (GDScript, MIT, mature)

View File

@ -6,7 +6,7 @@ _A small turned based game._
- Download: https://sourceforge.net/projects/king-arthur/files/king-arthur/Alpha%200.3/
- State: beta, inactive since 2006
- Code repository: (see download)
- Code language: C++
- Code language: C++, C#
- Code license: Educational
## Building

View File

@ -6,11 +6,11 @@ _Browser strategy game._
- Download: https://sourceforge.net/projects/devana/files
- State: beta
- Keywords: browser
- Code repository: (see download)
- Code repository: https://gitlab.com/Trilarion/devana.git (snapshot of source releases)
- Code language: PHP
- Code license: BSD
Main web site is unavailable.
Main web site is unavailable. License change from GPL-3.0 to BSD between version 1.5.3 and 1.6.6.
## Building

View File

@ -5,7 +5,8 @@ _Turn based command line fighting game for Windows and Unix-like systems._
- Home: https://sourceforge.net/projects/duelcommander/
- Download: https://sourceforge.net/projects/duelcommander/files
- State: beta, inactive since 2009
- Code repository: (see download)
- Keywords: text-based
- Code repository: https://gitlab.com/Trilarion/duelcommander.git (snapshot of source releases)
- Code language: C
- Code license: GPL-3.0

View File

@ -2,10 +2,10 @@
_A WWII, turn based platoon, company level war game on the Eastern Front._
- Home: http://kursk.sourceforge.net/newfiles/Projects.htm, https://sourceforge.net/projects/kursk
- Home: http://kursk.sourceforge.net/, https://sourceforge.net/projects/kursk
- Download: https://sourceforge.net/projects/kursk/files
- State: beta, inactive since 2000
- Code repository: (see download)
- Code repository: https://gitlab.com/Trilarion/kursk.git (snapshot of source releases)
- Code language: C++
- Code license: GPL-2.0

View File

@ -5,7 +5,7 @@ _Simple but addictive turn based strategy game._
- Home: https://sourceforge.net/projects/slaygame/, http://slaygame.sourceforge.net/
- Download: https://sourceforge.net/projects/slaygame/files
- State: beta, inactive since 2010
- Code repository: (see download)
- Code repository: https://gitlab.com/Trilarion/slaygame.git (snapshot of source releases)
- Code language: Java
- Code license: GPL-3.0

View File

@ -2,11 +2,13 @@
_"4X" (eXplore, eXpand, eXploit, eXterminate) turn-based, empire-building strategy game on the galactic level._
- Home: https://archive.codeplex.com/?p=supremacy
- State: beta, inactive
- Code repository: (see download)
- Home: https://archive.codeplex.com/?p=supremacy, http://supremacy.square7.ch/wiki/index.php?title=Main_Page, http://www.startreksupremacy.com/, https://bitbucket.org/mstrobel/supremacy/overview
- Download: http://www.startreksupremacy.com/download.html
- State: beta, inactive since 2014
- Code repository: https://bitbucket.org/mstrobel/supremacy (hg)
- Code language: C#
- Code license: Ms-RL
- Assets license: CC-BY-SA-2.0
Ms-RL = Microsoft Reciprocal License

View File

@ -6,7 +6,7 @@ _Windows clone of Linux KAtomic logic game._
- Download: https://sourceforge.net/projects/watomic/files/
- State: mature, inactive since 2005
- Keywords: remake
- Code repository: (see download)
- Code repository: https://gitlab.com/Trilarion/watomic.git (snapshot of source releases)
- Code language: Pascal
- Code license: GPL-2.0

View File

@ -5,7 +5,7 @@ _2D turn based strategy game, where the player commands an army in the explorati
- Home: https://sourceforge.net/projects/worldofheroes
- Download: https://sourceforge.net/projects/worldofheroes/files/WOH%20v0.4.2/
- State: beta, inactive since 2009
- Code repository: (see download)
- Code repository: https://gitlab.com/Trilarion/worldofheroes.git (snapshot of source releases)
- Code language: Python
- Code license: BSD

View File

@ -1,7 +1,6 @@
{
"git": [
"http://git.artsoft.org/rocksndiamonds.git",
"http://git.net-core.org/tome/t-engine4.git",
"http://git.pond.sub.org/empserver",
"http://repo.or.cz/openal-soft.git",
"https://anongit.freedesktop.org/git/pkg-config.git",
@ -35,6 +34,7 @@
"https://git.code.sf.net/p/solar-empire/code",
"https://git.code.sf.net/p/space-war-2/git",
"https://git.code.sf.net/p/stars-nova/code",
"https://git.net-core.org/tome/t-engine4.git",
"https://git.octaforge.org/engine/octaforge.git",
"https://git.savannah.gnu.org/git/adonthell/adonthell-wastesedge.git",
"https://git.savannah.gnu.org/git/freedink.git",
@ -274,6 +274,7 @@
"https://github.com/tales/tales-client.git",
"https://github.com/tarnus/aatraders.git",
"https://github.com/tautvilas/epoh.git",
"https://github.com/themanaworld/tmwa.git",
"https://github.com/thousandparsec/tpclient-pywx.git",
"https://github.com/thousandparsec/tpserver-cpp.git",
"https://github.com/topherredden/freestars.git",
@ -306,19 +307,26 @@
"https://gitlab.com/Trilarion/civilwar.git",
"https://gitlab.com/Trilarion/coltoo.git",
"https://gitlab.com/Trilarion/conquests.git",
"https://gitlab.com/Trilarion/devana.git",
"https://gitlab.com/Trilarion/digitalalovestory.git",
"https://gitlab.com/Trilarion/dragon-history.git",
"https://gitlab.com/Trilarion/dragon-hunt.git",
"https://gitlab.com/Trilarion/duelcommander.git",
"https://gitlab.com/Trilarion/dungeoncrawl.git",
"https://gitlab.com/Trilarion/galaxyng.git",
"https://gitlab.com/Trilarion/gm-tools.git",
"https://gitlab.com/Trilarion/gwiz.git",
"https://gitlab.com/Trilarion/janag.git",
"https://gitlab.com/Trilarion/koboldsquest2.git",
"https://gitlab.com/Trilarion/kursk.git",
"https://gitlab.com/Trilarion/lincity.git",
"https://gitlab.com/Trilarion/machinations.git",
"https://gitlab.com/Trilarion/mercenarycommander.git",
"https://gitlab.com/Trilarion/metalmech.git",
"https://gitlab.com/Trilarion/murderpd.git",
"https://gitlab.com/Trilarion/openrpgmaker.git",
"https://gitlab.com/Trilarion/orient.git",
"https://gitlab.com/Trilarion/phaosrpg.git",
"https://gitlab.com/Trilarion/pizza-business.git",
"https://gitlab.com/Trilarion/planets.git",
"https://gitlab.com/Trilarion/promisance.git",
@ -326,16 +334,20 @@
"https://gitlab.com/Trilarion/rogueclone.git",
"https://gitlab.com/Trilarion/sentient-storage.git",
"https://gitlab.com/Trilarion/skrupel.git",
"https://gitlab.com/Trilarion/slaygame.git",
"https://gitlab.com/Trilarion/spicetrade.git",
"https://gitlab.com/Trilarion/tbots.git",
"https://gitlab.com/Trilarion/theclans.git",
"https://gitlab.com/Trilarion/tuxracer.git",
"https://gitlab.com/Trilarion/uwadv.git",
"https://gitlab.com/Trilarion/wargamer.git",
"https://gitlab.com/Trilarion/watomic.git",
"https://gitlab.com/Trilarion/worldofheroes.git",
"https://gitlab.com/Trilarion/xconq.git",
"https://gitlab.com/Trilarion/zangband.git",
"https://gitlab.com/evol/evol-all.git",
"https://gitlab.com/freedroid/freedroid-src.git",
"https://gitlab.com/manaplus/manaplus.git",
"https://gitlab.com/pingus/pingus.git",
"https://gitlab.com/solarus-games/zsdx.git",
"https://gitlab.com/xonotic/xonotic.git",
@ -380,6 +392,7 @@
"https://bitbucket.org/featheredmelody/lost-sky-project-public/src",
"https://bitbucket.org/genericcontainer/goblin-camp/src",
"https://bitbucket.org/giszmo/glob2",
"https://bitbucket.org/mstrobel/supremacy",
"https://bitbucket.org/rude/love",
"https://bitbucket.org/sumwars/sumwars-code/src"
],

View File

@ -167,6 +167,8 @@ def run(type, urls):
if __name__ == '__main__':
supported_types = ['git', 'hg', 'svn'] # currently no bzr client installed
folder_name = {
'git': git_folder_name,
'svn': svn_folder_name,
@ -196,8 +198,7 @@ if __name__ == '__main__':
archives = json.loads(text)
for type in archives:
# currently no bzr checkout (problems with the repos)
if type == 'bzr':
if type not in supported_types:
continue
urls = archives[type]
run(type, urls)

View File

@ -0,0 +1,502 @@
"""
Helps me with importing source revisions into Git
"""
import shutil
import os
import subprocess
import tarfile
import zipfile
import distutils.dir_util
import sys
import urllib.request
import tempfile
import datetime
def extract_sources(source_path, type, destination_path):
"""
Extracts a zip, tar, ... to a destination path.
"""
if type == '.tbz2':
tar = tarfile.open(source_path, 'r')
os.chdir(destination_path)
tar.extractall()
elif type == '.zip':
with zipfile.ZipFile(source_path, 'r') as zip:
zip.extractall(destination_path)
def subprocess_run(cmd):
"""
"""
result = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
if result.returncode:
print("error {} in call {}".format(result.returncode, cmd))
print(result.stderr.decode('ascii'))
sys.exit(-1)
else:
print(' output: {}'.format(result.stdout.decode('ascii')))
def single_revision():
"""
"""
# remove temp path completely and create again
print('clear temp')
if os.path.isdir(temp_path):
shutil.rmtree(temp_path)
os.mkdir(temp_path)
# download archive
print('download archive from ftp')
with urllib.request.urlopen(ftp_link) as response:
with tempfile.NamedTemporaryFile(delete=False) as tmp_file:
shutil.copyfileobj(response, tmp_file)
# unpack source files and delete archive
print('extract {} to temp'.format(os.path.basename(ftp_link)))
extract_sources(tmp_file.name, os.path.splitext(ftp_link)[1], temp_path)
os.remove(tmp_file.name)
# we need to go up in temp_path until we find the first non-empty directory
nonempty_temp_path = temp_path
names = os.listdir(nonempty_temp_path)
while len(names) == 1:
nonempty_temp_path = os.path.join(nonempty_temp_path, names[0])
names = os.listdir(nonempty_temp_path)
print(' working in "{}" relative to temp'.format(os.path.relpath(nonempty_temp_path, temp_path)))
# if no original date is indicated, get it from the files (latest of last modified)
global original_date
if original_date is None:
latest_last_modified = 0
for dirpath, dirnames, filenames in os.walk(nonempty_temp_path):
for filename in filenames:
filepath = os.path.join(dirpath, filename)
lastmodified = os.path.getmtime(filepath)
if lastmodified > latest_last_modified:
latest_last_modified = lastmodified
original_date = datetime.datetime.fromtimestamp(latest_last_modified).strftime('%Y-%m-%d')
print(' extracted original date from files: {}'.format(original_date))
# clear git path without deleting '.git'
print('clear git')
for item in os.listdir(git_path):
# ignore '.git
if item == '.git':
continue
item = os.path.join(git_path, item)
if os.path.isdir(item):
shutil.rmtree(item)
else:
os.remove(item)
# copy unpacked source files to git path
print('copy to git')
distutils.dir_util.copy_tree(nonempty_temp_path, git_path)
# update the git index (add unstaged, remove deleted, ...)
print('git add')
os.chdir(git_path)
subprocess_run(['git', 'add', '--all'])
# perform the commit
print('git commit')
os.chdir(git_path)
message = 'version {} ({}) on {}'.format(version, ftp_link, original_date)
print(' message "{}"'.format(message))
# subprocess_run(['git', 'commit', '--message={}'.format(message), '--author={}'.format(author), '--date={}'.format(original_date), '--dry-run'])
subprocess_run(['git', 'commit', '--message={}'.format(message), '--author={}'.format(author), '--date={}'.format(original_date)])
if __name__ == "__main__":
git_path = r'..\crawl' # must be initialized with 'git init' before
temp_path = r'..\temp'
author = 'Linley Henzell et al 1997-2005 <www.dungeoncrawl.org>' # is used for all commits
# 1.
# ftp_link = 'ftp://ftp.dungeoncrawl.org/final/1.1.x/src/dc110f-src.tbz2'
# version = '110f'
# original_date = '1997-10-04' # format yyyy-mm-dd, according to versions.txt in version 400b26
# single_revision()
# 2.
# ftp_link = 'ftp://ftp.dungeoncrawl.org/final/2.7.x/src/dc270f-src.tbz2'
# version = '270f'
# original_date = '1998-09-22'
# single_revision()
# 3.
# ftp_link = 'ftp://ftp.dungeoncrawl.org/final/2.7.x/src/dc272f-src.tbz2'
# version = '272f'
# original_date = '1998-10-02'
# single_revision()
# 4.
# ftp_link = 'ftp://ftp.dungeoncrawl.org/final/2.8.x/src/dc280f-src.tbz2'
# version = '280f'
# original_date = '1998-10-18'
# single_revision()
# 5.
# ftp_link = 'ftp://ftp.dungeoncrawl.org/final/2.8.x/src/dc281f-src.tbz2'
# version = '281f'
# original_date = '1998-10-20'
# single_revision()
# 6.
# ftp_link = 'ftp://ftp.dungeoncrawl.org/final/2.8.x/src/dc282f-src.tbz2'
# version = '282f'
# original_date = '1998-10-24'
# single_revision()
# 7.
# ftp_link = 'ftp://ftp.dungeoncrawl.org/final/3.0.x/src/dc301f-src.tbz2'
# version = '301f'
# original_date = '1999-01-01'
# single_revision()
# 8.
# ftp_link = 'ftp://ftp.dungeoncrawl.org/final/3.0.x/src/dc302f-src.tbz2'
# version = '302f'
# original_date = '1999-01-04'
# single_revision()
# 9.
# ftp_link = 'ftp://ftp.dungeoncrawl.org/final/3.2.x/src/dc320f-src.tbz2'
# version = '320f'
# original_date = '1999-02-09'
# single_revision()
# 10.
# ftp_link = 'ftp://ftp.dungeoncrawl.org/final/3.3.x/src/dc330f-src.tbz2'
# version = '330f'
# original_date = '1999-03-30'
# single_revision()
# 11.
# ftp_link = 'ftp://ftp.dungeoncrawl.org/dev/3.3.x/src/cr331beta01-src.zip'
# version = '331beta01'
# original_date = '1999-04-09' # "Date last modified" of every file inside and of that the latest
# single_revision()
# 12.
# ftp_link = 'ftp://ftp.dungeoncrawl.org/dev/3.3.x/src/cr331beta02-src.zip'
# version = '331beta02'
# original_date = '1999-06-18'
# single_revision()
# 13.
# ftp_link = 'ftp://ftp.dungeoncrawl.org/dev/3.3.x/src/cr331beta03-src.zip'
# version = '331beta03'
# original_date = '1999-06-22'
# single_revision()
# 14.
# ftp_link = 'ftp://ftp.dungeoncrawl.org/dev/3.3.x/src/cr331beta04-src.zip'
# version = '331beta04'
# original_date = '1999-08-08'
# single_revision()
# 15.
# ftp_link = 'ftp://ftp.dungeoncrawl.org/dev/3.3.x/src/cr331beta05-src.zip'
# version = '331beta05'
# original_date = '1999-08-27'
# single_revision()
# 16.
# ftp_link = 'ftp://ftp.dungeoncrawl.org/dev/3.3.x/src/cr331beta06-src.zip'
# version = '331beta06'
# original_date = '1999-09-12'
# single_revision()
# 17.
# ftp_link = 'ftp://ftp.dungeoncrawl.org/dev/3.3.x/src/cr331beta07-src.zip'
# version = '331beta07'
# original_date = '1999-09-24'
# single_revision()
# 18.
# ftp_link = 'ftp://ftp.dungeoncrawl.org/dev/3.3.x/src/cr331beta08-src.zip'
# version = '331beta08'
# original_date = '1999-09-28'
# single_revision()
# 19.
# ftp_link = 'ftp://ftp.dungeoncrawl.org/dev/3.3.x/src/cr331beta09-src.zip'
# version = '331beta09'
# original_date = '1999-10-02'
# single_revision()
# 20.
# ftp_link = 'ftp://ftp.dungeoncrawl.org/dev/orphan/src/cr1999oct12src.zip'
# version = 'cr1999oct12'
# original_date = '1999-10-12'
# single_revision()
# 21.
# ftp_link = 'ftp://ftp.dungeoncrawl.org/dev/orphan/src/cr1999oct15src.zip'
# version = 'cr1999oct15'
# original_date = '1999-10-15'
# single_revision()
# 22.
# ftp_link = 'ftp://ftp.dungeoncrawl.org/dev/orphan/src/cr1999nov18src.zip'
# version = 'cr1999nov18'
# original_date = '1999-11-18'
# single_revision()
# 23.
# ftp_link = 'ftp://ftp.dungeoncrawl.org/dev/orphan/src/cr1999nov23src.zip'
# version = 'cr1999nov23'
# original_date = '1999-11-23'
# single_revision()
# 24.
# ftp_link = 'ftp://ftp.dungeoncrawl.org/dev/orphan/src/cr1999dec27src.zip'
# version = 'cr1999dec27'
# original_date = '1999-12-27'
# single_revision()
# 25.
# ftp_link = 'ftp://ftp.dungeoncrawl.org/dev/orphan/src/cr1999dec30src.zip'
# version = 'cr1999dec30'
# original_date = '1999-12-30'
# single_revision()
# 26.
# ftp_link = 'ftp://ftp.dungeoncrawl.org/dev/orphan/src/cr1999dec31src.zip'
# version = 'cr1999dec31'
# original_date = '1999-12-31'
# single_revision()
# 27.
# ftp_link = 'ftp://ftp.dungeoncrawl.org/dev/orphan/src/cr2000jan10src.zip'
# version = 'cr2000jan10'
# original_date = '2000-01-10'
# single_revision()
# 28.
# ftp_link = 'ftp://ftp.dungeoncrawl.org/dev/orphan/src/cr2000feb23src.zip'
# version = 'cr2000feb23'
# original_date = '2000-02-23'
# single_revision()
# 29.
# ftp_link = 'ftp://ftp.dungeoncrawl.org/dev/orphan/src/cr2000mar06src.zip'
# version = 'cr2000mar06'
# original_date = '2000-03-06'
# single_revision()
# 30.
# ftp_link = 'ftp://ftp.dungeoncrawl.org/dev/orphan/src/cr2000jun19src.zip'
# version = 'cr2000jun19src'
# original_date = '2000-06-19'
# single_revision()
# 31.
# ftp_link = 'ftp://ftp.dungeoncrawl.org/dev/orphan/src/cr2000jun20src.zip'
# version = 'cr2000jun20'
# original_date = '2000-06-20'
# single_revision()
# 32.
# ftp_link = 'ftp://ftp.dungeoncrawl.org/dev/orphan/src/cr2000jun22src.zip'
# version = 'cr2000jun22'
# original_date = '2000-06-22'
# single_revision()
# 33.
# ftp_link = 'ftp://ftp.dungeoncrawl.org/dev/orphan/src/cr2000jul22src.zip'
# version = 'cr2000jul22'
# original_date = '2000-07-22'
# single_revision()
# 34.
# ftp_link = 'ftp://ftp.dungeoncrawl.org/dev/orphan/src/cr2000aug01src.zip'
# version = 'cr2000aug01'
# original_date = '2000-08-01'
# single_revision()
# 35.
# ftp_link = 'ftp://ftp.dungeoncrawl.org/dev/orphan/src/cr2000aug13src.zip'
# version = 'cr2000aug13'
# original_date = '2000-08-13'
# single_revision()
# 36.
# ftp_link = 'ftp://ftp.dungeoncrawl.org/dev/orphan/src/cr2000oct30src.zip'
# version = 'cr2000oct30'
# original_date = '2000-10-30'
# single_revision()
# 37.
# ftp_link = 'ftp://ftp.dungeoncrawl.org/dev/4.0.x/src/cr400beta01-src.tbz2'
# version = '400beta01'
# original_date = None # 2000-12-20
# single_revision()
# 38.
# ftp_link = 'ftp://ftp.dungeoncrawl.org/dev/4.0.x/src/cr400beta02-src.tbz2'
# version = '400beta02'
# original_date = None # 2000-12-22
# single_revision()
# 39.
# ftp_link = 'ftp://ftp.dungeoncrawl.org/dev/4.0.x/src/cr400beta03-src.tbz2'
# version = '400beta03'
# original_date = None # 2000-12-29
# single_revision()
# 40.
# ftp_link = 'ftp://ftp.dungeoncrawl.org/dev/4.0.x/src/cr400beta04-src.tbz2'
# version = '400beta04'
# original_date = None # 2001-01-11
# single_revision()
# 41.
# ftp_link = 'ftp://ftp.dungeoncrawl.org/dev/4.0.x/src/cr400beta06-src.tbz2'
# version = '400beta06'
# original_date = None # 2001-01-23
# single_revision()
# 42.
# ftp_link = 'ftp://ftp.dungeoncrawl.org/dev/4.0.x/src/cr400beta07-src.tbz2'
# version = '400beta07'
# original_date = None # 2001-01-29
# single_revision()
# 43.
# ftp_link = 'ftp://ftp.dungeoncrawl.org/dev/4.0.x/src/cr400beta08-src.tbz2'
# version = 'cr400beta08'
# original_date = None # 2001-02-20
# single_revision()
# 44.
# ftp_link = 'ftp://ftp.dungeoncrawl.org/dev/4.0.x/src/cr400beta09-src.tbz2'
# version = 'cr400beta09'
# original_date = None # 2001-03-06
# single_revision()
# 45.
# ftp_link = 'ftp://ftp.dungeoncrawl.org/dev/4.0.x/src/cr400beta10-src.tbz2'
# version = 'cr400beta10'
# original_date = None # 2001-03-13
# single_revision()
# 46.
# ftp_link = 'ftp://ftp.dungeoncrawl.org/dev/4.0.x/src/cr400beta10b-src.tbz2'
# version = 'cr400beta10b'
# original_date = None # 2001-03-14
# single_revision()
# 47.
# ftp_link = 'ftp://ftp.dungeoncrawl.org/dev/4.0.x/src/cr400beta10c-src.tbz2'
# version = 'cr400beta10c'
# original_date = None # 2001-03-15
# single_revision()
# 48.
# ftp_link = 'ftp://ftp.dungeoncrawl.org/dev/4.0.x/src/cr400beta10d-src.tbz2'
# version = '400beta10d'
# original_date = None # 2001-03-18
# single_revision()
# 49.
# ftp_link = 'ftp://ftp.dungeoncrawl.org/dev/4.0.x/src/cr400beta11-src.tbz2'
# version = '400beta11'
# original_date = None # 2001-03-21
# single_revision()
# 50.
# ftp_link = 'ftp://ftp.dungeoncrawl.org/dev/4.0.x/src/cr400beta12-src.tbz2'
# version = '400beta12'
# original_date = None # 2001-04-02
# single_revision()
# 51.
# ftp_link = 'ftp://ftp.dungeoncrawl.org/dev/4.0.x/src/cr400beta13-src.tbz2'
# version = '400beta13'
# original_date = None # 2001-04-09
# single_revision()
# 52.
# ftp_link = 'ftp://ftp.dungeoncrawl.org/dev/4.0.x/src/cr400beta14-src.tbz2'
# version = '400beta14'
# original_date = None # 2001-04-20
# single_revision()
# 53.
# ftp_link = 'ftp://ftp.dungeoncrawl.org/dev/4.0.x/src/cr400beta15-src.tbz2'
# version = '400beta15'
# original_date = None # 2001-04-25
# single_revision()
# 54.
# ftp_link = 'ftp://ftp.dungeoncrawl.org/dev/4.0.x/src/cr400beta16-src.tbz2'
# version = '400beta16'
# original_date = None # 2001-05-11
# single_revision()
# 55.
# ftp_link = 'ftp://ftp.dungeoncrawl.org/dev/4.0.x/src/cr400beta17-src.tbz2'
# version = '400beta17'
# original_date = None # 2001-06-01
# single_revision()
# 56.
# ftp_link = 'ftp://ftp.dungeoncrawl.org/dev/4.0.x/src/cr400beta18-src.tbz2'
# version = '400beta18'
# original_date = None # 2001-08-04
# single_revision()
# 57.
# ftp_link = 'ftp://ftp.dungeoncrawl.org/dev/4.0.x/src/cr400beta19-src.tbz2'
# version = '400beta19'
# original_date = None # 2001-08-10
# single_revision()
# 58.
# ftp_link = 'ftp://ftp.dungeoncrawl.org/dev/4.0.x/src/cr400beta20-src.tbz2'
# version = '400beta20'
# original_date = None # 2001-11-05
# single_revision()
# 59.
# ftp_link = 'ftp://ftp.dungeoncrawl.org/dev/4.0.x/src/cr400beta22-src.tbz2'
# version = '400beta22'
# original_date = None # 2001-12-21
# single_revision()
# 60.
# ftp_link = 'ftp://ftp.dungeoncrawl.org/dev/4.0.x/src/dc400b23-src.tbz2'
# version = '400b23'
# original_date = None # 2002-03-16
# single_revision()
# 61.
# ftp_link = 'ftp://ftp.dungeoncrawl.org/dev/4.0.x/src/dc400b24-src.tbz2'
# version = '400b24'
# original_date = '2002-06-03' # taken again from ftp://ftp.dungeoncrawl.org/dev/4.0.x/src/
# single_revision()
# 62.
# ftp_link = 'ftp://ftp.dungeoncrawl.org/dev/4.0.x/src/dc400b25-src.tbz2'
# version = '400b25'
# original_date = '2003-03-06'
# single_revision()
# 63.
# ftp_link = 'ftp://ftp.dungeoncrawl.org/dev/4.0.x/src/dc400a26-src.tbz2'
# version = '400a26'
# original_date = '2003-03-17'
# single_revision()
# 64.
# ftp_link = 'ftp://ftp.dungeoncrawl.org/dev/4.0.x/src/dc400b26-src.tbz2'
# version = '400b26'
# original_date = '2003-03-24'
# single_revision()

49
tools/phaos.json Normal file
View File

@ -0,0 +1,49 @@
["https://sourceforge.net/projects/phaosrpg/files/Phaos%20Online%20RPG%20%28Source%20Code%29/Version%200.9.82/phaos-0.9.82-UPDATED-6.zip/download",
"https://sourceforge.net/projects/phaosrpg/files/Phaos%20Online%20RPG%20%28Source%20Code%29/Version%200.9.82/phaos-0.9.82-UPDATED-5.zip/download",
"https://sourceforge.net/projects/phaosrpg/files/Phaos%20Online%20RPG%20%28Source%20Code%29/Version%200.9.82/phaos-0.9.82-UPDATED-4.zip/download",
"https://sourceforge.net/projects/phaosrpg/files/Phaos%20Online%20RPG%20%28Source%20Code%29/Version%200.9.82/phaos-0.9.82-UPDATED-3.zip/download",
"https://sourceforge.net/projects/phaosrpg/files/Phaos%20Online%20RPG%20%28Source%20Code%29/Version%200.9.82/phaos-0.9.82-UPDATED-2.zip/download",
"https://sourceforge.net/projects/phaosrpg/files/Phaos%20Online%20RPG%20%28Source%20Code%29/Version%200.9.82/phaos-0.9.82-UPDATED.zip/download",
"https://sourceforge.net/projects/phaosrpg/files/Phaos%20Online%20RPG%20%28Source%20Code%29/Version%200.9.82/phaos-0.9.82.zip/download",
"https://sourceforge.net/projects/phaosrpg/files/Phaos%20Online%20RPG%20%28Source%20Code%29/Version%200.9.81/phaos-0.9.81.zip/download",
"https://sourceforge.net/projects/phaosrpg/files/Phaos%20Online%20RPG%20%28Source%20Code%29/Version%200.9.8/phaos-0.9.8.zip/download",
"https://sourceforge.net/projects/phaosrpg/files/Phaos%20Online%20RPG%20%28Source%20Code%29/Version%200.9.7/phaos-0.9.7.zip/download",
"https://sourceforge.net/projects/phaosrpg/files/Phaos%20Online%20RPG%20%28Source%20Code%29/Version%200.9.6/phaos-0.9.6.zip/download",
"https://sourceforge.net/projects/phaosrpg/files/Phaos%20Online%20RPG%20%28Source%20Code%29/Version%200.9/phaos-0.9.4.zip/download",
"https://sourceforge.net/projects/phaosrpg/files/Phaos%20Online%20RPG%20%28Source%20Code%29/Version%200.9/phaos-0.9.3.zip/download",
"https://sourceforge.net/projects/phaosrpg/files/Phaos%20Online%20RPG%20%28Source%20Code%29/Version%200.9/phaos-0.9.2.zip/download",
"https://sourceforge.net/projects/phaosrpg/files/Phaos%20Online%20RPG%20%28Source%20Code%29/Version%200.89/phaos-0.89.zip/download",
"https://sourceforge.net/projects/phaosrpg/files/OldFiles/phaos-0.9.5.zip/download",
"https://sourceforge.net/projects/phaosrpg/files/OldFiles/phaos-0.9.1.zip/download",
"https://sourceforge.net/projects/phaosrpg/files/OldFiles/phaos-0.9.zip/download",
"https://sourceforge.net/projects/phaosrpg/files/OldFiles/phaos-0.88.zip/download",
"https://sourceforge.net/projects/phaosrpg/files/OldFiles/phaos-0.88-rc3.zip/download",
"https://sourceforge.net/projects/phaosrpg/files/OldFiles/phaos-0.88-rc2.zip/download",
"https://sourceforge.net/projects/phaosrpg/files/OldFiles/phaos-0.88-rc1.zip/download",
"https://sourceforge.net/projects/phaosrpg/files/OldFiles/phaos-0.87-1.zip/download",
"https://sourceforge.net/projects/phaosrpg/files/OldFiles/phaos-0.87.zip/download",
"https://sourceforge.net/projects/phaosrpg/files/OldFiles/phaos-0.86.zip/download",
"https://sourceforge.net/projects/phaosrpg/files/OldFiles/phaos-0.86-TEST-3.zip/download",
"https://sourceforge.net/projects/phaosrpg/files/OldFiles/phaos-0.86-TEST-2.zip/download",
"https://sourceforge.net/projects/phaosrpg/files/OldFiles/phaos-0.86-TEST-1.zip/download",
"https://sourceforge.net/projects/phaosrpg/files/OldFiles/phaos-0.85.zip/download",
"https://sourceforge.net/projects/phaosrpg/files/OldFiles/phaos-0.85-TEST-3.zip/download",
"https://sourceforge.net/projects/phaosrpg/files/OldFiles/phaos-0.85-TEST-2.zip/download",
"https://sourceforge.net/projects/phaosrpg/files/OldFiles/phaos-0.85-TEST-1.zip/download",
"https://sourceforge.net/projects/phaosrpg/files/OldFiles/phaos-0.84.zip/download",
"https://sourceforge.net/projects/phaosrpg/files/OldFiles/phaos-0.84-TEST2.zip/download",
"https://sourceforge.net/projects/phaosrpg/files/OldFiles/phaos-0.84-TEST1.zip/download",
"https://sourceforge.net/projects/phaosrpg/files/OldFiles/phaos-0.82.zip/download",
"https://sourceforge.net/projects/phaosrpg/files/OldFiles/phaos-0.82-TEST3.zip/download",
"https://sourceforge.net/projects/phaosrpg/files/OldFiles/phaos-0.82-TEST2.zip/download",
"https://sourceforge.net/projects/phaosrpg/files/OldFiles/phaos-0.82-TEST1.zip/download",
"https://sourceforge.net/projects/phaosrpg/files/OldFiles/phaos-0.8.zip/download",
"https://sourceforge.net/projects/phaosrpg/files/OldFiles/phaos-0.77.zip/download",
"https://sourceforge.net/projects/phaosrpg/files/OldFiles/phaos-0.76.zip/download",
"https://sourceforge.net/projects/phaosrpg/files/OldFiles/phaos-0.74.zip/download",
"https://sourceforge.net/projects/phaosrpg/files/OldFiles/phaos0.72.zip/download",
"https://sourceforge.net/projects/phaosrpg/files/OldFiles/Pv0.72.zip/download",
"https://sourceforge.net/projects/phaosrpg/files/OldFiles/Pv0.7develnew.zip/download",
"https://sourceforge.net/projects/phaosrpg/files/OldFiles/Pv0.7.zip/download",
"https://sourceforge.net/projects/phaosrpg/files/OldFiles/Pv0.61.zip/download",
"https://sourceforge.net/projects/phaosrpg/files/OldFiles/Pv0.6.zip/download"]

View File

@ -0,0 +1,204 @@
"""
Downloads source releases from Sourceforge and puts them into a git repository
"""
import os
import shutil
import urllib.request
import json
import time
import zipfile
import subprocess
import datetime
import distutils.dir_util
import sys
def determine_version(name):
# to lower case
name = name.lower()
# cut leading terms
terms = ['phaos-', 'phaos', 'pv']
for t in terms:
if name.startswith(t):
name = name[len(t):]
# cut trailing '.zip'
t = '.zip'
if name.endswith(t):
name = name[:-len(t)]
return name
def determine_last_modified_date(folder):
latest_last_modified = 0
for dirpath, dirnames, filenames in os.walk(folder):
for filename in filenames:
filepath = os.path.join(dirpath, filename)
lastmodified = os.path.getmtime(filepath)
if lastmodified > latest_last_modified:
latest_last_modified = lastmodified
return latest_last_modified
def unzip_keep_last_modified(archive, destination):
"""
Assuming that destination is a directory and already existing.
"""
with zipfile.ZipFile(archive, 'r') as zip:
# zip.extractall(destination)
for zip_entry in zip.infolist():
name, date_time = zip_entry.filename, zip_entry.date_time
date_time = time.mktime(date_time + (0, 0, -1))
zip.extract(zip_entry, destination)
os.utime(os.path.join(destination, name), (date_time, date_time))
def strip_wrapping(folder):
names = os.listdir(folder)
while len(names) == 1:
folder = os.path.join(folder, names[0])
names = os.listdir(folder)
return folder
def copy_tree(source, destination):
# this gave an FileNotFoundError: [Errno 2] No such file or directory: '' on Windows
# distutils.dir_util.copy_tree(archive_path, git_path)
for dirpath, dirnames, filenames in os.walk(source):
# first create all the directory on destination
directories_to_be_created = [os.path.join(destination, os.path.relpath(os.path.join(dirpath, x), source)) for x in dirnames]
for directory in directories_to_be_created:
os.makedirs(directory, exist_ok=True)
# second copy all the files
filepaths_source = [os.path.join(dirpath, x) for x in filenames]
filepaths_destination = [os.path.join(destination, os.path.relpath(x, source)) for x in filepaths_source]
for src, dst in zip(filepaths_source, filepaths_destination):
shutil.copyfile(src, dst)
def subprocess_run(cmd):
"""
"""
result = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
if result.returncode:
print("error {} in call {}".format(result.returncode, cmd))
print(result.stderr.decode('ascii'))
sys.exit(-1)
else:
print(' output: {}'.format(result.stdout.decode('ascii')))
if __name__ == '__main__':
# https://sourceforge.net/projects/phaosrpg/files/OldFiles/Pv0.7devel.zip/download is a corrupt zip
# base path is the directory containing this file
base_path = os.path.abspath(os.path.dirname(__file__))
print('base path={}'.format(base_path))
# recreate archive path
archive_path = os.path.join(base_path, 'downloads')
if not os.path.exists(archive_path):
os.mkdir(archive_path)
# load source releases urls
with open(os.path.join(base_path, 'phaos.json'), 'r') as f:
urls = json.load(f)
print('will process {} urls'.format(len(urls)))
if len(urls) != len(set(urls)):
raise RuntimeError("urls list contains duplicates")
# determine file archives from urls
archives = [x.split('/')[-2] for x in urls]
if len(archives) != len(set(archives)):
raise RuntimeError("files with duplicate archives, cannot deal with that")
# determine version from file name
versions = [determine_version(x) for x in archives]
# for version in versions:
# print(version)
# extend archives to full paths
archives = [os.path.join(archive_path, x) for x in archives]
# download them
print('download source releases')
for url, destination in zip(urls, archives):
# only if not yet existing
if os.path.exists(destination):
continue
# download
print(' download {}'.format(os.path.basename(destination)))
with urllib.request.urlopen(url) as response:
with open(destination, 'wb') as f:
shutil.copyfileobj(response, f)
time.sleep(1) # we are nice
# unzip them
print('unzip downloaded archives')
unzipped_archives = [x[:-4] for x in archives] # folder is archive name without .zip
for archive, unzipped_archive in zip(archives, unzipped_archives):
print(' unzip {}'.format(os.path.basename(archive)))
# only if not yet existing
if os.path.exists(unzipped_archive):
continue
os.mkdir(unzipped_archive)
# unzip
unzip_keep_last_modified(archive, unzipped_archive)
# go up in unzipped archives until the very first non-empty folder
unzipped_archives = [strip_wrapping(x) for x in unzipped_archives]
# determine date
dates = [determine_last_modified_date(x) for x in unzipped_archives]
dates_strings = [datetime.datetime.fromtimestamp(x).strftime('%Y-%m-%d') for x in dates]
# if len(dates_strings) != len(set(dates_strings)):
# raise RuntimeError("Some on the same day, cannot cope with that")
# gather all important stuff in one list and sort by dates
db = list(zip(urls, unzipped_archives, versions, dates, dates_strings))
db.sort(key=lambda x:x[3])
print('proposed order')
for url, _, version, _, date in db:
print(' date={} version={}'.format(date, version))
# git init
git_path = os.path.join(base_path, 'phaosrpg')
if os.path.exists(git_path):
shutil.rmtree(git_path)
os.mkdir(git_path)
os.chdir(git_path)
subprocess_run(['git', 'init'])
# now process revision by revision
print('process revisions')
git_author = 'eproductions3 <eproductions3@user.sourceforge.net>'
for url, archive_path, version, _, date in db:
print(' process version={}'.format(version))
# clear git path without deleting .git
print(' clear git')
for item in os.listdir(git_path):
# ignore '.git
if item == '.git':
continue
item = os.path.join(git_path, item)
if os.path.isdir(item):
shutil.rmtree(item)
else:
os.remove(item)
# copy unpacked source files to git path
print('copy to git')
copy_tree(archive_path, git_path)
# update the git index (add unstaged, remove deleted, ...)
print('git add')
os.chdir(git_path)
subprocess_run(['git', 'add', '--all'])
# perform the commit
print('git commit')
os.chdir(git_path)
message = 'version {} ({}) on {}'.format(version, url, date)
print(' message "{}"'.format(message))
subprocess_run(['git', 'commit', '--message={}'.format(message), '--author={}'.format(git_author), '--date={}'.format(date)])