11 คะแนน โดย colus001 2026-03-26 | 3 ความคิดเห็น | แชร์ทาง WhatsApp

ทำไมถึงยังไม่เคยมีมาก่อน?

  • ซีรีส์เกมผจญภัยแบบชี้แล้วคลิก Legend of Kyrandia ที่ออกมาเมื่อ 35 ปีก่อน ในบรรดาซีรีส์นี้มีเพียงภาค 2 Hand of Fate เท่านั้นที่ไม่เคยถูกแปลเป็นภาษาเกาหลี
  • ในบรรดาเอนจินที่ถูกนำไปใช้ใน ScummVM ถ้าเป็น SCUMM ของ Lucas หรือ SCI ของ Sierra จะมีเกมที่แฟน ๆ แปลเป็นภาษาเกาหลีอยู่พอสมควร แต่เอนจิน Kyra ของ Westwood แทบไม่มีงานแปลโดยแฟน ๆ เลย
    • ฟอร์แมตไบนารีเป็นแบบเฉพาะตัว, การเรนเดอร์ฟอนต์รองรับแค่ 1 byte, และไม่มีฟอนต์ที่จำเป็นครบ
  • การทำให้เป็นภาษาเกาหลีจึงไม่ใช่แค่ดึงข้อความออกมาแล้วแปล แต่ต้องแก้โค้ดเรนเดอร์ข้อความของเอนจิน Kyra ใน ScummVM ด้วย

การแปล

  • ตัวงานแปลเองไม่ได้ยากมากนัก โดยนำสคริปต์ที่ดึงออกมาไปให้ LLM แปล
  • ใส่พรอมป์ต์ง่าย ๆ เพื่อคงโทนของเกมไว้ และตอนนี้ก็ดูเหมือนจะไม่มีปัญหาใหญ่อะไร
    • แต่รายละเอียดละเมียดอย่างมุกเล่นคำหรือการเล่นภาษายังดูแปลได้ไม่ค่อยดี

รีเวิร์สเอนจิเนียริง

  • ฟอร์แมตเกมเฉพาะของ Westwood ได้แก่ PAK (แพ็กเกจ), EMC (สคริปต์ฉาก), DLG (บทสนทนา), ENG (ข้อความ UI)
  • ทำรีเวิร์สเอนจิเนียริงฟอร์แมตแต่ละแบบและสร้างเป็นเครื่องมือ Python
    • แปลและสร้างเป็น EMC -> KMC, DLG -> DLK, ENG -> KOR แล้วบันทึกลงใน OTHER.PAK
  • แก้โค้ด ScummVM เพื่อให้กรณีเป็นงานแปลโดยแฟน ๆ โหลดไฟล์แปลจาก OTHER.PAK
  • ไม่มี external dependency ใด ๆ แค่รัน $ python tools/build_korean.py บรรทัดเดียวก็ build ทุกอย่างและสร้างเป็นไฟล์ .zip จากนั้นนำไปทับกับเกมต้นฉบับก็จบ

ฟอนต์

  • โดยพื้นฐานแล้วไม่มีฟอนต์เกาหลี จึงต้องไปหาเพิ่ม
    • มีฟอนต์เกาหลีจากเกมคลาสสิกที่วางจำหน่ายอย่างเป็นทางการในเกาหลีชื่อ "The Dig" ที่เคยเก็บไว้
    • โครงสร้างฟอนต์ต่างกันเล็กน้อย จึงตัด header ออก
  • เพิ่มตัวเรนเดอร์ฟอนต์เกาหลีลงใน ScummVM
    • โชคดีที่ระบบฟอนต์สำหรับงานแปลภาษาจีนโดยแฟน ๆ มีทั้งการโหลดบิตแมป, การเรนเดอร์ 1bpp, การทำเส้นขอบ และการรวม 1 ไบต์ + 2 ไบต์ (MultiSubsetFont) อยู่แล้ว
    • และเพราะใน Kyrandia 1 มีระบบฟอนต์เกาหลีแบบ compositional อยู่ จึงมีลอจิกสำหรับอ่าน 2 ไบต์อยู่แล้ว
    • จึงแค่เพิ่มลอจิกแปลงคู่ไบต์ของ EUC-KR ไปเป็นดัชนี glyph
    • เดิมทีตั้งใจจะหาทางใช้ฟอนต์ภาษาญี่ปุ่นจากเวอร์ชัน FM-Towns แต่สุดท้ายก็แก้ได้ง่ายกว่าที่คิด

สงครามกับบั๊ก

  • บั๊ก "กากากากา"
    • ฟังก์ชัน preprocessString() ที่ใช้จัดบรรทัดของบทพูดยาวให้พอดีกับความกว้างหน้าจอ ถูกเขียนมาโดยอิงฟอนต์ 1 byte
      • ทำให้มี \r แทรกกลางอักขระ 2 ไบต์ แล้วข้อความหลังจากนั้นพังทั้งหมดจนแสดงเป็น "กากากากา"
    • ตอนโหลดสคริปต์ฉาก มีข้อผิดพลาดในส่วนที่อ้างอิง _scriptLangExt จึงไปโหลดภาษาญี่ปุ่นแทน
      • และเพราะไม่มีฟอนต์ที่ตรงกัน จึงแสดงเป็น "กากากากา" เช่นกัน
    • ทั้งสองกรณีเกิดจาก getFontOffset คืนค่า 0 เมื่อหาอักขระไม่เจอ และกว่าจะทำให้มันทำงานได้ถูกต้องก็ลำบากพอสมควร
  • Game data not found
    • ตั้งแต่การรันครั้งที่สองเป็นต้นไป เกมแครชอย่างแปลก ๆ
    • ปัญหาเกิดจาก ScummVM บันทึกภาษาเป็นเกาหลีตอนปิดเกม ทำให้ตรวจจับเกมไม่ได้
    • จึงแก้ชั่วคราวโดยให้ detection ใช้ภาษาอังกฤษ แต่ถ้ามี KOREAN.FNT ก็ให้เก็บค่านี้ไว้ใน fanLang เพื่อประมวลผล ซึ่งเป็นวิธีที่ถูกต้องกว่า
  • บั๊ก Chunk overread
    • ตอน ScummVM IFFParser พาร์สสคริปต์ฉาก KMC ที่แปลเป็นเกาหลีแล้ว จะเกิดข้อผิดพลาด Chunk overread
    • ตอนแพ็ก KMC ตามมาตรฐาน IFF ได้บันทึก form_size = file_size - 8 แต่ของ Westwood กลับใช้ form_size = file_size
      • ทำให้ offset ไม่ตรงและเกิดข้อผิดพลาด

การมีส่วนร่วมกับ ScummVM

  • ScummVM รองรับงานแปลโดยแฟน ๆ อย่างเป็นทางการในรูปแบบ FLAGS_FAN(KO_KOR, EN_ANY)
    • ค่าตัวหน้าเป็นภาษาของงานแปลโดยแฟน ๆ และค่าด้านหลังคือภาษาต้นฉบับ
  • หลังเริ่มเอนจินแล้ว จะสลับใน kyra_hof.cpp เพื่อรองรับโหมดภาษาเกาหลีจริง และโหลดไฟล์แปล
  • ระบบนามสกุลไฟล์แตกต่างกันไปตามภาษา เช่น ไฟล์ DLG บน DOS ใช้ DLE สำหรับภาษาอังกฤษ และ DLG สำหรับภาษาเยอรมัน
    • ตอนทำงานบน FM Towns แล้วขยายมาทำบน DOS จู่ ๆ ภาษาเยอรมันก็โผล่มา
  • ถ้าไม่มี KMC ก็ให้ใช้ EMC แทน เพื่อให้ยังเล่นได้แม้แปลยังไม่ครบทั้งหมด
  • ส่ง PR ไปแล้ว และก็ไม่ได้ถูกทักท้วงอย่างที่กังวล มีแค่จัดระเบียบคอมมิต

ความเป็นไปได้ของ AI

  • ในความเป็นจริง งานส่วนใหญ่นี้เป็นฝีมือของ OpenCode และ Opus / Sonnet
  • สิ่งที่ผู้เขียนทำคือคอยผลักดัน ทดสอบ ดีบัก และให้กำลังใจเหมือนผู้จัดการโครงการ (ใส่พรอมป์ต์)
  • วัตถุดิบทุกอย่างมีพร้อมอยู่แล้ว และแม้จะอาจทำเองได้ แต่ก็คงไม่รู้จะเริ่มจากตรงไหน
  • แทบไม่ได้เขียนโค้ด Python และ C++ เองเลยแม้แต่บรรทัดเดียว จนรู้สึกว่านี่คือวิศวกรรมร่วมกับ AI หรือเปล่า
  • ด้วยเหตุนี้จึงทำให้มุมมองต่อ AI coding เป็นบวกมากขึ้น

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

 
roxie 29 일 전

ว้าว บรรยากาศวันวานที่สัมผัสได้จากหน้าจอเกมนี่สุดยอดจริงๆ ;;;

 
computerphilosopher 2026-03-26

น่าจะเป็นเกมแนวเดียวกับ The Secret of Monkey Island ดูน่าสนุกครับ

 
colus001 2026-03-26

ใช่ครับ จะเรียกว่าเป็นคู่แข่งกันก็คงเกินไปหน่อย แต่ The Legend of Kyrandia ก็ได้รับความนิยมพอสมควรเหมือนกัน เพราะการแปลเป็นเกาหลีครับ 555