# Sauerbraten fork - Tomatenquark
## Motivation
I love Sauerbraten. I spent a good decade of my life, playing, developing and meeting awesome people in it's community. There have been **numerous** attempts to rescue Sauerbraten's faith (among the famous Inexor project which I was a board member of for many, many years). I simply deny giving up on Sauerbraten, so I decided to give it a spin and choose a direction that yields **concrete results**. Why is this so important? No progress happens without an active community. No active community happens without a stable, playable game.
Below is my personal plan to improve upon sauerbraten. I make it clear that `Tomatenquark` (which is a placeholder name and may still change - but I find it unique and appealing) is a **fork** of sauerbraten, who may incur changes from the SVN, but must not. After more than a decade of knowing Lee Salzman (and others involved), I don't see any future for it's development as a mod. Without further ado, here I will present how a stable development of the game over the years **can** happen.
### How can the migration happen?
The goal of Tomatenquark is to initially provide stable binaries to the currently compatible version of sauerbraten (SVN). There will be no changes to the code until everybody can rely on this (so there will not be a custom master server). Only after refactoring parts of the game I (or we) should think about changing business logic of the game.
## Objectives
1. Import to Git
2. Replace old build system with [Conan](https://conan.io/)
1. Remove binary library files with Conan
2. Remove XCode/Visual Studio setup
3. Move media assets to a seperate repository
3. Build and release binaries regularly using GitHub actions CI/CD
4. Think of a way to pull in new changes (guidelines etc). FOCUS on keeping things stable
1. Once media and binaries are seperated it **will** be possible to publish on Steam!
2. The community should be involved as much as possible
1. Welcome competetive and creative platforms and try to integrate them
5. Start refactoring some code
1. Code that can be easily replaced with modern C++ features should be replaced
6. Replace some parts of enet with a different protocol
1. Master server should be a HTTP based server
2. Extinfo should also be replaced by a better protocol
3. This allows for in game downloading of content!!!
7. Replace CubeScript and GUI framework
1. One can use [Ultralight](https://ultralig.ht/) for the GUI which will make huge parts of CubeScript obsolete.
2. Play with different options: bindings in Lua (like pisto did)
Once this all has been acomplished (which is already astonishing), one can think about making more adjustments to the game. Some suggestions include:
- make it possible to ship gamemodes (like in Red Eclipse)
- replace enet entirely (maybe?)
## To-Do
- [x] Create organization
- [x] Create `sauerbraten_code` repository which serves as a read-only mirror for the sauerbraten SVN
- [x] Push a git version of that mirror
- [x] Create `code` repository which contains **only code**
- [x] Create a `media` repository using git LFS and push all the media assets there
- [ ] Refactor code to use conan
- [ ] Remove all the shipped libraries
- [x] Add GitHub action for building code
- Windows
- Linux
- OSX
- [x] Add GitHub action for uploading binaries on tag
- [x] Add `.github` repository with guidelines
- [x] Create a static website with download links?
- [x] How should media downloads be handled? Installer? Think about that!
- [x] Think about future actions (e.g refactoring)