Mem-porting source Forgotten Saga (RPG DOS Korea 1997)
Motivasi
- 30 tahun lalu, game paket pertama yang saya beli saat masih SD adalah Forgotten Saga
- RPG pertama dalam hidup saya, dan saya pun secara alami tenggelam sangat dalam
- Setelah lebih dari 20 tahun nyaris melupakannya, saya mengetahui bahwa sampai sekarang masih banyak orang yang memainkannya
- "Bisakah ini dijadikan game multiplatform?"
- Yang tersisa hanya executable PE32 dari 1997 + file data (tentu saja source code-nya tidak ada)
Pendekatan
- Secara garis besar ada dua cara untuk mereproduksi game aslinya
- Reinterpretasi berbasis spesifikasi — melihat gameplay lalu membuat ulang yang mirip
- Restorasi setia per fungsi dari aslinya — mem-porting kode hasil dekompilasi apa adanya
- Saya memilih yang kedua, agar mengikuti perilaku asli yang terverifikasi, bukan tebakan
- Aslinya dibuat dengan Windows MSVC 1997
Hal yang dianalisis
Dekompilasi binary asli
- Memproses PE32 dengan Ghidra 12. Berhasil mendekompilasi 937 fungsi dengan tingkat keberhasilan 100%
- 51.799 baris pseudocode C
Membongkar format data (48 jenis, semuanya terverifikasi)
- LZSS — standar + varian FAM (
ring init 0x00, tata letak bit ref_offset berbeda)
- SPB — 256 warna + RLE, 1.155 gambar
- MOB — animasi karakter/NPC 2.699 frame. header
0xA4 + piksel RLE + frame stride 20B
- SCP — VM bytecode, 128+ opcode, 6.026 entry, 43.036 dialog
- FAM — 292 map, 5 layer (base / overlay / collision / ...)
- DAT — CHAR / ITEM 290 jenis / MAGIC / ABILITY / MONSTER
- SAV — struct actor
0x2A4 (676B), party + inventory + variabel global
Verifikasi langsung input pengguna
- Mem-parse file save secara langsung untuk memverifikasi offset struct actor
- Mengoreksi pemetaan lama yang keliru (
0x3C ATK→STR, 0x40 INT→TLT, dll.)
Hal yang dibuat
- 263 file Lua, 157.277 baris
- 3.760 aset
- Build desktop LÖVE 2D 11.5 + build web love.js (emscripten)
- Implementasi langsung virtual joystick mobile + IME bahasa Korea
- Mengaktifkan SharedArrayBuffer (COOP/COEP via coi-serviceworker)
- Persistensi save
sav dengan IndexedDB (lingkungan browser)
- 5 kanal distribusi — Web / iOS / Android / Windows / macOS
Cakupan reproduksi
- Judul / pembuatan karakter / field / dialog / toko / inventory / equipment / trap / DETECT·UNLOCK / save — selesai
- Sistem pertarungan — sedang berjalan
Pemanfaatan alat AI
- Berfokus pada fitur
/goal milik GPT 5.5, dengan Claude Code sebagai pendamping + debug real-time
Peran GPT 5.5 /goal — analisis dekompilasi / akumulasi koreksi
- Otomatisasi analisis cluster fungsi asli / call graph / referensi opcode
- Deep dive format data (format sav, offset actor, struktur FAM, dll.)
- Akumulasi koreksi mislabel pada hasil decode otomatis awal (versi koreksi 51.799 baris)
Peran Claude Code — porting Lua + siklus verifikasi instan
- Baca fungsi asli → port ke Lua → jalankan test
verify.sh (100+ mode test, 1.000+ assertion)
- Debug lingkungan browser (IDBFS / IME / SharedArrayBuffer, dll.)
- Saat menerima laporan pengguna: debug → fix → deploy dev → verifikasi → deploy live
Durasi pengerjaan
Seperti apa hasilnya
- Play (browser): https://forgottensaga-classic.blogspot.com/2026/05/…
- Berjalan di PC maupun mobile. Di mobile, virtual joystick + IME bahasa Korea diimplementasikan sendiri
- Reproduksi gameplay asli yang setia — Z-sorting, palette cycle, state machine NPC, SCP VM, dan perilaku asli lainnya 1:1
Belum ada komentar.