Starbound

Starbound

Not enough ratings
Кастомные блоки [RU]
By BΛBES
Да, на самом деле это что-то по типу кликбейта. НО! В свою защиту, в нашей ситуации по поводу кастомных блоков это - то, что нам нужно. Так что, держите, кастомные блоки/текстур пак гайд.

Этот метод подойдет для серверов с ваниллой. Вы можете подключаться к серверам не боясь, что вас выкинет за наличие модов.. Разве что, предупреждаю сразу, эти текстуры будете видеть только вы.
   
Award
Favorite
Favorited
Unfavorite
С чем мы имеем дело
Этот метод, используемый для создания текстур паков, базирован на так называемом "патчинге" .json файлов. Вы буквально создаете переадресующий файл, который используется для переписывания/добавления/удаления уже существующего контента. Именно поэтому он ванильный, т.к. вместо создания нового файла он модифицирует уже существующий.

Как патчить файлы вы можете узнать из этого отличного гайда, созданного Ceterai, который помог мне написать этот гайд.

Так чего же мы ждем? Начнем же создавать кастомные блоки!
Параметры файлов материалов
Прежде чем мы перейдем непосредственно к патчингу, вам нужно знать, что мы в общем-то собираемся переписывать. Для этого мы начнем с внутренностей .material файлов.

Что трогать не стоит?

  • materialId - т.к. это базовый айди материала, который всегда используется игрой. Так что вам точно не надо его менять.
  • materialName - тоже самое, что и предыдущее.

Все остальное более-менее подходит для редактирования.

  • particleColor - массив из четырех значений: трех RGB цветовых чисел и последнего, использующегося как альфа (прозрачность) цвета. Так 255 означает, что он полностью будет виден, а 0 - что не виден совсем. Используется только когда материал ломают или добывают.
  • itemDrop - то, что выпадет из блока после добычи.
  • description - описание блока в интерфейсе.
  • shortdescription - короткое имя блока в интерфейсе.
  • raceDescription - что скажет ваш персонаж в зависимости от расы после изучения блока.
  • footstepSound - звук шагов при контакте с блоком.
  • health - "хп" блока, или как долго вам нужно добывать этот блок прежде чем он выпадет.
  • category - где блок находится в инвентаре. (В общем-то, у всех материалов это вкладка материалов соответственно)
  • damageTable - путь к файлу конфигурации, отвечающему за то, как материал повреждается. Они подсказывают, что и как повреждает материал. Некоторые материалы могут гореть.
  • cascading - если стоит true, блок будет падать и распределять тайлы горизнтально, формируя горку. (СЕРВЕРНОЕ)
  • falling - если стоит true, блок будет падать и стакаться в высоту. (СЕРВЕРНОЕ)

  • renderTemplate - как КЛИЕНТ будет рендерить этот блок при визуальном контакте.
  • renderParameters - группа крутейших штук, которые мы в основном и будем редактировать. Когда вы используете для замены параметры из этой категории, их нужно будет прописывать полностью в таком формате "/renderParameters/параметр", например "/renderParameters/texture", "/renderParameters/variants" и т.д. Все параметры из этой категории используются клиентом.

    • texture - спрайт вашего блока.
    • variants - как много вариантов у этого спрайта есть. Число. Если количество вариантов базового материала и настраиваемого не совпадают, то это нужно перепатчить.
    • lightTransparent - пропускает ли материал свет или нет. False/true. (true стоит у window блоков например)
    • multiColored - можно ли перекрасить этот блок с помощью кисти или нет. False/true. Если количество вариантов базового материала и настраиваемого не совпадают, то это нужно перепатчить.
      !!! Может возникнуть проблема, если вы сделали какой-то базовый многоцветный блок одноцветным. В таком случае, если на планете будет установлен блок, который можно перекрашивать в ванилле, а у вас нет, при приближении к нему вас выкинет. Обратное, кстати говоря, не провоцирует вылет.
    • occludesBelow - скрывает бг-тестуру под собой. Используется для лучшего рендеринга, так что лучше всего ставить true, если блок непрозрачный. False/true.
    • zLevel - номер мнимой координаты Z, используемый блоками. Если у двух соседних блоков zLevel разный, то выше по наложению будет тот, у которого этот номер выше. Число.
    • radiantLight - если блок стоит, то он будет излучать свет. [R,G,B] от 0 до 255.

    КЛИЕНТ - значит, что значения для работы не обязательно изменять на сервере.
    СЕРВЕР - значение используется в зависимости от сервера, т.е. физика работает в зависимости от сервера, а не от клиента.
Рендеринг
Старбаунд имеет несколько базовых типов рендеринга блоков. Но вы спокойно можете спокойно написать свой собственный или вставить его в свой текстур пак, т.к. они только подсказывают блоку, как он должен появиться в зависимости от наличия других блоков рядом.

Вот базовые типы:



Classic - использует ближайших соседей по кресту, когда появляется, и в зависимости от этого подбирает тип перехода. Такой рендер например используется грязью, стеклом и другими природными блоками.



Column - использует ближайших соседей сверху и снизу. Например: блок колонны.



Girder - использует четырех ближайших соседей в форме прямого креста. Для примера: строительная балка, балка аутпоста.



Pipe - использует всех восьми ближайших соседей, чтобы сформировать секцию трубы. К примеру: дерма, трубы.



Platform - используется для платформ.

Rail - используется для рельс.

Row - использует ближайших соседей справа и слева. Для примера: бревно.



Screw - рендерит так же, как и колонна, поэтому я не уверен, зачем ее добавили. Используется болтами.

Sloped - рендер, использующийся диагональными блоками, такими как панели и диагональное стекло.

Патчинг
После того, как мы разобрались в параметрах и для чего они используются, мы можем начать их патчить.

1. Для начала вам нужно создать папку вашего текстур пака в модах. Тогда откройте папку Старбаунда, нажмите на mods и создайте ее. Я остановлюсь на "irden_overhaul". Мы буквально создаем клиентский мод.



2. Откройте ваш мод, создайте папку "Tiles" и откройте ее. Здесь вам нужно создать папку для ваших переделанных материалов. Я создал все четыре папки для своего собственного спокойствия. В этой же папке будут находиться все модинговые рендеры. Если материал ставится с базовым рендером, то вы можете банально переобозначить путь до него и игра будет считывать рендер из базовой папки. Об этом - дальше. (По какой-то причине, рендер реьс не работает адекватно с не-рельсовыми материалами.)

3. К примеру, я создам патч для alienrock.material и добавлю новые текстуры в эту папку. Вы можете просто переназвать свою текстуру как заблагорассудится, но я буду для удобства использовать имена базовых материалов (хотя бы потому, что они ставятся сразу после патч-файла). Имя патча и материала, который вы хотите пропатчить, должны совпадать (не считая разрешения).



4. Откройте его любым редактором. Я буду использовать notepad++.

5. Здесь вы должны будете прописать сам патч. Если вы хотите изменить уже существующий параметр (если не уверены, откройте базовый .material файл и посмотрите, какие параметры он использует) тогда используйте replace.

Пример:
[{
"op": "replace",
"path" : "/renderParameters/texture",
"value": "alienrock.png"
}]


Патч заменяет текстуру материала на ту, что лежит у вас в папке (она обязана там лежать).

6. Если вам надо добавить новый параметр, то вам нужно использовать операцию add.

Пример: в alienrock нет RadiantLight параметра, поэтому я хочу добавить его, чтобы моя текстура светилась как лава.

[{
"op": "add",
"path" : "/renderParameters/radiantLight",
"value": [229, 200, 79]
}]


7. Нужно помнить, что если в вашем спрайте больше или меньше вариаций одного блока, чем в базовом материале, то нужно заменить значение вариации в патче.

[{
"op": "replace",
"path" : "/renderParameters/variants",
"value": 5
}]


Суммарно это все будет выглядеть так.



8. Если вы хотите заменить метод рендеринга блока друим (даже, если его нет в игре), вам нужно изменить путь к рендеру. Если он из мода и/или сделан вами, то вам нужно поставить "tiles", когда вы указываете путь.

[{
"op": "replace",
"path" : "/renderTemplate",
"value": "/tiles/scb-pipetemplate.config"
}]