Spring Cleaning II: The Core // Frühjahrsputz Teil 2: Der Kern

[EN]

When I was talking about doing a "spring cleaning" in a recent dev-log entry I didn't mean that it would take "all of spring" to finish ). And yet, it's been a month since. Aside from the team meeting and all the preparation it required, I got a lot of work done though. I'm pretty happy with the results so far, too, because they will allow us to implement some of the biggest and most interesting new features we've seen in a long time.

The "trials" mentioned in the last log worked as intended and I decided to roll out the changes to all of the game. Unfortunately, this meant touching every single action there is in AirlineSim and rewriting them for our new "core". Some things done as part of this overhaul are:

  • All operations are now executed sequentially in the context of the affected enterprise. In theory, this will once and for all end the "concurrent access errors" you've been seeing for several years now. In practice, this ideal state of things will have to wait a bit longer though, because even though the existing operations are now executed using this new technique, the logic hasn't been adjusted for all cases yet. Take any operation that involves two enterprises for an example, like a payment or a contract: These will have to be split into at least two separate operations to ensure encapsulation. This will be an on-going process.
  • The background routine of AirlineSim - the pacemaker, so to speak - has been rewritten from scratch and should be far more stable and flexible now. It should also perform a lot better in situations when lots of backlog has to be handled.
  • Many of the background jobs that would handle stuff like contract updates, week-end closings for companies etc have been rewritten to make use of the new core. That is, instead of updating whole batches of items at once, the items are merely loaded and delegated to the core to ensure company-level encapsulation (see above).
  • One of the most critical rewrites in this respect was the flight update. Flight updates now happen on aircraft-level and work very differently from the previous version: The new system essentially simulates your "operations department" in that it takes a look at all the operations the aircraft has to execute over the coming days and tries to do so in sequence. Right now, the available operations are just regular (booked in) flights and transfer flights, both of which are static. But the idea here is that one day, there might be other operations as well: Installation of seats which would not happen immediately, but would require the aircraft to stay on the ground for a while. Or regular maintenance blocks that you add into the weekly schedule. Or larger checks like D-Checks that happen irregularly based on cycles and flight hours of the aircraft and which your "operations department" would schedule automatically while making sure that no flights are booked into the system for that time. The new system also allows for more flexibility: It enables us to schedule transfer flights automatically or to add random or not-so-random delays without you having to bother with fixing the situation by yourself (which would end in horrible micro-management).

To sum it up, these changes are the foundation for great things to come, of which some of the smaller ones will most likely arrive within a few weeks already. Keep in mind though, that I literally had to lay hand on every part of the game and consequently, a lot of "collateral damage" has been caused which needs to be ironed out before the changes can be released. Stay tuned and expect more information in this spot.

[DE]

Als ich in einem der letzten Entwickluns-Logs von "Frühjahrsputz" geredet hatte, meinte ich damit eigentlich nicht, dass er das gesamte Frühjahr dauern soll :). Und doch ist zwischenzeitlich schon wieder ein Monat vergangen. Trotz des Teammeetings und der dafür nötigen Vor- und Nachbereitungen, habe ich in dieser Zeit aber einiges an Arbeit erledigt bekommen. Und ich bin sehr zufrieden mit den bisher erzielten Ergebnissen, weil sie es uns erlauben werden, einige der größten und spannendsten neuen Features seit langem zu realisieren.

Die im letzten Log erwähnten "Versuche" waren erfolgreich, weshalb ich mich entschieden habe, die entsprechenden Änderungen auf das gesamte Spiel auszuweiten. Leider bedeutete dies, dass jede einzelne Aktion die es in AirlineSim gibt, angefasst und für den neuen "Kern" umgeschrieben werden musste. Einige Dinge, die im Rahmen dieser Überarbeitung erledigt wurden, sind:

  • Alle Operationen werden nun der Reihe nach im Kontext des betroffenen Unternehmens ausgeführt. Theoretisch wird das ein für alle Mal die "Simultaner Datenzugriff" Fehler beseitigen, die Ihr seit einigen Jahren zu sehen bekommt. In der Praxis wird dieser Idealzustand aber noch etwas auf sich warten lassen, denn auch wenn alle bestehenden Operationen nun mit der neuen Technik arbeiten, wurde die Logik in vielen Fällen noch nicht angepasst. Nehmt eine beliebige Operation die zwei Unternehmen involviert, zum Beispiel eine Zahlung oder ein Vertrag: Diese müssen eigentlich in mindestens zwei separate Operationen aufgetrennt werden, um ihre Isolation zu gewährleisten. Diese Anpassungen werden nach und nach im laufenden Betrieb vorgenommen werden.
  • Die Hintergrund-Routine von AirlineSim - der Schrittmacher sozusagen - wurde von Grund auf neu geschrieben und sollte nun deutlich stabiler und flexibler sein. Zudem sollte er in Situation, in denen lange Rückstände aufgeholt werden müssen, deutlich schneller arbeiten.
  • Viele der Hintergrund-Jobs die sich um Dinge wie Vertragsupdates, Wochenabschlüsse für Firmen usw. kümmern, wurden ebenfalls für den neuen Kern umgeschrieben. Das heißt, statt ganze Pakete von Aufgaben auf einmal zu erledigen, werden diese lediglich geladen und dann einzeln an den Kern delegiert, um eine Isolation auf Firmen-Ebene zu ermöglichen (siehe oben).
  • Eine der entscheidendsten Neuentwicklungen in diesem Bereich war das Flugupdate. Flugupdates passieren nun auf Flugzeug-Ebene und funktionieren grundlegend anders als bisher: Das neue System simuliert im Wesentlichen Eure "Operations Abteilung" indem es sich alle Operationen anschaut, die die Maschine über die kommenden Tage durchführen muss, und versucht, diese in der entsprechenden Reihenfolge durchzuführen. Im Moment beschränken sich die verfügbaren Operationen auf reguläre (eingebuchte) Flüge und Transferflüge, welche beide statisch sind. Aber die zugrundeliegende Idee ist, dass es eines Tages auch andere Operationen geben könnte: Die Installation von Sitzen, die nicht mehr sofort passiert, sondern eine gewisse Zeit am Boden benötigt. Oder reguläre Wartungsblocks, die Ihr im Flugplan der Maschine platziert. Oder größere Checks wie D-Checks, die unregelmäßig und abhängig von der Zahl der Cycles und Flugstunden der Maschine fällig werden und die Eure "Operations Abteilung" automatisch für euch einplant während sie sicherstellt, dass in dieser Zeit keine anderen Flüge eingebucht werden. Das neue System erlaubt auch mehr Flexibilität: Es ermöglicht uns zum Beispiel Transferlüge automatisch einzuplanen oder zufällige oder weniger Zufällige Verspätungen hinzuzufügen, ohne dass Ihr euch persönlich um die Lösung dieser Situationen kümmern müsst (was in einem fürchterlichen Mikromanagement enden würde).

Um es zusammenzufassen: Diese Änderungen stellen die Basis für großartige neue Dinge dar, von denen einige kleinere bereits in den kommenden Wochen veröffentlichen werden könnten. Bedenkt aber bitte, dass ich buchstäblich Hand an jeden einzelnen Teil des Spiels liegen musste und folglich einige "Kollateralschäden" verursacht habe, die vor einem Release zunächst ausgebügelt werden müssen. Weitere Infos zum Thema folgen beizeiten hier im Devlog!