50 puan yazan namyunwoo 2026-05-17 | 24 yorum | WhatsApp'ta paylaş

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

Motivasyon

  • 30 yıl önce, ilkokuldayken ilk satın aldığım kutulu oyun Forgotten Saga'ydı
  • Hayatımdaki ilk RPG'ydi ve doğal olarak ona derinden bağlandım
  • 20 yılı aşkın süre unutup yaşadıktan sonra hâlâ çok sayıda insanın oynadığını öğrendim
  • "Bunu çoklu platformda çalışan bir oyuna dönüştüremez miyim?"
  • Elde kalan tek şey 1997 tarihli PE32 çalıştırılabilir dosyası ve veri dosyalarıydı (doğal olarak kaynak kod yoktu)

Yaklaşım

  • Orijinal oyunu yeniden üretmenin genel olarak iki yolu vardı
    • Spesifikasyona dayalı yeniden yorumlama — oynanışı izleyip benzerini yeniden yapmak
    • Orijinal fonksiyon düzeyinde sadık yeniden kurulum — decompile edilmiş kodu olduğu gibi portlamak
  • İkincisini seçtim. Tahminlere değil, doğrulanmış orijinal davranışa uymak için
  • Orijinal sürüm 1997 Windows MSVC ile yapılmıştı

Analiz edilenler

Orijinal binary'nin decompile edilmesi

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

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

  • LZSS — standart + FAM varyantı (0x00 ring init, farklı ref_offset bit yerleşimi)
  • SPB — 256 renk + RLE, 1.155 görsel
  • MOB — karakter/NPC animasyonları, 2.699 kare. 0xA4 header + RLE pixel + 20B frame stride
  • 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 değişkenler

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

  • Save dosyalarını doğrudan parse ederek actor struct offset'lerini doğruladım
  • Önceki hatalı eşleştirmeler (0x3C ATK→STR, 0x40 INT→TLT vb.) düzeltildi

Ortaya çıkarılanlar

  • 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 doğrudan uygulandı
  • SharedArrayBuffer etkinleştirildi (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 — sürüyor

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

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

GPT 5.5 /goal rolü — decompile analizi / birikimli düzeltmeler

  • 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 decode çıktısındaki mislabel düzeltmelerinin biriktirilmesi (51.799 satırlık düzeltilmiş sürüm)

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

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

Çalışma süresi

  • Yaklaşık 1~3 ay

Nasıl bir sonuç ortaya çıktı

  • Oyna (tarayıcı): https://forgottensaga-classic.blogspot.com/2026/05/…
  • Hem PC hem mobilde çalışıyor. Mobilde sanal joystick + Korece IME özel olarak uygulandı
  • Orijinal oynanışa sadık yeniden üretim — Z sıralaması, palet döngüsü, NPC durum makinesi, SCP VM gibi orijinal davranışlar 1:1

24 yorum

 
chinnotching 25 일 전

Ben ortaokuldayken, o zamanlar pek yaygın olmayan bir "ön sipariş" veren bir arkadaş vardı; Forgotten Saga çıkış tarihini sürekli tutturamayınca bana durmadan dert yanardı, o çocuk aklıma geldi. hahaha

 
namyunwoo 24 일 전

Yaklaşık 2 yıl kadar? Gecikmişti haha

 
benjamin 26 일 전

Nostalji taşıyor. Harika projeyi destekliyorum!

 
namyunwoo 24 일 전

Teşekkürler, romantizmi bulmak pek kolay değilmiş :)

 
chcv0313 28 일 전

İsim girilmezse otomatik olarak Hiro ve Amy olarak atanıyordu ama burada o olmuyor.
Baştan sona bug dolu bir oyundu; porta aktarırken bug'ları da aslına sadık kalarak mı taşıdığınızı merak ediyorum.

 
namyunwoo 27 일 전

Hatta muhtemelen daha da fazla bug olacaktır.. Yavaş yavaş iyileştirmeye çalışacağım.

 
shakespeares 29 일 전

Harika.. vay be

 
namyunwoo 24 일 전

Teşekkürler💪🏻

 
zz5414 29 일 전

Ben de bu aralar ilkokul zamanlarımda keyifle oynadığım klasik bir oyunu web’e port etmek istiyordum, tam da böyle bir yazı çıkmış. Bu motivasyonun ya da yapılan analizlerin anlatıldığı yazıların nereden alınıp GeekNews’te göründüğünü merak ediyorum.

 
namyunwoo 24 일 전

Haha, çünkü onu ben yükledim.

 
namyunwoo 24 일 전

❤️Teşekkürler

 
gafani 29 일 전

İsmi yanlış girdim; bunu nasıl silebilirim? Esc sanal düğmesi çalışmıyor, klavyedeki Backspace de çalışmıyor. Heyecanlandım doğrusu.

 
namyunwoo 27 일 전

Teşekkür ederim üzgünüm
Backspace’in çalışmama hatasını çözdüm ama tam ekranda esc tuşuna basınca tam ekranın kapanması sorunu üzerinde hâlâ çalışıyorum..

 
sam1287 29 일 전

Harikasınız!

 
namyunwoo 24 일 전

Haha, küçük bir hayranlık sadece..

 
teipub 29 일 전

Gerçekten harikasınız!

 
namyunwoo 24 일 전

Çok abartıyorsunuz haha 😂

 
ifmkl 29 일 전

Vay canına, gerçekten inanılmaz.

 
namyunwoo 24 일 전

Teşekkürler~~👍🏻👍🏻

 
kaydash 29 일 전

Vay be, gerçekten aşırı iyiymiş

 
namyunwoo 24 일 전

Teşekkür ederim, adım adım tamamlanmışlık düzeyini yükselteceğim.

 
mssmss 29 일 전

Teşekkür ederim. Teşekkür ederim. Destekliyorum.

 
namyunwoo 24 일 전

Destek verdiğiniz için teşekkürler!