squad-proto/docs/22-loot.md
z.kirill a8e19cd956 Материалы и мастерская: вещь можно доработать (M27)
Аффиксы сделали находку решением, но решением одноразовым: выпало как
выпало. Материалы дают второй способ получить нужное — не «повезло», а
«доработал». Пять материалов, пять операций, экран WORKSHOP.

Главное правило экономики — материал добывается ТОЛЬКО В СВОЕЙ ПОЛОСЕ:
био-ядра с плотских этажей, крио с мёрзлых. Это единственная причина
возвращаться на средние глубины, когда рекорд ушёл вниз; без полос весь
контент, кроме последнего акта, умирает в день прохождения.

Материалы — валюта, а не предметы: не занимают ячеек, не весят, в схроне
не лежат. Но теряются как добыча: зачисляются только при эвакуации.

Три уточнения операций, каждое против конкретного обхода: перековка
меняет только значения (иначе это новый бросок предмета в обход
редкости), прививка не ставит уже стоящий тег (иначе «+урон» шесть раз),
возвышается случайный аффикс (иначе все предметы сойдутся к одному).

--tool craft поймал, что материалы бесплатны. С твари падало по её
danger, и вылазка на восьмидесятом этаже приносила тысячу ядер при цене
доводки вещи в шестьсот: 0.6 вылазки на предмет вместо восьми. Правило
заменено на «одно ядро с мелочи, два с крупной» — стало 6.2.

Сам инструмент при этом тоже считал неверно: брал доход из бюджета
опасности этажа, хотя на этаж влезает не больше MAX_LEVEL_SPAWNS тварей.
Бюджет уходит не в количество тварей, а в их силу, и доход упирается в
потолок расстановки с сорокового этажа. Глубина даёт не количество
материалов, а качество предметов — и вместе с ним цену доводки.

Залом замерен на тысяче попыток: рассыпалось 11.6% при заявленных 12%,
плата снимается всегда, слот теряется всегда. «У меня трижды не
рассыпалось» не доказательство ни в какую сторону.

Пункт меню WORKSHOP проверен --ui-check — той самой проверкой, которая
появилась вчера из-за пункта UPGRADES, молча закрывавшего игру.

Формат профиля 5: строка mat.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-16 03:07:46 +03:00

255 lines
18 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 22 — Добыча: редкости, аффиксы, артефакты, зачарования
Продолжение [20-gdd.md](20-gdd.md). Боевые формулы — [21-damage.md](21-damage.md).
Правило, из которого всё растёт: **находка должна быть решением, а не
прибавкой**. Предмет, который просто «лучше на 7%», не стоит того, чтобы за ним
идти в темноту, — а идти в темноту и есть игра.
## 1. Редкости
Сделано в M25. Числа ниже — **замеренные** (`--tool drops 1 100`, по 10000
бросков на глубину), а не задуманные:
| Редкость | Аффиксов | D1 | D28 | D55 | D100 |
|---|---|---|---|---|---|
| Обычное | 0 | 96.9% | 67.5% | 38.4% | 12.3% |
| Меченое | 12 | 2.9% | 21.3% | 23.5% | 21.9% |
| Разработка | 34 | 0.1% | 7.1% | 25.1% | 39.6% |
| Реликт | 56 | ~0.01% | 4.1% | 13.1% | 26.2% |
| **Артефакт** | уникальное правило + 2 | — | — | — | — |
Кривая редкости:
```
P(не обычное) = 0.02 + 0.011·d (до 0.88)
```
**Наклон 0.011, а не 0.0075.** В первой редакции этого документа формула и
таблица рядом с ней противоречили друг другу: формула давала на первом этаже
2.7% находок с аффиксами, таблица — 22%. Выбрана формула (первый этаж обязан
быть скучным, [20-gdd.md](20-gdd.md) §1), а наклон поднят так, чтобы сойтись с
таблицей на дне: 12% обычных на сотом этаже. Проверяется инструментом.
Реликт на первом этаже возможен — примерно один на восемь тысяч находок. Это
намеренно не запрещено: тир там всё равно первый, то есть пять рулонов по пять
процентов. Лотерейный выигрыш, а не сломанное начало.
**Артефактов пока нет** — они не «ещё не выкачены», а следующая веха: артефакт
даёт ПРАВИЛО, а не число, и для этого нужны триггеры (on-hit, on-kill), которых
в игре ещё нет.
**Пити на артефакт:** 60 этажей без артефакта → следующий гарантирован. Без
пити распределение даёт игроку без артефакта на восьмидесятом этаже, и это не
«не повезло», а сломанная сессия на двадцать часов.
## 2. Слоты и что в них лежит
| Слот | Что | Личное/общее |
|---|---|---|
| Руки | ствол или клинок | личное |
| Броня | костюм | личное |
| Карман | оберег/фонарь/модуль | личное |
| Сумка | всё остальное | **общее на отряд** |
| Гнёзда артефактов | 1 → 3 по глубине рекорда | общее на отряд |
Гнёзда артефактов открываются рекордом: первое сразу, второе на D40, третье на
D75. Артефакты общие намеренно — они правила, а не снаряжение, и делить их по
бойцам значило бы прятать главное решение сборки в подменю.
## 3. Аффиксы
Аффикс = `тег + тир + рулон`. Тег определяет, ЧТО он даёт; тир — насколько
сильный доступен; рулон — конкретное число в диапазоне тира.
```
доступный тир на глубине: T_max(d) = 1 + floor(d / 12) (до 9)
диапазон тира T: [lo·T^1.35, hi·T^1.35]
цена аффикса в бюджете: cost(T) = 4 + 5·T
бюджет предмета: B(ilvl) = 45 + 2.5·ilvl
```
Из этого следует потолок: на предмете с ilvl 100 бюджет 295, шесть аффиксов
девятого тира стоят 294, седьмой — уже 343. То есть предельная вещь существует
ровно на дне и ровно одна.
**Цифры пересчитаны против первой редакции.** Там стояло `cost = 6 + 4·T` при
`B = 40 + 3·ilvl` и утверждалось то же самое — «шесть и ни одним больше». На
деле влезало восемь (340 / 42 = 8.1), а предельная вещь собиралась уже к
семидесятому этажу. Обещание документа не выполнялось его же арифметикой; это
нашёл `--tool affix`, а не чтение.
Выше по глубине потолок держит бюджет, ниже — счётчик аффиксов: на сороковом
этаже доступен только четвёртый тир, шесть таких стоят 144 при бюджете 145.
Это нормально и не является поломкой: редкость там и обещает не больше шести.
### 3.1. Группы аффиксов
| Группа | Примеры | На чём |
|---|---|---|
| Урон | +% урона, +% стихии, +крит, +критмножитель | оружие |
| Пробитие | +PEN стихии, −сопротивление цели | оружие, карман |
| Стихия | конверсия X% урона в стихию | оружие |
| Статус | +стаки, +длительность, +шанс наложения | оружие, карман |
| Реакция | +% силы реакций, ICD реакции | карман, артефакт |
| Защита | +HP, +броня, +сопротивление, +уклонение | броня |
| Снабжение | +патроны, −вес, +ёмкость, +заряд фонаря | броня, сумка |
| Триггер | on-hit / on-kill / on-hurt эффекты | любое, дорого |
**Правило одной группы.** На предмете не может быть двух аффиксов одной группы
с одинаковым тегом. Иначе «+урон» шесть раз становится единственной правильной
сборкой, и весь остальной список превращается в мусор.
### 3.2. Конверсия стихий
Конверсия — самый важный аффикс в игре, потому что он превращает оружие в
инструмент против конкретного врага:
```
share(KIN) = 1 Σ конверсий, Σ конверсий ≤ 0.85
```
Полностью убрать кинетику нельзя: оружие без физического урона перестало бы
работать по целям, у которых нет сопротивлений вовсе.
## 4. Артефакты
Артефакт не даёт процентов. Он даёт **правило**, которое меняет то, как отряд
играет. Их около 60 к моменту выхода акта VI; ниже — восемь, задающих диапазон.
| Артефакт | Правило | Цена правила |
|---|---|---|
| **Стеклянный кулак** | +140% урона | 60% макс. HP всему отряду |
| **Двойное сердце** | реакции срабатывают дважды | 35% силы реакции |
| **Пепельный ход** | убийство даёт +12% скорости, стак 8 | вне боя стаки сгорают за 2 с |
| **Долг** | павший оперативник встаёт через 20 с | каждое воскрешение 5 макс. HP навсегда |
| **Счётчик Гейгера** | RAD не тратит стаки на реакции | весь отряд получает 3 RAD/сек на этаже |
| **Тихий шаг** | твари замечают на 45% ближе | фонарь садится вдвое быстрее |
| **Заём** | +1 гнездо артефакта | 25% опыта за вылазку |
| **Пустая рука** | оперативник без брони: +90% урона и +50% скорости | без брони |
Каждый артефакт — **сделка**, и ни один не является чистым улучшением. Артефакт
без цены превращается в обязательный предмет: его надевают все и всегда, и одно
гнездо сборки выпадает из игры навсегда.
## 5. Материалы и зачарование
### 5.1. Материалы
Сделано в M27.
| Материал | Откуда | Куда |
|---|---|---|
| Лом | разбитая обстановка, любая глубина | перековка |
| Био-ядро | твари на этажах FLESH, D21+ | прививка, возвышение |
| Крио-ядро | твари на этажах FROST, D36+ | отсечение, возвышение |
| Осколок реактора | твари, D53+ | возвышение |
| Пустотный шлак | твари, D73+ | залом |
Материал добывается только в своей полосе — это и есть причина возвращаться на
средние глубины после того, как рекорд ушёл вниз. Без этого весь контент, кроме
последнего акта, умирает.
Полосы проверяются в `--descend` прямым опросом таблицы: в игре протечка была бы
заметна часов через двадцать, когда выяснилось бы, что возвращаться незачем.
```
плоть на 25 лом 0, био 2, крио 0, осколок 0, шлак 0
сталь на 25 лом 0, био 0, крио 0, осколок 0, шлак 0
мороз на 40 лом 0, био 0, крио 2, осколок 0, шлак 0
```
**Материалы — валюта, а не предметы:** не занимают ячеек, не весят, в схроне не
лежат. Иначе поход за материалами превратился бы в тот же поход с сумкой. Но
теряются они так же, как добыча: заработанное зачисляется только при эвакуации.
С твари падает **одно ядро, с крупной — два**, и это не «сколько она стоит».
Первая версия роняла по её danger, и `--tool craft` показал, что вылазка на
восьмидесятом этаже приносит тысячу ядер при цене доводки вещи в шестьсот:
материалы не стоили ничего, а мастерская из ставки превращалась в кнопку.
### 5.2. Операции
| Операция | Что делает | Цена | Риск |
|---|---|---|---|
| Перековка | заново бросает значения (теги и тиры на месте) | 4 лома × тир | — |
| Прививка | добавляет аффикс НОВОГО тега, если есть бюджет | 2 био × тир | — |
| Отсечение | убирает последний аффикс | 1 крио × тир | — |
| Возвышение | +1 тир СЛУЧАЙНОМУ аффиксу | 3 био + 3 крио × тир, 1 осколок | — |
| **Залом** | +2 тира всем, но на один аффикс меньше | 3 шлака | **12%: предмет рассыпается** |
Три уточнения, каждое против конкретного обхода:
- перековка меняет **только значения**. Меняй она ещё и теги — это был бы новый
бросок предмета, то есть способ обойти редкость: собери шесть слотов на чём
угодно и крути, пока не выпадет нужное;
- прививка не ставит тег, который уже есть: правило «один тег один раз»
руками не обходится;
- возвышается **случайный** аффикс. Выбирай игрок сам, возвышение стало бы
«+1 тир к урону» за фиксированную цену, и все предметы в игре сошлись бы
к одному.
Залом — единственная операция с риском, и он настоящий: предмет исчезает, а
плата снимается всё равно. Замерено на тысяче попыток: **рассыпалось 11.6% при
заявленных 12%**, платят всегда, слот теряется всегда. Проверять это иначе
нельзя — «у меня трижды не рассыпалось» не доказательство ни в какую сторону.
Именно поэтому лучшая вещь в игре всегда чуть хуже, чем могла бы быть, — почти
никто не заламывает то, что собирал двадцать часов. Это и задумано: разрыв между
«хорошей сборкой» и «идеальной» держит лейтгейм живым.
### 5.3. Стоимость полной сборки
Считается инструментом, а не на глаз: `--tool craft 80`.
```
на глубине 80: ядер за вылазку 104, полная доводка вещи 648 ядер
то есть 6.2 вылазок на предмет (в документе заявлено около 8)
```
Доход **упирается в потолок расстановки**: на этаж влезает не больше
`MAX_LEVEL_SPAWNS` тварей, поэтому с сорокового этажа и глубже вылазка приносит
примерно одно и то же. Глубина даёт не количество материалов, а КАЧЕСТВО
предметов — а вместе с ним и цену доводки, которая растёт с тиром. Отсюда и
кривая: вещь сорокового этажа доводится за три вылазки, вещь сотого — за шесть с
лишним.
Первая версия расчёта брала доход из бюджета опасности этажа и завысила его
впятеро: бюджет уходит не в количество тварей, а в их силу.
## 6. Как это не превращается в кашу
Три правила, которые придётся защищать от самих себя при любом расширении:
1. **Ни одного чистого улучшения.** Каждый артефакт — сделка, каждый высокий
тир — вес или риск. Предмет без цены обязателен, а обязательный предмет — это
вырезанный слот.
2. **Бюджет вместо запретов.** Ограничивает арифметика, а не список исключений.
Список исключений разрастается и однажды противоречит сам себе.
3. **Находка — решение.** Если новая вещь не заставляет игрока хоть раз
задуматься «а что снять», её не должно быть в таблице дропа вообще.
## 7. Проверки
| Утверждение | Инструмент | Статус |
|---|---|---|
| кривая редкости: первый этаж скучный, сотый щедрый | `--tool drops 1 100` | есть |
| бюджет пускает ровно шесть высших аффиксов и только на дне | `--tool affix <глубина>` | есть |
| выкатанное доезжает до бойца и до правил урона | `--descend` | есть |
| редкость и рулоны переживают запись профиля | `--descend`, круговой прогон | есть |
| материалов хватает на сборку за ~8 вылазок | `--tool economy` | материалов ещё нет |
| ни один артефакт не является чистым плюсом | ревью-чеклист | артефактов ещё нет |
| TTK не выходит из коридора с лучшими вещами | `--tool ttk --best` | нет |
Проверка «доезжает до бойца» — главная. Механика, которая есть в каталоге, но не
доходит до правил боя, выглядит снаружи как работающая, и на этом уже дважды
попадались вес и стихии ([07-milestones.md](07-milestones.md)). Поэтому в
`--descend` подкладывается карабин с известными рулонами и сверяется всё:
```
аффиксы: урон 12.0 -> 18.0, здоровье 100 -> 140, броня 0.10 -> 0.25, пробитие 0.20
стихии карабина: KIN 1.00 -> 0.60, CRY 0.40, сумма долей 1.000
```
Последнее число тут не украшение: конверсия обязана ПЕРЕВОДИТЬ урон, а не
добавлять седьмую долю сверх единицы. Иначе стихии стали бы каналом наращивания
чисел — ровно тем, чем они не должны быть ([21-damage.md](21-damage.md)).