EUD/오프셋

 




1. 참고
2. 오프셋 목록
2.3. 스프라이트 분류
2.3.1. 체력칸 크기 조절
2.4. 구조오프셋 분류
2.4.1. 유닛의 구조오프셋
2.5. 특수 및 기타 분류
2.5.1. 플레이어 ID 변경
2.5.2. 업그레이드
2.5.3. 유닛 이름 스트링 변경
2.5.4. 프레임
2.5.5. 화면밝기


1. 참고


  • 이 문서는 스타크래프트의 EUD 맵메이커들을 위하여 EUD에 사용되는 오프셋을 모아놓은 문서다. 이 문서에 존재하는 모든 오프셋은 1.16.1을 기준으로 작성되었다.
  • 모든 오프셋은 조건부와 실행부의 장벽이 존재하지 않는다. EUD는 조건부 "어떠한 플레이어의 어떠한 유닛이 얼마나 죽은 경우"와 실행부 "어떠한 플레이어의 어떠한 유닛의 죽은 횟수 설정"으로 나뉘어진다. 모든 오프셋은 대부분 조건부로 사용시 EUD Enabler (EUD 활성화 플러그인) 없이 실행이 가능하나, 실행부로 사용시에는 EUD Enabler, 혹은 그것을 포함하는 런처로 실행하여야 한다.
  • 조건부로 사용시에는 해당 오프셋이 공유될 수 있는지를 확인하여야 한다. 공유되지 않는 오프셋을 조건부로 사용할 경우, 플레이어간에 서로 공유되는 실행부[1]를 사용하면 방 갈림 현상이 생기게 된다.[2]
  • 기본적으로 EUD에 사용되는 오프셋은 스타크래프트의 모든 데이터를 변경할 수 있다. 더욱 많은 오프셋에 대해서는 여기를 참고할 것.

2. 오프셋 목록



2.1. 유닛



2.2. 무기



2.3. 스프라이트 분류



2.3.1. 체력칸 크기 조절


Memory Offset
Object ID
Byte
Value
0x665E50
스프라이트 ID - 130
1
체력칸 크기

2.4. 구조오프셋 분류



2.4.1. 유닛의 구조오프셋


공유 여부
O
Memory Offset
Object ID
Byte
Value
아래 내용 참조
-
1
유닛의 구조오프셋
기본적인 유닛의 데이터 ID를 인식하는 오프셋과는 달리 구조오프셋을 인식한다. 또한 이 오프셋은 공유 오프셋이므로 게임에 영향을 주는 실행부도 아주 잘 작동한다. 오브젝트 ID에는 아무것도 안들어가므로 밸류에 유닛의 구조오프셋을 그대로 넣기만 하면 된다.
플레이어별 오프셋이 존재한다.
플레이어
오프셋
1P
0x6284E8
2P
0x628518
3P
0x628548
4P
0x628578
5P
0x6285A8
6P
0x6285D8
7P
0x628608
8P
0x628638
아래는 간단한 트리거 형식이다. n에 원하는 유닛의 구조오프셋을 10진수로 넣으면 된다.
SCMD
1P
Deaths("Player 10", "
Int:13490
", Exactly, n);
2P
Deaths("Player 10", "
Int:13491
", Exactly, n);
3P
Deaths("Player 10", "
Int:13492
", Exactly, n);
4P
Deaths("Player 10", "
Int:13493
", Exactly, n);
5P
Deaths("Player 10", "
Int:13494
", Exactly, n);
6P
Deaths("Player 10", "
Int:13495
", Exactly, n);
7P
Deaths("Player 10", "
Int:13496
", Exactly, n);
8P
Deaths("Player 10", "
Int:13497
", Exactly, n);
스타포지
플레이어
확장 유닛
확장 플레이어
1P
Deaths(9, Exactly, n, 13490);
Deaths(161889, Exactly, n, 0);
2P
Deaths(9, Exactly, n, 13491);
Deaths(161901, Exactly, n, 0);
3P
Deaths(9, Exactly, n, 13492);
Deaths(161913, Exactly, n, 0);
4P
Deaths(9, Exactly, n, 13493);
Deaths(161925, Exactly, n, 0);
5P
Deaths(9, Exactly, n, 13494);
Deaths(161937, Exactly, n, 0);
6P
Deaths(9, Exactly, n, 13495);
Deaths(161949, Exactly, n, 0);
7P
Deaths(9, Exactly, n, 13496);
Deaths(161961, Exactly, n, 0);
8P
Deaths(9, Exactly, n, 13497);
Deaths(161973, Exactly, n, 0);

2.5. 특수 및 기타 분류



2.5.1. 플레이어 ID 변경


Memory Offset
Object ID
Byte
Value
아래 내용 참조
-
1
텍스트
게임 내에서, 플레이어의 ID를 변경하는 오프셋이다.
플레이어별 오프셋이 존재한다. 아래는 기본 베이스 데스테이블이며, 이후 ID 변경은 아래 규칙을 따른다.
기본 베이스 테이블
1P
SetDeaths(-11551, SetTo, 2, 0);
SetDeaths(-11551, Add, 256, 0);
SetDeaths(-11551, Add, 65536, 0);
2P
SetDeaths(-11542, SetTo, 2, 0);
SetDeaths(-11542, Add, 256, 0);
SetDeaths(-11542, Add, 65536, 0);
3P
SetDeaths(-11533, SetTo, 2, 0);
SetDeaths(-11533, Add, 256, 0);
SetDeaths(-11533, Add, 65536, 0);
4P
SetDeaths(-11524, SetTo, 2, 0);
SetDeaths(-11524, Add, 256, 0);
SetDeaths(-11524, Add, 65536, 0);
5P
SetDeaths(-11515, SetTo, 2, 0);
SetDeaths(-11515, Add, 256, 0);
SetDeaths(-11515, Add, 65536, 0);
6P
SetDeaths(-11506, SetTo, 2, 0);
SetDeaths(-11506, Add, 256, 0);
SetDeaths(-11506, Add, 65536, 0);
7P
SetDeaths(-11497, SetTo, 2, 0);
SetDeaths(-11497, Add, 256, 0);
SetDeaths(-11497, Add, 65536, 0);
8P
SetDeaths(-11488, SetTo, 2, 0);
SetDeaths(-11488, Add, 256, 0);
SetDeaths(-11488, Add, 65536, 0);

2.5.2. 업그레이드


공유 여부
O
Memory Offset
Object ID
Byte
Value
아래 내용 참조
업그레이드 ID
1
변경할 업그레이드 수
오브젝트 ID에는 원하는 업그레이드의 ID, 밸류값에는 인식할 업그레이드의 단계를 넣으면 된다.
플레이어별 오프셋이 존재한다.
오리지널 (00 ~ 2D)
브루드워 (2E ~ 3C)
플레이어
오프셋
플레이어
오프셋
1P
0x58D2B0
1P
0x58F32C
2P
0x58D2DE
2P
0x58F33B
3P
0x58D30C
3P
0x58F34A
4P
0x58D33A
4P
0x58F359
5P
0x58D368
5P
0x58F368
6P
0x58D396
6P
0x58F377
7P
0x58D3C4
7P
0x58F386
8P
0x58D3F2
8P
0x58F395
특이하게 오리지널 업그레이드 (00 ~ 45)와 브루드워 업그레이드 (46 ~ 60)별로 오프셋이 다르다. 그러므로 만약 당신이 인식하는 업그레이드가 45 이하 (오리지널)인지, 그보다 높은 ID의 업그레이드 (브루드워)인지를 알고 그에 맞는 오프셋을 선택하여야 한다.
또한 브루드워 업그레이드 인식의 경우, 46을 0으로 본다. 그러므로 브루드워 업그레이드 오프셋 사용시에는 46만큼 뺀 뒤 사용하여야 한다. 이를 사용시 브루드워 업그레이드 오프셋 사용시 오브젝트 ID에 넣을 수는 0 ~ 14이다.

2.5.3. 유닛 이름 스트링 변경


Memory Offset
Object ID
Byte
Value
0x660260
유닛 ID
2
스트링 번호
유닛에게 주어진 스트링을 다른 스트링으로 바꾼다. 스트링 번호는 기본적으로 SCMD에서 확인이 가능하다.

2.5.4. 프레임


Memory Offset
Object ID
Byte
Value
0x6509A0
-
4
-
기본적으로 터보 트리거는 Wait(0);을 무한히 반복시켜서 무한히 반복되는 Wait를 이용함으로써 초당 약 12번가량 트리거를 실행시키게 만드는 트리거이다. 그러나, Wait 터보 트리거의 단점은 Wait 트리거를 사용시 Wait가 서로 꼬여버리는 현상이 생기기에, 사용하지 않는 컴퓨터에 넣어야 한다.
이 오프셋은 매 프레임마다 1씩 줄어들며, 0이 되면 트리거를 작동시킴과 동시에 다시 30으로 돌아간다. 즉, 이 오프셋을 0으로 놓으면 그 즉시 트리거가 빠르게 작동되기에 초당 약 24번까지 트리거를 작동시킬 수 있어 매우 빠른 트리거 작동이 가능하다. 때문에 Wait 꼬임 현상이 현저히 줄어들게 되기에 어느 플레이어에 놓아도 트리거가 서로 꼬이는 일이 없다.
  • SCMD
Set Deaths("Player 4", "
Int:16929
", Set To, 0);
  • 스타포지
SetDeaths(3, SetTo, 0, 16929); (확장 유닛)
SetDeaths(203151, SetTo, 0, 0); (확장 플레이어)
오프셋의 값 n로 설정하여 (n+1)프레임마다 트리거가 작동시키게 할 수 있으며, 물론 기본 값 30보다 더 높게 설정할 수 있다.

2.5.5. 화면밝기


Memory Offset
Object ID
Byte
Value
0x657A9C
-
1
밸류값이 1에 가까울 수록 맵밝기가 어두워짐
  • 스타포지
SetDeaths(10, SetTo, n, 17531); (확장 유닛)
SetDeaths(210382, SetTo, n, 0); (확장 플레이어)
  • SCMD
Set Deaths("Player 11", "Int:17531", Set To, n);


[1] 텍스트나 화면 이동의 경우는 해당 플레이어에게만 작동되므로 비공유에 속한다. 반대로 유닛을 생성하거나 이동, 스위치 및 유닛 죽은 값 변경은 공유에 속한다. 즉, 한명의 플레이어에게 실행시 해당되는 플레이어 뿐만 아니라 그 결과가 타 플레이어에게 전해지는 실행부를 공유 실행부라 할 수 있다.[2] 간단하게 예시를 들자면, WAV 파일 재생이나 텍스트 출력은 오로직 자신에게만 보여지며, 다른 플레이어가 이를 알아야 할 필요는 없다. 그러므로 이것은 비공유에 속하므로 사용될 수 있다. 하지만, 유닛의 소유권 변경, 유닛 생성, 체력이나 실드, 마나량 변경 등 자신은 물론 다른 플레이어도 알아야 할 필요가 있는 실행부를 공유하지 않는 조건부와 함께 사용시, 자기 자신과 다른 플레이어끼리 정보가 전혀 다르게 되므로 결국 서로 정보가 다른 플레이어를 완전히 격리시키듯 나눠버린다. 이를 대표적으로 방 갈림 현상이라 부른다.

분류