44 Commits
Author SHA1 Message Date
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