마이너스 월드

슈퍼 마리오 브라더스에서 버그를 이용해 마이너스 월드로 갈 수 있다는 것은 잘 알려져 있다. 젤다의 전설 1에서도 이에 대응하는 마이너스 월드가 있다는 것이 최근 유튜브 영상을 통해 알려짐.

젤다의 전설 1에서 등장하는 맵은 8*16개이지만 실제로는 맵의 위치를 나타내는 인포는 1바이트=16*16개라 절반($00-$7F)만을 쓰는 것이고 나머지 절반에 위치하게 되면 스타트 지점으로 돌아가도록 예외처리를 해놓는데 SKELUX가 코드에서 해당 부분을 수정해 나머지 8*16개의 맵에 억세스함. 8-bit signed number에서 이 $80-$FF에 해당하는 수가 음수이니 여러모로 마이너스 월드가 되는 셈. 영상을 통해 어떤 맵이 나타나는지 볼 수 있다. 역시 전반적으로 불안정하고… 비슷비슷하고 지엽적인 버스들만 주로 나타나는데다 구체적으로 어떤 코드를 어떻게 바꿨는지 등의 설명이 없어 전반적으로 좀 지루한 감이 있음.

앞에서 언급한 슈퍼 마리오 브라더스의 마이너스 월드에 대해 설명하는 영상. 월드 1-2에서 워프존을 벽 사이에 두고 조건을 만족시키는 점프를 하면 그 벽을 통과할 수 있는데, 그렇게 워프존에 다다른 상태로 파이프에 들어가면 “월드 -1″로 뜨는 버그 레벨로 들어갈 수 있게 된다.

이 레벨은 월드 7-2와 동일한데, 맨 오른쪽 파이프를 들어가면 다시 맨 처음으로 돌아가게 되어 깨는 것이 불가능한 레벨이다. 이 영상에서는 왜 이런 버그가 나타나게 되는지를 설명해주고 있다.

슈퍼 마리오에는 3개의 워프존이 있고, (각각 월드 1-2, 4-2, 그리고 4-2의 윗부분에 있다. 세 번째 워프존은 각각의 파이프들이 어느 레벨로 워프시키는지와 그 레벨에 해당하는 숫자의 폰트는 롬 $87F2에서 지정된다. 여기서 파이프 하나만 있는 두 번째 워프존의 경우 양옆에 $24가 있는데, 이는 슈퍼 마리오 폰트에서 $24가 빈 공간에 해당되기 때문. 그래서 코드를 수정해 두 번째 워프존의 왼쪽에도 파이프를 놓고 들어가면 우리가 아는 그 마이너스 월드에 진입하게 된다. 즉 마이너스 월드란 이름이 붙게 된 월드 -1은 실은 월드 36-1이고, 36(=$24)에 해당하는 폰트가 공백이라 -1만 남게된 것.

그러면 왜 두 번째 워프존이 아닌 첫 번째 워프존에서 왼쪽 파이프에 들어갔는데도 마이너스 월드로 진행되는 것인가. 실은 모든 워프존은 다 똑같은 오브젝트이고, 어떤 워프존을 로딩할지는 $06D6의 값으로 지정된다. 이 값이 디폴트 $00이면 어떤 워프존도 지정되지 않는다. 만약 워프존에 다다르면 경우를 나누는데, 먼저 월드 1인지를 따져 맞으면 $04로, (월드 1-2의 첫 번째 워프존에 해당) 그렇지 않다면 지하 맵인지를 따져 맞으면 $05로, (두 번째 워프존) 그렇지 않다면 $06으로 (세 번째 워프존) 지정된다. 지정되는 순간은 “WELCOME TO WARP ZONE!”이란 메세지가 뜨는 타이밍으로 확인할 수 있다. 이 메세지를 띄우고, $06D6의 값에 4를 뺀 값에 해당하는 순서의 워프존으로 인식한다. (각각 $00, $01, $02에 해당)

월드 1-2의 경우 지하에서 지상으로 나오는 파이프(워프존을 벽 사이에 둔 곳) 근처에 도달하면 스크롤락이 발생하고 이 때 $06D6의 값을 $01로 바꾼다. 그런데 버그를 통해 벽을 뚫고 지나가고 왼쪽 파이프로 들어가면, 이 값이 올바른 워프존에 해당하는 값($04)으로 바뀌는 과정 없이 $01으로 고정되기 때문에, (정상적인 경우라면 $05에서 4를 뺀 $01에 해당하는) 두 번째 워프존의 왼쪽 파이프, 즉 월드 36-1=마이너스 월드로 진입하게 되는 것이다. 이와 같은 이유로, 버그 진입 후 워프존 환영 메세지를 띄우지 않게 조심해서 가운데 파이프로 들어가면 두 번째 워프존의 가운데 파이프, 즉 월드 5-1로 진행하게 된다.

그러면 왜 월드 36-1은 7-2의 변종이 되는가? 가야할 월드 넘버가 $24로 지정되면 이를 오프셋으로 써서 $33(=51)을 얻고, 에리어 주소 테이블의 시작지점에서부터 51번째 바이트를 읽는다. 이 테이블은 원래 36바이트의 길이만을 갖고 그 다음 부분은 적 데이터 주소 테이블이기 때문에 예상치 못한 값 $01을 얻게 되고, 이에 해당하는 월드가 마침 2-2/7-2이기 때문에 월드 7-2와 비슷하게 나오는 것.

doppelganger가 작성한 노트를 통해 더 구체적으로 마이너스 월드의 작동에 대해서 알 수 있다. 이 영상 제작자도 이쪽을 참조한 듯.

트윗을 정리하고 내용을 추가. (2019/01/06)

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google photo

Google의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중