- โปรเจกต์ที่เปลี่ยนบทสนทนาแบบซ้ำ ๆ ของเกมคลาสสิก Animal Crossing (GameCube, 2001) ให้เป็น บทสนทนา LLM บนคลาวด์แบบเรียลไทม์
- เชื่อมเกมกับสคริปต์ Python ภายนอกและ AI ผ่าน การแฮ็กหน่วยความจำและวิธี shared memory (mailbox) โดยไม่แก้โค้ดเกม
- ข้อความในเกมไม่ได้ถูกจัดการเป็นสตริงธรรมดา แต่เป็น ภาษาควบคุมพิเศษ จึงแก้ปัญหาด้วยการสร้างตัวเข้ารหัสและถอดรหัสแยกต่างหาก
- การสร้างบทสนทนาถูกแยกเป็น Writer (เขียนบทพูดเชิงสร้างสรรค์) และ Director (เพิ่ม control code และการแสดงออก) เพื่อคงคุณภาพ
- ผลลัพธ์คือชาวบ้านในหมู่บ้านสามารถพูดคุยแบบ AI ที่คาดเดาไม่ได้ ซึ่งสะท้อนทั้งข่าวลือ ข่าวสาร และเสียดสี ทำให้เกมคลาสสิกมีชีวิตชีวาขึ้นอีกครั้ง
- โค้ดโปรเจกต์เปิดเผยบน GitHub
นิยามปัญหา
- Animal Crossing มีเสน่ห์แต่ก็ขึ้นชื่อเรื่องบทสนทนาที่ซ้ำไปซ้ำมา และแม้จะผ่านไป 23 ปี บทพูดก็ไม่เปลี่ยน จึงเกิดแนวคิดว่าจะเปลี่ยนมันอย่างพลิกโฉมได้อย่างไร
- ปัญหาคือ GameCube เป็นสภาพแวดล้อมแบบปิดที่มี CPU 485MHz, RAM 24MB และไม่รองรับเครือข่าย
- ต้องคงเกมต้นฉบับไว้เหมือนเดิมโดยไม่แก้ไขโค้ด
- เป้าหมายคือสร้างบริดจ์เพื่อแทนที่บทสนทนาที่ซ้ำซากด้วย LLM สมัยใหม่
ขั้นแรก: แฮ็กระบบบทสนทนา
- ด้วย การดีคอมไพล์ Animal Crossing ของชุมชน จึงสามารถเข้าถึงโค้ด C ได้
- ประสบความสำเร็จในการ แทนที่ข้อความบทสนทนา โดย hook การเรียกฟังก์ชันในไฟล์
m_message.c
- แต่ยังเหลือโจทย์ว่าจะรับส่งข้อมูลกับ AI ภายนอกแบบเรียลไทม์ได้อย่างไร
วิธี mailbox บนหน่วยความจำ
- ใช้พื้นที่บางส่วนของ RAM บน GameCube เป็น IPC mailbox
- สคริปต์ Python ทำ การเขียน/อ่านโดยตรงที่แอดเดรสหน่วยความจำ → ใช้สื่อสารระหว่างเกมกับ AI
- เขียนตัวสแกนหน่วยความจำเพื่อหาแอดเดรสของ ชื่อผู้พูด (0x8129A3EA), บัฟเฟอร์บทสนทนา (0x81298360)
ภาษาของ control code
- หากส่งสตริงธรรมดาเข้าไป เกมจะ ค้าง
- สาเหตุคือ Animal Crossing ใช้ ภาษาที่อิงกับ control code เช่น
<End Conversation>, <Pause>, <Color Line>
- จึงเขียน encoder/decoder ด้วย Python เพื่อแปลงระหว่างข้อความที่มนุษย์อ่านเข้าใจกับลำดับไบต์ที่เกมเข้าใจ
การพิจารณาทางเลือกด้านเครือข่าย
- แม้จะมี Broadband Adapter สำหรับ GameCube แต่ Animal Crossing ไม่มี network stack
- หากจะใช้ BBA ต้องเพิ่มทั้ง network stack และ asynchronous I/O จึงไม่คุ้มค่า
- จึงตัดสินว่า การแฮ็กหน่วยความจำผ่านอีมูเลเตอร์ เรียบง่ายและเสถียรกว่า
ไปป์ไลน์ AI
- ตอนแรกให้ LLM ตัวเดียว รับผิดชอบทั้งงานสร้างสรรค์และ control code แต่มีปัญหาด้านคุณภาพมาก จึงเลือกกลยุทธ์ แยก Writer-Director
- Writer: สร้างบทพูดเชิงสร้างสรรค์ตามบุคลิกของตัวละคร (ใช้ข้อมูลจากแฟนวิกิ)
- Director: อ่านบทพูดแล้วแทรก control code, สีหน้า, สี, เสียง ที่เหมาะสม
- ไปป์ไลน์ LLM สองขั้นตอน นี้แยกความคิดสร้างสรรค์ของ AI ออกจากข้อกำหนดทางเทคนิค เพื่อใช้จุดแข็งของแต่ละส่วน
- การแยกบทบาทนี้ช่วยให้ได้คุณภาพที่เสถียร
ผลลัพธ์และการต่อยอด
ความสำคัญ
- เป็นโปรเจกต์ทดลองที่ผสาน การแฮ็กคอนโซลเรโทร, การรวม AI และการอนุรักษ์เกม เข้าด้วยกัน
- เชื่อมเกมจากปี 2001 เข้ากับ AI ปี 2025 เพื่อสร้าง ปฏิสัมพันธ์ข้ามยุคสมัย
- เกมไม่ใช่แค่บทสนทนาซ้ำ ๆ อีกต่อไป แต่พัฒนาเป็น โลกเสมือนที่มีชีวิต
- กระบวนการพัฒนาทั้งหมด/วิดีโอเดโม: Modern AI in a 24-Year-Old Game
ยังไม่มีความคิดเห็น