Skip to content

Commit

Permalink
Fix default tera type changing upon evolution/form change (rh-hideout…
Browse files Browse the repository at this point in the history
  • Loading branch information
Bassoonian authored Sep 22, 2024
1 parent ed005fc commit 918d45a
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 15 deletions.
19 changes: 7 additions & 12 deletions src/evolution_scene.c
Original file line number Diff line number Diff line change
Expand Up @@ -545,19 +545,13 @@ static void CB2_TradeEvolutionSceneUpdate(void)
static void CreateShedinja(u16 preEvoSpecies, struct Pokemon *mon)
{
u32 data = 0;
#if P_SHEDINJA_BALL >= GEN_4
u16 ball = ITEM_POKE_BALL;
#endif
u16 ball = ITEM_POKE_BALL;
const struct Evolution *evolutions = GetSpeciesEvolutions(preEvoSpecies);

if (evolutions == NULL)
return;

if (evolutions[0].method == EVO_LEVEL_NINJASK && gPlayerPartyCount < PARTY_SIZE
#if P_SHEDINJA_BALL >= GEN_4
&& (CheckBagHasItem(ball, 1))
#endif
)
if (evolutions[0].method == EVO_LEVEL_NINJASK && gPlayerPartyCount < PARTY_SIZE && (P_SHEDINJA_BALL < GEN_4 || CheckBagHasItem(ball, 1)))
{
s32 i;
struct Pokemon *shedinja = &gPlayerParty[gPlayerPartyCount];
Expand All @@ -567,10 +561,11 @@ static void CreateShedinja(u16 preEvoSpecies, struct Pokemon *mon)
SetMonData(&gPlayerParty[gPlayerPartyCount], MON_DATA_NICKNAME, GetSpeciesName(evolutions[1].targetSpecies));
SetMonData(&gPlayerParty[gPlayerPartyCount], MON_DATA_HELD_ITEM, &data);
SetMonData(&gPlayerParty[gPlayerPartyCount], MON_DATA_MARKINGS, &data);
#if P_SHEDINJA_BALL >= GEN_4
SetMonData(&gPlayerParty[gPlayerPartyCount], MON_DATA_POKEBALL, &ball);
RemoveBagItem(ball, 1);
#endif
if (P_SHEDINJA_BALL >= GEN_4)
{
SetMonData(&gPlayerParty[gPlayerPartyCount], MON_DATA_POKEBALL, &ball);
RemoveBagItem(ball, 1);
}

for (i = MON_DATA_COOL_RIBBON; i < MON_DATA_COOL_RIBBON + CONTEST_CATEGORIES_COUNT; i++)
SetMonData(&gPlayerParty[gPlayerPartyCount], i, &data);
Expand Down
2 changes: 2 additions & 0 deletions src/pokemon.c
Original file line number Diff line number Diff line change
Expand Up @@ -2791,6 +2791,8 @@ u32 GetBoxMonData3(struct BoxPokemon *boxMon, s32 field, u8 *data)
{
const u8 *types = gSpeciesInfo[substruct0->species].types;
retVal = (boxMon->personality & 0x1) == 0 ? types[0] : types[1];
// To avoid this value changing upon form change/evolution, we directly set it for future cases
SetBoxMonData(boxMon, MON_DATA_TERA_TYPE, &retVal);
}
else
{
Expand Down
11 changes: 8 additions & 3 deletions test/pokemon.c
Original file line number Diff line number Diff line change
Expand Up @@ -325,20 +325,25 @@ TEST("givemon [vars]")
EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_TERA_TYPE), TYPE_FIRE);
}

TEST("checkteratype/setteratype work")
TEST("checkteratype works")
{
CreateMon(&gPlayerParty[0], SPECIES_WOBBUFFET, 100, 0, FALSE, 0, OT_ID_PRESET, 0);

RUN_OVERWORLD_SCRIPT(
checkteratype 0;
);
EXPECT(VarGet(VAR_RESULT) == TYPE_PSYCHIC);
EXPECT_EQ(VarGet(VAR_RESULT), TYPE_PSYCHIC);
}

TEST("setteratype works")
{
CreateMon(&gPlayerParty[0], SPECIES_WOBBUFFET, 100, 0, FALSE, 0, OT_ID_PRESET, 0);

RUN_OVERWORLD_SCRIPT(
setteratype TYPE_FIRE, 0;
checkteratype 0;
);
EXPECT(VarGet(VAR_RESULT) == TYPE_FIRE);
EXPECT_EQ(VarGet(VAR_RESULT), TYPE_FIRE);
}

TEST("createmon [simple]")
Expand Down

0 comments on commit 918d45a

Please sign in to comment.