간단히 알아보는 초즉사, 직사 코드 > 흉악강좌

본문 바로가기

사이트 내 전체검색

뒤로가기 흉악강좌

간단히 알아보는 초즉사, 직사 코드

페이지 정보

작성자 Aravis 작성일 24-02-06 17:02 조회 1,421 댓글 0

본문

마지막 글이 되겠군요.


바쁜 관계로 간단히 쓰겠습니다.



초즉사 코드는 무겐의 특정 주소값을 바꿔 버리는 코드입니다.

예를 들면, 자신의 alive 값을 관리하는 영역을 찾아서 alive 값을 0 으로 바꾸어 버리는

코드를 설계할 수가 있습니다.



자, 일단 예제를 살펴봅시다.

[statedef 1]

[state ]
type = LifeSet
trigger1 = 1
value = 0
ignorehitpause = 1

이런 코드는 무슨 효과가 있을까요...?

라이프를 0 으로 만들어 버리는 효과가 있지요.



만일, 자신이

[state ]
type = ChangeState
trigger1 = 1
value = 1

이런 식으로 저 코드 안으로 들어가면 자신의 라이프가 0 이 되는 탓에 죽고 말겠지만,

[state ]
type = TargetState
trigger1 = 1
value = 1

이런 식으로 상대를 저 코드 안으로 넣어버리면 상대의 라이프가 0 이 됩니다.



마찬가지로,

[statedef 2]

[state ]
(초즉사 코드)
(alive 값에 1 을 빼는 효과가 있음)

이런 식으로 alive 값에 1 을 빼는, "초즉사" 코드를 설계한 뒤,



[state ]
type = TargetState
trigger1 = 1
value = 2

이렇게 상대를 보내버리면 상대의 alive 값은 1 에서 0 이 되고,

상대는 즉사하게 됩니다.



그런데 TargetState 를 쓰지 않고, 바로 상대의 alive 값을 0 으로 만들어 버릴 수는 없을까요?

직사 코드에 해답이 있습니다.

그러나 여기에는 큰 문제가 하나 있습니다.



무겐에서 alive 값을 관리하는 주소는 어디인지 이미 알려져 있습니다.

그러나 이는 "자신의" alive 값을 관리하는 주소입니다.

[state ]
type= LifeSet
trigger1 = 1
value = 0

이런 코드도 "자신의" 라이프를 0 으로 만들 뿐입니다.

물론 상대를 이쪽으로 가져와서 즉사시키긴 하지만요.



이처럼 "자신의" 라이프를 0 으로 만드는 코드 (LifeSet) 는 존재하지만,

"상대의" 라이프에 간섭할 수 있는 방법은 존재하지 않습니다.



그러나 alive 값이라면 이야기가 달라집니다.

앞서 말씀드린대로 "자신의" alive 를 관리하는 영역의 주소는 이미 알려져 있습니다.

따라서 "자신의" alive 값을 조작하는 코드를 만들기는 굉장히 쉽습니다.



그러나 "상대의" alive 값을 관리하는 영역의 주소는 알려져 있지도 않고,

무겐에 등록된 캐릭터 수 등에 따라서 그 위치가 달라집니다.

즉, 상대의 alive 값을 관리하는 영역의 주소는 정해져 있지 않다고 할 수 있습니다.



이때, alive 값이 가진 재미있는 특징을 이용하면 비록 주소를 알고 있지 않더라도

"상대의" alive 값을 조작할 수 있게 됩니다.



무겐에서 alive = 1 이라는 것은 살아있다는 것을 의미합니다.

반대로 alive = 0 이라는 것은 살아있지 않다는 것을 의미합니다.

그런데, alive 값을 2, 3, 4 혹은 -1, -2, -3, ..., -256 처럼 엉뚱한 수로 조작해 버리면

무슨 일이 일어날까요?



무겐에서는 alive 값이 1 이 아닐 때, 무조건 사망 판정을 냅니다.

따라서, 굳이 alive 값에 1 을 빼는 코드를 만들지 않고,

alive 값에 1 을 더하는 코드를 만들어도 (alive 값이 1 에서 2 가 되지요.)

상대 캐릭터를 KO 시킬 수 있게 됩니다.



따라서 굳이 상대방의 alive 값을 관리하는 주소는 찾을 필요도 없게 됩니다.

그냥 대충 짐작가는 곳의 값을 전부다 조작해 버리면 됩니다.

그냥 모든 값에 싹다 1 을 더해버리는 식으로 말이지요.



이처럼 무겐에 존재하는 거의 모든 값에 1 을 더해버리면,

자연스럽게 상대의 alive 값에도 1 이 더해지게 될 것입니다.

따라서, 상대방은 죽게 되고, 이를 "직사" 코드라고 부릅니다.



초즉사 코드는 특정 주소값을 변경하는 코드입니다.

이를 행하기 위해, 초즉사 코드에는 수많은

[state ]
type=null
trigger1=1

이 존재합니다.



반면, 직사 코드는 상대방의 alive 값을 관리하는 주소가

있음직한 곳의 값을 전부 다 변경해 버리는 코드입니다.

따라서, 초즉사와는 비교할 수 없을 정도로 많은

[state ]
type=null
trigger1=1

이 존재합니다.



직사 코드는 상대방의 alive 값을 정확히 저격하는 것이 아니고,

그 부분의 값을 싹 바꿔 버리기 때문에, 엉뚱한 값이 변경되어 버릴 수가 있습니다.

또한, 처음부터 상대방의 alive 값을 관리하는 주소는 "정해져 있지 않습니다."

무겐에 등록된 캐릭터 수, 무겐 자체의 환경 등에 따라 바뀌게 됩니다.

따라서, 어떤 PC 에서는 동작하지 않는 경우가 생겨 버리게 됩니다.

이처럼 직사 코드는 굉장히 불안정한 코드라고 할 수 있습니다.
추천0

댓글목록 0

등록된 댓글이 없습니다.

개인정보처리방침 이용약관

사이트 정보

Copyright © 무겐 어소시에이션 All rights reserved.
PC 버전으로 보기