コンテンツにスキップ
Stellaris v3.13系のdescriptor例を含む 対応 翻訳

MOD制作チュートリアル

これはStellarisで基本的なMODを作るための入門チュートリアルです。特記がなければ、すべてMS Windowsでの作業を前提とします。

Warning

同じMODをローカルMODとWorkshop購読の両方で保持すると、ゲームはそのMODの読込みを拒否します。

原文には完成したチュートリアル国是の紹介動画もあります。

空のMODを生成する

最初のファイルとフォルダは、ランチャーから生成することも、手動で作ることもできます。

ランチャー

  1. Mod Toolsを開く — Paradox LauncherのMOD管理タブを開き、Mod Toolsを選びます。

    Mod Toolsを開く

  2. Create a Modを選ぶ — 正しくインストールされたローカルMODがドロップダウンに並びます。Create a Modを選びます。

    Create a Modを選ぶ

  3. descriptor情報を入力する — MODの正式名、バージョン(制作者向けの参考値)、ローカルパス、タグなどの基本メタデータです。MOD固有の任意接頭辞を反映したフォルダ名にすると便利です。

    descriptor情報の入力

  4. 作成完了 — 成功するとランチャーが通知します。エラーはドライブ(通常C:)の空き容量不足や、ウイルス対策・ファイルシステムによる読書き権限不足を示す場合があります。

    作成完了通知

  5. 編集・アップロード準備 — 新しいMODを選ぶとこの画面に出ます。初回アップロードと更新をここから行い、Descriptionの内容はストアページへ表示されます。この画面のDescriptionとThumbnailはローカル保存されず失われる可能性があるため、説明文とサムネイルをMODルートにも保存することを強く推奨します。

    編集・アップロード画面

手動作成

ランチャーを使わなくても同じ結果にできます。各MODには、正しい場所へ置いた2つのdescriptorが必要です。

  1. 1つ目はメタデータと、ゲーム/ランチャーがMODを探すローカルパスを持ち、%USERPROFILE%\Documents\Paradox Interactive\Stellaris\mod\へ置きます。
  2. %USERPROFILE%はシステムのユーザープロファイルで、通常C:\Users\%USERNAME%と同じ場所です。
  3. modはローカルMOD用のStellarisフォルダです。ほかにlogs、save games、screenshotsなどがあります。
  4. 2つ目はメタデータだけを持ち、MODのルート(例: %USERPROFILE%\Documents\Paradox Interactive\Stellaris\mod\tutmod\)へ置きます。
  5. ランチャーを使わない場合はルートフォルダを手動作成します。
  6. ルート側は必ずdescriptor.modという名前です。
  7. ストアからMODを取得すると、ランチャーはルートのdescriptorをStellarisのmodフォルダへコピーし、ローカルパスを追加します。

Tip

%USERPROFILE%\Documents\Paradox Interactive\Stellaris\mod\は、ユーザー名を書かずそのままエクスプローラーのアドレスバーへ貼り付けられます。

開始時のファイル構造は次のとおりです。

%USERPROFILE%\Documents\Paradox Interactive\Stellaris\mod\tutmod.mod
%USERPROFILE%\Documents\Paradox Interactive\Stellaris\mod\tutmod\descriptor.mod
\mod\tutmod.mod \mod\tutmod\descriptor.mod
version="0.1"
tags={ "Gameplay" }
name="Tutorial Mod"
supported_version="v3.13.*"
path="C:/Users/OldEnt/Documents/Paradox Interactive/Stellaris/mod/tutmod"
version="0.1"
tags={ "Gameplay" }
name="Tutorial Mod"
supported_version="v3.13.*"

バージョン文字列にはワイルドカードを使えます。supported_version="v3.13.0"の代わりにsupported_version="v3.13.*"と書けます。2ファイルの違いはpath行だけです。

ローカルMOD一覧側 MODルート側
ローカルMOD一覧側のdescriptor MODルート側のdescriptor

左はローカルMODディレクトリにある新しいtutmodフォルダと1つ目のdescriptorです。他のローカルMODには読みやすい名前が付き、Steam Workshopのdescriptorにはugc_接頭辞が付いています。右はtutmodルート内の2つ目のdescriptorで、ルートへのローカルパスを含みません。

Stellarisの小規模パッチが出ても、ランチャーはこのMODを最新対応として認識します。supported_versionは読込みやコードへ作用せず、表示上の目印にすぎません。音楽や画像など低層のMODでは2番目の数字にもワイルドカードを使う場合があり、ランチャーは受け付けますがerror.logへ指摘を出します。

MOD制作ツール

最低限のツール一覧

関連資料: MOD制作の「ツールとユーティリティ」節。

無償・オープンソースを含む有用なツールが多数あります。このチュートリアルが推奨する最低限は次のとおりです。

  • Notepad++ — タブ・画面分割を備えた高速な、無償・オープンソースのテキストエディタ。
  • Sublime Text — 高機能で拡張・改造が可能なテキストエディタ。必要に応じてパッケージを追加します。
  • Visual Studio Code(VSC)— 高機能な無償コードエディタ。Visual Studioとは別物です。
  • CWTools — Paradox言語の構文データベース。無償・オープンソースで、VSC内から導入できます。コードの妥当性を自動確認します。
  • Paradox Syntax Highlighting — 構文を色分けします。
  • WinMerge — 無償・オープンソースの差分比較・マージツール。2つのテキストファイルまたはフォルダを比較します。
  • 7-Zip — 無償・オープンソースのファイル圧縮・展開ツール。
  • GIMP — 高機能な無償・オープンソース画像エディタ。
  • Paint.NET — MS Paint風UIの無償画像エディタ。
  • GitHub — 無償のコード管理・共同作業ツールおよびサービス。
  • Discord — 無償のインスタントメッセージ・音声通話プラットフォーム。Stellaris Modding Denなどで制作者と交流できます。
  • Irony Mod Manager — 競合解決を持つ、無償・オープンソースのParadoxゲーム用ランチャー/MOD管理。Paradox Launcherより多機能で高速です。
  • File Commander/Total Commander — Windows向けの高機能で拡張・改造可能なファイル管理ツール。

Paint.NET、Notepad++、GitHubを除き、Windows、Linux、macOSで無料利用できます(除外したものにも代替があります)。

CWToolsの設定

VS Codeの拡張機能画面

File → Preferences → Extensionsで開く拡張機能画面です。画像にはCWToolsとParadox Syntax Highlightingを含む4つの導入済み拡張機能が表示されています。

CWToolsはVSC上で動き、入力中にClausewitz Engine系ゲームのParadox構文を検査します。主な機能は次のとおりです。

  • エラー箇所を強調し、原因候補をツールチップ表示。
  • 候補表示中にTabを押すコード補完。
  • 不足しているローカライズキー一覧の生成。
  • 右クリック → Command Palette → Toggle Line Commentによる複数行コメント切替。
  • 右クリック → Format Documentによるファイル全体の整形。

設定手順:

  1. VSCをインストールします。
  2. File → Preferences → Extensionsを開きます。
  3. Marketplace検索へ「CWTools」と入力し、「CWTools – Paradox Language Services」をインストールします。
  4. 「Paradox Syntax Highlighting」も検索・インストールします。
  5. VSCを再起動します。

最初の準備

前置き

通常は作りたいものに近いMODを分解して学ぶのが最善ですが、このチュートリアルではゼロから作ります。CWToolsの強力な構文検査を使うため、主なエディタはVSCです。

VSCのMODコード画面。赤は開いているファイル、黄はMODルート、緑はアウトライン、水色はエラー、桃は右クリックメニュー、橙はプレビュー付きスクロールバー

画像の色分けは、赤が開いているファイル、黄がMODルート(testmod)、緑が現在のファイル内の各節のアウトライン、水色がエラーと問題、桃が右クリックメニュー、橙がプレビュー付きスクロールバーです。

手元に置く資料

MODの内容

物語中心のMODと、新しいゲームシステムや画像を導入するMODは異なりますが、ほぼ必ず重なる領域があります。このチュートリアルは細部へ踏み込みすぎず、なるべく広い題材に触れます。

ゲーム構造

ファイル構造の全体像はMOD制作の「ゲームデータ」節を参照してください。

Steamライブラリ内のStellarisインストールフォルダ

Stellarisの大半の内容は、インストール先(SteamならSteamLibrary\steamapps\common\Stellaris\)の非圧縮フォルダにあります。MODはゲームファイル全体・一部を上書きするか、既存の命名・フォルダ規則に従って新ファイルを加えます。インストール先の直接編集は強く非推奨です。上書き・追加はMODフォルダで行います。

よく変更する場所:

  1. /common/ — ゲームデータと規則の大部分。
  2. /events/ — 定義条件に応じてゲームがいつ、どう変化するか。
  3. /localisation/と/localisation_synced/ — プレイヤーが読む文章。
  4. /gfx/ — 画像素材。
  5. /interface/ — 画像素材の利用規則とUI設計。

MODはインストールフォルダの構造を鏡写しにします。ローカライズを含むMODなら、ゲーム本体と同じく言語ファイルを/localisation/へ置きます。

最初のMODを書く

\common\governments\civics

国是の例

関連資料: 統治形態のMOD制作。

新しい国是を作ります。国是と起源は\common\governments\civics\にあり、起源は一部仕様を変えた国是です。次は\common\governments\civics\00_civics.txtの例ですが、MOD側で同名にするとバニラを上書きするため、実際には00_MODNAME_civics.txtのような名前を使います。

civic_beacon_of_liberty = {
    potential = {
        ethics = { NOT = { value = ethic_gestalt_consciousness } }
        authority = { NOT = { value = auth_corporate } }
    }
    possible = {
        authority = {
            value = auth_democratic
        }
        ethics = {
            OR = {
                text = civic_tooltip_egalitarian
                value = ethic_egalitarian
                value = ethic_fanatic_egalitarian
            }
            NOR = {
                text = civic_tooltip_not_xenophobe
                value = ethic_xenophobe
                value = ethic_fanatic_xenophobe
            }
        }
    }
    random_weight = { base = 5 }
    modifier = {
        country_unity_produces_mult = 0.15
    }
 }
項目 意味
civic_beacon_of_liberty コードとローカライズから参照する国是キー。
potential 選択肢として表示される条件。
possible 有効な選択となる条件。
random_weight ランダム生成帝国に現れる重み。2国是が各5なら50:50です。
modifier 帝国へ与える直接効果。複雑な処理は国是を確認するイベントから効果を実行します。

この国是はキーcivic_beacon_of_libertyを持ち、ゲシュタルト意識ではなく、企業統治でもない帝国にだけ候補表示されます。そのうち民主制で、平等主義または熱狂的な平等主義、かつ排他主義でも熱狂的な排他主義でもない帝国だけが選択できます。

text =は自動生成されたものに代えて独自ツールチップを呼びます。通常は不要ですが役立つ場合があります。銀河生成時の絶対重みは5で、ほかが45と50なら概ね5%です。modifierは統合力産出+15%を与えます。国是定義が対応しない複雑な条件について理解するにはConditionsの論理演算子を参照してください。

独自国是

  1. VSCでFile → Open Folderを選び、descriptor.modを含むMODルートを開きます。common\governments\civics\を作ります。

    国是フォルダ作成

  2. tutmod_civics.txtを作ります。

    国是ファイル作成

  3. tutmod_civic = {}と書きます。CWToolsが動けば不足ローカライズのエラーが出ます(後で直します)。

    最初の国是キー

  4. {}内で改行し、potentialを入力します。CWTools候補を矢印で選び、Tabまたはクリックで確定します。

    CWTools候補

  5. CWToolsが候補の構造を補完・整形します。

    CWToolsによる補完

  6. potential内にethics条件を加えます。CWTools候補を積極的に使うと時間を節約できます。

    ethics条件の追加

CWToolsで国是を書く様子

コード整形

#以降はその行のコメントとなり、ゲームは読みません。参照元から好まない部分を入れ替えます。まずauth_corporate除外をコメントアウトし、ethic_gestalt_consciousness除外へコメントを付けます。

# civic_beacon_of_liberty = {
 tutmod_civic = {
    potential = {
        ethics = {
            NOT = {
                value = ethic_gestalt_consciousness
            }
        }
        # authority = {
        #   NOT = {
        #       value = auth_corporate
        #   }
        # }
    }
    possible = {
        authority = {
            value = auth_democratic
        }
        ethics = {
            OR = {
                text = civic_tooltip_egalitarian
                value = ethic_egalitarian
                value = ethic_fanatic_egalitarian
            }
            NOR = {
                text = civic_tooltip_not_xenophobe
                value = ethic_xenophobe
                value = ethic_fanatic_xenophobe
            }
        }
    }
    random_weight = {
        base = 5
    }
    modifier = {
        country_unity_produces_mult = 0.15
    }
 }

VSCとCWToolsによる整形

内容の追加

志向条件をもう1つ加えます。

OR = {
    text = civic_tooltip_materialist
    value = ethic_materialist
    value = ethic_fanatic_materialist
}

完成したコードは次のようになります。

# civic_beacon_of_liberty = {
 tutmod_civic = {
    potential = {
        ethics = {
            NOT = {
                value = ethic_gestalt_consciousness # ゲシュタルト意識を除外。
            }
        }
        # authority = {
        #   NOT = {
        #       value = auth_corporate
        #   }
        # }
    }
    possible = {
        authority = {
            value = auth_democratic
        }
        ethics = {
            OR = {
                text = civic_tooltip_materialist
                value = ethic_materialist
                value = ethic_fanatic_materialist
            }
            OR = {
                text = civic_tooltip_egalitarian
                value = ethic_egalitarian
                value = ethic_fanatic_egalitarian
            }
            NOR = {
                text = civic_tooltip_not_xenophobe
                value = ethic_xenophobe
                value = ethic_fanatic_xenophobe
            }
        }
    }
    random_weight = {
        base = 5
    }
    modifier = {
        country_unity_produces_mult = 0.15
    }
 }

この国是を有効に選ぶには、物質主義系統かつ平等主義系統であり、排他主義系統ではない必要があります。civic_tooltip_materialistはゲーム本体にあるため、独自ローカライズを作る必要はありません。

ローカライズ

ローカライズファイル

CWToolsで不足ローカライズを生成

詳しくはローカライズのMOD制作を参照してください。便利なコンソールコマンド:

reload text             # ローカライズ表を再読込
switchlanguage english  # 使用言語を切り替え、表を再読込
toggle_string_id        # ローカライズの代わりにStringIDを表示

CWToolsは未定義キーを強調し、VSC下部に問題一覧を表示します。

Localisation key tutmod_civic is not defined for English
Localisation key tutmod_civic_desc is not defined for English

MODルートに\localisation\english\を作り、tutmod_l_english.ymlを作ります。VSCはStellarisのローカライズに必要なUTF-8 BOM付きで自動保存します。VSCとNotepad++のどちらでもエンコーディングを変更できます。

1行目に言語を宣言します。

l_english:

対応言語宣言はbraz_por、english、french、german、japanese、korean、polish、russian、simp_chinese、spanishです。

tutmod_civics.txtへ戻り、右クリック → Command Palette → Generate missing loc for all filesを実行し、生成文字列をローカライズファイルへコピーして内容を埋めます。

l_english:
 tutmod_civic: "Semper Exploro"
 tutmod_civic_desc: "This society prioritised scientific exploration over military expansion in the early space age."
 tutmod_civic_effects: "Start with a $science$ and assigned $scientist$ instead of $OUTLINER_FLEETS$."

この例の説明文は「この社会は宇宙進出の初期に、軍事的拡張より科学的探査を優先した」、効果文は「軍事艦隊の代わりに、科学者を配属した調査船で開始する」という意味です。コード内の英語は英語用ローカライズの作成例として保持しています。

$で囲むと、ゲーム本体またはMODの別ローカライズキーを参照できます。バニラの英語キーはSteamLibrary\steamapps\common\Stellaris\localisation\english\で確認できます。

Stellarisには他言語向けのフォールバックローカライズがありません。英語だけを作ると、別言語の利用者にはtutmod_civicのような生キーが見えます。英語ファイルを各言語フォルダへコピーし、ファイル名と先頭宣言を変える必要があります。

\localisation\braz_por\tutmod_l_braz_por.yml
\localisation\english\tutmod_l_english.yml
\localisation\french\tutmod_l_french.yml
\localisation\german\tutmod_l_german.yml
\localisation\japanese\tutmod_l_japanese.yml
\localisation\korean\tutmod_l_korean.yml
\localisation\polish\tutmod_l_polish.yml
\localisation\russian\tutmod_l_russian.yml
\localisation\simp_chinese\tutmod_l_simp_chinese.yml
\localisation\spanish\tutmod_l_spanish.yml

訳注: 原文のパス一覧は全言語でenglishフォルダになっていますが、直前の説明に合わせて各言語のフォルダ名を示しています。

ブラジル・ポルトガル語版の例:

l_braz_por:

 tutmod_civic:0 "Semper Exploro"
 tutmod_civic_desc:0 "This society prioritised scientific exploration over military expansion in the early space age."
 tutmod_civic_effects:0 "Start with a $science$ and assigned $scientist$ instead of $OUTLINER_FLEETS$."

$参照なら同じ文字列を何度も訳さず、利用者の言語から自動取得できます。ただし参照語が主格で使われない文などでは、文法的に不自然になる可能性があります。

独自ツールチップ

ゲームは効果からツールチップを自動生成します。国是に次があれば、効果欄へ「月間統合力: +15%」と表示されるため、通常は説明を別途書く必要がありません。

modifier = {
    country_unity_produces_mult = 0.15
}

追加効果の文章を表示したいので、tutmod_civics.txtからtutmod_civic_effectsを参照し、修飾子も置き換えます。

# modifier = {
#     country_unity_produces_mult = 0.15
# }
description = "tutmod_civic_effects"
modifier = {
    ship_science_cost_mult = -0.25
}

アイコンを追加する前のチュートリアル国是

国是ファイル全体は次のようになります。

# civic_beacon_of_liberty = {
tutmod_civic = {
    potential = {
        ethics = {
            NOT = {
                value = ethic_gestalt_consciousness # ゲシュタルト意識を除外。
            }
        }
        # authority = {
        #   NOT = {
        #       value = auth_corporate
        #   }
        # }
    }
    possible = {
        authority = {
            value = auth_democratic
        }
        ethics = {
            OR = {
                text = civic_tooltip_materialist
                value = ethic_materialist
                value = ethic_fanatic_materialist
            }
            OR = {
                text = civic_tooltip_egalitarian
                value = ethic_egalitarian
                value = ethic_fanatic_egalitarian
            }
            NOR = {
                text = civic_tooltip_not_xenophobe
                value = ethic_xenophobe
                value = ethic_fanatic_xenophobe
            }
        }
    }
    random_weight = {
        base = 5
    }
    description = "tutmod_civic_effects"
    modifier = {
        shipclass_science_ship_build_cost_mult = -0.25
    }
    # modifier = {
    #   country_unity_produces_mult = 0.15
    # }
}

ログとデバッグ

OS ログの場所
Linux ~/.local/share/Paradox Interactive/Stellaris/logs
Windows …\Documents\Paradox Interactive\Stellaris\logs
macOS ~/Documents/Paradox Interactive/Stellaris/logs

EXEパラメータ

stellaris.exeへ次の起動オプションを渡すと、ログとデバッグを改善できます。

-script_debug  # 無視してよい
-debug_mode    # ログを増やす
-debugtooltip  # 最初に入るゲームでdebugtooltipを有効化
-logprefix     # 各ログ名へ指定接頭辞を付ける
-logpostfix    # 各ログ名へ指定接尾辞を付ける
-logall        # 重複文字列も省略せずログへ出す

log効果

任意の文字列をgame.logへ出力できます。

log - デバッグ用メッセージをgame.logへ出力
log = <string>
対応スコープ: すべて

イベントスクリプトの動作確認など、多くのMOD制作者がデータ出力に使います。既定では同じログ文の最初の1回しか出ません。ループ内でも毎回出すには、増加するVariablesを文字列へ含めるなど毎回変えるか、起動時に-logallを渡します。

game.logとerror.log

MOD制作者が主に使うデバッグログです。tutmodを有効にしてゲームを起動し、error.logで接頭辞tutmod_を検索すると、現時点では次が出ます。

[18:22:15][government_civic_type.cpp:185]: Did not find an icon for civic: tutmod_civic

必要なtutmod_civicアイコンがないという意味です。

Note

error.logは例外捕捉で処理されるため、クラッシュの90%以上では実際の原因を記録しません。残りも直前に別の場所で記録された同じ問題が原因で、特定クラッシュの調査には役立ちにくいものです。クラッシュ関連データはStellaris\crashes\へ保存されますが、主にStellaris開発者向けです。

よくあるエラーと原因は、原文WikiのError.logを参照してください。

イベント

fire_only_once

関連資料: イベントのMOD制作、トリガー・修飾子・効果の統合一覧。

イベントは、トリガー条件を満たし、呼び出されたときに効果でゲーム状態を変えるスクリプトです。\events\tutmod_events.txtを作り、先頭で少なくとも1つの名前空間を宣言します。

namespace = tutmod

チェックサムを変えるゲームプレイMODは、ほかのMODが存在を検出できるようにするのがよい慣行です。一般的には任意名のグローバルフラグを設定します。

set_global_flag - グローバルフラグを設定
set_global_flag = <key>
対応スコープ: すべて

ファイル例:

namespace = tutmod
country_event = {
    id = tutmod.1
    hide_window = yes
    fire_only_once = yes
    trigger = {
        NOT = {
            has_global_flag = tutmod_installed
        }
    }
    immediate = {
        set_global_flag = tutmod_installed
    }
}
  • namespace = tutmod — 名前空間を宣言します。
  • country_event = {} — 国家スコープのイベントを宣言し、呼出し効果の名前にもなります。
  • id = tutmod.1 — 名前空間と番号をピリオドで結んだ一意ID。
  • hide_window = yes — ポップアップを作りません。ゲーム内イベントの多くがこの方式です。
  • fire_only_once = yes — 条件を満たして正常発火した後、現在のゲームでブロックリストへ入り二度と使われません。
  • trigger = {} — 呼出し時に発火するため満たすべき条件。既定のthis/rootはイベント種別(ここでは国家)で決まります。
  • immediate = {} — 発火時にゲーム状態を変える効果一覧。

この例にはis_triggered_only = yesがないため、全国家について毎日確認されます。pop_eventなら全POPを毎日確認し、5000 POPなら毎日5000回です。非常に負荷が高いため、明確な理由がなければ必ずis_triggered_only = yesを追加します。これはイベントの自己確認を止め、ほかの場所からの呼出しを要求します。

fire_only_once = yesにより、最初の国家で発火した後は確認されません。条件が単純なNOT = { has_global_flag = tutmod_installed }なので開始直後に発火します。使用したトリガーと効果は次のとおりです。

has_global_flag - グローバルフラグが設定済みか確認
has_global_flag = <flag>
対応スコープ: すべて

set_global_flag - 任意名のグローバルフラグを設定
set_global_flag = <key>
対応スコープ: すべて

ゲームはこのイベントを「各国家が毎日tutmod.1の『global_flag tutmod_installedが未設定』条件を確認し、trueならフラグを設定してイベントをブロックリストへ加える」と解釈します。

is_triggered_only

原則として全イベントへis_triggered_only = yesを指定し、効果またはオンアクションから明示的に呼ばれるまで確認させません。2番目のイベントを\events\tutmod_events.txtへ追加します。

# 軍事艦隊を削除し、調査船と科学者を付与する。
# スコープ:
# スコープ: root: country this: country
country_event = {
    id = tutmod.2
    hide_window = yes
    is_triggered_only = yes # ほかの場所から呼ばれた場合にのみ発火。
    trigger = {
        has_civic = tutmod_civic        # tutmod_civic国是が必要。
    }
    immediate = {
        every_owned_fleet = {
            # THIS国家が所有する全艦隊を順に処理。
            limit = {
                is_ship_class = shipclass_military # shipclass_military条件を満たす艦隊のみ
            }
            delete_fleet = {
                target = this               # THIS艦隊を削除。
                kill_leader = no            # THIS艦隊のリーダーは削除せず、配属を解除。
            }
        }
        create_leader = {
            # THIS国家のリーダーを作成。
            class = scientist # 科学者クラスを指定。
            species = this # THISは効果を記述した場所のスコープ(国家)なので、その主要種族を使う。
        }
        create_fleet = {
            # THIS国家の艦隊を作成。
            effect = {
                # THIS艦隊に効果一覧を実行。
                set_owner = prev # THIS艦隊の所有者をPREV(直前の括弧内でTHISだった国家)に設定。
                create_ship = {
                    # THIS艦隊の艦船を作成。
                    random_existing_design = science # 調査船の設計をランダムに選ぶ。
                    graphical_culture = owner # 艦船の外観を艦隊のOWNERに合わせる(ここではPREVも使用可能)。
                }
                set_location = {
                    target = owner.capital_scope.solar_system.starbase # 艦隊の位置を所有者の首都惑星が属する星系の星系基地へ設定。
                    # distance = 0
                    # angle = random
                    # direction = out_system
                }
                assign_leader = last_created_leader # 最後に作成したリーダーを艦隊へ配属。
            }
        }
    }
}

このイベントのトリガーは、国家がhas_civic = tutmod_civicを満たすかだけです。immediateには複数の効果があり、既存軍事艦隊を削除し、科学者と調査船を作り、首都星系基地へ置いて配属します。各効果はトリガー・修飾子・効果の統合一覧でも確認できます。

スコープ

詳しくはスコープを参照してください。

イベント内の次の部分を分析します。

create_fleet = {
    effect = {
        set_owner = prev
        create_ship = {
            random_existing_design = science
            graphical_culture = owner
        }
        set_location = {
            target = owner.capital_scope.solar_system.starbase
        }
        assign_leader = last_created_leader
    }
}

create_fleetはcountry_event = { immediate = {内で直接呼ぶため、開始時はroot = country、this = countryです。create_fleetのeffectブロック内では、thisがその艦隊を指し、root = country、this = fleet、prev = countryになります。

effect = {
    set_owner = prev
}

set_ownerはthis艦隊内から呼ばれ、prev国家を対象にします。

common

on_actions

関連資料: イベントのMOD制作 — On Action。

イベントは効果とオンアクションから呼べます。tutmod_civicを持つ帝国を正しく初期化するため、\common\on_actions\tutmod_on_actions.txtを作り、ゲーム開始時に発火するイベントを宣言します。

on_game_start_country = {
    events = {
        tutmod.1
        tutmod.2
    }
}

GFX

空のアイコンを追加したチュートリアル国是

全画像素材は/gfx/にあります。国是アイコンは\gfx\interface\icons\governments\civics\へ置きます。この例では28×28のtutmod_civic.ddsを作ります。原文はStellaris Modding Denの#shared-artで無償提供された空テンプレートを使っています。

\gfx\interface\icons\governments\civics\tutmod_civic.dds

Stellaris画像の作成にはGIMPやPaint.NETがよく使われます。

MODをテストする

ゲーム内コンソールから任意のトリガー、効果、イベントをテストできます。コンソールは、入力の種類(trigger、effect、event)を先頭で宣言すれば、有効なスクリプトを受け付けます。

スクリプトは現在選択中のスコープ(惑星、艦隊など)で実行されます。帝国スコープは政府画面を開いて選びます。クリックできない対象には追加のスコープ演算子が必要です。

帝国旗をクリックし、次のトリガーでtutmod_civicを持つか確認します。

trigger OR = { has_civic = tutmod_civic has_valid_civic = tutmod_civic }
  • has_civic — 現在の国家が指定国是を持つか。
  • has_valid_civic — 指定国是を持ち、その国是の条件も満たすか。

実際にはhas_civicを同時に使うとhas_valid_civicの追加検査が冗長になるため、片方だけを使います。

トリガーのコンソールテスト。両トリガーが同じローカライズを再利用するため表示が紛らわしい珍しい例

トリガーにはローカライズがない場合や、同じキーを再利用する場合があります。原文がtutmod_civicとhas_valid_civicと呼ぶ上の2つのトリガーも同じキーを使うため、表示が紛らわしくなっています。珍しい例ですが、注意が必要です。

効果も同様です。帝国の全艦船数を数え、選択した母星の変数へ保存します。母星をクリックして次を実行します。

effect owner = { every_owned_ship = { prevprev = { change_variable = { which = tutmod_var_num_ships value = 1 } } } }

訳注: 原文のこのコマンドでは末尾の閉じ括弧が1つ欠けているため、補っています。

  • owner = {} — 選択惑星からその所有国家へ移るスコープ演算子。
  • every_owned_ship = {} — 艦隊内または国家所有の各艦船を反復して効果を実行します。ここでは全艦船が対象なのでlimitを省略しています。
  • prevprev = {} — every_owned_shipからownerへ1回、ownerから開始時の母星へもう1回、2段階戻ります。
  • change_variable — 指定スコープの指定変数を一定量変えます。

値を見るにはセーブを開くか、debugtooltipを有効にして対象へカーソルを合わせ、保存されたフラグと変数を表示します。

debugtooltipで変数を確認。星系基地、採掘ステーション、民間船も艦船として数えられる

星系基地、採掘ステーション、民間船も艦船に数えられます。軍事艦だけを数えるなら、is_ship_class = shipclass_militaryを満たすevery_owned_fleetを反復し、その各艦隊内のevery_owned_shipを数えます。

Note

コンソールは複数行を含む貼付けも正しく表示はしませんが実行します。性能問題のテストにはscript_profilerを1回実行して計測を開始し、もう1回実行して終了・結果出力します(3.5以降)。

Gitリポジトリ

Gitはファイル変更を追跡し共同作業を助けるバージョン管理です。導入すると次ができます。

  • MODを過去の任意時点へ戻す。
  • 特定行へのリンクを含めコードを共有する。
  • 特定リビジョンから配布用パッケージを生成する。
  • 他者から変更提案を受け、ボタン操作で承認・統合する。

この例では無料ホスティングのGitHubを使います。

  1. G:\GitHub\など、リポジトリ専用フォルダを作ります。
  2. MODフォルダをそこへ複製します。オンラインで分かりやすい名前へ変えてもよく、例ではG:\GitHub\tutmod\をG:\GitHub\tutorial-mod-stellaris\へ変えます。
  3. GitHubアカウントを作ります。
  4. GitHub Desktopを導入します(Windows/Mac向け。Linuxには各ディストリビューション向けクライアントがあります)。
  5. GitHub DesktopでFile → Options → Accountsからログインします。厳密には必須ではありませんが、オンラインへpushするため以降はログイン済みとします。
  6. File → New Repositoryを選びます。
作成 初回コミット確認
リポジトリ作成。名前をGitHubフォルダ内のMODフォルダ名と合わせ、READMEで初期化する 緑は追加、赤は削除。内容を確認してPublish repositoryを押す
公開設定 オンラインで利用可能
選んだ名前がURLの一部になる。privateは後から変更可能 オンライン公開されたリポジトリ
  1. 作成画面では、リポジトリ名を専用フォルダ内のMODフォルダ名と一致させます。これにより既存ファイルを初回コミットへ含められます。READMEで初期化し(後で編集可能)、説明を入力して、他の設定はそのままにします。
  2. 初回コミットを確認します。緑は追加、赤は削除です。フォルダ内のファイルを編集すると、この画面へすぐ反映されます。意図した変更であることを確認してPublish repositoryを押します。初回アップロード後は、このボタンを変更のpushに使います。
  3. 公開時に選ぶ名前はURLの一部になります。すぐ一般公開する場合はprivateの選択を外します。この設定は後から変更できます。
  4. 公開後はオンラインから利用できます。画像の例はチュートリアルMODのリポジトリで確認できます。

リポジトリフォルダ内のファイルを追加・削除・変更すると、GitHub Desktopが検出してpushできるようにします。コード状態の変更記録をコミットと呼びます。

外部リンク


出典: Stellaris Wiki — Modding tutorial(原文更新日: 2025年11月5日、版ID 111486)
翻訳日: 2026年9月17日 / 対応バージョン: 3.13系のdescriptor例を含む(原文に統一版表示なし)
本ページは原文Wiki(CC BY-SA 3.0)の内容を翻訳した非公式ファン翻訳です。