흉악 캐릭터가 사용하는 즉사 기술을 소개합니다.
페이지 정보
작성자 Aravis 작성일 24-02-06 16:41 조회 1,436 댓글 0본문
*** 시작하기에 앞서 드리는 말씀 ***
무겐의 거의 모든 흉악 캐릭터는 윈무겐 (WinMugen) 에서만 작동합니다.
저 또한 윈무겐에 대해서만 다룹니다. 무겐 1.0은 다루지 않습니다.
하지만 무겐 1.0에서 흉악 캐릭터가 작동하지 않는 건 전혀 아닙니다.
기존의 캐릭터는 윈무겐 전용 흉악 캐릭터이기 때문에 무겐 1.0에서 작동하지 않는 것이고,
무겐 1.0 전용으로 만들어진 흉악 캐릭터는 무겐 1.0에서도 잘 작동합니다.
단, 윈무겐과 달리 무겐 1.0은 역사가 깊지 않기에 무겐 1.0 전용 흉악 캐릭터는
만들어진 것이 거의 없습니다.
따라서 무겐에 존재하는 거의 모든 흉악 캐릭터는 윈무겐 전용 캐릭터라고 할 수 있습니다.
*** 목차 ***
1. 기초적인 즉사 공격
1.1 거대한 데미지
1.2 낙하 데미지
1.3 체력 감소 명령어
2. MUGEN의 구조를 역이용한 것
2.1 Reversaldef
2.2 오메가 톰 행크스 킬러
2.3 오버 플로우 데미지
2.4 ParentVarSet
2.5 Helper (헬퍼) 위장
2.6 TagIn
3. target (타겟) 잔존 버그
3.1 영구 타겟
3.2 혼선 버그
4. 스테이트 컨트롤러 오버 플로우
4.1 초즉사
4.2 초즉사 응용
4.3 직사
4.4 Parent 변경
4.5 Parent 날조
5. %n 버그
*** 1. 기초적인 즉사 공격 ***
1.1 거대한 데미지
설명할 필요도 없을 정도로 간단한 기술입니다. 단순히 100000 처럼 큰 데미지를 적에게
줌으로서 적을 즉사시키는 기술입니다. 상대 체력이 너무나 많거나, 상대가 무적 판정을
가지고 있어서 공격을 맞지 않는다면 소용이 없는 기술입니다.
1.2 낙하 데미지
무겐에서는 상대에게 "낙하 데미지"라는 것을 줄 수 있습니다. 공격에 맞은 상대가 공중에 붕 떴을 때,
공중에 떴다가 떨어지는 시점에 데미지가 들어가도록 만들 수가 있는데요, 이때 들어가는 데미지를
"낙하 데미지"라고 합니다. 낙하 데미지를 100000 처럼 크게 설정해 두어도 위와 마찬가지로
상대방을 즉사시킬 수 있겠지요. 물론 체력이 그보다 더 많거나 무적 상태에 있다면 역시 통하지
않는 기술입니다.
1.3 체력 감소 명령어
LifeAdd, LifeSet, TargetLifeAdd 와 같은 명령어로 상대방의 체력을 감소시키는 기술입니다.
상대가 체력이 아무리 많다 할지라도 LifeSet 명령어를 통해 체력을 0 으로 만들어 버리면 바로
격파할 수 있게 됩니다.
*** 2. MUGEN의 구조를 역이용한 것 ***
2.1 Reversaldef
Reversaldef (리버설) 이란, 상대의 공격을 반격하는, 일종의 "반격기"와 같은 명령어입니다.
상대가 무적 상태에 있으면 평범한 공격은 통하지 않지만, "반격기"인 리버설은 상대가 무적 상태에
있다 할지라도 영향을 줄 수가 있습니다. 이를 이용하면 아무리 체력이 많고,
무적 상태에 있다 하더라도 격파해낼 수 있습니다.
그러나 리버설은 상대가 Hitdef 로 공격해 들어올 때만 동작합니다. 따라서 상대가 그 외의 방법으로
공격해 들어올 땐, 받아칠 수가 없다는 단점이 있습니다.
2.2 오메가 톰 행크스 킬러
무겐에서 모든 Projectile (프로젝타일) 은 본체의 소유입니다. Helper (헬퍼) 가 프로젝타일을
발사했다고 할지라도 그 프로젝타일은 헬퍼를 만든 본체의 것이 됩니다. 이를 이용하면
기존의 방법으로는 도저히 격파할 수 없었던 캐릭터를 격파할 수가 있습니다.
무겐에는 "오메가 톰 행크스"라는 캐릭터가 있습니다. 이 캐릭터는 무적 상태인 동시에
아무것도 안 하고 가만히 있기 때문에 도저히 격파할 수 없는 캐릭터라고 여겨져 왔습니다.
그러나 이 코드가 발견되고 나서는 "오메가 톰 행크스"를 격파할 수 있게 되었고,
이를 기념하는 의미에서 이 코드는 "오메가 톰 행크스 킬러" 코드라고 불리우게 되었습니다.
앞 글자를 따서 OTHK 코드라고도 부릅니다.
2.3 오버 플로우 데미지
무겐 캐릭터의 체력은 보통 1000 입니다. 따라서 데미지가 100000 처럼 강력한 공격을 하면
한 방에 격파할 수 있습니다. 그러나 상대의 체력이 10000000 이라면 더 강력한 데미지를
가해야 격파할 수 있게 됩니다. 이처럼 상대의 체력이 많다면 그보다 더한 데미지를 가해야만
상대를 격파할 수가 있습니다.
그러나 무겐이 처리할 수 있는 한계치보다 더 큰 값을 주면 무겐은 이를 다 처리하지 못하고
그대로 연산을 해 버립니다.
보통 2147483648 (16진수로 80000000) 또는 2147483647 (16진수로 7FFFFFFF) 을 사용합니다.
전자의 경우 - 값을 쓰는 부분에 사용하고, 후자의 경우 + 값을 쓰는 부분에 사용합니다.
8자리의 16진수로 나타낼 수 있는 최대값인 FFFFFFFF 가 아닌 이유는 무겐에서
16진수로 FFFFFFFF 는 -1을 나타내고, FFFFFFFE 는 -2를 나타내는 것처럼 절반은 음수값을
표현하는 데 사용되었기 때문인 것 같습니다.
(전 프로그래밍에 대해서는 문외한이라 정확한 것에 대해서는 잘 모릅니다...)
2.4 ParentVarSet
상대방의 헬퍼를 가지고 ParentVarSet 명령어를 발동하게 시켜서 상대방의 변수를 마음대로
조작하는 방법입니다. 변수로 라이프를 관리하는 캐릭터의 경우, 이 방법으로 격파해낼 수 있습니다.
2.5 Helper (헬퍼) 위장
어떤 캐릭터는
value = helper(1000),var(0)
이런 식으로 헬퍼의 변수를 참조하는 경우가 있습니다.
이때, ID가 1000 인 헬퍼가 두 개 존재하면 먼저 나온 헬퍼를 참조하게 됩니다.
따라서, 상대가 소환하는 헬퍼의 ID를 미리 파악한 뒤, 같은 ID의 헬퍼를 먼저 소환해 두면
상대 캐릭터가 엉뚱한 헬퍼를 참조하게 함으로서 상대 캐릭터에 간섭할 수 있게 됩니다.
2.6 TagIn
TagIn 명령어는 2 : 2 대전에서 자신이 Changestate 를 하는 동시에 자신의 파트너의 state 까지
바꿔버릴 수 있는 명령어입니다. 태그 시스템을 구현하기 위한 명령어인 듯 합니다만, 이 명령어를
이용하면 2 : 2 대전에서 보다 쉽게 상대를 격파할 수 있기에, 흉악 캐릭터가 사용하기도 합니다.
*** 3. target (타겟) 잔존 버그 ***
3.1 영구 타겟
무겐에서는 상대에게 Hitdef 혹은 프로젝타일을 명중시키거나 리버설로 상대의 공격을 받아쳤을 때,
상대는 자신의 target (타겟) 이 됩니다. 맞는 모션이 모두 끝났을 때, 상대는 비로소 타겟에서
벗어날 수 있게 됩니다.
그런데 타겟을 가진 상태에서 리버설을 켜 두면, 상대는 맞는 모션이 끝나더라도 계속 타겟으로
지정되어 있게 됩니다.
따라서 상대를 일단 타겟으로 잡는데만 성공한다면 그 경기가 끝날 때까지 상대는 자신의 타겟이
되어 있게 됩니다. 따라서 TargetLifeAdd, TargetState 등의 명령어로 상대방에게 간섭함으로서
상대방을 격파할 수 있게 됩니다.
3.2 혼선 버그
위에서 설명해 드린 영구 타겟을 발동해 둔 상태에서 타겟이 갑자기 사라져 버린다면
무슨 일이 일어날까요?
특정한 헬퍼를 타겟으로 잡았는데 그 헬퍼가 DestroySelf 명령어로 사라져 버렸다고 해 봅시다.
이런 상황에서 도대체 타겟은 누가 될까요?
이러한 상황이 발생한다면, 이후에 소환되는 헬퍼를 타겟으로 잡아 버리게 됩니다.
원래 타겟을 잡기 위해선 무조건 공격을 맞춰야만 했으나, 이를 이용하면 공격을 맞추지 않고도
상대방의 헬퍼를 타겟으로 잡아버릴 수가 있게 됩니다.
마찬가지로 일단 타겟으로 잡았으니 여러 가지 방법을 이용해서 상대방에게 간섭할 수 있게 됩니다.
*** 4. 스테이트 컨트롤러 오버 플로우 ***
4.1 초즉사
무겐에는 하나의 [statedef ]에 여러 개의 [state ]가 존재합니다.
여기서 [state ]를 스테이트 컨트롤러라고 부릅니다.
이때, 한 개의 [statedef ]에는 최대 512개의 [state ]가 존재할 수 있습니다.
그 이상의 스테이트 컨트롤러가 존재할 때, 무겐은 이를 모두 처리하지 못합니다.
따라서 무겐에서는 추가적인 오류를 예방하기 위해 하나의 [statedef ]에
513개 이상의 스테이트 컨트롤러가 존재할 경우, 무겐이 강제 종료 하도록 프로그래밍 되어 있습니다.
그러나 리버설이나 Hitdef 등으로 인해 pausetime이 걸려 있는 경우,
513개가 넘는 스테이트 컨트롤러를 감지하더라도 무겐이 강제 종료 하지 않게 됩니다.
단, 513개 넘는 스테이트 컨트롤러가 존재하므로 무겐은 이를 모두 처리하지 못합니다.
여기서 처리하지 못하고 남는 부분은 다른 부분의 메모리에 덮여 쓰여지고,
이를 이용하면 Alive 값을 강제로 조절할 수가 있습니다.
상대의 체력에는 간섭하지 않고 바로 Alive 값을 건드릴 수 있다는 점에서 매우 강력한
기술로 떠오르게 된 이 기술은 "초즉사"라고 불리우게 되었습니다.
4.2 초즉사 응용
스테이트 컨트롤러 오버 플로우를 이용해서 Alive 값을 강제로 0 으로 만드는 것이
위에서 설명해 드린 초즉사입니다.
그런데 스테이트 컨트롤러 오버 플로우를 이용하면 Alive 값 외에도 다른 값을
조작할 수가 있습니다. palno 등을 조작해서 상대를 약하게 만드는 등, 초즉사를 적절히 응용하면
무궁무진한 기술을 사용하는 것이 가능해집니다.
4.3 직사
역시나 스테이트 컨트롤러 오버 플로우를 이용합니다.
단, 직사의 경우, 자신이 아닌 상대방의 Alive 값을 바로 0 으로 만들 수가 있습니다.
다른 기술의 경우, 상대의 공격을 역이용해서 상대에게 간섭하는 방식을 사용하지만
직사의 경우, 아무런 처리 없이 상대방에게 직접 간섭할 수 있게 됩니다.
따라서 직사를 사용하면 시작하자마자 상대를 KO시킬 수 있습니다.
이렇게 강력한 코드는 상대방에게 직접 간섭한다는 의미에서 직사 (直死) 라고 불리게 되었습니다.
4.4 Parent 변경
무겐에서는 헬퍼를 소환한 주체를 parent 라고 부릅니다. 그런데 초즉사를 응용하면
이 parent 를 바꿔버릴 수가 있습니다. 이를 이용하면 자신이 소환한 헬퍼를 상대의 것으로 소유자를
바꿔 버릴 수가 있기에 여러 가지 공격의 발판이 될 수가 있습니다.
4.5 Parent 날조
초즉사를 응용하면 parent 를 변경하는 것 뿐만이 아니라 parent 를 마음대로 써버릴 수가 있습니다.
특정 캐릭터나 헬퍼가 아닌, 무겐의 특정 주소값으로 parent 를 잡아줄 수가 있습니다.
이 때, ParentVerSet 명령어를 사용함으로서 무겐의 특정 주소값을 조작할 수가 있습니다.
이를 이용하면 상대 플레이어를 삭제해 버리는 등, 강력한 공격을 할 수가 있게 됩니다.
*** 5. %n 버그 ***
DisplayToClipboard 명령어가 C언어에 사용되는 printf 함수와 같은 원리라는 것을 이용해서
%n 토큰을 이용, 무겐의 특정한 주소값을 강제로 변경할 수 있습니다.
저는 프로그래밍에는 문외한이라 자세한 것은 모르지만, 이를 이용하면 무겐 프로그램 자체를
원하는 대로 조작할 수가 있다고 합니다.
상대 플레이어의 라이프를 강제로 0 으로 만드는 디버그 키인 F1 을 강제로 발동시키는
등의 방법으로 사용됩니다.
*** 참조 ***
니코니코 무겐 위키
무겐 흉악 캐릭터 위키
댓글목록 0
등록된 댓글이 없습니다.