1 điểm bởi GN⁺ 2025-12-16 | 1 bình luận | Chia sẻ qua WhatsApp
  • 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–337ngắ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–337hướ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

 
GN⁺ 2025-12-16
Ý 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

    • Đa số bọn trẻ không đọc sách hướng dẫn sao? Tôi thì cứ mua game mới là đọc sách hướng dẫn đi đọc lại trên xe trên đường về nhà. Nếu là game mua ở Toys“R”Us thì có khi tôi đã đọc cả chục lần trước khi về tới nhà
    • Câu cửa miệng khi hạ cánh là: “dùng ga để chỉnh độ cao, dùng pitch để chỉnh tốc độ”. Hầu hết mọi người lại làm ngược lại
    • Tôi cũng có sách hướng dẫn, và hồi nhỏ còn cực kỳ thích đọc nó. Nhưng hạ cánh trên tàu sân bay vẫn là một trong những trải nghiệm game khó nhất đời tôi. Tỷ lệ thành công chắc cỡ 1%, và tôi hoàn toàn không hiểu sự khác biệt giữa một lần thành công với một lần thất bại là gì
    • Không chỉ sách hướng dẫn mà trên màn hình cũng có hiển thị thông tin. Chỉ là nó không nói rõ phạm vi sai số cho phép. Nếu biết có thể lệch khoảng ±100 độ cao, ±50 tốc độ thì sẽ dễ hơn nhiều
    • Nếu là mượn bạn hoặc thuê game thì sẽ không có sách hướng dẫn. Cuối cùng tôi cũng không nhớ mình đã học cách hạ cánh kiểu gì, nhưng chắc chắn là hướng dẫn hạ cánh còn khiến mọi thứ rối hơn
  • 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

    • Theo kết quả tìm kiếm Google, chỉ có bài này và trang ảnh núi được lập chỉ mục. Có lẽ đây là bài đăng đầu tiên của site
    • Trên mạng công ty (ZScaler), site này bị phân loại là vũ khí/bom đạn nên bị chặn. Tôi không mở được liên kết đó
  • 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

    • Nhạc nền ở cảnh tiếp nhiên liệu đỉnh lắm, mà video được link lại không có. Là bản khác à? Bản này thì có
    • Vừa bấm vào link là ký ức ùa về nên tôi đóng tab ngay. Hạ cánh trên tàu sân bay đã bực rồi, tiếp nhiên liệu còn ở một đẳng cấp khác. Tự nhiên nhớ thời cày NES xuyên đêm ở nhà bạn, vừa chơi vừa ăn pizza
    • Tiếp nhiên liệu xong còn được nạp lại cả tên lửa nữa, đúng là một hệ thống tiện lợi
    • Nhưng mà máy bay tiếp dầu bay tới 1.400 dặm/giờ thì gần Mach 2 rồi còn gì!
    • Tôi cũng vậy :) Dù thế, việc cứ lặp đi lặp lại mấy thử thách này vẫn rất vui
  • Tự nhiên nhớ đến câu thoại kinh điển “This business will get out of control…”

    • 12 năm qua tôi đã dùng câu này không biết bao nhiêu lần rồi. Clip YouTube
  • Trò này còn xuất hiện trong video của Angry Video Game Nerd
    Video liên quan

    • Ở phần tiếp theo có cảnh AVGN thử hạ cánh. Kỹ thuật gần như ở mức tháo rời máy bay luôn
      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ệ

    • Nếu nói về khoảng cách đồ họa giữa các thế hệ, tôi nghĩ lớn nhất là giữa Super Mario 64 (N64)Resident Evil 4 (GameCube)
      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

    • Bí quyết chỉ có một: lúc ghép thì chỉ di chuyển lên xuống
  • Để 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

    • Trông đúng là có thể từng được viết như thế thật. Tôi tò mò không biết nó được tạo bằng LLM nào
    • Nhưng đoạn mã đó cũng trả về TOO_SLOW_OR_TOO_LOW ngay cả khi lệch quá sang bên phải. Trong bản disassembly gốc thì nó nhảy đến too_far_right
  • 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

    • Thực tế có khi cũng làm được. Hải quân Mỹ từng cho C‑130 hạ cánh trên USS Forrestal
      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

    • Tôi cũng thế. Tôi rất thích game này, nhưng lúc hạ cánh thì lúc nào cũng rơi
      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