4 puan yazan namyunwoo 2 시간 전 | Henüz yorum yok. | WhatsApp'ta paylaş

Forgotten Saga'yı (1997 Kore DOS RPG'si) kaynak portuyla taşımak

Motivasyon

  • 30 yıl önce, ilkokuldayken satın aldığım ilk kutulu oyun Forgotten Saga'ydı.
  • Hayatımdaki ilk RPG'ydi ve doğal olarak derinlemesine kaptırdım.
  • 20 yıldan fazla süre unuttuktan sonra insanların hâlâ oyunu çok oynadığını öğrendim.
  • "Bunu çok platformlu bir oyuna dönüştüremez miyim?"
  • Geriye yalnızca 1997 tarihli PE32 çalıştırılabilir dosyası ve veri dosyaları kalmıştı (doğal olarak kaynak kod yoktu).

Yaklaşım

  • Orijinal oyunu yeniden üretmenin temelde iki yolu var.
    • Spesifikasyon temelli yeniden yorumlama — oynanışı izleyip benzerini baştan yapmak
    • Orijinal işlevleri fonksiyon düzeyinde sadakatle geri kurmak — decompile edilmiş kodu olduğu gibi port etmek
  • Tahmin yerine doğrulanmış orijinal davranışı takip etmek için ikinci yolu seçtim.
  • Orijinal sürüm 1997 Windows MSVC ile yazılmış.

Analiz edilenler

Orijinal binary'nin decompile edilmesi

  • PE32, Ghidra 12 ile işlendi. 937 fonksiyonun tamamı başarıyla decompile edildi.
  • 51.799 satır pseudocode C elde edildi.

Veri formatlarının çözülmesi (48 tür, hepsi doğrulandı)

  • LZSS — standart + FAM varyantı (0x00 ring init, ref_offset bit yerleşimi farklı)
  • SPB — 256 renk + RLE, 1.155 görsel
  • MOB — karakter/NPC animasyonları, 2.699 kare. 0xA4 header + RLE pixel + frame stride 20B
  • SCP — bytecode VM, 128+ opcode, 6.026 entry, 43.036 diyalog satırı
  • FAM — 292 harita, 5 katman (base / overlay / collision / ...)
  • DAT — CHAR / ITEM 290 tür / MAGIC / ABILITY / MONSTER
  • SAV — actor struct 0x2A4 (676B), party + inventory + global vars

Kullanıcı girdisinin doğrudan doğrulanması

  • Save dosyaları doğrudan parse edilerek actor struct offset'leri doğrulandı.
  • Önceki hatalı eşlemeler (0x3C ATK→STR, 0x40 INT→TLT vb.) düzeltildi.

Üretilenler

  • 263 Lua dosyası, 157.277 satır
  • 3.760 asset
  • LÖVE 2D 11.5 masaüstü build'i + love.js (emscripten) web build'i
  • Mobil sanal joystick + Korece IME'nin doğrudan uygulanması
  • SharedArrayBuffer etkinleştirmesi (coi-serviceworker üzerinden COOP/COEP)
  • IndexedDB save kalıcılığı (tarayıcı ortamı)
  • 5 dağıtım kanalı — Web / iOS / Android / Windows / macOS

Yeniden üretim kapsamı

  • Başlık / karakter oluşturma / saha / diyalog / mağaza / envanter / ekipman / tuzak / DETECT·UNLOCK / save — tamamlandı
  • Savaş sistemi — devam ediyor

Yapay zeka araçlarının kullanımı

  • Ağırlıklı olarak GPT 5.5'in /goal özelliği, Claude Code ise yardımcı araç + gerçek zamanlı debug için kullanıldı.

GPT 5.5 /goal rolü — decompile analizi / düzeltmelerin birikimli işlenmesi

  • Orijinal fonksiyon cluster'ları / call graph / opcode reference için otomatik analiz
  • Veri formatlarında derin inceleme (save formatı, actor offset'leri, FAM yapısı vb.)
  • İlk otomatik çözümlemedeki mislabel düzeltmelerinin biriktirilmesi (51.799 satırlık düzeltilmiş sürüm)

Claude Code rolü — Lua portlama + anında doğrulama döngüsü

  • Orijinal fonksiyonu okuma → Lua'ya port etme → verify.sh testini çalıştırma (100+ test modu, 1.000+ assertion)
  • Tarayıcı ortamında debug (IDBFS / IME / SharedArrayBuffer vb.)
  • Kullanıcıdan hata bildirimi gelince debug → düzeltme → dev dağıtımı → doğrulama → live dağıtımı döngüsü

Çalışma süresi

  • Yaklaşık 1~3 ay

Nasıl bir sonuç ortaya çıktı

  • Play (tarayıcı): https://forgottensaga-classic.blogspot.com/2026/05/…
  • Hem PC'de hem mobilde çalışıyor. Mobilde sanal joystick + Korece IME özel olarak uygulandı.
  • Orijinal oynanış yüksek sadakatle yeniden üretildi — Z sıralaması, palette cycle, NPC state machine, SCP VM gibi orijinal davranışlar birebir

Henüz yorum yok.

Henüz yorum yok.