Stellaris

Stellaris

Not enough ratings
[JP]イベントmod作成入門~基礎構文編
By NaK1119
イベントmod作成の入門ガイドとして、基本的なファイル構成や構文の解説を行います。
作成途中ですので、情報は順次更新していきます。
 
Rate  
Favorite
Favorited
Unfavorite
はじめに(注意事項)
本稿では、イベントmod作成の基礎について説明していきます。
以下の点にご注意下さい。
  • ある程度本腰を入れてmodを作成したい初心者modder向けです。
    パラメータを少し変えたいだけの人向けではありません。
  • 初心者向けを想定しているので、かなり初歩的な事から書いています。
    中上級者には全く向いていません。
  • ソースを読める人 → 本記事の内容は、既に理解しているでしょうから、回れ右推奨です。
  • 英語を読める人
    英wiki[stellaris.paradoxwikis.com]を見た方が早いかもしれません
  • この解説では、このサンプルmodを使います。
    • テストプレイをしながら読みたい場合、サブスクライブした上で、M_Gamelinさんの解説を参考にしながらzipファイルをローカル化して下さい。
    • テストプレイしない方は、サブスクライブ不要です。
    • 利用する場合、mod側のwebページの説明文も良く読んで下さい。
  • 本ページの製作者は、ガイド作りについては素人です。
    分かりにくいどころがあれば、言っていただけると、改善につながるかもしれません。
  • イベントmodは、範囲が非常に広いため、私が把握している部分のみの解説になります。
  • 質問・要望等があれば、コメント欄にお願いします。可能な範囲で対応します。

なお、内部処理が少なからずイベントあつかいで処理されていることもあり、ひとくちにイベントmodといっても範囲は多岐にわたります。
「イベントらしいイベント」はもちろん、AutoBuildのような操作補助系のmodにもイベントファイルは使われています。

長くなりそうなので、いくつかのページに分けました。以下、そのリンクです。
イベントmod作成の流れ
基本的な流れは以下のとおりです。
  1. どういうmodが作りたいのか考える。
    • これが無いと始まりません。
  2. 必要なら、フローチャート等にまとめる。
    • 複雑なmodを作るなら、有った方が良いでしょう。
  3. mod(拡張子名)ファイル・空のmod用フォルダを作る。
  4. mod用フォルダに必要なサブフォルダを作る。本稿で解説します。
  5. イベント用のtxtファイル(と翻訳用のymlファイル)を作る。
    • これが、いわゆる本体です。作業の大半は、これの作成とテストプレイです。
      本稿で解説します(作成途中)。
  6. steamにアップロードするなら
    • サムネ・紹介画像・解説文を作る。
      アップロードするなら、最低でもサムネ1枚・概要を書いた解説文くらいは作りましょう。
      キャプチャや解説画像があるとベターです。
    • .mod(拡張子名)ファイルをテキストエディタで編集する
      サムネのファイル名をの指定はテキストエディタ必須です。
    • アップロードする
とりあえずの練習であれば、1と2は無視しても構いませんが、
「作り方を勉強したが作りたい物が無かった」とならないように注意してください。
おすすめのツール
本題に入る前に少し寄り道です。
ちょっとしたmodを作るだけなら、OS標準のテキストエディタだけで十分ですが、
本腰を入れて作るなら、以下のツールが有ると便利です。
  • オートインデント付きのテキストエディタ (サクラエディタなど)
  • ファイルの差分検出ツール (WinMergeなど)
    • Stellaris 本体が更新された場合の対応に便利
  • 複数のテキストファイルを一斉検索するツール (Devasなど)
    • 中級者以上向け。知らない関数が出てきた場合、
      Stellaris フォルダを丸ごと検索すると、ヒントが見れる場合も多々ある。
    • また、フラグ名の変更の際など、一括置換にも便利。
  • フローチャート作成ツール (Edraw Mind Map, MS Power point, Libre office Impress, 紙&ペンなど)
    • 複雑なmodを作るなら、頭の整理のために使用を推奨。
      どのツールも一長一短なので、お好みで。

4.サブフォルダの作成
「イベントmod作成の流れ」の3は、済ませましたか? まだなら、先にそちらをやりましょう。
さて、イベントmodの基本的な構成は、以下の通りです。
やりたい事に応じて多少増減しますが、とりあえずテンプレとして持っておいて損はないかと思います。
  • フォルダ構成
  • C:\Users\<user name>\Documents\Paradox Interactive\Stellaris\mod (windows 7標準環境の場合)
    • <mod file name> (stellarisランチャーで指定したフォルダ名、既にあるはず)
      • common
        • on_actions (イベント呼び出しファイル用フォルダ)
      • events (イベントファイル用フォルダ)
      • localisation (言語ファイル用フォルダ、localizationではない)
    • <mod file name.mod> (stellarisランチャーで指定したフォルダ名、既にあるはず)
上記のフォルダは、1字違わず正確に作って下さい。でないと読み込まれません。
C:\Program Files\Steam\steamapps\common\Stellaris (windows 7標準環境の場合)を開いてフォルダ名をコピペすることを推奨します。
なお、上記のstellarisフォルダとmodフォルダのショートカットを作っておくと、後々楽です。
5. イベントファイルの基本構成
まずは簡単なイベントを作ってみます。

最初に、eventsフォルダに適当な名前でtxtファイルを作ります。
名前は、アルファベットなら何でも構いませんが、バニラ(*1)や他のmodのファイルと被ると、一方が上書きされるので、ある程度「固有名詞らしい部分」を入れて下さい。
また、文字コードをUTF-8にして下さい。
SJISでも動くは動きますが、時々変な不具合を起こします。一番タチの悪いやつですね…。

*1 バニラ: 本稿では、「modを入れていない状態のstellarisやその構成ファイル」を指します。
     DLCの有無は問いません。

続いて、localisationフォルダにも適当なtxtファイルを作り、拡張子をymlに変更します。
ついでに、ymlファイルの「規定のプログラム」をテキストエディタにしておくと便利でしょう。
ファイル名に関する注意事項は、eventsファイルと同様です。
こちらは文字コードをUTF-8 BOM付きにして下さい。
よく分からないなら、バニラか適当なmodの言語ファイルをコピペして、ファイル名を変更すれば、多分問題ありません。
  • ファイル構成
    • events
      • SEoG_events_1.txt (ファイル名は自由に設定可能)
    • localisation
      • SEoG_l_english.yml (ファイル名は自由に設定可能)
以下にイベントサンプルを記載します。
作ったtxtファイル・ymlファイルに、サンプルを丸ごとコピペすれば動作します。
正常にコピペできない場合、「はじめに(注意事項)」にサンプルmodへのリンクを貼りましたので、そちらをご利用ください。
イベントの基本構成を全部入れたので、やや長くなっていますが、以下の解説は、これを元に解説します。

### Sample_Event_of_Guide\events\SEoG_events_1.txt namespace = sample_event country_event = { ## イベントの基本情報 id = sample_event.1 title = sample_event.1.name desc = sample_event.1.desc picture = GFX_evt_ship_in_orbit hide_window = no ## イベントの発生条件 is_triggered_only = no fire_only_once = no mean_time_to_happen = { days = 3 } trigger = { is_ai = no } ## イベント発生時の効果 immediate = { add_food = 50 } ## イベントに出す選択肢 option = { name = sample_event.1a.name custom_tooltip = sample_event.1a.tooltip add_minerals = 200 } option = { name = sample_event.1b.name custom_tooltip = sample_event.1b.tooltip add_energy = 200 } ## イベント終了時の追加効果 after = { add_influence = 50 } } # 上記ファイルの動作 # 全てのプレイヤー帝国は、毎日1/3の確率で、イベントウィンドウが表示され、食料50を得る。 # さらに、選んだ選択肢に応じて、追加で鉱物200かエネルギー200の一方が得られる。 # 選んだ選択肢にかかわらず、イベント終了時に影響力50を得る。
### Sample_Event_of_Guide\localisation\SEoG_l_english.yml l_english: sample_event.1.name:0 "資源の配給" sample_event.1.desc:0 "どこからともなく資源が配給された。非常に怪しいが、使えるものは使っておこう。" sample_event.1a.name:0 "鉱物も欲しい" sample_event.1a.tooltip:0 "一体、どこから湧いてくるのだろうか…" sample_event.1b.name:0 "エネルギーも欲しい" sample_event.1b.tooltip:0 "一体、誰の仕業だろうか…" # 左に1つ半角スペースが入っていることに注意。

さて、上記のコードを入れてゲームを起動し、数日~2週間くらい進めると、以下のイベントが起きるはずです(要日本語化mod)。

5a.構文の基礎
まず、全eventsファイルを含む大部分のtxtファイル共通のルールを説明していきます。
なお、1以外は言語ファイル(yml)には適用されませんのでご注意下さい。
  1. 「#」はコメントアウト。#より右(改行まで)の文は無視されます。
  2. 1つのtxtファイルに、複数のイベント・項目を入れられます。
    • txtファイルを複数に分ける/分けないは、自分がやりやすいようにして下さい。
  3. 半角スペース・タブ・改行は、全て同じあつかい、かつ数は不問です。
    • よって、以下のコードは全て同じものと解釈されます。
    ## 丁寧な書き方、効果: 10日後に「sample_event.2」を発生させる ## ※ 「country_event」は、イベントを呼び出す際にも使う。詳細は後ほど。 country_event = { id = sample_event.2 days = 10 }
    country_event = { id = sample_event.2 days = 10 } ## 簡易的な書き方
    country_event = { id = sample_event.2 days = 10 } ## 普通はやらない書き方
  4. 何でもかんでも「{ }」で括り、「=」で結びます。
    • 構文中で「( )」は、使いません。例外: ( )付きのテキストを表示したい場合
    • ↓「何でもかんでも」の一例
      if = { limit = { not = { has_global_flag = test_flag } } <処理1> } # 意味: 「test_flag」が立っていない場合のみ、処理1を実行する # カッコの省略は不可
  5. 「=」の左右は交換は不可です。
    ## 標準的な書き方、効果: 10日後に「sample_event.2」を発生させる country_event = { id = sample_event.2 days = 10 }
    ## ダメな書き方(動作しない) country_event = { sample_event.2 = id days = 10 }
  6. 一部、ゲーム内表記や常識的な解釈と、ソースコード上の用語が異なります。
    • とりあえず、「そういう事がある」ということさえ覚えていれば、個別の意味まで覚える必要はありません。
    意味
    ゲーム中: empire
    ソースコード: country
    帝国
    星系・恒星・惑星・衛星・その他天体
    planet と starが混用されている。
    「is_planet_class」は、恒星にも惑星にも衛星にも使える。
    「is_star = yes」は、恒星のみを指す。
    「set_star_flag」は、星系に使えるが、恒星には使えない。
    「random_system」は、ランダム星系を対象にする。
5b. namespace/イベント種別/id
前座は このくらいにして、元のソースコードを読み解いていきます。
まぁ、眠くなる話ですが、ここを理解していないとイベントは作れませんので、我慢して読んで下さい。
本項で解説するのは、コード冒頭の下記部分です。

### Sample_Event_of_Guide\events\SEoG_events_1.txt namespace = sample_event country_event = { ## イベントの基本情報 id = sample_event.1

イベント id
順番が前後しますが、まずは、event idから始めます。
「id = sample_event.1」の部分で、これがイベントの識別子になります。
後々「イベントを呼び出すイベント」の説明をしますが、その際には、このidを使います。
注意事項
  • 全てのイベントに一意のidを割り当てなければなりません。
    • 複数のイベントに同じidを割り当ててはいけません。
    • idの無いイベントもダメです。
    • バニラや、他のmodと被らないよう注意が必要です。
  • idは、「ネームスペース(それっぽい英字列)」「.」「4桁以下の数値」の形のみ可能です。
  • ネームスペース部分は、アルファベットとアンダースコアのみで書きます。
    ## 良い例 id = sample_event.132 ## 「sample_event」がネームスペース id = sample_event.0040 ## 問題ないが sample_event.40 と同じとみなされる id = no_contingency.68 ## 「no_contingency」がネームスペース ## 悪い例 id = sample_event.13265 ## 5桁はダメ id = sample_event132 ## 「.」が抜けている id = sample event.132 ## スペースはダメ (sample と event の間) id = sample.event.132 ## ネームスペース内に「.」はダメ (sample と event の間) id = crisis.10 ## バニラで使用済み id = 勇者ああああ.50 ## 日本語などの2 bite文字は、バグの元
  • ネームスペースは、小規模なmodなら1種類、大規模なmodでも5~10種類程度にし、基本的には数字で区別しましょう。
    • 内部処理上は、ネームスペース毎に、個別の番号を振り分けるため、あまりに大量使用すると枯渇します。
  • イベントidの大文字と小文字は厳密に区別されます。
    • 「id = sample_event.789」と「id = Sample_Event.789」は、別イベントあつかいです。

namespace
察しはついているかもしれませんが、前述の「ネームスペース」は、事前に宣言しておく必要があります。
その宣言が、「namespace = sample_event」です。宣言し忘れると、イベントが動作しません。
同じnamespaceを複数回宣言しても特に害はありませんので、eventsフォルダ内の全txtファイルの冒頭に「namespace = <名前>」を入れると良いでしょう。
(その場合も、別のtxtファイルだからと同じidが使えるわけではありません)

イベント種別
イベント種別は、コード冒頭の「country_event」に当たる部分です。
下表の通り色々ありますが、「誰を対象にするかに応じてリストから選ぶ」とだけ覚えておいて、必要な時に本表か英wiki[stellaris.paradoxwikis.com]を見返すと良いでしょう。

コード
対象
event
ゲーム全体 (特定コードからの呼び出し専用)
country_event
ゲーム全体 (大部分はこちら)
帝国(empire)
planet_event
惑星・恒星・その他天体
fleet_event
艦隊 (軍艦のみ、1隻ではなく1個艦隊)
ship_event
個別の軍艦・民間船・軌道ステーション
pop_faction_event
派閥
pop_event
POP

まとめ
namespace = sample_event ## アルファベットとアンダースコアだけの名前をつける。 ## テキストファイル冒頭に1つだけ country_event = { ## 他にも、色々な「***_event」がある。 id = sample_event.1 ## <namespace>.<数値> の形にする。ドットを忘れずに。
5c. イベントの基礎情報
つづいて、イベントの基礎情報の続きです。
本項では、イベントの「画面に表示される部分(の大半)」の説明になります。
### Sample_Event_of_Guide\events ### \SEoG_events_1.txt ## イベントの基本情報 <前略> title = sample_event.1.name desc = sample_event.1.desc picture = GFX_evt_ship_in_orbit hide_window = no



title
まんま、イベントのタイトル、イベントウィンドウ左上に表示される部分です。
なお、ゲームに表示される文章は、基本的に全てeventsファイル中でを指定し、localisationフォルダで、キーと実際の文章を対応させます。
上の例では、「sample_event.1.name」がキーに当たり、localisationフォルダ内でキーと文章の関連付けを行います。
### Sample_Event_of_Guide\localisation\SEoG_l_english.yml l_english: sample_event.1.name:0 "資源の配給" sample_event.1.desc:0 "どこからともなく資源が配給された。<後略>"
なお、対応するキーがない場合、「sample_event.1.name」がそのまま表示されます。
動作チェック用の仮組みmodであれば、eventsファイル中に直接文章を打ち込んでしまうのも手です。
その場合、「title = "sample text"」のようにダブルクォーテーションで囲って下さい。

なお、イベントidと異なり、キーは「アルファベット・アンダースコア(_)・ピリオド(.)」のみで構成されていれば、どんな文字列でも使用可能です(スペースは不可)。
さらに、同一文章を表示したいのであれば、複数のイベントに同じキーを使い回せます。
例によって、バニラや他modとのキー被りには、ご注意下さい。

desc
descriptionの略で、記述や解説、といった意味です。
イベント画像直下の水色の文章が、これです。
使い方は、titleと全く一緒です。

picture
こちらも、まんま挿絵です。
テキスト同様、基本的にキーを入れる形になります。
このキー一覧は、以下のファイルに入っています。
  • キー一覧
    • C:\Program Files\Steam\steamapps\common\Stellaris\interface\eventpictures.gfx (windows 7標準環境の場合)
    • 基本的には、このファイルの中から、画像を選び、キーを入れます。
    • 自分で画像ファイルを作ることも可能ですが、ここでは割愛します。
  • 実際の画像ファイルが入っているフォルダ
    • C:\Program Files\Steam\steamapps\common\Stellaris\gfx\event_pictures (windows 7標準環境の場合)
    • 厄介なことに、ddsファイルのため、windows標準環境では、開くことはできません。
      このリンクから、画像一覧を見れます(2.9 MB)
## eventpictures.gfx の一部抜粋・一部改変 spriteTypes = { spriteType = { name = "GFX_evt_alien_nature" ## これがキー texturefile = "gfx/event_pictures/alien_nature.dds" ## 対応する画像ファイル masking_texture = "gfx/interface/situation_log/event_mask.dds" alwaystransparent = yes } spriteType = { name = "GFX_evt_city_ruins" ## キーその2 texturefile = "gfx/event_pictures/city_ruins.dds" ## 画像ファイルその2 masking_texture = "gfx/interface/situation_log/event_mask.dds" alwaystransparent = yes }

hide_window
ウィンドウを非表示にするコマンドです。
「hide_window = yes」とすると、イベントウィンドウが開かなくなります。
選択肢が無く、通知もしない、つまり内部処理用イベントです。

なお、「hide_window = yes」とすると、title・desc・pictureは無効、
hide_windowを省略すると、「hide_window = no」あつかいとなります。
したがって、実際のイベント作成時は、以下のどちらかの構文になります。

まとめ
## 「イベントらしいイベント」用 country_event = { id = sample_event.1 title = sample_event.1.name desc = sample_event.1.desc picture = GFX_evt_ship_in_orbit
## 内部処理用 country_event = { id = sample_event.1 hide_window = yes
5d.イベントの発生条件 (trigger など)
続いて、イベント発生条件に関わる部分の説明です。

### Sample_Event_of_Guide\events\SEoG_events_1.txt ## イベントの発生条件 is_triggered_only = no fire_only_once = no mean_time_to_happen = { days = 3 } trigger = { is_ai = no }

省略可能だったり、相互排他的だったりする部分があるため、基本的に全部使うことはありません。採用したい発生条件により以下の3種類のいずれかを採用することになります。

## 他のイベントから呼び出された場合のみ発生する is_triggered_only = yes
## 条件を満たした上で、他のイベントから呼び出された場合のみ発生する is_triggered_only = yes trigger = { <条件> }
## 条件が満たされると、早かれ遅かれ発生するが、その期間はランダム mean_time_to_happen = { days = <時間> } trigger = { <条件> }

順番に解説していきます。

他のイベントから呼び出された場合のみ発生する
とてもシンプルです。「イベントを呼び出すイベント」を用いて呼び出した場合のみ、発生します。
呼び出し法については、後ほど「immediate」と一緒に説明します。

条件を満たした上で、他のイベントから呼び出された場合のみ発生する
前の例から、「trigger = { <条件> }」が加わりました。一番良く使うタイプの条件設定です。
関数名が紛らわしいのですが、「is_triggered_only」と「trigger = { <条件> }」の双方に「trigger」と書いてあるもののこの2つには全く関係がありません。
したがって、単に<条件>が満たされただけではイベントは発生しません。
上の青い字の通り、trigger内の<条件>を満たした状態で、他のイベントから呼び出しをかけた場合のみ発生します。

条件が満たされると、早かれ遅かれ発生するが、その期間はランダム
最後の条件は、他とは毛色が異なります。
「mean_time_to_happen」がキモで、これは「平均発生時間」の意味です。
したがって、「mean_time_to_happen = { days = 100 }」は、「平均100日で発生する」という意味です。普通は days だと短すぎるので、months や years を使うことになります。
また、<条件>が満たされている限り、イベントは何度でも発生します。もし1回しか起こしたくない場合、後述のイベント処理の中で「イベント発生済フラグ」を建て、<条件>中に「そのフラグが建っていない」を加える必要があります。その辺りのフラグ管理を含め、具体的な<条件>は、別の機会に説明します。

  • tips
    この mean_time_to_happen の実際の処理は、「毎日指定した日数の逆数の確率で発生する」です。つまり、days = 100 としていれば、一日当たり1/100の確率で発生します。したがって、100日未満で発生する確率が高い一方、低確率ながら500日経っても発生しない事もあります(指数分布)。
    もう少し安定した「イベント発生までの時間」が欲しい場合、「指定日数後に別イベントを起こすイベント」が作れますので、そちらを利用することになります。したがって、発生条件部分は、「is_triggered_only」型になります。

<条件> について
trigger内の<条件>は、使える関数が非常に多いので、数個だけ紹介して、残りは別項目(未作成)で紹介しようと思います。ちなみに、and/or/notも使えます。
has_country_flag = TestFlag ## 対象国に「TestFlag」が建っている is_ai = no ## プレイヤーが操作している帝国である is_country_type = fallen_empire ## 未覚醒の没落帝国である ## 一覧(英wiki): click here[stellaris.paradoxwikis.com]

fire_only_onceについて
ここまで、しれっと無視してきましたが、一応紹介しておこうと思います。
正直、めったに使わないので、読み飛ばして、そのまま忘れてしまって構いません。

その機能ですが「fire_only_once = yes」を入れておくと、そのイベントはゲーム中1回しか発生しなくなります。
上手く使いこなすと便利そうに見えますが、ほとんど使い道がありません。
例えば、バニライベントに「初めて他惑星に入植した」イベントがありますが、これにfire_only_onceは使えません。あくまで、「銀河で1回しか発生させない」効果なので、使うと全帝国で一番最初に入植した帝国のみにイベントが発生し、残りの帝国は無視されてしまいます。
したがって、使うとすれば銀河の危機のように銀河全体のイベントのみとなります。ただ、その場合も、フラグでやったほうが、色々と融通がきくので、あまり使わないのですが…。

まとめ
## 大抵は、「イベント呼び出し用イベント」と、これを使う ## 不要ならtriggerを省く is_triggered_only = yes trigger = { <条件> }
## 時々に、こっちも使う mean_time_to_happen = { months = <時間> } trigger = { <条件> }
5e. イベント効果 (immediate/option/after)
本稿では以下のイベントの効果に関わる部分を説明していきます。
それぞれの効果が順次発生しますが、大雑把に言うと、
「immediate → optionの内の1つ → after」の順で処理します。

### Sample_Event_of_Guide\events\SEoG_events_1.txt ## イベント発生時の効果 immediate = { add_food = 50 } ## イベントに出す選択肢 option = { name = sample_event.1a.name custom_tooltip = sample_event.1a.tooltip add_minerals = 200 } option = { name = sample_event.1b.name custom_tooltip = sample_event.1b.tooltip add_energy = 200 } ## イベント終了時の追加効果 after = { add_influence = 50 }

イベントの効果 (共通)
まずは、immediateを例に、イベント発生時の効果について説明します。
後述のoptionやafterと共通ですので、「書く場所を変えれば発生タイミング等が変わる」と思っておけば大丈夫です。
まず、サンプルの例を見ると、以下の通りになっています。
immediate = { add_food = 50 ## 対象帝国に食料50を追加する }
上記の例だと、イベント対象の帝国に食料50を追加します。
イベント対象と効果が噛み合っていないと効果を発揮しません。
特にコードで指示しなければ、冒頭のcountry_eventやship_eventに応じた対象になります。
## 悪い例 ship_event = { <中略> immediate = { add_food = 50 } } ## 「船に食料備蓄を与える」では意味不明
詳細は割愛しますが、以下のようにimmediate内でイベント対象を切り替えることで、機能するようになります。
ship_event = { <中略> immediate = { owner = { add_food = 50 } ## owner: 船の所有者 } }
ship_event = { <中略> immediate = { random_country = { add_food = 50 } ## 全ての帝国の中からランダムで1帝国 } }
ここに入れられる関数も非常に数が多いため、ここでは数個だけ紹介して、残りは別項目(未作成)で紹介しようと思います。
country_event = { id = TestEvent.2 } ## 直ちに TestEvent.2 を起こす country_event = { id = TestEvent.3 day = 10 } ## 10 日後に TestEvent.3 を起こす country_event = { id = TestEvent.4 day = 10 random = 5 } ## 10~14日後にTestEvent.4を起こす ## ↑本稿で何度か言及した「イベントを起こすイベント効果」 ##  immediate・option・after内に入れると、イベントを呼び出す効果を持つ ##  当然、country_event・ship_eventなどの区分は、呼び出し先と合わせる必要がある。 set_global_flag = TestFlag ## TestFlagを建てる set_building = "building_power_plant_1" ## 対象地上タイルに発電所I型を出現させる add_anomaly = TEST_CAT ## TEST_CATに分類されているアノマリー群の内1つを、対象天体に追加する ## 一覧(英wiki): click here[stellaris.paradoxwikis.com]

immediate固有の注意事項
immediateは、イベント効果系で最も基礎的な処理です。
基本的に、イベントウィンドウが表示される前に、上から順に処理されます。
なお、hide_window = yes としている場合、optionやafterは使えないため、全ての効果をここに書く必要があります。
(正確にはafterは使えますが、あえて使う意味がありません)


optionについて
optionは、イベントウィンドウ下部に表示される選択肢です。
フルパッケージで書くと、以下のようになります。
当然ながら、hide_window = yes の場合は、使用不可です。

option = { name = sample_event.1a.name custom_tooltip = sample_event.1a.tooltip trigger = { <条件> } ai_chance = { factor = <数値> } <効果> hidden_effect = { <効果> } }

ここまでの内容を理解していれば、そんなに難しくないので、サクッと行きます。
  • name
    • 選択肢の名前で、ボタン部分に表示されます。
      イベント全体のtitle・desc同様、キーで指定して言語ファイル(.yml)で実際の言葉を入れるのが基本です。
  • custom_tooltip
    • マウスオーバーツールチップ(右上図参照)に表示される説明文です。
      同じく、キーで指定&言語ファイルが基本です。
  • trigger
    • その選択肢が表示される条件です。
      例えば、「trigger = { has_technology = "tech_jump_drive_1" } 」とすると、
      ジャンプドライブを開発済みの帝国のみに、その選択肢が表示されます。
  • ai_chance
    • NPC帝国が、その選択肢が選ぶ確率を相対値で指定します。
      全選択肢でこれを省くと、NPCは等確率で選択します。
  • <効果> (hidden_effect なし)
    • その選択肢を選んだ場合の効果を記載します。
      なお、ここに書いた効果は、ツールチップ内に自動で表示されます。
  • hidden_effect = { <効果> }
    • その選択肢を選んだ場合の効果を記載します。
      ツールチップに表示したくない効果は、ここに放り込みます。
      ( hidden_effect = { country_event = { id = ****** } } など)

afterについて
afterは、optionでの選択にかかわらず、常にoptionの後に処理される効果です。
hide_window = yes で使う意味はありませんので、その場合はimmediateを使って下さい。
ここに書いた効果も、基本的に選択肢のツールチップに表示されるため、
表示したくない場合はoption同様にhidden_effectを使う必要があります。
リンク集 (英語)
ある程度なれてきたら、mod作りにあたっては、以下のサイトが参考になります。
今後の更新内容と最近の更新
今後の更新内容
  1. 何か要望があれば、それを作成。
  2. イベントチェーンや、スペシャルプロジェクトの作り方
    • (アノマリーは、私が詳しくないので作成予定なし)
  3. よく使う関数(作成者の主観)の紹介
    • どういう形式で書くか考え中

最近の主な更新事項
  • '18/4/14
    • はじめに(注意事項): 複数ページに分けたため、そのリンクを追加
    • 5c. イベントの基礎情報: イベント画像一覧追加(リンク)
< >
3 Comments
Sousui Apr 6 @ 8:46pm 
これは素晴らしい
是非参考にさせていただきます
NaK1119  [author] Mar 17 @ 7:00pm 
コメントありがとうございます。
バニラの件は、確かに説明不足でした。付け加えておきます。
Crusader Kings IIは、なるほど、結構詳しく書いてありますね。
そのうち、リンク集を作るので、そこに入れておきます。
E_yoshiharu Mar 17 @ 4:54pm 
素晴らしいです。

ひとつきになることとして、バニラという言葉が解説無しで使用されています。
(中級社以上向けですが)一つ付け加えておきますと、英文wikiのMODコーナーもいまだ未完成状態です。長い英文を読む気力があり、二つのゲーム間の違いを理解しているのであれば、同じパラド社のゲームのCrusader Kings IIの英文wikiのScriptingページがパラド社のMOD系ページの中で最もよくできているので、参考文献に加えるのもよいかもしれません。