Preserve custom battle starting morale

This commit is contained in:
2026-07-03 16:19:47 -07:00
parent 29f1d53d66
commit d8330877b9
2 changed files with 8 additions and 1 deletions
@@ -9,6 +9,7 @@ namespace shardok {
using Coords = net::eagle0::shardok::storage::fb::Coords;
constexpr double kDefaultMorale = 50.0;
constexpr float kExplicitMoraleSentinel = -1.0f;
auto ConvertBattalion(const net::eagle0::common::CommonBattalion &battalion) -> Battalion {
Battalion shardokBattalion{};
@@ -19,6 +20,7 @@ auto ConvertBattalion(const net::eagle0::common::CommonBattalion &battalion) ->
static_cast<net::eagle0::shardok::storage::fb::BattalionTypeId>(battalion.type()));
shardokBattalion.mutate_morale(
static_cast<float>(battalion.has_morale() ? battalion.morale() : kDefaultMorale));
if (battalion.has_morale()) { shardokBattalion.mutate_base_morale(kExplicitMoraleSentinel); }
shardokBattalion.mutate_armament(static_cast<float>(battalion.armament()));
shardokBattalion.mutate_training(static_cast<float>(battalion.training()));
@@ -17,6 +17,8 @@
namespace shardok::fb {
constexpr float kExplicitMoraleSentinel = -1.0f;
using flatbuffers::FlatBufferBuilder;
using flatbuffers::Offset;
using net::eagle0::shardok::storage::fb::AlliedPlayer;
@@ -200,8 +202,11 @@ auto SetupInitialGameState(
RequiredMonthlyFood(modifiedUnit, settings) *
foodPercentByPid[modifiedUnit.player_id()]);
auto baseMorale = BaseMorale(modifiedUnit);
auto startingMorale = modifiedUnit.battalion().base_morale() == kExplicitMoraleSentinel
? modifiedUnit.battalion().morale()
: baseMorale;
modifiedUnit.mutable_battalion().mutate_base_morale(baseMorale);
modifiedUnit.mutable_battalion().mutate_morale(baseMorale);
modifiedUnit.mutable_battalion().mutate_morale(startingMorale);
if (modifiedUnit.status() !=
net::eagle0::shardok::storage::fb::UnitStatus_PENDING_REINFORCEMENT) {