<!-- 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, не начинать новые фичи до результатов тестирования.