ทำไมถึงยังไม่เคยมีมาก่อน?
- ซีรีส์เกมผจญภัยแบบชี้แล้วคลิก 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 ความคิดเห็น
ว้าว บรรยากาศวันวานที่สัมผัสได้จากหน้าจอเกมนี่สุดยอดจริงๆ ;;;
น่าจะเป็นเกมแนวเดียวกับ The Secret of Monkey Island ดูน่าสนุกครับ
ใช่ครับ จะเรียกว่าเป็นคู่แข่งกันก็คงเกินไปหน่อย แต่ The Legend of Kyrandia ก็ได้รับความนิยมพอสมควรเหมือนกัน เพราะการแปลเป็นเกาหลีครับ 555