Dynamic move type clean up (#5132)

* Minor clean up of the new function DynamicMoveType

* wrongly removed func

* Overworld Weather Bug

* wrong comparison
This commit is contained in:
Alex 2024-08-11 14:18:56 +02:00 committed by GitHub
parent aeb9da337e
commit 97fa0be36e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 67 additions and 44 deletions

View file

@ -880,7 +880,6 @@ const u8 *GetMoveName(u16 moveId);
const u8 *GetMoveAnimationScript(u16 moveId);
void UpdateDaysPassedSinceFormChange(u16 days);
void TrySetDayLimitToFormChange(struct Pokemon *mon);
u8 CheckDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler);
u8 CalculateHiddenPowerType(struct Pokemon *mon);
u32 CheckDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler);
#endif // GUARD_POKEMON_H

View file

@ -6929,7 +6929,26 @@ void UpdateDaysPassedSinceFormChange(u16 days)
}
}
u8 CheckDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler)
static inline u32 CalculateHiddenPowerType(struct Pokemon *mon)
{
u32 typehp;
u32 type;
u8 typeBits = ((GetMonData(mon, MON_DATA_HP_IV) & 1) << 0)
| ((GetMonData(mon, MON_DATA_ATK_IV) & 1) << 1)
| ((GetMonData(mon, MON_DATA_DEF_IV) & 1) << 2)
| ((GetMonData(mon, MON_DATA_SPEED_IV) & 1) << 3)
| ((GetMonData(mon, MON_DATA_SPATK_IV) & 1) << 4)
| ((GetMonData(mon, MON_DATA_SPDEF_IV) & 1) << 5);
type = (15 * typeBits) / 63 + 2;
if (type >= TYPE_MYSTERY)
type++;
type |= 0xC0;
typehp = type & 0x3F;
return typehp;
}
u32 CheckDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler)
{
u32 type = gMovesInfo[move].type;
u32 species = GetMonData(mon, MON_DATA_SPECIES);
@ -6940,9 +6959,9 @@ u8 CheckDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler)
u32 type2 = gSpeciesInfo[species].types[1];
if (move == MOVE_IVY_CUDGEL
&& (species == SPECIES_OGERPON_WELLSPRING_MASK || species == SPECIES_OGERPON_WELLSPRING_MASK_TERA
|| species == SPECIES_OGERPON_HEARTHFLAME_MASK || species == SPECIES_OGERPON_HEARTHFLAME_MASK_TERA
|| species == SPECIES_OGERPON_CORNERSTONE_MASK || species == SPECIES_OGERPON_CORNERSTONE_MASK_TERA))
&& (species == SPECIES_OGERPON_WELLSPRING_MASK || species == SPECIES_OGERPON_WELLSPRING_MASK_TERA
|| species == SPECIES_OGERPON_HEARTHFLAME_MASK || species == SPECIES_OGERPON_HEARTHFLAME_MASK_TERA
|| species == SPECIES_OGERPON_CORNERSTONE_MASK || species == SPECIES_OGERPON_CORNERSTONE_MASK_TERA))
{
type = type2;
}
@ -6980,13 +6999,13 @@ u8 CheckDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler)
else
return TYPE_NORMAL;
}
else if (move == MOVE_RAGING_BULL
&& (species == SPECIES_TAUROS_PALDEAN_COMBAT_BREED
|| species == SPECIES_TAUROS_PALDEAN_BLAZE_BREED
|| species == SPECIES_TAUROS_PALDEAN_AQUA_BREED))
else if (move == MOVE_RAGING_BULL
&& (species == SPECIES_TAUROS_PALDEAN_COMBAT_BREED
|| species == SPECIES_TAUROS_PALDEAN_BLAZE_BREED
|| species == SPECIES_TAUROS_PALDEAN_AQUA_BREED))
{
return type2;
}
}
else if (move == MOVE_REVELATION_DANCE)
{
if (gBattleMons[battler].species != species && type1 != TYPE_MYSTERY)
@ -6994,7 +7013,7 @@ u8 CheckDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler)
else if (gBattleMons[battler].species != species && type2 != TYPE_MYSTERY)
type = type2;
else if (GetBattlerTeraType(battler) != TYPE_STELLAR && (GetActiveGimmick(battler) == GIMMICK_TERA || IsGimmickSelected(battler, GIMMICK_TERA)))
type = GetMonData(mon, MON_DATA_TERA_TYPE);
type = GetMonData(mon, MON_DATA_TERA_TYPE);
else if (gBattleMons[battler].types[0] != TYPE_MYSTERY)
type = gBattleMons[battler].types[0];
else if (gBattleMons[battler].types[1] != TYPE_MYSTERY)
@ -7002,10 +7021,10 @@ u8 CheckDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler)
else if (gBattleMons[battler].types[2] != TYPE_MYSTERY)
type = gBattleMons[battler].types[2];
}
else if (gMovesInfo[move].effect == EFFECT_TERRAIN_PULSE
&& ((IsMonGrounded(heldItemEffect, ability, type1, type2) && gBattleMons[battler].species != species)
else if (gMovesInfo[move].effect == EFFECT_TERRAIN_PULSE
&& ((IsMonGrounded(heldItemEffect, ability, type1, type2) && gBattleMons[battler].species != species)
|| (IsBattlerTerrainAffected(battler, STATUS_FIELD_TERRAIN_ANY) && gBattleMons[battler].species == species)))
{
{
if (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN)
return TYPE_ELECTRIC;
else if (gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN)
@ -7015,21 +7034,45 @@ u8 CheckDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler)
else if (gFieldStatuses & STATUS_FIELD_PSYCHIC_TERRAIN)
return TYPE_PSYCHIC;
else //failsafe
type = TYPE_NORMAL;
type = TYPE_NORMAL;
}
if (gMovesInfo[move].effect == EFFECT_WEATHER_BALL && WEATHER_HAS_EFFECT)
if (gMovesInfo[move].effect == EFFECT_WEATHER_BALL)
{
if (gBattleWeather & B_WEATHER_RAIN && heldItemEffect != HOLD_EFFECT_UTILITY_UMBRELLA)
return TYPE_WATER;
else if (gBattleWeather & B_WEATHER_SANDSTORM)
return TYPE_ROCK;
else if (gBattleWeather & B_WEATHER_SUN && heldItemEffect != HOLD_EFFECT_UTILITY_UMBRELLA)
return TYPE_FIRE;
else if (gBattleWeather & (B_WEATHER_SNOW | B_WEATHER_HAIL))
return TYPE_ICE;
if (gMain.inBattle && WEATHER_HAS_EFFECT)
{
if (gBattleWeather & B_WEATHER_RAIN && heldItemEffect != HOLD_EFFECT_UTILITY_UMBRELLA)
return TYPE_WATER;
else if (gBattleWeather & B_WEATHER_SANDSTORM)
return TYPE_ROCK;
else if (gBattleWeather & B_WEATHER_SUN && heldItemEffect != HOLD_EFFECT_UTILITY_UMBRELLA)
return TYPE_FIRE;
else if (gBattleWeather & (B_WEATHER_SNOW | B_WEATHER_HAIL))
return TYPE_ICE;
else
return TYPE_NORMAL;
}
else
{
switch (gWeatherPtr->currWeather)
{
case WEATHER_SUNNY:
if (heldItem != ITEM_UTILITY_UMBRELLA)
return TYPE_FIRE;
break;
case WEATHER_RAIN:
if (heldItem != ITEM_UTILITY_UMBRELLA)
return TYPE_WATER;
break;
case WEATHER_SNOW:
return TYPE_ICE;
break;
case WEATHER_SANDSTORM:
return TYPE_ROCK;
break;
}
return TYPE_NORMAL;
}
}
if (ability == ABILITY_NORMALIZE && gMovesInfo[move].type != TYPE_NORMAL && GetActiveGimmick(battler) != GIMMICK_Z_MOVE)
@ -7055,22 +7098,3 @@ u8 CheckDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler)
return type;
}
u8 CalculateHiddenPowerType(struct Pokemon *mon)
{
u32 typehp;
u32 type;
u8 typeBits = ((GetMonData(mon, MON_DATA_HP_IV) & 1) << 0)
| ((GetMonData(mon, MON_DATA_ATK_IV) & 1) << 1)
| ((GetMonData(mon, MON_DATA_DEF_IV) & 1) << 2)
| ((GetMonData(mon, MON_DATA_SPEED_IV) & 1) << 3)
| ((GetMonData(mon, MON_DATA_SPATK_IV) & 1) << 4)
| ((GetMonData(mon, MON_DATA_SPDEF_IV) & 1) << 5);
type = (15 * typeBits) / 63 + 2;
if (type >= TYPE_MYSTERY)
type++;
type |= 0xC0;
typehp = type & 0x3F;
return typehp;
}