From b3101221aaa7958f7b59af487659d46c3eea4d24 Mon Sep 17 00:00:00 2001 From: Manu Date: Fri, 1 May 2026 18:12:50 +0200 Subject: [PATCH 1/6] Add stranded soldier return-search addon --- libs/s25main/GlobalGameSettings.cpp | 1 + .../addons/AddonStrandedSoldierReturnSearch.h | 23 +++++++++++++++++++ libs/s25main/addons/Addons.h | 1 + libs/s25main/addons/const_addons.h | 2 +- libs/s25main/figures/noFigure.cpp | 14 ++++++++++- 5 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 libs/s25main/addons/AddonStrandedSoldierReturnSearch.h diff --git a/libs/s25main/GlobalGameSettings.cpp b/libs/s25main/GlobalGameSettings.cpp index 63f240221e..ad23b9c5a8 100644 --- a/libs/s25main/GlobalGameSettings.cpp +++ b/libs/s25main/GlobalGameSettings.cpp @@ -91,6 +91,7 @@ void GlobalGameSettings::registerAllAddons() AddonMoreAnimals, AddonNoAlliedPush, AddonNoCoinsDefault, + AddonStrandedSoldierReturnSearch, AddonNumScoutsExploration, AddonPeacefulMode, AddonRefundMaterials, diff --git a/libs/s25main/addons/AddonStrandedSoldierReturnSearch.h b/libs/s25main/addons/AddonStrandedSoldierReturnSearch.h new file mode 100644 index 0000000000..2d4e3213df --- /dev/null +++ b/libs/s25main/addons/AddonStrandedSoldierReturnSearch.h @@ -0,0 +1,23 @@ +// Copyright (C) 2005 - 2026 Settlers Freaks (sf-team at siedler25.org) +// +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include "AddonList.h" +#include "mygettext/mygettext.h" + +class AddonStrandedSoldierReturnSearch : public AddonList +{ +public: + AddonStrandedSoldierReturnSearch() + : AddonList(AddonId::STRANDED_SOLDIER_RETURN_SEARCH, AddonGroup::Military, + _("Stranded soldier return search"), + _("Increase the search radius used by stranded soldiers when looking for a way back to a warehouse."), + { + _("Default"), + _("Extended"), + _("Very large"), + }) + {} +}; diff --git a/libs/s25main/addons/Addons.h b/libs/s25main/addons/Addons.h index 4b773587d0..226513e222 100644 --- a/libs/s25main/addons/Addons.h +++ b/libs/s25main/addons/Addons.h @@ -28,6 +28,7 @@ #include "addons/AddonDefenderBehavior.h" #include "addons/AddonNoCoinsDefault.h" +#include "addons/AddonStrandedSoldierReturnSearch.h" #include "addons/AddonAdjustMilitaryStrength.h" diff --git a/libs/s25main/addons/const_addons.h b/libs/s25main/addons/const_addons.h index 4ae5da8c88..5cacf30e99 100644 --- a/libs/s25main/addons/const_addons.h +++ b/libs/s25main/addons/const_addons.h @@ -75,7 +75,7 @@ ENUM_WITH_STRING(AddonId, LIMIT_CATAPULTS = 0x00000000, INEXHAUSTIBLE_MINES = 0x AUTOFLAGS = 0x00F00000, WINE = 0x01000000, LEATHER = 0x01000001, NO_ARMOR_DEFAULT = 0x01000002, - ARMOR_CAPTURED_BLD = 0x01000003) + ARMOR_CAPTURED_BLD = 0x01000003, STRANDED_SOLDIER_RETURN_SEARCH = 0x01000006) //-V:AddonId:801 enum class AddonGroup : unsigned diff --git a/libs/s25main/figures/noFigure.cpp b/libs/s25main/figures/noFigure.cpp index f4df49958e..d992a2050b 100644 --- a/libs/s25main/figures/noFigure.cpp +++ b/libs/s25main/figures/noFigure.cpp @@ -46,6 +46,8 @@ const unsigned short WANDER_RADIUS = 10; /// Dasselbe nochmal für Soldaten const unsigned short WANDER_TRYINGS_SOLDIERS = 6; const unsigned short WANDER_RADIUS_SOLDIERS = 15; +const unsigned short WANDER_RADIUS_SOLDIERS_EXTENDED = 30; +const unsigned short WANDER_RADIUS_SOLDIERS_VERY_LARGE = 60; noFigure::noFigure(const Job job, const MapPoint pos, const unsigned char player, noRoadNode* const goal) : noMovable(NodalObjectType::Figure, pos), fs(FigureState::GotToGoal), job_(job), player(player), cur_rs(nullptr), @@ -492,6 +494,16 @@ struct IsValidFlag IsValidFlag(const unsigned playerId) : playerId_(playerId) {} bool operator()(const noFlag* const flag) const { return flag && flag->GetPlayer() == playerId_; } }; + +unsigned short GetSoldierWanderSearchRadius(const GlobalGameSettings& ggs) +{ + switch(ggs.getSelection(AddonId::STRANDED_SOLDIER_RETURN_SEARCH)) + { + case 1: return WANDER_RADIUS_SOLDIERS_EXTENDED; + case 2: return WANDER_RADIUS_SOLDIERS_VERY_LARGE; + default: return WANDER_RADIUS_SOLDIERS; + } +} } // namespace void noFigure::Wander() @@ -508,7 +520,7 @@ void noFigure::Wander() if(!wander_way) { // Soldaten sind härter im Nehmen - const unsigned short wander_radius = IsSoldier() ? WANDER_RADIUS_SOLDIERS : WANDER_RADIUS; + const unsigned short wander_radius = IsSoldier() ? GetSoldierWanderSearchRadius(world->GetGGS()) : WANDER_RADIUS; // Flaggen sammeln und dann zufällig eine auswählen const std::vector flags = From e10c0f562f2d2287943991deca2f95e5fcf3b32e Mon Sep 17 00:00:00 2001 From: Manu Date: Sat, 2 May 2026 10:38:32 +0200 Subject: [PATCH 2/6] Clarify stranded soldier return-search radius --- libs/s25main/figures/noFigure.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/libs/s25main/figures/noFigure.cpp b/libs/s25main/figures/noFigure.cpp index d992a2050b..bc9549f5a5 100644 --- a/libs/s25main/figures/noFigure.cpp +++ b/libs/s25main/figures/noFigure.cpp @@ -46,8 +46,8 @@ const unsigned short WANDER_RADIUS = 10; /// Dasselbe nochmal für Soldaten const unsigned short WANDER_TRYINGS_SOLDIERS = 6; const unsigned short WANDER_RADIUS_SOLDIERS = 15; -const unsigned short WANDER_RADIUS_SOLDIERS_EXTENDED = 30; -const unsigned short WANDER_RADIUS_SOLDIERS_VERY_LARGE = 60; +const unsigned short STRANDED_SOLDIER_RETURN_SEARCH_RADIUS_EXTENDED = 30; +const unsigned short STRANDED_SOLDIER_RETURN_SEARCH_RADIUS_VERY_LARGE = 60; noFigure::noFigure(const Job job, const MapPoint pos, const unsigned char player, noRoadNode* const goal) : noMovable(NodalObjectType::Figure, pos), fs(FigureState::GotToGoal), job_(job), player(player), cur_rs(nullptr), @@ -495,12 +495,14 @@ struct IsValidFlag bool operator()(const noFlag* const flag) const { return flag && flag->GetPlayer() == playerId_; } }; -unsigned short GetSoldierWanderSearchRadius(const GlobalGameSettings& ggs) +/// Radius used only for stranded soldiers looking for a return path to an own warehouse. +/// Normal worker wandering and non-soldier fallback behavior keep using WANDER_RADIUS. +unsigned short GetStrandedSoldierReturnSearchRadius(const GlobalGameSettings& ggs) { switch(ggs.getSelection(AddonId::STRANDED_SOLDIER_RETURN_SEARCH)) { - case 1: return WANDER_RADIUS_SOLDIERS_EXTENDED; - case 2: return WANDER_RADIUS_SOLDIERS_VERY_LARGE; + case 1: return STRANDED_SOLDIER_RETURN_SEARCH_RADIUS_EXTENDED; + case 2: return STRANDED_SOLDIER_RETURN_SEARCH_RADIUS_VERY_LARGE; default: return WANDER_RADIUS_SOLDIERS; } } @@ -520,7 +522,7 @@ void noFigure::Wander() if(!wander_way) { // Soldaten sind härter im Nehmen - const unsigned short wander_radius = IsSoldier() ? GetSoldierWanderSearchRadius(world->GetGGS()) : WANDER_RADIUS; + const unsigned short wander_radius = IsSoldier() ? GetStrandedSoldierReturnSearchRadius(world->GetGGS()) : WANDER_RADIUS; // Flaggen sammeln und dann zufällig eine auswählen const std::vector flags = From 68e24dd74afedaa7642c686889ac243549548751 Mon Sep 17 00:00:00 2001 From: Manu Date: Sat, 2 May 2026 22:37:29 +0200 Subject: [PATCH 3/6] gameplay: clarify stranded soldier return search options --- .../addons/AddonStrandedSoldierReturnSearch.h | 17 +++++++++-------- libs/s25main/addons/const_addons.h | 5 ++++- libs/s25main/figures/noFigure.cpp | 9 ++++++--- 3 files changed, 19 insertions(+), 12 deletions(-) diff --git a/libs/s25main/addons/AddonStrandedSoldierReturnSearch.h b/libs/s25main/addons/AddonStrandedSoldierReturnSearch.h index 2d4e3213df..82d22d3293 100644 --- a/libs/s25main/addons/AddonStrandedSoldierReturnSearch.h +++ b/libs/s25main/addons/AddonStrandedSoldierReturnSearch.h @@ -11,13 +11,14 @@ class AddonStrandedSoldierReturnSearch : public AddonList { public: AddonStrandedSoldierReturnSearch() - : AddonList(AddonId::STRANDED_SOLDIER_RETURN_SEARCH, AddonGroup::Military, - _("Stranded soldier return search"), - _("Increase the search radius used by stranded soldiers when looking for a way back to a warehouse."), - { - _("Default"), - _("Extended"), - _("Very large"), - }) + : AddonList( + AddonId::STRANDED_SOLDIER_RETURN_SEARCH, AddonGroup::Military, _("Stranded soldier return search"), + _("Controls the search radius used by stranded soldiers when looking for a way back to a warehouse."), + { + _("Default search range (1x)"), + _("Reduced search range (0.5x)"), + _("Extended search range (2x)"), + _("Very large search range (4x)"), + }) {} }; diff --git a/libs/s25main/addons/const_addons.h b/libs/s25main/addons/const_addons.h index 5cacf30e99..07ec1c09ff 100644 --- a/libs/s25main/addons/const_addons.h +++ b/libs/s25main/addons/const_addons.h @@ -26,6 +26,7 @@ // 00E Jonathan // 00F Jarno // 010 aztimh +// 011 DevOpsOfChaos // Do not forget to add your Addon to GlobalGameSettings::registerAllAddons @ GlobalGameSettings.cpp! // Never use a number twice! @@ -75,7 +76,9 @@ ENUM_WITH_STRING(AddonId, LIMIT_CATAPULTS = 0x00000000, INEXHAUSTIBLE_MINES = 0x AUTOFLAGS = 0x00F00000, WINE = 0x01000000, LEATHER = 0x01000001, NO_ARMOR_DEFAULT = 0x01000002, - ARMOR_CAPTURED_BLD = 0x01000003, STRANDED_SOLDIER_RETURN_SEARCH = 0x01000006) + ARMOR_CAPTURED_BLD = 0x01000003, + + STRANDED_SOLDIER_RETURN_SEARCH = 0x01100001) //-V:AddonId:801 enum class AddonGroup : unsigned diff --git a/libs/s25main/figures/noFigure.cpp b/libs/s25main/figures/noFigure.cpp index bc9549f5a5..e9dcd3815f 100644 --- a/libs/s25main/figures/noFigure.cpp +++ b/libs/s25main/figures/noFigure.cpp @@ -46,6 +46,7 @@ const unsigned short WANDER_RADIUS = 10; /// Dasselbe nochmal für Soldaten const unsigned short WANDER_TRYINGS_SOLDIERS = 6; const unsigned short WANDER_RADIUS_SOLDIERS = 15; +const unsigned short STRANDED_SOLDIER_RETURN_SEARCH_RADIUS_REDUCED = WANDER_RADIUS_SOLDIERS / 2; const unsigned short STRANDED_SOLDIER_RETURN_SEARCH_RADIUS_EXTENDED = 30; const unsigned short STRANDED_SOLDIER_RETURN_SEARCH_RADIUS_VERY_LARGE = 60; @@ -501,8 +502,9 @@ unsigned short GetStrandedSoldierReturnSearchRadius(const GlobalGameSettings& gg { switch(ggs.getSelection(AddonId::STRANDED_SOLDIER_RETURN_SEARCH)) { - case 1: return STRANDED_SOLDIER_RETURN_SEARCH_RADIUS_EXTENDED; - case 2: return STRANDED_SOLDIER_RETURN_SEARCH_RADIUS_VERY_LARGE; + case 1: return STRANDED_SOLDIER_RETURN_SEARCH_RADIUS_REDUCED; + case 2: return STRANDED_SOLDIER_RETURN_SEARCH_RADIUS_EXTENDED; + case 3: return STRANDED_SOLDIER_RETURN_SEARCH_RADIUS_VERY_LARGE; default: return WANDER_RADIUS_SOLDIERS; } } @@ -522,7 +524,8 @@ void noFigure::Wander() if(!wander_way) { // Soldaten sind härter im Nehmen - const unsigned short wander_radius = IsSoldier() ? GetStrandedSoldierReturnSearchRadius(world->GetGGS()) : WANDER_RADIUS; + const unsigned short wander_radius = + IsSoldier() ? GetStrandedSoldierReturnSearchRadius(world->GetGGS()) : WANDER_RADIUS; // Flaggen sammeln und dann zufällig eine auswählen const std::vector flags = From 50b3573dcf8cafe47ee69cf7220691ae455d5aa2 Mon Sep 17 00:00:00 2001 From: Manu Date: Sun, 3 May 2026 12:10:36 +0200 Subject: [PATCH 4/6] gameplay: stage stranded soldier return search --- libs/s25main/figures/noFigure.cpp | 46 +++++++++++++++------ libs/s25main/figures/noFigure.h | 7 ++++ tests/s25Main/integration/testFigures.cpp | 49 +++++++++++++++++++++++ 3 files changed, 90 insertions(+), 12 deletions(-) diff --git a/libs/s25main/figures/noFigure.cpp b/libs/s25main/figures/noFigure.cpp index e9dcd3815f..aba3d958de 100644 --- a/libs/s25main/figures/noFigure.cpp +++ b/libs/s25main/figures/noFigure.cpp @@ -47,8 +47,6 @@ const unsigned short WANDER_RADIUS = 10; const unsigned short WANDER_TRYINGS_SOLDIERS = 6; const unsigned short WANDER_RADIUS_SOLDIERS = 15; const unsigned short STRANDED_SOLDIER_RETURN_SEARCH_RADIUS_REDUCED = WANDER_RADIUS_SOLDIERS / 2; -const unsigned short STRANDED_SOLDIER_RETURN_SEARCH_RADIUS_EXTENDED = 30; -const unsigned short STRANDED_SOLDIER_RETURN_SEARCH_RADIUS_VERY_LARGE = 60; noFigure::noFigure(const Job job, const MapPoint pos, const unsigned char player, noRoadNode* const goal) : noMovable(NodalObjectType::Figure, pos), fs(FigureState::GotToGoal), job_(job), player(player), cur_rs(nullptr), @@ -467,7 +465,7 @@ void noFigure::StartWandering(const unsigned burned_wh_id) // 3x rumirren und eine Flagge suchen, wenn dann keine gefunden wurde, stirbt die Figur wander_way = WANDER_WAY_MIN + RANDOM_RAND(WANDER_WAY_MAX - WANDER_WAY_MIN); // Soldaten sind härter im Nehmen - wander_tryings = IsSoldier() ? WANDER_TRYINGS_SOLDIERS : WANDER_TRYINGS; + wander_tryings = IsSoldier() ? GetStrandedSoldierReturnSearchTryings(world->GetGGS()) : WANDER_TRYINGS; // Wenn wir stehen, zusätzlich noch loslaufen! if(waiting_for_free_node) @@ -496,19 +494,43 @@ struct IsValidFlag bool operator()(const noFlag* const flag) const { return flag && flag->GetPlayer() == playerId_; } }; -/// Radius used only for stranded soldiers looking for a return path to an own warehouse. -/// Normal worker wandering and non-soldier fallback behavior keep using WANDER_RADIUS. -unsigned short GetStrandedSoldierReturnSearchRadius(const GlobalGameSettings& ggs) +enum class StrandedSoldierReturnSearchSelection { - switch(ggs.getSelection(AddonId::STRANDED_SOLDIER_RETURN_SEARCH)) + ReducedRadius = 1, + WideSecondStage = 2, + WideThirdStage = 3 +}; + +} // namespace + +unsigned short GetStrandedSoldierReturnSearchTryings(const GlobalGameSettings& ggs) +{ + switch(static_cast(ggs.getSelection(AddonId::STRANDED_SOLDIER_RETURN_SEARCH))) { - case 1: return STRANDED_SOLDIER_RETURN_SEARCH_RADIUS_REDUCED; - case 2: return STRANDED_SOLDIER_RETURN_SEARCH_RADIUS_EXTENDED; - case 3: return STRANDED_SOLDIER_RETURN_SEARCH_RADIUS_VERY_LARGE; + case StrandedSoldierReturnSearchSelection::WideSecondStage: return 2 * WANDER_TRYINGS_SOLDIERS; + case StrandedSoldierReturnSearchSelection::WideThirdStage: return 3 * WANDER_TRYINGS_SOLDIERS; + default: return WANDER_TRYINGS_SOLDIERS; + } +} + +unsigned short GetStrandedSoldierReturnSearchRadius(const GlobalGameSettings& ggs, const unsigned short wanderTriesLeft) +{ + switch(static_cast(ggs.getSelection(AddonId::STRANDED_SOLDIER_RETURN_SEARCH))) + { + case StrandedSoldierReturnSearchSelection::ReducedRadius: return STRANDED_SOLDIER_RETURN_SEARCH_RADIUS_REDUCED; + case StrandedSoldierReturnSearchSelection::WideSecondStage: + // Start with the normal soldier radius, then widen the final stage after the first six failed searches. + return wanderTriesLeft > WANDER_TRYINGS_SOLDIERS ? WANDER_RADIUS_SOLDIERS : 2 * WANDER_RADIUS_SOLDIERS; + case StrandedSoldierReturnSearchSelection::WideThirdStage: + // Escalate every six failed searches: normal radius, then 2x, then 4x for the final stage. + if(wanderTriesLeft > 2 * WANDER_TRYINGS_SOLDIERS) + return WANDER_RADIUS_SOLDIERS; + if(wanderTriesLeft > WANDER_TRYINGS_SOLDIERS) + return 2 * WANDER_RADIUS_SOLDIERS; + return 4 * WANDER_RADIUS_SOLDIERS; default: return WANDER_RADIUS_SOLDIERS; } } -} // namespace void noFigure::Wander() { @@ -525,7 +547,7 @@ void noFigure::Wander() { // Soldaten sind härter im Nehmen const unsigned short wander_radius = - IsSoldier() ? GetStrandedSoldierReturnSearchRadius(world->GetGGS()) : WANDER_RADIUS; + IsSoldier() ? GetStrandedSoldierReturnSearchRadius(world->GetGGS(), wander_tryings) : WANDER_RADIUS; // Flaggen sammeln und dann zufällig eine auswählen const std::vector flags = diff --git a/libs/s25main/figures/noFigure.h b/libs/s25main/figures/noFigure.h index b52a20c630..75a8cb4255 100644 --- a/libs/s25main/figures/noFigure.h +++ b/libs/s25main/figures/noFigure.h @@ -30,6 +30,13 @@ constexpr auto maxEnumValue(FigureState) } class SerializedGameData; +class GlobalGameSettings; + +/// Number of flag-search attempts for stranded soldiers looking for a return path to an own warehouse. +unsigned short GetStrandedSoldierReturnSearchTryings(const GlobalGameSettings& ggs); +/// Radius used only for stranded soldiers looking for a return path to an own warehouse. +/// Normal worker wandering keeps using WANDER_RADIUS and is not affected by this addon. +unsigned short GetStrandedSoldierReturnSearchRadius(const GlobalGameSettings& ggs, unsigned short wanderTriesLeft); // Stellt einen Menschen dar class noFigure : public noMovable diff --git a/tests/s25Main/integration/testFigures.cpp b/tests/s25Main/integration/testFigures.cpp index dcd9514a3c..f1c7f6789a 100644 --- a/tests/s25Main/integration/testFigures.cpp +++ b/tests/s25Main/integration/testFigures.cpp @@ -3,8 +3,10 @@ // SPDX-License-Identifier: GPL-2.0-or-later #include "GamePlayer.h" +#include "GlobalGameSettings.h" #include "PointOutput.h" #include "RttrForeachPt.h" +#include "addons/const_addons.h" #include "buildings/nobBaseWarehouse.h" #include "factories/BuildingFactory.h" #include "figures/noFigure.h" @@ -21,6 +23,53 @@ BOOST_AUTO_TEST_SUITE(FigureTests) +BOOST_AUTO_TEST_CASE(StrandedSoldierReturnSearchDefaultKeepsNormalTryingsAndRadius) +{ + GlobalGameSettings ggs; + ggs.setSelection(AddonId::STRANDED_SOLDIER_RETURN_SEARCH, 0); + + BOOST_TEST(GetStrandedSoldierReturnSearchTryings(ggs) == 6u); + BOOST_TEST(GetStrandedSoldierReturnSearchRadius(ggs, 6) == 15u); + BOOST_TEST(GetStrandedSoldierReturnSearchRadius(ggs, 1) == 15u); +} + +BOOST_AUTO_TEST_CASE(StrandedSoldierReturnSearchReducedKeepsNormalTryingsAndFixedHalfRadius) +{ + GlobalGameSettings ggs; + ggs.setSelection(AddonId::STRANDED_SOLDIER_RETURN_SEARCH, 1); + + BOOST_TEST(GetStrandedSoldierReturnSearchTryings(ggs) == 6u); + BOOST_TEST(GetStrandedSoldierReturnSearchRadius(ggs, 12) == 7u); + BOOST_TEST(GetStrandedSoldierReturnSearchRadius(ggs, 6) == 7u); + BOOST_TEST(GetStrandedSoldierReturnSearchRadius(ggs, 1) == 7u); +} + +BOOST_AUTO_TEST_CASE(StrandedSoldierReturnSearchExtendedEscalatesAfterNormalTryings) +{ + GlobalGameSettings ggs; + ggs.setSelection(AddonId::STRANDED_SOLDIER_RETURN_SEARCH, 2); + + BOOST_TEST(GetStrandedSoldierReturnSearchTryings(ggs) == 12u); + BOOST_TEST(GetStrandedSoldierReturnSearchRadius(ggs, 12) == 15u); + BOOST_TEST(GetStrandedSoldierReturnSearchRadius(ggs, 7) == 15u); + BOOST_TEST(GetStrandedSoldierReturnSearchRadius(ggs, 6) == 30u); + BOOST_TEST(GetStrandedSoldierReturnSearchRadius(ggs, 1) == 30u); +} + +BOOST_AUTO_TEST_CASE(StrandedSoldierReturnSearchVeryLargeEscalatesThroughThreeStages) +{ + GlobalGameSettings ggs; + ggs.setSelection(AddonId::STRANDED_SOLDIER_RETURN_SEARCH, 3); + + BOOST_TEST(GetStrandedSoldierReturnSearchTryings(ggs) == 18u); + BOOST_TEST(GetStrandedSoldierReturnSearchRadius(ggs, 18) == 15u); + BOOST_TEST(GetStrandedSoldierReturnSearchRadius(ggs, 13) == 15u); + BOOST_TEST(GetStrandedSoldierReturnSearchRadius(ggs, 12) == 30u); + BOOST_TEST(GetStrandedSoldierReturnSearchRadius(ggs, 7) == 30u); + BOOST_TEST(GetStrandedSoldierReturnSearchRadius(ggs, 6) == 60u); + BOOST_TEST(GetStrandedSoldierReturnSearchRadius(ggs, 1) == 60u); +} + BOOST_FIXTURE_TEST_CASE(DestroyWHWithFigure, WorldWithGCExecution2P) { world.GetPlayer(curPlayer).GetFirstWH()->AddToInventory(PeopleCounts::make(Job::Helper, 10), true); From 760297150bfb10a5322c107f4b10684fd75680a0 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Wed, 6 May 2026 15:51:35 +0200 Subject: [PATCH 5/6] Fix comment --- libs/s25main/figures/noFigure.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/s25main/figures/noFigure.cpp b/libs/s25main/figures/noFigure.cpp index aba3d958de..91e67b9bc9 100644 --- a/libs/s25main/figures/noFigure.cpp +++ b/libs/s25main/figures/noFigure.cpp @@ -522,7 +522,7 @@ unsigned short GetStrandedSoldierReturnSearchRadius(const GlobalGameSettings& gg // Start with the normal soldier radius, then widen the final stage after the first six failed searches. return wanderTriesLeft > WANDER_TRYINGS_SOLDIERS ? WANDER_RADIUS_SOLDIERS : 2 * WANDER_RADIUS_SOLDIERS; case StrandedSoldierReturnSearchSelection::WideThirdStage: - // Escalate every six failed searches: normal radius, then 2x, then 4x for the final stage. + // Escalate after each stage: normal radius, then 2x, then 4x for the final stage. if(wanderTriesLeft > 2 * WANDER_TRYINGS_SOLDIERS) return WANDER_RADIUS_SOLDIERS; if(wanderTriesLeft > WANDER_TRYINGS_SOLDIERS) From 0b2dde194e56fddb4cd12c38463a0296447fd7f3 Mon Sep 17 00:00:00 2001 From: Manu Date: Mon, 22 Jun 2026 19:29:20 +0200 Subject: [PATCH 6/6] Format stranded soldier return search addon --- .../addons/AddonStrandedSoldierReturnSearch.h | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/libs/s25main/addons/AddonStrandedSoldierReturnSearch.h b/libs/s25main/addons/AddonStrandedSoldierReturnSearch.h index 82d22d3293..44563a2d5c 100644 --- a/libs/s25main/addons/AddonStrandedSoldierReturnSearch.h +++ b/libs/s25main/addons/AddonStrandedSoldierReturnSearch.h @@ -12,13 +12,13 @@ class AddonStrandedSoldierReturnSearch : public AddonList public: AddonStrandedSoldierReturnSearch() : AddonList( - AddonId::STRANDED_SOLDIER_RETURN_SEARCH, AddonGroup::Military, _("Stranded soldier return search"), - _("Controls the search radius used by stranded soldiers when looking for a way back to a warehouse."), - { - _("Default search range (1x)"), - _("Reduced search range (0.5x)"), - _("Extended search range (2x)"), - _("Very large search range (4x)"), - }) + AddonId::STRANDED_SOLDIER_RETURN_SEARCH, AddonGroup::Military, _("Stranded soldier return search"), + _("Controls the search radius used by stranded soldiers when looking for a way back to a warehouse."), + { + _("Default search range (1x)"), + _("Reduced search range (0.5x)"), + _("Extended search range (2x)"), + _("Very large search range (4x)"), + }) {} };