fix(game): fight before departure and reorder the turn sequence #77

Merged
developer merged 2 commits from feature/game-turn-order-departures into development 2026-05-31 06:29:07 +00:00
Owner

Что

Этап 2 сверки Правил и движка: порядок хода и участие в бою отлетающих/модернизируемых кораблей (game/rules.txt, «Последовательность действий» и «Сражения»).

MakeTurn теперь идёт: объединение → бой → загрузка и запуск по маршрутам → полёт → объединение → бой. Из-за этого:

  • корабли, которым отдан приказ на отлёт (статус Launched), и модернизируемые группы (Upgrade) участвуют в предотлётном бою у своей планеты (CollectPlanetGroups/FilterBattleGroups); в гиперпространство уходят только уцелевшие;
  • маршрутные транспорты грузятся и запускаются после этого боя — то есть сражаются пустыми и не могут уклониться от боя.

У только что запущенной группы нет сохранённой позиции в гиперпространстве, поэтому moveShipGroup начинает первый отрезок от планеты-источника (прежний код читал nil-координату и падал).

Так как модернизируемые группы теперь могут терять корабли в бою, стоимость незавершённой модернизации пересчитывается по текущему числу кораблей, а не по значению, сохранённому при приёме приказа.

Документация

game/rules.txt: переупорядочен раздел «Последовательность действий», переписана заметка в «Сражениях». FUNCTIONAL.md/ARCHITECTURE.md последовательность хода не описывают — правок нет.

Тесты

go test ./game/... зелёный. Новые: TestMoveLaunchedGroupFromOrigin, TestCollectPlanetGroupsIncludesLaunchedAndUpgrade, TestProduceBattlesLaunchedFightsAtOrigin, TestUpgradeCostTracksShipLosses.

Замечание (вне объёма этапа)

Обнаружено двойное списание производственного потенциала в TurnPlanetProductions (стоимость апгрейда вычитается и в PlanetProductionCapacity, и в цикле). Поведение сохранено как есть; вынесено владельцу отдельным решением.

## Что Этап 2 сверки Правил и движка: порядок хода и участие в бою отлетающих/модернизируемых кораблей (`game/rules.txt`, «Последовательность действий» и «Сражения»). `MakeTurn` теперь идёт: объединение → бой → загрузка и запуск по маршрутам → полёт → объединение → бой. Из-за этого: - корабли, которым отдан приказ на отлёт (статус `Launched`), и модернизируемые группы (`Upgrade`) участвуют в **предотлётном** бою у своей планеты (`CollectPlanetGroups`/`FilterBattleGroups`); в гиперпространство уходят только уцелевшие; - маршрутные транспорты грузятся и запускаются **после** этого боя — то есть сражаются пустыми и не могут уклониться от боя. У только что запущенной группы нет сохранённой позиции в гиперпространстве, поэтому `moveShipGroup` начинает первый отрезок от планеты-источника (прежний код читал nil-координату и падал). Так как модернизируемые группы теперь могут терять корабли в бою, стоимость незавершённой модернизации пересчитывается по **текущему** числу кораблей, а не по значению, сохранённому при приёме приказа. ## Документация `game/rules.txt`: переупорядочен раздел «Последовательность действий», переписана заметка в «Сражениях». `FUNCTIONAL.md`/`ARCHITECTURE.md` последовательность хода не описывают — правок нет. ## Тесты `go test ./game/...` зелёный. Новые: `TestMoveLaunchedGroupFromOrigin`, `TestCollectPlanetGroupsIncludesLaunchedAndUpgrade`, `TestProduceBattlesLaunchedFightsAtOrigin`, `TestUpgradeCostTracksShipLosses`. ## Замечание (вне объёма этапа) Обнаружено двойное списание производственного потенциала в `TurnPlanetProductions` (стоимость апгрейда вычитается и в `PlanetProductionCapacity`, и в цикле). Поведение **сохранено** как есть; вынесено владельцу отдельным решением.
developer added 1 commit 2026-05-30 22:28:16 +00:00
fix(game): fight before departure and reorder the turn sequence
Tests · Go / test (push) Successful in 1m58s
Tests · Integration / integration (pull_request) Successful in 1m50s
Tests · Go / test (pull_request) Successful in 2m5s
b4abf90ec5
Per the documented turn order (game/rules.txt "Последовательность
действий"), no ship should dodge the pre-departure battle by slipping
into hyperspace. MakeTurn now runs merge -> battle -> load+launch routed
groups -> fly -> merge -> battle, so:

- ships ordered to depart (Launched) and ships being upgraded now take
  part in the pre-departure battle at their planet (CollectPlanetGroups /
  FilterBattleGroups); only survivors then enter hyperspace;
- routed transports are loaded and launched AFTER that battle, so they
  fight empty and cannot escape it.

A just-launched group has no stored hyperspace position, so moveShipGroup
starts its first leg from the origin planet; the previous code read the
nil launch coordinate and would panic.

Because upgrading groups can now lose ships in the battle, the pending
upgrade cost is recomputed from the group's current ship count instead of
the value stored when the order was validated.

Rules: reordered "Последовательность действий" and rewrote the combat
note that ordered/routed ships skip the battle.

Tests: launched-group move from origin, launched/upgrade groups taking
part in battle, upgrade cost tracking ship losses.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
developer added 1 commit 2026-05-31 06:24:48 +00:00
fix(game): charge a ship upgrade against production only once
Tests · Go / test (push) Successful in 2m7s
Tests · Go / test (pull_request) Successful in 2m10s
Tests · Integration / integration (pull_request) Successful in 1m41s
53b3cafbc4
TurnPlanetProductions started its production budget from
PlanetProductionCapacity, which already subtracts the reserved upgrade
cost, and then subtracted each applied upgrade's cost again in the apply
loop — charging every applied upgrade twice. That both starved the
planet's build/research budget and could skip upgrades that were in fact
affordable.

The budget now starts from the planet's full production potential and the
apply loop deducts each upgrade once; PlanetProductionCapacity stays the
report's net-of-upgrades "free L".

Test: TestUpgradeDoesNotDoubleChargeProduction; the TestProduceShips MAT
expectation is updated to the once-charged value.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
owner approved these changes 2026-05-31 06:25:51 +00:00
developer merged commit f877a199c2 into development 2026-05-31 06:29:07 +00:00
developer deleted branch feature/game-turn-order-departures 2026-05-31 06:29:07 +00:00
Sign in to join this conversation.
No Reviewers
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: developer/galaxy-game#77