<!-- MANAGED BY sync_project_docs.py -->

Дев-лог S&Lumberjack — 18 мая 2026

Сегодня были два больших обновления ассетов от другого разработчика. Кодовая часть не менялась — весь фокус был на подготовке к полному solo QA и приведении ресурсных префабов и деревьев в порядок.

---

Массовое обновление деревьев и игрового персонажа

Ночью была залита большая нормализация tree prefabs: структура JSON была приведена к единому формату у большинства деревьев от T1 до T9. Это «наведение порядка в файлах» — gameplay деревьев не менялся, но теперь все prefabs имеют согласованную внутреннюю структуру.

Параллельно — небольшой фикс для игрового персонажа: LumberjackPlayer.prefab получил SleepThreshold на Rigidbody и потерял несколько неиспользуемых ссылок.

Также добавлены новые UI иконки для потери гномов, денег, перков, ресурсов и иконки станции продажи. Это задел под будущие экраны.

---

Ресурсные pickup-объекты T4–T9 теперь выглядят правильно

Вечером пришёл второй коммит от prefab-разработчика: все pickup-ресурсы с T4 по T9 получили уникальные 3D-модели вместо placeholder wood.vmdl. Коллайдеры тоже приведены в соответствие с формой объекта — стали сферические вместо прямоугольных.

Примеры: Ледяная смола (T4) → frosty_liquid.vmdl, Яд (T5) → rotten_berries.vmdl, Гриб (T5) → mushroom.vmdl, Болотная кора (T5) → swamp_bark.vmdl.

Итоговое покрытие: 47 из 50 ресурсных prefabs теперь имеют уникальную 3D-модель. Остались 3 T10 предмета, которые пока без специфичных моделей.

---

Материалы деревьев обновлены

Три материала — large_palm, small_palm, thin_pine — были регенерированы: добавлено правильное отсечение прозрачных краёв (alpha test), плавность (translucency) и настройки освещения. Это должно убрать визуальные артефакты у пальм и сосен.

---

Деревья T3/T4 и часть T5

В рамках того же обновления откорректированы деревья T3 (все 4 варианта), T4 (все 4 варианта), T5 (crying_tree, dead_tree, dried_tree, thin_pine) и T6 small_palm: scale, коллайдеры, нормализованный формат. Tree generation и drop-логика этих деревьев не менялись — это визуальная и структурная работа.

---

Что напоминают из прошлой сессии

Все code-only исправления с предыдущей сессии (казино, гномы, туториал, события, баланс топоров) по-прежнему ждут runtime-подтверждения. Ни один из них не проходил solo QA после применения.

В коде исправлено:

  • Казино: UI теперь должен обновляться у клиентов, двойной звук убран, cooldown 3 секунды.
  • Гномы: покупка второго гнома больше не обнуляет накопленные ресурсы.
  • Туториал: подсказка [E] Поговорить должна появляться только в 150 единицах от NPC.
  • События: раз в 30 минут, длятся 10 минут.
  • Баланс топоров: явные таблицы цен, урона и апгрейдов для T1–T10.
  • Solo QA checklist: 18 разделов, готов к прохождению.

---

Что не проверено

Ни одного runtime-теста с последней сессии не проводилось. Следующий шаг — запустить игру и пройти по Docs/qa/SOLO_FULL_QA_CHECKLIST_2026-05-17.md, раздел 19. Это покроет:

  • canonical drops от T1/T2 деревьев;
  • визуальную проверку новых 3D-моделей ресурсов;
  • все code-only фиксы: казино, гномы, туториал, события, баланс топоров.

До получения результатов solo QA новую функциональность не добавляем.

---

Казино — Phase 1 реализована

Реализована первая фаза полного переделки казино.

Что изменилось в коде:

  • Деньги игрока и все значения ставок/выигрышей теперь могут хранить числа до 10 миллиардов. Это было необходимо: ставка на самом крутом аппарате — 1 миллиард, а выигрыш с джекпотом умножается в 10 раз. Без этого числа просто переполнялись бы.
  • Аппарат теперь знает свой номер (1–20) и сам берёт ставку из лестницы: машина 1 = 500$, машина 20 = 1 000 000 000$.
  • Таблица выплат полностью переписана под новые правила: дробные множители (×0.25, ×0.5, ×1 и т.д.), пара Семёрок ничего не платит, тройка Семёрок — джекпот ×10.
  • Добавлена функция форматирования сумм: 1 000 показывается как «1K», 1 000 000 — «1M», 1 000 000 000 — «1B».
  • Логи казино теперь включают номер машины и мультипликатор выигрыша.

Сборка прошла чисто: 0 ошибок, 0 предупреждений.

Внешний вид экрана казино не менялся — это Phase 2. Расстановка 20 машин в сцене — задача для другого разработчика.

---

Экран казино переделан

Экран каждого аппарата теперь показывает только самое важное.

Что изменилось с точки зрения игрока:

  • Когда подходишь к машине — видишь ставку и подсказку «Прокрутить за X$».
  • Когда крутишь — на экране появляется твоё имя и «крутит...».
  • После результата — «✅ Игрок выиграл +750$», «✅ Игрок вышел в ноль» или «❌ Игрок проиграл -750$». Другие игроки тоже видят это на экране машины.
  • Если денег не хватает — экран показывает «Нужно X$» вместо обычного приглашения.
  • Таблица символов и шансов с экрана убрана — места стало больше, текст читается с расстояния.

Крупные суммы форматируются: 500, 1K, 2.5K, 1M, 1B. Физические барабаны крутятся как прежде.

---

Звук казино — подготовка к синхронизации

Сделана техническая основа для синхронизации звука и барабанов. Каждый аппарат теперь умеет воспроизводить звук прокрутки мгновенно при нажатии рычага — сразу после того как ставка принята.

Барабаны настроены останавливаться последовательно: первый на 0.9 секунды, второй на 1.6 секунды, третий точно на 2.3 секунды от начала — там, где должен заканчиваться звук прокрутки. Звук выигрыша или проигрыша всегда играет только после остановки всех барабанов, а не в начале.

Звуковые файлы теперь используются по умолчанию из кода: CasinoSpin.sound, CasinoLose.sound, CasinoWin.sound. Назначать SpinSoundPath в настройках аппарата больше не нужно, если используется стандартный звук.

---

Казино — hotfix ставок, звуков и символов

Исправлен баг, из-за которого аппараты могли продолжать показывать и списывать старую ставку вместо настройки конкретной машины.

Теперь ставка считается в одном месте:

  • MachineIndex=1..20 берёт ставку из лестницы, если DefaultSpinCost=0.
  • DefaultSpinCost > 0 задаёт ручную ставку для конкретного аппарата.
  • Экран аппарата, проверка денег, списание, выплата и логи используют одну и ту же фактическую ставку.

Также разделены звуки: прокрутка играет сразу после успешной ставки, проигрыш — только после результата через CasinoLose.sound, выигрыш — только после результата через CasinoWin.sound. Дополнительно скорректирована привязка Ромашек и Сосулек между физическим барабаном и логом, но это обязательно нужно подтвердить runtime-тестом в Editor.

---

Казино — исправлена выплата по видимой комбинации

Исправлен баг, из-за которого на экране и в логе могла быть видна пара или тройка, но аппарат всё равно считал проигрыш.

Теперь выигрыш считается по той же комбинации, которую игрок видит на барабанах и в [CASINO] combo. Обычные пары и тройки снова должны платить по таблице выплат: например, пара Шишек даёт ×0.5, пара Яблок ×1.5, пара Гномов ×3, тройка Гномов ×5.

Правило Семёрок не менялось: пара Семёрок ничего не платит, тройка Семёрок остаётся джекпотом ×10.

Лог результата стал подробнее: теперь он показывает rawReels, displaySymbols, match, matchSymbol, multiplier и payout, чтобы runtime-проверку можно было сделать прямо по консоли.

---

Казино — физические барабаны привязаны к baked face map

После исправления выплат обнаружилась отдельная визуальная проблема: физические 3D барабаны могли показывать одни символы, а лог и выплата считали другие. Например, визуально могла быть пара Семёрок, но лог видел пару Сосулек.

Пользователь подтвердил настоящий порядок граней baked-модели: Гном, Пень, Ромашка, Сосулька, Семь, Яблоко, Дерево, Шишка. Код теперь переводит каждый логический символ в этот физический face index явно, а не пытается угадать его через общий offset.

Порядок результата на экране и в логе остаётся физически слева направо: левый барабан, средний, правый. Настройки Drum1FaceOffset, Drum2FaceOffset, Drum3FaceOffset и инверсия вращения остались только как тонкая калибровка; дефолтный DrumFaceOffset теперь 0. Это не меняет шансы, выплаты, ставки, net-result или UI.

Лог результата теперь дополнительно показывает visualFaces, physicalMap, drumOffsets и drumDirections, чтобы за несколько спинов проверить: физический барабан, [CASINO] combo, UI и payout говорят об одном и том же символе.

---

Казино — результат теперь показывает чистую прибыль или убыток

Исправлено отображение результата, когда аппарат возвращает часть ставки, но меньше самой ставки. Раньше любой payout > 0 выглядел как победа: например, ставка 1 000$ и возврат 250$ показывались зелёным выигрышем, хотя игрок фактически терял 750$.

Теперь экран показывает чистый итог:

  • если payout - bet > 0, это победа и показывается +X$;
  • если payout - bet == 0, это «Вышел в ноль»;
  • если payout - bet < 0, это проигрыш и показывается -X$.

Экономика выплат не менялась: ставка всё так же списывается перед спином, а payout всё так же возвращается игроку после результата. Изменилась только player-facing классификация, цвет результата, финальный звук и лог.

Лог результата теперь включает net и economyResult, чтобы спорные случаи вроде bet=1000 payout=250 net=-750 сразу читались как проигрыш.

---

Решение по казино

Код казино принят как рабочий для текущего этапа. Gameplay, выплаты, ставки, net-результат и звуки работают корректно. Известная визуальная проблема — несовпадение символов физических 3D-барабанов с тем, что пишется в лог — зафиксирована как отложенная задача полировки. Возвращаться к ней будем отдельно, когда придёт время.

Внешний вид игрока и модель топора

Реализована синхронизация внешнего вида персонажей и визуальной модели топора в руках.

**Что изменилось с точки зрения игрока:**

  • В кооперативе каждый игрок теперь видит других со своей одеждой из Steam-аккаунта, а не с одеждой наблюдателя.
  • Когда покупается новый топор — модель в руках персонажа меняется сразу: деревянный топор, каменный, железный, стальной, затем различные варианты пил.
  • После сохранения и перезапуска игры топор остаётся правильным.

**Как это устроено:** Dresser-компонент с настройкой «одежда от сетевого владельца объекта» уже был в системе — теперь он явно активируется при спавне. Модель топора определяется по уровню топора, который уже синхронизировался между всеми игроками.

---

Деревья больше не плавают

Исправлена старая проблема: деревья в лесу спавнились на одной и той же высоте, из-за чего на неровном ландшафте одни деревья висели в воздухе, а другие уходили в холм.

Теперь при каждом размещении дерева выполняется «прощупывание» поверхности сверху вниз. Дерево ставится точно туда, где луч касается земли. Если поверхность не найдена или уклон слишком крутой — позиция пропускается.

В консоли можно видеть: [TREEGEN] action=GENERATE spawned=N skipped_snap=M — сколько деревьев встало на место и сколько было пропущено. При нормальном ровном ландшафте пропусков быть не должно.

В Inspector на объекте TreeGenerator появились настройки группы Terrain: включить/выключить привязку к земле, высота старта луча, смещение основания, максимальный уклон.

---

Казино — 20 аппаратов в сцене

В конце дня другой разработчик расставил 20 игровых автоматов в сцене. Теперь каждый аппарат можно подойти и крутить. Также были добавлены все три звуковых файла казино — звук прокрутки, звук выигрыша и звук проигрыша. Старый совмещённый звук «по умолчанию / проигрыш» удалён.

Параллельно в prefab игрового персонажа были назначены ссылки на компоненты: теперь одежда персонажа автоматически берётся из Steam-аккаунта владельца, а топор в руках будет показывать правильную модель в зависимости от купленного тира.

Ландшафт также был немного подправлен разработчиком.

Следующий шаг

Solo QA pass — открыть сцену, пройти по Docs/qa/SOLO_FULL_QA_CHECKLIST_2026-05-17.md, проверить: деревья стоят на поверхности, казино работает (20 машин, звуки), одежда и топор синхронизируются в co-op. Не начинать новые фичи до результатов QA.

---

Итог рабочего дня

Рабочий день закрыт. Весь код скомпилирован без ошибок, история коммитов очищена. Активных незакрытых code-side задач нет — всё ждёт runtime-подтверждения.

**Завтра:** запустить solo QA и co-op QA, не начинать новые фичи до результатов тестирования.