4 poin oleh namyunwoo 2 jam lalu | Belum ada komentar. | Bagikan ke WhatsApp

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

  • Sekitar 1–3 bulan

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.

Belum ada komentar.