1 điểm bởi GN⁺ 2023-09-21 | 1 bình luận | Chia sẻ qua WhatsApp
  • Giai thoại “Thank you for playing Wing Commander” của Wing Commander I kể rằng một thông báo lỗi khi thoát đã được đổi bằng cách sửa hex, nhưng đó không phải là lỗi còn sót lại trong bản phát hành
  • Ghi chép gần với nguồn gốc nhất là một bình luận năm 2009 trên Gamasutra trong bài Dirty Coding Tricks, nơi Ken Demarest kể lại việc tạm thời che lỗi thoát EMM386 trong quá trình phát triển
  • Trong DOSBox, trên phần cứng thời đó, và khi tìm kiếm chuỗi trong tệp nhị phân, câu này không xuất hiện khi thoát bình thường; chỉ đường thoát qua cửa airlock của khu doanh trại mới in ra một thông điệp đùa riêng
  • Ngay cả trong mã nguồn Wing Commander I không đầy đủ do Electronic Arts lưu trữ, thông điệp airlock cũng được xác nhận là mã game bình thường, khác với trường hợp sửa hex trình quản lý bộ nhớ
  • Ken Demarest trả lời rằng bản thân việc hack là có thật, nhưng sau khi tìm ra nguyên nhân lỗi thì nó đã bị gỡ trước khi phát hành, nên giai thoại này gần với một mẹo kỹ thuật tạm thời hơn là một sản phẩm phát hành cẩu thả

Nguồn gốc của giai thoại “Thank you for playing Wing Commander”

  • Câu chuyện được biết đến rộng rãi nói rằng một nhà phát triển Wing Commander đã không sửa được lỗi trình quản lý bộ nhớ EMM386 khi thoát game, nên đã dùng hex editor để đổi chuỗi lỗi thành “thank you for playing Wing Commander”
  • Trong 10 năm qua, giai thoại này lan truyền trên Internet như một ví dụ về “hack phần mềm thú vị”, và bắt đầu được dùng như một minh họa cho kiểu “dirty-but-functional hack”
  • Một số fan Star Citizen cũng đem ví dụ này ra trong bối cảnh chỉ trích năng lực của Chris Roberts
    • Mối liên hệ được đưa ra là Roberts, không giống nhiều CEO khác, vẫn tiếp tục tự viết code cho Star Citizen
  • Các fan Wing Commander I đã nghi ngờ ảnh chụp màn hình đi kèm khi câu chuyện được lan truyền
    • Đường dẫn cài đặt mặc định của Wing Commander I không phải là c:/wc1
    • Bản phát hành của game không in ra “Thank You for Playing Wing Commander!” khi thoát

Bình luận Gamasutra năm 2009 là bản gần với nguyên gốc nhất

  • Sau khi lần theo nguồn gốc của câu chữ và ảnh chụp màn hình, người ta xác nhận được một bình luận dưới bài Dirty Coding Tricks của Brandon Sheffield trên Gamasutra ngày 20/8/2009
  • Nội dung cốt lõi của bình luận là như sau
    • Trong Wing Commander 1, khi thoát game xảy ra ngoại lệ của trình quản lý bộ nhớ EMM386
    • Nếu xóa màn hình, một dòng như “EMM386 Memory manager error...” sẽ được in ra
    • Vì cần phát hành gấp, họ đã sửa hex chuỗi lỗi bên trong trình quản lý bộ nhớ thành “Thank you for playing Wing Commander”
  • Gamasutra từng là một trang rất phổ biến với các nhà phát triển game, và được đổi thương hiệu thành Game Developer vào năm 2021
    • Bài gốc vẫn còn trên trang mới, nhưng có vẻ phần bình luận đã biến mất trong quá trình chuyển đổi
  • Người viết bình luận là Ken Demarest
    • Ken Demarest III làm kỹ sư phần mềm cho Wing Commander đầu tiên tại Origin Systems, sau này trở thành lập trình viên trưởng của Ultima VII và Director of Technology của công ty
    • Tác giả Wing Commander là Jeff George từng đánh giá rằng ngoài Chris Roberts, Demarest là người đóng góp lớn nhất để game có thể phát hành

Phiên bản Reddit và ảnh chụp màn hình đã tạo ra hiểu lầm

  • Phiên bản lan truyền trên Reddit /r/shittyprogramming năm 2015 khác với bình luận gốc năm 2009 ở hai điểm
    • Bình luận gốc không có ảnh chụp màn hình
    • Câu chữ của thông điệp thoát đã bị sửa nhẹ để tạo cảm giác đảo ngược mạnh hơn
  • Có vẻ phiên bản Reddit đã được lan truyền qua một bài chia sẻ trên LinkedIn của bên thứ ba từ năm 2012
  • Ảnh chụp màn hình được gắn thêm về sau khiến người ta tưởng như lỗi này có mặt trong bản phát hành, nhưng bình luận gốc không hề đưa ra khẳng định đó
  • Vì vậy, dù nguồn gốc của giai thoại ban đầu có vẻ đáng tin, việc nó có phải là một lỗi còn trong bản phát hành hay không vẫn cần được kiểm chứng riêng

Kết quả kiểm tra trên bản phát hành Wing Commander I

  • Wing Commander I không in ra “thank you for playing Wing Commander” khi thoát bình thường
    • Đã thử trên DOSBox và phần cứng cùng thời
    • Đã tìm kiếm chuỗi này trong toàn bộ tệp nhị phân của game nhưng không thấy
    • Nhấn ALT-X chỉ đơn giản đưa người chơi trở về dấu nhắc DOS
  • Ngoại lệ là khi nhấp vào cửa airlock trong khu doanh trại của Tiger’s Claw thì một luồng xử lý khác được chạy
    • Một lời nhắc xác nhận y/n xuất hiện
    • Game trở về DOS và in ra thông điệp “You step out of the airlock and into…”
    • Câu này là một lời đùa gắn trực tiếp với cách thoát đó
  • Thông điệp airlock này thực sự tồn tại trong tệp nhị phân của game
  • Ken Demarest cũng có liên hệ với màn hình doanh trại đó
    • Ông được biết đến là người làm hiệu ứng giọt nước rơi vào xô
    • Hiệu ứng này thường được trích dẫn như một ví dụ cho sự theo đuổi tính nhập vai của Chris Roberts

Mã nguồn và câu trả lời của Ken Demarest

  • Bộ mã nguồn Wing Commander I không đầy đủ do Electronic Arts lưu trữ đã được dùng để kiểm tra
    • Các tệp nguồn này đã được dùng cho bản build phát hành của Wing Commander I, và sau đó cũng được chuyển cho đội phát triển bản port FM Towns
    • Một số tài liệu, bao gồm cả routine quản lý bộ nhớ, không còn được giữ lại
  • Chỉ với phần mã còn lại, nguồn gốc của thông điệp airlock vẫn có thể được xác nhận
    • BARRACKS.C định nghĩa chức năng cho màn hình luồng chơi trong khu doanh trại
    • Game unload bộ nhớ rồi in ra thông điệp airlock cùng ký tự xuống dòng
    • Điều này khớp với kết quả chạy thực tế và không phải trường hợp sửa hex trình quản lý bộ nhớ
  • Các đường thoát khác nằm trong COCKPIT.C và không in ra thông điệp nào
  • Darren Xczek đã nêu khả năng liên quan đến Ultima VII
    • Ultima VII in ra thông điệp “thank you for playing Ultima VII” khi trở về DOS
    • Ken Demarest là lập trình viên trưởng của Ultima VII
    • Ultima VII nổi tiếng vì các vấn đề quản lý bộ nhớ, đến mức tên hệ thống nội bộ là “Voodoo Memory Manager”
  • Khi xác nhận trực tiếp với Ken Demarest, có thể kết luận rằng vụ hack sửa hex thực sự đã xảy ra trong quá trình phát triển
    • Ông nói rằng từng muốn phát hành luôn với bản hack đó, nhưng sau khi tìm ra nguyên nhân lỗi thì về mặt lương tâm không thể để nó lại
    • Ông cũng nói rằng việc chỉnh tay như vậy làm tăng thời gian hoàn tất build nên khá kém hiệu quả
  • Cuối cùng, giai thoại này là một mẹo tạm thời trong quá trình phát triển và không còn trong bản phát hành
    • Đây không phải bằng chứng cho thấy họ bán ra một sản phẩm cẩu thả, mà gần hơn với một bản hack phát triển tạm thời đã bị gỡ trước khi phát hành

1 bình luận

 
GN⁺ 2023-09-21
Ý kiến trên Hacker News
  • Chuyện này làm tôi nhớ đến một trò hack mà Traveller's Tales từng đưa vào Sonic 3D Blast cho Sega Genesis/Megadrive
    Nếu lắc hoặc gõ cartridge đủ mạnh trong khi máy console vẫn đang bật, màn hình "secret level select" sẽ hiện ra. Trong một thời gian dài nó được xem là Easter egg, nhưng thực ra đó là một trình xử lý crash tùy chỉnh chặn interrupt lỗi của CPU chính rồi chuyển sang màn hình chọn màn chơi
    Đây là một cơ chế được tạo ra để tránh việc bản build bị Sega QA từ chối và làm chậm ngày phát hành; vì QA mất vài tuần, chỉ một crash thôi là phải quay lại từ đầu. Việc lắc cartridge sẽ làm tiếp xúc bị ngắt trong chốc lát, gây lỗi processor
    Nguồn là video YouTube dài 3 phút: https://www.youtube.com/watch?v=ZZs2HUW9tDA
    Kênh YouTube "Coding Secrets" được liên kết còn có thêm các video về những trò hack tương tự, và những gì các developer thời đó làm để game chạy được trong các ràng buộc về phần cứng lẫn kinh doanh thật sự rất ấn tượng

    • Ngay cả vào thời cấu trúc game còn đơn giản hơn nhiều so với bây giờ, việc QA là một quy trình kéo dài nhiều tuần cũng rất đáng chú ý
      Ngày nay đôi khi có cảm giác các game AAA thậm chí còn bị publisher hoặc nhà sản xuất console bỏ qua cả vài phút QA
    • Những video này ngắn nên rất mới mẻ. Dạo này có cảm giác mọi kênh YouTube tôi đăng ký đều làm video dài 45 phút
  • Việc có thể lần tới được nguồn cấp một trong những chuyện như thế này đúng là có sức mạnh kỳ diệu
    Nhất là nếu có khoảng cách tuổi tác hoặc địa lý như tôi, đôi khi điều đó gần như bất khả thi
    Tôi lớn lên ở Thụy Điển những năm 80 và khi ấy cũng đã mê máy tính. Tôi dùng Commodore 128 rồi sau đó chuyển sang Amiga, nhưng vẫn chơi rất nhiều game ở chế độ C64, và dĩ nhiên "Uridium" [1] cùng "Paradroid" [2] gần như là những tác phẩm bắt buộc ai cũng biết
    Nhưng đến giờ tôi vẫn thấy lạ khi developer của chúng, Andrew Braybrook, lại nằm trong feed Xitter của tôi [3] và vẫn đang làm game. Hồi đó ông ấy như một pháp sư xa xôi sống ở Anh và hơn tôi trên 10 tuổi, còn giờ ít nhất về mặt nghề nghiệp tôi có cảm giác như phần nào là đồng nghiệp
    Trước thời Internet chắc cũng có những chuyện như vậy, nhưng hẳn khó hơn và hiếm hơn nhiều
    [1]: https://en.wikipedia.org/wiki/Uridium
    [2]: https://en.wikipedia.org/wiki/Paradroid
    [3]: https://twitter.com/UridiumAuthor

  • Thật tuyệt khi đến năm 2023 vẫn còn một trang tin về Wing Commander được duy trì cập nhật

  • Tôi từng nghe chuyện về một developer audit mã tên lửa. Người đó nhanh chóng chỉ ra rằng khắp nơi có rò rỉ bộ nhớ, nhưng hóa ra đó là thiết kế có chủ ý, kiểu như tên lửa sẽ tự garbage collect khi kết thúc chuyến bay
    Họ nói vấn đề thiếu bộ nhớ được xử lý bằng cách lấy gấp đôi mức sử dụng bộ nhớ dự kiến trong lúc tên lửa bay

    • "Tên lửa thiếu bộ nhớ, chuyển sang súng"
    • Nói thật là khó tin
  • Trong thread Reddit được liên kết có bình luận thế này:

    Tôi nhớ lần đầu chạy Wing Commander I, tôi đã chơi suốt vài tiếng... sau một phiên chơi dài, lúc thoát ra đọc được dòng đó và nghĩ "ồ, thân thiện nhỉ"
    Giờ biết sự thật rồi, tôi tự hỏi đó là nói dối hay chỉ là nhớ nhầm

    • Có lẽ là hiệu ứng Mandela. Tôi cũng nhớ thông báo mà hóa ra thực tế không tồn tại đó
      Tôi cũng chơi Ultima VII rất nhiều, nên như bài viết nói, có thể ký ức đã trộn lẫn với nhau
    • Tôi có thể thử xem floppy của mình còn chạy không, rồi so với bản GOG/Kilrathi Saga xem có khác không. Nhưng khả năng cao là không được
    • Dĩ nhiên là nhớ nhầm rồi. Ký ức nổi tiếng là khó tin cậy, và bất ổn hơn chúng ta tưởng rất nhiều
      Các thông báo khi thoát kiểu này ngày xưa không hiếm, và chỉ riêng việc đọc câu chuyện đó cũng đủ tạo ra ký ức giả hoặc ký ức pha trộn
    • Rất có thể người đó đang dùng một bản phát hành muộn hơn nhiều. Những phiên bản dễ tìm nhất trên mạng là các bản ra sau khá lâu
  • Câu chuyện này rốt cuộc hóa ra không có thật, nhưng tôi vẫn nhớ chuyện từng cài launcher game multiplayer của Half-Life 1 vào năm 1999/2000
    Khi nhấn "install", một hộp thoại bật lên với nội dung đại khái là "Đừng lo nếu trình cài đặt nói cài đặt thất bại. Chương trình đã được cài đặt bình thường"
    Tôi còn chụp màn hình và giữ nó suốt vài năm. Có thể tôi đã làm mất, hoặc nó vẫn nằm đâu đó trong một máy tính cũ ở nhà bố mẹ, nhưng tôi có thể thề rằng chuyện đó là thật
    Thực tế là thông báo lỗi đã hiện ra, còn chương trình thì đã được cài đặt bình thường
    Có lần tôi kể chuyện này trên Twitter thì có người trả lời rằng đó là một vấn đề đã biết, và nếu tôi nhớ đúng thì nó liên quan đến cập nhật registry của Windows 97

    • Nếu gỡ Sierra Utilities đi kèm Half-Life 1, nó sẽ xóa thư mục cao hơn một cấp so với nơi bạn đã cài
      Thường thì cả Program Files bay sạch
    • Windows 97
      Có vẻ đã tìm ra vấn đề rồi

  • Thật lạ vì tôi khá chắc mình nhớ đã thấy thông báo "Thank you for playing Wing Commander!" khi còn nhỏ. Chỉ mình tôi vậy sao?

    • Thông báo "thank you for playing" đó hình như thực sự có trong Wing Commander 2
    • Lần đầu đọc tôi cũng thấy rất quen thuộc
      Nghĩ lại thì tôi đã chơi rất nhiều game DOS, nên có lẽ ký ức bị trộn lẫn. Việc in ra thứ gì đó khi thoát không phải quá hiếm
    • Tôi cũng nhớ rõ là đã thấy dòng cảm ơn đó. Dĩ nhiên nghĩ ngay đến hiệu ứng Mandela, nhưng ký ức sống động đến mức rợn người
  • Việc câu chuyện bị thêm thắt và méo mó từng chút khi lan truyền có thể rất khó chịu. Trường hợp này thì vô hại, nhưng vẫn vậy

  • Tôi khá chắc thông báo này có trong Wing Commander 2, chứ không phải bản gốc