ตรวจสอบตำนาน “Thank you” ใน Wing Commander I
(wcnews.com)- เรื่องเล่า “Thank you for playing Wing Commander” ของ Wing Commander I ว่ากันว่าเป็นการแก้ข้อความ error ตอนออกเกมด้วย hex editor แต่ไม่ได้เป็นบั๊กที่หลงเหลืออยู่ในเวอร์ชันวางจำหน่าย
- บันทึกที่ใกล้เคียงแหล่งต้นทางคือคอมเมนต์ในบทความ Dirty Coding Tricks ของ Gamasutra เมื่อปี 2009 โดย Ken Demarest ระบุว่าเขาเคยปิดบัง error ของ EMM386 ตอนออกเกมชั่วคราวระหว่างพัฒนา
- จากการตรวจสอบใน DOSBox, ฮาร์ดแวร์ยุคนั้น และการค้นหาสตริงในไบนารี ไม่พบข้อความดังกล่าวเมื่อออกเกมตามปกติ มีเพียงเส้นทางออกเกมผ่านประตู airlock ในห้องพักทหารที่แสดงข้อความล้อเล่นแยกต่างหาก
- แม้ใน ซอร์สโค้ด Wing Commander I ที่ไม่สมบูรณ์ซึ่ง Electronic Arts เก็บไว้ ก็ยืนยันได้ว่าข้อความ airlock เป็นโค้ดเกมปกติ ไม่ใช่กรณีเดียวกับการ hex edit ตัวจัดการหน่วยความจำ
- Ken Demarest ตอบว่าแฮ็กนั้นเกิดขึ้นจริง แต่หลังจากพบสาเหตุของ error แล้วก็ถอดออกก่อนวางจำหน่าย ดังนั้นเรื่องนี้จึงใกล้เคียงกับทริกวิศวกรรมชั่วคราว ไม่ใช่ผลิตภัณฑ์วางจำหน่ายที่ทำแบบลวก ๆ
ที่มาของเรื่องเล่า “Thank you for playing Wing Commander”
- เรื่องที่แพร่หลายคือผู้พัฒนา Wing Commander แก้ error ของตัวจัดการหน่วยความจำ EMM386 ระหว่างออกจากเกมไม่ได้ จึงใช้ hex editor เปลี่ยนสตริง error ให้เป็น “thank you for playing Wing Commander”
- ตลอด 10 ปีที่ผ่านมา เรื่องนี้แพร่กระจายบนอินเทอร์เน็ตในฐานะตัวอย่าง “แฮ็กซอฟต์แวร์ขำ ๆ” และเริ่มถูกใช้เป็นตัวอย่างของ “dirty-but-functional hack”
- แฟน Star Citizen บางส่วนยังหยิบกรณีนี้มาใช้ในบริบทวิจารณ์ความสามารถของ Chris Roberts ด้วย
- จุดเชื่อมโยงที่ถูกนำมาใช้คือ Roberts ต่างจาก CEO คนอื่น ๆ ตรงที่ยังคงเขียนโค้ดใน Star Citizen
- แฟน Wing Commander I สงสัยสกรีนช็อตที่ถูกเผยแพร่ร่วมกัน
- path ติดตั้งเริ่มต้นของ Wing Commander I ไม่ใช่
c:/wc1 - เกมเวอร์ชันวางจำหน่ายไม่ได้แสดง “Thank You for Playing Wing Commander!” ตอนออกจากเกม
- path ติดตั้งเริ่มต้นของ Wing Commander I ไม่ใช่
คอมเมนต์ Gamasutra ปี 2009 ใกล้เคียงต้นฉบับที่สุด
- เมื่อตามหาที่มาของข้อความและสกรีนช็อต พบคอมเมนต์ในบทความ Gamasutra ของ Brandon Sheffield วันที่ 20 สิงหาคม 2009 ชื่อ Dirty Coding Tricks
- ใจความของคอมเมนต์มีดังนี้
- ใน Wing Commander 1 เกิด exception ของตัวจัดการหน่วยความจำ EMM386 ตอนออกจากเกม
- เมื่อล้างหน้าจอ จะมีบรรทัดประมาณ “EMM386 Memory manager error...” แสดงขึ้นมา
- เพราะต้องรีบวางจำหน่าย จึงใช้ hex editor แก้สตริง error ภายในตัวจัดการหน่วยความจำให้เป็น “Thank you for playing Wing Commander”
- Gamasutra เป็นเว็บไซต์ที่ได้รับความนิยมในหมู่นักพัฒนาเกม และรีแบรนด์เป็น Game Developer ในปี 2021
- บทความต้นฉบับยังอยู่บน เว็บไซต์ใหม่ แต่ดูเหมือนว่าคอมเมนต์จะหายไประหว่างการย้ายระบบ
- ผู้เขียนคอมเมนต์คือ Ken Demarest
- Ken Demarest III เคยทำงานเป็น software engineer ของ Wing Commander ภาคแรกที่ Origin Systems และต่อมากลายเป็น lead programmer ของ Ultima VII รวมถึง Director of Technology ของบริษัท
- Jeff George ผู้เขียน Wing Commander เคยประเมินว่า หากไม่นับ Chris Roberts แล้ว Demarest คือผู้ที่มีส่วนช่วยให้เกมวางจำหน่ายได้สำเร็จมากที่สุด
ความเข้าใจผิดที่เกิดจากเวอร์ชัน Reddit และสกรีนช็อต
- เวอร์ชันที่แพร่บน Reddit
/r/shittyprogrammingในปี 2015 ต่างจากคอมเมนต์ต้นฉบับปี 2009 อยู่สองจุด- คอมเมนต์ต้นฉบับไม่มี สกรีนช็อต
- ข้อความตอนออกเกมถูกเปลี่ยนเล็กน้อย ทำให้ดูเหมือนเป็นมุกหักมุมที่แรงขึ้น
- ดูเหมือนว่าเวอร์ชัน Reddit ถูกส่งต่อผ่านการแชร์ LinkedIn ของบุคคลที่สามในปี 2012
- สกรีนช็อตที่ถูกแนบในภายหลังทำให้ดูเหมือนว่าบั๊กนี้เข้าไปอยู่ในเวอร์ชันวางจำหน่าย แต่คอมเมนต์ต้นฉบับไม่ได้อ้างเช่นนั้น
- ดังนั้น แม้ที่มาของเรื่องเล่าต้นฉบับจะดูน่าเชื่อถือ แต่จำเป็นต้องตรวจสอบแยกต่างหากว่าเป็น “error ที่หลงเหลือในเวอร์ชันวางจำหน่าย” จริงหรือไม่
ผลตรวจสอบใน Wing Commander I เวอร์ชันวางจำหน่าย
- Wing Commander I ไม่แสดง “thank you for playing Wing Commander” เมื่อออกจากเกมตามปกติ
- ทดสอบทั้งใน DOSBox และฮาร์ดแวร์ยุคนั้น
- ค้นหาสตริงดังกล่าวในไบนารีทั้งหมดของเกมแล้วไม่พบ
- เมื่อกด
ALT-Xเกมเพียงกลับไปที่ DOS prompt
- มีข้อยกเว้นคือหากคลิก ประตู airlock ในห้องพักทหารของ Tiger’s Claw เพื่อออกจากเกม จะมี flow อื่นทำงาน
- มี prompt ยืนยัน
y/nแสดงขึ้นมา - เมื่อกลับสู่ DOS จะแสดงข้อความ “You step out of the airlock and into…”
- ข้อความนี้เป็นมุกที่เชื่อมโยงโดยตรงกับวิธีออกเกมแบบนั้น
- มี prompt ยืนยัน
- ข้อความ airlock นี้มีอยู่จริงในไบนารีของเกม
- Ken Demarest ยังเกี่ยวข้องกับหน้าจอห้องพักทหารดังกล่าวด้วย
- เขาเป็นที่รู้จักว่าเป็นผู้ทำเอฟเฟกต์หยดน้ำที่ตกลงในถัง
- เอฟเฟกต์นี้มักถูกยกเป็นตัวอย่างของความพยายามของ Chris Roberts ในการสร้างความสมจริงแบบชวนดื่มด่ำ
ซอร์สโค้ดและคำตอบของ Ken Demarest
- ใช้ซอร์สโค้ด Wing Commander I ที่ไม่สมบูรณ์ซึ่ง Electronic Arts เก็บไว้ในการตรวจสอบ
- ไฟล์ซอร์สเหล่านี้ถูกใช้กับ release build ของ Wing Commander I และต่อมาถูกส่งต่อให้ทีมพอร์ต FM Towns ด้วย
- ข้อมูลบางส่วน รวมถึง routine การจัดการหน่วยความจำ ไม่หลงเหลืออยู่
- แม้มีโค้ดที่เหลืออยู่เท่านั้น ก็ยังยืนยันที่มาของข้อความ airlock ได้
BARRACKS.Cตั้งค่าฟังก์ชันของหน้าจอ flow เกมในห้องพักทหาร- เกม unload หน่วยความจำแล้วจึงพิมพ์ข้อความ airlock และการขึ้นบรรทัดใหม่
- สิ่งนี้ตรงกับผลการรันจริง และไม่ใช่กรณี hex edit ตัวจัดการหน่วยความจำ
- เส้นทางออกเกมอื่นอยู่ใน
COCKPIT.Cและไม่พิมพ์ข้อความ - Darren Xczek เสนอความเป็นไปได้ว่าอาจเป็น Ultima VII
- Ultima VII แสดงข้อความ “thank you for playing Ultima VII” เมื่อกลับสู่ DOS
- Ken Demarest เป็น lead programmer ของ Ultima VII
- Ultima VII ขึ้นชื่อเรื่องปัญหาการจัดการหน่วยความจำ ถึงขั้นที่ระบบภายในมีชื่อว่า “Voodoo Memory Manager”
- เมื่อสอบถาม Ken Demarest โดยตรง สรุปได้ว่า แฮ็กด้วย hex editor เคยเกิดขึ้นจริงระหว่างการพัฒนา
- เขาตอบว่าเคยอยากวางจำหน่ายพร้อมแฮ็กนั้นอยู่เหมือนกัน แต่หลังจากพบสาเหตุของ error แล้ว ก็ปล่อยให้หลงเหลือไว้ไม่ได้ด้วยสำนึกผิดชอบ
- เขายังตอบด้วยว่ากระบวนการแก้ด้วยมือทำให้เวลาปิด build เพิ่มขึ้นและไม่มีประสิทธิภาพ
- สรุปแล้ว เรื่องเล่านี้เป็นทริกชั่วคราวระหว่างพัฒนา และไม่ได้หลงเหลืออยู่ในเวอร์ชันวางจำหน่าย
- ไม่ใช่หลักฐานว่ามีการขายผลิตภัณฑ์ที่ทำแบบลวก ๆ แต่ใกล้เคียงกับ แฮ็กชั่วคราวในการพัฒนา ที่ถูกถอดออกก่อนวางจำหน่าย
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ทำให้นึกถึงการแฮ็กที่ Traveller's Tales ใส่ไว้ใน Sonic 3D Blast สำหรับ Sega Genesis/Megadrive
ถ้าเขย่าหรือตบตลับเกมแรงพอขณะที่เปิดเครื่องคอนโซลอยู่ จะมีหน้าจอ "secret level select" โผล่ขึ้นมา ซึ่งเป็นเวลานานถูกมองว่าเป็นอีสเตอร์เอ็ก แต่จริง ๆ แล้วมันคือ ตัวจัดการแครชแบบกำหนดเอง ที่ดัก interrupt ข้อผิดพลาดของ CPU หลักแล้วส่งไปยังหน้าจอเลือกเลเวล
มันเป็นกลไกที่ทำขึ้นเพื่อหลีกเลี่ยงไม่ให้บิลด์ถูก Sega QA ตีกลับจนการวางจำหน่ายล่าช้า และเพราะ QA ใช้เวลาหลายสัปดาห์ แครชเพียงครั้งเดียวก็หมายถึงต้องเริ่มใหม่ตั้งแต่ต้น การเขย่าตลับทำให้หน้าสัมผัสหลุดชั่วขณะจนโปรเซสเซอร์เกิดข้อผิดพลาด
แหล่งที่มา วิดีโอ YouTube 3 นาที: https://www.youtube.com/watch?v=ZZs2HUW9tDA
ช่อง YouTube "Coding Secrets" ที่ลิงก์ไว้ยังมีวิดีโอเกี่ยวกับการแฮ็กคล้าย ๆ กันอีก และสิ่งที่นักพัฒนาในยุคนั้นทำเพื่อให้เกมทำงานได้ภายใต้ข้อจำกัดทั้งด้านฮาร์ดแวร์และธุรกิจนั้นน่าทึ่งจริง ๆ
ทุกวันนี้บางครั้งดูเหมือนว่าเกม AAA จะถูกผู้จัดจำหน่ายหรือผู้ผลิตคอนโซลข้ามแม้แต่ QA ที่ใช้เวลาไม่กี่นาทีไปด้วยซ้ำ
การที่ในเรื่องแบบนี้เราสามารถไปถึง แหล่งข้อมูลชั้นต้น ได้ มันเหมือนมีพลังวิเศษจริง ๆ
โดยเฉพาะถ้ามีช่องว่างด้านอายุหรือระยะทางทางภูมิศาสตร์แบบผม บางทีก็ดูแทบเป็นไปไม่ได้
ผมโตมาในสวีเดนช่วงยุค 80 และตอนนั้นก็หมกมุ่นกับคอมพิวเตอร์มาก ใช้ Commodore 128 แล้วต่อมาก็ย้ายไป Amiga แต่เล่นเกมในโหมด C64 เยอะ และแน่นอนว่า "Uridium" [1] กับ "Paradroid" [2] แทบจะเป็นผลงานที่ทุกคนรู้จักและต้องเล่น
แต่ทุกวันนี้ Andrew Braybrook ผู้พัฒนาเกมเหล่านั้นอยู่ในฟีด Xitter ของผม [3] และยังคงทำเกมอยู่ มันยังรู้สึกแปลกอยู่ดี ตอนนั้นเขาเหมือนพ่อมดจากแดนไกลที่อยู่ในอังกฤษและอายุมากกว่าผมเกิน 10 ปี แต่ตอนนี้อย่างน้อยในเชิงอาชีพก็รู้สึกเหมือนเป็นเพื่อนร่วมสายงานอยู่บ้าง
ก่อนยุคอินเทอร์เน็ตเรื่องแบบนี้ก็คงมีอยู่บ้าง แต่คงยากและเกิดขึ้นได้น้อยกว่ามาก
[1]: https://en.wikipedia.org/wiki/Uridium
[2]: https://en.wikipedia.org/wiki/Paradroid
[3]: https://twitter.com/UridiumAuthor
ดีจริง ๆ ที่ในปี 2023 ยังมี เว็บไซต์ข่าว Wing Commander ที่อัปเดตอยู่เสมอ
เคยได้ยินเรื่องนักพัฒนาคนหนึ่งที่ audit โค้ดมิสไซล์ เขาชี้ได้อย่างรวดเร็วว่ามี memory leak อยู่เต็มไปหมด แต่ปรากฏว่านั่นเป็นการออกแบบโดยตั้งใจ ประมาณว่ามิสไซล์จะทำ garbage collection ของตัวเองเมื่อสิ้นสุดการบิน
ส่วนปัญหาหน่วยความจำไม่พอ เขาว่าจัดการด้วยการคำนวณการใช้หน่วยความจำที่คาดไว้ระหว่างบินของมิสไซล์ไว้เป็นสองเท่า
ในเธรด Reddit ที่ลิงก์ไว้มีคอมเมนต์แบบนี้:
ผมเล่น Ultima VII เยอะด้วย อย่างที่บทความบอก ความทรงจำอาจปนกันก็ได้
ข้อความตอนออกจากเกมแบบนี้เมื่อก่อนก็ไม่ได้หายาก และแค่การอ่านเรื่องนี้ก็เพียงพอจะสร้างความทรงจำปลอมหรือความทรงจำที่ปนกันขึ้นมาได้แล้ว
เรื่องนี้สุดท้ายถูกพิสูจน์ว่าไม่จริง แต่ผมจำได้ว่าในปี 1999/2000 เคยติดตั้ง ตัวเปิดเกมมัลติเพลเยอร์ Half-Life 1
พอกด "install" ก็มีไดอะล็อกขึ้นมาประมาณว่า "แม้ตัวติดตั้งจะบอกว่าติดตั้งล้มเหลวก็ไม่ต้องกังวล โปรแกรมติดตั้งเรียบร้อยแล้ว"
ผมยังถ่ายสกรีนช็อตไว้ และเก็บไว้หลายปี อาจทำหายไปแล้ว หรืออาจยังอยู่ที่ไหนสักแห่งในคอมพิวเตอร์เก่าที่บ้านพ่อแม่ แต่ผมสาบานได้ว่ามันเป็นเรื่องจริง
มีข้อความข้อผิดพลาดขึ้นมาจริง ๆ และโปรแกรมก็ติดตั้งเรียบร้อยแล้วจริง ๆ
ครั้งหนึ่งผมเคยเล่าเรื่องนี้ใน Twitter แล้วมีคนตอบว่ามันเป็นปัญหาที่รู้จักกัน และถ้าจำไม่ผิดเกี่ยวกับ การอัปเดตรีจิสทรีของ Windows 97
โดยปกติก็คือ Program Files หายไปทั้งก้อน
แปลกดี เพราะผมค่อนข้างมั่นใจว่าตอนเด็ก ๆ เคยเห็นข้อความ "Thank you for playing Wing Commander!" มีแค่ผมหรือเปล่า?
ย้อนคิดดูแล้ว ผมเล่นเกม DOS เยอะมาก ก็คงปนกันได้ การพิมพ์อะไรบางอย่างตอนออกจากเกมไม่ใช่เรื่องหายากนัก
เรื่องราวที่แพร่ต่อกันแล้วค่อย ๆ ถูกบิดเบือนเพิ่มขึ้นทีละนิดนี่น่าหงุดหงิดได้จริง ๆ แม้กรณีนี้จะไม่ก่ออันตรายอะไรก็เถอะ
ค่อนข้างมั่นใจว่าข้อความนี้มีอยู่ใน Wing Commander 2 ไม่ใช่ภาคต้นฉบับ