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
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.