관련 문서: EUD/오프셋 심화
스타크래프트 트리거 관련 문서 | ||
<colbgcolor=#000><colcolor=#c8dce6> 트리거 | 조건 · 실행(인공지능) | |
EUD | <colbgcolor=#000><colcolor=#c8dce6> 오프셋 | 유닛 · 무기 · 로케이션 · 심화 |
툴 | EUD Editor · TrigEditPlus | |
기타 | Unlimiter · epScript · 배우기 |
1. 참고
- 이 문서는 스타크래프트의 EUD 맵메이커들을 위하여 EUD에 사용되는 오프셋을 모아놓은 문서다. 이 문서에 존재하는 모든 오프셋은 1.16.1을 기준으로 작성되었다.
- 모든 오프셋은 조건부와 실행부의 장벽이 존재하지 않는다. EUD는 조건부 "어떠한 플레이어의 어떠한 유닛이 얼마나 죽은 경우"와 실행부 "어떠한 플레이어의 어떠한 유닛의 죽은 횟수 설정"으로 나뉘어진다. 모든 오프셋은 대부분 조건부로 사용시 EUD Enabler (EUD 활성화 플러그인) 없이 실행이 가능하나, 실행부로 사용시에는 EUD Enabler, 혹은 그것을 포함하는 런처로 실행하여야 한다.
- 조건부로 사용시에는 해당 오프셋이 공유될 수 있는지를 확인하여야 한다. 공유되지 않는 오프셋을 조건부로 사용할 경우, 플레이어간에 서로 공유되는 실행부[1]를 사용하면 방 갈림 현상이 생기게 된다.[2]
- 더욱 많은 오프셋에 대해서는 여기를 참고할 것.
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 | 유닛의 구조오프셋 |
플레이어별 오프셋이 존재한다.
플레이어 | 오프셋 |
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 변경은 아래 규칙을 따른다.
기본 베이스 테이블 | |
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 | 변경할 업그레이드 수 |
플레이어별 오프셋이 존재한다.
오리지널 (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 | 스트링 번호 |
2.5.4. 프레임
Memory Offset | Object ID | Byte | Value |
0x6509A0 | - | 4 | - |
이 오프셋은 매 프레임마다 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(210382, SetTo, n, 0); (확장 플레이어)
- SCMD
[1] 텍스트나 화면 이동의 경우는 해당 플레이어에게만 작동되므로 비공유에 속한다. 반대로 유닛을 생성하거나 이동, 스위치 및 유닛 죽은 값 변경은 공유에 속한다. 즉, 한명의 플레이어에게 실행시 해당되는 플레이어 뿐만 아니라 그 결과가 타 플레이어에게 전해지는 실행부를 공유 실행부라 할 수 있다.[2] 간단하게 예시를 들자면, WAV 파일 재생이나 텍스트 출력은 오로직 자신에게만 보여지며, 다른 플레이어가 이를 알아야 할 필요는 없다. 그러므로 이것은 비공유에 속하므로 사용될 수 있다. 하지만, 유닛의 소유권 변경, 유닛 생성, 체력이나 실드, 마나량 변경 등 자신은 물론 다른 플레이어도 알아야 할 필요가 있는 실행부를 공유하지 않는 조건부와 함께 사용시, 자기 자신과 다른 플레이어끼리 정보가 전혀 다르게 되므로 결국 서로 정보가 다른 플레이어를 완전히 격리시키듯 나눠버린다. 이를 대표적으로 방 갈림 현상이라 부른다.