<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Deltaplan</title><link>https://thegriglat.github.io/deltaplan/plans/archive/game/</link><description>Recent content on Deltaplan</description><generator>Hugo</generator><language>ru-RU</language><atom:link href="https://thegriglat.github.io/deltaplan/plans/archive/game/index.xml" rel="self" type="application/rss+xml"/><item><title/><link>https://thegriglat.github.io/deltaplan/plans/archive/game/01-priemka-kabiny/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thegriglat.github.io/deltaplan/plans/archive/game/01-priemka-kabiny/</guid><description>&lt;h1 id="12-01-приёмка-кабины-по-фиксированным-кадрам-vr-11-fr-25a-vr-6"&gt;12-01. Приёмка кабины по фиксированным кадрам (VR-11, FR-25a, VR-6)&lt;a class="anchor" href="#12-01-%d0%bf%d1%80%d0%b8%d1%91%d0%bc%d0%ba%d0%b0-%d0%ba%d0%b0%d0%b1%d0%b8%d0%bd%d1%8b-%d0%bf%d0%be-%d1%84%d0%b8%d0%ba%d1%81%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%bd%d1%8b%d0%bc-%d0%ba%d0%b0%d0%b4%d1%80%d0%b0%d0%bc-vr-11-fr-25a-vr-6" aria-label="Ссылка"&gt;&lt;/a&gt;&lt;/h1&gt;&#10;&lt;p&gt;&lt;strong&gt;Цель:&lt;/strong&gt; вид из кабины соответствует VR-11 и реальным фото; найденное исправлено в папках группы 12.&#10;&lt;strong&gt;Контекст:&lt;/strong&gt; REQUIREMENTS.md (VR-11, FR-21, FR-25a, FR-31), docs/guide/models.md (раздел «Вид от первого лица», 3 фото&#10;Wikimedia: «Deltaplane_au_départ», «Hang_glider_start_hill_aug2004», «Fluegelkamera»), scripts/game/camera_rig.gd,&#10;scripts/game/pilot_animator.gd, scripts/game/game.gd (&lt;code&gt;_hide_from_cockpit&lt;/code&gt;, &lt;code&gt;_mount_instrument&lt;/code&gt;), configs/camera.json.&#10;&lt;strong&gt;Владения:&lt;/strong&gt; &lt;code&gt;scripts/game/camera_rig.gd&lt;/code&gt;, &lt;code&gt;scripts/game/pilot_animator.gd&lt;/code&gt;, &lt;code&gt;scripts/game/game.gd&lt;/code&gt; (только&#10;&lt;code&gt;_hide_from_cockpit&lt;/code&gt;, &lt;code&gt;_mount_instrument&lt;/code&gt;, &lt;code&gt;_setup_glider&lt;/code&gt;), &lt;code&gt;configs/camera.json&lt;/code&gt;, ключи &lt;code&gt;cockpit*&lt;/code&gt;/&lt;code&gt;mounted_instruments&lt;/code&gt;&#10;в &lt;code&gt;configs/game.json&lt;/code&gt;, новые &lt;code&gt;tools/shots/cockpit.sh&lt;/code&gt;, &lt;code&gt;tests/game/test_cockpit.gd&lt;/code&gt;, &lt;code&gt;docs/screenshots/cockpit/&lt;/code&gt;.&#10;&lt;strong&gt;Шаги:&lt;/strong&gt;&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&lt;code&gt;tools/shots/cockpit.sh&lt;/code&gt;: для каждого крыла (3) на Онгудае снять кадры через &lt;code&gt;--screenshot --camera --look --autopilot&lt;/code&gt;:&#10;F вперёд (0,0) в полёте; DS вниз (0,−70) стоя на старте; DF вниз (0,−60) в полёте; U вверх (0,+55); B сзади (&lt;code&gt;chase&lt;/code&gt;);&#10;плюс TS «тень крыла» — chase на высоте &amp;lt; 50 м над ровной посадкой. Всего 18 кадров, имена &lt;code&gt;&amp;lt;wing&amp;gt;_&amp;lt;кадр&amp;gt;.png&lt;/code&gt;.&lt;/li&gt;&#10;&lt;li&gt;Сравнить с чек-листом ниже и с 3 фото; записать таблицу «кадр — пункт — ✔/✘ — что делать» в&#10;&lt;code&gt;docs/screenshots/cockpit/README.md&lt;/code&gt;.&lt;/li&gt;&#10;&lt;li&gt;Исправить своё (смещение/наклон головы, FOV, скрытие шлема/головы, фаза анимации, крепление приборов,&#10;&lt;code&gt;cast_shadows&lt;/code&gt; у визуала в игре). Дефекты моделей/приборов (форма рук, шрифт планшета) — не чинить, а&#10;записать в README как запрос группам 7/8 с кадром-доказательством.&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;tests/game/test_cockpit.gd&lt;/code&gt;: при look (0,0) в полёте в frustum камеры не попадает AABB трапеции/рук/паруса;&#10;при (0,−60) попадают &lt;code&gt;InstrumentMount&lt;/code&gt; и &lt;code&gt;VarioMount&lt;/code&gt;; при (0,+55) — парус; у визуала крыла тень включена.&#10;&lt;strong&gt;Чек-лист (КРИТЕРИЙ ПРИЁМКИ):&lt;/strong&gt; F — горизонт, земля, облака; ни рук, ни трапеции, ни паруса в кадре. DS — грудь,&#10;подвеска, ноги/ботинки между стойками, руки на стойках, базовая штанга с планшетом (как pov_down.png). DF — руки на&#10;штанге, планшет занимает ≥ 12 % высоты кадра, цифры высоты/вариометра читаются на 1920×1080; вариометр 90-х на&#10;стойке виден. U — парус с латами, без дыр/мерцания. B — пилот лёжа в коконе, поза &lt;code&gt;prone&lt;/code&gt;. TS — тень крыла на земле&#10;видна. Все ✔ (или ✘ только с записанным запросом группе 7/8); &lt;code&gt;test_cockpit.gd&lt;/code&gt; зелёный; &lt;code&gt;tools/check.sh&lt;/code&gt; зелёный.&#10;&lt;strong&gt;Зависимости:&lt;/strong&gt; нет (волна 1). &lt;strong&gt;Модель:&lt;/strong&gt; opus. &lt;strong&gt;Размер:&lt;/strong&gt; M.&lt;/li&gt;&#10;&lt;/ol&gt;</description></item><item><title/><link>https://thegriglat.github.io/deltaplan/plans/archive/game/02-skvoznoj-test-svobodnyj/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thegriglat.github.io/deltaplan/plans/archive/game/02-skvoznoj-test-svobodnyj/</guid><description>&lt;h1 id="12-02-сквозной-тест-свободного-полёта-на-всех-локациях"&gt;12-02. Сквозной тест свободного полёта на всех локациях&lt;a class="anchor" href="#12-02-%d1%81%d0%ba%d0%b2%d0%be%d0%b7%d0%bd%d0%be%d0%b9-%d1%82%d0%b5%d1%81%d1%82-%d1%81%d0%b2%d0%be%d0%b1%d0%be%d0%b4%d0%bd%d0%be%d0%b3%d0%be-%d0%bf%d0%be%d0%bb%d1%91%d1%82%d0%b0-%d0%bd%d0%b0-%d0%b2%d1%81%d0%b5%d1%85-%d0%bb%d0%be%d0%ba%d0%b0%d1%86%d0%b8%d1%8f%d1%85" aria-label="Ссылка"&gt;&lt;/a&gt;&lt;/h1&gt;&#10;&lt;p&gt;&lt;strong&gt;Цель:&lt;/strong&gt; «меню → Лететь → разбег W+Shift → полёт → посадка → итог» проходит на altai, askarovo, aushkul, ongudai.&#10;&lt;strong&gt;Контекст:&lt;/strong&gt; tests/game/test_game_flight.gd (образец: &lt;code&gt;Game.tick&lt;/code&gt;, ErrorCatcher, защёлка), scripts/game/autopilot.gd,&#10;scenes/main.gd, scripts/ui/start_menu.gd, scripts/ui/result_screen.gd, configs/locations/*.json.&#10;&lt;strong&gt;Владения:&lt;/strong&gt; новые &lt;code&gt;tests/game/test_e2e.gd&lt;/code&gt;, &lt;code&gt;tools/shots/e2e.sh&lt;/code&gt;, &lt;code&gt;docs/screenshots/e2e/&lt;/code&gt;; &lt;code&gt;scripts/game/autopilot.gd&lt;/code&gt;.&#10;Ошибки в чужих файлах не чинить — отчёт (файл, шаг, лог) в &lt;code&gt;docs/screenshots/e2e/README.md&lt;/code&gt; для владельца.&#10;&lt;strong&gt;Шаги:&lt;/strong&gt;&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Список локаций — из &lt;code&gt;configs/locations/&lt;/code&gt; (не хардкод). Для каждой: &lt;code&gt;main.tscn&lt;/code&gt;, в &lt;code&gt;FlightSetupScreen&lt;/code&gt; выбрать&#10;локацию и первый старт, «Лететь» (эмит кнопки), ждать загрузку.&lt;/li&gt;&#10;&lt;li&gt;Autopilot держит W+Shift: на земле фаза разбега, отрыв, затем клавиши не дают тангажа до отпускания (защёлка).&lt;/li&gt;&#10;&lt;li&gt;Полёт 60 с по курсу от склона, затем снижение до посадки на ровном (у выбранной точки посадки локации, если есть).&lt;/li&gt;&#10;&lt;li&gt;Ждать &lt;code&gt;ResultScreen.visible&lt;/code&gt;; проверить строки &lt;code&gt;lines_for&lt;/code&gt;: время &amp;gt; 0, дистанция &amp;gt; 0, скорость касания.&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;tools/shots/e2e.sh&lt;/code&gt;: на локацию 2 кадра — полёт (cockpit, взгляд вперёд) и экран итога.&#10;&lt;strong&gt;КРИТЕРИЙ ПРИЁМКИ:&lt;/strong&gt; &lt;code&gt;test_e2e.gd&lt;/code&gt; — 4 прогона, в каждом: отрыв ≤ 15 с игрового времени, посадка, экран итога с&#10;временем и дистанцией &amp;gt; 0, 0 ошибок/предупреждений в ErrorCatcher; все 4 ≤ 3 мин headless. 8 скриншотов с чек-листом&#10;в README (горизонт и земля видны, нет чёрного неба/дыр рельефа, итог читаем). &lt;code&gt;tools/check.sh&lt;/code&gt; зелёный. Найденные&#10;чужие дефекты — списком с владельцем.&#10;&lt;strong&gt;Зависимости:&lt;/strong&gt; нет (волна 1; после 12-01 — повторить прогон). &lt;strong&gt;Модель:&lt;/strong&gt; sonnet. &lt;strong&gt;Размер:&lt;/strong&gt; M.&lt;/li&gt;&#10;&lt;/ol&gt;</description></item><item><title/><link>https://thegriglat.github.io/deltaplan/plans/archive/game/03-geimplej-svobodnogo/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thegriglat.github.io/deltaplan/plans/archive/game/03-geimplej-svobodnogo/</guid><description>&lt;h1 id="12-03-геймплей-свободного-полёта-управление-камеры-приборы-итог"&gt;12-03. Геймплей свободного полёта: управление, камеры, приборы, итог&lt;a class="anchor" href="#12-03-%d0%b3%d0%b5%d0%b9%d0%bc%d0%bf%d0%bb%d0%b5%d0%b9-%d1%81%d0%b2%d0%be%d0%b1%d0%be%d0%b4%d0%bd%d0%be%d0%b3%d0%be-%d0%bf%d0%be%d0%bb%d1%91%d1%82%d0%b0-%d1%83%d0%bf%d1%80%d0%b0%d0%b2%d0%bb%d0%b5%d0%bd%d0%b8%d0%b5-%d0%ba%d0%b0%d0%bc%d0%b5%d1%80%d1%8b-%d0%bf%d1%80%d0%b8%d0%b1%d0%be%d1%80%d1%8b-%d0%b8%d1%82%d0%be%d0%b3" aria-label="Ссылка"&gt;&lt;/a&gt;&lt;/h1&gt;&#10;&lt;p&gt;&lt;strong&gt;Цель:&lt;/strong&gt; закрыть «в работе» из TODO этапа 1/4 по сцене: разбег W+Shift, камеры, прибор в углу, пауза/рестарт.&#10;&lt;strong&gt;Контекст:&lt;/strong&gt; REQUIREMENTS.md (FR-21, FR-26, FR-30…FR-33, FR-27), scripts/game/input_controller.gd,&#10;scripts/game/camera_rig.gd, scripts/game/game.gd, configs/controls.json, docs/guide/game.md.&#10;&lt;strong&gt;Владения:&lt;/strong&gt; &lt;code&gt;scripts/game/input_controller.gd&lt;/code&gt;, &lt;code&gt;scripts/game/camera_rig.gd&lt;/code&gt;, &lt;code&gt;scripts/game/game.gd&lt;/code&gt;, &lt;code&gt;scenes/main.gd&lt;/code&gt;,&#10;&lt;code&gt;configs/controls.json&lt;/code&gt;, &lt;code&gt;configs/camera.json&lt;/code&gt;, новый &lt;code&gt;tests/game/test_gameplay.gd&lt;/code&gt;, docs/guide/game.md.&#10;&lt;strong&gt;Шаги:&lt;/strong&gt;&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Разбег (FR-30): W+Shift — бег, нос держится сам; отпустил Shift — шаг; клавиши, зажатые при отрыве, не переходят в&#10;полёт до отпускания (защёлка); A/D на земле — поворот корпуса.&lt;/li&gt;&#10;&lt;li&gt;Камеры (FR-26): C переключает cockpit → chase → free; chase не проваливается в рельеф; free — WASD+мышь, не&#10;двигает крыло. Прибор в углу (FR-21) виден только во внешних камерах; в кабине — нет.&lt;/li&gt;&#10;&lt;li&gt;Приборы: клавиши 1–5 листают планшет в любой камере; вариометр 90-х на стойке показывает то же, что звук.&lt;/li&gt;&#10;&lt;li&gt;Пауза (Esc) останавливает физику и звук; «Заново» — на тот же старт; после итога «Продолжить» — ходьба по земле.&lt;/li&gt;&#10;&lt;li&gt;Итог свободного полёта (без рекордов): в &lt;code&gt;info&lt;/code&gt; — время, дистанция, след, набор, макс. высота MSL, оценка посадки&#10;(мягкая/жёсткая/авария) — формат описать в docs/guide/game.md для группы 11.&lt;/li&gt;&#10;&lt;li&gt;Отметить в &lt;code&gt;docs/screenshots/gameplay/README.md&lt;/code&gt; кадры chase/free/угловой прибор (по 1 на камеру).&#10;&lt;strong&gt;КРИТЕРИЙ ПРИЁМКИ:&lt;/strong&gt; &lt;code&gt;test_gameplay.gd&lt;/code&gt; ≥ 8 проверок (защёлка, шаг/бег, смена 3 камер, прибор в углу вкл/выкл по&#10;камере, страницы 1–5, пауза замораживает &lt;code&gt;Telemetry.time_s&lt;/code&gt;, restart ставит на старт ±1 м, &lt;code&gt;info&lt;/code&gt; содержит все поля п.5);&#10;старые tests/game зелёные; 3 скриншота с чек-листом; &lt;code&gt;tools/check.sh&lt;/code&gt; зелёный.&#10;&lt;strong&gt;Зависимости:&lt;/strong&gt; 12-01 (волна 2, те же файлы). &lt;strong&gt;Модель:&lt;/strong&gt; opus. &lt;strong&gt;Размер:&lt;/strong&gt; M.&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h2 id="дополнения-координатора-обязательно"&gt;Дополнения координатора (обязательно)&lt;a class="anchor" href="#%d0%b4%d0%be%d0%bf%d0%be%d0%bb%d0%bd%d0%b5%d0%bd%d0%b8%d1%8f-%d0%ba%d0%be%d0%be%d1%80%d0%b4%d0%b8%d0%bd%d0%b0%d1%82%d0%be%d1%80%d0%b0-%d0%be%d0%b1%d1%8f%d0%b7%d0%b0%d1%82%d0%b5%d0%bb%d1%8c%d0%bd%d0%be" aria-label="Ссылка"&gt;&lt;/a&gt;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Подключить завершение полёта из FlightStats (ui/02, закоммичено 023456e): Game.tick() спрашивает &lt;code&gt;stats.is_finished()&lt;/code&gt; / &lt;code&gt;finish_reason()&lt;/code&gt; (&amp;ldquo;landed&amp;rdquo; / &amp;ldquo;takeoff_failed&amp;rdquo;) и только тогда показывает итог; случайные касания у старта полёт не завершают (FR-27b).&lt;/li&gt;&#10;&lt;li&gt;Баг: scripts/game/game.gd:411 и 443 — &lt;code&gt;info.merge(stats.summary(...))&lt;/code&gt; без overwrite → заниженное время полёта после reset_in_air (landing_flare.gd:88 кладёт свой flight_time_s). Исправить: &lt;code&gt;merge(..., true)&lt;/code&gt; или итог целиком из FlightStats. Тест.&lt;/li&gt;&#10;&lt;li&gt;Итог: главная кнопка «В главное меню» → главное меню (сигнал menu), «Ещё раз» → рестарт с того же старта.&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title/><link>https://thegriglat.github.io/deltaplan/plans/archive/game/05-stolknoveniya/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thegriglat.github.io/deltaplan/plans/archive/game/05-stolknoveniya/</guid><description>&lt;h1 id="g05-столкновения-с-проводами-лэп-и-препятствиями"&gt;G05. Столкновения с проводами ЛЭП и препятствиями&lt;a class="anchor" href="#g05-%d1%81%d1%82%d0%be%d0%bb%d0%ba%d0%bd%d0%be%d0%b2%d0%b5%d0%bd%d0%b8%d1%8f-%d1%81-%d0%bf%d1%80%d0%be%d0%b2%d0%be%d0%b4%d0%b0%d0%bc%d0%b8-%d0%bb%d1%8d%d0%bf-%d0%b8-%d0%bf%d1%80%d0%b5%d0%bf%d1%8f%d1%82%d1%81%d1%82%d0%b2%d0%b8%d1%8f%d0%bc%d0%b8" aria-label="Ссылка"&gt;&lt;/a&gt;&lt;/h1&gt;&#10;&lt;p&gt;&lt;strong&gt;Цель:&lt;/strong&gt; задеть провод ЛЭП, дерево у посадки, забор или здание — это авария (итог полёта с понятной причиной), как в жизни (VR-10, VR-12).&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Контекст:&lt;/strong&gt; docs/guide/world-objects.md (&lt;code&gt;WorldObjects.wire_hit(a, b) -&amp;gt; bool&lt;/code&gt;, &lt;code&gt;obstacle_hit(a, b) -&amp;gt; {kind, point}&lt;/code&gt;), docs/guide/game.md, scripts/game/game.gd (Game.tick), scripts/game/flight_stats.gd (finish_reason), docs/guide/terrain.md (деревья: forest_at — есть ли API на столкновение с кроной).&#10;&lt;strong&gt;Папки-владения:&lt;/strong&gt; scripts/game/game.gd (только проверка столкновений в тике), scripts/game/collision_check.gd (новый, RefCounted), tests/game/test_collisions.gd, docs/guide/game.md. scripts/game/autopilot.gd не трогать (F01).&lt;/p&gt;</description></item><item><title/><link>https://thegriglat.github.io/deltaplan/plans/archive/game/06-nos-na-razbege-po-vetru/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thegriglat.github.io/deltaplan/plans/archive/game/06-nos-na-razbege-po-vetru/</guid><description>&lt;h1 id="g06-нос-держится-сам-на-разбеге-учитывает-ветер"&gt;G06. «Нос держится сам» на разбеге учитывает ветер&lt;a class="anchor" href="#g06-%d0%bd%d0%be%d1%81-%d0%b4%d0%b5%d1%80%d0%b6%d0%b8%d1%82%d1%81%d1%8f-%d1%81%d0%b0%d0%bc-%d0%bd%d0%b0-%d1%80%d0%b0%d0%b7%d0%b1%d0%b5%d0%b3%d0%b5-%d1%83%d1%87%d0%b8%d1%82%d1%8b%d0%b2%d0%b0%d0%b5%d1%82-%d0%b2%d0%b5%d1%82%d0%b5%d1%80" aria-label="Ссылка"&gt;&lt;/a&gt;&lt;/h1&gt;&#10;&lt;p&gt;&lt;strong&gt;Цель:&lt;/strong&gt; игрок, бегущий на W+Shift без подстройки носа, взлетает в любую погоду так же надёжно, как автопилот (F01): автоматический нос держит угол атаки, а не фиксированный угол тангажа.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Контекст:&lt;/strong&gt; docs/guide/flight.md → «Старт в сильный ветер (F01)»; scripts/game/autopilot.gd (как автопилот оценивает ветер и держит α≈18°); scripts/game/input_controller.gd (&lt;code&gt;ground.run_nose_neutral&lt;/code&gt; + подстройка ↑/↓ — фиксированный угол ~23°, в сильный ветер близко к срыву 24°); configs/controls.json → ground; REQUIREMENTS FR-30.&#10;&lt;strong&gt;Папки-владения:&lt;/strong&gt; scripts/game/input_controller.gd, configs/controls.json → ground, tests/game/test_input_launch.gd (новый). game.gd и autopilot.gd не трогать (G05 и F01 закрыты/работают).&lt;/p&gt;</description></item></channel></rss>