HeavyMach — Ein Panzer-Actionspiel, neu aufgebaut für iPhone, iPad und Mac
Ich habe HeavyMach, das ich als Student auf einem iPod touch gespielt habe, auf heutigen Apple-Geräten wieder lauffähig gemacht. Wir stellten die Kämpfe, die Entwicklung des Panzers und die Missionen des Originals wieder her und ergänzten breitere Bildschirme, Tastatursteuerung, automatisches Zielen, neue Flugzeuge und Bodeneinheiten sowie einen HUD-Editor. Ich plante die Funktionen und spielte selbst, um Unterschiede zum Original zu finden und Korrekturen vorzugeben. Codex erledigte die Analyse, Codeimplementierung, Grafikarbeiten, Builds und Tests.
FIG. 01HEAVYMACH — IPHONE · IPAD · MAC — IPHONE · IPAD · MAC
HEAVYMACHSECTION 01
Vom iPod touch zum heutigen iPhone
HeavyMach ist ein seitlich scrollendes Panzer-Actionspiel von 2009. Byun Hae-jun entwickelte es, Park Jae-cheol zeichnete die Grafiken. Durch Neigen des Geräts bewegt man den Panzer vorwärts und rückwärts; durch Berühren des gewünschten Angriffspunkts auf dem Bildschirm zielt und schießt man. Mit der Sprungtaste überwindet man Hindernisse und mit den Waffentasten wählt man geeignete Angriffe gegen Boden- oder Luftgegner. Diese Steuerung blieb in der restaurierten Fassung erhalten.
Ich lernte das Spiel zuerst über Cydia kennen. Danach suchte ich nach einer Anleitung, um ein US-App-Store-Konto anzulegen, und kaufte es. Der koreanische Store hatte damals keine Spielekategorie. Als ich im Juli 2017 iOS-Entwickler als meinen dritten Beruf wählte, hatte HeavyMach meiner Einschätzung nach etwa 35% Anteil an dieser Entscheidung. Auch deshalb wollte ich es auf meinem heutigen iPhone wieder ausführen. Nachdem ich im Traum mich selbst bei meiner ersten Begegnung mit dem iPod touch gesehen hatte, suchte ich nach dem Spiel. Der Fund des Originals wurde zum Ausgangspunkt der Restaurierung. Der begleitende Mags-Interviewtext behandelt den Berufswechsel und die Gründe, aus denen ich dieses Spiel heute hinterlassen möchte. Ich begann die Restaurierung mit einem HeavyMach-1.13-Build aus der HeavyMach-Sammlung im Internet Archive (archive.org).
Dieser Artikel beschreibt Funktionen und Entwicklungsstand der öffentlichen Version v0.16 vom 29. Oktober 2026. Auf iPhone, iPad und Mac lassen sich die reguläre App und eine Validierungs-App mit Cheats getrennt installieren. Nach der Wiederherstellung der ursprünglichen Regeln erweiterten wir Bildschirm und Eingaben und fügten neue Gegner hinzu. Dabei unterschieden wir durchgehend zwischen ursprünglichen Funktionen und neuen Ergänzungen.
FIG. 02
FIG. 02
The tank jumps above a slope and fires at an enemy.
HEAVYMACHSECTION 02
Regeln für Waffen, Entwicklung und Missionen
Maschinenkanonen, Schrot, Raketen, Strahlenwaffen und Luftunterstützung stammen aus dem Original. Jede Waffe hat eine andere Geschossgeschwindigkeit, Streuung, Schwerkraft und Feuerpause. Selbst vom gleichen Punkt aus unterscheiden sich Flugbahn und Ankunftszeit je nach Waffe. Der Spieler verändert die Position des Panzers und seines Rohrs, wechselt Waffen oder fordert Unterstützungsangriffe an, um Gegner zu bekämpfen.
Man sammelt weiterhin Erfahrung, verbessert Bewegung, Verteidigung und Angriff und besiegt Bosse, um in den Missionen voranzukommen. Nach einer Mission erscheinen Park Jae-cheols Ergebnisillustration und die Auswahl des nächsten Abschnitts. Es reichte nicht, den Panzer bewegen und Geschosse fliegen zu lassen: Schadens- und Verbesserungsberechnungen, Bewegung und Erscheinungsbedingungen der Gegner, Missionsende und Speichern mussten ebenfalls übereinstimmen. Bei einer Schadensverbesserung etwa verändert eine andere Reihenfolge der Ganzzahldivision das Ergebnis. Codex verglich Berechnungen und Ausführungsergebnisse unter gleichen Waffen-, Verbesserungs- und Zufallsbedingungen.
Ich spielte die installierte App selbst und wies auf umgekehrte Neigungssteuerung, falsche Einschlagpositionen der Unterstützungsangriffe, Bossbewegungen und fehlende Ergebnisbilder hin. Nach den Korrekturen spielte ich in der iPhone-App von v0.9, dem Stand der Wiederherstellung des Originals, sämtliche Missionen. Dabei sah ich keine Abstürze, Fehlfunktionen oder ungewöhnlichen Gegnerbewegungen. Später spielte ich auch die Fassungen mit zusätzlichen Flugzeugen und automatischem Zielen auf iPhone und iPad.
FIG. 03
FIG. 03
The weapon list and selection outline at the top of the screen.
FIG. 04
FIG. 04
Multiple blue beams descend from the sky.
FIG. 05
FIG. 05
The upgrade screen offers MOVEMENT, DEFENSE and ATTACK.
FIG. 06
FIG. 06
STAGE CLEAR and the next-stage button appear over the tank illustration.
HEAVYMACHSECTION 03
HUD-Layout bearbeiten
Im Kampf öffnet man MENU und wählt SET GAME UI, um Schaltflächen, Anzeigen und die obere Metallverzierung zu verschieben. Der Editor wurde in v0.14 ergänzt. Seit v0.15 ist er nur über das Pausenmenü im Kampf erreichbar; die Schaltfläche in der Missionsauswahl wurde entfernt.
Man zieht eine Gruppe an die gewünschte Stelle und drückt APPLY, um das Layout zu speichern und zum Pausenmenü zurückzukehren. Mit RESUME GAME setzt man den Kampf fort. RESET LAYOUT setzt den bearbeiteten Entwurf auf die Standardpositionen zurück; CANCEL verwirft die Änderungen. Beim Anordnen kann man zwischen dem angehaltenen Kampf und einer Beispielszene wechseln. Bilder und Berührungsbereiche verwenden dieselben Positionsdaten, sodass eine verschobene Schaltfläche an ihrem neuen Ort reagiert.
Die Werkzeugleiste rechts klappt zu, sobald man das HUD zu ziehen beginnt. TOOLS öffnet sie wieder. Auf kleinen Bildschirmen scrollen nur die Zusatzwerkzeuge; CANCEL und APPLY bleiben unten sichtbar. Die Werkzeugschaltflächen verwenden Platte, Ecken und gedrückten Zustand der ursprünglichen Metallknöpfe.
Während der Umsetzung verschwanden die obere Metallplatte und die Verbindungsleisten aus eigenen Layouts. Codex stellte sie als separat verschiebbare Gruppe UPPER TRIM wieder her. Im Kampf fängt die Verzierung keine Berührungen ab. Vorhandene Layoutdateien bleiben lesbar; ein verändertes Layout wird beim Drücken von APPLY einmal gespeichert.
Codex bestand auf einem echten iPhone und iPad jeweils 13 HUD-Prüfungen und bestätigte, dass MENU nach dem Verschieben nach rechts an seiner neuen Position das Pausenmenü öffnet. Die Bilder von Editor und angewendetem Layout stammen aus der Cheat-App. Die Richtungstasten oben sind deren Testbedienelemente. Das HUD-Implementierungsprotokoll beschreibt Eingaben, Speicherung und Wiederherstellung der Verzierung.
FIG. 07
FIG. 07
Upper metal trim moved downward in the HUD editor; the right-hand tools fold away during dragging. iPhone cheat app.
FIG. 08
FIG. 08
The pause menu opened by pressing MENU at its new position on the right. iPhone cheat app.
HEAVYMACHSECTION 04
Speichern, Grafik, Ton und Zeitverarbeitung
Die erste Implementierung speicherte bei jedem Schuss, jedem erlittenen Treffer und jedem Erfahrungsgewinn eine Datei. Als ich fragte: „Bei jedem Schuss eine Datei speichern?“, trennte Codex Aktualisierungen im Speicher vom Schreiben der Datei. Gespeichert wird nun bei der Slot-Auswahl, beim Wechsel zum nächsten Abschnitt, bei Game Over und bei der Rückkehr ins Menü. Das bestehende Speicherformat mit 3.624 Bytes blieb erhalten. Nach der Korrektur verzeichnete der automatische Test bei 180 Frames Schießen null Dateischreibvorgänge und bei der Rückkehr ins Menü einen.
Der erste Renderer berechnete die Pixel auf der CPU, drehte und kopierte die Zeilen und erzeugte jedes Mal ein neues Bildobjekt. Ich hatte das Original bereits in einer funktionierenden Ausführungsumgebung selbst geprüft. Ich verlangte einen Vergleich damit und eine erneute Prüfung der Implementierung, die jedes Spielbild mit UIKit erzeugte. Codex stellte sie auf Sprite-Darstellung mit OpenGL ES 1.1 und wiederverwendete Texturen um. Nach dem Textur-Upload wurde nicht mehr benötigter CPU-Pixelspeicher freigegeben. Mac verwendet einen Desktop-OpenGL-Kompatibilitätspfad.
Die Schussgeräusche hatten eine weitere Verzögerung. Codex maß für das erneute Starten von Effekten mit AVAudioPlayer im Mittel 52,887ms und im p95 58,549ms. Nachdem OpenAL-Puffer und -Quellen vorab vorbereitet und beim Schießen wiederverwendet wurden, lag der Aufwand des Wiedergabeaufrufs im Mittel bei 0,007053ms und im p95 bei 0,008167ms. Gemessen wurde die Verarbeitungszeit des Aufrufs, der die Wiedergabe eines Effekts anfordert.
Wir korrigierten auch die Zeitberechnung. Die erste Implementierung summierte die tatsächlich vergangene Zeit und aktualisierte den Spielzustand pro angezeigtem Bild gar nicht oder mehrmals. Codex änderte dies auf genau eine Aktualisierung pro angezeigtem Bild. Bei Pause oder Wechsel in den Hintergrund stoppen Spielzeit, Effekte und gehaltene Feuereingaben. Nach der Rückkehr setzt der Spieler das Spiel selbst fort. Das Spiel pausiert auf dieselbe Weise bei 120 Sekunden ohne Eingabe während eines Kampfes. Die fehlenden Geräusche beim Waffenwechsel werden ebenfalls wieder abgespielt.
HEAVYMACHSECTION 05
Breitere Bildschirme und Koordinaten
Je nach Seitenverhältnis zeigt das Spiel nun einen größeren Teil der Welt. Damit auch in den neu sichtbaren Bereichen links und rechts auf die berührte Stelle geschossen wird, müssen physische Pixel, UI-, Kamera- und Weltkoordinaten getrennt werden. Tastengrafiken und Berührungsflächen verwenden dieselbe Layoutberechnung. Sensor- und Berührungskoordinaten werden für beide Querformatausrichtungen umgerechnet; auch die umgekehrte Bewegungsrichtung beim Neigen wurde korrigiert.
Dass der Flugzeugboss in Mission 3-5 zu früh herankam, entstand ebenfalls durch die Bildschirmerweiterung. Codex hielt den von mir beschriebenen Gegner zunächst fälschlich für einen Hubschrauber. Nachdem ich klarstellte, dass es ein Flugzeug war, zeigte die Untersuchung: Durch den breiteren Bildschirm wurden sowohl die Sichtbarkeitsbedingung als auch die Kampfaktivierung zu früh erfüllt. Codex behandelte die Bedingung für den Kampfbeginn getrennt, damit ein größerer sichtbarer Bereich den Bosskampf nicht früher auslöst.
Die Luftunterstützung schlug hinter dem Panzer ein, weil beim Loslassen der Berührung künstliche Koordinaten übergeben wurden. Codex trennte das Beenden einer Eingabe von den Zielkoordinaten und behielt die letzte gültige Angriffsposition bei. Auf dem Pfad, der Ergebnisillustrationen nicht anzeigte, korrigierte es die Zuordnung der JPG- und PNG-Endungen. Nach der Bildsuche wurde gesondert behoben, dass auf breiten Bildschirmen das Schlachtfeld außerhalb der Illustration sichtbar war.
In Titel-, Modus- und Missionsmenüs blieb die bestehende Grafik in der Mitte erhalten; links und rechts kamen Hintergründe hinzu. Nicht zusammenpassende Helligkeitsverläufe und Strukturen wurden korrigiert, ebenso schwarze Linien, die durch einfließende Texturränder entstanden. Beim Menüwechsel schließen sich nun vier Flächen wie Türen und bedecken den ganzen Bildschirm. Das Zeichen in der Mitte behielt seine Größe; nur die äußeren Bereiche wurden verlängert. Ganzzahlige Anzeigekoordinaten verhindern Lücken beim Schließen.
HEAVYMACHSECTION 06
Bedienung und Ballistik des automatischen Zielens
Ich plante das automatische Zielen anhand der Zielauswahl und -verfolgung in Armored Core und Ace Combat. Das Rohr folgt dem Gegner während Bewegung und Sprüngen, doch Bewegung, Springen, Waffenwahl und Schießen bleiben beim Spieler. Die A-Taste im HUD wählt einen nahen Gegner vor dem Panzer. Pfeiltasten wechseln das Ziel, die Fadenkreuztaste feuert. Ein erneuter Druck auf A kehrt zum ursprünglichen Zielen und Schießen per Berührung zurück.
Ein ausgewählter Gegner bleibt Ziel, auch wenn er den Bildschirm verlässt. Wird er zerstört, entfernt oder bewegt er sich hinter den Panzer, wird ein anderer Gegner voraus gewählt. Eckmarkierungen und die Zustände LOCKED, TRACK und BLOCKED kennzeichnen das Ziel; ein Richtungsanzeiger am Rand zeigt auf Ziele außerhalb des Bildschirms. Ohne Ziel kehrt das Rohr zu seinem Grundwinkel zurück.
Codex berechnete erreichbare Flugbahnen aus Geschwindigkeit, Schwerkraft und Lebensdauer der Waffe sowie der letzten Bewegung des Gegners. Schwerkraft und Position werden in derselben Reihenfolge wie bei einem tatsächlichen Geschoss aktualisiert, und je nach Rohrwinkel wird die Mündungsposition neu berechnet. Blockiert Gelände die flache Flugbahn, wird eine hohe geprüft. Waffen zur Luftunterstützung berücksichtigen ihren Abschusspunkt oberhalb des Spielfelds.
Anfangs verlangte ich ein Zielen, das Waffenparabel und Gegnerbewegung berechnet und sicher trifft. Die von Codex eingebaute C-Korrektur veränderte sogar Geschossgeschwindigkeit, Streuung und Flugwege. Nachdem ich die Auswirkungen geprüft hatte, ließ ich sie entfernen. Die aktuelle Funktion wählt Ziele und stellt das Rohr ein; Geschwindigkeit, Streuung, Schwerkraft und Schaden bleiben die Werte der vorhandenen Waffen. Bewegt sich der Gegner nach dem Schuss oder streut das Geschoss, kann der Schuss verfehlen.
Bei ausgeschaltetem automatischem Zielen verglich Codex die Aufzeichnungen des manuellen Schießens vor und nach dem Einbau der Funktion. Für 20 Waffen, drei Zufalls-Seeds und jeweils 420 Frames stimmten die Aufzeichnungen über insgesamt 25.200 Frames Byte für Byte überein. Verständlichere Hinweise für Ziele außerhalb des Bildschirms, unter Gelände und für fehlende Ziele bleiben eine weitere Aufgabe.
FIG. 09
FIG. 09
Green corners and the LOCKED label mark the target.
FIG. 10
FIG. 10
The tank jumps while fighting a locked airborne target.
FIG. 11
FIG. 11
Firing at an airborne auto-aim target. Original speed, 5 seconds.
FIG. 12
FIG. 12
Jumping, firing at an auto-aim target and landing. Original speed, 6 seconds.
FIG. 13
Auto-aim gameplay with sound · 7 seconds.
FIG. 14
Jumping, firing and the weapon list with auto-aim · 7 seconds.
HEAVYMACHSECTION 07
Sechs Flugzeugtypen
Die neuen Luftgegner sind die Senkrechtstarter Yak-141, Harrier GR3 und F-35B sowie die Jagdflugzeuge F-22, Su-57 und MiG-31. Ich legte Typen, Aussehen, Bewaffnung und Erscheinungsbedingungen fest und ließ sie zwischen bestehenden Platzierungen einfügen, ohne ursprüngliche Gegner auszutauschen. Codex erstellte Bilder und Code.
Die Senkrechtstarter verwenden Bewegung und Bewaffnung der vorhandenen Hubschrauber. Die Yak-141 feuert eine einzelne Rakete, die Harrier GR3 zwei Maschinenkanonengeschosse und die F-35B zwei Raketen. Die Flugzeuge neigen sich mit ihrer Bewegung; Mündungen, Düsen und Trefferflächen folgen der Lage des Flugzeugs. Über 14 Teilmissionen kamen 113 Maschinen hinzu. Namen, Koordinaten, Reihenfolge und Boss-Flags sämtlicher 1.182 ursprünglicher Gegnerplatzierungen blieben erhalten. Neue Einheiten verwenden einen eigenen Zufallszustand, damit die Reihenfolge der Zufallsaufrufe bestehender Gegner unverändert bleibt.
Die drei Jagdflugzeugtypen erhielten Lux-Lunae-Lackierungen. Schwarz, goldene Linien, goldene Cockpitscheiben und Embleme am Leitwerk sollten die visuelle Hommage erkennbar machen. Geplant war, in Bosskämpfen und im letzten Bereich der jeweils vorherigen Mission starke Verstärkung einzusetzen und so Schwierigkeit und Spannung der bisherigen Kämpfe aus einem Boss und gewöhnlichen Gegnern zu erhöhen. Durch die Wiederverwendung von Code und Ressourcen wollten wir möglichst wenig am Original verändern.
HeavyMach beeinflusste meine Entscheidung, Entwickler zu werden. Als ich von der geplanten Veröffentlichung von Ace Combat 8 hörte, dachte ich, dass ich zumindest bis dahin am Leben bleiben musste. Mit Lux Lunae brachte ich die Bedeutung beider Spiele für mein Leben in HeavyMach zusammen. Weil ich sowohl Lux Lunaes erinnerte Erscheinung als auch die empfundene Bedrohung und Anspannung übertragen wollte, plante ich Lackierung, Bewaffnung und Erscheinungsbedingungen gemeinsam.
Die Haltbarkeit beträgt 765: das Maximum von 450 der bestehenden regulären Heli-Definitionen, multipliziert mit 1,7. F-22 und Su-57 verschießen die vorhandene Einzelrakete dreimal hintereinander. Die MiG-31 feuert drei Paare von je zwei Raketen, insgesamt sechs. Die Raketengeschwindigkeit wurde um 25% von 160 auf 200 erhöht. Die Erhöhung der Feuerrate wurde auf spätere Anweisung von 25% auf 10% gesenkt; Schaden, Schwerkraft, Streuung und Lebensdauer der vorhandenen Waffen blieben erhalten.
In sieben Bosskämpfen und den jeweils vorherigen Missionen wurden insgesamt 72 Maschinen hinzugefügt. In den vorherigen Missionen erscheinen je vier im letzten Weltabschnitt; in Bosskämpfen erscheinen sie, sobald der Kampf gegen den Boss tatsächlich beginnt. Ich entdeckte in der regulären App, dass Flugzeuge plötzlich mitten auf dem Bildschirm auftauchten, und verlangte eine Korrektur. Codex änderte den Einflug so, dass die ganze Maschine zunächst außerhalb des rechten Bildschirmrands liegt. Beim Einflug feuert sie nicht; eine Pause stoppt auch den Einflug. Die bestehenden Bedingungen zum Abschluss der Bosskämpfe blieben erhalten.
Die hohe Einfluggeschwindigkeit legte Codex selbst fest. Ich hatte sie nicht direkt vorgegeben, behielt sie aber, weil sie mich an Lux Lunaes schnelle Vorstoß-und-Abflug-Angriffe und Kurvenkämpfe in Ace Combat 8 erinnerte. Meiner Ansicht nach bleiben die derzeitigen Bewegungs- und Waffenabläufe im Rahmen des ursprünglichen Spielgefühls. In v0.16 wurde der Abstand der Formation beim Einflug korrigiert.
Codex verwendete für Startpositionen und Einflugziele dieselbe relative Anordnung mit horizontalem Abstand 140 und vertikalem Abstand 70. Anzahl, Waffen, Geschwindigkeit und KI nach dem Einflug blieben gleich. Der Abstand zwischen den Flugzeugen wurde vom Erscheinen bis zum Ende des Einflugs unter 140 Bedingungen geprüft: 14 Verstärkungsbereiche, fünf Bildschirmgrößen und zwei Spielerhöhen. Im Kampf bewegt die ursprüngliche KI die Maschinen zum Spieler, sodass sie sich erneut zusammendrängen können. In einem separaten Vergleich von 56 Bedingungen mit feststehendem Spieler stieg die Zahl überlappender Flugzeugpaare 20 Sekunden nach dem Einflug von 372 auf 533. Das Protokoll zur Einflugkorrektur dokumentiert Einflug und anschließenden Kampf getrennt.
Ich ließ Codex die neuen Flugzeuggrafiken mehrfach neu zeichnen. Ich verlangte die tatsächliche Form der Flugzeuge bei gleichzeitiger Übernahme der Farben und Texturen des Originals. Die ersten Entwürfe enthielten nicht verlangte Neuinterpretationen wie kurze Nasen und übertriebene Panzerung. Codex erstellte sie neu, mit echten Fotos und Zeichnungen als Formreferenzen und vorhandenen Spielgrafiken als Referenzen für Farbe und Textur. Danach prüfte ich Konturen, Darstellungsgröße und hintere Flammen im tatsächlichen Spiel und gab weitere Korrekturen vor. Die konkreten Gründe für die Auswahl und meine Bewertung dieses Prozesses folgen im Mags-Interview.
Mit dieser Arbeit wollte ich auch prüfen, wie genau Codex anhand von Textanweisungen bestehenden Code und Assets liest und wiederverwendet und vorgegebene Formen und Bewegungen umsetzt. Ich bringe meine Erfahrungen mit beiden Spielen in die Kämpfe von HeavyMach ein und entscheide beim eigenen Spielen weiter, was geändert werden soll. Das erneute Zusammendrängen im Kampf nach dem Einflug bleibt bestehen. Den Bildschirm zu verlassen und für einen weiteren Angriff zurückzukehren ist weiterhin eine Idee.
FIG. 15
FIG. 15
The tank fires a beam at the black aircraft.
FIG. 16
Combat against the added aircraft · 13 seconds.
HEAVYMACHSECTION 08
Shilka und Tunguska als Bodeneinheiten
Seit v0.13 treten Shilka und Tunguska als Bodengegner auf. Insgesamt wurden 152 Fahrzeuge auf 35 Abschnitte verteilt, ohne bestehende Gegner zu ersetzen. Shilka feuert Salven aus sechs weißen Geschossen; Tunguska feuert vier weiße Geschosse und zwei Raketen. Jede Waffe hat einen eigenen Abschusspunkt und Schusszustand.
Wie bei den Flugzeugen verlangte ich neue Grafiken unter Verwendung der Bewegung und des Kampfverhaltens der ursprünglichen Bodeneinheiten. Codex erstellte Rumpf, Turm, Rohr, Raketenwerfer und Radar als einzelne Teile und verband sie über das bestehende Teilesystem. Geschosse, Rauch, Explosionen, Geräusche sowie Treffer und Zerstörung nutzen ebenfalls die vorhandenen Abläufe. Die getrennten Teile erhalten die Bewegung auf Hängen und den Rückstoß des Rohrs.
Das Radar besteht aus einem am Turm befestigten Sockel und einem drehbaren Oberteil. Dieses verwendet Bilder für 24 Richtungen und dreht sich unabhängig vom Rohr. Die neuen Teile folgen den Farben und Texturen des Originals. Rumpfbewegung, Bewaffnung und Missionsplatzierung blieben während der grafischen Überarbeitungen erhalten.
Shilkas zusammengesetzter Turm wirkte zunächst zu flach und wurde erneut überarbeitet. Anhand von Fotos des echten Fahrzeugs wurden Seitenpanzerung und hinterer Aufbau kräftiger gezeichnet und zwei lange Antennen entfernt. Anschließend wurde die dargestellte Turmhöhe von 16 auf 29 erhöht, passend zur Tunguska. Die Anschlüsse für Rohr und Radar wurden entsprechend versetzt. Endgültige Grafiken und Änderungen stehen im Entwicklungsprotokoll der Bodeneinheiten.
Die beiden Bilder unten zeigen die endgültigen Teile bei Montage- und Schusstests in den Cheat-Apps auf iPhone und iPad. Dieselben Einheiten sind auch in den regulären Apps enthalten. Munition, Schaden und Schwierigkeit der gesamten Kampagne mit den zusätzlichen Gegnern müssen noch überprüft werden.
FIG. 17
FIG. 17
Shilka fires white rounds on a slope with its final turret height. iPhone cheat app.
FIG. 18
FIG. 18
Tunguska fires a missile on a slope; its radar rotates independently of the barrel. iPad cheat app.
HEAVYMACHSECTION 09
Gemeinsamer Code für drei Apple-Plattformen
Die Spielregeln sind in C++20 geschrieben; Objective-C++ verbindet Fenster, Eingaben, Grafik und Ton auf Apple-Geräten. HeavyMach.xcworkspace verwaltet die Abhängigkeiten zwischen gemeinsamen Modulen und den iOS/iPadOS- und Mac-Projekten. Bewegung, Ballistik, Schaden, Entwicklung und Gegnerplatzierungen werden nicht in jede App kopiert, sondern stammen aus demselben Kern. So soll die Änderung eines Waffenwerts auf allen drei Plattformen ankommen.
Der gemeinsame Code wird mit dem jeweiligen Plattform-SDK kompiliert und als statisches Framework eingebunden. Bilder, Audio, Karten und zusätzliche Grafiken kommen über HeavyMachAssets.bundle in die Apps. iPhone und iPad verwenden dasselbe iOS-Target. Die Mac-App basiert auf AppKit und unterstützt Fenster- und Vollbildbetrieb; Catalyst wird nicht verwendet. Plattformspezifischer Code berücksichtigt die Unterschiede bei Fenstern, App-Lebenszyklus, Eingaben und Grafikkontexten.
iPhone unterstützt beide Querformatausrichtungen sowie Berührung, Neigung und Tastatur. Auf dem iPad lassen sich Berührung, Neigung und Tastatur gemeinsam auf einer an das Seitenverhältnis angepassten Zeichenfläche verwenden. Mac wird per Tastatur bedient. Bewegung, Springen, Rohrverstellung, Schießen, Waffenwahl und Menüs sind Tasten zugeordnet. Shift ermöglicht feinere Änderungen von Neigung und Rohrwinkel.
In der Validierungs-App mit Cheats lassen sich Missionen, alle Waffen, Bauteile und Verbesserungen vorgeben, um denselben Kampf zu wiederholen. Sie verwendet eine andere App-ID und getrennte Speicherdaten von der regulären App; auch Cheat-Kern und Laufzeit werden getrennt gebaut. Sie dient dazu, neben Kernberechnungen auch die tatsächliche Auswahl von Waffen und das Drücken und Loslassen auf dem Bildschirm zu prüfen.
HEAVYMACHSECTION 10
Geprüfte Ergebnisse und verbleibende Tests
Für die am 29. Oktober 2026 veröffentlichte v0.16 prüfte Codex Formationseinflug und Kampf und aktualisierte die regulären und Cheat-Apps auf iPhone und iPad drahtlos. Vorhandene Spielstände und HUD-Layouts blieben beim Start erhalten. Beim eigenen Spielen auf beiden Geräten bemerkte ich keine Auffälligkeiten.
Die Messung an diesem Tag ergab beim Formationseinflug auf dem iPad Air M2 ein p95 der Frame-Aufrufabstände von 21,39ms, oberhalb des Grenzwerts von 20ms. Die Ursache muss noch durch einen Vergleich mit dem Stand vor der Änderung unter gleichen Bedingungen untersucht werden. Die Einflug- und Kampfabschnitte auf dem iPhone sowie der Kampfabschnitt auf dem iPad bestanden die Prüfung der Aufrufabstände.
Als ich die regulären Apps auf einem iPhone Air und einem iPad Air M2 mit 13 Zoll selbst spielte, sah ich keine Frame-Einbrüche oder Fehlfunktionen. Bei Codex' automatischen Tests auf realen Geräten vom 27. Oktober 2026 bestanden auf beiden Geräten jeweils 84 von 85 Prüfungen; ein Vergleich der Anzeigezeit schlug fehl. Die getesteten Betriebssysteme waren iOS/iPadOS 27.0.1. Die automatischen Tastatureingaben erfolgten als OS-Tasteneingaben über Device Hub. Tests mit tatsächlich angeschlossenen Bluetooth- oder USB-Tastaturen stehen noch aus.
Auf einem Mac mini M4 Pro mit macOS 27.0.1 bestanden 33 Prüfungen für Bewegung, Springen, Zielen, Schießen, 20 Waffen, Menüs, Grafik, Ton und Vollbild. Bei den mit einem Entwicklungszertifikat signierten regulären und Cheat-Apps wurden null Lecks festgestellt. Zuvor bei ad-hoc-signierten Apps entdeckte Lecks in Systemverbindungen wurden durch den Vergleich von Signierung und App-Registrierung behoben. In sechs Szenen bei 1200×800 und 1920×1080 ergaben 180 gemessene Frames nach 30 Frames Vorbereitung p95-Verarbeitungszeiten von 10,86–14,29ms.
Eine spätere Messung nach Einführung des HUD-Editors verwendete lokale Ad-hoc-Signierung. Drei von sechs Bedingungen überschritten den Grenzwert von 16,67ms für die Verarbeitungszeit; vor der Änderung waren es fünf gewesen. Eine Wiederholungsmessung unter den früheren Bedingungen mit Entwicklungszertifikat und die Untersuchung von Verzögerungen bei der Fensteranzeige stehen noch aus.
Am 28. Oktober 2026 klonte Codex den öffentlichen main-Branch neu und baute und startete das Spiel bei gesperrtem Zugriff auf den bestehenden Arbeitsordner und das Originalpaket. Die Hashes von 1.482 Ressourcen wurden verglichen; 21 Kernprüfungen und zehn iOS-Prüfungen bestanden. Reguläre und Cheat-App liefen auch in einem iPhone-Simulator. Damit wurde geprüft, ob andere das Spiel allein mit den Dateien aus dem Repository bauen können.
Die Ursache des fehlgeschlagenen Anzeigezeittests auf iPhone und iPad muss weiter untersucht werden. Geplant sind außerdem Prüfungen von Wärme-, Strom- und Speicherveränderungen bei längerer Bewegung, beim Springen und in längeren Kämpfen, des Anschließens und erneuten Anschließens echter Tastaturen sowie von Munition, Schaden und Schwierigkeitsgrad der gesamten Kampagne mit zusätzlichen Flugzeugen. Außerdem wurde gemeldet, dass nach der Nutzung der Wecker-App und Rückkehr zum Spiel der Ton ausfällt; die Ursache ist noch nicht untersucht. Werte nach Bedingungen stehen im Validierungsprotokoll.
HEAVYMACHSECTION 11
Herunterladen und bauen
Die aktuellen Builds zielen auf Apple Silicon und arm64. Als minimale Betriebssystemversionen sind im Projekt iOS/iPadOS 15.0 für iPhone und iPad sowie macOS 12.0 für Mac eingestellt. Tatsächlich getestet wurde auf den oben genannten Geräten mit OS 27.0.1. Für den Build werden ein Apple-Silicon-Mac, Xcode, CMake ab 3.20, Python 3 und Git LFS verwendet. Quellcode, Bilder, Audio, Karten und Build-Projekte stehen im GitHub-Repository.
git clone https://github.com/gelb2/HeavyMach.git
cd HeavyMach
git lfs install --local
git lfs pull
python3 tools/verify_build_resources.py
open HeavyMach.xcworkspace
Nach dem Laden großer Ressourcen mit Git LFS wird die Ressourcenprüfung ausgeführt und der Workspace geöffnet. In Xcode stellt man das eigene Entwicklungsteam und die Signierung ein und wählt das Zielgerät. Die reguläre iPhone/iPad-App heißt HeavyMachRestored, die Cheat-App HeavyMachValidation. Auf Mac heißen sie HeavyMachMac und HeavyMachMacValidation. Alternativ lässt sich das Quellcode-und-Ressourcen-Archiv aus v0.16 Releases verwenden. Simulatorstart, Geräteinstallation und die Lösung von Signierungsfehlern beschreibt die Installationsdokumentation.
Die Versionsverwaltung führt Arbeitsbranches zunächst in develop zusammen und nur develop anschließend in main. Release-Tags werden auf die Merge-Commits von main gesetzt. Beim erneuten Build einer bestimmten Veröffentlichung verwendet man Quellcode und Ressourcen desselben Tags. Die gesamte Dokumentation verknüpft Codestruktur, Funktionen, Korrekturen und Änderungsgeschichte.
GitHub Releases enthält die Änderungsgeschichte von v0.9 bis v0.16. Der obige Clone-Befehl lädt main; für eine bestimmte Veröffentlichung wählt man das Quellcode-und-Ressourcen-Archiv ihres Tags. Nach v0.16 kam tools/release.py in main hinzu. Das Werkzeug extrahiert Versionshinweise, erstellt Archive mit Ressourcen und Hashes und verarbeitet GitHub-Release-Entwürfe. Das v0.16-Paket und 17 Prüfungen für Fehler und Wiederaufnahme wurden geprüft. Das tatsächliche Hochladen und Veröffentlichen einer neuen Version mit diesem Werkzeug steht für die nächste Version an. Die Anleitung zum Release-Werkzeug beschreibt Befehle und Ausgaben.
HEAVYMACHSECTION 12
Weitere Entwicklung
Mit Stand vom 29. Oktober 2026 ist v0.16 die öffentliche Version. Neben automatischem Zielen und sechs Flugzeugtypen enthält sie zwei Bodeneinheiten, den HUD-Editor, ein App-Symbol ohne Schrift und korrigierte Abstände beim Formationseinflug. Das Symbol wird in regulären und Cheat-Apps auf iPhone, iPad und Mac verwendet.
Klarere Rückmeldungen zum automatischen Zielen und die Tutorials 0-0 bis 0-4 stehen noch aus. Ein Android-Symbol als PNG ist vorbereitet. Geplant sind der Build des gemeinsamen C++-Kerns mit CMake und NDK und die Anbindung von Fenstern, Eingaben, Ton und Grafik an Android-APIs. Es gibt noch keine Android-App und kein APK.
Build-Warnungen sind noch nicht vollständig untersucht und behoben. Einige Warnungen betreffen vermutlich APIs, deren Verwendung nicht mehr empfohlen wird. Ihre Ursachen sollen parallel zur Funktionsentwicklung untersucht werden. Geplant ist außerdem ein Skript, das Download, Ressourcenvorbereitung, Build und Start verbindet. Man soll zwischen Ausführung auf Mac und Installation auf iPhone/iPad wählen können und Hinweise zu erforderlichen Werkzeugen, Entwicklungsteam und Signierung erhalten.
HEAVYMACHSECTION 13
Urheber, Lizenzen und Spielmaterial
Die ursprünglichen Urheber sind Entwickler Byun Hae-jun und Illustrator Park Jae-cheol. 2011 erwarb WeMade Creative, eine Tochter von WeMade Entertainment, die Vermögenswerte von Indiapps einschließlich der IP von HeavyMach und HeavyMach 2. Die Rollen der Urheber und Unternehmen unterscheiden die ursprüngliche Erstellung von der späteren Übernahme.
Neu geschriebener Code in diesem Projekt verwendet die MIT-Lizenz. Der Lizenzumfang trennt aus dem Original stammendes Material, externen Code und Dokumentation. Für ursprüngliche Bilder, Audio, Spieldaten und neue Bilder gelten die Nutzungsbedingungen der Ressourcen. OpenAL Soft, stb und andere Komponenten folgen den Drittanbieterhinweisen.
Ich habe nicht vor, mit dieser Restaurierung Geld zu verdienen. Ich habe Code und Assets veröffentlicht, damit andere das Spiel selbst bauen und spielen können. Ich möchte weiterhin dokumentieren, was wiederhergestellt und korrigiert wird. Wenn ein ursprünglicher Urheber oder ein anderer Beteiligter die Entfernung verlangt, werde ich das Repository löschen. Falls ich später ein App-Store-Konto für sass.studio anlege und von den ursprünglichen Urhebern und Beteiligten die Erlaubnis zur Verbreitung erhalte, wird das Spiel auch dann kostenlos angeboten.
Das Spielmaterial wurde aus meinen eigenen Aufnahmen gewonnen. Acht PNGs, zwei GIFs in Originalgeschwindigkeit und drei MP4s mit Ton zeigen Springen, Waffen, Verbesserungen und Missionsergebnisse des Originals sowie die neuen Flugzeuge und das automatische Zielen. Die Originalzeitpunkte und Dateiliste jeder Szene sind ebenfalls veröffentlicht.
Nine Years and Three Months
Ich habe nicht vor, mit dieser restaurierten Fassung Geld zu verdienen. Ich möchte den Code und die Assets gemeinsam veröffentlichen, damit andere das Spiel selbst bauen und spielen können. Ich möchte auch festhalten, wie ich dieses Spiel restauriert und was ich daran repariert habe.
Wenn sich eine betroffene Partei bei mir meldet, werde ich dieses Projekt zurückziehen. Die neun Jahre und drei Monate, die mir das HeavyMach-Team geschenkt hat, übersteigen die Lebensspanne, die mir der Schöpfer, der mich erschaffen hat, ursprünglich zugeteilt hatte.