|
참사회 관련한 것들을 건드리려면 기본적으로 위의 세 개의 파일을 건드리게 됩니다. 물론 실제 이벤트를 실행하는 이벤트 파일, 그리고 아이콘 이미지 파일은 당연히 추가적으로 생각해야겠죠. 만약 새로운 참사회 멤버를 구성하는 데까지 이른다면 네 번째의 파일의 수정까지도 필요해집니다.
일단 참사회의 멤버가 되기 위한 조건을 규정하는 job_titles.txt 파일을 먼저 살펴보도록 하겠습니다. 이 파일은 열어보시면 아시겠지만, 과거에 본 적이 있는 마이너 타이틀 파일과 구조와 사용되는 명령어가 매우 비슷합니다. 아래의 예시는 job_titles.txt 에서 재상에 관한 부분만 잘라본 겁니다.
job_chancellor = { is_chancellor = yes attribute = diplomacy dignity = 0.33 opinion_effect = 15 monthly_salary = 0.1 monthly_prestige = 0.015 allow = { OR = { AND = { OR = { is_female = no AND = { religion = cathar liege = { religion = cathar } } } is_adult = yes } has_character_flag = special_chancellor } prisoner = no NOT = { trait = incapable } NOT = { trait = in_hiding } } gain_effect = { } lose_effect = { opinion = { who = FROM modifier = opinion_fired_from_council } } action = action_improve_relations action = action_fabricate_claims action = action_sow_dissent lift_fow = yes }
어떤가요? 진짜로 구조가 똑같죠? 특징이 있다면, 첫 줄의 is_chancellor = yes, 둘째 줄의 attribute = diplomacy 항목. 그리고 아랫부분의 action = 라인, lift_fow = yes 항목. 그리고 보통 규정되지 않았던 lose_effect = { } 섹션에 규정이 있다는 것 정도겠네요. 그 외에는 마이너 타이틀의 모딩에서 이미 다 설명드렸던 내용입니다. 그 때 보지 않았던 내용들만 한번 확인해 볼까요.
기존 5종 이외에 다른 참사회원을 구성하는 경우에는 이 줄은 제외하시면 됩니다.
attribute = diplomacy : 이 부분에 대해서 만족할만한 설명을 찾지는 못했습니다. 다만, 각 참사회의 멤버들은 각각 자기 자신의 능력치 중 일부를 국가 능력치에 더하게 되는데, 어떤 능력치를 더할지를 정하는 항목인 것 같습니다. (예를 들면 대장군의 경우 attribute = martial 이라고 되어 있죠.)
action = : 그 참사회 멤버가 할 수 있는 일들을 정합니다. 그 원 안에 세 개 나오는 임무들 있죠? 그것을 정하는 겁니다. 보면 3개를 넘는 경우도 있는데, 이런 경우는 일부 임무가 조건이 걸려 있는 경우입니다. 예를 들면 부족정인 경우에 사용할 수 있는 임무와 봉건제일 경우 사용할 수 임무가 구분되어 있는 경우가 있거든요(특히 Spiritual의 경우가 그러하죠).
lift_fow = yes : 맵에서 자신의 영토가 아닌 곳을 보면 안개 같은 걸로 뿌옇게 되어 있어서 보이지 않게 되어 있죠? 이런 경우에 이 참사회 멤버가 그 프로빈스에 임무를 하러 가면 그 프로빈스 부분의 안개가 걷혀서 들여다보이게 되는데, 이것을 설정하는 겁니다. 참사회 중 Spymaster 의 경우에는 lift_neighbor_fow = yes 라고 되어 있는데, 해당 프로빈스와 함께 그 이웃하는 프로빈스까지 밝히게 됩니다.
gain_effect = { } : 이미 아시는 대로, 여기에 적는 내용은 그 캐릭터가 참사회 멤버가 됐을 때에 얻게 되는 효과입니다. FROM 은 플레이어(임명권자), ROOT 는 참사회 멤버가 된 자죠.
lose_effect = { } : 이것도 마찬가지. 그 캐릭터가 참사회 멤버에서 잘리면 실행하게 되는 부분입니다. 보통은 참사회에서 잘렸을 때에 오피니언 수치가 깎이는 데, 이 내용이 정의되어 있습니다. 마찬가지로 FROM 은 플레이어, ROOT 는 참사회 멤버에서 잘린 자입니다.
지금까지 길고 긴 여정을 함께 해오신 분들이라면 이 내용들이 전혀 낯설지도 어렵지도 않을 것입니다. 자, 그럼 이 파일들을 어떻게 모딩하면 좋을까요? 포인트는 두 군뎁니다. allow = { } 부분을 수정해서 참사회의 멤버가 될 자격을 변경하는 것, 그리고 action = 을 통해서 기존의 임무를 수정하거나 새로운 임무를 추가하는 것.
allow = 의 수정은, 일반적으로는 능력치가 높은 여성을 참사회의 멤버로 앉히고 싶은 경우에 주로 찾게 될 겁니다. 다만 주의할 점은, 여기서 설정하는 내용은 플레이어 뿐만 아니라 모든 AI 에게도 적용되는 부분입니다. 따라서, 조건을 만드실 때에 주의하실 필요가 있습니다.
여기서 특이점은, 모든 참사회 멤버의 자격 부분에 OR = { } 로 has_character_flag = special_chancellor 와 같이, 캐릭터 플래그로 특별 참사회 멤버 자격 플래그가 있다는 것입니다. 예를 들어 재상의 경우, special_chancellor 캐릭터 플래그를 가지고 있다면 여성이나 미성년자라도 재상이 될 수 있습니다. 비슷하게, 첩보관의 경우 special_spymaster 캐릭터 플래그를 가지고 있다면 다른 자격 요건에 관계 없이 첩보관이 될 수 있죠. 단지 특정 캐릭터를 특정 참사회 자리에 앉히고 싶은 것이라면, 조건 자체를 수정하는 것보다 해당 캐릭터에 대해서 special_ 플래그를 달아 주는 방법을 쓰는 것이 더 안전합니다.
다음은 새로운 임무를 추가하거나 기존 임무를 수정하는 것인데, 이에 대해서는 다음 절을 보시면 되겠습니다.
참사회 임무는 위에서 보셨다시피 job_titles.txt 에서 각 참사회 멤버마다 규정이 되어 있습니다. 그리고, 그 각각의 임무들은 다시 job_actions.txt 에서 세부적인 내용이 규정되어 있죠.
일단 무대포로 파일을 열어 보겠습니다. 아래의 예시는 재상의 임무 중 하나인 클레임 위조하기 임무의 예입니다.
action_fabricate_claims = { attribute = diplomacy trigger = { any_province_lord = { NOT = { character = FROM } } is_within_diplo_range = FROM } events = { 913 914 } }
너무 단순해서 실망하셨죠? action_fabricate_claims 이라는 이름은 아까 job_titles.txt 에서 action = 뒤에 지정한 이름을 그대로 사용한 것입니다. 참고로 언어 파일에서 이 액션의 이름을 보여줄 때도 같이 씁니다. 아래는 그 예예요. 이런 식으로 쓰게 됩니다. 설명은 뒤에 _desc 붙이는 것까지 다 똑같습니다!
action_fabricate_claims;클레임을 날조하여 만들기;;;;;;;;;;;;x; action_fabricate_claims_desc;[GetChancellorName]에게 토착 영주의 (이하생략).;;;;;;;;;;;;x;
그런데, 그럼 대체 실제 어떤 일이 벌어지는지는 어디에 있을까요? 비밀은 하단의 events = { } 에 있습니다. 여기에 기록되는 이벤트 ID 가 실제로 임무 중 실행되는 이벤트들이예요. 즉 913 과 914 이벤트 두 개가 이 임무 중에 실행이 된다는 이야깁니다. 결론적으로 구체적인 내용들은 모두 이벤트 파일에 떠넘긴다는 겁니다.
이처럼 모든 것을 이벤트 파일에 떠넘기는 형태 덕분에, 플레이어가 새로운 임무를 만들기도 상당히 쉽습니다. 그냥 지금까지 보아왔던 것처럼 설정하고 난 후 구체적인 실행은 이벤트에 맡기면 되거든요. 만약 해당 임무 때에 발생하는 이벤트를 더 추가하고 싶다면 별도의 이벤트를 작성한 후, events = { } 안에 해당 이벤트 번호를 추가하면 되는 겁니다.
각 참사회 멤버의 임무에 관한 개별 이벤트들은 원본의 다음 파일들에 지정되어 있습니다. (즉, 위에서 예를 든 913, 914 같은 이벤트들이 여기에 정의되어 있다는 겁니다.)
해당 파일은 일반적인 이벤트의 형식으로 기록되어 있기 때문에, 특별히 설명에서 추가해야 할 내용은 없습니다. 다만, 현재 어떤 임무를 하고 있는지에 대한 조건문으로 has_job_action = 임무 ID 의 조건문이 있다는 점은 하나 짚고 넘어가겠습니다.
has_job_action = action_fabricate_claims
/events/job_chancellor.txt 파일을 열어서 EVENT 913 을 보시면, 대체 그놈의 재상이 왜 그렇게 클레임을 못 물어오는지 실감하실 수 있을 겁니다. 무려 MTTH 값이 months = 360 이예요. 즉 클레임 하나 물어오는데 기본 시간으로 설정된 값이 평균 30년.. Diplomacy 값이 10 이상이면 거기서 조금씩 줄어들기 시작해서, 최상급인 Diplomacy 값이 20 혹은 그 이상인 재상을 사용하는 경우 약 62.79(월), 그러니까 약 5년 하고 몇 개월까지 줄어든다는 거죠. 능력치 좋은 재상을 써야 하는 이유가 바로 나오죠? ^^
아, 이 참사회 임무의 개별 이벤트에서 첫 이벤트(예를 들면 위에서 913 914 같이 참사회 임무 파일에서 바로 이어지는 이벤트)의 ROOT 는 해당 참사회 멤버입니다. FROM 은 사용되지 않습니다.
참사회 임무를 선택하기 위해서 누르게 되는 버튼 아이콘 있죠? 그건 /interface/domestic_court.gfx 에 정의되어 있습니다. 위에서부터 몇 줄 내려오면, ### job buttons 이라고 주석이 있을 겁니다. 그 아래쪽의 내용들이 다 임무 아이콘들입니다. 구조는 많이 봤던 형식이죠?
spriteType = { name = "GFX_action_fabricate_claims" texturefile = "gfx\\interface\\job_fabricate_claims.dds" noOfFrames = 2 }
name 값은 GFX_ 뒤에 해당 임무의 ID 를 붙여서 입력하면 됩니다. 이것도 익숙한 거죠? 디시전 아이콘의 지정 방식과 똑같으니까요. noOfFrames 값이 2인 이유는, 아이콘이 눌렸을 때와 보통일 때, 두 가지의 아이콘이 필요하기 때문입니다. 그렇게 두 개의 아이콘이 한 파일에 저장되어 있는 구조, 낯설지 않으시죠?
바로 위에 예를 든, gfx\interface\job_fabricate_claims.dds 파일을 XnView 나 지난 회에 소개한 Paint.NET 같은 프로그램으로 한번 열어보십시오. 이 파일을 열어보시면, 두 개의 아이콘이 하나의 파일 안에 붙어있는 것을 보실 수 있으실 것입니다. 하나의 아이콘은 40x40 사이즈이지만, 디자인이 원형이죠. 아이콘이 두 개 들어가므로, 하나의 파일의 크기는 80x40 사이즈로 구성되어 있습니다.
다른 아이콘과의 조화를 위해서, 이 파일은 완전히 새로 만드시는 것보다는, 기존 파일을 하나 읽어서 버튼 이미지를 수정하고 다른 이름으로 저장하는 방법으로 작업하시는 것이 좋겠습니다.
기본적으로 이 아이콘 파일의 수정과 관련해서는 특별히 추가해야 할 내용이 없습니다. 지난 회에 본 다른 아이콘의 수정 방법을 그대로 적용하면 됩니다.
만약 다섯 가지 기본 참사회 멤버 외에 다른 종류의 참사회 멤버를 구성하려는 경우, 위의 모든 것을 추가하는 것 이외에, 참사회원이 임무 중인 경우에 맵에 표시할 아바타 액션을 정의해줄 필요도 있습니다. (이게 정의되지 않으면 임무를 주는 순간 크래시가 발생합니다. 맵에 뿌려줄 유닛이 정의되지 않았기 때문이죠.)
이 내용이 정의되어 있는 interface/avatars.gfx 파일은 사실 전에 새로운 병종을 추가할 때 한 번 수정한 적이 있는 파일입니다. 이런 형식으로 추가되어 있죠. 아래는 Spymaster 의 예시입니다.
EMFXActorType = { name = "westerngfx_job_spymaster" actorfile = "gfx\models\Mapindicators\Western_spymaster.xac" idle = "gfx\models\Mapindicators\Western_spymaster_idle.xsm" scale = 1.0f }
마찬가지로 구체적인 모션은 .xac 파일, .xsm 파일을 수정해야 하는 일이라서, 일반적으로는 건드리기 어려운 파일입니다. 기존에 존재하는 5가지 멤버들 중에서 적당한 것 하나를 골라서 지정해 주시고, name 부분만 바꿔 주세요. 대개 western, eastern, muslim 이렇게 세 개 정도의 gfx 가 정의되어 있으니, 그 정도만 정의해 주시면 될 겁니다.
첫댓글 어쩐지 클레임 조작 더럽게 안되더라니...
그래서 전 서유럽권 카톨릭은 시작을 도저히 못 해먹겠더군요. 동유럽이나 남유럽권으로 가서 Power성전
예술적인 30년이죠... 하아...
그, 그 찾아봐도 실험도 해봐도 안돼서 그러는데 봉신제한 확 풀어버릴 수 있는 방법 혹시 없을까요.
Vassals_limited 넣어봐도 해당되는 건 없는데다, Crown laws 들어가서 제국 법에서 봉신 +25 해주는거 만질려고 해봤는데 해당 법률은 크라운에 없고... 트레잇으로 외교력 막 900씩 찍어서 반 강제로 봉신제한 건들여 쓰긴 하는데 이렇게 하면 또 외교력이 너무 쩔어줘서 겜이 급 노잼이 되버리고 ㅠㅠ.
이벤트 모디파이어도 아닌거 같고...
혹시 봉신제한 어디서 건드릴 수 있는지 아세요?
직할령 제한은 많이 건드려 봤는데, 봉신 수 제한은 저도 낯선 설정이네요.
Crown Laws 가 아니라 decisions/demesne_laws.txt 를 열어보시면
vassal_limit = -5, demesne_size = 3 과 같이 사용하고 있습니다. 단, demesne_size 는 직할령 크기로 건물이나 일반적인 캐릭터 문맥에서 사용이 되지만,
vassal_limit 는 법률 디시전 문맥에서만 사용된다는 것을 유의해서 사용하시면 됩니다.
demesne_size 는 제 글에서는 건물 쪽에서 다루고 있었습니다만, vassal_limit 는 다룬 적이 없었네요. (일반법률을 다룬적이 없다보니...)
단순히 봉신제한을 조절하는 것이라면
common\defines.lua 에서
Vassal Limit로 검색해보면 나옵니다.
참사회 모딩을 해서 저만 사용하고싶은데 ai가 임명못하게하려면 어떤꼼수를 써야되나요..?
allow = { } 에 liege = { ai = no } 를 지정하면 되긴 합니다. 그럼 AI 의 경우에는 임명할 수 있는 사람이 아무도 없게 되니까요. 다만 그렇게 했을 때에 AI 들에게 어떤 영향이 있을지는 저도 잘 모르겠습니다.
오 감사합니당... 한번 해봐야겠습니다
음, 그러면 저 mtth =360에서 360만 바꿔줘도 클레임 조작 확률이 올라갈까요?
그렇습니다. 고아원 모드의 특수능력 고아(위조) 구현 부분을 참조하십시오.
감사합니다!