andrey
9519559387
revert logo
2026-09-09 17:48:00 +03:00
andrey
ba61a77eaa
Удалить пустую папку screenshots (мусор)
2026-09-09 17:46:55 +03:00
andrey
3ba450d1ab
README: вернуть скриншоты в верхнюю таблицу к markdown-формату
2026-09-09 17:46:35 +03:00
andrey
f4b22f4a98
README: уменьшить скриншоты в секции Возможности (width=200)
2026-09-09 17:45:31 +03:00
andrey
f79a7786af
gen-screenshots.js: 15 кадров × 3 вьюпорта, поддержка en, обновлены доки и README
2026-09-09 17:43:46 +03:00
andrey
4ee0d4fce3
Монеты → лавка и хаб «Меню» (Этап 29): клик по #coins в HUD открывает «Лавку рыбака» на вкладке «Лавка» (#tabTackle: «Снасти»→«Лавка», 🎣 → 🛒 ; секции « 🎣 Удилища»/« 🪱 Приманки» внутри не тронуты); openShop(tab?) — аргумент форсит вкладку (syncTabs() вынесен из setTab), HUD 🛒 зовёт без аргумента — помнит последнюю. Новый диалог «Меню» (#gamemenu, из паузы «В меню»): «Продолжить» (uiOpen=false + gameplayStart), Магазин/Достижения/Дневник (fromMenuShop(tab) → openShop), «Инструкции» (#menu, «Играть» вернёт в игру), 🔊 Звук и 🗑️ Очистить — ПЕРЕНЕСЕНЫ из HUD (id btnMute/btnReset сохранены; в .hudbtns остались 🛒 и ⏸). «В меню» больше не ставит state='MENU': сессия (заброс/вываживание) заморожена под оверлеем и продолжается с того же места; state='MENU' — только загрузка/сброс (там #menu с инструкциями — старт новой игры прежний). shopFromMenu: лавка, открытая из «Меню», при × возвращает в хаб (uiOpen=true, без gameplayStart); из HUD/монет — в игру. Z-порядок: #gamemenu в DOM позже #shop/#resetDlg — при открытии лавки/сброса из хаба гменю прячется, иначе перекрыл бы их. YG-счётчики сбалансированы: вход в хаб из паузы (gameplayStop уже сделал onPause), «Продолжить» → gameplayStart (пин §Y8(4): stop +1, start +0). i18n: gm_* ключи RU/EN, tab_tackle 'Лавка'/'Shop', updateHUD печатает 🔊 / 🔇 + «Звук», setLang дёргает updateHUD. Все emoji набора уже были в субсете встроенного шрифта — перегенерация tools/emoji-font.py не потребовалась. Тесты: §9/Y1/Y2/Y6 флоу btnReset/btnMute — через toGameMenu() (⏸ → «В меню»); §Y6(5) переписан (хаб открыт, state сохранён), (6) заходит к btnPlay через «Инструкции»; новая §Y8 (HUD-состав, монеты→«Лавка», вкладки из хаба, ×→хаб, mute-тогл по семантике — фикстура сейва §«локации» ставит muted:true, «Продолжить», инструкции). 177/177, exit 0. shots.js: кадр gamemenu (15/15), screenshots/ обновлены, визуально проверены (лавка/хаб/сброс/инструкции). orca-playtest.js: сброс 2b — настоящий UI-путь хаба (не синтетический клик по скрытой кнопке); новая секция 9e — переходы по хабу (монеты, Магазин/Достижения/Дневник + × назад, Инструкции, 🔊 -тогл через объект — скаляры CLI приходят JSON-строками, «Продолжить»); закрыты давние флейки живого браузера: сейв профиля с ночью прошлого прогона (шаг 2c — форс дня: ночью без фонарика ветка клёва за гейтом hasLight, forceBite не работает), босс 5–40 кг рвал стартовую удочку натяжением до босс-фаз (выдаём «Титан», save.rod=3 — по UI нельзя, M5-гейтинг) и транзитное SNAP-окно 0.6 с vs CLI-roundtrip (ждём персистентный bossPhase, отпускание в том же eval). 76/76. check.mjs OK, pack 5/5, pack-smoke 6/6. Доки: AGENTS.md (177 чеков, «Меню», монеты→лавка, пауза), README (вкладка «Лавка», хаб), DEVLOG Этап 29, BROWSER-TESTING (п. 11–13, таблица шагов 2b/9e/12).
2026-09-09 15:44:04 +03:00
andrey
4c257e19ec
Встроенный 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.
2026-09-09 13:45:51 +03:00
andrey
53e7fab01e
Тост: перенос длинного текста — white-space:normal + max-width min(88vw,560px), текст по центру; убраны overflow:hidden/text-overflow:ellipsis (резали длинный текст) и дублирующий max-width:92vw; радиус 999px→14px (многострочный тост не превращается в эллипс). Проверено по скриншотам трёх длин (DOM + пиксели PNG). 162/162, exit 0
2026-09-09 13:06:54 +03:00
andrey
053ed3cf17
Доки (AGENTS.md, README.md): i18n (треб. 2.14/2.2) и пауза (треб. 6.3/1.3) — тест-глобалы, «Где крутить», 162 проверки. Вёрстка: check/test(162)/pack(5)/pack-smoke(6) — все PASS.
2026-09-09 11:07:14 +03:00
andrey
cef024a2eb
Яндекс Игры (6.3, 1.3): кнопка паузы (HUD ⏸, оверлей #pause, pauseOpen-гард в YG.onResume) + пауза звука/игры при blur/focus окна; syncDom() перенесён в frame(). Тесты §Y6 (162/162).
2026-09-09 10:35:51 +03:00
andrey
e05a8d1bd3
Яндекс Игры (2.14, 2.2): i18n RU+EN — автоопределение языка через SDK (ysdk.environment.i18n.lang), T-таблица 82×2, device-aware меню, тесты §Y5. 152/152.
2026-09-09 09:39:36 +03:00
andrey
1be0c998e9
Скриншоты: витринный набор под требования Яндекс Игр (tests/gen-screenshots.js).
...
18 кадров: desk 1280x720@1x, mobp 360x640@2x -> 720x1280 (9:16), mobl 800x450@1.6x -> 1280x720 (16:9). Все — 24-битный PNG без альфа-канала (конверсия ffmpeg/ImageMagick), длинная сторона 1280 (треб. каталога: 1280..2560). Ландшафт — 800x450 CSS, не 640x360: мобильная 'низкая' ветка @media(max-height:620px) та же, но карточка улова с RV-кнопкой (Y2) целиком влезает, а на 360px .panel скроллится и дно уезжает за экран.
Детерминизм: чистый сейв на каждом вьюпорте (localStorage.clear), поклёвка — forceBite, карточка — всегда золотой осётр 12.5 кг (SHINY_CHANCE=1, rnd цены шпилится в 0.5 -> ровно +2438 во всех сетках), закрытие карточки — реальный клик + DOM-фолбэк + жёсткое ожидание (лавка не снимается поверх карточки), тосты стухают (1.6 с) до кадра карточки.
Выпуск — screenshots-wiki/ (18 png). Запуск: node tests/gen-screenshots.js [каталог-сборки] [папка-вывода]; нужны Chromium, Noto Color Emoji, ffmpeg или ImageMagick.
2026-09-09 07:15:49 +03:00
andrey
08a6b0195f
Яндекс Игры (Y1–Y4): адаптация под требования каталога — SDK, монетизация, полировка, упаковка.
...
Y1 (SDK, треб. 1.1/1.3/1.19): секция «Y1: SDK Яндекс Игр» — обёртка YG: стаб при file:// без ?sdk=1 (скрипт не создаётся — чистая консоль), http(s) — динамический /sdk.js (retry/slow-warn 3 с, апгрейд стаб→SDK), LoadingAPI.ready() первым кадром + catch-up в init, GameplayAPI.start/stop (btnPlay/openShop/closeShop/btnReset/btnResetNo; карточка улова — без stop, осознанно: часть цикла улова), game_api_pause/resume + visibilitychange → YG.onPause/onResume (AC.suspend; при YG.paused в frame() заморожено ВСЁ игровое время; guard adShowing в резюме).
Y2 (монетизация, треб. 1.12/4.x): interstitial через showFullscreenAdv на закрытии карточки улова (логическая пауза 4.4; гейты: первый ≥2 мин сессии, кулдаун 3 мин; lastAdTs — осознанно «попытка», не показ — при троттлинге wasShown=false кулдаун сгорает; persist() ДО показа 4.2; YG.onPause — звук+процесс 4.7; watchdog 90 с 1.14, дедуп в YG._startAdWatchdog). RV-кнопка «📺 Реклама: ×2 за этот улов» (4.5.1 честная формулировка, title) через showRewardedVideo: onRewarded → +val (итого ×2), раз на улов (rvDone), бонус не блокирует игру 4.5.2, честная игровая кнопка — не имитация рекламного блока 1.16, .rvbtn min-height:44px (тап-таргет). Стаб: fullscreen → false (мгновенный resume), RV — синхронная симуляция (локальная разработка).
Y3 (полировка): -webkit-touch-callout:none в универсальном селекторе (1.6.1.8 лонгтап iOS).
Y4 (упаковка, треб. 1.21/1.22): tools/pack.mjs — сборка dist/fishing-yandex.zip (только index.html в корне; сборщики zip→python3→python→py) + самопроверка 5 пунктов (структура, <100MB, имена, sha256 byte-идентичность, node --check распакованного JS; встроенный zip-ридер). tests/pack-smoke.js — smoke играбельности КОПИИ из архива (6 чек: MENU, стаб, IDLE, shop, console/pageerror 0; авто-откат /tmp→$HOME — в этом чекауте /tmp невидим Chromium'у). .gitignore: dist/ + /*.pdf.
Тесты: 129→146 — §Y1 +7 (стаб, ready, gameplay-разметка, pause/visibilitychange), §Y2 +9 (RV-бонус ×2/no-op/закрытие, гейт 2 мин, вызов после, кулдаун, после кулдауна; дельты счётчиков, forceVariant=normal), §Y3 +1 (.rvbtn min-height). tests/shots.js: кадр card-rv (13→14). check.mjs OK; pack 5/5 (40.6 KB); pack-smoke 6/6.
Ревью: 4 gate-ревью по этапам (PASS, все findings F1–F7/F1–F5/low+nit/F1–F8 закрыты в лэйнах ревью) + визуальные: мобильные 13 кадров + card-rv, десктоп 1920×1080 (full-bleed, 1.6.2/1.10), рендер из zip-копии (меню/сцена/карточка, 0 ошибок) — все PASS.
Доки: README «Публикация в Яндекс Играх» (pack → smoke → консоль; ?sdk=1), AGENTS.md (п.5 «Проверка», строки Y1/Y2 в «Где крутить», YG/YG.counts в тест-глобалах, 146), DEVLOG этапы 24–27. screenshots/: logo.png (512×512, иконка для консоли), 1.png (1280×720, обложка).
Осознанные решения/риски: 1.20/1.23 — emoji-шрифт на старых Win ОС (квадраты, зафиксировано); 2.14 — игра одноязычная RU (язык черновика — ru); облачные сейвы НЕ используются → опция в консоли выключена; платформы — без Android TV.
2026-09-09 06:47:55 +03:00
andrey
cacd956e31
Визуал: живая оснастка — крючок под водой, топление поплавка при клёве, диагональное вываживание. 1) Оснастка (WAIT/APPROACH/BITE): поводок от поплавка вниз, крючок (дуга+жало) и наживка; глубина крючка — 42–54% водной колонны по дальности заброса (hookY()); новый глобал castDist (дальность 0..0.97 из doCast), hookPos (позиция крючка, экспорт для отрисовки); эмодзи наживки с крючка убран. 2) Поклёвка: в APPROACH дрожание поплавка растёт по мере приближения рыбы, цель подплывания — hookPos (рыба идёт диагональю от поверхности к наживке, не телепортируется); в BITE поплавок топится (bobber.y=waterY+9, кромка воды поверх нижней половины — drawBobber(sink)), рыба дёргается у крючка в такт топлению (time*22). 3) Вываживание: fishReelPos() — рыба по диагонали от глубины крючка (castTo.x, hookY()) к лодке у поверхности (boatX+24, waterY+10) по прогрессу d/d0 (ease), подводный сегмент лески bobber→рыба; при holding линия удочка-поплавок-рыба натянута (sag=0, поплавок — точка пересечения прямой tip→fish с поверхностью, сглаживание dt*8), при отпускании провис (pull 16 / calm 12); риплы/брызги в REEL/BITE — по позиции поплавка, не castTo.x. Только canvas: механика (updateReel/startBite/hook/catchFish), сейв, баланс и имена тест-глобалов из AGENTS.md не тронуты. tests/shots.js: кадр reel — reel.holding=true + пауза 650 мс (поплавок доходит до натянутого положения). 129/129, exit 0; кадры wait/bite/reel проверены по скриншотам, свежие в screenshots/.
2026-09-08 12:25:05 +03:00
andrey
126e402dee
Экономика: ушедшие рыбы без наград — выплаты 10% цены убраны из обеих веток схода в updateReel() (escape>=1 и near-miss 1.45·d0), общий хвост вынесен в fishEscaped() (тост «Сбежала! <emoji> <имя> <вес> кг» → WAIT → biteTimer → sfx('escape')), устаревший near-miss-комментарий удалён; формат сейва не менялся. Тост обрыва: теперь с рыбой (« 💥 Линия лопнула! 🐟 Карась 0.5 кг» / « 💥 Рыба крупнее предела удочки! …», разбор ov>1.15 сохранён); босс-обрыв фазы не тронут. Закрывает камень #12 из Этапа T4 (утешения за сходы = 43–47% раннего дохода, фармить сходы было выгоднее). Тесты: §9c переписан (пин save.quests/стрика — монеты не изменились; тост «Сбежала!» с весом без « 🪙 »), (2b) переиспользован (сход монет не даёт, HUD в согласии с сейвом), +1 чек тоста обрыва (чтение в следующем eval сразу после waitState('SNAP'): тост 1.6 с > SNAP 1.0 с); orca шаг 9 — «сход без выплат». 129/129, exit 0; Orca 61/61 live. Доки: DEVLOG Этап 23, PHYSICS-RESEARCH исходы, README/AGENTS 128→129.
2026-09-07 13:15:28 +03:00
andrey
9914fe89a9
Тесты: починка orca-playtest (ломался с 622d203 — M5) + +13 проверок последних дополнений (48→61). Фикс: профиль Orca переживает localStorage между прогонами (test.js — свежий headless-профиль), а с M5 «фонарик» — не строка, а апгрейд-кнопка удилища 0 при 1–3 ур. → на грязном сейве (4 ур.) шаг 9c падал «no flask»; добавлен шаг 2b — сброс сейва через игру ( 🗑️ → «Сбросить» = freshSave()+persist+сброс тест-форсов) после error-хуков, без перезагрузки. New: 7c скины ( 🎨 рендер, покупка «Красный» 500 — списание/авто-экип, клик+состояние в одном eval), 7d локации ( 🗺️ , покупка «Озёра» 100000 — авто-переход+тост+списание, возврат на Реку), 8' золото в дождь (пилюля 🌧️ , ratio variantChance ×2.5, улов с SHINY_CHANCE=1 в дождь → 4 ачивки Этапа 22 разом: first_shiny+rain_variant+skin_first+lake_first — skin/lake выдаются на улове, checkAchievements в catchFish, не в лавке), 8b туман (пилюля 🌫️ , ratio biteChance ×1.5, скрытие пилюли); +скрины orca-skins/orca-locations; ratio-чеки независимы от баланса/фазы суток (одна eval); реальная погода за прогон не стартует (gap ≥120 c). Доки: BROWSER-TESTING — строки 2b/7c/7d/8/8b в таблице, п.10 камешков (localStorage), пример вывода построчно под реальный прогон, 400/250→70 ( d5212e9), 1.4→1.45. 61/61 live ×4 (в т.ч. из грязного сейва), 128/128 headless, exit 0
2026-09-07 11:32:01 +03:00
andrey
4c4b6db1fa
Ачивки: Этап 22 — +11 достижений (18→29) по итогам M5/M6/M8/скинов/локаций + «shiny»→«золотая рыба». new: first_silver 🥈 / first_rainbow 🌈 / rain_variant 🌧️ (особая в дождь) / fog_catch 🌫️ / skin_first 🎨 / skins_all 🎭 / lake_first 🗺️ / gear_max ⚒️ (4 ур.) / titan 💪 / weight_1000 🚢 / night_first 🌙 — все coinPct 1–2%. Сейв: +kgTotal/nightCatch/wxRainV/wxFog (чтение ||0, без миграции), крючок в catchFish() до checkAchievements() (rain — только вариант ≠ normal, босс normal). Тексты: квест catch_shiny и desc first_shiny — «Поймай золотую рыбу» (id/SHINY_CHANCE не тронуты); README/BROWSER-TESTING/лейблы test.js+orca-playtest — «золотая рыба». Тесты: +11 (§10g: тексты, данные 29/уникальность, геймплей ночной улов в дождь — 3 счётчика+3 ачивки, first_rainbow/fog_catch, граница 999.9/1000, скины, lake, снасти, старый сейв), пин full_variants 0.13→0.16. 128/128, exit 0; доки: DEVLOG Этап 22, AGENTS/README — 128/29.
2026-09-07 10:50:03 +03:00
andrey
d5212e9b42
Экономика снастей: апгрейды id=0 ~÷3.5 (удочка 70/210/500, приманка 60/160/400), база id=1 ÷2 (875/625), база id=3 ×1.5 (15000/11250); апгрейды id>0 — по формуле (180/530/1050, 130/380/750; 175/125 → округление до 10). README: Озёра 25 000 → 100 000 (актуальность); AGENTS.md: цифры баланса + 117 проверок; скриншоты обновлены. 117/117, exit 0
2026-09-07 10:07:12 +03:00
andrey
c1e0389e44
HUD вываживания: escape-полоска рисуется поверх синей и слева направо (раньше — справа налево под синей). 117/117, exit 0
2026-09-06 22:41:18 +03:00
andrey
f843bc8033
Экономика: базы снастей ×5 (удочки 1750/4500/10000, наживки 1250/3000/7500), цена апгрейда upgCost() — id 0 фикс (250/750/1800, 200/550/1400), id>0 база×UPG_MULT (0.2/0.6/1.2); Озёра 100000; HUD вываживания: ⛵ → иконки 🐟 + ⚡ (полоска выносливости сдвинута). Тесты: ассерты цен/сиды монет обновлены, +2 (апгрейд по формуле, пин цен), shots 30000. 117/117, exit 0
2026-09-06 22:37:41 +03:00
andrey
7496e70e7b
Лавка/снасти: Дедова удочка 🧹 ; строка снасти — в описании только характеристики (без «далее: …»), кнопки в столбец, описание апгрейда на кнопке («⬆ фонарик (ночь), леска ×1.15 · 400 🪙 »); скриншот лавки обновлён. 115/115, exit 0
2026-09-06 22:19:13 +03:00
andrey
219c33ee31
Иконки снастей: Дедова удочка 🌳 (дерево, как просили), Титан 💪 ( 🦾 нет в Emoji One — квадрат в Orca/chromium); скриншоты screenshots/ обновлены после установки шрифта. 115/115, Orca 47/47, exit 0
2026-09-06 22:03:14 +03:00
andrey
12c5f7d5ec
M6b: Этап 21 — убрано «Улучшить вариант» (рыбу нельзя апгрейдить): кнопка #btnCardUp, VARIANT_CHAIN, cardInfo, cardUpNext()/renderCardUpBtn(); карточка — только бейдж/оформление; сейв/дневник/full_variants не тронуты; по ревью: доки/скрины. 115/115, exit 0
2026-09-06 20:40:29 +03:00
andrey
929191b46d
Доки/тесты: orca-playtest — вкладка Дневника по id (tabJournal), таблица BROWSER-TESTING — иконки вкладок ( 📔 / 🎣 ) как в UI
2026-09-06 20:40:25 +03:00
andrey
1a6a2bb719
Тесты: guard от границы полуночи в test.js (авто-ожидание безопасного окна, если до/после 00:00 ≤5 мин; date-ассерты не должны ловить смену даты). 117/117, exit 0
2026-09-06 19:46:11 +03:00
andrey
e2d9b1fc58
Локации: Этап 5 — «Озёра» за 25000 (вкладка 🗺️ , авто-переход), 3 новых вида (судак/хариус/гигантский рак), 4 таблицы ролла (река байт-в-байт), цвет воды по локации, ачивки масштабируются до 11 видов; по ревью: доки/тест-фантом/NIT/скрин озёр. 117/117 ×2, exit 0
2026-09-06 19:29:32 +03:00
andrey
89c6680ae5
M-skins: Этап 4 — скины лодки (Красная 800 / Лодка-домик 2000) и поплавка (Красный 500 / Неоновый 1500), вкладка «Скины» 🎨 , чистая косметика; по ревью: доки/миграция бесплатного скина/NIT. 107/107, exit 0
2026-09-06 17:47:01 +03:00
andrey
6b723545c1
M8: Этап 3 — погода: дождь (варианты ×2,5) и туман (клёв ×1,5), событие 120с раз в 2–4 мин, HUD-пилюля + canvas-визуал, forceWeather; по ревью: доки/харденинг флейки 9h/polling-тесты/NIT/скрин дождя. 100/100 ×2, exit 0
2026-09-06 16:00:38 +03:00
andrey
e13613a782
M6: Этап 2 — варианты рыб (серебряная ×2 / золотая ×3 / радужная ×5), «Улучшить вариант» на карточке (cost=0.6×Δ), энциклопедия 4 счётчика, ачивка full_variants (+5000, +5% перманентно); по ревью: orca-playtest/доки/скрин/орфо. 92/92, exit 0
2026-09-06 14:37:10 +03:00
andrey
622d203e52
M5: Этап 1 — апгрейды снастей (lv 1..4, save.rodLv/lureLv + миграция), фонарик → первый апгрейд удилища (LURES id=4 удалён), гейтинг лавки lv(i-1)===4; по ревью: доки/скриншот/индентация/NIT. 82/82, exit 0
2026-09-06 12:04:21 +03:00
andrey
73b4ab3bd2
Релиз 5 «Симулятор»: доки спринта 4 (DEVLOG этап 15, AGENTS «Физика боя», README механика) + харденинг escape-теста (пинн aggr/escape — флейк при ag≥0.65). 68/68 ×3, exit 0
2026-09-02 13:31:58 +03:00
andrey
cc6238aa9b
Тесты: спринт 4 T4 — свежие скриншоты, харденинг orca-playtest против T2b-гонки escape (атомарный hold) — 47/47 live
2026-09-02 10:34:47 +03:00
andrey
60f375598b
Физика: спринт 4 T2b — ребаланс по ревью T3 (MAJOR-1/2, MINOR, NIT) + Monte-Carlo приёмка
...
MAJOR-1 (skill-curve): отпускание в рывок теперь безопасно и выигрышно —
escape-бар не растёт при pull && !holding (стоимость отпускания — только
дистанция); пассив = 100% сходов, «всегда держать» = обрывы крупных
(сом/Стекло 61% SNAP) и босса (38% SNAP на Титане). Числа (только
константы updateReel/hook): d0 45+7w, drain ×~4 медленнее (дуга усталости
за бой), натяжение 10+over·1.1+22·ag, втягивание (11+3·reel)·(1+0.6(1-st)),
free-run F·0.32, near-miss 1.45·d0.
Monte-Carlo (точные формулы, N=400/сценарий, dt=1/60, 3 бота доки 4.4):
умный: карась 98%/13.0с, окунь 85%/11.7с, лещ 92%, сом/Карбон 66%/20.4с
(уловы), босс/Титан 59.5%/42.8с (т.е. босс ≠ 100% даже на топ-удочке);
держать: мелочь 100%, сом/Стекло 39%/SNAP 61%, босс/Титан 62%/SNAP 38%;
пассив: 100% сходов за 3.5–6.7с. Stamina-дуга видна: st при улове
0.2–0.5 против старта 0.7–1.0. Таблица и остаток P1-2 — доки §4.7.
MAJOR-2: подсказка «⚡ РЫБА ТЯНЕТ — ОТПУСТИ! ⚡ » теперь соответствует
механике (отпускание в рывке = выигрышное действие) — текст сохранён.
MINOR: AGENTS.md — forceBite/fishForce в защищённых именах, 68 проверок,
секция «Физика боя»; доки: инвариант «30·reel px/с» заменён фактической
формулой (решение: правка доки, код — источник истины; MINOR-2 ревью).
NIT: сброс forceBite/forceBoss в btnResetYes; полоска stamina сдвинута
после ⛵ (dx+18); near-miss в orca-playtest 1.45·d0; скриншоты свежие.
Тесты: порогов, упёршихся в новые константы, нет (запасы ×2.4–×3.1
проверены прогоном) — 68/68 PASS ×2 подряд, node tools/check.mjs OK.
Живой Orca-браузер: босс 3 фазы прогнан вживую (фазовый SNAP → d=0.6·d0,
tension=0; pointercancel в фоне = сход — поведение корректное).
2026-09-02 06:05:25 +03:00
andrey
70ff9642b3
Физика: спринт 4 P0 — stamina рыбы, drag катушки, честный баланс сил, пустые клёвы + 7 автотестов (68/68)
2026-09-02 00:51:54 +03:00
andrey
fafa0adacd
Исследование: физика рыбалки для спринта 4 (docs/PHYSICS-RESEARCH.md)
...
Состояние механик (бросок/клёв/подсечка/вываживание/босс), как drag/рывки/
выносливость/подсечка/баллистика устроены в реальности и симуляторах,
приоритеты P0/P1/P2 с формулами и рисками для 61 автотеста, план спринта:
P0 = выносливость рыбы + тормоз катушки (drag) + ребаланс рисков + пустые
клёвы (~190-235 строк, сейв не меняется).
2026-09-01 23:31:03 +03:00
andrey
6e22edddf3
Механика: escape — рыба сбегает, если долго не тянуть (красная полоса дистанции, тост, +10% цены) + 3 автотеста (61/61)
2026-09-01 22:54:17 +03:00
andrey
851de88c2a
Порядок: игнорировать каталоги worktree спринтов
2026-09-01 21:18:49 +03:00
andrey
2c6018748c
Девлог: Этап 14 — спринт 3 (параллельные worktree, багфиксы, визуал, тест-инфра, баланс)
2026-09-01 21:18:36 +03:00
andrey
b9e51860b9
Интеграция: ветка sprint3-playability (живой плейтест Orca, баланс клёва/редкости/босса too_easy → числа)
2026-09-01 21:16:57 +03:00
andrey
abc66745a7
Баланс: клёв медленнее, крупная рыба и босс реже (T5 плейтест)
...
Живая проверка в браузере Orca (бот с человеческой реакцией 140 мс,
582 заброса, 3 профиля снастей): клёв почти мгновенный (медиана 4.8-6.5 с,
0 пустых забросов из 292), вываживание без риска (0 сходов и 0 обрывов
на 329 уловов, сом 17.5 кг на дедовой удочке), экономика обгоняет лавку
(192 мон/мин старт, 979 мон/мин на стеклопластике с червём, rod3+lure3
к 8-й минуте), босс 18/18 побед без шанса проигрыша (пик нагрузки 0.46-0.6
линии, награда +8-16.6k против цены топ-комплекта 2800).
Правки только числами:
- клёв: rand(2.5,7)→rand(4,10), rand(3,7)→rand(5,10), rand(3,8)→rand(5,11);
- SPECIES: щука 12→9, сом 7→5, осётр 3.5→2.5, цена осетра 80→65;
- SPECIES_NIGHT: щука 30→22, сом 25→18, осётр 5→4.
Веса карася (день 100 / ночь 40), цены удочки-2 (250) и червя (150)
не тронуты — зафиксированы ассертами test.js. Сходы/обрывы (тела
updateReel) и ×5 босса (catchFish) — логика, вне компетенции T5:
рекомендации в отчёте. Проверка: node --check OK, test.js 58/58
6 прогонов подряд.
2026-09-01 21:04:53 +03:00
andrey
06e3aa3975
Интеграция: ветка sprint3-visual (полировка воды/неба/анимаций/UI, свежие скриншоты)
2026-09-01 19:19:34 +03:00
andrey
3f126437e4
Интеграция: ветка sprint3-bugs (4 багфикса: квест забросов, HUD монет, нагрузка после босс-обрыва) + 58 тестов
2026-09-01 19:18:45 +03:00
andrey
ebb711759b
Интеграция: ветка sprint3-testing (харденинг orca-playtest, shots.js c argv, доки)
2026-09-01 19:17:56 +03:00
andrey
057880858e
Визуал: обновлены скриншоты (11 кадров: день/ночь/босс, лавка, дневник, карточки)
2026-09-01 19:11:18 +03:00
andrey
faff881c94
Merge sprint3-bugs: багфиксы квестов/HUD/босса ( 5f557fc) в базу плейтеста
...
ff-only невозможен: ветка sprint3-playability (визуальная полировка fc18dc3 )
и sprint3-bugs разошлись от f6d89b7 . Автомердж разрешил index.html в пользу
sprint3-bugs: визуальная полировка fc18dc3 перекрыта переработанным файлом
спринтов 1-2 (561 строка различий, ручное слияние вне числовых констант
запрещено регламентом T5).
2026-09-01 19:02:07 +03:00
andrey
fc18dc37d7
Визуал: полировка интерфейса, воды, неба и солнца/луны по фазам дня, анимаций рыбы и поплавка, карточки улова, лавки и дневника, тостов, адаптивности
2026-09-01 18:48:51 +03:00
andrey
5f557fca64
Багфикс: квест «забросы», HUD монет, нагрузка после босс-обрыва
...
- questHit('casts') вызывался без condFn: TypeError на каждом забросе
с активным квестом — квест не рос, persist()/checkAchievements()
в doCast() пропускались (счётчик забросов терялся при перезагрузке)
- награда квеста и утешение near-miss не обновляли счётчик монет в HUD
- фазовый обрыв босса теперь сбрасывает tension: «обрыв фазы без штрафа»
больше не превращается в настоящий обрыв при зажатом пальце
- регресс-проверки в tests/test.js (секция 9l), итого 58
2026-09-01 18:44:24 +03:00
andrey
7e7e18cb23
Тесты: shots.js — ожидание отрисовки вместо sleep и выбор кадров через argv
2026-09-01 18:39:52 +03:00
andrey
d65815ad95
Тесты: харденинг orca-playtest.js — pageerror-хуки, бэкофф ретраев, диагностика кнопок
2026-09-01 18:39:52 +03:00
andrey
2bc3f4c8fb
Порядок: npm test вместо заглушки в tests/package.json, раздел «Проверка» в AGENTS.md актуализирован
2026-09-01 18:33:35 +03:00
andrey
efcecf6326
Порядок: .gitignore для мусора плейтестов + tools/check.mjs (синтаксис JS из index.html с номером строки)
2026-09-01 18:33:35 +03:00
andrey
5c95309ce0
Sprint 2: ночная рыбалка + босс-рыба + доки/скриншоты
2026-09-01 17:53:42 +03:00
andrey
abab18b0d0
Sprint 1: shiny + near-miss + награды (квесты, стрик, достижения) + браузерный плейтест
...
M1:
- Shiny-рыба (SHINY_CHANCE=0.03, ×3 монет, золотая карточка + бейдж)
- Near-miss: сбежавшая рыба даёт ~10% цены (toast «Сбежала! ...»)
- Миграция сейвов (caught: число → {n,best,sn})
M2:
- Ежедневные квесты (3/день, 6 шаблонов, сид по дате)
- Стрик входов со щитом (1/неделю, награды 25-200 🪙 )
- 16 достижений с аддитивными бонусами (+% монет, окно, линия)
- Вкладки 🎯 (квесты+стрик) и 🏅 (достижения) в лавке
Инструменты:
- tests/orca-playtest.js — браузерный плейтест через Orca CLI
- docs/BROWSER-TESTING.md — документация процесса
- AGENTS.md — правила разработки
Проверки: 43 puppeteer + 35 orca-playtest = 78, все PASS
2026-09-01 14:24:21 +03:00
andrey
f6d89b7a09
Кнопка сброса прогресса с диалогом подтверждения
...
- 🗑️ в HUD: диалог «Сбросить прогресс?» (Отмена / Сбросить)
- сбрасывает монеты, снасти, коллекцию и статистику; настройка звука сохраняется
- возврат в главное меню, перезапись localStorage
- автотест: 4 новые проверки (30/30)
2026-08-27 06:50:11 +00:00
andrey
1f224822a9
Механика веса рыбы
...
- у каждой рыбы свой вес (wMin..wMax кг), цена за 1 кг (price)
- удилища: предел веса (3-40 кг); перегруз -> шнур лопает почти мгновенно
- лучшая удочка/приманка -> выше шанс крупного улова (rollWeight)
- сложность вываживания зависит от веса и перегруза (ov, aggr)
- дневник: максимальный вес по каждому виду
- карточка улова: вес, цена/кг, бейдж «РЕКОРД!» при новом максимуме
- миграция старых сейвов (caught: число -> {n, best})
- автотест: 24 -> 26 проверок (перегруз, рекорд/антирекорд)
- обновлены README и скриншоты
2026-08-27 06:43:54 +00:00
andrey
34c93b1229
Документация процесса разработки (docs/DEVLOG.md)
...
- этапы: ТЗ, реализация, среда проверки, автотесты, визуал, баги, публикация
- таблица инструментов с версиями и командами установки
- найденные автотестом баги и выводы
- гигиена секретов (отзыв токена, чистка remote)
- как развивать игру дальше
2026-08-27 06:13:00 +00:00
andrey
a90123be3b
Игра «Рыбалка»: HTML5-канвас, автотесты, скриншоты
...
- один самодостаточный index.html (мобильное управление, магазин,
дневник, сохранение в localStorage)
- автотест геймплея в headless Chromium (tests/test.js, 21 проверка)
- скриншоты состояния игры (screenshots/)
2026-08-26 18:15:31 +00:00