Showing posts with label programming. Show all posts
Showing posts with label programming. Show all posts

Saturday, January 16, 2021

The frustration that inevitably follows the initial euphoria

So I had this 10-15 year old open source game projects written in Java (AntiChess, SpiceTrade, Domino On Acid, 4DMaze) and I could quickly get them to run again and build with Gradle and I could do easily some static code analysis and throw out redundant stuff, fix deprecated code usage and reduce the overall amount of code, all without changing anything how these games looked or worked.

But now I have spent something like 20-30 hours (not really counted, could even be more) and frustration sets in. Mostly because

  • There is no visible progress. I simplify the code base and write documentation and tests, but the resulting game itself does not change even a single bit. I realize how far I'm from making substantial edits.
  • Real understanding of the code takes so much time. I have only gained superficial understanding of 4DMaze and Domino On Acid, no understanding of SpiceTrade and half-understanding of AntiChess so far. It really takes time to read the code, to understand possible side effects and to plan and conduct meaningful changes.
  • I realize how much work it would be to make substantial changes (not only minor fixes). I do not plan substantial changes for 4DMaze and Domino On Acid, so these two might see an official new release sooner. AntiChess is more work than anticipated, the 4 player mode is only doing random moves and the 2 and 4 player modes do not harmonize very well currently. SpiceTrade I would like to do something, but it has this inbuilt scripting engine that is outdated.
  • With this speed (which is probably a much more realistic estimate of how much time it takes to "improve" old games) I will never finish the hundreds of games I would like to engage with. I might need to give up on that dream and do some serious prioritization.
  • It's easy to break things and the test coverage is far below 100%. More often than I would have liked, I need to go back and revert changes in order to not break the apps badly. Generification is a potential source, adding final is another one (when reflexion is used somewhere else in the game).
 That's all not really a reason to give up and there is still hope that I will get faster over time and can use synergies. I'll surely become a better Java programmer in this phase.

Sunday, December 20, 2020

Progress of AntiChess

AntiChess is the first on the list of Java open source games I wanted to improve. It has been abandoned for a long time (since 2003) and it looks like a small enough game to get into the improvement of Java based games.

I took the CVS from 2003 and had previously converted it to Git already. It used Ant as build system but I could quickly upgrade it to use Gradle and with a JDK version 11 (from AdoptOpenJDK) I could easily run the game and after some adoption also the tests. That remarkable, fully working backwards compatibility of Java is always very nice to see.


The game and tests were 8.8k lines of code (LOC) initially and with using code analysis features from IntelliJ and some optimizations I could reduce that to 7.6k LOC without changing the game even a single bit (I hope at least). 10% reduction is a typical value at this stage. While I was at it, I also re-arranged the package structure, converted constants to enums, encapsuled public variables with getters and setters, improved names of variables and fixed common spelling errors (with project wide search and replace in IntelliJ this is quite easy).

Now the difficult part begins. I really have to understand the code to further optimize and improve it. One big thing is that the computer opponent seems to evaluate moves but does not perform a move in time. Additionally, the differentiating between a 2-player and a 4-player game could be done much better. There is only one inheritance (for pieces) and there definitely could be more Interfaces (for the evaluator, for the engine, for the player, ...). Moves should be immutable, I think, but they aren't and I want to find out what is currently holding them back from being immutable. It's currently not clear if AntiChess could also play normal chess. I want to find out.

The graphics is relying on Java Swing, which is a quite old framework and doesn't look so shiny. However, I will not change that, only nicely separate the user interface from the rest of the game. This is definitely something that will remain for somebody else.

And I published the updated version of the game under the GPL-3.0 license (was MIT). That is a more restrictive license, but I definitely like it more for end user applications.

Sunday, December 13, 2020

List of C++ games I want to improve

 Here is the list of C++ games I want to improve

Mature

  •  54321 (Custom (a very simple copyleft see http://old.nklein.com/etc/copyright.php), 2001)
  • Maelstrom (GPL-2.0, 2002)
  • Pizza Business (GPL-2.0, 2003)
  • Wargamer (GPL-2.0, 2003)
  • I Have No Tomatoes (zlib, 2004)
  • Nighthawk (GPL-2.0, 2004)
  • Openglad (GPL-2.0, 2004)
  • Crack Attack! (GPL-2.0, 2005)
  • Einstein Puzzle (GPL-2.0, 2005)
  • GL-117 (GPL-2.0, 2005)
  • Sarah-Maries Eierjagd (GPL-2.0, 2005)
  • Shotgun Debugger (GPL-2.0, 2005)
  • Super Transball 2 (GPL-2.0, 2005)
  • Tumiki Fighters (2-clause BSD, 2005)
  • Xconq (GPL-2.0, 2005)
  • Bloboats (GPL-2.0, 2006)
  • 2H4U (GPL-2.0, 2007)
  • Adanaxis (GPL-2.0 (non-free file in the commercial version), 2007)
  • Armies (GPL-3.0, 2007)
  • kiki the nano bot (Public domain, 2007)
  • Ri-li (GPL-3.0, 2007)
  • Attal: Lords of doom (GPL-2.0, 2008)
  • BRIQUOLO (GPL-3.0, 2008)
  • Gravitation (Public domain, 2008)
  • Mtp Target (GPL-2.0, 2008)
  • Battle Tanks (GPL-2.0, 2009)
  • Dark Oberon (GPL-2.0, 2009)
  • Glest (GPL-2.0, 2009)
  • LevelHead (GPL-3.0, 2009)
  • Primrose (Public domain, 2009)
  • Secret Maryo Chronicles (GPL-3.0, 2009)
  • Bombermaaan (GPL-3.0, 2010)
  • Crimson Fields (GPL-2.0, 2010)
  • Cultivation (Public domain, 2010)
  • Linwarrior 3D (Apache-2.0, 2010)
  • Passage (Public domain, 2011)
  • Song of Albion (Apache-2.0, 2011)
  • Super Methane Brothers (GPL-2.0, 2011)
  • Afternoon Stalker (GPL-2.0, 2012)
  • Conquests (GPL-2.0, 2012) 
  • Liberal Crime Squad (GPL-2.0, 2012)
  • Mega Mario (LGPL-2.1, 2012)
  • PixelLight (MIT, 2012)
  • Privateer - Gemini Gold (GPL-2.0, 2012)
  • Toppler (GPL-2.0, 2012)
  • TROPHY (GPL-2.0, 2012)
  • UFO2000 (GPL-2.0, 2012)
  • Battle City (GPL-3.0, 2013)
  • Bos Wars (GPL-2.0, 2013)
  • BurgerSpace (GPL-2.0, 2013)
  • Cosmosmash (GPL-2.0, 2013)
  • Garith (LGPL-2.1, 2013)
  • Hex-a-hop (GPL-2.0, 2013)
  • Key Runner (GPL-3.0, 2013)
  • Murder In The Public Domain (GPL-3.0, 2013)
  • Zero Ballistics (MIT, 2013)
  • BlockOut II (GPL-2.0, 2014)
  • Curse of War (GPL-3.0, 2014)
  • Cuyo (GPL-2.0, 2014)
  • FLTK Recycling Game! (LGPL-2.1, 2014)
  • Grobots (GPL-2.0, 2014)
  • Hovertank3D (GPL-2.0, 2014)
  • Keen Dreams (GPL-2.0, 2014)
  • Maxit (3-clause BSD , 2014)
  • Scorched3D (GPL-2.0, 2014)
  • VDrift (GPL-3.0, 2014)
  • X-Moto (GPL-2.0, 2014)
  • Xenowar (GPL-3.0, 2014)
  • ativayeban (GPL-2.0, 2015)
  • Egoboo (GPL-3.0, 2015)
  • Freekick 3 (GPL-3.0, 2015)
  • H-Craft Championship (zlib, 2015)
  • Micropolis (GPL-3.0, 2015)
  • NetMauMau (LGPL-3.0, 2015)
  • OpenGL Test Drive Remake (GPL-3.0, 2015)
  • OpenLiero (Custom, 2015)
  • Open Zelda (zlib, 2015)
  • Return of Dr. Destructo (MIT, 2015)
  • Vulture's Eye (NetHack General Public License, 2015)
  • Atomic Tanks (GPL-2.0, 2016)
  • Birth of the Empires (Custom (private use allowed), 2016)
  • Blob Wars Episode 2 : Blob And Conquer (GPL-2.0, 2016)
  • FLTrator (GPL-3.0, 2016)
  • Ghostly (GPL-3.0, 2016)
  • HoverRace (Custom, 2016)
  • OGS Mahjong (GPL-3.0, 2016)
  • OldSkool Gravity Game (GPL-3.0, 2016)
  • Open Yahtzee (GPL-2.0, 2016)
  • SDL-Ball (GPL-3.0, 2016)
  • TORCS, The Open Racing Car Simulator (GPL-2.0, 2016)
  • xu4 (GPL-2.0, 2016)

Unfinished

  • Operation Citadel (GPL-2.0, 2000)
  • Greenius' Civil War (GPL-2.0, 2001)
  • Apricots (GPL-2.0, 2003)
  • Cannon Smash (GPL-2.0, 2003)
  • Cat Mother Dead Justice (3-clause BSD, 2003)
  • Machinations (GPL-2.0, 2003)
  • Sopwith 3 (GPL-2.0, 2003)
  • XArchon (GPL-2.0, 2003)
  • Colonization too (GPL-2.0, 2004)
  • Krystal Drop (GPL-2.0, 2004)
  • Noiz2sa (2-clause BSD, 2004)
  • Pathogen Warrior (GPL-2.0, 2004)
  • TuxKart (GPL-2.0, 2004)
  • Bombic (GPL-2.0, 2005)
  • Microracers (GPL-2.0, 2005)
  • T^3 (GPL-2.0, 2005)
  • Boson (GPL-2.0, 2006)
  • GPL Arcade Volleyball (GPL-2.0, 2006)
  • GUSANOS (GPL-2.0, 2006)
  • OpenMortal (GPL-2.0, 2006)
  • StarBlastrix (GPL-2.0, 2006)
  • Brutal Chess (GPL-2.0, 2007)
  • DreamZZT (GPL-2.0, 2007)
  • ika (GPL-2.0, 2007)
  • Kobo Deluxe (GPL-2.0 (LGPL?), 2007)
  • SilverTree (GPL-3.0, 2007)
  • SLASH'EM (Custom (NetHack license), 2007)
  • StressFreeZone (GPL-3.0, 2007)
  • Tactics Squad (GPL-2.0, 2007)
  • Zatacka (GPL-2.0, 2007)
  • Avanor (GPL-2.0, 2008)
  • FreeRails (GPL-2.0, 2008)
     
  • Freestars (GPL-2.0, 2008)
  • Help Hannah's Horse (GPL-2.0, 2008)
  • Mars, Land of No Mercy (GPL-2.0, 2008)
  • Qonk (GPL-2.0, 2008)
  • RedShift (GPL-2.0, 2008)
  • S.C.O.U.R.G.E. (GPL-2.0, 2008)
  • Sengoku: Warring States of Japan (MIT, 2008)
  • Balder2D (GPL-2.0, 2009)
  • Ball and Paddle (GPL-3.0, 2009)
  • Brikx (GPL-2.0, 2009)
  • Cadaver (GPL-2.0, 2009)
  • Crown and Cutlass (Custom (almost identical to BSD), 2009)
  • Ecksdee (GPL-2.0, 2009)
  • Fall of Imiryn (GPL-3.0, 2009)
  • Goblin Hack (GPL-2.0, 2009)
  • Jamp (GPL-3.0, 2009)
  • Bombic2 (GPL-2.0, 2010)
  • Combat Simulator Project (GPL-2.0, 2010)
  • Heroes of Wesnoth (GPL-3.0, 2010)
  • Labyrinth of Worlds (LGPL-3.0, 2010)
  • OpenAlchemist (GPL-2.0, 2010)
  • OpenHoMM (GPL-3.0, 2010)
  • Stargus (GPL-2.0, 2010)
  • Zaz (GPL-3.0, 2010)
  • Danger from the Deep (GPL-2.0, 2011)
  • Dawn (GPL-3.0, 2011)
  • Digbuild (GPL-2.0, 2011)
  • The Rush (GPL-2.0, 2011)
  • Batrachians (GPL-2.0, 2012)
  • Cataclysm (CC-BY-SA-3.0, 2012)
  • Fictional Air Combat (GPL-3.0, 2012)
  • Goblin Camp (GPL-3.0, 2012)
  • Kuklomenos (GPL-3.0, 2012)
  • Nikwi (GPL-2.0, 2012)
  • Peragro Tempus (GPL-2.0, 2012)
  • splexhd (GPL-2.0, 2012)
  • Tux Football (GPL-2.0, 2012)
  • Critterding (GPL-2.0, 2013)
  • Cytadela (GPL-3.0, 2013)
  • Forsaken (GPL-2.0, 2013)
  • Gnomescroll (GPL-3.0, 2013)
  • Grail (GPL-3.0, 2013)
  • HolySpirit (GPL-3.0, 2013)
  • Limbs Off (GPL-3.0, 2013)
  • MechCommander 2 Omnitech (MS-PL, 2013)
  • Phantasy Star Rebirth (GPL-3.0, 2013)
  • Teeworlds (zlib, 2013)
  • Theme Park Builder 3D CAD (GPL-3.0, 2013)
  • Trinity Reign (GPL-3.0, 2013)
  • Ultimate Stunts (GPL-2.0, 2013)
  • xBaK (GPL-3.0, 2013)
  • Xye (zlib, 2013)
  • Battles of Antargis (GPL-2.0, 2014)
  • Flukz (GPL-2.0, 2014)
  • Gusty's Serpents (GPL-3.0, 2014)
  • Kingdoms (GPL-3.0, 2014)
  • Knights (GPL-3.0, 2014)
  • Open Tibia (GPL-2.0, 2014)
  • Summoning Wars (GPL-3.0, 2014)
  • TurokEX (GPL-2.0, 2014)
  • Vamos (GPL-3.0, 2014)
  • Blitwizard (zlib, 2015)
  • Construo (GPL-3.0, 2015)
  • Free Heroes 2 (GPL-2.0, 2015)
  • Hardwar (GPL-3.0, 2015)
  • M.E.W.L. (GPL-2.0, 2015)
  • OpenCity (GPL-2.0, 2015)
  • OpenRaider (GPL-2.0, 2015)
  • Q-Gears (GPL-2.0, 2015)
  • starshatter-open (3-clause BSD, 2015)
  • The Epic of Heroes (GPL-3.0, 2015)
  • Thunder&Lightning (GPL-2.0, 2015)
  • Witch Blast (GPL-3.0, 2015)
  • DNT (GPL-3.0, 2016)
  • FreeRCT (GPL-2.0, 2016)
  • Hocoslamfy (GPL-2.0, 2016)
  • l-echo (GPL-3.0, 2016)
  • M.A.R.S. (GPL-3.0, 2016)
  • Numpty Physics (GPL-3.0, 2016)
  • Strife: Veteran Edition (GPL-3.0, 2016)
  • TecnoballZ (GPL-3.0, 2016)
  • uMario (GPL-2.0, 2016)
  • uninvited (Artistic License-2.0, 2016)

List of C games I want to improve

Here the list of C games I want to improve

Mature

  • Hack (3-clause BSD, 1985)
  • xdigger (GPL-2.0, 1999)
  • 3Dc (GPL-2.0, 2000)
  • ACM (GPL-2.0, 2000)
  • Circus Linux! (GPL-2.0, 2000)
  • XInvaders 3D (GPL-2.0, 2000)
  • XBill (GPL-2.0, 2001)
  • Batalla Naval (GPL-2.0, 2002)
  • Deathchase 3D (GPL-2.0, 2002)
  • Vectoroids (GPL-2.0, 2002)
  • Alex the Allegator 4 (GPL-2.0, 2003)
  • Ice Breaker (GPL-2.0, 2003)
  • Aklabeth (GPL-2.0, 2004)
  • Digger Remastered (GPL-2.0, 2004)
  • Falcon's Eye (NetHack General Public License, 2004)
  • Jump'n'Bump (GPL-2.0, 2004)
  • Abe's Amazing Adventure (GPL-2.0, 2005)
  • GalaxyNG (GPL-2.0, 2005)
  • Lincity (GPL-2.0, 2005)
  • Luola (GPL-2.0, 2005)
  • Overgod (GPL-2.0, 2005)
  • XBlast (GPL-2.0, 2005)
  • ZAngband (Custom (Modifications allowed?), 2005)
  • Linley's Dungeon Crawl (Custom (Crawl General Public License), 2006)
  • Moon-buggy (GPL-2.0, 2006)
  • No Gravity (GPL-2.0, 2006)
  • Rogue Clone IV (3-clause BSD, 2006)
  • Excellent Bifurcation (GPL-2.0, 2007)
  • Penguin Command (GPL-2.0, 2007)
  • Meritous (GPL-3.0, 2008)
  • Sinatra (GPL-3.0, 2008)
  • Slot-Racers (GPL-3.0, 2008)
  • Defendguin (GPL-2.0, 2009)
  • Netrek (Custom (permissive), 2009)
  • SDL Asylum (GPL-3.0, 2009)
  • Tornado (GPL-2.0, 2009)
  • Tremfusion (GPL-2.0, 2009)
  • Caph (GPL-3.0, 2010)
  • FooBillard (GPL-2.0, 2010)
  • LBreakout2 (GPL-2.0, 2010)
  • Slime Volley (GPL-3.0, 2010)
  • XPilot (GPL-2.0, 2010)
  • XPilot NG (GPL-2.0, 2010)
  • GNU Go (GPL-3.0, 2011)
  • The Ur-Quan Masters (GPL-2.0, 2011)
  • Tux of Math Command (GPL-3.0, 2011)
  • 4D-TRIS (GPL-2.0, 2012)
  • Biniax (zlib, 2012)
  • FooBillard++ (GPL-2.0, 2012)
  • GNU FreeDink (GPL-3.0, 2012)
  • OpenArena (GPL-2.0, 2012)
  • Rise of the Triad for Linux (GPL-2.0, 2012)
  • SDL Bomber (GPL-2.0, 2012)
  • Dope Wars (GPL-2.0, 2013)
  • HHexen (GPL-2.0, 2013)
  • LTris (GPL-2.0, 2013)
  • c64-nuclearreaction (GPL-3.0, 2014)
  • CatacombSDL (GPL-2.0, 2014)
  • DarkPlaces (GPL-2.0, 2014)
  • Dune Dynasty (GPL-2.0, 2014)
  • SDL Sopwith (GPL-2.0, 2014)
  • SuperFoulEgg (MIT, 2014)
  • VMS Empire (GPL-2.0, 2014)
  • Atomiks (GPL-3.0, 2015)
  • Liquid War (GPL-3.0, 2015)
  • RPG-X (GPL-2.0, 2015)
  • The Endless Dungeons (CC-BY-NC-SA-2.0, 2015)
  • Tile World (GPL-2.0, 2015)
  • TwinEngine (GPL-2.0, 2015)
  • XScavenger (GPL-2.0, 2015)
  • Atrinik (GPL-2.0, 2016)
  • GCompris (GPL-3.0, 2016)
  • Nox Imperii (GPL-3.0, 2016)
  • PrBoom+ (GPL-2.0, 2016)
  • Sudokuki (GPL-3.0, 2016)
  • Tremulous (GPL-2.0, 2016)

Unfinished

  • Tux Racer (GPL-2.0, 2001)
  • Anagramarama (GPL-2.0, 2002)
  • Gem Drop X (GPL-2.0, 2002)
  • Vertigo (GPL-2.0, 2002)
  • Freeciv Alpha Centauri project (GPL-2.0, 2003)
  • The Clans (GPL-2.0, 2003)
  • 3D Pong (GPL-2.0, 2004)
  • Gee Whiz (GPL-2.0, 2004)
  • Open Quartz (GPL-2.0, 2004)
  • rRootage (2-clause BSD, 2004)
  • T-Bots (GPL-2.0, 2004)
  • Vorton (GPL-3.0, 2004)
  • Heart of the Alien (GPL-2.0, 2005)
  • JFDuke3D (GPL-2.0, 2005)
  • JonoF's Shadow Warrior Port (JFSW) (GPL-2.0, 2005)
  • Elysium Engine (GPL-2.0, 2006)
  • Thrust (GPL-2.0, 2006)
  • Transfusion (GPL-2.0, 2007)
  • Amphetamine (GPL-2.0, 2008)
  • Duke3d_w32 (GPL-2.0, 2008)
  • Duel Commander (GPL-3.0, 2009)
  • Duke3D (GPL-2.0, 2009)
  • Freenukum (GPL-3.0, 2009)
  • Mmpong (GPL-3.0, 2009)
  • PSY PONG 3D (GPL-3.0, 2009)
  • BomberClone (GPL-2.0, 2010)
  • Syndicate Wars Port (GPL-3.0, 2010)
  • Warp Rogue (GPL-3.0, 2010)
  • xDuke (GPL-2.0, 2010)
  • XSera (MIT, 2010)
  • CAVEZ of PHEAR (GPL-3.0, 2011)
  • FreePrince (GPL-2.0, 2011)
  • KQ Lives (GPL-2.0, 2011)
  • Infon Battle Arena (GPL-2.0, 2012)
  • XorCurses (GPL-3.0, 2012)
  • Airstrike (GPL-2.0, 2014)
  • Hnefatafl (ISC, 2014)
  • Lips of Suna (GPL-3.0, 2014)
  • n2048 (2-clause BSD, 2014)
  • OpenTitus (GPL-3.0, 2014)
  • Turious (GPL-3.0, 2014)
  • CorEngine (zlib, 2015)
  • erampage (GPL-2.0, 2015)
  • FreeBlocks (GPL-3.0, 2015)
  • Kartering (GPL-2.0, 2015)
  • Minesweeper (in C) (3-clause BSD, 2015)
  • Powermanga (GPL-3.0, 2015)
  • Tenes Empanadas Graciela (GPL-2.0, 2015)
  • twin-e (GPL-2.0, 2015)
  • Chocolate Duke3D (GPL-2.0, 2016)
  • Escape Towards The Unknown (GPL-2.0, 2016)
  • Wizznic! (GPL-3.0, 2016)

List of Python games I want to improve

And here now the list of Python games I want to improve

Mature

  • PySol (GPL-2.0, 2004)
  • SolarWolf (LGPL-2.1, 2004)
  • Search for the Red Herring (GPL-2.0, 2006)
  • Bouncy the Hungry Rabbit (GPL-2.0, 2007)
  • Slune (GPL-2.0, 2007)
  • Trip on the Funny Boat (GPL-2.0, 2007)
  • Frets on Fire (GPL-2.0, 2008)
  • Mrfuze (LGPL-2.1, 2008)
  • Ardentryst (GPL-3.0, 2009)
  • LevelHead (GPL-3.0, 2009)
  • MicroWar 2.0 (3-clause BSD, 2009)
  • Libre: The Open Source Card Game (AGPL-3.0, 2010)
  • Monsters and Mushrooms (GPL-2.0, 2010)
  • Python Kye (GPL-2.0, 2010)
  • Brain Workshop (GPL-2.0, 2011)
  • Wizards Magic (GPL-2.0, 2012)
  • OpenRPG (GPL-2.0, 2013)
  • Q (GPL-3.0, 2013)
  • The Bub's Brothers (MIT, 2013)
  • Deity (GPL-2.0, 2014)
  • Fujo (CC-BY-SA-4.0, 2014)
  • Star-Wars-III (GPL-2.0, 2014)
  • Freekick 3 (GPL-3.0, 2015)
  • Gnome Hearts (GPL-2.0, 2015)
  • Micropolis (GPL-3.0, 2015)
  • PyBreak360 (GPL-3.0, 2015)
  • Atrinik (GPL-2.0, 2016)
  • Chess3D (GPL-3.0, 2016)
  • Dungeon Monkey Eternal (GPL-2.0, 2016)
  • GCompris (GPL-3.0, 2016)
  • ransack (MIT, 2016) 

Unfinished

  • Umbra (similar to BSD, 2002)
  • Civil (GPL-2.0, 2003)
  • Pathological (GPL-2.0, 2003)
  • pyRacerz (GPL-2.0, 2005)
  • Castle-Combat (GPL-2.0, 2006)
  • OpenRTS (GPL-2.0, 2006)
  • buggyGame (GPL-2.0, 2007)
  • Eos, Dawn of Light: A Space Opera (MIT, 2007)
  • ika (GPL-2.0, 2007)
  • Magic Gardeners Tournament (GPL-2.0, 2007)
  • Slingshot (GPL-2.0, 2007)
  • A Planet's Revenge (GPL-3.0, 2008)
  • Krank (Public domain, 2008)
  • One is enough (GPL-2.0, 2008)
  • Stringrolled (Public domain, 2008)
  • Which Way Is Up? (GPL-2.0, 2008)
  • Beat Harvester (GPL-2.0, 2009)
  • Fallen Spire (GPL-3.0, 2009)
  • Fall of Imiryn (GPL-3.0, 2009)
  • Froggix (GPL-3.0, 2009)
  • World of Heroes (3-clause BSD, 2009)
  • AI Wars (MIT, 2010)
  • nXtank (GPL-3.0, 2010)
  • Canta (GPL-3.0, 2011)
  • GalaxyMage Redux (GPL-2.0, 2011)
  • Kobold's Quest 2 (LGPL-3.0, 2011)
  • OpenBlox (GPL-3.0, 2011)
  • OpenMOO2 (GPL-2.0, 2011)
  • PyKaraoke (LGPL-2.1, 2011)
  • UlDunAd (GPL-3.0, 2011)
  • Artillery Duel Reloaded (GPL-3.0, 2012)
  • Card Stories (AGPL-3.0, 2012)
  • Celestron (GPL-3.0, 2012)
  • PARPG (GPL-3.0, 2012)
  • Thousand Parsec (GPL-2.0, 2012)
  • Gnomescroll (GPL-3.0, 2013)
  • Heroes of Wing Commander (GPL-3.0, 2014)
  • Sintel The Game (MIT, 2014)
  • Vamos (GPL-3.0, 2014)
  • pyORPG (MIT, 2015)
  • Hexoshi (GPL-3.0, 2016)
  • Hypatia (MIT, 2016)

List of JavaScript/TypeScript games to be improved

 Here are the client-side Java/TypeScript games that I want to improve

Mature games

  • Pendumito (GPL-2.0, 2003)
  • WebHangman (GPL-2.0, 2003)
  • PrimeShooter (GPL-2.0, 2010)
  • RacerJS (MIT, 2010)
  • Runfield (GPL-3.0, 2011)
  • Skrupel - Tribute Compilation (GPL-2.0, 2011)
  • Xultris (MPL-1.1, 2011)
  • Candy Box 2 (GPL-3.0, 2013)
  • Fluid Table Tennis (MIT, 2013)
  • HTML5 Pacman (WTFPL, 2013)
  • Gorillas (Java Research License (no commercial use), 2014)
  • Lose Your Marbles (MIT, 2014)
  • OpenRoads (MIT, 2014)
  • Ball And Wall (MIT, 2015)
  • 3d.city (GPL-3.0 (with additional terms), 2016)
  • Chess3D (GPL-3.0, 2016)
  • Consomaton (MIT, 2016)
  • HexGL (MIT, 2016)
  • Prescription Wars (GPL-3.0, 2016)
  • skifree.js (MIT, 2016)

Unfinished

  • Betrayer's Moon Tactics (GPL-2.0, 2006)
  • Ajax3d (GPL-2.0, 2007)
  • Arashi-JS (GPL-2.0, 2010)
  • Skifree-HTML5-clone (GPL-3.0, 2011)
  • BlackNova Traders (GPL-2.0, 2012)
  • Card Stories (AGPL-3.0, 2012)
  • CommandoJS (MIT, 2012)
  • Hexwar (MIT, 2012)
  • Taggem (AGPL-3.0, 2014)
  • WWW (GPL-3.0, 2014)
  • Aussenposten (MIT, 2015)
  • BlakedAwesomenaughts (MIT, 2015)
  • movbizz (MIT, 2015)
  • Roguish (3-clause BSD, 2015)
  • Castle of the Winds (MIT, 2016)
  • lttp-phaser (MIT, 2016)



List of Pascal open source games to be improved

I decided to also delve into Pascal, as this was one of the first languages I ever programmed in and I have quite fond memories about it (from like 25 years ago). Here is the list of games I intend to improve:

 Mature

  • WAtomic (GPL-2.0, 2005)
  • Dragon History - Dračí Historie (GPL-2.0, 2010)
  • Dungeon Monkey Unlimited (LGPL-2.1, 2010)
  • FunLabyrinthe (GPL-2.0, 2012)
  • LambdaRogue: The Book of Stars (GPL-2.0, 2012)
  • Battle City (GPL-3.0, 2013)
  • C-evo (Public domain (original project), 2013)
  • Iron Seed (GPL-3.0, 2013)
  • Scrabble3D (GPL-3.0, 2015)
Unfinished projects
  • RPDungeon - computer aided role playing (GPL-2.0, 2006)
  • Siege of Avalon : Open Source (Custom (NC), 2011)
  • X-Force: Fight For Destiny (GPL-2.0, 2011)
  • FAR Colony (GPL-3.0, 2014)

Friday, December 11, 2020

List of Java open source games first to be improved

In the last post I laid out the general approach of how I want to improve open source games. I wanted to start with inactive Java games. I had a look at the database and decided to first go for mature projects and then for unfinished projects. Within each group I will advance chronologically, i.e. start with those that have been inactive for the longest time (at least since 2016). The list is then:

 (format: name (license, year of last activity))

mature

  • AntiChess (MIT, 2003) in progress
  • Ladder (GPL-2.0, 2005) author updated in 2020
  • Spice Trade (LGPL-2.0, 2005) in progress
  • 4D Maze Game (Public domain, 2008) in progress
  • Moagg2 (GPL-2.0, 2008) CVS + SVN history not yet converted to Git
  • Domino On Acid (GPL-2.0, 2009) in progress
  • ORIENT (GPL-2.0, 2009) not a pure Java project, very complex
  • SpaceTrader for Java (GPL-2.0, 2010) there is a fork, maybe no need
  • HoDoKu (GPL-3.0, 2013) many clones on Github, need to find out which one to fork
  • Room for Change (Apache-2.0, 2013) Android (maybe later)
  • eAdventure (GPL-3.0, 2014)
  • Boulder Dash (MIT, 2015)
  • Micropolis (GPL-3.0, 2015)
  • Hypercube (GPL-2.0, 2016)
  • JaNaG - Java Name Generator (GPL-3.0, 2016)
  • Javelin (GPL-2.0, 2016)
  • jewelthief (GPL-3.0, 2016)
  • Mice Men: Remix (LGPL-3.0, 2016)
  • Polis (GPL-3.0, 2016)
  • Sudokuki (GPL-3.0, 2016)

 unfinished

  • Freya Game Engine (LGPL-2.1, 2002)
  • Planetary Hoppers (GPL-2.0, 2003)
  • Jake2 (GPL-2.0, 2006)
  • JQuest (GPL-2.0, 2006)
  • FreeRails (GPL-2.0, 2008) in progress
  • MUSoSu (GPL-3.0, 2008)
  • Space Opera (GPL-2.0, 2008)
  • jClassicRPG (LGPL-3.0, 2010)
  • Mercenary Commander (3-clause BSD, 2010)
  • Slay (GPL-3.0, 2010)
  • XSwing Plus (GPL-3.0, 2010)
  • Battlefield Java (GPL-3.0, 2011)
  • Creep Smash (GPL-3.0, 2011)
  • Blitzkrieg (GPL-3.0, 2012)
  • Decker (GPL-2.0, 2013)
  • DemiGod (GPL-3.0, 2013)
  • Mpango (GPL-2.0, 2013)
  • Rescue! Max (GPL-3.0, 2013)
  • EternalWinterWars (MIT, 2014)
  • Hale (GPL-2.0, 2014)
  • Turn of War (GPL-3.0, 2014)
  • Battleround (Apache-2.0, 2015)
  • Divercity (GPL-3.0, 2015)
  • FreeBlocks (GPL-3.0, 2015)
  • KnightOfWor (GPL-3.0, 2015)
  • Ares Dogfighter (GPL-3.0, 2016)
  • Dingo-Engine (3-clause BSD, 2016)
  • Team Tactics (MIT, 2016)
  • Yet Another Engine (MIT, 2016)
That will be the games I will concentrate on in the next months.

Thursday, December 10, 2020

How to improve open source games systematically

I'm closing in on finishing the new static website that shows the content of the open source games list quite nicely. It's built with a template generator library (jinja2) and a CSS framework (bulma), free icons and lots of links between the games, the inspirations, the developers, frameworks and information about how to improve the content. I hope I will get lots of updates of content from people seeing the site.

There are still things to improve, but I feel like I need the current version (90% ready) out.

And I like to think about what follows. I always wanted to start improving open source games (especially old abandoned ones) in a way where I apply lots of common improvements to many projects like better build or deployment system, code cleanups and other stuff without concentrating too much on the specific content and gameplay of a game. It's a kind of low hanging fruits first, cross-section, best practice, upcycling approach. Here is the plan for it:

I will concentrate first on inactive but more or less mature/finished games and will try to modernize and polish them. That will hopefully increase availability and attractiveness of them will I don't need to negotiate with other developers. I will of course touch everyone only shortly, basically leaving them ready for other developers to take over again. I will concentrate on the major languages in the following order: Java, JavaScript, Python, C, C++. Java, JavaScript and Python run on virtual machines and basically have high chances that code from the past is still runnable today without major modifications. Especially with Java I have made good experience in the past, sometimes old Java projects run out of the box. C and C++ is/was used in a majority of games. Learning and working with other languages might be nice but time is limited. Maybe some of the projects can be converted to another language (Java to Kotlin, JavaScript to TypeScript, C to C++, C++ to Rust) in the course of this work.

I imagine the following steps will be done in roughly that order:

  • Check the code license. Only work if the code license is unmistakably clear open source.
  • Getting the game to (compile and) run somehow. Fix major crashes that might occur because of the time passed since the game was abandoned. This is the most difficult step.
  • Improve the building system (Ant, Maven to Gradle, make to CMake)
  • Do a first code cleanup, remove unused code, remove unused dependencies
  • Check the artwork license. Remove all artwork without a clear free license. Replace with alternatives if possible.
  • Update the programming language version / compiler version (Python 2 to 3, Java 8 to 11)
  • Thoroughly test the game and make a list of possible improvements. Prioritize them by effort and benefit.
  • Implement the high benefit, low effort improvements.
  • Minimize the number of dependencies as much as possible without major replacements.
  • Update dependencies (SDL to SDL2 for example).
  • Increase platform support if possible.
  • Do a final code cleanup.
  • Improve documentation and leave a list of possible further improvements.
  • Put on Github or Gitlab if not yet there.
  • Make a release and distribute it
  • Post about it on social media

And I hope that all this takes basically not more than two weeks per game. That might be a bit optimistic.  The idea is though to exploit synergies between the projects, because the expert knowledge needed to do these improvements is not so project specific.

I will start with abandoned, mature games, then follow with abandoned, unfinished but promising games and then offer my services also to still actively developed games. For games of marginal interest, I will do only a minimal treatment, but for games that I really like, I hope I can improve them a lot actually. I'm especially looking forward to turn based strategy, fantasy role-playing, sports and racing simulations, but who knows, a simple arcade platformer can be fun too.

Wow, quite a lot of text here.

Monday, October 19, 2020

Polishing the static website takes time

 I think the largest problems with building the new static website are solved and most of the structure is in place. I can render links, icons, text, lists and combinations thereof; I have a working template system and a split of the entries in games and frameworks/tools. Games can be filtered by letter, by genre, by programming language and by supported OS platform. Additionally there is a developer index and an inspirations (other games) index, all with backlinks. The layout is kind of looking well. I use icons in an icon-font to kind of improve the visualization. So far, so good.

Now the details are still to be filled in. Adding a bit more information here and there. Choosing more icons (for the genres), improving the layout (adjusting the size of the programming languages shown according to how many entries there are for each language), creating the statistics page, filling the contributions page with content, creating a cover picture as a collage from many pictures of OS games, ... and that will still take a couple of weeks.

My new dead line, beginning of November. On the plus side: I'm really proud of how nice it looks.

 





Wednesday, October 7, 2020

Icons and more

Everything always takes a bit longer than estimated before because there are always details that are missing in the beginning. One detail here for the new website for the OSGL was icon fonts. I started with bulma as CSS framework, then got to know fontawesome icons, then found many other sources like ionicons, material design icons, iconarchive.com or game-icons.net and finally came to "Optimize Font Awesome". From there I arrived at IcoMoon, a free service that allows you to create your own optimized webfonts by selecting only the needed icons from other fonts. I tried it and so far I'm very happy with it.

Now I use icons. The only problem is that I find the layout more confusing with icons. Will have to tinker more before it can be published.

Friday, September 18, 2020

In the middle of building a new website for the OSGL

For the OSGL, I'm currently building a new static website with Python using the Jinja template engine and the Bulma CSS framework. First I learned about these things and now I kind of became productive. The output does not yet look nice, it's more like most of the needed information is present but it doesn't look nice in any way. Links between the games indices and the games entries are still missing, the games entries need a better format, many urls are just printed and stuff like this, but it's just more of what is already there.

In the end I will try to incorporate a few more pictures and a nicer layout and lots of hints that the content can easily be edited by contributing. And then in say 1-2 weeks, I might be ready to green-light it.

Thursday, May 31, 2018

So many aspects

Last time I wrote about the roles (different kind of jobs) that are required for developing an open source game. Let's focus now on one such job (Programmer) and see how many aspects this single job contains for developing for example open source strategy games.

  • GUI programming (almost all games have some sort of graphical user interface)
  • 2D/3D graphics programming (to display the game world, map, ...)
  • Serialization/Deserialization (to store and retrieve game states (aka savegames))
  • Network programming (for multiplayer capabilities)
  • AI (for computer opponents)
  • Data modelling (to store and advance a game model)
  • Algorithms (like path finding)
This means that there are many different topics one must know about to make it all coming true. Of course, the most efficient way is to use (and know) as many stock solutions to these problems as possible.

Thursday, May 17, 2018

So many roles...

One thing I like in particular about being an open source game developer is the variety of jobs that need to be done. A non-exhaustive list of available jobs would be..

  • Game designer: inventing game concepts, rules, properties
  • Software designer: design algorithms, interfaces, entities, relations
  • User interface designer: designing the screens and buttons
  • Programmer: implement it all
  • Software quality tester: debugging, testing
  • Artwork creator: drawing, composing, creative writing
  • Project manager: publish releases, coordinate activities
  • Technical writer: writing documentation, design specifications, player manual
  • Play tester: play intermediate versions
  • Web designer: maintain an online presence
  • Community manager: keep in contact with fans and coworkers
  • Journalist: write about the project
  • Legal expert: manage license of various content
  • Translator: internationalize the content
I do not need to stay with one job. For example, in case programming gets boring, I can do something else like writing about it, which I'm doing now.

Of course I have favorite roles and I would be happy if more volunteers would contribute to the project doing one job or the other. But so far it's more or less a one man show with about a dozen different jobs done by a single guy in his free time!