Changelog

Die letzten Änderungen an "Return to the Roots"
e6489dc s25client 08.02.2026 18:17 Flamefire Merge pull request #1739 from wichern/use-random-in-aijh

Make AIJH Actions Reproducible by using the user selectable Random Seed
0bf8a73 s25client 08.02.2026 15:06 Flamefire Move `randomChance` implementation to `helpers` namespace
dcf0b09 s25client 08.02.2026 12:35 Flamefire Refactor `MilUpgradeOptim`

Clang (wrongly) detects `milBld` as (potentially) NULL.
Restructure the method for less nesting and less conditions, possibly
avoiding this.
1d43ffc s25client 07.02.2026 17:50 Flamefire Adjust AI random calls to previous distributions
487f8f6 s25client 07.02.2026 17:00 Flamefire Forward random functions to functions in `helpers` namespace
5a24dac s25client 02.02.2026 11:35 Flamefire Also use references for non-NULL arguments in `GamePlayer`
a667662 s25client 02.02.2026 11:06 Flamefire Enhance doc for `checked_cast` and assert type requirements
cb2bd53 s25client 01.02.2026 21:41 Flamefire Pass `goal` by reference as it is always non-NULL
adb902c s25client 01.02.2026 21:32 Flamefire Fix collection of jobs to warehouses

When the "Collect" option in a warehouse for a job is set the actual job
subclass will be created which expects its workplace as the goal, i.e. a
`nobUsual` for most.
In this situtation the goal is the warehouse to which the figure should
go. So check that in `OrderJob` and create a `nofPassiveWorker` instead
similar to the `Send` option handler.
fd1dec1 s25client 01.02.2026 21:04 Flamefire Factor out check if a GOT is a storehouse/nobBaseWarehouse
23fad66 s25client 01.02.2026 20:30 Flamefire Remove unused overload for figures with warehouse goal

It is never used and can cause confusion.
`nofPassiveWorker` should be used for transfers to a warehouse.
06b69de s25client 01.02.2026 20:27 Flamefire Add `isSoldierJob` function

Unify uses of soldier checks in one place.
dc0ce04 s25client 01.02.2026 19:25 Flamefire Merge pull request #1679 from kubaau/cheats2
ebadacf s25client 01.02.2026 18:09 Flamefire Mark loop variable as unused
fa8bf40 s25client 01.02.2026 17:50 Flamefire Merge branch 'master' into cheats2
c619ede s25client 01.02.2026 17:49 Flamefire Replace `glTranslatef` by `glPush/PopMatrix`
dc3ccee s25client 01.02.2026 17:45 Flamefire Minor renaming and comment translation
cb3abb9 s25client 01.02.2026 17:12 Flamefire Add doc for `ResourceRevealMode`

Make it clear that each includes the former
fccf0cc s25client 25.01.2026 20:38 Jan ?imek Capture spacebar as a character only (#1873)
b3c0769 s25client 23.01.2026 18:14 Jan ?imek Capture spacebar under Wayland (#1855)
af47028 s25client 23.01.2026 13:22 Flamefire Workaround GCC 9 issue with comparing `std::optional` in `BOOST_TEST`

The comparison is ambiguous, fixed in GCC 10.
4066a8b s25client 23.01.2026 12:41 Flamefire Update translations and fix test

Includes https://github.com/Return-To-The-Roots/languages/pull/41
fixing a crash where the German translation was missing a format string.

Adapt the test to catch this:
If we don't "translate" something in the `en_GB` file it won't show up
in the `.mo` file and won't be checked.

As the test checks all translated strings (see the `continue`) anyways
iterate over the translation file instead, backreferencing the "gold"
entries.
5f65bad s25client 23.01.2026 11:50 Flamefire Make TestServer_Works on CI more reliable
a509fed s25client 23.01.2026 11:50 Flamefire Make TestServer_Works on CI more reliable
cde6f73 languages 23.01.2026 02:21 Farmer_Markus Fixed game crashing when game files failed to load (again)
b1ffe81 s25client 22.01.2026 21:48 Flamefire Add tests for cheat commands/texts and cheat keys
c5095b9 s25client 22.01.2026 20:25 Flamefire Revert "Add classic cheat to set game speed by using ALT+1 through ALT+6"

This reverts commit 357a8f115ef2a4c286db89ca6b96d2483c1a7a09.
d17f60f s25client 22.01.2026 10:04 Flamefire Remove named constant for parameter
c0a883d s25client 21.01.2026 18:29 Jakub Audykowicz Change speed in fixed steps

Co-Authored-By: Alexander Grund <Flamefire@users.noreply.github.com>
e338893 s25client 21.01.2026 16:14 Flamefire Remove isTent param from BuildingFactory
93c5aef s25client 21.01.2026 15:54 Flamefire Disable clang-tidy false-positives
d88cc07 s25client 21.01.2026 15:23 Flamefire Merge pull request #1738 from kubaau/cheat_enemy_productivity
c793e0a s25client 21.01.2026 13:47 Flamefire Check cheat visibility only once outside the loop
fdb4c0b s25client 21.01.2026 13:39 Flamefire Change order of checks in test
015e6c0 s25client 21.01.2026 13:35 Flamefire Factor constants out of loop
b87e768 s25client 21.01.2026 11:55 Flamefire Merge pull request #1804 from Farmer-Markus/android
125ab78 s25client 21.01.2026 11:03 Farmer_Markus Disable mouse-click fix for touch controls
14c951b s25client 20.01.2026 11:24 Flamefire Merge pull request #1867 from Shawn8901/fix-nix-shell
12da8bf s25client 20.01.2026 11:23 Flamefire Use some texture for all buttons
67502cb s25client 19.01.2026 21:39 Shawn8901 fix nix-shell for recent nixpkgs versions
696db30 s25client 19.01.2026 17:08 Flamefire Introduce constant for max radius
e9947dc s25client 19.01.2026 13:34 Flamefire Add test for stuck attacker (#1863)
48e7f51 s25client 19.01.2026 10:47 Flamefire Add TODOs for Replay breaking enhancements

The point can be considered invalid if it is too far and the attacker
would abort on the next event handling.
Defenders with now missing attackers will still come out of the
building and go right back in which looks weird.
4c7ed68 s25client 17.01.2026 20:36 Flamefire Fix waiting attackers becoming stuck when target flag becomes unreachable.

When the defender kills the current attacker (at the flag)
`FindAttackerNearBuilding` is used to get the next one for the defender
to fight. This takes the closest attacker that is ready, i.e. waiting
around the flag and calls `AttackDefenderAtFlag` which usually causes
the attacker to start walking to the flag. However if there is no path
to the flag (anymore, e.g. after destroying a road) the attacker won't
do anything and the function returns `false`.

As this isn't checked the defender will keep waiting for it.

This can lead to use-after-free if the attacker is destroyed (defeated
in free fight, went back home, ...) as the defender will then have a
dangling pointer to it.

Fixes #1863
8e5821d s25client 17.01.2026 16:04 Flamefire Add simple test
0e0db2b s25client 17.01.2026 14:10 Flamefire Add Korean glyphs

Contributed by @rasberryrabbit
Closes #1860
6471ed4 s25client 17.01.2026 12:51 Flamefire Encode GFs directly in ID
413ba23 s25client 16.01.2026 16:40 Flamefire Add option to jump by specific number of GFs to jump window

Closes #1861
705ba23 s25client 13.01.2026 15:21 Flamefire Merge pull request #1858 from Flamefire/wording
5452ee9 s25client 13.01.2026 09:57 Flamefire Fix clang-tidy warning