What is “MOSS”?
MOSS stands for “Mythruna Open Source Software” and it’s a project I started a little over two years ago as a way to reorganize how I did Mythruna development. The idea was to break things up into more manageable chunks with the plan to open source those parts. Treating each of these modules as an open source target forces me to be cleaner in my approach but more importantly it makes a bunch of the individual tasks more bit-sized. That’s super important as life has conspired to take more and more of my free time. Being able to work on 15 minute tasks some days is a great way to keep momentum going.
The side benefit is that I get to give more stuff to the community.
Figuring out I was upside down.
One of the motivations for this was the realization that I was probably developing upside down. When I first started Mythruna in 2011 (yes, 2011), I hit the graphics side first because that seemed like the hardest problem to solve. “Make things look great and the rest will come!” Unfortunately, my ambitions for the engine far outstripped this approach. As I gained more experience, I realized I could write a block engine in no time at all and tweaking it is basically a ‘forever process’… but retrofitting my physics ideas (and networking it) into that was a Herculean task. It took the better part of a year just to integrate what I had and it was horrible.
The realization: “It is far easier to build a block world on top of a stable networked physics engine than it is to fit a stable networked physics engine under a block world.”
MOSS was then a way to break up these underpinnings into a set of libraries that would also benefit others.
Open Source has always been good to me.
Those who know me know that I’m no stranger to Open Source. I’ve had one project or another out there since 2001. It is my JME-based projects where this has been the biggest benefit, though.
Early on in Mythruna development (“early” comparatively speaking), I broke out my fledgling GUI and Entity System libraries into Lemur and Zay-ES respectively. Consequently, this code has improved immensely… both from the rigor necessary to package/maintain it and the numerous bug reports and occasional patches I receive from the community. This symbiotic relationship has been really helpful. Furthermore, the constant nudge of bugs/feature requests and seeing my code used in other games has kept the motivation fires burning, even if only at a few embers sometimes.
Other things like SimMath, SimFX, SimEthereal, SiO2, etc. were natural follow ons. They too have benefited much from the community.
What is to be expected?
MOSS in its current form is primarily a convergence of low level ‘block world’ style libraries mixed with a physics engine. This is all broken up into reusable chunks. For example, the physics engine can be used without any block support at all. If you need a simple physics engine that is built around the idea of loading and unloading pieces of the world then “MPhys” is that library and you need only provide whatever shape/collision support needed beyond the simple primitives. On top of that is layered the block physics that allows block-based objects to have accurate collisions and so on. Over all of that are some SiO2 extensions that help tie it together.
The plan is to also package and incorporate some other Mythruna parts like the dialog system, RPG object scripting, etc.. Those things will come later.
When can we see it?
Well, technically you can see it now if you are a patron on Patreon (https://www.patreon.com/pspeed42). By request, I let patrons preview the codebase as it’s already on github and already BSD-style licensed. (If you are a paid-up patron, you need only message me your github user ID to get access. Note: sometimes Patreon does not send me e-mail when new messages are sent there so for quickest access, please also send me an e-mail directly to @simsilica.com or find me on the JME forums.)
I’ve kept the repository private up until now because, for convenience, I’m developing this as one giant suite of libraries, all buildable together. When I provide it to the community, it will be separated more formally with different repositories, build trees, etc. for most sections. Also, the APIs are very much in flux. I prefer to provide something more stable for others.
Barring some new unforeseen life event, I would like to get public releases out this year (2019). Every time I state a plan publicly, I get side-swiped by “life”… so we’ll see. I would really like 2019 to be a watershed year, though.
Why do things take so long?
As many of you know, in 2012 my wife was diagnosed with brain cancer. Following that were several years of surgeries, chemo, and radiation. Meanwhile, we still had two growing kids that needed time and attention. This sucked away large amounts of my free time and only grew as the years went on. It was to the point where three years ago I thought I was going to quit completely (and actually did for about 2-3 really sad months).
Today things are more stable so far but my family still requires a lot of my time and attention… missed family time is not time you ever get back. Add to this the oft-increasing responsibilities of my day-job. Fortunately, a year ago I started a new self-designed productivity system that has been reaping benefits… one of which is the near-constant progress on MOSS.
So there is hope. And now if you see me mentioning “MOSS” in tweets and other social media, you will have some insight into what that actually means: the best future for Mythruna… and potential help for a bunch of other games.
Thanks for reading.