탑건 NES 항공모함 착륙의 비밀
(relaxing.run)- 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/posts나 blag는 403 에러, 루트 페이지는 산 사진 한 장뿐임
RSS 피드도 없음. 불만은 아니고, 의도된 디자인이라면 존중함- Google 검색 결과에 따르면 이 글과 산 사진 페이지 두 개만 색인되어 있음. 아마 사이트의 첫 게시물일 가능성이 높음
- 회사 네트워크(ZScaler)에서는 이 사이트가 무기/폭탄 카테고리로 분류되어 차단됨. 해당 링크를 열 수 없었음
-
항공모함 착륙은 어렵지 않았는데, 공중 급유는 정말 힘들었음. 몇 번밖에 성공 못 했음
게임 영상- 급유 장면의 배경음악이 최고였는데, 링크된 영상엔 없네. 다른 버전인가? 이 버전에는 있음
- 링크를 클릭하자마자 추억이 몰려와서 탭을 닫았음. 항공모함 착륙도 짜증났지만 급유는 차원이 달랐음. 친구 집에서 밤새 NES로 피자 먹으며 놀던 시절이 생각남
- 급유를 하면 미사일도 함께 보충되는 게 참 편리한 시스템이었음
- 그런데 급유기 속도가 시속 1,400마일이라니, 거의 마하 2 수준임!
- 나도 그랬음 :) 그래도 이런 시도들을 반복하는 게 즐거웠음
-
“This business will get out of control…”이라는 명대사가 떠오름
- 지난 12년 동안 이 대사를 수도 없이 써먹었음. 유튜브 클립
-
이 게임은 Angry Video Game Nerd 영상에서도 다뤄졌음
관련 영상- 후속편에서는 AVGN이 착륙을 시도하는 장면이 나옴. 거의 해체 수준의 테크닉임
유튜브 링크
- 후속편에서는 AVGN이 착륙을 시도하는 장면이 나옴. 거의 해체 수준의 테크닉임
-
나는 Top Gun은 안 했지만, SNES의 Turn and Burn: No Fly Zone을 즐겨 했음
세대가 바뀔 때마다 그래픽이 얼마나 발전했는지 지금 봐도 놀라움- 세대 간 그래픽 격차로는 Super Mario 64(N64) 와 Resident Evil 4(GameCube) 의 차이가 가장 크다고 생각함
NES→SNES 전환도 비슷한 수준이었음. PS1→PS2→PS3로 갈수록 3D 시대가 정착돼서 변화가 점점 점진적이 되었음
- 세대 간 그래픽 격차로는 Super Mario 64(N64) 와 Resident Evil 4(GameCube) 의 차이가 가장 크다고 생각함
-
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노트 이상의 역풍을 얻을 수 있음
- 실제로도 가능할지도 모름. 미 해군은 C‑130을 USS Forrestal에 착륙시킨 적이 있음
-
어릴 때 이 게임을 했는데, 항공모함에 착륙한 적은 한 번도 없음. 그건 형들의 역할이었음
- 나도 마찬가지였음. 게임은 정말 좋아했지만, 착륙에서 항상 추락했음
어느 날 방과 후 보육원에서 친구가 이 게임을 잘 착륙시킨다고 해서 협업 작전을 세웠음
나는 전투를, 그는 착륙을 맡았고, 함께 Top Gun과 The Second Mission을 몇 시간 만에 클리어했음
치트나 Game Genie 없이 친구와 함께 깬 몇 안 되는 NES 게임으로 지금도 좋은 추억으로 남아 있음
- 나도 마찬가지였음. 게임은 정말 좋아했지만, 착륙에서 항상 추락했음