snõwkit dev log #10 (threes, westport)

sign up sign in

Some news about the major game releases for luxe, and this post also goes into the immediate term plan to realign our dev cycle a bit.

previous editions
- #1 “assets”
- #2 “history”
- #3 “modularity”
- #4 “data flow”
- #5 “phoenix”
- #6 “community”
- #7 “embers”
- #8 “access”
- #9 “year one”
- #10 “threes, westport”

I like that this dev log is a round number!

While this (or any) dev log is quite overdue, and there may appear to be slow movement on some repos - this is not the case. I mentioned (in tweets, chat, and previous dev logs) that the code always comes first, and that's what was keeping me a bit quieter - writing about the code comes after the code itself. The most recent “tunnelling” has been longer than I would like of course, but things have been progressing pretty nicely!

I'd like to note that it's helpful to contextualize things: a shortish quiet period over the end year holiday season, throw in two major game releases on 6 platforms, and a lot of stuff happening – you can expect a slightly quiet period from one person :) In dev log #9 I mentioned some things to alleviate this and that will be detailed in a soon to be posted dev log on some housekeeping.

Let's talk about two new major releases that I had a hand in!


People that follow the snõwkit community twitter or hang out in the chat would have seen this news:

I ported THREES to luxe web target for my friend Asher.

I'm a huge fan of the game, so I was grateful for the amazing opportunity. I have a whole two part portmortem nearly done, diving into the technical and non technical details respectively so look out for it if that interests you. Also, if you have any specific questions to ask regarding the port, luxe specific questions, anything like that – feel free to throw them my way on twitter, in the comments below, or on the chat.

It's important to note the port was explicitly for web, no other platforms.
You can play it on mobile or desktop browser using a keyboard or touch screen.

You can play it right here


The Westport Independent


Many of us have already seen and probably played Westport by now, but might not know about it's path to the community back in the day.

Back when I was working on luxe and deciding how to tackle a public release and dev cycles, I decided to chase down a few devs and convince them to try out luxe for their game. This was around the early half of 2014, about 6 months before I publicly released luxe. It was still really rough and Kristian (“whuop”, the programmer on Westport) decided to take a chance on me and my crazy plan. (There are others too, like Benn's game which you've probably seen in tweets, previous posts, or even the luxe docs).

Fast forward to 21 January 2016 and the game was released as the first larger commercial title for luxe! It launched on 5 native platforms (Mac, Windows, Linux, Android and iOS) on all major storefronts (Steam, GOG, Google Play, Amazon Android, iOS App Store) – quite an achievement.

Kristian and Pontus have done a great job with the game in my view, and I'm really quite proud of the effort they've put into making an interesting game. Especially considering it's their first commercial release – it says a lot about their passion and resolve. It's been at a number of expos, in print magazines, and has some amazing fans (also see the devs response).

I am very happy to have been a part of making this project happen, and couldn't have asked for a better duo to see it through. Look out for a more in depth postmortem, as well as the upstreaming of all the code and things we used to get the release done.

Be sure to follow their work for their jam games and future projects.
You can follow their studio, and the two developers: Kristian and Pontus.

You can get the game here

p.s If you're inclined to watch reviews in play through format, I quite enjoyed this one

dev cycles

If you've been reading posts around here, you should know that we work based on focus sheets, which are milestones built around a specific topic or two and are pressed on by the dev team and the community.

To recap, the only current dev cycle is meant to be luxe alpha-3.0 and what we've been doing until now is that luxe is a primary dev cycle and then snow, flow, mint, and the rest of the snõwkit initiatives follow.

Secondary dev cycles
For snow (the low level platform framework) and flow (the build tool), even though they are standalone, their primary progression happens as a byproduct of development on luxe (the game engine). All this means in practice was that their code is progressed in the repo, on the master branch, without an explicit version - at least until they reach a point closer to beta.

The main reason for this is that there is more work to do for luxe. Often snow (and flow) would go for months without needing any changes. That's not to say they are done of course, just that their overarching dev cycles are much shorter. Finishing them would also be more appropriate when luxe gets closer to beta as well – remember that we work by exploring.

One goal of exploring is to answer unknowns – the exact needs of snow as a platform layer and flow as a build tool are best defined by their use case first (less precise), and their use in practice (more precise). Being more precise means less bloat, better maintainability, portability and so on.

luxe alpha-3.0
So back to current things. The state of luxe alpha-3.0 may be a bit unclear. I didn't get around to posting the focus sheet yet and I haven't posted about the name either but I still plan to, as well as include a sample like always.

The main reason it's stayed unclear since luxe alpha-2.0 ended, was the switch of focus to snow alpha-2.0 for Westport release (more on tunnelling later). The reason for the lack of clarity at the time was because the focus sheets are designed to be a community effort, luxe alpha-3.0 was a bit of an anomaly in that regard.

The idea of luxe alpha-3.0 was to quickly address some issues with phoenix (see devlog #7) and try to align it's code structure with the existing progress on embers, which was where the catch came in.

In order to have people help effectively, I'd either have to dive deep into explaining code that is becoming obsolete (phoenix) or move around code that I'm not comfortable with putting up just yet (embers) for what was meant to be a short term milestone. It made more sense to me to just sweep through them and get to the main focus which is getting embers into master for everyone to be using.

In fact I did most of the milestone tasks right after having written them up - The hold up on finalizing the alpha has been elsewhere. Either way - it's still progressed just fine, and as soon as I upstream all these other changes we'll be moving onto luxe alpha-4.0 almost immediately.


Going forward, we're going to need tag a couple of things for clarity.

snow alpha-2.0

note The changelog and migration guide for snow alpha-2.0 will be up when I upstream the changes. For luxe users the changes are minimal, for snow api end users the changes are also quite minimal, but for users that dug into snow internals the changes are significant.

It may also seem surprising to start with alpha-2.0 for snow, but the current master of the snow repo will be tagged as snow alpha-1.0. It deviates significantly from alpha-2.0 and if people need to stick to the current code for a bit they can always checkout the tag and carry on.

The other thing to remember is that snow alpha-2.0 is actually a whole new version of snow which I mentioned in devlog #8. It's already around 250 commits to merge into master, so it's worth doing it right just once for everyones sake - that's why I haven't been rushing to merge upstream.

The more interesting note here is that snow alpha-2.0 might be the last alpha dev cycle for snow. That means that snow is nearly in beta form (once the alpha-2.0 dev cycle completes it will likely move to beta-1.0). The work done in the last months has brought a lot of great changes and clean up.

flow alpha-2.0

Similarly with snow, flow alpha-1.0 will be the current master tagged and for clarity and consistency. flow alpha-2.0 will be the active dev cycle while it progresses alongside snow and luxe, like it has with master. flow alpha-3.0 changes are a whole dev log on it's own, so will elaborate on that later.

To summarize:

  • luxe
    • alpha-3.0 -> post sample + focus, finalize
    • alpha-4.0 -> embers focus on master + dev branches
  • snow
    • master branch -> alpha-1.0
    • alpha-2.0 upstream -> master branch
  • flow
    • master branch -> alpha-1.0
    • snow-dev branch -> alpha-2.0 on master branch


As you can tell a lot has been happening! I try to keep everything that makes sense above the surface – but there are times when that's not ideal or not possible. The idea of a tunnel is that sometimes exploratory digging is important to know the best direction to travel in above the surface (and the name I made up describes a bit how I feel about it - I prefer working above ground).

The reason I dig down a bit is because it's important to maintain a certain level of workflow day to day - I can't make games over time if things aren't at least a bit consistent. A project like Westport wouldn't be able to release over a year and a half dev cycle if every few days something major was gone, or changed dramatically just for exploration sake! It's a balance, but I think we've managed a good run so far.

The last few months just happened to include a number of larger, connected tunnels. What kept me down there a bit longer than anticipated was throwing in the two game releases while I was neck deep – exploring snow alpha-2.0. That idea was made up of snow started from scratch, using linc libraries instead of the c++ backend, upgrading all the projects for mobile, to shed some choices and history dictated by the context it was created in and so much more.

It was a really experimental code path for a while and with Westport release on the horizon I had to change gears, stabilize the code properly in order to ship. Once you reach a certain point it's not possible to back out, and it's not possible to merge upstream because of lack of parity (like, the web target not existing for a month because the primary focus was native). I'll elaborate a bit on that in detail in the next dev log, though - it worked out in the end, and we're very close to parity as of now.


2016 has started off really well! The longer term plans for luxe are steady on track, and the outcomes for some of the earlier plans have been above expectations. It's looking to be a pretty exciting year too - starting it off with a slew of dev logs and release postmortems following releases is great.

I'm more excited however for nearing beta level on the underlying layers. It means that the focus will be higher level, which is more rapidly approachable for more community contributors, and the final version of luxe appearing on the horizon.

There's still plenty to do, but this short detour and reset of focus will be good for forging forward in the new year. I can't wait!

There's a couple more dev logs really soon, so look out for them.

You can follow the snõwkit community twitter, hang out in the chat and see what people are up to using #luxeengine or #snowkitcommunity. Don't forget to post here on either!

snowkitsnowkitdevdevlogthreesThe Westport Independentluxe