#author("2024-05-04T13:46:50+00:00","","") #author("2024-05-04T14:01:43+00:00","","") [[MOD]] #contents **ディシジョンファイルの構造 [#md805fbb] ディシジョンの基本的な構造は以下の通りです。 country_decisions = { #各ディシジョンファイルはcountry_decisionsの括弧の中に内包する必要があります。 decision_text = { # ディシジョンのタイトル potential = { # ディシジョンがゲーム中のディシジョンタブに表示される条件 } allow = { # ディシジョンを実行する条件 } effect = { # ディシジョンの効果 } ai_will_do = { # AIの実行可能性 factor = 1 } } } 実際のディシジョンファイルを見ると各項目が複雑に見えますが、大本の枠組みは一緒です。 以下では、「ウルバン砲の導入」を題材に、実際にディシジョンを作っていきます。 **タイトル [#d25cf66d] タイトルはintroduce_the_dardanelles_gun(ウルバン砲の英語名)にします。他のディシジョンと同じタイトルになっていないかどうか、確認しましょう。 country_decisions = { introduce_the_dardanelles_gun = { **ポテンシャル (Potential) [#sf48dd7d] 前述のようにポテンシャルは、「ディシジョンがゲームに登場する条件」です。 ウルバン砲ディシジョンがゲームに現れる条件として、ここでは以下のものを設定しました。 1.対象国はオスマン朝 2.時代は1444年以降だが、大砲ユニットが製造できるようになる技術7以前 3.君主の軍事能力が高い 4.コンスタンティノープルがビザンツ領 5.国庫にある程度の資金がある 1については、国家タグを使います。これは、tag = (三文字の国家タグ)で指定できます。 オスマン朝のタグはTURですので、以下のようになります。 tag = TUR 2については、年代の設定と技術の設定で対応します。 ディシジョンをある年以降に発生させるようにするにはis_year = (指定年)を使います。 また、技術についてはadm_tech = (技術レベル)のような形です。 is_year = 1444 NOT = { mil_tech = 7 } ここでNOT構文を使っているのは、技術レベルが7未満であることを条件にしているためです。 NOT構文が括弧で閉じることを忘れないようにしましょう。 3については、君主の能力を、ADM、DIP、MILの各分野と数値の組み合わせで設定できます。 MIL = 3 これにより、「君主の軍事能力が3以上の場合」にディシジョンがリストに出現します。 4については、「コンスタンティノープルをオスマン朝が支配していないこと」を条件にします。 ある州を支配しているかどうかの判定は、owns = (州番号)で行います。州番号についてはhistory/provincesフォルダで確認可能です。 今回の例では「支配していないこと」ですので、NOT構文を使うことを忘れずに。 NOT = { owns = 151 } # Constantinople 5については、「年間収入の2割が国庫にあること」を条件にします。 この判定はyears_of_income = (小数点第一位以下)で行います。等号右側部分が1の場合は年間収入の100%、0.5の場合は50%という具合です。 years_of_income = 0.2 ポテンシャル部分の設定は基本的に以上ですが、このままですと、上記の5条件を満たしている場合、このディシジョンが何度も表示されることになってしまいます。 今回の例ではそれは都合が悪いので、再発しないようにしてやりましょう。 ポテンシャルで「フラグが立っていないこと」を条件にし、ディシジョンの効果部分でそのフラグを立ててやれば、このディシジョンは一回限定になります。 その際、フラグ(flag)を使う場合と国家用の変数(country modifier)を使う場合の2種類が考えられます。 フラグや変数の可否はhas_flag = (フラグ名)やhas_country_modifier = (変数名)でチェックします。 フラグはゲーム上で確認できないのに対し、国家用の変数はタブで見ることができるので、状況に応じて使い分けるといいでしょう。 今回はフラグを使うことにします。 NOT = { has_country_flag = the_dardanelles_gun_introduced } 以上のポテンシャル部分のコードは、このようになります。 potential = { tag = TUR is_year = 1444 NOT = { mil_tech = 7 } MIL = 3 NOT = { owns = 151 } # Constantinople years_of_income = 0.2 NOT = { has_country_flag = the_dardanelles_gun_introduced } } **実行条件(allow) [#v68c2d65] 極端な話、実行条件はポテンシャルと全く同じでも構いません。 しかし、ポテンシャルとは違い、実行に必要な条件はゲーム中に表示されるので、ポテンシャルと実行の条件に上手く差をつけることで、プレイヤーに対し短中期目標を与えることができます。 また、この「可視化される」という特徴を利用して、テストプレイの時にはポテンシャル部分のコードを実行条件の所に便宜上移してやり、自分が設定した条件がゲームにきちんと反映されているかどうかをチェックすることもできます。 今回の例では、実行条件の部分はシンプルに、「君主の軍事能力が5以上」にしておきます。 allow = { MIL = 5 } **効果(effect) [#v219ef65] 今回の例では、ディシジョンの効果を以下のものに設定します。 1.ウルバン砲導入のための出費 2.Military Powerの追加 3.オスマン朝の首都にArtilaryを2ユニット追加 4.先に設定したフラグ"the_dardanelles_gun_introduced"を設定 1については、add_years_of_income = xによる国庫の増減で対応します。xの部分に負の数字を入れることも可能です。 add_years_of_income = -0.1 これにより、年間収入の1割の額が減少します。 2については、add_mil_powerで対応します。MILだけでなく、ADMやDIPについても同様です。 add_mil_power = 100 3については、少々まわりくどい方法ですが「支配する州の中から首都に該当する州のみに、最初期の砲兵ユニットを追加する」という手段にします。 この前半部分については、効果の対象をランダムで選ばれた自国領にするrandom_owned_provinceと、そのランダムの範囲を首都のみに限定する(実質ランダム性を排除する)ためのlimit構文を使います。 また、追加するユニットは、(ユニット名) = (対象となる州)で設定できます。 random_owned_province = { limit = { is_capital = yes } large_cast_bronze_mortar = THIS large_cast_bronze_mortar = THIS } 最後に4のフラグを立ててやれば、ディシジョンの効果部分は完成です。 effect = { set_country_flag = the_dardanelles_gun_introduced add_years_of_income = -0.1 add_mil_power = 100 random_owned_province = { limit = { is_capital = yes } large_cast_bronze_mortar = THIS large_cast_bronze_mortar = THIS } } ゲーム中では、上記の効果は以下のように表示されます。 #ref(decision004.jpg) **AIの実行可能性(ai_will_do) [#p437c1d4] AIが常に実行するようにしてもいいのですが、今回のように資金の減少を伴うディシジョンの場合は、不必要な赤字にならないように、「国庫の資金が年間収入の8割以上残っている場合にのみ実行する」ように設定しておきます。 ai_will_do = { factor = 1 modifier = { factor = 0 NOT = { years_of_income = 0.8 } } } ディシジョン本体のコードは以上です。上記をまとめた完成形はこのようになります。 country_decisions = { introduce_the_dardanelles_gun = { potential = { tag = TUR is_year = 1444 NOT = { mil_tech = 7 } MIL = 3 NOT = { owns = 151 } # Constantinople years_of_income = 0.2 NOT = { has_country_flag = the_dardanelles_gun_introduced } } allow = { MIL = 5 } effect = { set_country_flag = the_dardanelles_gun_introduced add_years_of_income = -0.1 add_mil_power = 100 random_owned_province = { limit = { is_capital = yes } large_cast_bronze_mortar = THIS large_cast_bronze_mortar = THIS } } ai_will_do = { factor = 1 modifier = { factor = 0 NOT = { years_of_income = 0.8 } } } } } **ローカライゼーション(localisation) [#j31aeb60] このコードがMODとして反映されていれば、1444年のオスマン朝でプレイした場合のディシジョンタブの中に、新ディシジョンが登場するはずです。 なお、MODファイルの作り方については、[[MODファイルの作り方>MOD/MODGuide01]]を参考にしてください。 #ref(decision001.jpg) ご覧のとおり、新しく追加したディシジョンのみがむき出しのストリングスになっています。よって、ディシジョンのタイトルと説明を追加してやる必要があります。 これらのテキストの設定は、ローカライゼーション(localisation)フォルダの.yml拡張子ファイルで行います。 Notepad++上では、以下のようになります。 #ref(decision005.jpg) 全テキストが"l_english:"の中に収納されていることに注意してください。ローカライゼーションファイルを追加したのにゲーム中に表示されるのがストリングスのまま、という場合には、保存が上手くいっていない可能性が高いです。 -文字コードについて EU4のバニラのファイルで使用されている文字コードは、スクリプトファイルの場所によりUTF-8-BOM、UTF-8、あるいは欧州文字用のコードなど複数なものが使われています。その為ゲーム内で表示させるために使用箇所の文字コードの事前確認、またはエンコード(変換)が必要になる場合があります。 Notepad++(英wikiのmodページで推奨されているエディタ)であれば右下に現在の文字コードが表示されます。 EU4のバニラのファイルで使用されている文字コードは、スクリプトファイルの場所によりUTF-8-BOM、UTF-8、あるいは欧州文字用のコードなど複数のものが使われています。その為ゲーム内で表示させるために使用箇所の文字コードの確認、またはエンコード(変換)が必要になる場合があります。 Notepad++(英wikiのmodページで推奨されているエディタ)であれば右下に現在の文字コードが表示されますので、これによって上記の確認を行うことができます。 ローカリゼーションで使われているymlファイルは原則UTM-8-BOMが使用されています。(そのため、通常通り英文を書いて保存すれば差し支えないと思われます) 拡張子がtxtのものを含め、別のコードが使用されている場合はUTF-8-BOM等で編集しようとすると文字化けしてしまいますので、そのファイルで使用されている文字コードへの変換が必要になります。 ファイル名(○○_l_english.yml)、ファイルの文字コード、スペルなどをよく確認してください。 無事にテキストが読み込まれていれば、以下のようになります。 #ref(decision003.jpg) **最後に [#f6fe8031] ディシジョンの構造および作成方法については以上です。 なお、ディシジョンおよびイベントにどのような条件や効果を設定できるかについては、[[パラドックスの公式フォーラムにリストがあります>https://forum.paradoxplaza.com/forum/index.php?threads/list-of-effects-modifiers-scopes-triggers-and-localization-strings-oh-my.722090/]](フォーラムアカウントを作成しEU4を所有ゲームとして登録する必要あり)。