[CK2 모딩 팁]내멋대로 쓰는 Crusader King 2 모딩 매뉴얼 (2) 디시전 파일의 구조 - 개정판 (2015/04/28 수정)
작성자tacitus작성시간15.02.13조회수3,365 목록 댓글 7내멋대로 쓰는 Crusader Kings 2 모딩 매뉴얼 - 개정판
4. 디시전 파일의 작성
(1) 서론
모드 작성자들이 보통 가장 먼저 만들게 되는 파일이 아마도 이 디시전 파일이 아닌가 합니다. CKII 플레이어라면 디시전이 뭔지 모르시는 분은 없으시겠죠. 음모 탭 밑에 좌르르륵 뜨는 그것들 말입니다.
이것들 말입니다.
왜 일반적으로 디시전을 가장 먼저 건드리게 될까요? 아마도, 플레이어의 조작을 통해 의도한 무언가를 필요한 때에 실행시키는 가장 편리한 방법이 디시전이기 때문일 겁니다. 디시전을 통해서 이벤트를 호출하거나, 특정 NPC 를 대상으로 무언가를 하거나, 또는 특정 프로빈스를 대상으로 무언가를 하거나 등등..
초심자분들은 벌써부터 눈앞이 어질어질하실지도 모르겠습니다. 이번 장에서는 디시전 파일이 어떻게 생겼는지, 그 구조에 대해서만 확실히 말씀드릴 겁니다. 사실 디시전에 고유한 내용은 그 구조 하나 뿐이기도 합니다. 구조만 파악하면, 구조 속의 빈 공간을 채우는 건 얼마나 많은 명령어와 조건문을 알고 있는가의 싸움이 되기 때문에... 따라서, 이번 회로서 사실 디시전에 관한 한 거의 모두를 알게 될 것이라고 생각하셔도 됩니다.
사실 팁게시판에 다른 분께서 유로파의 디시전 파일에 대해 자세히 설명해 놓으셨는데, 같은 회사의 게임이다 보니 반 이상 내용이 겹칩니다. 덕분에 의욕이 40% 정도 하락...
(2) 디시전 파일의 위치
디시전 파일의 위치는 게임이 설치된 폴더 아래 \decisions 폴더입니다.
플레이어가 직접 게임을 설치하는 것이 아니라 스팀 클라이언트가 게임을 설치해주다보니, 게임이 설치된 폴더의 위치를 못 찾으시는 분들도 종종 만나곤 합니다. 본격적인 모딩을 시작하려는 상황이니 이 내용을 한 번쯤은 말씀드릴 필요가 있겠네요. CKII 게임이 설치된 위치는, 유저가 그 위치를 바꾸지 않았다면 보통 다음의 위치입니다.
- C:\Program Files\Steam\steamapps\common\Crusader Kings II
64비트 윈도우의 경우에는 다음 위치가 되겠지요.
- C:\Program Files (x86)\Steam\steamapps\common\Crusader Kings II
스팀 클라이언트 실행 후, [라이브러리] - [게임] 을 클릭하면 내가 가지고 있는 게임 목록이 나오죠. 거기서 경로를 찾기를 원하는 게임에 마우스 오른쪽 버튼을 클릭한 후 [속성] - [로컬 파일] 탭 - [로컬 컨텐츠 폴더 보기...] 버튼을 클릭하시면 게임이 설치된 폴더가 탐색기로 열리게 됩니다.
원본의 디시전 폴더를 열어 보면, 2.3.4 버전 기준으로 모두 19개의 디시전 파일이 존재하는 것을 확인할 수 있습니다. 원본과 모드의 폴더 위치는 서로 같은 위치에 대응하니까, 우리가 새로운 디시전 파일을 생성하거나 기존의 디시전 파일을 수정하기 위해 원본의 디시전 파일을 복사해야 하는 곳은 모드 폴더 아래 \decisions 폴더가 됩니다.
(3) 디시전 파일의 구조
드디어 디시전 파일의 구조를 알아볼 차례입니다. 아직 아무 것도 모르는 상태에서 원본의 디시전 파일 하나를 딱 던져드리면 숨이 막히실 테니, 내용을 다 쳐내고 뼈대만 남겨서 보여드리겠습니다. 일반적인 디시전 정의의 모양은 이렇게 생겼습니다.
decisions = { decision_name = { from_potential = { # 일부의 경우에는 사용하지 않는다. } potential = { } allow = { } effect = { } revoke_allowed = { # 그냥 이렇게 쓴다고만 알아두면 된다. always = no } ai_will_do = { # 플레이어만 사용할 디시전이라면 0이다. 숫자를 정의하면 AI가 사용할 확률이 된다. factor = 0 } } }
이후에도 마찬가지지만, 모든 CKII의 모드 파일은 중괄호{ }를 짝을 맞추어 잘 적으셔야 합니다. 즉, 한 번 열었으면 반드시 닫으셔야 해요. "여기부터 여기까지가 이 내용이다" 라는 걸 중괄호로 표기를 하기 때문에, 이걸 잘못 적으시면 최악의 경우 게임이 멈추고 튕기는 사태가 벌어집니다. 이 중괄호는 섹션의 범위, 스코프의 범위, 구의 범위 등 거의 모든 구문들의 범위를 설정하는 데 쓰입니다.
세세한 내용들은 아래에서 계속 설명할 것이므로, 일단 저런 식의 구조를 쓴다는 것만 눈에 익혀 두세요.
■ 첫 중괄호: 디시전 선언, 디시전의 속성 정의
우선 가장 윗 줄의 decisions = { } 부분부터 볼까요? 이것은 decisions = { } 중괄호 안쪽에 정의되는 모든 항목들은 개별 디시전들임을 선언하는 것입니다. "여기부터 디시전들 적을거야!" 라는 알림이죠. 아래와 같이, 이 중괄호 안쪽에 개별 디시전들이 위치하게 됩니다.
decisions = { decision_1 = { ... } decision_2 = { ... } decision_3 = { ... } }
즉, 위의 예에서 decisions = { } 중괄호 안에 있는 decision_1, decision_2, decision_3 이 각각 독립된 하나의 디시전들이라고 알려 주는 역할이죠.
그런데, 이 디시전 그룹 정의에는 여러 종류가 있습니다. 가장 많이 쓰이는 것이 decisions = { } 이긴 하지만, 그것 말고도 여러 종류가 있습니다. decisions = { } 외에, vassal_decisions = { }, targetted_decisions = { } 이라는 녀석도 있습니다. (사실 더 있지만, 여기서는 이 세 가지만 확인할 것입니다. 나머지요? 아직은 모르셔도 됩니다. 다른 것들은 특수한 종류의 디시전이라서요. 나중에 기회가 되면 각개격파하시게 될 거예요.) 이들은 모두 디시전 그룹을 이끄는 선언자로서, 이 중괄호 안쪽의 모든 항목은 디시전 정의임을 선언함과 동시에, 그 안에 들어가는 디시전의 속성이 무엇인지를 함께 선언하게 됩니다. 그럼 얘들이 무슨 차이가 있는지를 설명드려야겠죠?
1) decisions = { } : 일반 디시전 정의
우선, 예시에서처럼 그냥 decisions = { } 라고 시작하면, 가장 일반적인 디시전입니다. 기본 형태의 디시전이죠. 디시전을 실행한 자에게 그 효과를 돌려주기 위한 가장 기본적인 형태입니다. 이 안에 정의된 디시전들은 기본적으로 디시전을 실행한 자(일반적으로 유저)에게 효과가 주어집니다.
일단은 그렇다는 것입니다. 항상 그 효과가 플레이어에게 주어지는 것은 아닙니다. 플레이어가 다른 캐릭터(들)에게 효과를 발생시키는 형태로 그 흐름을 되돌릴 수 있습니다만, 일단 플레이어에게 "실행"된다는 점은 틀리진 않네요. 이건 스코프에 대해서 이해한 후에야 설명이 가능한 것이므로, 여기선 더 이상 말씀 안 드립니다.
2) vassal_decisions = { } : 개별 (AI) 캐릭터에 대한 디시전 정의
decisions = { } 만큼이나 많이 쓰게 되는 것이 바로 vassal_decisions = { } 입니다. 이 중괄호 안쪽에 정의되는 개별 디시전들은, 각각의 개별 디시전에서 별도로 정하는 조건에 맞는 각각의 캐릭터들에 대해서 개별적으로 설정됩니다. 말이 좀 어려운가요?
예를 들면, vassal_decisions = { } 안쪽에 정의된 어떤 디시전이 있는데, 그 조건으로 "나이 16세 미만의 모든 남자 가신" 이라는 조건이 붙어있다고 생각해 봅시다. (아직 배운 게 없으니 구체적으로 코드는 쓰지 않겠습니다.) 그러면, CKII 시스템은 현재의 가신들 중에서 나이 16세 미만의 남자들을 모두 목록으로 만듭니다. 그리고 그들 하나하나에 대해서 개별적으로 하나하나 디시전 목록에 출력을 합니다. 만약 조건을 충족하는 가신 캐릭터가 5명이라면, 5개의 디시전이 디시전 목록에 추가되는 거죠. 그리고 플레이어는 그 중에 디시전을 실행할 캐릭터를 골라 개별적으로 그 디시전을 실행시킬 수 있습니다. 이해가 되시나요? decisions = { } 내부에 정의되는 디시전은 디시전 목록에 하나가 출력되지만, vassal_decisions = { } 내부에 정의되는 디시전은 각각의 디시전에서 제시하는 조건에 맞는 캐릭터의 숫자만큼 개별적인 디시전이 출력되는 것입니다.
사소한 문제는, 이 녀석, 이름을 잘못 지었다는 겁니다. 이름 때문에 (초창기의 저를 포함해서) 많은 사람들이 이 디시전 정의에 대해서 오해를 했거나 하고 계십니다. 일반적으로 vassal 은 봉신을 의미하기 때문에, 잘못하면 이 디시전이 봉신들을 대상으로 하는 디시전인 것처럼 오해할 수 있습니다. 절대 아닙니다. vassal_decisions 를 통해서 호출할 수 있는 캐릭터의 범위는 최대 플레이어의 직접 봉신과 가신들까지 포함합니다. (최대 범위가 그렇다는 거예요. 실제로는 일정한 조건을 더 주어 한정하게 되므로, 그보다 더 좁아지는 경우가 대부분입니다.) 다만, 너무 그 대상자가 많으면 디시전 목록이 심하게 지저분해질 테니, 필요에 맞추어 적절히 제한해 줘야 한다는 건 당연합니다.
3) targetted_decisions = { } : 개별 (AI) 캐릭터에 대한 디시전 정의
제가 모딩을 처음 배울 때만 해도, 유저가 실행 가능한 디시전의 종류는 위 두 가지만 알면 됐습니다. 그런데, 최근 버전에 재미있는 녀석이 추가됐습니다. targetted_decisions = { } 이라는 녀석인데요. 개별적인 캐릭터에 대해서 디시전을 출력한다는 점에서는 vassal_decisions = { } 와 비슷하게 동작합니다. 즉,
targetted_decisions = { test_decision = { filter = self ai_target_filter = spouse ... } }
이렇게 적었다고 할 때, 이것은 아래와 의미가 유사합니다.
vassal_decisions = { test_decision = { from_potential = { ... } potential = { spouse = { character = FROM } ... } } }
위 예시가 이해 안 되시면 그냥 넘어가세요. 초심자는 지금 이해 안 되는 게 당연합니다. 디시전 관련 내용이 다 끝난 후에 돌아와서 다시 읽어보세요. (그냥 의미만 간단히 설명해 드리자면, 두 디시전 모두 플레이어의 배우자(들)을 대상으로 한 디시전입니다.)
그럼 vassal_decisions = { } 와 뭐가 다른가 하면(이 부분은 카페의 유키호 님께서 알려주셨습니다), vassal_decisions = { } 로 지정된 디시전은 흔히 보아온 것처럼 음모 탭의 디시전 목록에 출력됩니다만, 이 targetted_decisions = { } 에 설정되는 디시전 항목은 조건을 만족하는 캐릭터에 마우스 오른쪽 버튼을 클릭하여 캐릭터 메뉴를 띄웠을 때 그 메뉴들 중 하나로서 출력됩니다. 아래 이미지에서 [영지 산책하기] 나 [은신처로 가기]가 그런 예입니다. (전자는 제 모드에서 추가된 것이고, 후자는 원래 존재하는 것입니다.)
적용할 캐릭터의 범위는 filter = 와 ai_target_filter = 뒤에 범위를 적어주면 됩니다. 앞의 것은 디시전 실행자를 제한하는 필터, 뒤의 것은 디시전을 받는 AI 캐릭터의 범위를 제한하는 필터입니다. (초판에 이 부분에 대한 설명이 잘못되어 있었습니다.)
이렇게 사용할 수 있는 타겟은 다음과 같은 것들이 있다고 합니다. (아래는 위키 정보입니다.)
- self: 자기 자신에게 타겟을 설정합니다. 자살 디시전 같은 경우에 사용하겠죠.
- spouse: 자신의 배우자들에게 실행됩니다. (위 예시에서 사용했죠.)
- court: 모든 가신들 + 죄수 + 외국에 나가 있는 가신(외국의 인물에게 맡겨진 미성년자나 외국 감옥에 갇힌 가신들 포함)이 타겟이 됩니다.
- home_court: court 와 home_court 의 차이를 저는 정확히 모르겠습니다.
- vassals: 플레이어 자신의 직접적인 봉신(직신)들을 타겟으로 합니다.
- sub_realm: 플레이어 자신이 속한 realm 내의 캐릭터 중 자신의 영향권 안에 들어 있는 모든 캐릭터들이 그 타겟이 됩니다.
- realm: 플레이어 자신이 속한 realm 내의 모든 캐릭터가 그 타겟이 됩니다. 따라서, 자신이 현재 realm 에서 최상위 위치에 있다면 sub_realm 과 realm 은 그 범위가 같지만, 플레이어 자신이 누군가의 봉신이라면 두 필터의 범위는 서로 같지가 않게 됩니다.
- dynasty: 자신의 가문에 속하는 모든 캐릭터가 타겟이 됩니다. (죽은 가문원 포함!)
- rivals: 플레이어의 라이벌, 그리고 is_foe 트리거가 붙은 캐릭터들, 오피니언 모디파이어에 crime = yes 가 붙은 캐릭터들 등, 한마디로 플레이어에게 척을 진 녀석들을 타겟으로 합니다.
- all: 모든 캐릭터가 타겟이 됩니다. 사용하지 마세요. CPU 뻗습니다.
타겟 지정을 보면, vassal_decisions = { } 보다 targetted_decisions = { } 가 설정할 수 있는 범위가 좀 더 다양하고 넓다는 것을 확인할 수 있습니다. (심지어 all 도 가능하니까요. 다만 권장하지 않을 뿐.)
앞에서도 말씀드렸지만, 디시전의 종류는 이 세 가지 이외에도 몇 가지 더 있습니다. 그러나 그 디시전들은 플레이어가 직접 실행할 수 있는 디시전이라기보다는 게임 내에서 특수한 목적으로 사용되는 디시전들입니다. 그 내용들은 해당 항목을 다룰 기회가 생기면 그 부분에서 설명드릴 것이니, 일단 decisions = { }, vassal_decisions = { }, targetted_decisions = { } 세 가지에 대해서만 확실하게 알아 두십시오.
4) 정리
지금까지 세 가지 종류의 디시전 그룹을 확인했는데요. 언제 어떤 종류의 디시전을 사용해야 하는가의 문제가 남는군요. 원론적이지만, 상황에 따라서 달라집니다. 여러 봉신이나 가신들 중에서 조건에 맞는 봉신 하나하나를 찍어서 개별적으로 디시전을 실행시키고 싶다면 targetted_decisions = { } 이나 vassal_decisions = { } 안에 디시전을 작성하시면 되고, 그게 아니라면 decisions = { } 안에 몰아넣으시면 일단 크게 틀리지는 않습니다.
■ 디시전 이름
뭔가 엄청나게 많이 한 것 같은데, 우리 이제까지 디시전 구조에서 꼴랑 한 줄 읽었습니다. (ㅋㅋㅋ)
디시전의 종류를 정하면 그 다음에는 디시전의 이름을 적습니다. 처음에 보여드린 디시전 구조에서 decision_name 이라고 적혀있는 부분이죠. 바로 위에 보여드린 예에서는 test_decision 이 디시전 이름이 되죠. 이렇게 디시전 이름을 쓰고 괄호를 묶어 주면 그 안쪽의 내용은 개별 디시전의 내용이 되는 겁니다.
참고로, 디시전의 종류를 정의한 안쪽에는 몇 개의 디시전이든 들어갈 수 있습니다. 디시전 이름만 서로 겹치지 않으면요. 이미 보셨죠?
decisions = { decision_1 = { ... } decision_2 = { ... } decision_3 = { ... } }
위의 decision_1, 2, 3 은 모두 독립된 디시전입니다. 디시전 이름 역시, 지난 회에 지나가면서 말씀드린 이벤트 ID 와 같이 유니크해야 합니다. 이름이 겹치는 두 개 이상의 유효한 디시전들은 모두 정상적으로 실행되지 않으므로 이 점 주의하십시오.
이제 디시전 그룹도 설정했고, 개별적인 디시전 이름을 설정할 수도 있게 됐으니, 이제 개별적인 디시전 하나하나의 내부에 좀 더 집중해 봅시다. 앞에서 보여드린 디시전의 구조를 다시 한 번 보고 계속 읽어주세요.
■ from_potential 과 potential
다음의 섹션을 보도록 하죠. 디시전의 이름 다음에 나오는 from_potential = { } 과 potential = { } 은, 이 디시전을 사용할 수 있는 조건을 정하는 것입니다. from_potential = { } 은 디시전을 실행하는 자(보통 플레이어)가 충족해야 하는 조건, potential = { } 은 해당 디시전의 영향을 받는 자(보통 봉신이나 가신 등 AI 캐릭터)가 충족해야 하는 조건을 정의합니다. 이 조건을 충족하지 않으면 디시전 목록에 이 디시전은 아예 나타나지도 않습니다.
예를 들면 이렇습니다. 제가 정말 많이 사용하는 구문입니다. 이제 슬슬 코드를 적어볼까 싶어요. 독자분들도 코드를 이렇게 쓰는거구나 하는 감을 익힐 겸 설명을 보아 가면서 조금씩 익혀 보십시오.
vassal_decisions = { test_decision = { from_potential = { ai = no in_command = no prisoner = no NOT = { trait = incapable } } potential = { is_alive = yes prisoner = no NOT = { trait = incapable } } ... } }
특정 AI 캐릭터를 향한 디시전(vassal_decisions)인데, from_potential = { } 과 potential = { } 섹션이 정의되어 있군요. vassal_decisions 은 플레이어가 다른 캐릭터에게 던지는 디시전이기 때문에, 디시전을 보내는 사람은 플레이어, 받는 사람은 플레이어가 지정하는 캐릭터(보통 봉신 내지 가신)가 되겠죠? 위의 제한 사항에 의하면, 플레이어는
- AI가 아니어야 하고(ai = no),
- 현재 군대를 지휘하는 중이 아니어야 하며(in_command = no),
- 현재 감옥에 갇혀 있지 않아야 하고(prisoner = no),
- 또한 현재 의식불명 상태가 아니어야 합니다(NOT = { trait = incapable }).
또한, 이 디시전을 받을 수 있는 AI 캐릭터는
- 현재 살아 있어야 하며(is_alive = yes),
- 현재 감옥에 갇혀 있지 않아야 하고(prisoner = no),
- 또한 현재 의식불명 상태가 아니어야 합니다(NOT = { trait = incapable }).
초심자의 경우 위에서 사용된 조건문들을 알 턱이 없으므로, 각각의 조건문들이 무슨 의미인지까지 한 줄씩 설명을 드렸습니다. 이렇게 하나씩 배워가는 거죠.
하나 더 덧붙이자면, 위에서 potential = { } 의 조건에는 숨은 조건이 하나 있습니다. "플레이어의 직접 봉신 또는 가신일 것" 이라는 조건입니다. 즉, "현재 살아 있고 감옥에 갇히지 않은 의식불명 상태가 아닌 자" 앞에는, "플레이어의 직접 봉신 또는 가신이면서" 라는 숨은 조건이 하나 더 붙어있는 것입니다. 결론적으로 플레이어의 영향권 안에 있는 캐릭터들인 셈이죠? (상식적으로 생각하면 돼요. 디시전으로 다른 캐릭터에 어떤 영향을 주려면, 최소한 자신의 통치권(?) 안에 있는 캐릭터여야 하지 않겠어요?) 사실 앞에서 이미 확인했던 내용이죠? vassal_decisions = { } 에서 호출 가능한 최대 범위는 플레이어의 직접봉신과 가신들이라고 이미 말씀드린 바가 있습니다.
CKII 모드에서 NOT = { } 으로 묶어주면, 해당 구의 반대를 의미합니다. 예를 들어 위처럼 trait = incapable (incapable 트레잇을 가지고 있는) 을 NOT = { } 안에 적어주면, 원래의 의미가 뒤집어져서 incapable (의식불명) 트레잇을 가지고 있지 않은 의 의미가 되는 겁니다. 조건의 부정은 정말 많이 쓰이는 것이므로, 이것도 이번 기회에 익혀 두시면 앞으로 도움이 될 겁니다. 물론 조건문 파트에서 다시 언급합니다.
만약 플레이어가 from_potential 조건을 충족하지 못한다면, 이 디시전은 목록에 나타나지 않습니다. 또한 여러 봉신들 중에서 potential 조건을 충족하지 못하는 봉신이 있다면 해당 봉신에 대한 디시전은 목록에 나타나지 않고, potential 조건을 충족하는 봉신들에 대한 디시전만 목록에 나오게 됩니다.
주의할 점은, from_potential 은 정의되지 않는 경우가 있습니다. 앞에서 세 가지 종류의 디시전 그룹 정의를 보았었는데요. 기본 디시전 정의인 decisions = { } 안쪽에 정의되는 디시전들의 경우에는 from_potential 섹션을 정의하지 않습니다. (정의하더라도 무시됩니다.) 어차피 플레이어에게 실행되는 디시전이기 때문에, 필수 항목인 potential = { } 섹션에 플레이어 조건을 적더라도 상관 없기 때문이지요. 같은 이유로, 디시전을 주는 자와 받는 자가 같은 경우에도 from_potential 은 의미가 없어서 정의하지 않습니다.
■ allow
from_potential 과 potential 이 디시전을 사용할 수 있는 조건을 정의한다고 말씀드렸는데, 이 allow 는 조금 다릅니다. 이 섹션은 이 디시전을 실행할 수 있는 조건을 정의합니다. 그 말이 그 말 아니냐고 말씀하실 수도 있는데, 아래의 예를 보십시오. 위의 예시를 조금 더 쓴 것입니다.
vassal_decisions = { test_decision = { from_potential = { ai = no in_command = no prisoner = no NOT = { trait = incapable } } potential = { is_alive = yes prisoner = no NOT = { trait = incapable } } allow = { age = 16 trait = ambitious } ... } }
allow 섹션에 두 줄이 추가됐죠. age = 16 과 trait = ambitious 의 두 줄입니다.
마침 나왔으므로 간단히 말씀을 드리자면, CKII의 조건문 중 숫자를 비교하는 조건문에서의 = 는 그 의미가 "같다" 가 아닙니다. "크거나 같다", 즉 "이상"의 의미입니다. 따라서 age = 16 이라고 쓰면, 나이가 16세 이상인 모든 캐릭터(즉 is_adult = yes 와 같은 뜻)라는 뜻이 됩니다. 여기에는 딱 하나의 예외가 있는데, 그건 나중에 설명드리도록 하겠습니다.
즉, 이 디시전을 사용할 수 있으려면, 해당 봉신이 16세 이상의 성인이어야 하고(age = 16), ambitious (야심적인) 트레잇을 가지고 있어야 한다(trait = ambitious)는 겁니다. 이제 의미를 알았으니, 실제 어떻게 나타날지 추측해 볼까요?
자, 일단 플레이어 측 조건(from_potential)은 다 충족했다고 치고, 어떤 봉신이 potential 조건은 모두 충족하지만 ambitious 트레잇이 없거나 16세 미만이라고 생각해 봅시다. 그럼 어떻게 될까요? 일단 potential 조건은 모두 충족하기 때문에 디시전 목록에 그 봉신에 대한 디시전 목록 항목은 출력이 됩니다. 그러나 실행 단추가 회색으로 비활성화되어 있어서 실행을 할 수가 없습니다. 그리고 단추 바로 옆에 ? 위에 마우스를 얹어 보면, 위 allow = { } 에 명시된 두 조건이 풍선 도움말 형태로 뜨면서 충족되지 않은 조건 앞에 빨간색 x 자가 표시되겠죠. 아래 그림에서 위쪽 3개의 디시전은 실행 단추가 회색으로 비활성화되어 있죠? 그 중 [마상 경기를 개최한다] 디시전의 ? 아이콘에 마우스를 대 보니, 명성이 부족하여 이 디시전을 실행할 수 없다는 툴팁이 출력되는군요.
자, allow 와 potential 의 차이는 아시겠죠. 그럼 이걸 어떻게 사용하면 좋을까요?
potential 의 경우는 충족하지 않으면 아예 목록에 나오지 않으므로, 기본적인 조건을 정의할 때에 좋습니다. 이를테면 봉신이 수십명인데 potential 옵션으로 적당히 조절되지 않으면, 수십 개의 디시전이 사용 가능 여부에 관계 없이 다 자리를 차지하고 있게 됩니다. 심하게 불편하겠죠. 그러므로 기본적인 조건들은 potential 내에 정의해서 택도 없는 (그리고 사용할 수도 없는) 디시전들이 출력되어서 자리를 차지하는 것을 방지하는 게 좋습니다.
그럼 allow 는? 이 조건은 사용자가 알 수 있습니다. 왜? 각 디시전 목록의 우측 끝에 ? 아이콘이 있죠? 여기에 마우스를 올려 보면 해당 디시전의 실행 가능 조건이 뜨는 걸 보실 수 있을 겁니다. 여기에 출력되는 것이 바로 allow 섹션 내의 조건들이예요. 따라서, 특별히 사용자에게 알리고 싶은 조건이 있다면 여기에 적어 두시면 좋습니다. (potential 과 겹치는 내용이라도 상관 없어요)
■ effect
from_potential, potential, allow 를 모두 만족했습니다. 자, 조건이 완성되었으면 이제 그럼 어떤 효과를 줄 것인지를 정해야죠. 그 효과를 정의하는 섹션이 바로 effect = { } 섹션입니다.
여기에 적을 수 있는 내용은 그야말로 무궁무진합니다. 따라서 적을 내용을 가지고는 정말 CKII 의 모든 내용이 다 들어갈 수 있습니다. 따라서, 이 부분에 대해서는 더 이상 설명을 하지 않겠습니다. 앞으로 이어질 내용에서 계속 채워나가시면 됩니다.
■ revoke_allowed
원본에서는 이 부분이 yes 로 쓰인 예가 없습니다. 그냥 항상 이렇게 쓴다고 생각하십시오.
■ ai_will_do
플레이어가 아닌 AI 도 실행할 수 있는 디시전을 디자인하는 경우, 여기에 그 확률을 기록할 수 있습니다. 0~1 사이의 factor 값으로 기록하는데, 0은 확률 없음, 1은 100% 입니다. (그렇다면 0.5는 50%겠죠?) 기간은 월 기준입니다. 즉, 1로 지정하면 AI는 이 디시전을 매달 실행합니다.
일정 조건에 따라서 확률을 증감시킬 수도 있는데, 그것은 여기서 설명할 내용이 아니라서, 일단 예제만 던지고 건너 뛰겠습니다. 초심자분들은 이해 안 되시는 것이 당연하니, 여기에서는 factor 값이 0~1 사이에서 정해지고, 0=0%, 1=100% 라는 사실만 체크하고 넘어 가십시오. modifier = { } 가 어떻게 동작하는지에 대한 내용은 랜덤 구문을 보면서 다시 확인하게 될 겁니다.
ai_will_do = { factor = 1 modifier = { factor = 0 trait = cynical } modifier = { factor = 0 NOT = { wealth = 200 } } }
이것으로, 일반적인 디시전 파일의 구조를 모두 살펴봤습니다. 사실, 디시전에 고유한 내용으로 설명드릴 것은 이번 회에서 설명드린 내용이 거의 전부입니다. 다음 회부터 몇 회 동안은, 디시전에 대해서 보충적으로 설명드릴 내용과 함께, 지난 회에 예고드린 바 있는 "모드 전체를 관통하는 중요한 개념"들을 설명드리는 시간이 될 것입니다.
댓글
댓글 리스트-
답댓글 작성자조매생 작성시간 15.02.13 제가 만들어서 올리면 검사 좀 부탁드려도 될까요 요새 느녀져서 애들좀죽이려구용
-
작성자유키호 작성시간 15.03.26 타겟 디시젼 써보니까, 일반 디시젼은 F7 누르면 나오는 화면에서 나오고,
타겟 디시젼은 유혹 커맨드 처럼 특정 캐릭터를 오른쪽 클릭 하면 나오는 메뉴에서 실행해요. -
답댓글 작성자tacitus 작성자 본인 여부 작성자 작성시간 15.03.26 아하.. 그런 차이가 있군요. 아직 쓸 일이 없었는데, 한번 일부러라도 써 봐야겠습니다.
-
작성자tacitus 작성자 본인 여부 작성자 작성시간 15.05.06 본문의 targetted_decisions = { } 에서 filter 와 ai_target_filter 에 관한 설명에 오류가 있습니다. 이 점 감안하시고 읽어주세요. 차후 수정이 완료되면 이 덧글은 삭제하겠습니다.
-
작성자길가에서서 작성시간 16.05.24 감사합니다. 이글을 보는 순간 봉신들 세금은 없게 만들어서 우호도를 올리고 매달 재산의 1/10 을 liege 에게 바치도록 하고 싶어졌습니다.