From 71c4c3b97dfe17d51858cf6125902ea92d238a57 Mon Sep 17 00:00:00 2001 From: MichalLabuda Date: Wed, 20 May 2026 04:41:40 +0200 Subject: [PATCH 1/7] Adjust working ranges of forester, woodcutter and stonemason (3 Addons) --- libs/s25main/GlobalGameSettings.cpp | 5 ++- .../s25main/addons/AddonForesterReachRadius.h | 35 ++++++++++++++++++ .../addons/AddonStonemasonReachRadius.h | 37 +++++++++++++++++++ .../addons/AddonWoodcutterReachRadius.h | 35 ++++++++++++++++++ libs/s25main/addons/Addons.h | 5 +++ libs/s25main/addons/const_addons.h | 5 ++- libs/s25main/figures/nofFarmhand.cpp | 21 ++++++++++- 7 files changed, 139 insertions(+), 4 deletions(-) create mode 100644 libs/s25main/addons/AddonForesterReachRadius.h create mode 100644 libs/s25main/addons/AddonStonemasonReachRadius.h create mode 100644 libs/s25main/addons/AddonWoodcutterReachRadius.h diff --git a/libs/s25main/GlobalGameSettings.cpp b/libs/s25main/GlobalGameSettings.cpp index 5425aef5f9..f5047f9893 100644 --- a/libs/s25main/GlobalGameSettings.cpp +++ b/libs/s25main/GlobalGameSettings.cpp @@ -105,7 +105,10 @@ void GlobalGameSettings::registerAllAddons() AddonLeather, AddonNoArmorDefault, AddonArmorCapturedBld, - AddonForesterFarmFieldAvoidance + AddonForesterFarmFieldAvoidance, + AddonForesterReachRadius, + AddonWoodcutterReachRadius, + AddonStonemasonReachRadius >; // clang-format on using namespace boost::mp11; diff --git a/libs/s25main/addons/AddonForesterReachRadius.h b/libs/s25main/addons/AddonForesterReachRadius.h new file mode 100644 index 0000000000..cbdf219486 --- /dev/null +++ b/libs/s25main/addons/AddonForesterReachRadius.h @@ -0,0 +1,35 @@ +// 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" + +const std::array foresterRadiusValues = { + 6, // Default + 8, // +33% + 10, // +66% + 12, // +100% + 15, // +150% + 18 // +200% +}; + +class AddonForesterReachRadius : public AddonList +{ +public: + AddonForesterReachRadius() + : AddonList(AddonId::FORESTER_REACH_RADIUS, AddonGroup::GamePlay, + _("Adjust forester's range"), + _("Adjust the forester's planting range."), + { + _("Default"), + _("+33%"), + _("+66%"), + _("+100%"), + _("+150%"), + _("+200%"), + }) + {} +}; diff --git a/libs/s25main/addons/AddonStonemasonReachRadius.h b/libs/s25main/addons/AddonStonemasonReachRadius.h new file mode 100644 index 0000000000..80fae10837 --- /dev/null +++ b/libs/s25main/addons/AddonStonemasonReachRadius.h @@ -0,0 +1,37 @@ +// 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" + +const std::array stonemasonRadiusValues = { + 8, // Default + 10, // +25% + 12, // +50% + 14, // +75% + 15, // +100% + 20, // +150% + 24 // +200% +}; + +class AddonStonemasonReachRadius : public AddonList +{ +public: + AddonStonemasonReachRadius() + : AddonList(AddonId::STONEMASON_REACH_RADIUS, AddonGroup::GamePlay, + _("Adjust stonemason's range"), + _("Adjust the stonemason's mining range."), + { + _("Default"), + _("+25%"), + _("+50%"), + _("+75%"), + _("+100%"), + _("+150%"), + _("+200%"), + }) + {} +}; diff --git a/libs/s25main/addons/AddonWoodcutterReachRadius.h b/libs/s25main/addons/AddonWoodcutterReachRadius.h new file mode 100644 index 0000000000..124fbe1449 --- /dev/null +++ b/libs/s25main/addons/AddonWoodcutterReachRadius.h @@ -0,0 +1,35 @@ +// 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" + +const std::array woodcutterRadiusValues = { + 6, // Default + 8, // +33% + 10, // +66% + 12, // +100% + 15, // +150% + 18 // +200% +}; + +class AddonWoodcutterReachRadius : public AddonList +{ +public: + AddonWoodcutterReachRadius() + : AddonList(AddonId::WOODCUTTER_REACH_RADIUS, AddonGroup::GamePlay, + _("Adjust woodcutter's range"), + _("Adjust the woodcutter's cutting range."), + { + _("Default"), + _("+33%"), + _("+66%"), + _("+100%"), + _("+150%"), + _("+200%") + }) + {} +}; diff --git a/libs/s25main/addons/Addons.h b/libs/s25main/addons/Addons.h index 127ca6892f..5b2c61afe2 100644 --- a/libs/s25main/addons/Addons.h +++ b/libs/s25main/addons/Addons.h @@ -66,3 +66,8 @@ #include "addons/AddonLeather.h" #include "addons/AddonNoArmorDefault.h" #include "addons/AddonWine.h" + +#include "addons/AddonForesterReachRadius.h" +#include "addons/AddonWoodcutterReachRadius.h" +#include "addons/AddonStonemasonReachRadius.h" + diff --git a/libs/s25main/addons/const_addons.h b/libs/s25main/addons/const_addons.h index 2630f9ad44..6ab27054e7 100644 --- a/libs/s25main/addons/const_addons.h +++ b/libs/s25main/addons/const_addons.h @@ -27,6 +27,7 @@ // 00F Jarno // 010 aztimh // 011 DevOpsOfChaos +// 012 MichalLabuda // Do not forget to add your Addon to GlobalGameSettings::registerAllAddons @ GlobalGameSettings.cpp! // Never use a number twice! @@ -78,7 +79,9 @@ ENUM_WITH_STRING(AddonId, LIMIT_CATAPULTS = 0x00000000, INEXHAUSTIBLE_MINES = 0x WINE = 0x01000000, LEATHER = 0x01000001, NO_ARMOR_DEFAULT = 0x01000002, ARMOR_CAPTURED_BLD = 0x01000003, - FORESTER_FARM_FIELD_AVOIDANCE = 0x01100000) + FORESTER_FARM_FIELD_AVOIDANCE = 0x01100000, + + FORESTER_REACH_RADIUS = 0x01200000, WOODCUTTER_REACH_RADIUS = 0x01200001, STONEMASON_REACH_RADIUS = 0x01200002) //-V:AddonId:801 enum class AddonGroup : unsigned diff --git a/libs/s25main/figures/nofFarmhand.cpp b/libs/s25main/figures/nofFarmhand.cpp index 07aed43dae..f8c433c85c 100644 --- a/libs/s25main/figures/nofFarmhand.cpp +++ b/libs/s25main/figures/nofFarmhand.cpp @@ -12,6 +12,11 @@ #include "world/GameWorld.h" #include "gameData/JobConsts.h" +#include "GlobalGameSettings.h" +#include "addons/AddonForesterReachRadius.h" +#include "addons/AddonWoodcutterReachRadius.h" +#include "addons/AddonStonemasonReachRadius.h" + nofFarmhand::nofFarmhand(const Job job, const MapPoint pos, const unsigned char player, nobUsual* workplace) : nofBuildingWorker(job, pos, player, workplace), dest(0, 0) {} @@ -37,9 +42,21 @@ unsigned nofFarmhand::GetWorkRadius(const Job job) case Job::Winegrower: return 2; case Job::CharBurner: return 3; case Job::Woodcutter: - case Job::Forester: return 6; + { + unsigned sel = world->GetGGS().getSelection(AddonId::WOODCUTTER_REACH_RADIUS); + return woodcutterRadiusValues[sel]; + } + case Job::Forester: + { + unsigned sel = world->GetGGS().getSelection(AddonId::FORESTER_REACH_RADIUS); + return foresterRadiusValues[sel]; + } case Job::Fisher: return 7; - case Job::Stonemason: return 8; + case Job::Stonemason: + { + unsigned sel = world->GetGGS().getSelection(AddonId::STONEMASON_REACH_RADIUS); + return stonemasonRadiusValues[sel]; + } default: throw std::logic_error("Invalid job"); } } From b25338db4666792442756fb527d9d1988c28e879 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20=C5=81abuda?= Date: Wed, 20 May 2026 10:20:24 +0200 Subject: [PATCH 2/7] Update libs/s25main/addons/AddonStonemasonReachRadius.h Co-authored-by: Alexander Grund --- libs/s25main/addons/AddonStonemasonReachRadius.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/s25main/addons/AddonStonemasonReachRadius.h b/libs/s25main/addons/AddonStonemasonReachRadius.h index 80fae10837..7680c90013 100644 --- a/libs/s25main/addons/AddonStonemasonReachRadius.h +++ b/libs/s25main/addons/AddonStonemasonReachRadius.h @@ -12,7 +12,7 @@ const std::array stonemasonRadiusValues = { 10, // +25% 12, // +50% 14, // +75% - 15, // +100% + 16, // +100% 20, // +150% 24 // +200% }; From a928d83600835dbb666a08438f92e84b8652c5a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20=C5=81abuda?= Date: Wed, 20 May 2026 10:20:37 +0200 Subject: [PATCH 3/7] Update libs/s25main/figures/nofFarmhand.cpp Co-authored-by: Alexander Grund --- libs/s25main/figures/nofFarmhand.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/s25main/figures/nofFarmhand.cpp b/libs/s25main/figures/nofFarmhand.cpp index f8c433c85c..b07debff70 100644 --- a/libs/s25main/figures/nofFarmhand.cpp +++ b/libs/s25main/figures/nofFarmhand.cpp @@ -43,7 +43,7 @@ unsigned nofFarmhand::GetWorkRadius(const Job job) case Job::CharBurner: return 3; case Job::Woodcutter: { - unsigned sel = world->GetGGS().getSelection(AddonId::WOODCUTTER_REACH_RADIUS); + const unsigned sel = world->GetGGS().getSelection(AddonId::WOODCUTTER_REACH_RADIUS); return woodcutterRadiusValues[sel]; } case Job::Forester: From a83d799e4754a608f5299d883492ab2deee9e702 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20=C5=81abuda?= Date: Wed, 20 May 2026 10:20:52 +0200 Subject: [PATCH 4/7] Update libs/s25main/figures/nofFarmhand.cpp Co-authored-by: Alexander Grund --- libs/s25main/figures/nofFarmhand.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/s25main/figures/nofFarmhand.cpp b/libs/s25main/figures/nofFarmhand.cpp index b07debff70..14841bb919 100644 --- a/libs/s25main/figures/nofFarmhand.cpp +++ b/libs/s25main/figures/nofFarmhand.cpp @@ -48,7 +48,7 @@ unsigned nofFarmhand::GetWorkRadius(const Job job) } case Job::Forester: { - unsigned sel = world->GetGGS().getSelection(AddonId::FORESTER_REACH_RADIUS); + const unsigned sel = world->GetGGS().getSelection(AddonId::FORESTER_REACH_RADIUS); return foresterRadiusValues[sel]; } case Job::Fisher: return 7; From 0cdc4586b913a97add835853030bf88c6ed6d7df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20=C5=81abuda?= Date: Wed, 20 May 2026 10:21:02 +0200 Subject: [PATCH 5/7] Update libs/s25main/figures/nofFarmhand.cpp Co-authored-by: Alexander Grund --- libs/s25main/figures/nofFarmhand.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/s25main/figures/nofFarmhand.cpp b/libs/s25main/figures/nofFarmhand.cpp index 14841bb919..652157af36 100644 --- a/libs/s25main/figures/nofFarmhand.cpp +++ b/libs/s25main/figures/nofFarmhand.cpp @@ -54,7 +54,7 @@ unsigned nofFarmhand::GetWorkRadius(const Job job) case Job::Fisher: return 7; case Job::Stonemason: { - unsigned sel = world->GetGGS().getSelection(AddonId::STONEMASON_REACH_RADIUS); + const unsigned sel = world->GetGGS().getSelection(AddonId::STONEMASON_REACH_RADIUS); return stonemasonRadiusValues[sel]; } default: throw std::logic_error("Invalid job"); From c6021ce994eb944949a8c84954fa8e5c25eaadfd Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Wed, 20 May 2026 13:52:14 +0200 Subject: [PATCH 6/7] Use improved wording MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Michał Łabuda --- libs/s25main/addons/AddonForesterReachRadius.h | 2 +- libs/s25main/addons/AddonStonemasonReachRadius.h | 2 +- libs/s25main/addons/AddonWoodcutterReachRadius.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libs/s25main/addons/AddonForesterReachRadius.h b/libs/s25main/addons/AddonForesterReachRadius.h index cbdf219486..463e05f320 100644 --- a/libs/s25main/addons/AddonForesterReachRadius.h +++ b/libs/s25main/addons/AddonForesterReachRadius.h @@ -22,7 +22,7 @@ class AddonForesterReachRadius : public AddonList AddonForesterReachRadius() : AddonList(AddonId::FORESTER_REACH_RADIUS, AddonGroup::GamePlay, _("Adjust forester's range"), - _("Adjust the forester's planting range."), + _("Increase the radius in which the forester plants trees."), { _("Default"), _("+33%"), diff --git a/libs/s25main/addons/AddonStonemasonReachRadius.h b/libs/s25main/addons/AddonStonemasonReachRadius.h index 7680c90013..4ee3ab2494 100644 --- a/libs/s25main/addons/AddonStonemasonReachRadius.h +++ b/libs/s25main/addons/AddonStonemasonReachRadius.h @@ -23,7 +23,7 @@ class AddonStonemasonReachRadius : public AddonList AddonStonemasonReachRadius() : AddonList(AddonId::STONEMASON_REACH_RADIUS, AddonGroup::GamePlay, _("Adjust stonemason's range"), - _("Adjust the stonemason's mining range."), + _("Increase the radius in which the stonemason searches for stone."), { _("Default"), _("+25%"), diff --git a/libs/s25main/addons/AddonWoodcutterReachRadius.h b/libs/s25main/addons/AddonWoodcutterReachRadius.h index 124fbe1449..cfc6021605 100644 --- a/libs/s25main/addons/AddonWoodcutterReachRadius.h +++ b/libs/s25main/addons/AddonWoodcutterReachRadius.h @@ -22,7 +22,7 @@ class AddonWoodcutterReachRadius : public AddonList AddonWoodcutterReachRadius() : AddonList(AddonId::WOODCUTTER_REACH_RADIUS, AddonGroup::GamePlay, _("Adjust woodcutter's range"), - _("Adjust the woodcutter's cutting range."), + _("Increase the radius in which the woodcutter searches for trees."), { _("Default"), _("+33%"), From fc9eb6bb2a7a5bad6a82793c86d64bf9e541f589 Mon Sep 17 00:00:00 2001 From: MichalLabuda Date: Wed, 20 May 2026 15:17:36 +0200 Subject: [PATCH 7/7] Apply code style fixes (clang-format) --- .../s25main/addons/AddonForesterReachRadius.h | 24 +++++++------------ .../addons/AddonStonemasonReachRadius.h | 17 +++++++------ .../addons/AddonWoodcutterReachRadius.h | 24 +++++++------------ libs/s25main/addons/Addons.h | 3 +-- libs/s25main/addons/const_addons.h | 5 ++-- libs/s25main/figures/nofFarmhand.cpp | 2 +- 6 files changed, 29 insertions(+), 46 deletions(-) diff --git a/libs/s25main/addons/AddonForesterReachRadius.h b/libs/s25main/addons/AddonForesterReachRadius.h index 463e05f320..0783223ac6 100644 --- a/libs/s25main/addons/AddonForesterReachRadius.h +++ b/libs/s25main/addons/AddonForesterReachRadius.h @@ -8,28 +8,20 @@ #include "mygettext/mygettext.h" const std::array foresterRadiusValues = { - 6, // Default - 8, // +33% - 10, // +66% - 12, // +100% - 15, // +150% - 18 // +200% + 6, // Default + 8, // +33% + 10, // +66% + 12, // +100% + 15, // +150% + 18 // +200% }; class AddonForesterReachRadius : public AddonList { public: AddonForesterReachRadius() - : AddonList(AddonId::FORESTER_REACH_RADIUS, AddonGroup::GamePlay, - _("Adjust forester's range"), + : AddonList(AddonId::FORESTER_REACH_RADIUS, AddonGroup::GamePlay, _("Adjust forester's range"), _("Increase the radius in which the forester plants trees."), - { - _("Default"), - _("+33%"), - _("+66%"), - _("+100%"), - _("+150%"), - _("+200%"), - }) + {_("Default"), _("+33%"), _("+66%"), _("+100%"), _("+150%"), _("+200%")}) {} }; diff --git a/libs/s25main/addons/AddonStonemasonReachRadius.h b/libs/s25main/addons/AddonStonemasonReachRadius.h index 4ee3ab2494..da613349ba 100644 --- a/libs/s25main/addons/AddonStonemasonReachRadius.h +++ b/libs/s25main/addons/AddonStonemasonReachRadius.h @@ -8,21 +8,20 @@ #include "mygettext/mygettext.h" const std::array stonemasonRadiusValues = { - 8, // Default - 10, // +25% - 12, // +50% - 14, // +75% - 16, // +100% - 20, // +150% - 24 // +200% + 8, // Default + 10, // +25% + 12, // +50% + 14, // +75% + 16, // +100% + 20, // +150% + 24 // +200% }; class AddonStonemasonReachRadius : public AddonList { public: AddonStonemasonReachRadius() - : AddonList(AddonId::STONEMASON_REACH_RADIUS, AddonGroup::GamePlay, - _("Adjust stonemason's range"), + : AddonList(AddonId::STONEMASON_REACH_RADIUS, AddonGroup::GamePlay, _("Adjust stonemason's range"), _("Increase the radius in which the stonemason searches for stone."), { _("Default"), diff --git a/libs/s25main/addons/AddonWoodcutterReachRadius.h b/libs/s25main/addons/AddonWoodcutterReachRadius.h index cfc6021605..0f0bdefedc 100644 --- a/libs/s25main/addons/AddonWoodcutterReachRadius.h +++ b/libs/s25main/addons/AddonWoodcutterReachRadius.h @@ -8,28 +8,20 @@ #include "mygettext/mygettext.h" const std::array woodcutterRadiusValues = { - 6, // Default - 8, // +33% - 10, // +66% - 12, // +100% - 15, // +150% - 18 // +200% + 6, // Default + 8, // +33% + 10, // +66% + 12, // +100% + 15, // +150% + 18 // +200% }; class AddonWoodcutterReachRadius : public AddonList { public: AddonWoodcutterReachRadius() - : AddonList(AddonId::WOODCUTTER_REACH_RADIUS, AddonGroup::GamePlay, - _("Adjust woodcutter's range"), + : AddonList(AddonId::WOODCUTTER_REACH_RADIUS, AddonGroup::GamePlay, _("Adjust woodcutter's range"), _("Increase the radius in which the woodcutter searches for trees."), - { - _("Default"), - _("+33%"), - _("+66%"), - _("+100%"), - _("+150%"), - _("+200%") - }) + {_("Default"), _("+33%"), _("+66%"), _("+100%"), _("+150%"), _("+200%")}) {} }; diff --git a/libs/s25main/addons/Addons.h b/libs/s25main/addons/Addons.h index 5b2c61afe2..96b3203ff7 100644 --- a/libs/s25main/addons/Addons.h +++ b/libs/s25main/addons/Addons.h @@ -68,6 +68,5 @@ #include "addons/AddonWine.h" #include "addons/AddonForesterReachRadius.h" -#include "addons/AddonWoodcutterReachRadius.h" #include "addons/AddonStonemasonReachRadius.h" - +#include "addons/AddonWoodcutterReachRadius.h" diff --git a/libs/s25main/addons/const_addons.h b/libs/s25main/addons/const_addons.h index 6ab27054e7..f7ddf54f08 100644 --- a/libs/s25main/addons/const_addons.h +++ b/libs/s25main/addons/const_addons.h @@ -80,8 +80,9 @@ ENUM_WITH_STRING(AddonId, LIMIT_CATAPULTS = 0x00000000, INEXHAUSTIBLE_MINES = 0x ARMOR_CAPTURED_BLD = 0x01000003, FORESTER_FARM_FIELD_AVOIDANCE = 0x01100000, - - FORESTER_REACH_RADIUS = 0x01200000, WOODCUTTER_REACH_RADIUS = 0x01200001, STONEMASON_REACH_RADIUS = 0x01200002) + + FORESTER_REACH_RADIUS = 0x01200000, WOODCUTTER_REACH_RADIUS = 0x01200001, + STONEMASON_REACH_RADIUS = 0x01200002) //-V:AddonId:801 enum class AddonGroup : unsigned diff --git a/libs/s25main/figures/nofFarmhand.cpp b/libs/s25main/figures/nofFarmhand.cpp index 652157af36..39cad7c87c 100644 --- a/libs/s25main/figures/nofFarmhand.cpp +++ b/libs/s25main/figures/nofFarmhand.cpp @@ -14,8 +14,8 @@ #include "GlobalGameSettings.h" #include "addons/AddonForesterReachRadius.h" -#include "addons/AddonWoodcutterReachRadius.h" #include "addons/AddonStonemasonReachRadius.h" +#include "addons/AddonWoodcutterReachRadius.h" nofFarmhand::nofFarmhand(const Job job, const MapPoint pos, const unsigned char player, nobUsual* workplace) : nofBuildingWorker(job, pos, player, workplace), dest(0, 0)