Changelog

Die letzten Änderungen an "Return to the Roots"
58cb947 s25client 07.04.2026 21:04 Flamefire Use `helpers::sort` consistently
322c705 s25client 07.04.2026 20:59 Flamefire Add test for shuffling HQ positions
b60d26c s25client 07.04.2026 17:48 Flamefire GHA: Use CodeCov action for upload
75d9c1a s25client 07.04.2026 17:48 Flamefire Add missing LCOV_EXCL_STOP
c715cc6 s25client 07.04.2026 16:38 Flamefire Fix placing HQs randomly
bab98a4 s25client 06.04.2026 21:52 Flamefire Update GitHub Actions configs

- Pin used actions
- Add explicit permissions
- Update actions where required & possible for Node 20 deprecation
2488de2 s25client 06.04.2026 16:11 Flamefire Inline `StopLeavingFigures` function

This is so specific to the call site that it should be inline which
explains the reasoning better.
2ffddcc s25client 06.04.2026 15:54 Flamefire Fix check when stopping leaving soldiers

The check assumes only active soldiers start in "Job-state".
This state is set when a figure arrived at its goal, and immediately for
those not having a "fixed" goal, like attacking soldiers.
But it also applies to e.g. trade-donkeys.

So check for soldiers directly.
Also rename `NoDefender` to `ResetDefender` to clarify meaning and
remove the check for leaving defenders which cannot be met:
The method is called before the defender is called.
efa8195 s25client 06.04.2026 15:29 Flamefire Cancel leaving soldiers before requesting defender

Soldiers are stopped when a defender is coming out.
If no defender is found the leaving soldiers are checked.
So it is better to first stop the leaving soldiers and then choose from
all of them.

Also remove `nofAggressiveDefender::NeedForHomeDefence` which is a
wrapper to `InformTargetsAboutCancelling` only used in a single place
which is now redundant.
2d82f08 s25client 06.04.2026 15:14 Flamefire Extent test case to handle millitary buildings & HQ w/ full & empty troops

When a defender is requested then
a) Leaving agg. defenders are stopped
b) A defender is chosen from remaining troops

This might "convert" and agg. defender to a defender.
As this is kind of a sub-case of the existing one, merge them with a
data-param.
Similar the handling for warehouses and military buildings needs to be
checked, so make that another param.
8b2e540 s25client 03.04.2026 20:58 Flamefire Do not add start resources when creating HQ

This is not always desired, especially in the tests.
So add an extra method for that to allow adding only wares/people when desired.
93de1b1 s25client 03.04.2026 20:00 Flamefire Add factory functions for Good/PeopleCounts
e6ef258 s25client 29.03.2026 15:46 Flamefire Shuffle HQ positions outside function placing them
25390a0 s25client 29.03.2026 14:22 Flamefire Split out "Count" classes for goods and people

`GoodsAndPeopleCounts` is now both a `GoodCounts` and `PeopleCounts`
allowing them to be used as required.
Refactor the misnamed `AddGoods` to 3 `AddToInventory` methods to avoid
parts of the work if only people or goods are added.
Ensure visibility of write-accessors for `Inventory` is protecting
against mistakes e.g. with armored soldier counts.
6676aec s25client 29.03.2026 13:05 Flamefire Remove useless calls to `AddToInventory`

When we clear the inventory or start with an empty one there is no need
to call this.
6d7af5b s25client 28.03.2026 20:44 Flamefire Fix wrongly shown soldiers

When soldiers in the leave queue get canceled, e.g. because a fight
started so we re-add all leaving aggressive defenders, the counts of
soldiers gets off:

- Adding a soldier to leave queue will remove it from the real count
only, not the visual count: He is still in there
- When he is removed from the queue after going out the visual count is decreased
- When adding it back before he left we must not increase the visual count

Currently it checked if the soldier is in the leave queue but at that
point he isn't anymore so the check never succeeds.

Add new callback to notify when a figure has left the queue.
86ad40a s25client 27.03.2026 19:19 Flamefire Translate some comments/docstrings
bc0dd36 s25client 27.03.2026 19:19 Flamefire Don't serialize unused value of nobBaseMilitary
100a5e0 s25client 24.03.2026 19:44 Flamefire Ignore pause message in replay mode

This is especially important during skipping which expects that each
gameframe is actually executed.
e4146df s25client 15.03.2026 11:39 Flamefire Rename `harbor_pos` to `harborData`
2204446 s25client 15.03.2026 11:30 Flamefire Increase GameData version

This should have been done in #1901 but was missed.
We can detect the faulty versions as the "invalid" harbor at the front
had an explicitly invalid MapPoint.

Fixes #1904
55154d7 s25client 08.03.2026 11:14 Flamefire Merge pull request #1895 from Noseey/fix_ship_stuck_crash
8febfd5 s25client 07.03.2026 14:19 Flamefire Avoid parameter shadowing in `GameWorldBase::GetHarborInDir`
841c5e7 s25client 07.03.2026 13:54 Flamefire Merge branch 'seaAndHaborId' into ship-fix
af20d15 s25client 05.03.2026 20:13 Flamefire GHA: Split build and test step
11cf62b s25client 05.03.2026 19:46 Flamefire Simplify RemoveShip
d0e9b03 s25client 03.03.2026 22:03 Noseey Update comment libs/s25main/GamePlayer.h
ffed8a1 s25client 03.03.2026 22:02 Noseey Reduce ship arrival checks to length
d6a631c s25client 03.03.2026 21:32 Flamefire Add CONFIGURE_DEPENDS to CMake globs
384a534 s25client 02.03.2026 20:27 Noseey Whitespace fix
a11d46a s25client 02.03.2026 20:13 Noseey ships: remove redundant checks for early ship arrival
dae4a73 s25client 02.03.2026 18:05 Noseey rename harborPoint to coastalPoint and making it const
ce0296c s25client 02.03.2026 17:35 Noseey ships: add check for early arrival in FindShipPathToHarbor
d2a3730 s25client 01.03.2026 20:09 Flamefire Fix failures in UI tests

`BOOST_FIXTURE_TEST_CASE` resets the fixture of the test suite so we
have to add that manually when required.
In the double click tests a double click could be registered too early
as the last left click time and position are initially zeroes.
Do a fake click to initialize them to something that isn't relevant to
the tests.
3157a51 s25client 01.03.2026 19:11 Flamefire Introduce strong types for sea and harbor ids

Those were unsigned integers before with "0" meaning "invalid" which is
hard to check/enforce at all locations.
Also being integers it makes it easy to confuse arguments, especially in
functions taking both id types.

Introduce a templated wrapper that allows checking for validity via
explicit bool conversion and named method.
It can be explicitely converted to the underlying type, which is also
accessible via the `value()` function.
Add accompanying helpers for iteration with a range (1<=id<=size) and a
vector wrapper directly accepting an ID and shifting the value.
059ad80 s25client 28.02.2026 20:18 Flamefire Add reproducer for #1784
7ec8afb s25client 28.02.2026 20:16 Flamefire Merge branch 'master' into fix_ship_stuck_crash
02615f1 s25client 28.02.2026 12:39 Flamefire Take noShip by reference where non-Null is required
8a6c9b6 s25client 27.02.2026 16:57 sunrise Init animal ptr to nullptr to fix crash in case skinner has never used a hunted animal but only pigs
f5c16f1 s25client 21.02.2026 16:21 Flamefire Merge pull request #1720 from ottml/leather_addon
3adeb1f s25client 21.02.2026 15:34 Flamefire Merge branch 'master' into leather_addon
0495f38 s25client 21.02.2026 14:27 Flamefire Revert "Sort possible clients of coins/armor by estimated priority"

This reverts commit 53ab5d5ce4cd8456c83dcc1fd80cc65afb1f5d5e.
Breaks replays due to different tie resolution
74e4563 s25client 21.02.2026 14:27 Flamefire Sort possible clients of coins/armor by estimated priority

Mirror `FindClientForWare` to reduce pathfinding costs.
773f137 s25client 21.02.2026 13:47 Flamefire Unify `FindClientForCoin` with `FindClientForArmor`

Reuse the code, verify the logic and add comments where required.
3459a69 s25client 21.02.2026 12:02 Flamefire Merge pull request #1888 from Flamefire/duplicate-colors
e690e64 s25client 20.02.2026 09:50 Flamefire Merge branch 'master' into duplicate-colors
a5a9d43 languages 19.02.2026 20:15 Flamefire Update copyright years
be43799 languages 19.02.2026 20:13 Flamefire Fix Czech translation format strings
2f74b46 s25client 19.02.2026 19:53 sunrise Code review: Add path optimization. See #1785
af34dd6 s25client 19.02.2026 19:12 sunrise Update libs/s25main/buildings/nobMilitary.cpp