Skip to content
Open
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions libs/s25main/GlobalGameSettings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@ void GlobalGameSettings::registerAllAddons()
AddonMoreAnimals,
AddonNoAlliedPush,
AddonNoCoinsDefault,
AddonStrandedSoldierReturnSearch,
AddonNumScoutsExploration,
AddonPeacefulMode,
AddonRefundMaterials,
Expand Down
23 changes: 23 additions & 0 deletions libs/s25main/addons/AddonStrandedSoldierReturnSearch.h
Original file line number Diff line number Diff line change
@@ -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"),
Comment thread
DevOpsOfChaos marked this conversation as resolved.
Outdated
_("Extended"),
_("Very large"),
})
{}
};
1 change: 1 addition & 0 deletions libs/s25main/addons/Addons.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
#include "addons/AddonDefenderBehavior.h"

#include "addons/AddonNoCoinsDefault.h"
#include "addons/AddonStrandedSoldierReturnSearch.h"

#include "addons/AddonAdjustMilitaryStrength.h"

Expand Down
2 changes: 1 addition & 1 deletion libs/s25main/addons/const_addons.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
16 changes: 15 additions & 1 deletion libs/s25main/figures/noFigure.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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 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),
Expand Down Expand Up @@ -492,6 +494,18 @@ struct IsValidFlag
IsValidFlag(const unsigned playerId) : playerId_(playerId) {}
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.
Comment thread
DevOpsOfChaos marked this conversation as resolved.
Outdated
unsigned short GetStrandedSoldierReturnSearchRadius(const GlobalGameSettings& ggs)
{
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;
default: return WANDER_RADIUS_SOLDIERS;
}
}
} // namespace

void noFigure::Wander()
Expand All @@ -508,7 +522,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() ? GetStrandedSoldierReturnSearchRadius(world->GetGGS()) : WANDER_RADIUS;

// Flaggen sammeln und dann zufällig eine auswählen
const std::vector<noFlag*> flags =
Expand Down