What a week this has been ![]()
It all starts with a plan that had been made a long time ago: According to me secret “AirlineSim Launch Schedule” document, Otto was supposed to go on a hiatus today until January. In its place, I wanted to launch a new long-term game world, something many people have been waiting for for a long time now.
The date was fixed, but I wondered what the configuration could look like. The options are a bit limited and frankly feel somewhat boring at this point. The Individual Travel Requests feature from Paine would definitely be interesting, but given that the game world would be around for a very long time (possibly forever), I wasn’t ready to risk it, as the feature just isn’t ready for primetime yet.
That last sentence feels slightly ironic in hindsight, because what I opted for instead is a bit nuts
. After some internal brainstorming, we quickly settled on the idea that the best option would be a game world with “data time offset” such that aircraft types from the past are available and more modern ones only appear over time. This isn’t new per se…we’ve had such a (short-term) game world in the past and an exclusive game world uses the feature as well. But what I don’t like about this feature is that it is effectively limited to aircraft…airports and other geo data don’t change. Airports do appear when a data patch is applied and their opening date has been reached. But airports closed in the real-world stick around in the game. And most importantly, the demand values are off. Firstly, our demand values are based on the “here and now”. And secondly, any “closed” airport has zero demand. Something had to be done…
…so I gave a present to myself: Given that I won’t make any more actual progress on the UI redesign topic this year anyway, which currently blocks a lot of frontend-related work, I decided more or less on a hunch to treat myself to some good old backend/data processing work and build a new feature within a week: Location-based demand!
This is pretty much what it sounds like (and what I described in the linked roadmap entry): Instead of defining demand per airport, it originates at “locations” instead. Some of this has been implemented for the Technology Demonstrator, but this previous work wasn’t too helpful in this case. For current-gen AS, I needed to reduce the amount of locations from the ASTDs roughly 170k to something closer to the current amount of airports…anywhere between 5k and 10k seemed like a good value.
So what followed was a crazy week of blissful crunch: It’s been a while since I’ve worked 10h a day on a feature (thanks to my wife for bearing with me
) and while this isn’t something healthy to do long-term, it can be quite fun for a short spike like this.
Step 1: Build tooling that takes hundreds of thousands of raw locations, filters them down to the relevant ones, pairs them with airports and each other and then runs a clustering algorithm that reduces them down to the above mentioned “good value”, accumulating their population values. The end result is a list of a few thousand locations + the airport-location-connections.
Step 2: Teach the ORS to generate connections with two mandatory ground segments, with all demand flowing from location to location, not airport to airport. Make sure all existing game worlds still work as before - including such that are configured with the DS rather than the ORS, like Paine.
Step 3: Prepare the data pipeline to get locations and ground connection, plus some additional data for demand computation, into the game. This was a lot trickier than I had anticipated, because of course real world data is ugly and the way our sources and AirlineSim define some things differs, so a lot of mapping code was required here.
Step 4: Implement a new formula-base approach to come up with actual demand. At the moment this works by scaling the population values from step 1 by the actual country-level population values (with annual values starting in 1970) and then applying a (currently) hard-coded per-country “trips per capita” factor. The idea is to build out this formula to something much for sophisticated in the future.
Step 5: Put everything together, find and fix (or ignore) a whole bunch of bugs, and get everything running in a new game world.
Technically I am still on Step 5. And I am somewhat surprised I even got there. But I had to accept that this feature is too experimental to “test” it in a long-term game world. So I decided to launch a short-term game world after all. And the plan is to do so tomorrow, just in time for Christmas.
Finger’s crossed this works out ![]()