Bevor “Ameisenfeld” ein iOS-Projekt wurde, lief es im Browser und war ein einfaches One-Shot-Experiment gewesen.
TypeScript, PixiJS für die Darstellung, Howler für den Ton, EasyStar für die Wegfindung. Knapp 7.000 Zeilen, dazu sechzehn Testdateien.
Für den Schritt auf iOS hieß das: kein leeres Blatt, sondern eine Übersetzung.
Kurz zur Einordnung: Das hier ist ein privates Projekt. Die beiden Assistenten, die darin vorkommen, laufen auf Zugängen, die ich mir privat gebucht habe und auch selbst bezahle - Claude Max und ChatGPT Pro. Kein Firmen-Account, kein Firmen-Code.
Warum ein Port die dankbarste Aufgabe ist
Bei einem neuen Feature baut mir ein Assistent bereitwillig etwas Plausibles, und ich darf anschließend selbst herausfinden, ob es auch ist, was mir vorschwebte.
Bei einem Port ist das anders. Das Ziel ist exakt definiert. Im Zweifel lasse ich beide Fassungen nebeneinander laufen und vergleiche.
Zwanzig Dateien im Swift-Projekt tragen deshalb oben noch Hinweise, wie // Port von src/game.ts.
Erstaunlich war, dass die Portierung ebenfalls ein „One-Shot“-Prompt war und mit Effort „ultra-code“ quasi identisch portiert wurde. Das hat mich wirklich sehr beeindruckt.
Was sich nicht portieren ließ
Die Bedienoberfläche war im HTML und auch im iOS-Port anfangs noch deutlich komplexer. Man konnte zoomen, die Karte verschieben und alles war live gerendert.

Man sieht ihr an, woher sie kommt: eine waagerechte Leiste oben, Zoom-Knöpfe rechts, eine Statuszeile unten. Am Schreibtisch mit Maus funktioniert das ganz gut. Auf dem iPhone im Querformat ist es vor allem verschenkte Fläche, und die wichtigen Knöpfe liegen ausgerechnet dort, wo der Daumen nicht hinkommt.

Daraus wurde dann ein senkrechtes Kommandoband am rechten Rand. Das war kein Port mehr, sondern ein Neuentwurf.
Der Startbildschirm derselben Fassung ist rückblickend fast noch interessanter:

Optisch sind das schlicht die Standard-Karten, die iOS eben so mitbringt. Inhaltlich steht da aber bereits das, was ich mir von Anfang an vorgenommen hatte: zwei weitere Kapitel, jeweils einmalig für 4,99 Euro. Kein Abo, keine Truhen, keine zweite Währung.
Erst deckungsgleich, dann besser
Tatsächlich ist das hier für dieses ein guter Weg gewesen. Unsere Legacy-Systeme in der Firma würde ich aber nicht auf die gleiche Weise angehen, dort ist Claude ein gutes Werkzeug, um den Legacy-Code zu verstehen, aber eine 1:1 Modernisierung macht für uns keinen Sinn.
Was ich übrigens nicht mehr gemacht habe, ist das HTML/JavaScript-Original mitzuziehen, wenn ich an der iOS-Version Änderungen vorgenommen habe.
