From a6174ba74972c7c2a9be61a62cc19070d300df58 Mon Sep 17 00:00:00 2001 From: aibrash Date: Wed, 28 Oct 2026 17:41:06 +0500 Subject: [PATCH] =?UTF-8?q?README:=20=D1=81=D0=BE=D1=81=D1=82=D0=BE=D1=8F?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5,=20=D0=BF=D0=B0=D0=BC=D1=8F=D1=82=D1=8C=20~3?= =?UTF-8?q?00=20=D0=9C=D0=91,=20=D1=82=D0=B5=D0=BB=D0=B5=D1=84=D0=BE=D0=BD?= =?UTF-8?q?=20=D0=BD=D0=B5=20=D0=BF=D0=BB=D0=B0=D0=BD=D0=B8=D1=80=D1=83?= =?UTF-8?q?=D0=B5=D1=82=D1=81=D1=8F,=20=D0=B1=D0=BB=D0=B8=D0=B6=D0=B0?= =?UTF-8?q?=D0=B9=D1=88=D0=B8=D0=B5=20=D0=B8=D0=B4=D0=B5=D0=B8,=20=D0=B6?= =?UTF-8?q?=D1=83=D1=80=D0=BD=D0=B0=D0=BB=20=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 5.5 Claude-Session: https://claude.ai/code/session_01WxZo3ekR5m1af437Qzqwc1 --- README.md | 57 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 29 insertions(+), 28 deletions(-) diff --git a/README.md b/README.md index cc3c2c9..0374618 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,9 @@ | | Что | |---|---| -| ✅ | Хаб с порталами; карты **Песочница**, **Backrooms** и **Parkour**; выход из карт обратно в хаб | +| ✅ | Хаб с порталами; карты **Песочница**, **Backrooms**, **Parkour** и **Race**; выход из карт обратно в хаб | +| ✅ | **Race** — гонка на ногах до 8 игроков (отсчёт, ворота по порядку, места, итоги, рекорд, песня на старте); **Parkour** — подъём по мегабашне с чекпоинтами, лазерами, дождём и песней; обе карты — мрачная киберпанк-антиутопия, свет запечён в Blender (см. «Карты и порталы», «Карта Race», «Заметки для будущего меня») | +| ✅ | Вкладка в браузере занимает **~300 МБ** (замер владельца, окт 2026) | | ✅ | Карты качаются отдельными пакетами `.pck` при первом входе в портал (экран загрузки с прогрессом) | | ✅ | Мультиплеер: выделенный сервер, игроки видят друг друга, **комнаты по картам** (в разных картах не пересекаются) | | ✅ | Преследователи: **камень** и **Верити**; общие для всех игроков комнаты, ходят по навмешу, «видят» только вблизи или в поле зрения, могут потерять игрока | @@ -23,8 +25,9 @@ | ✅ | Паркур: спринт, рывок, подкат, **присед (C)**, бег по стенам, прыжок от стены, двойной прыжок, подтягивание на уступ, зум (ЛКМ) | | ✅ | Управление **не зависит от раскладки** (русская и любая другая): действия `InputMap` на физические клавиши | | ✅ | Деплой: CI из `grid-world` на сайт; скрипты экспорта, dev-сервера, тестов без окна, выкладки сервера | -| ⏳ | Телефон: **пока не поддерживается** (нет сенсорного управления, не проверена производительность) — план в разделе «Дорожная карта» | -| ❌ | Чата, ников, настроек (чувствительность мыши, громкость), меню паузы | +| ❌ | Телефон: **не планируется** (решение владельца, окт 2026). Сенсорного управления нет, мобильных текстур нет | +| ⏳ | **Ники и текстовый чат** — следующая задача (см. «Дорожная карта») | +| ❌ | Настроек (чувствительность мыши, громкость), меню паузы | | ❌ | Серверных проверок (антиспуфинг позиций, античит): сервер только пересылает | | ❌ | Сохранения прогресса, аккаунтов | | ❌ | Автоматических тестов в CI (есть боты для ручного прогона, см. «Тесты без окна») | @@ -314,7 +317,7 @@ ssh root@192.168.10.110 'journalctl -u my-world -f' # лог: «+ игрок - **Окружение:** в рендерере Compatibility **объёмный туман не работает** (удалён из песочницы). SSAO и glow работают (неоновое свечение), оставлены. В Backrooms включён обычный туман (`Environment.fog_*`), он работает. -- **Память:** вкладка в браузере показывала около **1,6 ГБ**, хотя на десктопе сцена занимает ~115 МБ. Причина не найдена (нужны данные Chrome: `Shift+Esc`). +- **Память:** раньше вкладка показывала около 1,6 ГБ; в окт 2026 владелец замерил **~300 МБ** (после замены капсул на модель со скелетом, новых карт и всех правок этой сессии). Что именно помогло — неизвестно (гипотезы прежних замеров: несжатые текстуры, HDR-небо, `.ogg` целиком в памяти). Проблему считаем снятой; повторно измерять при добавлении тяжёлого контента (небо Parkour/Race ~6 МБ в видеопамяти каждое). Гипотезы: рост WASM-памяти, несжатые текстуры, HDR-небо 2k, `.ogg`, распаковываемый целиком. Измерения с тех пор не повторялись. - **Материал Верити** — две поверхности: жёлтая основа и диск с лицом (текстура свечения на белой основе). Белая основа на ярком свету даёт бледность, поэтому `emission_energy` делает материал чисто светящимся (чёрная основа). @@ -357,35 +360,23 @@ ssh root@192.168.10.110 'journalctl -u my-world -f' # лог: «+ игрок ## Дорожная карта -### Цель: играть с телефона +### Телефон — не планируется -Сейчас игра рассчитана на клавиатуру и мышь. Что нужно сделать, по порядку: +Владелец решил, что телефон не нужен (окт 2026). Если когда-нибудь вернёмся: нужны сенсорный стик и зона обзора (ввод уже сведён к действиям `InputMap`, достаточно `Input.action_press`), ориентация и полноэкранный режим по касанию, +экран «Нажми, чтобы начать» (аудио в браузере без жеста не стартует), мобильные текстуры ETC2/ASTC (`vram_texture_compression/for_mobile`; удвоит пакеты — делать отдельными `*.mobile.pck`), отключение SSAO/glow и `scaling_3d_scale` 0,6–0,75, +восстановление после ухода вкладки в фон (`submit_map` заново). Сначала измерить память и FPS на реальном устройстве. -1. **Сенсорное управление.** Основа уже есть: ввод игрока сведён к действиям `InputMap`, поэтому сенсорные кнопки просто вызывают - `Input.action_press/release("move_forward", strength)` и т. д. Нужна сцена `ui/touch_controls.tscn` (CanvasLayer): виртуальный стик слева (движение), - зона перетаскивания справа (обзор), кнопки прыжка, спринта (переключатель), приседа (удержание), рывка, зума. Показывать только на сенсорных устройствах - (`DisplayServer.is_touchscreen_available()` и feature-теги `web_android`/`web_ios`). В `player/player.gd` обзор сейчас считается из `InputEventMouseMotion` при захваченной мыши — - добавить обработку `InputEventScreenDrag`; зум по ЛКМ заменить действием `zoom`. -2. **Ориентация и экран:** принудительно альбомная (`display/window/handheld/orientation`), полноэкранный режим по первому касанию (браузеры требуют жест), - масштаб интерфейса (надписи «ПОЙМАЛ!», экран загрузки сейчас рассчитаны на десктоп), безопасные зоны. -3. **Звук:** браузер не стартует `AudioContext` без касания. Добавить экран «Нажми, чтобы начать» перед хабом (заодно решает и предупреждение на десктопе). -4. **Текстуры (главное узкое место):** мобильные GPU не поддерживают S3TC/BPTC, которыми сейчас сжаты текстуры (`vram_texture_compression/for_desktop=true`, `for_mobile=false`). - Нужно включить `for_mobile` (ETC2/ASTC) — это **удваивает размер пакетов**, если держать оба формата в одном `.pck`. Варианты: отдельные пакеты `*.mobile.pck`, - выбираемые по feature-тегу, и уменьшенные текстуры (27 текстур Backrooms по 2К — тяжёлые). -5. **Производительность и память:** на телефоне отключить SSAO/glow (в Compatibility они дорогие), уменьшить `Viewport.scaling_3d_scale` (0,6–0,75), - меньше деревьев и птиц, теней нет у деревьев уже сейчас. Мобильный Safari убивает вкладки около 1–1,5 ГБ, а на десктопе она уже занимала 1,6 ГБ — **сначала разобраться с памятью** - (см. выше). Проверить размер `.wasm` и распаковку (на сотовой сети 40 МБ чувствительны; `index.wasm` уже жмётся gzip). -6. **Сеть:** вкладка уходит в фон и замирает — владельца преследователей сервер уже передаёт другому через 3 с; клиенту при возвращении стоит - показывать «переподключение» и заново входить в комнату (`submit_map`), если соединение сброшено. -7. **Тестирование:** режим устройства в Chrome DevTools; на реальном телефоне — `tools/serve_web.py` по локальной сети (`http://:8080`, привязать сервер к `0.0.0.0`). - Минимальная планка: 30 FPS в хабе и песочнице на среднем Android. +### Ближайшее -### Другое +- **Ники и текстовый чат** (выбор владельца, окт 2026): ник игрока вместо «Игрок N» над призраком, в итогах гонки и в HUD; строка чата (физическая клавиша, работает на любой раскладке) в комнате карты. Потребует новых RPC → выкладка клиента и сервера вместе, Ctrl+F5 игрокам. -- Ники по выбору игрока, текстовый чат, анимация приземления, свои руки/тело от первого лица, настройки (чувствительность, громкость), меню паузы. +### Идеи (оценка независимого консультанта, окт 2026; не обязательства) + +- **Parkour/Race:** режим «время и призрак» (запись лучшего забега, показ призраком), старт гонки по таймеру при зависшем «готов» (сейчас один не нажавший R блокирует всех), развилки Race с большим выигрышем, спектейт для мёртвых, приватные комнаты по ссылке. +- **Мувсет и ощущение:** анимация приземления, звуки шагов/приземления/подката/бега по стене/рывка (самый заметный эффект при малых затратах), настройки и меню паузы (чувствительность, громкость, FOV). +- **Контент и социальное:** игрок в роли преследователя, голос по близости, подбираемые предметы/двери, гроза со вспышкой молнии на картах, кастомизация персонажа. +- **Инструменты:** номер версии протокола (чтобы старый клиент получал «обнови страницу»), автопроверка пакетов в CI, одна команда «собрать карту», экран credits (CC-BY Backrooms VR). - Серверные проверки (антиспуфинг позиций), если игроков станет много. -- Новые карты (добавляются по инструкции выше) и новые преследователи. -- Автоматизировать прогон ботов в CI и проверку «пакет не пустой» после экспорта. ## Персонаж @@ -400,6 +391,16 @@ ssh root@192.168.10.110 'journalctl -u my-world -f' # лог: «+ игрок - **Выкладка сервера:** `ghost.gd` лежит и на сервере, где модели нет, поэтому модель грузится `load()` внутри `setup()`, а не `preload`. - Изменить позы: правь функции анимаций в скрипте, перезапусти его в Blender, заново экспортируй GLB и импортируй в Godot. +## Журнал изменений (окт 2026) + +Сделано одной серией работ (хронологически): +1. **Персонаж:** модель киберниндзя со скелетом (752 треугольника, 14 анимаций, IK ног) вместо капсул; цвет свечения от id игрока; свой персонаж спрятан от своей камеры. Сальто камеры при двойном прыжке делалось и убрано по просьбе. +2. **Подтягивание на уступы** починено (не работало от ~2 м на всех картах), замеры мувсета и тестовые сцены в `tools/test/`. +3. **Parkour:** подъём по мегабашне (крыши, каньон, башня, лазерный зал, контейнеры, спираль, вершина), запечённый свет, панорама неба, мокрый блеск, дождь, туман, песня; мрачная антиутопия. +4. **Race:** гонка на ногах (трасса 633 м из Blender, три развилки, 8 ворот), правила и HUD, новые сетевые события, песня на «СТАРТ!»; сделано агентами, проверено двухклиентным тестом на локальном сервере. +5. **Инфраструктура:** пресеты экспорта карт (с `include_filter` для файлов, грузимых по строке), проверка пакетов «по существу», выкладка сайта и сервера по порядку из «Деплой». +6. **Замеры:** вкладка в браузере ~300 МБ. + ## Лицензии и авторство - Модель карты Backrooms — «Backrooms VR», автор VTX (https://sketchfab.com/VTX_car), **CC-BY 4.0** (`maps/backrooms/model/CREDITS.md`).