Bản cập nhật Windows 11 đã tiết lộ một lỗi tồn tại 2 thập kỷ trong GTA: San Andreas khiến CJ bay lên '1,087 nghìn tỷ năm ánh sáng' vào tầng bình lưu

theanh

Administrator
Nhân viên
Nhà phát triển trò chơi và người điều hành Silent, có lẽ được biết đến nhiều nhất với các bản SilentPatches mà anh đã phát hành cho nhiều trò chơi khác nhau, bao gồm cả Grand Theft Auto: San Andreas, đã tình cờ phát hiện ra (và sửa) một lỗi đã nằm im trong hai thập kỷ. Và mặc dù biểu hiện này, rõ ràng, được kích hoạt bởi bản dựng mới của Windows 11, nhưng nó đã ở đó trong suốt thời gian đó.

Silent đã nhận được "báo cáo lỗi khá cụ thể" liên quan đến SilentPatch, trong đó một người dùng lưu ý rằng sau khi cập nhật Windows 11 của họ lên phiên bản 24H2, máy bay Skimmer biến mất hoàn toàn khỏi trò chơi. Nó không thể được tạo ra bằng công cụ huấn luyện, cũng không xuất hiện tại các điểm sinh ra thông thường của nó.

Người hùng lập trình của chúng ta lưu ý rằng đây không phải là một khiếu nại riêng lẻ và anh ấy đã nhận được nhiều bình luận về Skimmer mất tích kể từ tháng 11 năm ngoái. Một người dùng đã thiết lập một máy ảo (VM) chạy Windows 11 23H2, xác nhận rằng máy bay đã xuất hiện bình thường, sau đó cập nhật VM lên Windows 11 24H2 và máy bay biến mất. Như người dùng này đã nói, tại sao "một bản cập nhật tính năng nhỏ vào năm 2024 lại phá hỏng một máy bay ngẫu nhiên trong trò chơi năm 2005 là điều mà không ai có thể đoán được."

Silent đã yêu cầu một số người trên 24H2 thử nghiệm và, vâng, tất cả họ đều gặp phải lỗi này. Vào thời điểm này, anh ấy đã xắn tay áo, thiết lập VM của riêng mình chạy 24H2 và xác nhận lỗi. Đây là nơi mọi thứ trở nên tuyệt vời:

"Sau đó, tôi sử dụng tập lệnh để tạo ra một Skimmer và đưa CJ vào bên trong nó," Silent viết, "chỉ để được phóng lên độ cao 1,0287648030984853e+0031 = 10,3 nghìn tỷ mét, hay 10,3 nghìn tỷ kilômét, hay 1,087 nghìn tỷ năm ánh sáng trên bầu trời."

Tôi sẽ có nó​


Mb4GLPs9SqeQohYVvdFuLk-1200-80.jpg



Không cần phải nói thì GTA: San Andreas không có cách nào thực sự thể hiện sự kiện phi thường này, thay vào đó là thể hiện "một 'hiệu ứng lưu ảnh' nổi tiếng xảy ra khi máy ảnh được phóng vào vô cực hoặc gần vô cực. Thật buồn cười là bạn vẫn có thể nhận ra hình dạng của máy bay mặc dù các hình ảnh động hoàn toàn phụ thuộc vào độ không chính xác của các giá trị dấu phẩy động."

Silent bắt đầu điều tra vấn đề này và phát hiện ra một giá trị số "rõ ràng là rất lớn" cho tốc độ cánh quạt của máy bay, nhưng điều gì khiến máy bay bay lên một khoảng cách không thể tưởng tượng như vậy? "Có hai khả năng", Silent giải thích:

[*] Máy bay xuất hiện ở trên cao trên bầu trời rồi.
[*] Máy bay xuất hiện ở mặt đất rồi bay lên trong khung hình tiếp theo.
Lúc này, Silent bắt đầu đi sâu vào chi tiết về các hàm, tọa độ Z, hộp giới hạn và hàng tá thuật ngữ khác. Nếu tôi cố gắng ghép lại một lời giải thích, có lẽ tôi sẽ hiểu sai một số phần và dù sao thì nó cũng sẽ giống như tiếng vô nghĩa. Đối với những người có thiên hướng về mã hơn, bạn có thể thưởng thức cách hoạt động của Silent trong bài viết đầy đủ tuyệt vời của anh ấy.

Nói tóm lại là Silent xác định được giá trị Z bị hỏng (tọa độ sinh) và đoán rằng điều này dẫn đến việc tệp va chạm bị đọc không chính xác ("rất khó xảy ra, nhưng không phải là không thể vì vấn đề này có khả năng là lỗi của hệ điều hành") hoặc "hộp giới hạn được đọc chính xác, nhưng sau đó nó được cập nhật với một giá trị không chính xác một cách thái quá."

Điều này dẫn Silent đến việc phân tích sâu hơn về hộp giới hạn và tọa độ Z, và nhận ra rằng khi một phương tiện cụ thể được tạo ra lần đầu tiên, trò chơi sẽ cập nhật tọa độ Z để phản ánh chiều cao hệ thống treo tự nhiên của xe. Đúng vậy, chúng ta vẫn đang nói về một chiếc máy bay.

"Đây là nơi mọi thứ trở nên sai lầm đầu tiên", Silent viết, trước khi bắt đầu phân tích chi tiết về cách tính toán các đường dây treo và nơi cuối cùng anh ấy xác định được vấn đề: Trong vehicles.ide, Skimmer có ít tham số hơn các máy bay khác, khiến nó giống với các mục nhập cho thuyền. Đây là máy bay duy nhất thiếu tham số cho bánh trước và bánh sau của nó. "Việc thêm lại các tham số đó có sửa được thủy phi cơ không? Không có gì ngạc nhiên, là có!" anh ấy viết.

Sau khi xác định được vấn đề, bằng cách nào đó liên quan đến việc trò chơi nghĩ rằng máy bay là một chiếc thuyền, người đàn ông của chúng tôi sau đó trở thành Sherlock thực thụ để xác định lý do tại sao các lập trình viên của Rockstar lại bỏ lỡ nó.

"Tôi có một lời giải thích hợp lý cho lý do tại sao Rockstar lại mắc lỗi cụ thể này trong dữ liệu ngay từ đầu—trong Vice City, Skimmer được định nghĩa là một chiếc thuyền, và do đó không có những giá trị đó được xác định theo thiết kế! Khi trong San Andreas, họ thay đổi loại phương tiện của Skimmer thành máy bay, ai đó đã quên thêm những thông số bổ sung bắt buộc đó. Vì trò chơi này hiếm khi xác minh tính đầy đủ của dữ liệu, nên lỗi này chỉ đơn giản là lọt qua radar.

"Trong trường hợp của hang thỏ này, việc phát hiện ra bản sửa lỗi này chỉ làm nảy sinh thêm nhiều câu hỏi—tại sao lỗi này chỉ đến bây giờ mới bị hỏng? Điều gì khiến trò chơi hoạt động tốt mặc dù có vấn đề này trong hơn hai mươi năm, trước khi một bản cập nhật mới cho Windows 11 đột nhiên thách thức nguyên trạng?"
"Đây là lỗi thú vị nhất mà tôi từng gặp trong một thời gian."
Đáng ngạc nhiên là phiên bản Windows 11 cụ thể này thực sự không chịu trách nhiệm. Ông xác định vấn đề cuối cùng là "giá trị dấu phẩy động thực tế nằm trên ngăn xếp ở đúng vị trí.

"Sau đó, tôi đã kiểm tra vehicles.ide cho TopFun—phương tiện được xác định trực tiếp trước Skimmer. Quả nhiên, tỷ lệ bánh xe của nó là 0,7!" ông viết. "Đây chính xác là bằng chứng tôi cần—lưu ý rằng trong lần chạy Windows 10, một số biến cục bộ thậm chí vẫn có thể nhìn thấy bằng mắt thường (như lớp phương tiện thông thường), trong khi trong Windows 11, chúng hoàn toàn biến mất. Cũng đáng lưu ý rằng ngay cả trong Windows 10, biến cục bộ tiếp theo sau thang đo bánh xe đã bị LeaveCriticalSection ghi đè, nghĩa là trò chơi đã cách lỗi chính xác này 4 byte từ nhiều năm trước! May mắn khi hiển thị ở đây thật điên rồ."

Vì vậy, mặc dù Windows 11 24H2 đã đưa lỗi này ra ánh sáng, "vấn đề thực sự ở đây là trò chơi dựa vào hành vi chưa xác định (biến cục bộ chưa được khởi tạo)." Lỗi này có thể xuất hiện trên Windows 10, hoặc 7, hoặc XP, hoặc thậm chí là Windows 98—nhưng phép tính không diễn ra theo cách đó."

Luôn là người cầu toàn, Silent tiếp tục xem xét mã trên các bản phát hành San Andreas khác và thấy rằng phiên bản Xbox gốc của trò chơi bao gồm một bản sửa lỗi không khác mấy so với bản của anh. Bản sửa lỗi này đã được bao gồm trong các bản phát hành San Andreas khác, bao gồm cả GTA: The Definitive Edition.

"Đây là lỗi thú vị nhất mà tôi từng gặp trong một thời gian", Silent viết. "Ban đầu, tôi thấy khó tin rằng một lỗi như thế này lại liên quan trực tiếp đến một bản phát hành hệ điều hành cụ thể, nhưng tôi đã hoàn toàn sai. Vào cuối ngày, đó là một lỗi đơn giản trong San Andreas và chức năng này không bao giờ nên hoạt động đúng, thế nhưng, ít nhất là trên PC, nó đã ẩn mình trong hai thập kỷ."


bbQSSCVqiBbuir5RPMKUV-1200-80.jpg



Với một sự cường điệu mà tôi chỉ có thể ngưỡng mộ, Silent kết thúc bằng cách giải thích lý do tại sao bản sửa lỗi của anh ấy chính xác hơn một chút so với bản sửa lỗi tương đương của Rockstar và sử dụng khám phá này để củng cố một số nguyên tắc mã hóa tốt như xác thực dữ liệu đầu vào của bạn: "San Andreas nổi tiếng là tệ trong việc này." Meo!

Trong cuốn sách The Right Stuff của Tom Wolfe, tập trung vào những phi công thử nghiệm đáng chú ý đã làm việc trong giai đoạn đầu của chương trình không gian, ông đặt ra một câu hỏi: "Tôi tự hỏi điều gì khiến một người đàn ông sẵn sàng ngồi trên đỉnh một ngọn nến La Mã khổng lồ, chẳng hạn như tên lửa Redstone, Atlas, Titan hay Saturn, và chờ ai đó châm ngòi?"

Trong thế giới thu nhỏ của San Andreas, một người đàn ông tên là Silent tự hỏi điều gì khiến CJ bước vào một chiếc máy bay rồi ngay lập tức phóng "lên bầu trời cách 1,087 nghìn tỷ năm ánh sáng". Tất cả các câu trả lời thực sự đều ở trên và trong bài viết đầy đủ của anh ấy
https://cookieplmonster.github.io/2...in11-24h2-bug/?utm_source=diendancongnghe.com. Nhưng câu trả lời khác nằm ở sự vô lý của những thứ này khi chúng hoạt động, vô số phép tính phụ thuộc lẫn nhau và những thứ có thể xảy ra sai sót trong một điều có vẻ đơn giản như tạo ra một phương tiện xuất hiện trên thế giới. Bây giờ bạn thấy rồi đấy: Bây giờ bạn đang ở một thiên hà khác.
 
Back
Bên trên