From 5fd36a8e390c7b3d72ee470846bc0a91754425bd Mon Sep 17 00:00:00 2001 From: Martin Griffin Date: Mon, 23 Oct 2023 13:37:40 +0100 Subject: [PATCH] Fix ModifyPersonalityForNature (#3452) --- src/battle_main.c | 2 +- test/battle/trainer_control.c | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/battle_main.c b/src/battle_main.c index 037d9a857..514b69fd6 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -1896,7 +1896,7 @@ static u32 GeneratePartyHash(const struct Trainer *trainer, u32 i) void ModifyPersonalityForNature(u32 *personality, u32 newNature) { u32 nature = GetNatureFromPersonality(*personality); - s32 diff = abs(nature - newNature); + s32 diff = abs((s32)nature - (s32)newNature); s32 sign = (nature > newNature) ? 1 : -1; if (diff > NUM_NATURES / 2) { diff --git a/test/battle/trainer_control.c b/test/battle/trainer_control.c index a0e94dbbe..99bea0e8c 100644 --- a/test/battle/trainer_control.c +++ b/test/battle/trainer_control.c @@ -4,6 +4,7 @@ #include "battle_main.h" #include "data.h" #include "malloc.h" +#include "random.h" #include "string_util.h" #include "constants/item.h" #include "constants/abilities.h" @@ -119,3 +120,17 @@ TEST("CreateNPCTrainerPartyForTrainer generates different personalities for diff EXPECT(testParty[0].box.personality != testParty[1].box.personality); Free(testParty); } + +TEST("ModifyPersonalityForNature can set any nature") +{ + u32 personality, nature, j, k; + for (j = 0; j < 64; j++) + { + for (k = 0; k < NUM_NATURES; k++) + { + PARAMETRIZE { personality = Random32(); nature = k; } + } + } + ModifyPersonalityForNature(&personality, nature); + EXPECT_EQ(GetNatureFromPersonality(personality), nature); +}