# Артефакты и Адская башня ## Магазин Сидоровича Магазин открывается на вкладке артефактов. Стрелки вверх/вниз выбирают предмет, `E` включает или выключает эффект. Покупка требует двух нажатий `Enter`: первое запрашивает подтверждение, второе оплачивает набор. Смена выбранного предмета отменяет подтверждение. Поддерживается мышь. `Tab` возвращает рубашки, `Esc` — холл. | Артефакт | Цена набора | Зарядов | Эффект | |---|---:|---:|---| | Клевер | 900 | 3 | Возвращает 50% фактической потери раунда, округляя вверх; максимум 10000 | | Подкова | 1800 | 5 | Добавляет 35% чистой прибыли; максимум 5000, минимум 1 при положительной прибыли | | Череп | 3500 | 1 | Отменяет смертельный выстрел в русской рулетке или Buckshot | | Контракт | 4000 | 2 | Добавляет 100% чистой прибыли, максимум 10000; проигрыш тоже расходует заряд | Лимит — 99 зарядов каждого вида. При недостатке денег или превышении лимита набор не покупается даже частично. Заряды не имеют срока действия. Выключенный эффект не расходуется. Контракт несовместим с клевером и подковой: его включение выключает оба эффекта. Череп может работать вместе с контрактом. Возвращённая ставка не считается прибылью. Частичный проигрыш страхуется только на сумму потери. Ничья не расходует денежные эффекты. Клевер и подкова расходуют заряд только при фактическом зачислении. Банк ограничен 1000000000. Режим наблюдателя не расходует инвентарь и не начисляет личные бонусы. ## Адская башня **Банк общий с профилем.** Ставки, проигрыши и выплаты меняют обычный банк; выход не восстанавливает прежнюю сумму. Денежный приз за шестой этаж — 66600, однократно, с общим ограничением банка. Обычные артефакты внутри башни не работают и не расходуются. Вместо них перед стартом и после каждого из первых пяти этажей выбирается одна из трёх временных реликвий. `1`/`2`/`3` берут соответствующую карточку; стрелки влево/вправо и `Enter` выбирают выделенную. Также можно нажать карточку мышью. | Реликвия | Действие | |---|---| | Сердце | Один повтор любого проигранного этажа | | Часы | Два повтора предстоящего этажа; остаток сгорает при переходе дальше | | Патрон | Две отмены смертельного выстрела | | Печать | Дважды удаляет последнюю карту, вызвавшую перебор в блэкджеке; затем ходит крупье | | Око палача | Показывает игроку следующий патрон Buckshot на протяжении забега | | Кошель | Дважды возвращает потерю проигранного этажа, максимум 5000 за возврат | Кошель не даёт дополнительную попытку. При поражении сначала возвращаются деньги, затем расходуются часы соответствующего этажа, затем сердце. Если повторов нет, забег завершается. Ничья в блэкджеке позволяет переиграть без расхода повтора. Предложения: сердце, кошель и ситуационная реликвия. Перед блэкджеком доступна печать, перед русской рулеткой — патрон, перед Buckshot — око, иначе — часы. Заряды остальных реликвий складываются. Выбор нельзя получить повторным нажатием. Все реликвии сбрасываются при победе, окончательном поражении, выходе в холл и начале нового забега. В сохранение они не записываются. Выход во время оплаченного раунда соблюдает правила соответствующей игры: например, монета доигрывает результат, а карточный стол считает незавершённую руку проигранной. Счётчики `СЕР`, `ЧАС`, `ПАТ`, `ПЕЧ`, `ОКО`, `КОШ` показывают остаток реликвий. Внутри игры они находятся сверху, между этажами — снизу. ## Сохранения Именованный профиль: 312 байт. Первые 280 байт сохраняют старый формат и подпись; расширение `ARF2` хранит четыре счётчика, маску включения, версию и контрольную сумму. Старый профиль загружается с пустым новым инвентарём. При смене или создании профиля инвентарь сбрасывается перед загрузкой. Preview-сохранение: 40 байт, версия `C3D4`, маска эффектов и контрольная сумма; старые preview-версии по-прежнему читаются. Контрольные суммы обнаруживают случайное повреждение; это не криптографическая защита от редактирования владельцем компьютера. ## Проверки и ограничения ```powershell python -B tools/tests/check_artifacts.py python -B tools/tests/test_hell_tower_runthrough.py python -B tools/tests/check_casino_actions.py python -B tools/tests/check_hall_expansion.py ``` Для общих тестов нужны Pillow, treys и capstone. Это офлайн-зависимости тестов, не зависимости игры. Игра и все перечисленные эффекты реализованы на MASM x86. Тест артефактов исполняет настоящие процедуры игры, проверяет покупки, лимиты, отключение, чистую прибыль Buckshot, повторные выплаты, реликвии, выходы, сохранения и их повреждение. Снимки UI и отчёт — `build/artifacts/`. Проверяются длины строк карточек и очистка предыдущего кадра. Шестиступенчатый smoke-тест действительно открывает игровые сцены, но подставляет победные исходы. Он **не измеряет вероятность прохождения**. Целевые 40–60% прохождений освоившим правила игроком пока не подтверждены статистикой; полноценная оценка требует серий забегов с указанной стратегией на каждом этаже. Эта переработка добавляет страховку и повторы, но не подменяет случайные исходы.