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.

No comments:

Post a Comment