Создание собственного варианта стартовой системы. Что получилось и что ещё нет. Часть 1.

Солнечная система или Денеб?
Денеб или солнечная система?
Теорема Эскобара.
Прямо скажем, выбор стартовой системы в стелларисе небогат. Можно, конечно, поразвлечься рандомом, но желаемую звезду или размер планеты можно выбивать долго, особенно сочетание оных. И ничего особенного не получишь.

Поэтому меня посетила идея создать несколько новых стартовых систем на различную тематику. Сразу оговорюсь, что навыками программирования я не владею - я просто вскрыл пару модов, нашёл файлы, отвечающие за генерацию так называемых "prescripted_species_systems", нашёл то же самое в файлах игры и принялся разбираться, что там есть, и что за что отвечает. Делается всё в документе txt, никаких дополнительных ухищрений не надо. Так же помогла одна статейка в интернете:
https://steamcommunity.com/groups/stellarismodders/discussions/1/350533172686178369/
- и всё же, многие вопросы остались нерешёнными, и я надеюсь найти их решения совместными усилиями (тем более, что я не знаю английский на достаточном уровне, чтобы сидеть на англофорумах).

Для начала я решил создать максимально простенькую систему, имитирующую старый красный карлик, поглотивший все планеты, кроме двух карликовых бедных "плутона". Вот что получилось:

Где же вторая обесчещенная планета, второй "плутон", спросите вы? А нигде - его нет. Тут вообще много чего нет из того, что я туда пытался залепить. Тем не менее, половина есть, и кое-что полезное я поведать могу. Но обо всём по порядку.

1. Какие файлы понадобятся:
1.1) В папке со Стелларисом\Stellaris\common\solar_system_initializers
мы должны создать текстовый документ и назвать его, например, так: Meigui_prescripted_species_systems.txt - хотя я подозреваю, что название вообще не играет роли, главное - чтобы файл был в этой папке. Это ваша будущая система.

1.2) Там же вы найдёте много интересного, в том числе файл prescripted_species_systems.txt, где запрограммированы Солнечная система и Денеб - их можно использовать как образец. Также интересен example.txt.
А если дофига разбираетесь в скриптах, в этой папке можно перевернуть с ног на голову генерацию вообще всего в вашей Галактике.

1.3) Посмотреть верное написание и полный список классов звёзд можно здесь: 
папка с игрой\Stellaris\common\star_classes\00_star_classes.txt
если есть моды и патчи, добавляющие новые классы, то могут появиться ещё текстовые файлы, или измениться этот - разные моды делают это по-разному

1.4) Аналогично с планетами: папка с игрой\Stellaris\common\planet_classes\00_planet_classes.txt
Кстати, если в них что-нибудь переделать, можно много чего интересного получить. Ну, или испортить игру. Я лично расширил максимальных и минимальных границы размеров планет и лун. Можно сделать доступными для колонизации неколонизируемые типы миров, только плитка у них у всех будет как у континентального (см. скриншоты ниже)

1.5) В ...\common\planet_modifiers вы найдёте файлы с планетарными модификаторами, правда, мне не удалось их присвоить планете либо звезде при генерации.

1.6) ...\common\buildings - здания

и т.д., для создания стартовой системы хватит этого

2. Создание стартовой системы на примере (с косяками):

Открываем наш созданный текстовый документ, и вписываем туда код, копируя с СС или хоть с моей (она попроще), на ходу меняя по своему разумению. Самое главное, что нужно запомнить, каждый отдельный компонент системы вписывается так:

NAME_system = {                                   -просто начало. Назовите как-нибудь - это нигде не отображается
class                                                      -класс звезды в системе, отображается на галактической карте при наведении, не определяет                                                                 звезду на самом деле
asteroids_distance                                   -параметр орбиты астероидного кольца. как расположить несколько - пока не ясно
usage = custom_empire                           -оставьте так, чтобы можно было присвоить стартовую систему любой вашей империи


planet = {                                               -первая планета. ВНИМАНИЕ - звезда в стелларисе - это тоже планета, только класса звезда и                                                                 с радиусом орбиты 0. Начать нужно с неё, если вы не геоцентрист. Помните: форпост можно                                                          строить только над звездой/чд/пульсаром
name = "NAME"
class = "pc_m_star"                        -её класс. Смотрите список в 00_star_classes.txt или 00_planet_classes.txt, или альтернативных                                                               файлах
orbit_distance                                -дистанция от орбиты предыдущего тела, НЕ ОТ ЦЕНТРА СИСТЕМЫ!
orbit_angle                                   -положение на орбите, как на циферблате. Если сделать одинаковыми - планеты выстроятся в линию
size                                              -размер планеты/звезды. Для колонизируемых определяет ещё и число клеток
has_ring = no/yes                         -кольца
modifier                                       -модификаторы
init_effect = {                               -эффекты (СЛОЖНА)
какой-нибудь эффект
}
}                                                 -завершающая скобка. следить за фен-шуем скобок! их должно быть каждой по паре: {...}


Вот как выглядит моя система в виде текстового документа:
(кто-нибудь знает, как сделать спойлер?)


 Код Результат

Meigui_system = {
class = "sc_m"
asteroids_distance = 19
asteroids_distance = 80
asteroids_distance = 95
usage = custom_empire

planet = {
name = "Meigui A"
class = "pc_m_star"
orbit_angle = 30
size = 16
orbit_distance = 0
has_ring = no
modifier = "High_Metallicity"
}


planet = {
class = random_asteroid
orbit_distance = 17
size = 3
has_ring = no
init_effect = {
orbital_deposit_tile = {
clear_deposits = yes
add_deposit = d_mineral_deposit 
}
}
}
planet = {
class = random_asteroid
orbit_distance = 1
orbit_angle = 288
size = 2
has_ring = no
init_effect = {
orbital_deposit_tile = {
clear_deposits = yes
add_deposit = d_mineral_deposit 
}
}
}
planet = {
class = random_asteroid
orbit_distance = 0
orbit_angle = 202
size = 2
has_ring = no
init_effect = {
orbital_deposit_tile = {
clear_deposits = yes
add_deposit = d_mineral_deposit 
}
}
}
planet = {
class = random_asteroid
orbit_distance = 0
orbit_angle = 130
size = 1
has_ring = no
init_effect = {
orbital_deposit_tile = {
clear_deposits = yes
add_deposit = d_mineral_deposit 
}
}
}
planet = {
class = random_asteroid
orbit_distance = 1
size = 1
has_ring = no
init_effect = {
orbital_deposit_tile = {
clear_deposits = yes
add_deposit = d_mineral_deposit 
}
}
}
planet = {
name = "Hua-Xiwang"
class = "pc_barren"
orbit_distance = 18
orbit_angle = 350
size = 11
starting_planet = yes
has_ring = no
modifier = "low_gravity_2"
modifier = "Thin_Atmospheres"
modifier = "weak_magnetic_field"
modifier = "mineral_poor"
modifier = "mineral_poor"
init_effect = {
prevent_anomaly = yes
}
init_effect = {
orbital_deposit_tile = {
clear_deposits = yes
add_deposit = d_mineral_deposit
}
init_effect = {
random_tile = {
limit = { has_blocker = no has_building = no num_adjacent_tiles > 2 }
set_building = "building_capital_1"
add_resource = {
resource = energy
amount = 1
replace = no
}
}
random_tile = {
limit = { has_blocker = no has_building = no }
set_building = "building_hydroponics_farm_1"
add_resource = {
resource = food
amount = 1
replace = no
}
}
random_tile = {
limit = { has_blocker = no has_building = no }
set_building = "building_power_plant_4"
add_resource = {
resource = energy
amount = 1
replace = no
}
  }
random_tile = {
limit = { has_blocker = no has_building = no }
  set_blocker = "tech_tb_quicksand_basin"
}
random_tile = {
limit = { has_blocker = no has_building = no }
  set_blocker = "tech_tb_quicksand_basin"
}
random_tile = {
limit = { has_blocker = no has_building = no }
  set_blocker = "tech_tb_quicksand_basin"
}
random_tile = {
limit = { has_blocker = no has_building = no }
  set_blocker = "tech_tb_quicksand_basin"
}
random_tile = {
limit = { has_blocker = no has_building = no }
  set_blocker = "tech_tb_quicksand_basin"
}
random_tile = {
limit = { has_blocker = no has_building = no }
  set_blocker = "tech_tb_quicksand_basin"
}
random_tile = {
limit = { has_blocker = no has_building = no }
  set_blocker = "tech_tb_quicksand_basin"
add_resource = {
resource = physics_research
amount = 1
replace = no
}
}
}
}
planet = {
name = "Yi"
class = "pc_frozen"
orbit_distance = 26
orbit_angle = 6
size = 3
has_ring = no
modifier = "mineral_poor"
}
  }
planet = {
class = random_asteroid
orbit_distance = 14
orbit_angle = 288
size = 2
has_ring = no
init_effect = {
orbital_deposit_tile = {
clear_deposits = yes
add_deposit = d_mineral_deposit 
}
}
}
planet = {
class = random_asteroid
orbit_distance = 0
orbit_angle = 330
size = 2
has_ring = no
init_effect = {
orbital_deposit_tile = {
clear_deposits = yes
add_deposit = d_mineral_deposit 
}
}
}
planet = {
class = random_asteroid
orbit_distance = 15
orbit_angle = 24
size = 1
has_ring = no
init_effect = {
orbital_deposit_tile = {
clear_deposits = yes
add_deposit = d_mineral_deposit 
}
}
}
planet = {
class = random_asteroid
orbit_distance = 0
orbit_angle = 97
size = 3
has_ring = no
init_effect = {
orbital_deposit_tile = {
clear_deposits = yes
add_deposit = d_mineral_deposit 
}
}
}
}
 

<---успешно сгенерироваловалось только первое, и то 
была проблема, т.к. в файле example.txt есть
минимальная уладённость кольца, пришлось изменить
<---с этим проблем нет

звезда сгенерировалась успешно, но признаки 
вместо "высокой металличности" получаются случайные.
Возможно, я неверно задаю







астероид сгенерировался успешно







даёт 1 ед минералов, как регулировать количество - не ясно


то же












то же












то же












и последний астероид. Все 5 сгенерировались
нормально, все дают по 1 минералу. Единственное, что
астероиды размеров 1,2,3 выглядят много больше
положенного, в отличии от планет и лун.








    Стартовая планета. С неё начинаются проблемы.
Генерация мира размером ниже минимума проходит ус-
пешно, даже лезть в example.txt не надо. Хоть планету
с 1 клетой забабахать. Выше 25 диаметр будет расти, но не
число клеток.
   Нельзя задать неколонизируемый тип планеты,
даже если сделать его колонизируемым в planet_classes/
00_planet_classes.txt (colonizable= с "no" на "yes").
То есть можно, но при старте игры он заменится на
одну из списка доступных в меню выбора, а с
интерфейсом мне пока не совладать.

<--никак не удаётся установить модификаторы, хотя
вроде бы запись правильная

возможная критическая ошибка должна быть в коде,
начиная с этой строки







<--Здесь задаются стартовые здания, к сожалению, 
сгенерировалась только планетарная администрация
1 уровня. 

<--вот она
<-а уже начиная отсюда не работает ничего. В теории,
так задаются ресурсы клеткам. На деле не работает.




<--и далее ни одно здание не построилось, ресурсы
на клетках по-прежнему появляются случайно
















<--здесь я пытался загадить всю планету зыбучими
песками (кроме клеток стартовых зданий).
Безрезультатно.

Дальше ничего не генерируется, в том числе не
 появляется вторая планета и ещё несколько
 астероидов. Это принципиальная вещь: если где-то 
ошибка, система сгенерируется только до того объекта,
в котором она есть. Если ошибка будет на стадии
создания солнца - в системе останется один лишь
пояс астероидов, а название вашей планеты будет
висеть в центре, но её самой не будет, как и всего 
остального.

Я задолбался искать, где ошибка, и как её исправить




















<--вот это должна была быть вторая планета
Размером 3 клетки





3. Итак, подводим итоги:
-Можно без проблем создать систему с определённой звездой (или иным объектом), или несколькими, с определёнными неколонизируемыми планетами, и определить размер стартовой планеты от 1 до 25 в клетках, и до полного безобразия в диаметре.
-Нельзя с помощью текстового документа поселить своих тараканов на необитаемой планете, хотя это не невозможно в принципе, если как-то добавить тип планеты в меню выбора в начале игры.
-С модификаторами ничерта не выходит, но генерацию это не рушит - может, кто поймёт, как исправить?
-Если начать мудрить с ресурсами, квадратами и прочим, велик шанс напортачить и похерить генерацию системы
-Если поставить обитаемую планету со всеми наворотами в конце системы, то в принципе, плевать.


4. Скриншоты:

1 - Как видите, планета размером 11 клеток, хотя в стандарте игре минимум - 12.

А вот она же, но уже размером 50. Клеток при этим 25.

Вот колонизируемая не-стартовая планета класса "Холодная безжизненная", размером 7 клеток. Без всяких изменений пригодность сносная.

А вот так вот интересно выглядят её клетки. Все без ресурсов, на одной - тот же список, что при добыче с орбиты.

А вот солнышко размером 300 с гаком, созданное не мной, а из мода, который я распотрошил - из него же портреты расы на остальных скриншотах. Мод хороший, только мужской половине портретов нужен мешок на голову.
ЗЫ: А кольцо астероидов у меня, кстати, всё-таки скокнуло обратно на дальнюю дистанцию - похоже, ему планета мешает. Наверняка там есть минимальное расстояние, чтобы планеты не генерировались в кольце астероидов.

5. Моды
Советую:

1) Planetary Diversity - прекрасный мод, который стоит ставить на стелларис по-умолчанию. Без него уныло. К тому же, в нём в интерфейсе выбора типа предпочитаемого мира есть три свободных места.
2) More Star Classes - один из лучших модов. Добавляет объект класса "барицентр" и заставляет генерироваться двойные/тройные/иногда четверные и пятерные системы, белые/коричневые/чёрные карлики, гиганты и сверхгиганты. Прекрасно вписывается, расширяет возможности для нашего дела.
3) Guilli’s Planet Modifiers - планетарные и звёздные модификаторы
4) Hypothetical Stars - тоже довольно интересный мод. Я как-то знатно повоевал в системе белой дыры, на которую мне всё время нападали. Поскольку БД полностью снимала щиты, я построил флот с одной только бронёй, и регулярно выносил флот мародёров, превосходящий меня числом. Только вот, если вы физико-нази, он вам противопоказан. Ибо у БД не может быть системы, а обитаемые планеты у звезды из тёмной материи - это... странно.

6. По поводу установки модов на стелларис:
Погуглите статьи на эту тему... и бросьте их в мусоропровод, так как там написана полная хрень. Не знаю, как на стимовской версии, но в обычной все файлы моды должны быть ни в какой-то папочке в "моих документах", а по канону - в соответствующих папках игры. Замена файлов, и всё прочее.
В ...\Documents\Paradox Interactive\Stellaris\mod должен остаться только управляющий файл .mod
Удачи с моддингом вашей времяпожиралки!

А за сим у меня пока всё - надеюсь, что найду единомышленников, с кем мы решим все проблемы. Я потратил сегодня большую часть дня, экспериментируя с генерацией системы и параллельно записывая эту простынь для вас и для себя. Устал, как собака. В рунете, по результатам моих изысканий, нет статей со сколько-нибудь исчерпывающей информацией по этой теме, да и поиск всё время норовит выдать что-то левое. Если же мы разберёмся со всеми ошибками, систему мечты сможет сделать себе каждый. А я своими ещё и поделюсь. Если будет отклик - продолжу выкладывать результаты своей деятельности, а там - глядишь - и на целый мод наскребу. По крайней мере, я провёл большую работу, и старался так что прошу не делать мне каку

Жду знатоков в комментариях