1 คะแนน โดย GN⁺ 2023-09-21 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • เรื่องเล่า “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!” ตอนออกจากเกม

คอมเมนต์ 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…”
    • ข้อความนี้เป็นมุกที่เชื่อมโยงโดยตรงกับวิธีออกเกมแบบนั้น
  • ข้อความ 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 ความคิดเห็น

 
GN⁺ 2023-09-21
ความคิดเห็นจาก 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" ที่ลิงก์ไว้ยังมีวิดีโอเกี่ยวกับการแฮ็กคล้าย ๆ กันอีก และสิ่งที่นักพัฒนาในยุคนั้นทำเพื่อให้เกมทำงานได้ภายใต้ข้อจำกัดทั้งด้านฮาร์ดแวร์และธุรกิจนั้นน่าทึ่งจริง ๆ

    • แม้ในยุคที่โครงสร้างเกมเรียบง่ายกว่าตอนนี้มาก การที่ QA เป็นกระบวนการที่กินเวลาหลายสัปดาห์ ก็เป็นเรื่องชวนคิด
      ทุกวันนี้บางครั้งดูเหมือนว่าเกม AAA จะถูกผู้จัดจำหน่ายหรือผู้ผลิตคอนโซลข้ามแม้แต่ QA ที่ใช้เวลาไม่กี่นาทีไปด้วยซ้ำ
    • วิดีโอพวกนี้ สั้นจนรู้สึกสดชื่น ทุกวันนี้ช่อง YouTube ที่ติดตามเหมือนจะทำวิดีโอยาว 45 นาทีกันหมด
  • การที่ในเรื่องแบบนี้เราสามารถไปถึง แหล่งข้อมูลชั้นต้น ได้ มันเหมือนมีพลังวิเศษจริง ๆ
    โดยเฉพาะถ้ามีช่องว่างด้านอายุหรือระยะทางทางภูมิศาสตร์แบบผม บางทีก็ดูแทบเป็นไปไม่ได้
    ผมโตมาในสวีเดนช่วงยุค 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 ที่ลิงก์ไว้มีคอมเมนต์แบบนี้:

    ผมจำได้ว่าตอนเปิด Wing Commander I ครั้งแรก ผมเล่นไปหลายชั่วโมง... หลังจากเล่นยาว ๆ แล้วออกจากเกม พออ่านข้อความนั้นก็คิดว่า "อ้อ ใจดีจัง"
    ตอนนี้พอรู้ความจริงแล้ว ก็สงสัยว่าเป็นคำโกหก หรือแค่จำผิดกันแน่

    • น่าจะเป็น Mandela effect ผมเองก็จำข้อความนั้นได้ ทั้งที่จริง ๆ แล้วมันไม่มีอยู่
      ผมเล่น Ultima VII เยอะด้วย อย่างที่บทความบอก ความทรงจำอาจปนกันก็ได้
    • ผมลองดูได้ว่าฟลอปปี้ของผมยังใช้งานได้ไหม แล้วดูว่าต่างจาก เวอร์ชัน GOG/Kilrathi Saga หรือเปล่า แต่มีโอกาสสูงว่าคงไม่ได้
    • แน่นอนว่าจำผิด ความทรงจำขึ้นชื่อว่าไม่น่าเชื่อถือ และไม่มั่นคงกว่าที่เราคิดมาก
      ข้อความตอนออกจากเกมแบบนี้เมื่อก่อนก็ไม่ได้หายาก และแค่การอ่านเรื่องนี้ก็เพียงพอจะสร้างความทรงจำปลอมหรือความทรงจำที่ปนกันขึ้นมาได้แล้ว
    • เป็นไปได้มากว่ากำลังใช้รีลีสที่ออกมาทีหลังมาก ๆ เวอร์ชันที่หาได้ง่ายที่สุดทางออนไลน์มักเป็นเวอร์ชันที่ออกมานานหลังจากนั้น
  • เรื่องนี้สุดท้ายถูกพิสูจน์ว่าไม่จริง แต่ผมจำได้ว่าในปี 1999/2000 เคยติดตั้ง ตัวเปิดเกมมัลติเพลเยอร์ Half-Life 1
    พอกด "install" ก็มีไดอะล็อกขึ้นมาประมาณว่า "แม้ตัวติดตั้งจะบอกว่าติดตั้งล้มเหลวก็ไม่ต้องกังวล โปรแกรมติดตั้งเรียบร้อยแล้ว"
    ผมยังถ่ายสกรีนช็อตไว้ และเก็บไว้หลายปี อาจทำหายไปแล้ว หรืออาจยังอยู่ที่ไหนสักแห่งในคอมพิวเตอร์เก่าที่บ้านพ่อแม่ แต่ผมสาบานได้ว่ามันเป็นเรื่องจริง
    มีข้อความข้อผิดพลาดขึ้นมาจริง ๆ และโปรแกรมก็ติดตั้งเรียบร้อยแล้วจริง ๆ
    ครั้งหนึ่งผมเคยเล่าเรื่องนี้ใน Twitter แล้วมีคนตอบว่ามันเป็นปัญหาที่รู้จักกัน และถ้าจำไม่ผิดเกี่ยวกับ การอัปเดตรีจิสทรีของ Windows 97

    • ถ้าถอนการติดตั้ง Sierra Utilities ที่มากับ Half-Life 1 มันจะลบไดเรกทอรีที่อยู่เหนือจุดที่ติดตั้งไปหนึ่งระดับ
      โดยปกติก็คือ Program Files หายไปทั้งก้อน
    • Windows 97
      คิดว่าเจอต้นตอแล้วล่ะ

  • แปลกดี เพราะผมค่อนข้างมั่นใจว่าตอนเด็ก ๆ เคยเห็นข้อความ "Thank you for playing Wing Commander!" มีแค่ผมหรือเปล่า?

    • ข้อความ "thank you for playing" นั้นน่าจะมีอยู่จริงใน Wing Commander 2
    • ตอนผมอ่านครั้งแรกก็รู้สึกคุ้นมาก
      ย้อนคิดดูแล้ว ผมเล่นเกม DOS เยอะมาก ก็คงปนกันได้ การพิมพ์อะไรบางอย่างตอนออกจากเกมไม่ใช่เรื่องหายากนัก
    • ผมก็จำได้ชัดเจนว่าเคยเห็นข้อความขอบคุณนั้น แน่นอนว่านึกถึง Mandela effect แต่ความทรงจำมันสดมากจนขนลุก
  • เรื่องราวที่แพร่ต่อกันแล้วค่อย ๆ ถูกบิดเบือนเพิ่มขึ้นทีละนิดนี่น่าหงุดหงิดได้จริง ๆ แม้กรณีนี้จะไม่ก่ออันตรายอะไรก็เถอะ

  • ค่อนข้างมั่นใจว่าข้อความนี้มีอยู่ใน Wing Commander 2 ไม่ใช่ภาคต้นฉบับ