コンテンツにスキップ
Stellaris v3.5 対応 翻訳

動的MOD制作

本ページは、効果、条件、スクリプトローカライズ、スクリプト変数など、抽象的ながら非常に柔軟なMOD制作機能を扱います。

効果

効果は実行時にゲーム状態を変える文です。多くのゲームオブジェクトとイベントが動的効果として使用します。効果文の全一覧はEffectsを参照してください。効果は必ずスコープ上で実行します。詳細はScopesを参照してください。

スクリプト効果

複数の効果文や他のスクリプト効果を1つの効果として再利用できるブロックで、common/scripted_effects/xyz.txtに定義します。

example_scripted_effect = {
    shift_ethic = ethic_materialist
    ...
}

定義後は通常の効果と同様にexample_scripted_effect = yesで呼び出せます。

パラメータ

パラメータはすべて文字列で、スクリプト効果へ動的に挿入されます。

# 定義
example_scripted_effect = {
    shift_ethic = ethic_$ETHIC$
}
# 呼び出し
example_scripted_effect = { ETHIC = materialist }

複数パラメータも使えます。

example_scripted_effect = {
    while = {
        count = $COUNT$
        shift_ethic = ethic_$ETHIC$
    }
}
example_scripted_effect = { ETHIC = materialist COUNT = 2 }

パラメータ条件

詳細資料はcommon/scripted_effects/99_advanced_documentation.txtです。二重角括弧で囲むと、そのパラメータが渡された場合だけ内容を挿入します。

[[homeworld] <<<ここへ処理>>>]

last_created_species = {
    save_global_event_target_as = vaadwaurSpecies
    [[homeworld]set_species_homeworld = event_target:tempHomeworld]
}

先頭に!を付けると、パラメータが渡されなかったかnoの場合だけ挿入します。

[[!homeworld] <<<ここへ処理>>>]

パイプで既定値も指定できます。

has_global_flag = crisis_stage_$STAGE|1$

このメタスクリプト構文は2.3で導入されましたが、2.6時点のバニラでは使用例が少なく、common/scripted_effects/archaeology_event_effects.txtとcommon/scripted_triggers/00_scripted_triggers.txtなどにあります。Star Trek: New CivilisationsのようなMODではより多く使われています。

インライン計算

スクリプト効果とスクリプトトリガーでは、単純な計算式@\[ ... ]を使えます。

inline_math_example = {
    add_monthly_resource_mult = {
        resource = unity
        value = $COUNT|1$
        min = @\[ $COUNT|1$ * 10 ]
        max = 99999999
    }
}

COUNTをXとして、対象帝国へ月間統合力収入のX倍(下限X×10、上限99,999,999)を与えます。COUNT = 10なら月間収入の10倍、下限100です。

利用できる演算子は+、-、*、/です。それ以外は両側を連結し、たとえば@\[ 4 = 2 ]は42になります。

最初の式だけが評価される制限

1つのスクリプト効果/トリガー内では、最初の@\[ ... ]だけが正しく認識・評価されます。複数必要なら、互いを呼び出す複数のスクリプト効果へ分けます。

inline_math_drawback = {
    if = {
        limit = { <condition A> }
        inline_math_drawback_step_2 = { COUNT = 2 }
    }
    else = { inline_math_drawback_step_2 = { COUNT = 1 } }
}
inline_math_drawback_step_2 = {
    if = {
        limit = { <condition B> }
        inline_math_drawback_step_3 = { COUNT = $COUNT$ MULT = 0.75 }
    }
    else = { inline_math_drawback_step_3 = { COUNT = $COUNT$ MULT = 1.0 } }
}
inline_math_drawback_step_3 = {
    inline_math_drawback_step_4 = {
        RESOURCE = unity
        COUNT = @\[ $COUNT$ * $MULT$ ]
    }
}
inline_math_drawback_step_4 = {
    add_monthly_resource_mult = {
        resource = $RESOURCE$
        value = $COUNT$
        min = @\[ $COUNT$ * 100 ]
        max = 100000000
    }
}

式を引用符で囲んで別効果のパラメータとして渡す方法もあります。呼び出し元では計算式は評価されませんが、式内の$COUNT$は置換されます。受け取った効果側で計算式を評価するため、経路ごとに異なる式を選べます。ただし1回の呼び出しへ複数の式を渡すことはできません。

inline_math_effect = {
    if = {
        limit = { <condition A> }
        inline_math_drawback_step_2 = { COUNT = 2 }
    }
    else = { inline_math_drawback_step_2 = { COUNT = 1 } }
}
inline_math_drawback_step_2 = {
    if = {
        limit = { <condition B> }
        inline_math_drawback_step_3 = { Resource = unity Value = "@\[ $COUNT$ * 0.75 * 500]" }
    }
    else = {
        inline_math_drawback_step_3 = { Resource = unity Value = "@\[ $COUNT$ * 500]" }
    }
}
inline_math_drawback_step_3 = {
    add_resource = { $Resource$ = $Value$ }
}

角括弧ローカライズ

3.4以降、set_nameやnameで角括弧ローカライズを使う通常の形式は次のとおりです。ローカライズ文字列内の角括弧コマンド1つにつきvariable_stringを1つ使います。

name = {
    key = "NAME_Imperial_Origin_Empire"
    variable_string = "[origin_imperial_species.GetAdj]"
}

スクリプト効果内では、開き角括弧の前にバックスラッシュを2つ付けるか、角括弧自体を省略します。そうしないと角括弧ローカライズが表示されません。

name = {
    key = "NAME_Imperial_Origin_Empire"
    variable_string = "\\[origin_imperial_species.GetAdj]"
}

条件

条件は真偽を評価する文です。多くのゲームオブジェクトとイベントが動的条件として使用します。全一覧はConditionsを参照してください。条件もスコープ上で検査します。

スクリプトトリガー

複数の条件文や他のスクリプトトリガーを1つの条件として再利用するブロックで、common/scripted_triggers/xyz.txtに定義します。

example_scripted_trigger = {
    has_ethic = ethic_materialist
    has_ethic = ethic_fanatic_materialist
    ...
}

通常の条件と同様にexample_scripted_trigger = <yes/no>で呼び出せます。パラメータも利用できます。

example_scripted_trigger = {
    has_ethic = ethic_$ETHIC$
    has_ethic = ethic_fanatic_$ETHIC$
}
example_scripted_trigger = { ETHIC = materialist }

パラメータ付きトリガーはxyz = no形式では呼べません。否定する場合はNOT = { ... }へ入れます。

スクリプトローカライズ

common/scripted_loc/xyz.txtに定義します。条件に応じたローカライズキーを返すインスタンスを作ります。

defined_text = {
    name = GetAuthorityName
    text = {
        trigger = { has_authority = auth_democratic }
        localization_key = auth_democratic
    }
    text = {
        trigger = { has_authority = auth_oligarchic }
        localization_key = auth_oligarchic
    }
    ...
}

ローカライズファイルから[<scope>.GetAuthorityName]で呼びます。この例は帝国スコープからの使用を想定していますが、スクリプトローカライズ自体にスコープ型の制限はありません。

スクリプト変数

common/scripted_variables/xyz.txtに定義し、ファイル末尾には必ず空行またはコメント行を置きます。ゲームオブジェクトではなく、他のゲームファイルから共用できる@変数です。各ファイル内で定義した@変数は他ファイルから使えませんが、スクリプト変数は全ファイルで共有されます。

@example = 2

example_scripted_effect = {
    while = {
        count = @example
        shift_ethic = ethic_$ETHIC$
    }
}

または、定義側でパラメータを使い、呼び出し時にスクリプト変数を渡せます。

example_scripted_effect = {
    while = {
        count = $COUNT$
        shift_ethic = ethic_$ETHIC$
    }
}

example_scripted_effect = { ETHIC = materialist COUNT = @example }

補正の数値にも@変数を使えます。

補正

3.0以降、add_modifierでは数値を乗算するmultiplierを使えます(原文注記では、実際の導入は少し前ですが未文書化とされています)。

effect = {
    add_modifier = {
        modifier = soul_diet1
        multiplier = 6
        days = 360
    }
}

スクリプト補正

3.4でcommon/scripted_modifiersに導入されました。資料はcommon/scripted_modifiers/00_scripted_modifiers.txtです。ここで作る補正は既定では何の効果も持たず、条件付き補正や資源表などでmult = modifier:my_modifierのように明示して効果を与えます。例は01_ruler_jobs.txtのhead_researcher、04_species_traits.txtのtrait_charismaticです。

設定 説明・既定値
icon gfx/interface/icons/modifiers内の拡張子なしファイル名。既定はmod_+キー。
percentage パーセント表示するか。既定no。
min_mult ソースコードで乗数として使う場合の最小値。既定0。コード生成補正を上書きしない限り通常は無関係です。
max_decimals 最大小数桁。既定2。
good 正値を緑、負値を赤とする「良い」補正か。既定no。
neutral すべてを黄色表示する中立補正か。既定no。
hidden ツールチップから隠すと思われますが要検証。既定no。
no_diff 原文では機能不明。既定no。
cap_zero_to_one 原文では機能不明。既定no。
localize_with_value_key ローカライズキー内の$VALUE$へ数値を表示します。既定no。
category 補正を読み取るオブジェクトカテゴリで、特定オブジェクトへ適用するかの判定にも使われます。たとえばcheck_modifier_valueで値を取得する対象を表します。階層内で可能な限り低いものを指定します(帝国→惑星→POP)。候補はall、pop、ship、station、fleet、country、army、leader、planet、component、pop_faction(未使用のため非推奨)、deposit、megastructure、habitability、starbase、economic_unit、system、trade、federation、espionageです。
pop_job_trade_mult = {
    icon = mod_trade_value_mult
    percentage = yes
    good = yes
    category = pop
}

フラグ

フラグは存在するか否かだけを持つ真偽値で、リーダー、惑星、帝国(ファーストコンタクト)、艦隊、艦船、種族、POP(派閥)、連邦、銀河天体(環境オブジェクト)、巨大構造物、諜報作戦、グローバルの各スコープへ付与できます。

set_<scope>_flag = <flag_name>
set_timed_<scope>_flag = { flag = <flag_name> days = <int> }
remove_<scope>_flag = <flag_name>
has_<scope>_flag = <flag_name>

設定後の経過時間を検査するhad_<scope>_flag = { flag = <flag_name> days = <duration> }は原文時点で未実装です。補正もフラグに似ていますが、付与先の統計値を変える点が異なります。

動的フラグ

フラグ名へ@とスコープ(leader、country、title)を付けて動的な名前を作れます。これは実際のフラグ名だけを変え、検査方法は変えません。

from = { set_leader_flag = is_friend_of_@root }

対象リーダーIDが140なら、保存される名前はis_friend_of_140です。トリガーでもhas_leader_flag = is_friend_of_@fromと使えます。動的フラグはset_/remove_<scope>_flagとhas_<scope>_flagだけが対応し、create_leaderのflagsなど他の場所では静的名が必要です。イベントターゲットへ変数として保存したスコープも使えます。

スクリプト値

3.3でcommon/script_valuesへ導入されました。資料はcommon/script_values/00_script_values.txtです。スクリプトトリガーの数値版のように、要求時に一連の高度な計算を実行しキーの代わりに結果を返します。common/script_valuesへtxtを作り、value:example_valueの形式で参照します。頻繁に検査されるトリガーで使う場合は性能へ注意してください。

example_value = {
    base = 10
    add = 100
    multiply = value:some_other_script_value
    round = yes
    modifier = {
        max = owner.max_example_variable
        owner = { is_variable_set = max_example_variable }
    }
    complex_trigger_modifier = {
        trigger = count_owned_planet
        trigger_scope = owner
        parameters = { limit = { num_pops > 10 } }
        mode = add
        mult = 5
    }
}

baseの既定値は0です。使用可能な計算は次のとおりです。

  • 数値を取るもの: set/weight(現在値を置換)、add、subtract、factor/mult/multiply、divide、modulo、round_to、max、min、pow。
  • yesだけを取るもの: round、ceiling、floor、abs、square、square_root。
  • round_toは指定値の最も近い倍数へ丸めます(10.7にround_to = 5を適用すると10)。maxは現在値が指定値を超える場合にその値へ下げ、minは下回る場合にその値へ上げます。powは累乗で、オーバーフローに注意してください。
  • roundは最も近い整数への四捨五入、ceilingは切り上げ、floorは切り捨て、absは負なら-1を掛ける絶対値、squareは二乗、square_rootは平方根です。
  • weightとfactor以外はインラインでも使用できます。両者は基礎値を上書きするため、通常はset、mult、multiplyを使います。
  • modifier内へ置けば条件成立時だけ計算できます。
  • complex_trigger_modifierはブロック形式のトリガー結果を数値として取得します。trigger_scopeの既定はthis、parametersへ追加情報、modeへ演算、multへ結果の倍率を指定します。上例はPOPが10より多い所有惑星1つにつき5を加算します。

右辺に使用できる値の完全な一覧はevents/00_how_to_use_variablesを参照してください。スクリプト値もスクリプト効果・トリガーと同じメタスクリプトを使い、value:my_value|PARAM1|value1|PARAM2|value2|でパラメータを渡し、定義側の$PARAM1$をvalue1へ置換できます。

インラインスクリプト

3.5で導入され、資料はcommon/inline_scripts/00_README.txtです。1ファイルに書いたスクリプトブロックを、他のスクリプトへ直接書いたかのように挿入します。スクリプト効果やスクリプトトリガーとよく似ていますが、効果・トリガーに限らず、モジュール化や会話などにも使えます。コピー&ペーストを減らし、定義を1か所直すだけで全利用箇所へ反映できます。

common/inline_scriptsにtxtを作ります。1ファイルにつき1スクリプトだけで、ファイル名が参照名になります。サブフォルダで整理できます。

common/inline_scripts/edicts/upkeep_low.txt:

resources = {
    category = edicts
    upkeep = {
        unity = 10
        multiplier = value:edict_size_effect
    }
}

00_edicts.txtから次のように挿入します。

fortify_the_border = {
    length = @EdictPerpetual
    icon = "GFX_edict_type_policy"
    inline_script = "edicts/upkeep_low"
    modifier = {
        starbase_upgrade_speed_mult = 0.50
        country_starbase_capacity_add = 2
    }
}

パラメータ

common/inline_scripts/test_basic_policy.txt:

$KEY$ = {
    option = {
        name = "$KEY$_a"
        on_enabled = { add_modifier = { modifier = $MODIFIER_A$ days = 360 } }
    }
    option = {
        name = "$KEY$_b"
        on_enabled = { add_modifier = { modifier = $MODIFIER_B$ days = 360 } }
    }
}

common/policies/00_policies.txt:

inline_script = {
    script = test_basic_policy
    KEY = test_1
    MODIFIER_A = evermore_science
    MODIFIER_B = fumongus_authoritarian
}

パラメータは文字列なので、引用符で囲めば文全体や複数文も渡せます。

inline_script = {
    script = just_an_example
    MODIFIER = "num_tech_alternatives_add = 1 scientist_skill_levels = 2"
}

注意点

関連項目

原文の参考資料


出典: Stellaris Wiki — Dynamic modding(原文更新日: 2025年11月20日、版ID 111890)
翻訳日: 2026年9月18日 / 対応バージョン: 3.5
本ページは原文Wiki(CC BY-SA 3.0)の内容を翻訳した非公式ファン翻訳です。