LoadingScreenOverlay: Ken-Burns фон (CSS pan+zoom) + 4 стиля (ken-burns/static/
parallax/particles) + карточка-композиция (cover/название места/автор/verified-SVG).
Стартовый экран при входе в Play (showStartupLoadingScreen из enterPlayMode +
поля проекта loadingScreen.* + serialize/deserialize). API game.loading.
setBackground/isVisible/onHide + расширенный show. UI редактора: секция
«Стартовый экран входа (Ken Burns)». Вики g5 #62 + статья. Тест-игра 2713.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
game.fx.autoMobFloaters(true) — включает облачка урона над NPC при любой потере
HP (NpcManager.damage). NpcManager.damageByMesh — оружие (бластер/меч) наносит
урон скриптовым NPC (weapons.setOnHit → npcManager.damageByMesh). Связка:
выстрел бластера → урон NPC → авто-floater «-N» над целью.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
FloaterManager.js: object pool (30 billboard-планов с DynamicTexture), tween
подъём+fade+покачивание, crit pop-scale, цвета damage/crit/heal/mana/miss,
стек одинаковых по stackKey (×N), комикс-стиль (BAM!/KAPOW!/POW! на звезде).
API game.fx.damageFloater(position, value, opts) — position {x,y,z} или ref/
'player'. Интеграция: tick в render-loop, resetRuntime при stop. Тест-игра
«Тренировочный полигон» id=2676.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Leaderstats: HUD-таблица top-right (blur, сортировка по primary, топ-10,
подсветка me, flash-инкремент). API game.leaderstats.define/set/add/get/
onChange + me.* (format number/time/short). LeaderstatsManager.js.
Достижения: toast справа (4 редкости + звук + очередь, slide-in/out), кнопка-
кубок слева-снизу → страница grid (locked grayscale+замок, hidden=?, прогресс-
бар). API game.achievements.define/unlock/has/bindToStat/setButtonVisible/
openPage. bindToStat(id, stat, {gte/lte/eq}) — авто-unlock по лидерстату.
Сохранение unlocked в localStorage по проекту. AchievementsManager.js.
Интеграция: оба менеджера в BabylonScene (tick leaderstats в Play, resetRuntime
при stop, serialize/load в project_data scene.leaderstats/achievements). worker-
API + GameRuntime cmd-обработчики + мост leaderstats.onChange→worker (globalEvent
leaderstatsChange) для bindToStat. Плеер пока НЕ портирован (по плану).
Тест-игра «Сбор монет с достижениями» id=2616 (is_test): поляна + 30 монет +
3 стата + 5 достижений (3 через bindToStat).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1+2) Враг с HP / волна врагов: радиус удара 3.5 (NPC останавливался на
followGap=2.5, урон-чек d<2.5 не срабатывал). Добавлена анимация атаки —
R15Animator.attack (выпад рукой), npc.setAttacking, NpcManager.setAttacking.
3) Ключ исчезает при подборе: scene.setVisible теперь парсит ref ('primitive:N')
— obj.visible=false слал {ref} без kind/id, поэтому ключ не пропадал.
4) Машина — остаётся рантайм vehicle:car (особенность транспорта).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1) Дверь по коду: красивая составная дверь (полотно+рамка+кодовая панель),
поле ввода появляется ТОЛЬКО когда игрок в радиусе 6м (onTick по дистанции).
2) game.self.setLabel/clearLabel добавлены (кит «Метка с именем» падал
'setLabel is not a function').
3) Плитка «Готовые механики» в тулбоксе считает киты динамически
(GAMEPLAY_KITS.length), а не хардкод «12».
4) Консоль: ошибки/логи скриптов привязаны к источнику — справа строки
кликабельная ссылка «📄 имя скрипта», открывает скрипт в редакторе
(_log прокидывает scriptId/scriptName).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1) scene.setColor теперь принимает {ref} (obj.color=hex), не только {id}.
Светофор переключал цвета через obj.color, но ref игнорировался → не работал.
2) Грядка: добавлен obj.scale (scene.setScale → mesh.scaling). Урожай после
сбора исчезает, растёт за 5с (scale 0→1) и зреет цветом красный→зелёный,
при полном размере снова собирается.
3) Кит «HP-бар» теперь сам прячет стандартный HUD HP (setHpVisible false).
Новый кит «Скрыть стандартный HUD HP» — отдельно прячет дефолтную полосу.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Партия 1 из TOOLBOX_KITS_FROM_WIKI.md:
- Батут (пружина) — onTouch → setVy(20) подброс вверх.
- Лента ускорения — onTouch → x2 скорости на 3с.
- Портал-телепорт — пара порталов, onTouch → teleport ко второму.
- Исчезающая платформа — onTouch → через 1с пропадает, через 3с возвращается.
- Дверь по кнопке E — onInteract → дверь уезжает вниз/возвращается.
game.self расширен: setVisible(vis) / setCollide(can) (нужны для исчезающей
платформы). Все скрипты прошли синтаксис-проверку (new Function).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- game.self.rotate(ry)/rotateY(ry) добавлен в worker (слал scene.rotate с
ref объекта-носителя). Кит «Вращающийся объект» падал 'game.self.rotate is
not a function' каждый кадр в onTick — теперь крутится.
- upsertScript принимает name; вставка кита даёт скрипту имя = название кита
(раньше в дереве был сырой id script_mq03...). Ручное создание скрипта тоже
даёт «Скрипт N» / «Скрипт объекта N» вместо id.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Процедурный gradient-skybox без внешних текстур: купол-сфера с ShaderMaterial
(градиент верх→горизонт→низ + солнечный диск + дымка), low-poly горы на
горизонте, billboard-облака с дрейфом, атмосферный туман, звёзды.
Пресеты: clear-summer-day / lowpoly-roblox / cloudy / sunset / starry-night /
space. Плавный fadeTo между пресетами (анимация цветов купола в tick).
game-API (студия): game.scene.setSkybox/setClouds/setFog,
game.scene.skybox.fadeTo/setSunDirection. Сериализация неба в project_data.
Тик облаков/перехода работает и в редакторе (превью).
Плеер пока НЕ портирован (по указанию — сначала проверка в студии).
Тест-игра «Небесная демка» id=2541 (dev-режим is_test=true, не в ленте).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Живое 3D-меню как в топ-играх Roblox: cinematic-камера облетает витрину,
патч-ноуты, логотип, кнопка ИГРАТЬ, музыка, блок управления.
- game.mainMenu.show/hide/setCamera/setPatchNotes/onShow/onPlay/onHide
- 4 режима камеры: cinematic(waypoints)/orbit/static/preset-cuts поверх camera.cutscene
- зацикливание облёта через onCutsceneDone (камера не вылетает за сцену)
- game.player.setInputBlocked экспортирован в worker + handler в runtime
- passthrough scene.mainMenu в toJSON/load
- вики g5 #60 guide-garage, тест-игра «Гараж Босса» id 2434 (GLB-машина Kenney)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Движок: PlacementManager (тень-превью формой воксельной модели за курсором,
снап к сетке, стопка, проверка зоны и баланса, поворот R/колесо, ПКМ/Esc),
ShopInventoryUi (магазин-слоты, авто-серые при нехватке валюты); проводка
game.placement.* и game.inventoryUi.* в worker/GameRuntime/BabylonScene.
Попутные фиксы:
- TerrainManager: backFaceCulling=false — воксели не просвечивают (видна была
задняя грань сквозь переднюю);
- KubikonEditor: guard от потери userModels/scripts при частичной загрузке
(terrain догрузился, модели/скрипт нет → автосейв затирал) — критичный
фикс защиты данных для ВСЕХ игр;
- Hotbar: пустой инвентарь не показывает панель (глобальное правило);
- MinimapOverlay: миникарта только по флагу игры (не авто на больших картах);
- cleanup usermodel-инстансов при Stop.
Вики: карточка #58 + статья-урок «Мой завод» (g5 Разбор готовых игр),
openProjectId=2345, скриншоты залиты на прод.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Баг: стрелка-указатель game.fx.pointer не переключалась на следующую цель —
при касании цель не менялась, стрелка не выключалась.
Первопричина (две движковые проблемы):
1. findOne(x).onTouch(...) не существовал: Instance-proxy не имел методов
касания, движок ловил touch только объектов со скриптом-target/триггеров.
2. Race: скрипт исполняется синхронно в init, а sceneSnapshot приходил позже
(rAF) → findOne() на старте = null → подписки onTouch молча не вешались.
Фикс:
- Instance-proxy: + onTouch/onUntouch/onClick → шлёт inst.watchTouch{ref}.
Worker: _instTouchHandlers + маршрут instTouch/instUntouch/instClick по ref.
- GameRuntime: handler inst.watchTouch/watchClick → _watchedTouchRefs;
routeInstEvent(ref,type); сброс в teardown.
- BabylonScene._detectTouchEvents: блок watched-объектов (AABB по ref, rising/
falling edge → routeInstEvent), _refToTarget(ref)→{kind,id},
_touchState.clear() в enterPlayMode.
- Первичный snapshot сцены передаётся прямо в init
(ScriptSandbox.setInitialScene → worker заполняет _sceneIndex до userFn) →
findOne работает в синхронном теле скрипта на старте.
Проверено: телепорт игрока по 3 целям игры 333 — стрелка переключается
red-cube→blue-sphere→gold-chest, на финале удаляется.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1) Билборд (Магазин апгрейдов, ID=1906): текст и иконки отрисовывались
зеркально из-за того что BILLBOARDMODE_ALL разворачивает FRONT-сторону
plane так что мы видим back-side с зеркальным UV. mesh.scaling.x=-1
игнорируется billboardMode. Решение: отключить billboardMode, вместо
него каждый кадр в onBeforeRenderObservable ставим mesh.rotation.y =
atan2(dx,dz) + PI — front смотрит на камеру → UV рисуется правильно.
2) Autosave перезаписывал реальный проект пустой стартовой сценой при
reload страницы (баг #1893, #1905 — оба перетёрты). Добавил
sceneLoadingRef guard в doSave: пока sceneLoading=true, autosave
запрещён.
3) Запрет публикации без обложки — фронт (alert + open Settings) и бэк
(400 thumbnail_required если pd.thumbnail < 100 байт).
4) Scripting API:
- шорткат: game.scene.spawn('billboard',...) вместо
'primitive:billboard' (применяется ко всем примитивам)
- проброс template/face/content/elements в scene.spawn для билбордов
- PrimitiveManager.updateInstance — поддержка billboardOpts patch'а
5) Тест-игра 'Магазин апгрейдов' ID=1906 — 4 shop-item билборда +
banner + shop-purchase кнопка 'Сбросить апгрейды' + HUD рубликов.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Задача 01 из 1 - Неделя 4/ЗАДАЧИ РУБЛОКС. P0-приоритет: без таблиц
с кнопками невозможны симуляторы, тайкуны, фермы.
Новое:
- engine/BillboardUiManager.js — 4 пресета (shop-item, shop-purchase,
banner, sign), 18 иконок, DynamicTexture-рендер, UV-hit-test
- PrimitiveTypes: новый тип 'billboard' в категории 'gameplay'
- PrimitiveManager: case billboard в _createMeshForType (Plane), init
через applyToMesh, billboardOpts в updateInstance
- BabylonScene: PointerEventTypes-handler для кликов с _isPlaying-чеком
и pointer-lock поддержкой
- GameRuntime: команды billboard.set/update/onClick, callback через
sandbox.sendEvent('billboardClick')
- ScriptSandboxWorker: пространство game.billboard.{set,update,onClick}
- BillboardEditorModal.jsx — модалка с живым canvas-превью, 8 готовых
градиентов + кастомные пикеры, дропдаун из 18 иконок
- InspectorPanel: кнопка 'Редактировать табличку…' для billboard-примитива
- KubikonEditor: проброс модалки через onEditBillboard prop
- Icon.jsx: SVG prim-billboard
Два режима ориентации: 'camera' (BillboardGui-аналог, всегда смотрит
на игрока) и 'fixed' (SurfaceGui-аналог, прикреплён к поверхности).
Клик-детекция через ray-pick → UV → пиксели текстуры → поиск кнопки
по AABB; работает с пиксельной точностью даже при повороте камеры.
Документация: RUBLOX_STUDIO_FUNCTIONS.md раздел 1.25.
Тестовая игра 'Магазин апгрейдов' (4 таблички + банер + HUD) — МИН
соберёт в студии drag-n-drop'ом.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Большой консолидирующий коммит после поднятия studio.rublox.pro (28 мая 2026).
Содержит изменения которые делались в процессе подготовки прод-окружения:
Фиксы импортов после выноса из minecraftia:
- Массовая замена путей ../../components → ../components (40+ файлов в src/community/, src/admin-preview/)
- Замена ../KubikonEditor/ → ../editor/, ../KubikonStudio/ → ../community/, ../AdminPreview/ → ../admin-preview/
- API.js скопирован из минки целиком (было 8 экспортов, стало 312)
- Добавлены PLAYER_URL, MyButton_1, недостающие компоненты
- Заменены require() на статические ES-imports в BabylonScene, PrimitiveManager, GameRuntime (Vite не поддерживает CJS require)
Структура ассетов:
- public/kubikon-templates/ → public/assets/kubikon-templates/
- public/kubikon-learn/ → public/assets/kubikon-learn/
- (код искал в /assets/, файлы лежали без /assets/)
Навигация роутов внутри студии:
- /kubikon-studio/docs → /docs (90+ навигационных вызовов sed-replaced)
- /kubikon-editor/X → /edit/X, /kubikon/play/X → /play/X, /kubikon/gd/X → /gd/X
UI:
- Новый компонент StudioHeader (61px, как в минке) + копия favicon
- WithHeader wrapper в App.jsx для всех страниц кроме fullscreen-редактора/плеера
- SSO ticket-flow в AuthContext (auto-redeem #ticket= при загрузке)
- Тёмная тема карточек игр в ВИКИ (фон #1c2231 вместо #fff, картинка впритык)
Документация:
- docs/ONBOARDING.md — путь нового контрибьютора от нуля до PR
- docs/TUTORIAL_ADD_SCRIPT_API.md — как добавить game.* API
- API_USAGE.md — список эндпоинтов backend
- README в подпапках engine/, engine/terrain/, engine/voxel/, engine/robloxterrain/, engine/types/
.gitignore:
- public/wiki/ исключён (73МБ PNG, будут на CDN отдельной задачей)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>