상위 문서: 스타크래프트
스타크래프트 시리즈 맵 관련 문서 | |||||
스타크래프트(유즈맵 · 트리거 · 타일셋) | 스타크래프트 2(아케이드 · 팀플 · 지형) | ||||
> 테란맵 | > 저그맵 | > 토스맵 | |||
> > > 상성맵 | > > > 역상성맵 | ≈ ≈ 개념맵 | |||
2인용 · 3인용 · 4인용 · 섬맵 · 반섬맵 · 무한맵(빠른 무한) | |||||
에디터 | Scmdraft 2 · TrigEditPlus · 세디터 · 스타포지 · 엑스트라 에디터 / 갤럭시 맵 에디터 | ||||
커뮤니티 | 스타 에디터 아카데미 · |
스타크래프트 트리거 관련 문서 | ||
<colbgcolor=#000><colcolor=#c8dce6> 트리거 | 조건 · 실행(인공지능) | |
EUD | <colbgcolor=#000><colcolor=#c8dce6> 오프셋 | 유닛 · 무기 · 로케이션 · 심화 |
툴 | EUD Editor · TrigEditPlus | |
기타 | Unlimiter · epScript · 배우기 |
1. 개요
스타크래프트 유즈맵에서 플레이가 진행될 수 있도록 맵 에디터에서 제작자에게 제공하는 일종의 프로그래밍 언어를 일컫는다.아무런 트리거 없이 만들 수 있는 맵은 유닛 성능 실험용 맵이나 단순한 가족놀이, 건물 짓고 놀기[1] 정도 뿐으로 맵 제작의 필수요소라 할 수 있다. 기본적인 밀리맵도 기본 미네랄 50 제공, 내가 건물이 하나도 없을 시 패배, 적들의 건물이 하나도 없을 시 승리라는 트리거가 부여되어 있으며[2], 많고 많은 스타크래프트/캠페인의 미션들도 각종 트리거로 점철되어있다.[3]
게임 모드를 흔히 유즈맵이라 불리는 사용자 지정 지도(Use Map Setting)로 하지 않으면, 설정해 놓은 모든 트리거는 생까고 해당 게임 모드에 해당하는 기본적인 트리거만 부여된다.[4]
이 문서에 있는 트리거들은 Scmdraft 2의 Beta 0.8.0 버전을 기준으로 서술되었기 때문에 StarEdit이나 세디터 등 다른 에디터에서는 존재하지 않거나 수정된 종류의 트리거가 조금 있다. 또한 기본적으로 스타크래프트 1.16.1 버전에서 사용된다고 가정하고 기술하기 때문에 이전 버전에서는 정상 작동하지 않는 트리거도 있다. 한글명은 세디터를 기준으로 작성되었다.
2. 구성 요소
트리거를 구성하는 요소로는 크게 Player(플레이어), Condition(조건), Action(실행)이 있다. 플레이어는 특정 트리거의 실행이 적용되는 대상을 뜻하고, 조건은 실행이 발생하기 위한 조건을, 실행은 조건이 충족될 시에 플레이어에게 행하는 일을 뜻한다.모든 트리거 구성 요소에는 네모칸이 되어있다. 여기를 한번 클릭하면 ☒모양이 되고 한번 더 클릭하면 원래대로 □로 돌아온다. ☒표시가 된 것들은 유효하고 □표시가 된 것들은 무효하다. 기본적으로 플레이어탭은 전부 □로 시작하고 조건과 실행탭은 만드는 족족 ☒표시가 된다.
2.1. Players (플레이어)
- Scmdraft 2
- 세디터
위에 보이다시피 Scmdraft 2에서 트리거로 지정해 줄 수 있는 플레이어의 종류는 총 27개이다. Player 1부터 8은 모든 트리거가 정상적으로 적용된다. Player 9부터 11까지는 몇몇 트리거의 적용에 제약을 받는데, Create 트리거가 적용되지 않으며, Death 트리거도 실제 유닛이 죽지 않는 이상 적용이 되지 않는다. Neutral은 Player 12와 같은 말이며, Player 9~Player 11과 마찬가지로 트리거 적용에 제약을 받는다.[5]
그 외에 All Players는 모든 플레이어, Current Player는 해당 플레이어[6], Foes는 적 플레이어들, Allies는 동맹 플레이어들, Neutral Players는 플레이어 타입[7]이 Neutral인 플레이어들, Force 1 부터 4는 지정된 각 팀들에게 적용되는 플레이어란 뜻이다.
플레이어의 지정은 트리거의 3요소 중 하나인 Players에서 지정하는 것이 있고 각 Condition이나 Action에서 지정하는 것이 있다. 트리거의 3요소중 하나인 Players에서 지정하는 플레이어는 그 트리거의 주체가 된다. 예를 들어 'Player 1'을 Players에서 지정하고 트리거를 짤 때, Condition 중에 플레이어를 지정하는 조건문에서 Foes(적 플레이어들)을 지정하면, 말그대로 Player 1과 적대 관계에 있는 플레이어들이 조건을 만족했을 때 트리거가 발동된다.
Players에는 플레이어 한명만 지정할 수 있는게 아니라 팀이나 모든 플레이어로도 지정할 수 있다. 이를 활용하면, 해당 팀에 속한 플레이어만 트리거가 발동되도록 할 수 있다. 예를 들어 사람 플레이어들을 한데 묶어 Force 1에 지정해놓고 트리거의 주체를 Force 1으로 해놓은 다음 트리거 조건에 'Current Player(해당 플레이어)'의 유닛이 특정 지역에 오면 죽인다' 라는 트리거를 짜놓았다고 해보자. 이럴경우 Force 1에 해당되는 플레이어의 유닛이 왔을 때만 발동되고, 다른 팀의 플레이어가 가진 유닛은 트리거에 영향을 받지 않는다.
2.2. Conditions (조건)
자세한 내용은 스타크래프트/트리거/조건 문서 참고하십시오.2.3. Actions (실행)
자세한 내용은 스타크래프트/트리거/실행 문서 참고하십시오.3. 특수 트리거
3.1. EUD
자세한 내용은 EUD 문서 참고하십시오.3.2. 터보 트리거
Turbo Trigger / Hyper Trigger<colbgcolor=#f5f5f5,#2d2f34> 플레이어 | All Players |
조건 | Always |
실행 | Wait for 0 milliseconds. |
Wait for 0 milliseconds. | |
Wait for 0 milliseconds. | |
…[8] | |
Wait for 0 milliseconds. | |
Preserve trigger. |
Wait 꼬임 버그로 만들어진 트리거. 하이퍼 트리거라고 부르기도 한다. 보통 영미권에서는 하이퍼라는 용어를 사용한다.
트리거를 만들 때 Preserve Trigger를 이용하여 어떠한 행동을 무한 반복하도록 만들 경우[9], 해당 행동을 반복하는 주기에는 기본적으로 Fastest 속도 기준으로 1.26초[10]의 딜레이가 존재한다. 따라서 빠르게 터지게 하려는 의도와는 다르게 유닛은 1.26초 간격으로 띄엄띄엄 죽게 된다. 이 현상을 방지하기 위해서 만들어진 트리거가 터보 트리거이다. 꼭 그런 특수한 경우가 아니라고 하더라도 어떤 플레이어가 어떤 행동을 했을 때, 그것을 바로바로 인식하게 할 수 있기 때문에 웬만하면 넣는 게 좋다.
트리거의 구조는 위와 같이 실행부에 63개[11]의 0ms를 기다리는 Wait 트리거와 해당 트리거를 무한 반복하는 Preserve Trigger로 이루어져 있다. 이렇게 만든 다음 이 트리거를 3개 정도 복사하면 된다.
주의할 점은, 이 트리거를 넣을 플레이어에게는 다른 Wait 트리거가 존재하면 안된다. 터보 트리거가 다른 wait 트리거보다 위인 경우 다른 wait 트리거가 먹통이 되고 반대의 경우엔 다른 wait 트리거가 먼저 처리되기 전까지 터보 트리거가 먹통이 된다. 따라서 컴퓨터 플레이어나 Wait을 사용하지 않는 플레이어에 넣는 것이 좋다.
<colbgcolor=#f5f5f5,#2d2f34> 플레이어 | All Players |
조건 | All Players has suffered exactly 0 deaths of Cave. |
실행 | Modify death counts for Current Player: Set to 1 for Cave. |
Wait for 0 milliseconds. | |
Modify death counts for Current Player: set to 0 for Cave. | |
Wait for 0 milliseconds. | |
Preserve trigger. |
그러다가 어떤 플레이어가 트리거 하나로 작동하는 위의 터보 트리거를 발견했다. 여기서 Cave는 알파버전에서 자원이었다가 정식 발매 단계에서 언유즈드(Unused) 요소로 남은 건물형 유닛. 원래 트리거가 길고 3개나 필요했던 것에 비해 훨씬 간단 명료하게 쓸 수 있다는 장점이 있다.
EUD를 사용하는 맵의 경우, 원래 터보 트리거의 거의 두 배 속도로 작동하는 EUD 터보가 있다. 원래 트리거는 30프레임에 한 번씩 실행되는데, 그 이유는 매 프레임마다 1 씩 줄어드는 오프셋 0x6509A0의 값이 0이 되면, 트리거들을 실행하고 다시 30으로 설정되는 과정을 반복하기 때문이다. 따라서 EUD로는 해당 오프셋의 값을 임의로 설정할 수 있기 때문에 해당 오프셋의 값을 계속 0으로 설정해주면 매 프레임마다 트리거를 실행할 수 있게 되는 것이다.
<colbgcolor=#f5f5f5,#2d2f34> 플레이어 | All Players |
조건 | Always |
실행 | Modify death counts for 203151: Set to 0 for 0. |
Preserve trigger. |
[1] 요새는 이런 종류의 유즈맵에도 어느 정도 트리거가 다 있다.[2] 이는 맵을 새로 만들기를 했을 때 기본으로 주어지는 트리거이기도 하다.[3] 필수사항은 맵 저장 시 최소 2명의 Start Location(시작 지점)이 있어야 한다는 것인데, 1인용이라도 2인용 이상이더라도 어떤 게임 모드로 해도 반드시 2명 이상이 있어야 한다. Start Location이 없는 플레이어는 그 맵에서 없는 것으로 설정되기 때문이다.[4] 이는 배치해둔 유닛과 건물들도 마찬가지로 전부 사라지며 플레이어 12 소유의 중립 건물들과 유닛들도 사라진다. 오로지 플레이어 12 소유의 크리터, 광물 지대, 베스핀 가스들만 영향이 없다. 몇몇 밀리맵에 중립 건물이 사라지지 않는 것은 Scmdraft 등을 사용해 유닛 스프라이트 상태로 배치한 것이다.[5] 플레이어가 1부터 12까지 있는거를 보면 처음에는 12인용으로 만들려다가(Neutral은 Player 13로 할당되었을 것이다.) 8인용로 변경한 것으로 보인다. 사실 캔낫 현상이 있어서 12인용이라도 모두 다 제대로 플레이할 수 없다.[6] 이 플레이어는 사실상 트리거의 Player탭에서 쓸일은 없다. 주요용도는 예를들어 Player 1 부터 Player 6까지가 전부 Force 1일 때 같은 트리거를 플레이어 숫자를 바꿔가면서 일일이 다 작성하려면 복붙을 하더라도 노가다가 꽤나 필요하기에 Player 1의 조건이 충족됐으면 해당 플레이어인 Player 1에게 실행이, Player 2의 조건이 충족됐으면 해당 플레이어인 Player 2에게 실행되게 하는 용도이다.[7] 사람이 들어가는 Player, 기초 인공지능과 트리거에 맞춰서만 움직이는 컴퓨터가 들어가는 Computer, 트리거에 지정된 행동 외에 반격과 도망을 포함한 어떠한 행동도 하지 않는, 모든 플레이어들과 동맹인 중립 컴퓨터가 들어가는 Neutral, Neutral과 동일하지만 Player의 유닛이 근접하면 해당 플레이어의 소유 유닛으로 바뀌는 컴퓨터가 들어가는 Rescuable, 이렇게 4가지 타입이 주로 사용된다. 참고로 모든 컴퓨터들은 별도의 트리거를 설정하지 않는 한 모두 동맹관계이고 플레이어 ↔ 플레이어, 플레이어 ↔ 컴퓨터는 별도의 트리거를 설정하지 않거나 Force 설정에서 동맹관계를 설정하지 않은 경우 모두 적대관계이다.[8] 총 63개[9] 예를들면 특정 유닛을 계속 죽여 이펙트를 표현한다든가[10] 스타크래프트에서의 30프레임에 해당하는 시간이다.[11] 트리거 실행부의 최대 개수 제한이 64개이다.