Nathan Klieme Startseite

Nathan Klieme · Handy-Spiel · Expo / React Native

Underworld Ledger

Ein Aufbauspiel fürs Handy. Man führt ein Imperium aus Betrieben, Handelswegen und Einfluss, und alles rechnet auf dem Gerät. Kein Server, kein Konto, kein Netz nötig.

14.469Zeilen TypeScript
42Testdateien für
die Spiellogik
73Module im
Spielkern
2Sprachen
Deutsch, Englisch

Worum es geht

Man kauft Betriebe, handelt mit Waren und baut sich ein Netz aus Mittelsmännern auf. Gleichzeitig schaut die Polizei zu. Je größer das Imperium wird, desto mehr Aufmerksamkeit zieht es an. Wer zu schnell wächst, zahlt dafür.

Der eigentliche Reiz sitzt im Zahlenwerk darunter. Einkommen pro Sekunde, Marktpreise, die sich bewegen, Ausbaustufen, die mit jeder Stufe teurer werden, und Ereignisse, die einem dazwischenfunken. Das Ganze läuft weiter, auch wenn die App zu ist. Beim nächsten Start rechnet das Spiel nach, was in der Zwischenzeit passiert ist.

Aufgeteilt ist es in fünf Bereiche. Business für Betriebe und Ausbau. Trade für Ein- und Verkauf. Heat für den Druck der Ermittler. Luxury für das, wofür man am Ende überhaupt spielt. Und das Hauptquartier, wo alles zusammenläuft.

Ein Rundgang

Aufnahmen aus der laufenden App
HauptquartierDas Lagebild. Kapital, Einnahmen pro Stunde, Stand des Netzwerks und wie sehr die Ermittler gerade hinschauen.
BetriebeWas mir gehört und was es einbringt. Die Liste lässt sich nach Stufen filtern, und von hier geht es zum Markt.
MarktDreizehn Betriebe in drei Stufen. Was noch nicht erreichbar ist, bleibt trotzdem sichtbar. Man soll sehen, worauf man zuarbeitet.
HandelPreise bewegen sich, Lager füllen sich, Ware geht über das Netz wieder raus. Wer die Ruhe hat zu warten, kauft billiger.
LuxusWofür man das Ganze macht. Autos, Flugzeuge, Anwesen. Die Garage dafür will erst gebaut werden.
ProfilRang, Bilanz, Hitzestufe. Was der nächste Rang kostet, steht als Zahl daneben.

Wie es gebaut ist

Eine Regel gilt im ganzen Projekt: Die Datenverträge bleiben stabil, alles andere darf sich bewegen. Deshalb liegen Spielinhalt, Spielregeln und Spielstand in getrennten Bereichen. Ein Betrieb ist ein Datensatz und keine Funktion. Die Regeln lesen ihn, statt ihn mitzubringen. Wenn ich am Balancing drehe, ändere ich Daten und nicht den Code.

Inhalt

Was es im Spiel gibt

Betriebe, Stufen, Waren, Luxusgüter und alle Balancing-Werte liegen als Daten vor, getrennt von den Regeln, die damit rechnen.

Kern

Was die Regeln tun

Simulation, Aufträge, Handel, Hitze, Benachrichtigungen. Einmal pro Sekunde bewegt sich die Welt weiter. Abgeleitete Werte kommen aus Selektoren und stehen nirgends doppelt.

Zustand

Was erhalten bleibt

Der Spielstand liegt im Speicher des Geräts und wird alle acht Sekunden gesichert. Ältere Stände hebt die App beim Laden auf das aktuelle Format.

Oberfläche

Was man sieht

Elf Bildschirmbereiche auf gemeinsamen Bausteinen. Ein Farb- und Abstandssystem, eine Hülle für alle Seiten, geteilte Karten und Listen.

Grundlage

  • Expo 54
  • React Native 0.81
  • React 19 · TypeScript
  • React Navigation 7

Im Gerät

  • AsyncStorage · Spielstand
  • expo-notifications
  • expo-blur · Tiefe
  • gesture-handler · Wischen

Prüfung

  • Jest · 42 Dateien
  • tsc --noEmit
  • ESLint
  • EAS · Android-Bauten

Das Balance Studio

Eigenes Werkzeug

Ein Aufbauspiel steht und fällt mit seinen Zahlen. Kostet ein Betrieb zu wenig, ist nach zehn Minuten Schluss. Kostet er zu viel, hört man vorher auf. Ich habe diese Zahlen anfangs von Hand im Code gedreht und jedes Mal neu gebaut. Das hielt genau zwei Wochen.

Also habe ich mir ein zweites, kleines Programm dafür geschrieben. Eine Weboberfläche, in der ich Werte ändere, ein ganzes Portfolio über Stunden durchrechnen lasse und das Ergebnis sehe, bevor ich es übernehme. Über eine Entwicklerbrücke landen die Werte direkt in der laufenden App auf dem Handy. Ohne Neubau, ohne Neustart.

In den Aufnahmen oben sieht man die Spur davon: der Knopf DEV am oberen Rand. Der gehört zu diesem Weg und ist in der ausgelieferten Fassung nicht dabei.

Wie ich daran arbeite

  1. Geprüft wird die Spiellogik, nicht das Aussehen 42 Testdateien decken Wirtschaft, Handel, Aufträge und Hitze ab. Was sich ausrechnen lässt, wird geprüft. Was man sehen muss, sehe ich mir selbst an.
  2. Ein gespeicherter Spielstand ist ein Versprechen Die Schlüssel im Gerätespeicher gelten als Vertrag und werden nicht mal eben umbenannt. Ändert sich das Format, schreibt die App den alten Stand beim Laden um, statt ihn wegzuwerfen. Niemand verliert sein Imperium, weil ich etwas umgebaut habe.
  3. Vor jeder Auslieferung dieselbe Runde Typprüfung, Tests, Linter, dazu eine Checkliste am laufenden Gerät. Beides steht im Projekt geschrieben, damit ich mich nicht auf mein Gedächtnis verlassen muss.
  4. Zwei Sprachen von Anfang an Alle Texte liegen in Wörterbüchern für Deutsch und Englisch, mit typisierter Struktur. Ein fehlender Eintrag fällt beim Übersetzen auf und nicht erst im Spiel.

Auf einen Blick

FrageAntwort
PlattformAndroid und iOS über Expo, ein gemeinsamer Quellcode
SpracheTypeScript, durchgehend, mit Typprüfung als Teil der Auslieferung
DatenAlles im Gerät. Kein Konto, kein Server, keine Übertragung nach außen
SpielstandFormat 3, mit Umschreibung älterer Stände beim Laden
SimulationEin Takt pro Sekunde, Sicherung alle acht Sekunden, Nachrechnen verstrichener Zeit beim Start
TestsJest für den Spielkern, Typprüfung und Linter für das Ganze
WerkzeugEigenes Balance Studio auf Vite, mit Brücke in die laufende App
StandSpielbar, in Arbeit. Android-Bauten liegen vor
Underworld Ledger · Aufnahmen vom 1. September 2026 Bilder aus der laufenden App, Spielstand zu Demonstrationszwecken angelegt