Maurice Heumann ใช้ AI agents จาก Claude และ Codex ทำโปรเจกต์นี้นานสามเดือน โดยป้อนงานรวมกว่า 500 พันล้านโทเค็น เพื่อสร้างโค้ด C++ ของ Call of Duty: Modern Warfare 2 (2009) ขึ้นใหม่
ตอนนี้ฟังก์ชันในเกมมีอยู่ประมาณ 99% แล้ว และ 83% ตรงกับไฟล์ต้นฉบับแบบ byte-for-byte จุดยากจึงไม่ใช่แค่ให้ AI เขียนโค้ดได้ แต่ต้องตรวจให้แน่ใจว่าโค้ดทำงานถูกต้องจริงด้วย
โปรเจกต์นี้ทำอะไรสำเร็จแล้วบ้าง
โปรเจกต์นี้สร้างโค้ด C++ จากเกม PC ต้นฉบับปี 2009 โดยตั้งเป้าให้ได้เกมเวอร์ชันที่แม่นยำ เสถียร และมีฟีเจอร์ครบถ้วน ไม่ใช่แค่โค้ดที่คอมไพล์ผ่าน แต่ต้องตรวจสอบได้ว่าทำงานตรงกับต้นฉบับจริง
หลังทำงานต่อเนื่องสามเดือนและใช้โทเค็นมากกว่า 500 พันล้าน เกมก็เล่นได้เต็มรูปแบบแล้ว บั๊กที่มองเห็นส่วนใหญ่หายไป เหลือเพียงเล็กน้อย เรียกได้ว่า AI agents ทำงานระดับสร้างเกมกลับมาให้เล่นได้จริง ไม่ใช่แค่ช่วยเขียนโค้ดบางส่วน.
เบื้องหลังการทำงานของ agents ระหว่างสร้างเกมใหม่
เกมต้นฉบับบน PC ปี 2009 ถูกป้อนเข้าสู่ IDA ผ่าน Hex-Rays’ ida-mcp server ให้ agents อ่านโค้ดเดิมได้ ก่อนแปลงออกมาเป็นโค้ด C++ ที่เขียนขึ้นใหม่
ทีม agents ที่ขยายจนทำงานพร้อมกัน 17 ตัว ประสานงานกันผ่าน GitHub issues, Discord และ CI โดยมี automated check เปรียบเทียบฟังก์ชันกับ executable ในระดับ byte เพื่อยืนยันว่าโค้ดไม่ได้แค่คอมไพล์ผ่าน แต่ตรงกับต้นฉบับจริง
ปัญหาจริงไม่ได้อยู่ที่การเขียนโค้ด
Heumann พบว่า AI agents เขียนโค้ดได้เร็ว แต่ปัญหาหนักกว่าคือการพิสูจน์ว่าโค้ดนั้นถูกต้องจริง โค้ดเดือนแรก “อ่านง่ายแต่ผิดความหมาย” เพราะมีทั้ง function signature, type และ struct layout ที่ผิด รวมถึง logic ที่ถูกแต่งขึ้นหรือถูกตัดออก
ตอนนั้น reviewer agent ก็หยุดปัญหาไม่ได้ เพราะยังไม่มีเกณฑ์ตรวจรับที่ชัดเจน แถมคอมเมนต์ที่ agents เขียนอธิบายการแก้โค้ด ยังกลายเป็นเหมือน prompt injection โดยไม่ตั้งใจ ทำให้ทีมต้องตัดคอมเมนต์ออกเพื่อให้การตรวจสอบแม่นขึ้น.
Claude และ Codex ถูกวางไว้ตรงไหนในเวิร์กโฟลว์
[เกม PC ต้นฉบับ] → [IDA + Hex-Rays’ ida-mcp] → [Claude / Codex agents] → [C++ ที่เขียนใหม่] → [ตรวจเทียบกับ executable]
Heumann ใช้ Anthropic’s Claude และ OpenAI’s Codex ทำงานพร้อมกัน โดยควบคุมผ่าน Claude Code CLI และ Codex CLI ส่วน IDA ทำหน้าที่เปิดทางให้ agents อ่านโค้ดเดิมผ่าน Hex-Rays’ ida-mcp พูดง่ายๆ คือ Claude กับ Codex เป็นตัวลงมือแปลและเขียนโค้ด ขณะที่ IDA เป็นแหล่งข้อมูลจากเกมต้นฉบับครับ
จากสี่ agents สู่การทำงานพร้อมกันสิบเจ็ด agents
| ช่วงการทำงาน | โครงสร้าง |
|---|---|
| เริ่มต้น | workers สามคน และ reviewer หนึ่งคน |
| 30 กันยายน | agents สิบเจ็ดตัวทำงานแบบขนาน |
ช่วงแรกแบ่งหน้าที่ชัดเจน: workers แปลโค้ด ส่วน reviewer ตรวจงาน แต่เมื่อโปรเจกต์ขยาย Heumann เพิ่ม agents จนทำงานพร้อมกันสิบเจ็ดตัว
อย่างไรก็ตาม ข้อมูลต้นฉบับไม่ได้แยกผลลัพธ์ตามจำนวน agents จึงยังสรุปไม่ได้ว่าการเพิ่ม agents ทำให้ความเร็วหรือความถูกต้องดีขึ้นเท่าไร.
เมื่อการตรวจด้วยสายตาไม่พอ
โค้ดช่วงแรกอ่านง่ายก็จริง แต่ตรวจด้วยสายตาแล้วยังพลาดได้ เช่น function signature ผิด ชนิดข้อมูลหรือโครงสร้างข้อมูลไม่ตรง รวมถึงตรรกะที่ถูกสร้างใหม่หรือตัดออกไป
บางครั้ง agents ยังเปลี่ยนสถาปัตยกรรมโดยไม่จำเป็น เช่น เปลี่ยนการค้นหาตัวแปร config ให้มีต้นทุนสูงขึ้นมาก ทำให้โค้ดดูดี แต่ทำงานไม่ตรงกับต้นฉบับ
ปัญหาคือ reviewer ไม่มีเกณฑ์รับงานที่วัดได้ จึงต้องใช้สคริปต์เปรียบเทียบฟังก์ชันกับ executable ของเกมแบบ byte-level เพื่อบอกผ่านหรือไม่ผ่านอย่างชัดเจน
ระบบตรวจแบบ byte-level เปลี่ยนเกมอย่างไร
ระบบตรวจเริ่มจากคอมไพล์โค้ดที่สร้างใหม่ด้วย compiler เดียวกับเกมต้นฉบับ แล้วส่งแต่ละฟังก์ชันเข้า script เพื่อตรวจเทียบกับ executable แบบ byte-level
โค้ด C++ → compiler เดียวกัน → เทียบฟังก์ชัน → ผ่าน/ไม่ผ่าน
ความต่างของ address ใน calls และ data references จะถูกข้ามไป แต่ระบบยังตรวจ target symbols กับ offsets แทน ส่วน data และ types ยังคงตรวจแบบเดียวกัน จึงช่วยแยกได้ชัดว่าโค้ดตรงกับต้นฉบับจริง หรือแค่ดูคล้ายกันเท่านั้น
เครื่องมือและวิธีทำงานที่ทำให้โปรเจกต์เดินต่อ
| เครื่องมือ | วิธีใช้ |
|---|---|
| GitHub issue | แยก issue ตามแต่ละ translation unit |
| Discord | ให้ agents และคนทำงานคุยกันใน channel เดียว |
| GitHub webhook CI | ส่งโพสต์ผลการทำงานเข้า Discord |
| Auto-compaction | ปรับจาก 90% เหลือ 42% ของ context window เพื่อเคลียร์ฟังก์ชันที่เสร็จแล้ว |
| Cron job | สั่งให้ agents อ่านคำสั่งซ้ำทุกชั่วโมง แก้ปัญหา context drift |
โครงสร้างนี้ช่วยให้ตามงานง่ายขึ้น แม้มี agents ทำงานพร้อมกันหลายตัว และยังลดโอกาสที่ agent จะหลุดจากเป้าหมายเดิมระหว่างโปรเจกต์เดินหน้าต่อเนื่อง.
ทางเลือกในชุดเครื่องมือเดียวกันให้ผลต่างกันแค่ไหน
| เครื่องมือ | บทบาท | ค่าใช้จ่าย | การใช้งานที่ระบุ |
|---|---|---|---|
| Claude Max | แผนบริการของ Anthropic | Flat-rate แผน 20x ไม่คิดแบบ API ราย token | ใช้ร่วมกับ Codex Pro |
| Codex Pro | แผนบริการของ OpenAI | Flat-rate ไม่คิดแบบ API ราย token | ใช้พร้อม Claude Max |
| Claude Code CLI | Harness สำหรับสั่งงาน agent | ไม่ได้ระบุราคาแยก | ใช้เป็นเครื่องมือหลักในการทำงาน |
| Codex CLI | Harness สำหรับสั่งงาน agent | ไม่ได้ระบุราคาแยก | ใช้เป็นเครื่องมือหลักร่วมกับ Claude Code |
| ida-mcp | ตัวเชื่อมกับ IDA ของ Hex-Rays | ไม่ได้ระบุราคา | ให้ agent อ่านโค้ดจากเกมต้นฉบับ |
จากข้อมูลนี้ แต่ละตัวไม่ได้ทำหน้าที่แทนกันทั้งหมด เพราะแผนบริการใช้จัดสรรโมเดล ส่วน CLI ใช้ควบคุมงาน และ ida-mcp ใช้เปิดทางให้ agent อ่านโค้ดเดิมครับ
ค่าใช้จ่ายที่ต่างกันสุดขั้วตามวิธีจ่าย
Claude Max และ Codex Pro เป็นแผนแบบเหมาจ่าย ไม่ได้คิดเงินตามจำนวนโทเค็นแบบ API การตั้งค่านี้ทำให้ Heumann ใช้งาน agent จำนวนมากได้ โดยไม่ต้องจ่ายเพิ่มตามทุกคำสั่ง
| วิธีจ่าย | ค่าใช้จ่ายโดยประมาณ |
|---|---|
| Subscription | ราว 1,200 ยูโร |
| API tokens | 200,000–250,000 ดอลลาร์ |
ตัวเลขนี้เป็นการประเมินของ Heumann เอง จึงควรมองเป็นภาพเปรียบเทียบต้นทุนมากกว่าราคาตายตัว งานเดียวกันอาจมีค่าใช้จ่ายต่างกันสุดขั้ว ขึ้นอยู่กับว่าเลือกเหมาจ่ายหรือจ่ายตามการใช้ API.
จุดแข็งและข้อจำกัดที่โปรเจกต์นี้เปิดเผย
- จุดแข็งคือ agents หลายตัวทำงานขนานกันได้เร็วขึ้น จากเริ่มต้น 4 ตัวจนเป็น 17 ตัว และทำให้เกมกลับมาเล่นได้ โดยบั๊กที่เห็นได้เกือบทั้งหมดหายไป
- ข้อจำกัดสำคัญคือโค้ดช่วงแรกอ่านง่าย แต่ผิดความหมาย ทั้ง function signature, type และโครงสร้างข้อมูล
- agents ยังเกิด drift และถูกชักนำจากคอมเมนต์ที่ทำหน้าที่เหมือน prompt injection ทีมจึงต้องลบคอมเมนต์ออก และหลังพยายามกู้โค้ด 4 สัปดาห์แรก ก็พบว่าเริ่มใหม่ใช้เวลาน้อยกว่า
- บทเรียนคือการสร้างโค้ดไม่ยากเท่าการตรวจว่าโค้ดถูกจริง
สิ่งที่ยังค้างอยู่หลังเกมเล่นได้
สถานะล่าสุดคือเกมเล่นได้เต็มรูปแบบแล้ว บั๊กที่มองเห็นส่วนใหญ่หายไป เหลือเพียงไม่กี่จุด ขณะที่ฟังก์ชันมีอยู่แล้ว 99% และ 83% ตรงกับต้นฉบับแบบ byte-for-byte
ด้านเอกสารยังมีข้อจำกัด เพราะโพสต์บล็อกเกี่ยวกับโปรเจกต์ถูกลบไป 2 รายการ และวิดีโอในโพสต์วันที่ 30 กันยายนถูกปิดใช้งานหลังเจ้าของลิขสิทธิ์รายงาน โค้ดใกล้จบ แต่เรื่องสิทธิ์ยังไม่จบตามไปด้วย
บทเรียนจากการให้ AI พิสูจน์ตัวเอง
จุดเปลี่ยนไม่ใช่การเพิ่ม agent แต่คือการสร้างเกณฑ์ตรวจสอบที่เป็นวัตถุวิสัย เพราะโค้ดชุดแรกอ่านง่ายแต่ผิดเชิงความหมาย ทั้ง function signature, type และ struct layout ขณะที่ reviewer หยุดปัญหาไม่ได้เมื่อยังไม่มีเกณฑ์ยอมรับที่ชัดเจน
ทีมจึงใช้ compiler เดียวกับเกมต้นฉบับ แล้วเทียบแต่ละฟังก์ชันระดับ byte ให้ผลเป็น pass/fail พร้อมข้าม address ที่ต่างกันและตรวจ symbol กับ offset แทน ความสำเร็จเลยไม่ได้วัดจากโค้ดหรือจำนวนโทเค็นอย่างเดียว แต่มาจากมนุษย์ที่ออกแบบระบบตรวจ คุมกระบวนการ และรู้ว่าเมื่อไร AI กำลังหลุดทางด้วยครับ