0. 事前準備
必要なもの
・銀河生成の元となる画像ファイル (縦横それぞれ最大1000pxまで)
著作権には気をつけてください
・画像ファイルの加工ツール。白黒二階調化できるものが必要です
自分はpaint.netを使っているのでpaint.netで
https://www.getpaint.net/
二階調化プラグイン
http://paintnet.web.fc2.com/plugin/dpy/nikaityouka.htm
・画像ファイルを元に銀河地図を生成してくれるツール
Retalyx's Galaxy Generator
https://steamcommunity.com/app/281990/discussions/0/357286663685698126/
・普段のMod製作に必要なもの
テキストエディタとかファイラーとか
1. 画像を加工する
後々変換で使う画像を銀河地図に変換するツール(Retalyx's Galaxy Generator)は
黒色の部分を星系に変換するので、画像を二階調化して白黒2色にしましょう
paint.netなら、[調整]-[二階調化]を押して適当に数字を弄ればOKです
何故かpaint.netでこの加工をした画像はRetalyx's Galaxy Generatorで読み込むときに
反転されて読み込まれてしまうので、事前に以下の操作で反転処理も必要になります
・[画像]-[水平方向に反転]
・[画像]-[垂直方向に反転]
作り終わったらpngで保存してください
2. Retalyx's Galaxy Generatorで銀河を生成する
1.
Retalyx's Galaxy GeneratorのStellarisGalaxyGenerator.exeと同じフォルダに
先ほど作ったpngファイルを配置します
名前はgalaxy.pngにしてください
2.
StellarisGalaxyGenerator.exeを起動してください
3.
色々書いてあるけど、画面左側の項目を変更します
とりあえず最低限変えないといけない項目は以下の通りです
・Galaxy Name: 好きな名前にする
・Import from file: チェックを入れる
・Scale:読み込ませたいpngの縦横サイズ x この値が最終的な縦横サイズになる。計算結果がを越えないようにしましょう
4.
Generate From PNGボタンを押す
AOI Chaaaaaan!!
ちなみに生成された銀河の表示エリアは、
マウスホイールで拡大縮小、矢印キー入力で上下左右に移動して確認ができます
5.
System Countという数が生成された星系の数になります
多すぎるようであればReducerを弄ってもう一度Generate From PNGを押せば数が減るので、調整してみてください
6.
これだけだとまだ保存ができないので、適当に帝国のスポーン場所を指定します
個人的には後で手動で直す方が都合が良かったので、あんまり考えずにやってます
右にあるSpawnボタンを押すと、Genarate 1 Spawnという機能が出てくるのでこれを2回押してください
具体的な場所を指定したい場合は、生成された星系をクリックすると手動選択も可能です
この作業で保存ができるようになります
※このガイド書いている時は2つだけ生成したけど、必要な場所に必要な数だけ生成した方が結果的には楽でした。参考まで
7.
Save Modを押すと、StellarisGalaxyGenerator.exeのあるフォルダの下にある、「GeneratedMods」フォルダにModが生成されます
ただこのファイルはStellarisの対応バージョンが1.2の頃のものっぽいのでそのままは使えません
map\setup_scenarios以下に保存されているデータのみを流用します
備考
なお、ハイパーレーンも固定で決めたい場合は、右にあるHyperlaneボタンでHyperlane Toolモードに切り替えると指定できるようになります。
「Generation Radius」の値を20ぐらいにして、「Radius Genarate Hyperlane」ボタンを押すと画像と同じような形で良い感じにハイパーレーンを引いてくれるので楽です
同じように、「Create Nebula」で星雲も指定できます。
葵ちゃんのおめめとか、水玉模様の表現とかを星雲で良い感じにできるので便利。
3. MOD作成用のフォルダを生成する
MOD作成用フォルダの準備については、ポートレート用のガイドとまったく同じため割愛します
以下ガイドの「1. MOD作成用のフォルダを生成する」を参照してください
https://steamcommunity.com/sharedfiles/filedetails/?id=2766755737
フォルダが生成できたら、2で作成したmapフォルダ以下をコピーしてください
以下のような構成になるはずです
C:\Users\(ユーザー名)\Documents\Paradox Interactive\Stellaris\mod\(MODのディレクトリ名)
└map
└setup_scenarios
└xxxx.txt
4. Setup_scenariosの内容を修正する
ツールで生成したsetup_scenariosの記述内容がやや古いので、修正します
ここから、ここまでとコメントの記載がある部分を丸々コピペし、数字を適切なものに直してください
「system = ... 」と記述が始まるところからは、一旦ツールで生成されたものをそのまま使い回します
#Made with Retalyx Static Galaxy Generator v0.9 static_galaxy_scenario = { ##################### # ここから ##################### name = "galaxy_aoi" priority = 5 supports_shape = elliptical # サポートしている銀河の形状 num_empire_default = 15 # デフォルトのAI帝国数 num_empires = { min = 10 max = 30 } # 変更可能なAI帝国数 advanced_empire_default = 4 # 発展した開始状態のAI fallen_empire_default = 4 # 没落した帝国のデフォルト数 fallen_empire_max = 5 # 没落した帝国の最大数 marauder_empire_default = 3 # マローダー帝国のデフォルト数 marauder_empire_max = 3 # マローダー帝国の最大数 colonizable_planet_odds = 1.0 # 居住可能な惑星の倍率 primitive_odds = 1.0 # 前FTL文明と準知的生命体の倍率 crisis_strength = 1.5 # 危機のレベル extra_crisis_strength = { 10 15 20 25} # 危機のレベル random_hyperlanes = yes # ハイパーレーン:ランダム配置 num_hyperlanes = { min=0.5 max= 3 } # ハイパーレーン密度の範囲 num_hyperlanes_default = 1 # ハイパーレーン密度のデフォルト数 num_gateways = { min = 0 max = 10 } # 放棄されたゲートウェイの範囲 num_gateways_default = 1 # 放棄されたゲートウェイのデフォルト数 num_wormhole_pairs = { min = 0 max = 10 } # ワームホールの範囲 num_wormhole_pairs_default = 1 # ワームホールのデフォルト数 core_radius = 0 # 恐らく銀河のコアのサイズ ##################### # ここまで ##################### system = { id = "0" ...(以下略)
5. 帝国のスポーン場所を指定する1
4章の状態でもとりあえず銀河の生成はできます
ただ、帝国の生成場所をもっと作れなどと
エラーログが出てくるのでスポーン場所を増やす必要があります
Stellaris本体を起動し、銀河を生成したら以下のコンソールコマンドを入力しましょう
communications intel debugtooltip
上から順に、全ての帝国と交信完了済、全ての星系の情報レベルを高にする、デバッグツールチップを表示するというコマンドになっています
この状態で星系にカーソルを合わせると、IDという項目が表示されますが、
これがsetup_scenariosフォルダ内のテキストに記載されたIDと紐付いた値になります
帝国を生成させたい星系のIDをメモしましょう
全てのメモが終わったら、対象のIDの記述に帝国生成用の記述を付け足します
# この記述を # system = { # id = "22" # position = { x = -298 y = 128 } # } # ↓ こんな感じに書き換える system = { id = "22" position = { x = -298 y = 128 } initializer = xxxxxxxxxxxxxxxxxxxx spawn_weight = { base = 1 } } # spawn_weightが一番大きな値の場所が、基本的にはプレイヤー帝国の生成位置になる # spawn_weightが同じ場合は、先に書いた方が優先される # AI帝国を銀河にある程度均等に散りばめたい場合は、 # 1~10番目の帝国のspawn_weightの値を6に # 11~15番目は5に # 16~20番目は4に # ... # とやると、出現位置をある程度制御できるかもしれない # あと起源によってはセットで別のAI帝国も出てくるので、 # 指定できるAI帝国数より4~5個ぐらい多めに配置した方がいいかも
xxxxxxxxxxxxxxxxxxxxの部分は一旦好きな名前にしてください
私の場合はgalaxy_aoi_empire_initにしました
ちなみに「initializer = xxxxxxxxxxxxxxxxxxxx」の部分の記述を省略すると
通常プレイでは意図しない色々な星系から開始できますが
ガチャプレイになりすぎるので危険です
自国内に入植可能な惑星が3つぐらいある場合もあれば
宇宙生物のいる星系から始まってゲーム開始と共に基地や艦隊が全滅なんてケースもあります
あと機械知性の国家は開始惑星の設定が上手くできないため
下手をすると不毛な惑星が母星の状態で開始され詰みゲーになることもあるようです
6. 帝国のスポーン場所を指定する2
先ほどのxxxxxxxxxxxxxxxxxxxxに紐付く銀河生成用の定義を作ります
C:\Users\(ユーザー名)\Documents\Paradox Interactive\Stellaris\mod\(MODのディレクトリ名)
└common
└solar_system_initializers
└(mod名)_initializers.txt ← これを作る
これは既存の帝国用のsolar_system_initializersの定義をランダムに選んで適用するようにしています
random_list = { name = galaxy_aoi_empire_init random_empire_init_01 = 1 random_empire_init_02 = 1 random_empire_init_03 = 1 random_empire_init_04 = 1 random_empire_init_05 = 1 random_empire_init_06 = 1 custom_starting_init_01 = 1 custom_starting_init_02 = 1 custom_starting_init_03 = 1 custom_starting_init_04 = 1 custom_starting_init_05 = 1 custom_starting_init_06 = 1 }
7. 各帝国の母星の設定を無理やり書き換える
6章までの手順を実施しても、帝国の居住性にあった惑星が母星になってくれないので
イベントで無理やり書き換えます
game_start.12より前に処理を発生させたいので、
game_start.12が呼ばれる直前のon_actionsイベントである、
empire_init_add_technologiesに処理を追加します。
C:\Users\(ユーザー名)\Documents\Paradox Interactive\Stellaris\mod\(MODのディレクトリ名)
└common
└on_actions
└(mod名)_on_actions.txt ← これを作る
# root: country empire_init_add_technologies = { events = { static_game_start.1 } }
C:\Users\(ユーザー名)\Documents\Paradox Interactive\Stellaris\mod\(MODのディレクトリ名)
└events
└(mod名)_events.txt ← これを作る
namespace = static_game_start ########################################################### # 生成した国家の母星の種類を、起源や種族の設定に則ったものに変更する # root: country ########################################################### country_event = { id = static_game_start.1 hide_window = yes is_triggered_only = yes trigger = { galaxy_size = galaxy_aoi is_country_type = default } immediate = { ### # 母星をゲーム開始時の設定に沿った惑星に変更する # 変更対象の条件は、以下のファイルでtarting_colonyが定義されているもの # ・common\governments\civics\00_origins.txt ### switch = { trigger = has_origin origin_life_seeded = { home_planet = { change_pc = pc_gaia } } # 生命の播種 origin_post_apocalyptic = { home_planet = { change_pc = pc_nuked } } # ポスト・アポカリプス origin_remnants = { home_planet = { change_pc = pc_relic } } # 残党 origin_shattered_ring = {} # 砕けたリング(initializersで惑星が固定されるのでなにもしない) origin_void_dwellers = {} # 宇宙生まれ(initializersで惑星が固定されるのでなにもしない) origin_machine = { home_planet = { change_pc = pc_machine } } # 資源統合 origin_ocean_paradise = { home_planet = { change_pc = pc_ocean } } # 海の楽園 default = { ### # 起源で判別できない場合は創始種族の居住適正に則った惑星に変更する ### if = { # 機械知性の場合は正しいタイプを判定できないので、ランダムに変更する limit = { has_authority = auth_machine_intelligence } random_list = { 1 = { home_planet = { change_pc = pc_desert } } # 砂漠型惑星 1 = { home_planet = { change_pc = pc_arid } } # 乾燥型惑星 1 = { home_planet = { change_pc = pc_savannah } } # サバンナ型惑星 1 = { home_planet = { change_pc = pc_arctic } } # 極寒型惑星 1 = { home_planet = { change_pc = pc_tundra } } # ツンドラ型惑星 1 = { home_planet = { change_pc = pc_alpine } } # 高山型惑星 1 = { home_planet = { change_pc = pc_continental } } # 大陸型惑星 1 = { home_planet = { change_pc = pc_tropical } } # 熱帯型惑星 1 = { home_planet = { change_pc = pc_ocean } } # 海洋型惑星 } } else = { home_planet = { change_pc = owner.species } # 母星を創始種族の居住適正に則った惑星に変更する } } } } }
8. 中立機構やリヴァイアサンなど
自動生成に任せてもちゃんと出てきますが、上から書いた順に素直に採用されていくっぽいので、出現場所が偏ります
今回例で出した葵ちゃん銀河でいうと、ほぼ全ての中立機構が銀河右下に集まる感じになる
良い感じに偏りを出したい場合は、自分でinitilizerの指定をして上げる必要があります
中立機構のinitilizerは以下の通り
工匠中立機構
・guardians_artist_init_01
・guardians_artist_init_02
・guardians_artist_init_03
学術中立機構
・guardians_curator_init_01
・guardians_curator_init_02
・guardians_curator_init_03
交易中立機構
・guardians_trader_init_01
・guardians_trader_init_02
・guardians_trader_init_03
キャラバン
・megacorp_caravaneer_init
回収者中立機構
・salvager_enclave_init_01
・salvager_enclave_init_02
・salvager_enclave_init_03
シュラウドウォーカー中立機構
・shroudwalker_enclave_init_01
・shroudwalker_enclave_init_02
・shroudwalker_enclave_init_03
でもこれ、毎回書くの辛いし、今後のバージョンで新しく増える度に調べたくないですよね
ということで別の対応をします。銀河の生成処理の方を適当なツールでシャッフルします。
# この記述をシャッフルして system = { id = "0" position = { x = -323 y = 213 } } system = { id = "1" position = { x = -322 y = 200 } } system = { id = "2" position = { x = -322 y = 225 } } ... system = { id = "1377" position = { x = 374 y = -134 } } system = { id = "1378" position = { x = 376 y = -122 } } # ↓こんな感じにする system = { id = "1172" position = { x = 239 y = -214 } } system = { id = "961" position = { x = 161 y = -366 } } system = { id = "1359" position = { x = 348 y = 16 } } system = { id = "1021" position = { x = 184 y = -398 } } system = { id = "496" position = { x = -35 y = 289 } } system = { id = "433" position = { x = -59 y = 130 } }
これで自動生成に任せてもバラバラな場所に出るようになるはずです
ただしマローダーの定義順が変わってしまうので注意してください
9. 発展した開始状態のAI
それらしいinitilizerを指定しても出てこなかったので謎でしたが、
そもそも発展した開始状態のAI用のon_actionsイベントである、
以下のイベントを通らないようでした。
・on_initialize_advanced_colony
・on_become_advanced_empire
直前のイベントとして、empire_init_capital_planetというon_actionsイベントがあるので、
メンテが大変なのであまりやりたくなかったのですが、
このイベントの中で、無理やりon_initialize_advanced_colony及び、
on_become_advanced_empireのイベントを呼び出すようにして上げることで対応できました。
7章で作った「(mod名)_on_actions.txt」と、「(mod名)_events.txt」にそれぞれ以下のコードを追加します。
# (mod名)_on_actions.txt追加コード # root: planet # from: founder species # fromfrom: secondary species (if exists) empire_init_capital_planet = { events = { static_game_start.2 } } # (mod名)_events.txt追加コード ############################################################## # 静的銀河では、銀河生成時に発展した開始状態のAI用の処理がなされないため # on_initialize_advanced_colonyやon_become_advanced_empireの処理も呼び出されない # # 擬似的に発展した開始状態のAIを実現するために、隣接星系に基地、コロニーを建造し、 # on_initialize_advanced_colonyやon_become_advanced_empireで呼ばれるイベントを開始する # root: capital planet # from: founder species ############################################################## planet_event = { id = static_game_start.2 hide_window = yes is_triggered_only = yes trigger = { galaxy_size = galaxy_aoi owner = { is_ai = yes is_country_type = default } } immediate = { owner = { # 処理済みの発展した開始状態のAI数を取得する export_trigger_value_to_variable = { trigger = count_playable_country parameters = { limit = { has_country_flag = is_advanced_start_AI } } variable = settings_advanced_empires } #### # 処理済みの開始状態のAI数がまだ足りない場合は、開始状態のAI用の処理を実施する # なお、数に関わらず以下定義のmust_be_advanced_empireに記載されているものは必ず処理すること # ・common\game_rules\00_rules.txt # また、以下定義のadvanced_start = noのものは除外すること # ・common\governments\civics\00_origins.txt #### if = { limit = { is_ai = yes OR = { check_galaxy_setup_value = { setting = num_advanced_empires value > settings_advanced_empires } has_country_flag = lost_colony_parent has_country_flag = MSI } NOR = { has_origin = origin_clone_army has_origin = origin_payback } } root = { # 首都に関するon_initialize_advanced_colonyイベント planet_event = { id = game_start.20 scopes = { from = root.owner } } planet_event = { id = game_start.21 scopes = { from = root.owner } } planet_event = { id = game_start.22 scopes = { from = root.owner } } planet_event = { id = game_start.23 scopes = { from = root.owner } } solar_system = { # コロニーの建てられない星系は前哨地を建てる every_neighbor_system = { limit = { has_owner = no not = { any_system_planet = { is_colonizable = yes } } not = { any_ship_in_system = { exists = owner owner = { is_hostile = root.owner } } } } create_starbase = { owner = root.owner size = starbase_outpost } } # コロニーの建てられる星系は星系港を建て、コロニーを作成する every_neighbor_system = { limit = { has_owner = no any_system_planet = { is_colonizable = yes } not = { any_ship_in_system = { exists = owner owner = { is_hostile = root.owner } } } } create_starbase = { owner = root.owner size = starbase_starport } every_system_planet = { limit = { is_colonizable = yes } create_colony = { owner = root.owner species = root.owner } # 首都以外のon_initialize_advanced_colonyイベント planet_event = { id = game_start.20 scopes = { from = root.owner } } planet_event = { id = game_start.21 scopes = { from = root.owner } } planet_event = { id = game_start.22 scopes = { from = root.owner } } planet_event = { id = game_start.23 scopes = { from = root.owner } } } } } } # on_become_advanced_empireイベント country_event = { id = game_start.6 } } } } }
10. 没落帝国1
例外的に、サイオン起源が登場したとき以外では生成されません
無理やりinitilizerをしてしても、エラーコードを吐くだけです
メンテナンス性が悪くなりますが、力技でいいのであれば、サイオン起源のコードを参考に自力で後出しで没落帝国を出現させることはできるようです。
コード量が多すぎるので一部コードのみを抜粋して端折って書きます。
まず、以下2つの定義ファイルにあるfallen_1とscion_fallen_1の定義を見比べます
・common\solar_system_initializers\fallen_empire_initializers.txt
・common\solar_system_initializers\federations_initializers.txt
scion_fallen_1の方が、コードで後出ししているサイオン起源のコードです
これを参考に、Mod用の自前のinitializersを全ての没落の分だけ作成します。
C:\Users\(ユーザー名)\Documents\Paradox Interactive\Stellaris\mod\(MODのディレクトリ名)
└common
└solar_system_initializers
└(mod名)_initializers.txt ← これを作る
### # 静的銀河では没落帝国用の生成機能が働かないので # 専用のinitializerを用意して銀河生成後に後から作らせるようにする # # 基本的には以下のファイルと同じ # common\solar_system_initializers\fallen_empire_initializers.txt # # 変更点 # ・usage_odds = 0 # ・rootスコープを全て没落帝国のグローバルスコープと置き換える # ・common\fallen_empires\00_fallen_empire.txtのcreate_country_effectを直接呼ぶ # ・基地はcreate_fe_home_citadelやcreate_fe_outpostではなく、 # 書き直したstatic_create_fe_home_citadelやstatic_create_fe_outpostを記載する # ・neighbor_systemは動作しないので消去 ### @base_moon_distance = 10 # Home System I static_fallen_1 = { usage = fallen_empire_init class = "rl_standard_stars" usage_odds = 0 # Mod追加コード asteroid_belt = { type = rocky_asteroid_belt radius = 50 } planet = { count = 1 class = star orbit_distance = 0 orbit_angle = 1 size = { min = 20 max = 30 } has_ring = no } change_orbit = 50 planet = { count = { min = 1 max = 3 } class = pc_asteroid orbit_distance = 0 orbit_angle = { min = 40 max = 100 } } planet = { name = "NAME_Great_Nexus" orbit_distance = 15 class = pc_city orbit_angle = { min = 90 max = 270 } size = 20 deposit_blockers = none modifiers = none has_ring = no change_orbit = @base_moon_distance moon = { count = { min = 1 max = 1 } name = "NAME_Wanderer" class = pc_barren size = 8 orbit_angle = { min = 90 max = 270 } orbit_distance = 5 } init_effect = { ### # ここからMod追加コード # 以下のファイルのcreate_country_effectの部分を拝借 # common\fallen_empires\00_fallen_empire.txt ### create_species = { name = random class = random_non_machine portrait = random traits = random extra_trait_points = 3 allow_negative_traits = no } create_country = { name = random type = fallen_empire ignore_initial_colony_error = yes authority = auth_imperial civics = { civic = civic_lethargic_leadership civic = civic_empire_in_decline } species = last_created_species ethos = { ethic = ethic_fanatic_materialist } flag = random origin = "origin_fallen_empire" effect = { save_global_event_target_as = fallen_empire_1 set_country_flag = fallen_empire_1 add_resource = { minerals = 10000 energy = 10000 food = 1000 influence = 500 } # must initialize global designs here add_global_ship_design = "NAME_Enforcer" add_global_ship_design = "NAME_Savant" add_global_ship_design = "NAME_Scholar" add_global_ship_design = "NAME_Sage" add_global_ship_design = "NAME_Cloaker" add_global_ship_design = "NAME_Librarian" add_global_ship_design = "NAME_Seeker" add_global_ship_design = "NAME_FE_Starbase" } } ### # ここまでMod追加コード ### create_cluster = { id = fe1_cluster radius = 120 center = this.solar_system } set_planet_flag = fallen_empire_world prevent_anomaly = yes set_owner = event_target:fallen_empire_1 # Mod変更箇所 set_controller = event_target:fallen_empire_1 # Mod変更箇所 set_capital = yes add_building = building_ancient_palace add_building = building_fe_stronghold add_building = building_fe_stronghold add_building = building_affluence_center add_building = building_affluence_center add_building = building_nourishment_center add_building = building_nourishment_center add_building = building_class_4_singularity add_building = building_dimensional_fabricator add_building = building_dimensional_fabricator add_building = building_nano_forge add_building = building_nano_forge while = { count = 20 add_district = district_arcology_housing } while = { count = 94 create_pop = { species = owner_main_species } } event_target:fallen_empire_1 = { # Mod変更箇所 set_policy = { policy = artificial_intelligence_policy option = ai_servitude cooldown = no } set_policy = { policy = robot_pop_policy option = robot_pops_allowed cooldown = no } } event_target:fallen_empire_1 = { create_fe_servant_robots = yes } # Mod変更箇所 last_created_species = { save_event_target_as = fe_servants } while = { count = 94 create_pop = { species = event_target:fe_servants } } create_fallen_empire_starting_navy = yes while = { count = 20 create_army = { name = random owner = event_target:fallen_empire_1 # Mod変更箇所 species = event_target:fallen_empire_1 # Mod変更箇所 type = "robotic_army" } } } } planet = { count = { min = 1 max = 1 } orbit_distance = 25 class = pc_gas_giant orbit_angle = { min = 90 max = 270 } change_orbit = @base_moon_distance moon = { count = { min = 1 max = 3 } class = random_non_colonizable orbit_angle = { min = 90 max = 270 } orbit_distance = 10 } } planet = { count = { min = 1 max = 1 } orbit_distance = 35 class = pc_gas_giant orbit_angle = { min = 90 max = 270 } change_orbit = @base_moon_distance moon = { count = { min = 0 max = 2 } class = random_non_colonizable orbit_angle = { min = 90 max = 270 } orbit_distance = 10 } } init_effect = { static_create_fe_home_citadel = { COUNTRY = event_target:fallen_empire_1 } # Mod修正箇所 } } # 以下省略 # この調子で全てのcommon\solar_system_initializers\fallen_empire_initializers.txtの処理を書き直してください
11. 没落帝国2
先ほど書いたコードのうち、シタデルなどの生成コードは
common\scripted_effects\fallen_empire_scripted_effects.txtに記述されていますが
この処理の中でrootを指定いる処理については後出しで呼び出す処理の場合には動作しないので
改めてこれも作り直しになります
rootを全部$COUNTRY$に置き換えて、
initilizer側で$COUNTRY$に入れるものを指定する形にしています
C:\Users\(ユーザー名)\Documents\Paradox Interactive\Stellaris\mod\(MODのディレクトリ名)
└common
└scripted_effects
└(mod名)_scripted_effects.txt ← これを作る
# 没落帝国用のシタデルを生成する static_create_fe_home_citadel = { create_starbase = { size = "starbase_citadel" owner = $COUNTRY$ module = "shipyard" module = "shipyard" module = "shipyard" module = "hangar_bay" module = "gun_battery" module = "gun_battery" building = "target_uplink_computer" building = "defense_grid" building = "colossus_yards" building = "titan_yards" effect = { while = { count = 10 create_fallen_empire_platform = yes } } } } # 没落帝国用のシタデルを生成する static_create_fe_citadel = { create_starbase = { size = "starbase_citadel" owner = $COUNTRY$ module = "shipyard" module = "anchorage" module = "anchorage" module = "hangar_bay" module = "gun_battery" module = "gun_battery" building = "crew_quarters" building = "command_center" building = "target_uplink_computer" building = "dark_matter_listening_post" effect = { while = { count = 4 create_fallen_empire_platform = yes } } } } # 没落帝国用の前哨地を生成する static_create_fe_outpost = { create_starbase = { size = "starbase_outpost" owner = $COUNTRY$ effect = { while = { count = 2 create_fallen_empire_platform = yes } } } } # 没落帝国の首都と隣接する各星系を作成する static_spawn_fallen_neighbor_system = { spawn_system = { initializer = $INITIALIZER$ } last_created_system = { if = { limit = { not = { has_hyperlane_to = prev } } add_hyperlane = { from = this to = prev } } } } # 隣接星系とハイパーレーンで繋ぐ static_add_hyperlane = { last_created_system = { if = { limit = { not = { has_hyperlane_to = $SYSTEM$ } } add_hyperlane = { from = this to = $SYSTEM$ } } } } static_create_fe_fringe_colony = { set_planet_flag = fallen_empire_world clear_blockers = yes prevent_anomaly = yes set_owner = $COUNTRY$ add_building = building_ancient_palace add_building = building_fe_dome while = { count = 5 add_district = { district_type = district_city ignore_cap = yes } } while = { count = 8 create_pop = { species = owner_main_species } } while = { count = 8 create_pop = { species = event_target:fe_servants } } } static_create_fe_spiritualist_fringe_colony = { set_planet_flag = fallen_empire_world clear_blockers = yes prevent_anomaly = yes set_owner = $COUNTRY$ add_building = building_ancient_palace add_building = building_fe_dome while = { count = 3 add_district_and_planet_size_if_needed_effect = { district = district_city } } while = { count = 2 add_district_and_planet_size_if_needed_effect = { district = district_generator } } while = { count = 2 add_district_and_planet_size_if_needed_effect = { district = district_mining } } while = { count = 2 add_district_and_planet_size_if_needed_effect = { district = district_farming } } while = { count = 20 create_pop = { species = owner_main_species } } } static_create_fe_servant_species = { create_species = { name = random class = random_non_machine portrait = random traits = random traits = { ideal_planet_class = $COUNTRY$ trait = "trait_nerve_stapled" trait = "trait_strong" trait = "trait_charismatic" } } }
12. 没落帝国3
あとは、実際に没落帝国を生成する処理を書けば完了です
C:\Users\(ユーザー名)\Documents\Paradox Interactive\Stellaris\mod\(MODのディレクトリ名)
└common
└on_actions
└(mod名)_on_actions.txt ← これの末尾にコードを追加する
# root: country on_game_start = { events = { static_game_start.3 } }
C:\Users\(ユーザー名)\Documents\Paradox Interactive\Stellaris\mod\(MODのディレクトリ名)
└events
└(mod名)_events.txt ← これの末尾にコードを追加する
########################################################### # 没落帝国を生成する ########################################################### event = { id = static_game_start.3 hide_window = yes is_triggered_only = yes trigger = { galaxy_size = galaxy_aoi } immediate = { # get_galaxy_setup_valueを使いたいので適当なスコープ内で対応する random_country = { limit = {} # ゲーム開始時の没落帝国の設定数を確認する get_galaxy_setup_value = { which = fallen_empires_count setting = num_fallen_empires } set_spawn_system_batch = begin while = { count = fallen_empires_count random_list = { 1 = { #物質没落 modifier = { factor = 0 any_country = { has_country_flag = fallen_empire_1 } } random_system = { limit = { has_owner = no } spawn_system = { initializer = "static_fallen_1" } last_created_system = { static_spawn_fallen_neighbor_system = { INITIALIZER = "static_fallen_1_2" } static_spawn_fallen_neighbor_system = { INITIALIZER = "static_fallen_1_orbitals_1" } last_created_system = { save_event_target_as = orbitals_1 } static_spawn_fallen_neighbor_system = { INITIALIZER = "static_fallen_1_col_1" } static_add_hyperlane = { SYSTEM = event_target:orbitals_1 } static_spawn_fallen_neighbor_system = { INITIALIZER = "static_fallen_1_col_2" } static_add_hyperlane = { SYSTEM = event_target:orbitals_1 } static_spawn_fallen_neighbor_system = { INITIALIZER = "static_fallen_1_orbitals_2" } last_created_system = { save_event_target_as = orbitals_2 } static_spawn_fallen_neighbor_system = { INITIALIZER = "static_fallen_1_col_1" } static_add_hyperlane = { SYSTEM = event_target:orbitals_2 } static_spawn_fallen_neighbor_system = { INITIALIZER = "static_fallen_1_col_2" } static_add_hyperlane = { SYSTEM = event_target:orbitals_2 } } } clear_global_event_target = fallen_empire_1 } 1 = { #精神没落 modifier = { factor = 0 any_country = { has_country_flag = fallen_empire_2 } } random_system = { limit = { has_owner = no } spawn_system = { initializer = "static_fallen_2" } last_created_system = { static_spawn_fallen_neighbor_system = { INITIALIZER = "static_fallen_2_orbitals_1" } last_created_system = { save_event_target_as = orbitals_1 } static_spawn_fallen_neighbor_system = { INITIALIZER = "static_fallen_2_col_1" } static_add_hyperlane = { SYSTEM = event_target:orbitals_1 } static_spawn_fallen_neighbor_system = { INITIALIZER = "static_fallen_2_col_2" } static_add_hyperlane = { SYSTEM = event_target:orbitals_1 } static_spawn_fallen_neighbor_system = { INITIALIZER = "static_fallen_2_orbitals_2" } last_created_system = { save_event_target_as = orbitals_2 } static_spawn_fallen_neighbor_system = { INITIALIZER = "static_fallen_2_col_1" } static_add_hyperlane = { SYSTEM = event_target:orbitals_2 } static_spawn_fallen_neighbor_system = { INITIALIZER = "static_fallen_2_col_2" } static_add_hyperlane = { SYSTEM = event_target:orbitals_2 } static_spawn_fallen_neighbor_system = { INITIALIZER = "static_fallen_holy_01" } static_spawn_fallen_neighbor_system = { INITIALIZER = "static_fallen_holy_02" } static_spawn_fallen_neighbor_system = { INITIALIZER = "static_fallen_holy_03" } static_spawn_fallen_neighbor_system = { INITIALIZER = "static_fallen_holy_04" } static_spawn_fallen_neighbor_system = { INITIALIZER = "static_fallen_shrouded" } } } clear_global_event_target = fallen_empire_2 } #以下省略 } } # サイオン用のコードもあるけど省略 set_spawn_system_batch = end clear_variable = fallen_empires_count } } }
このコード量はあまりにもつらい。でも動きました
13. マローダー
このままの状態で銀河を生成してもマローダーは出現するが、保有星系は必ず1つだけになるようだ
3星系保有するマローダーを出す場合は、initilizerでマローダー星系を明示して上げる必要があります
ただし、この方法を使うと、ゲーム開始時の設定を無視して常にマローダーが出現するようになります
具体的な方法としては、debugtooltipで星系のIDを確認し、出現させたい場所にinitilizerを記述するだけで良いです
マローダー1国目用のinitializer
・marauder_1_1
・marauder_1_2
・marauder_1_3
マローダー2国目用のinitializer
・marauder_2_1
・marauder_2_2
・marauder_2_3
マローダー3国目用のinitializer
・marauder_3_1
・marauder_3_2
・marauder_3_3
# 記載例 system = { id = "1306" position = { x = 304 y = 2 } initializer = marauder_1_1 } system = { id = "1307" position = { x = 305 y = -11 } initializer = marauder_1_2 } system = { id = "1308" position = { x = 316 y = -5 } initializer = marauder_1_3 }
ただしmarauder_x_2、marauder_x_3は必ずmarauder_x_1より後に書くようにしてください
順番が逆だと上手く動作せず、エラーコードを吐くので注意です
一応、ゲーム開始時の設定を活かすように記述することは可能です
以下のコードを追加してください
C:\Users\(ユーザー名)\Documents\Paradox Interactive\Stellaris\mod\(MODのディレクトリ名)
└common
└on_actions
└(mod名)_on_actions.txt
# root: country on_game_start = { events = { static_game_start.3 static_game_start.4 # ←これを追加する } }
C:\Users\(ユーザー名)\Documents\Paradox Interactive\Stellaris\mod\(MODのディレクトリ名)
└events
└(mod名)_events.txt ← これの末尾にコードを追加する
########################################################### # 不要なマローダー帝国を不思議な力で成仏させる ########################################################### event = { id = static_game_start.4 hide_window = yes is_triggered_only = yes trigger = { galaxy_size = galaxy_aoi } immediate = { # get_galaxy_setup_valueを使いたいので適当なスコープ内で対応する random_country = { limit = {} # ゲーム開始時のマローダーの設定数を確認する # アポカリプスのDLCが入っていない場合はマローダーは出ないはずなので0にする get_galaxy_setup_value = { which = marauder_empires_count setting = num_marauder_empires } if = { limit = { not = { host_has_dlc = "Apocalypse" } } set_variable = { which = marauder_empires_count value = 0 } } # 開始設定より多い分のマローダーを昇天させる while = { limit = { count_country = { count > marauder_empires_count limit = { OR = { has_country_flag = marauder_1 has_country_flag = marauder_2 has_country_flag = marauder_3 } } } } random_country = { limit = { OR = { has_country_flag = marauder_1 has_country_flag = marauder_2 has_country_flag = marauder_3 } } # destroy_countryだけだと、このwhileループが回っている間はまだ国家が消えていないので無限ループになる # 無限ループに陥らないようにフラグも削除する remove_country_flag = marauder_1 remove_country_flag = marauder_2 remove_country_flag = marauder_3 destroy_country = yes } } clear_variable = marauder_empires_count } }
14. まとめと課題事項
とりあえず試行錯誤中の内容としてはここまでです
静的銀河生成時の注意事項としては
・発展した開始状態のAIは自動では生成されないので、自前実装する必要がある
・没落帝国は自動では生成されないので自前実装する必要があり、実装は大がかりとなる
・ただしサイオン起源がいる場合のみは、自動で必ず1国だけ没落帝国が出現する
・開始星系の設定は、一部の起源を除き基本的には無視されるので、これも自前で補正する必要がある
・開始星系の設定は自前で補正しきれない以下のケースがある。今の所は諦めるしかない
・機械知性の国家はゲーム開始時に選んだ惑星種別を判別できないので、海洋型でゲームを開始したはずなのに大陸型で始まった、みたいな問題が起きる
・ゲーム開始時に選んだランダム星系みたいな設定を判別できないので、恒星などを設定に合わせて変えられない
・基本的に自動生成に任せると、最初の方に書いた星系定義に中立機構が集中するなど出現位置が偏る。偏らないようにするためには星系定義そのものをシャッフルしてあげる必要がある
・マローダーは自動生成に任せると単独星系を保有した状態でしか登場できない
・マローダーをinitilizerを使って生成すると、設定やDLCの生むに関わらず必ず登場するようになるので、initilizerを使う場合は後出しでゲーム設定を確認して、不要な国家を消すみたいな後出し処理が必要になる
といった感じです
この辺り解消しようとすると大規模改修が必要になってくるので、
現時点では静的銀河に関するMod作成は相当敷居が高そうです
静的銀河生成時にこの辺全部自動で対応してくれませんかねパラドさん…
AOI Chaaaaaan!!
Source: https://steamcommunity.com/sharedfiles/filedetails/?id=2950021554
More Stellaris guilds
- All Guilds
- Stellaris3.9.3
- Stellaris3.9.2
- Stellaris 3.6.1
- How to fill in your empire's territory with any color
- 3.14 Guide to Traits, Ethics, Origins, Civics, Traditions and APs
- SteamP2P
- HOW TO OPEN GAME
- HOW TO CLOSE GAME
- Stellaris Guide 870