Files
c250068e8a2ecc6e52eff338cac5d10ed9ca74ec
T
Цены Озёр/Моря/Океана под цели ×3/×4/×5 Реки (Этап 39): после лестницы весов Этапа 38 доходность новых вод была ×5–15 — урезаны цены 24 видов (Озёра k≈0.201: zander 8, chuch 6, crayfish 40, bleak 4, roundel 5, eelpout 11, tench 16, navaga 50, rudd 5, cisco 18; Море k≈0.253: herring 8, mackerel 18, flounder 33, tuna 46, swordfish 81; Океан k≈0.192: moray 5, grouper 5, turtle 9, angler 21, octopus 23, manta 29, shark 31, squid 37, whale 67), цены Реки не тронуты. tools/balance.mjs: новая опция --price id:цена (what-if 🪙/кг, паттерн --set: парсинг/валидация id/calcTable/WHAT-IF строка/help) — набор цен собран и сверен через скрипт ДО и ПОСЛЕ правки index.html (цифры совпали). Итог (нейтральная снасть): Озёра 194.1/214.5 (×2.98/×1.70 Реки), Море 262.7/304.2 (×4.04/×2.42), Океан 329.1/398.9 (×5.06/×3.17), Река 65.1/125.9 — цель по ДНЮ (×3/×4/×5): единый множитель масштабирует обе фазы, а ночь/день у новых вод ×1.11–1.21 против ×1.93 у Реки — «обе фазы» ценами недостижимо (нужна правка *_WEIGHTS); зафиксировано в AGENTS.md. Инвариант «новая вода доходнее в ОБЕ фазы» держится с запасом: Море/Озёра ×1.35/×1.42, Океан/Море ×1.25/×1.31 (тонкий запас этапа 38 ×1.06 снят). Тесты: пины lc1 (10f) — 24 строки (колонка price) + текст ассерта; тесты наград M4/§9k2/M6/shiny читают w×price динамически — без изменений (босс-рак 200→40). 193/193 PASS, exit 0; check.mjs OK. Доки: AGENTS.md (финальные пины + --price), README (4–1500 🪙/кг), KODA.md (0.05–100 кг, 4–1500 🪙/кг), шапка balance.mjs (пины), DEVLOG (Этап 39).
Встроенный emoji-шрифт (Этап 28): субсет Noto Color Emoji (COLRv1, OFL) как base64 @font-face 'EmojiEmbedded' в index.html — 57 глифов (все emoji игры), 78 КБ woff2, +105 КБ base64 (155→260 КБ; публикуемый zip 110.9 КБ, лимит 1.22 — 100 МБ). Внешний .woff2 невозможен: pack.mjs публикует строго один index.html. Шрифт ПЕРВЫМ в font-stack html,body и во всех 10 ctx.font (константа UI_FONT, секция «ОТРИСОВКА») — единый Google-стиль emoji на всех платформах; headless-скриншоты больше не зависят от системных emoji-шрифтов. Первый кадр ждёт document.fonts.load('16px "EmojiEmbedded"') с timeout-фолбэком 1.5 с (canvas-emoji 💥🌀⚡💪🐟💤). tools/emoji-font.py — генератор: вытаскивает emoji-кодопоинты из index.html (одна точка истины) → fontTools.subset (woff2, без SVG-таблицы) → вписывает base64 между маркерами EMOJI-FONT:BEGIN/END; --check — регрессия (падает, если новый emoji не в субсете; ✓№●○↩ в NCE нет — ок). venv tools/.venv + исходник tools/fonts-src/ — в gitignore. Осознанно: ⚡⭐☀⚠⏸⚖⛵⚒ теперь цветные на всех платформах (унификация). Тесты §Y7 (164/164, exit 0), check.mjs OK, pack 5/5, pack-smoke 6/6, emoji-font.py --check OK; рендер-пробы canvas 🪙⚠️⏸⭐ — цветные пиксели. screenshots/ — 14 кадров пересняты (среда: системный шрифт Emoji One — на кадрах встроенный Google-стиль). Доки: AGENTS.md (раздел «Встроенный emoji-шрифт», 164 чека), DEVLOG Этап 28.