고전 게임의 코드를 뜯어보는 일은 단순한 향수 이상의 의미를 갖는다. 1990년대 상용 소프트웨어가 어떻게 설계되고 어떤 흔적을 남겼는지 보여주는 살아 있는 사례이기 때문이다. 최근 한 리버스 엔지니어링 분석은 세가의 대표작 '에코 더 돌핀'의 PC판에서 31년간 묻혀 있던 개발자용 숨은 기능을 찾아냈다. 이 게임은 1992년 제네시스 원작을 1993년 세가 CD판으로 확장한 뒤 다시 PC로 이식된 작품으로, 극악의 난이도로 악명이 높다.
콘솔에는 있고 PC에는 없던 것
콘솔판에는 스테이지 건너뛰기와 무적 상태를 포함한 본격적인 디버그 모드 치트가 존재했다. 반면 PC 이용자는 이 어려운 게임을 정공법으로 돌파해야 한다고 알려져 있었다. 그러나 분석가는 게임의 정보(About) 대화상자를 처리하는 함수에서 이상한 코드를 발견했다. 대화상자가 닫힐 때 창의 오른쪽 아래 모서리가 화면 밖으로 나갔는지 확인하고, 그 순간 Shift와 Ctrl 키의 상태를 GetKeyState로 조회한 뒤 두 키가 눌려 있으면 메뉴 ID 0x70을 LoadMenuA로 불러오는 구조였다.
실제로 이 조건을 맞추면 메인 창에서 Shift+Ctrl을 누른 채 우클릭했을 때 숨겨진 치트 메뉴가 열린다. 메뉴의 Stage 항목은 시작 스테이지를 고르게 해주며, 원하는 곳을 선택하고 F2를 누르면 그 지점부터 플레이가 시작된다. 'test only'로 표시된 항목을 빼면 대부분 정상 작동한다. Life 항목은 체력과 산소를 무제한으로 만들어 주는데, 이때 두 수치를 표시하던 게이지 자체가 화면에서 사라진다. 치트 메뉴가 활성화되면 화면 하단에 에코의 위치 좌표가 표시되고, 캐릭터가 움직일 때마다 숫자가 바뀐다.
한 겹 더 깊은 숨겨진 조건
흥미로운 대목은 이 정보 대화상자 처리 함수가 더 까다로운 조건도 검사한다는 점이다. 코드는 메시지 인자가 마우스 오른쪽 버튼 더블클릭(WM_RBUTTONDBLCLK) 이벤트인지, wParam에 MK_SHIFT·MK_CONTROL·MK_LBUTTON 비트가 모두 설정되어 있는지, 커서가 대화상자 모서리에 있는지를 함께 확인한다. 즉 Shift+Ctrl+왼쪽 버튼을 누른 상태에서 대화상자의 오른쪽 아래 모서리를 더블 우클릭하라는 뜻이다. 이 조작에 성공하면 확인 버튼의 'OK' 표시가 'kO'로 뒤집힌다.
그 상태로 Shift+Ctrl을 계속 누른 채 대화상자를 닫으면 치트 메뉴에 Easy, CD check, border라는 항목이 추가로 나타난다. 코드상 Easy는 대시 동작의 쿨다운 시간을 줄이려는 의도로 보이지만 실제 체감 효과는 뚜렷하지 않았다고 분석가는 전한다. CD check는 '이 프로그램은 원본 CD에서만 실행할 수 있다'는 경고 화면을 없애준다. border는 화면 가장자리에 일종의 자원 게이지를 두르려던 기능으로 추정되나, 소매용 정식 버전에서는 실제로 동작하지 않는 것으로 보인다.
실무자가 눈여겨볼 지점
이 발견은 단순한 게임 비화를 넘어 몇 가지 시사점을 준다. 첫째, 개발 편의를 위한 디버그 기능이 릴리스 빌드에서 제거되지 않고 그대로 남아 특정 입력 조합으로 활성화될 수 있다는 점은 오늘날 소프트웨어 출시 관리에도 여전히 유효한 경고다. 숨겨진 진입점은 의도치 않은 접근 통로가 되며, 실제로 CD check처럼 복사 방지 검사를 무력화하는 기능까지 포함되어 있었다. 둘째, 이런 기능을 켜는 조건이 창 좌표 계산과 윈도우 메시지·비트 플래그 검사에 얽혀 있다는 사실은, 소스 코드 없이 바이너리만으로 프로그램의 숨은 로직을 복원해내는 정적 분석의 위력을 잘 보여준다.
다만 이 분석에는 분명한 한계도 있다. Easy의 효과가 미미했다거나 border가 작동하지 않는다는 관찰은 분석가 개인의 실행 경험에 기댄 것이어서, 다른 빌드나 환경에서 결과가 달라질 여지가 있다. 또한 이 기능들이 개발 도중의 미완성 잔재인지 의도적으로 남긴 이스터에그인지도 코드만으로는 단정하기 어렵다. 그럼에도 Stage와 Life 치트를 활용하면 지금까지 소수만 도달했던 에코의 엔딩을 직접 볼 수 있다는 점에서, 오래된 바이너리 한 조각이 여전히 새로운 이야깃거리를 품고 있음을 보여주는 사례라 할 만하다.