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

星系のMOD制作

旧バージョンの資料

原文はゲームバージョン3.4向けです。現行版では生成キーや既定クラスが変わっている可能性があります。

本ページでは、恒星系の追加・変更方法を解説します。

ゲームマップと星系生成

Stellarisは、最初にmapファイルから銀河マップ上の恒星座標を作り、次にstar_classesから各座標の星系クラスを選び、最後にsystem initializerとplanet_classesから惑星・衛星・小惑星帯などを加えて星系を完成させると考えられます。

星系クラス

common/star_classesにあります。新規作成する場合はこのフォルダへtxtを追加します。

「恒星」と「星系クラス」は別物です。個々の恒星はコード上では惑星と同じ天体で、common/planet_classesに定義します。星系クラスは恒星系全体の分類で、照明、銀河マップのアイコン、恒星数を決めます。個々の恒星は惑星のMOD制作で扱います。

新しい星系クラスの追加

00_star_classesにある、A型星とパルサーの連星系例です。原文のコードコメントでは、パルサーを青色星が周回するX線連星系と説明されています。

sc_binary_1 = {
    class = a_star
    icon = e_binary_star
    planet = { key = pc_a_star class = a_star }
    planet = { key = pc_pulsar class = pulsar }
    spawn_odds = 5
    num_planets = { min = 4 max = 10 }
    pc_desert = { spawn_odds = 0 }
    pc_tropical = { spawn_odds = 0 }
    pc_arid = { spawn_odds = 0 }
    pc_continental = { spawn_odds = 0 }
    pc_ocean = { spawn_odds = 0 }
    pc_tundra = { spawn_odds = 0 }
    pc_arctic = { spawn_odds = 0 }
    pc_gaia = { spawn_odds = 0 }
    pc_alpine = { spawn_odds = 0 }
    pc_savannah = { spawn_odds = 0 }
    is_environmental_hazard = yes
    modifier = { ship_shield_reduction = 1.0 }
}
  • sc_binary_1 — コードから参照するクラスID。表示名はローカライズします。
  • class — 星系照明。既存のものを使うか、GFXで独自作成します。
  • icon — 銀河マップのアイコン。既定では恒星名に対応するものをgfx/map/star_classesから探しますが、ここで上書きできます。
  • icon_scale — 任意のアイコン倍率。1が既定、0.5が半分です。
  • planet — このクラスが標準で持つ恒星。単星系なら内側のclassは不要です。
  • spawn_odds — rl_standard_starsなどのランダムリストで選ばれる重み。リストへ入れないなら任意値または省略できます。
  • num_planets — 惑星数。通常は星系初期化子側の数が上書きしますが、初期化子がランダム範囲を使う場合はここを利用します。
  • 惑星クラスごとのspawn_odds — この星系で特定クラスが生成される重み。中性子星系など居住不適な星系では居住惑星を0にします。
  • is_environmental_hazard — 星系を危険地帯として扱います。modifierは星系内の艦船・ステーションへ強化または弱体化を適用します。

バニラの星系クラス

アイコン クラス 恒星構成 環境効果
B型星 sc_b B型星 —
A型星 sc_a A型星 —
F型星 sc_f F型星 —
G型星 sc_g G型星 —
K型星 sc_k K型星 —
M型星 sc_m M型星 —
M型赤色巨星 sc_m_giant M型赤色巨星 —
T型褐色矮星 sc_t T型褐色矮星 —
ブラックホール sc_black_hole ブラックホール 離脱確率低下+50%、緊急FTLクールダウン+50%
中性子星 sc_neutron_star 中性子星 亜光速速度低下+50%
パルサー sc_pulsar パルサー シールド無効化+100%
E型連星 sc_binary_1 A、パルサー シールド無効化+100%
E型連星 sc_binary_2 B、中性子星 亜光速速度低下+50%
C型連星 sc_binary_3 M型巨星、B —
C型連星 sc_binary_4 M型巨星、F —
A型連星 sc_binary_5 B、B —
D型連星 sc_binary_6 M、G —
D型連星 sc_binary_7 K、F —
D型連星 sc_binary_8 G、F —
A型連星 sc_binary_9 A、F —
A型連星 sc_binary_10 A、T —
三重星 sc_trinary_1 G、M、K —
三重星 sc_trinary_2 B、A、F —
三重星 sc_trinary_3 K、F、G —
三重星 sc_trinary_4 B、K、T —

星系初期化子

common/solar_system_initializersにあります。新規作成する場合はこのフォルダへtxtを追加します。追加情報はフォルダ内のexample.txtも参照してください。

単星系

単星系は恒星1つと惑星・衛星から成る、最も一般的な星系です。

@base_moon_distance = 10
my_system_initializer = {
    name = "My System"
    class = "rl_standard_stars"
    asteroid_belt = { type = rocky_asteroid_belt radius = 70 }
    planet = {
        class = star
        size = { min = 25 max = 30 }
        orbit_distance = 0
        orbit_angle = 1
    }
    change_orbit = 10
    planet = {
        class = pc_arid
        orbit_distance = 30
        orbit_angle = { min = 90 max = 270 }
        init_effect = {
            prevent_anomaly = yes
            generate_primitives_on_planet = yes
        }
        change_orbit = @base_moon_distance
        moon = {
            count = { min = 0 max = 1 }
            class = pc_molten
            orbit_distance = 5
            orbit_angle = { min = 90 max = 270 }
        }
    }
    change_orbit = 30
    planet = {
        count = { min = 1 max = 4 }
        class = pc_asteroid
        orbit_distance = 0
        orbit_angle = { min = 90 max = 270 }
    }
    planet = {
        count = { min = 3 max = 6 }
        orbit_distance = 20
        orbit_angle = { min = 90 max = 270 }
        change_orbit = @base_moon_distance
        moon = {
            count = { min = 0 max = 1 }
            orbit_distance = 5
            orbit_angle = { min = 90 max = 270 }
        }
    }
    neighbor_system = {
        trigger = { num_guaranteed_colonies >= 1 }
        distance = { min = 10 max = @distance }
        initializer = "sol_neighbor_t1_first_colony"
    }
}

初期化子全体

  • @base_moon_distance — ファイル内変数。必須ではありませんが、衛星軌道距離を一括調整できます。バニラは通常10です。
  • my_system_initializer — コード上のID。星系表示名は直下のnameへ直接書くためローカライズ不要です。
  • class — 星系クラス。sc_bなどの固定クラス、または各星系クラスのspawn_oddsで選ぶrl_standard_starsなどのランダムリストを指定します。
  • asteroid_belt — 星系中心から指定半径に小惑星帯を追加します(恒星からとは限りません)。種類はcommon/00_asteroid_beltsを参照し、通常はrockyまたはicyを使います。独自追加も可能です。

恒星

  • class = star — 星系クラスと一致する恒星クラスを使います。固定のpc_b_starも指定できますが、照明や複星系の命名に問題が出る場合があります。理由がなければstarを推奨します。
  • size — 見た目の大きさ。恒星には20~35を推奨し、小さすぎると不自然、大きすぎると通過艦船を覆います。
  • orbit_distance — 直前の要素からの距離。直前がなければ星系中心からの距離。中央恒星は0にします。
  • orbit_angle — 直前の惑星からの相対角。たとえば直前の角度が30でorbit_angle = 20なら、絶対角は50になります。中央恒星では任意で、バニラは多くが1です。

惑星

change_orbitは、星系スコープでは惑星間、惑星スコープでは惑星と最初の衛星の間隔を増やします。例の乾燥惑星は前のchange_orbit = 10とorbit_distance = 30を合計し、恒星から40離れます。orbit_angleは直前要素から90~270度の範囲でランダムです。

init_effectは生成時に惑星へ効果・スクリプト効果を実行します。星系全体へ適用したい場合は星系スコープでも使えます。prevent_anomalyはアノマリー生成を禁止し、generate_primitives_on_planetは前FTL種族を生成します。

乾燥型惑星

衛星

例では@base_moon_distanceの10とorbit_distance = 5で合計15離れます。countは0~1個をランダム生成し、必要なら任意の範囲にできます。ガス惑星以外でバニラが2個以上の衛星を持つ例はまれです。

溶融惑星

小惑星帯と残りの惑星

change_orbitを調整し、小惑星帯のradius = 70と合う位置へ進めます。小惑星は帯と同じ軌道に置くためorbit_distance = 0にします。同じ軌道で重なる可能性があるため、必要なら個別の角度を指定します。氷小惑星帯ではpc_ice_asteroid、結晶ではpc_crystal_asteroidまたはpc_rare_crystal_asteroidを使います。

後続惑星でclassを省略すると、common/star_classesの条件に基づいてゲームがクラスを選びます。例では3~6惑星、それぞれ0~1衛星です。

neighbor_systemは、指定条件のもとで一定距離内へ特定の別星系を生成します。

連星系と三重星系

実際の複星系は複雑ですが、大別してP型とS型があります。

P型

周連星惑星が全恒星の共通重心を周回します。シリウスやStar Warsのタトゥイーンが例です。Stellarisでは最も簡単な複星系です。

planet = {
    class = star
    size = { min = 30 max = 35 }
    orbit_distance = 15
    orbit_angle = { min = 90 max = 270 }
}
planet = {
    class = star
    size = { min = 25 max = 30 }
    orbit_distance = 10
    orbit_angle = 180
}

通常どおり惑星を続け、星系クラスをrl_binary_stars、rl_trinary_stars、または固定複星クラスへ変えます。

  • 全恒星をclass = starにすれば、sc_binary_1なら第1恒星がA型、第2がパルサーというようにクラス構成に従います。
  • 三重星なら同様に第3恒星を加え、第2の角度を145、第3を角度70・距離0・最大サイズ25にします。
  • 距離、角度、サイズは自由です。上記は原文執筆者が見栄えのよい値として挙げたものです。

S型

各恒星が独自の惑星系を持ちます。ハイパードライブなしで移動できるほど近接した2~3個の単星系と考えられます。エリダヌス座40番星やStar Trekのヴァルカンが例です。

比較のため、単星系の基本構造を再掲します。恒星と惑星は同じ階層に並びます。

planet = {
    class = star
    size = { min = 25 max = 30 }
    orbit_distance = 0
    orbit_angle = 1
}
planet = {
    count = { min = 3 max = 6 }
    orbit_distance = 20
    orbit_angle = { min = 90 max = 270 }
    change_orbit = @base_moon_distance
    moon = {
        count = { min = 0 max = 1 }
        orbit_distance = 5
        orbit_angle = { min = 90 max = 270 }
    }
}

単星系と違い、惑星を星系スコープではなく所属恒星のスコープ内へ置き、正しい軌道線と名前を得ます。satellite_naming_policy = upper_case_roman_numeralsは恒星の惑星を大文字ローマ数字、lower_case_latin_lettersは惑星の衛星を小文字ラテン文字で命名します。

planet = {
    class = star
    size = { min = 25 max = 30 }
    orbit_distance = 0
    orbit_angle = 1
    satellite_naming_policy = upper_case_roman_numerals
    planet = {
        count = { min = 3 max = 6 }
        orbit_distance = 20
        orbit_angle = { min = 90 max = 270 }
        satellite_naming_policy = lower_case_latin_letters
        change_orbit = @base_moon_distance
        moon = {
            count = { min = 0 max = 1 }
            orbit_distance = 5
            orbit_angle = { min = 90 max = 270 }
        }
    }
}

完全なS型三重星では上のブロックを3つ並べます。恒星Aは最大6惑星・距離20で最大幅120、恒星Bは最大5惑星で最大幅100なので、両星間を230(120+100+余白10)にします。恒星CはAからBと同じ230離し、別角度へ置けます。さらに離しても構いませんが、バニラは同距離を使い、巨大すぎる星系は亜光速横断に時間がかかります。

# 恒星A: 最大6惑星
planet = {
    class = star size = { min = 30 max = 35 }
    orbit_distance = 0 orbit_angle = 1
    satellite_naming_policy = upper_case_roman_numerals
    planet = {
        count = { min = 3 max = 6 } orbit_distance = 20
        orbit_angle = { min = 90 max = 270 }
        satellite_naming_policy = lower_case_latin_letters
        change_orbit = @base_moon_distance
        moon = { count = { min = 0 max = 1 } orbit_distance = 5 orbit_angle = { min = 90 max = 270 } }
    }
}
# 恒星B: 最大5惑星
planet = {
    class = star size = { min = 25 max = 30 }
    orbit_distance = 230 orbit_angle = { min = 90 max = 270 }
    satellite_naming_policy = upper_case_roman_numerals
    planet = {
        count = { min = 3 max = 5 } orbit_distance = 20
        orbit_angle = { min = 90 max = 270 }
        satellite_naming_policy = lower_case_latin_letters
        change_orbit = @base_moon_distance
        moon = { count = { min = 0 max = 1 } orbit_distance = 5 orbit_angle = { min = 90 max = 270 } }
    }
}
# 恒星C: 最大4惑星
planet = {
    class = star size = { min = 20 max = 25 }
    orbit_distance = 0 orbit_angle = { min = 90 max = 270 }
    satellite_naming_policy = upper_case_roman_numerals
    planet = {
        count = { min = 2 max = 4 } orbit_distance = 20
        orbit_angle = { min = 90 max = 270 }
        satellite_naming_policy = lower_case_latin_letters
        change_orbit = @base_moon_distance
        moon = { count = { min = 0 max = 1 } orbit_distance = 5 orbit_angle = { min = 90 max = 270 } }
    }
}

利用方法

以下は、ゲームがどの星系を生成するかを指定する設定で、星系スコープへ記述します。

  • usage = misc_system_init — usage_oddsに基づき銀河のどこかへランダム生成します。銀河内位置に応じた補正も使え、max_instancesで最大数を制限できます。
usage = misc_system_init
usage_odds = {
    base = 2000000
    modifier = { factor = 0 is_bottleneck_system = yes }
}
max_instances = 1
  • usage = empire_init — プレイヤーまたはAIが帝国作成画面で「ランダム」を選んだときの母星系です。母星には次を指定します。
planet = {
    home_planet = yes
    init_effect = {
        generate_empire_home_planet = yes
        prevent_anomaly = yes
    }
}
  • usage = custom_empire — SolやDenebのように、帝国作成画面から選ぶプリセット帝国の母星系です。名称と説明をローカライズします。
  • usageを省略するかusage_odds = 0なら、イベントなど外部から明示的に呼ばない限り生成されません。

一般的な助言

  • 単星系ではclass = pc_b_starでも大抵動きますが、複星系の恒星・惑星名で問題が出ます。星系クラスと無関係に恒星クラスを固定するなら、class = starとし、直下へinit_effect = { change_pc = pc_b_star }を置きます。
  • 惑星へ直接name = "Joe"と書くと、次の惑星番号がずれる場合があります。init_effect = { set_name = "Joe" }を使います。
  • 星系内の惑星・艦船などは、恒星位置にかかわらず常に星系中心から照らされます。原文執筆時点では修正待ちです。
  • 小惑星とリングワールド区画は通常軌道線を表示しませんが、S型複星系など恒星スコープ内へ置くと線が出て煩雑になります。可能なら星系スコープへ置きます。
  • リングワールドの各区画は、周回する恒星ではなく常に星系中心を向きます。
  • orbit_distanceの既定値は0ではありません。同じ軌道距離へ置く場合は必ずorbit_distance = 0を明記します。省略すると未知の範囲でランダム化されます。

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