Версия 2.0: свои модели ножа и крови, своя краска блоков через патч атласа
Нож некроманта и Кровь некроманта получили собственные модели, а Пирамида духов - собственную поверхность. Три разных способа, каждый выбран по тому, как устроен сам предмет. НОЖ И КРОВЬ - свои префабы в бандлах мода. Форма записи "#@modfolder(...)?prefab" подтверждена живым примером; геометрия у обоих ванильная, меняются материал и текстура. Текстуры генерируются скриптами (см. _private/tools), а не рисуются: правка вида сводится к правке констант и одному запуску. Нож: состаренная кость, почти чёрная обмотка, пурпур во впадинах, плюс слой под ручную роспись рун - он подмешивается в альбедо и в эмиссию, поэтому руны светятся. Слой пользовательский, генератор его никогда не перезаписывает. Положение росписи посчитано по геометрии: развёртка выгружена из меша, и подобрано смещение, при котором вся роспись ложится на одну плоскую грань. Раньше она перегибалась через кромку, обращённую к игроку. Кровь: банка вместо мешка. Заодно чинится расхождение, жившее с самого начала - описание предмета говорило "Банка, наполненная кровью", а наследуемый medicalBloodBag показывал sackPrefab, обычный мешок. Жидкость перерисована по маскам мешей, а не перекрашена тинтом: тинт предмета на этот меш не действует вовсе, у шейдера Game_EntityTintMaskSSS выигрывает _Color материала. ПИРАМИДА - своя краска в атласе блоков через собственный Harmony-патч. Ваниль своих текстур блоков не умеет: Texture у блока это индекс в готовом атласе, а запись краски несёт только TextureId/PaintCost/Group/SortIndex и никогда путь к картинке. Поэтому CustomBlockPaintPatch дописывает наш слой в массивы атласа на лету. Путь через свою модель (Shape="ModelEntity") пробовался и отложен: там остались нерешёнными столкновения и маджента на дальних экземплярах. Краска лучше тем, что блок остаётся обычным Shape="New" - со всеми работающими столкновениями, наведением по E и правильной посадкой, - а поверхность у него своя. Побочно краска доступна кисточкой под именем "Некротический прах". Параметры атласа не угаданы, а замерены в игре (BlockAtlasProbePatch): 512x512, DXT1 для альбедо и DXT5 для нормалей со specular, 10 мип-уровней, массивы нечитаемые - отсюда GPU-копирование и явные настройки импорта текстур. Зонд оставлен намеренно: номер краски в blocks.xml (608) это длина ванильного uvMapping, и после обновления игры он может сдвинуться - зонд печатает фактические числа при каждом запуске. Патчи обёрнуты целиком: они работают внутри загрузки игры, где вылетевшее исключение срывает шаг загрузки. Resources/necropyramid в коммит не идёт - на него никто не ссылается. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01W5F3AVwsusZHMqPBcSQcVJ
This commit is contained in:
co-authored by
Claude Opus 5
parent
026e006c9c
commit
ab1b3eadaf
+74
-17
@@ -900,29 +900,54 @@
|
||||
boneShivPrefab, то есть слот тинта у этого меша рабочий и на оружии с
|
||||
ShowQuality тоже применяется. Копать тут больше нечего; осталось только
|
||||
посмотреть глазами, достаточно ли чёрный получается клинок. -->
|
||||
<property name="TintColor" value="0, 0, 0"/>
|
||||
|
||||
<!-- СВОЯ МОДЕЛЬ, ЗАГОТОВКА 2026-09-10 - ВКЛЮЧАТЬ ТОЛЬКО ВМЕСТЕ С БАНДЛОМ.
|
||||
Строка ниже намеренно закомментирована: файла Resources/necroknife в моде ещё
|
||||
нет, а Meshfile, указывающий в никуда, сломает нож прямо в живой папке мода -
|
||||
игра читает именно её, и вечерний тест v1.0 идёт с этих же файлов.
|
||||
Раскомментировать в тот момент, когда бандл лёг в Resources/, и не раньше.
|
||||
<!-- TintColor ОТКЛЮЧЁН 2026-09-10 вместе с переходом на свою текстуру.
|
||||
|
||||
TintColor - это МНОЖИТЕЛЬ цвета меша, а 0,0,0 множит в чистый чёрный. Он был нужен,
|
||||
пока нож носил ванильную бежевую кость: другого способа затемнить клинок не было.
|
||||
Теперь цвет несёт своя текстура necroKnife_d.png, и тот же множитель погасил бы
|
||||
всё нарисованное в ноль - вместе с пурпурным свечением в альбедо.
|
||||
|
||||
Иконка от этого не зависит: она отдельный арт (CustomIcon выше), CustomIconTint
|
||||
здесь никогда не стоял. И на иконке клинок именно КОСТЯНОЙ, а не чёрный, так что
|
||||
чёрный множитель ей вдобавок противоречил.
|
||||
|
||||
Побочно это снимает неоднозначность теста трубы: красный клинок мог быть виден
|
||||
только за счёт эмиссии, если тинт всё-таки давил альбедо нашего меша. Без тинта
|
||||
вопроса больше нет.
|
||||
<property name="TintColor" value="0, 0, 0"/> -->
|
||||
|
||||
<!-- СВОЯ МОДЕЛЬ. ВКЛЮЧЕНА 2026-09-10 вместе с бандлом Resources/necroknife (2.19 МБ,
|
||||
собран Unity 2022.3.62f2 в batch-режиме; внутри necroKnifePrefab.prefab, три меша
|
||||
boneShiv_LOD0/1/2, текстуры boneShiv_d/_n и материал necroKnife.mat - бандл
|
||||
самодостаточный, проверено по составу).
|
||||
|
||||
ВНИМАНИЕ: в бандле сейчас ТЕСТОВЫЙ вид - ярко-красный материал с эмиссией. Это
|
||||
проверка трубы, а не финальная модель. Красный выбран потому, что ванильный нож
|
||||
бежевый и по нему не отличить, загрузился наш бандл или подставилась ваниль;
|
||||
эмиссия - потому что TintColor ниже стоит 0,0,0, и если игра множит тинт на
|
||||
материал нашего меша, красный альбедо ушёл бы в чёрный и тест ничего бы не показал.
|
||||
Настоящая текстура рисуется поверх _private/Extracted/boneShiv_d.png после того,
|
||||
как труба подтвердится.
|
||||
|
||||
Синтаксис: "#" - грузить из бандла, "@modfolder(NecromancerTome):" - путь от
|
||||
корня этого мода, "?" отделяет путь к префабу ВНУТРИ бандла. Форма собрана из
|
||||
двух подтверждённых кусков: ваниль пишет "#Entities/Trees?SnakeweedPrefab.prefab"
|
||||
(Data/Config/blocks.xml), а поддержка "@modfolder:" лежит в Assembly-CSharp.
|
||||
Живым примером форма не проверена - первый тестовый бандл с кубом её подтвердит
|
||||
или опровергнет, до того как рисовать текстуру.
|
||||
|
||||
necroknife - имя AssetBundle, заданное префабу в Unity (инспектор, нижняя строка
|
||||
AssetBundle); necroKnifePrefab.prefab - имя префаба ВНУТРИ бандла. Оба должны
|
||||
совпасть с тем, что реально собралось, иначе предмет останется без модели молча.
|
||||
Сборка - Mods/_NecromancerTome_private/tools/UnityEditorScripts/BuildNecroBundles.cs.
|
||||
|
||||
ФОРМА ПОДТВЕРЖДЕНА ЖИВЫМ ПРИМЕРОМ 2026-09-10: с этой строкой тестовый красный
|
||||
нож появился в руке. Значит и запись работает, и бандл из папки мода читается,
|
||||
и Standard-шейдер из Unity 2022.3.62f2 игра отрисовывает. Больше не гипотеза -
|
||||
этой же формой можно подключать любые следующие свои модели.
|
||||
|
||||
necroknife - имя AssetBundle, заданное префабу в Unity; necroKnifePrefab.prefab -
|
||||
имя префаба ВНУТРИ бандла. Оба должны совпасть с тем, что реально собралось, иначе
|
||||
предмет останется без модели молча. Пересборка - меню NecromancerTome -> Ctrl+Shift+B
|
||||
либо batch: Unity.exe -batchmode -nographics -quit -projectPath <проект>
|
||||
-executeMethod NecroKnifeSetup.SetupAndBuild. Игру после каждой пересборки
|
||||
перезапускать: моды и их бандлы читаются только при старте.
|
||||
|
||||
Геометрия остаётся ванильной, меняются материал и текстура, поэтому HoldType,
|
||||
посадка в руке и анимации от базового ножа продолжают подходить без правок. -->
|
||||
<!-- <property name="Meshfile" value="#@modfolder(NecromancerTome):Resources/necroknife?necroKnifePrefab.prefab"/> -->
|
||||
<property name="Meshfile" value="#@modfolder(NecromancerTome):Resources/necroknife?necroKnifePrefab.prefab"/>
|
||||
|
||||
<!-- MOD SLOTS ADDED 2026-09-07 (user request: "добавь в нож слоты для
|
||||
модификаций... модификации там будут особые, именно для ножа
|
||||
@@ -1263,7 +1288,39 @@
|
||||
same reasoning as every other hand-drawn icon in this mod (Dog/Insect summon
|
||||
books, etc.) - don't recolor finished art. -->
|
||||
<property name="CustomIcon" value="NecromantsBlood"/>
|
||||
<property name="TintColor" value="60, 0, 10"/>
|
||||
|
||||
<!-- СВОЯ БАНКА С КРОВЬЮ, 2026-09-10 (указание: «берём чай из золотарника, и жёлтое
|
||||
заменяем на кровавый цвет, с фиолетовыми оттенками»).
|
||||
|
||||
Заодно чинится расхождение текста и модели: описание предмета
|
||||
(resourceNecromancerBloodDesc) с самого начала говорит «Банка, наполненная кровью
|
||||
самого некроманта», а наследуемый medicalBloodBag показывает
|
||||
@:Other/Items/Misc/sackPrefab.prefab - обычный мешок. Банка вернее и по механике:
|
||||
рецепт и так требует пустую банку (recipes.xml, NecromancerBloodPatch.cs).
|
||||
|
||||
ПОЧЕМУ НЕ ХВАТИЛО ТИНТА - ПРОВЕРЕНО В ИГРЕ. Сначала пробовали дёшево, без бандла:
|
||||
ванильный префаб чая плюс TintColor. Проверка 2026-09-10 показала, что банка
|
||||
осталась чаем из золотарника - тинт предмета на этот меш НЕ ПОДЕЙСТВОВАЛ ВООБЩЕ.
|
||||
У шейдера Game_EntityTintMaskSSS выигрывает собственный _Color материала (у чая
|
||||
жёлтый, 166,133,37), и свойство предмета его не перебивает. Поэтому TintColor здесь
|
||||
не задаётся совсем: он ничего не даёт и только вводил бы в заблуждение.
|
||||
|
||||
И по сути: кровь отличается от чая не цветом, а тем, что она непрозрачная, тёмная и
|
||||
густая, с плёнкой на стекле. Поэтому жидкость ПЕРЕРИСОВАНА по яркости, а не
|
||||
перекрашена множителем - генератор _private/tools/make_necroblood_textures.py.
|
||||
|
||||
HoldType 3 - хват банки вместо 45 (мешок), Material Mglass - стекло вместо ткани
|
||||
(звук удара и осколки при разбитии). Без них банка держалась бы как мешок.
|
||||
|
||||
ЧТО СМОТРЕТЬ ГЛАЗАМИ. Материал собран на встроенном Standard в режиме Fade: родной
|
||||
шейдер переиспользовать нельзя, AssetRipper выгрузил шейдеры заглушками. У Standard
|
||||
альфа текстуры - это прозрачность, поэтому она задана осознанно: стекло
|
||||
полупрозрачное, жидкость плотная. Банка должна читаться как стекло с густой кровью,
|
||||
а не как матовый сосуд. -->
|
||||
<property name="Meshfile" value="#@modfolder(NecromancerTome):Resources/necroblood?necroBloodPrefab.prefab"/>
|
||||
<property name="HoldType" value="3"/>
|
||||
<property name="Material" value="Mglass"/>
|
||||
|
||||
<property name="EconomicValue" value="0"/>
|
||||
</item>
|
||||
</append>
|
||||
|
||||
Reference in New Issue
Block a user