This War of Mine

This War of Mine

36 ratings
Создание модов (советы и хитрости)
By adrianna
К редактору уже прилагается инструкция в pdf (и она даже переведена и выложена в гайде пользователя Mandarin), но в ней нет многих вещей, до которых я доходила сама, пока делала мод. Этими секретными знаниями и делюсь :) А также схемкой, которую составила для себя, и с трудом добытым на просторах сети распаковщиком ресурсов игры.
   
Award
Favorite
Favorited
Unfavorite
Вступление
Свой мод я так и не выложила (его ещё пересоздавать надо из-за нового ДЛС, вот ведь засада), но сведений накопилось столько, что пора бы их уже народу показать. Кому-нибудь, думаю, пригодится.

Я принципиально не повторяю того, что есть в Modding Instructions.pdf, кроме самых общих понятий, без которых о модостроительстве не расскажешь. За деталями – в инструкцию, она лежит в корне игры и любой сможет её прочитать. Кто не сможет на английском – вот перевод, сделанный пользователем Mandarin. А у меня тут будут детали, которых в инструкции нет.

И ещё одно. Если кто-то захочет это всё перепостить в другое место или перевести на другой язык – ставьте ссылку, указывайте авторство, всё как обычно.
Начинаем (общая схема)
В первую очередь создаём сценарий (ладно, в первую очередь открываем Storyteller.exe и создаём мод, но с этим, полагаю, любой справится и без моих советов).

Итак, сценарий

Именно его видят и выбирают игроки, когда начинают новую игру. В свойствах каждого сценария есть ссылки на несколько необходимых для его работы блоков (набор стартовых персонажей, набор событий и т.д.), каждый из которых ссылается на другие блоки… Всю их обширную болливудскую родословную я свела в одну табличку, чтобы не запутаться:



Ну что, не запутались? ;) В свойствах сценария есть несколько параметров (Dweller set name, Timeline names и т.д.), каждый из них указывает на соответствующий раздел (зелёным цветом написан путь к этому разделу). Пробелы я добавила для лучшей читаемости. В редакторе не Shelter attack rule set name, а ShelterAttackRuleSetName, к примеру.

Нас интересуют:

Complication tier – сложность сценария. Ставим 0, чтобы он был доступен сразу. Кстати, можно поставить сложность 10000 остальным сценариям, чтобы для выбора был доступен только ваш. Через сколько прохождений какая сложность вступает в силу, задаётся в MainConfig, но о MainConfig я расскажу отдельно.

Важно! Ваш сценарий не будет виден, если оригинальных (без учёта ДЛС) больше 13, увеличение их общего количества в Scenarios config –> Classic Scenarios Count не поможет, как и манипуляции со сложностью Complication tier. Надёжнее всего заменить вашим сценарием любой из оригинальных (кроме ДЛС-овских); если хотите оставить оригинальный для себя в редакторе – скопируйте его через дублирование, а оригинал превращайте в свой. Ну или поудаляйте все старые (кроме ДЛС-овских!), но это менее надёжно. Если что-то всё-таки пойдёт не так, закройте редактор и снова откройте. Возможно, вы увидите там совсем не те сценарии, которые он показывал до закрытия. При удалении или дублировании сценариев его иногда клинит, даже если нет сообщений об ошибках.

Texture name – название картинки сценария в формате .dds, которая лежит в_папке_с_модом/textures/UI/select/ (адрес указывается, начиная с UI)

Dweller set name – название набора персонажей, который создаём по адресу Scenarios config –> Dweller sets

Home scene name – локация нашего убежища. Если оставить поле пустым, будет выбрана случайно.

Location pack name – имя набора локаций для ночных похождений (из Scavenge locations config –> Location packs). Если оставить пустым, выберется любой из подходящих по Complication tier.

Shelter setup name – стартовое состояние персонажей и всё, что связано с убежищем (Scenarios config –> Shelter setups)

Timeline names – наборы событий (Scenarios config –> Timelines). Их для одного сценария можно задать несколько, поэтому добавляются они через очень глючную менюшку.

Самый главный глюк таких списков – их лучше не копировать через Duplicate, даже если редактор не против. Это может вызвать ошибку, после которой (!!!) работу в редакторе нельзя продолжать и сохранять, в моде может что-нибудь непредсказуемо втихаря отвалиться. У меня, например, заглючили цены в таймлайне, причём заглючили капитально, создание их заново не помогло. И один предмет не отображался в игре – опять-таки, не помогало его пересоздание.

Безопасный способ копирования – нажимаем слева на уровень выше интересующего нас объекта, раскрываем его справа, нажимаем правой кнопкой мыши, выбираем Duplicate Item, если доступно. Подробнее покажу на примере радио, сейчас – о добавлении вручную.


Щёлкаем по полю, справа появляется многоточие, жмём на него, попадаем в менюшку, жмём на «Добавить» слева, заполняем Value справа. Для примера я создала сценарий Test с двумя таймлайнами:



Набор персонажей (Dweller sets)

Здесь можно указать только стартовый состав группы и текст в начале первого дня, который расскажет, как они дошли до жизни такой. Эти тексты лежат в Localization strings –> Daily log –> Strings, можно добавить свой или выбрать нейтральный IntroMessage или IntroMessageScenarioEditor.



Список персонажей есть в официальном руководстве. Их стартовое состояние задаётся, как ни странно, не здесь, а в Scenarios config –> Shelter setups.

Убежище (Shelter setups и Home scene name)

Карта убежища задаётся в поле Home scene name сценария. Их две:
!CURRENT/0_home_shelter_nu3 – городская (с надписью «F*ck the war!»)
!CURRENT/0_home_shelter_B – пригород
.

С последним патчем добавилась радиостанция из ДЛС: !CURRENT/0_home_shelter_radiostation – очень неудобная; как и во всех сюжетных, слишком много мест, куда нельзя ставить мебель, потому что на фоне что-то нарисовано.
Апд.: Ещё мы с toomanynights недавно выяснили, что один из шкафов в этом убежище (справа на чердаке над комнатой с радио) содержит фиксированный лут – 1 овощи и 2 мяса – который добавляется, не считаясь с тем, что задано в настройках убежища для сценария. Даже если там задано ноль еды, например.


Можно насильно взять убежище из ДЛС:
!CURRENT/WAR_STORY_1/0_home_shelter_tenement_house
!CURRENT/WAR_STORY_2/0_home_shelter_radiostation (см. выше)
!CURRENT/WAR_STORY_3/00a_shelter_anja_house
!CURRENT/WAR_STORY_3/00b_shelter_museum

…Но, честно говоря, в этом мало смысла. Их карты слишком малы и напичканы сюжетными объектами типа рисунков Амелии и экспонатов музея.

В Shelter setups прописываем стартовые повреждения персонажей (Sick, Wounded или Tired, можно и Hungry) – либо оставляем их всех здоровыми. Повреждения будут раскиданы между ними случайно, каждому достанется ОДНА строчка. Если строк больше, чем персонажей, использованы будут только первые.

И ещё два важных параметра Shelter setups:

Loot generator name – предметы, раскиданные по шкафам и кучкам в убежище (Loot generator config)

Scene setup name – настройки карты убежища. Этот параметр отвечает, насколько я увидела, только за наличие уже готовой мебели и, возможно, количество куч и шкафов:
  • Basic, BadBandits, Bandits, Thiefs – старый добрый стул
  • Winter_Builders, Winter_Thiefs – печка и стул
  • Kids_Winter – печка, стула нет
  • Kids, OrdinaryPeople – ни печки, ни стула
  • OldCouple – 2 кровати, стул, кресло (ТОЛЬКО в деревенском доме !CURRENT/0_home_shelter_B с недавних пор есть в обоих вариантах)
  • FullWypas – тестовый вариант с кучей всего и почему-то двумя базовыми верстаками

Один из персонажей на старте слегка болен, второй сильно устал, третий здоров. У них есть печка и стул:



…Из того, что относится к сценарию, остались не заданы только события (они же таймлайны), но это настолько обширная тема, что придётся начать новый раздел.
Таймлайны
Здесь важны несколько параметров, отсылающих в другие разделы редактора, и несколько тех, которые задаются непосредственно в таймлайне.

Ведут в другие разделы:
  • Shelter attack rule set name – ночные атаки на убежище
    (Scenarios config –> Shelter attack config –> Attack rules)
  • Visits group name – дневные визиты в убежище: торговец, квесты и новые жители
    (Visits config –> Visit groups)
  • Winter config entry name – погода, то есть температура воздуха в убежище без отопления (Winter config). Дни, закрытые из-за морозов, на самом деле задаются именно здесь.
  • …и чёртово радио, которое не задаётся явным образом, а потому нельзя попросту сослаться на уже существующие сеты и приходится создавать для каждого таймлайна новые.

Непосредственно в таймлайне:
  • Major event config – события, объявления о которых выводятся в начале дня (преступность и морозы). На самом деле это ТОЛЬКО объявления, сами события – в Attack rules и Winter config.
  • Blocked locations – даты закрытия локаций боями. Вот тут без обмана, они и правда заданы именно здесь.
  • War duration in days – количество дней до окончания войны.
  • Item price def – скачки цен.
  • Vanish items – то, как быстро начнут пропадать на локациях разные вещи.
  • Debug visits – вообще визиты в игре рандомны, но если нужно установить какие-то с гарантией, то это наш параметр.



Самый простой способ со всем этим разобраться – копировать уже существующее и менять только то, что нужно. Можно и таймлайны поставить из оригинальных сценариев, если они вас устраивают.

А теперь подробности.

Как бы события

В Major event config задаются только красивые объявления и картинки, с которых начинаются дни. Это означает не только то, что их надо сверять с Attack rules и Winter config, но и то, что их можно попросту заменить на свои (поменяв им надписи и текстуры в Scenarios config –> Major events definitions) и создать таким образом совсем другие события (бои, жару, Новый год, да что угодно). Единственное ограничение – их количество не может быть больше пяти.

С Blocked locations всё просто: какие дни выставите, в такие и будет закрыта часть локаций. Впрочем, и это могут быть не бои, если изменить текст в Localization strings –> UI –> Scavenge –> notDuringFights.

В Final cut появилась альтернативная блокировка локаций, в время которой нельзя покинуть убежище вообще (как бомбёжки в сценарии с музеем): поле Selective locations blocking entry def таймлайна. Мжно задать количество дней блокировки, но вряд ли стоит больше одного за раз.

Ночные атаки (Shelter attack config)

Вот уж что в большинстве случаев можно взять готовое из существующего сценария (главное – не забудьте, что в Major event config всплеском преступности должен называться период самых жёстких атак).

За одним исключением: если нужно в какой-то период защитить определённые предметы в убежище от грабителей. У каждой атаки есть почти-скрытый параметр No Stealable Items, о котором не написано в официальном руководстве. Он не раскрывается в левой части редактора, вписать в него что-то можно только справа (войдя в String[0], как на скриншоте с добавлением тестовых таймлайнов). Вот он, подсвечен:



Дневные визиты (Visits config)

Игра знает 4 типа визитов: квест, кандидат в жильцы, торговец и помощь (это когда не мы идём помогать, а нам что-то дарят – например, GiveWood или MedsForAnna). У квестов приоритет самый высокий, у помощи самый низкий. Сменить расстановку приоритетов можно в Visits config –> Visit types, создать свой набор визитов – в Visits config –> Visit groups.

Для каждого визита мы задаём временной период, в который он может произойти, но это не значит, что он действительно произойдёт (гарантию даёт только DebugVisits таймлайна). Но мы однозначно можем запретить ненужные события, поставив им ValidFromDay=100.

Fixed Days After Pass Requirme – задаёт повторение того же самого события. А вовсе не продолжение его сюжетной линии, как можно подумать. Так что на квестовые визиты его ставить нельзя – иначе, например, дети будут приходить за таблетками раз за разом.

И это не единственная глупость, которую я успела сделать в своём моде. Ещё я разрешила почти всем потенциальным жильцам приходить до конца игры, понадеявшись на Main config –> Dweller cap. Я всё ещё думаю, что этот параметр должен ограничивать их максимальное количество, но по какой-то причине он не действует. Ближе к финалу игра спохватилась, что не все же ещё пристроены, надо успеть их приткнуть! И желающие повалили толпами, каждый день по кандидату, пришлось их начать посылать. В убежище жило уже человек десять…

Видимо, игра группирует визитёров по времени возможного появления. Допустим, у вас одни визиты в дни 3-15, другие в 16-30, третьи 31-45 – игра будет выбирать сначала из первой группы, потом из второй… и не собьётся. Но если один новичок приходит в 4-10, второй в 7-13, третий в 8-16… это разные группы, игра считает своим долгом реализовать хоть что-то из каждой. Вот и разгадка толп зомби постояльцев.

В Visits config –> Joining dwellers initial states задаётся уровень контуженности новоприбывших в зависимости от количества дней, прошедших с начала игры. Как и приоритеты в Visit types, это распространяется на все сценарии.

Таймлайны (погода и радио)
Не вместилось в предыдущий раздел

Погода (Winter config и не только)

Непосредственно в свойствах Winter config (нажимаем на Winter config слева, смотрим на правую часть редактора) есть два любопытных параметра: Winter effects starts at и Winter starts at. Первый задаёт температуру чисто визуальных эффектов зимы (локации выглядят снежными), второй – температуру, при которой блокируются снегом локации, замерзает коллектор воды, появляется снеговик и опция копания снега у входа в убежище.

Поставив, например, Winter starts at = -5, можно перекрыть локации только на часть зимы, что я и сделала в своём моде (у меня там почти всё время зима). Увы, но добыча воды при этом начинает выглядеть странновато.

Ещё несколько важных для зимы параметров находятся в Sick and heat config:

Freezing Temp – температура, при которой персонажи могут замёрзнуть насмерть.

Heat Coefficient – то, насколько сильно нагревает воздух печка. Сделав это значение отрицательным, можно превратить её в кондиционер. Правда, модельку (Shelter item -> Shelter item name в свойствах предмета) поменять не получится, к ней привязаны скрипты его работы.

Optimum Temp – максимально возможная температура в убежище. Погодные изменения в Winter config не смогут превысить её.
Похоже, участвует в расчётах болезней персонажей. Если её увеличить, они простывают при более высоких температурах и чаще.

Shelter heat UI cap (Main config –> (Прочее) –> Shelter heat UI cap) должен ограничивать максимальную температуру при подбрасывании дров в обогреватель, но на деле ограничивает температуру сверху, даже если обогреватель не задействован (до Shelter heat UI cap минус 1). Вы не сможете задать жару выше 23°C, пока не измените это значение. Но и прогреть комнату выше Optimum Temp не удастся.
Ну а чё, столько модов This War of Mine про жестокую зиму и ни одного про жестокое тропическое лето…

Осталось всего ничего – создать всё-таки сет погоды для мода, но думаю, что с этим вы и без меня прекрасно справитесь ;)

Радио (Radio config)

Всего в игре три радиостанции:
  • Important – столичная, рассказывает о самых важных событиях: ходе конфликта, росте преступности и положении в городе в целом
  • Trivia – местные новости, в основном о ценах
  • Weather – погода
Посмотреть тексты сообщений можно в Localization strings –> Radio.

У каждой радиостанции есть набор сообщений для каждого таймлайна. Значит, у тестового сценария должно быть:
Radio config –> Important –> Test_Timeline1
Radio config –> Important –> Test_Timeline2
То же для Trivia, Weather, Music и MusicVaria.

Теперь обещанное о том, как копировать радиособытия для таймлайнов через Duplicate. Нажав на Important слева, раскрываем его список Timelines справа:



Затем выбираем нужный таймлайн и копируем его через Duplicate Item. Если попытаться скопировать тем же способом, но в левой части редактора, он выдаст ошибку.



Ничто не мешает создать свою радиостанцию. Единственное, что для этого нужно – немного сократить частоты Trivia и Weather, чтобы освободить небольшое окно между 0.3 и 0.45, куда мы и воткнём её.

Локации и конфигурации
В Loot generator config указываются предметы, которые будут сгенерированы в локациях на старте игры. Это один из способов добавить на них новый предмет, но есть куда более простой и быстрый – поставить ему в свойства один из генераторов лута, которые уже записаны во всяких LootGen_Map(…). Но о работе генераторов чуть позже.

Указание отдельных предметов в FixedPool позволяет регулировать их количество – в том числе и запретить добавлять их вовсе, если выставить ноль. Так в локации «Ветхая трущоба» запрещена к генерации любая еда.

На скрине видно, как задана работа генератора лекарств:



Сеты локаций, которые выпадают на старте, задаются в Scavenge locations config –> Location packs.

Можно не вписывать туда ничего и отдаться во власть рандома, можно сделать для своего сценария личный набор локаций и вписать его в Location pack name сценария, тогда каждый раз будет выпадать именно он.

А можно насоздавать для рандома свои наборы и запретить стандартные, вписав в их сложность Complication tier что-то вроде 100000. В этом случае нужно убрать из доступа пользователей галочку Anniversary edition. (Если она включена, игра попытается найти один из стандартных паков, известных ей как содержащие локации из расширенного издания, не найдёт ни одного и начнётся без единого доступного для посещения места.) Но убрать её невозможно средствами редактора. Самое меньшее, что можно сделать – заменить текст Localization strings –> UI –> ForceNewContent и ForceNewContentPopUp на предупреждение («Не нажимайте ни в коем случае!»).

Список локаций есть в официальном руководстве, не буду его дублировать. Разве что добавлю те, которых не было на момент его написания:

Внутреннее имя локации
Название в игре
Генератор лута
019_old_town
Старый город
LootGen_Map0_oldtown
001_scav_ghost_house
Дом с привидениями
LootGen_Map01_E
020_port
Порт
LootGen_Map20
021_airport
Аэропорт
LootGen_Map21

И новенькие из финальной версии (переделанные ДЛСшные):

Внутреннее имя локации
Название в игре
Генератор лута
022_pharmacy
Аптека
LootGen_Map22
023_toystore
Разгромленный магазин игрушек
LootGen_Map23
024_park
Парк
LootGen_Map24
025_bakery
Булочная
LootGen_Map25
026_brewery
Разбомбленная пивоварня
LootGen_Map26
027_congregation_house
Институт Самуила
LootGen_Map27
028_railway_station
Вокзал
LootGen_Map28
029_music_club
Музыкальный клуб
LootGen_Map29
029_music_club
Разгромленный музыкальный клуб
LootGen_Map29

Main config

– раздел, в свойствах которого закопано много полезного.

Dweller cap уже упоминался. Предположительно, отвечает за максимальное количество приходящих в убежище новых жильцов, но как-то он плохо за это отвечает.

Про Shelter heat UI cap тоже было сказано. Возможность сделать жару (и перенастроить игру так, чтобы персонажи от неё страдали, например, медленнее работали) очень интересная. Особенно если удастся превратить обогреватель в кондиционер на батарейках. Но для этого нужно очень хорошо уметь редакровать внутренние файлы игры, куда лучше, чем я.

Intro sequence – тут можно убрать заставки, показываемые при запуске игры, присвоив им, например, Enable only on platform = PS.

Раздел Day and night – продолжительность суток (если увеличить её, персонажи будут всё делать ме-е-дленнее, так как время каждого действия задано в часах), время начала дня, конца дня и конца ночи.
Day begin hour – начало дня, Day end hour – конец дня.
Время начала ночной вылазки строго фиксировано (8 часов) и зависит от времени её конца Night end hour (вот его можно задать). SkipHoursOnEndDay отвечает за что-то другое.

MainConfig –> GameConfig –> Complication Tier Max Games Played – вот они, уровни сложности ComplicationTier. Тут можно переопределить, какое количество прохождений какому ComplicationTier соответствует.

Здесь же, в GameConfig, есть Home scene names – карты убежища, случайно выпадающие на старте. Если вы хотите оставить только одну или нашли, как их редактировать, и можете вставить новую, – это сюда.



Прочие настройки

Trading config – здесь можно изменить ассортимент у торговцев.
BasicTrader – торговец, приходящий в дом.

Emotion config – управление настроением.
Самое важное про настроение: отрицательные значения его улучшают (уменьшается депрессия), положительные ухудшают.

В Archetypes config –> Dweller_Generic (Dweller_Kid для детей) –> Components –> Kosovo emotional component config хранятся значения, при которых наступает каждый уровень настроения.

А в самом Emotion config расписано, как на него влияют квесты (Events data), подбадривание (Depression change on cheer), при каких значениях депрессии персонажи вредят себе или другим (Trauma effects).
Предметы
Самое важное, о чём следует помнить – вам не удастся создать активный предмет (оружие, ножовки, отмычки) без ручной редактуры ресурсов, результаты которой вы ещё и не сможете вшить в свой мод. Увы.

Исключение – то, что употребляется как результат крафта прямо с верстака. Новую еду сделать можно. Но и она не будет доступна для заботы о раненом или ребёнке, придётся им ножками топать к плите. Опять-таки – если вы не пороетесь в файлах игры и не подредактируете скрипты. Но о редактировании файлов позже.

Создание предметов и рецептов описано в официальном руководстве, не буду повторяться. Только немного нюансов:

Inventory item в свойствах предмета задаёт раздел инвентаря, в котором этот предмет будет отображаться. Обратите внимание, что "Другое" с меткой Other и "Другое", которое вообще без метки – это две разные категории в инвентаре.

Shelter item –> Shelter item name – моделька, отображающаяся в игре (для стоящих в убежище вещей).

Item influences (а также Shelter item –> Param modifiers) – накладываемые эффекты. Их легко копировать с других предметов. Вот, например, выпечка, которая не только насыщает, но и повышает настроение по образцу детских игрушек:



Item – самый важный раздел. Тут и текстура (не забудьте, что текстурина для результата крафта, висящего снаружи верстака, своя и задаётся не здесь, а в Crafting предмета), и ссылка на текстовое название в Localization strings, и прочность (HP), и стоимость (Value), и даже звук при взятии.

А также загадочное Tags и ещё более загадочное Min loot location group. Оба они задают случайное выпадение предмета на локации, но как работает Min loot location group, я не поняла.

Item –> Tags – незаменимейшая вещь, если вы не хотите распихивать новый предмет по локациям вручную. Осталось разобраться, что значат эти теги.



Их, в сущности, три вида: генераторы, контейнеры и теги описания локации. Генераторы, как нетрудно догадаться, генерируют, а контейнеры определяют, где какой предмет окажется. И особняком тег Scavengable – он означает, что вещь вообще может быть создана рандомом, а не появляется только в тех локациях, где она есть в списке FixedPool.

Наполнение локаций предметами задаётся в Loot Generators Config -> LootGen_Map*** (или LootGenHome_***, если речь об убежище).

Описание локаций

Теги локаций выводятся в их описании на карте (например, «Много оружия», «Немного еды»). Предметы с этими тегами будут посчитаны в свою категорию, предметы без них не отобразятся в описании никак.

Название тега
Отображается в игре как
Предметы
LocationDescription_Food
Еда
все виды еды (консервы, мясо и овощи)
LocationDescription_Medicine
Лекарства
все виды лекарств (бинты, таблетки, травяные таблетки)
LocationDescription_Tool
Инструменты
все инструменты (лом, топор, отмычки, ножовка, лопата)
LocationDescription_Weapon
Оружие
всё оружие дальнего боя, нож, пули, оболочки пуль, но почему-то не порох, его стоит добавить
LocationDescription_Ingredients
Ингредиенты
табак-самосад – да-да, и всё! сюда напрашиваются табак, травы, удобрения, сахар, вода, ингредиенты-таблетки…
LocationDescription_Parts
Запчасти
все виды запчастей (электрические, оружейные и обычные шестерёнки)
LocationDescription_Scrap
Материалы
стройматериалы (доски и компоненты)
Предметы (оседлание рандома)
Дальше пойдут предположения. За небольшим исключением (несколько предметов мне удалось найти в \templates\helperobjects\loot) я вычисляла, что где возникает, собирая статистику во время игры.

Контейнеры

Важно! Сами по себе теги контейнеров не создают предметы, они просто говорят, в каком ящике этот предмет может оказаться, если он задан в FixedPool локации или в генераторе. Каждому контейнеру в игре может соответствовать несколько тегов; как и каждому предмету – несколько тегов контейнеров и тегов генераторов.

К примеру, вы хотите положить лопату или ломик в убежище на старте. Если не привязать к ним теги, они могут оказаться где угодно, от куч до закрытый сейфов, что нежелательно. Но если приписать их к Container_Furniture – появятся в столе либо открытом деревянном шкафу, и только если их на локации не будет, включится вариант «где угодно».

Моделька в игре
Типы контейнеров
Что внутри (приблизительно)
Холодильник
Container_Food, Container_Kitchen
еда, вода, алкоголь, сахар, травы
Шкафчик в ванной
Container_Bathroom
лекарства
Кровать
Container_Bathroom, Container_Treasure
лекарства, огнестрел, алкоголь, различные ценности
Металлический закрытый сейф
Container_Treasure, Container_Weapons, Container_Bathroom
всё, что игра считает ценным, кроме еды
Тайник художника в трущобе
Container_Treasure
ценности
Тайники в заброшенном доме и гостинице
Container_Weapons
всё, что связано с огнестрелом, обломки шлема/бронежилета/гитары
Большой сервант со стеклянными дверцами, Большой деревянный шкаф
Container_Furniture, Container_Treasure, предположительно Container_Food
ценности, запчасти оружейные и электрические, в шкафу попадалась еда
Письменный стол, тумбочки, шкафчики попроще и, вероятно, обогреватель
Container_Furniture
книги, кофе, табак, запчасти
Трупы, найденные на локациях (например, в подвале стройплощадки)
Container_Bathroom, Container_Treasure
лекарства и ценности, еды нет
Кучи мусора
Container_Scrap, Materials, Wood, Scrap и загадочное NiceFinding
стройматериалы, пули, шестерёнки и электродетали

NiceFinding – моё предположение, что это предметы (Scavengable либо назначенные локации вручную), к которым не привязаны контейнеры, поэтому их кидают в кучи. Но могу ошибаться. Вообще содержимое куч по чуть-чуть попадает не только в них, но и во все контейнеры, так что тут трудно сказать. Вот что создают генераторы – сказать легко, это записано в предметах. Другой вопрос – куда они всё это складывают.

Дальше – снова догадки:

Тип контейнера
Вещи, которые могут попасть в него
Использующие его генераторы (предположительно)
Container_Food
все виды еды и алкоголя, вода
LootGenerator_Survival
Container_Kitchen
травы, сахар, вода
LootGenerator_Trader
Container_Bathroom
все виды лекарств, ингредиенты-таблетки
LootGenerator_Med, LootGenerator_TraderBasic
Container_Treasure
книги, кофе, драгоценности, все виды огнестрельного оружия, алкоголя и сигарет, обломки огнестрела/шлема/бронежилета/гитары
LootGenerator_Skarby
Container_Weapons
огнестрельное оружие, пули, порох и оболочки пуль, обломки огнестрела/шлема/бронежилета/гитары, оружейные запчасти
LootGenerator_Skarby, LootGenerator_Ammo
Container_Furniture
книги, кофе, все виды табака и самокруток (но не сигареты), удобрения, запчасти оружейные, электродетали
LootGenerator_Skarby
Container_Scrap
доски, материалы, шестерёнки, электродетали, порох и оболочки пуль
Timeline_Wood, Timeline_Materials, Timeline_Parts, Timeline_WoodAndFuel; иногда Container_Kitchen и Container_Food (сахар, вода, еда)

Стройматериалы, пули и разные детальки из генераторов, начинающихся на «Timeline_», повторю, разбросаны по всем контейнерам и локациями, я просто не стала их все вписывать в каждую строку. К слову, именно генераторы задаются в Vanish items таймлайнов для постепенного исчезновения вещей с локаций.

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

Генераторы лута

Название
Что генерирует
LootGenerator_Skarby
все виды огнестрельного оружия, алкоголя и сигарет, обломки огнестрела/шлема/бронежилета/гитары, книги, кофе, драгоценности, игрушки
LootGenerator_Med
все виды лекарств, но не ингредиенты к ним
LootGenerator_Survival
мясо, овощи, удобрения, игрушки
LootGenerator_Ammo
пули, порох и оболочки пуль
LootGenerator_Trader
табак-самосад, травы
LootGenerator_TraderBasic
ингредиенты-таблетки, сахар, табак
Timeline_Parts
шестерёнки («запчасти»), оружейные запчасти
Timeline_Wood, Timeline_WoodAndFuel
топливо (только в _WoodAndFuel), доски
Timeline_Materials
материалы («компоненты»)

Некоторые вещи (например, электродетали, консервы) не входят ни в один генератор и добавляются в локации только вручную – или, возможно, генерируются через NiceFinding, тут я не уверена.

Пример, чтобы показать, как работают генераторы.
Я захотела убрать сахар из локации «Ветхая трущоба» (ну потому что странно, что голодающие не съели его только потому, что игра не считает его едой).

Для этого нужно в Loot Generators Config -> LootGen_Map04 -> FixedPool убрать один из генераторов – LootGenerator_TraderBasic (где как раз сахар); я заменила его на LootGenerator_Trader. Кроме того, я добавила в тот же FixedPool Sugar со значением 0 (по образцу мяса и консервов, которые там тоже с нулём стоят).
Тексты игры
Тем, кто собирается добавлять их в мод, следует знать несколько вещей.

1) В некоторых случаях новые тексты добавить невозможно. Если какой-то параметр ссылается не на явно заданные строки в Localization strings, а на теги (как диалог обучения ребёнка), добавление нового диалога ничего не изменит, игра не посчитает его таким же тегом. Описание тегов зашито в недра игры, до которых не добраться обычным путём. Впрочем, я добавила у себя два события Major event config в файлик MetaData.xml в корне игры; это позволило сделать больше событий в сценариях, которые остались в них даже после возвращения оригинального MetaData.xml (просто без названия). Но многие конфигурационные файлы лежат в dat-архивах, которые не так-то просто вскрыть.

И по загадочной причине нельзя добавить новый набор реплик для нажатия на работающее устройство типа коллектора воды или ловушки (SpeechesItems/ItemWorking/…), хотя в свойствах предмета прописывается ссылка на строку.

2) Игра знает, что у персонажей есть пол, и это отражается на текстах (всё-таки поляки делали), но, увы, все имена должны быть в именительном падеже (винительный не со всеми именами прокатывает).

{ms|Я мужчина}{fs|Я женщина} – кто говорит эту реплику
{mr|Он мужчина}{fr|Она женщина} – о ком в ней речь

(s – speaker, r – responder; m – male, f – female)
^CharacterName^ – имя персонажа, о котором говорят.

Пример: «Я рад{ms|}{fs|а}, что ^CharacterName^ помог{mr|}{fr|ла} пациентам больницы».

^OtherCharacterName^ – используется только в биографических записях детей для обозначения человека, который этого ребёнка опекает (^CharacterName^ в них – сам ребёнок). Если его не было изначально (или погиб), через какое-то время будет выбран тот, кто больше всего с ребёнком возится.
Пример: «{mr|Обеспокоенный}{fr|Обеспокоенная} благополучием Искры, ^OtherCharacterName^ {mr|решил}{fr|решила}, что лучше покинуть убежище и попросить помощи в другом месте» – имя ребёнка можно не заменять переменной, чтобы не мучиться с падежами; всё-таки это тот, в чьей биографии лежит эта запись. А вот ^OtherCharacterName^ может быть любым взрослым играбельным персонажем.

Кстати, таких временных опекунов дети называют не по имени, вместо ^CharacterName^ они начинают подставлять в своих диалогах Localization strings –> Names –> Male_Protector или Female_Protector («Дядя» или «Тетя»), поэтому ^CharacterName^ в их репликах должно стоять не только в именительном падеже, но и в начале предложения, чтобы оправдать заглавную букву.

Вот такие трудности перевода.

3) И последнее. Если беда пришла в ваш аул вы потеряли тексты своего мода при переносе его в новый после выхода дополнения (это сделать необходимо, иначе мод не запустится), нет ничего проще. Создайте в Localization strings строки с нужными названиями там, где они были, и оставьте пустыми. Сохраните и закройте мод. Затем (НЕ РАНЬШЕ!) скопируйте в папку localizations нового мода свои старые файлы локализации, т.е. файлы вида язык_номер-вашего-мода (например, russian_f35ece6b4bc143dd93cc63bcf2d5e0a0.lang), переименуйте под новый мод – и можно его открывать, строки будут заполнены.

4) ...Нет, не последнее. Я узнала, как перекодировать содержимое кириллического файла локализации, чтобы искать по всему файлу при необходимости. Кодировки ASCII-8bit -> UTF-16LE. По крайней мере, на этом сайте[www.online-decoder.com] работает, но он большие объёмы текста не переваривает.
Персонажи
Подумав, добавлю эту информацию в уже созданное руководство, она не помешает.

Всего в игре четыре типа характера (эгоист, альтруист, выживальщик и… как бы перевести Homie? по словарю – что-то типа «свой парень», но по поведению в игре ближе всего «конформист»), отвечающие за реакцию на события, изменение морали и сообщения об этом в дневнике. Кроме того, у каждого есть дополнительный флаг, вероятно, отражающий возможные изменения в их характере: у одних апатия, у других бесчувственность, у третьих агрессивность.

Возможные варианты (взято из текстов дневника):
  • Altruistic (альтруист): Apathic
  • Egoist (эгоист): Aggresive, Insensitive
  • Homie (конформист): Apathic, Insensitive
  • Survivalist (выживальщик): Insensitive
  • Kid (ребёнок): Aggresive, Apathic

Характер
Персонаж
Изменение характера
Altruistic:
Борис
Apathic
Злата
Apathic
Света
Apathic
Ливия (общее ДЛС)
Apathic
Egoist:
Бруно
Insensitive
Роман
Aggresive
Эмилия
Insensitive
Homie:
Катя
Insensitive
Кристо (ДЛС)
Apathic
Марко
Apathic
Павло
Insensitive
Хенрик (ДЛС)
Apathic
Survivalist:
Антон
Insensitive
Арика
Insensitive
Ирина (ДЛС)
Insensitive
Мэйрин
Insensitive

Ни одному ребёнку дополнительные особенности характера не заданы, все тупо Kid. Возможно, им доступны оба варианта (Aggresive и Apathic), в зависимости от стиля прохождения игрока?
Текстуры (персонажей)
С текстурами всё очевидно (кроме одного: распаковав текстуры при создании мода, удалите все лишние, иначе они так и будут паковаться в мод, замедлять его компиляцию и увеличивать вес), поэтому просто перечислю текстуры, которыми красятся модельки персонажей.

Они все лежат в \textures\meshes\, но некоторые в подпапках, а некоторые просто в корне meshes. Если папка не указана, ищите там. В квадратных скобках указан номер в текстуре из нескольких картинок, начиная с 1 (например, lower_02_diff [07] - левый нижний угол).

Папка
Текстуры
Антон
...\characters2\matematyk
все
...
hands
Арика
...\characters2\zlodziejka
все
...
handd
Борис
...
lower_02_diff_a [9], upper01_diff (рукава), m_u_16b (жилетка), hands
...\characters2\glowki_dweller
glowa_borys_kolor
Бруно
...
upper01_diff (жилетка), test_02_b (низ), upper05_diffuse2 (рукава), faces02_C [10] (слева внизу), glasses1, hands_diff
Злата
...\characters2\psycholog
все
...
handd
Ивано (ребёнок)
...\characters2\dzieci\dziecko_aleks
body_d, glowa_d
...
handd
Ирина (опекун)
...\characters2\babcia_opiekun
все
...
handd
Искра (ребёнок)
...\characters2\dzieci\dziecko_julka
body_e, glowa_e
...
hands
Калина (ребёнок)
...\characters2\dzieci\dziecko_ida
body_d, glowa_d
...
hands
Катя
...\characters2\kobieta_violence
kobieta_violence_body_roboczy
...\characters2\katia
katia_nowa_kolor2
...
hands
Кристо (опекун)
...\characters2\tata_opiekun
body_d, glowa_d
...
handd
Ливия (беременная)
...\characters2\aa_ws3\annaborys
все
...
hands
Лида (ребёнок)
...\characters2\dzieci\dziecko_natalia
все
...
hands
Марко
...\characters2\marko_new
все
...\characters2\glowki_dweller
glowa_marko_kolor
...
handd_rags
Миша (ребёнок)
...\characters2\dzieci\dziecko_piotrek
body_d, glowa_czapka_d
...
hands
Мэйрин
...
lower_02_diff_A [1], upper05_diffuse2 (жилетка), handd (вся рука)
...\characters2\glowki_dweller
glowa_marin_kolor
Павло
...
kacper_kurtka_diff, lower01_diff, faces02_C [9] (справа внизу), hands
Роман
...
test_02a_A (куртка), lower_02_diff [7], faces02_A [6] (не белые волосы), hands
Света
...\characters2\ciocia_nauczycielka
все
...
handd
Сергей (ребёнок)
...\characters2\dzieci\dziecko_starsze
body_d, glowa_d
...
hands
Хенрик (опекун)
...\characters2\dziadek_opiekun
все
...
handd
Эмилия
...\characters2\kucharka
kucharka_body_kolor2, kucharka_glowa_kolor
...
handd, glasses1
Модельки персонажей редактора
...\characters2\aaa_edytor и ...\characters2\aaa_edytor_karnacja
Распаковка ресурсов
С большим трудом, но мне удалось-таки добыть инструменты для распаковки и запаковки DAT-файлов: https://forum.xentax.com/viewtopic.php?f=10&t=11378
Пришлось на английском просить у автора перезалить, а потом несколько месяцев ждать ответа. Но он всё-таки это сделал, не очень торопился, это да :) Всё равно спасибо. Правда, запаковщик не скачивается без регистрации на форуме, а ссылка на распаковщик может опять пропасть. Так что залью-ка я копию на яндекс-диск на всякий случай: https://yadi.sk/d/VBSZrDdV5mCeDQ

Содержимое папок BSUnpacker_0.0.4.r7 и BSPacker_0.0.2.r3 нужно распаковать в корень игры, дальше всё вполне понятно. Запускайте и пользуйтесь. Не пугайтесь папки __Unknown, этих файлов просто не было в списке FileNames распаковочной программки (видимо, новые – от ДЛС-ок, например), но она их без проблем запакует обратно, даже отредактированные, если отредактированы правильно. И всё-таки на всякий случай сделайте бэкапы DAT-архивов.

И самое главное: в моды вся эта красота не пойдёт (кинуть распакованное в папку с модом не прокатит, я проверяла). А если очень хочется, то придётся просить игроков, ставящих мод, заодно скачивать себе и кидать в корень игры ваш новый common.dat, к примеру. И работать оно, конечно, будет только до первого обновления. В общем, думайте сами, решайте сами, надо оно вам или нет.

Распакованные файлы я бы условно поделила на два типа: скрипты lua, которые легко можно редактировать, и остальные файлы, с которыми увы. Скрипты можно открывать и сохранять любым блокнотом (но специализированным, типа Notepad++, это просто удобней). А вот те, с которыми увы, отображаются в блокнотах с кракозябрами и после сохранения в этих самых блокнотах игра отказывается иметь с ними дело и вообще работать. Даже в HEX-редакторах (кто о них вспомнил – ещё раз увы, я вас разочарую) можно только заменить информацию посимвольно, добавление новой убивает файл.

Поэтому дать в руки персонажам новый инструмент вроде топора или отмычки по-прежнему не получается. Возможно, получится у кого-то другого (кто научится редактировать эти гадские файлы, потому что где-то в них закопан список инструментов, в отличие от списков оружия и еды, которые есть прямо в моде). Вот еда и алкоголь – другое дело, с ними можно кой-чего замутить через скрипты)…

Новое оружие

…А для нового оружия даже скрипты, как выяснилось, не нужны. Достаточно добавить его в списки в настройках Main config:

Combat –> Dweller Weapons – чтобы взять его в руки в ночной вылазке;

и Night Jobs _Guard –> Defense Weapons / Night Jobs _Guard –> Defense Melee Weapons (для дальнего или ближнего боя соответственно) – чтобы им пользовались дежурящие ночью в убежище.

Ну то есть, если вы тупо скопируете лом и впишете в оба списка, он будет нормально работать как дубинка, но не будет вскрывать замки.

Новое имя защитника ребёнка

Мелочь? Но приятная. Меня напрягало, что деда Хенрика дети называют «дедушка», а деда Антона почему-то «дядя».

Заодно пусть будет примером работы с HEX-редактором.

Имя защитника зашито в личные файлы персонажей (которые лежат \templates\characters\player_characters, и, разумеется, они из не поддающихся редактуре). Чаще всего это Male_Protector или Female_Protector из Localization strings –> Names, но у тех, кто стартует с ребёнком, есть специальные имена: Christo_Protector, Henrik_Protector… во, этот-то нам и нужен.

Вставить его напрямую в файл Антона не выйдет, поскольку в Henrik и Male – очевидно разное количество букв, а нам нужно заменить одно другим. Так что создаём имя Anto_Protector, копируем в него содержимое Henrik_Protector на всех языках… а затем открываем \templates\characters\player_characters\dweller_mathematician.binarytemplate любым HEX-редактором и аккуратненько, вручную, а не копипастом, заменяем Male на Anto.



Теперь запаковываем обратно папку templates при помощи BSPacker.exe и наслаждаемся результатом. Если в результате игра вылетает – значит, заменили как-то не так, у меня не с первого раза получилось. Либо что-то ещё в templates изменить успели.



Ну да, здесь тётя Света, а не дедушка Антон, я на ней это дело тестировала, с ней и скриншот сделала.

Алкоголь, который можно пить

С ним оказалось куда проще, чем с едой. Но в обоих случаях понадобится common.dat.

А точнее, файлы itemactionbindingconfig.lua и resourcedisposer.lua в \common\scripts\items\. Для алкоголя – только второй из них.



Нужно найти строки с перечислением всех предметов, которые игра считает алкоголем (оно же пьётся из одного меню, что спирт, что самогон), и добавить туда свой. Таких списков в файле должно быть два.

Еда, которой можно кормить

Вот он, гвоздь программы. С едой получилось совсем хорошо, от внутриигровой не отличишь. Причём всё оказалось куда сложнее, чем с алкоголем, потому что, в отличие от алкоголя, нет общего наименования всей еды и волшебного списка, куда можно дописать что угодно.

Так что придётся идти трудным путём: искать в обоих файлах каждое упоминание CookedFood и вставлять рядом такой же кусок кода, заменив "CookedFood" на своё (в моём случае – на "SpicedFood").

Например, так:

if self.ResourceType == "CookedFood" or self.ResourceType == "CookedFood2" then
if self.ResourceType == "CookedFood" or self.ResourceType == "CookedFood2" or self.ResourceType == "SpicedFood" then

Или так (иконку, разумеется, тоже заменить):

{ ActionName = "DwellerHelpItemDisposer", Params = { IconIndex = 20, IconTextureName = "UI/KosovoIcons/sheet01_a.dds", ResourceType = "CookedFood2", Duration = 13.6, ParameterName = "Hungry", MinParameterLevel = 1, Tags = { "CheckPath", "BlockOwner" } }, }, { ActionName = "DwellerHelpItemDisposer",
Params = {
IconIndex = 60,
IconTextureName = "UI/KosovoIcons/sheet04_a.dds",
ResourceType = "SpicedFood",
Duration = 13.6,

ParameterName = "Hungry",
MinParameterLevel = 1,

Tags = { "CheckPath", "BlockOwner" }
},
},

И не забудьте про текстуры иконок в конце resourcedisposer.lua



Поставила вторую плиту с обычной едой, чтобы в меню (двусмысленно получилось… меню с содержимым меню, во) попали обе тарелки.

Но и это не всё! Иконка еды теперь появилась над персонажем, и даже кормление происходит, но при этом они стоят, как истуканы. Чтобы запустились анимация и диалог кормления, нужно добавить название еды в список предметов для ухода за детьми и больными. Он есть в EmotionalConfig –> Other –> Help Dweller Settings редактора мода, только редактор не позволяет ничего сюда внести, вылетает. (Возможно, потому что одного этого недостаточно, пользователь же должен ещё и скрипты править, чего он делать, по-хорошему, не должен… потому и правку списка отрезали, наверное.)

Жестом фокусника открываем блокнотом файл EmotionalInfluenceConfig.xml в папке своего мода (который, естественно, не должен быть открыт в редакторе в этот момент), ищем строчку <Prop Name="Help Dweller Settings">, добавляем к списку предметов свой, сохраняем – и вуаля! Что по-французски означает «Мы победили этот вредный редактор модов».
Распаковка ресурсов (апдейт)
Йес! Способ не только выдернуть из игры файлы, но и запихать их обратно в мод, – найден!

Только для этого нужен другой распаковщик (который делали для Фростпанка), он не имеет заданного списка файлов и не придаёт им приличный понятный вид при распаковке, а просто кидает всё как есть в папку с названием архива, без нормальных имён, расширений и папок. Зато он безотказный и работает со всем, что дают, это и не распаковщик как таковой, а просто два питоновских скрипта, умеющих работать с такими архивами.

…И да, это значит, что придётся установить Python. Гугл вам в помощь, он лежит на своём официальном сайте, бесплатный и мало весит.

А «распаковщик» вот: https://yadi.sk/d/ISyTGl26E0Jthw. Я его тоже откуда-то качала, но уже забыла откуда, решив, что BSPacker лучше.

Итак:
  1. кидаем в распаковщик\data из This War of Mine\Mods архив вида номермода_имяархива.DAT и номермода_имяархива.IDX, а также имяархива.DAT и имяархива.IDX из корня This War of Mine
  2. запускаем unpack.py
  3. поиском по содержимому ищем в \распаковщик\out нужное (скорее всего, оно будет в архиве основной игры, но не мода)
  4. правим, кидаем в папку \распаковщик\out\номермода_имяархива и запускаем pack.py
  5. кидаем в This War of Mine\Mods созданные в out архивы мода
  6. запускаем и проверяем (начав новую игру)

…И эту операцию нужно будет повторять после ЛЮБОГО изменения, внесённого в мод, потому что при каждой новой компиляции архивы будут перезаписаны редактором.

В моём случае это были настройки зимы в архиве common, которые я нашла там, распаковав его через BSUnpacker (они в скрипте shelterstates.lua). Да, в игре стоит ограничение на минимальную температуру в -5°C, недоступное из редактора (лопата, смейтесь)! Распаковав common фростпанковским архивом и запустив поиск по содержимому с текстом OutsideTemperature, я нашла этот скрипт в виде файла ce6d60cf. Отредактировала его и закинула в папку 0dfe44a4e78f4b32bfe5e75b1cd80b1c_common в out, запаковала обратно и вернула мод на место.

Буду добавлять полезные файлы:
Настоящее имя файла
При распаковке BSUnpacker'ом
Чем полезно
ce6d60cf
common\scripts\states\shelterstates.lua
изменение минимальной/максимальной температуры в убежище
b1d8530e
common\scripts\items\itemactionbindingconfig.lua
еда в менюшках над персонажами
7bc8e2f5
common\scripts\items\resourcedisposer.lua
та же еда в менюшках, новые виды алкоголя для питья
Распаковка (вместимость рюкзаков)
Честно говоря, я хотела найти файлы кастомных персонажей, чтобы не было у них у всех по 12 ячеек в рюкзаке. Не нашла. Похоже, у этих ребят один файл на всех, а где хранится их общее 12, я не нашла (но точно не в templates\characters\dwellerwithactions - это я проверила).

И да, снова увы - templates.dat. Этот архив не создаётся модом, а значит, впихнуть эту инфу в мод не получится, изменить её можно только для себя через основной templates из корня игры.

Но если кому интересно, вот файлы персонажей:

Файл
Персонаж
Ячеек (в скобках в 16-ричной)
3a08602a
Эмилия (адвокат)
10 (0A)
4e9bfc6a
Роман (дезертир)
10 (0A)
61c69eaa
Бруно (повар)
10 (0A)
64bd901c
Антон (математик)
8 (08)
2603ab03
Злата (гитаристка)
12 (0C)
6994265a
Мэйрин (строит)
10 (0A)
b4cb58d0
Катя (торгуется)
12 (0C)
aaffdabf
Марко (пожарный)
15 (0F)
bfcf6b07
Павло (футболист)
12 (0C)
d20434a9
Борис (грузчик)
17 (11)
f51bac6d
Арика (воровка)
10 (0A)
e3c28f94
Света (учительница)
8 (08)
f5947176
Ливия (беременная)
8 (08), но незачем
cf1216b3
Кристо (ДЛС-дети)
12 (0C)
4f02fa16
Хенрик (торговец табаком, ДЛС-дети)
10 (0A)
2705d561
Ирина (садовник, ДЛС-дети)
10 (0A)
c8522284
Адам (ДЛС1)
15 (0F)
b9cf3c74
Эзма (ДЛС2)
12 (0C)
d6b5d227
Малик (ДЛС2)
8 (08), но незачем
859f6d31
сын (ДЛС2)
10 (0A)
50e8b6c1
Аня (ДЛС3)
11 (0B)
6b3f45a5 (и 24177233, но инвентарь не там)
Рубен (ДЛС3)
8 (08)
fa82543b
сторож (ДЛС3)
7 (07)

Распаковать templates фростпанковским распаковщиком, найти файл, открыть его любым HEX-редактором и заменить нужные символы. Они где-то в конце, среди нулей. Потом, естественно, запаковать обратно.

Вот для примера:


Борис


Бруно
The end
Успехов всем в модостроительстве!

А также, чем чёрт не шутит, в дальнейших раскопках ресурсов игры. Я бы всё-таки хотела узнать, как менять карты локаций, настройки персонажей… Словом, все те файлы, которые не берутся даже HEX-редактором. Возможно, кто-нибудь догадается, в какой программе они делались?
53 Comments
adrianna  [author] 15 Jan @ 5:45am 
BoltKumar, такое у меня было, когда игра обновлялась. Это всегда портит моды. А сейчас опять вышла новая версия с сюжетными дополнениями.

Нужно создавать новый мод и переносить в него всё, что было в старом, иначе никак.
BoltKumar 15 Jan @ 3:31am 
У меня не работает кнопка Едит в редакторе, я нажимаю и пишет что по пути файла мода, нет файла L10n.xml
Disbein 15 Oct, 2024 @ 7:12am 
на стадии запуска я уже свернул игру но спасибо да хранит тебя аллах
adrianna  [author] 9 Aug, 2024 @ 2:42am 
slove, ух, вспомнить бы. Последнее - точно не знаю, как, я это когда-то искала и не нашла.

Многое, скорее всего, зашито в файлах персонажей, которые редактируются только HEX-редакторами. Смотрите, что здесь написано в конце про вместимость рюкзаков, попробуйте поискать аналогичным способом в тех же файлах "имя_персонажа.binarytemplate". Если нужно изменить цифры (урон и т.д.), это легко через HEX делать. А вот сложные вещи типа списков предметов для крафта таким способом уже не изменишь, увы.
Trippledope 6 Aug, 2024 @ 5:56am 
Добрый день. Спасибо за такой содержательный гайд!
У меня есть вопрос:
Есть ли способ отредактировать:
Значения шума, который издают персонажи?
Их урон и шанс успешного удара?
Количество hit points?
Увеличение/уменьшение количества лута, который находит персонаж (У марко это значение +20%)?
Уменьшение/увеличение затрат на постройки и крафт предметов (Как у Мейрина, Бруно и Ливии)?
adrianna  [author] 7 Feb, 2024 @ 2:34am 
solton,
2) Если вы не знаете, как задавать пол в текстах игры:
{ms|Я мужчина}{fs|Я женщина} - кто говорит
{mr|Он мужчина}{fr|Она женщина} - о ком говорят
(m - male, f - female; s - speaker, r - responder)
adrianna  [author] 7 Feb, 2024 @ 2:33am 
...То есть в Scenarios config - DwellerSets задать другого ребёнка и изменить стартовое описание сценария и текст био (можно даже поменять биографию на чужую, если хочется её сохранить, в emotion config - BioLog settings, а в самом тексте биографии отредактировать пол и имя). В игре есть три мальчика (Ivano, Misha, Sergei), последний не используется в сценариях, а только приходит рандомно.
adrianna  [author] 7 Feb, 2024 @ 2:33am 
solton,
Maybe, if our languages are quite similar, it would be better to send you the original text; anyway, I translate it into English through an online translator.

1) Если вы хотите поменять пол на модельке ребёнка.
Искать нужную модельку в .binarytemplate и способ изменить в ней пол - очень сложно, мне кажется. В сценариях режима выживания проще полностью заменить ребёнка-девочку на мальчика.

(дурацкое ограничение на 500 символов, придётся разбить комментарий на три)
solton 28 Jan, 2024 @ 10:00pm 
Hi I was trying to mod genders for stories. (I wanted to change gender of the kid, because I remade it and it's father to a man and his son, that I know personally) I need to change the gender because of my language. In my language for example word "hungry" has two different forms based on gender "Hladová" a "Hladový" So when I simply change the kids picture to a boy it is still pretty obvios that it is female.... Has anyone tried it? if yes could you please help
solton 1 Dec, 2023 @ 9:55pm 
Thank you so much. You really helped me.