50 Punkte von namyunwoo 2026-05-17 | 24 Kommentare | Auf WhatsApp teilen

Forgotten Saga (koreanisches DOS-RPG von 1997) als Source-Port portieren

Motivation

  • Vor 30 Jahren war das erste Packungs-Spiel, das ich in der Grundschule gekauft habe, Forgotten Saga.
  • Mein erstes RPG überhaupt, und ich bin ganz natürlich tief darin versunken.
  • Nachdem ich es über 20 Jahre lang vergessen hatte, habe ich erfahren, dass es noch immer viele Leute spielen.
  • „Könnte man daraus nicht ein plattformübergreifendes Spiel machen?“
  • Übrig geblieben sind nur die PE32-Executable von 1997 und die Datendateien (natürlich ohne Sourcecode).

Vorgehensweise

  • Es gibt im Wesentlichen zwei Wege, das Originalspiel zu rekonstruieren:
    • Spezifikationsbasierte Neuinterpretation — das Gameplay beobachten und etwas Ähnliches neu bauen
    • Originalgetreue Rekonstruktion auf Funktionsebene — den dekompilierten Code direkt portieren
  • Ich habe mich für Letzteres entschieden, um verifiziertes Originalverhalten statt Vermutungen zu übernehmen.
  • Das Original basiert auf Windows MSVC von 1997.

Analysierte Inhalte

Dekompilierung des Original-Binarys

  • PE32 mit Ghidra 12 verarbeitet. 937 Funktionen, 100 % erfolgreich dekompiliert
  • 51.799 Zeilen pseudocodeartiges C

Reverse Engineering der Datenformate (48 Typen, alle verifiziert)

  • LZSS — Standard + FAM-Variante (ring init 0x00, andere Bit-Anordnung bei ref_offset)
  • SPB — 256 Farben + RLE, 1.155 Bilder
  • MOB — Charakter-/NPC-Animationen mit 2.699 Frames. 0xA4-Header + RLE-Pixel + Frame-Stride 20B
  • SCP — Bytecode-VM, 128+ Opcodes, 6.026 Einträge, 43.036 Dialogzeilen
  • FAM — 292 Karten, 5 Layer (base / overlay / collision / ...)
  • DAT — CHAR / ITEM 290 Typen / MAGIC / ABILITY / MONSTER
  • SAV — Actor-Struct 0x2A4 (676B), Party + Inventar + globale Variablen

Direkte Verifikation von Benutzereingaben

  • Save-Dateien direkt geparst, um die Actor-Struct-Offsets zu verifizieren
  • Frühere fehlerhafte Mappings korrigiert (0x3C ATK→STR, 0x40 INT→TLT usw.)

Erstellte Ergebnisse

  • 263 Lua-Dateien, 157.277 Zeilen
  • 3.760 Assets
  • Desktop-Build mit LÖVE 2D 11.5 + Web-Build mit love.js (emscripten)
  • Virtuellen Joystick für Mobilgeräte + koreanisches IME selbst implementiert
  • SharedArrayBuffer aktiviert (COOP/COEP via coi-serviceworker)
  • Persistente SAV-Speicherung mit IndexedDB (Browser-Umgebung)
  • 5 Distributionskanäle — Web / iOS / Android / Windows / macOS

Umfang der Reproduktion

  • Titel / Charaktererstellung / Feld / Dialog / Shop / Inventar / Ausrüstung / Fallen / DETECT·UNLOCK / Speichern — abgeschlossen
  • Kampfsystem — in Arbeit

Einsatz von AI-Tools

  • Vor allem die /goal-Funktion von GPT 5.5, Claude Code unterstützend + für Live-Debugging

Rolle von GPT 5.5 /goal — Dekompilierungsanalyse / fortlaufende Korrekturen

  • Automatisierte Analyse von Original-Funktionsclustern / Call Graph / Opcode-Referenzen
  • Deep Dive in Datenformate (SAV-Format, Actor-Offsets, FAM-Struktur usw.)
  • Fortlaufende Korrektur von Fehlbezeichnungen in der anfänglichen automatischen Dekodierung (korrigierte Fassung mit 51.799 Zeilen)

Rolle von Claude Code — Lua-Portierung + sofortiger Verifikationszyklus

  • Originalfunktion lesen → nach Lua portieren → verify.sh-Tests ausführen (100+ Testmodi, 1.000+ Assertions)
  • Debugging in der Browser-Umgebung (IDBFS / IME / SharedArrayBuffer usw.)
  • Bei Nutzermeldungen: debuggen → fixen → Dev-Deployment → verifizieren → Live-Deployment-Zyklus

Arbeitsdauer

  • Etwa 1–3 Monate

Was für ein Ergebnis es ist

  • Play (Browser): https://forgottensaga-classic.blogspot.com/2026/05/…
  • Läuft sowohl auf PC als auch mobil. Auf Mobilgeräten mit eigenimplementiertem virtuellem Joystick + koreanischem IME
  • Originalgetreue Reproduktion des Gameplays — Z-Sortierung, Palette Cycling, NPC-State-Machine, SCP-VM usw. mit 1:1-Originalverhalten

24 Kommentare

 
chinnotching 2026-05-22

Ich muss daran denken, dass ich einen Freund hatte, der damals schon eine für die Zeit eher ungewöhnliche "Vorbestellung" gemacht hatte, als ich in der Mittelschule war. Weil Forgotten Saga den Veröffentlichungstermin immer wieder nicht einhielt, hat er sich ständig bei mir darüber ausgejammert. lol

 
namyunwoo 2026-05-22

Etwa 2 Jahre? War wohl aufgeschoben worden, haha.

 
benjamin 2026-05-20

Da kommt richtig Nostalgie auf. Ich drücke diesem großartigen Projekt die Daumen!

 
namyunwoo 2026-05-22

Danke, Romantik zu finden ist heutzutage nicht leicht.

 
chcv0313 2026-05-19

Wenn man keinen Namen eingegeben hat, wurde automatisch Hiro Amy festgelegt, aber das geht offenbar nicht. Das Spiel war voller Bugs; ich frage mich, ob beim Portieren sogar die Bugs originalgetreu mitportiert wurden.

 
namyunwoo 2026-05-19

Es wird sogar noch mehr Bugs haben … Ich werde es nach und nach verbessern.

 
shakespeares 2026-05-18

Großartig … wow

 
namyunwoo 2026-05-22

Vielen Dank 💪🏻

 
zz5414 2026-05-18

Ich möchte in letzter Zeit auch ein klassisches Spiel, das ich in der Grundschulzeit mit viel Spaß gespielt habe, fürs Web portieren, und dann taucht so ein Beitrag auf. Ich frage mich, woher die Texte über die Motivation oder die analysierten Inhalte stammen, die dann bei GeekNews erscheinen.

 
namyunwoo 2026-05-22

Haha, weil ich es gepostet habe.

 
namyunwoo 2026-05-22

❤️Vielen Dank

 
gafani 2026-05-18

Ich habe den Namen falsch eingegeben – wie kann ich ihn löschen? Der virtuelle Esc-Button funktioniert nicht, und auch die Rücktaste auf der Tastatur reagiert nicht. Ich bin ganz aufgeregt.

 
namyunwoo 2026-05-19

Vielen Dank
Ich habe den Bug behoben, dass Backspace nicht funktioniert. Das Problem, dass im Vollbildmodus beim Drücken von Esc der Vollbildmodus beendet wird, ist aber noch nicht gelöst..

 
sam1287 2026-05-18

Ausgezeichnet!

 
namyunwoo 2026-05-22

Hehe, nur eine kleine Fanliebe..

 
teipub 2026-05-18

Großartig!

 
namyunwoo 2026-05-22

Das ist zu viel des Lobes, haha 😂

 
ifmkl 2026-05-18

Wow, wirklich beeindruckend.

 
namyunwoo 2026-05-22

Danke~~👍🏻👍🏻

 
kaydash 2026-05-18

Wow, das ist wirklich verdammt großartig.

 
namyunwoo 2026-05-22

Danke, ich werde die Qualität Schritt für Schritt verbessern.

 
mssmss 2026-05-17

Vielen Dank. Vielen Dank. Ich unterstütze euch.

 
namyunwoo 2026-05-22

Danke für eure Unterstützung!