more clean-up

This commit is contained in:
DizzyEggg
2025-11-05 11:10:32 +01:00
parent 274716a278
commit 8ee9b104ba
16 changed files with 188 additions and 184 deletions

View File

@@ -51,17 +51,17 @@ bool8 FP48_16_SLessThan(const s48_16 *a, const s48_16 *b);
void FP48_16_Add(s48_16 *dst, s48_16 *a, s48_16 *b);
void FP48_16_Subtract(s48_16 *dst, s48_16 *a, s48_16 *b);
#define F248LessThanInt(x, y) (x < 0x100 * y)
#define F248LessThanFloat(x, y) (x < (int)(y * 0x100))
#define FloatLessThanF248(x, y) ((int)(x * 0x100) < y)
#define F248LessThan(x, y) (x < y)
#define F248GreaterThan(x, y) (x > y)
#define F248Equal(x, y) (x == y)
#define F248EqualsInt(x, y) (x == 0x100 * y)
#define F248_AddInt(x, y) ((s24_8){x + 0x100 * y})
#define F248_SubInt(x, y) ((s24_8){x - 0x100 * y})
#define F248_Add(x, y)(x + y)
#define F248_Sub(x, y)(x - y)
#define F248_MulInt(x, y)(x * y)
#define F248LessThanInt(x, y) ((x) < 0x100 * (y))
#define F248LessThanFloat(x, y) ((x) < (int)((y) * 0x100))
#define FloatLessThanF248(x, y) ((int)((x) * 0x100) < (y))
#define F248LessThan(x, y) ((x) < (y))
#define F248GreaterThan(x, y) ((x) > (y))
#define F248Equal(x, y) ((x) == (y))
#define F248EqualsInt(x, y) ((x) == 0x100 * (y))
#define F248_AddInt(x, y) ((s24_8)((x) + 0x100 * (y))
#define F248_SubInt(x, y) ((s24_8)((x) - 0x100 * (y))
#define F248_Add(x, y)((x) + (y))
#define F248_Sub(x, y)((x) - (y))
#define F248_MulInt(x, y)((x) * (y))
#endif // GUARD_MATH_H

View File

@@ -36,8 +36,8 @@ u8 GetFlashFireStatus(Entity *pokemon);
void ActivateFlashFire(Entity * pokemon, Entity *target);
void ApplyOffensiveStatMultiplier(Entity *user, Entity *target, struct StatIndex stat, s24_8 multiplier, bool8 displayMessage);
void ApplyDefensiveStatMultiplier(Entity *user, Entity *target, struct StatIndex stat, s24_8 multiplier, bool8 displayMessage);
void RaiseAccuracyStageTarget(Entity * pokemon, Entity * target, struct StatIndex stat);
void LowerAccuracyStageTarget(Entity * pokemon, Entity * target, struct StatIndex stat, bool8 displayMessage);
void BoostHitChanceStat(Entity *user, Entity *target, struct StatIndex stat);
void LowerHitChanceStat(Entity *user, Entity *target, struct StatIndex stat, bool8 displayMessage);
void CringeStatusTarget(Entity * pokemon,Entity * target, bool8 displayMessage);
void ParalyzeStatusTarget(Entity * pokemon, Entity * target, bool8 displayMessage);
void RaiseMovementSpeedTarget(Entity * pokemon, Entity * target, s32 turns, bool8 diplayMessage);

View File

@@ -56,8 +56,7 @@ void WriteBellyBits(DataSerializer *r0, FixedPoint *src);
// Sometimes it's used directly as opposed to calling IntToFixedPoint
#define IntToFixedPointMacro(x) ((FixedPoint){x, 0})
#define IntToF248(x) (((x) << 8))
#define FloatToF248(x) ((int)(x * 0x100))
#define F248ToInt(x) ((s24_8)(x / 256))
#define IntToF248(x) ((int)((x) * 0x100))
#define F248ToInt(x) ((s24_8)((x) / 256))
#endif

View File

@@ -1515,7 +1515,7 @@ static void sub_8042A84(s16 param_1, Entity *entity, u32 param_3)
sub_804151C(entity,param_1_s16,0);
sub_803E708(param_3,0x42);
do {
if (entity->unk1C > FloatToF248(199.999)) break;
if (entity->unk1C > IntToF248(199.999)) break;
DungeonRunFrameActions(0x42);
entity->unk1C += + r6;
r6 += IntToF248(1);

View File

@@ -173,16 +173,16 @@ UNUSED static const s16 sUnusedConfig1 = 95;
const s16 gGinsengPlus3BoostChance = 12;
// Move modifiers
const s24_8 gSolarBeamModifier = FloatToF248(2.0);
const s24_8 gSkyAttackModifier = FloatToF248(2.0);
const s24_8 gRazorWindModifier = FloatToF248(2.0);
const s24_8 gFocusPunchModifier = FloatToF248(2.0);
const s24_8 gSkullBashModifier = FloatToF248(2.0);
const s24_8 gFlyModifier = FloatToF248(2.0);
const s24_8 gBounceModifier = FloatToF248(2.0);
const s24_8 gDiveModifier = FloatToF248(2.0);
const s24_8 gDigModifier = FloatToF248(2.0);
const s24_8 gFacadeModifier = FloatToF248(2.0);
const s24_8 gSolarBeamModifier = IntToF248(2.0);
const s24_8 gSkyAttackModifier = IntToF248(2.0);
const s24_8 gRazorWindModifier = IntToF248(2.0);
const s24_8 gFocusPunchModifier = IntToF248(2.0);
const s24_8 gSkullBashModifier = IntToF248(2.0);
const s24_8 gFlyModifier = IntToF248(2.0);
const s24_8 gBounceModifier = IntToF248(2.0);
const s24_8 gDiveModifier = IntToF248(2.0);
const s24_8 gDigModifier = IntToF248(2.0);
const s24_8 gFacadeModifier = IntToF248(2.0);
// Fixed damage/heal values
const s16 gBurnDmgValue = 5;
@@ -275,42 +275,42 @@ UNUSED static const s16 sUnusedConfig3 = 0;
// Stat stage multipliers
const s24_8 gAtkStatStageMultipliers[21] =
{
FloatToF248(0.2500), FloatToF248(0.2696), FloatToF248(0.2892), FloatToF248(0.3087), FloatToF248(0.3282), FloatToF248(0.3478),
FloatToF248(0.3985), FloatToF248(0.4493), FloatToF248(0.5000), FloatToF248(0.6993), FloatToF248(1.0000), FloatToF248(1.2969),
FloatToF248(1.5000), FloatToF248(1.5978), FloatToF248(1.6485), FloatToF248(1.6993), FloatToF248(1.7500), FloatToF248(1.7969),
FloatToF248(1.8478), FloatToF248(1.8985), FloatToF248(2.0000)
IntToF248(0.2500), IntToF248(0.2696), IntToF248(0.2892), IntToF248(0.3087), IntToF248(0.3282), IntToF248(0.3478),
IntToF248(0.3985), IntToF248(0.4493), IntToF248(0.5000), IntToF248(0.6993), IntToF248(1.0000), IntToF248(1.2969),
IntToF248(1.5000), IntToF248(1.5978), IntToF248(1.6485), IntToF248(1.6993), IntToF248(1.7500), IntToF248(1.7969),
IntToF248(1.8478), IntToF248(1.8985), IntToF248(2.0000)
};
const s24_8 gDefStatStageMultipliers[21] =
{
FloatToF248(0.2500), FloatToF248(0.2696), FloatToF248(0.2892), FloatToF248(0.3087), FloatToF248(0.3282), FloatToF248(0.3478),
FloatToF248(0.3985), FloatToF248(0.5469), FloatToF248(0.6993), FloatToF248(0.8672), FloatToF248(1.0000), FloatToF248(1.2969),
FloatToF248(1.5000), FloatToF248(1.5978), FloatToF248(1.6485), FloatToF248(1.6993), FloatToF248(1.7500), FloatToF248(1.7969),
FloatToF248(1.8478), FloatToF248(1.8985), FloatToF248(2.0000)
IntToF248(0.2500), IntToF248(0.2696), IntToF248(0.2892), IntToF248(0.3087), IntToF248(0.3282), IntToF248(0.3478),
IntToF248(0.3985), IntToF248(0.5469), IntToF248(0.6993), IntToF248(0.8672), IntToF248(1.0000), IntToF248(1.2969),
IntToF248(1.5000), IntToF248(1.5978), IntToF248(1.6485), IntToF248(1.6993), IntToF248(1.7500), IntToF248(1.7969),
IntToF248(1.8478), IntToF248(1.8985), IntToF248(2.0000)
};
const s24_8 gAccEvsStatStageMultipliers[2][21] =
{
// Accuracy
{
FloatToF248(0.3282), FloatToF248(0.3478), FloatToF248(0.3672), FloatToF248(0.3985), FloatToF248(0.4297), FloatToF248(0.4493),
FloatToF248(0.5469), FloatToF248(0.5977), FloatToF248(0.6993), FloatToF248(0.7969), FloatToF248(1.0000), FloatToF248(1.2500),
FloatToF248(1.5000), FloatToF248(1.5978), FloatToF248(1.6485), FloatToF248(1.6993), FloatToF248(1.7500), FloatToF248(1.7969),
FloatToF248(1.8478), FloatToF248(1.8985), FloatToF248(2.0000)
IntToF248(0.3282), IntToF248(0.3478), IntToF248(0.3672), IntToF248(0.3985), IntToF248(0.4297), IntToF248(0.4493),
IntToF248(0.5469), IntToF248(0.5977), IntToF248(0.6993), IntToF248(0.7969), IntToF248(1.0000), IntToF248(1.2500),
IntToF248(1.5000), IntToF248(1.5978), IntToF248(1.6485), IntToF248(1.6993), IntToF248(1.7500), IntToF248(1.7969),
IntToF248(1.8478), IntToF248(1.8985), IntToF248(2.0000)
},
// Evasion
{
FloatToF248(2.0000), FloatToF248(1.8985), FloatToF248(1.8478), FloatToF248(1.7969), FloatToF248(1.7500), FloatToF248(1.6993),
FloatToF248(1.6485), FloatToF248(1.5978), FloatToF248(1.5000), FloatToF248(1.3515), FloatToF248(1.0000), FloatToF248(0.7969),
FloatToF248(0.6993), FloatToF248(0.5977), FloatToF248(0.5000), FloatToF248(0.3985), FloatToF248(0.3477), FloatToF248(0.2969),
FloatToF248(0.2500), FloatToF248(0.1993), FloatToF248(0.1485)
IntToF248(2.0000), IntToF248(1.8985), IntToF248(1.8478), IntToF248(1.7969), IntToF248(1.7500), IntToF248(1.6993),
IntToF248(1.6485), IntToF248(1.5978), IntToF248(1.5000), IntToF248(1.3515), IntToF248(1.0000), IntToF248(0.7969),
IntToF248(0.6993), IntToF248(0.5977), IntToF248(0.5000), IntToF248(0.3985), IntToF248(0.3477), IntToF248(0.2969),
IntToF248(0.2500), IntToF248(0.1993), IntToF248(0.1485)
},
};
const s32 gDetectBandAccuracyDebuffValue = 30; // For attacking mon, which effectively raises target's evasion
const s32 gIqQuickDodgerAccuracyDebuffValue = 30; // For attacking mon, which effectively raises target's evasion
// Move modifiers again
const s24_8 gReversalModifiers[4] = {FloatToF248(8), FloatToF248(4), FloatToF248(2), FloatToF248(1)}; // Based on hp/max HP ratio
const s24_8 gWaterSpoutModifiers[4] = {FloatToF248(0.1), FloatToF248(0.2), FloatToF248(0.5), FloatToF248(1)}; // Based on hp/max HP ratio
const s24_8 gEruptionModifiers[4] = {FloatToF248(0.1), FloatToF248(0.2), FloatToF248(0.5), FloatToF248(1)}; // Based on hp/max HP ratio
const s24_8 gReversalModifiers[4] = {IntToF248(8), IntToF248(4), IntToF248(2), IntToF248(1)}; // Based on hp/max HP ratio
const s24_8 gWaterSpoutModifiers[4] = {IntToF248(0.1), IntToF248(0.2), IntToF248(0.5), IntToF248(1)}; // Based on hp/max HP ratio
const s24_8 gEruptionModifiers[4] = {IntToF248(0.1), IntToF248(0.2), IntToF248(0.5), IntToF248(1)}; // Based on hp/max HP ratio
const s32 gStockpileHealHpValues[4] = {0, 20, 40, 80};
// Castform related
@@ -327,14 +327,14 @@ const u8 gWeatherBallTypes[WEATHER_COUNT] =
};
const s24_8 gWeatherBallModifiers[WEATHER_COUNT] =
{
[WEATHER_CLEAR] = FloatToF248(1.0),
[WEATHER_SUNNY] = FloatToF248(2.0),
[WEATHER_SANDSTORM] = FloatToF248(2.0),
[WEATHER_CLOUDY] = FloatToF248(1.0),
[WEATHER_RAIN] = FloatToF248(2.0),
[WEATHER_HAIL] = FloatToF248(2.0),
[WEATHER_FOG] = FloatToF248(2.0),
[WEATHER_SNOW] = FloatToF248(2.0),
[WEATHER_CLEAR] = IntToF248(1.0),
[WEATHER_SUNNY] = IntToF248(2.0),
[WEATHER_SANDSTORM] = IntToF248(2.0),
[WEATHER_CLOUDY] = IntToF248(1.0),
[WEATHER_RAIN] = IntToF248(2.0),
[WEATHER_HAIL] = IntToF248(2.0),
[WEATHER_FOG] = IntToF248(2.0),
[WEATHER_SNOW] = IntToF248(2.0),
};
const struct CastformWeatherData gCastformByWeather[WEATHER_COUNT] =

View File

@@ -175,9 +175,9 @@ static void HoOhDropInEffect(Entity * param_1)
PlaySoundEffect(0x1f8);
while( 1 ) {
iVar2 -= iVar1;
iVar1 = F248_Sub(iVar1, FloatToF248(0.375));
iVar1 = F248_Sub(iVar1, IntToF248(0.375));
if (F248LessThanFloat(iVar1, 0.08)) {
iVar1 = FloatToF248(0.08);
iVar1 = IntToF248(0.08);
}
if (F248LessThanInt(iVar2, 0)) break;
GetEntInfo(param_1)->unk174 = iVar2;

View File

@@ -149,9 +149,9 @@ static void MewtwoDropInEffect(Entity *mewtwoEntity)
PlaySoundEffect(0x1f8);
while( 1 ) {
iVar2 -= iVar1;
iVar1 = F248_Sub(iVar1, FloatToF248(0.045));
iVar1 = F248_Sub(iVar1, IntToF248(0.045));
if (F248LessThanFloat(iVar1, 0.12)) {
iVar1 = FloatToF248(0.12);
iVar1 = IntToF248(0.12);
}
if (F248LessThanInt(iVar2, 0)) break;
GetEntInfo(mewtwoEntity)->unk174 = iVar2;

View File

@@ -186,9 +186,9 @@ static void RayquazaDropInEffect(Entity *rayquazaEntity)
PlaySoundEffect(0x1f8);
while( 1 ) {
iVar2 = iVar2 - iVar1; // must be
iVar1 = F248_Sub(iVar1, FloatToF248(3./32.));
iVar1 = F248_Sub(iVar1, IntToF248(3./32.));
if (F248LessThanFloat(iVar1, 0.08)) {
iVar1 = FloatToF248(0.08);
iVar1 = IntToF248(0.08);
}
if (F248LessThanInt(iVar2, 0)) break;
GetEntInfo(rayquazaEntity)->unk174 = iVar2;

View File

@@ -172,9 +172,9 @@ static void sub_808A528(Entity * param_1)
PlaySoundEffect(0x1f8);
while( 1 ) {
iVar2 -= iVar1;
iVar1 = F248_Sub(iVar1, FloatToF248(0.375));
iVar1 = F248_Sub(iVar1, IntToF248(0.375));
if (F248LessThanFloat(iVar1, 0.08)) {
iVar1 = FloatToF248(0.08);
iVar1 = IntToF248(0.08);
}
if (F248LessThanInt(iVar2, 0)) break;
GetEntInfo(param_1)->unk174 = iVar2;

View File

@@ -219,7 +219,7 @@ void UpdateMonsterSprite(Entity *entity)
sub_8042EC8(entity, y2);
if (entInfo->unk15C == 0) {
if (entInfo->unkFF == 1) {
if (entInfo->unk174 <= FloatToF248(199.999)) {
if (entInfo->unk174 <= IntToF248(199.999)) {
entInfo->unk174 += IntToF248(8);
if (entInfo->unk174 > IntToF248(200)) {
entInfo->unk174 = IntToF248(200);

View File

@@ -166,7 +166,7 @@ void TriggerMonsterHouse(Entity *entity, bool8 forcedMonsterHouse)
if (EntityIsValid(newMonster)) {
newMonster->unk1C = IntToF248(200);
for (j = 0; j < 100; j++) {
newMonster->unk1C = s24_8_mul(newMonster->unk1C, FloatToF248(0.665));
newMonster->unk1C = s24_8_mul(newMonster->unk1C, IntToF248(0.665));
if (newMonster->unk1C < IntToF248(1)) {
break;
}

View File

@@ -392,7 +392,7 @@ void UseMoveAgainstTargets(Entity **targetsArray, Entity *attacker, Move *move,
moveHadEffect = (HandleDamagingMove(attacker, currTarget, move, IntToF248(1), itemId) != 0);
break;
case MOVE_REGULAR_ATTACK:
moveHadEffect = (HandleDamagingMove(attacker, currTarget, move, FloatToF248(0.5), itemId) != 0);
moveHadEffect = (HandleDamagingMove(attacker, currTarget, move, IntToF248(0.5), itemId) != 0);
break;
case MOVE_NOTHING:
moveHadEffect = (HandleDamagingMove(attacker, currTarget, move, IntToF248(0), itemId) != 0);

View File

@@ -56,7 +56,7 @@ bool8 IronTailMoveAction(Entity *pokemon, Entity *target, Move *move, s32 itemId
}
static const s24_8 sRolloutModifiers[] = {
FloatToF248(1.0), FloatToF248(1.0), FloatToF248(1.5), FloatToF248(2.0), FloatToF248(2.5), FloatToF248(3.0), FloatToF248(3.5), FloatToF248(4.0), FloatToF248(4.5), FloatToF248(5.0)
IntToF248(1.0), IntToF248(1.0), IntToF248(1.5), IntToF248(2.0), IntToF248(2.5), IntToF248(3.0), IntToF248(3.5), IntToF248(4.0), IntToF248(4.5), IntToF248(5.0)
};
bool8 sub_805768C(Entity *pokemon, Entity *target, Move *move, s32 itemId)
@@ -129,13 +129,13 @@ bool8 DigMoveAction(Entity * pokemon, Entity * target, Move *move, s32 itemId)
bool8 SweetScentMoveAction(Entity *pokemon, Entity *target, Move *move, s32 itemId)
{
LowerAccuracyStageTarget(pokemon,target,gStatIndexSpecial,TRUE);
LowerHitChanceStat(pokemon,target,gStatIndexSpecial,TRUE);
return TRUE;
}
bool8 CharmMoveAction(Entity *pokemon, Entity *target, Move *move, s32 itemId)
{
ApplyOffensiveStatMultiplier(pokemon,target,gStatIndexAtkDef,FloatToF248(0.5),TRUE);
ApplyOffensiveStatMultiplier(pokemon,target,gStatIndexAtkDef,IntToF248(0.5),TRUE);
return TRUE;
}
@@ -325,7 +325,7 @@ bool8 SnoreMoveAction(Entity *pokemon, Entity *target, Move * move, s32 itemId)
bool8 ScreechMoveAction(Entity *pokemon, Entity *target, Move *move, s32 itemId)
{
ApplyDefensiveStatMultiplier(pokemon, target, gStatIndexAtkDef, FloatToF248(0.25), 1);
ApplyDefensiveStatMultiplier(pokemon, target, gStatIndexAtkDef, IntToF248(0.25), 1);
return TRUE;
}
@@ -446,7 +446,7 @@ bool8 AuroraBeamMoveAction(Entity *pokemon, Entity *target, Move *move, s32 item
flag = TRUE;
if(sub_805727C(pokemon, target, gAuroraBeamAtkLowerChance))
{
ApplyOffensiveStatMultiplier(pokemon, target, gStatIndexAtkDef, FloatToF248(0.5), FALSE);
ApplyOffensiveStatMultiplier(pokemon, target, gStatIndexAtkDef, IntToF248(0.5), FALSE);
}
}
return flag;
@@ -458,8 +458,8 @@ bool8 MementoMoveAction(Entity *pokemon, Entity *target, Move *move, s32 itemId)
entityInfo = GetEntInfo(pokemon);
entityInfo->HP = 1;
ApplyOffensiveStatMultiplier(pokemon,target,gStatIndexAtkDef,FloatToF248(0.25),TRUE);
ApplyOffensiveStatMultiplier(pokemon,target,gStatIndexSpecial,FloatToF248(0.25),TRUE);
ApplyOffensiveStatMultiplier(pokemon,target,gStatIndexAtkDef,IntToF248(0.25),TRUE);
ApplyOffensiveStatMultiplier(pokemon,target,gStatIndexSpecial,IntToF248(0.25),TRUE);
entityInfo->unk154 = 1;
return TRUE;
}
@@ -473,7 +473,7 @@ bool8 OctazookaMoveAction(Entity *pokemon, Entity *target, Move *move, s32 itemI
flag = TRUE;
if(sub_805727C(pokemon, target, gOctazookaAccLowerChance))
{
LowerAccuracyStageTarget(pokemon, target, gStatIndexAtkDef, FALSE);
LowerHitChanceStat(pokemon, target, gStatIndexAtkDef, FALSE);
}
}
return flag;
@@ -596,7 +596,7 @@ bool8 ExposeMoveAction(Entity *pokemon, Entity *target, Move *move, s32 itemId)
bool8 DoubleTeamMoveAction(Entity *pokemon, Entity *target, Move *move, s32 itemId)
{
RaiseAccuracyStageTarget(pokemon, target, gStatIndexSpecial);
BoostHitChanceStat(pokemon, target, gStatIndexSpecial);
return TRUE;
}

View File

@@ -537,7 +537,7 @@ bool8 SandstormMoveAction(Entity *pokemon, Entity *target, Move *move, s32 itemI
bool8 sub_8059528(Entity *pokemon, Entity *target, Move *move, s32 itemId)
{
LowerAccuracyStageTarget(pokemon, target, gStatIndexAtkDef, TRUE);
LowerHitChanceStat(pokemon, target, gStatIndexAtkDef, TRUE);
return TRUE;
}
@@ -677,7 +677,7 @@ bool8 MuddyWaterMoveAction(Entity *pokemon, Entity *target, Move *move, s32 item
flag = TRUE;
if(sub_805727C(pokemon, target, gMuddyWaterAccLowerChance))
{
LowerAccuracyStageTarget(pokemon, target, gStatIndexAtkDef, FALSE);
LowerHitChanceStat(pokemon, target, gStatIndexAtkDef, FALSE);
}
}
return flag;
@@ -737,7 +737,7 @@ bool8 sub_80599EC(Entity *pokemon, Entity *target, Move *move, s32 itemId)
bool8 MinimizeMoveAction(Entity *pokemon, Entity *target, Move *move, s32 itemId)
{
RaiseAccuracyStageTarget(pokemon, target, gStatIndexSpecial);
BoostHitChanceStat(pokemon, target, gStatIndexSpecial);
return TRUE;
}

View File

@@ -260,7 +260,7 @@ bool8 MudSlapMoveAction(Entity *pokemon, Entity *target, Move *move, s32 itemId)
flag = TRUE;
if(sub_805727C(pokemon, target, 0))
{
LowerAccuracyStageTarget(pokemon, target, gStatIndexAtkDef, FALSE);
LowerHitChanceStat(pokemon, target, gStatIndexAtkDef, FALSE);
}
}
return flag;
@@ -715,7 +715,7 @@ bool8 SecretPowerMoveAction(Entity * pokemon, Entity * target, Move *move, s32 i
LowerDefensiveStat(pokemon,target,gStatIndexAtkDef,1,1,FALSE);
break;
case 5:
LowerAccuracyStageTarget(pokemon,target,gStatIndexAtkDef,FALSE);
LowerHitChanceStat(pokemon,target,gStatIndexAtkDef,FALSE);
break;
case 6:
ConfuseStatusTarget(pokemon,target,FALSE);

View File

@@ -1121,10 +1121,10 @@ void ApplyOffensiveStatMultiplier(Entity *user, Entity *target, struct StatIndex
entityInfo->offensiveMultipliers[stat.id] = s24_8_mul(entityInfo->offensiveMultipliers[stat.id],multiplier);
if (F248LessThanFloat(entityInfo->offensiveMultipliers[stat.id], 0.01)) {
entityInfo->offensiveMultipliers[stat.id] = FloatToF248(0.01);
entityInfo->offensiveMultipliers[stat.id] = IntToF248(0.01);
}
if (FloatLessThanF248(99.99, entityInfo->offensiveMultipliers[stat.id])) {
entityInfo->offensiveMultipliers[stat.id] = FloatToF248(99.99);
entityInfo->offensiveMultipliers[stat.id] = IntToF248(99.99);
}
if (F248GreaterThan(oldMulti, entityInfo->offensiveMultipliers[stat.id])) {
@@ -1172,10 +1172,10 @@ void ApplyDefensiveStatMultiplier(Entity *user, Entity *target, struct StatIndex
entityInfo->defensiveMultipliers[stat.id] = s24_8_mul(entityInfo->defensiveMultipliers[stat.id],multiplier);
if (F248LessThanFloat(entityInfo->defensiveMultipliers[stat.id], 0.01)) {
entityInfo->defensiveMultipliers[stat.id] = FloatToF248(0.01);
entityInfo->defensiveMultipliers[stat.id] = IntToF248(0.01);
}
if (FloatLessThanF248(99.99, entityInfo->defensiveMultipliers[stat.id])) {
entityInfo->defensiveMultipliers[stat.id] = FloatToF248(99.99);
entityInfo->defensiveMultipliers[stat.id] = IntToF248(99.99);
}
if (F248GreaterThan(oldMulti, entityInfo->defensiveMultipliers[stat.id])) {
@@ -1190,11 +1190,13 @@ void ApplyDefensiveStatMultiplier(Entity *user, Entity *target, struct StatIndex
EntityUpdateStatusSprites(target);
}
void RaiseAccuracyStageTarget(Entity * pokemon, Entity * target, struct StatIndex stat)
void BoostHitChanceStat(Entity *user, Entity *target, struct StatIndex stat)
{
EntityInfo *entityInfo;
EntityInfo *entityInfo;
if (!EntityIsValid(target))
return;
if (EntityIsValid(target)) {
entityInfo = GetEntInfo(target);
SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0],target,0);
sub_8042040(target,stat);
@@ -1204,140 +1206,143 @@ void RaiseAccuracyStageTarget(Entity * pokemon, Entity * target, struct StatInde
else {
strcpy(gFormatBuffer_Items[0],gUnknown_80FC084);
}
if (entityInfo->hitChanceStages[stat.id] < MAX_STAT_STAGE) {
entityInfo->hitChanceStages[stat.id]++;
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FC1C4);
entityInfo->hitChanceStages[stat.id]++;
TryDisplayDungeonLoggableMessage3(user,target,gUnknown_80FC1C4);
}
else {
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FC218);
TryDisplayDungeonLoggableMessage3(user,target,gUnknown_80FC218);
}
EntityUpdateStatusSprites(target);
}
}
void LowerAccuracyStageTarget(Entity * pokemon, Entity * target, struct StatIndex stat, bool8 displayMessage)
void LowerHitChanceStat(Entity *user, Entity *target, struct StatIndex stat, bool8 displayMessage)
{
EntityInfo *entityInfo;
EntityInfo *entityInfo;
if (!EntityIsValid(target))
return;
if (EntityIsValid(target)) {
if (stat.id != STAT_INDEX_ACCURACY) {
strcpy(gFormatBuffer_Items[0],gUnknown_80FC090);
}
else {
strcpy(gFormatBuffer_Items[0],gUnknown_80FC084);
}
if (!IsProtectedFromStatDrops(pokemon,target,displayMessage)) {
if (AbilityIsActive(target, ABILITY_KEEN_EYE) && (stat.id == STAT_INDEX_ACCURACY)){
if(displayMessage)
{
if (IsProtectedFromStatDrops(user,target,displayMessage))
return;
if (AbilityIsActive(target, ABILITY_KEEN_EYE) && stat.id == STAT_INDEX_ACCURACY) {
if (displayMessage) {
SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0],target,0);
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FCA64);
TryDisplayDungeonLoggableMessage3(user,target,gUnknown_80FCA64);
}
}
else {
entityInfo = GetEntInfo(target);
SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0],target,0);
sub_8042060(target,stat.id);
if (entityInfo->hitChanceStages[stat.id] != 0) {
entityInfo->hitChanceStages[stat.id]--;
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FC1A4);
}
else {
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FC1F0);
}
EntityUpdateStatusSprites(target);
}
return;
}
}
entityInfo = GetEntInfo(target);
SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0],target,0);
sub_8042060(target,stat.id);
if (entityInfo->hitChanceStages[stat.id] != 0) {
entityInfo->hitChanceStages[stat.id]--;
TryDisplayDungeonLoggableMessage3(user,target,gUnknown_80FC1A4);
}
else {
TryDisplayDungeonLoggableMessage3(user,target,gUnknown_80FC1F0);
}
EntityUpdateStatusSprites(target);
}
void CringeStatusTarget(Entity * pokemon,Entity * target, bool8 displayMessage)
void CringeStatusTarget(Entity *user ,Entity *target, bool8 displayMessage)
{
EntityInfo *entityInfo;
EntityInfo *entityInfo;
if (EntityIsValid(target)) {
if (!HasSafeguardStatus(pokemon, target, displayMessage)) {
if (AbilityIsActive(target, ABILITY_INNER_FOCUS)){
SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0],target,0);
if(displayMessage)
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FCC18);
}
else {
entityInfo = GetEntInfo(target);
if (!EntityIsValid(target))
return;
if (HasSafeguardStatus(user, target, displayMessage))
return;
if (AbilityIsActive(target, ABILITY_INNER_FOCUS)){
SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0],target,0);
if(entityInfo->cringeClassStatus.status != STATUS_CRINGE)
{
entityInfo->cringeClassStatus.status = STATUS_CRINGE;
entityInfo->cringeClassStatus.turns = CalculateStatusTurns(target, gCringeTurnRange, TRUE) + 1;
sub_80420A0(target);
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FB2E0);
}
else
{
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FB300);
}
EntityUpdateStatusSprites(target);
}
if (displayMessage)
TryDisplayDungeonLoggableMessage3(user,target,gUnknown_80FCC18);
return;
}
}
entityInfo = GetEntInfo(target);
SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0],target,0);
if (entityInfo->cringeClassStatus.status != STATUS_CRINGE) {
entityInfo->cringeClassStatus.status = STATUS_CRINGE;
entityInfo->cringeClassStatus.turns = CalculateStatusTurns(target, gCringeTurnRange, TRUE) + 1;
sub_80420A0(target);
TryDisplayDungeonLoggableMessage3(user,target,gUnknown_80FB2E0);
}
else {
TryDisplayDungeonLoggableMessage3(user,target,gUnknown_80FB300);
}
EntityUpdateStatusSprites(target);
}
void ParalyzeStatusTarget(Entity * pokemon, Entity * target, bool8 displayMessage)
void ParalyzeStatusTarget(Entity *user, Entity *target, bool8 displayMessage)
{
const Tile *mapTile;
EntityInfo *entityInfo;
Entity *mapPokemonEntity;
int index;
bool8 bVar6;
bool8 bVar7;
EntityInfo *entityInfo;
bool8 alreadyParalyzed;
if (!EntityIsValid(target))
return;
if (HasSafeguardStatus(user, target, displayMessage))
return;
if ((EntityIsValid(target)) && (!HasSafeguardStatus(pokemon,target,displayMessage))) {
if (AbilityIsActive(target, ABILITY_LIMBER)) {
SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0],target,0);
if (displayMessage) {
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FCBF8);
}
SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0],target,0);
if (displayMessage) {
TryDisplayDungeonLoggableMessage3(user,target,gUnknown_80FCBF8);
}
return;
}
else
{
bVar6 = TRUE;
entityInfo = GetEntInfo(target);
SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0],target,0);
if (entityInfo->burnClassStatus.status != STATUS_PARALYSIS) {
alreadyParalyzed = TRUE;
entityInfo = GetEntInfo(target);
SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0],target,0);
if (entityInfo->burnClassStatus.status != STATUS_PARALYSIS) {
entityInfo->burnClassStatus.status = STATUS_PARALYSIS;
entityInfo->burnClassStatus.turns = CalculateStatusTurns(target,gParalysisTurnRange,TRUE) + 1;
entityInfo->burnClassStatus.damageCountdown = 0;
entityInfo->burnClassStatus.badlyPoisonedDamageCount = 0;
bVar6 = FALSE;
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FB2AC);
alreadyParalyzed = FALSE;
TryDisplayDungeonLoggableMessage3(user,target,gUnknown_80FB2AC);
sub_8041C1C(target);
CalcSpeedStage(target);
}
else {
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FB2CC);
}
if ((AbilityIsActive(target, ABILITY_SYNCHRONIZE)) && (!bVar6)) {
bVar7 = FALSE;
for(index = 0; index < NUM_DIRECTIONS; index++)
{
mapTile = GetTile(target->pos.x + gAdjacentTileOffsets[index].x,target->pos.y + gAdjacentTileOffsets[index].y);
mapPokemonEntity = mapTile->monster;
if ((EntityIsValid(mapPokemonEntity)) && (GetEntityType(mapPokemonEntity) == ENTITY_MONSTER)) {
if (!bVar7) {
bVar7 = TRUE;
SetMessageArgument_2(gFormatBuffer_Monsters[0],entityInfo,0);
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FF01C);
}
if (GetTreatmentBetweenMonstersIgnoreStatus(target,mapPokemonEntity) == TREATMENT_TREAT_AS_ENEMY) {
ParalyzeStatusTarget(pokemon, mapPokemonEntity, displayMessage);
}
}
}
}
EntityUpdateStatusSprites(target);
}
}
else {
TryDisplayDungeonLoggableMessage3(user,target,gUnknown_80FB2CC);
}
if (AbilityIsActive(target, ABILITY_SYNCHRONIZE) && !alreadyParalyzed) {
s32 i;
bool8 synchronizePrinted = FALSE;
for (i = 0; i < NUM_DIRECTIONS; i++) {
const Tile *mapTile = GetTile(target->pos.x + gAdjacentTileOffsets[i].x,target->pos.y + gAdjacentTileOffsets[i].y);
Entity *mapMonster = mapTile->monster;
if (EntityIsValid(mapMonster) && GetEntityType(mapMonster) == ENTITY_MONSTER) {
if (!synchronizePrinted) {
synchronizePrinted = TRUE;
SetMessageArgument_2(gFormatBuffer_Monsters[0],entityInfo,0);
TryDisplayDungeonLoggableMessage3(user,target,gUnknown_80FF01C);
}
if (GetTreatmentBetweenMonstersIgnoreStatus(target,mapMonster) == TREATMENT_TREAT_AS_ENEMY) {
ParalyzeStatusTarget(user, mapMonster, displayMessage);
}
}
}
}
EntityUpdateStatusSprites(target);
}
void RaiseMovementSpeedTarget(Entity * pokemon, Entity * target, s32 turns, bool8 displayMessage)