andrey pushed to main at andrey/fishing-game 2026-10-12 07:58:22 +03:00
a80d8fb464 Этап 54: favicon вшит в index.html (data:-URI PNG). (1) Внешняя иконка в архив Яндекс Игр не доехала бы (публикуется только index.html), поэтому логотип встроен в <head> как data:image/png;base64 — работает и под file://, и в iframe площадки. Генератор tools/favicon.mjs (новый, по образцу embed-fish.mjs): чистый Node без зависимостей, идемпотентный блок между маркерами <!-- FAVICON:BEGIN/END --> сразу после <title>, самопроверка + check.mjs внутри. Собственный PNG-декодер на node:zlib (8 бит, colorType 0/2/4/6, снятие фильтров строк 0–4, не-interlaced) читает logo.png (512×512 RGB); area-average ресемпл в 64×64 (rel="icon") и 180×180 (rel="apple-touch-icon"); PNG-энкодер (colorType 2, level 9) выбирает фильтр строки эвристикой libpng (минимум суммы |signed| по 5 предикторам; 180×180 → 21 КБ против 36 КБ при всегда filter 0). Обновить иконку = заменить logo.png + node tools/favicon.mjs. (2) В <head> index.html добавлены два <link> с base64 (блок ~34 КБ). Маркеры не в исключениях минификатора — minify.mjs их снимает, в релизе остаются только <link> (data:-URI побайтово совпадают с оригиналом). (3) Проверки: check.mjs OK; tests/test.js 234/234 PASS (тесты не менялись, геймплей не задет); minify.mjs 6/6 (−34%: 577→382 КБ, gzip 208→152 КБ); pack.mjs 5/5; pack-smoke.js 6/6; обе иконки декодируются в Chromium как 64×64/180×180. (4) Доки: AGENTS.md (пункт «Favicon (Этап 54)»), README (размеры/состав файла ~577 КБ, 234 проверки), docs/DEVLOG.md (Этап 54).
andrey pushed to master at andrey/life-game 2026-10-11 22:37:51 +03:00
d7de48f77a Светлая тема: читаемый дропдаун (активная подсветка + нативные popup)
andrey pushed to master at andrey/life-game 2026-10-11 22:35:31 +03:00
3b4ee8ed2b Авто-финал при тупике: стабильное поле + у отстающего кончился бюджет
andrey pushed to master at andrey/life-game 2026-10-11 22:26:55 +03:00
4d1f1dece5 Поворот паттерна колесом мыши (90° за щелчок)
andrey pushed to master at andrey/life-game 2026-10-11 22:08:35 +03:00
20313ebf2d Готовые паттерны (штампы): глайдер, улей, ружьё Госпера и др.
andrey pushed to master at andrey/life-game 2026-10-11 21:43:21 +03:00
e6804e7300 Победа при вымирании: партия завершается сразу, как у игрока 0 клеток
andrey pushed to master at andrey/life-game 2026-10-11 21:28:22 +03:00
0851b689af Дорисовка — только на стабильном поле: авто-пауза при стабилизации
andrey pushed to master at andrey/life-game 2026-10-11 20:47:10 +03:00
19c02956af Правая кнопка мыши стирает клетки (ластик на время удержания)
andrey pushed to master at andrey/life-game 2026-10-11 19:59:01 +03:00
54936feff9 Клавиатура: пробел ставит/снимает паузу (RUNNING↔PAUSED)
andrey pushed to master at andrey/life-game 2026-10-11 15:04:32 +03:00
de954c601c Скорость симуляции: кнопка-цикл ×1/×2/×4 в RUNNING