2 điểm bởi namyunwoo 1 giờ trước | Chưa có bình luận nào. | Chia sẻ qua WhatsApp

Port mã nguồn Forgotten Saga (RPG DOS Hàn Quốc năm 1997)

Động lực

  • 30 năm trước, hồi học tiểu học, gói game đầu tiên tôi mua là Forgotten Saga
  • RPG đầu đời, nên tự nhiên bị cuốn rất sâu
  • Sống quên nó hơn 20 năm rồi mới biết đến giờ vẫn còn rất nhiều người chơi
  • "Liệu có thể biến nó thành game đa nền tảng không?"
  • Thứ còn lại chỉ là file thực thi PE32 năm 1997 + các file dữ liệu (đương nhiên không có mã nguồn)

Cách tiếp cận

  • Có hai hướng lớn để tái hiện game gốc
    • Diễn giải lại dựa trên đặc tả — xem gameplay rồi làm lại cho giống
    • Khôi phục trung thực theo từng hàm của bản gốc — port nguyên mã đã decompile
  • Tôi chọn cách thứ hai, để bám theo hành vi gốc đã được kiểm chứng thay vì suy đoán
  • Bản gốc là Windows MSVC năm 1997

Nội dung đã phân tích

Decompile binary gốc

  • Dùng Ghidra 12 để xử lý PE32. Decompile thành công 100% của 937 hàm
  • 51.799 dòng pseudocode C

Phân tích ngược định dạng dữ liệu (48 loại, đã kiểm chứng toàn bộ)

  • LZSS — chuẩn + biến thể FAM (ring init 0x00, bố trí bit ref_offset khác)
  • SPB — 256 màu + RLE, 1.155 ảnh
  • MOB — animation nhân vật/NPC, 2.699 frame. Header 0xA4 + pixel RLE + frame stride 20B
  • SCP — VM bytecode, hơn 128 opcode, 6.026 entry, 43.036 câu thoại
  • FAM — 292 map, 5 layer (base / overlay / collision / ...)
  • DAT — CHAR / ITEM 290 loại / MAGIC / ABILITY / MONSTER
  • SAV — struct actor 0x2A4 (676B), party + inventory + biến toàn cục

Tự kiểm chứng trực tiếp từ dữ liệu người dùng

  • Tự parse file save để kiểm chứng offset của struct actor
  • Sửa các mapping sai trước đó (0x3C ATK→STR, 0x40 INT→TLT, v.v.)

Những gì đã tạo ra

  • 263 file Lua, 157.277 dòng
  • 3.760 asset
  • Bản build desktop LÖVE 2D 11.5 + bản web love.js (emscripten)
  • Tự triển khai joystick ảo trên di động + IME tiếng Hàn
  • Kích hoạt SharedArrayBuffer (COOP/COEP qua coi-serviceworker)
  • Lưu save bền vững bằng IndexedDB sav (môi trường trình duyệt)
  • 5 kênh phát hành — Web / iOS / Android / Windows / macOS

Phạm vi tái hiện

  • Tiêu đề / tạo nhân vật / field / hội thoại / cửa hàng / inventory / trang bị / bẫy / DETECT·UNLOCK / save — hoàn tất
  • Hệ thống chiến đấu — đang thực hiện

Ứng dụng công cụ AI

  • Chủ yếu dùng tính năng /goal của GPT 5.5, Claude Code hỗ trợ phụ + debug thời gian thực

Vai trò của GPT 5.5 /goal — phân tích decompile / tích lũy chỉnh sửa

  • Tự động phân tích cluster hàm gốc / call graph / opcode reference
  • Deep dive vào định dạng dữ liệu (định dạng sav, offset actor, cấu trúc FAM, v.v.)
  • Tích lũy sửa các nhãn sai trong bản decode tự động ban đầu (bản đã chỉnh sửa của 51.799 dòng)

Vai trò của Claude Code — port sang Lua + chu kỳ kiểm chứng ngay lập tức

  • Đọc hàm gốc → port sang Lua → chạy test verify.sh (hơn 100 chế độ test, hơn 1.000 assertion)
  • Debug trong môi trường trình duyệt (IDBFS / IME / SharedArrayBuffer, v.v.)
  • Khi có báo cáo từ người dùng thì debug → fix → phát hành dev → kiểm chứng → phát hành live

Thời gian thực hiện

  • Khoảng 1~3 tháng

Đây là sản phẩm gì

  • Play (trình duyệt): https://forgottensaga-classic.blogspot.com/2026/05/…
  • Chạy được trên cả PC và di động. Bản di động tự triển khai joystick ảo + IME tiếng Hàn
  • Tái hiện trung thực gameplay gốc — hành vi nguyên bản 1:1 như Z sorting, palette cycle, state machine của NPC, SCP VM, v.v.

Chưa có bình luận nào.

Chưa có bình luận nào.