50 คะแนน โดย namyunwoo 2026-05-17 | 24 ความคิดเห็น | แชร์ทาง WhatsApp

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

แรงจูงใจ

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

แนวทางการเข้าถึง

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

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

decompile ไบนารีต้นฉบับ

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

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

  • LZSS — มาตรฐาน + ดัดแปลงแบบ FAM (0x00 สำหรับ ring init, การจัดวางบิตของ 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

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

  • พาร์สไฟล์เซฟโดยตรงเพื่อตรวจสอบ actor struct offset
  • แก้การแมปที่ผิดก่อนหน้า (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)
  • ทำ sav persistence ด้วย IndexedDB (บนเบราว์เซอร์)
  • ช่องทางแจกจ่าย 5 แบบ — Web / iOS / Android / Windows / macOS

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

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

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

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

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

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

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

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

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

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

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

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

24 ความคิดเห็น

 
chinnotching 26 일 전

ผมนึกถึงเพื่อนคนหนึ่งตอนที่ผมเรียนมัธยมต้น ซึ่งสมัยนั้นมีการ "สั่งซื้อล่วงหน้า" ที่ยังไม่ค่อยพบเห็นกันนัก แต่ Forgotten Saga ก็เลื่อนวันวางจำหน่ายอยู่เรื่อย ๆ เลยเอาแต่บ่นระบายกับผมตลอดเลยครับ ฮ่าๆ

 
namyunwoo 26 일 전

ค้างมาประมาณ 2 ปีได้มั้ง? 555

 
benjamin 28 일 전

กลิ่นอายความโรแมนติกพุ่งทะลักเลยนะครับ ขอเป็นกำลังใจให้กับโปรเจกต์เจ๋ง ๆ นี้!

 
namyunwoo 26 일 전

ขอบคุณครับ หาความโรแมนติกแบบนี้ได้ยากจริงๆ

 
chcv0313 29 일 전

ถ้าไม่ใส่ชื่อ ระบบจะตั้งเป็น Hiro กับ Amy โดยอัตโนมัติ แต่ดูเหมือนอันนั้นจะใช้ไม่ได้แล้วนะครับ
เดิมก็เป็นเกมที่บั๊กเยอะมากอยู่แล้ว เลยสงสัยว่าตอนพอร์ตได้พอร์ตบั๊กมาครบถ้วนด้วยหรือเปล่า

 
namyunwoo 29 일 전

ที่จริงแล้วน่าจะมีบั๊กมากกว่าเดิมเสียอีก.. จะค่อย ๆ ปรับปรุงไปทีละนิดครับ

 
shakespeares 2026-05-18

ยอดเยี่ยมมาก.. ว้าว

 
namyunwoo 26 일 전

ขอบคุณครับ💪🏻

 
zz5414 2026-05-18

ผมเองช่วงนี้ก็อยากพอร์ตเกมคลาสสิกที่เคยเล่นสนุกมากตอนสมัยประถมลงเว็บเหมือนกัน พอมีโพสต์แบบนี้ขึ้นมาก็เลยสนใจนะครับ แล้วก็สงสัยว่าบทความเกี่ยวกับแรงจูงใจหรือเนื้อหาการวิเคราะห์นั้นเอามาจากที่ไหนถึงได้ขึ้นบน GeekNews

 
namyunwoo 26 일 전

ฮ่าๆ ก็ผมเป็นคนโพสต์เองนี่ครับ

 
xguru 2026-05-18

https://github.com/NAMYUNWOO/forgottensaga_classic

Repo อยู่ที่นี่

 
namyunwoo 26 일 전

❤️ขอบคุณครับ

 
gafani 2026-05-18

ใส่ชื่อผิดไป ลบยังไงได้บ้างครับ? ปุ่ม Esc แบบเสมือนก็กดไม่ได้ แล้วปุ่ม Backspace บนคีย์บอร์ดก็กดไม่ติดด้วย ตื่นเต้นใจสั่นเลยครับ

 
namyunwoo 29 일 전

ขอบคุณครับ T_T
ผมแก้บั๊กที่ปุ่ม Backspace ใช้งานไม่ได้แล้ว แต่ปัญหาที่กด esc ในโหมดเต็มจอแล้วออกจากโหมดเต็มจอยังอยู่ระหว่างแก้ไขอยู่..

 
sam1287 2026-05-18

ยอดเยี่ยมมากครับ!

 
namyunwoo 26 일 전

ฮ่าๆ ก็เป็นความเป็นแฟนเล็กๆ น้อยๆ ครับ..

 
teipub 2026-05-18

ยอดเยี่ยมมากครับ!

 
namyunwoo 26 일 전

ชมเกินไปแล้วครับ 555 😂

 
ifmkl 2026-05-18

ว้าว สุดยอดจริง ๆ ครับ

 
namyunwoo 26 일 전

ขอบคุณนะ~~👍🏻👍🏻

 
kaydash 2026-05-18

โห เจ๋งชะมัดเลย

 
namyunwoo 26 일 전

ขอบคุณครับ ผมจะค่อย ๆ ปรับปรุงความสมบูรณ์ให้ดีขึ้นทีละขั้น

 
mssmss 2026-05-17

ขอบคุณครับ ขอบคุณครับ เป็นกำลังใจให้ครับ

 
namyunwoo 26 일 전

ขอบคุณที่ให้กำลังใจกัน!