1P by GN⁺ 12시간전 | ★ favorite | 댓글 1개
  • NES용 Top Gun의 항공모함 착륙 시스템을 역공학으로 분석해 정확한 착륙 판정 조건을 공개
  • 착륙 성공을 위해서는 고도 100~299, 속도 238~337, 항모 정면 조준이 필요
  • 게임 내 MFD의 “Alt. 200 / Speed 288” 표시가 실제로 허용 범위의 중앙값을 제시
  • 속도와 고도는 BCD(이진화 십진수) 형태로 메모리에 저장되며, 특정 주소에서 판정 함수가 수행
  • 오래된 게임의 정밀한 내부 로직을 해독한 사례로, 레트로 게임 분석과 디버깅 학습에 유용

착륙 판정의 기본 조건

  • 착륙 성공을 위해서는 고도 100~299, 속도 238~337, 그리고 항모를 향한 정확한 방향이 필요
    • 이 세 조건은 모두 착륙 시퀀스 종료 시점에 검사됨
  • 게임 화면의 “Alt. 200 / Speed 288” 표시는 실제 허용 범위의 중앙값으로, 플레이어가 목표로 삼기 적절한 수치
  • 고도와 속도는 스로틀 입력과 피치 각도로 조정되며, 방향은 별도 표시 없이 “Right! Right!” 경고로만 피드백됨

메모리 구조와 내부 변수

  • 주요 메모리 주소와 저장 내용
    • $40–$41: 속도(BSD 형식), 허용 범위 238–337
    • $3D–$3E: 고도(BSD 형식), 허용 범위 100–299
    • $FD: 방향(Heading), -32 ~ +32 범위 중 0–7이 착륙 가능
    • $9E: 착륙 판정 결과 저장, 값 0이면 성공
  • 속도와 고도는 BCD(Binary Coded Decimal) 로 저장되어 화면 표시를 단순화
    • 예: 1234는 0x1234(10진 4660) 형태로 저장

착륙 판정 루틴

  • $B6EA 주소의 함수가 착륙 상태를 검사하고 결과를 $9E에 기록
  • 루틴은 고도·속도·방향을 순차적으로 비교하며, 조건을 벗어나면 각기 다른 코드값을 반환
    • 예: 너무 높거나 빠르면 코드 8, 너무 낮거나 느리면 코드 4
  • 모든 조건을 만족하면 LDX #00으로 설정되어 성공 처리

디버깅 및 치트 코드

  • Game Genie 코드 AEPETA를 사용하면 항상 성공 착륙으로 판정
  • 이 코드는 실제 판정 루틴을 우회해 결과를 강제로 성공 상태로 기록

결론

  • NES Top Gun의 착륙 시스템은 단순한 조작이 아닌 정확한 수치 기반 판정 로직으로 구성
  • 역공학을 통해 레트로 게임의 내부 메모리 구조와 조건 분기 방식을 명확히 확인할 수 있음
  • 고전 게임의 설계 정밀도를 보여주는 사례로, 게임 로직 분석 및 복원 연구에 참고 가치가 높음
Hacker News 의견들
  • 비행기를 제대로 착륙시키는 정보는 매뉴얼에 다 있음
    필요한 속도와 고도는 비밀이 아니었는데, 대부분 아이들이 매뉴얼을 안 읽었음
    게임의 진짜 어려움은 반쯤 현실적인 물리엔진 때문이었음. 비행학교 다니던 형이 쉽게 착륙하더니 나에게도 방법을 알려줬음
    속도와 고도는 스로틀과 피치 각도로 조절해야 해서, 단순히 엔진이나 에어브레이크 버튼만 눌러서는 안 됨
    형이 알려준 팁은, 급강하 중에는 속도가 줄지 않으니 코를 살짝 들고 에어브레이크를 열어 속도를 줄인 뒤 수평을 맞추는 것임. 게임이 이걸 꽤 정확히 모델링했음

    • 대부분 아이들이 매뉴얼을 안 읽었다고? 나는 새 게임을 사면 차 안에서 집에 가는 동안 매뉴얼을 여러 번 읽었음. Toys“R”Us에서 산 게임이라면 집에 도착하기 전까지 열두 번은 읽었을지도 모름
    • 착륙할 때의 격언은 “스로틀로 고도를, 피치로 속도를 조절하라”임. 대부분은 그 반대로 함
    • 나도 매뉴얼을 가지고 있었고, 어릴 때는 매뉴얼 읽는 걸 정말 좋아했음. 하지만 항공모함 착륙은 인생에서 가장 어려운 게임 경험 중 하나였음. 성공률이 1%쯤이었고, 성공과 실패의 차이를 도무지 몰랐음
    • 매뉴얼뿐 아니라 화면에도 정보가 표시되어 있었음. 다만 허용 오차 범위가 빠져 있었음. 고도 ±100, 속도 ±50 정도의 여유가 있다는 걸 알면 훨씬 도움이 됨
    • 친구에게 빌리거나 대여한 경우엔 매뉴얼이 없었음. 결국 착륙법을 어떻게 알아냈는지는 기억이 안 나지만, 착륙 지침이 오히려 헷갈리게 되어 있었던 건 확실함
  • 이 블로그는 아카이브 탐색이 어렵게 되어 있음
    다른 글로 가는 링크가 없고, 이 게시물 외엔 접근이 막혀 있음
    blag/postsblag는 403 에러, 루트 페이지는 산 사진 한 장뿐임
    RSS 피드도 없음. 불만은 아니고, 의도된 디자인이라면 존중함

    • Google 검색 결과에 따르면 이 글과 산 사진 페이지 두 개만 색인되어 있음. 아마 사이트의 첫 게시물일 가능성이 높음
    • 회사 네트워크(ZScaler)에서는 이 사이트가 무기/폭탄 카테고리로 분류되어 차단됨. 해당 링크를 열 수 없었음
  • 항공모함 착륙은 어렵지 않았는데, 공중 급유는 정말 힘들었음. 몇 번밖에 성공 못 했음
    게임 영상

    • 급유 장면의 배경음악이 최고였는데, 링크된 영상엔 없네. 다른 버전인가? 이 버전에는 있음
    • 링크를 클릭하자마자 추억이 몰려와서 탭을 닫았음. 항공모함 착륙도 짜증났지만 급유는 차원이 달랐음. 친구 집에서 밤새 NES로 피자 먹으며 놀던 시절이 생각남
    • 급유를 하면 미사일도 함께 보충되는 게 참 편리한 시스템이었음
    • 그런데 급유기 속도가 시속 1,400마일이라니, 거의 마하 2 수준임!
    • 나도 그랬음 :) 그래도 이런 시도들을 반복하는 게 즐거웠음
  • “This business will get out of control…”이라는 명대사가 떠오름

    • 지난 12년 동안 이 대사를 수도 없이 써먹었음. 유튜브 클립
  • 이 게임은 Angry Video Game Nerd 영상에서도 다뤄졌음
    관련 영상

    • 후속편에서는 AVGN이 착륙을 시도하는 장면이 나옴. 거의 해체 수준의 테크닉임
      유튜브 링크
  • 나는 Top Gun은 안 했지만, SNES의 Turn and Burn: No Fly Zone을 즐겨 했음
    세대가 바뀔 때마다 그래픽이 얼마나 발전했는지 지금 봐도 놀라움

    • 세대 간 그래픽 격차로는 Super Mario 64(N64)Resident Evil 4(GameCube) 의 차이가 가장 크다고 생각함
      NES→SNES 전환도 비슷한 수준이었음. PS1→PS2→PS3로 갈수록 3D 시대가 정착돼서 변화가 점점 점진적이 되었음
  • Top Gun 착륙이 어렵다고들 하지만, Captain Skyhawk의 위성 도킹은 훨씬 더 어려움
    RARE의 데모씬 효과가 폭발하는 가운데 도킹해야 함

    • 비결은 단 하나, 도킹할 때 상하 이동만 하는 것임
  • 비교를 위해 Python으로 작성한 착륙 판정 코드 예시를 공유함
    고도, 속도, 방향에 따라 TOO_SLOW_OR_TOO_LOW, TOO_FAST_OR_TOO_HIGH 등을 반환함

    • 진짜 이렇게 생겼을 수도 있겠네. 어떤 LLM으로 생성한 코드인지 궁금함
    • 하지만 코드가 오른쪽으로 너무 치우친 경우에도 TOO_SLOW_OR_TOO_LOW를 반환함. 원문 디스어셈블리에서는 too_far_right로 점프함
  • 이런 시뮬레이터 장난이 너무 좋음
    X‑Plane에서는 737을 항공모함에 착륙시키는 것도 가능함. 연료를 30분치만 싣고, 플랩을 최대한 내리고, 착륙 직전에 주차 브레이크를 걸면 됨

    • 실제로도 가능할지도 모름. 미 해군은 C‑130을 USS Forrestal에 착륙시킨 적이 있음
      물론 737은 공식 수치상 활주로가 훨씬 길어야 하지만, 항모가 바람을 맞받아 항해하면 40노트 이상의 역풍을 얻을 수 있음
  • 어릴 때 이 게임을 했는데, 항공모함에 착륙한 적은 한 번도 없음. 그건 형들의 역할이었음

    • 나도 마찬가지였음. 게임은 정말 좋아했지만, 착륙에서 항상 추락했음
      어느 날 방과 후 보육원에서 친구가 이 게임을 잘 착륙시킨다고 해서 협업 작전을 세웠음
      나는 전투를, 그는 착륙을 맡았고, 함께 Top Gun과 The Second Mission을 몇 시간 만에 클리어했음
      치트나 Game Genie 없이 친구와 함께 깬 몇 안 되는 NES 게임으로 지금도 좋은 추억으로 남아 있음