- 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의 착륙 시스템은 단순한 조작이 아닌 정확한 수치 기반 판정 로직으로 구성
- 역공학을 통해 레트로 게임의 내부 메모리 구조와 조건 분기 방식을 명확히 확인할 수 있음
- 고전 게임의 설계 정밀도를 보여주는 사례로, 게임 로직 분석 및 복원 연구에 참고 가치가 높음