player/src/engine/ModelTypes.js
МИН 87444ee2c8 Initial public release: Rublox Player v1.0
Open-source web player for Rublox games, dual-licensed under
AGPL-3.0 + Commercial.

Highlights:
- Babylon.js 7 + React 18 + Vite 5 stack
- Self-contained engine (~46k lines): BlockManager, ModelManager,
  PlayerController, ScriptSandboxWorker, MultiplayerSync, 30+ GD
  gamemodes
- Configurable backend via VITE_API_BASE and friends — works against
  staging (dev-api.rublox.pro) out of the box
- Standalone mode (VITE_STANDALONE=true) loads a bundled sample game
  for first-run without any backend
- Full docs: README, ARCHITECTURE, CONTRIBUTING, SECURITY, CHANGELOG
- Lint + format scaffolding (ESLint + Prettier + EditorConfig)
- Legal: LICENSE (AGPL-3.0), LICENSE-COMMERCIAL.md, CLA.md, COPYRIGHT.md
- Issue templates: bug_report, feature_request, security_disclosure

Removed before public release:
- frontend_deploy.py (contained production SSH credentials)
- ~27 admin endpoints (kept in private repo)
- Hard-coded internal URLs and IPs
- All previous git history (clean repo init)
2026-05-27 23:04:04 +03:00

940 lines
103 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* ModelTypes — реестр 3D-моделей (GLB) для Рублокс-редактора.
*
* Все модели — Kenney CC0, лежат в /public/kubikon-assets/models/<pack>/
* где pack ∈ {dungeon, platformer, characters}.
* GLB файл ссылается на ./Textures/colormap.png — поэтому каждый pack лежит
* в своей подпапке со своей колормапой.
*/
const M = '/kubikon-assets/models';
/**
* Создать запись о модели.
* pack — имя подпапки ('dungeon' | 'platformer' | 'characters').
* file — имя GLB без расширения.
*/
const m = (id, name, category, pack, file, opts = {}) => ({
id, name, category,
file: `${M}/${pack}/${file}.glb`,
scale: opts.scale ?? 1,
yOffset: opts.yOffset ?? 0,
...opts,
});
/**
* Создать запись о модели с произвольным URL (вне kubikon-assets).
* url — полный путь от корня сайта, например '/playground-kit/slide.glb'.
*/
const mu = (id, name, category, url, opts = {}) => ({
id, name, category,
file: url,
scale: opts.scale ?? 1,
yOffset: opts.yOffset ?? 0,
...opts,
});
/**
* mc — «compound»-модель из нескольких частей. При постановке создаётся папка
* и каждая part добавляется внутрь.
* id, name, category — как у обычных моделей
* parts: [
* { kind: 'mesh', model: 'id-простой-модели', dx, dy, dz, ry }
* { kind: 'primitive', type: 'cube'|'sphere'|..., sx, sy, sz, color, dx, dy, dz, rx, ry, rz }
* ]
* Координаты dx/dy/dz — смещение относительно центра компаунда; ry — локальный yaw.
*/
const mc = (id, name, category, parts, opts = {}) => ({
id, name, category,
file: null, // нет основного GLB — модель собирается из частей
scale: 1,
parts,
isCompound: true,
...opts,
});
export const MODEL_TYPES = [
// === ПРИРОДА (platformer pack) ===
m('tree', 'Дерево', 'Природа', 'platformer', 'tree', { targetHeight: 1.5 }),
m('tree-pine', 'Сосна', 'Природа', 'platformer', 'tree-pine', { targetHeight: 4 }),
m('tree-pine-small', 'Молодая сосна', 'Природа', 'platformer', 'tree-pine-small', { targetHeight: 2.5 }),
m('tree-pine-snow', 'Снежная сосна', 'Природа', 'platformer', 'tree-pine-snow', { targetHeight: 4 }),
m('tree-snow', 'Снежное дерево', 'Природа', 'platformer', 'tree-snow', { targetHeight: 4 }),
m('flowers', 'Цветы', 'Природа', 'platformer', 'flowers', { targetHeight: 0.6 }),
m('flowers-tall', 'Высокие цветы', 'Природа', 'platformer', 'flowers-tall', { targetHeight: 0.6 }),
m('mushrooms', 'Грибы', 'Природа', 'platformer', 'mushrooms', { targetHeight: 0.6 }),
m('plant', 'Растение', 'Природа', 'platformer', 'plant', { targetHeight: 0.7 }),
m('grass-model', 'Трава', 'Природа', 'platformer', 'grass', { targetHeight: 0.7 }),
m('hedge', 'Куст', 'Природа', 'platformer', 'hedge', { targetHeight: 0.7 }),
m('rocks-platformer','Камни', 'Природа', 'platformer', 'rocks', { targetHeight: 1.5 }),
m('rocks-dungeon', 'Скалы', 'Природа', 'dungeon', 'rocks', { targetHeight: 1.5 }),
m('stones', 'Булыжники', 'Природа', 'dungeon', 'stones', { targetHeight: 0.8 }),
// === ДВЕРИ И ВОРОТА ===
m('door-rotate', 'Дверь', 'Двери', 'platformer', 'door-rotate', { targetHeight: 1.8 }),
m('door-rotate-large', 'Большая дверь', 'Двери', 'platformer', 'door-rotate-large', { targetHeight: 1.8 }),
m('door-open', 'Открытая дверь', 'Двери', 'platformer', 'door-open', { targetHeight: 1.8 }),
m('door-large-open', 'Откр. бол. дверь','Двери', 'platformer', 'door-large-open', { targetHeight: 1.8 }),
m('gate', 'Ворота', 'Двери', 'dungeon', 'gate', { targetHeight: 1.8 }),
// === ЗАБОРЫ (platformer) ===
m('fence-straight', 'Забор', 'Заборы', 'platformer', 'fence-straight', { targetHeight: 1.2 }),
m('fence-corner', 'Угол забора', 'Заборы', 'platformer', 'fence-corner', { targetHeight: 1.2 }),
m('fence-broken', 'Сломанный забор', 'Заборы', 'platformer', 'fence-broken', { targetHeight: 1.2 }),
m('fence-rope', 'Верёвочный забор','Заборы', 'platformer', 'fence-rope', { targetHeight: 1.2 }),
m('fence-low-straight', 'Низкий забор', 'Заборы', 'platformer', 'fence-low-straight', { targetHeight: 1.2 }),
// === МЕБЕЛЬ И ИНТЕРЬЕР ===
m('chest', 'Сундук', 'Мебель', 'dungeon', 'chest', { targetHeight: 1.2 }),
m('barrel', 'Бочка', 'Мебель', 'dungeon', 'barrel', { targetHeight: 1.2 }),
m('crate', 'Ящик', 'Мебель', 'platformer', 'crate', { targetHeight: 1.2 }),
m('column', 'Колонна', 'Мебель', 'dungeon', 'column', { targetHeight: 1.2 }),
m('banner', 'Знамя', 'Мебель', 'dungeon', 'banner', { targetHeight: 1.2 }),
m('flag', 'Флаг', 'Мебель', 'platformer', 'flag', { targetHeight: 1.2 }),
m('sign', 'Табличка', 'Мебель', 'platformer', 'sign', { targetHeight: 1.2 }),
m('ladder', 'Лестница', 'Мебель', 'platformer', 'ladder', { targetHeight: 1.2 }),
m('ladder-long', 'Длин. лестница', 'Мебель', 'platformer', 'ladder-long', { targetHeight: 1.2 }),
m('ladder-broken', 'Слом. лестница', 'Мебель', 'platformer', 'ladder-broken', { targetHeight: 1.2 }),
m('stairs', 'Ступеньки', 'Мебель', 'dungeon', 'stairs', { targetHeight: 1.2 }),
m('wood-structure', 'Дерев. конструкция','Мебель','dungeon', 'wood-structure', { targetHeight: 1.2 }),
m('wood-support', 'Дерев. опора', 'Мебель', 'dungeon', 'wood-support', { targetHeight: 1.2 }),
m('wall', 'Стена', 'Мебель', 'dungeon', 'wall', { targetHeight: 1.2 }),
m('wall-half', 'Половина стены', 'Мебель', 'dungeon', 'wall-half', { targetHeight: 1.2 }),
m('wall-narrow', 'Узкая стена', 'Мебель', 'dungeon', 'wall-narrow', { targetHeight: 1.2 }),
m('wall-opening', 'Стена с проёмом', 'Мебель', 'dungeon', 'wall-opening', { targetHeight: 1.2 }),
m('floor', 'Пол', 'Мебель', 'dungeon', 'floor', { targetHeight: 1.2 }),
m('floor-detail', 'Узорный пол', 'Мебель', 'dungeon', 'floor-detail', { targetHeight: 1.2 }),
// === МЕХАНИЗМЫ (platformer) ===
m('lever', 'Рычаг', 'Механизмы', 'platformer', 'lever', { targetHeight: 1 }),
m('button-round', 'Кнопка круглая', 'Механизмы', 'platformer', 'button-round', { targetHeight: 1 }),
m('button-square', 'Кнопка квадратная','Механизмы','platformer', 'button-square', { targetHeight: 1 }),
m('spring', 'Пружина', 'Механизмы', 'platformer', 'spring', { targetHeight: 1 }),
m('saw', 'Пила', 'Механизмы', 'platformer', 'saw', { targetHeight: 1 }),
m('trap-dungeon', 'Ловушка', 'Механизмы', 'dungeon', 'trap', { targetHeight: 1 }),
m('trap-spikes', 'Шипы', 'Механизмы', 'platformer', 'trap-spikes', { targetHeight: 1 }),
m('trap-spikes-large', 'Большие шипы', 'Механизмы', 'platformer', 'trap-spikes-large', { targetHeight: 1 }),
m('spike-block', 'Шипастый блок', 'Механизмы', 'platformer', 'spike-block', { targetHeight: 1 }),
m('pipe', 'Труба', 'Механизмы', 'platformer', 'pipe', { targetHeight: 1 }),
m('poles', 'Столбы', 'Механизмы', 'platformer', 'poles', { targetHeight: 1 }),
m('bomb', 'Бомба', 'Механизмы', 'platformer', 'bomb', { targetHeight: 1 }),
// === ПРЕДМЕТЫ ===
m('coin', 'Монета', 'Предметы', 'dungeon', 'coin', { targetHeight: 0.6 }),
m('coin-gold', 'Золотая монета', 'Предметы', 'platformer', 'coin-gold', { targetHeight: 0.6 }),
m('coin-silver', 'Серебр. монета', 'Предметы', 'platformer', 'coin-silver', { targetHeight: 0.6 }),
m('coin-bronze', 'Бронз. монета', 'Предметы', 'platformer', 'coin-bronze', { targetHeight: 0.6 }),
m('jewel', 'Драгоценность', 'Предметы', 'platformer', 'jewel', { targetHeight: 0.6 }),
m('star', 'Звезда', 'Предметы', 'platformer', 'star', { targetHeight: 0.6 }),
m('heart', 'Сердце', 'Предметы', 'platformer', 'heart', { targetHeight: 0.6 }),
m('key', 'Ключ', 'Предметы', 'platformer', 'key', { targetHeight: 0.6 }),
m('lock', 'Замок', 'Предметы', 'platformer', 'lock', { targetHeight: 0.6 }),
m('arrow', 'Стрела', 'Предметы', 'platformer', 'arrow', { targetHeight: 0.6 }),
// === ОРУЖИЕ (dungeon) ===
m('weapon-sword', 'Меч', 'Оружие', 'dungeon', 'weapon-sword', { targetHeight: 1 }),
m('weapon-spear', 'Копьё', 'Оружие', 'dungeon', 'weapon-spear', { targetHeight: 1.2 }),
m('shield-round', 'Круглый щит', 'Оружие', 'dungeon', 'shield-round', { targetHeight: 1 }),
m('shield-rectangle', 'Прямоуг. щит', 'Оружие', 'dungeon', 'shield-rectangle', { targetHeight: 1 }),
// === ВРАГИ (со встроенным AI) ===
// Эти объекты имеют поведение в Play-режиме: AI, спавн, урон.
// gameplay содержит description для tooltip и defaultParams — настройки
// которые можно менять в Inspector.
m('zombie', 'Зомби', 'Враги', 'characters', 'character-c', {
targetHeight: 1.7,
// Скрыт из палитры — одиночный AI-зомби нестабилен (нерешённый баг с
// y-провалом на GLB-террейне, см. feedback_babylon про оптимизации).
// Используйте «Спавнер зомби» вместо одиночной модели.
hidden: true,
gameplay: {
type: 'zombie',
isZombie: true,
description: 'Враг с AI: бродит по миру, атакует игрока при приближении.',
defaultParams: {
hp: 50,
speed: 2.2, // м/с в погоне
wanderSpeed: 1.3, // м/с при патрулировании
detectionRadius: 16, // дистанция обнаружения игрока
attackRange: 1.8, // дистанция атаки
attackDamage: 10, // урон за удар
attackCooldown: 1.0, // секунд между ударами
wanderRadius: 14, // радиус патрулирования
},
},
}),
// Спавнер — синтетическая модель: вместо GLB ModelManager рисует диск-цилиндр.
// file=null + synthetic=true распознаётся в ModelManager._buildSyntheticInstance.
m('zombie-spawner', 'Спавнер зомби', 'Враги', 'characters', 'character-d', {
targetHeight: 0.3,
synthetic: 'spawner-disk',
gameplay: {
type: 'zombie-spawner',
isZombieSpawner: true,
description: 'Спавнит зомби с заданным интервалом, поддерживая лимит живых.',
defaultParams: {
maxAlive: 10,
spawnInterval: 10,
radius: 1, // 1 блок
zombieModelType: 'character-c',
zombieHp: 50,
zombieSpeed: 2.2,
zombieDamage: 10,
},
},
}),
// === ПЕРСОНАЖИ ===
m('character-a', 'Стив', 'Персонажи', 'characters', 'character-a', { targetHeight: 1.7 }),
m('character-b', 'Алекс', 'Персонажи', 'characters', 'character-b', { targetHeight: 1.7 }),
m('character-c', 'Виктор', 'Персонажи', 'characters', 'character-c', { targetHeight: 1.7 }),
m('character-d', 'Ирина', 'Персонажи', 'characters', 'character-d', { targetHeight: 1.7 }),
m('character-e', 'Паша', 'Персонажи', 'characters', 'character-e', { targetHeight: 1.7 }),
m('character-f', 'Юля', 'Персонажи', 'characters', 'character-f', { targetHeight: 1.7 }),
m('character-g', 'Андрей', 'Персонажи', 'characters', 'character-g', { targetHeight: 1.7 }),
// === KENNEY PACKS — auto-generated ===
// === Природа === (50)
m('nature-bridge-center-stone', 'Мост центр Камень', 'Природа', 'nature-kit', 'bridge_center_stone', { targetHeight: 1.5 }),
m('nature-bridge-center-stoneround', 'Мост центр кам. круглый', 'Природа', 'nature-kit', 'bridge_center_stoneRound', { targetHeight: 1.5 }),
m('nature-bridge-center-wood', 'Середина деревянного моста', 'Природа', 'nature-kit', 'bridge_center_wood', { targetHeight: 1.5 }),
m('nature-bridge-center-woodround', 'Мост центр дер. круглый', 'Природа', 'nature-kit', 'bridge_center_woodRound', { targetHeight: 1.5 }),
m('nature-bridge-side-stone', 'Мост бок Камень', 'Природа', 'nature-kit', 'bridge_side_stone', { targetHeight: 1.5 }),
m('nature-bridge-side-stoneround', 'Мост бок кам. круглый', 'Природа', 'nature-kit', 'bridge_side_stoneRound', { targetHeight: 1.5 }),
m('nature-bridge-side-wood', 'Край деревянного моста', 'Природа', 'nature-kit', 'bridge_side_wood', { targetHeight: 1.5 }),
m('nature-bridge-side-woodround', 'Мост бок дер. круглый', 'Природа', 'nature-kit', 'bridge_side_woodRound', { targetHeight: 1.5 }),
m('nature-bridge-stone', 'Мост Камень', 'Природа', 'nature-kit', 'bridge_stone', { targetHeight: 1.5 }),
m('nature-bridge-stonenarrow', 'Каменный узкий мост', 'Природа', 'nature-kit', 'bridge_stoneNarrow', { targetHeight: 1.5 }),
m('nature-bridge-stoneround', 'Каменный круглый мост', 'Природа', 'nature-kit', 'bridge_stoneRound', { targetHeight: 1.5 }),
m('nature-bridge-stoneroundnarrow', 'Каменный круглый узкий мост', 'Природа', 'nature-kit', 'bridge_stoneRoundNarrow', { targetHeight: 1.5 }),
m('nature-bridge-wood', 'Деревянный мост', 'Природа', 'nature-kit', 'bridge_wood', { targetHeight: 1.5 }),
m('nature-bridge-woodnarrow', 'Деревянный узкий мост', 'Природа', 'nature-kit', 'bridge_woodNarrow', { targetHeight: 1.5 }),
m('nature-bridge-woodround', 'Деревянный круглый мост', 'Природа', 'nature-kit', 'bridge_woodRound', { targetHeight: 1.5 }),
m('nature-bridge-woodroundnarrow', 'Деревянный круглый узкий мост', 'Природа', 'nature-kit', 'bridge_woodRoundNarrow', { targetHeight: 1.5 }),
m('nature-cactus-short', 'Кактус низкий', 'Природа', 'nature-kit', 'cactus_short', { targetHeight: 1.5 }),
m('nature-cactus-tall', 'Кактус высокий', 'Природа', 'nature-kit', 'cactus_tall', { targetHeight: 2.5 }),
m('nature-campfire-logs', 'Костёр (дрова)', 'Природа', 'nature-kit', 'campfire_logs', { targetHeight: 0.6 }),
m('nature-campfire-stones', 'Костёр Булыжники', 'Природа', 'nature-kit', 'campfire_stones', { targetHeight: 0.6 }),
m('nature-cliff-blockcave-rock', 'Скала пещерный блок Камень', 'Природа', 'nature-kit', 'cliff_blockCave_rock', { targetHeight: 1.5 }),
m('nature-cliff-blockcave-stone', 'Скала пещерный блок Камень', 'Природа', 'nature-kit', 'cliff_blockCave_stone', { targetHeight: 1.5 }),
m('nature-cliff-blockdiagonal-rock', 'Скала диагональный блок Камень', 'Природа', 'nature-kit', 'cliff_blockDiagonal_rock', { targetHeight: 1.5 }),
m('nature-cliff-blockdiagonal-stone', 'Скала диагональный блок Камень', 'Природа', 'nature-kit', 'cliff_blockDiagonal_stone', { targetHeight: 1.5 }),
m('nature-cliff-blockhalf-rock', 'Скала полублок Камень', 'Природа', 'nature-kit', 'cliff_blockHalf_rock', { targetHeight: 1.5 }),
m('nature-cliff-blockhalf-stone', 'Скала полублок Камень', 'Природа', 'nature-kit', 'cliff_blockHalf_stone', { targetHeight: 1.5 }),
m('nature-cliff-blockquarter-rock', 'Скала четверть-блок Камень', 'Природа', 'nature-kit', 'cliff_blockQuarter_rock', { targetHeight: 1.5 }),
m('nature-cliff-blockquarter-stone', 'Скала четверть-блок Камень', 'Природа', 'nature-kit', 'cliff_blockQuarter_stone', { targetHeight: 1.5 }),
m('nature-cliff-blockslopehalfwalls-rock', 'Скала наклон полублок со стенами Камень', 'Природа', 'nature-kit', 'cliff_blockSlopeHalfWalls_rock', { targetHeight: 1.5 }),
m('nature-cliff-blockslopehalfwalls-stone', 'Скала наклон полублок со стенами Камень', 'Природа', 'nature-kit', 'cliff_blockSlopeHalfWalls_stone', { targetHeight: 1.5 }),
m('nature-cliff-blockslopewalls-rock', 'Скала наклон блок со стенами Камень', 'Природа', 'nature-kit', 'cliff_blockSlopeWalls_rock', { targetHeight: 1.5 }),
m('nature-cliff-blockslopewalls-stone', 'Скала наклон блок со стенами Камень', 'Природа', 'nature-kit', 'cliff_blockSlopeWalls_stone', { targetHeight: 1.5 }),
m('nature-cliff-blockslope-rock', 'Скала наклон Камень', 'Природа', 'nature-kit', 'cliff_blockSlope_rock', { targetHeight: 1.5 }),
m('nature-cliff-blockslope-stone', 'Скала наклон Камень', 'Природа', 'nature-kit', 'cliff_blockSlope_stone', { targetHeight: 1.5 }),
m('nature-cliff-block-rock', 'Скала блок Камень', 'Природа', 'nature-kit', 'cliff_block_rock', { targetHeight: 1.5 }),
m('nature-cliff-block-stone', 'Скала блок Камень', 'Природа', 'nature-kit', 'cliff_block_stone', { targetHeight: 1.5 }),
m('nature-cliff-cave-rock', 'Скала пещера Камень', 'Природа', 'nature-kit', 'cliff_cave_rock', { targetHeight: 1.5 }),
m('nature-cliff-cave-stone', 'Скала пещера Камень', 'Природа', 'nature-kit', 'cliff_cave_stone', { targetHeight: 1.5 }),
m('nature-cliff-cornerinnerlarge-rock', 'Скала внутр. угол большой Камень', 'Природа', 'nature-kit', 'cliff_cornerInnerLarge_rock', { targetHeight: 1.5 }),
m('nature-cliff-cornerinnerlarge-stone', 'Скала внутр. угол большой Камень', 'Природа', 'nature-kit', 'cliff_cornerInnerLarge_stone', { targetHeight: 1.5 }),
m('nature-cliff-cornerinnertop-rock', 'Скала внутр. верхний угол Камень', 'Природа', 'nature-kit', 'cliff_cornerInnerTop_rock', { targetHeight: 1.5 }),
m('nature-cliff-cornerinnertop-stone', 'Скала внутр. верхний угол Камень', 'Природа', 'nature-kit', 'cliff_cornerInnerTop_stone', { targetHeight: 1.5 }),
m('nature-cliff-cornerinner-rock', 'Скала внутр. угол Камень', 'Природа', 'nature-kit', 'cliff_cornerInner_rock', { targetHeight: 1.5 }),
m('nature-cliff-cornerinner-stone', 'Скала внутр. угол Камень', 'Природа', 'nature-kit', 'cliff_cornerInner_stone', { targetHeight: 1.5 }),
m('nature-cliff-cornerlarge-rock', 'Скала угол большой Камень', 'Природа', 'nature-kit', 'cliff_cornerLarge_rock', { targetHeight: 1.5 }),
m('nature-cliff-cornerlarge-stone', 'Скала угол большой Камень', 'Природа', 'nature-kit', 'cliff_cornerLarge_stone', { targetHeight: 1.5 }),
m('nature-cliff-cornertop-rock', 'Скала верхний угол Камень', 'Природа', 'nature-kit', 'cliff_cornerTop_rock', { targetHeight: 1.5 }),
m('nature-cliff-cornertop-stone', 'Скала верхний угол Камень', 'Природа', 'nature-kit', 'cliff_cornerTop_stone', { targetHeight: 1.5 }),
m('nature-cliff-corner-rock', 'Скала угол Камень', 'Природа', 'nature-kit', 'cliff_corner_rock', { targetHeight: 1.5 }),
m('nature-cliff-corner-stone', 'Скала угол Камень', 'Природа', 'nature-kit', 'cliff_corner_stone', { targetHeight: 1.5 }),
// === Транспорт === (47)
m('car-ambulance', 'Скорая', 'Транспорт', 'car-kit', 'ambulance', { targetHeight: 2.5 }),
m('car-delivery-flat', 'Доставка плоская', 'Транспорт', 'car-kit', 'delivery-flat', { targetHeight: 2.2 }),
m('car-delivery', 'Фургон', 'Транспорт', 'car-kit', 'delivery', { targetHeight: 2.2 }),
m('car-firetruck', 'Пожарная', 'Транспорт', 'car-kit', 'firetruck', { targetHeight: 2.5 }),
m('car-garbage-truck', 'Мусоровоз', 'Транспорт', 'car-kit', 'garbage-truck', { targetHeight: 2.5 }),
m('car-hatchback-sports', 'Хэтчбек спорт', 'Транспорт', 'car-kit', 'hatchback-sports', { targetHeight: 1.5 }),
m('car-kart-oobi', 'Карт ооби', 'Транспорт', 'car-kit', 'kart-oobi', { targetHeight: 1.2 }),
m('car-kart-oodi', 'Карт ооди', 'Транспорт', 'car-kit', 'kart-oodi', { targetHeight: 1.2 }),
m('car-kart-ooli', 'Карт ооли', 'Транспорт', 'car-kit', 'kart-ooli', { targetHeight: 1.2 }),
m('car-kart-oopi', 'Карт оопи', 'Транспорт', 'car-kit', 'kart-oopi', { targetHeight: 1.2 }),
m('car-kart-oozi', 'Карт оози', 'Транспорт', 'car-kit', 'kart-oozi', { targetHeight: 1.2 }),
m('car-police', 'Полицейская', 'Транспорт', 'car-kit', 'police', { targetHeight: 1.5 }),
m('car-race-future', 'Болид будущего', 'Транспорт', 'car-kit', 'race-future', { targetHeight: 1.5 }),
m('car-race', 'Гоночная', 'Транспорт', 'car-kit', 'race', { targetHeight: 1.5 }),
m('car-sedan-sports', 'Седан спорт', 'Транспорт', 'car-kit', 'sedan-sports', { targetHeight: 1.5 }),
m('car-sedan', 'Седан', 'Транспорт', 'car-kit', 'sedan', { targetHeight: 1.5 }),
m('car-suv-luxury', 'Внедорожник люкс', 'Транспорт', 'car-kit', 'suv-luxury', { targetHeight: 1.8 }),
m('car-suv', 'Внедорожник', 'Транспорт', 'car-kit', 'suv', { targetHeight: 1.8 }),
m('car-taxi', 'Такси', 'Транспорт', 'car-kit', 'taxi', { targetHeight: 1.5 }),
m('car-tractor-police', 'Трактор полиции', 'Транспорт', 'car-kit', 'tractor-police', { targetHeight: 2.2 }),
m('car-tractor-shovel', 'Трактор-погрузчик', 'Транспорт', 'car-kit', 'tractor-shovel', { targetHeight: 2.2 }),
m('car-tractor', 'Трактор', 'Транспорт', 'car-kit', 'tractor', { targetHeight: 2.2 }),
m('car-truck-flat', 'Грузовик плоский', 'Транспорт', 'car-kit', 'truck-flat', { targetHeight: 2.2 }),
m('car-truck', 'Грузовик', 'Транспорт', 'car-kit', 'truck', { targetHeight: 2.2 }),
m('car-van', 'Минивэн', 'Транспорт', 'car-kit', 'van', { targetHeight: 1.8 }),
m('car-wheel-dark', 'Колесо тёмное', 'Транспорт', 'car-kit', 'wheel-dark', { targetHeight: 0.5 }),
m('car-wheel-default', 'Колесо обычное', 'Транспорт', 'car-kit', 'wheel-default', { targetHeight: 0.5 }),
m('car-wheel-racing', 'Колесо гоночное', 'Транспорт', 'car-kit', 'wheel-racing', { targetHeight: 0.5 }),
m('car-wheel-tractor-back', 'Колесо Трактор зад', 'Транспорт', 'car-kit', 'wheel-tractor-back', { targetHeight: 2.2 }),
m('car-wheel-tractor-dark-back', 'Колесо Трактор тёмный зад', 'Транспорт', 'car-kit', 'wheel-tractor-dark-back', { targetHeight: 2.2 }),
m('car-wheel-tractor-dark-front', 'Колесо Трактор тёмный перед', 'Транспорт', 'car-kit', 'wheel-tractor-dark-front', { targetHeight: 2.2 }),
m('car-wheel-tractor-front', 'Колесо Трактор перед', 'Транспорт', 'car-kit', 'wheel-tractor-front', { targetHeight: 2.2 }),
m('car-wheel-truck', 'Колесо Грузовик', 'Транспорт', 'car-kit', 'wheel-truck', { targetHeight: 2.2 }),
m('toy-car-vehicle-drag-racer', 'Vehicle тяга гонщик', 'Транспорт', 'toy-car-kit', 'vehicle-drag-racer', { targetHeight: 1.5 }),
m('toy-car-vehicle-monster-truck', 'Vehicle monster Грузовик', 'Транспорт', 'toy-car-kit', 'vehicle-monster-truck', { targetHeight: 2.2 }),
m('toy-car-vehicle-racer-low', 'Vehicle гонщик низкий', 'Транспорт', 'toy-car-kit', 'vehicle-racer-low', { targetHeight: 1.5 }),
m('toy-car-vehicle-racer', 'Vehicle гонщик', 'Транспорт', 'toy-car-kit', 'vehicle-racer', { targetHeight: 1.5 }),
m('toy-car-vehicle-suv', 'Vehicle Внедорожник', 'Транспорт', 'toy-car-kit', 'vehicle-suv', { targetHeight: 1.8 }),
m('toy-car-vehicle-truck', 'Vehicle Грузовик', 'Транспорт', 'toy-car-kit', 'vehicle-truck', { targetHeight: 2.2 }),
m('toy-car-vehicle-vintage-racer', 'Vehicle vintage гонщик', 'Транспорт', 'toy-car-kit', 'vehicle-vintage-racer', { targetHeight: 1.5 }),
m('toy-car-wheel-large', 'Колесо большой', 'Транспорт', 'toy-car-kit', 'wheel-large', { targetHeight: 0.5 }),
m('toy-car-wheel-medium', 'Колесо средний', 'Транспорт', 'toy-car-kit', 'wheel-medium', { targetHeight: 0.5 }),
m('toy-car-wheel-small', 'Колесо маленький', 'Транспорт', 'toy-car-kit', 'wheel-small', { targetHeight: 0.5 }),
m('racing-racecargreen', 'Гоночная машина зелёный', 'Транспорт', 'racing-kit', 'raceCarGreen', { targetHeight: 1.5 }),
m('racing-racecarorange', 'Гоночная машина оранжевый', 'Транспорт', 'racing-kit', 'raceCarOrange', { targetHeight: 1.5 }),
m('racing-racecarred', 'Гоночная машина красный', 'Транспорт', 'racing-kit', 'raceCarRed', { targetHeight: 1.5 }),
m('racing-racecarwhite', 'Гоночная машина белый', 'Транспорт', 'racing-kit', 'raceCarWhite', { targetHeight: 1.5 }),
// === Лодки === (43)
m('watercraft-boat-fan', 'Воздушная лодка', 'Лодки', 'watercraft-kit', 'boat-fan', { targetHeight: 1.8 }),
m('watercraft-boat-fishing-small', 'Маленькая рыболовная лодка', 'Лодки', 'watercraft-kit', 'boat-fishing-small', { targetHeight: 1.8 }),
m('watercraft-boat-house-a', 'Плавучий дом А', 'Лодки', 'watercraft-kit', 'boat-house-a', { targetHeight: 1.8 }),
m('watercraft-boat-house-b', 'Плавучий дом Б', 'Лодки', 'watercraft-kit', 'boat-house-b', { targetHeight: 1.8 }),
m('watercraft-boat-house-c', 'Плавучий дом В', 'Лодки', 'watercraft-kit', 'boat-house-c', { targetHeight: 1.8 }),
m('watercraft-boat-house-d', 'Плавучий дом Г', 'Лодки', 'watercraft-kit', 'boat-house-d', { targetHeight: 1.8 }),
m('watercraft-boat-row-large', 'Большая гребная лодка', 'Лодки', 'watercraft-kit', 'boat-row-large', { targetHeight: 1.8 }),
m('watercraft-boat-row-small', 'Маленькая гребная лодка', 'Лодки', 'watercraft-kit', 'boat-row-small', { targetHeight: 1.8 }),
m('watercraft-boat-sail-a', 'Парусник «Галеон»', 'Лодки', 'watercraft-kit', 'boat-sail-a', { targetHeight: 1.8 }),
m('watercraft-boat-sail-b', 'Парусник «Бриг»', 'Лодки', 'watercraft-kit', 'boat-sail-b', { targetHeight: 1.8 }),
m('watercraft-boat-speed-a', 'Скоростной катер «Молния»', 'Лодки', 'watercraft-kit', 'boat-speed-a', { targetHeight: 1.8 }),
m('watercraft-boat-speed-b', 'Скоростной катер «Шторм»', 'Лодки', 'watercraft-kit', 'boat-speed-b', { targetHeight: 1.8 }),
m('watercraft-boat-speed-c', 'Скоростной катер «Акула»', 'Лодки', 'watercraft-kit', 'boat-speed-c', { targetHeight: 1.8 }),
m('watercraft-boat-speed-d', 'Скоростной катер «Барракуда»', 'Лодки', 'watercraft-kit', 'boat-speed-d', { targetHeight: 1.8 }),
m('watercraft-boat-speed-e', 'Скоростной катер «Дельфин»', 'Лодки', 'watercraft-kit', 'boat-speed-e', { targetHeight: 1.8 }),
m('watercraft-boat-speed-f', 'Скоростной катер «Стрела»', 'Лодки', 'watercraft-kit', 'boat-speed-f', { targetHeight: 1.8 }),
m('watercraft-boat-speed-g', 'Скоростной катер «Орка»', 'Лодки', 'watercraft-kit', 'boat-speed-g', { targetHeight: 1.8 }),
m('watercraft-boat-speed-h', 'Скоростной катер «Кит»', 'Лодки', 'watercraft-kit', 'boat-speed-h', { targetHeight: 1.8 }),
m('watercraft-boat-speed-i', 'Скоростной катер «Парус»', 'Лодки', 'watercraft-kit', 'boat-speed-i', { targetHeight: 1.8 }),
m('watercraft-boat-speed-j', 'Скоростной катер «Нептун»', 'Лодки', 'watercraft-kit', 'boat-speed-j', { targetHeight: 1.8 }),
m('watercraft-boat-tow-a', 'Лодка tow a', 'Лодки', 'watercraft-kit', 'boat-tow-a', { targetHeight: 1.8 }),
m('watercraft-boat-tow-b', 'Лодка tow b', 'Лодки', 'watercraft-kit', 'boat-tow-b', { targetHeight: 1.8 }),
m('watercraft-boat-tug-a', 'Лодка tug a', 'Лодки', 'watercraft-kit', 'boat-tug-a', { targetHeight: 1.8 }),
m('watercraft-boat-tug-b', 'Лодка tug b', 'Лодки', 'watercraft-kit', 'boat-tug-b', { targetHeight: 1.8 }),
m('watercraft-boat-tug-c', 'Лодка tug c', 'Лодки', 'watercraft-kit', 'boat-tug-c', { targetHeight: 1.8 }),
m('watercraft-ship-cargo-a', 'Корабль грузовой a', 'Лодки', 'watercraft-kit', 'ship-cargo-a', { targetHeight: 4 }),
m('watercraft-ship-cargo-b', 'Корабль грузовой b', 'Лодки', 'watercraft-kit', 'ship-cargo-b', { targetHeight: 4 }),
m('watercraft-ship-cargo-c', 'Корабль грузовой c', 'Лодки', 'watercraft-kit', 'ship-cargo-c', { targetHeight: 4 }),
m('watercraft-ship-large', 'Корабль большой', 'Лодки', 'watercraft-kit', 'ship-large', { targetHeight: 4 }),
m('watercraft-ship-ocean-liner-small', 'Корабль ocean liner маленький', 'Лодки', 'watercraft-kit', 'ship-ocean-liner-small', { targetHeight: 4 }),
m('watercraft-ship-ocean-liner', 'Корабль ocean liner', 'Лодки', 'watercraft-kit', 'ship-ocean-liner', { targetHeight: 4 }),
m('watercraft-ship-small-ghost', 'Корабль маленький Призрак', 'Лодки', 'watercraft-kit', 'ship-small-ghost', { targetHeight: 4 }),
m('watercraft-ship-small', 'Корабль маленький', 'Лодки', 'watercraft-kit', 'ship-small', { targetHeight: 4 }),
m('pirate-boat-row-large', 'Большая гребная лодка', 'Лодки', 'pirate-kit', 'boat-row-large', { targetHeight: 1.8 }),
m('pirate-boat-row-small', 'Маленькая гребная лодка', 'Лодки', 'pirate-kit', 'boat-row-small', { targetHeight: 1.8 }),
m('pirate-ship-ghost', 'Корабль Призрак', 'Лодки', 'pirate-kit', 'ship-ghost', { targetHeight: 4 }),
m('pirate-ship-large', 'Корабль большой', 'Лодки', 'pirate-kit', 'ship-large', { targetHeight: 4 }),
m('pirate-ship-medium', 'Корабль средний', 'Лодки', 'pirate-kit', 'ship-medium', { targetHeight: 4 }),
m('pirate-ship-pirate-large', 'Пиратский корабль большой', 'Лодки', 'pirate-kit', 'ship-pirate-large', { targetHeight: 4 }),
m('pirate-ship-pirate-medium', 'Пиратский корабль средний', 'Лодки', 'pirate-kit', 'ship-pirate-medium', { targetHeight: 4 }),
m('pirate-ship-pirate-small', 'Пиратский корабль маленький', 'Лодки', 'pirate-kit', 'ship-pirate-small', { targetHeight: 4 }),
m('pirate-ship-small', 'Корабль маленький', 'Лодки', 'pirate-kit', 'ship-small', { targetHeight: 4 }),
m('pirate-ship-wreck', 'Корабль Обломок', 'Лодки', 'pirate-kit', 'ship-wreck', { targetHeight: 4 }),
// === Sci-Fi === (50)
m('space-alien', 'Пришелец', 'Sci-Fi', 'space-kit', 'alien', { targetHeight: 1.7 }),
m('space-astronauta', 'Космонавт А', 'Sci-Fi', 'space-kit', 'astronautA', { targetHeight: 1.7 }),
m('space-astronautb', 'Космонавт Б', 'Sci-Fi', 'space-kit', 'astronautB', { targetHeight: 1.7 }),
m('space-barrel', 'Бочка', 'Sci-Fi', 'space-kit', 'barrel', { targetHeight: 1 }),
m('space-barrels', 'Бочки', 'Sci-Fi', 'space-kit', 'barrels', { targetHeight: 1 }),
m('space-barrels-rail', 'Бочки Рельс', 'Sci-Fi', 'space-kit', 'barrels_rail', { targetHeight: 1 }),
m('space-bones', 'Кости', 'Sci-Fi', 'space-kit', 'bones', { targetHeight: 2 }),
m('space-chimney', 'Дымоход', 'Sci-Fi', 'space-kit', 'chimney', { targetHeight: 2 }),
m('space-chimney-detailed', 'Дымоход детальный', 'Sci-Fi', 'space-kit', 'chimney_detailed', { targetHeight: 2 }),
m('space-corridor', 'Коридор', 'Sci-Fi', 'space-kit', 'corridor', { targetHeight: 2 }),
m('space-corridor-corner', 'Коридор угол', 'Sci-Fi', 'space-kit', 'corridor_corner', { targetHeight: 2 }),
m('space-corridor-cornerround', 'Коридор угол круглый', 'Sci-Fi', 'space-kit', 'corridor_cornerRound', { targetHeight: 2 }),
m('space-corridor-cornerroundwindow', 'Коридор угол круглый Окно', 'Sci-Fi', 'space-kit', 'corridor_cornerRoundWindow', { targetHeight: 2 }),
m('space-corridor-cross', 'Коридор крест', 'Sci-Fi', 'space-kit', 'corridor_cross', { targetHeight: 2 }),
m('space-corridor-detailed', 'Коридор детальный', 'Sci-Fi', 'space-kit', 'corridor_detailed', { targetHeight: 2 }),
m('space-corridor-end', 'Коридор конец', 'Sci-Fi', 'space-kit', 'corridor_end', { targetHeight: 2 }),
m('space-corridor-open', 'Коридор открытый', 'Sci-Fi', 'space-kit', 'corridor_open', { targetHeight: 2 }),
m('space-corridor-roof', 'Коридор Крыша', 'Sci-Fi', 'space-kit', 'corridor_roof', { targetHeight: 2 }),
m('space-corridor-split', 'Коридор split', 'Sci-Fi', 'space-kit', 'corridor_split', { targetHeight: 2 }),
m('space-corridor-wall', 'Коридор Стена', 'Sci-Fi', 'space-kit', 'corridor_wall', { targetHeight: 2 }),
m('space-corridor-wallcorner', 'Коридор Стена угол', 'Sci-Fi', 'space-kit', 'corridor_wallCorner', { targetHeight: 2 }),
m('space-corridor-window', 'Коридор Окно', 'Sci-Fi', 'space-kit', 'corridor_window', { targetHeight: 2 }),
m('space-corridor-windowclosed', 'Коридор Окно закрытый', 'Sci-Fi', 'space-kit', 'corridor_windowClosed', { targetHeight: 2 }),
m('space-craft-cargoa', 'Корабль грузовой A', 'Sci-Fi', 'space-kit', 'craft_cargoA', { targetHeight: 3 }),
m('space-craft-cargob', 'Корабль грузовой B', 'Sci-Fi', 'space-kit', 'craft_cargoB', { targetHeight: 3 }),
m('space-craft-miner', 'Рудный корабль', 'Sci-Fi', 'space-kit', 'craft_miner', { targetHeight: 3 }),
m('space-craft-racer', 'Гоночный корабль', 'Sci-Fi', 'space-kit', 'craft_racer', { targetHeight: 3 }),
m('space-craft-speedera', 'Корабль Спидер A', 'Sci-Fi', 'space-kit', 'craft_speederA', { targetHeight: 3 }),
m('space-craft-speederb', 'Корабль Спидер B', 'Sci-Fi', 'space-kit', 'craft_speederB', { targetHeight: 3 }),
m('space-craft-speederc', 'Корабль Спидер C', 'Sci-Fi', 'space-kit', 'craft_speederC', { targetHeight: 3 }),
m('space-craft-speederd', 'Корабль Спидер D', 'Sci-Fi', 'space-kit', 'craft_speederD', { targetHeight: 3 }),
m('space-crater', 'Кратер', 'Sci-Fi', 'space-kit', 'crater', { targetHeight: 2 }),
m('space-craterlarge', 'Кратер большой', 'Sci-Fi', 'space-kit', 'craterLarge', { targetHeight: 2 }),
m('space-desk-chair', 'Письменный стол Стул', 'Sci-Fi', 'space-kit', 'desk_chair', { targetHeight: 2 }),
m('space-desk-chairarms', 'Письменный стол Стул Arms', 'Sci-Fi', 'space-kit', 'desk_chairArms', { targetHeight: 2 }),
m('space-desk-chairstool', 'Письменный стол Стул Табурет', 'Sci-Fi', 'space-kit', 'desk_chairStool', { targetHeight: 2 }),
m('space-desk-computer', 'Письменный стол Компьютер', 'Sci-Fi', 'space-kit', 'desk_computer', { targetHeight: 2 }),
m('space-desk-computercorner', 'Письменный стол Компьютер угол', 'Sci-Fi', 'space-kit', 'desk_computerCorner', { targetHeight: 2 }),
m('space-desk-computerscreen', 'Письменный стол Компьютер Screen', 'Sci-Fi', 'space-kit', 'desk_computerScreen', { targetHeight: 2 }),
m('space-gate-complex', 'Ворота сложный', 'Sci-Fi', 'space-kit', 'gate_complex', { targetHeight: 2 }),
m('space-gate-simple', 'Ворота simple', 'Sci-Fi', 'space-kit', 'gate_simple', { targetHeight: 2 }),
m('space-hangar-largea', 'Ангар большой A', 'Sci-Fi', 'space-kit', 'hangar_largeA', { targetHeight: 5 }),
m('space-hangar-largeb', 'Ангар большой B', 'Sci-Fi', 'space-kit', 'hangar_largeB', { targetHeight: 5 }),
m('space-hangar-rounda', 'Ангар круглый A', 'Sci-Fi', 'space-kit', 'hangar_roundA', { targetHeight: 5 }),
m('space-hangar-roundb', 'Ангар круглый B', 'Sci-Fi', 'space-kit', 'hangar_roundB', { targetHeight: 5 }),
m('space-hangar-roundglass', 'Ангар круглый Стакан', 'Sci-Fi', 'space-kit', 'hangar_roundGlass', { targetHeight: 5 }),
m('space-hangar-smalla', 'Ангар маленький A', 'Sci-Fi', 'space-kit', 'hangar_smallA', { targetHeight: 5 }),
m('space-hangar-smallb', 'Ангар маленький B', 'Sci-Fi', 'space-kit', 'hangar_smallB', { targetHeight: 5 }),
m('space-machine-barrel', 'Машина Бочка', 'Sci-Fi', 'space-kit', 'machine_barrel', { targetHeight: 1 }),
m('space-machine-barrellarge', 'Машина Бочка большой', 'Sci-Fi', 'space-kit', 'machine_barrelLarge', { targetHeight: 1 }),
// === Здания === (21)
m('city-suburban-building-type-a', 'Жёлтый дом', 'Здания', 'city-kit-suburban', 'building-type-a', { targetHeight: 8 }),
m('city-suburban-building-type-b', 'Особняк с гаражом', 'Здания', 'city-kit-suburban', 'building-type-b', { targetHeight: 8 }),
m('city-suburban-building-type-c', 'Дом с террасой', 'Здания', 'city-kit-suburban', 'building-type-c', { targetHeight: 8 }),
m('city-suburban-building-type-d', 'Двухэтажный коттедж', 'Здания', 'city-kit-suburban', 'building-type-d', { targetHeight: 8 }),
m('city-suburban-building-type-e', 'Дом с мансардой', 'Здания', 'city-kit-suburban', 'building-type-e', { targetHeight: 8 }),
m('city-suburban-building-type-f', 'Современный дом', 'Здания', 'city-kit-suburban', 'building-type-f', { targetHeight: 8 }),
m('city-suburban-building-type-g', 'Кирпичный дом', 'Здания', 'city-kit-suburban', 'building-type-g', { targetHeight: 8 }),
m('city-suburban-building-type-h', 'Бунгало', 'Здания', 'city-kit-suburban', 'building-type-h', { targetHeight: 8 }),
m('city-suburban-building-type-i', 'Викторианский дом', 'Здания', 'city-kit-suburban', 'building-type-i', { targetHeight: 8 }),
m('city-suburban-building-type-j', 'Угловой дом', 'Здания', 'city-kit-suburban', 'building-type-j', { targetHeight: 8 }),
m('city-suburban-building-type-k', 'Дом с балконом', 'Здания', 'city-kit-suburban', 'building-type-k', { targetHeight: 8 }),
m('city-suburban-building-type-l', 'Загородный дом', 'Здания', 'city-kit-suburban', 'building-type-l', { targetHeight: 8 }),
m('city-suburban-building-type-m', 'Дом с крыльцом', 'Здания', 'city-kit-suburban', 'building-type-m', { targetHeight: 8 }),
m('city-suburban-building-type-n', 'Дом с башенкой', 'Здания', 'city-kit-suburban', 'building-type-n', { targetHeight: 8 }),
m('city-suburban-building-type-o', 'Семейный дом', 'Здания', 'city-kit-suburban', 'building-type-o', { targetHeight: 8 }),
m('city-suburban-building-type-p', 'Дом-шале', 'Здания', 'city-kit-suburban', 'building-type-p', { targetHeight: 8 }),
m('city-suburban-building-type-q', 'Дом с эркером', 'Здания', 'city-kit-suburban', 'building-type-q', { targetHeight: 8 }),
m('city-suburban-building-type-r', 'Городской дом', 'Здания', 'city-kit-suburban', 'building-type-r', { targetHeight: 8 }),
m('city-suburban-building-type-s', 'Дом-куб', 'Здания', 'city-kit-suburban', 'building-type-s', { targetHeight: 8 }),
m('city-suburban-building-type-t', 'Просторный дом', 'Здания', 'city-kit-suburban', 'building-type-t', { targetHeight: 8 }),
m('city-suburban-building-type-u', 'Загородная вилла', 'Здания', 'city-kit-suburban', 'building-type-u', { targetHeight: 8 }),
// === Дороги === (50)
m('city-roads-bridge-pillar-wide', 'Мост Широкая колонна', 'Дороги', 'city-kit-roads', 'bridge-pillar-wide'),
m('city-roads-bridge-pillar', 'Мост Колонна', 'Дороги', 'city-kit-roads', 'bridge-pillar'),
m('city-roads-construction-barrier', 'Стройка барьер', 'Дороги', 'city-kit-roads', 'construction-barrier'),
m('city-roads-construction-cone', 'Стройка Конус', 'Дороги', 'city-kit-roads', 'construction-cone'),
m('city-roads-construction-light', 'Стройка свет', 'Дороги', 'city-kit-roads', 'construction-light'),
m('city-roads-light-curved-cross', 'Свет поворот d крест', 'Дороги', 'city-kit-roads', 'light-curved-cross'),
m('city-roads-light-curved-double', 'Свет поворот d двойной', 'Дороги', 'city-kit-roads', 'light-curved-double'),
m('city-roads-light-curved', 'Свет поворот d', 'Дороги', 'city-kit-roads', 'light-curved'),
m('city-roads-light-square-cross', 'Свет квадратный крест', 'Дороги', 'city-kit-roads', 'light-square-cross'),
m('city-roads-light-square-double', 'Свет квадратный двойной', 'Дороги', 'city-kit-roads', 'light-square-double'),
m('city-roads-light-square', 'Свет квадратный', 'Дороги', 'city-kit-roads', 'light-square'),
m('city-roads-road-bend-barrier', 'Дорога b конец барьер', 'Дороги', 'city-kit-roads', 'road-bend-barrier'),
m('city-roads-road-bend-sidewalk', 'Дорога b конец Тротуар', 'Дороги', 'city-kit-roads', 'road-bend-sidewalk'),
m('city-roads-road-bend-square-barrier', 'Дорога b конец квадратный барьер', 'Дороги', 'city-kit-roads', 'road-bend-square-barrier'),
m('city-roads-road-bend-square', 'Дорога b конец квадратный', 'Дороги', 'city-kit-roads', 'road-bend-square'),
m('city-roads-road-bend', 'Дорога b конец', 'Дороги', 'city-kit-roads', 'road-bend'),
m('city-roads-road-bridge', 'Дорога Мост', 'Дороги', 'city-kit-roads', 'road-bridge'),
m('city-roads-road-crossing', 'Дорога Переход', 'Дороги', 'city-kit-roads', 'road-crossing'),
m('city-roads-road-crossroad-barrier', 'Дорога Перекрёсток барьер', 'Дороги', 'city-kit-roads', 'road-crossroad-barrier'),
m('city-roads-road-crossroad-line', 'Дорога Перекрёсток линия', 'Дороги', 'city-kit-roads', 'road-crossroad-line'),
m('city-roads-road-crossroad-path', 'Дорога Перекрёсток Тропа', 'Дороги', 'city-kit-roads', 'road-crossroad-path'),
m('city-roads-road-crossroad', 'Дорога Перекрёсток', 'Дороги', 'city-kit-roads', 'road-crossroad'),
m('city-roads-road-curve-barrier', 'Дорога Поворот барьер', 'Дороги', 'city-kit-roads', 'road-curve-barrier'),
m('city-roads-road-curve-intersection-barrier', 'Дорога Поворот Перекрёсток барьер', 'Дороги', 'city-kit-roads', 'road-curve-intersection-barrier'),
m('city-roads-road-curve-intersection', 'Дорога Поворот Перекрёсток', 'Дороги', 'city-kit-roads', 'road-curve-intersection'),
m('city-roads-road-curve-pavement', 'Дорога Поворот pavement', 'Дороги', 'city-kit-roads', 'road-curve-pavement'),
m('city-roads-road-curve', 'Дорога Поворот', 'Дороги', 'city-kit-roads', 'road-curve'),
m('city-roads-road-driveway-double-barrier', 'Дорога въезд двойной барьер', 'Дороги', 'city-kit-roads', 'road-driveway-double-barrier'),
m('city-roads-road-driveway-double', 'Дорога въезд двойной', 'Дороги', 'city-kit-roads', 'road-driveway-double'),
m('city-roads-road-driveway-single-barrier', 'Дорога въезд одинарный барьер', 'Дороги', 'city-kit-roads', 'road-driveway-single-barrier'),
m('city-roads-road-driveway-single', 'Дорога въезд одинарный', 'Дороги', 'city-kit-roads', 'road-driveway-single'),
m('city-roads-road-end-barrier', 'Дорога конец барьер', 'Дороги', 'city-kit-roads', 'road-end-barrier'),
m('city-roads-road-end-round-barrier', 'Дорога конец круглый барьер', 'Дороги', 'city-kit-roads', 'road-end-round-barrier'),
m('city-roads-road-end-round', 'Дорога конец круглый', 'Дороги', 'city-kit-roads', 'road-end-round'),
m('city-roads-road-end', 'Дорога конец', 'Дороги', 'city-kit-roads', 'road-end'),
m('city-roads-road-intersection-barrier', 'Дорога Перекрёсток барьер', 'Дороги', 'city-kit-roads', 'road-intersection-barrier'),
m('city-roads-road-intersection-line', 'Дорога Перекрёсток линия', 'Дороги', 'city-kit-roads', 'road-intersection-line'),
m('city-roads-road-intersection-path', 'Дорога Перекрёсток Тропа', 'Дороги', 'city-kit-roads', 'road-intersection-path'),
m('city-roads-road-intersection', 'Дорога Перекрёсток', 'Дороги', 'city-kit-roads', 'road-intersection'),
m('city-roads-road-roundabout-barrier', 'Дорога круговое движение барьер', 'Дороги', 'city-kit-roads', 'road-roundabout-barrier'),
m('city-roads-road-roundabout', 'Дорога круговое движение', 'Дороги', 'city-kit-roads', 'road-roundabout'),
m('city-roads-road-side-barrier', 'Дорога бок барьер', 'Дороги', 'city-kit-roads', 'road-side-barrier'),
m('city-roads-road-side-entry-barrier', 'Дорога бок вход барьер', 'Дороги', 'city-kit-roads', 'road-side-entry-barrier'),
m('city-roads-road-side-entry', 'Дорога бок вход', 'Дороги', 'city-kit-roads', 'road-side-entry'),
m('city-roads-road-side-exit-barrier', 'Дорога бок выход барьер', 'Дороги', 'city-kit-roads', 'road-side-exit-barrier'),
m('city-roads-road-side-exit', 'Дорога бок выход', 'Дороги', 'city-kit-roads', 'road-side-exit'),
m('city-roads-road-side', 'Дорога бок', 'Дороги', 'city-kit-roads', 'road-side'),
m('city-roads-road-slant-barrier', 'Дорога slant барьер', 'Дороги', 'city-kit-roads', 'road-slant-barrier'),
m('city-roads-road-slant-curve-barrier', 'Дорога slant Поворот барьер', 'Дороги', 'city-kit-roads', 'road-slant-curve-barrier'),
m('city-roads-road-slant-curve', 'Дорога slant Поворот', 'Дороги', 'city-kit-roads', 'road-slant-curve'),
// === Замки === (50)
m('tower-defense-detail-crystal-large', 'Деталь Кристалл большой', 'Замки', 'tower-defense-kit', 'detail-crystal-large', { targetHeight: 0.8 }),
m('tower-defense-detail-crystal', 'Деталь Кристалл', 'Замки', 'tower-defense-kit', 'detail-crystal', { targetHeight: 0.8 }),
m('tower-defense-detail-dirt-large', 'Земля (декор) большой', 'Замки', 'tower-defense-kit', 'detail-dirt-large', { targetHeight: 1 }),
m('tower-defense-detail-dirt', 'Земля (декор)', 'Замки', 'tower-defense-kit', 'detail-dirt', { targetHeight: 1 }),
m('tower-defense-detail-rocks-large', 'Деталь Камни большой', 'Замки', 'tower-defense-kit', 'detail-rocks-large', { targetHeight: 1 }),
m('tower-defense-detail-rocks', 'Деталь Камни', 'Замки', 'tower-defense-kit', 'detail-rocks', { targetHeight: 1 }),
m('tower-defense-detail-tree-large', 'Деталь Большое дерево', 'Замки', 'tower-defense-kit', 'detail-tree-large', { targetHeight: 3 }),
m('tower-defense-detail-tree', 'Деталь Дерево', 'Замки', 'tower-defense-kit', 'detail-tree', { targetHeight: 3 }),
m('tower-defense-enemy-ufo-a-weapon', 'Враг НЛО a Оружие', 'Замки', 'tower-defense-kit', 'enemy-ufo-a-weapon', { targetHeight: 1.7 }),
m('tower-defense-enemy-ufo-a', 'Враг НЛО a', 'Замки', 'tower-defense-kit', 'enemy-ufo-a', { targetHeight: 1.7 }),
m('tower-defense-enemy-ufo-b-weapon', 'Враг НЛО b Оружие', 'Замки', 'tower-defense-kit', 'enemy-ufo-b-weapon', { targetHeight: 1.7 }),
m('tower-defense-enemy-ufo-b', 'Враг НЛО b', 'Замки', 'tower-defense-kit', 'enemy-ufo-b', { targetHeight: 1.7 }),
m('tower-defense-enemy-ufo-beam-burst', 'Враг НЛО beam burst', 'Замки', 'tower-defense-kit', 'enemy-ufo-beam-burst', { targetHeight: 1.7 }),
m('tower-defense-enemy-ufo-beam', 'Враг НЛО beam', 'Замки', 'tower-defense-kit', 'enemy-ufo-beam', { targetHeight: 1.7 }),
m('tower-defense-enemy-ufo-c-weapon', 'Враг НЛО c Оружие', 'Замки', 'tower-defense-kit', 'enemy-ufo-c-weapon', { targetHeight: 1.7 }),
m('tower-defense-enemy-ufo-c', 'Враг НЛО c', 'Замки', 'tower-defense-kit', 'enemy-ufo-c', { targetHeight: 1.7 }),
m('tower-defense-enemy-ufo-d-weapon', 'Враг НЛО d Оружие', 'Замки', 'tower-defense-kit', 'enemy-ufo-d-weapon', { targetHeight: 1.7 }),
m('tower-defense-enemy-ufo-d', 'Враг НЛО d', 'Замки', 'tower-defense-kit', 'enemy-ufo-d', { targetHeight: 1.7 }),
m('tower-defense-selection-a', 'Выделение А', 'Замки', 'tower-defense-kit', 'selection-a', { targetHeight: 0.2 }),
m('tower-defense-selection-b', 'Выделение Б', 'Замки', 'tower-defense-kit', 'selection-b', { targetHeight: 0.2 }),
m('tower-defense-snow-detail-crystal-large', 'Снег Деталь Кристалл большой', 'Замки', 'tower-defense-kit', 'snow-detail-crystal-large', { targetHeight: 0.8 }),
m('tower-defense-snow-detail-crystal', 'Снег Деталь Кристалл', 'Замки', 'tower-defense-kit', 'snow-detail-crystal', { targetHeight: 0.8 }),
m('tower-defense-snow-detail-dirt-large', 'Снег Земля (декор) большой', 'Замки', 'tower-defense-kit', 'snow-detail-dirt-large', { targetHeight: 1 }),
m('tower-defense-snow-detail-dirt', 'Снег Земля (декор)', 'Замки', 'tower-defense-kit', 'snow-detail-dirt', { targetHeight: 1 }),
m('tower-defense-snow-detail-rocks-large', 'Снег Деталь Камни большой', 'Замки', 'tower-defense-kit', 'snow-detail-rocks-large', { targetHeight: 1 }),
m('tower-defense-snow-detail-rocks', 'Снег Деталь Камни', 'Замки', 'tower-defense-kit', 'snow-detail-rocks', { targetHeight: 1 }),
m('tower-defense-snow-detail-tree-large', 'Снег Деталь Большое дерево', 'Замки', 'tower-defense-kit', 'snow-detail-tree-large', { targetHeight: 3 }),
m('tower-defense-snow-detail-tree', 'Снег Деталь Дерево', 'Замки', 'tower-defense-kit', 'snow-detail-tree', { targetHeight: 3 }),
m('tower-defense-snow-tile-bump', 'Снег Плитка кочка', 'Замки', 'tower-defense-kit', 'snow-tile-bump', { targetHeight: 0.4 }),
m('tower-defense-snow-tile-corner-inner', 'Снег Плитка угол внутр.', 'Замки', 'tower-defense-kit', 'snow-tile-corner-inner', { targetHeight: 0.4 }),
m('tower-defense-snow-tile-corner-large', 'Снег Плитка угол большой', 'Замки', 'tower-defense-kit', 'snow-tile-corner-large', { targetHeight: 0.4 }),
m('tower-defense-snow-tile-corner-outer', 'Снег Плитка угол внеш.', 'Замки', 'tower-defense-kit', 'snow-tile-corner-outer', { targetHeight: 0.4 }),
m('tower-defense-snow-tile-corner-round', 'Снег Плитка угол круглый', 'Замки', 'tower-defense-kit', 'snow-tile-corner-round', { targetHeight: 0.4 }),
m('tower-defense-snow-tile-corner-square', 'Снег Плитка угол квадратный', 'Замки', 'tower-defense-kit', 'snow-tile-corner-square', { targetHeight: 0.4 }),
m('tower-defense-snow-tile-crossing', 'Снег Плитка Переход', 'Замки', 'tower-defense-kit', 'snow-tile-crossing', { targetHeight: 0.4 }),
m('tower-defense-snow-tile-crystal', 'Снег Плитка Кристалл', 'Замки', 'tower-defense-kit', 'snow-tile-crystal', { targetHeight: 0.8 }),
m('tower-defense-snow-tile-dirt', 'Снег Плитка земли', 'Замки', 'tower-defense-kit', 'snow-tile-dirt', { targetHeight: 0.4 }),
m('tower-defense-snow-tile-end-round', 'Снег Плитка конец круглый', 'Замки', 'tower-defense-kit', 'snow-tile-end-round', { targetHeight: 0.4 }),
m('tower-defense-snow-tile-end', 'Снег Плитка конец', 'Замки', 'tower-defense-kit', 'snow-tile-end', { targetHeight: 0.4 }),
m('tower-defense-snow-tile-hill', 'Снег Плитка холм', 'Замки', 'tower-defense-kit', 'snow-tile-hill', { targetHeight: 0.4 }),
m('tower-defense-snow-tile-river-bridge', 'Снег Плитка river Мост', 'Замки', 'tower-defense-kit', 'snow-tile-river-bridge', { targetHeight: 0.4 }),
m('tower-defense-snow-tile-river-corner', 'Снег Плитка river угол', 'Замки', 'tower-defense-kit', 'snow-tile-river-corner', { targetHeight: 0.4 }),
m('tower-defense-snow-tile-river-slope-large', 'Снег Плитка river наклон большой', 'Замки', 'tower-defense-kit', 'snow-tile-river-slope-large', { targetHeight: 0.4 }),
m('tower-defense-snow-tile-river-slope', 'Снег Плитка river наклон', 'Замки', 'tower-defense-kit', 'snow-tile-river-slope', { targetHeight: 0.4 }),
m('tower-defense-snow-tile-river-straight', 'Снег Плитка river Прямой участок', 'Замки', 'tower-defense-kit', 'snow-tile-river-straight', { targetHeight: 0.4 }),
m('tower-defense-snow-tile-river-transition', 'Снег Плитка river transition', 'Замки', 'tower-defense-kit', 'snow-tile-river-transition', { targetHeight: 0.4 }),
m('tower-defense-snow-tile-river-waterfall', 'Снег Плитка river waterfall', 'Замки', 'tower-defense-kit', 'snow-tile-river-waterfall', { targetHeight: 0.4 }),
m('tower-defense-snow-tile-rock', 'Снег Плитка Камень', 'Замки', 'tower-defense-kit', 'snow-tile-rock', { targetHeight: 0.4 }),
m('tower-defense-snow-tile-slope', 'Снег Плитка наклон', 'Замки', 'tower-defense-kit', 'snow-tile-slope', { targetHeight: 0.4 }),
m('tower-defense-snow-tile-spawn-end-round', 'Снег Плитка spawn конец круглый', 'Замки', 'tower-defense-kit', 'snow-tile-spawn-end-round', { targetHeight: 0.4 }),
// === Мебель === (50)
m('furniture-bathroomcabinet', 'Шкафчик ванной', 'Мебель', 'furniture-kit', 'bathroomCabinet', { targetHeight: 2.2 }),
m('furniture-bathroomcabinetdrawer', 'Тумба ванной с ящиком', 'Мебель', 'furniture-kit', 'bathroomCabinetDrawer', { targetHeight: 2.2 }),
m('furniture-bathroommirror', 'Ванная Зеркало', 'Мебель', 'furniture-kit', 'bathroomMirror', { targetHeight: 1 }),
m('furniture-bathroomsink', 'Ванная Раковина', 'Мебель', 'furniture-kit', 'bathroomSink', { targetHeight: 1.2 }),
m('furniture-bathroomsinksquare', 'Ванная Раковина квадратный', 'Мебель', 'furniture-kit', 'bathroomSinkSquare', { targetHeight: 1.2 }),
m('furniture-bathtub', 'Ванна', 'Мебель', 'furniture-kit', 'bathtub', { targetHeight: 1.2 }),
m('furniture-bear', 'Медведь', 'Мебель', 'furniture-kit', 'bear', { targetHeight: 1.2 }),
m('furniture-bedbunk', 'Кровать Bunk', 'Мебель', 'furniture-kit', 'bedBunk', { targetHeight: 1 }),
m('furniture-beddouble', 'Кровать двуспальная', 'Мебель', 'furniture-kit', 'bedDouble', { targetHeight: 1 }),
m('furniture-bedsingle', 'Кровать односпальная', 'Мебель', 'furniture-kit', 'bedSingle', { targetHeight: 1 }),
m('furniture-bench', 'Скамейка', 'Мебель', 'furniture-kit', 'bench', { targetHeight: 1.2 }),
m('furniture-benchcushion', 'Скамейка подушка', 'Мебель', 'furniture-kit', 'benchCushion', { targetHeight: 1.2 }),
m('furniture-benchcushionlow', 'Скамейка подушка низкий', 'Мебель', 'furniture-kit', 'benchCushionLow', { targetHeight: 1.2 }),
m('furniture-bookcaseclosed', 'Книжный шкаф закрытый', 'Мебель', 'furniture-kit', 'bookcaseClosed', { targetHeight: 2.2 }),
m('furniture-bookcasecloseddoors', 'Книжный шкаф закрытый Doors', 'Мебель', 'furniture-kit', 'bookcaseClosedDoors', { targetHeight: 2.2 }),
m('furniture-bookcaseclosedwide', 'Книжный шкаф закрытый широкий', 'Мебель', 'furniture-kit', 'bookcaseClosedWide', { targetHeight: 2.2 }),
m('furniture-bookcaseopen', 'Книжный шкаф открытый', 'Мебель', 'furniture-kit', 'bookcaseOpen', { targetHeight: 2.2 }),
m('furniture-bookcaseopenlow', 'Книжный шкаф открытый низкий', 'Мебель', 'furniture-kit', 'bookcaseOpenLow', { targetHeight: 2.2 }),
m('furniture-books', 'Книги', 'Мебель', 'furniture-kit', 'books', { targetHeight: 1.2 }),
m('furniture-cabinetbed', 'Шкафчик Кровать', 'Мебель', 'furniture-kit', 'cabinetBed', { targetHeight: 2.2 }),
m('furniture-cabinetbeddrawer', 'Шкафчик Кровать ящик', 'Мебель', 'furniture-kit', 'cabinetBedDrawer', { targetHeight: 2.2 }),
m('furniture-cabinetbeddrawertable', 'Шкафчик Кровать ящик Стол', 'Мебель', 'furniture-kit', 'cabinetBedDrawerTable', { targetHeight: 2.2 }),
m('furniture-cabinettelevision', 'Шкафчик Телевизор', 'Мебель', 'furniture-kit', 'cabinetTelevision', { targetHeight: 0.8 }),
m('furniture-cabinettelevisiondoors', 'Шкафчик Телевизор Doors', 'Мебель', 'furniture-kit', 'cabinetTelevisionDoors', { targetHeight: 0.8 }),
m('furniture-cardboardboxclosed', 'Картон Коробка закрытый', 'Мебель', 'furniture-kit', 'cardboardBoxClosed', { targetHeight: 1.2 }),
m('furniture-cardboardboxopen', 'Картон Коробка открытый', 'Мебель', 'furniture-kit', 'cardboardBoxOpen', { targetHeight: 1.2 }),
m('furniture-ceilingfan', 'Потолок вентилятор', 'Мебель', 'furniture-kit', 'ceilingFan', { targetHeight: 1.2 }),
m('furniture-chair', 'Стул', 'Мебель', 'furniture-kit', 'chair', { targetHeight: 1.2 }),
m('furniture-chaircushion', 'Стул подушка', 'Мебель', 'furniture-kit', 'chairCushion', { targetHeight: 1.2 }),
m('furniture-chairdesk', 'Стул Письменный стол', 'Мебель', 'furniture-kit', 'chairDesk', { targetHeight: 1.2 }),
m('furniture-chairmoderncushion', 'Стул современный подушка', 'Мебель', 'furniture-kit', 'chairModernCushion', { targetHeight: 1.2 }),
m('furniture-chairmodernframecushion', 'Стул современный Рамка подушка', 'Мебель', 'furniture-kit', 'chairModernFrameCushion', { targetHeight: 1.2 }),
m('furniture-chairrounded', 'Стул Rounded', 'Мебель', 'furniture-kit', 'chairRounded', { targetHeight: 1.2 }),
m('furniture-coatrack', 'Пальто стойка', 'Мебель', 'furniture-kit', 'coatRack', { targetHeight: 1.2 }),
m('furniture-coatrackstanding', 'Пальто стойка Standing', 'Мебель', 'furniture-kit', 'coatRackStanding', { targetHeight: 1.2 }),
m('furniture-computerkeyboard', 'Компьютер Keyboard', 'Мебель', 'furniture-kit', 'computerKeyboard', { targetHeight: 0.8 }),
m('furniture-computermouse', 'Компьютер Mouse', 'Мебель', 'furniture-kit', 'computerMouse', { targetHeight: 0.8 }),
m('furniture-computerscreen', 'Компьютер Screen', 'Мебель', 'furniture-kit', 'computerScreen', { targetHeight: 0.8 }),
m('furniture-desk', 'Письменный стол', 'Мебель', 'furniture-kit', 'desk', { targetHeight: 1.2 }),
m('furniture-deskcorner', 'Письменный стол угол', 'Мебель', 'furniture-kit', 'deskCorner', { targetHeight: 1.2 }),
m('furniture-doorway', 'Проём', 'Мебель', 'furniture-kit', 'doorway', { targetHeight: 1.2 }),
m('furniture-doorwayfront', 'Проём перед', 'Мебель', 'furniture-kit', 'doorwayFront', { targetHeight: 1.2 }),
m('furniture-doorwayopen', 'Проём открытый', 'Мебель', 'furniture-kit', 'doorwayOpen', { targetHeight: 1.2 }),
m('furniture-dryer', 'Сушилка', 'Мебель', 'furniture-kit', 'dryer', { targetHeight: 1.2 }),
m('furniture-floorcorner', 'Пол угол', 'Мебель', 'furniture-kit', 'floorCorner', { targetHeight: 1.2 }),
m('furniture-floorcornerround', 'Пол угол круглый', 'Мебель', 'furniture-kit', 'floorCornerRound', { targetHeight: 1.2 }),
m('furniture-floorfull', 'Пол полный', 'Мебель', 'furniture-kit', 'floorFull', { targetHeight: 1.2 }),
m('furniture-floorhalf', 'Пол половина', 'Мебель', 'furniture-kit', 'floorHalf', { targetHeight: 1.2 }),
m('furniture-hoodlarge', 'Hood большой', 'Мебель', 'furniture-kit', 'hoodLarge', { targetHeight: 1.2 }),
m('furniture-hoodmodern', 'Hood современный', 'Мебель', 'furniture-kit', 'hoodModern', { targetHeight: 1.2 }),
// === Еда === (50)
m('food-advocado-half', 'Авокадо (половинка)', 'Еда', 'food-kit', 'advocado-half', { targetHeight: 0.5 }),
m('food-apple-half', 'Яблоко (половинка)', 'Еда', 'food-kit', 'apple-half', { targetHeight: 0.4 }),
m('food-apple', 'Яблоко', 'Еда', 'food-kit', 'apple', { targetHeight: 0.4 }),
m('food-avocado', 'Авокадо', 'Еда', 'food-kit', 'avocado', { targetHeight: 0.5 }),
m('food-bacon-raw', 'Сырой бекон', 'Еда', 'food-kit', 'bacon-raw', { targetHeight: 0.5 }),
m('food-bacon', 'Бекон', 'Еда', 'food-kit', 'bacon', { targetHeight: 0.5 }),
m('food-bag-flat', 'Пакет плоский', 'Еда', 'food-kit', 'bag-flat', { targetHeight: 0.5 }),
m('food-bag', 'Пакет', 'Еда', 'food-kit', 'bag', { targetHeight: 0.5 }),
m('food-banana', 'Банан', 'Еда', 'food-kit', 'banana', { targetHeight: 0.4 }),
m('food-barrel', 'Бочка', 'Еда', 'food-kit', 'barrel', { targetHeight: 0.5 }),
m('food-beet', 'Свёкла', 'Еда', 'food-kit', 'beet', { targetHeight: 0.4 }),
m('food-bottle-ketchup', 'Кетчуп', 'Еда', 'food-kit', 'bottle-ketchup', { targetHeight: 0.7 }),
m('food-bottle-musterd', 'Горчица', 'Еда', 'food-kit', 'bottle-musterd', { targetHeight: 0.7 }),
m('food-bottle-oil', 'Масло', 'Еда', 'food-kit', 'bottle-oil', { targetHeight: 0.7 }),
m('food-bowl-broth', 'Тарелка с бульоном', 'Еда', 'food-kit', 'bowl-broth', { targetHeight: 0.3 }),
m('food-bowl-cereal', 'Тарелка с хлопьями', 'Еда', 'food-kit', 'bowl-cereal', { targetHeight: 0.3 }),
m('food-bowl-soup', 'Миска Суп', 'Еда', 'food-kit', 'bowl-soup', { targetHeight: 0.3 }),
m('food-bowl', 'Миска', 'Еда', 'food-kit', 'bowl', { targetHeight: 0.3 }),
m('food-bread', 'Хлеб', 'Еда', 'food-kit', 'bread', { targetHeight: 0.5 }),
m('food-broccoli', 'Брокколи', 'Еда', 'food-kit', 'broccoli', { targetHeight: 0.5 }),
m('food-burger-cheese-double', 'Бургер Сыр двойной', 'Еда', 'food-kit', 'burger-cheese-double', { targetHeight: 0.5 }),
m('food-burger-cheese', 'Бургер Сыр', 'Еда', 'food-kit', 'burger-cheese', { targetHeight: 0.5 }),
m('food-burger-double', 'Бургер двойной', 'Еда', 'food-kit', 'burger-double', { targetHeight: 0.5 }),
m('food-burger', 'Бургер', 'Еда', 'food-kit', 'burger', { targetHeight: 0.5 }),
m('food-cabbage', 'Капуста', 'Еда', 'food-kit', 'cabbage', { targetHeight: 0.5 }),
m('food-cake-birthday', 'Торт день рождения', 'Еда', 'food-kit', 'cake-birthday', { targetHeight: 0.7 }),
m('food-cake-slicer', 'Торт кусок', 'Еда', 'food-kit', 'cake-slicer', { targetHeight: 0.7 }),
m('food-cake', 'Торт', 'Еда', 'food-kit', 'cake', { targetHeight: 0.7 }),
m('food-can-open', 'Банка открытый', 'Еда', 'food-kit', 'can-open', { targetHeight: 0.5 }),
m('food-can-small', 'Банка маленький', 'Еда', 'food-kit', 'can-small', { targetHeight: 0.5 }),
m('food-can', 'Банка', 'Еда', 'food-kit', 'can', { targetHeight: 0.5 }),
m('food-candy-bar-wrapper', 'Конфета батончик обёртка', 'Еда', 'food-kit', 'candy-bar-wrapper', { targetHeight: 0.5 }),
m('food-candy-bar', 'Конфета батончик', 'Еда', 'food-kit', 'candy-bar', { targetHeight: 0.5 }),
m('food-carrot', 'Морковь', 'Еда', 'food-kit', 'carrot', { targetHeight: 0.4 }),
m('food-carton-small', 'Пакет маленький', 'Еда', 'food-kit', 'carton-small', { targetHeight: 0.5 }),
m('food-carton', 'Пакет', 'Еда', 'food-kit', 'carton', { targetHeight: 0.5 }),
m('food-cauliflower', 'Цветная капуста', 'Еда', 'food-kit', 'cauliflower', { targetHeight: 0.5 }),
m('food-celery-stick', 'Сельдерей Палка', 'Еда', 'food-kit', 'celery-stick', { targetHeight: 0.5 }),
m('food-cheese-cut', 'Сыр cut', 'Еда', 'food-kit', 'cheese-cut', { targetHeight: 0.5 }),
m('food-cheese-slicer', 'Сыр кусок', 'Еда', 'food-kit', 'cheese-slicer', { targetHeight: 0.5 }),
m('food-cheese', 'Сыр', 'Еда', 'food-kit', 'cheese', { targetHeight: 0.5 }),
m('food-cherries', 'Черешня', 'Еда', 'food-kit', 'cherries', { targetHeight: 0.5 }),
m('food-chinese', 'Chinese', 'Еда', 'food-kit', 'chinese', { targetHeight: 0.5 }),
m('food-chocolate-wrapper', 'Шоколад обёртка', 'Еда', 'food-kit', 'chocolate-wrapper', { targetHeight: 0.5 }),
m('food-chocolate', 'Шоколад', 'Еда', 'food-kit', 'chocolate', { targetHeight: 0.5 }),
m('food-chopstic-decorative', 'Chopstic декоративный', 'Еда', 'food-kit', 'chopstic-decorative', { targetHeight: 0.5 }),
m('food-chopstick', 'Палочка', 'Еда', 'food-kit', 'chopstick', { targetHeight: 0.5 }),
m('food-cocktail', 'Коктейль', 'Еда', 'food-kit', 'cocktail', { targetHeight: 0.5 }),
m('food-coconut-half', 'Половинка кокоса', 'Еда', 'food-kit', 'coconut-half', { targetHeight: 0.5 }),
m('food-coconut', 'Кокос', 'Еда', 'food-kit', 'coconut', { targetHeight: 0.5 }),
// === Оружие === (40)
m('blaster-blaster-a', 'Бластер a', 'Оружие', 'blaster-kit', 'blaster-a', { targetHeight: 1.2 }),
m('blaster-blaster-b', 'Бластер b', 'Оружие', 'blaster-kit', 'blaster-b', { targetHeight: 1.2 }),
m('blaster-blaster-c', 'Бластер c', 'Оружие', 'blaster-kit', 'blaster-c', { targetHeight: 1.2 }),
m('blaster-blaster-d', 'Бластер d', 'Оружие', 'blaster-kit', 'blaster-d', { targetHeight: 1.2 }),
m('blaster-blaster-e', 'Бластер e', 'Оружие', 'blaster-kit', 'blaster-e', { targetHeight: 1.2 }),
m('blaster-blaster-f', 'Бластер f', 'Оружие', 'blaster-kit', 'blaster-f', { targetHeight: 1.2 }),
m('blaster-blaster-g', 'Бластер g', 'Оружие', 'blaster-kit', 'blaster-g', { targetHeight: 1.2 }),
m('blaster-blaster-h', 'Бластер h', 'Оружие', 'blaster-kit', 'blaster-h', { targetHeight: 1.2 }),
m('blaster-blaster-i', 'Бластер i', 'Оружие', 'blaster-kit', 'blaster-i', { targetHeight: 1.2 }),
m('blaster-blaster-j', 'Бластер j', 'Оружие', 'blaster-kit', 'blaster-j', { targetHeight: 1.2 }),
m('blaster-blaster-k', 'Бластер k', 'Оружие', 'blaster-kit', 'blaster-k', { targetHeight: 1.2 }),
m('blaster-blaster-l', 'Бластер l', 'Оружие', 'blaster-kit', 'blaster-l', { targetHeight: 1.2 }),
m('blaster-blaster-m', 'Бластер m', 'Оружие', 'blaster-kit', 'blaster-m', { targetHeight: 1.2 }),
m('blaster-blaster-n', 'Бластер n', 'Оружие', 'blaster-kit', 'blaster-n', { targetHeight: 1.2 }),
m('blaster-blaster-o', 'Бластер o', 'Оружие', 'blaster-kit', 'blaster-o', { targetHeight: 1.2 }),
m('blaster-blaster-p', 'Бластер p', 'Оружие', 'blaster-kit', 'blaster-p', { targetHeight: 1.2 }),
m('blaster-blaster-q', 'Бластер q', 'Оружие', 'blaster-kit', 'blaster-q', { targetHeight: 1.2 }),
m('blaster-blaster-r', 'Бластер r', 'Оружие', 'blaster-kit', 'blaster-r', { targetHeight: 1.2 }),
m('blaster-bullet-foam-thick', 'Толстая пенопл. пуля', 'Оружие', 'blaster-kit', 'bullet-foam-thick', { targetHeight: 0.4 }),
m('blaster-bullet-foam-tip-thick', 'Толстая пенопл. пуля с наконеч.', 'Оружие', 'blaster-kit', 'bullet-foam-tip-thick', { targetHeight: 0.4 }),
m('blaster-bullet-foam-tip', 'Пенопл. пуля с наконеч.', 'Оружие', 'blaster-kit', 'bullet-foam-tip', { targetHeight: 0.4 }),
m('blaster-bullet-foam', 'Пенопл. пуля', 'Оружие', 'blaster-kit', 'bullet-foam', { targetHeight: 0.4 }),
m('blaster-clip-large', 'Скрепка большой', 'Оружие', 'blaster-kit', 'clip-large', { targetHeight: 1 }),
m('blaster-clip-small', 'Скрепка маленький', 'Оружие', 'blaster-kit', 'clip-small', { targetHeight: 1 }),
m('blaster-crate-medium', 'Ящик средний', 'Оружие', 'blaster-kit', 'crate-medium', { targetHeight: 1 }),
m('blaster-crate-small', 'Ящик маленький', 'Оружие', 'blaster-kit', 'crate-small', { targetHeight: 1 }),
m('blaster-crate-wide', 'Ящик широкий', 'Оружие', 'blaster-kit', 'crate-wide', { targetHeight: 1 }),
m('blaster-grenade-a', 'Граната a', 'Оружие', 'blaster-kit', 'grenade-a', { targetHeight: 0.6 }),
m('blaster-grenade-b', 'Граната b', 'Оружие', 'blaster-kit', 'grenade-b', { targetHeight: 0.6 }),
m('blaster-scope-large-a', 'Scope большой a', 'Оружие', 'blaster-kit', 'scope-large-a', { targetHeight: 1 }),
m('blaster-scope-large-b', 'Scope большой b', 'Оружие', 'blaster-kit', 'scope-large-b', { targetHeight: 1 }),
m('blaster-scope-small', 'Scope маленький', 'Оружие', 'blaster-kit', 'scope-small', { targetHeight: 1 }),
m('blaster-silencer-larger', 'Silencer larger', 'Оружие', 'blaster-kit', 'silencer-larger', { targetHeight: 1 }),
m('blaster-silencer-small', 'Silencer маленький', 'Оружие', 'blaster-kit', 'silencer-small', { targetHeight: 1 }),
m('blaster-smoke', 'Дым', 'Оружие', 'blaster-kit', 'smoke', { targetHeight: 1 }),
m('blaster-target-detail', 'Мишень Деталь', 'Оружие', 'blaster-kit', 'target-detail', { targetHeight: 1 }),
m('blaster-target-fragment-large', 'Мишень фрагмент большой', 'Оружие', 'blaster-kit', 'target-fragment-large', { targetHeight: 1 }),
m('blaster-target-fragment-small', 'Мишень фрагмент маленький', 'Оружие', 'blaster-kit', 'target-fragment-small', { targetHeight: 1 }),
m('blaster-target-large', 'Мишень большой', 'Оружие', 'blaster-kit', 'target-large', { targetHeight: 1 }),
m('blaster-target-small', 'Мишень маленький', 'Оружие', 'blaster-kit', 'target-small', { targetHeight: 1 }),
// === Праздники === (50)
m('holiday-bench-short', 'Скамейка короткий', 'Праздники', 'holiday-kit', 'bench-short', { targetHeight: 1.5 }),
m('holiday-bench', 'Скамейка', 'Праздники', 'holiday-kit', 'bench', { targetHeight: 1.5 }),
m('holiday-cabin-corner-bottom', 'Хижина угол низ', 'Праздники', 'holiday-kit', 'cabin-corner-bottom', { targetHeight: 5 }),
m('holiday-cabin-corner-logs', 'Хижина угол брёвна', 'Праздники', 'holiday-kit', 'cabin-corner-logs', { targetHeight: 5 }),
m('holiday-cabin-corner', 'Хижина угол', 'Праздники', 'holiday-kit', 'cabin-corner', { targetHeight: 5 }),
m('holiday-cabin-door-rotate', 'Хижина Дверь', 'Праздники', 'holiday-kit', 'cabin-door-rotate', { targetHeight: 5 }),
m('holiday-cabin-doorway-center', 'Хижина проём центр', 'Праздники', 'holiday-kit', 'cabin-doorway-center', { targetHeight: 5 }),
m('holiday-cabin-doorway-left', 'Хижина проём лев.', 'Праздники', 'holiday-kit', 'cabin-doorway-left', { targetHeight: 5 }),
m('holiday-cabin-doorway-right', 'Хижина проём прав.', 'Праздники', 'holiday-kit', 'cabin-doorway-right', { targetHeight: 5 }),
m('holiday-cabin-doorway', 'Хижина проём', 'Праздники', 'holiday-kit', 'cabin-doorway', { targetHeight: 5 }),
m('holiday-cabin-fence', 'Хижина Забор', 'Праздники', 'holiday-kit', 'cabin-fence', { targetHeight: 5 }),
m('holiday-cabin-overhang-door-rotate', 'Хижина с навесом Дверь', 'Праздники', 'holiday-kit', 'cabin-overhang-door-rotate', { targetHeight: 5 }),
m('holiday-cabin-overhang-doorway', 'Хижина с навесом проём', 'Праздники', 'holiday-kit', 'cabin-overhang-doorway', { targetHeight: 5 }),
m('holiday-cabin-roof-chimney', 'Хижина Крыша Дымоход', 'Праздники', 'holiday-kit', 'cabin-roof-chimney', { targetHeight: 5 }),
m('holiday-cabin-roof-corner', 'Хижина Крыша угол', 'Праздники', 'holiday-kit', 'cabin-roof-corner', { targetHeight: 5 }),
m('holiday-cabin-roof-dormer', 'Хижина Крыша мансарда', 'Праздники', 'holiday-kit', 'cabin-roof-dormer', { targetHeight: 5 }),
m('holiday-cabin-roof-point', 'Хижина Крыша остриё', 'Праздники', 'holiday-kit', 'cabin-roof-point', { targetHeight: 5 }),
m('holiday-cabin-roof-snow-chimney', 'Хижина Крыша Снег Дымоход', 'Праздники', 'holiday-kit', 'cabin-roof-snow-chimney', { targetHeight: 5 }),
m('holiday-cabin-roof-snow-corner', 'Хижина Крыша Снег угол', 'Праздники', 'holiday-kit', 'cabin-roof-snow-corner', { targetHeight: 5 }),
m('holiday-cabin-roof-snow-dormer', 'Хижина Крыша Снег мансарда', 'Праздники', 'holiday-kit', 'cabin-roof-snow-dormer', { targetHeight: 5 }),
m('holiday-cabin-roof-snow-point', 'Хижина Крыша Снег остриё', 'Праздники', 'holiday-kit', 'cabin-roof-snow-point', { targetHeight: 5 }),
m('holiday-cabin-roof-snow', 'Хижина Крыша Снег', 'Праздники', 'holiday-kit', 'cabin-roof-snow', { targetHeight: 5 }),
m('holiday-cabin-roof-top', 'Хижина Крыша верх', 'Праздники', 'holiday-kit', 'cabin-roof-top', { targetHeight: 5 }),
m('holiday-cabin-roof', 'Хижина Крыша', 'Праздники', 'holiday-kit', 'cabin-roof', { targetHeight: 5 }),
m('holiday-cabin-wall-low', 'Хижина Стена низкий', 'Праздники', 'holiday-kit', 'cabin-wall-low', { targetHeight: 5 }),
m('holiday-cabin-wall-roof-center', 'Хижина Стена Крыша центр', 'Праздники', 'holiday-kit', 'cabin-wall-roof-center', { targetHeight: 5 }),
m('holiday-cabin-wall-roof', 'Хижина Стена Крыша', 'Праздники', 'holiday-kit', 'cabin-wall-roof', { targetHeight: 5 }),
m('holiday-cabin-wall-wreath', 'Хижина Стена венок', 'Праздники', 'holiday-kit', 'cabin-wall-wreath', { targetHeight: 5 }),
m('holiday-cabin-wall', 'Хижина Стена', 'Праздники', 'holiday-kit', 'cabin-wall', { targetHeight: 5 }),
m('holiday-cabin-window-a', 'Хижина Окно a', 'Праздники', 'holiday-kit', 'cabin-window-a', { targetHeight: 5 }),
m('holiday-cabin-window-b', 'Хижина Окно b', 'Праздники', 'holiday-kit', 'cabin-window-b', { targetHeight: 5 }),
m('holiday-cabin-window-c', 'Хижина Окно c', 'Праздники', 'holiday-kit', 'cabin-window-c', { targetHeight: 5 }),
m('holiday-cabin-window-large', 'Хижина Окно большой', 'Праздники', 'holiday-kit', 'cabin-window-large', { targetHeight: 5 }),
m('holiday-candy-cane-green', 'Конфета cane зелёный', 'Праздники', 'holiday-kit', 'candy-cane-green', { targetHeight: 1.5 }),
m('holiday-candy-cane-red', 'Конфета cane красный', 'Праздники', 'holiday-kit', 'candy-cane-red', { targetHeight: 1.5 }),
m('holiday-festivus-pole', 'Festivus pole', 'Праздники', 'holiday-kit', 'festivus-pole', { targetHeight: 1.5 }),
m('holiday-floor-stone', 'Пол Камень', 'Праздники', 'holiday-kit', 'floor-stone', { targetHeight: 1.5 }),
m('holiday-floor-wood-snow', 'Пол дерево Снег', 'Праздники', 'holiday-kit', 'floor-wood-snow', { targetHeight: 0.8 }),
m('holiday-floor-wood', 'Пол дерево', 'Праздники', 'holiday-kit', 'floor-wood', { targetHeight: 1.5 }),
m('holiday-gingerbread-man', 'Имбирный пряник man', 'Праздники', 'holiday-kit', 'gingerbread-man', { targetHeight: 1.5 }),
m('holiday-gingerbread-woman', 'Имбирный пряник woman', 'Праздники', 'holiday-kit', 'gingerbread-woman', { targetHeight: 1.5 }),
m('holiday-hanukkah-dreidel', 'Ханука дрейдл', 'Праздники', 'holiday-kit', 'hanukkah-dreidel', { targetHeight: 1.5 }),
m('holiday-hanukkah-menorah-candles', 'Ханука менора candles', 'Праздники', 'holiday-kit', 'hanukkah-menorah-candles', { targetHeight: 0.6 }),
m('holiday-hanukkah-menorah', 'Ханука менора', 'Праздники', 'holiday-kit', 'hanukkah-menorah', { targetHeight: 1.5 }),
m('holiday-kwanzaa-kikombe', 'Kwanzaa kikombe', 'Праздники', 'holiday-kit', 'kwanzaa-kikombe', { targetHeight: 1.5 }),
m('holiday-kwanzaa-kinara-alternative', 'Kwanzaa kinara alternative', 'Праздники', 'holiday-kit', 'kwanzaa-kinara-alternative', { targetHeight: 1.5 }),
m('holiday-kwanzaa-kinara', 'Kwanzaa kinara', 'Праздники', 'holiday-kit', 'kwanzaa-kinara', { targetHeight: 1.5 }),
m('holiday-lantern-hanging', 'Фонарь подвесной', 'Праздники', 'holiday-kit', 'lantern-hanging', { targetHeight: 1.5 }),
m('holiday-lantern', 'Фонарь', 'Праздники', 'holiday-kit', 'lantern', { targetHeight: 1.5 }),
m('holiday-lights-colored', 'Свет цветной', 'Праздники', 'holiday-kit', 'lights-colored', { targetHeight: 1.5 }),
// === Поезд === (модели holiday-kit: локомотив, вагоны, рельсы.
// GLB-файлы уже в kubikon-assets/models/holiday-kit/ — регистрируем
// в каталоге, чтобы можно было ставить на сцену и в раннер-играх).
m('train-locomotive', 'Поезд: локомотив', 'Поезд', 'holiday-kit', 'train-locomotive', { targetHeight: 3 }),
m('train-tender', 'Поезд: тендер', 'Поезд', 'holiday-kit', 'train-tender', { targetHeight: 3 }),
m('train-wagon', 'Поезд: вагон', 'Поезд', 'holiday-kit', 'train-wagon', { targetHeight: 3 }),
m('train-wagon-short', 'Поезд: вагон короткий', 'Поезд', 'holiday-kit', 'train-wagon-short', { targetHeight: 3 }),
m('train-wagon-flat', 'Поезд: платформа', 'Поезд', 'holiday-kit', 'train-wagon-flat', { targetHeight: 2 }),
m('train-wagon-flat-short', 'Поезд: платформа короткая', 'Поезд', 'holiday-kit', 'train-wagon-flat-short', { targetHeight: 2 }),
m('train-wagon-logs', 'Поезд: вагон с брёвнами', 'Поезд', 'holiday-kit', 'train-wagon-logs', { targetHeight: 3 }),
m('trainset-rail-straight', 'Рельсы прямые', 'Поезд', 'holiday-kit', 'trainset-rail-straight', { targetHeight: 0.4 }),
m('trainset-rail-detailed-straight', 'Рельсы прямые детальные', 'Поезд', 'holiday-kit', 'trainset-rail-detailed-straight', { targetHeight: 0.4 }),
m('trainset-rail-bend', 'Рельсы поворот', 'Поезд', 'holiday-kit', 'trainset-rail-bend', { targetHeight: 0.4 }),
m('trainset-rail-corner', 'Рельсы угол', 'Поезд', 'holiday-kit', 'trainset-rail-corner', { targetHeight: 0.4 }),
// === Выживание === (50)
m('survival-barrel-open', 'Бочка открытый', 'Выживание', 'survival-kit', 'barrel-open', { targetHeight: 1 }),
m('survival-barrel', 'Бочка', 'Выживание', 'survival-kit', 'barrel', { targetHeight: 1 }),
m('survival-bedroll-frame', 'Спальник рама', 'Выживание', 'survival-kit', 'bedroll-frame', { targetHeight: 1 }),
m('survival-bedroll-packed', 'Свёрнутый коврик', 'Выживание', 'survival-kit', 'bedroll-packed', { targetHeight: 1 }),
m('survival-bedroll', 'Спальник', 'Выживание', 'survival-kit', 'bedroll', { targetHeight: 1 }),
m('survival-bottle-large', 'Бутылка большой', 'Выживание', 'survival-kit', 'bottle-large', { targetHeight: 1 }),
m('survival-bottle', 'Бутылка', 'Выживание', 'survival-kit', 'bottle', { targetHeight: 1 }),
m('survival-box-large-open', 'Коробка большой открытый', 'Выживание', 'survival-kit', 'box-large-open', { targetHeight: 0.8 }),
m('survival-box-large', 'Коробка большой', 'Выживание', 'survival-kit', 'box-large', { targetHeight: 0.8 }),
m('survival-box-open', 'Коробка открытый', 'Выживание', 'survival-kit', 'box-open', { targetHeight: 0.8 }),
m('survival-box', 'Коробка', 'Выживание', 'survival-kit', 'box', { targetHeight: 0.8 }),
m('survival-bucket', 'Ведро', 'Выживание', 'survival-kit', 'bucket', { targetHeight: 0.8 }),
m('survival-campfire-fishing-stand', 'Костёр рыболов. Подставка', 'Выживание', 'survival-kit', 'campfire-fishing-stand', { targetHeight: 1 }),
m('survival-campfire-pit', 'Костёр яма', 'Выживание', 'survival-kit', 'campfire-pit', { targetHeight: 1 }),
m('survival-campfire-stand', 'Костёр Подставка', 'Выживание', 'survival-kit', 'campfire-stand', { targetHeight: 1 }),
m('survival-chest', 'Сундук', 'Выживание', 'survival-kit', 'chest', { targetHeight: 0.8 }),
m('survival-fence-doorway', 'Забор проём', 'Выживание', 'survival-kit', 'fence-doorway', { targetHeight: 1 }),
m('survival-fence-fortified', 'Забор укреплённый', 'Выживание', 'survival-kit', 'fence-fortified', { targetHeight: 1 }),
m('survival-fence', 'Забор', 'Выживание', 'survival-kit', 'fence', { targetHeight: 1 }),
m('survival-fish-large', 'Рыба большой', 'Выживание', 'survival-kit', 'fish-large', { targetHeight: 1 }),
m('survival-fish', 'Рыба', 'Выживание', 'survival-kit', 'fish', { targetHeight: 1 }),
m('survival-floor-hole', 'Дыра в полу', 'Выживание', 'survival-kit', 'floor-hole', { targetHeight: 1 }),
m('survival-floor-old', 'Пол старый', 'Выживание', 'survival-kit', 'floor-old', { targetHeight: 1 }),
m('survival-floor', 'Пол', 'Выживание', 'survival-kit', 'floor', { targetHeight: 1 }),
m('survival-grass-large', 'Высокая трава', 'Выживание', 'survival-kit', 'grass-large', { targetHeight: 1 }),
m('survival-grass', 'Трава', 'Выживание', 'survival-kit', 'grass', { targetHeight: 1 }),
m('survival-metal-panel-narrow', 'Metal panel узкий', 'Выживание', 'survival-kit', 'metal-panel-narrow', { targetHeight: 1 }),
m('survival-metal-panel-screws-half', 'Metal panel screws половина', 'Выживание', 'survival-kit', 'metal-panel-screws-half', { targetHeight: 1 }),
m('survival-metal-panel-screws-narrow', 'Metal panel screws узкий', 'Выживание', 'survival-kit', 'metal-panel-screws-narrow', { targetHeight: 1 }),
m('survival-metal-panel-screws', 'Metal panel screws', 'Выживание', 'survival-kit', 'metal-panel-screws', { targetHeight: 1 }),
m('survival-metal-panel', 'Metal panel', 'Выживание', 'survival-kit', 'metal-panel', { targetHeight: 1 }),
m('survival-patch-grass-large', 'Patch Высокая трава', 'Выживание', 'survival-kit', 'patch-grass-large', { targetHeight: 1 }),
m('survival-patch-grass', 'Patch Трава', 'Выживание', 'survival-kit', 'patch-grass', { targetHeight: 1 }),
m('survival-resource-planks', 'Resource planks', 'Выживание', 'survival-kit', 'resource-planks', { targetHeight: 1 }),
m('survival-resource-stone-large', 'Resource Камень большой', 'Выживание', 'survival-kit', 'resource-stone-large', { targetHeight: 1 }),
m('survival-resource-stone', 'Resource Камень', 'Выживание', 'survival-kit', 'resource-stone', { targetHeight: 1 }),
m('survival-resource-wood', 'Resource дерево', 'Выживание', 'survival-kit', 'resource-wood', { targetHeight: 1 }),
m('survival-rock-a', 'Камень a', 'Выживание', 'survival-kit', 'rock-a', { targetHeight: 1 }),
m('survival-rock-b', 'Камень b', 'Выживание', 'survival-kit', 'rock-b', { targetHeight: 1 }),
m('survival-rock-c', 'Камень c', 'Выживание', 'survival-kit', 'rock-c', { targetHeight: 1 }),
m('survival-rock-flat-grass', 'Камень плоский Трава', 'Выживание', 'survival-kit', 'rock-flat-grass', { targetHeight: 1 }),
m('survival-rock-flat', 'Камень плоский', 'Выживание', 'survival-kit', 'rock-flat', { targetHeight: 1 }),
m('survival-rock-sand-a', 'Камень Песок a', 'Выживание', 'survival-kit', 'rock-sand-a', { targetHeight: 1 }),
m('survival-rock-sand-b', 'Камень Песок b', 'Выживание', 'survival-kit', 'rock-sand-b', { targetHeight: 1 }),
m('survival-rock-sand-c', 'Камень Песок c', 'Выживание', 'survival-kit', 'rock-sand-c', { targetHeight: 1 }),
m('survival-signpost-single', 'Signpost одинарный', 'Выживание', 'survival-kit', 'signpost-single', { targetHeight: 1 }),
m('survival-signpost', 'Signpost', 'Выживание', 'survival-kit', 'signpost', { targetHeight: 1 }),
m('survival-structure-canvas', 'Structure canvas', 'Выживание', 'survival-kit', 'structure-canvas', { targetHeight: 1 }),
m('survival-structure-floor', 'Structure пол', 'Выживание', 'survival-kit', 'structure-floor', { targetHeight: 1 }),
m('survival-structure-metal-doorway', 'Structure metal проём', 'Выживание', 'survival-kit', 'structure-metal-doorway', { targetHeight: 1 }),
// === Арена === (50)
m('mini-arena-banner', 'Знамя', 'Арена', 'mini-arena', 'banner', { targetHeight: 1.5 }),
m('mini-arena-block', 'Блок', 'Арена', 'mini-arena', 'block', { targetHeight: 1.2 }),
m('mini-arena-border-corner', 'Бордюр угол', 'Арена', 'mini-arena', 'border-corner', { targetHeight: 1.2 }),
m('mini-arena-border-straight', 'Бордюр Прямой участок', 'Арена', 'mini-arena', 'border-straight', { targetHeight: 1.2 }),
m('mini-arena-bricks', 'Кирпичи', 'Арена', 'mini-arena', 'bricks', { targetHeight: 1.2 }),
m('mini-arena-character-soldier', 'Персонаж Солдат', 'Арена', 'mini-arena', 'character-soldier', { targetHeight: 1.2 }),
m('mini-arena-column-damaged', 'Колонна повреждённый', 'Арена', 'mini-arena', 'column-damaged', { targetHeight: 2 }),
m('mini-arena-column', 'Колонна', 'Арена', 'mini-arena', 'column', { targetHeight: 2 }),
m('mini-arena-floor-detail', 'Пол Деталь', 'Арена', 'mini-arena', 'floor-detail', { targetHeight: 0.4 }),
m('mini-arena-floor', 'Пол', 'Арена', 'mini-arena', 'floor', { targetHeight: 0.4 }),
m('mini-arena-stairs-corner-inner', 'Лестница угол внутр.', 'Арена', 'mini-arena', 'stairs-corner-inner', { targetHeight: 1 }),
m('mini-arena-stairs-corner', 'Лестница угол', 'Арена', 'mini-arena', 'stairs-corner', { targetHeight: 1 }),
m('mini-arena-stairs', 'Лестница', 'Арена', 'mini-arena', 'stairs', { targetHeight: 1 }),
m('mini-arena-statue', 'Статуя', 'Арена', 'mini-arena', 'statue', { targetHeight: 3 }),
m('mini-arena-tree', 'Дерево', 'Арена', 'mini-arena', 'tree', { targetHeight: 1.2 }),
m('mini-arena-trophy', 'Кубок', 'Арена', 'mini-arena', 'trophy', { targetHeight: 1 }),
m('mini-arena-wall-corner', 'Стена угол', 'Арена', 'mini-arena', 'wall-corner', { targetHeight: 2 }),
m('mini-arena-wall-gate', 'Стена Ворота', 'Арена', 'mini-arena', 'wall-gate', { targetHeight: 2 }),
m('mini-arena-wall', 'Стена', 'Арена', 'mini-arena', 'wall', { targetHeight: 2 }),
m('mini-arena-weapon-rack', 'Оружие стойка', 'Арена', 'mini-arena', 'weapon-rack', { targetHeight: 1.5 }),
m('mini-arena-weapon-spear', 'Оружие Копьё', 'Арена', 'mini-arena', 'weapon-spear', { targetHeight: 1.5 }),
m('mini-arena-weapon-sword', 'Оружие Меч', 'Арена', 'mini-arena', 'weapon-sword', { targetHeight: 1.5 }),
m('conveyor-arrow-basic-rounded', 'Стрела basic rounded', 'Арена', 'conveyor-kit', 'arrow-basic-rounded', { targetHeight: 0.6 }),
m('conveyor-arrow-basic', 'Стрела basic', 'Арена', 'conveyor-kit', 'arrow-basic', { targetHeight: 0.6 }),
m('conveyor-arrow-rounded', 'Стрела rounded', 'Арена', 'conveyor-kit', 'arrow-rounded', { targetHeight: 0.6 }),
m('conveyor-arrow', 'Стрела', 'Арена', 'conveyor-kit', 'arrow', { targetHeight: 0.6 }),
m('conveyor-box-large', 'Коробка большой', 'Арена', 'conveyor-kit', 'box-large', { targetHeight: 1 }),
m('conveyor-box-long', 'Коробка длинный', 'Арена', 'conveyor-kit', 'box-long', { targetHeight: 1 }),
m('conveyor-box-small', 'Коробка маленький', 'Арена', 'conveyor-kit', 'box-small', { targetHeight: 1 }),
m('conveyor-box-wide', 'Коробка широкий', 'Арена', 'conveyor-kit', 'box-wide', { targetHeight: 1 }),
m('conveyor-conveyor-bars-fence', 'Конвейер bars Забор', 'Арена', 'conveyor-kit', 'conveyor-bars-fence', { targetHeight: 0.4 }),
m('conveyor-conveyor-bars-high', 'Конвейер bars высокий', 'Арена', 'conveyor-kit', 'conveyor-bars-high', { targetHeight: 0.4 }),
m('conveyor-conveyor-bars-sides', 'Конвейер bars sides', 'Арена', 'conveyor-kit', 'conveyor-bars-sides', { targetHeight: 0.4 }),
m('conveyor-conveyor-bars-stripe-fence', 'Конвейер bars stripe Забор', 'Арена', 'conveyor-kit', 'conveyor-bars-stripe-fence', { targetHeight: 0.4 }),
m('conveyor-conveyor-bars-stripe-high', 'Конвейер bars stripe высокий', 'Арена', 'conveyor-kit', 'conveyor-bars-stripe-high', { targetHeight: 0.4 }),
m('conveyor-conveyor-bars-stripe-side', 'Конвейер bars stripe бок', 'Арена', 'conveyor-kit', 'conveyor-bars-stripe-side', { targetHeight: 0.4 }),
m('conveyor-conveyor-bars-stripe', 'Конвейер bars stripe', 'Арена', 'conveyor-kit', 'conveyor-bars-stripe', { targetHeight: 0.4 }),
m('conveyor-conveyor-bars', 'Конвейер bars', 'Арена', 'conveyor-kit', 'conveyor-bars', { targetHeight: 0.4 }),
m('conveyor-conveyor-cross', 'Конвейер крест', 'Арена', 'conveyor-kit', 'conveyor-cross', { targetHeight: 0.4 }),
m('conveyor-conveyor-junction-t', 'Конвейер Развилка t', 'Арена', 'conveyor-kit', 'conveyor-junction-t', { targetHeight: 0.4 }),
m('conveyor-conveyor-long-part-end', 'Конвейер длинный part конец', 'Арена', 'conveyor-kit', 'conveyor-long-part-end', { targetHeight: 0.4 }),
m('conveyor-conveyor-long-part-middle', 'Конвейер длинный part middle', 'Арена', 'conveyor-kit', 'conveyor-long-part-middle', { targetHeight: 0.4 }),
m('conveyor-conveyor-long-sides-part-end', 'Конвейер длинный sides part конец', 'Арена', 'conveyor-kit', 'conveyor-long-sides-part-end', { targetHeight: 0.4 }),
m('conveyor-conveyor-long-sides-part-middle', 'Конвейер длинный sides part middle', 'Арена', 'conveyor-kit', 'conveyor-long-sides-part-middle', { targetHeight: 0.4 }),
m('conveyor-conveyor-long-sides', 'Конвейер длинный sides', 'Арена', 'conveyor-kit', 'conveyor-long-sides', { targetHeight: 0.4 }),
m('conveyor-conveyor-long-stripe-sides-part-end', 'Конвейер длинный stripe sides part конец', 'Арена', 'conveyor-kit', 'conveyor-long-stripe-sides-part-end', { targetHeight: 0.4 }),
m('conveyor-conveyor-long-stripe-sides-part-middle', 'Конвейер длинный stripe sides part middle', 'Арена', 'conveyor-kit', 'conveyor-long-stripe-sides-part-middle', { targetHeight: 0.4 }),
m('conveyor-conveyor-long-stripe-sides', 'Конвейер длинный stripe sides', 'Арена', 'conveyor-kit', 'conveyor-long-stripe-sides', { targetHeight: 0.4 }),
m('conveyor-conveyor-long-stripe', 'Конвейер длинный stripe', 'Арена', 'conveyor-kit', 'conveyor-long-stripe', { targetHeight: 0.4 }),
m('conveyor-conveyor-long', 'Конвейер длинный', 'Арена', 'conveyor-kit', 'conveyor-long', { targetHeight: 0.4 }),
// === Персонажи === (33)
m('mini-characters-character-female-a', 'Аня', 'Персонажи', 'mini-characters', 'character-female-a', { targetHeight: 1.7 }),
m('mini-characters-character-female-b', 'Маша', 'Персонажи', 'mini-characters', 'character-female-b', { targetHeight: 1.7 }),
m('mini-characters-character-female-c', 'Лена', 'Персонажи', 'mini-characters', 'character-female-c', { targetHeight: 1.7 }),
m('mini-characters-character-female-d', 'Катя', 'Персонажи', 'mini-characters', 'character-female-d', { targetHeight: 1.7 }),
m('mini-characters-character-female-e', 'Оля', 'Персонажи', 'mini-characters', 'character-female-e', { targetHeight: 1.7 }),
m('mini-characters-character-female-f', 'Настя', 'Персонажи', 'mini-characters', 'character-female-f', { targetHeight: 1.7 }),
m('mini-characters-character-male-a', 'Костя', 'Персонажи', 'mini-characters', 'character-male-a', { targetHeight: 1.7 }),
m('mini-characters-character-male-b', 'Максим', 'Персонажи', 'mini-characters', 'character-male-b', { targetHeight: 1.7 }),
m('mini-characters-character-male-c', 'Дима', 'Персонажи', 'mini-characters', 'character-male-c', { targetHeight: 1.7 }),
m('mini-characters-character-male-d', 'Саша', 'Персонажи', 'mini-characters', 'character-male-d', { targetHeight: 1.7 }),
m('mini-characters-character-male-e', 'Артём', 'Персонажи', 'mini-characters', 'character-male-e', { targetHeight: 1.7 }),
m('mini-characters-character-male-f', 'Лёша', 'Персонажи', 'mini-characters', 'character-male-f', { targetHeight: 1.7 }),
// === ДЕТСКАЯ ПЛОЩАДКА (Poly Pizza, CC-BY 3.0) ===
// Используются в L2 «Игры в кальмара» (Дальгона). Атрибуция авторов
// в /public/playground-kit/CREDITS.txt.
mu('pg-slide-google', 'Горка (Poly)', 'Площадка',
'/playground-kit/slide_google.glb', { targetHeight: 4 }),
mu('pg-swing-google', 'Качели (Google)', 'Площадка',
'/playground-kit/swing_set_google.glb', { targetHeight: 3.5 }),
mu('pg-seesaw', 'Качели-балансир', 'Площадка',
'/playground-kit/seesaw_2.glb', { targetHeight: 1.5 }),
mu('pg-carousel', 'Карусель', 'Площадка',
'/playground-kit/merry_go_round.glb', { targetHeight: 2.5 }),
mu('pg-jungle-gym', 'Лазалка-комплекс', 'Площадка',
'/playground-kit/jungle_gym.glb', { targetHeight: 4 }),
// Kenney CC0 — старинная скамейка с кладбища (выбрана МИНом)
m('pg-bench', 'Скамья парковая', 'Площадка', 'graveyard-kit', 'bench',
{ targetHeight: 1.2 }),
// Двойной фонарь с кладбища
m('pg-lamp-double', 'Фонарь двойной', 'Площадка', 'graveyard-kit', 'lightpost-double',
{ targetHeight: 4 }),
// Детальное дерево из nature-kit
m('pg-tree-detailed', 'Дерево детальное', 'Площадка', 'nature-kit', 'tree_detailed',
{ targetHeight: 4 }),
// Куст детальный
m('pg-bush-detailed', 'Куст', 'Площадка', 'nature-kit', 'plant_bushDetailed',
{ targetHeight: 1.2 }),
// Забор из досок
m('pg-fence-planks', 'Забор', 'Площадка', 'nature-kit', 'fence_planks',
{ targetHeight: 1.5 }),
// TOTAL: 644
];
// Авто-проставляем gameplay для всех моделей в категории «Оружие» —
// бластеры (ranged), мечи/копья (melee), щиты пропускаем.
for (const m of MODEL_TYPES) {
if (m.category !== 'Оружие') continue;
if (m.gameplay) continue; // уже задан вручную
const id = m.id;
if (id.startsWith('shield')) continue;
if (id.startsWith('blaster-blaster-')) {
m.gameplay = {
type: 'weapon-ranged',
isWeapon: true,
weaponKind: 'ranged',
description: 'Дальнобойное оружие. Нажми «Добавить в инвентарь» чтобы выдать игроку.',
defaultParams: {
damage: 25, fireRate: 0.18, range: 80,
magazine: 30, reserve: 120, reloadTime: 1.6, auto: true,
},
// Базовые настройки. Подкручиваются через window.weapon3rd(...).
viewModel: {
scale3rd: 1.2, scale1st: 0.7,
position3rd: { x: 0, y: 0, z: 0 },
rotation3rd: { x: 0, y: 0, z: 0 },
},
};
} else if (id === 'weapon-sword') {
m.gameplay = {
type: 'weapon-melee', isWeapon: true, weaponKind: 'melee',
description: 'Меч. ЛКМ — широкий взмах.',
defaultParams: { damage: 40, fireRate: 0.55, range: 2.4, meleeArc: 1.2, auto: false },
viewModel: {
scale3rd: 1.4, scale1st: 1.0,
position3rd: { x: 0, y: 0, z: 0 },
rotation3rd: { x: 0, y: 0, z: 0 },
},
};
} else if (id === 'weapon-spear') {
m.gameplay = {
type: 'weapon-melee', isWeapon: true, weaponKind: 'melee',
description: 'Копьё. ЛКМ — выпад вперёд.',
defaultParams: { damage: 55, fireRate: 0.85, range: 3.2, meleeArc: 0.6, auto: false },
viewModel: {
scale3rd: 1.4, scale1st: 1.0,
position3rd: { x: 0, y: 0, z: 0 },
rotation3rd: { x: 0, y: 0, z: 0 },
},
};
}
}
export const MODEL_CATEGORIES = Array.from(new Set(MODEL_TYPES.map(m => m.category)));
export function getModelType(id) {
return MODEL_TYPES.find(m => m.id === id) || null;
}