Кровавый камень: бесконечный заряд браслета
Эндгейм-версия расходника Пространственного браслета: то же место в слоте, что у
Кровавой сферы, но не тратится вовсе. Кода менять не пришлось - только конфиги.
ЗАОДНО ЭТО ПОЧИНКА УЖЕ ОТГРУЖЕННОГО ТЕКСТА. Сообщение о пустом слоте
(braceletSpatialVaultNoMod) и описание браслета обещают игроку "кровавую сферу
ИЛИ кровавый камень" на всех 13 языках с 15.09. Пока камня не было, оба текста
отправляли за предметом, которого в игре не существует.
СОВМЕСТИМОСТЬ СЕЙВОВ - ПЕРВОЕ, ЧТО ПРОВЕРЕНО. resourceBloodStone - НОВОЕ имя, в
существующих сейвах его нет, значит нет и ни одного стака, который читался бы по
другой байтовой раскладке. Это ровно то условие, нарушение которого в e362c62
убило персонажа: ItemValue.Read/Write гейтят блок модификаций одним условием
!(itemClass is ItemClassModifier), и класс предмета определяет раскладку каждого
стака в сейве. Камень заведён новым предметом, а не переводом существующего -
тем же решением, что и Кровавая сфера. Добавление нового <item_modifier>
раскладку уже записанных стаков не меняет: айди новых предметов дописываются в
name->id мэппинг сейва, байты старых стаков остаются как были.
БЕСКОНЕЧНАЯ ПРОЧНОСТЬ СДЕЛАНА ОТСУТСТВИЕМ СТРОК, А НЕ БОЛЬШИМ ЧИСЛОМ. У камня
сознательно нет ни ShowQuality, ни DegradationBreaksAfter, ни effect_group с
DegradationMax - сравнить со сферой, у которой все три есть. SpendCharge
(SpatialVaultPickupPatch.cs) списывает прочность только у модификации, чьё имя
равно ChargeItemName ("resourceBloodSphere"); камень под условие не попадает,
цикл делает continue, его UseTimes не трогает никто. Большой DegradationMax был
бы хуже: неподвижная полоска прочности бесполезна, а при MaxUseTimes == 0 она
рисуется ПОЛНОЙ, то есть забытая пассивка выглядела бы как "всё работает".
Три места в коде сверены на то, что камень пройдёт весь путь:
1. Гейт пустого слота в Begin - это !_bracelet.HasMods(), то есть "в слоте
что-нибудь есть", а НЕ "есть сфера по имени". Камень гейт проходит. Это был
главный риск правки: искал бы гейт сферу по имени, камень не работал бы.
2. SpendCharge вызывается ПОСЛЕ SetBlockRPC(..., Air) и bag.AddItem, а его
результат только логируется - ветки "не заплатил -> откажи" нет. Блок с
камнем уходит в хранилище, в логе "took ... into the vault for 0 of charge".
3. Ветка max <= 0 в SpendCharge камня не касается: до неё доходят только
предметы, прошедшие проверку имени.
ФАЙЛЫ
Config/item_modifiers.xml - новый item_modifier resourceBloodStone,
installable_tags="necroBracelet", свой modifier_tags="necroBraceletStone".
Extends="modGeneralMaster" param1="CustomIcon" - НЕ resourceRockSmall: с ним
приехали бы Action0 ThrowAway и ThrowableDecoy, и камень можно было бы метать
как отвлекающий (на сфере эта ошибка уже была и была исправлена). Вид в руке -
HoldType 40 плюс все три меша rock_smallPrefab плюс TintColor "220, 30, 45", как
у сферы и трёх камней мода. CustomIcon="BloodStone", без CustomIconTint:
иконка своя, рисованная, лежит в обеих папках атласа с 15.09.
Config/recipes.xml - рецепт на химстанции, craft_area="chemistryStation",
tags="learnable,chemStationCrafting,necroNecromancyApprentice": 50 праха зомби,
20 костей, 4 обычной крови, 1 кровь некроманта. Все четыре имени проверены по
файлам. Цена выше, чем читается по списку: крафт самой крови некроманта снимает
90% текущего ХП.
Config/progression.xml - камень добавлен в unlock_entry третьего display_entry
(unlock_level="2000", unlock_tier="1"). Это только строка в панели скилла;
открытие рецепта делает тег. 2000 здесь и 2000 у RecipeTagUnlocked обязаны
совпадать, иначе замок на панели разойдётся с доступностью рецепта.
Config/Localization.csv - два ключа, resourceBloodStone и
resourceBloodStoneDesc, 13 языков; ключей стало 135. Названия камня взяты из уже
переведённого braceletSpatialVaultNoMod, так что сообщение об отказе и имя в
инвентаре совпадают слово в слово. braceletSpatialVaultDesc дополнено на всех 13
языках: камень не тратится. Файл переписан через csv-модуль, round-trip без
правок даёт побайтово тот же файл - кавычки и CRLF остальных строк не поехали.
ОПИСАНИЯ. README.md, SITE_DESCRIPTION.html и NEXUS_DESCRIPTION.bbcode доведены
до текущего состояния мода: сфера и камень добавлены в таблицы тиров и в список
арсенала, у браслета сказано, что забор блоков питается зарядом в слоте,
счётчик ключей 130 -> 135. Заодно снято утверждение "весь контент проходит тесты
в игре" - оно перестало быть верным: расход сферы в игре подтверждён, камень в
игру ещё не грузился.
НЕ ПРОВЕРЕНО В ИГРЕ: камень целиком. Всё выше - сверка по файлам и по
декомпиляции. Сценарий проверки в BACKLOG.md; главное, на что смотреть, -
отсутствие полоски прочности у камня в слоте и "for 0 of charge" в логе.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
896501dcd8
commit
5a512260cc
@@ -28,12 +28,12 @@
|
||||
|
||||
| Тир | Порог | Что открывается |
|
||||
|---|---|---|
|
||||
| Адепт | сразу | Камень духов, Нож некроманта, Синий портальный камень, Пирамида духов |
|
||||
| Адепт | сразу | Камень духов, Нож некроманта, Синий портальный камень, Пирамида духов, Кровавая сфера |
|
||||
| Адепт (доп.) | 20 зомби | Пространственный браслет |
|
||||
| Адепт (доп.) | 30 / 60 / 100 / 300 зомби | Моды ножа: Слёзы мертвеца, Пир падальщика, Могильный покой, Тёмное чутьё |
|
||||
| Подмастерье | 500 зомби | Свиток девиации |
|
||||
| Подмастерье (доп.) | 1400 / 1700 зомби | Моды ножа: Хватка мертвеца, Мёртвая буря |
|
||||
| Ученик | 2000 зомби | Призыв зомбособаки, Жуки Властелина, Призыв зомбогрифа |
|
||||
| Ученик | 2000 зомби | Призыв зомбособаки, Жуки Властелина, Призыв зомбогрифа, Кровавый камень |
|
||||
| Некромант | 3000 зомби | Призыв зомбомедведя, Призыв зомбоволка, Свиток банши |
|
||||
| Мастер | 5000 зомби | Чёрный портальный камень |
|
||||
|
||||
@@ -67,6 +67,14 @@
|
||||
круглым индикатором, что и у разбора верстака. Мир на это время обесцвечивается. Не поддаются
|
||||
повреждённые блоки, контейнеры с содержимым, территория торговца и неразрушимое вроде дна мира —
|
||||
каждый отказ со своим сообщением. Силовая атака прерывает утаскивание и открывает хранилище.
|
||||
Утаскивание питается зарядом в слоте модификаций браслета — с пустым слотом обычная атака
|
||||
отказывает.
|
||||
- **Кровавая сфера** — заряд браслета. 500 прочности, каждая секунда утаскивания блока тратит
|
||||
единицу; опустевшая сфера рассыпается. Доступна с самого начала и делается без верстака, по две
|
||||
за раз, из крови некроманта и праха зомби.
|
||||
- **Кровавый камень** — тот же слот, но не тратится вовсе: эндгейм-замена сфере. Открывается на
|
||||
2000 упокоенных и варится на химической станции из праха зомби, костей, обычной крови и крови
|
||||
некроманта.
|
||||
- **Консервные банки** (пустая / с речной водой / с кипячёной) — расходный цикл вместо
|
||||
одноразовых банок: наполняются водой, кипятятся прямо на костре без кастрюли, выпиваются, банка
|
||||
возвращается пустой. Речная вода из банки может вызвать дизентерию, как обычная мутная вода;
|
||||
@@ -117,7 +125,7 @@
|
||||
|
||||
**13 языков полностью:** русский, английский, немецкий, испанский, французский, итальянский,
|
||||
японский, корейский, польский, португальский (Бразилия), турецкий, китайский упрощённый и
|
||||
традиционный. Все 130 ключей `Config/Localization.csv` заполнены, пустых ячеек нет.
|
||||
традиционный. Все 135 ключей `Config/Localization.csv` заполнены, пустых ячеек нет.
|
||||
|
||||
## Установка
|
||||
|
||||
@@ -133,13 +141,16 @@
|
||||
блоке обычная атака утаскивает его туда через десять секунд плюс секунда за каждый блок
|
||||
расстояния, с обесцвечиванием мира на время ожидания (оно же теперь висит и на каналах обоих
|
||||
порталов). Не поддаются повреждённые блоки, контейнеры с содержимым, территория торговца и
|
||||
неразрушимое вроде дна мира. Плюс все торговцы стали чёрно-белыми, полупрозрачными и матовыми.
|
||||
неразрушимое вроде дна мира. Питается это зарядом в слоте браслета: **Кровавая сфера** тратится по
|
||||
единице прочности за секунду и в конце рассыпается, **Кровавый камень** с третьего грейда не
|
||||
тратится вовсе. Плюс все торговцы стали чёрно-белыми, полупрозрачными и матовыми.
|
||||
|
||||
Предыдущая версия 1.0.1 закрывала первый баг-репорт с Nexus: содержимое браслета больше не
|
||||
пропадает после выхода из игры (хранилище сохраняется в файле игрока, рядом с рюкзаком).
|
||||
|
||||
Весь заявленный контент реализован и проходит тесты в игре. Из запланированного не сделана
|
||||
только часть фирменных звуков. Текст описания для сайта (RU + EN) — в
|
||||
Весь заявленный контент реализован. Заряд браслета — самая свежая часть: расход Кровавой сферы
|
||||
проверен в игре, Кровавый камень пока нет. Остальное тесты в игре проходит. Из запланированного не
|
||||
сделана только часть фирменных звуков. Текст описания для сайта (RU + EN) — в
|
||||
`SITE_DESCRIPTION.html` (разметка блоков WordPress). Полная техническая история разработки и текст финала лежат рядом с модом
|
||||
в `BACKLOG.md` и `FINAL_TEXT.md` — в репозиторий они не входят (спойлеры и внутренняя кухня).
|
||||
|
||||
@@ -173,12 +184,12 @@ rest - its own counter, its own mechanic. Five tiers, each opening part of the a
|
||||
|
||||
| Tier | Threshold | What unlocks |
|
||||
|---|---|---|
|
||||
| Adept | from the start | Spirit Stone, Necromancer's Knife, Blue Portal Stone, Pyramid of Spirits |
|
||||
| Adept | from the start | Spirit Stone, Necromancer's Knife, Blue Portal Stone, Pyramid of Spirits, Blood Sphere |
|
||||
| Adept (extra) | 20 zombies | Spatial Bracelet |
|
||||
| Adept (extra) | 30 / 60 / 100 / 300 zombies | Knife mods: Tears of the Dead, Scavenger's Feast, Grave's Repose, Dark Sense |
|
||||
| Journeyman | 500 zombies | Scroll of Deviation |
|
||||
| Journeyman (extra) | 1400 / 1700 zombies | Knife mods: Dead Man's Grip, Dead Storm |
|
||||
| Apprentice | 2000 zombies | Summon Zombie Dog, Beetles of the Lord, Summon Zombie Griffin |
|
||||
| Apprentice | 2000 zombies | Summon Zombie Dog, Beetles of the Lord, Summon Zombie Griffin, Blood Stone |
|
||||
| Necromancer | 3000 zombies | Summon Zombie Bear, Summon Zombie Wolf, Banshee's Scroll |
|
||||
| Master | 5000 zombies | Black Portal Stone |
|
||||
|
||||
@@ -212,7 +223,14 @@ rest - its own counter, its own mechanic. Five tiers, each opening part of the a
|
||||
workbench pickup uses. The world drains to black and white while it runs. Damaged blocks,
|
||||
containers with anything inside, a trader's ground and indestructible things like the world's
|
||||
floor all refuse, each with its own message. The power attack interrupts the pull and opens the
|
||||
rift instead.
|
||||
rift instead. The pull runs on a charge in the bracelet's mod slot - with that slot empty, the
|
||||
regular attack refuses.
|
||||
- **Blood Sphere** - the bracelet's charge. 500 points of durability, one spent per second of a
|
||||
pull; emptied, the sphere crumbles. Available from the very start and hand-crafted without a
|
||||
workbench, two at a time, from Necromancer's Blood and Zombie Ash.
|
||||
- **Blood Stone** - the same slot, but never spent at all: the endgame replacement for the sphere.
|
||||
Opens at 2000 zombies put to rest and is brewed at a chemistry station from zombie ash, bones,
|
||||
ordinary blood and Necromancer's Blood.
|
||||
- **Tin cans** (empty / with river water / with boiled water) - a reusable cycle instead of
|
||||
single-use jars: fill them with water, boil it right on a campfire without a pot, drink, and the
|
||||
can comes back empty. River water from a can can cause dysentery, like any murky water; boiled
|
||||
@@ -262,7 +280,7 @@ deliberately not retold here: a README gets read before the playthrough.
|
||||
## Localization
|
||||
|
||||
**13 languages, complete:** Russian, English, German, Spanish, French, Italian, Japanese, Korean,
|
||||
Polish, Brazilian Portuguese, Turkish, Simplified and Traditional Chinese. All 130 keys in
|
||||
Polish, Brazilian Portuguese, Turkish, Simplified and Traditional Chinese. All 135 keys in
|
||||
`Config/Localization.csv` are filled in, with no empty cells.
|
||||
|
||||
## Installation
|
||||
@@ -280,15 +298,18 @@ Version 1.1.0 - the Spatial Bracelet learned to take blocks straight into the va
|
||||
regular attack on a block and it is pulled in after ten seconds, plus one more per block of
|
||||
distance, with the world draining to black and white for the wait (which now also covers both
|
||||
portal channels). Damaged blocks, containers with anything inside, a trader's ground and
|
||||
indestructible things like the world's floor all refuse. Every trader is now rendered in black and
|
||||
white, half-transparent and matte.
|
||||
indestructible things like the world's floor all refuse. The pull runs on a charge in the
|
||||
bracelet's mod slot: the **Blood Sphere** spends a point of durability per second and crumbles when
|
||||
empty, while the **Blood Stone** from the third grade is never spent at all. Every trader is now
|
||||
rendered in black and white, half-transparent and matte.
|
||||
|
||||
The previous version, 1.0.1, closed the first bug report from Nexus: the bracelet's contents no
|
||||
longer disappear after leaving the game (the storage is saved in the player's own file, next to
|
||||
the backpack).
|
||||
|
||||
All the announced content is implemented and passes testing in game. Of what was planned, only
|
||||
part of the mod's own sound effects is missing. The description text for the website
|
||||
All the announced content is implemented. The bracelet's charge is the newest part: the Blood
|
||||
Sphere's spending is confirmed in game, the Blood Stone is not tested yet. Everything else passes
|
||||
testing in game. Of what was planned, only part of the mod's own sound effects is missing. The description text for the website
|
||||
(RU + EN) is in `SITE_DESCRIPTION.html` (WordPress block markup). The full technical history of
|
||||
development and the text of the finale sit next to the mod in `BACKLOG.md` and `FINAL_TEXT.md` -
|
||||
they are not part of the repository (spoilers and back-of-house).
|
||||
|
||||
Reference in New Issue
Block a user