From 0b1925fd3bbe58162bf022e9b6145ddf99108718 Mon Sep 17 00:00:00 2001 From: Maxim Dolgolyov Date: Sun, 14 Jun 2026 10:29:35 +0300 Subject: [PATCH] =?UTF-8?q?@=20feat(quantik-game):=20=D1=84=D0=B0=D0=B7?= =?UTF-8?q?=D0=B0=204=20=E2=80=94=20=D0=BA=D0=B2=D0=B0=D0=BD=D1=82=D0=BE?= =?UTF-8?q?=D0=B2=D1=8B=D0=B5=20=D1=81=D0=BF=D0=BE=D1=81=D0=BE=D0=B1=D0=BD?= =?UTF-8?q?=D0=BE=D1=81=D1=82=D0=B8=20+=20SR-=D0=BA=D0=BE=D0=BC=D0=BD?= =?UTF-8?q?=D0=B0=D1=82=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Глава-созвездие quantum (L12–L16) и фирменные механики — всё через безопасную модель спеки, движок и бэкенд НЕ тронуты (engine touch = 0): - Суперпозиция: два тела ball+ball2, goal.when требует ОБА (зеркальный закон). Туннелирование: forbidden-зона wall + fail wall.hit && tunnel<1; способность тратит энергию → setParam(tunnel,1). Коллапс/прицел: пунктир- plot предсказанной траектории на паузе. - Энергия — клиентский ресурс (localStorage quantik-energy, QuantikEnergy). - SR-комната: мини-сессия повторения флешкарт в модалке (НЕ iframe), LS.fcStudySession/fcReview; «Знаю/Легко» дают энергию; текст карт экранируется, картинки — по regex-вайтлисту. Все 5 уровней проверены на реальном движке (2★ достижимы; суперпозиция требует оба тела; туннель-гейт блокирует без заряда). npm test 253/8 baseline; lint:routes 0; цепочка разблокировки проходима. Co-Authored-By: Claude Opus 4.8 (1M context) @ --- CLAUDE.md | 14 + frontend/js/game/levels.js | 295 +++++++++- frontend/js/game/quantik-abilities.js | 518 ++++++++++++++++++ frontend/js/game/quantik-game.js | 59 +- frontend/quantik.html | 112 +++- js/api.js | 4 +- plans/quantik-game/CONTEXT.md | 17 + plans/quantik-game/PLAN.md | 4 +- .../phase-4-quantum-abilities-sr.md | 72 ++- 9 files changed, 1071 insertions(+), 24 deletions(-) create mode 100644 frontend/js/game/quantik-abilities.js diff --git a/CLAUDE.md b/CLAUDE.md index 211976c..f8ec4d8 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -248,3 +248,17 @@ git push origin master - **Карта/запуск без правок map.js** (подтверждён хэндофф Ф2): глава `functions` в `CHAPTERS` (key/title/subtitle/accent) — узлы рисуются по метаданным, тип спеки карте безразличен. `unlockStars` 9/11/13/15/17 ≤ 18 (макс звёзд 6 физ-уровней) → **нет дедлока** (даже только физ-главы дают 18 ≥ 17). `QuantikGame.start`→`SimEngine.mount` тот же; спец-вайринг управления НЕ нужен (те же слайдеры). `tintHeroSpec` тинтует point-героя на `curve.runX/runY` штатно. quantik.html: бейдж темы стал per-level (`level.subject`→Физика/Алгебра) — аддитивно, id `qg-pill`. - **Сервер `validateSpec` (customSimController.js): `zone` в OBJECT_TYPES + поля.** `zone.track` санитизируется как id; `plot.runner.duration` — checkExpr (длина). Готовит авторённые граф-уровни Ф5. x/y/w/h/r зон проходят общий expr-loop. Тест custom-sims.test.js +2 (приём zone+runner спеки; отказ unknown type при разрешённой zone) → 26/26. - **Верификация Ф3**: `node --check` всех изменённых JS + inline-` - + +