원작 · 진동팩 버전 슈퍼 마리오 64 | 리메이크 | |
<colbgcolor=#ce0000><colcolor=#fff>스테이지 · 등장인물 · OST | ||
유저 콘텐츠 | 스피드런 (대한민국) · 버그 · A 버튼 챌린지(64) · B 버튼 챌린지(DS) 유튜버 · 개조 롬 · Super Mario 64 Bloopers · So long, gay Bowser! | |
슈퍼 마리오 시리즈 · 슈퍼 마리오 3D 컬렉션 |
1. 개요2. 속도 버그
2.1. 뒤로 멀리뛰기
3. 디자인 버그4. 게임 엔진 버그2.1.1. 옆방향 뒤로 멀리뛰기(Side BLJ)
2.2. HyperSpeed Flying2.3. Hyper Speed Walking(HSW)2.4. 속도 초기화 무시 버그2.5. 속도 보존의 법칙2.6. 기타4.1. 클로닝(Cloning)4.2. HOLP 고정 버그4.3. 모자 복제 버그4.4. Pause Buffering HitStun4.5. 토끼 버그4.6. 투척병 버그4.7. 1인칭 버그4.8. 평행우주4.9. 버그성 벽차기4.10. 게임 충돌 버그4.11. 기타
5. 미해결 버그6. 여담1. 개요
슈퍼 마리오 64의 버그들을 모아 놓은 문서다. 초창기 3D 마리오 게임인만큼 버그가 정말 많다.슈퍼 마리오 64의 버그를 전부 집대성한 문서를 보고 싶다면 여기로(영어).
2. 속도 버그
2.1. 뒤로 멀리뛰기
↑뒤로 멀리뛰기의 역사 |
Backwards Long Jump, 줄여서 BLJ라 불리며 국내에서는 무한뛰얏후, 무한멀리뛰기, 이야야야야야야야얏후 등으로 잘 알려져있는 버그다. 일본어로는 ケツワープ(엉덩이 워프)라고 불린다. 멀리뛰기 동작은 기본적으로 앞으로 튀어나가게 되나 모션 중에 뒤 방향키를 입력하면 속도가 느려지는데, 이 감속에는 제한이 없어서 점프 방향과 정반대로 뒤로 움직일 수도 있다. 그런데 초기판에선 마리오가 뒤로 움직이는 속도에 제한이 전혀 없었다. 정확히는 양(+)의 속도에서는 48의 속도 제한이 걸려있지만 음(-)의 속도에서는 속도 제한이 없었다. 물론 마리오를 뒤로 움직일 수 있는 조작은 매우 제한적이어서 일반적인 플레이 상황에선 문제가 없었으나, 이 뒤로 멀리뛰기를 통해 속도의 제한 없이 뒤로 가속할 수 있는 방법이 생겨나 버렸고, 이것이 2차적으로 무궁무진한 테크닉과 추가적인 버그를 만들어내었다.
슈퍼 마리오 64 TAS의 기본적이고 필수적인 버그 중의 하나로, 멀리뛰기를 뒤로 하면 할 때마다 속도가 1.5배로 증가하게 되는데, 이 속도가 줄어드는 데에는 시간이 걸리기 때문에 멀리뛰기를 하면서 속도가 점점 증가하여 엄청난 속도로 벽을 뚫을 수도 있는 버그다. 타임 어택에서도 매우 중요한데 이 버그가 없으면 120스타와 70스타 이외의 스피드런은 전부 불가능해지기 때문이다. 16스타와 1스타 0스타의 스피드런은 이 버그의 존재 때문에 성립된다. 진동팩 대응버전이 스피드런에선 지금도 찬밥으로 취급되는 이유다. 스피드런에서는 사실상 메이저 부문에 해당하는 5개 부문중 3개 부문이 이 버그가 없었으면 아예 나올 수도 없었을 정도니 이 버그가 마리오 64 스피드런에 끼친 영향은 어느정도인지 알 수 있다.
이 버그를 발생시키는 방법은 의외로 쉽다.[1] 대신 TAS 수준으로 세밀한 컨트롤이 아닌 이상 오직 계단이나 천장이 낮은 곳, 특수한 급경사로, 상승하는 발판 위에서만 가능하다.
- 먼저 앞으로 멀리뛰기를 한 후에 바로 반대 방향키를 눌러 뒤로 멀리뛰기를 한다.
- 그리고 Z키를 눌러 숙인 상태를 유지하면서, 뒤를 누른 상태로 점프키를 연타하면 된다. 오래하다 보면 손가락이 좀 아플 수 있다. 제일 연습하기 좋은 곳은 성 최상층에 있는 무한의 계단.
타이밍만 잘 맞추면 하는건 크게 어렵지 않다. 뒤로 멀리뛰기 후 계단에 떨어져서 맞닿는 타이밍에 점프키가 정확히 눌린다면 BLJ는 쉬울 것이다. 물론 일반적인 게임 속도에서는 점프키를 연타하다 보면 어느 순간 타이밍이 맞아서 되는 것이다. 툴을 사용해서 게임 속도를 느리게 한 다음 타이밍 맞춰서 해보면 오히려 더 쉽다.
추후의 진동팩 대응 버전에서는 수정되어서 초기 북미판, 일본판에서만 사용 가능한 버그다. 그런데 특이하게도 버추얼 콘솔 북미판(버추얼 콘솔 일본판은 진동팩 대응 버전을 가지고 와서 사용 불가능하다)에서는 사용할 수 있다. 진동팩 대응 버전을 기반으로 한 슈퍼 마리오 3D 컬렉션에서도 이 버그가 막혔다.
그러나 스위치 온라인 추가팩으로 나오는 버전에서는 일판은 진동팩 대응 버전이나 그 외 지역에서는 초기버전으로 실행이 가능하기 때문에 버그 사용이 다시 가능해졌다.
2.1.1. 옆방향 뒤로 멀리뛰기(Side BLJ)
멀리뛰기를 하면 생기는 옆방향 판정을 사용하는 뒤로 멀리뛰기다. 계단 지형에서만 사용할 수 있다. 계단의 방향에 완전히 수직으로 방향을 잡은 뒤, 방향을 아주 약간만 내려가는 쪽으로 조금 움직여서 뒤로 멀리뛰기를 하면 된다.(예를 들어 위 영상과 같은 곳에서는 스틱을 오른쪽+위로 잡아야 한다.) 이 상태에서 스틱을 올라가는 쪽의 45도 각도로 잡으면 연속으로 뒤로 멀리뛰기를 함으로서 속도를 늘릴 수 있다.[2] 하지만 RTA로 하기에는 상당히 어렵다. 원리가 기존 방식과 다르고 계단 블럭에 거의 정확히 맞춰야 하며, 각도를 맞춰도 연타를 기존 BLJ보다 훨씬 빨리 해야 하기 때문이다.[3] TAS에서는 프레임 단위 조작 및 정확한 방향을 사용하므로 쉽게 사용할 수 있다.[4]
2.2. HyperSpeed Flying
먼저 날개모자를 먹은 뒤에, BLJ 등을 이용해 속도를 높인 다음, 잘 조작하여 3단 점프를 해서 날면 속도가 엄청나게 빨라진다. 너무 빨라서 느리게 해서 조작하는 방법 외에는 컨트롤이 어렵다.영상을 직접 보자.
2.3. Hyper Speed Walking(HSW)
가파른 경사로에서 마리오가 뒤로 미끄러지는 이유는 게임에서 마리오에게 음의 방향의 속도를 가하기 때문이다. 특히 물에 잠겨있는 경사로에서는 항상 가속도가 마리오가 향하는 방향의 정반대로의 방향으로 가해진다. 따라서 마리오가 경사로의 기울기에 대해 완전히 수직으로 움직이게 되면, 경사로가 계속 있는 한 마리오는 그 경사로의 수평 방향으로 계속 가속도를 받을 수 있다. 이 버그에서 마리오는 뒤로 걷는 애니매이션을 가지기 때문에 hyper speed walking이라고 부른다.경우에 따라서는 가속도를 무한히 받을 수 있는 경우가 있다. 만일 경사로 옆에 수평방향에 수직[5]인 벽이 있거나 마리오 바로 위에 천장이 있다면 마리오는 속도 때문에 다른 곳으로 튕겨지지 않는 한 계속 가속을 할 수 있다.
앞서 서술한 BLJ에 비해 가속도가 매우 작고 적용할 수 있는 범위가 매우 한정되어 있기 때문에 타임어택 TAS에서는 쓰지 않는 버그이나, 어떤 TASer가 올린 영상에서 속도를 무려 12시간이나 올리는 데 쓰여 화제가 된 적이 있다. 해당 항목 참조.
여담으로 리메이크인 슈퍼 마리오 64 DS에서도 고쳐지지 않은 버그다(...)
2.4. 속도 초기화 무시 버그
슬라이딩, 벽에 박기를 단 한 프레임만 하면 이로 인한 속도의 초기화(슬라이딩을 하면 속도가 최대 100으로 초기화된다.)가 이루어지지 않는다. 그리고 벽차기를 벽에 박자마자(벽에 박는 프레임에)하면 벽차기로 인해 생기는 속도 초기화가 발생하지 않기 때문에 이를 이용해서 약 400정도까지 스피드를 높일 수 있다. 첫프레임에 벽차기를 하는 것을 HSWK(Hyper Speed Wall Kicks)라고 부르며, firsty라고도 한다. 하지만 계속 하다 보면 어지러움을 느낄 수 있다.첫프레임 벽차기의 현재까지 알려진 RTA에서의 최고기록은 52번이다. Frame Perfect[6]를 요구하기 때문에 매우 어렵다.
실제로 이 버그를 이용한 TAS도 있다. 진동팩 대응 버전[7] 1스타 플레이 영상
2.5. 속도 보존의 법칙
슈퍼 마리오 64의 속도는 일반 속도와 슬라이딩 속도로 구분되는데, 일반적인 상황에서는 일반 속도가 슬라이딩 속도를 덮어씌우고, 슬라이딩을 하는 상태에서는 슬라이딩 속도가 일반 속도를 덮어씌운다.위 BLJ 등을 이용해 속도를 엄청나게 높인 후, 조작을 통해 물속에 들어가거나 나무, 봉에 매달리는 행동 등을 하면 즉시 일반 속도는 0이 되지만, 슬라이딩 속도는 기존의 속도가 유지된다. 따라서 거기에서 빠져나오는 순간 어떤 방식으로든 슬라이딩을 하면 0이 되기 전의 속도가 돌아온다. 보통 마리오가 땅에 착지하거나 하면 일반 속도가 슬라이딩 속도를 덮어씌우지만 위같은 몇몇 동작은 일반 속도가 슬라이딩 속도를 덮어씌우지 않음으로서 그 동작이 해제될 때까지 계속 유지한다. 여기서 공중으로 떨어지면 가속도가 다시 발동해 가속도의 방향[8]에 따라 붕 뜨거나 미끄러지게 된다. 펀치 같은 동작 또한 마리오가 땅에서 가속도를 유지시키며 이동할 수 있게 한다.
또한, 메탈 마리오 상태로 물속에 들어간 상태에서도 똑같이 작용한다.
여담으로 디버그 치트를 이용해 저장된 속도를 확인할 수도 있으니 참고바란다.
2.6. 기타
이외에도 꽤 많다.- 10k 버그
특정 조건을 만족할 때 속도를 배로 늘리거나 배로 줄일 수 있는 버그다. 20000 이상의 속도를 가진 상태에서 이동 방향의 반대쪽으로 방향을 꺾는 동시에 미끄러질 수 있는 경사면에 닿아야 한다. 줄어들거나 늘어나는 속도의 배수는 현재 가진 속도/10000이다. - 프레임 워킹
일반적으로는 오를 수 없는 일부 가파른 경사로를 오를 수 있게 하는 버그. 스틱을 최대로 꺾기-중립을 반복하면 된다. 에뮬레이터를 사용한다면야 쉽지만 실제 컨트롤러로는 매우 어렵다.[9] - C^ 트릭
위의 프레임 워킹이 불가능한 일부 경사로의 경우 마리오가 물에 반쯤 잠겨있지 않는 이상 무슨 일이 있든 마리오를 미끄러지게 만든다. 이 경사로에 닿는 순간 1인칭으로 전환하면 슬라이딩 속도의 제한(100)이 사라지기 때문에 계속 속도를 낼 수 있다. - 등껍질 역방향 가속 버그
위의 Hyperspeed Walking과 비슷하게 등껍질을 탄 상태로 마리오의 방향을 경사로의 방향의 수직으로 잡으면 마리오는 음의 방향의 속도를 계속 낼 수 있다. - Hyperspeed punching
가만히 있으면 미끄러지는 아무 경사로 위에 있는 상태에서 천장 또는 경계 밖으로 펀치를 무한히 하면 속도를 무한히 낼 수 있다. - 페드로 지점
바닥 판정(정확히는 바닥 판정이 끝나는 낭떠러지)와 천장 판정이 160유닛 이내로 맞닿은 지점. 이곳에서 마리오는 속도 때문에 튕겨지지 않는 이상 낙하 모션을 가지고 있는 상태로 속도를 무한히 낼 수 있다. - Hyperspeed Water Sliding
경사로에 C^ 트릭을 경사로에 대해 수직으로 쓰면 원래는 역방향 속도가 만들어져야 하지만 물에 잠겨있을 경우 정방향으로 사용된다. 다시 물에 들어가는 것으로 속도를 보존할 수 있다. - 수직 속도 보존 버그
마리오의 수직 속도는 일반적으로 땅에 착지하면 0이 되지만 특정상황에서 이 속도를 보존할 수 있는 버그다. 마리오 아래의 바닥이 없어짐으로서 보존된 속도를 사용할 수 있다.
3. 디자인 버그
3.1. 투명벽 버그
투명벽 버그 설명 영상.
투명벽 버그는 통칭으로, 여기서 말하는 투명벽은 사실 대부분 천장 판정이며 일부 스테이지 바깥 판정도 있다.
슈퍼 마리오 64의 물리엔진상에서 천장 또는 스테이지 바깥 판정은 위로 무한히 뻗어나가며, 바닥을 만나면 해당 판정이 없어진다. 때문에 천장 또는 스테이지 바깥 부분 위에 바닥이 있는 경우, 바닥 위에서는 해당 판정들이 없어야 정상이지만, 맵 디자인 오류나 부동소수점 오류로 인해 해당 판정들이 바닥의 미세한 틈을 뚫고 나오는 경우가 생긴다.
이 버그로 악명높은 스테이지가 높고 높은 마운틴의 통나무 구간과 똑딱 시계의 시계추 위 구간으로, 유독 이 버그가 발생하는 지점이 많아서 수시로 터져나오는 억까로 유저들의 혈압을 올리고 있다.
3.2. 벽 속의 스타 획득 버그
꽈당킹의 요새에 있는 미션 중에 벽을 부숴서 스타를 획득하는 미션이 있다. 원래는 대포를 이용해 벽을 부순 다음 스타를 먹어야 하지만, 스타의 히트박스가 벽보다 더 크기 때문에 위치를 잘 맞추고 벽에 닿으면 대포 없이도 먹을 수 있다. #[10]3.3. 꽈당꽈당 통과 버그
꽈당킹의 요새에 있는 꽈당이들을 쉽게 죽일 수 있는 버그다. 초보자들도 쉽게 해낼 수 있을 정도로 방법은 간단하다. 꽈당이가 넘어지기 직전에 점프+엉덩이 찍기 콤보를 하면 된다. 그러면 꽈당이는 마리오를 뚫고 넘어진다.이 버그를 사용하는 좋은 예시: #
3.4. 김수한무 스킵 버그
스토리를 처음 시작하고 성 입구 바로 앞의 다리로 가면 카메라맨인 김수한무가 성 입구 문에서 나타나서 카메라 조작 관련 설명을 해주는데, 바로 옆 다리 난간으로 멀리뛰기를 해서 넘어가면 김수한무를 만나지 않고 바로 스킵할 수 있다.[11] RTA에서도 쓰이는 버그이다. TAS에서는 슬라이딩을 이용해 속도를 높여서 2단 점프로 그냥 넘어가는데, 다리에 닿지 않고 문 앞까지 바로 넘어가면 김수한무가 안 나온다. 그러나 이 루트는 1 Key 카테고리의 개발과 함께 바로 성의 지하로 입장하게 되어 TAS에선 더 이상 쓰이지 않는다. 버그 원리 설명멀리뛰기를 이용해 스킵하는 영상.
3.5. 로비 버그
피치 성 메인 로비에서 할 수 있는 버그 중 하나이다. 성에 처음 들어와서 가운데 계단 양 쪽에 있는 나무 문으로 들어간 뒤에 오른쪽+앞쪽을 눌렀다가, 착지하기 직전 오른쪽을 떼고 대신 왼쪽을 누르면 된다.
또는 사진과 같은 비슷한 위치에 서서 2단점프를 하면 아래 사진과 같이 올라올 수 있다. 또는 어렵지만 옆돌기 점프를 통해서도 올라올 수 있다. TAS에서는 문으로 들어오고 바로 떨어져서 땅에 착지 후 바로 점프하면 2단 점프가 되는 것을 이용해 올라간다. RTA에서도 가끔 쓰기는 한다.
반대쪽도 같은 방법으로 하면 되며, 위 사진 속 위치에서 멀리뛰기를 해서 BLJ도 할 수 있다. 실제로 구 TAS 타임어택에서 쓰였던 버그. 이후의 TAS 루트는 조금 바뀌어서, 0/1스타 2 Key 카테고리에서는 폭탄병의 전쟁터로 들어가는 문 바로 앞의 계단에서 Side BLJ를 해서 바로 암흑 세계의 쿠파로 이동한다. 그러나 RTA에선 시점 때문에 계단에서 BLJ가 매우 어려워서 위의 방식을 사용한다.
3.6. 이글루 뚫기 버그
스노우맨 랜드의 이글루는 이글루 안으로 기어들어가야 들어갈 수 있다. 그러나 이글루를 막는 배리어 바깥으로 워프 존의 판정이 살짝 튀어나와 있어, 이 판정을 이용하면 이글루를 뚫고 이글루 안으로 들어갈 수 있다.3.7. 기타
- 벽이 되기 위한 조건이 굉장히 빡빡하기 때문에[12], 벽으로 디자인된 부분이 벽이 되지 못하고 바닥이나 경사로, 천장으로 남는 상황도 일어난다.
- 거대 꼬마 아일랜드는 개발 중 맵 디자인이 변경되었는데, 코인을 이 디자인에 적용하지 못해 2개의 코인이 벽 속에 갇혀 있다.
- 보통 굼바는 하나하나가 따로 있지 않는 이상 3마리씩 붙어있는데, 천공의 대결에 있는 굼바는 2마리이다. 나머지 한 마리의 굼바는 마리오가 월드 밖으로 떨어졌다고 판정하는 지점보다도 아래에 있는데, 원래 스폰 지점에 바닥이 없어서 이렇게 되었다고.
4. 게임 엔진 버그
4.1. 클로닝(Cloning)
들어올림과 파괴가 모두 가능한 오브젝트를 파괴되기 직전에 잡아올리는 버그다. 일반적으로 오브젝트를 잡는다고 판정하는 시간은 0프레임으로 즉발하지만 유일하게 펀치하여 잡는데에는 2프레임이 소요된다. 즉 그 2프레임안에 파괴된 오브젝트를 들어올림으로 발생하는 버그다.4.1.1. 폭탄병 버그
대부분의 TASer나, 유저들은 다 아는 버그다.먼저 폭탄병을 집은 후, 폭탄병이 어떻게든 터지기 직전에 다시 집으면 타이밍에 따라 두가지의 경우가 생긴다.
- 커진 폭탄병을 들고 있다.
- 폭탄병이 터지는 효과와 함께 코인이 나왔지만 여전히 폭탄병을 들고 있다.
- 이를 이용해 폭탄병을 가까이에 있는 다른 오브젝트로 바꿀 수 있다. 이를 Cloning이라 한다.[15]
위와 같이 다양한 오브젝트들을 들 수 있다.
4.1.2. 코인 박스 버그
작은 박스를 이용해 위의 폭탄병 버그처럼 할 수 있는 버그.하는 방법은 간단하게 박스가 없어지기 직전에 다시 집으면 된다. 폭탄병 버그와 같지만 타이밍이 더욱 중요시되며 방법은 세부적으로 두가지로 나뉜다.
- 박스를 던진 후 벽에 닿아서 터지기 직전에 다시 집는다.
- 박스를 땅에 내려놓은 후[16] 시간이 지나(30초) 없어지기 직전에 다시 집는다.
마찬가지로 각종 오브젝트로 만들 수 있다.
4.1.3. 원리
Vacant Slot #n, 일반적으로 물리적 형체가 있는 데이터를 오브젝트(개체)라고 부르며 이러한 오브젝트들을 인게임에 반영하게 할 수 있는 시스템을 오브젝트박스(OBJ)라고 부른다. 오브젝트는 일정 범위 내에 마리오가 존재할 때 스폰 또는 리스폰이 되는데, 이때 스폰된 오브젝트를 오브젝트박스가 관리하게 된다. 오브젝트박스의 관리할 수 있는 최대 오브젝트 수는 240이며 이를 넘겨 오브젝트가 더 로드되려 하면 게임이 튕기게 된다. 따라서 마리오으로부터 일정한 거리에 있는 오브젝트를 온오프함으로 게임의 부담을 줄여주는 역할을 하며 상기했듯 리스폰의 역할도 한다. 또, 물리값이 없는 시각적인 오브젝트[17] 또한 관리한다.위 오브젝트들이 오브젝트박스에 추가되는 것을 로드, 오브젝트가 없어지는 것을 언로드라고 한다. 여기서부터 클로닝의 핵심이 시작된다. 5개의 오브젝트를 로드했다고 하자. 이때 오브젝트박스가 사용하는 칸은 로드한 순서대로 5칸이 된다. 이때 오브젝트를 3개 제거(언로드)했을 경우 사용하는 칸은 2칸이 된다.[18] 그렇다면 나머지 3칸은 어디로 갔을까? 바로 이것이 핵심. 언로드 된 후의 빈 박스는 그 자리에 계속 있는 게 아니라, 사용되고 있는 박스의 마지막자리의 바로 뒷자리에 한꺼번에 역순으로 묶인 채 옮겨진다. 박스를 숫자로 표현해보자면, 순서대로 로드된 박스 12345에서 235를 언로드 했을 때 박스 순서는 14|532가 된다. 물론 박스 자체에 주어진 이름은 없지만 그렇다고 가정해본 것이다. 위와는 별개로, 빈 오브젝트박스의 순서를 위해 붙여진 임시적인 박스의 이름을 VS#n라고 한다. VS#의 n은 활성화된 마지막 오브젝트박스의 다음 박스를 기준으로 오름차순으로 결정되고 이는 가변적이기 때문에 오브젝트의 활성화에 따라 얼마든지 변할 수 있다. 그 예로 활성화된 박스를 ■, 비활성화된 박스를 □로 표현한다고 하면, ■■■□□에서 마지막 박스의 n값은 2이고, ■□□□□에서 마지막 박스의 n값은 4다. TAS를 다루는 분이라면 이 원리를 먼저 인지하도록 하자.
도입에서 기술한 내용으로 진행해 보자. 그 방법으로 마리오가 무언가를 들어올린 상태는 그 오브젝트를 담당한 오브젝트박스의 VS#에 저장이 된다. 여기서 클로닝이 시작된다. 마리오가 들어올린 오브젝트의 스폰범위의 바깥으로 나가면 들고 있는 오브젝트가 완전히 언로드되어 해당 오브젝트의 VS#박스는 빈 상자가 되고[19], 마리오가 들고 있는 오브젝트박스는 언로드 되었기 때문에 박스의 순서가 뒤로 밀려난다. 만일 일정거리 갔다가 다시 되돌아간다면 없어야 할 오브젝트가 멀쩡히 있다. 마리오가 들고 있는 오브젝트는 파괴되는 과정을 둔 원래의 오브젝트와 같으면서도 독립적인 존재이기 때문에 이런 일이 발생하는 것이다[20]. 이렇게 하면 클로닝의 첫 단계를 성공한 것이다.
이제 빈 오브젝트박스를 들고 있는 마리오가 이동하여 순서에 맞춰 굼바가 로드되었다면 들고 있는 오브젝트박스에 굼바가 추가됨으로써 마리오는 굼바를 가지고 있는 것으로 판정하게 된다. 들고 있는 것으로 판정된 원래 굼바는 제 자리에서 정상적으로 잘 돌아다니고 있다.[21] 이때 마리오가 오브젝트를 던지(오브젝트박스에서 해제하)는 순간 돌아다니던 굼바가 갑자기 던진 위치(HOLP)로 순간이동하더니 형체와 조건부 물리값만 남긴 채 그 위치에 1회용으로 존재해버리게 된다.[22] 실은 오브젝트에도 마리오가 던진 후의 상태고유값이 있는데 굼바나 코인 등은 들어올릴 수 없으므로 이러한 현상이 발생하는 것이다. 이렇게 클로닝의 첫 루프 끝. 오브젝트박스의 칸이 한계치까지 가기 전까지 무한정 복사할 수 있다.
하지만 먼지 등의 요소 때문에 원하는 복제를 위해서는 계산을 잘 해야 하는 것을 요한다. 대신 특정한 행동이나 이펙트마다 오브젝트박스 고유요구량이 있으니 크게 문제될 변수는 없다. 직접 연구해보자.
여담으로 클로닝은 엄밀히 말하면 오브젝트를 먹거나 사용하지 않았다고 속이면서 바꿔치기하는 버그다. 예를들어 코인. 무더기로 있는 코인의 경우에는 먹었다고 판정하는 신호가 제 위치 밖에서는 인식되지 않아서 바꿔치기 후 리스폰시키면 원래대로 되돌아가는 것을 볼 수 있다. 다만 레드코인의 경우에는 그 자체로 고유하기 때문에 바꿔치기로 먹어도 2코인만 얻을 수 있고 레드코인 카운트가 추가되지는 않는다. 또한 오브젝트박스에 기본적으로 항시 로드되어있는 오브젝트들[23]을 위 방법으로 바꿔치기 하면 인터페이스 자체가 이동하고, 언로드 개념이 없는 오브젝트이기 때문에 범위 밖으로 들고나가도 제기능을 잃지 않으며, 던지면 클로닝으로 다시 옮기거나 맵을 나갈 때까지 그 자리에 영원히 고정된다.
이 클로닝 버그로 무한 코인 파밍을 하거나 코인 없이 클리어를 하거나 점프 없이 슈퍼 스타를 먹거나 굼바를 복제하여 간이 점프대를 만들거나 하는 등 꽤나 많은 응용법이 존재한다. 물론 작정하고 그러한 도전을 하려는 것이 아니라면 그런 것도 있구나 하는 재미용으로만 알아두는 것이 좋다.
그 외 자세한 사항은 여기(영어)에서 확인하자.
4.2. HOLP 고정 버그
위의 복제와 많이 엮이는 버그다. 오브젝트를 잡아도 특정한 조건을 만족하면 HOLP가 업데이트가 되지 않는 버그다. 이것을 이용해서 가짜 물체들을 원하는 곳으로 이동시킬 수 있다. 이 '특정한 조건'은 아래와 같다.1. 모자 복제 버그를 사용하고 있다.
2. 카메라 화면에서 마리오가 보이지 않는다.
3. 오브젝트를 잡자마자 오브젝트를 놓았다.
4. Pause Buffering HitStun을 사용하고 있다.
5. 카메라 화면에서 아주 멀리 떨어져 있다.
3번의 경우를 예로 들면 마리오가 폭탄병을 잡으면서 벽에 부딪힐 경우 폭탄병은 원래 있었던 HOLP의 위치에서 나타난다.
4.3. 모자 복제 버그
보통 한 스테이지에서 모자는 한 번에 하나씩만 먹도록 설계되어 있지만, 모자 2개를 이동하면서 동시에 먹거나 모자가 생기는 타이밍, 그리고 !박스가 생기는 타이밍을 잘 이용하면 모자 2개를 먹을 수 있게 된다. 이 경우 마리오는 모자를 손에 들고 있는 상태가 된다. 레벨을 나가거나, 텔레포트를 타거나, 아무 모자를 먹는 등의 액션으로 모자를 다시 쓰게 할 수 있다.이 상태가 되면 HOLP는 업데이트되지 않으며, 등시에 해당 모자의 능력(투명모자의 경우 무적 및 특수한 벽 통과 등)을 쓸 수 있고, 데미지는 모자를 쓰지 않았을 때만큼 받고, 모자를 절대 잃어버리지 않게 된다.
4.4. Pause Buffering HitStun
일시정지를 하면 일시정지된 시간 동안 Start 버튼 외에는 아무런 조작이 먹히지 않는다. 이를 이용해 특정 버튼을 일반적으로 연타하는 것의 최대 속도(15회/초)의 최대 2배까지 연타 속도를 늘릴 수 있다. 그리고 데미지를 입으면 무적시간[24]이 주어지면서 마리오가 깜빡거리는데, 이때 일시정지를 한 프레임 단위로 계속 사용하면 마리오를 투명한 상태로 유지할 수 있다. 이때는 데미지를 주는 적이 마리오를 지나갈 경우 무적시간이 줄어들지도 않는다.4.5. 토끼 버그
말 그대로 토끼를 이용한 버그. 지하에 나타나는 토끼를 잡고 문에 딱 달라붙어서 놓으면 마리오가 문을 통과함과 동시에 토끼도 문에 낀다.[25] 그 상태로 다시 토끼를 잡을 수 있으며, 그 버그를 이용해 30 스타를 모아야 갈 수 있는 스타문도 뚫을 수 있다.한 때 슈퍼마리오 64 TAS에서 필수적으로 써야 했던 버그였지만, 더 빠른 파훼법의 발견으로 인해 최단기록 타임어택에서는 더 이상 사용되지 않으며, 지금은 16스타 카테고리, 그리고 120스타 TAS에서 문 여는데 소요되는 시간을 아끼는 데 주로 사용된다. 자세한 설명은 타임어택 문단 참고.
이 버그는 슈퍼 마리오 64 DS에서도 비슷한 형태로 나타나며, 나오는 토끼가 더 많아서 많은 곳에서 쓸 수 있다. 64 DS 타임어택에서는 평행세계를 가기 위해 필수적으로 써야 했었으나 DS 버전 역시도 더 빠른 파훼법이 나와서 이 버그를 사용하지 않는다.
4.6. 투척병 버그
투척병(Chuckya)은 원래 마리오가 멀리 있거나, 바로 앞이 낭떠러지일 때는 따라오지 않는다. 또한 집어서 던지거나 해서 땅에 닿게 하면 바로 죽어버린다. 이 버그는 물바다 시티 및 거대 꼬마 아일랜드, 높고 높은 마운틴에 있는 투척병을 바닥까지 내려오게 하는 버그이다. 먼저 투척병을 든 후, 끝 모서리까지 간 다음 타이밍에 맞추어 점프하고 투척병에게 떨어지면 투척병이 떨어지기 직전에 잡아서 던진다. 그럼 투척병은 죽지 않고 계속 살아있게 된다. 물바다 시티의 경우 버그가 더 많은데, 바로 위에 있는 물 높이 조절 다이아몬드를 이용해 물 높이를 높인 다음, 투척병을 잡은 채 물에 들어가면 아래의 사진과 같이 된다.이렇게 된 상태에서는 마치 다른 오브젝트를 든 것 처럼 조금 빠른 속도로 움직이고, 점프할 수 있다.[26]영미권에선 이 상태를 Portable Chunkya 또는 Light Chunkya(가벼운 투척병)이라고 한다. 이 버그를 이용해 위의 폭탄병 버그 사용 시에 나타나는 현상도 나타나게할 수 있다. 다만 이 버그는 슈퍼플레이[27] 용으로, 타임어택에서는 쓰이지 않는다.
4.7. 1인칭 버그
정확히는 마리오가 투명해지는 버그이나, 이 버그를 사용했을 때 마치 1인칭 플레이를 하는 것 같아서 많은 사람들이 1인칭 버그(First-Person Glitch)라고 부른다. 이 버그를 사용하는 방법은 2가지가 있는데, 하나는 위의 투척병 버그를 이용하는 방법, 하나는 Astral Projection을 이용하는 방법이다. 2종류 다 투척병이 필요하다.투척병 버그를 이용하는 방법은 투척병을 위의 가벼운 상태로 만들고 이를 이용해 물에 잠기게 한 다음, 물 속에서 투척병에게 걸리는 걸 2번 반복하면 마리오가 투명해지고, 실제 마리오의 형체는 투척병에게 잡힌 채로 고정되어 있게 된다.
Astral Projection을 이용하는 방법은 100코인 스타나 쿠파맵의 레드코인 스타를 복제해서 그걸 먹는 동시에 투척병에게 걸리고 그 상태에서 B로 투척병을 잡으면 투척병과 함께 마리오의 모델이 날아가고 실제 마리오는 투명한 상태로 있게 된다.예시
4.8. 평행우주
PU (Parallel Universe).앞서 설명한 BLJ나, 마리오가 특정 지점에 낀 채로 계속 걷는 HSW(Hyper Speed Walking) 등을 이용해 속도를 엄청나게 쌓으면 마리오는 평행우주로 가게 된다.
실제 닌텐도 64에서 다음 행동을 하면 게임은 즉시 튕기지만, 특정 에뮬레이터나 버추얼 콘솔은 튕기지 않는다.
- 카메라가 평행우주 안으로 들어옴.
- 평행우주에서 마리오가 바닥에 완전히 접지된 상태에서[28] 마리오의 1/4프레임 움직임이 취소됨.[29]
- 스틱을 중립 상태로 둔 채로 마리오가 평행우주의 바닥에서 완전한 한 프레임 동안 이동함.
- 마리오가 평행우주 안에서 평행우주에 진입할 수 있는 속도를 가진 상태로 벽에 박음.
마리오의 속도와 실질 좌표는 부호 있는 32비트 실수값을 사용하지만 물리좌표에서는 부호 있는 16비트 정수값을 사용해서 벌어지는 버그다. 풀어보면 좌표의 한계치는 -32768~32767. 그런데 마리오가 이 좌표를 뚫고나가버리면 좌표는 자동적으로 65536을 더하거나 빼게 된다. 즉, 마리오는 아무것도 없는 세계에서 원래맵의 지형을 그대로 받는 평행세계에 도착하는 것이다.
다시 말해, 마리오가 평행세계에 도달하기 위해서는 최소한 65536의 스피드를 내야 한다. 그런데 이 마저도, 마리오의 경로는 이동 전후의 결과에다가 4등분을 하여 판정하는 중간단계가 있어서[30] (일반적으로)마리오가 내야 하는 최소 속력은 262144로 엄청나게 불어나게 된다. 끝이 아니라, 평행세계에 도달한 이후로는 마리오가 가속도를 낼 수단이 없어지고, 지형의 굴곡까지 영향을 받아서 실제 이동경로의 거리가 감소하는데다 위의 튕기는 조건까지 영향을 받기 때문에 안전하게 평행세계를 배회하기 위해서는 최종적으로 약 40~50만(...)의 속력을 내야 한다. 또 평행세계에는 오브젝트가 없기 때문에 원래세계에서 상승하는 발판 등을 타거나 스타 등을 먹기 위해서는 되돌아와야 하기까지 한다. 이 때문에 평행세계의 몇행/몇렬에 있는지 파악하게 해주는 가상의 개념인 PU map이 도입된다. 원점은 오브젝트가 있는 원래세계가 기준.
보다시피 조건이 엄청나게 많아서 이러한 개념을 사용하려면 선행계산이 꽤나 많이 필요할 뿐더러 제대로 사용할 수 있는 방안도 적다. 하지만 2016년 10월 경 나온 4분컷 TAS에서는 이러한 원리를 이용해 용암 세계의 2,3층 돌파는 물론 암흑 세계의 쿠파맵을 아예 입장조차 하지 않고 모조리 스킵(1key)해버리는 위엄을 보여주었다. 잠재용도가 굉장히 높은 버그로 이후 더 많은 기록이 개선되었다.
얼마 뒤, 수직 평행우주라는 게 발견되었다. 수직 평행우주는 수평 평행우주와 전혀 다르게 작동하며, 원래 세계 밑에 있는 수직 평행우주 안에서는 바닥에 닿았을 때 PU map상의 원래 세계의 Y좌표로 순간이동하며, 반대로 원래 세계 위에 있는 수직 평행우주 안에서는 천장에 닿았을 때 PU map상의 원래 세계의 Y좌표로 순간이동한다. 덕분에 평행우주를 통해 높이 차이가 심하게 나는 지형을 오고 가는 게 가능해졌다.
4.9. 버그성 벽차기
Glitchy Wall Kick(GWK)마리오의 이동은 1/4프레임당 한 번씩 일어나는데, 이 버그는 한 프레임에 마리오가 서로 다른 2개의 벽[31]에 닿았을 때 만들어지는 버그다. 이 상태에서 A를 누르면 게임은 2개의 벽 중에서 1개에 벽차기를 하게 해야 하는데, 게임은 마리오가 어느어느 벽에 부딪혔는지 하나하나 다 기억하지 않고, 대신 마지막으로 부딪힌 벽과 입사각만을 저장한다. 이를 이용해 정확한 1/4프레임에 2개의 벽에 순서대로 박은 다음 벽차기를 하면 벽에 입사각이 2번째 벽에 대해 아무리 높더라도 1번째 벽에 먼저 부딪혔기 때문에 벽차기가 먹히고, 벽차기 자체는 2번째 벽에서 나오게 된다.
이때 두 벽이 평행할 경우는 버그성 벽차기를 할 때 진행 방향이 바뀌지 않고 그냥 벽을 뚫고 벽차기를 하게 된다.
일부 벽의 경우 마리오가 그 쪽으로 무한정 달릴 수 있는데, 그곳에서도 버그성 벽차기가 된다. 이때 벽차기의 각도는 벽을 향하게 된다.
위의 경우 중, 희귀하게 두 벽의 각도가 90도 초과, 120도 미만일 경우 한쪽 벽이 마리오를 바깥쪽으로 밀어내기 때문에 버그성 벽차기를 계속 하면서 위로 올라갈 수 있다.
또다른 발동 방식은 마리오가 벽에 박은 다음 벽차기를 할 수 있는 5프레임 이내에 또다른 벽에 박으면 된다. 이렇게 하면 위의 경우와는 반대로 1번째 벽에 벽차기를 하게 된다. 이 경우는 무조건 2개의 벽에 박는 동안 한 프레임이 지연돼야 하기 때문에, 첫프레임 벽차기와 병행이 불가능하다.
버그성 벽차기의 예시.
4.10. 게임 충돌 버그
초창기 게임인 만큼 게임 충돌 버그도 정말 많다. 평행우주 충돌 버그는 해당 항목 참조.참고로 마리오를 포함한 오브젝트의 속도, 위치는 모두 float(4비트 실수 자료형)을 사용한다.
- 존재하지 않는 파일 삭제하기 - 주소 참조 오류.
- 한 프레임에 으샤와 마리오가 동일한 위치에 존재하기 - 0으로 나누는 오류. 으샤와 마리오가 부딪혔을 때의 으샤의 넉백은 으샤와 마리오 사이의 거리로 나눠서 계산하기 때문에 이런 오류가 발생한다.
- 쪼르뚜를 원격으로 죽이기 - 주소 참조 오류. 슈퍼 마리오 64에는 다음에 쪼르뚜가 어떤 구멍에서 나와야 하는지 결정하는 함수가 있다. 그러나 모든 구멍이 로드되어 있지 않으면[32]쪼르뚜는 주소가 NULL인 구멍에서 나오게 되어 게임이 충돌한다.
- 아직 구멍에서 나오지 못한 쪼르뚜 죽이기 - 주소 참조 오류. 쪼르뚜가 구멍에서 나오지 못했다는 것은 그 어떤 구멍도 로드된 적이 없다는 것을 의미한다. 즉 위와 마찬가지로 쪼르뚜는 주소가 NULL인 구멍에서 나오게 되어 게임이 충돌한다.
- (2^31)/170 이상의 속도로 걷기 - 자료형 변환[33] 오류. 내부적으로 마리오가 걷는 속도에 170을 곱한 후 그대로 int형으로 바꾸는 계산이 있기 때문이다.
- 폭탄병이나으샤를 경계 밖에 가두고 기다리기 - 자료형 변환 오류. 폭탄병이나 으샤가 경계 밖에 갇히면 각도가 32768씩 증가하는데, 일반적으로는 각도는 -32768부터 32767까지의 값을 쓰지만 경계 밖에 갇힌 상황에서는 각도가 저 값으로 초기화되지 않아 각도가 계속 증가하고, 이후 각도가 2147483647을 넘어버리면 저 값을 그대로 int로 변환해버리면서 게임이 뻗어버린다.
- 경계 바깥에 있고 12번 삼각형[34]위에 있는 오브젝트가 가지는 그림자를 움직이기 - 주소 참조 오류. 12번 삼각형은 오브젝트와 관여할 수 없는 특성상 그림자를 로드하기 위해 그 삼각형 밑에 있는 바닥을 찾는 함수가 있으며, 이 함수가 바닥을 찾지 못하면 NULL을 반환한다. 이때 그림자가 NULL 바닥 위에 생기면서 게임이 충돌한다.
- 그림이 있는 방에서 경계 밖으로 들어가기 - 주소 참조 오류. 그림은 마리오가 있는 바닥에 따라서 어떻게 흔들릴지를 결정한다. 이때 마리오가 경계 바깥에 들어가 마리오 밑에 바닥이 없어질 경우, 그림은 NULL 바닥을 참조하여 게임이 충돌한다.
- 텔레포트하면서 로딩 존 통과하기 - 주소 참조 오류. 로딩 존을 통과해버리면 마리오가 텔레포트한 텔레포터의 주소를 갖는 텔레포터는 더 이상 존재하지 않게 되므로, 마리오는 NULL 텔레포터를 도착점으로 갖게 되어 게임이 충돌한다. 이를 응용해 NULL 포인터 버그를 무시하는 Wii 버추얼 콘솔 버전에서는 잘못된 워프를 실행시킬 수도 있다.
- 천장에 매달린 채로 그 천장에서 벗어나기 - 주소 참조 오류. 마리오가 NULL 천장을 잡을 수 있는지 확인하게 되어 게임이 뻗는다. 이 정도면 널 포인터 버그를 개발자들이 일부러 방치해놨는지 의심될 정도다(...)
- 64DD에서 거대 꼬마 아일랜드의 꽃충이가 있는 방으로 들어가기 - 꽃충이의 체력은 딱 한 프레임 동안 2048이 되는데, 64DD의 예외처리가 이걸 잡아서 게임이 뻗는다. N64는 이런 예외처리가 없기 때문에 꽃충이가 있는 방으로 들어가도 멀쩡하다. 참고로 꽃충이의 체력이 낮을수록 꽃충이의 속도가 빨라진다.
- 깨진 삼각형 위의 오브젝트를 움직이기 - 일반적으로 로딩될 수 있는 삼각형의 최대치는 2300개다.[35] 그러나 어둠 속에 빠진 동굴에서 조작리프트를 벽에 비비다 보면 벽을 뚫고 들어갈 수가 있는데, 이러면 2300개보다 더 많은 삼각형을 로딩시키는 짓거리가 가능하다. 이 상태에서는 삼각형의 정보가 삼각형의 특성이 저장된 곳까지 침범해서 저장되는데, 이렇게 생긴 삼각형 위에 그림자를 만들면 삼각형의 그림자를 만드는 함수가 정의되지 않은 연산을 하면서 게임이 충돌한다.
- 한 프레임에 마리오와 카메라가 동일한 위치에 존재하기 - 0으로 나누는 오류.
- 시계추의 각도를 2147483647 이상으로 올리거나, -2147483648 이하로 내리기 - 자료형 변환 오류. float 자료형을 int로 바꾸면서 게임이 충돌한다.
- 1070만 이상의 속도를 가진 채로 회전하는 하트에 닿기 - 하트의 회전 속도가 int의 범위를 벗어난 값을 가지게 되어 오류가 발생한다.
- 프로펠러헤이호 버그
- 심지어 순수 그래픽 버그까지 있다.
- 3D 그래픽이 화면에 너무 많은 경우 - 내부적으로 메인 디스플레이 버퍼에는 F3D 명령어를 저장하는 곳이 있다. 그러나 그래픽이 너무 많아지면 그래픽이 이 공간까지 그래픽을 저장하는데 써서 게임이 충돌한다.
- 해자 밑에 감춰진 비밀 입장시 바로 카메라 이동 - 해자 밑에 감춰진 비밀에는 존재하지 않는 모델을 생성하는 오브젝트가 존재한다. 일반적으로 이 오브젝트는 카메라를 움직이지 않으면 보여지지도 않고 스테이지 입장 시 1프레임만에 사라지지만, 카메라를 움직이면 그 오브젝트가 카메라에 잡히게 되어 게임이 충돌한다.
4.11. 기타
- 일본 버전(진동판, iQue Player(神游机)판 제외.)에서 1000개의 코인을 먹으면, 마리오의 목숨이 M25(-25)개가 된다. 코인이 1000개가 되면 코인 개수를 다시 999개로 바꾸도록 프로그래밍했어야 하는데, 실수로 목숨이 999개가 되도록 프로그래밍했기 때문에 일어나는 일이다. 그러나 목숨을 저장하는 변수의 자료형은 signed char(범위 -127~128)라서, 오버플로가 일어나 목숨이 -25개가 되는 것이다. 게임 내 수치상으로 코인 1000개가 남아있는 상태에서 요시에게 목숨 100개를 얻으려 하면 영원히 목숨이 채워지지 않게 된다.
- 스폰 지점 변경 버그(Spawning Displacement)
초기 일본판에서만 가능한 버그. 마리오가 코스를 나가거나 스타를 얻어서 화면이 어두워질 때 회전하는 발판/물건 위에 있으면, 마리오의 스폰 지점 좌표가 바뀌는 현상이 있다. 이 버그는 코스에서 나가도 기존 회전축을 중심으로 마리오를 1 프레임만큼 더 회전시키기 때문에 발생하는 현상이다. 때문에 마리오가 있는 좌표와 스폰 지점 좌표가 더 멀어질수록 더 많이 위치가 바뀌게 된다. - 시계추 조작
똑딱 시계에 존재하는 시계추는 각도가 0을 지날 때까지(0이 될 때까지가 아니다) 진자 운동 속도가 증가하고, 0을 지나면 속도가 감소하는 성질이 있다. 이를 이용해 부품들의 움직임을 무작위로 설정해서 들어간 다음 RNG를 조작해서 특정한 순간에 시계추의 각도를 0으로 맞춘 다음 RNG를 조작해서 시계추의 속도를 계속 똑같은 속도로 운동하게 하면 시계추의 성질에 의해 시계추는 운동하는 속도가 점점 증가한다. 이렇게 되면 시계추가 위로 서는 것은 물론이요 아예 360도 돌아가기도 한다. - Wii 버추얼 콘솔판에서는 불바다의 쿠파에 존재하는 모든 상승과 하강을 반복하는 플랫폼의 높이가 0[36]으로 수렴한다.
- 성의 뒷마당에 부끄부끄가 있는 곳으로 가는 데서 타이밍을 잘 맞추면 부끄부끄가 벽에서 소멸하는 것을 벽 안쪽까지 끌고 올 수 있다. 별 의미는 없는 단순 그래픽 버그.
- 타이밍을 맞춰서 물바다 시티의 로딩 존을 왔다갔다하면 다운타운의 물 높이를 자유자재로 높이고 낮출 수 있다.
5. 미해결 버그
5.1. 똑딱 시계 순간이동 버그
DOTA_Teabag의 버그 발생 시점 플레이 화면 |
이후 2015년 8월 5일, pannenkoek2012가 이 미해결 버그를 재현하는 유저에게 현상금 $1000을 주겠다는 발표를 하면서 버그 원인 탐색은 더욱 가속화 되었다. 원인을 찾아내면 기존 스피드런 기록들이 모조리 갈아엎어질 수 있는 버그였기 때문에 전문 코더들까지 합세해서 원인 분석을 했으며, 이 과정에서 비트플립 현상이 지목되기도 했으나, 불행하게도 현재까지 해당 버그를 똑같이 재현하는 데 성공한 유저는 없다.
이후 2024년 현재에 이르러 DOTA_Teabag의 플레이에서 버그가 발생한 원인이 두 가지의 가설이 나뉘어 가장 유력한 원인으로 추측되고 있다. 그러나 두 가설 모두 실제로 재현하는 것은 거의 불가능에 가까운 것으로 보인다.
- 우주 방사선이 일으킨 단일 이벤트 뒤집기(Single-event upset)
2021년부터 확산된 가설. DOTA_Teabag이 플레이하고 있던 기기에 우주 방사선이 메모리를 통과하여 비트플립이 발생하면서 플레이어의 Z축 데이터를 바꿔[37] 마리오가 순간이동되었다는 가설. 2015년 제기된 비트플립 현상이 발생한 원인을 우주 방사선으로 지목하여 생긴 가설이며 가장 널리 알려진 가설이다.[38] - 카트리지의 결함이나 잘못된 연결 혹은 하드웨어에 가한 물리적인 충격
닌텐도 관련 유튜버 LunaticJ가 2024년 1의 가설을 반박하면서 주장한 원인. # 그 근거로 마리오가 갑작스레 순간이동했던 두 가지의 사례를 들었다. 첫 번째는 스피드러너 dumpdome64가 발견한 오브젝트 이동 버그, 두 번째는 스피드러너 Ian_1243가 타임 어택 도중 불바다의 쿠파에서 마리오가 밑으로 꺼지는 현상이 발생한 사례.[39] 다른 근거로 카트리지의 결함으로 인해 하늘이 기괴한 텍스처로 바뀌거나, 닌텐도 64에 물리적인 충격을 주어 버그가 발생한 사례를 근거로 들며 가설 1을 반박했다.
5.1.1. 똑딱 시계 오브젝트 이동 버그
dumpdome64의 플레이 도중 버그가 발생한 순간 풀버전 |
5.2. 음악 삭제 버그
말 그대로 음악이 모두 없어지는 버그. 원인은 레벨 로딩 등의 특정한 행동을 할 때 오디오 스레드가 충돌하는 것으로 보인다. 현재까지 7번 걸렸지만 의도적으로 걸리게 한 적은 초기 일본판에서만 발생하는 오브젝트가 카메라에서 매우 멀리 떨어진 경우를 제외하면 없다.오디오 재생 타입을 '모노'로 바꾸면 걸릴 확률이 크게 줄어든다고 한다. N64 실기에서는 렉 또한 줄여주니 스피드러너라면 이 방법을 써보자.[41]
5.3. 기타
이외에도 정말 뜬금없이 튕기는 경우(#1#2)나, 에뮬레이터에서 워터랜드에 있는 잠수함을 로드할 때 튕기는 경우(#1#2), 잠깐 튕겼다가 도로 정상이 되는 경우(#1#2)도 존재한다.6. 여담
슈퍼 마리오 64 TAS에서는 대부분 Mupen64 라는 에뮬레이터를 사용한다. 이 툴은 기본적으로 게임 속도 조절 기능이 있으며, 세이브/로드와 무비 녹화도 할 수 있는데, 이 무비 녹화는 세이브/로드를 막 사용해도 자동으로 이전 프레임을 저장해서 처음부터 끝까지 매끄럽게 녹화할 수 있다. 이 Mupen64 녹화 파일의 확장자는 .m64이다. TASVideos 같은 사이트에서도 타임어택 마다 이 파일을 같이 배포하고 있다. 이 툴로 녹화한 파일을 불러오면 마치 직접 플레이하고 있는 것 처럼 녹화할 때 눌렀던 키들이 그대로 적용되어서 보여진다. 무비를 재생하는 중간에도 끊어서 그 시점부터 직접 플레이할 수 있다. 또, 이 무비를 재생하고 AVI 캡처도 해 놓으면 .avi 형식의 영상도 같이 만들 수 있다. TAS를 할 때 대부분 TAS Input(TASDI.dll)[42]이라는 입력 플러그인을 사용한다. 같은 N64 에뮬레이터인 Project64에서도 쓸 수 있다.[1] 옛날 만화잡지인 보물섬에서 슈퍼마리오 64 정식발매 시 공략을 게재했을 때 사용 가능한 기술로 실려있었을 정도다.[2] 마리오가 계단에서 다음 계단으로 내려갔을 때, 멀리뛰기를 해서 다시 계단으로 올라가는 원리다.[3] 익숙해진 사람들은 어렵지 않게 사용한다. 이를 이용해 위 영상과 같이 30스타 문을 뚫을 수 있다.[4] 실제로 TAS에서 기본 루트 중 하나가 암흑 세계의 쿠파 맵에서 열쇠를 얻고 난 후, 이 버그를 이용해 바로 지하층 문으로 가는 루트다.[5] 수직이지 않으면 벽이 마리오를 벽에 수직인 방향으로 밀기 때문에 마리오의 위치가 어긋나게 된다.[6] 이 게임이 30프레임으로 돌아가므로 여유 시간은 0.033초다. 다른 게임에서 Frame Perfect니 뭐니 하는 게 보통 0.016초인 것에 비하면 널널하지만 그래도 만만하게 볼 타이밍은 아니다.[7] 뒤로 멀리뛰기가 불가능하다[8] 마리오가 음의 방향의 속도를 가졌어도 보존된 속도를 사용하는 순간 마리오의 위치 및 방향에 따라 이게 양의 속도로 뒤바뀔 수도 있다.[9] 에뮬레이터 등을 컨트롤러와 연결해서 3D 스틱을 십자키로 매핑시키면 컨트롤러도 충분히 가능하다.[10] 잘 보면 벽의 미세한 경계 사이로 노란색이 보인다.[11] 사실 굳이 멀리 뛰기를 안 해도 다리 난간 끝으로만 가면 된다. 다리 난간 끝으로 그냥 걸어가도 김수한무는 오지 않는다. 또는 다리 난간 끝에서 숙인 채 움직여도 안 온다. 하지만 그 끝에서 조금만 벗어나면 온다.[12] 게임 오브젝트 내 삼각형의 법선 단위벡터의 연직 윗방향 성분에 따라 천장, 바닥, 벽이 결정되는데, 성분이 -0.01보다 크거나 같고 0.01 보다 작거나 같아야 벽이 된다. 즉, 오브젝트 내 삼각형의 경사 각도가 89.99 이상 90.01 이하이어야 벽이 된다는 것이다. 쉽게 말해 평면 대비 완벽히 수직이어야만 벽이 된다는 것이다.[13] 마리오가 커진 폭탄병의 판정을 그대로 받기 때문에.[14] 대표적으로 폭탄병의 전쟁터의 '멍멍이 집으로' 미션에서 말뚝을 부수지 않고 이 버그를 이용해 철창을 통과하여 스타를 얻는 루트. RTA에서도 기본 루트 중의 하나이다.[15] 예를 들어 굼바 3마리가 나타나는 곳에 접근해 굼바가 로드된다면 손에 굼바를 들게 된다. 코인, 스타, 플랫폼 등 온갖 오브젝트에 사용 가능하다. 다만 이런 식으로 들게 된 오브젝트를 놓으면 제기능을 못하는 것도 많다. 예를 들어 이 방법으로 생긴 플랫폼 같은 경우에는 물리적 성질을 가지지 않아 쓸모가 없다. 자세한 것은 후술.[16] 웅크리면 들어올린 오브젝트를 놓을 수 있다. 물론 아기팽귄이나 폭탄병도 이렇게 할 수 있다. 곧 터지겠지만.[17] 먼지나 스포너나 폭발 등. 이외에도 굉장히 많다.[18] 당연한 소리지만 짚고 넘어가야 할 요소다. 3칸을 제거하고 난 후의 빈 박스(칸)들은 어떻게 되는가? 만약 데이터가 고정되어 있다면 오브젝트박스가 사용하는 칸은 여전히 5칸이 되어야 한다. 다시 말하지만 언로드 후 사용하는 칸은 2칸으로 변했다.[19] 이 상태에서 마리오가 들고 있는 오브젝트를 가짜(Fake)오브젝트라고 한다. 즉, 이때는 갑자기 들고 있는 오브젝트가 달라지거나 없어지는 것을 볼 수 있다. 가짜오브젝트는 던져도 던지는 모션만 취하듯 아무런 효과가 없다.[20] 비고로 해당 오브젝트의 스포너의 범위 안 또는 바깥에 따라서, 그리고 몹의 종류에 따라서 마리오가 들어올리는 VS#박스의 순서 또한 달라진다. 스포너의 활성화 유무와 몹의 처치 시 발생하는 더미오브젝트의 수가 제각각이기 때문. 자세한 내용은 후술한 링크에.[21] 만약 활성화된 오브젝트를 들고 있다면 오브젝트 활성화 유무에 상관 없이 VS#가 뒤로 밀려나기 때문에 영향을 받지 않으므로 안심해도 좋다.[22] 참고로 마리오 자체도 이런 방식으로 만들어버릴 수 있다. 투척병 버그 문단 참조.[23] 특히 npc(빨간 폭탄병), 스포너 스팟, 텔레포트 스팟, 나무, 멍멍이 등.[24] 무적시간은 1초로 짧지만, 그 1초 동안 물건을 잡고 던져도 0.13초나 남는다.[25] 가끔 토끼는 안끼이기도 하는데 이는 박치기를 이용해 문에 끼이도록 하면 된다. 그리고 마리오가 낄 확률이 부족하다.[26] 또는 절벽 끝에서 재빠른 펀치+다이브로 투척병을 잡으면 이렇게 된다.[27] 공교롭게도 둘 다 약자가 TAS다.[28] 출발 상태와 도착 상태 중 어느 하나라도 공중에 떠 있으면 성립되지 않는다.[29] 단, 완전한 한 프레임 동안 움직인 후 다음 프레임의 이동이 취소되는 건 괜찮다.[30] 만일 3번째 이동경로가 천장 판정이라면 2번째 경로에서 멈추게 된다.[31] 참고로 1번째 벽은 그냥 벽차기가 먹히기 위한 매개물일 뿐이고 벽차기 자체는 2번째 벽에서 나오므로 첫번째 벽은 벽 대신 천장 또는 경계 밖이어도 된다.[32] 점프 한 번으로 넘어갈 만한 거리만큼 떨어져 있어도 로드되어 있지 않은 것으로 인식한다![33] float에서 int로 변환할 때 float가 int가 가질 수 있는 값의 범위를 넘어선 값을 가지게 되는 경우[34] 부끄부끄의 호러하우스에서 쓰이는 바닥으로, 오브젝트와 관여할 수 없으며, 마리오의 위치에 따라 맵의 지하와 지상 중 어느 부분을 로드할지를 결정한다.[35] 맵 한구석에서 반대쪽을 바라봐서 다량의 삼각형을 로드하려고 해도 게임은 마리오로부터 먼 삼각형부터 로딩을 하지 않는다.[36] 참고로 시작 지점의 높이는 -2000을 한참 넘는다.[37] 2015년에 UncommentatedPannen이 분석한 영상을 근거로 Z축 데이터가 C5837800에서 C4837800으로 바뀌었다고 보는 이들이 많다.[38] 이 버그가 우주 방사선 때문이라고 결론 지어졌다고 생각하는 사람들이 많은데, 이는 이 가설이 유튜브나 여러 커뮤니티에서 퍼지고 퍼지다가 결국 해결된 것이라고 과장되어서 잘못 알려진 것이다. 이 버그의 정확한 원인은 아직까지 판명 나지 않았다.[39] pannenkoek2012의 증언으로 꺼질 때 좌표값이 비트플립으로 발생하는 정숫값이 아니었다는 것을 근거로 들었다.[40] 위 문단의 가설 2에선 여러 버그가 있었다는 점을 비트플립이 여러 번 발생한 것이 아니라 단순히 게임이나 기기의 결함이라고 추측했다. 그도 그럴 것이 우주 방사선이 기기를 여러 번 통과해 비트플립을 발생시켰다기보단 단순 게임 결함으로 데이터값이 여러 번 바뀌었다는 게 더 가능성이 높다.[41] 특히 초기 일본판으로 N64 실기 플레이를 할 경우 이게 걸리면 다음 로딩에서 게임이 멈추기 때문에 반드시 피해야 한다.[42]