Changelog

Die letzten Änderungen an "Return to the Roots"
94af63d s25client 06.10.2026 21:36 Flamefire Merge pull request #1948 from morganchristiansson/hunter-radius

Hunter: Use GetPointsInRadius() instead of square
e4ec788 s25client 05.10.2026 02:59 Flamefire Merge pull request #1928 from DevOpsOfChaos/sidequest/single-soldier-coin-training

Add single-soldier coin training addon
508762a s25client 05.10.2026 01:36 Flamefire Update languages submodule
10a4059 languages 05.10.2026 01:11 sirRobeN Polish translation correction (#60)

Polish translation correction

1. Fixed constant for "A preset named '%1%' already exists. Do you want to overwrite it?", where a '%' sign was missing in the Polish translation.
2. Tweak: replaced "!" with "." to match the original English string for "Preset '%1%' was not found."
59327b2 s25client 04.10.2026 18:19 Flamefire Merge pull request #1957 from FlexApex/ai-battle-teams

ai-battle: support team assignment (--teams) and establish team start-pacts
f18ec7e s25client 04.10.2026 16:32 Flamefire Fix clang-tidy warning
d8277bc s25client 04.10.2026 16:24 Flamefire Remove replay compat from AI
cf83a02 s25client 04.10.2026 16:24 Flamefire Add `nofHunter::GetHuntableAnimalsInRange`
53b3422 s25client 04.10.2026 16:21 Flamefire Rename `ReplayMinorVersion` to `ReplayCompatVersion`
694b44d s25client 04.10.2026 15:09 Flamefire Merge branch 'master' into ai-battle-teams
d272282 s25client 04.10.2026 15:03 Flamefire Merge pull request #1942 from DevOpsOfChaos/sidequest/configurable-mine-resource-behavior

Configurable mine resource behavior
0262145 s25client 04.10.2026 14:59 Flamefire Add missing overload to get addon by ID
9051f3d s25client 04.10.2026 14:57 Flamefire Convert CLI parsing of AI battle to use value-references consistently.

Move from explicit type-templates and `count` checks to a struct passing members by reference to Boost.ProgramOptions.
890b737 s25client 04.10.2026 14:11 Flamefire Extent tests
e5d4776 languages 02.10.2026 22:34 FloSoft Update synchronize-launchpad.yml

Fix verification output
cf4047d languages 02.10.2026 16:28 Flamefire Harden CI

Set `pipefail` so the import causes a CI failure on error.
Print the LaunchPad head as a sanity check the push worked.
935bfcb languages 02.10.2026 15:58 sirRobeN Updated Polish translations (#57)
9a2f330 languages 01.10.2026 19:45 Flamefire Revert wrong fuzzy translation updates

The new strings were filled with similar translations which are however different.
431bb13 s25client 01.10.2026 19:01 Flamefire Merge pull request #1929 from DevOpsOfChaos/sidequest/stranded-soldier-return-search

Add stranded soldier return-search addon
a224e91 s25client 01.10.2026 18:11 Flamefire Format source
ccc545b s25client 01.10.2026 18:10 Flamefire Merge branch 'master' into sidequest/stranded-soldier-return-search
be68dc6 s25client 01.10.2026 17:52 Flamefire Merge pull request #1924 from DevOpsOfChaos/sidequest/frontier-distance-static-blockers
9a0a240 s25client 01.10.2026 17:01 Flamefire Update translations
deb8d32 s25client 01.10.2026 16:58 FloSoft Merge pull request #1990 from Return-To-The-Roots/campaign

Fix invalid resource ID error in campaign selection for standard image paths
5eb7005 s25client 01.10.2026 16:56 FloSoft Merge pull request #1991 from Return-To-The-Roots/translation

Import new translations
f94cd05 s25client 01.10.2026 15:35 Flamefire Import new translations

Closes #1988
b5e089c languages 01.10.2026 15:32 Flamefire Update from sources
1f913a9 languages 01.10.2026 14:53 Flamefire LaunchPad translation import
7ab2361 s25client 01.10.2026 12:32 Flamefire Merge pull request #1980 from MichalLabuda/addon-presets-selection

Act on the selected addon preset, not a typed name
d5576d3 s25client 01.10.2026 11:59 Flamefire Fix invalid resource ID error in campaign selection for standard image paths

PR #1886 introduced support for relative image paths but the change in
the desktop class broke support for placeholder paths such as `<RTTR_GAME>/GFX/PICS/INSTALL.LBM`.

Revert the change breaking that.

Fixes #1989
5ca1516 s25client 29.09.2026 22:59 MichalLabuda Move addon preset layout and button logic into the base window

- Keep the layout constants in the source file and let the base window
compute its height from the room subclasses need
- Handle enabling Save/Load and Delete in the base window: Delete and
Load need a selected preset, Save needs a name
- Only picking a preset fills the name; editing it drops the selection,
while deselecting or rebuilding the list keeps the name
- Tests answer and close a specific message box and check pointers with
ensureNonNull; cover when saving is possible and that deleting from
the save window keeps the name
3a1fdce s25client 29.09.2026 17:53 Michał Łabuda Merge branch 'master' into addon-presets-selection
d9a4572 s25client 28.09.2026 23:55 FloSoft Merge pull request #1886 from Flamefire/campaign

Allow relative path for campaign images
d3c6c71 s25client 28.09.2026 23:52 FloSoft Merge pull request #1972 from Flamefire/unused-cleanup

Remove `SUPPRESS_UNUSED`, duplicate `isSoldierJob` and fix CMake version range issues
82cd540 s25client 28.09.2026 23:50 FloSoft Merge pull request #1976 from Return-To-The-Roots/road-refactor

Return success indicator for BuildRoad and SetFlag
29d3ecd s25client 28.09.2026 23:48 FloSoft Merge pull request #1974 from Flamefire/maxDiff-fix

Fix `absDiff`
a131e83 s25client 28.09.2026 23:47 FloSoft Merge pull request #1984 from Flamefire/fix-bob-crash

Fix out-of-bounds access to override BOBs ny-offset
ff0200e s25client 28.09.2026 23:45 FloSoft Merge pull request #1986 from jarvis-jhk/fix/ai-battle-log-dir

ai-battle: log to the user data folder, not ./logs
516bfaf s25client 27.09.2026 11:37 JARVIS ai-battle: log to the user data folder, not ./logs

Without a log path set, LOG writes to ./logs relative to the working
directory; when that folder does not exist, the first Lua error or AI log
line dies with "Could not open logs/... for writing" instead of the real
message. Use RTTR's logs folder and create it, as the game does.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
dc38c36 s25client 27.09.2026 11:37 JARVIS Guard IsBuildingEnabled against a missing game interface

GamePlayer::IsBuildingEnabled dereferenced world.GetGameInterface()
unconditionally for human players. Without a GUI (headless runs, tests)
that is null, so any disabled building (every campaign mission disables
some) crashed there. Guard it like the other GetGameInterface() uses:
no interface, no cheats.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
6e80cac s25client 23.09.2026 11:15 Flamefire Fix out-of-bounds access to override BOBs ny-offset

In `glArchivItem_Bob::mergeLinks` the ny-offset array for additional Bobs was not resized leading to an OOB access when accessing the sprites
after #1968
Fix by using a single array instead.

Fixes #1982
Fixes #1983
22754f4 libsiedler2 23.09.2026 11:12 Flamefire Merge `spriteOverlayIdx` & `spriteOverlayNyOffset`

Avoids having mismatching sizes of the arrays.
16a5366 s25client 17.09.2026 07:13 MichalLabuda Create the addon presets folder at startup

The preset windows no longer create it or guard against it missing.
Rebuilding the preset list now keeps the entered name, so a failed save
or a delete leaves it in place to be retried. A failed save logs the
actual error and points the user at the log.
Both windows get their action button from the base class.
6990bb7 s25client 16.09.2026 18:52 MichalLabuda Restore deleting a preset from the save window
f8a302a s25client 16.09.2026 03:37 MichalLabuda Merge remote-tracking branch 'upstream/master' into addon-presets-selection
87422ef s25client 09.09.2026 20:02 MichalLabuda Create the addon presets folder in iwAddons

Avoids constructing a preset window just to have it close itself.
2f2104d s25client 09.09.2026 03:58 MichalLabuda Store the addon in AddonGui instance

Avoid indexing the addon list in parallel which is error prone
55062c1 s25client 09.09.2026 03:25 MichalLabuda Act on the selected addon preset, not a typed name

Load and Delete resolved their target from the name field,
so editing the name after picking a preset silently retargeted the
action.

Removed the Delete button from the Save preset window.
Removed the edit control from the Load preset window.
Load and Delete buttons stay disabled until a preset is picked.
4623d2f s25client 08.09.2026 10:56 Flamefire Merge pull request #1951 from MichalLabuda/addon-presets

Add Addon presets
73aafa2 s25client 07.09.2026 15:35 Flamefire Store addon window/group in AddonGUI instance

Avoid repeated getting of the window which is error prone