/** * docsGames.js — каталог 50 мини-игр-уроков вики Рублокса. * * Раздел K вики. Каждая игра — карточка: { id, num, title, stars, icon, * desc, mechanics, ready }. * - num — порядковый номер 1..50 * - stars — сложность 1..3 * - icon — имя SVG-иконки из docsIcons.jsx (НЕ эмодзи) * - desc — что получится в игре, 1-2 предложения * - mechanics — список механик, которым учит игра * - previewShot — (необязательно) имя файла из public/wiki/ для * превью на карточке. По умолчанию берётся * lessonN-result.png; задаётся, когда другой кадр * урока смотрится на карточке лучше. * - ready — есть ли подробный урок (пока у всех false — наполним позже) * * Группы: * 1-12 — самые простые * 13-28 — простые с механиками * 29-40 — средние * 41-50 — сложные */ export const GAME_GROUPS = [ { id: 'g1', title: 'Группа 1 — Самые простые', stars: 1, hint: 'Постановка объектов, базовые скрипты, события, простые твины.' }, { id: 'g2', title: 'Группа 2 — Простые с механиками', stars: 2, hint: 'NPC, инвентарь, теги, billboard, камера, констрейнты.' }, { id: 'g3', title: 'Группа 3 — Средние', stars: 2, hint: 'Комбинации механик, GUI, состояние игры, NPC-логика.' }, { id: 'g4', title: 'Группа 4 — Сложные', stars: 3, hint: 'Полные игры, мультиплеер, продвинутые системы.' }, { id: 'g5', title: 'Разбор готовых игр', stars: 2, hint: 'Настоящие игры из студии по косточкам: камера и таблички, анимации интерфейса, модальные сцены и кастомные скины. У каждой — кнопка «Открыть оригинал в редакторе».' }, ]; export const GAMES = [ // ── Группа 1 — Самые простые ────────────────────────────────── { id: 'collect-coins', num: 1, group: 'g1', stars: 1, icon: 'coin', title: 'Собери монетки', desc: 'Ходишь по уровню и собираешь жёлтые сферы, счёт растёт.', mechanics: ['события касания', 'счётчик очков', 'удаление объектов'], ready: false }, { id: 'platform-jump', num: 2, group: 'g1', stars: 1, icon: 'jump', title: 'Прыгай по платформам', desc: 'Паркур из примитивов — допрыгай до финиша, не упав вниз.', mechanics: ['примитивы-платформы', 'точка спавна', 'финиш'], ready: false }, { id: 'dont-fall', num: 3, group: 'g1', stars: 1, icon: 'hole', title: 'Не упади', desc: 'Платформы исчезают под ногами — нужно всё время убегать.', mechanics: ['таймеры', 'исчезновение объектов', 'onTouch'], ready: false }, { id: 'button-door', num: 4, group: 'g1', stars: 1, icon: 'door', title: 'Кнопка-открывашка', desc: 'Нажми кнопку клавишей E — и откроется дверь в следующую комнату.', mechanics: ['ProximityPrompt (E)', 'твины', 'перемещение объектов'], ready: false }, { id: 'maze', num: 5, group: 'g1', stars: 1, icon: 'maze', title: 'Лабиринт', desc: 'Найди путь из стен-кубов от старта к выходу из лабиринта.', mechanics: ['постройка из блоков', 'спавн', 'триггер-финиш'], // на карточке лучше виден лабиринт сверху — берём второй скрин урока previewShot: 'lesson5-scene.png', ready: false }, { id: 'color-tiles', num: 6, group: 'g1', stars: 1, icon: 'palette', title: 'Цветные плитки', desc: 'Наступаешь на плитки на полу — и они меняют свой цвет.', mechanics: ['onTouch', 'setColor', 'примитивы-плитки'], ready: false }, { id: 'catch-falling', num: 7, group: 'g1', stars: 1, icon: 'box', title: 'Поймай падающее', desc: 'С неба падают кубы — лови их, пока не упали на землю.', mechanics: ['спавн с таймером', 'физика падения', 'счёт'], ready: false }, { id: 'run-to-finish', num: 8, group: 'g1', stars: 1, icon: 'flag', title: 'Беги к финишу', desc: 'Гонка на время: добеги до финишной черты как можно быстрее.', mechanics: ['таймер', 'триггер-финиш', 'game.ui'], ready: false }, { id: 'traffic-light', num: 9, group: 'g1', stars: 1, icon: 'light', title: 'Светофор', desc: 'Стой на красный, беги на зелёный — успей дойти до конца.', mechanics: ['лампы', 'таймеры', 'проверка движения'], ready: false }, { id: 'spring-jump', num: 10, group: 'g1', stars: 1, icon: 'spring', title: 'Прыжок-пружина', desc: 'Батуты подбрасывают тебя всё выше — допрыгни до верхней площадки.', mechanics: ['пружины (spring)', 'boostJump', 'onTouch'], ready: false }, { id: 'echo-room', num: 11, group: 'g1', stars: 1, icon: 'sound', title: 'Эхо-комната', desc: 'Наступаешь на плитку — играет звук. Собери мелодию из шагов.', mechanics: ['game.sound', 'onTouch', '3D-звук'], ready: false }, { id: 'code-door', num: 12, group: 'g1', stars: 1, icon: 'keypad', title: 'Дверь по коду', desc: 'Введи правильное число в поле ввода — и дверь откроется.', mechanics: ['GUI-поле ввода', 'onSubmit', 'твины'], ready: false }, // ── Группа 2 — Простые с механиками ─────────────────────────── { id: 'trader', num: 13, group: 'g2', stars: 2, icon: 'trader', title: 'Торговец', desc: 'Поговори с NPC-торговцем по клавише E и получи от него предмет.', mechanics: ['NPC', 'диалоги', 'инвентарь'], ready: false }, { id: 'collect-by-tag', num: 14, group: 'g2', stars: 2, icon: 'star', title: 'Собери по тегам', desc: 'Собери все объекты, помеченные тегом «звезда», на уровне.', mechanics: ['теги', 'getTagged', 'счётчик'], ready: false }, { id: 'shooting-range', num: 15, group: 'g2', stars: 2, icon: 'crosshair', title: 'Тир', desc: 'Стреляй по мишеням лучом-raycast и считай выбитые очки.', mechanics: ['raycast', 'onClick', 'счёт'], ready: false }, { id: 'lava-floor', num: 16, group: 'g2', stars: 2, icon: 'lava', title: 'Лава-пол', desc: 'Пол наносит урон — прыгай только по безопасным островкам.', mechanics: ['урон по касанию', 'HP', 'платформы'], ready: false }, { id: 'key-chest', num: 17, group: 'g2', stars: 2, icon: 'key', title: 'Ключ и сундук', desc: 'Найди ключ на уровне, подбери его и открой запертый сундук.', mechanics: ['инвентарь', 'has()', 'ProximityPrompt'], ready: false }, { id: 'swing', num: 18, group: 'g2', stars: 2, icon: 'swing', title: 'Качели', desc: 'Запрыгни на качели-констрейнт и катайся туда-сюда.', mechanics: ['констрейнт-петля (hinge)', 'физика'], ready: false }, { id: 'elevator', num: 19, group: 'g2', stars: 2, icon: 'elevator', title: 'Лифт', desc: 'Платформа-лифт возит тебя между этажами здания.', mechanics: ['твины', 'движущаяся платформа', 'триггеры'], ready: false }, { id: 'enemy-names', num: 20, group: 'g2', stars: 2, icon: 'tag', title: 'Имена над врагами', desc: 'У каждого врага над головой висит метка с именем и его HP.', mechanics: ['billboard-метки', 'NPC', 'HP'], ready: false }, { id: 'chaser', num: 21, group: 'g2', stars: 2, icon: 'chase', title: 'Преследователь', desc: 'NPC гонится за тобой по всему уровню — убегай и прячься.', mechanics: ['NPC follow', 'distance', 'onTick'], ready: false }, { id: 'danger-zone', num: 22, group: 'g2', stars: 2, icon: 'warning', title: 'Зона опасности', desc: 'Войдёшь в триггер-зону — начинаешь терять здоровье.', mechanics: ['триггер-зона', 'onTouch/onUntouch', 'урон'], ready: false }, { id: 'switches', num: 23, group: 'g2', stars: 2, icon: 'lever', title: 'Переключатели', desc: 'Активируй три рычага в правильном порядке, чтобы пройти дальше.', mechanics: ['ProximityPrompt', 'состояние', 'проверка порядка'], ready: false }, { id: 'falling-bridge', num: 24, group: 'g2', stars: 2, icon: 'bridge', title: 'Падающий мост', desc: 'Мост собран из исчезающих платформ — беги, пока он не рухнул.', mechanics: ['таймеры', 'исчезновение', 'onTouch'], ready: false }, { id: 'flyby-camera', num: 25, group: 'g2', stars: 2, icon: 'camera', title: 'Камера-облёт', desc: 'При старте игры камера красиво облетает весь уровень.', mechanics: ['game.camera.cutscene', 'onCutsceneDone'], ready: false }, { id: 'coin-magnet', num: 26, group: 'g2', stars: 2, icon: 'magnet', title: 'Магнит монет', desc: 'Монеты сами летят к игроку, когда он подходит близко.', mechanics: ['твин к позиции', 'distance', 'onTick'], ready: false }, { id: 'double-jump', num: 27, group: 'g2', stars: 2, icon: 'doubleArrow', title: 'Двойной прыжок', desc: 'Паркур, где не пройти без двойного прыжка в воздухе.', mechanics: ['setDoubleJump', 'платформы', 'финиш'], ready: false }, { id: 'ghost-walls', num: 28, group: 'g2', stars: 2, icon: 'ghost', title: 'Призрачные стены', desc: 'Некоторые стены становятся проходимыми — найди секретный путь.', mechanics: ['passThrough', 'триггеры', 'секреты'], ready: false }, // ── Группа 3 — Средние ──────────────────────────────────────── { id: 'shop', num: 29, group: 'g3', stars: 2, icon: 'cart', title: 'Магазин', desc: 'GUI-список товаров — покупай предметы за собранные монеты.', mechanics: ['GUI-список', 'экономика', 'инвентарь'], ready: false }, { id: 'quest-tasks', num: 30, group: 'g3', stars: 2, icon: 'scroll', title: 'Квест с заданиями', desc: 'NPC выдаёт цепочку заданий — выполни их все по очереди.', mechanics: ['NPC-диалоги', 'состояние квеста', 'события'], ready: false }, { id: 'base-defense', num: 31, group: 'g3', stars: 2, icon: 'shield', title: 'Защита базы', desc: 'Враги идут к твоей базе — останавливай их, пока не дошли.', mechanics: ['NPC-волны', 'raycast', 'HP базы'], ready: false }, { id: 'lap-race', num: 32, group: 'g3', stars: 2, icon: 'car', title: 'Гонка с кругами', desc: 'Проедь несколько кругов через чекпоинты на время.', mechanics: ['чекпоинты', 'таймер', 'счётчик кругов'], ready: false }, { id: 'boss-platformer', num: 33, group: 'g3', stars: 2, icon: 'boss', title: 'Платформер с боссом', desc: 'Пройди паркур до NPC-босса и победи его в конце уровня.', mechanics: ['паркур', 'NPC-босс', 'бой'], ready: false }, { id: 'harvest', num: 34, group: 'g3', stars: 2, icon: 'plant', title: 'Сбор урожая', desc: 'Растения растут на грядках — собирай их вовремя, пока спелые.', mechanics: ['твины роста', 'таймеры', 'счёт'], ready: false }, { id: 'hide-from-npc', num: 35, group: 'g3', stars: 2, icon: 'hide', title: 'Прятки от NPC', desc: 'NPC ищет тебя по уровню — прячься за объектами, чтобы не нашёл.', mechanics: ['NPC-логика', 'raycast видимости', 'distance'], ready: false }, { id: 'box-puzzle', num: 36, group: 'g3', stars: 2, icon: 'puzzle', title: 'Головоломка с ящиками', desc: 'Двигай ящики на кнопки-плиты, чтобы открыть запертую дверь.', mechanics: ['физика толкания', 'кнопки-плиты', 'логика'], ready: false }, { id: 'obstacle-course', num: 37, group: 'g3', stars: 2, icon: 'obstacle', title: 'Полоса препятствий', desc: 'Шипы, ямы и движущиеся платформы — пройди всё без смерти.', mechanics: ['шипы', 'движущиеся платформы', 'чекпоинты'], ready: false }, { id: 'music-game', num: 38, group: 'g3', stars: 2, icon: 'music', title: 'Музыкальная игра', desc: 'Запомни и повтори последовательность звуков, которую сыграла игра.', mechanics: ['game.sound', 'массивы', 'проверка ответа'], ready: false }, { id: 'tower-build', num: 39, group: 'g3', stars: 2, icon: 'tower', title: 'Башня — стройка', desc: 'Ставь блоки по подсказкам скрипта и построй высокую башню.', mechanics: ['спавн блоков', 'GUI-подсказки', 'счётчик'], ready: false }, { id: 'wave-survival', num: 40, group: 'g3', stars: 2, icon: 'zombie', title: 'Выживание от волн', desc: 'Волны врагов нападают одна за другой — продержись N секунд.', mechanics: ['NPC-волны', 'таймеры', 'HP'], ready: false }, // ── Группа 4 — Сложные ──────────────────────────────────────── { id: 'adventure-platformer', num: 41, group: 'g4', stars: 3, icon: 'map', title: 'Платформер-приключение', desc: 'Большой уровень с чекпоинтами, врагами и финишем-сокровищем.', mechanics: ['большой уровень', 'чекпоинты', 'враги', 'финиш'], ready: false }, { id: 'rpg-village', num: 42, group: 'g4', stars: 3, icon: 'village', title: 'RPG-деревня', desc: 'Деревня с NPC, диалогами, квестами, инвентарём и торговлей.', mechanics: ['NPC', 'квесты', 'инвентарь', 'экономика'], ready: false }, { id: 'obstacle-race', num: 43, group: 'g4', stars: 3, icon: 'car', title: 'Гонка с препятствиями', desc: 'Трасса с бустами скорости и ловушками — приди первым к финишу.', mechanics: ['бусты', 'ловушки', 'таймер', 'чекпоинты'], ready: false }, { id: 'tower-defense', num: 44, group: 'g4', stars: 3, icon: 'castle', title: 'Tower Defense', desc: 'Ставь башни вдоль дороги и отбивай волны наступающих врагов.', mechanics: ['GUI-меню', 'NPC-волны', 'башни', 'экономика'], ready: false }, { id: 'arena-shooter', num: 45, group: 'g4', stars: 3, icon: 'gun', title: 'Стрелялка-арена', desc: 'Оружие, враги, очки и GUI-счёт — выживай на боевой арене.', mechanics: ['оружие (Tool)', 'raycast', 'NPC', 'GUI-счёт'], ready: false }, { id: 'clicker', num: 46, group: 'g4', stars: 3, icon: 'click', title: 'Кликер', desc: 'GUI-игра: кликай по кнопке, копи очки и покупай улучшения.', mechanics: ['GUI', 'game.save', 'экономика улучшений'], ready: false }, { id: 'escape-quest', num: 47, group: 'g4', stars: 3, icon: 'door', title: 'Квест-побег', desc: 'Комната-головоломка: реши все загадки и найди выход.', mechanics: ['головоломки', 'инвентарь', 'состояние', 'триггеры'], ready: false }, { id: 'mp-tag', num: 48, group: 'g4', stars: 3, icon: 'chase', title: 'Мультиплеер: Салки', desc: 'Несколько игроков, один водящий — догони и осаль остальных.', mechanics: ['мультиплеер', 'команды', 'game.room'], ready: false }, { id: 'mp-race', num: 49, group: 'g4', stars: 3, icon: 'trophy', title: 'Мультиплеер: Гонка', desc: 'Соревнование игроков на трассе с общим счётом комнаты.', mechanics: ['мультиплеер', 'game.room', 'чекпоинты'], ready: false }, { id: 'make-your-own', num: 50, group: 'g4', stars: 3, icon: 'sparkles', title: 'Своя игра', desc: 'Гайд: как придумать и собрать собственную игру с нуля.', mechanics: ['проектирование игры', 'все механики вместе'], ready: false }, // ── Группа 5 — Разбор готовых игр ───────────────────────────── // Это НАСТОЯЩИЕ игры из студии. У карточек есть openProjectId — // кнопка открывает оригинал игры в редакторе (а не строит из билдера). { id: 'guide-dvor', num: 51, group: 'g5', stars: 1, icon: 'camera', title: 'Двор с табличкой', desc: 'Учимся крутить камеру мышкой как в Roblox и нажимать на 3D-таблички прямо в мире.', mechanics: ['камера и мышь', 'ПКМ-orbit и зум', 'Shift-Lock (L)', '3D-таблички'], previewShot: 'guide-dvor-scene.png', openProjectId: 1991, ready: true }, { id: 'guide-vitrina', num: 52, group: 'g5', stars: 2, icon: 'palette', title: 'Витрина GUI', desc: 'Живые кнопки магазина: градиенты, пульсация, поворот и плавные твины при нажатии.', mechanics: ['GUI-кнопки', 'анимации (pulse/rotate)', 'твины', 'счётчик монет'], previewShot: 'guide-vitrina-scene.png', openProjectId: 1995, ready: true }, { id: 'guide-sunduk', num: 53, group: 'g5', stars: 2, icon: 'scroll', title: 'Тайна старого сундука', desc: 'Кат-сцены и диалоги: затемнение, прожектор на сундуке, выбор приза и финальная победа.', mechanics: ['game.modal', 'диалог по строкам', 'прожектор + камера', 'лутбокс'], previewShot: 'guide-sunduk-scene.png', openProjectId: 2037, ready: true }, { id: 'guide-zoo', num: 54, group: 'g5', stars: 2, icon: 'gamepad', title: 'Парк животных', desc: 'Кастомные скины: герой превращается в пончик, машину, пришельца. Магазин скинов на B.', mechanics: ['game.player.setSkin', 'non-humanoid скины', 'магазин скинов', 'таблички'], previewShot: 'guide-zoo-scene.png', openProjectId: 2046, ready: true }, { id: 'guide-strelka', num: 55, group: 'g5', stars: 1, icon: 'gamepad', title: 'Туториал — собери монетки', desc: '3D-стрелка-указатель «иди сюда»: дорожка из бегущих шевронов + парящий маркер над целью. Дошёл — стрелка прыгает на следующую.', mechanics: ['game.fx.pointer', 'preset стрелки', 'setTarget/update', 'onTouch цели'], previewShot: 'guide-strelka-scene.png', openProjectId: 333, ready: true }, { id: 'guide-lego', num: 56, group: 'g5', stars: 1, icon: 'cube', title: 'Лего-полигон — studs материал', desc: 'Лего-кружки (studs) на блоках и примитивах любого цвета: зелёный пол, оранжевая стена, разноцветные кубы + готовый лего-сет (дерево, дом, машина).', mechanics: ['material: studs', 'studs-block (цвет на блок)', 'тайлинг по размеру', 'лего-сет моделей'], previewShot: 'guide-lego-scene.png', openProjectId: 2217, ready: true }, { id: 'guide-dynamic-label', num: 57, group: 'g5', stars: 2, icon: 'clock', title: 'Часовая башня — живые 3D-надписи', desc: 'Живые 3D-надписи + витрина-лутбокс: таймер над башней, ряд подиумов с вращающимися предметами и наклонными табличками-ценниками, счётчик монет (клик +10), HP над зомби. Текст крепится плоско к грани наклонного примитива.', mechanics: ['scene.bindLabel', 'scene.bindTimer', 'attachFace (текст на грани)', '5 пресетов (gameui/boss-hp/reward…)', 'richText ', 'game.format.money', 'obj.move/rotate', 'onClick объекта'], previewShot: 'guide-dynamic-label-scene.png', openProjectId: 2261, ready: true }, ];