Sandbox History - Hirato/lamiae GitHub Wiki

What follows is only a brief high level history of Platinum Arts Sandbox.
Most of this is based on memory.
Sandbox was a big learning and growing experience for me, so I will try to capture the timeline as best as I can.
As its history is tied deeply with Cube 2 and other related projects, particularly Sauermod, and its successors in both bloodfrontier, and Red Eclipse, some of their history is included here too.
The Cube 2 Sauerbraten community was quite closely knit, but also rather incestuous in how it shared code and inspired others.

2007

Important releases

Sandbox 1.1 was released Jun-29
Sandbox 1.2 was released Oct-7
Bloodfrontier Alpha 1 was released Sep-20 by Acord (Anthony Coord)
Sauerbraten christens the Spring Edition at Apr-15
Sauerbraten christens the Summer Edition at Aug-29
Sauerbraten christens the Assassin Edition at Dec-24

quin (Quinton Reeves) decides to abandon Sauermod in favour of furthering development of Bloodfrontier.

Calimer (Michael Tomaino) begins the Sandbox project and releases the earliest revisions.

2008

Important releases

Sandbox 2.0 was released Feb-6
Sandbox 2.1 was released Mar-7
SandboxLite forked Mar-12 Sandbox 2.2 was released Jun-29
Sandbox 2.2.3 was released Sep-20
Interest is rekindled in Eisenstern circa Aug-9
Sauerbraten transitions to SVN Nov-23 Moviecube is spotted in the wild

Calimer was discussing his project on the Sauerbraten IRC channel, where he attracted the attention of Hirato (Kevin Meyer).
Calimer was updating sandbox to be based on the Summer Edition of Sauerbraten, and wanted someone to doublecheck his work.
Hirato quickly determines that the FPS functionality wasn't removed, and that just the art assets were.
Hirato offers to help out if Calimer sets up an SVN Server, which Calimer promptly did.
The SVN Repository was self-hosted on Sandbox's webhost.
Hirato promptly gets to work at removing the FPS functionality, leaving all non-shooty mechanics intact.
Hirato fancies himself a bit like quin, and stays on to help with Sandbox.
Hirato henceforth regularly kept the codebase in sync with upstream Sauerbraten.

Excited to have Hirato's help, the first of these releases was christened 2.0.
The 2.0 released was incredibly barebones and only had a very early 'house' for a map.
This was rapidly iterated on to bring about 2.1, which was a more complete release.

Sauerbraten had made a rather significant change to its build structure by no longer integrating all game modes into one EXE.
This allowed a much smoother build, but as a consequence the abandoned Eisenstern project was completely abandoned.
Sandbox had adapted by compiling each gamemode as a separate executable.
Eisenstern was eventually restored to the Sauerbraten codebase following intervention by Aardappel (Wouter van Oortmerssen).

Cube2 Community member Nerdfencer would spearhead the ill-fated Eisenstern Rebirth project.
This project would attract Hirato's interest Sep-20, and even Calimer's and Eihrul's for a time.
Interest had faded around Christmas, due to the game being left in a prolonged broken state.
The experience sours Hirato's view of the Eisenstern code.

We also begin to experiment with localising the project, so it's more accessible to other European centric languages.

Moviecube was spotted in the wild, and its developer, one offt_tools, was friendly with us.
offt_tools is a DJ, and had made a spinoff to produce machinima to display at his live shows.
We had merged moviecube into Sandbox to try and get him included as a developer in Sandbox.

Sandbox had also begun to be packaged for Debian and later Ubuntu.
Due to Sandbox not being DFSG compliant, the Debian maintainer had packaged our release in a way that was identical to their method for the flash plugin.
For the uninitiated, this means the Debian package was a shim that downloaded the flashplugin from adobe, verified the download, then installed it.
Specifically they took issue with some of our content, because we had resources that were a) not allowed to be used outside of Sandbox (e.g. robochimp model), b) mandated the No-Derivatives clause of the Creative Commons licenses (e.g. some texture assets), c) mandated the Non-Commercial clause of the Creative Commons licenses (e.g. music we had sourced from newgrounds, which was all CC-BY-NC-SA)

Either way, we had been convinced to attempt DFSG compliance.
Calimer had made a branch called 'sandboxlite' that stripped all the offending content, leaving a rather barebones experience.
Calimer then proceeded to email various sources to get permission for 'commercial use' to satisfy the DFSG requirements.

2009

Important releases

Sandbox 2.3 was released Jan-6
Master Chef Ogro was released as a standalone game On Apr-22
Eisenstern Rebirth rekindles on May-28
Sandbox 2.4 was released Oct-9

Early in the year, we received a new UI system as a code donation from Neal__ Neal had commissioned eihrul (Lee Salzman) to produce this for the commercial game, Bloodtoll.
This UI system is colloquially called NewUI or NUI for short.
Tesseract would some years later reimagine its own UI System as a blend between 3dgui and NUI.
This version is known as New-New-UI or NNUI for short (RedEclipse would also implement this around 2020).
We didn't know what to do with this code, so it had bitrotted in our repository.

The Exciting Adventures Of Master Chef Ogro Fruits And Vegetables Extraordinaire (MCO) was released as its own thing.
MCO was made by Calimer with the help of others. Hirato was not involved.
This was based on a fork of the eisenstern game from Sauerbraten.
MCO itself mostly features platforming, some of it rather sadistic.
Hirato had made a neat little particle system for the projectiles in MCO.
These wouldn't be available until the 2.0 release later on.

With Nerdfencer committing to Eisenstern Rebirth again, Hirato decides to craft a brand new RPG module.
Concurrently this was developed in both Eisenstern Rebirth and Sandbox for a while, before Hirato only furthered the implementation in Sandbox.
Eisenstern Rebirth would again die, this time on July 18th.
This iteration of the RPG retained compatibility with many Eisenstern era ideas, such as using global spawn_ aliases.
The RPG Debuted with Sandbox 2.4.

Our attempt at localisation was removed with 2.4, making Sandbox a strictly English only affair.

Eisenstern post-mortem

Eisenstern rebirth was a case of too many cooks spoiling the broth; everyone treading on eachother's toes.
There were numerous coder type people, including Hirato, that would change things, break things, and then not fix things.
Leaving the project broken like that, caused interest to quickly fade, and people moved on, despite mass initial interest from the community.

A key takeaway from this is that any successful project must always have someone in a leadership position.
This person is then responsible for setting standards, and ensuring they're enforced by performing tasks such as Code Reviews.
Someone like this would also need to be able to delegate work so that stepping on toes is minimised.
Such workflows are also much easier to do with GIT, as any git host, such as github encourages that exact workflow.

Localisation post-mortem

Our attempt to localise the game was extremely naive.
We had split internal strings into fragments and glued them all together. These were exposed as variables.
And we had split the menus and other such things into language specific folders.

While not a bad structure, this came with 3 significant flaws:

  1. Localisations cannot change the order of parameters
  2. Menus and any binding that produced text had to be redone,
    this required localisers to actually understand the scripting language to parse the content
  3. Things got horribly out of sync
    Fixing bugs required changing the corresponding line in every language specific copy of the menu.
    Similarly, making any fixes or enhancements would often cause some translations to be thrown away.

The flaws were determined to not be worth the marginal benefit, and so localisation support was removed.
A replacement system was never developed.

If you wish to localise your projects, consider an approach that makes use of either resource files, or something that resembles it.
The GetText .po files are an example of such.
The .resx files unique to Microsoft's toolchain is another.
But you may want to consider an approach that isn't deeply tied to the compilation chain.
You can also roll your own to complement a compilation based one in the engine.
All you need are KeyValuePairs with an optional comment to provide some context for the translator.

DFSG post-mortem

Honestly, attempting for compliance was a mistake.
A lot of artists do not like their efforts being commercialised.
Of those that used Creative Commons licenses, many of them released their works either under CC-BY-NC-SA, or the more restrictive CC-BY-NC-ND variant.
It left us unable to use a lot of really good free artwork that was available; including models, sound effects, textures, and music.
This significant crippled the project, as we would not let in anything new under those terms, even as we lagged to clean up our existing material.

We would make a renewed effort around 2.7.1, removing many art assets (this left many maps with missing texture errors to this day).
We would also remove the newgrounds sourced music.
These songs had all carried a vibe and atmosphere, with the majority having inspired most of the maps they were paired with.
The music was replaced by a community contribution, and by calimer's request, Wesnoth's Travelling Minstrels, but edited to remove long periods of silence.

Conversely, an open source game engine being DFSG compliant is a massive plus.
It allows a group to take your engine and immediately set about making their dream game.
Without that, they would first have to audit all of the assets to find out what they can use, and junk the rest.
Due to clashing art styles and quality differences, they may however wish to junk the assets anyway to make their own, but I digress.

In hindsight, we should've attempted what I had done in Lamiae:
Split the package into a Core that is just the engine, the commercially compatible assets, and a demo/tutorial.
And a Community Pack that contains community made games, maps, and any assets that don't meet the DFSG criteria.

2010

Important releases

MCO 2.0 was released Jan-2
Sandbox 2.5 was released Jan-16
Redeclipse was forked from bloodfrontier on Jun-2 Sandbox 2.6 was released Oct-2
Sandbox 2.6.1 was released Nov-7

Hirato massively sours on everything Eisenstern related, and deletes the RPG during Sandbox 2.6's development due to irreconcilable code quality issues.
All of these issues can be seen within the 2.5 release.
These issues would render it impossible to have a proper dynamic scripting language, and even essential features like 'saved games'.
Hirato begins anew, but with an extremely rigid design that is in every conceivable way, an Anti-Eisenstern.
This redesign would debut in an early state with 2.6.0.
This exact system is an extremely early precursor for Lamiae today.

Graphitemaster (Dale Weiler) rekindled interest in New UI, and we would successfully publish a preview in 2.6.1 after significant bugfixes.
This preview requires users to manually compile with -DNEWUI.

2.6.1 quickly followed 2.6.0 due to some serious bugs.
Including one that would kick players from multiplayer if jumping.

2011

Important releases

Sandbox 2.7 was released Oct-5

2012

Important releases

Tesseract was released to the public Apr-18
Sandbox 2.8 was released Aug-27
Sandbox 2.8.1 was released Nov-14
Lamiae is forked on Nov-18

Following the release of 2.8.0, Hirato had worked at migrating the codebase to use tesseract as its rendering engine. This was a multi week effort with many bugs and regressions.
Due to stringent hardware available at schools, a Classic version of 2.8.0 was forked.
This classic branch received only bug fixes, which culminated in 2.8.1 and 2.8.2 releases.

2.8.0 was also a massive release, as it was the first where we had removed all semblance of the original cube2 UI (known as 3dgui), and fully transitioned to NUI.

Hirato wants to further develop the RPG as a PG-13 project, without the G-8 constraints of Sandbox.
Hirato forks lamiae, retaining only the RPG and DFSG compliant assets, borrowing from Xonotic where not.
Hirato continues to push upstream changes from tesseract and independent RPG developments into Sandbox.

2013

Important releases

Sandbox 2.8.2 was released Jan-19, with a split 'water wars' version for a full featured FPS.

2014

Important releases

2.8.2 was uploaded to moddb

Feb-21 Calimer makes commit 4150 to the SVN
This is the last commit that is ever made before the SVN Repository was removed by dreamhost.
This unceremoniously ended the project.

2017

Hirato uploads the source code he retained to github.
Unfortunately he doesn't have access to the SVN repository and therefor could not preserve the history.

2024

Calimer opens a discord and invites many veterans from sandbox to hangout and chat.
Many show an interest in making a Sandbox 2

To be continued...?

TODO

  • other game modes, FPS, SSP, KRS, MOVIE