4 คะแนน โดย namyunwoo 2 시간 전 | ยังไม่มีความคิดเห็น | แชร์ทาง WhatsApp

พอร์ตซอร์สของ Forgotten Saga (เกม RPG DOS เกาหลีปี 1997)

แรงจูงใจ

  • เมื่อ 30 ปีก่อน เกมแพ็กเกจเกมแรกที่ซื้อเองตอนประถมคือ Forgotten Saga
  • เป็น RPG เกมแรกในชีวิต เลยอินลึกไปโดยธรรมชาติ
  • ใช้ชีวิตลืมมันไปนานกว่า 20 ปี ก่อนจะมารู้ว่าจนถึงตอนนี้ก็ยังมีคนเล่นกันเยอะ
  • "จะทำให้เกมนี้เป็นเกมหลายแพลตฟอร์มได้ไหม?"
  • สิ่งที่เหลืออยู่มีแค่ไฟล์รัน PE32 ของปี 1997 กับไฟล์ข้อมูลเท่านั้น (แน่นอนว่าไม่มีซอร์สโค้ด)

แนวทาง

  • วิธีสร้างเกมต้นฉบับกลับมานั้นใหญ่ ๆ มีสองแบบ
    • ตีความใหม่ตามสเปก — ดูเกมเพลย์แล้วสร้างขึ้นมาใหม่ให้คล้าย
    • ฟื้นคืนต้นฉบับอย่างซื่อสัตย์ในระดับฟังก์ชัน — พอร์ตโค้ดที่ decompile ออกมาโดยตรง
  • เลือกแบบหลัง เพื่อยึดตามพฤติกรรมต้นฉบับที่ตรวจสอบได้จริง ไม่ใช่การคาดเดา
  • ต้นฉบับคือ Windows MSVC ปี 1997

สิ่งที่วิเคราะห์

decompile binary ต้นฉบับ

  • ใช้ Ghidra 12 จัดการ PE32 decompile สำเร็จ 100% ทั้ง 937 ฟังก์ชัน
  • pseudocode C จำนวน 51,799 บรรทัด

แกะฟอร์แมตข้อมูล (48 ชนิด ตรวจสอบครบทั้งหมด)

  • LZSS — มาตรฐาน + ตัวแปรแบบ FAM (ring init 0x00, การจัดวางบิตของ ref_offset ต่างออกไป)
  • SPB — 256 สี + RLE, ภาพ 1,155 ภาพ
  • MOB — แอนิเมชันตัวละคร/NPC 2,699 เฟรม 0xA4 header + RLE pixel + frame stride 20B
  • SCP — bytecode VM, 128+ opcode, 6,026 entry, บทสนทนา 43,036 รายการ
  • FAM — แผนที่ 292 แผนที่, 5 layer (base / overlay / collision / ...)
  • DAT — CHAR / ITEM 290 ชนิด / MAGIC / ABILITY / MONSTER
  • SAV — actor struct 0x2A4 (676B), party + inventory + global vars

ตรวจสอบอินพุตผู้ใช้โดยตรง

  • parse ไฟล์เซฟโดยตรงเพื่อตรวจสอบ offset ของ actor struct
  • แก้การแมปที่เคยผิดก่อนหน้า (0x3C ATK→STR, 0x40 INT→TLT เป็นต้น)

สิ่งที่สร้างขึ้น

  • Lua 263 ไฟล์, 157,277 บรรทัด
  • แอสเซ็ต 3,760 รายการ
  • เดสก์ท็อปบิลด์ด้วย LÖVE 2D 11.5 + เว็บบิลด์ด้วย love.js (emscripten)
  • ทำ virtual joystick บนมือถือ + Korean IME ขึ้นมาเอง
  • เปิดใช้งาน SharedArrayBuffer (COOP/COEP ผ่าน coi-serviceworker)
  • ทำ persistence ของ sav ด้วย IndexedDB (สภาพแวดล้อมเบราว์เซอร์)
  • ช่องทางแจกจ่าย 5 แบบ — Web / iOS / Android / Windows / macOS

ขอบเขตการถอดแบบ

  • ไตเติล / สร้างตัวละคร / ฟิลด์ / บทสนทนา / ร้านค้า / inventory / อุปกรณ์ / กับดัก / DETECT·UNLOCK / เซฟ — เสร็จแล้ว
  • ระบบต่อสู้ — กำลังดำเนินการ

การใช้เครื่องมือ AI

  • ใช้ ฟีเจอร์ /goal ของ GPT 5.5 เป็นหลัก ส่วน Claude Code เป็นตัวช่วย + debug แบบเรียลไทม์

บทบาทของ GPT 5.5 /goal — วิเคราะห์ decompile / สะสมการแก้ไข

  • วิเคราะห์อัตโนมัติของ cluster ฟังก์ชันต้นฉบับ / call graph / opcode reference
  • deep dive ฟอร์แมตข้อมูล (เช่น sav format, actor offset, โครงสร้าง FAM)
  • สะสมการแก้ mislabel ของผล decode อัตโนมัติช่วงแรก (ฉบับแก้แล้ว 51,799 บรรทัด)

บทบาทของ Claude Code — พอร์ตเป็น Lua + วงจรตรวจสอบทันที

  • อ่านฟังก์ชันต้นฉบับ → พอร์ตเป็น Lua → รันเทสต์ verify.sh (100+ test mode, 1,000+ assertion)
  • debug สภาพแวดล้อมเบราว์เซอร์ (IDBFS / IME / SharedArrayBuffer เป็นต้น)
  • เมื่อได้รับรายงานจากผู้ใช้ จะวนรอบ debug → fix → deploy dev → verify → deploy live

ระยะเวลาทำงาน

  • ประมาณ 1~3 เดือน

เป็นผลงานแบบไหน

  • Play (browser): https://forgottensaga-classic.blogspot.com/2026/05/…
  • ใช้งานได้ทั้ง PC และมือถือ โดยมือถือมี virtual joystick + Korean IME ที่ทำขึ้นเอง
  • ถอดแบบเกมเพลย์ต้นฉบับอย่างซื่อสัตย์ — ทั้ง Z sorting, palette cycle, state machine ของ NPC, SCP VM และพฤติกรรมต้นฉบับแบบ 1:1

ยังไม่มีความคิดเห็น

ยังไม่มีความคิดเห็น