diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc index a5e21af674e6..576c4082e296 100644 --- a/asm/macros/battle_script.inc +++ b/asm/macros/battle_script.inc @@ -2298,6 +2298,12 @@ .4byte \jumpInstr .endm + .macro jumpiflastuseditemflingeffect battler:req, flingEffect:req, jumpInstr:req + various \battler, VARIOUS_JUMP_IF_LAST_USED_ITEM_HOLD_EFFECT + .byte \holdEffect + .4byte \jumpInstr + .endm + .macro savebattleritem battler:req various \battler, VARIOUS_SAVE_BATTLER_ITEM .endm diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 0703dc09c010..32cf9de1e00a 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -758,13 +758,13 @@ BattleScript_EffectFling:: waitmessage B_WAIT_TIME_MED jumpiflastuseditemberry BattleScript_EffectFlingConsumeBerry jumpifability BS_TARGET, ABILITY_SHIELD_DUST, BattleScript_FlingBlockedByShieldDust - jumpiflastuseditemholdeffect BS_ATTACKER, HOLD_EFFECT_FLAME_ORB, BattleScript_FlingFlameOrb - jumpiflastuseditemholdeffect BS_ATTACKER, HOLD_EFFECT_FLINCH, BattleScript_FlingFlinch - jumpiflastuseditemholdeffect BS_ATTACKER, HOLD_EFFECT_LIGHT_BALL, BattleScript_FlingLightBall - jumpiflastuseditemholdeffect BS_ATTACKER, HOLD_EFFECT_MENTAL_HERB, BattleScript_FlingMentalHerb - jumpiflastuseditemholdeffect BS_ATTACKER, HOLD_EFFECT_POISON_POWER, BattleScript_FlingPoisonBarb - jumpiflastuseditemholdeffect BS_ATTACKER, HOLD_EFFECT_TOXIC_ORB, BattleScript_FlingToxicOrb - jumpiflastuseditemholdeffect BS_ATTACKER, HOLD_EFFECT_RESTORE_STATS, BattleScript_FlingWhiteHerb + jumpiflastuseditemflingeffect BS_ATTACKER, MOVE_EFFECT_BURN, BattleScript_FlingBurn + jumpiflastuseditemflingeffect BS_ATTACKER, MOVE_EFFECT_FLINCH, BattleScript_FlingFlinch + jumpiflastuseditemflingeffect BS_ATTACKER, MOVE_EFFECT_PARALYSIS, BattleScript_FlingParalysis + jumpiflastuseditemflingeffect BS_ATTACKER, MOVE_EFFECT_FLING_MENTAL_HERB, BattleScript_FlingMentalHerb + jumpiflastuseditemflingeffect BS_ATTACKER, MOVE_EFFECT_POISON, BattleScript_FlingPoison + jumpiflastuseditemflingeffect BS_ATTACKER, MOVE_EFFECT_TOXIC, BattleScript_FlingToxicOrb + jumpiflastuseditemflingeffect BS_ATTACKER, MOVE_EFFECT_FLING_WHITE_HERB, BattleScript_FlingWhiteHerb goto BattleScript_FlingEnd BattleScript_EffectFlingConsumeBerry: savebattleritem BS_TARGET @@ -789,13 +789,13 @@ BattleScript_FlingBlockedByShieldDust:: waitmessage B_WAIT_TIME_LONG goto BattleScript_FlingEnd -BattleScript_FlingFlameOrb: +BattleScript_FlingBurn: seteffectsecondary MOVE_EFFECT_BURN goto BattleScript_FlingEnd BattleScript_FlingFlinch: seteffectsecondary MOVE_EFFECT_FLINCH goto BattleScript_FlingEnd -BattleScript_FlingLightBall: +BattleScript_FlingParalysis: seteffectsecondary MOVE_EFFECT_PARALYSIS goto BattleScript_FlingEnd BattleScript_FlingMentalHerb: @@ -808,7 +808,7 @@ BattleScript_FlingMentalHerb: updatestatusicon BS_ATTACKER restoretarget goto BattleScript_FlingEnd -BattleScript_FlingPoisonBarb: +BattleScript_FlingPoison: seteffectsecondary MOVE_EFFECT_POISON goto BattleScript_FlingEnd BattleScript_FlingToxicOrb: diff --git a/include/constants/battle.h b/include/constants/battle.h index 865f5ce8867b..96398e9cdc70 100644 --- a/include/constants/battle.h +++ b/include/constants/battle.h @@ -416,8 +416,10 @@ #define MOVE_EFFECT_LIGHT_SCREEN 85 #define MOVE_EFFECT_SALT_CURE 86 #define MOVE_EFFECT_EERIE_SPELL 87 +#define MOVE_EFFECT_FLING_MENTAL_HERB 88 +#define MOVE_EFFECT_FLING_WHITE_HERB 89 -#define NUM_MOVE_EFFECTS 88 +#define NUM_MOVE_EFFECTS 90 #define MOVE_EFFECT_AFFECTS_USER 0x2000 #define MOVE_EFFECT_CERTAIN 0x4000 diff --git a/include/item.h b/include/item.h index b99a6f30c2ea..1fc5ab28bbb5 100644 --- a/include/item.h +++ b/include/item.h @@ -25,6 +25,7 @@ struct Item u8 type; u8 battleUsage; u8 flingPower; + u8 flingEffect; const u32 *iconPic; const u32 *iconPalette; }; diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 59695bc0e6f5..e5ca99a5ab21 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -2296,12 +2296,11 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) } else { - /* TODO Fling - u8 effect = gFlingTable[gBattleMons[battlerAtk].item].effect; + u8 effect = gItemsInfo[gBattleMons[battlerAtk].item].flingEffect; switch (effect) { case MOVE_EFFECT_BURN: - if (!AI_CanBurn(battlerAtk, battlerDef, BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove)) + if (!AI_CanBurn(battlerAtk, battlerDef, aiData->abilities[battlerDef], BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove)) ADJUST_SCORE(-10); break; case MOVE_EFFECT_PARALYSIS: @@ -2316,12 +2315,16 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) if (!AI_CanPoison(battlerAtk, battlerDef, aiData->abilities[battlerDef], move, aiData->partnerMove)) ADJUST_SCORE(-10); break; - case MOVE_EFFECT_FREEZE: - if (!CanBeFrozen(battlerDef, TRUE) - || MoveBlockedBySubstitute(move, battlerAtk, battlerDef)) - ADJUST_SCORE(-10); + case MOVE_EFFECT_FLINCH: + //TODO break; - }*/ + case MOVE_EFFECT_FLING_MENTAL_HERB: + //TODO + break; + case MOVE_EFFECT_FLING_WHITE_HERB: + //TODO + break; + } } break; case EFFECT_EMBARGO: @@ -4271,15 +4274,12 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) ADJUST_SCORE(DECENT_EFFECT); break; case EFFECT_FLING: - /* TODO - switch (gFlingTable[aiData->items[battlerAtk]].effect) + u8 effect = gItemsInfo[gBattleMons[battlerAtk].item].flingEffect; + switch (effect) { case MOVE_EFFECT_BURN: IncreaseBurnScore(battlerAtk, battlerDef, move, &score); break; - case MOVE_EFFECT_FLINCH: - score += ShouldTryToFlinch(battlerAtk, battlerDef, aiData->abilities[battlerAtk], aiData->abilities[battlerDef], move); - break; case MOVE_EFFECT_PARALYSIS: IncreaseParalyzeScore(battlerAtk, battlerDef, move, &score); break; @@ -4287,11 +4287,16 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) case MOVE_EFFECT_TOXIC: IncreasePoisonScore(battlerAtk, battlerDef, move, &score); break; - case MOVE_EFFECT_FREEZE: - if (AI_CanFreeze(battlerAtk, battlerDef)) - ADJUST_SCORE(GOOD_EFFECT); + case MOVE_EFFECT_FLINCH: + score += ShouldTryToFlinch(battlerAtk, battlerDef, aiData->abilities[battlerAtk], aiData->abilities[battlerDef], move); break; - }*/ + case MOVE_EFFECT_FLING_MENTAL_HERB: + //TODO + break; + case MOVE_EFFECT_FLING_WHITE_HERB: + //TODO + break; + } break; case EFFECT_EMBARGO: if (aiData->holdEffects[battlerDef] != HOLD_EFFECT_NONE) diff --git a/src/data/items.h b/src/data/items.h index 2b560ad9d5fd..7914c894a340 100644 --- a/src/data/items.h +++ b/src/data/items.h @@ -6987,6 +6987,7 @@ const struct Item gItemsInfo[] = .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, .flingPower = 30, + .flingEffect = MOVE_EFFECT_PARALYSIS, .iconPic = gItemIcon_LightBall, .iconPalette = gItemIconPalette_LightBall, }, @@ -7695,6 +7696,7 @@ const struct Item gItemsInfo[] = .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, .flingPower = 70, + .flingEffect = MOVE_EFFECT_POISON, .iconPic = gItemIcon_PoisonBarb, .iconPalette = gItemIconPalette_PoisonBarb, }, @@ -7929,6 +7931,7 @@ const struct Item gItemsInfo[] = .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, .flingPower = 30, + .flingEffect = MOVE_EFFECT_BURN, .iconPic = gItemIcon_FlameOrb, .iconPalette = gItemIconPalette_FlameOrb, }, @@ -7946,6 +7949,7 @@ const struct Item gItemsInfo[] = .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, .flingPower = 30, + .flingEffect = MOVE_EFFECT_TOXIC, .iconPic = gItemIcon_ToxicOrb, .iconPalette = gItemIconPalette_ToxicOrb, }, @@ -8204,6 +8208,7 @@ const struct Item gItemsInfo[] = .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, .flingPower = 10, + .flingEffect = MOVE_EFFECT_FLING_WHITE_HERB, .iconPic = gItemIcon_InBattleHerb, .iconPalette = gItemIconPalette_WhiteHerb, }, @@ -8287,6 +8292,7 @@ const struct Item gItemsInfo[] = .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, .flingPower = 10, + .flingEffect = MOVE_EFFECT_FLING_MENTAL_HERB, .iconPic = gItemIcon_InBattleHerb, .iconPalette = gItemIconPalette_MentalHerb, }, @@ -8303,6 +8309,7 @@ const struct Item gItemsInfo[] = .fieldUseFunc = EVO_HELD_ITEM_FIELD_FUNC, .effect = gItemEffect_EvoItem, .flingPower = 30, + .flingEffect = MOVE_EFFECT_FLINCH, .iconPic = gItemIcon_KingsRock, .iconPalette = gItemIconPalette_KingsRock, }, @@ -8788,6 +8795,7 @@ const struct Item gItemsInfo[] = .fieldUseFunc = EVO_HELD_ITEM_FIELD_FUNC, .effect = gItemEffect_EvoItem, .flingPower = 30, + .flingEffect = MOVE_EFFECT_FLINCH, .iconPic = gItemIcon_RazorFang, .iconPalette = gItemIconPalette_RazorFang, },