← Журнал разработки

/ Дневник разработки / S&Lumberjack

Защита обработки сломанного дерева и бревна

Первый проход производительности физики · Подготовка проходов к новым локациям · Первый шаг живой рубки деревьев

Защита обработки сломанного дерева и бревна

Перед дальнейшим развитием живой рубки укреплён существующий цикл разрушения: смертельный удар по дереву и последующее разрушение упавшего бревна теперь имеют явную защиту от повторной обработки. Это важно для будущей кооперативной проверки, где два близких удара не должны приводить к повторному бревну или второму набору ресурсов.

Поведение игрока при этом не расширялось: дерево падает, оставляет пень/бревно или ресурсы по прежним правилам, физика и экономика не менялись. Следующий шаг — отдельный runtime retest обычной рубки и повторных ударов перед любыми новыми structural или physics фазами.

Первый проход производительности физики

Performance overlay показал, что текущая просадка кадров связана прежде всего с физикой, а не с интерфейсом или отрисовкой: около 39.78 ms из примерно 54 ms кадра приходятся на Physics. Поэтому первый проход сфокусирован на объектах мира и коллайдерах.

Стоящие деревья теперь не должны тратить движение rigidbody, пока игрок не срубит их: при ломке прежнее физическое падение включается как раньше. Добавлена ручная команда sl_debug_perf, чтобы в следующем тестовом запуске увидеть количество физических тел, деревьев, дропов, fallen logs и автоматов в одной паре логов.

Проверка source assets показала особенно тяжёлый кандидат для следующей Editor-работы: большой забор содержит сотни dynamic physics parts и используется в сцене многократно. В этом проходе scene/prefab/material assets не менялись, а forced sleep для дропов не включался до проверки падения и magnet pickup в runtime.

Подготовка проходов к новым локациям

Подготовлена точная инструкция для ручной расстановки проходов T2-T10 в мире. Каждый вход должен получить интерактивный gate перед границей зоны и отдельный safety trigger за ним, чтобы персональное открытие доступа оставалось понятным и устойчивым в кооперативе.

Поскольку проход покупается каждым игроком отдельно, общий физический барьер нельзя просто убрать после покупки одним участником: это изменило бы мир и для тех, кто проход ещё не открыл. В первой версии безопаснее использовать читаемый gate/sign и оставить контроль доступа за ZoneTrigger.

Сцена и prefab в этом проходе не менялись. Следующий ручной шаг — разместить gates T2-T10 в Editor; проверка покупки, сохранения и co-op поведения выполняется позже отдельным runtime retest.

Первый шаг живой рубки деревьев

Удары по стоящим деревьям теперь получают короткую визуальную вспышку модели, видимую через сетевой feedback, а звук топора и число урона продолжают работать как раньше. Реакция специально сделана визуальной: она не толкает дерево, не двигает коллайдер и не меняет результат рубки.

Смерть дерева, fallen log и выдача ресурсов не перерабатывались. Физическое падение, частицы щепы и настоящие гномы-лесорубы остаются последующими этапами; перед ними нужен отдельный runtime retest этого feedback в solo и кооперативе.

План Valheim-like рубки деревьев

Подготовлен дизайн-план для более живой рубки деревьев в стиле Valheim. В этом проходе механика не менялась: деревья, дропы, топоры, гномы, сцены и prefab остались как были.

Главное решение — двигаться по фазам. Сначала безопасный feedback удара: звук, лёгкая реакция дерева, частицы и понятные логи. Только после этого стоит стабилизировать смерть дерева как пень + fallen log, затем дать игроку рубить fallen log, и лишь потом включать полноценную controlled physics-версию падающих деревьев.

Отдельно зафиксировано, что будущие настоящие гномы-лесорубы не должны рубить world trees до появления reservation/ownership: иначе в кооперативе можно получить спор за дерево, двойной дроп или непонятного владельца добычи.

Рекомендуемый следующий игровой шаг: Phase 1 — улучшить ощущение удара по дереву без изменения дропа и без нового физического падения.

Гномы v1: фоновая добыча ресурсов

Мастерская гномов теперь честно описывает текущую механику: гномы в v1 добывают WoodLog в фоне, а не генерируют деньги напрямую. Накопленная добыча остаётся персональной для владельца и при сборе добавляется сразу в inventory. В мире не появляется общий pickup, поэтому другой игрок не может забрать результат.

UI мастерской показывает ресурс, скорость в минуту, накопленное количество, количество нанятых гномов, tier мастерской, цену найма и апгрейды. Тексты обновлены на RU/EN/FR, tutorial больше не говорит про денежный passive income.

Механика осталась timer-based и совместимой со старыми сейвами. Отдельно зафиксированы будущие фазы: v2 — косметические анимированные гномы около мастерской; v3 — настоящие host-authoritative woodcutters только после дизайна tree reservation/ownership, защиты от double drops и кооп-синхронизации.

Runtime QA в этом проходе не выполнялся. Нужен отдельный retest: открыть UI, нанять гнома, дождаться накопления, собрать ресурс, проверить save/load и убедиться, что world pickup не создаётся.

Открытие проходов за деньги

Добавлена первая версия персонального открытия локаций. T1 открыт всегда, а проходы T2-T10 игрок покупает за свои деньги. Это не общий прогресс лобби: в кооперативе игрок A может открыть T2, а игрок B останется на своём текущем HighestUnlockedLocationTier, пока сам не оплатит проход.

Цены пока provisional:

| Проход | Цена | | --- | ---: | | T2 | 5 000$ | | T3 | 20 000$ | | T4 | 50 000$ | | T5 | 120 000$ | | T6 | 250 000$ | | T7 | 500 000$ | | T8 | 1 000 000$ | | T9 | 2 000 000$ | | T10 | 4 000 000$ |

Прогресс сохраняется в локальный file-first save и не зависит от облачных Stats. Старые сейвы без нового поля автоматически считаются открывшими T1.

Для мира добавлен code-side LocationUnlockGateComponent: при взгляде на gate он показывает prompt открытия прохода, а по E списывает деньги и отправляет system chat о покупке. Физические gate-объекты и барьеры в сцене пока не расставлялись и не менялись; это отдельная ручная настройка.

Нужен отдельный runtime retest позже: старый save, покупка T2, save/load после покупки и Host+Client проверка персональности unlock.

HUD игрока, name tags и системные сообщения

В левом верхнем углу появился компактный блок идентичности игрока: аватар Steam или fallback LJ, никнейм, деньги, текущий топор с upgrade level и Prestige Points. Деньги теперь находятся в этом блоке, а справа остаётся только компактный индикатор веса.

Name tags над игроками стали информативнее: показывают никнейм, аватар/fallback и метку Host. Локальный игрок по-прежнему не видит собственный tag, но клиенты должны видеть tag хоста с правильным именем после обновления owner-данных.

Добавлена основа системных сообщений в чат. Сейчас сообщения появляются для трёх событий:

  • покупка топора;
  • получение Prestige;
  • крупный выигрыш в казино.

Мелкие события вроде подбора ресурсов, ударов по дереву, продажи и небольших casino wins не отправляются в системный чат, чтобы не создавать spam.

Нужен отдельный runtime retest в solo и Host + Client: проверить HUD, name tags, Host badge, avatar fallback/Steam avatar и одиночные system chat messages.

Локализация туториала и подсказок

Все игровые подсказки взаимодействия и текст диалогов с обучающим NPC теперь переведены на три языка: русский, английский и французский.

Подсказки снизу экрана:

| Действие | RU | EN | FR | | --- | --- | --- | --- | | Рубить | [ЛКМ] Рубить | [LMB] Chop | [LMB] Couper | | Говорить | [E] Поговорить | [E] Talk | [E] Parler | | Лесопилка | [E] Лесопилка | [E] Sawmill | [E] Scierie | | Казино | [E] Крутить рычаг | [E] Pull lever | [E] Tirer le levier |

Диалог NPC (9 тем): рубка, магазин топоров, продажа, лесопилка, гномы, перки, престиж, казино, телега — все строки локализованы.

Видимые руки в first-person (code support)

В LumberjackPlayer добавлено свойство ArmsRenderer. Если в prefab будет назначен второй SkinnedModelRenderer с arms-only Body Groups, он будет автоматически показываться в first-person и прятаться в third-person.

Что нужно сделать в S&box Editor (разработчик prefab):

1. Добавить дочерний GameObject ArmsBody в prefab игрока. 2. Добавить SkinnedModelRenderer — та же модель и скелет, что у Body. 3. В Body Groups показать только группы рук (обычно группа 1+). 4. Назначить этот рендерер в поле LumberjackPlayer → ArmsRenderer.

Пока рендерер не назначен — в логе появится [PLAYER_VIEW] result=SKIPPED reason=MISSING_ARMS_RENDERER при каждом переключении режима.

Магнит ресурсов

Упавшие ресурсы теперь мягко притягиваются к игроку когда тот находится в радиусе 100 единиц. В радиусе 40 единиц ресурс автоматически подбирается. Работает в соло и кооперативе без двойного подбора.

B38 — Идентичность ресурсов Apple / Acorn / AncientCore

Задача B38 закрыта. Краткий итог аудита:

  • Apple (ID=6) и Acorn (ID=7) уже корректно настроены: иконки l1_apple.png / l1_acorn.png, локализация «Яблоко» / «Жёлудь», выдаются T1-деревьями. Ни одно из них не отображается как другой ресурс.
  • HardWood / RareWood — сохранены как legacy alias (отображаются как Шишка / Жёлудь) — без изменений.
  • AncientCore переведён из статуса NEEDS_DESIGN_DECISION в deferred: существует в enum для save-совместимости, корректно отображается как «Древнее ядро» при наличии в инвентаре, не выдаётся через ранние деревья и sawmill. Нужен art-ассет (иконка).

Найденные и исправленные проблемы:

1. В трёх узлах перков (Удача L4, Удача-дерево, Красноречие-монополист) описания использовали сырое имя AncientCore вместо «Древнее ядро» — исправлено в RU/EN/FR. 2. Туториал лесопилки (tutorial.mill.1) ссылался на удалённый рецепт «Смола → Древнее ядро (1500$)» с устаревшей ценой 9$ — заменён на реальный рецепт «Кора (10$) → Шишка (65$)».

UI pass 2 — Perks и Prestige

Perks: правая колонка была полным дублём центральной — убрана. Список бонусов по уровням теперь прямо в центральной панели под карточкой улучшения. Размер узлов уменьшен с 100px до 64px — цепочка перестала вылезать за экран. Все английские строки заменены ключами локализации.

Prestige: исправлена ошибка, которая могла ввести игрока в заблуждение: панель показывала «Прогресс лесопилки» в секции потерь — но Mill при престиже не сбрасывается. Теперь лесопилка в секции «ты сохранишь». Зато топор сбрасывается (до T1) — добавлена соответствующая карточка в «потеряешь». Убрана карточка «Постоянные апгрейды» (такой механики нет в игре). Кнопка престижа при недостатке денег теперь визуально dimmed. Блок «Why Prestige?» удалён — дублировал описание в верхней части.

Добавлены ключи локализации во все три языка (RU/EN/FR): perks.subtitle, perks.available, perks.progress, perks.cost, perks.level_bonuses, prestige.keep.sawmill, prestige.lose.axe, prestige.requirement, prestige.ready, prestige.not_enough. Удалены неточные ключи prestige.keep.perm и prestige.lose.mill.

Сохранение: файл-первичный

Игровой прогресс теперь загружается из локального файла (lumberjack_save.lsv) как первичного источника. Облачные Stats используются как резерв только если файл не найден. Сохранение по-прежнему пишет в оба места одновременно.

Идентичность игрока: HUD, теги, системный чат

В левом верхнем углу теперь постоянная карточка игрока: аватар из Steam (или буквы LJ если нет), никнейм, деньги, текущий топор с уровнем апгрейда и Prestige Points. Это не XP и не отдельный player level — только уже существующие данные прогрессии.

Над другими игроками в кооперативе отображаются теги с никнеймом, аватаром и меткой HOST. Свой собственный тег скрывается — он только мешал бы обзору. Исправлена ошибка, при которой никнейм хоста на первом кадре мог показываться пустым.

Системный чат используется для трёх значимых событий:

  • покупка нового топора;
  • получение Prestige;
  • крупный выигрыш в казино (net ≥ ставка×3 или net ≥ 10 000$).

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

Персональные проходы в локации

Добавлена система открытия проходов. Прогресс строго персональный: если хост прошёл T5, новый игрок в его сессии всё равно начинает с T1 и открывает переходы сам за деньги. T1 доступен бесплатно.

В editor ещё нужно расставить физические ворота и настроить компонент прохода. Код уже умеет показывать prompt, сохранять прогресс и отправлять системное сообщение при успешной покупке.

Пока global/shared unlock для всей команды сразу не реализован — это тема для отдельного обсуждения.

Гномы v1: честная ресурсная мастерская

Уточнена механика гномов. Гномы — фоновые добытчики WoodLog: ресурсы накапливаются по таймеру и при нажатии «Собрать» уходят напрямую в инвентарь. Никаких мировых дропов нет, поэтому другие игроки не могут украсть накопленное.

UI мастерской переписан: теперь честно показывает ресурс, скорость накопления, запас и цены.

Анимированных гномов-дровосеков пока нет — для этого нужна отдельная система резервирования деревьев.

Рубка деревьев: визуальный фидбек и план развития

Создан поэтапный план развития рубки в сторону Valheim-like ощущения. Первая фаза уже реализована: при каждом принятом ударе дерево кратко моргает цветом. Движения дерева, изменения физики и дропов нет — только визуальная реакция.

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