- Phân tích đảo ngược hệ thống hạ cánh xuống tàu sân bay của Top Gun trên NES để công bố các điều kiện phán định hạ cánh chính xác
- Để hạ cánh thành công, cần có độ cao 100–299, tốc độ 238–337 và ngắm thẳng chính diện tàu sân bay
- Hiển thị “Alt. 200 / Speed 288” trên MFD trong game thực chất đưa ra giá trị trung tâm của phạm vi cho phép
- Tốc độ và độ cao được lưu trong bộ nhớ dưới dạng BCD (thập phân mã hóa nhị phân), và hàm phán định được thực thi tại một địa chỉ cụ thể
- Đây là một trường hợp giải mã logic nội bộ chính xác của game cũ, hữu ích cho việc phân tích game retro và học debug
Các điều kiện cơ bản của phán định hạ cánh
- Để hạ cánh thành công, cần có độ cao 100–299, tốc độ 238–337 và hướng chính xác về phía tàu sân bay
- Cả ba điều kiện này đều được kiểm tra tại thời điểm chuỗi hạ cánh kết thúc
- Hiển thị “Alt. 200 / Speed 288” trên màn hình game là giá trị trung tâm của phạm vi cho phép thực tế, nên là mức phù hợp để người chơi nhắm tới
- Độ cao và tốc độ được điều chỉnh bằng đầu vào ga và góc pitch, còn hướng thì không có chỉ báo riêng mà chỉ phản hồi bằng cảnh báo “Right! Right!”
Cấu trúc bộ nhớ và biến nội bộ
- Các địa chỉ bộ nhớ chính và nội dung lưu trữ
- $40–$41: tốc độ (định dạng BSD), phạm vi cho phép 238–337
- $3D–$3E: độ cao (định dạng BSD), phạm vi cho phép 100–299
- $FD: hướng (Heading), trong phạm vi -32 ~ +32 thì 0–7 là có thể hạ cánh
- $9E: lưu kết quả phán định hạ cánh, giá trị 0 là thành công
- Tốc độ và độ cao được lưu dưới dạng BCD (Binary Coded Decimal) để đơn giản hóa việc hiển thị trên màn hình
- Ví dụ: 1234 được lưu dưới dạng 0x1234 (thập phân 4660)
Quy trình phán định hạ cánh
- Hàm tại địa chỉ $B6EA kiểm tra trạng thái hạ cánh và ghi kết quả vào $9E
- Quy trình này so sánh lần lượt độ cao, tốc độ và hướng; nếu vượt ra ngoài điều kiện, nó sẽ trả về các mã giá trị khác nhau
- Ví dụ: quá cao hoặc quá nhanh thì mã 8, quá thấp hoặc quá chậm thì mã 4
- Nếu thỏa mãn mọi điều kiện, nó được đặt thành LDX #00 để xử lý là thành công
Debug và mã cheat
- Dùng mã Game Genie AEPETA thì luôn được phán định là hạ cánh thành công
- Mã này bỏ qua quy trình phán định thực tế và cưỡng ép ghi kết quả thành trạng thái thành công
Kết luận
- Hệ thống hạ cánh trong Top Gun trên NES không phải là thao tác đơn giản mà được cấu thành từ logic phán định chính xác dựa trên số liệu
- Thông qua phân tích đảo ngược, có thể xác nhận rõ ràng cấu trúc bộ nhớ nội bộ và cách phân nhánh điều kiện của game retro
- Đây là một ví dụ cho thấy độ chính xác trong thiết kế của game cổ điển, có giá trị tham khảo cao cho nghiên cứu phân tích và phục dựng logic game
1 bình luận
Ý kiến trên Hacker News
Thông tin để hạ cánh máy bay đúng cách đều có trong sách hướng dẫn
Tốc độ và độ cao cần thiết không hề là bí mật, chỉ là đa số bọn trẻ không đọc sách hướng dẫn
Độ khó thật sự của trò chơi đến từ engine vật lý nửa thực tế. Anh trai tôi đang học trường bay đã hạ cánh dễ dàng rồi chỉ lại cho tôi cách làm
Tốc độ và độ cao phải được điều chỉnh bằng ga và góc pitch, nên không thể chỉ bấm nút động cơ hoặc phanh gió đơn thuần
Mẹo anh tôi chỉ là khi đang bổ nhào thì tốc độ không giảm, nên hãy hơi ngóc mũi lên và mở phanh gió để giảm tốc rồi cân bằng lại. Trò chơi mô phỏng việc này khá chính xác
Blog này được thiết kế theo kiểu khó duyệt kho lưu trữ
Không có liên kết dẫn sang bài khác, ngoài bài đăng này thì gần như không thể truy cập gì thêm
blag/posts hoặc blag trả về lỗi 403, còn trang gốc thì chỉ có một bức ảnh núi
Cũng không có RSS feed. Không phải phàn nàn gì, nếu đó là chủ ý thiết kế thì tôi tôn trọng
Hạ cánh trên tàu sân bay không quá khó, nhưng tiếp nhiên liệu trên không thì thực sự kinh khủng. Tôi chỉ làm được vài lần
Video gameplay
Tự nhiên nhớ đến câu thoại kinh điển “This business will get out of control…”
Trò này còn xuất hiện trong video của Angry Video Game Nerd
Video liên quan
Liên kết YouTube
Tôi không chơi Top Gun, nhưng rất mê Turn and Burn: No Fly Zone trên SNES
Giờ nhìn lại vẫn thấy kinh ngạc vì đồ họa đã tiến bộ đến mức nào qua mỗi thế hệ
Bước chuyển từ NES sang SNES cũng tương tự. Càng sang thời PS1→PS2→PS3 thì kỷ nguyên 3D càng ổn định, nên thay đổi dần trở nên tiệm tiến hơn
Mọi người hay nói Top Gun khó ở đoạn hạ cánh, nhưng ghép trạm vệ tinh trong Captain Skyhawk còn khó hơn nhiều
Bạn phải ghép trong lúc hiệu ứng demo scene của RARE bùng nổ khắp màn hình
Để so sánh, có người chia sẻ một đoạn mã ví dụ viết bằng Python cho phần kiểm tra hạ cánh
Nó trả về TOO_SLOW_OR_TOO_LOW, TOO_FAST_OR_TOO_HIGH... tùy theo độ cao, tốc độ và hướng
Tôi cực thích mấy trò đùa mô phỏng kiểu này
Trong X‑Plane, bạn thậm chí có thể hạ cánh chiếc 737 xuống tàu sân bay. Chỉ cần mang nhiên liệu đủ 30 phút, hạ flap tối đa, rồi kéo phanh đỗ ngay trước khi chạm xuống
Tất nhiên, theo thông số chính thức thì 737 cần đường băng dài hơn nhiều, nhưng nếu tàu sân bay chạy ngược gió thì có thể tạo ra gió ngược hơn 40 knot
Hồi nhỏ tôi có chơi trò này, nhưng chưa từng hạ cánh được lên tàu sân bay dù chỉ một lần. Đó là nhiệm vụ của mấy ông anh
Một hôm ở chỗ trông trẻ sau giờ học, tôi nghe nói có thằng bạn hạ cánh trò này rất giỏi nên đã lập kế hoạch tác chiến phối hợp
Tôi lo phần không chiến, còn nó lo phần hạ cánh, và cả hai đã phá đảo Top Gun cùng The Second Mission chỉ trong vài tiếng
Đến giờ đây vẫn là một trong số ít game NES mà tôi vượt qua cùng bạn bè mà không dùng cheat hay Game Genie, nên vẫn là một kỷ niệm rất đẹp