mirror of
https://github.com/Ninjdai1/pokeemerald.git
synced 2025-01-27 13:53:52 +01:00
Merge branch 'battle_engine' into Hyperspace_Fury
This commit is contained in:
commit
e48e9c1d7a
File diff suppressed because it is too large
Load Diff
@ -6713,7 +6713,7 @@ Move_SEARING_SHOT:
|
|||||||
launchtemplate gSearingShotEruptionRockTemplate 0x2 0x5 0x1 0x80 0x1e 0x19 0xffec
|
launchtemplate gSearingShotEruptionRockTemplate 0x2 0x5 0x1 0x80 0x1e 0x19 0xffec
|
||||||
delay 0x2
|
delay 0x2
|
||||||
launchtemplate gSearingShotEruptionRockTemplate 0x42 0x5 0x1 0xa0 0x1e 0x19 0xffec
|
launchtemplate gSearingShotEruptionRockTemplate 0x42 0x5 0x1 0xa0 0x1e 0x19 0xffec
|
||||||
launchtemplate gSearingShotEruptionRockTemplate 0x42 0x5 0x1 SOUND_PAN_ATTACKER 0x1e 0x19 0xffec
|
launchtemplate gSearingShotEruptionRockTemplate 0x42 0x5 0x1 0xa0 0x1e 0x19 0xffec
|
||||||
delay 0x2
|
delay 0x2
|
||||||
launchtemplate gSearingShotEruptionRockTemplate 0x42 0x5 0x1 0xe0 0x1e 0x19 0xffec
|
launchtemplate gSearingShotEruptionRockTemplate 0x42 0x5 0x1 0xe0 0x1e 0x19 0xffec
|
||||||
delay 0xF
|
delay 0xF
|
||||||
@ -6727,7 +6727,7 @@ Move_SEARING_SHOT:
|
|||||||
launchtemplate gSearingShotEruptionRockTemplate 0x2 0x5 0x1 0x80 0x1e 0x19 0x0
|
launchtemplate gSearingShotEruptionRockTemplate 0x2 0x5 0x1 0x80 0x1e 0x19 0x0
|
||||||
delay 0x2
|
delay 0x2
|
||||||
launchtemplate gSearingShotEruptionRockTemplate 0x42 0x5 0x1 0xa0 0x1e 0x19 0x0
|
launchtemplate gSearingShotEruptionRockTemplate 0x42 0x5 0x1 0xa0 0x1e 0x19 0x0
|
||||||
launchtemplate gSearingShotEruptionRockTemplate 0x42 0x5 0x1 SOUND_PAN_ATTACKER 0x1e 0x19 0x0
|
launchtemplate gSearingShotEruptionRockTemplate 0x42 0x5 0x1 0xa0 0x1e 0x19 0x0
|
||||||
delay 0x2
|
delay 0x2
|
||||||
launchtemplate gSearingShotEruptionRockTemplate 0x42 0x5 0x1 0xe0 0x1e 0x19 0x0
|
launchtemplate gSearingShotEruptionRockTemplate 0x42 0x5 0x1 0xe0 0x1e 0x19 0x0
|
||||||
delay 0x15
|
delay 0x15
|
||||||
@ -9063,11 +9063,11 @@ Move_EERIE_IMPULSE::
|
|||||||
launchtemplate gZapCannonSparkSpriteTemplate, ANIM_TARGET, 7, 10, 0, 16, 30, 0, 40, 0
|
launchtemplate gZapCannonSparkSpriteTemplate, ANIM_TARGET, 7, 10, 0, 16, 30, 0, 40, 0
|
||||||
launchtemplate gZapCannonSparkSpriteTemplate, ANIM_TARGET, 7, 10, 0, 16, 30, 0, 40, 1
|
launchtemplate gZapCannonSparkSpriteTemplate, ANIM_TARGET, 7, 10, 0, 16, 30, 0, 40, 1
|
||||||
launchtemplate gZapCannonSparkSpriteTemplate, ANIM_TARGET, 7, 10, 0, 16, 30, 0, 40, 0
|
launchtemplate gZapCannonSparkSpriteTemplate, ANIM_TARGET, 7, 10, 0, 16, 30, 0, 40, 0
|
||||||
launchtemplate gZapCannonSparkSpriteTemplate, ANIM_TARGET, 7, 10, 0, 16, 30, SOUND_PAN_ATTACKER, 40, 2
|
launchtemplate gZapCannonSparkSpriteTemplate, ANIM_TARGET, 7, 10, 0, 16, 30, 0, 40, 2
|
||||||
launchtemplate gZapCannonSparkSpriteTemplate, ANIM_TARGET, 7, 10, 0, 32, 30, 0, 40, 0
|
launchtemplate gZapCannonSparkSpriteTemplate, ANIM_TARGET, 7, 10, 0, 32, 30, 0, 40, 0
|
||||||
launchtemplate gZapCannonSparkSpriteTemplate, ANIM_TARGET, 7, 10, 0, 32, 30, 0, 40, 1
|
launchtemplate gZapCannonSparkSpriteTemplate, ANIM_TARGET, 7, 10, 0, 32, 30, 0, 40, 1
|
||||||
launchtemplate gZapCannonSparkSpriteTemplate, ANIM_TARGET, 7, 10, 0, 32, 30, 0, 40, 0
|
launchtemplate gZapCannonSparkSpriteTemplate, ANIM_TARGET, 7, 10, 0, 32, 30, 0, 40, 0
|
||||||
launchtemplate gZapCannonSparkSpriteTemplate, ANIM_TARGET, 7, 10, 0, 32, 30, SOUND_PAN_ATTACKER, 40, 2
|
launchtemplate gZapCannonSparkSpriteTemplate, ANIM_TARGET, 7, 10, 0, 32, 30, 0, 40, 2
|
||||||
launchtemplate gZapCannonSparkSpriteTemplate, ANIM_TARGET, 7, 10, 0, 48, 30, 0, 40, 0
|
launchtemplate gZapCannonSparkSpriteTemplate, ANIM_TARGET, 7, 10, 0, 48, 30, 0, 40, 0
|
||||||
launchtemplate gZapCannonSparkSpriteTemplate, ANIM_TARGET, 7, 10, 0, 48, 30, 0, 40, 1
|
launchtemplate gZapCannonSparkSpriteTemplate, ANIM_TARGET, 7, 10, 0, 48, 30, 0, 40, 1
|
||||||
launchtemplate gZapCannonSparkSpriteTemplate, ANIM_TARGET, 7, 10, 0, 48, 30, 0, 40, 0
|
launchtemplate gZapCannonSparkSpriteTemplate, ANIM_TARGET, 7, 10, 0, 48, 30, 0, 40, 0
|
||||||
@ -10966,11 +10966,11 @@ PollenPuffAlly:
|
|||||||
monbg ANIM_TARGET
|
monbg ANIM_TARGET
|
||||||
launchtemplate gPollenPuffPinkSparkleTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0xa0 0x28 0x0
|
launchtemplate gPollenPuffPinkSparkleTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0xa0 0x28 0x0
|
||||||
launchtemplate gPollenPuffPinkSparkleTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x120 0x28 0x0
|
launchtemplate gPollenPuffPinkSparkleTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x120 0x28 0x0
|
||||||
launchtemplate gPollenPuffPinkSparkleTemplate 0x84 0x7 0xa 0x0 0x8 0x1e SOUND_PAN_ATTACKER 0x28 0x0
|
launchtemplate gPollenPuffPinkSparkleTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x90 0x28 0x0
|
||||||
launchtemplate gPollenPuffPinkSparkleTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x110 0x28 0x0
|
launchtemplate gPollenPuffPinkSparkleTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x110 0x28 0x0
|
||||||
launchtemplate gPollenPuffYellowSparkleTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0xa0 0x28 0x0
|
launchtemplate gPollenPuffYellowSparkleTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0xa0 0x28 0x0
|
||||||
launchtemplate gPollenPuffYellowSparkleTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x120 0x28 0x0
|
launchtemplate gPollenPuffYellowSparkleTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x120 0x28 0x0
|
||||||
launchtemplate gPollenPuffYellowSparkleTemplate 0x84 0x7 0xa 0x0 0x8 0x1e SOUND_PAN_ATTACKER 0x28 0x0
|
launchtemplate gPollenPuffYellowSparkleTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x90 0x28 0x0
|
||||||
launchtemplate gPollenPuffYellowSparkleTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x110 0x28 0x0
|
launchtemplate gPollenPuffYellowSparkleTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x110 0x28 0x0
|
||||||
delay 0x1
|
delay 0x1
|
||||||
launchtemplate gPollenPuffSporeTemplate 0x82 0x6 0xa 0x0 0x0 0x0 0x19 0xffe0
|
launchtemplate gPollenPuffSporeTemplate 0x82 0x6 0xa 0x0 0x0 0x0 0x19 0xffe0
|
||||||
@ -13015,7 +13015,7 @@ Move_PHOTON_GEYSER::
|
|||||||
launchtemplate gPhotonGeyserZapCannonSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x0 0x28 0x0
|
launchtemplate gPhotonGeyserZapCannonSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x0 0x28 0x0
|
||||||
launchtemplate gPhotonGeyserZapCannonSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x40 0x28 0x1
|
launchtemplate gPhotonGeyserZapCannonSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x40 0x28 0x1
|
||||||
launchtemplate gPhotonGeyserZapCannonSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x80 0x28 0x0
|
launchtemplate gPhotonGeyserZapCannonSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x80 0x28 0x0
|
||||||
launchtemplate gPhotonGeyserZapCannonSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e SOUND_PAN_ATTACKER 0x28 0x2
|
launchtemplate gPhotonGeyserZapCannonSparkTemplate 0x84 0x7 0xa 0x0 0x10 0x1e 0x0 0x28 0x2
|
||||||
launchtemplate gPhotonGeyserZapCannonSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x20 0x28 0x0
|
launchtemplate gPhotonGeyserZapCannonSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x20 0x28 0x0
|
||||||
launchtemplate gPhotonGeyserZapCannonSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x60 0x28 0x1
|
launchtemplate gPhotonGeyserZapCannonSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0x60 0x28 0x1
|
||||||
launchtemplate gPhotonGeyserZapCannonSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0xa0 0x28 0x0
|
launchtemplate gPhotonGeyserZapCannonSparkTemplate 0x84 0x7 0xa 0x0 0x8 0x1e 0xa0 0x28 0x0
|
||||||
@ -13326,11 +13326,11 @@ Move_BOLT_BEAK::
|
|||||||
call BoltBeakSparks
|
call BoltBeakSparks
|
||||||
waitforvisualfinish
|
waitforvisualfinish
|
||||||
launchtask AnimTask_BlendColorCycle 0x2 0x6 0x3 0xffe1 0x1 0x0 0x0 0x5bff
|
launchtask AnimTask_BlendColorCycle 0x2 0x6 0x3 0xffe1 0x1 0x0 0x0 0x5bff
|
||||||
launchtemplate gHorizontalLungeSpriteTemplate 0x2 0x2 0x4 0x4
|
createsprite gHorizontalLungeSpriteTemplate, 0x2, 0x2, 0x4, 0x4
|
||||||
delay 0x4
|
delay 0x4
|
||||||
launchtemplate gHornHitSpriteTemplate 0x84 0x3 0x8 0x8 0xa
|
createsprite gHornHitSpriteTemplate, 0x84, 0x3, 0x8, 0x8, 0xa
|
||||||
waitforvisualfinish
|
waitforvisualfinish
|
||||||
launchtemplate gFlashingHitSplatSpriteTemplate 0x83 0x4 0x0 0x0 0x1 0x1
|
createsprite gFlashingHitSplatSpriteTemplate, 0x83, 0x4, 0x0, 0x0, 0x1, 0x1
|
||||||
playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET
|
playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET
|
||||||
launchtask AnimTask_ShakeMon 0x2 0x5 0x1 0x3 0x0 0x6 0x1
|
launchtask AnimTask_ShakeMon 0x2 0x5 0x1 0x3 0x0 0x6 0x1
|
||||||
waitforvisualfinish
|
waitforvisualfinish
|
||||||
@ -13340,32 +13340,32 @@ Move_BOLT_BEAK::
|
|||||||
end
|
end
|
||||||
BoltBeakSparks:
|
BoltBeakSparks:
|
||||||
playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER
|
playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER
|
||||||
launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x20 0x18 0xbe 0xc 0x0 0x1 0x0
|
createsprite gSparkElectricitySpriteTemplate, 0x0, 0x7, 0x20, 0x18, 0xbe, 0xc, 0x0, 0x1, 0x0
|
||||||
delay 0x0
|
delay 0x0
|
||||||
launchtemplate gBoltBeakBlueSparkTemplate 0x0 0x7 0x50 0x18 0x16 0xc 0x0 0x1 0x0
|
createsprite gBoltBeakBlueSparkTemplate, 0x0, 0x7, 0x50, 0x18, 0x16, 0xc, 0x0, 0x1, 0x0
|
||||||
launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0x9c 0x18 0x79 0xd 0x0 0x1 0x1
|
createsprite gSparkElectricitySpriteTemplate, 0x0, 0x7, 0x9c, 0x18, 0x79, 0xd, 0x0, 0x1, 0x1
|
||||||
delay 0x0
|
delay 0x0
|
||||||
launchtask AnimTask_BlendColorCycle 0x2 0x6 0x3 0xffe1 0x1 0x0 0x0 0x5bff
|
launchtask AnimTask_BlendColorCycle 0x2 0x6 0x3 0xffe1 0x1 0x0 0x0 0x5bff
|
||||||
delay 0xa
|
delay 0xa
|
||||||
launchtask AnimTask_BlendColorCycle 0x2 0x6 0x3 0xffe1 0x1 0x5 0x5 0x5bff
|
launchtask AnimTask_BlendColorCycle 0x2 0x6 0x3 0xffe1 0x1 0x5 0x5 0x5bff
|
||||||
playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER
|
playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER
|
||||||
launchtemplate gBoltBeakBlueSparkTemplate 0x0 0x7 0x64 0x18 0x3c 0xa 0x0 0x1 0x0
|
createsprite gBoltBeakBlueSparkTemplate, 0x0, 0x7, 0x64, 0x18, 0x3c, 0xa, 0x0, 0x1, 0x0
|
||||||
launchtemplate gSparkElectricitySpriteTemplate 0x0 0x7 0xaa 0x18 0x2a 0xb 0x0 0x1 0x1
|
createsprite gSparkElectricitySpriteTemplate, 0x0, 0x7, 0xaa, 0x18, 0x2a, 0xb, 0x0, 0x1, 0x1
|
||||||
delay 0x0
|
delay 0x0
|
||||||
launchtemplate gBoltBeakBlueSparkTemplate 0x0 0x7 0xee 0x18 0xa5 0xa 0x0 0x1 0x1
|
createsprite gBoltBeakBlueSparkTemplate, 0x0, 0x7, 0xee, 0x18, 0xa5, 0xa, 0x0, 0x1, 0x1
|
||||||
delay 0x0
|
delay 0x0
|
||||||
launchtask AnimTask_BlendColorCycle 0x2 0x6 0x3 0xffe1 0x1 0x0 0x0 0x76E1
|
launchtask AnimTask_BlendColorCycle 0x2 0x6 0x3 0xffe1 0x1 0x0 0x0 0x76E1
|
||||||
delay 0x14
|
delay 0x14
|
||||||
launchtask AnimTask_BlendColorCycle 0x2 0x6 0x3 0xffe1 0x1 0x4 0x4 0x76E1
|
launchtask AnimTask_BlendColorCycle 0x2 0x6 0x3 0xffe1 0x1 0x4 0x4 0x76E1
|
||||||
playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER
|
playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_ATTACKER
|
||||||
launchtemplate gSparkElectricityFlashingSpriteTemplate 0x4 0x8 0x0 0x0 0x20 0xc 0x0 0x14 0x0 0x0
|
createsprite gSparkElectricityFlashingSpriteTemplate, 0x4, 0x8, 0x0, 0x0, 0x20, 0xc, 0x0, 0x14, 0x0, 0x0
|
||||||
launchtemplate gBoltBeakBlueFlashingSparkTemplate 0x4 0x8 0x0 0x0 0x20 0xc 0x40 0x14 0x1 0x0
|
createsprite gBoltBeakBlueFlashingSparkTemplate, 0x4, 0x8, 0x0, 0x0, 0x20, 0xc, 0x40, 0x14, 0x1, 0x0
|
||||||
launchtemplate gSparkElectricityFlashingSpriteTemplate 0x4 0x8 0x0 0x0 0x20 0xc 0x80 0x14 0x0 0x0
|
createsprite gSparkElectricityFlashingSpriteTemplate, 0x4, 0x8, 0x0, 0x0, 0x20, 0xc, 0x80, 0x14, 0x0, 0x0
|
||||||
launchtemplate gBoltBeakBlueFlashingSparkTemplate 0x4 0x8 0x0 0x0 0x20 0xc SOUND_PAN_ATTACKER 0x14 0x2 0x0
|
createsprite gBoltBeakBlueFlashingSparkTemplate, 0x4, 0x8, 0x0, 0x0, 0x20, 0xc, 0x0, 0x14, 0x2, 0x0
|
||||||
launchtemplate gSparkElectricityFlashingSpriteTemplate 0x4 0x8 0x0 0x0 0x10 0xc 0x20 0x14 0x0 0x0
|
createsprite gSparkElectricityFlashingSpriteTemplate, 0x4, 0x8, 0x0, 0x0, 0x10, 0xc, 0x20, 0x14, 0x0, 0x0
|
||||||
launchtemplate gBoltBeakBlueFlashingSparkTemplate 0x4 0x8 0x0 0x0 0x10 0xc 0x60 0x14 0x1 0x0
|
createsprite gBoltBeakBlueFlashingSparkTemplate, 0x4, 0x8, 0x0, 0x0, 0x10, 0xc, 0x60, 0x14, 0x1, 0x0
|
||||||
launchtemplate gSparkElectricityFlashingSpriteTemplate 0x4 0x8 0x0 0x0 0x10 0xc 0xa0 0x14 0x0 0x0
|
createsprite gSparkElectricityFlashingSpriteTemplate, 0x4, 0x8, 0x0, 0x0, 0x10, 0xc, 0xa0, 0x14, 0x0, 0x0
|
||||||
launchtemplate gBoltBeakBlueFlashingSparkTemplate 0x4 0x8 0x0 0x0 0x10 0xc 0xe0 0x14 0x2 0x0
|
createsprite gBoltBeakBlueFlashingSparkTemplate, 0x4, 0x8, 0x0, 0x0, 0x10, 0xc, 0xe0, 0x14, 0x2, 0x0
|
||||||
delay 0x4
|
delay 0x4
|
||||||
return
|
return
|
||||||
|
|
||||||
|
@ -367,6 +367,12 @@ gBattleScriptsForMoveEffects:: @ 82D86A8
|
|||||||
.4byte BattleScript_EffectFairyLock
|
.4byte BattleScript_EffectFairyLock
|
||||||
.4byte BattleScript_EffectAllySwitch
|
.4byte BattleScript_EffectAllySwitch
|
||||||
.4byte BattleScript_EffectSleepHit
|
.4byte BattleScript_EffectSleepHit
|
||||||
|
.4byte BattleScript_EffectAttackerDefenseDownHit
|
||||||
|
.4byte BattleScript_EffectBodyPress
|
||||||
|
|
||||||
|
BattleScript_EffectAttackerDefenseDownHit:
|
||||||
|
setmoveeffect MOVE_EFFECT_DEF_MINUS_1 | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN
|
||||||
|
goto BattleScript_EffectHit
|
||||||
|
|
||||||
BattleScript_EffectSleepHit:
|
BattleScript_EffectSleepHit:
|
||||||
setmoveeffect MOVE_EFFECT_SLEEP
|
setmoveeffect MOVE_EFFECT_SLEEP
|
||||||
@ -882,10 +888,11 @@ BattleScript_EffectFlameBurst:
|
|||||||
|
|
||||||
BattleScript_MoveEffectFlameBurst::
|
BattleScript_MoveEffectFlameBurst::
|
||||||
tryfaintmon BS_TARGET, FALSE, NULL
|
tryfaintmon BS_TARGET, FALSE, NULL
|
||||||
|
copybyte sBATTLER, sSAVED_BATTLER
|
||||||
printstring STRINGID_BURSTINGFLAMESHIT
|
printstring STRINGID_BURSTINGFLAMESHIT
|
||||||
waitmessage B_WAIT_TIME_LONG
|
waitmessage B_WAIT_TIME_LONG
|
||||||
savetarget
|
savetarget
|
||||||
copybyte gBattlerTarget, sBATTLER
|
copybyte gBattlerTarget, sSAVED_BATTLER
|
||||||
healthbarupdate BS_TARGET
|
healthbarupdate BS_TARGET
|
||||||
datahpupdate BS_TARGET
|
datahpupdate BS_TARGET
|
||||||
tryfaintmon BS_TARGET, FALSE, NULL
|
tryfaintmon BS_TARGET, FALSE, NULL
|
||||||
@ -2051,6 +2058,7 @@ BattleScript_EffectChangeTypeOnItem:
|
|||||||
BattleScript_EffectFusionCombo:
|
BattleScript_EffectFusionCombo:
|
||||||
BattleScript_EffectRevelationDance:
|
BattleScript_EffectRevelationDance:
|
||||||
BattleScript_EffectBelch:
|
BattleScript_EffectBelch:
|
||||||
|
BattleScript_EffectBodyPress:
|
||||||
|
|
||||||
BattleScript_HitFromAtkCanceler::
|
BattleScript_HitFromAtkCanceler::
|
||||||
attackcanceler
|
attackcanceler
|
||||||
@ -4189,6 +4197,15 @@ BattleScript_NotAffected::
|
|||||||
waitmessage B_WAIT_TIME_LONG
|
waitmessage B_WAIT_TIME_LONG
|
||||||
goto BattleScript_MoveEnd
|
goto BattleScript_MoveEnd
|
||||||
|
|
||||||
|
BattleScript_NotAffectedAbilityPopUp::
|
||||||
|
copybyte gBattlerAbility, gBattlerTarget
|
||||||
|
pause B_WAIT_TIME_SHORT
|
||||||
|
call BattleScript_AbilityPopUp
|
||||||
|
orhalfword gMoveResultFlags, MOVE_RESULT_DOESNT_AFFECT_FOE
|
||||||
|
resultmessage
|
||||||
|
waitmessage B_WAIT_TIME_LONG
|
||||||
|
goto BattleScript_MoveEnd
|
||||||
|
|
||||||
BattleScript_EffectUproar::
|
BattleScript_EffectUproar::
|
||||||
attackcanceler
|
attackcanceler
|
||||||
accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
|
accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
|
||||||
@ -7403,6 +7420,18 @@ BattleScript_AbilityCuredStatus::
|
|||||||
updatestatusicon BS_SCRIPTING
|
updatestatusicon BS_SCRIPTING
|
||||||
return
|
return
|
||||||
|
|
||||||
|
BattleScript_BattlerShookOffTaunt::
|
||||||
|
call BattleScript_AbilityPopUp
|
||||||
|
printstring STRINGID_PKMNSHOOKOFFTHETAUNT
|
||||||
|
waitmessage B_WAIT_TIME_LONG
|
||||||
|
return
|
||||||
|
|
||||||
|
BattleScript_BattlerGotOverItsInfatuation::
|
||||||
|
call BattleScript_AbilityPopUp
|
||||||
|
printstring STRINGID_PKMNGOTOVERITSINFATUATION
|
||||||
|
waitmessage B_WAIT_TIME_LONG
|
||||||
|
return
|
||||||
|
|
||||||
BattleScript_IgnoresWhileAsleep::
|
BattleScript_IgnoresWhileAsleep::
|
||||||
printstring STRINGID_PKMNIGNORESASLEEP
|
printstring STRINGID_PKMNIGNORESASLEEP
|
||||||
waitmessage B_WAIT_TIME_LONG
|
waitmessage B_WAIT_TIME_LONG
|
||||||
|
@ -239,8 +239,35 @@ struct AI_SavedBattleMon
|
|||||||
u16 species;
|
u16 species;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct AiLogicData
|
||||||
|
{
|
||||||
|
//attacker data
|
||||||
|
u16 atkAbility;
|
||||||
|
u16 atkItem;
|
||||||
|
u16 atkHoldEffect;
|
||||||
|
u8 atkParam;
|
||||||
|
u16 atkSpecies;
|
||||||
|
// target data
|
||||||
|
u16 defAbility;
|
||||||
|
u16 defItem;
|
||||||
|
u16 defHoldEffect;
|
||||||
|
u8 defParam;
|
||||||
|
u16 defSpecies;
|
||||||
|
// attacker partner data
|
||||||
|
u8 battlerAtkPartner;
|
||||||
|
u16 partnerMove;
|
||||||
|
u16 atkPartnerAbility;
|
||||||
|
u16 atkPartnerHoldEffect;
|
||||||
|
bool32 targetSameSide;
|
||||||
|
// target partner data
|
||||||
|
u8 battlerDefPartner;
|
||||||
|
u16 defPartnerAbility;
|
||||||
|
u16 defPartnerHoldEffect;
|
||||||
|
};
|
||||||
|
|
||||||
struct AI_ThinkingStruct
|
struct AI_ThinkingStruct
|
||||||
{
|
{
|
||||||
|
struct AiLogicData data;
|
||||||
u8 aiState;
|
u8 aiState;
|
||||||
u8 movesetIndex;
|
u8 movesetIndex;
|
||||||
u16 moveConsidered;
|
u16 moveConsidered;
|
||||||
@ -293,11 +320,14 @@ struct BattleResources
|
|||||||
struct StatsArray* beforeLvlUp;
|
struct StatsArray* beforeLvlUp;
|
||||||
struct AI_ThinkingStruct *ai;
|
struct AI_ThinkingStruct *ai;
|
||||||
struct BattleHistory *battleHistory;
|
struct BattleHistory *battleHistory;
|
||||||
struct BattleScriptsStack *AI_ScriptsStack;
|
|
||||||
u8 bufferA[MAX_BATTLERS_COUNT][0x200];
|
u8 bufferA[MAX_BATTLERS_COUNT][0x200];
|
||||||
u8 bufferB[MAX_BATTLERS_COUNT][0x200];
|
u8 bufferB[MAX_BATTLERS_COUNT][0x200];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define AI_THINKING_STRUCT ((struct AI_ThinkingStruct *)(gBattleResources->ai))
|
||||||
|
#define AI_DATA ((struct AiLogicData *)(&gBattleResources->ai->data))
|
||||||
|
#define BATTLE_HISTORY ((struct BattleHistory *)(gBattleResources->battleHistory))
|
||||||
|
|
||||||
struct BattleResults
|
struct BattleResults
|
||||||
{
|
{
|
||||||
u8 playerFaintCounter; // 0x0
|
u8 playerFaintCounter; // 0x0
|
||||||
|
30
include/battle_ai_main.h
Normal file
30
include/battle_ai_main.h
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
#ifndef GUARD_BATTLE_AI_MAIN_H
|
||||||
|
#define GUARD_BATTLE_AI_MAIN_H
|
||||||
|
|
||||||
|
// return values for BattleAI_ChooseMoveOrAction
|
||||||
|
// 0 - 3 are move idx
|
||||||
|
#define AI_CHOICE_FLEE 4
|
||||||
|
#define AI_CHOICE_WATCH 5
|
||||||
|
#define AI_CHOICE_SWITCH 7
|
||||||
|
|
||||||
|
#define RETURN_SCORE_PLUS(val) \
|
||||||
|
{ \
|
||||||
|
score += val; \
|
||||||
|
return score; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define RETURN_SCORE_MINUS(val) \
|
||||||
|
{ \
|
||||||
|
score -= val; \
|
||||||
|
return score; \
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void BattleAI_SetupItems(void);
|
||||||
|
void BattleAI_SetupFlags(void);
|
||||||
|
void BattleAI_SetupAIData(u8 defaultScoreMoves);
|
||||||
|
u8 BattleAI_ChooseMoveOrAction(void);
|
||||||
|
|
||||||
|
extern u8 sBattler_AI;
|
||||||
|
|
||||||
|
#endif // GUARD_BATTLE_AI_MAIN_H
|
@ -1,27 +0,0 @@
|
|||||||
#ifndef GUARD_BATTLE_AI_SCRIPT_COMMANDS_H
|
|
||||||
#define GUARD_BATTLE_AI_SCRIPT_COMMANDS_H
|
|
||||||
|
|
||||||
// return values for BattleAI_ChooseMoveOrAction
|
|
||||||
// 0 - 3 are move idx
|
|
||||||
#define AI_CHOICE_FLEE 4
|
|
||||||
#define AI_CHOICE_WATCH 5
|
|
||||||
#define AI_CHOICE_SWITCH 7
|
|
||||||
|
|
||||||
s32 AI_CalcDamage(u16 move, u8 battlerAtk, u8 battlerDef);
|
|
||||||
s32 AI_CalcPartyMonDamage(u16 move, u8 battlerAtk, u8 battlerDef, struct Pokemon *mon);
|
|
||||||
u16 AI_GetTypeEffectiveness(u16 move, u8 battlerAtk, u8 battlerDef);
|
|
||||||
void BattleAI_SetupItems(void);
|
|
||||||
void BattleAI_SetupFlags(void);
|
|
||||||
void BattleAI_SetupAIData(u8 defaultScoreMoves);
|
|
||||||
u8 BattleAI_ChooseMoveOrAction(void);
|
|
||||||
bool32 IsTruantMonVulnerable(u32 battlerAI, u32 opposingBattler);
|
|
||||||
bool32 IsBattlerAIControlled(u32 battlerId);
|
|
||||||
void ClearBattlerMoveHistory(u8 battlerId);
|
|
||||||
void RecordLastUsedMoveBy(u32 battlerId, u32 move);
|
|
||||||
void RecordKnownMove(u8 battlerId, u32 move);
|
|
||||||
void RecordAbilityBattle(u8 battlerId, u16 abilityId);
|
|
||||||
void ClearBattlerAbilityHistory(u8 battlerId);
|
|
||||||
void RecordItemEffectBattle(u8 battlerId, u8 itemEffect);
|
|
||||||
void ClearBattlerItemEffectHistory(u8 battlerId);
|
|
||||||
|
|
||||||
#endif // GUARD_BATTLE_AI_SCRIPT_COMMANDS_H
|
|
@ -34,5 +34,6 @@ enum {
|
|||||||
void GetAIPartyIndexes(u32 battlerId, s32 *firstId, s32 *lastId);
|
void GetAIPartyIndexes(u32 battlerId, s32 *firstId, s32 *lastId);
|
||||||
void AI_TrySwitchOrUseItem(void);
|
void AI_TrySwitchOrUseItem(void);
|
||||||
u8 GetMostSuitableMonToSwitchInto(void);
|
u8 GetMostSuitableMonToSwitchInto(void);
|
||||||
|
bool32 ShouldSwitch(void);
|
||||||
|
|
||||||
#endif // GUARD_BATTLE_AI_SWITCH_ITEMS_H
|
#endif // GUARD_BATTLE_AI_SWITCH_ITEMS_H
|
||||||
|
168
include/battle_ai_util.h
Normal file
168
include/battle_ai_util.h
Normal file
@ -0,0 +1,168 @@
|
|||||||
|
#ifndef GUARD_BATTLE_AI_UTIL_H
|
||||||
|
#define GUARD_BATTLE_AI_UTIL_H
|
||||||
|
|
||||||
|
// for IsAiFaster
|
||||||
|
#define AI_CHECK_FASTER 0 // if_user_faster
|
||||||
|
#define AI_CHECK_SLOWER 1 // if_target_faster
|
||||||
|
|
||||||
|
#define FOE(battler) ((battler ^ BIT_SIDE) & BIT_SIDE)
|
||||||
|
|
||||||
|
bool32 AI_RandLessThan(u8 val);
|
||||||
|
void RecordLastUsedMoveByTarget(void);
|
||||||
|
bool32 IsBattlerAIControlled(u32 battlerId);
|
||||||
|
void ClearBattlerMoveHistory(u8 battlerId);
|
||||||
|
void RecordLastUsedMoveBy(u32 battlerId, u32 move);
|
||||||
|
void RecordKnownMove(u8 battlerId, u32 move);
|
||||||
|
void RecordAbilityBattle(u8 battlerId, u16 abilityId);
|
||||||
|
void ClearBattlerAbilityHistory(u8 battlerId);
|
||||||
|
void RecordItemEffectBattle(u8 battlerId, u8 itemEffect);
|
||||||
|
void ClearBattlerItemEffectHistory(u8 battlerId);
|
||||||
|
void SaveBattlerData(u8 battlerId);
|
||||||
|
void SetBattlerData(u8 battlerId);
|
||||||
|
void RestoreBattlerData(u8 battlerId);
|
||||||
|
|
||||||
|
u32 GetTotalBaseStat(u32 species);
|
||||||
|
bool32 IsTruantMonVulnerable(u32 battlerAI, u32 opposingBattler);
|
||||||
|
bool32 AtMaxHp(u8 battler);
|
||||||
|
u32 GetHealthPercentage(u8 battler);
|
||||||
|
bool32 IsBattlerTrapped(u8 battler, bool8 switching);
|
||||||
|
bool32 IsAiFaster(u8 battler);
|
||||||
|
bool32 CanTargetFaintAi(u8 battlerDef, u8 battlerAtk);
|
||||||
|
bool32 CanMoveFaintBattler(u16 move, u8 battlerDef, u8 battlerAtk, u8 nHits);
|
||||||
|
bool32 CanTargetFaintAiWithMod(u8 battlerDef, u8 battlerAtk, s32 hpMod, s32 dmgMod);
|
||||||
|
s32 AI_GetAbility(u32 battlerId);
|
||||||
|
u16 AI_GetHoldEffect(u32 battlerId);
|
||||||
|
u32 AI_GetMoveAccuracy(u8 battlerAtk, u8 battlerDef, u16 atkAbility, u16 defAbility, u8 atkHoldEffect, u8 defHoldEffect, u16 move);
|
||||||
|
bool32 DoesBattlerIgnoreAbilityChecks(u16 atkAbility, u16 move);
|
||||||
|
bool32 AI_WeatherHasEffect(void);
|
||||||
|
bool32 CanAttackerFaintTarget(u8 battlerAtk, u8 battlerDef, u8 index, u8 numHits);
|
||||||
|
bool32 AI_IsBattlerGrounded(u8 battlerId);
|
||||||
|
bool32 HasDamagingMove(u8 battlerId);
|
||||||
|
bool32 HasDamagingMoveOfType(u8 battlerId, u8 type);
|
||||||
|
u32 GetBattlerSecondaryDamage(u8 battlerId);
|
||||||
|
bool32 BattlerWillFaintFromWeather(u8 battler, u16 ability);
|
||||||
|
bool32 BattlerWillFaintFromSecondaryDamage(u8 battler, u16 ability);
|
||||||
|
bool32 ShouldTryOHKO(u8 battlerAtk, u8 battlerDef, u16 atkAbility, u16 defAbility, u32 accuracy, u16 move);
|
||||||
|
bool32 ShouldUseRecoilMove(u8 battlerAtk, u8 battlerDef, u32 recoilDmg, u8 moveIndex);
|
||||||
|
u16 GetBattlerSideSpeedAverage(u8 battler);
|
||||||
|
bool32 ShouldAbsorb(u8 battlerAtk, u8 battlerDef, u16 move, s32 damage);
|
||||||
|
bool32 ShouldRecover(u8 battlerAtk, u8 battlerDef, u16 move, u8 healPercent);
|
||||||
|
bool32 ShouldSetScreen(u8 battlerAtk, u8 battlerDef, u16 moveEffect);
|
||||||
|
bool32 ShouldPivot(u8 battlerAtk, u8 battlerDef, u16 defAbility, u16 move, u8 moveIndex);
|
||||||
|
bool32 IsRecycleEncouragedItem(u16 item);
|
||||||
|
bool32 CanKnockOffItem(u8 battler, u16 item);
|
||||||
|
bool32 IsAbilityOfRating(u16 ability, s8 rating);
|
||||||
|
s8 GetAbilityRating(u16 ability);
|
||||||
|
|
||||||
|
// stat stage checks
|
||||||
|
bool32 AnyStatIsRaised(u8 battlerId);
|
||||||
|
bool32 ShouldLowerStat(u8 battler, u16 battlerAbility, u8 stat);
|
||||||
|
bool32 BattlerStatCanRise(u8 battler, u16 battlerAbility, u8 stat);
|
||||||
|
bool32 AreBattlersStatsMaxed(u8 battler);
|
||||||
|
bool32 BattlerHasAnyStatRaised(u8 battlerId);
|
||||||
|
u32 CountPositiveStatStages(u8 battlerId);
|
||||||
|
u32 CountNegativeStatStages(u8 battlerId);
|
||||||
|
bool32 ShouldLowerAttack(u8 battlerAtk, u8 battlerDef, u16 defAbility);
|
||||||
|
bool32 ShouldLowerDefense(u8 battlerAtk, u8 battlerDef, u16 defAbility);
|
||||||
|
bool32 ShouldLowerSpeed(u8 battlerAtk, u8 battlerDef, u16 defAbility);
|
||||||
|
bool32 ShouldLowerSpAtk(u8 battlerAtk, u8 battlerDef, u16 defAbility);
|
||||||
|
bool32 ShouldLowerSpDef(u8 battlerAtk, u8 battlerDef, u16 defAbility);
|
||||||
|
bool32 ShouldLowerAccuracy(u8 battlerAtk, u8 battlerDef, u16 defAbility);
|
||||||
|
bool32 ShouldLowerEvasion(u8 battlerAtk, u8 battlerDef, u16 defAbility);
|
||||||
|
|
||||||
|
// move checks
|
||||||
|
bool32 IsAffectedByPowder(u8 battler, u16 ability, u16 holdEffect);
|
||||||
|
bool32 MovesWithSplitUnusable(u32 attacker, u32 target, u32 split);
|
||||||
|
s32 AI_CalcDamage(u16 move, u8 battlerAtk, u8 battlerDef);
|
||||||
|
u8 GetMoveDamageResult(u16 move);
|
||||||
|
u32 GetCurrDamageHpPercent(u8 battlerAtk, u8 battlerDef);
|
||||||
|
u16 AI_GetTypeEffectiveness(u16 move, u8 battlerAtk, u8 battlerDef);
|
||||||
|
u8 AI_GetMoveEffectiveness(u16 move, u8 battlerAtk, u8 battlerDef);
|
||||||
|
u16 *GetMovesArray(u32 battler);
|
||||||
|
bool32 IsConfusionMoveEffect(u16 moveEffect);
|
||||||
|
bool32 HasMove(u32 battlerId, u32 move);
|
||||||
|
bool32 HasOnlyMovesWithSplit(u32 battlerId, u32 split, bool32 onlyOffensive);
|
||||||
|
bool32 HasMoveWithSplit(u32 battler, u32 split);
|
||||||
|
bool32 HasMoveWithType(u32 battler, u8 type);
|
||||||
|
bool32 HasMoveWithTypeAndSplit(u32 battler, u8 type, u8 split);
|
||||||
|
bool32 HasMoveEffect(u32 battlerId, u16 moveEffect);
|
||||||
|
bool32 HasMoveWithLowAccuracy(u8, u8, u8, bool32, u16, u16, u16, u16);
|
||||||
|
bool32 TestMoveFlagsInMoveset(u8 battler, u32 flags);
|
||||||
|
bool32 IsAromaVeilProtectedMove(u16 move);
|
||||||
|
bool32 IsNonVolatileStatusMoveEffect(u16 moveEffect);
|
||||||
|
bool32 IsStatLoweringMoveEffect(u16 moveEffect);
|
||||||
|
bool32 IsMoveRedirectionPrevented(u16 move, u16 atkAbility);
|
||||||
|
bool32 IsMoveEncouragedToHit(u8 battlerAtk, u8 battlerDef, u16 move);
|
||||||
|
bool32 IsHazardMoveEffect(u16 moveEffect);
|
||||||
|
bool32 MoveCallsOtherMove(u16 move);
|
||||||
|
bool32 MoveRequiresRecharging(u16 move);
|
||||||
|
bool32 IsInstructBannedMove(u16 move);
|
||||||
|
bool32 IsEncoreEncouragedEffect(u16 moveEffect);
|
||||||
|
void ProtectChecks(u8 battlerAtk, u8 battlerDef, u16 move, u16 predictedMove, s16 *score);
|
||||||
|
bool32 ShouldSetSandstorm(u8 battler, u16 ability, u16 holdEffect);
|
||||||
|
bool32 ShouldSetHail(u8 battler, u16 ability, u16 holdEffect);
|
||||||
|
bool32 ShouldSetRain(u8 battlerAtk, u16 ability, u16 holdEffect);
|
||||||
|
bool32 ShouldSetSun(u8 battlerAtk, u16 atkAbility, u16 holdEffect);
|
||||||
|
bool32 HasSleepMoveWithLowAccuracy(u8 battlerAtk, u8 battlerDef);
|
||||||
|
bool32 IsHealingMoveEffect(u16 effect);
|
||||||
|
bool32 HasHealingEffect(u32 battler);
|
||||||
|
bool32 IsTrappingMoveEffect(u16 effect);
|
||||||
|
bool32 HasTrappingMoveEffect(u8 battler);
|
||||||
|
bool32 ShouldFakeOut(u8 battlerAtk, u8 battlerDef, u16 move);
|
||||||
|
bool32 HasThawingMove(u8 battlerId);
|
||||||
|
bool32 IsStatRaisingEffect(u16 effect);
|
||||||
|
bool32 IsStatLoweringEffect(u16 effect);
|
||||||
|
bool32 IsStatRaisingEffect(u16 effect);
|
||||||
|
bool32 IsAttackBoostMoveEffect(u16 effect);
|
||||||
|
bool32 IsUngroundingEffect(u16 effect);
|
||||||
|
bool32 IsSemiInvulnerable(u8 battlerDef, u16 move);
|
||||||
|
|
||||||
|
// status checks
|
||||||
|
bool32 CanBeBurned(u8 battler, u16 ability);
|
||||||
|
bool32 CanBePoisoned(u8 battler, u16 ability);
|
||||||
|
bool32 CanBeConfused(u8 battler, u16 ability);
|
||||||
|
bool32 CanSleep(u8 battler, u16 ability);
|
||||||
|
bool32 IsBattlerIncapacitated(u8 battler, u16 ability);
|
||||||
|
bool32 AI_CanPutToSleep(u8 battlerAtk, u8 battlerDef, u16 defAbility, u16 move, u16 partnerMove);
|
||||||
|
bool32 ShouldPoisonSelf(u8 battler, u16 ability);
|
||||||
|
bool32 AI_CanPoison(u8 battlerAtk, u8 battlerDef, u16 defAbility, u16 move, u16 partnerMove);
|
||||||
|
bool32 AI_CanParalyze(u8 battlerAtk, u8 battlerDef, u16 defAbility, u16 move, u16 partnerMove);
|
||||||
|
bool32 AI_CanConfuse(u8 battlerAtk, u8 battlerDef, u16 defAbility, u8 battlerAtkPartner, u16 move, u16 partnerMove);
|
||||||
|
bool32 ShouldBurnSelf(u8 battler, u16 ability);
|
||||||
|
bool32 AI_CanBurn(u8 battlerAtk, u8 battlerDef, u16 defAbility, u8 battlerAtkPartner, u16 move, u16 partnerMove);
|
||||||
|
bool32 AI_CanBeInfatuated(u8 battlerAtk, u8 battlerDef, u16 defAbility, u8 atkGender, u8 defGender);
|
||||||
|
bool32 AnyPartyMemberStatused(u8 battlerId, bool32 checkSoundproof);
|
||||||
|
u32 ShouldTryToFlinch(u8 battlerAtk, u8 battlerDef, u16 atkAbility, u16 defAbility, u16 move);
|
||||||
|
bool32 ShouldTrap(u8 battlerAtk, u8 battlerDef, u16 move);
|
||||||
|
bool32 IsWakeupTurn(u8 battler);
|
||||||
|
|
||||||
|
// partner logic
|
||||||
|
u16 GetAllyChosenMove(void);
|
||||||
|
bool32 IsValidDoubleBattle(u8 battlerAtk);
|
||||||
|
bool32 IsTargetingPartner(u8 battlerAtk, u8 battlerDef);
|
||||||
|
bool32 DoesPartnerHaveSameMoveEffect(u8 battlerAtkPartner, u8 battlerDef, u16 move, u16 partnerMove);
|
||||||
|
bool32 PartnerHasSameMoveEffectWithoutTarget(u8 battlerAtkPartner, u16 move, u16 partnerMove);
|
||||||
|
bool32 PartnerMoveEffectIsStatusSameTarget(u8 battlerAtkPartner, u8 battlerDef, u16 partnerMove);
|
||||||
|
bool32 PartnerMoveEffectIsWeather(u8 battlerAtkPartner, u16 partnerMove);
|
||||||
|
bool32 PartnerMoveEffectIsTerrain(u8 battlerAtkPartner, u16 partnerMove);
|
||||||
|
bool32 PartnerMoveIs(u8 battlerAtkPartner, u16 partnerMove, u16 moveCheck);
|
||||||
|
bool32 PartnerMoveIsSameAsAttacker(u8 battlerAtkPartner, u8 battlerDef, u16 move, u16 partnerMove);
|
||||||
|
bool32 PartnerMoveIsSameNoTarget(u8 battlerAtkPartner, u16 move, u16 partnerMove);
|
||||||
|
bool32 ShouldUseWishAromatherapy(u8 battlerAtk, u8 battlerDef, u16 move);
|
||||||
|
|
||||||
|
// party logic
|
||||||
|
s32 AI_CalcPartyMonDamage(u16 move, u8 battlerAtk, u8 battlerDef, struct Pokemon *mon);
|
||||||
|
s32 CountUsablePartyMons(u8 battlerId);
|
||||||
|
bool32 IsPartyFullyHealedExceptBattler(u8 battler);
|
||||||
|
bool32 PartyHasMoveSplit(u8 battlerId, u8 split);
|
||||||
|
bool32 SideHasMoveSplit(u8 battlerId, u8 split);
|
||||||
|
|
||||||
|
// score increases
|
||||||
|
void IncreaseStatUpScore(u8 battlerAtk, u8 battlerDef, u8 statId, s16 *score);
|
||||||
|
void IncreasePoisonScore(u8 battlerAtk, u8 battlerdef, u16 move, s16 *score);
|
||||||
|
void IncreaseBurnScore(u8 battlerAtk, u8 battlerdef, u16 move, s16 *score);
|
||||||
|
void IncreaseParalyzeScore(u8 battlerAtk, u8 battlerDef, u16 move, s16 *score);
|
||||||
|
void IncreaseSleepScore(u8 battlerAtk, u8 battlerDef, u16 move, s16 *score);
|
||||||
|
void IncreaseConfusionScore(u8 battlerAtk, u8 battlerDef, u16 move, s16 *score);
|
||||||
|
|
||||||
|
#endif //GUARD_BATTLE_AI_UTIL_H
|
@ -6,6 +6,12 @@
|
|||||||
#define WINDOW_CLEAR 0x1
|
#define WINDOW_CLEAR 0x1
|
||||||
#define WINDOW_x80 0x80
|
#define WINDOW_x80 0x80
|
||||||
|
|
||||||
|
struct StatFractions
|
||||||
|
{
|
||||||
|
u8 dividend;
|
||||||
|
u8 divisor;
|
||||||
|
};
|
||||||
|
|
||||||
s32 CalcCritChanceStage(u8 battlerAtk, u8 battlerDef, u32 move, bool32 recordAbility);
|
s32 CalcCritChanceStage(u8 battlerAtk, u8 battlerDef, u32 move, bool32 recordAbility);
|
||||||
u32 GetTotalAccuracy(u32 battlerAtk, u32 battlerDef, u32 move);
|
u32 GetTotalAccuracy(u32 battlerAtk, u32 battlerDef, u32 move);
|
||||||
u8 GetBattlerTurnOrderNum(u8 battlerId);
|
u8 GetBattlerTurnOrderNum(u8 battlerId);
|
||||||
@ -27,8 +33,11 @@ u32 IsLeafGuardProtected(u32 battler);
|
|||||||
bool32 IsShieldsDownProtected(u32 battler);
|
bool32 IsShieldsDownProtected(u32 battler);
|
||||||
u32 IsAbilityStatusProtected(u32 battler);
|
u32 IsAbilityStatusProtected(u32 battler);
|
||||||
bool32 TryResetBattlerStatChanges(u8 battler);
|
bool32 TryResetBattlerStatChanges(u8 battler);
|
||||||
|
bool32 CanCamouflage(u8 battlerId);
|
||||||
|
u16 GetNaturePowerMove(void);
|
||||||
|
|
||||||
extern void (* const gBattleScriptingCommandsTable[])(void);
|
extern void (* const gBattleScriptingCommandsTable[])(void);
|
||||||
extern const u8 gBattlePalaceNatureToMoveGroupLikelihood[NUM_NATURES][4];
|
extern const u8 gBattlePalaceNatureToMoveGroupLikelihood[NUM_NATURES][4];
|
||||||
|
extern const struct StatFractions gAccuracyStageRatios[];
|
||||||
|
|
||||||
#endif // GUARD_BATTLE_SCRIPT_COMMANDS_H
|
#endif // GUARD_BATTLE_SCRIPT_COMMANDS_H
|
||||||
|
@ -367,5 +367,8 @@ extern const u8 BattleScript_CustapBerryActivation[];
|
|||||||
extern const u8 BattleScript_MicleBerryActivateEnd2[];
|
extern const u8 BattleScript_MicleBerryActivateEnd2[];
|
||||||
extern const u8 BattleScript_MicleBerryActivateRet[];
|
extern const u8 BattleScript_MicleBerryActivateRet[];
|
||||||
extern const u8 BattleScript_JabocaRowapBerryActivates[];
|
extern const u8 BattleScript_JabocaRowapBerryActivates[];
|
||||||
|
extern const u8 BattleScript_NotAffectedAbilityPopUp[];
|
||||||
|
extern const u8 BattleScript_BattlerShookOffTaunt[];
|
||||||
|
extern const u8 BattleScript_BattlerGotOverItsInfatuation[];
|
||||||
|
|
||||||
#endif // GUARD_BATTLE_SCRIPTS_H
|
#endif // GUARD_BATTLE_SCRIPTS_H
|
||||||
|
@ -131,6 +131,21 @@ void ClearIllusionMon(u32 battlerId);
|
|||||||
bool32 SetIllusionMon(struct Pokemon *mon, u32 battlerId);
|
bool32 SetIllusionMon(struct Pokemon *mon, u32 battlerId);
|
||||||
bool8 ShouldGetStatBadgeBoost(u16 flagId, u8 battlerId);
|
bool8 ShouldGetStatBadgeBoost(u16 flagId, u8 battlerId);
|
||||||
u8 GetBattleMoveSplit(u32 moveId);
|
u8 GetBattleMoveSplit(u32 moveId);
|
||||||
|
bool32 TestMoveFlags(u16 move, u32 flag);
|
||||||
|
struct Pokemon *GetBattlerPartyData(u8 battlerId);
|
||||||
|
bool32 CanFling(u8 battlerId);
|
||||||
|
bool32 IsTelekinesisBannedSpecies(u16 species);
|
||||||
|
bool32 IsHealBlockPreventingMove(u32 battler, u32 move);
|
||||||
|
bool32 IsThawingMove(u8 battlerId, u16 move);
|
||||||
bool32 HasEnoughHpToEatBerry(u32 battlerId, u32 hpFraction, u32 itemId);
|
bool32 HasEnoughHpToEatBerry(u32 battlerId, u32 hpFraction, u32 itemId);
|
||||||
|
|
||||||
|
// ability checks
|
||||||
|
bool32 IsRolePlayBannedAbilityAtk(u16 ability);
|
||||||
|
bool32 IsRolePlayBannedAbility(u16 ability);
|
||||||
|
bool32 IsSkillSwapBannedAbility(u16 ability);
|
||||||
|
bool32 IsWorrySeedBannedAbility(u16 ability);
|
||||||
|
bool32 IsGastroAcidBannedAbility(u16 ability);
|
||||||
|
bool32 IsEntrainmentBannedAbilityAttacker(u16 ability);
|
||||||
|
bool32 IsEntrainmentTargetOrSimpleBeamBannedAbility(u16 ability);
|
||||||
|
|
||||||
#endif // GUARD_BATTLE_UTIL_H
|
#endif // GUARD_BATTLE_UTIL_H
|
||||||
|
@ -220,6 +220,9 @@
|
|||||||
#define SIDE_STATUS_CRAFTY_SHIELD (1 << 20)
|
#define SIDE_STATUS_CRAFTY_SHIELD (1 << 20)
|
||||||
#define SIDE_STATUS_MAT_BLOCK (1 << 21)
|
#define SIDE_STATUS_MAT_BLOCK (1 << 21)
|
||||||
|
|
||||||
|
#define SIDE_STATUS_HAZARDS_ANY (SIDE_STATUS_SPIKES | SIDE_STATUS_STICKY_WEB | SIDE_STATUS_TOXIC_SPIKES | SIDE_STATUS_STEALTH_ROCK)
|
||||||
|
#define SIDE_STATUS_SCREEN_ANY (SIDE_STATUS_REFLECT | SIDE_STATUS_LIGHTSCREEN | SIDE_STATUS_AURORA_VEIL)
|
||||||
|
|
||||||
// Field affecting statuses.
|
// Field affecting statuses.
|
||||||
#define STATUS_FIELD_MAGIC_ROOM (1 << 0)
|
#define STATUS_FIELD_MAGIC_ROOM (1 << 0)
|
||||||
#define STATUS_FIELD_TRICK_ROOM (1 << 1)
|
#define STATUS_FIELD_TRICK_ROOM (1 << 1)
|
||||||
|
@ -35,20 +35,29 @@
|
|||||||
#define MOVE_POWER_GOOD 2 // Similar dmg range with best.
|
#define MOVE_POWER_GOOD 2 // Similar dmg range with best.
|
||||||
#define MOVE_POWER_WEAK 3 // Significantly lower than best and good.
|
#define MOVE_POWER_WEAK 3 // Significantly lower than best and good.
|
||||||
|
|
||||||
// script's table id to bit
|
// AI Flags. Most run specific functions to update score, new flags are used for internal logic in other scripts
|
||||||
#define AI_SCRIPT_CHECK_BAD_MOVE (1 << 0)
|
#define AI_FLAG_CHECK_BAD_MOVE (1 << 0)
|
||||||
#define AI_SCRIPT_TRY_TO_FAINT (1 << 1)
|
#define AI_FLAG_TRY_TO_FAINT (1 << 1)
|
||||||
#define AI_SCRIPT_CHECK_VIABILITY (1 << 2)
|
#define AI_FLAG_CHECK_VIABILITY (1 << 2)
|
||||||
#define AI_SCRIPT_SETUP_FIRST_TURN (1 << 3)
|
#define AI_FLAG_SETUP_FIRST_TURN (1 << 3)
|
||||||
#define AI_SCRIPT_RISKY (1 << 4)
|
#define AI_FLAG_RISKY (1 << 4)
|
||||||
#define AI_SCRIPT_PREFER_STRONGEST_MOVE (1 << 5)
|
#define AI_FLAG_PREFER_STRONGEST_MOVE (1 << 5)
|
||||||
#define AI_SCRIPT_PREFER_BATON_PASS (1 << 6)
|
#define AI_FLAG_PREFER_BATON_PASS (1 << 6)
|
||||||
#define AI_SCRIPT_DOUBLE_BATTLE (1 << 7)
|
#define AI_FLAG_DOUBLE_BATTLE (1 << 7) // removed, split between AI_FLAG_CHECK_BAD_MOVE & AI_FLAG_CHECK_GOOD_MOVE
|
||||||
#define AI_SCRIPT_HP_AWARE (1 << 8)
|
#define AI_FLAG_HP_AWARE (1 << 8)
|
||||||
#define AI_SCRIPT_UNKNOWN (1 << 9)
|
// New, Trainer Handicap Flags
|
||||||
// 10 - 28 are not used
|
#define AI_FLAG_NEGATE_UNAWARE (1 << 9) // AI is NOT aware of negating effects like wonder room, mold breaker, etc
|
||||||
#define AI_SCRIPT_ROAMING (1 << 29)
|
#define AI_FLAG_WILL_SUICIDE (1 << 10) // AI will use explosion / self destruct / final gambit / etc
|
||||||
#define AI_SCRIPT_SAFARI (1 << 30)
|
// New, Trainer Strategy Flags
|
||||||
#define AI_SCRIPT_FIRST_BATTLE (1 << 31)
|
#define AI_FLAG_HELP_PARTNER (1 << 11) // AI can try to help partner. If not set, will tend not to target partner
|
||||||
|
#define AI_FLAG_PREFER_STATUS_MOVES (1 << 12) // AI gets a score bonus for status moves. Should be combined with AI_FLAG_CHECK_BAD_MOVE to prevent using only status moves
|
||||||
|
#define AI_FLAG_STALL (1 << 13) // AI stalls battle and prefers secondary damage/trapping/etc. TODO not finished
|
||||||
|
#define AI_FLAG_SCREENER (1 << 14) // AI prefers screening effects like reflect, mist, etc. TODO unfinished
|
||||||
|
#define AI_FLAG_SMART_SWITCHING (1 << 15) // AI includes a lot more switching checks
|
||||||
|
|
||||||
|
// 'other' ai logic flags
|
||||||
|
#define AI_FLAG_ROAMING (1 << 29)
|
||||||
|
#define AI_FLAG_SAFARI (1 << 30)
|
||||||
|
#define AI_FLAG_FIRST_BATTLE (1 << 31)
|
||||||
|
|
||||||
#endif // GUARD_CONSTANTS_BATTLE_AI_H
|
#endif // GUARD_CONSTANTS_BATTLE_AI_H
|
||||||
|
@ -76,59 +76,59 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Calculation settings
|
// Calculation settings
|
||||||
#define B_CRIT_CHANCE GEN_6 // Chances of a critical hit landing. See CalcCritChanceStage.
|
#define B_CRIT_CHANCE GEN_7 // Chances of a critical hit landing. See CalcCritChanceStage.
|
||||||
#define B_CRIT_MULTIPLIER GEN_6 // In Gen6+, critical hits multiply damage by 1.5 instead of 2.
|
#define B_CRIT_MULTIPLIER GEN_7 // In Gen6+, critical hits multiply damage by 1.5 instead of 2.
|
||||||
#define B_EXP_CATCH GEN_6 // In Gen6+, Pokémon get experience from catching.
|
#define B_EXP_CATCH GEN_7 // In Gen6+, Pokémon get experience from catching.
|
||||||
#define B_TRAINER_EXP_MULTIPLIER GEN_6 // In Gen7+, trainer battles no longer give a 1.5 multiplier to exp gain.
|
#define B_TRAINER_EXP_MULTIPLIER GEN_7 // In Gen7+, trainer battles no longer give a 1.5 multiplier to EXP gain.
|
||||||
#define B_SPLIT_EXP GEN_5 // In Gen6+, all participating mon get full experience.
|
#define B_SPLIT_EXP GEN_7 // In Gen6+, all participating mon get full experience.
|
||||||
#define B_SCALED_EXP GEN_6 // In Gen5 and Gen7+, experience is weighted by level difference.
|
#define B_SCALED_EXP GEN_7 // In Gen5 and Gen7+, experience is weighted by level difference.
|
||||||
#define B_BURN_DAMAGE GEN_6 // In Gen7+, burn damage is 1/16th of max HP instead of 1/8th.
|
#define B_BURN_DAMAGE GEN_7 // In Gen7+, burn damage is 1/16th of max HP instead of 1/8th.
|
||||||
#define B_PARALYSIS_SPEED GEN_6 // In Gen7+, speed is decreased by 50% instead of 75%.
|
#define B_PARALYSIS_SPEED GEN_7 // In Gen7+, Speed is decreased by 50% instead of 75%.
|
||||||
#define B_TERRAIN_TYPE_BOOST GEN_6 // In Gen8+, damage is boosted by 30% instead of 50%.
|
#define B_TERRAIN_TYPE_BOOST GEN_8 // In Gen8, damage is boosted by 30% instead of 50%.
|
||||||
#define B_BINDING_DAMAGE GEN_6 // In Gen6+, binding damage is 1/8 of max HP instead of 1/16. (With Binding Band, 1/6 and 1/8 respectively.)
|
#define B_BINDING_DAMAGE GEN_7 // In Gen6+, binding damage is 1/8 of max HP instead of 1/16. (With Binding Band, 1/6 and 1/8 respectively.)
|
||||||
#define B_CONFUSION_SELF_DMG_CHANCE GEN_6 // In Gen7+, confusion has a 33.3% of self-damage, instead of 50%.
|
#define B_CONFUSION_SELF_DMG_CHANCE GEN_7 // In Gen7+, confusion has a 33.3% of self-damage, instead of 50%.
|
||||||
#define B_MULTI_HIT_CHANCE GEN_6 // In Gen5+, multi-hit moves have different %. See Cmd_setmultihitcounter for values.
|
#define B_MULTI_HIT_CHANCE GEN_7 // In Gen5+, multi-hit moves have different %. See Cmd_setmultihitcounter for values.
|
||||||
#define B_RECOIL_IF_MISS_DMG GEN_6 // In Gen5+, Jump Kick and Hi Jump Kick will always do half of the user's max HP when missing.
|
#define B_RECOIL_IF_MISS_DMG GEN_7 // In Gen5+, Jump Kick and High Jump Kick will always do half of the user's max HP when missing.
|
||||||
#define B_PSYWAVE_DMG GEN_6 // Psywave's damage formula. See Cmd_psywavedamageeffect.
|
#define B_PSYWAVE_DMG GEN_7 // Psywave's damage formula. See Cmd_psywavedamageeffect.
|
||||||
#define B_BADGE_BOOST GEN_6 // In Gen4+, Gym Badges no longer boost a Pokémon's stats
|
#define B_BADGE_BOOST GEN_7 // In Gen4+, Gym Badges no longer boost a Pokémon's stats.
|
||||||
|
|
||||||
// Move data settings
|
// Move data settings
|
||||||
#define B_UPDATED_MOVE_DATA GEN_7 // Updates move data in gBattleMoves, including Power, Accuracy, PP, stat changes, targets, chances of secondary effects, etc.
|
#define B_UPDATED_MOVE_DATA GEN_8 // Updates move data in gBattleMoves, including Power, Accuracy, PP, stat changes, targets, chances of secondary effects, etc.
|
||||||
#define B_PHYSICAL_SPECIAL_SPLIT GEN_6 // In Gen3, the move's type determines if it will do physical or special damage. The split icon in the summary will reflect this.
|
#define B_PHYSICAL_SPECIAL_SPLIT GEN_7 // In Gen3, the move's type determines if it will do physical or special damage. The split icon in the summary will reflect this.
|
||||||
#define B_FELL_STINGER_STAT_RAISE GEN_6 // In Gen7+, it raises Atk by 3 stages instead of 2 if it causes the target to faint.
|
#define B_FELL_STINGER_STAT_RAISE GEN_7 // In Gen7+, it raises Atk by 3 stages instead of 2 if it causes the target to faint.
|
||||||
#define B_KINGS_SHIELD_LOWER_ATK GEN_6 // In Gen7+, it lowers Atk by 1 stage instead of 2 of oponents that hit it.
|
#define B_KINGS_SHIELD_LOWER_ATK GEN_7 // In Gen7+, it lowers Atk by 1 stage instead of 2 of oponents that hit it.
|
||||||
#define B_SPEED_BUFFING_RAPID_SPIN GEN_8 // In Gen8, Rapid Spin raises the user's Speed by 1 stage.
|
#define B_SPEED_BUFFING_RAPID_SPIN GEN_8 // In Gen8, Rapid Spin raises the user's Speed by 1 stage.
|
||||||
#define B_WATER_SHURIKEN_SPLIT GEN_8 // In Gen7, Water Shuriken was changed from Physical to Special.
|
|
||||||
|
|
||||||
// Other move settings
|
// Other move settings
|
||||||
#define B_SOUND_SUBSTITUTE GEN_6 // In Gen6+, sound moves bypass Substitute.
|
#define B_SOUND_SUBSTITUTE GEN_7 // In Gen6+, sound moves bypass Substitute.
|
||||||
#define B_TOXIC_NEVER_MISS GEN_6 // In Gen6+, if Toxic is used by a Poison type, it will never miss.
|
#define B_TOXIC_NEVER_MISS GEN_7 // In Gen6+, if Toxic is used by a Poison-type Pokémon, it will never miss.
|
||||||
#define B_PAYBACK_SWITCH_BOOST GEN_6 // In Gen5+, if the opponent switches out, Payback's damage will no longer be doubled.
|
#define B_PAYBACK_SWITCH_BOOST GEN_7 // In Gen5+, if the opponent switches out, Payback's damage will no longer be doubled.
|
||||||
#define B_BINDING_TURNS GEN_6 // In Gen5+, binding moves last for 4-5 turns instead of 2-5 turns. (With Grip Claw, 7 and 5 turns respectively.)
|
#define B_BINDING_TURNS GEN_7 // In Gen5+, binding moves last for 4-5 turns instead of 2-5 turns. (With Grip Claw, 7 and 5 turns respectively.)
|
||||||
#define B_UPROAR_TURNS GEN_6 // In Gen5+, Uproar lasts for 3 turns instead of 2-5 turns.
|
#define B_UPROAR_TURNS GEN_7 // In Gen5+, Uproar lasts for 3 turns instead of 2-5 turns.
|
||||||
#define B_DISABLE_TURNS GEN_6 // Disable's turns. See Cmd_disablelastusedattack.
|
#define B_DISABLE_TURNS GEN_7 // Disable's turns. See Cmd_disablelastusedattack.
|
||||||
#define B_INCINERATE_GEMS GEN_6 // In Gen6+, Incinerate can destroy Gems.
|
#define B_INCINERATE_GEMS GEN_7 // In Gen6+, Incinerate can destroy Gems.
|
||||||
#define B_MINIMIZE_DMG_ACC GEN_6 // In Gen6+, moves that causes double damage to minimized Pokémon will also skip accuracy checks.
|
#define B_MINIMIZE_DMG_ACC GEN_7 // In Gen6+, moves that causes double damage to minimized Pokémon will also skip accuracy checks.
|
||||||
#define B_PP_REDUCED_BY_SPITE GEN_6 // In Gen4+, Spite reduces the foe's last move's PP by 4, instead of 2 to 5.
|
#define B_PP_REDUCED_BY_SPITE GEN_7 // In Gen4+, Spite reduces the foe's last move's PP by 4, instead of 2 to 5.
|
||||||
#define B_CAN_SPITE_FAIL GEN_6 // In Gen4+, Spite can no longer fail if the foe's last move only has 1 remaining PP.
|
#define B_CAN_SPITE_FAIL GEN_7 // In Gen4+, Spite can no longer fail if the foe's last move only has 1 remaining PP.
|
||||||
#define B_CRASH_IF_TARGET_IMMUNE GEN_6 // In Gen4+, The user of Jump Kick or Hi Jump Kick will "keep going and crash" if it attacks a target that is immune to the move.
|
#define B_CRASH_IF_TARGET_IMMUNE GEN_7 // In Gen4+, The user of Jump Kick or High Jump Kick will "keep going and crash" if it attacks a target that is immune to the move.
|
||||||
#define B_TAILWIND_TIMER GEN_5 // In Gen5+, Tailwind lasts 4 turns instead of 3.
|
#define B_TAILWIND_TIMER GEN_7 // In Gen5+, Tailwind lasts 4 turns instead of 3.
|
||||||
#define B_MEMENTO_FAIL GEN_4 // In Gen4+, memento fails if there is no target or if the target is protected or behind substitute. But not if atk/sp.atk are at -6
|
#define B_MEMENTO_FAIL GEN_7 // In Gen4+, Memento fails if there is no target or if the target is protected or behind substitute. But not if Atk/Sp. Atk are at -6.
|
||||||
|
|
||||||
// Ability settings
|
// Ability settings
|
||||||
#define B_ABILITY_WEATHER GEN_6 // In Gen6+, ability-induced weather lasts 5 turns. Before, it lasted until the battle ended or until it was changed by a move.
|
#define B_ABILITY_WEATHER GEN_7 // In Gen6+, ability-induced weather lasts 5 turns. Before, it lasted until the battle ended or until it was changed by a move or a different weather-affecting ability.
|
||||||
#define B_GALE_WINGS GEN_6 // In Gen7+ requires full HP to trigger.
|
#define B_GALE_WINGS GEN_7 // In Gen7+ requires full HP to trigger.
|
||||||
#define B_STANCE_CHANGE_FAIL GEN_7 // In Gen7+, Stance Change fails if the Pokémon is unable to use a move because of confusion, paralysis, etc. In Gen6, it doesn't.
|
#define B_STANCE_CHANGE_FAIL GEN_7 // In Gen7+, Stance Change fails if the Pokémon is unable to use a move because of confusion, paralysis, etc. In Gen6, it doesn't.
|
||||||
#define B_GHOSTS_ESCAPE GEN_6 // In Gen6+, ghosts can escape even when blocked by abilities such as Shadow Tag.
|
#define B_GHOSTS_ESCAPE GEN_7 // In Gen6+, Ghost-type Pokémon can escape even when blocked by abilities such as Shadow Tag.
|
||||||
#define B_MOODY_ACC_EVASION GEN_6 // In Gen8+, Moody CANNOT raise Accuray and Evasion any more.
|
#define B_MOODY_ACC_EVASION GEN_8 // In Gen8, Moody CANNOT raise Accuracy and Evasion anymore.
|
||||||
#define B_FLASH_FIRE_FROZEN GEN_6 // In Gen5+, Flash Fire can trigger even when frozen, when it couldn't before.
|
#define B_FLASH_FIRE_FROZEN GEN_7 // In Gen5+, Flash Fire can trigger even when frozen, when it couldn't before.
|
||||||
#define B_SYNCHRONIZE_NATURE GEN_6 // In Gen8+, if the Pokémon with Synchronize is leading the party, it's 100% guaranteed that wild Pokémon will have the same ability, as opposed to 50% previously.
|
#define B_SYNCHRONIZE_NATURE GEN_8 // In Gen8, if the Pokémon with Synchronize is leading the party, it's 100% guaranteed that wild Pokémon will have the same ability, as opposed to 50% previously.
|
||||||
#define B_UPDATED_INTIMIDATE GEN_8 // In Gen8, Intimidate doesn't work on opponents with the Inner Focus, Scrappy, Own Tempo or Oblivious abilities.
|
#define B_UPDATED_INTIMIDATE GEN_8 // In Gen8, Intimidate doesn't work on opponents with the Inner Focus, Scrappy, Own Tempo or Oblivious abilities.
|
||||||
|
|
||||||
// Item settings
|
// Item settings
|
||||||
#define B_HP_BERRIES GEN_6 // In Gen4+, berries which restore hp activate immediately after hp drops to half. In gen3, the effect occurs at the end of the turn.
|
#define B_HP_BERRIES GEN_7 // In Gen4+, berries which restore hp activate immediately after HP drops to half. In Gen3, the effect occurs at the end of the turn.
|
||||||
#define B_BERRIES_INSTANT GEN_6 // In Gen4+, most berries activate on battle start/switch-in if applicable. In gen3, they only activate either at the move end or turn end.
|
#define B_BERRIES_INSTANT GEN_7 // In Gen4+, most berries activate on battle start/switch-in if applicable. In Gen3, they only activate either at the move end or turn end.
|
||||||
#define B_X_ITEMS_BUFF GEN_7 // In Gen7+, the X Items raise a stat by 2 stages instead of 1.
|
#define B_X_ITEMS_BUFF GEN_7 // In Gen7+, the X Items raise a stat by 2 stages instead of 1.
|
||||||
|
#define B_MENTAL_HERB GEN_5 // In Gen5+, mental herb cures Taunt, Encore, Heal Block, and Disable
|
||||||
|
|
||||||
// Flag settings
|
// Flag settings
|
||||||
// To use the following features in scripting, replace the 0s with the flag ID you're assigning it to.
|
// To use the following features in scripting, replace the 0s with the flag ID you're assigning it to.
|
||||||
@ -153,10 +153,10 @@
|
|||||||
|
|
||||||
// Other
|
// Other
|
||||||
#define B_DOUBLE_WILD_CHANCE 0 // % chance of encountering two Pokémon in a Wild Encounter.
|
#define B_DOUBLE_WILD_CHANCE 0 // % chance of encountering two Pokémon in a Wild Encounter.
|
||||||
#define B_SLEEP_TURNS GEN_6 // In Gen5+, sleep lasts for 1-3 turns instead of 2-5 turns.
|
#define B_SLEEP_TURNS GEN_7 // In Gen5+, sleep lasts for 1-3 turns instead of 2-5 turns.
|
||||||
#define B_PARALYZE_ELECTRIC GEN_6 // In Gen6+, Electric-type Pokémon can't be paralyzed.
|
#define B_PARALYZE_ELECTRIC GEN_7 // In Gen6+, Electric-type Pokémon can't be paralyzed.
|
||||||
#define B_POWDER_GRASS GEN_6 // In Gen6+, Grass-type Pokémon are immune to powder and spore moves.
|
#define B_POWDER_GRASS GEN_7 // In Gen6+, Grass-type Pokémon are immune to powder and spore moves.
|
||||||
#define B_STEEL_RESISTANCES GEN_6 // In Gen6+, Steel-type Pokémon are no longer resistant to Dark and Ghost moves.
|
#define B_STEEL_RESISTANCES GEN_7 // In Gen6+, Steel-type Pokémon are no longer resistant to Dark-type and Ghost-type moves.
|
||||||
#define B_THUNDERSTORM_TERRAIN TRUE // If TRUE, overworld Thunderstorm generates Rain and Electric Terrain as in Gen 8.
|
#define B_THUNDERSTORM_TERRAIN TRUE // If TRUE, overworld Thunderstorm generates Rain and Electric Terrain as in Gen 8.
|
||||||
|
|
||||||
// Animation Settings
|
// Animation Settings
|
||||||
@ -176,8 +176,8 @@
|
|||||||
#define B_NEW_IMPACT_PALETTE FALSE // If set to TRUE, it updates the basic 'hit' palette.
|
#define B_NEW_IMPACT_PALETTE FALSE // If set to TRUE, it updates the basic 'hit' palette.
|
||||||
#define B_NEW_SURF_PARTICLE_PALETTE FALSE // If set to TRUE, it updates Surf's wave palette.
|
#define B_NEW_SURF_PARTICLE_PALETTE FALSE // If set to TRUE, it updates Surf's wave palette.
|
||||||
|
|
||||||
#define B_HIDE_HEALTHBOXES_DURING_ANIMS TRUE // If set to TRUE, hides healthboxes during move animations.
|
#define B_HIDE_HEALTHBOXES_DURING_ANIMS TRUE // If set to TRUE, hides healthboxes during move animations.
|
||||||
#define B_TERRAIN_BG_CHANGE TRUE // If set to TRUE, terrain moves permanently change the default battle background until the effect fades.
|
#define B_TERRAIN_BG_CHANGE TRUE // If set to TRUE, terrain moves permanently change the default battle background until the effect fades.
|
||||||
#define B_ENABLE_DEBUG TRUE // If set to TRUE, enables a debug menu to use in battles by pressing the Select button.
|
#define B_ENABLE_DEBUG TRUE // If set to TRUE, enables a debug menu to use in battles by pressing the Select button.
|
||||||
|
|
||||||
#endif // GUARD_CONSTANTS_BATTLE_CONFIG_H
|
#endif // GUARD_CONSTANTS_BATTLE_CONFIG_H
|
||||||
|
@ -351,7 +351,9 @@
|
|||||||
#define EFFECT_FAIRY_LOCK 345
|
#define EFFECT_FAIRY_LOCK 345
|
||||||
#define EFFECT_ALLY_SWITCH 346
|
#define EFFECT_ALLY_SWITCH 346
|
||||||
#define EFFECT_SLEEP_HIT 347 // Relic Song
|
#define EFFECT_SLEEP_HIT 347 // Relic Song
|
||||||
|
#define EFFECT_ATTACKER_DEFENSE_DOWN_HIT 348
|
||||||
|
#define EFFECT_BODY_PRESS 349
|
||||||
|
|
||||||
#define NUM_BATTLE_MOVE_EFFECTS 348
|
#define NUM_BATTLE_MOVE_EFFECTS 350
|
||||||
|
|
||||||
#endif // GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H
|
#endif // GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H
|
||||||
|
@ -568,8 +568,10 @@
|
|||||||
#define STRINGID_CURIOUSMEDICINEENTERS 564
|
#define STRINGID_CURIOUSMEDICINEENTERS 564
|
||||||
#define STRINGID_CANACTFASTERTHANKSTO 565
|
#define STRINGID_CANACTFASTERTHANKSTO 565
|
||||||
#define STRINGID_MICLEBERRYACTIVATES 566
|
#define STRINGID_MICLEBERRYACTIVATES 566
|
||||||
|
#define STRINGID_PKMNSHOOKOFFTHETAUNT 567
|
||||||
#define BATTLESTRINGS_COUNT 567
|
#define STRINGID_PKMNGOTOVERITSINFATUATION 568
|
||||||
|
|
||||||
|
#define BATTLESTRINGS_COUNT 569
|
||||||
|
|
||||||
// The below IDs are all indexes into battle message tables,
|
// The below IDs are all indexes into battle message tables,
|
||||||
// used to determine which of a set of messages to print.
|
// used to determine which of a set of messages to print.
|
||||||
|
@ -110,37 +110,46 @@
|
|||||||
#define HOLD_EFFECT_ROWAP_BERRY 104
|
#define HOLD_EFFECT_ROWAP_BERRY 104
|
||||||
#define HOLD_EFFECT_KEE_BERRY 105
|
#define HOLD_EFFECT_KEE_BERRY 105
|
||||||
#define HOLD_EFFECT_MARANGA_BERRY 106
|
#define HOLD_EFFECT_MARANGA_BERRY 106
|
||||||
|
#define HOLD_EFFECT_PLATE 107
|
||||||
|
|
||||||
// Gen5 hold effects
|
// Gen5 hold effects
|
||||||
#define HOLD_EFFECT_FLOAT_STONE 115
|
#define HOLD_EFFECT_FLOAT_STONE 117
|
||||||
#define HOLD_EFFECT_EVIOLITE 116
|
#define HOLD_EFFECT_EVIOLITE 118
|
||||||
#define HOLD_EFFECT_ASSAULT_VEST 117
|
#define HOLD_EFFECT_ASSAULT_VEST 119
|
||||||
#define HOLD_EFFECT_DRIVE 118
|
#define HOLD_EFFECT_DRIVE 120
|
||||||
#define HOLD_EFFECT_GEMS 119
|
#define HOLD_EFFECT_GEMS 121
|
||||||
#define HOLD_EFFECT_ROCKY_HELMET 120
|
#define HOLD_EFFECT_ROCKY_HELMET 122
|
||||||
#define HOLD_EFFECT_AIR_BALLOON 121
|
#define HOLD_EFFECT_AIR_BALLOON 123
|
||||||
#define HOLD_EFFECT_RED_CARD 122
|
#define HOLD_EFFECT_RED_CARD 124
|
||||||
#define HOLD_EFFECT_RING_TARGET 123
|
#define HOLD_EFFECT_RING_TARGET 125
|
||||||
#define HOLD_EFFECT_BINDING_BAND 124
|
#define HOLD_EFFECT_BINDING_BAND 126
|
||||||
#define HOLD_EFFECT_EJECT_BUTTON 125
|
#define HOLD_EFFECT_EJECT_BUTTON 127
|
||||||
#define HOLD_EFFECT_ABSORB_BULB 126
|
#define HOLD_EFFECT_ABSORB_BULB 128
|
||||||
#define HOLD_EFFECT_CELL_BATTERY 127
|
#define HOLD_EFFECT_CELL_BATTERY 129
|
||||||
|
|
||||||
// Gen6 hold effects
|
// Gen6 hold effects
|
||||||
#define HOLD_EFFECT_FAIRY_POWER 129
|
#define HOLD_EFFECT_FAIRY_POWER 139
|
||||||
#define HOLD_EFFECT_MEGA_STONE 130
|
#define HOLD_EFFECT_MEGA_STONE 140
|
||||||
#define HOLD_EFFECT_SAFETY_GOOGLES 131
|
#define HOLD_EFFECT_SAFETY_GOOGLES 141
|
||||||
#define HOLD_EFFECT_LUMINOUS_MOSS 132
|
#define HOLD_EFFECT_LUMINOUS_MOSS 142
|
||||||
#define HOLD_EFFECT_SNOWBALL 133
|
#define HOLD_EFFECT_SNOWBALL 143
|
||||||
#define HOLD_EFFECT_WEAKNESS_POLICY 134
|
#define HOLD_EFFECT_WEAKNESS_POLICY 144
|
||||||
|
|
||||||
// Gen7 hold effects
|
// Gen7 hold effects
|
||||||
#define HOLD_EFFECT_PROTECTIVE_PADS 149
|
#define HOLD_EFFECT_PROTECTIVE_PADS 154
|
||||||
#define HOLD_EFFECT_TERRAIN_EXTENDER 150
|
#define HOLD_EFFECT_TERRAIN_EXTENDER 155
|
||||||
#define HOLD_EFFECT_SEEDS 151
|
#define HOLD_EFFECT_SEEDS 156
|
||||||
#define HOLD_EFFECT_ADRENALINE_ORB 152
|
#define HOLD_EFFECT_ADRENALINE_ORB 157
|
||||||
#define HOLD_EFFECT_MEMORY 153
|
#define HOLD_EFFECT_MEMORY 158
|
||||||
#define HOLD_EFFECT_PLATE 154
|
#define HOLD_EFFECT_Z_CRYSTAL 159
|
||||||
|
|
||||||
|
// Gen8 hold effects
|
||||||
|
#define HOLD_EFFECT_UTILITY_UMBRELLA 169
|
||||||
|
#define HOLD_EFFECT_EJECT_PACK 170
|
||||||
|
#define HOLD_EFFECT_ROOM_SERVICE 171
|
||||||
|
#define HOLD_EFFECT_BLUNDER_POLICY 172
|
||||||
|
#define HOLD_EFFECT_HEAVY_DUTY_BOOTS 173
|
||||||
|
#define HOLD_EFFECT_THROAT_SPRAY 174
|
||||||
|
|
||||||
#define HOLD_EFFECT_CHOICE(holdEffect)((holdEffect == HOLD_EFFECT_CHOICE_BAND || holdEffect == HOLD_EFFECT_CHOICE_SCARF || holdEffect == HOLD_EFFECT_CHOICE_SPECS))
|
#define HOLD_EFFECT_CHOICE(holdEffect)((holdEffect == HOLD_EFFECT_CHOICE_BAND || holdEffect == HOLD_EFFECT_CHOICE_SCARF || holdEffect == HOLD_EFFECT_CHOICE_SPECS))
|
||||||
|
|
||||||
|
@ -312,9 +312,9 @@
|
|||||||
#define FLAG_POWDER (1 << 19)
|
#define FLAG_POWDER (1 << 19)
|
||||||
#define FLAG_TARGET_ABILITY_IGNORED (1 << 20)
|
#define FLAG_TARGET_ABILITY_IGNORED (1 << 20)
|
||||||
#define FLAG_DANCE (1 << 21)
|
#define FLAG_DANCE (1 << 21)
|
||||||
#define FLAG_DMG_IN_AIR (1 << 22) // X2 dmg on air, always hits target on air
|
#define FLAG_DMG_2X_IN_AIR (1 << 22) // If target is in the air, can hit and deal double damage.
|
||||||
#define FLAG_HIT_IN_AIR (1 << 23) // dmg is normal, always hits target on air
|
#define FLAG_DMG_IN_AIR (1 << 23) // If target is in the air, can hit.
|
||||||
#define FLAG_DAMAGE_AIRBORNE (1 << 24) // Makes a Ground type move do 1x damage to flying and levitating targets
|
#define FLAG_DMG_UNGROUNDED_IGNORE_TYPE_IF_FLYING (1 << 24) // Makes a Ground type move do 1x damage to flying and levitating targets
|
||||||
|
|
||||||
// Split defines.
|
// Split defines.
|
||||||
#define SPLIT_PHYSICAL 0x0
|
#define SPLIT_PHYSICAL 0x0
|
||||||
|
@ -74,5 +74,6 @@ ItemUseFunc ItemId_GetFieldFunc(u16 itemId);
|
|||||||
u8 ItemId_GetBattleUsage(u16 itemId);
|
u8 ItemId_GetBattleUsage(u16 itemId);
|
||||||
ItemUseFunc ItemId_GetBattleFunc(u16 itemId);
|
ItemUseFunc ItemId_GetBattleFunc(u16 itemId);
|
||||||
u8 ItemId_GetSecondaryId(u16 itemId);
|
u8 ItemId_GetSecondaryId(u16 itemId);
|
||||||
|
bool32 IsPinchBerryItemEffect(u16 holdEffect);
|
||||||
|
|
||||||
#endif // GUARD_ITEM_H
|
#endif // GUARD_ITEM_H
|
||||||
|
@ -213,7 +213,8 @@ SECTIONS {
|
|||||||
src/decoration.o(.text);
|
src/decoration.o(.text);
|
||||||
src/slot_machine.o(.text);
|
src/slot_machine.o(.text);
|
||||||
src/contest_painting.o(.text);
|
src/contest_painting.o(.text);
|
||||||
src/battle_ai_script_commands.o(.text);
|
src/battle_ai_main.o(.text);
|
||||||
|
src/battle_ai_util.o(.text);
|
||||||
src/trader.o(.text);
|
src/trader.o(.text);
|
||||||
src/starter_choose.o(.text);
|
src/starter_choose.o(.text);
|
||||||
src/wallclock.o(.text);
|
src/wallclock.o(.text);
|
||||||
@ -345,7 +346,6 @@ SECTIONS {
|
|||||||
data/battle_scripts_1.o(script_data);
|
data/battle_scripts_1.o(script_data);
|
||||||
data/field_effect_scripts.o(script_data);
|
data/field_effect_scripts.o(script_data);
|
||||||
data/battle_scripts_2.o(script_data);
|
data/battle_scripts_2.o(script_data);
|
||||||
data/battle_ai_scripts.o(script_data);
|
|
||||||
data/contest_ai_scripts.o(script_data);
|
data/contest_ai_scripts.o(script_data);
|
||||||
data/mystery_event_script_cmd_table.o(script_data);
|
data/mystery_event_script_cmd_table.o(script_data);
|
||||||
} =0
|
} =0
|
||||||
@ -587,7 +587,8 @@ SECTIONS {
|
|||||||
src/decoration.o(.rodata);
|
src/decoration.o(.rodata);
|
||||||
src/slot_machine.o(.rodata);
|
src/slot_machine.o(.rodata);
|
||||||
src/contest_painting.o(.rodata);
|
src/contest_painting.o(.rodata);
|
||||||
src/battle_ai_script_commands.o(.rodata);
|
src/battle_ai_main.o(.rodata);
|
||||||
|
src/battle_ai_util.o(.rodata);
|
||||||
src/trader.o(.rodata);
|
src/trader.o(.rodata);
|
||||||
src/starter_choose.o(.rodata);
|
src/starter_choose.o(.rodata);
|
||||||
src/wallclock.o(.rodata);
|
src/wallclock.o(.rodata);
|
||||||
|
4976
src/battle_ai_main.c
Normal file
4976
src/battle_ai_main.c
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,6 +1,7 @@
|
|||||||
#include "global.h"
|
#include "global.h"
|
||||||
#include "battle.h"
|
#include "battle.h"
|
||||||
#include "battle_ai_script_commands.h"
|
#include "battle_ai_main.h"
|
||||||
|
#include "battle_ai_util.h"
|
||||||
#include "battle_anim.h"
|
#include "battle_anim.h"
|
||||||
#include "battle_controllers.h"
|
#include "battle_controllers.h"
|
||||||
#include "battle_setup.h"
|
#include "battle_setup.h"
|
||||||
@ -416,7 +417,7 @@ static bool8 FindMonWithFlagsAndSuperEffective(u16 flags, u8 moduloPercent)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool8 ShouldSwitch(void)
|
bool32 ShouldSwitch(void)
|
||||||
{
|
{
|
||||||
u8 battlerIn1, battlerIn2;
|
u8 battlerIn1, battlerIn2;
|
||||||
s32 firstId;
|
s32 firstId;
|
||||||
|
3463
src/battle_ai_util.c
Normal file
3463
src/battle_ai_util.c
Normal file
File diff suppressed because it is too large
Load Diff
@ -1,6 +1,6 @@
|
|||||||
#include "global.h"
|
#include "global.h"
|
||||||
#include "battle.h"
|
#include "battle.h"
|
||||||
#include "battle_ai_script_commands.h"
|
#include "battle_ai_main.h"
|
||||||
#include "battle_anim.h"
|
#include "battle_anim.h"
|
||||||
#include "battle_controllers.h"
|
#include "battle_controllers.h"
|
||||||
#include "battle_interface.h"
|
#include "battle_interface.h"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#include "global.h"
|
#include "global.h"
|
||||||
#include "battle.h"
|
#include "battle.h"
|
||||||
#include "battle_ai_script_commands.h"
|
#include "battle_ai_main.h"
|
||||||
#include "battle_anim.h"
|
#include "battle_anim.h"
|
||||||
#include "battle_controllers.h"
|
#include "battle_controllers.h"
|
||||||
#include "battle_interface.h"
|
#include "battle_interface.h"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#include "global.h"
|
#include "global.h"
|
||||||
#include "battle.h"
|
#include "battle.h"
|
||||||
#include "battle_ai_script_commands.h"
|
#include "battle_ai_main.h"
|
||||||
#include "battle_anim.h"
|
#include "battle_anim.h"
|
||||||
#include "battle_arena.h"
|
#include "battle_arena.h"
|
||||||
#include "battle_controllers.h"
|
#include "battle_controllers.h"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#include "global.h"
|
#include "global.h"
|
||||||
#include "battle.h"
|
#include "battle.h"
|
||||||
#include "battle_ai_script_commands.h"
|
#include "battle_ai_main.h"
|
||||||
#include "battle_anim.h"
|
#include "battle_anim.h"
|
||||||
#include "battle_controllers.h"
|
#include "battle_controllers.h"
|
||||||
#include "battle_message.h"
|
#include "battle_message.h"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#include "global.h"
|
#include "global.h"
|
||||||
#include "battle.h"
|
#include "battle.h"
|
||||||
#include "battle_ai_script_commands.h"
|
#include "battle_ai_main.h"
|
||||||
#include "battle_anim.h"
|
#include "battle_anim.h"
|
||||||
#include "battle_controllers.h"
|
#include "battle_controllers.h"
|
||||||
#include "battle_interface.h"
|
#include "battle_interface.h"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#include "global.h"
|
#include "global.h"
|
||||||
#include "battle.h"
|
#include "battle.h"
|
||||||
#include "battle_ai_script_commands.h"
|
#include "battle_ai_main.h"
|
||||||
#include "battle_anim.h"
|
#include "battle_anim.h"
|
||||||
#include "battle_controllers.h"
|
#include "battle_controllers.h"
|
||||||
#include "battle_message.h"
|
#include "battle_message.h"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#include "global.h"
|
#include "global.h"
|
||||||
#include "battle.h"
|
#include "battle.h"
|
||||||
#include "battle_ai_script_commands.h"
|
#include "battle_ai_main.h"
|
||||||
#include "battle_anim.h"
|
#include "battle_anim.h"
|
||||||
#include "battle_controllers.h"
|
#include "battle_controllers.h"
|
||||||
#include "battle_message.h"
|
#include "battle_message.h"
|
||||||
|
@ -18,7 +18,8 @@
|
|||||||
#include "text_window.h"
|
#include "text_window.h"
|
||||||
#include "international_string_util.h"
|
#include "international_string_util.h"
|
||||||
#include "strings.h"
|
#include "strings.h"
|
||||||
#include "battle_ai_script_commands.h"
|
#include "battle_ai_main.h"
|
||||||
|
#include "battle_ai_util.h"
|
||||||
#include "list_menu.h"
|
#include "list_menu.h"
|
||||||
#include "decompress.h"
|
#include "decompress.h"
|
||||||
#include "trainer_pokemon_sprites.h"
|
#include "trainer_pokemon_sprites.h"
|
||||||
@ -32,6 +33,7 @@
|
|||||||
#include "constants/moves.h"
|
#include "constants/moves.h"
|
||||||
#include "constants/items.h"
|
#include "constants/items.h"
|
||||||
#include "constants/rgb.h"
|
#include "constants/rgb.h"
|
||||||
|
#include "constants/hold_effects.h"
|
||||||
|
|
||||||
#define MAX_MODIFY_DIGITS 4
|
#define MAX_MODIFY_DIGITS 4
|
||||||
|
|
||||||
@ -98,6 +100,7 @@ enum
|
|||||||
LIST_ITEM_SIDE_STATUS,
|
LIST_ITEM_SIDE_STATUS,
|
||||||
LIST_ITEM_AI,
|
LIST_ITEM_AI,
|
||||||
LIST_ITEM_AI_MOVES_PTS,
|
LIST_ITEM_AI_MOVES_PTS,
|
||||||
|
LIST_ITEM_AI_INFO,
|
||||||
LIST_ITEM_VARIOUS,
|
LIST_ITEM_VARIOUS,
|
||||||
LIST_ITEM_COUNT
|
LIST_ITEM_COUNT
|
||||||
};
|
};
|
||||||
@ -149,7 +152,11 @@ enum
|
|||||||
VARIOUS_IN_LOVE,
|
VARIOUS_IN_LOVE,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Static Declarations
|
||||||
|
static const u8 *GetHoldEffectName(u16 holdEffect);
|
||||||
|
|
||||||
// const rom data
|
// const rom data
|
||||||
|
static const u8 sText_HoldEffect[] = _("Hold Effect");
|
||||||
static const u8 sText_Ability[] = _("Ability");
|
static const u8 sText_Ability[] = _("Ability");
|
||||||
static const u8 sText_Moves[] = _("Moves");
|
static const u8 sText_Moves[] = _("Moves");
|
||||||
static const u8 sText_Stats[] = _("Stats");
|
static const u8 sText_Stats[] = _("Stats");
|
||||||
@ -222,6 +229,7 @@ static const u8 sText_HpAware[] = _("HP aware");
|
|||||||
static const u8 sText_Unknown[] = _("Unknown");
|
static const u8 sText_Unknown[] = _("Unknown");
|
||||||
static const u8 sText_InLove[] = _("In Love");
|
static const u8 sText_InLove[] = _("In Love");
|
||||||
static const u8 sText_AIMovePts[] = _("AI Move Pts");
|
static const u8 sText_AIMovePts[] = _("AI Move Pts");
|
||||||
|
static const u8 sText_AiKnowledge[] = _("AI Info");
|
||||||
static const u8 sText_EffectOverride[] = _("Effect Override");
|
static const u8 sText_EffectOverride[] = _("Effect Override");
|
||||||
|
|
||||||
static const u8 sText_EmptyString[] = _("");
|
static const u8 sText_EmptyString[] = _("");
|
||||||
@ -319,6 +327,7 @@ static const struct ListMenuItem sMainListItems[] =
|
|||||||
{sText_SideStatus, LIST_ITEM_SIDE_STATUS},
|
{sText_SideStatus, LIST_ITEM_SIDE_STATUS},
|
||||||
{sText_AI, LIST_ITEM_AI},
|
{sText_AI, LIST_ITEM_AI},
|
||||||
{sText_AIMovePts, LIST_ITEM_AI_MOVES_PTS},
|
{sText_AIMovePts, LIST_ITEM_AI_MOVES_PTS},
|
||||||
|
{sText_AiKnowledge, LIST_ITEM_AI_INFO},
|
||||||
{sText_Various, LIST_ITEM_VARIOUS},
|
{sText_Various, LIST_ITEM_VARIOUS},
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -737,9 +746,15 @@ static void Task_ShowAiPoints(u8 taskId)
|
|||||||
{
|
{
|
||||||
if (i != data->aiBattlerId && IsBattlerAlive(i))
|
if (i != data->aiBattlerId && IsBattlerAlive(i))
|
||||||
{
|
{
|
||||||
|
#ifndef POKEMON_EXPANSION
|
||||||
data->aiIconSpriteIds[i] = CreateMonIcon(gBattleMons[i].species,
|
data->aiIconSpriteIds[i] = CreateMonIcon(gBattleMons[i].species,
|
||||||
SpriteCallbackDummy,
|
SpriteCallbackDummy,
|
||||||
95 + (count * 60), 17, 0, 0, FALSE);
|
95 + (count * 60), 17, 0, 0, FALSE);
|
||||||
|
#else
|
||||||
|
data->aiIconSpriteIds[i] = CreateMonIcon(gBattleMons[i].species,
|
||||||
|
SpriteCallbackDummy,
|
||||||
|
95 + (count * 60), 17, 0, 0);
|
||||||
|
#endif
|
||||||
gSprites[data->aiIconSpriteIds[i]].data[0] = i; // battler id
|
gSprites[data->aiIconSpriteIds[i]].data[0] = i; // battler id
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
@ -748,11 +763,19 @@ static void Task_ShowAiPoints(u8 taskId)
|
|||||||
data->aiIconSpriteIds[i] = 0xFF;
|
data->aiIconSpriteIds[i] = 0xFF;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#ifndef POKEMON_EXPANSION
|
||||||
data->aiMonSpriteId = CreateMonPicSprite_HandleDeoxys(gBattleMons[data->aiBattlerId].species,
|
data->aiMonSpriteId = CreateMonPicSprite_HandleDeoxys(gBattleMons[data->aiBattlerId].species,
|
||||||
gBattleMons[data->aiBattlerId].otId,
|
gBattleMons[data->aiBattlerId].otId,
|
||||||
gBattleMons[data->aiBattlerId].personality,
|
gBattleMons[data->aiBattlerId].personality,
|
||||||
TRUE,
|
TRUE,
|
||||||
39, 130, 15, 0xFFFF);
|
39, 130, 15, 0xFFFF);
|
||||||
|
#else
|
||||||
|
data->aiMonSpriteId = CreateMonPicSprite(gBattleMons[data->aiBattlerId].species,
|
||||||
|
gBattleMons[data->aiBattlerId].otId,
|
||||||
|
gBattleMons[data->aiBattlerId].personality,
|
||||||
|
TRUE,
|
||||||
|
39, 130, 15, 0xFFFF);
|
||||||
|
#endif
|
||||||
data->aiViewState++;
|
data->aiViewState++;
|
||||||
break;
|
break;
|
||||||
// Put text
|
// Put text
|
||||||
@ -783,6 +806,128 @@ static void SwitchToAiPointsView(u8 taskId)
|
|||||||
GetStructPtr(taskId)->aiViewState = 0;
|
GetStructPtr(taskId)->aiViewState = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const u8 *const sAiInfoItemNames[] =
|
||||||
|
{
|
||||||
|
sText_Ability,
|
||||||
|
sText_HeldItem,
|
||||||
|
sText_HoldEffect,
|
||||||
|
};
|
||||||
|
static void PutAiInfoText(struct BattleDebugMenu *data)
|
||||||
|
{
|
||||||
|
u32 i, j, count;
|
||||||
|
u8 *text = malloc(0x50);
|
||||||
|
|
||||||
|
FillWindowPixelBuffer(data->aiMovesWindowId, 0x11);
|
||||||
|
|
||||||
|
// item names
|
||||||
|
for (i = 0; i < ARRAY_COUNT(sAiInfoItemNames); i++)
|
||||||
|
{
|
||||||
|
AddTextPrinterParameterized(data->aiMovesWindowId, 1, sAiInfoItemNames[i], 3, i * 15, 0, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
// items info
|
||||||
|
for (i = 0; i < gBattlersCount; i++)
|
||||||
|
{
|
||||||
|
if (GET_BATTLER_SIDE(i) == B_SIDE_PLAYER && IsBattlerAlive(i))
|
||||||
|
{
|
||||||
|
u16 ability = AI_GetAbility(i);
|
||||||
|
u16 holdEffect = AI_GetHoldEffect(i);
|
||||||
|
u16 item = gBattleMons[i].item;
|
||||||
|
u8 x = (i == B_POSITION_PLAYER_LEFT) ? 83 + (i) * 75 : 83 + (i-1) * 75;
|
||||||
|
AddTextPrinterParameterized(data->aiMovesWindowId, 0, gAbilityNames[ability], x, 0, 0, NULL);
|
||||||
|
AddTextPrinterParameterized(data->aiMovesWindowId, 0, ItemId_GetName(item), x, 15, 0, NULL);
|
||||||
|
AddTextPrinterParameterized(data->aiMovesWindowId, 0, GetHoldEffectName(holdEffect), x, 30, 0, NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
CopyWindowToVram(data->aiMovesWindowId, 3);
|
||||||
|
free(text);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void Task_ShowAiKnowledge(u8 taskId)
|
||||||
|
{
|
||||||
|
u32 i, count;
|
||||||
|
struct WindowTemplate winTemplate;
|
||||||
|
struct BattleDebugMenu *data = GetStructPtr(taskId);
|
||||||
|
|
||||||
|
switch (data->aiViewState)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
HideBg(0);
|
||||||
|
ShowBg(1);
|
||||||
|
|
||||||
|
// Swap battler if it's player mon
|
||||||
|
data->aiBattlerId = data->battlerId;
|
||||||
|
while (!IsBattlerAIControlled(data->aiBattlerId))
|
||||||
|
{
|
||||||
|
if (++data->aiBattlerId >= gBattlersCount)
|
||||||
|
data->aiBattlerId = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
LoadMonIconPalettes();
|
||||||
|
for (count = 0, i = 0; i < MAX_BATTLERS_COUNT; i++)
|
||||||
|
{
|
||||||
|
if (GET_BATTLER_SIDE(i) == B_SIDE_PLAYER && IsBattlerAlive(i))
|
||||||
|
{
|
||||||
|
#ifndef POKEMON_EXPANSION
|
||||||
|
data->aiIconSpriteIds[i] = CreateMonIcon(gBattleMons[i].species,
|
||||||
|
SpriteCallbackDummy,
|
||||||
|
95 + (count * 80), 17, 0, 0, FALSE);
|
||||||
|
#else
|
||||||
|
data->aiIconSpriteIds[i] = CreateMonIcon(gBattleMons[i].species,
|
||||||
|
SpriteCallbackDummy,
|
||||||
|
95 + (count * 80), 17, 0, 0);
|
||||||
|
#endif
|
||||||
|
gSprites[data->aiIconSpriteIds[i]].data[0] = i; // battler id
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
data->aiIconSpriteIds[i] = 0xFF;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#ifndef POKEMON_EXPANSION
|
||||||
|
data->aiMonSpriteId = CreateMonPicSprite_HandleDeoxys(gBattleMons[data->aiBattlerId].species,
|
||||||
|
gBattleMons[data->aiBattlerId].otId,
|
||||||
|
gBattleMons[data->aiBattlerId].personality,
|
||||||
|
TRUE,
|
||||||
|
39, 130, 15, 0xFFFF);
|
||||||
|
#else
|
||||||
|
data->aiMonSpriteId = CreateMonPicSprite(gBattleMons[data->aiBattlerId].species,
|
||||||
|
gBattleMons[data->aiBattlerId].otId,
|
||||||
|
gBattleMons[data->aiBattlerId].personality,
|
||||||
|
TRUE,
|
||||||
|
39, 130, 15, 0xFFFF);
|
||||||
|
#endif
|
||||||
|
data->aiViewState++;
|
||||||
|
break;
|
||||||
|
// Put text
|
||||||
|
case 1:
|
||||||
|
winTemplate = CreateWindowTemplate(1, 0, 4, 27, 14, 15, 0x200);
|
||||||
|
data->aiMovesWindowId = AddWindow(&winTemplate);
|
||||||
|
PutWindowTilemap(data->aiMovesWindowId);
|
||||||
|
PutAiInfoText(data);
|
||||||
|
data->aiViewState++;
|
||||||
|
break;
|
||||||
|
// Input
|
||||||
|
case 2:
|
||||||
|
if (gMain.newKeys & (SELECT_BUTTON | B_BUTTON))
|
||||||
|
{
|
||||||
|
SwitchToDebugView(taskId);
|
||||||
|
HideBg(1);
|
||||||
|
ShowBg(0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void SwitchToAiInfoView(u8 taskId)
|
||||||
|
{
|
||||||
|
gTasks[taskId].func = Task_ShowAiKnowledge;
|
||||||
|
GetStructPtr(taskId)->aiViewState = 0;
|
||||||
|
}
|
||||||
|
|
||||||
static void SwitchToDebugView(u8 taskId)
|
static void SwitchToDebugView(u8 taskId)
|
||||||
{
|
{
|
||||||
u32 i;
|
u32 i;
|
||||||
@ -844,6 +989,11 @@ static void Task_DebugMenuProcessInput(u8 taskId)
|
|||||||
SwitchToAiPointsView(taskId);
|
SwitchToAiPointsView(taskId);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
else if (listItemId == LIST_ITEM_AI_INFO && gMain.newKeys & A_BUTTON)
|
||||||
|
{
|
||||||
|
SwitchToAiInfoView(taskId);
|
||||||
|
return;
|
||||||
|
}
|
||||||
data->currentMainListItemId = listItemId;
|
data->currentMainListItemId = listItemId;
|
||||||
|
|
||||||
// Create the secondary menu list.
|
// Create the secondary menu list.
|
||||||
@ -1040,6 +1190,7 @@ static void CreateSecondaryListMenu(struct BattleDebugMenu *data)
|
|||||||
itemsCount = ARRAY_COUNT(sSideStatusListItems);
|
itemsCount = ARRAY_COUNT(sSideStatusListItems);
|
||||||
break;
|
break;
|
||||||
case LIST_ITEM_AI_MOVES_PTS:
|
case LIST_ITEM_AI_MOVES_PTS:
|
||||||
|
case LIST_ITEM_AI_INFO:
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1677,3 +1828,289 @@ static void UpdateMonData(struct BattleDebugMenu *data)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const u8 sText_HoldEffectNone[] = _("????????");
|
||||||
|
static const u8 sText_HoldEffectRestoreHp[] = _("Restore Hp");
|
||||||
|
static const u8 sText_HoldEffectCurePar[] = _("Cure Par");
|
||||||
|
static const u8 sText_HoldEffectCureSlp[] = _("Cure Slp");
|
||||||
|
static const u8 sText_HoldEffectCurePsn[] = _("Cure Psn");
|
||||||
|
static const u8 sText_HoldEffectCureBrn[] = _("Cure Brn");
|
||||||
|
static const u8 sText_HoldEffectCureFrz[] = _("Cure Frz");
|
||||||
|
static const u8 sText_HoldEffectRestorePp[] = _("Restore Pp");
|
||||||
|
static const u8 sText_HoldEffectCureConfusion[] = _("Cure Confusion");
|
||||||
|
static const u8 sText_HoldEffectCureStatus[] = _("Cure Status");
|
||||||
|
static const u8 sText_HoldEffectConfuseSpicy[] = _("Confuse Spicy");
|
||||||
|
static const u8 sText_HoldEffectConfuseDry[] = _("Confuse Dry");
|
||||||
|
static const u8 sText_HoldEffectConfuseSweet[] = _("Confuse Sweet");
|
||||||
|
static const u8 sText_HoldEffectConfuseBitter[] = _("Confuse Bitter");
|
||||||
|
static const u8 sText_HoldEffectConfuseSour[] = _("Confuse Sour");
|
||||||
|
static const u8 sText_HoldEffectAttackUp[] = _("Attack Up");
|
||||||
|
static const u8 sText_HoldEffectDefenseUp[] = _("Defense Up");
|
||||||
|
static const u8 sText_HoldEffectSpeedUp[] = _("Speed Up");
|
||||||
|
static const u8 sText_HoldEffectSpAttackUp[] = _("Sp Attack Up");
|
||||||
|
static const u8 sText_HoldEffectSpDefenseUp[] = _("Sp Defense Up");
|
||||||
|
static const u8 sText_HoldEffectCriticalUp[] = _("Critical Up");
|
||||||
|
static const u8 sText_HoldEffectRandomStatUp[] = _("Random Stat Up");
|
||||||
|
static const u8 sText_HoldEffectEvasionUp[] = _("Evasion Up");
|
||||||
|
static const u8 sText_HoldEffectRestoreStats[] = _("Restore Stats");
|
||||||
|
static const u8 sText_HoldEffectMachoBrace[] = _("Macho Brace");
|
||||||
|
static const u8 sText_HoldEffectExpShare[] = _("Exp Share");
|
||||||
|
static const u8 sText_HoldEffectQuickClaw[] = _("Quick Claw");
|
||||||
|
static const u8 sText_HoldEffectFriendshipUp[] = _("Friendship Up");
|
||||||
|
static const u8 sText_HoldEffectMentalHerb[] = _("Mental Herb");
|
||||||
|
static const u8 sText_HoldEffectChoiceBand[] = _("Choice Band");
|
||||||
|
static const u8 sText_HoldEffectFlinch[] = _("Flinch");
|
||||||
|
static const u8 sText_HoldEffectBugPower[] = _("Bug Power");
|
||||||
|
static const u8 sText_HoldEffectDoublePrize[] = _("Double Prize");
|
||||||
|
static const u8 sText_HoldEffectRepel[] = _("Repel");
|
||||||
|
static const u8 sText_HoldEffectSoulDew[] = _("Soul Dew");
|
||||||
|
static const u8 sText_HoldEffectDeepSeaTooth[] = _("Deep Sea Tooth");
|
||||||
|
static const u8 sText_HoldEffectDeepSeaScale[] = _("Deep Sea Scale");
|
||||||
|
static const u8 sText_HoldEffectCanAlwaysRun[] = _("Can Always Run");
|
||||||
|
static const u8 sText_HoldEffectPreventEvolve[] = _("Prevent Evolve");
|
||||||
|
static const u8 sText_HoldEffectFocusBand[] = _("Focus Band");
|
||||||
|
static const u8 sText_HoldEffectLuckyEgg[] = _("Lucky Egg");
|
||||||
|
static const u8 sText_HoldEffectScopeLens[] = _("Scope Lens");
|
||||||
|
static const u8 sText_HoldEffectSteelPower[] = _("Steel Power");
|
||||||
|
static const u8 sText_HoldEffectLeftovers[] = _("Leftovers");
|
||||||
|
static const u8 sText_HoldEffectDragonScale[] = _("Dragon Scale");
|
||||||
|
static const u8 sText_HoldEffectLightBall[] = _("Light Ball");
|
||||||
|
static const u8 sText_HoldEffectGroundPower[] = _("Ground Power");
|
||||||
|
static const u8 sText_HoldEffectRockPower[] = _("Rock Power");
|
||||||
|
static const u8 sText_HoldEffectGrassPower[] = _("Grass Power");
|
||||||
|
static const u8 sText_HoldEffectDarkPower[] = _("Dark Power");
|
||||||
|
static const u8 sText_HoldEffectFightingPower[] = _("Fighting Power");
|
||||||
|
static const u8 sText_HoldEffectElectricPower[] = _("Electric Power");
|
||||||
|
static const u8 sText_HoldEffectWaterPower[] = _("Water Power");
|
||||||
|
static const u8 sText_HoldEffectFlyingPower[] = _("Flying Power");
|
||||||
|
static const u8 sText_HoldEffectPoisonPower[] = _("Poison Power");
|
||||||
|
static const u8 sText_HoldEffectIcePower[] = _("Ice Power");
|
||||||
|
static const u8 sText_HoldEffectGhostPower[] = _("Ghost Power");
|
||||||
|
static const u8 sText_HoldEffectPsychicPower[] = _("Psychic Power");
|
||||||
|
static const u8 sText_HoldEffectFirePower[] = _("Fire Power");
|
||||||
|
static const u8 sText_HoldEffectDragonPower[] = _("Dragon Power");
|
||||||
|
static const u8 sText_HoldEffectNormalPower[] = _("Normal Power");
|
||||||
|
static const u8 sText_HoldEffectUpGrade[] = _("Up Grade");
|
||||||
|
static const u8 sText_HoldEffectShellBell[] = _("Shell Bell");
|
||||||
|
static const u8 sText_HoldEffectLuckyPunch[] = _("Lucky Punch");
|
||||||
|
static const u8 sText_HoldEffectMetalPowder[] = _("Metal Powder");
|
||||||
|
static const u8 sText_HoldEffectThickClub[] = _("Thick Club");
|
||||||
|
static const u8 sText_HoldEffectStick[] = _("Stick");
|
||||||
|
static const u8 sText_HoldEffectChoiceScarf[] = _("Choice Scarf");
|
||||||
|
static const u8 sText_HoldEffectChoiceSpecs[] = _("Choice Specs");
|
||||||
|
static const u8 sText_HoldEffectDampRock[] = _("Damp Rock");
|
||||||
|
static const u8 sText_HoldEffectGripClaw[] = _("Grip Claw");
|
||||||
|
static const u8 sText_HoldEffectHeatRock[] = _("Heat Rock");
|
||||||
|
static const u8 sText_HoldEffectIcyRock[] = _("Icy Rock");
|
||||||
|
static const u8 sText_HoldEffectLightClay[] = _("Light Clay");
|
||||||
|
static const u8 sText_HoldEffectSmoothRock[] = _("Smooth Rock");
|
||||||
|
static const u8 sText_HoldEffectPowerHerb[] = _("Power Herb");
|
||||||
|
static const u8 sText_HoldEffectBigRoot[] = _("Big Root");
|
||||||
|
static const u8 sText_HoldEffectExpertBelt[] = _("Expert Belt");
|
||||||
|
static const u8 sText_HoldEffectLifeOrb[] = _("Life Orb");
|
||||||
|
static const u8 sText_HoldEffectMetronome[] = _("Metronome");
|
||||||
|
static const u8 sText_HoldEffectMuscleBand[] = _("Muscle Band");
|
||||||
|
static const u8 sText_HoldEffectWideLens[] = _("Wide Lens");
|
||||||
|
static const u8 sText_HoldEffectWiseGlasses[] = _("Wise Glasses");
|
||||||
|
static const u8 sText_HoldEffectZoomLens[] = _("Zoom Lens");
|
||||||
|
static const u8 sText_HoldEffectLaggingTail[] = _("Lagging Tail");
|
||||||
|
static const u8 sText_HoldEffectFocusSash[] = _("Focus Sash");
|
||||||
|
static const u8 sText_HoldEffectFlameOrb[] = _("Flame Orb");
|
||||||
|
static const u8 sText_HoldEffectToxicOrb[] = _("Toxic Orb");
|
||||||
|
static const u8 sText_HoldEffectStickyBarb[] = _("Sticky Barb");
|
||||||
|
static const u8 sText_HoldEffectIronBall[] = _("Iron Ball");
|
||||||
|
static const u8 sText_HoldEffectBlackSludge[] = _("Black Sludge");
|
||||||
|
static const u8 sText_HoldEffectDestinyKnot[] = _("Destiny Knot");
|
||||||
|
static const u8 sText_HoldEffectShedShell[] = _("Shed Shell");
|
||||||
|
static const u8 sText_HoldEffectQuickPowder[] = _("Quick Powder");
|
||||||
|
static const u8 sText_HoldEffectAdamantOrb[] = _("Adamant Orb");
|
||||||
|
static const u8 sText_HoldEffectLustrousOrb[] = _("Lustrous Orb");
|
||||||
|
static const u8 sText_HoldEffectGriseousOrb[] = _("Griseous Orb");
|
||||||
|
static const u8 sText_HoldEffectGracidea[] = _("Gracidea");
|
||||||
|
static const u8 sText_HoldEffectResistBerry[] = _("Resist Berry");
|
||||||
|
static const u8 sText_HoldEffectPowerItem[] = _("Power Item");
|
||||||
|
static const u8 sText_HoldEffectRestorePctHp[] = _("Restore Pct Hp");
|
||||||
|
static const u8 sText_HoldEffectMicleBerry[] = _("Micle Berry");
|
||||||
|
static const u8 sText_HoldEffectCustapBerry[] = _("Custap Berry");
|
||||||
|
static const u8 sText_HoldEffectJabocaBerry[] = _("Jaboca Berry");
|
||||||
|
static const u8 sText_HoldEffectRowapBerry[] = _("Rowap Berry");
|
||||||
|
static const u8 sText_HoldEffectKeeBerry[] = _("Kee Berry");
|
||||||
|
static const u8 sText_HoldEffectMarangaBerry[] = _("Maranga Berry");
|
||||||
|
static const u8 sText_HoldEffectFloatStone[] = _("Float Stone");
|
||||||
|
static const u8 sText_HoldEffectEviolite[] = _("Eviolite");
|
||||||
|
static const u8 sText_HoldEffectAssaultVest[] = _("Assault Vest");
|
||||||
|
static const u8 sText_HoldEffectDrive[] = _("Drive");
|
||||||
|
static const u8 sText_HoldEffectGems[] = _("Gems");
|
||||||
|
static const u8 sText_HoldEffectRockyHelmet[] = _("Rocky Helmet");
|
||||||
|
static const u8 sText_HoldEffectAirBalloon[] = _("Air Balloon");
|
||||||
|
static const u8 sText_HoldEffectRedCard[] = _("Red Card");
|
||||||
|
static const u8 sText_HoldEffectRingTarget[] = _("Ring Target");
|
||||||
|
static const u8 sText_HoldEffectBindingBand[] = _("Binding Band");
|
||||||
|
static const u8 sText_HoldEffectEjectButton[] = _("Eject Button");
|
||||||
|
static const u8 sText_HoldEffectAbsorbBulb[] = _("Absorb Bulb");
|
||||||
|
static const u8 sText_HoldEffectCellBattery[] = _("Cell Battery");
|
||||||
|
static const u8 sText_HoldEffectFairyPower[] = _("Fairy Power");
|
||||||
|
static const u8 sText_HoldEffectMegaStone[] = _("Mega Stone");
|
||||||
|
static const u8 sText_HoldEffectSafetyGoogles[] = _("Safety Googles");
|
||||||
|
static const u8 sText_HoldEffectLuminousMoss[] = _("Luminous Moss");
|
||||||
|
static const u8 sText_HoldEffectSnowball[] = _("Snowball");
|
||||||
|
static const u8 sText_HoldEffectWeaknessPolicy[] = _("Weakness Policy");
|
||||||
|
static const u8 sText_HoldEffectProtectivePads[] = _("Protective Pads");
|
||||||
|
static const u8 sText_HoldEffectTerrainExtender[] = _("Terrain Extender");
|
||||||
|
static const u8 sText_HoldEffectSeeds[] = _("Seeds");
|
||||||
|
static const u8 sText_HoldEffectAdrenalineOrb[] = _("Adrenaline Orb");
|
||||||
|
static const u8 sText_HoldEffectMemory[] = _("Memory");
|
||||||
|
static const u8 sText_HoldEffectPlate[] = _("Plate");
|
||||||
|
static const u8 sText_HoldEffectUtilityUmbrella[] = _("Utility Umbrella");
|
||||||
|
static const u8 sText_HoldEffectEjectPack[] = _("Eject Pack");
|
||||||
|
static const u8 sText_HoldEffectRoomService[] = _("Room Service");
|
||||||
|
static const u8 sText_HoldEffectBlunderPolicy[] = _("Blunder Policy");
|
||||||
|
static const u8 sText_HoldEffectHeavyDutyBoots[] = _("Heavy Duty Boots");
|
||||||
|
static const u8 sText_HoldEffectThroatSpray[] = _("Throat Spray");
|
||||||
|
static const u8 *const sHoldEffectNames[] =
|
||||||
|
{
|
||||||
|
[HOLD_EFFECT_NONE] = sText_HoldEffectNone,
|
||||||
|
[HOLD_EFFECT_RESTORE_HP] = sText_HoldEffectRestoreHp,
|
||||||
|
[HOLD_EFFECT_CURE_PAR] = sText_HoldEffectCurePar,
|
||||||
|
[HOLD_EFFECT_CURE_SLP] = sText_HoldEffectCureSlp,
|
||||||
|
[HOLD_EFFECT_CURE_PSN] = sText_HoldEffectCurePsn,
|
||||||
|
[HOLD_EFFECT_CURE_BRN] = sText_HoldEffectCureBrn,
|
||||||
|
[HOLD_EFFECT_CURE_FRZ] = sText_HoldEffectCureFrz,
|
||||||
|
[HOLD_EFFECT_RESTORE_PP] = sText_HoldEffectRestorePp,
|
||||||
|
[HOLD_EFFECT_CURE_CONFUSION] = sText_HoldEffectCureConfusion,
|
||||||
|
[HOLD_EFFECT_CURE_STATUS] = sText_HoldEffectCureStatus,
|
||||||
|
[HOLD_EFFECT_CONFUSE_SPICY] = sText_HoldEffectConfuseSpicy,
|
||||||
|
[HOLD_EFFECT_CONFUSE_DRY] = sText_HoldEffectConfuseDry,
|
||||||
|
[HOLD_EFFECT_CONFUSE_SWEET] = sText_HoldEffectConfuseSweet,
|
||||||
|
[HOLD_EFFECT_CONFUSE_BITTER] = sText_HoldEffectConfuseBitter,
|
||||||
|
[HOLD_EFFECT_CONFUSE_SOUR] = sText_HoldEffectConfuseSour,
|
||||||
|
[HOLD_EFFECT_ATTACK_UP] = sText_HoldEffectAttackUp,
|
||||||
|
[HOLD_EFFECT_DEFENSE_UP] = sText_HoldEffectDefenseUp,
|
||||||
|
[HOLD_EFFECT_SPEED_UP] = sText_HoldEffectSpeedUp,
|
||||||
|
[HOLD_EFFECT_SP_ATTACK_UP] = sText_HoldEffectSpAttackUp,
|
||||||
|
[HOLD_EFFECT_SP_DEFENSE_UP] = sText_HoldEffectSpDefenseUp,
|
||||||
|
[HOLD_EFFECT_CRITICAL_UP] = sText_HoldEffectCriticalUp,
|
||||||
|
[HOLD_EFFECT_RANDOM_STAT_UP] = sText_HoldEffectRandomStatUp,
|
||||||
|
[HOLD_EFFECT_EVASION_UP] = sText_HoldEffectEvasionUp,
|
||||||
|
[HOLD_EFFECT_RESTORE_STATS] = sText_HoldEffectRestoreStats,
|
||||||
|
[HOLD_EFFECT_MACHO_BRACE] = sText_HoldEffectMachoBrace,
|
||||||
|
[HOLD_EFFECT_EXP_SHARE] = sText_HoldEffectExpShare,
|
||||||
|
[HOLD_EFFECT_QUICK_CLAW] = sText_HoldEffectQuickClaw,
|
||||||
|
[HOLD_EFFECT_FRIENDSHIP_UP] = sText_HoldEffectFriendshipUp,
|
||||||
|
//[HOLD_EFFECT_MENTAL_HERB] = sText_HoldEffectMentalHerb,
|
||||||
|
[HOLD_EFFECT_CHOICE_BAND] = sText_HoldEffectChoiceBand,
|
||||||
|
[HOLD_EFFECT_FLINCH] = sText_HoldEffectFlinch,
|
||||||
|
[HOLD_EFFECT_BUG_POWER] = sText_HoldEffectBugPower,
|
||||||
|
[HOLD_EFFECT_DOUBLE_PRIZE] = sText_HoldEffectDoublePrize,
|
||||||
|
[HOLD_EFFECT_REPEL] = sText_HoldEffectRepel,
|
||||||
|
[HOLD_EFFECT_SOUL_DEW] = sText_HoldEffectSoulDew,
|
||||||
|
[HOLD_EFFECT_DEEP_SEA_TOOTH] = sText_HoldEffectDeepSeaTooth,
|
||||||
|
[HOLD_EFFECT_DEEP_SEA_SCALE] = sText_HoldEffectDeepSeaScale,
|
||||||
|
[HOLD_EFFECT_CAN_ALWAYS_RUN] = sText_HoldEffectCanAlwaysRun,
|
||||||
|
[HOLD_EFFECT_PREVENT_EVOLVE] = sText_HoldEffectPreventEvolve,
|
||||||
|
[HOLD_EFFECT_FOCUS_BAND] = sText_HoldEffectFocusBand,
|
||||||
|
[HOLD_EFFECT_LUCKY_EGG] = sText_HoldEffectLuckyEgg,
|
||||||
|
[HOLD_EFFECT_SCOPE_LENS] = sText_HoldEffectScopeLens,
|
||||||
|
[HOLD_EFFECT_STEEL_POWER] = sText_HoldEffectSteelPower,
|
||||||
|
[HOLD_EFFECT_LEFTOVERS] = sText_HoldEffectLeftovers,
|
||||||
|
[HOLD_EFFECT_DRAGON_SCALE] = sText_HoldEffectDragonScale,
|
||||||
|
[HOLD_EFFECT_LIGHT_BALL] = sText_HoldEffectLightBall,
|
||||||
|
[HOLD_EFFECT_GROUND_POWER] = sText_HoldEffectGroundPower,
|
||||||
|
[HOLD_EFFECT_ROCK_POWER] = sText_HoldEffectRockPower,
|
||||||
|
[HOLD_EFFECT_GRASS_POWER] = sText_HoldEffectGrassPower,
|
||||||
|
[HOLD_EFFECT_DARK_POWER] = sText_HoldEffectDarkPower,
|
||||||
|
[HOLD_EFFECT_FIGHTING_POWER] = sText_HoldEffectFightingPower,
|
||||||
|
[HOLD_EFFECT_ELECTRIC_POWER] = sText_HoldEffectElectricPower,
|
||||||
|
[HOLD_EFFECT_WATER_POWER] = sText_HoldEffectWaterPower,
|
||||||
|
[HOLD_EFFECT_FLYING_POWER] = sText_HoldEffectFlyingPower,
|
||||||
|
[HOLD_EFFECT_POISON_POWER] = sText_HoldEffectPoisonPower,
|
||||||
|
[HOLD_EFFECT_ICE_POWER] = sText_HoldEffectIcePower,
|
||||||
|
[HOLD_EFFECT_GHOST_POWER] = sText_HoldEffectGhostPower,
|
||||||
|
[HOLD_EFFECT_PSYCHIC_POWER] = sText_HoldEffectPsychicPower,
|
||||||
|
[HOLD_EFFECT_FIRE_POWER] = sText_HoldEffectFirePower,
|
||||||
|
[HOLD_EFFECT_DRAGON_POWER] = sText_HoldEffectDragonPower,
|
||||||
|
[HOLD_EFFECT_NORMAL_POWER] = sText_HoldEffectNormalPower,
|
||||||
|
[HOLD_EFFECT_UP_GRADE] = sText_HoldEffectUpGrade,
|
||||||
|
[HOLD_EFFECT_SHELL_BELL] = sText_HoldEffectShellBell,
|
||||||
|
[HOLD_EFFECT_LUCKY_PUNCH] = sText_HoldEffectLuckyPunch,
|
||||||
|
[HOLD_EFFECT_METAL_POWDER] = sText_HoldEffectMetalPowder,
|
||||||
|
[HOLD_EFFECT_THICK_CLUB] = sText_HoldEffectThickClub,
|
||||||
|
[HOLD_EFFECT_STICK] = sText_HoldEffectStick,
|
||||||
|
[HOLD_EFFECT_CHOICE_SCARF] = sText_HoldEffectChoiceScarf,
|
||||||
|
[HOLD_EFFECT_CHOICE_SPECS] = sText_HoldEffectChoiceSpecs,
|
||||||
|
[HOLD_EFFECT_DAMP_ROCK] = sText_HoldEffectDampRock,
|
||||||
|
[HOLD_EFFECT_GRIP_CLAW] = sText_HoldEffectGripClaw,
|
||||||
|
[HOLD_EFFECT_HEAT_ROCK] = sText_HoldEffectHeatRock,
|
||||||
|
[HOLD_EFFECT_ICY_ROCK] = sText_HoldEffectIcyRock,
|
||||||
|
[HOLD_EFFECT_LIGHT_CLAY] = sText_HoldEffectLightClay,
|
||||||
|
[HOLD_EFFECT_SMOOTH_ROCK] = sText_HoldEffectSmoothRock,
|
||||||
|
[HOLD_EFFECT_POWER_HERB] = sText_HoldEffectPowerHerb,
|
||||||
|
[HOLD_EFFECT_BIG_ROOT] = sText_HoldEffectBigRoot,
|
||||||
|
[HOLD_EFFECT_EXPERT_BELT] = sText_HoldEffectExpertBelt,
|
||||||
|
[HOLD_EFFECT_LIFE_ORB] = sText_HoldEffectLifeOrb,
|
||||||
|
[HOLD_EFFECT_METRONOME] = sText_HoldEffectMetronome,
|
||||||
|
[HOLD_EFFECT_MUSCLE_BAND] = sText_HoldEffectMuscleBand,
|
||||||
|
[HOLD_EFFECT_WIDE_LENS] = sText_HoldEffectWideLens,
|
||||||
|
[HOLD_EFFECT_WISE_GLASSES] = sText_HoldEffectWiseGlasses,
|
||||||
|
[HOLD_EFFECT_ZOOM_LENS] = sText_HoldEffectZoomLens,
|
||||||
|
[HOLD_EFFECT_LAGGING_TAIL] = sText_HoldEffectLaggingTail,
|
||||||
|
[HOLD_EFFECT_FOCUS_SASH] = sText_HoldEffectFocusSash,
|
||||||
|
[HOLD_EFFECT_FLAME_ORB] = sText_HoldEffectFlameOrb,
|
||||||
|
[HOLD_EFFECT_TOXIC_ORB] = sText_HoldEffectToxicOrb,
|
||||||
|
[HOLD_EFFECT_STICKY_BARB] = sText_HoldEffectStickyBarb,
|
||||||
|
[HOLD_EFFECT_IRON_BALL] = sText_HoldEffectIronBall,
|
||||||
|
[HOLD_EFFECT_BLACK_SLUDGE] = sText_HoldEffectBlackSludge,
|
||||||
|
[HOLD_EFFECT_DESTINY_KNOT] = sText_HoldEffectDestinyKnot,
|
||||||
|
[HOLD_EFFECT_SHED_SHELL] = sText_HoldEffectShedShell,
|
||||||
|
[HOLD_EFFECT_QUICK_POWDER] = sText_HoldEffectQuickPowder,
|
||||||
|
[HOLD_EFFECT_ADAMANT_ORB] = sText_HoldEffectAdamantOrb,
|
||||||
|
[HOLD_EFFECT_LUSTROUS_ORB] = sText_HoldEffectLustrousOrb,
|
||||||
|
[HOLD_EFFECT_GRISEOUS_ORB] = sText_HoldEffectGriseousOrb,
|
||||||
|
[HOLD_EFFECT_GRACIDEA] = sText_HoldEffectGracidea,
|
||||||
|
[HOLD_EFFECT_RESIST_BERRY] = sText_HoldEffectResistBerry,
|
||||||
|
[HOLD_EFFECT_POWER_ITEM] = sText_HoldEffectPowerItem,
|
||||||
|
[HOLD_EFFECT_RESTORE_PCT_HP] = sText_HoldEffectRestorePctHp,
|
||||||
|
//[HOLD_EFFECT_MICLE_BERRY] = sText_HoldEffectMicleBerry,
|
||||||
|
//[HOLD_EFFECT_CUSTAP_BERRY] = sText_HoldEffectCustapBerry,
|
||||||
|
//[HOLD_EFFECT_JABOCA_BERRY] = sText_HoldEffectJabocaBerry,
|
||||||
|
//[HOLD_EFFECT_ROWAP_BERRY] = sText_HoldEffectRowapBerry,
|
||||||
|
//[HOLD_EFFECT_KEE_BERRY] = sText_HoldEffectKeeBerry,
|
||||||
|
//[HOLD_EFFECT_MARANGA_BERRY] = sText_HoldEffectMarangaBerry,
|
||||||
|
[HOLD_EFFECT_FLOAT_STONE] = sText_HoldEffectFloatStone,
|
||||||
|
[HOLD_EFFECT_EVIOLITE] = sText_HoldEffectEviolite,
|
||||||
|
[HOLD_EFFECT_ASSAULT_VEST] = sText_HoldEffectAssaultVest,
|
||||||
|
[HOLD_EFFECT_DRIVE] = sText_HoldEffectDrive,
|
||||||
|
[HOLD_EFFECT_GEMS] = sText_HoldEffectGems,
|
||||||
|
[HOLD_EFFECT_ROCKY_HELMET] = sText_HoldEffectRockyHelmet,
|
||||||
|
[HOLD_EFFECT_AIR_BALLOON] = sText_HoldEffectAirBalloon,
|
||||||
|
[HOLD_EFFECT_RED_CARD] = sText_HoldEffectRedCard,
|
||||||
|
[HOLD_EFFECT_RING_TARGET] = sText_HoldEffectRingTarget,
|
||||||
|
[HOLD_EFFECT_BINDING_BAND] = sText_HoldEffectBindingBand,
|
||||||
|
[HOLD_EFFECT_EJECT_BUTTON] = sText_HoldEffectEjectButton,
|
||||||
|
[HOLD_EFFECT_ABSORB_BULB] = sText_HoldEffectAbsorbBulb,
|
||||||
|
[HOLD_EFFECT_CELL_BATTERY] = sText_HoldEffectCellBattery,
|
||||||
|
[HOLD_EFFECT_FAIRY_POWER] = sText_HoldEffectFairyPower,
|
||||||
|
[HOLD_EFFECT_MEGA_STONE] = sText_HoldEffectMegaStone,
|
||||||
|
[HOLD_EFFECT_SAFETY_GOOGLES] = sText_HoldEffectSafetyGoogles,
|
||||||
|
[HOLD_EFFECT_LUMINOUS_MOSS] = sText_HoldEffectLuminousMoss,
|
||||||
|
[HOLD_EFFECT_SNOWBALL] = sText_HoldEffectSnowball,
|
||||||
|
[HOLD_EFFECT_WEAKNESS_POLICY] = sText_HoldEffectWeaknessPolicy,
|
||||||
|
[HOLD_EFFECT_PROTECTIVE_PADS] = sText_HoldEffectProtectivePads,
|
||||||
|
[HOLD_EFFECT_TERRAIN_EXTENDER] = sText_HoldEffectTerrainExtender,
|
||||||
|
[HOLD_EFFECT_SEEDS] = sText_HoldEffectSeeds,
|
||||||
|
[HOLD_EFFECT_ADRENALINE_ORB] = sText_HoldEffectAdrenalineOrb,
|
||||||
|
[HOLD_EFFECT_MEMORY] = sText_HoldEffectMemory,
|
||||||
|
[HOLD_EFFECT_PLATE] = sText_HoldEffectPlate,
|
||||||
|
[HOLD_EFFECT_UTILITY_UMBRELLA] = sText_HoldEffectUtilityUmbrella,
|
||||||
|
[HOLD_EFFECT_EJECT_PACK] = sText_HoldEffectEjectPack,
|
||||||
|
[HOLD_EFFECT_ROOM_SERVICE] = sText_HoldEffectRoomService,
|
||||||
|
[HOLD_EFFECT_BLUNDER_POLICY] = sText_HoldEffectBlunderPolicy,
|
||||||
|
[HOLD_EFFECT_HEAVY_DUTY_BOOTS] = sText_HoldEffectHeavyDutyBoots,
|
||||||
|
[HOLD_EFFECT_THROAT_SPRAY] = sText_HoldEffectThroatSpray,
|
||||||
|
};
|
||||||
|
static const u8 *GetHoldEffectName(u16 holdEffect)
|
||||||
|
{
|
||||||
|
if (holdEffect > ARRAY_COUNT(sHoldEffectNames))
|
||||||
|
return sHoldEffectNames[0];
|
||||||
|
return sHoldEffectNames[holdEffect];
|
||||||
|
}
|
||||||
|
@ -877,13 +877,13 @@ u32 GetAiScriptsInBattleFactory(void)
|
|||||||
int challengeNum = gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] / 7;
|
int challengeNum = gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] / 7;
|
||||||
|
|
||||||
if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN)
|
if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN)
|
||||||
return AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY;
|
return AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY;
|
||||||
else if (challengeNum < 2)
|
else if (challengeNum < 2)
|
||||||
return 0;
|
return 0;
|
||||||
else if (challengeNum < 4)
|
else if (challengeNum < 4)
|
||||||
return AI_SCRIPT_CHECK_BAD_MOVE;
|
return AI_FLAG_CHECK_BAD_MOVE;
|
||||||
else
|
else
|
||||||
return AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY;
|
return AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#include "global.h"
|
#include "global.h"
|
||||||
#include "battle.h"
|
#include "battle.h"
|
||||||
#include "battle_controllers.h"
|
#include "battle_controllers.h"
|
||||||
#include "battle_ai_script_commands.h"
|
#include "battle_ai_main.h"
|
||||||
#include "battle_anim.h"
|
#include "battle_anim.h"
|
||||||
#include "constants/battle_anim.h"
|
#include "constants/battle_anim.h"
|
||||||
#include "battle_interface.h"
|
#include "battle_interface.h"
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
#include "global.h"
|
#include "global.h"
|
||||||
#include "battle.h"
|
#include "battle.h"
|
||||||
#include "battle_anim.h"
|
#include "battle_anim.h"
|
||||||
#include "battle_ai_script_commands.h"
|
#include "battle_ai_main.h"
|
||||||
|
#include "battle_ai_util.h"
|
||||||
#include "battle_arena.h"
|
#include "battle_arena.h"
|
||||||
#include "battle_controllers.h"
|
#include "battle_controllers.h"
|
||||||
#include "battle_interface.h"
|
#include "battle_interface.h"
|
||||||
@ -3031,6 +3032,7 @@ void SwitchInClearSetData(void)
|
|||||||
|
|
||||||
ClearBattlerMoveHistory(gActiveBattler);
|
ClearBattlerMoveHistory(gActiveBattler);
|
||||||
ClearBattlerAbilityHistory(gActiveBattler);
|
ClearBattlerAbilityHistory(gActiveBattler);
|
||||||
|
ClearBattlerItemEffectHistory(gActiveBattler);
|
||||||
}
|
}
|
||||||
|
|
||||||
void FaintClearSetData(void)
|
void FaintClearSetData(void)
|
||||||
@ -3119,6 +3121,7 @@ void FaintClearSetData(void)
|
|||||||
|
|
||||||
ClearBattlerMoveHistory(gActiveBattler);
|
ClearBattlerMoveHistory(gActiveBattler);
|
||||||
ClearBattlerAbilityHistory(gActiveBattler);
|
ClearBattlerAbilityHistory(gActiveBattler);
|
||||||
|
ClearBattlerItemEffectHistory(gActiveBattler);
|
||||||
UndoFormChange(gBattlerPartyIndexes[gActiveBattler], GET_BATTLER_SIDE(gActiveBattler));
|
UndoFormChange(gBattlerPartyIndexes[gActiveBattler], GET_BATTLER_SIDE(gActiveBattler));
|
||||||
if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
|
if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
|
||||||
UndoMegaEvolution(gBattlerPartyIndexes[gActiveBattler]);
|
UndoMegaEvolution(gBattlerPartyIndexes[gActiveBattler]);
|
||||||
|
@ -694,9 +694,13 @@ static const u8 sText_AsOneEnters[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} has two
|
|||||||
static const u8 sText_CuriousMedicineEnters[] = _("{B_EFF_NAME_WITH_PREFIX}'s\nstat changes were reset!");
|
static const u8 sText_CuriousMedicineEnters[] = _("{B_EFF_NAME_WITH_PREFIX}'s\nstat changes were reset!");
|
||||||
static const u8 sText_CanActFaster[] = _("{B_ATK_NAME_WITH_PREFIX} can act faster,\nthanks to {B_LAST_ITEM}!");
|
static const u8 sText_CanActFaster[] = _("{B_ATK_NAME_WITH_PREFIX} can act faster,\nthanks to {B_LAST_ITEM}!");
|
||||||
static const u8 sText_MicleBerryActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} boosted the accuracy of its\nnext move using {B_LAST_ITEM}!");
|
static const u8 sText_MicleBerryActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} boosted the accuracy of its\nnext move using {B_LAST_ITEM}!");
|
||||||
|
static const u8 sText_PkmnShookOffTheTaunt[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} shook off\nthe taunt!");
|
||||||
|
static const u8 sText_PkmnGotOverItsInfatuation[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} got over\nits infatuation!");
|
||||||
|
|
||||||
const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] =
|
const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] =
|
||||||
{
|
{
|
||||||
|
[STRINGID_PKMNGOTOVERITSINFATUATION - 12] = sText_PkmnGotOverItsInfatuation,
|
||||||
|
[STRINGID_PKMNSHOOKOFFTHETAUNT - 12] = sText_PkmnShookOffTheTaunt,
|
||||||
[STRINGID_MICLEBERRYACTIVATES - 12] = sText_MicleBerryActivates,
|
[STRINGID_MICLEBERRYACTIVATES - 12] = sText_MicleBerryActivates,
|
||||||
[STRINGID_CANACTFASTERTHANKSTO - 12] = sText_CanActFaster,
|
[STRINGID_CANACTFASTERTHANKSTO - 12] = sText_CanActFaster,
|
||||||
[STRINGID_CURIOUSMEDICINEENTERS - 12] = sText_CuriousMedicineEnters,
|
[STRINGID_CURIOUSMEDICINEENTERS - 12] = sText_CuriousMedicineEnters,
|
||||||
|
@ -4,7 +4,8 @@
|
|||||||
#include "constants/battle_script_commands.h"
|
#include "constants/battle_script_commands.h"
|
||||||
#include "battle_message.h"
|
#include "battle_message.h"
|
||||||
#include "battle_anim.h"
|
#include "battle_anim.h"
|
||||||
#include "battle_ai_script_commands.h"
|
#include "battle_ai_main.h"
|
||||||
|
#include "battle_ai_util.h"
|
||||||
#include "battle_scripts.h"
|
#include "battle_scripts.h"
|
||||||
#include "constants/moves.h"
|
#include "constants/moves.h"
|
||||||
#include "constants/abilities.h"
|
#include "constants/abilities.h"
|
||||||
@ -813,13 +814,7 @@ void (* const gBattleScriptingCommandsTable[])(void) =
|
|||||||
Cmd_metalburstdamagecalculator, //0xFF
|
Cmd_metalburstdamagecalculator, //0xFF
|
||||||
};
|
};
|
||||||
|
|
||||||
struct StatFractions
|
const struct StatFractions gAccuracyStageRatios[] =
|
||||||
{
|
|
||||||
u8 dividend;
|
|
||||||
u8 divisor;
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct StatFractions sAccuracyStageRatios[] =
|
|
||||||
{
|
{
|
||||||
{ 33, 100}, // -6
|
{ 33, 100}, // -6
|
||||||
{ 36, 100}, // -5
|
{ 36, 100}, // -5
|
||||||
@ -921,92 +916,167 @@ static const u8 sForbiddenMoves[MOVES_COUNT] =
|
|||||||
[MOVE_NONE] = 0xFF, // Can't use a non-move lol
|
[MOVE_NONE] = 0xFF, // Can't use a non-move lol
|
||||||
[MOVE_STRUGGLE] = 0xFF, // Neither Struggle
|
[MOVE_STRUGGLE] = 0xFF, // Neither Struggle
|
||||||
[MOVE_AFTER_YOU] = FORBIDDEN_METRONOME,
|
[MOVE_AFTER_YOU] = FORBIDDEN_METRONOME,
|
||||||
|
[MOVE_APPLE_ACID] = FORBIDDEN_METRONOME,
|
||||||
[MOVE_ASSIST] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK,
|
[MOVE_ASSIST] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK,
|
||||||
|
[MOVE_ASTRAL_BARRAGE] = FORBIDDEN_METRONOME,
|
||||||
|
[MOVE_AURA_WHEEL] = FORBIDDEN_METRONOME,
|
||||||
|
[MOVE_BADDY_BAD] = FORBIDDEN_METRONOME,
|
||||||
[MOVE_BANEFUL_BUNKER] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
[MOVE_BANEFUL_BUNKER] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
||||||
[MOVE_BEAK_BLAST] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK,
|
[MOVE_BEAK_BLAST] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK,
|
||||||
|
[MOVE_BEHEMOTH_BASH] = FORBIDDEN_METRONOME | FORBIDDEN_COPYCAT,
|
||||||
|
[MOVE_BEHEMOTH_BLADE] = FORBIDDEN_METRONOME | FORBIDDEN_COPYCAT,
|
||||||
[MOVE_BELCH] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK,
|
[MOVE_BELCH] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK,
|
||||||
[MOVE_BESTOW] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
[MOVE_BESTOW] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
||||||
[MOVE_BIDE] = FORBIDDEN_SLEEP_TALK,
|
[MOVE_BIDE] = FORBIDDEN_SLEEP_TALK,
|
||||||
|
[MOVE_BODY_PRESS] = FORBIDDEN_METRONOME,
|
||||||
|
[MOVE_BOUNCE] = FORBIDDEN_ASSIST | FORBIDDEN_SLEEP_TALK,
|
||||||
|
[MOVE_BOUNCY_BUBBLE] = FORBIDDEN_METRONOME,
|
||||||
|
[MOVE_BRANCH_POKE] = FORBIDDEN_METRONOME,
|
||||||
|
[MOVE_BREAKING_SWIPE] = FORBIDDEN_METRONOME,
|
||||||
|
[MOVE_BUZZY_BUZZ] = FORBIDDEN_METRONOME,
|
||||||
[MOVE_CELEBRATE] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK,
|
[MOVE_CELEBRATE] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK,
|
||||||
[MOVE_CHATTER] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_MIMIC | FORBIDDEN_SLEEP_TALK,
|
[MOVE_CHATTER] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_MIMIC | FORBIDDEN_SLEEP_TALK,
|
||||||
[MOVE_CIRCLE_THROW] = FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
[MOVE_CIRCLE_THROW] = FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
||||||
|
[MOVE_CLANGOROUS_SOUL] = FORBIDDEN_METRONOME,
|
||||||
[MOVE_COPYCAT] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK,
|
[MOVE_COPYCAT] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK,
|
||||||
[MOVE_COUNTER] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
[MOVE_COUNTER] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
||||||
[MOVE_COVET] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
[MOVE_COVET] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
||||||
[MOVE_CRAFTY_SHIELD] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
[MOVE_CRAFTY_SHIELD] = FORBIDDEN_METRONOME,
|
||||||
|
[MOVE_DECORATE] = FORBIDDEN_METRONOME,
|
||||||
[MOVE_DESTINY_BOND] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
[MOVE_DESTINY_BOND] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
||||||
[MOVE_DETECT] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
[MOVE_DETECT] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
||||||
[MOVE_DIG] = FORBIDDEN_ASSIST,
|
|
||||||
[MOVE_DIVE] = FORBIDDEN_ASSIST,
|
|
||||||
[MOVE_DRAGON_TAIL] = FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
|
||||||
[MOVE_DIAMOND_STORM] = FORBIDDEN_METRONOME,
|
[MOVE_DIAMOND_STORM] = FORBIDDEN_METRONOME,
|
||||||
|
[MOVE_DIG] = FORBIDDEN_ASSIST | FORBIDDEN_SLEEP_TALK,
|
||||||
|
[MOVE_DIVE] = FORBIDDEN_ASSIST | FORBIDDEN_SLEEP_TALK,
|
||||||
|
[MOVE_DOUBLE_IRON_BASH] = FORBIDDEN_METRONOME,
|
||||||
|
[MOVE_DRAGON_ASCENT] = FORBIDDEN_METRONOME,
|
||||||
|
[MOVE_DRAGON_ENERGY] = FORBIDDEN_METRONOME,
|
||||||
|
[MOVE_DRAGON_TAIL] = FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
||||||
|
[MOVE_DRUM_BEATING] = FORBIDDEN_METRONOME,
|
||||||
|
[MOVE_DYNAMAX_CANNON] = FORBIDDEN_METRONOME | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK,
|
||||||
[MOVE_ENDURE] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
[MOVE_ENDURE] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
||||||
|
[MOVE_ETERNABEAM] = FORBIDDEN_METRONOME,
|
||||||
|
[MOVE_FALSE_SURRENDER] = FORBIDDEN_METRONOME,
|
||||||
[MOVE_FEINT] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
[MOVE_FEINT] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
||||||
|
[MOVE_FIERY_WRATH] = FORBIDDEN_METRONOME,
|
||||||
[MOVE_FLEUR_CANNON] = FORBIDDEN_METRONOME,
|
[MOVE_FLEUR_CANNON] = FORBIDDEN_METRONOME,
|
||||||
[MOVE_FLY] = FORBIDDEN_ASSIST,
|
[MOVE_FLOATY_FALL] = FORBIDDEN_METRONOME,
|
||||||
|
[MOVE_FLY] = FORBIDDEN_ASSIST | FORBIDDEN_SLEEP_TALK,
|
||||||
[MOVE_FOCUS_PUNCH] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK,
|
[MOVE_FOCUS_PUNCH] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK,
|
||||||
[MOVE_FOLLOW_ME] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
[MOVE_FOLLOW_ME] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
||||||
[MOVE_FREEZE_SHOCK] = FORBIDDEN_METRONOME,
|
[MOVE_FREEZE_SHOCK] = FORBIDDEN_METRONOME | FORBIDDEN_SLEEP_TALK,
|
||||||
|
[MOVE_FREEZING_GLARE] = FORBIDDEN_METRONOME,
|
||||||
|
[MOVE_FREEZY_FROST] = FORBIDDEN_METRONOME,
|
||||||
|
[MOVE_GEOMANCY] = FORBIDDEN_SLEEP_TALK,
|
||||||
|
[MOVE_GLACIAL_LANCE] = FORBIDDEN_METRONOME,
|
||||||
|
[MOVE_GLITZY_GLOW] = FORBIDDEN_METRONOME,
|
||||||
|
[MOVE_GRAV_APPLE] = FORBIDDEN_METRONOME,
|
||||||
[MOVE_HELPING_HAND] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
[MOVE_HELPING_HAND] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
||||||
[MOVE_HOLD_HANDS] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK,
|
[MOVE_HOLD_HANDS] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK,
|
||||||
[MOVE_HYPERSPACE_FURY] = FORBIDDEN_METRONOME,
|
[MOVE_HYPERSPACE_FURY] = FORBIDDEN_METRONOME,
|
||||||
[MOVE_HYPERSPACE_HOLE] = FORBIDDEN_METRONOME,
|
[MOVE_HYPERSPACE_HOLE] = FORBIDDEN_METRONOME,
|
||||||
[MOVE_ICE_BURN] = FORBIDDEN_METRONOME,
|
[MOVE_ICE_BURN] = FORBIDDEN_METRONOME | FORBIDDEN_SLEEP_TALK,
|
||||||
[MOVE_INSTRUCT] = FORBIDDEN_METRONOME,
|
[MOVE_INSTRUCT] = FORBIDDEN_METRONOME,
|
||||||
|
[MOVE_JUNGLE_HEALING] = FORBIDDEN_METRONOME,
|
||||||
[MOVE_KINGS_SHIELD] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
[MOVE_KINGS_SHIELD] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
||||||
|
[MOVE_LIFE_DEW] = FORBIDDEN_METRONOME,
|
||||||
[MOVE_LIGHT_OF_RUIN] = FORBIDDEN_METRONOME,
|
[MOVE_LIGHT_OF_RUIN] = FORBIDDEN_METRONOME,
|
||||||
[MOVE_MAT_BLOCK] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
[MOVE_MAT_BLOCK] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
||||||
[MOVE_ME_FIRST] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK,
|
[MOVE_ME_FIRST] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK,
|
||||||
|
[MOVE_METEOR_ASSAULT] = FORBIDDEN_METRONOME,
|
||||||
[MOVE_METRONOME] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK,
|
[MOVE_METRONOME] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK,
|
||||||
[MOVE_MIMIC] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_MIMIC | FORBIDDEN_SLEEP_TALK,
|
[MOVE_MIMIC] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_MIMIC | FORBIDDEN_SLEEP_TALK,
|
||||||
|
[MOVE_MIND_BLOWN] = FORBIDDEN_METRONOME,
|
||||||
[MOVE_MIRROR_COAT] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
[MOVE_MIRROR_COAT] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
||||||
[MOVE_MIRROR_MOVE] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK,
|
[MOVE_MIRROR_MOVE] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK,
|
||||||
|
[MOVE_MOONGEIST_BEAM] = FORBIDDEN_METRONOME,
|
||||||
[MOVE_NATURE_POWER] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK,
|
[MOVE_NATURE_POWER] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK,
|
||||||
|
[MOVE_NATURES_MADNESS] = FORBIDDEN_METRONOME,
|
||||||
|
[MOVE_OBSTRUCT] = FORBIDDEN_METRONOME | FORBIDDEN_COPYCAT,
|
||||||
[MOVE_ORIGIN_PULSE] = FORBIDDEN_METRONOME,
|
[MOVE_ORIGIN_PULSE] = FORBIDDEN_METRONOME,
|
||||||
|
[MOVE_OVERDRIVE] = FORBIDDEN_METRONOME,
|
||||||
|
[MOVE_PHANTOM_FORCE] = FORBIDDEN_ASSIST | FORBIDDEN_SLEEP_TALK,
|
||||||
|
[MOVE_PHOTON_GEYSER] = FORBIDDEN_METRONOME,
|
||||||
|
[MOVE_PIKA_PAPOW] = FORBIDDEN_METRONOME,
|
||||||
|
[MOVE_PLASMA_FISTS] = FORBIDDEN_METRONOME,
|
||||||
[MOVE_PRECIPICE_BLADES] = FORBIDDEN_METRONOME,
|
[MOVE_PRECIPICE_BLADES] = FORBIDDEN_METRONOME,
|
||||||
[MOVE_PROTECT] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
[MOVE_PROTECT] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
||||||
|
[MOVE_PYRO_BALL] = FORBIDDEN_METRONOME,
|
||||||
[MOVE_QUASH] = FORBIDDEN_METRONOME,
|
[MOVE_QUASH] = FORBIDDEN_METRONOME,
|
||||||
[MOVE_QUICK_GUARD] = FORBIDDEN_METRONOME,
|
[MOVE_QUICK_GUARD] = FORBIDDEN_METRONOME,
|
||||||
[MOVE_RAGE_POWDER] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
[MOVE_RAGE_POWDER] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
||||||
|
[MOVE_RAZOR_WIND] = FORBIDDEN_SLEEP_TALK,
|
||||||
[MOVE_RELIC_SONG] = FORBIDDEN_METRONOME,
|
[MOVE_RELIC_SONG] = FORBIDDEN_METRONOME,
|
||||||
[MOVE_ROAR] = FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
[MOVE_ROAR] = FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
||||||
|
[MOVE_SAPPY_SEED] = FORBIDDEN_METRONOME,
|
||||||
[MOVE_SECRET_SWORD] = FORBIDDEN_METRONOME,
|
[MOVE_SECRET_SWORD] = FORBIDDEN_METRONOME,
|
||||||
|
[MOVE_SHADOW_FORCE] = FORBIDDEN_ASSIST | FORBIDDEN_SLEEP_TALK,
|
||||||
[MOVE_SHELL_TRAP] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK,
|
[MOVE_SHELL_TRAP] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK,
|
||||||
[MOVE_SKETCH] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK,
|
[MOVE_SIZZLY_SLIDE] = FORBIDDEN_METRONOME,
|
||||||
|
[MOVE_SKETCH] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_MIMIC | FORBIDDEN_SLEEP_TALK,
|
||||||
|
[MOVE_SKULL_BASH] = FORBIDDEN_SLEEP_TALK,
|
||||||
|
[MOVE_SKY_ATTACK] = FORBIDDEN_SLEEP_TALK,
|
||||||
|
[MOVE_SKY_DROP] = FORBIDDEN_ASSIST | FORBIDDEN_SLEEP_TALK,
|
||||||
[MOVE_SLEEP_TALK] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK,
|
[MOVE_SLEEP_TALK] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_SLEEP_TALK,
|
||||||
|
[MOVE_SNAP_TRAP] = FORBIDDEN_METRONOME,
|
||||||
[MOVE_SNARL] = FORBIDDEN_METRONOME,
|
[MOVE_SNARL] = FORBIDDEN_METRONOME,
|
||||||
[MOVE_SNATCH] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
[MOVE_SNATCH] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
||||||
[MOVE_SNORE] = FORBIDDEN_METRONOME,
|
[MOVE_SNORE] = FORBIDDEN_METRONOME,
|
||||||
|
[MOVE_SOLAR_BEAM] = FORBIDDEN_SLEEP_TALK,
|
||||||
|
[MOVE_SOLAR_BLADE] = FORBIDDEN_SLEEP_TALK,
|
||||||
|
[MOVE_SPARKLY_SWIRL] = FORBIDDEN_METRONOME,
|
||||||
[MOVE_SPECTRAL_THIEF] = FORBIDDEN_METRONOME,
|
[MOVE_SPECTRAL_THIEF] = FORBIDDEN_METRONOME,
|
||||||
[MOVE_SPIKY_SHIELD] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
[MOVE_SPIKY_SHIELD] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
||||||
[MOVE_SPOTLIGHT] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST,
|
[MOVE_SPIRIT_BREAK] = FORBIDDEN_METRONOME,
|
||||||
|
[MOVE_SPLISHY_SPLASH] = FORBIDDEN_METRONOME,
|
||||||
|
[MOVE_SPOTLIGHT] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
||||||
[MOVE_STEAM_ERUPTION] = FORBIDDEN_METRONOME,
|
[MOVE_STEAM_ERUPTION] = FORBIDDEN_METRONOME,
|
||||||
|
[MOVE_STEEL_BEAM] = FORBIDDEN_METRONOME,
|
||||||
|
[MOVE_STRANGE_STEAM] = FORBIDDEN_METRONOME,
|
||||||
|
[MOVE_SUNSTEEL_STRIKE] = FORBIDDEN_METRONOME,
|
||||||
|
[MOVE_SURGING_STRIKES] = FORBIDDEN_METRONOME,
|
||||||
[MOVE_SWITCHEROO] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
[MOVE_SWITCHEROO] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
||||||
[MOVE_TECHNO_BLAST] = FORBIDDEN_METRONOME,
|
[MOVE_TECHNO_BLAST] = FORBIDDEN_METRONOME,
|
||||||
[MOVE_THIEF] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
[MOVE_THIEF] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
||||||
[MOVE_THOUSAND_ARROWS] = FORBIDDEN_METRONOME,
|
[MOVE_THOUSAND_ARROWS] = FORBIDDEN_METRONOME,
|
||||||
[MOVE_THOUSAND_WAVES] = FORBIDDEN_METRONOME,
|
[MOVE_THOUSAND_WAVES] = FORBIDDEN_METRONOME,
|
||||||
|
[MOVE_THUNDER_CAGE] = FORBIDDEN_METRONOME,
|
||||||
|
[MOVE_THUNDEROUS_KICK] = FORBIDDEN_METRONOME,
|
||||||
[MOVE_TRANSFORM] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_MIMIC,
|
[MOVE_TRANSFORM] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT | FORBIDDEN_MIMIC,
|
||||||
[MOVE_TRICK] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
[MOVE_TRICK] = FORBIDDEN_METRONOME | FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
||||||
[MOVE_V_CREATE] = FORBIDDEN_METRONOME,
|
|
||||||
[MOVE_WIDE_GUARD] = FORBIDDEN_METRONOME,
|
|
||||||
[MOVE_WHIRLWIND] = FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
|
||||||
[MOVE_UPROAR] = FORBIDDEN_SLEEP_TALK,
|
[MOVE_UPROAR] = FORBIDDEN_SLEEP_TALK,
|
||||||
|
[MOVE_V_CREATE] = FORBIDDEN_METRONOME,
|
||||||
|
[MOVE_VEEVEE_VOLLEY] = FORBIDDEN_METRONOME,
|
||||||
|
[MOVE_WHIRLWIND] = FORBIDDEN_ASSIST | FORBIDDEN_COPYCAT,
|
||||||
|
[MOVE_WICKED_BLOW] = FORBIDDEN_METRONOME,
|
||||||
|
[MOVE_WIDE_GUARD] = FORBIDDEN_METRONOME,
|
||||||
|
[MOVE_ZIPPY_ZAP] = FORBIDDEN_METRONOME,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const u16 sMoveEffectsForbiddenToInstruct[] =
|
static const u16 sMoveEffectsForbiddenToInstruct[] =
|
||||||
{
|
{
|
||||||
EFFECT_ASSIST,
|
EFFECT_ASSIST,
|
||||||
//EFFECT_BEAK_BLAST,
|
//EFFECT_BEAK_BLAST,
|
||||||
|
EFFECT_BELCH,
|
||||||
EFFECT_BIDE,
|
EFFECT_BIDE,
|
||||||
|
//EFFECT_CELEBRATE,
|
||||||
|
//EFFECT_CHATTER,
|
||||||
|
EFFECT_COPYCAT,
|
||||||
|
//EFFECT_DYNAMAX_CANNON,
|
||||||
EFFECT_FOCUS_PUNCH,
|
EFFECT_FOCUS_PUNCH,
|
||||||
//EFFECT_GEOMANCY,
|
EFFECT_GEOMANCY,
|
||||||
|
//EFFECT_HOLD_HANDS,
|
||||||
EFFECT_INSTRUCT,
|
EFFECT_INSTRUCT,
|
||||||
EFFECT_ME_FIRST,
|
EFFECT_ME_FIRST,
|
||||||
EFFECT_METRONOME,
|
EFFECT_METRONOME,
|
||||||
|
EFFECT_MIMIC,
|
||||||
EFFECT_MIRROR_MOVE,
|
EFFECT_MIRROR_MOVE,
|
||||||
EFFECT_NATURE_POWER,
|
EFFECT_NATURE_POWER,
|
||||||
|
//EFFECT_OBSTRUCT,
|
||||||
|
EFFECT_RAMPAGE,
|
||||||
EFFECT_RECHARGE,
|
EFFECT_RECHARGE,
|
||||||
|
EFFECT_RECOIL_25,
|
||||||
|
EFFECT_ROLLOUT,
|
||||||
EFFECT_SEMI_INVULNERABLE,
|
EFFECT_SEMI_INVULNERABLE,
|
||||||
//EFFECT_SHELL_TRAP,
|
//EFFECT_SHELL_TRAP,
|
||||||
EFFECT_SKETCH,
|
EFFECT_SKETCH,
|
||||||
@ -1016,21 +1086,22 @@ static const u16 sMoveEffectsForbiddenToInstruct[] =
|
|||||||
EFFECT_SOLARBEAM,
|
EFFECT_SOLARBEAM,
|
||||||
EFFECT_TRANSFORM,
|
EFFECT_TRANSFORM,
|
||||||
EFFECT_TWO_TURNS_ATTACK,
|
EFFECT_TWO_TURNS_ATTACK,
|
||||||
|
EFFECT_UPROAR,
|
||||||
FORBIDDEN_INSTRUCT_END
|
FORBIDDEN_INSTRUCT_END
|
||||||
};
|
};
|
||||||
|
|
||||||
static const u16 sNaturePowerMoves[] =
|
static const u16 sNaturePowerMoves[] =
|
||||||
{
|
{
|
||||||
[BATTLE_TERRAIN_GRASS] = MOVE_STUN_SPORE,
|
[BATTLE_TERRAIN_GRASS] = MOVE_ENERGY_BALL,
|
||||||
[BATTLE_TERRAIN_LONG_GRASS] = MOVE_RAZOR_LEAF,
|
[BATTLE_TERRAIN_LONG_GRASS] = MOVE_ENERGY_BALL,
|
||||||
[BATTLE_TERRAIN_SAND] = MOVE_EARTHQUAKE,
|
[BATTLE_TERRAIN_SAND] = MOVE_EARTH_POWER,
|
||||||
[BATTLE_TERRAIN_UNDERWATER] = MOVE_HYDRO_PUMP,
|
[BATTLE_TERRAIN_UNDERWATER] = MOVE_HYDRO_PUMP,
|
||||||
[BATTLE_TERRAIN_WATER] = MOVE_SURF,
|
[BATTLE_TERRAIN_WATER] = MOVE_HYDRO_PUMP,
|
||||||
[BATTLE_TERRAIN_POND] = MOVE_BUBBLE_BEAM,
|
[BATTLE_TERRAIN_POND] = MOVE_HYDRO_PUMP,
|
||||||
[BATTLE_TERRAIN_MOUNTAIN] = MOVE_ROCK_SLIDE,
|
[BATTLE_TERRAIN_MOUNTAIN] = MOVE_EARTH_POWER,
|
||||||
[BATTLE_TERRAIN_CAVE] = MOVE_SHADOW_BALL,
|
[BATTLE_TERRAIN_CAVE] = MOVE_POWER_GEM,
|
||||||
[BATTLE_TERRAIN_BUILDING] = MOVE_SWIFT,
|
[BATTLE_TERRAIN_BUILDING] = MOVE_TRI_ATTACK,
|
||||||
[BATTLE_TERRAIN_PLAIN] = MOVE_SWIFT
|
[BATTLE_TERRAIN_PLAIN] = MOVE_TRI_ATTACK
|
||||||
};
|
};
|
||||||
|
|
||||||
static const u16 sPickupItems[] =
|
static const u16 sPickupItems[] =
|
||||||
@ -1083,7 +1154,7 @@ static const u8 sTerrainToType[] =
|
|||||||
[BATTLE_TERRAIN_UNDERWATER] = TYPE_WATER,
|
[BATTLE_TERRAIN_UNDERWATER] = TYPE_WATER,
|
||||||
[BATTLE_TERRAIN_WATER] = TYPE_WATER,
|
[BATTLE_TERRAIN_WATER] = TYPE_WATER,
|
||||||
[BATTLE_TERRAIN_POND] = TYPE_WATER,
|
[BATTLE_TERRAIN_POND] = TYPE_WATER,
|
||||||
[BATTLE_TERRAIN_MOUNTAIN] = TYPE_ROCK,
|
[BATTLE_TERRAIN_MOUNTAIN] = TYPE_GROUND,
|
||||||
[BATTLE_TERRAIN_CAVE] = TYPE_ROCK,
|
[BATTLE_TERRAIN_CAVE] = TYPE_ROCK,
|
||||||
[BATTLE_TERRAIN_BUILDING] = TYPE_NORMAL,
|
[BATTLE_TERRAIN_BUILDING] = TYPE_NORMAL,
|
||||||
[BATTLE_TERRAIN_PLAIN] = TYPE_NORMAL,
|
[BATTLE_TERRAIN_PLAIN] = TYPE_NORMAL,
|
||||||
@ -1470,7 +1541,8 @@ static bool32 AccuracyCalcHelper(u16 move)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ((gStatuses3[gBattlerTarget] & STATUS3_PHANTOM_FORCE)
|
if ((gStatuses3[gBattlerTarget] & STATUS3_PHANTOM_FORCE)
|
||||||
|| (!(gBattleMoves[move].flags & FLAG_HIT_IN_AIR) && gStatuses3[gBattlerTarget] & STATUS3_ON_AIR)
|
|| (!(gBattleMoves[move].flags & FLAG_DMG_IN_AIR) && gStatuses3[gBattlerTarget] & STATUS3_ON_AIR)
|
||||||
|
|| (!(gBattleMoves[move].flags & FLAG_DMG_2X_IN_AIR) && gStatuses3[gBattlerTarget] & STATUS3_ON_AIR)
|
||||||
|| (!(gBattleMoves[move].flags & FLAG_DMG_UNDERGROUND) && gStatuses3[gBattlerTarget] & STATUS3_UNDERGROUND)
|
|| (!(gBattleMoves[move].flags & FLAG_DMG_UNDERGROUND) && gStatuses3[gBattlerTarget] & STATUS3_UNDERGROUND)
|
||||||
|| (!(gBattleMoves[move].flags & FLAG_DMG_UNDERWATER) && gStatuses3[gBattlerTarget] & STATUS3_UNDERWATER))
|
|| (!(gBattleMoves[move].flags & FLAG_DMG_UNDERWATER) && gStatuses3[gBattlerTarget] & STATUS3_UNDERWATER))
|
||||||
{
|
{
|
||||||
@ -1535,8 +1607,8 @@ u32 GetTotalAccuracy(u32 battlerAtk, u32 battlerDef, u32 move)
|
|||||||
if (defAbility == ABILITY_WONDER_SKIN && gBattleMoves[move].power == 0)
|
if (defAbility == ABILITY_WONDER_SKIN && gBattleMoves[move].power == 0)
|
||||||
moveAcc = 50;
|
moveAcc = 50;
|
||||||
|
|
||||||
calc = sAccuracyStageRatios[buff].dividend * moveAcc;
|
calc = gAccuracyStageRatios[buff].dividend * moveAcc;
|
||||||
calc /= sAccuracyStageRatios[buff].divisor;
|
calc /= gAccuracyStageRatios[buff].divisor;
|
||||||
|
|
||||||
if (atkAbility == ABILITY_COMPOUND_EYES)
|
if (atkAbility == ABILITY_COMPOUND_EYES)
|
||||||
calc = (calc * 130) / 100; // 1.3 compound eyes boost
|
calc = (calc * 130) / 100; // 1.3 compound eyes boost
|
||||||
@ -1562,7 +1634,7 @@ u32 GetTotalAccuracy(u32 battlerAtk, u32 battlerDef, u32 move)
|
|||||||
calc = (calc * (100 + atkParam)) / 100;
|
calc = (calc * (100 + atkParam)) / 100;
|
||||||
else if (atkHoldEffect == HOLD_EFFECT_ZOOM_LENS && GetBattlerTurnOrderNum(battlerAtk) > GetBattlerTurnOrderNum(battlerDef));
|
else if (atkHoldEffect == HOLD_EFFECT_ZOOM_LENS && GetBattlerTurnOrderNum(battlerAtk) > GetBattlerTurnOrderNum(battlerDef));
|
||||||
calc = (calc * (100 + atkParam)) / 100;
|
calc = (calc * (100 + atkParam)) / 100;
|
||||||
|
|
||||||
if (gProtectStructs[battlerAtk].micle)
|
if (gProtectStructs[battlerAtk].micle)
|
||||||
{
|
{
|
||||||
gProtectStructs[battlerAtk].micle = FALSE;
|
gProtectStructs[battlerAtk].micle = FALSE;
|
||||||
@ -3118,7 +3190,7 @@ void SetMoveEffect(bool32 primary, u32 certain)
|
|||||||
case MOVE_EFFECT_FLAME_BURST:
|
case MOVE_EFFECT_FLAME_BURST:
|
||||||
if (IsBattlerAlive(BATTLE_PARTNER(gBattlerTarget)) && GetBattlerAbility(BATTLE_PARTNER(gBattlerTarget)) != ABILITY_MAGIC_GUARD)
|
if (IsBattlerAlive(BATTLE_PARTNER(gBattlerTarget)) && GetBattlerAbility(BATTLE_PARTNER(gBattlerTarget)) != ABILITY_MAGIC_GUARD)
|
||||||
{
|
{
|
||||||
gBattleScripting.battler = BATTLE_PARTNER(gBattlerTarget);
|
gBattleScripting.savedBattler = BATTLE_PARTNER(gBattlerTarget);
|
||||||
gBattleMoveDamage = gBattleMons[BATTLE_PARTNER(gBattlerTarget)].hp / 16;
|
gBattleMoveDamage = gBattleMons[BATTLE_PARTNER(gBattlerTarget)].hp / 16;
|
||||||
if (gBattleMoveDamage == 0)
|
if (gBattleMoveDamage == 0)
|
||||||
gBattleMoveDamage = 1;
|
gBattleMoveDamage = 1;
|
||||||
@ -4414,7 +4486,7 @@ static void Cmd_playanimation(void)
|
|||||||
|
|
||||||
gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
|
gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
|
||||||
argumentPtr = T2_READ_PTR(gBattlescriptCurrInstr + 3);
|
argumentPtr = T2_READ_PTR(gBattlescriptCurrInstr + 3);
|
||||||
|
|
||||||
#if B_TERRAIN_BG_CHANGE == FALSE
|
#if B_TERRAIN_BG_CHANGE == FALSE
|
||||||
if (gBattlescriptCurrInstr[2] == B_ANIM_RESTORE_BG)
|
if (gBattlescriptCurrInstr[2] == B_ANIM_RESTORE_BG)
|
||||||
{
|
{
|
||||||
@ -7688,51 +7760,25 @@ static void Cmd_various(void)
|
|||||||
gBattlescriptCurrInstr += 7;
|
gBattlescriptCurrInstr += 7;
|
||||||
return;
|
return;
|
||||||
case VARIOUS_SET_SIMPLE_BEAM:
|
case VARIOUS_SET_SIMPLE_BEAM:
|
||||||
switch (gBattleMons[gActiveBattler].ability)
|
if (IsEntrainmentTargetOrSimpleBeamBannedAbility(gBattleMons[gActiveBattler].ability))
|
||||||
{
|
{
|
||||||
case ABILITY_SIMPLE:
|
|
||||||
case ABILITY_TRUANT:
|
|
||||||
case ABILITY_STANCE_CHANGE:
|
|
||||||
case ABILITY_DISGUISE:
|
|
||||||
case ABILITY_MULTITYPE:
|
|
||||||
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
|
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
|
||||||
break;
|
}
|
||||||
default:
|
else
|
||||||
|
{
|
||||||
gBattleMons[gActiveBattler].ability = ABILITY_SIMPLE;
|
gBattleMons[gActiveBattler].ability = ABILITY_SIMPLE;
|
||||||
gBattlescriptCurrInstr += 7;
|
gBattlescriptCurrInstr += 7;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
case VARIOUS_TRY_ENTRAINMENT:
|
case VARIOUS_TRY_ENTRAINMENT:
|
||||||
switch (gBattleMons[gBattlerTarget].ability)
|
if (IsEntrainmentBannedAbilityAttacker(gBattleMons[gBattlerAttacker].ability)
|
||||||
|
|| IsEntrainmentTargetOrSimpleBeamBannedAbility(gBattleMons[gBattlerTarget].ability))
|
||||||
{
|
{
|
||||||
case ABILITY_TRUANT:
|
|
||||||
case ABILITY_MULTITYPE:
|
|
||||||
case ABILITY_STANCE_CHANGE:
|
|
||||||
case ABILITY_SCHOOLING:
|
|
||||||
case ABILITY_COMATOSE:
|
|
||||||
case ABILITY_SHIELDS_DOWN:
|
|
||||||
case ABILITY_DISGUISE:
|
|
||||||
case ABILITY_RKS_SYSTEM:
|
|
||||||
case ABILITY_BATTLE_BOND:
|
|
||||||
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
switch (gBattleMons[gBattlerAttacker].ability)
|
|
||||||
{
|
|
||||||
case ABILITY_TRACE:
|
|
||||||
case ABILITY_FORECAST:
|
|
||||||
case ABILITY_FLOWER_GIFT:
|
|
||||||
case ABILITY_ZEN_MODE:
|
|
||||||
case ABILITY_ILLUSION:
|
|
||||||
case ABILITY_IMPOSTER:
|
|
||||||
case ABILITY_POWER_OF_ALCHEMY:
|
|
||||||
case ABILITY_RECEIVER:
|
|
||||||
case ABILITY_DISGUISE:
|
|
||||||
case ABILITY_POWER_CONSTRUCT:
|
|
||||||
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
|
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (gBattleMons[gBattlerTarget].ability == gBattleMons[gBattlerAttacker].ability)
|
if (gBattleMons[gBattlerTarget].ability == gBattleMons[gBattlerAttacker].ability)
|
||||||
{
|
{
|
||||||
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
|
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
|
||||||
@ -9139,17 +9185,17 @@ bool32 TryResetBattlerStatChanges(u8 battler)
|
|||||||
{
|
{
|
||||||
u32 j;
|
u32 j;
|
||||||
bool32 ret = FALSE;
|
bool32 ret = FALSE;
|
||||||
|
|
||||||
gDisableStructs[battler].stockpileDef = 0;
|
gDisableStructs[battler].stockpileDef = 0;
|
||||||
gDisableStructs[battler].stockpileSpDef = 0;
|
gDisableStructs[battler].stockpileSpDef = 0;
|
||||||
for (j = 0; j < NUM_BATTLE_STATS; j++)
|
for (j = 0; j < NUM_BATTLE_STATS; j++)
|
||||||
{
|
{
|
||||||
if (gBattleMons[battler].statStages[j] != DEFAULT_STAT_STAGE)
|
if (gBattleMons[battler].statStages[j] != DEFAULT_STAT_STAGE)
|
||||||
ret = TRUE; // returns TRUE if any stat was reset
|
ret = TRUE; // returns TRUE if any stat was reset
|
||||||
|
|
||||||
gBattleMons[battler].statStages[j] = DEFAULT_STAT_STAGE;
|
gBattleMons[battler].statStages[j] = DEFAULT_STAT_STAGE;
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -9694,7 +9740,7 @@ static void Cmd_tryinfatuating(void)
|
|||||||
|
|
||||||
if (GetBattlerAbility(gBattlerTarget) == ABILITY_OBLIVIOUS)
|
if (GetBattlerAbility(gBattlerTarget) == ABILITY_OBLIVIOUS)
|
||||||
{
|
{
|
||||||
gBattlescriptCurrInstr = BattleScript_ObliviousPreventsAttraction;
|
gBattlescriptCurrInstr = BattleScript_NotAffectedAbilityPopUp;
|
||||||
gLastUsedAbility = ABILITY_OBLIVIOUS;
|
gLastUsedAbility = ABILITY_OBLIVIOUS;
|
||||||
RecordAbilityBattle(gBattlerTarget, ABILITY_OBLIVIOUS);
|
RecordAbilityBattle(gBattlerTarget, ABILITY_OBLIVIOUS);
|
||||||
}
|
}
|
||||||
@ -11062,6 +11108,12 @@ static void Cmd_callterrainattack(void) // nature power
|
|||||||
gBattlescriptCurrInstr++;
|
gBattlescriptCurrInstr++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
u16 GetNaturePowerMove(void)
|
||||||
|
{
|
||||||
|
//TODO terrain
|
||||||
|
return sNaturePowerMoves[gBattleTerrain];
|
||||||
|
}
|
||||||
|
|
||||||
static void Cmd_cureifburnedparalysedorpoisoned(void) // refresh
|
static void Cmd_cureifburnedparalysedorpoisoned(void) // refresh
|
||||||
{
|
{
|
||||||
if (gBattleMons[gBattlerAttacker].status1 & (STATUS1_POISON | STATUS1_BURN | STATUS1_PARALYSIS | STATUS1_TOXIC_POISON))
|
if (gBattleMons[gBattlerAttacker].status1 & (STATUS1_POISON | STATUS1_BURN | STATUS1_PARALYSIS | STATUS1_TOXIC_POISON))
|
||||||
@ -11101,7 +11153,13 @@ static void Cmd_jumpifnodamage(void)
|
|||||||
|
|
||||||
static void Cmd_settaunt(void)
|
static void Cmd_settaunt(void)
|
||||||
{
|
{
|
||||||
if (gDisableStructs[gBattlerTarget].tauntTimer == 0)
|
if (GetBattlerAbility(gBattlerTarget) == ABILITY_OBLIVIOUS)
|
||||||
|
{
|
||||||
|
gBattlescriptCurrInstr = BattleScript_NotAffectedAbilityPopUp;
|
||||||
|
gLastUsedAbility = ABILITY_OBLIVIOUS;
|
||||||
|
RecordAbilityBattle(gBattlerTarget, ABILITY_OBLIVIOUS);
|
||||||
|
}
|
||||||
|
else if (gDisableStructs[gBattlerTarget].tauntTimer == 0)
|
||||||
{
|
{
|
||||||
u8 turns = 4;
|
u8 turns = 4;
|
||||||
if (GetBattlerTurnOrderNum(gBattlerTarget) > GetBattlerTurnOrderNum(gBattlerAttacker))
|
if (GetBattlerTurnOrderNum(gBattlerTarget) > GetBattlerTurnOrderNum(gBattlerAttacker))
|
||||||
@ -11228,18 +11286,20 @@ static void Cmd_tryswapitems(void) // trick
|
|||||||
|
|
||||||
static void Cmd_trycopyability(void) // role play
|
static void Cmd_trycopyability(void) // role play
|
||||||
{
|
{
|
||||||
switch (gBattleMons[gBattlerTarget].ability)
|
u16 defAbility = gBattleMons[gBattlerTarget].ability;
|
||||||
|
|
||||||
|
if (gBattleMons[gBattlerAttacker].ability == defAbility
|
||||||
|
|| defAbility == ABILITY_NONE
|
||||||
|
|| IsRolePlayBannedAbilityAtk(gBattleMons[gBattlerAttacker].ability)
|
||||||
|
|| IsRolePlayBannedAbility(defAbility))
|
||||||
{
|
{
|
||||||
case ABILITY_NONE:
|
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
|
||||||
case ABILITY_WONDER_GUARD:
|
}
|
||||||
case ABILITY_DISGUISE:
|
else
|
||||||
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
|
{
|
||||||
break;
|
gBattleMons[gBattlerAttacker].ability = defAbility;
|
||||||
default:
|
gLastUsedAbility = defAbility;
|
||||||
gBattleMons[gBattlerAttacker].ability = gBattleMons[gBattlerTarget].ability;
|
gBattlescriptCurrInstr += 5;
|
||||||
gLastUsedAbility = gBattleMons[gBattlerTarget].ability;
|
|
||||||
gBattlescriptCurrInstr += 5;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -11293,28 +11353,14 @@ static void Cmd_settoxicspikes(void)
|
|||||||
|
|
||||||
static void Cmd_setgastroacid(void)
|
static void Cmd_setgastroacid(void)
|
||||||
{
|
{
|
||||||
switch (gBattleMons[gBattlerTarget].ability)
|
if (IsGastroAcidBannedAbility(gBattleMons[gBattlerTarget].ability))
|
||||||
{
|
{
|
||||||
case ABILITY_AS_ONE_ICE_RIDER:
|
|
||||||
case ABILITY_AS_ONE_SHADOW_RIDER:
|
|
||||||
case ABILITY_BATTLE_BOND:
|
|
||||||
case ABILITY_COMATOSE:
|
|
||||||
case ABILITY_DISGUISE:
|
|
||||||
case ABILITY_GULP_MISSILE:
|
|
||||||
case ABILITY_ICE_FACE:
|
|
||||||
case ABILITY_MULTITYPE:
|
|
||||||
case ABILITY_POWER_CONSTRUCT:
|
|
||||||
case ABILITY_RKS_SYSTEM:
|
|
||||||
case ABILITY_SCHOOLING:
|
|
||||||
case ABILITY_SHIELDS_DOWN:
|
|
||||||
case ABILITY_STANCE_CHANGE:
|
|
||||||
case ABILITY_ZEN_MODE:
|
|
||||||
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
|
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
|
||||||
break;
|
}
|
||||||
default:
|
else
|
||||||
|
{
|
||||||
gStatuses3[gBattlerTarget] |= STATUS3_GASTRO_ACID;
|
gStatuses3[gBattlerTarget] |= STATUS3_GASTRO_ACID;
|
||||||
gBattlescriptCurrInstr += 5;
|
gBattlescriptCurrInstr += 5;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -11383,20 +11429,9 @@ static void Cmd_setroom(void)
|
|||||||
|
|
||||||
static void Cmd_tryswapabilities(void) // skill swap
|
static void Cmd_tryswapabilities(void) // skill swap
|
||||||
{
|
{
|
||||||
switch (gBattleMons[gBattlerAttacker].ability)
|
if (IsSkillSwapBannedAbility(gBattleMons[gBattlerAttacker].ability)
|
||||||
|
|| IsSkillSwapBannedAbility(gBattleMons[gBattlerTarget].ability))
|
||||||
{
|
{
|
||||||
case ABILITY_NONE:
|
|
||||||
case ABILITY_WONDER_GUARD:
|
|
||||||
case ABILITY_DISGUISE:
|
|
||||||
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (gBattleMons[gBattlerTarget].ability)
|
|
||||||
{
|
|
||||||
case ABILITY_NONE:
|
|
||||||
case ABILITY_WONDER_GUARD:
|
|
||||||
case ABILITY_DISGUISE:
|
|
||||||
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
|
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -11628,7 +11663,7 @@ static void Cmd_getsecretpowereffect(void)
|
|||||||
switch (gBattleTerrain)
|
switch (gBattleTerrain)
|
||||||
{
|
{
|
||||||
case BATTLE_TERRAIN_GRASS:
|
case BATTLE_TERRAIN_GRASS:
|
||||||
gBattleScripting.moveEffect = MOVE_EFFECT_POISON;
|
gBattleScripting.moveEffect = MOVE_EFFECT_SLEEP;
|
||||||
break;
|
break;
|
||||||
case BATTLE_TERRAIN_LONG_GRASS:
|
case BATTLE_TERRAIN_LONG_GRASS:
|
||||||
gBattleScripting.moveEffect = MOVE_EFFECT_SLEEP;
|
gBattleScripting.moveEffect = MOVE_EFFECT_SLEEP;
|
||||||
@ -11637,16 +11672,16 @@ static void Cmd_getsecretpowereffect(void)
|
|||||||
gBattleScripting.moveEffect = MOVE_EFFECT_ACC_MINUS_1;
|
gBattleScripting.moveEffect = MOVE_EFFECT_ACC_MINUS_1;
|
||||||
break;
|
break;
|
||||||
case BATTLE_TERRAIN_UNDERWATER:
|
case BATTLE_TERRAIN_UNDERWATER:
|
||||||
gBattleScripting.moveEffect = MOVE_EFFECT_DEF_MINUS_1;
|
gBattleScripting.moveEffect = MOVE_EFFECT_ATK_MINUS_1;
|
||||||
break;
|
break;
|
||||||
case BATTLE_TERRAIN_WATER:
|
case BATTLE_TERRAIN_WATER:
|
||||||
gBattleScripting.moveEffect = MOVE_EFFECT_ATK_MINUS_1;
|
gBattleScripting.moveEffect = MOVE_EFFECT_ATK_MINUS_1;
|
||||||
break;
|
break;
|
||||||
case BATTLE_TERRAIN_POND:
|
case BATTLE_TERRAIN_POND:
|
||||||
gBattleScripting.moveEffect = MOVE_EFFECT_SPD_MINUS_1;
|
gBattleScripting.moveEffect = MOVE_EFFECT_ATK_MINUS_1;
|
||||||
break;
|
break;
|
||||||
case BATTLE_TERRAIN_MOUNTAIN:
|
case BATTLE_TERRAIN_MOUNTAIN:
|
||||||
gBattleScripting.moveEffect = MOVE_EFFECT_CONFUSION;
|
gBattleScripting.moveEffect = MOVE_EFFECT_ACC_MINUS_1;
|
||||||
break;
|
break;
|
||||||
case BATTLE_TERRAIN_CAVE:
|
case BATTLE_TERRAIN_CAVE:
|
||||||
gBattleScripting.moveEffect = MOVE_EFFECT_FLINCH;
|
gBattleScripting.moveEffect = MOVE_EFFECT_FLINCH;
|
||||||
@ -11873,6 +11908,13 @@ static void Cmd_tryrecycleitem(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool32 CanCamouflage(u8 battlerId)
|
||||||
|
{
|
||||||
|
if (IS_BATTLER_OF_TYPE(battlerId, sTerrainToType[gBattleTerrain]))
|
||||||
|
return FALSE;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
static void Cmd_settypetoterrain(void)
|
static void Cmd_settypetoterrain(void)
|
||||||
{
|
{
|
||||||
if (!IS_BATTLER_OF_TYPE(gBattlerAttacker, sTerrainToType[gBattleTerrain]))
|
if (!IS_BATTLER_OF_TYPE(gBattlerAttacker, sTerrainToType[gBattleTerrain]))
|
||||||
@ -12397,11 +12439,36 @@ static void Cmd_trainerslideout(void)
|
|||||||
gBattlescriptCurrInstr += 2;
|
gBattlescriptCurrInstr += 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const u16 sTelekinesisBanList[] =
|
||||||
|
{
|
||||||
|
SPECIES_DIGLETT,
|
||||||
|
SPECIES_DUGTRIO,
|
||||||
|
#ifdef POKEMON_EXPANSION
|
||||||
|
SPECIES_DIGLETT_ALOLAN,
|
||||||
|
SPECIES_DUGTRIO_ALOLAN,
|
||||||
|
SPECIES_SANDYGAST,
|
||||||
|
SPECIES_PALOSSAND,
|
||||||
|
SPECIES_GENGAR_MEGA,
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
bool32 IsTelekinesisBannedSpecies(u16 species)
|
||||||
|
{
|
||||||
|
u32 i;
|
||||||
|
|
||||||
|
for (i = 0; i < ARRAY_COUNT(sTelekinesisBanList); i++)
|
||||||
|
{
|
||||||
|
if (species == sTelekinesisBanList[i])
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
static void Cmd_settelekinesis(void)
|
static void Cmd_settelekinesis(void)
|
||||||
{
|
{
|
||||||
if (gStatuses3[gBattlerTarget] & (STATUS3_TELEKINESIS | STATUS3_ROOTED | STATUS3_SMACKED_DOWN)
|
if (gStatuses3[gBattlerTarget] & (STATUS3_TELEKINESIS | STATUS3_ROOTED | STATUS3_SMACKED_DOWN)
|
||||||
|| gFieldStatuses & STATUS_FIELD_GRAVITY
|
|| gFieldStatuses & STATUS_FIELD_GRAVITY
|
||||||
|| (gBattleMons[gBattlerTarget].species == SPECIES_DIGLETT || gBattleMons[gBattlerTarget].species == SPECIES_DUGTRIO))
|
|| IsTelekinesisBannedSpecies(gBattleMons[gBattlerTarget].species))
|
||||||
{
|
{
|
||||||
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
|
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
|
||||||
}
|
}
|
||||||
@ -12469,19 +12536,14 @@ static void Cmd_trygetbaddreamstarget(void)
|
|||||||
|
|
||||||
static void Cmd_tryworryseed(void)
|
static void Cmd_tryworryseed(void)
|
||||||
{
|
{
|
||||||
switch (gBattleMons[gBattlerTarget].ability)
|
if (IsWorrySeedBannedAbility(gBattleMons[gBattlerTarget].ability))
|
||||||
{
|
{
|
||||||
case ABILITY_INSOMNIA:
|
|
||||||
case ABILITY_MULTITYPE:
|
|
||||||
case ABILITY_TRUANT:
|
|
||||||
case ABILITY_STANCE_CHANGE:
|
|
||||||
case ABILITY_DISGUISE:
|
|
||||||
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
|
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
|
||||||
break;
|
}
|
||||||
default:
|
else
|
||||||
|
{
|
||||||
gBattleMons[gBattlerTarget].ability = ABILITY_INSOMNIA;
|
gBattleMons[gBattlerTarget].ability = ABILITY_INSOMNIA;
|
||||||
gBattlescriptCurrInstr += 5;
|
gBattlescriptCurrInstr += 5;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -23,7 +23,8 @@
|
|||||||
#include "trig.h"
|
#include "trig.h"
|
||||||
#include "window.h"
|
#include "window.h"
|
||||||
#include "battle_message.h"
|
#include "battle_message.h"
|
||||||
#include "battle_ai_script_commands.h"
|
#include "battle_ai_main.h"
|
||||||
|
#include "battle_ai_util.h"
|
||||||
#include "event_data.h"
|
#include "event_data.h"
|
||||||
#include "link.h"
|
#include "link.h"
|
||||||
#include "malloc.h"
|
#include "malloc.h"
|
||||||
@ -87,6 +88,134 @@ static const u8 sPkblToEscapeFactor[][3] = {
|
|||||||
static const u8 sGoNearCounterToCatchFactor[] = {4, 3, 2, 1};
|
static const u8 sGoNearCounterToCatchFactor[] = {4, 3, 2, 1};
|
||||||
static const u8 sGoNearCounterToEscapeFactor[] = {4, 4, 4, 4};
|
static const u8 sGoNearCounterToEscapeFactor[] = {4, 4, 4, 4};
|
||||||
|
|
||||||
|
static const u16 sSkillSwapBannedAbilities[] =
|
||||||
|
{
|
||||||
|
ABILITY_WONDER_GUARD,
|
||||||
|
ABILITY_MULTITYPE,
|
||||||
|
ABILITY_ILLUSION,
|
||||||
|
ABILITY_STANCE_CHANGE,
|
||||||
|
ABILITY_SCHOOLING,
|
||||||
|
ABILITY_COMATOSE,
|
||||||
|
ABILITY_SHIELDS_DOWN,
|
||||||
|
ABILITY_DISGUISE,
|
||||||
|
ABILITY_RKS_SYSTEM,
|
||||||
|
ABILITY_BATTLE_BOND,
|
||||||
|
ABILITY_POWER_CONSTRUCT,
|
||||||
|
ABILITY_NEUTRALIZING_GAS,
|
||||||
|
ABILITY_ICE_FACE,
|
||||||
|
ABILITY_HUNGER_SWITCH,
|
||||||
|
ABILITY_GULP_MISSILE,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const u16 sRolePlayBannedAbilities[] =
|
||||||
|
{
|
||||||
|
ABILITY_TRACE,
|
||||||
|
ABILITY_WONDER_GUARD,
|
||||||
|
ABILITY_FORECAST,
|
||||||
|
ABILITY_FLOWER_GIFT,
|
||||||
|
ABILITY_MULTITYPE,
|
||||||
|
ABILITY_ILLUSION,
|
||||||
|
ABILITY_ZEN_MODE,
|
||||||
|
ABILITY_IMPOSTER,
|
||||||
|
ABILITY_STANCE_CHANGE,
|
||||||
|
ABILITY_POWER_OF_ALCHEMY,
|
||||||
|
ABILITY_RECEIVER,
|
||||||
|
ABILITY_SCHOOLING,
|
||||||
|
ABILITY_COMATOSE,
|
||||||
|
ABILITY_SHIELDS_DOWN,
|
||||||
|
ABILITY_DISGUISE,
|
||||||
|
ABILITY_RKS_SYSTEM,
|
||||||
|
ABILITY_BATTLE_BOND,
|
||||||
|
ABILITY_POWER_CONSTRUCT,
|
||||||
|
ABILITY_ICE_FACE,
|
||||||
|
ABILITY_HUNGER_SWITCH,
|
||||||
|
ABILITY_GULP_MISSILE,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const u16 sRolePlayBannedAttackerAbilities[] =
|
||||||
|
{
|
||||||
|
ABILITY_MULTITYPE,
|
||||||
|
ABILITY_ZEN_MODE,
|
||||||
|
ABILITY_STANCE_CHANGE,
|
||||||
|
ABILITY_SCHOOLING,
|
||||||
|
ABILITY_COMATOSE,
|
||||||
|
ABILITY_SHIELDS_DOWN,
|
||||||
|
ABILITY_DISGUISE,
|
||||||
|
ABILITY_RKS_SYSTEM,
|
||||||
|
ABILITY_BATTLE_BOND,
|
||||||
|
ABILITY_POWER_CONSTRUCT,
|
||||||
|
ABILITY_ICE_FACE,
|
||||||
|
ABILITY_GULP_MISSILE,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const u16 sWorrySeedBannedAbilities[] =
|
||||||
|
{
|
||||||
|
ABILITY_MULTITYPE,
|
||||||
|
ABILITY_STANCE_CHANGE,
|
||||||
|
ABILITY_SCHOOLING,
|
||||||
|
ABILITY_COMATOSE,
|
||||||
|
ABILITY_SHIELDS_DOWN,
|
||||||
|
ABILITY_DISGUISE,
|
||||||
|
ABILITY_RKS_SYSTEM,
|
||||||
|
ABILITY_BATTLE_BOND,
|
||||||
|
ABILITY_POWER_CONSTRUCT,
|
||||||
|
ABILITY_TRUANT,
|
||||||
|
ABILITY_ICE_FACE,
|
||||||
|
ABILITY_GULP_MISSILE,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const u16 sGastroAcidBannedAbilities[] =
|
||||||
|
{
|
||||||
|
ABILITY_AS_ONE_ICE_RIDER,
|
||||||
|
ABILITY_AS_ONE_SHADOW_RIDER,
|
||||||
|
ABILITY_BATTLE_BOND,
|
||||||
|
ABILITY_COMATOSE,
|
||||||
|
ABILITY_DISGUISE,
|
||||||
|
ABILITY_GULP_MISSILE,
|
||||||
|
ABILITY_ICE_FACE,
|
||||||
|
ABILITY_MULTITYPE,
|
||||||
|
ABILITY_POWER_CONSTRUCT,
|
||||||
|
ABILITY_RKS_SYSTEM,
|
||||||
|
ABILITY_SCHOOLING,
|
||||||
|
ABILITY_SHIELDS_DOWN,
|
||||||
|
ABILITY_STANCE_CHANGE,
|
||||||
|
ABILITY_ZEN_MODE,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const u16 sEntrainmentBannedAttackerAbilities[] =
|
||||||
|
{
|
||||||
|
ABILITY_TRACE,
|
||||||
|
ABILITY_FORECAST,
|
||||||
|
ABILITY_FLOWER_GIFT,
|
||||||
|
ABILITY_ZEN_MODE,
|
||||||
|
ABILITY_ILLUSION,
|
||||||
|
ABILITY_IMPOSTER,
|
||||||
|
ABILITY_POWER_OF_ALCHEMY,
|
||||||
|
ABILITY_RECEIVER,
|
||||||
|
ABILITY_DISGUISE,
|
||||||
|
ABILITY_POWER_CONSTRUCT,
|
||||||
|
ABILITY_NEUTRALIZING_GAS,
|
||||||
|
ABILITY_ICE_FACE,
|
||||||
|
ABILITY_HUNGER_SWITCH,
|
||||||
|
ABILITY_GULP_MISSILE,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const u16 sEntrainmentTargetSimpleBeamBannedAbilities[] =
|
||||||
|
{
|
||||||
|
ABILITY_TRUANT,
|
||||||
|
ABILITY_MULTITYPE,
|
||||||
|
ABILITY_STANCE_CHANGE,
|
||||||
|
ABILITY_SCHOOLING,
|
||||||
|
ABILITY_COMATOSE,
|
||||||
|
ABILITY_SHIELDS_DOWN,
|
||||||
|
ABILITY_DISGUISE,
|
||||||
|
ABILITY_RKS_SYSTEM,
|
||||||
|
ABILITY_BATTLE_BOND,
|
||||||
|
ABILITY_ICE_FACE,
|
||||||
|
ABILITY_GULP_MISSILE,
|
||||||
|
};
|
||||||
|
|
||||||
|
// Functions
|
||||||
void HandleAction_UseMove(void)
|
void HandleAction_UseMove(void)
|
||||||
{
|
{
|
||||||
u32 i, side, moveType, var = 4;
|
u32 i, side, moveType, var = 4;
|
||||||
@ -1407,11 +1536,11 @@ static bool32 IsGravityPreventingMove(u32 move)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool32 IsHealBlockPreventingMove(u32 battler, u32 move)
|
bool32 IsHealBlockPreventingMove(u32 battler, u32 move)
|
||||||
{
|
{
|
||||||
if (!(gStatuses3[battler] & STATUS3_HEAL_BLOCK))
|
if (!(gStatuses3[battler] & STATUS3_HEAL_BLOCK))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
switch (gBattleMoves[move].effect)
|
switch (gBattleMoves[move].effect)
|
||||||
{
|
{
|
||||||
case EFFECT_ABSORB:
|
case EFFECT_ABSORB:
|
||||||
@ -2909,7 +3038,7 @@ void TryClearRageAndFuryCutter(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool32 IsThawingMove(u8 battlerId, u16 move)
|
bool32 IsThawingMove(u8 battlerId, u16 move)
|
||||||
{
|
{
|
||||||
switch (move)
|
switch (move)
|
||||||
{
|
{
|
||||||
@ -4971,10 +5100,9 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move
|
|||||||
break;
|
break;
|
||||||
case ABILITY_OBLIVIOUS:
|
case ABILITY_OBLIVIOUS:
|
||||||
if (gBattleMons[battler].status2 & STATUS2_INFATUATION)
|
if (gBattleMons[battler].status2 & STATUS2_INFATUATION)
|
||||||
{
|
|
||||||
StringCopy(gBattleTextBuff1, gStatusConditionString_LoveJpn);
|
|
||||||
effect = 3;
|
effect = 3;
|
||||||
}
|
else if (gDisableStructs[battler].tauntTimer != 0)
|
||||||
|
effect = 4;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (effect)
|
if (effect)
|
||||||
@ -4983,17 +5111,26 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move
|
|||||||
{
|
{
|
||||||
case 1: // status cleared
|
case 1: // status cleared
|
||||||
gBattleMons[battler].status1 = 0;
|
gBattleMons[battler].status1 = 0;
|
||||||
|
BattleScriptPushCursor();
|
||||||
|
gBattlescriptCurrInstr = BattleScript_AbilityCuredStatus;
|
||||||
break;
|
break;
|
||||||
case 2: // get rid of confusion
|
case 2: // get rid of confusion
|
||||||
gBattleMons[battler].status2 &= ~(STATUS2_CONFUSION);
|
gBattleMons[battler].status2 &= ~(STATUS2_CONFUSION);
|
||||||
|
BattleScriptPushCursor();
|
||||||
|
gBattlescriptCurrInstr = BattleScript_AbilityCuredStatus;
|
||||||
break;
|
break;
|
||||||
case 3: // get rid of infatuation
|
case 3: // get rid of infatuation
|
||||||
gBattleMons[battler].status2 &= ~(STATUS2_INFATUATION);
|
gBattleMons[battler].status2 &= ~(STATUS2_INFATUATION);
|
||||||
|
BattleScriptPushCursor();
|
||||||
|
gBattlescriptCurrInstr = BattleScript_BattlerGotOverItsInfatuation;
|
||||||
|
break;
|
||||||
|
case 4: // get rid of taunt
|
||||||
|
gDisableStructs[battler].tauntTimer = 0;
|
||||||
|
BattleScriptPushCursor();
|
||||||
|
gBattlescriptCurrInstr = BattleScript_BattlerShookOffTaunt;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
BattleScriptPushCursor();
|
|
||||||
gBattlescriptCurrInstr = BattleScript_AbilityCuredStatus;
|
|
||||||
gBattleScripting.battler = gActiveBattler = gBattlerAbility = battler;
|
gBattleScripting.battler = gActiveBattler = gBattlerAbility = battler;
|
||||||
BtlController_EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBattler].status1);
|
BtlController_EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBattler].status1);
|
||||||
MarkBattlerForControllerExec(gActiveBattler);
|
MarkBattlerForControllerExec(gActiveBattler);
|
||||||
@ -5716,10 +5853,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
|
|||||||
u8 ppBonuses;
|
u8 ppBonuses;
|
||||||
u16 move;
|
u16 move;
|
||||||
|
|
||||||
if (GetBattlerSide(battlerId) == B_SIDE_PLAYER)
|
mon = GetBattlerPartyData(battlerId);
|
||||||
mon = &gPlayerParty[gBattlerPartyIndexes[battlerId]];
|
|
||||||
else
|
|
||||||
mon = &gEnemyParty[gBattlerPartyIndexes[battlerId]];
|
|
||||||
for (i = 0; i < MAX_MON_MOVES; i++)
|
for (i = 0; i < MAX_MON_MOVES; i++)
|
||||||
{
|
{
|
||||||
move = GetMonData(mon, MON_DATA_MOVE1 + i);
|
move = GetMonData(mon, MON_DATA_MOVE1 + i);
|
||||||
@ -7398,6 +7532,11 @@ static u32 CalcAttackStat(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, b
|
|||||||
atkStage = gBattleMons[battlerDef].statStages[STAT_SPATK];
|
atkStage = gBattleMons[battlerDef].statStages[STAT_SPATK];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (gBattleMoves[move].effect == EFFECT_BODY_PRESS)
|
||||||
|
{
|
||||||
|
atkStat = gBattleMons[battlerAtk].defense;
|
||||||
|
atkStage = gBattleMons[battlerAtk].statStages[STAT_DEF];
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (IS_MOVE_PHYSICAL(move))
|
if (IS_MOVE_PHYSICAL(move))
|
||||||
@ -7515,7 +7654,7 @@ static u32 CalcAttackStat(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, b
|
|||||||
switch (GetBattlerAbility(BATTLE_PARTNER(battlerAtk)))
|
switch (GetBattlerAbility(BATTLE_PARTNER(battlerAtk)))
|
||||||
{
|
{
|
||||||
case ABILITY_FLOWER_GIFT:
|
case ABILITY_FLOWER_GIFT:
|
||||||
if (gBattleMons[BATTLE_PARTNER(battlerAtk)].species == SPECIES_CHERRIM && IS_MOVE_PHYSICAL(move))
|
if (gBattleMons[BATTLE_PARTNER(battlerAtk)].species == SPECIES_CHERRIM && WEATHER_HAS_EFFECT && (gBattleWeather & WEATHER_SUN_ANY) && IS_MOVE_PHYSICAL(move))
|
||||||
MulModifier(&modifier, UQ_4_12(1.5));
|
MulModifier(&modifier, UQ_4_12(1.5));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -7660,7 +7799,7 @@ static u32 CalcDefenseStat(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType,
|
|||||||
switch (GetBattlerAbility(BATTLE_PARTNER(battlerDef)))
|
switch (GetBattlerAbility(BATTLE_PARTNER(battlerDef)))
|
||||||
{
|
{
|
||||||
case ABILITY_FLOWER_GIFT:
|
case ABILITY_FLOWER_GIFT:
|
||||||
if (gBattleMons[BATTLE_PARTNER(battlerDef)].species == SPECIES_CHERRIM && !usesDefStat)
|
if (gBattleMons[BATTLE_PARTNER(battlerDef)].species == SPECIES_CHERRIM && WEATHER_HAS_EFFECT && gBattleWeather & WEATHER_SUN_ANY && !usesDefStat)
|
||||||
MulModifier(&modifier, UQ_4_12(1.5));
|
MulModifier(&modifier, UQ_4_12(1.5));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -7846,7 +7985,7 @@ static u32 CalcFinalDmg(u32 dmg, u16 move, u8 battlerAtk, u8 battlerDef, u8 move
|
|||||||
MulModifier(&finalModifier, UQ_4_12(2.0));
|
MulModifier(&finalModifier, UQ_4_12(2.0));
|
||||||
if (gBattleMoves[move].flags & FLAG_DMG_UNDERWATER && gStatuses3[battlerDef] & STATUS3_UNDERWATER)
|
if (gBattleMoves[move].flags & FLAG_DMG_UNDERWATER && gStatuses3[battlerDef] & STATUS3_UNDERWATER)
|
||||||
MulModifier(&finalModifier, UQ_4_12(2.0));
|
MulModifier(&finalModifier, UQ_4_12(2.0));
|
||||||
if (gBattleMoves[move].flags & FLAG_DMG_IN_AIR && gStatuses3[battlerDef] & STATUS3_ON_AIR)
|
if (gBattleMoves[move].flags & FLAG_DMG_2X_IN_AIR && gStatuses3[battlerDef] & STATUS3_ON_AIR)
|
||||||
MulModifier(&finalModifier, UQ_4_12(2.0));
|
MulModifier(&finalModifier, UQ_4_12(2.0));
|
||||||
|
|
||||||
dmg = ApplyModifier(finalModifier, dmg);
|
dmg = ApplyModifier(finalModifier, dmg);
|
||||||
@ -7961,7 +8100,7 @@ static u16 CalcTypeEffectivenessMultiplierInternal(u16 move, u8 moveType, u8 bat
|
|||||||
&& gBattleMons[battlerDef].type3 != gBattleMons[battlerDef].type1)
|
&& gBattleMons[battlerDef].type3 != gBattleMons[battlerDef].type1)
|
||||||
MulByTypeEffectiveness(&modifier, move, moveType, battlerDef, gBattleMons[battlerDef].type3, battlerAtk, recordAbilities);
|
MulByTypeEffectiveness(&modifier, move, moveType, battlerDef, gBattleMons[battlerDef].type3, battlerAtk, recordAbilities);
|
||||||
|
|
||||||
if (moveType == TYPE_GROUND && !IsBattlerGrounded(battlerDef) && !(gBattleMoves[move].flags & FLAG_DAMAGE_AIRBORNE))
|
if (moveType == TYPE_GROUND && !IsBattlerGrounded(battlerDef) && !(gBattleMoves[move].flags & FLAG_DMG_UNGROUNDED_IGNORE_TYPE_IF_FLYING))
|
||||||
{
|
{
|
||||||
modifier = UQ_4_12(0.0);
|
modifier = UQ_4_12(0.0);
|
||||||
if (recordAbilities && GetBattlerAbility(battlerDef) == ABILITY_LEVITATE)
|
if (recordAbilities && GetBattlerAbility(battlerDef) == ABILITY_LEVITATE)
|
||||||
@ -7975,7 +8114,7 @@ static u16 CalcTypeEffectivenessMultiplierInternal(u16 move, u8 moveType, u8 bat
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Thousand Arrows ignores type modifiers for flying mons
|
// Thousand Arrows ignores type modifiers for flying mons
|
||||||
if (!IsBattlerGrounded(battlerDef) && (gBattleMoves[move].flags & FLAG_DAMAGE_AIRBORNE)
|
if (!IsBattlerGrounded(battlerDef) && (gBattleMoves[move].flags & FLAG_DMG_UNGROUNDED_IGNORE_TYPE_IF_FLYING)
|
||||||
&& (gBattleMons[battlerDef].type1 == TYPE_FLYING || gBattleMons[battlerDef].type2 == TYPE_FLYING || gBattleMons[battlerDef].type3 == TYPE_FLYING))
|
&& (gBattleMons[battlerDef].type1 == TYPE_FLYING || gBattleMons[battlerDef].type2 == TYPE_FLYING || gBattleMons[battlerDef].type3 == TYPE_FLYING))
|
||||||
{
|
{
|
||||||
modifier = UQ_4_12(1.0);
|
modifier = UQ_4_12(1.0);
|
||||||
@ -8411,3 +8550,122 @@ static bool32 IsUnnerveAbilityOnOpposingSide(u8 battlerId)
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool32 TestMoveFlags(u16 move, u32 flag)
|
||||||
|
{
|
||||||
|
if (gBattleMoves[move].flags & flag)
|
||||||
|
return TRUE;
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Pokemon *GetBattlerPartyData(u8 battlerId)
|
||||||
|
{
|
||||||
|
struct Pokemon *mon;
|
||||||
|
if (GetBattlerSide(battlerId) == B_SIDE_PLAYER)
|
||||||
|
mon = &gPlayerParty[gBattlerPartyIndexes[battlerId]];
|
||||||
|
else
|
||||||
|
mon = &gEnemyParty[gBattlerPartyIndexes[battlerId]];
|
||||||
|
|
||||||
|
return mon;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Make sure the input bank is any bank on the specific mon's side
|
||||||
|
bool32 CanFling(u8 battlerId)
|
||||||
|
{
|
||||||
|
u16 item = gBattleMons[battlerId].item;
|
||||||
|
u16 itemEffect = ItemId_GetHoldEffect(item);
|
||||||
|
|
||||||
|
if (item == ITEM_NONE
|
||||||
|
|| GetBattlerAbility(battlerId) == ABILITY_KLUTZ
|
||||||
|
|| gFieldStatuses & STATUS_FIELD_MAGIC_ROOM
|
||||||
|
|| gDisableStructs[battlerId].embargoTimer != 0
|
||||||
|
|| !CanBattlerGetOrLoseItem(battlerId, item)
|
||||||
|
//|| itemEffect == HOLD_EFFECT_PRIMAL_ORB
|
||||||
|
|| itemEffect == HOLD_EFFECT_GEMS
|
||||||
|
#ifdef ITEM_ABILITY_CAPSULE
|
||||||
|
|| item == ITEM_ABILITY_CAPSULE
|
||||||
|
#endif
|
||||||
|
|| (ItemId_GetPocket(item) == POCKET_BERRIES && IsAbilityOnSide(battlerId, ABILITY_UNNERVE))
|
||||||
|
|| GetPocketByItemId(item) == POCKET_POKE_BALLS)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ability checks
|
||||||
|
bool32 IsRolePlayBannedAbilityAtk(u16 ability)
|
||||||
|
{
|
||||||
|
u32 i;
|
||||||
|
for (i = 0; i < ARRAY_COUNT(sRolePlayBannedAttackerAbilities); i++)
|
||||||
|
{
|
||||||
|
if (ability == sRolePlayBannedAttackerAbilities[i])
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool32 IsRolePlayBannedAbility(u16 ability)
|
||||||
|
{
|
||||||
|
u32 i;
|
||||||
|
for (i = 0; i < ARRAY_COUNT(sRolePlayBannedAbilities); i++)
|
||||||
|
{
|
||||||
|
if (ability == sRolePlayBannedAbilities[i])
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool32 IsSkillSwapBannedAbility(u16 ability)
|
||||||
|
{
|
||||||
|
u32 i;
|
||||||
|
for (i = 0; i < ARRAY_COUNT(sSkillSwapBannedAbilities); i++)
|
||||||
|
{
|
||||||
|
if (ability == sSkillSwapBannedAbilities[i])
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool32 IsWorrySeedBannedAbility(u16 ability)
|
||||||
|
{
|
||||||
|
u32 i;
|
||||||
|
for (i = 0; i < ARRAY_COUNT(sWorrySeedBannedAbilities); i++)
|
||||||
|
{
|
||||||
|
if (ability == sWorrySeedBannedAbilities[i])
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool32 IsGastroAcidBannedAbility(u16 ability)
|
||||||
|
{
|
||||||
|
u32 i;
|
||||||
|
for (i = 0; i < ARRAY_COUNT(sGastroAcidBannedAbilities); i++)
|
||||||
|
{
|
||||||
|
if (ability == sGastroAcidBannedAbilities[i])
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool32 IsEntrainmentBannedAbilityAttacker(u16 ability)
|
||||||
|
{
|
||||||
|
u32 i;
|
||||||
|
for (i = 0; i < ARRAY_COUNT(sEntrainmentBannedAttackerAbilities); i++)
|
||||||
|
{
|
||||||
|
if (ability == sEntrainmentBannedAttackerAbilities[i])
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool32 IsEntrainmentTargetOrSimpleBeamBannedAbility(u16 ability)
|
||||||
|
{
|
||||||
|
u32 i;
|
||||||
|
for (i = 0; i < ARRAY_COUNT(sEntrainmentTargetSimpleBeamBannedAbilities); i++)
|
||||||
|
{
|
||||||
|
if (ability == sEntrainmentTargetSimpleBeamBannedAbilities[i])
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
@ -27,7 +27,6 @@ void AllocateBattleResources(void)
|
|||||||
gBattleResources->beforeLvlUp = AllocZeroed(sizeof(*gBattleResources->beforeLvlUp));
|
gBattleResources->beforeLvlUp = AllocZeroed(sizeof(*gBattleResources->beforeLvlUp));
|
||||||
gBattleResources->ai = AllocZeroed(sizeof(*gBattleResources->ai));
|
gBattleResources->ai = AllocZeroed(sizeof(*gBattleResources->ai));
|
||||||
gBattleResources->battleHistory = AllocZeroed(sizeof(*gBattleResources->battleHistory));
|
gBattleResources->battleHistory = AllocZeroed(sizeof(*gBattleResources->battleHistory));
|
||||||
gBattleResources->AI_ScriptsStack = AllocZeroed(sizeof(*gBattleResources->AI_ScriptsStack));
|
|
||||||
|
|
||||||
gLinkBattleSendBuffer = AllocZeroed(BATTLE_BUFFER_LINK_SIZE);
|
gLinkBattleSendBuffer = AllocZeroed(BATTLE_BUFFER_LINK_SIZE);
|
||||||
gLinkBattleRecvBuffer = AllocZeroed(BATTLE_BUFFER_LINK_SIZE);
|
gLinkBattleRecvBuffer = AllocZeroed(BATTLE_BUFFER_LINK_SIZE);
|
||||||
@ -59,7 +58,6 @@ void FreeBattleResources(void)
|
|||||||
FREE_AND_SET_NULL(gBattleResources->beforeLvlUp);
|
FREE_AND_SET_NULL(gBattleResources->beforeLvlUp);
|
||||||
FREE_AND_SET_NULL(gBattleResources->ai);
|
FREE_AND_SET_NULL(gBattleResources->ai);
|
||||||
FREE_AND_SET_NULL(gBattleResources->battleHistory);
|
FREE_AND_SET_NULL(gBattleResources->battleHistory);
|
||||||
FREE_AND_SET_NULL(gBattleResources->AI_ScriptsStack);
|
|
||||||
FREE_AND_SET_NULL(gBattleResources);
|
FREE_AND_SET_NULL(gBattleResources);
|
||||||
|
|
||||||
FREE_AND_SET_NULL(gLinkBattleSendBuffer);
|
FREE_AND_SET_NULL(gLinkBattleSendBuffer);
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -40,7 +40,7 @@ static const u8 sPoisonPointDescription[] = _("Poisons foe on contact.");
|
|||||||
static const u8 sInnerFocusDescription[] = _("Prevents flinching.");
|
static const u8 sInnerFocusDescription[] = _("Prevents flinching.");
|
||||||
static const u8 sMagmaArmorDescription[] = _("Prevents freezing.");
|
static const u8 sMagmaArmorDescription[] = _("Prevents freezing.");
|
||||||
static const u8 sWaterVeilDescription[] = _("Prevents burns.");
|
static const u8 sWaterVeilDescription[] = _("Prevents burns.");
|
||||||
static const u8 sMagnetPullDescription[] = _("Traps Steel-type POKéMON.");
|
static const u8 sMagnetPullDescription[] = _("Traps Steel-type Pokémon.");
|
||||||
static const u8 sSoundproofDescription[] = _("Avoids sound-based moves.");
|
static const u8 sSoundproofDescription[] = _("Avoids sound-based moves.");
|
||||||
static const u8 sRainDishDescription[] = _("Slight HP recovery in rain.");
|
static const u8 sRainDishDescription[] = _("Slight HP recovery in rain.");
|
||||||
static const u8 sSandStreamDescription[] = _("Summons a sandstorm.");
|
static const u8 sSandStreamDescription[] = _("Summons a sandstorm.");
|
||||||
@ -255,7 +255,7 @@ static const u8 sGrimNeighDescription[] = _("KOs boost Sp. Atk stat.");
|
|||||||
static const u8 sAsOneIceRiderDescription[] = _("Unnerve and Chilling Neigh.");
|
static const u8 sAsOneIceRiderDescription[] = _("Unnerve and Chilling Neigh.");
|
||||||
static const u8 sAsOneShadowRiderDescription[] = _("Unnerve and Grim Neigh.");
|
static const u8 sAsOneShadowRiderDescription[] = _("Unnerve and Grim Neigh.");
|
||||||
|
|
||||||
const u8 gAbilityNames[ABILITIES_COUNT_GEN8][ABILITY_NAME_LENGTH + 1] =
|
const u8 gAbilityNames[ABILITIES_COUNT][ABILITY_NAME_LENGTH + 1] =
|
||||||
{
|
{
|
||||||
[ABILITY_NONE] = _("-------"),
|
[ABILITY_NONE] = _("-------"),
|
||||||
[ABILITY_STENCH] = _("Stench"),
|
[ABILITY_STENCH] = _("Stench"),
|
||||||
@ -527,7 +527,7 @@ const u8 gAbilityNames[ABILITIES_COUNT_GEN8][ABILITY_NAME_LENGTH + 1] =
|
|||||||
[ABILITY_AS_ONE_SHADOW_RIDER] = _("As One"),
|
[ABILITY_AS_ONE_SHADOW_RIDER] = _("As One"),
|
||||||
};
|
};
|
||||||
|
|
||||||
const u8 *const gAbilityDescriptionPointers[ABILITIES_COUNT_GEN8] =
|
const u8 *const gAbilityDescriptionPointers[ABILITIES_COUNT] =
|
||||||
{
|
{
|
||||||
[ABILITY_NONE] = sNoneDescription,
|
[ABILITY_NONE] = sNoneDescription,
|
||||||
[ABILITY_STENCH] = sStenchDescription,
|
[ABILITY_STENCH] = sStenchDescription,
|
||||||
|
@ -55,7 +55,7 @@ static const u8 sRazorWindDescription[] = _(
|
|||||||
|
|
||||||
static const u8 sSwordsDanceDescription[] = _(
|
static const u8 sSwordsDanceDescription[] = _(
|
||||||
"A fighting dance that\n"
|
"A fighting dance that\n"
|
||||||
"sharply raises ATTACK.");
|
"sharply raises Attack.");
|
||||||
|
|
||||||
static const u8 sCutDescription[] = _(
|
static const u8 sCutDescription[] = _(
|
||||||
"Cuts the foe with sharp\n"
|
"Cuts the foe with sharp\n"
|
||||||
@ -155,7 +155,7 @@ static const u8 sDoubleEdgeDescription[] = _(
|
|||||||
|
|
||||||
static const u8 sTailWhipDescription[] = _(
|
static const u8 sTailWhipDescription[] = _(
|
||||||
"Wags the tail to lower the\n"
|
"Wags the tail to lower the\n"
|
||||||
"foe's DEFENSE.");
|
"foe's Defense.");
|
||||||
|
|
||||||
static const u8 sPoisonStingDescription[] = _(
|
static const u8 sPoisonStingDescription[] = _(
|
||||||
"A toxic attack with barbs,\n"
|
"A toxic attack with barbs,\n"
|
||||||
@ -171,7 +171,7 @@ static const u8 sPinMissileDescription[] = _(
|
|||||||
|
|
||||||
static const u8 sLeerDescription[] = _(
|
static const u8 sLeerDescription[] = _(
|
||||||
"Frightens the foe with a\n"
|
"Frightens the foe with a\n"
|
||||||
"leer to lower DEFENSE.");
|
"leer to lower Defense.");
|
||||||
|
|
||||||
static const u8 sBiteDescription[] = _(
|
static const u8 sBiteDescription[] = _(
|
||||||
"Bites with vicious fangs.\n"
|
"Bites with vicious fangs.\n"
|
||||||
@ -179,7 +179,7 @@ static const u8 sBiteDescription[] = _(
|
|||||||
|
|
||||||
static const u8 sGrowlDescription[] = _(
|
static const u8 sGrowlDescription[] = _(
|
||||||
"Growls cutely to reduce the\n"
|
"Growls cutely to reduce the\n"
|
||||||
"foe's ATTACK.");
|
"foe's Attack.");
|
||||||
|
|
||||||
static const u8 sRoarDescription[] = _(
|
static const u8 sRoarDescription[] = _(
|
||||||
"Makes the foe flee to end\n"
|
"Makes the foe flee to end\n"
|
||||||
@ -203,7 +203,7 @@ static const u8 sDisableDescription[] = _(
|
|||||||
|
|
||||||
static const u8 sAcidDescription[] = _(
|
static const u8 sAcidDescription[] = _(
|
||||||
"Sprays a hide-melting acid.\n"
|
"Sprays a hide-melting acid.\n"
|
||||||
"May lower DEFENSE.");
|
"May lower Defense.");
|
||||||
|
|
||||||
static const u8 sEmberDescription[] = _(
|
static const u8 sEmberDescription[] = _(
|
||||||
"A weak fire attack that may\n"
|
"A weak fire attack that may\n"
|
||||||
@ -243,11 +243,11 @@ static const u8 sPsybeamDescription[] = _(
|
|||||||
|
|
||||||
static const u8 sBubbleBeamDescription[] = _(
|
static const u8 sBubbleBeamDescription[] = _(
|
||||||
"Forcefully sprays bubbles\n"
|
"Forcefully sprays bubbles\n"
|
||||||
"that may lower SPEED.");
|
"that may lower Speed.");
|
||||||
|
|
||||||
static const u8 sAuroraBeamDescription[] = _(
|
static const u8 sAuroraBeamDescription[] = _(
|
||||||
"Fires a rainbow-colored\n"
|
"Fires a rainbow-colored\n"
|
||||||
"beam that may lower ATTACK.");
|
"beam that may lower Attack.");
|
||||||
|
|
||||||
static const u8 sHyperBeamDescription[] = _(
|
static const u8 sHyperBeamDescription[] = _(
|
||||||
"Powerful, but leaves the\n"
|
"Powerful, but leaves the\n"
|
||||||
@ -295,7 +295,7 @@ static const u8 sLeechSeedDescription[] = _(
|
|||||||
|
|
||||||
static const u8 sGrowthDescription[] = _(
|
static const u8 sGrowthDescription[] = _(
|
||||||
"Forces the body to grow\n"
|
"Forces the body to grow\n"
|
||||||
"and heightens SP. ATK.");
|
"and heightens Sp. Atk.");
|
||||||
|
|
||||||
static const u8 sRazorLeafDescription[] = _(
|
static const u8 sRazorLeafDescription[] = _(
|
||||||
"Cuts the enemy with leaves.\n"
|
"Cuts the enemy with leaves.\n"
|
||||||
@ -323,7 +323,7 @@ static const u8 sPetalDanceDescription[] = _(
|
|||||||
|
|
||||||
static const u8 sStringShotDescription[] = _(
|
static const u8 sStringShotDescription[] = _(
|
||||||
"Binds the foe with string\n"
|
"Binds the foe with string\n"
|
||||||
"to reduce its SPEED.");
|
"to reduce its Speed.");
|
||||||
|
|
||||||
static const u8 sDragonRageDescription[] = _(
|
static const u8 sDragonRageDescription[] = _(
|
||||||
"Launches shock waves that\n"
|
"Launches shock waves that\n"
|
||||||
@ -375,7 +375,7 @@ static const u8 sConfusionDescription[] = _(
|
|||||||
|
|
||||||
static const u8 sPsychicDescription[] = _(
|
static const u8 sPsychicDescription[] = _(
|
||||||
"A powerful psychic attack\n"
|
"A powerful psychic attack\n"
|
||||||
"that may lower SP. DEF.");
|
"that may lower Sp. Def.");
|
||||||
|
|
||||||
static const u8 sHypnosisDescription[] = _(
|
static const u8 sHypnosisDescription[] = _(
|
||||||
"A hypnotizing move that\n"
|
"A hypnotizing move that\n"
|
||||||
@ -383,18 +383,18 @@ static const u8 sHypnosisDescription[] = _(
|
|||||||
|
|
||||||
static const u8 sMeditateDescription[] = _(
|
static const u8 sMeditateDescription[] = _(
|
||||||
"Meditates in a peaceful\n"
|
"Meditates in a peaceful\n"
|
||||||
"fashion to raise ATTACK.");
|
"fashion to raise Attack.");
|
||||||
|
|
||||||
static const u8 sAgilityDescription[] = _(
|
static const u8 sAgilityDescription[] = _(
|
||||||
"Relaxes the body to sharply\n"
|
"Relaxes the body to sharply\n"
|
||||||
"boost SPEED.");
|
"boost Speed.");
|
||||||
|
|
||||||
static const u8 sQuickAttackDescription[] = _(
|
static const u8 sQuickAttackDescription[] = _(
|
||||||
"An extremely fast attack\n"
|
"An extremely fast attack\n"
|
||||||
"that always strikes first.");
|
"that always strikes first.");
|
||||||
|
|
||||||
static const u8 sRageDescription[] = _(
|
static const u8 sRageDescription[] = _(
|
||||||
"Raises the user's ATTACK\n"
|
"Raises the user's Attack\n"
|
||||||
"every time it is hit.");
|
"every time it is hit.");
|
||||||
|
|
||||||
static const u8 sTeleportDescription[] = _(
|
static const u8 sTeleportDescription[] = _(
|
||||||
@ -411,7 +411,7 @@ static const u8 sMimicDescription[] = _(
|
|||||||
|
|
||||||
static const u8 sScreechDescription[] = _(
|
static const u8 sScreechDescription[] = _(
|
||||||
"Emits a screech to sharply\n"
|
"Emits a screech to sharply\n"
|
||||||
"reduce the foe's DEFENSE.");
|
"reduce the foe's Defense.");
|
||||||
|
|
||||||
static const u8 sDoubleTeamDescription[] = _(
|
static const u8 sDoubleTeamDescription[] = _(
|
||||||
"Creates illusory copies to\n"
|
"Creates illusory copies to\n"
|
||||||
@ -423,7 +423,7 @@ static const u8 sRecoverDescription[] = _(
|
|||||||
|
|
||||||
static const u8 sHardenDescription[] = _(
|
static const u8 sHardenDescription[] = _(
|
||||||
"Stiffens the body's \n"
|
"Stiffens the body's \n"
|
||||||
"muscles to raise DEFENSE.");
|
"muscles to raise Defense.");
|
||||||
|
|
||||||
static const u8 sMinimizeDescription[] = _(
|
static const u8 sMinimizeDescription[] = _(
|
||||||
"Minimizes the user's size\n"
|
"Minimizes the user's size\n"
|
||||||
@ -439,19 +439,19 @@ static const u8 sConfuseRayDescription[] = _(
|
|||||||
|
|
||||||
static const u8 sWithdrawDescription[] = _(
|
static const u8 sWithdrawDescription[] = _(
|
||||||
"Withdraws the body into its\n"
|
"Withdraws the body into its\n"
|
||||||
"hard shell to raise DEFENSE.");
|
"hard shell to raise Defense.");
|
||||||
|
|
||||||
static const u8 sDefenseCurlDescription[] = _(
|
static const u8 sDefenseCurlDescription[] = _(
|
||||||
"Curls up to conceal weak\n"
|
"Curls up to conceal weak\n"
|
||||||
"spots and raise DEFENSE.");
|
"spots and raise Defense.");
|
||||||
|
|
||||||
static const u8 sBarrierDescription[] = _(
|
static const u8 sBarrierDescription[] = _(
|
||||||
"Creates a barrier that\n"
|
"Creates a barrier that\n"
|
||||||
"sharply raises DEFENSE.");
|
"sharply raises Defense.");
|
||||||
|
|
||||||
static const u8 sLightScreenDescription[] = _(
|
static const u8 sLightScreenDescription[] = _(
|
||||||
"Creates a wall of light that\n"
|
"Creates a wall of light that\n"
|
||||||
"lowers SP. ATK damage.");
|
"lowers Sp. Atk damage.");
|
||||||
|
|
||||||
static const u8 sHazeDescription[] = _(
|
static const u8 sHazeDescription[] = _(
|
||||||
"Creates a black haze that\n"
|
"Creates a black haze that\n"
|
||||||
@ -471,7 +471,7 @@ static const u8 sBideDescription[] = _(
|
|||||||
|
|
||||||
static const u8 sMetronomeDescription[] = _(
|
static const u8 sMetronomeDescription[] = _(
|
||||||
"Waggles a finger to use any\n"
|
"Waggles a finger to use any\n"
|
||||||
"POKéMON move at random.");
|
"Pokémon move at random.");
|
||||||
|
|
||||||
static const u8 sMirrorMoveDescription[] = _(
|
static const u8 sMirrorMoveDescription[] = _(
|
||||||
"Counters the foe's attack\n"
|
"Counters the foe's attack\n"
|
||||||
@ -527,11 +527,11 @@ static const u8 sSpikeCannonDescription[] = _(
|
|||||||
|
|
||||||
static const u8 sConstrictDescription[] = _(
|
static const u8 sConstrictDescription[] = _(
|
||||||
"Constricts to inflict pain.\n"
|
"Constricts to inflict pain.\n"
|
||||||
"May lower SPEED.");
|
"May lower Speed.");
|
||||||
|
|
||||||
static const u8 sAmnesiaDescription[] = _(
|
static const u8 sAmnesiaDescription[] = _(
|
||||||
"Forgets about something\n"
|
"Forgets about something\n"
|
||||||
"and sharply raises SP. DEF.");
|
"and sharply raises Sp. Def.");
|
||||||
|
|
||||||
static const u8 sKinesisDescription[] = _(
|
static const u8 sKinesisDescription[] = _(
|
||||||
"Distracts the foe.\n"
|
"Distracts the foe.\n"
|
||||||
@ -579,7 +579,7 @@ static const u8 sTransformDescription[] = _(
|
|||||||
|
|
||||||
static const u8 sBubbleDescription[] = _(
|
static const u8 sBubbleDescription[] = _(
|
||||||
"An attack using bubbles.\n"
|
"An attack using bubbles.\n"
|
||||||
"May lower the foe's SPEED.");
|
"May lower the foe's Speed.");
|
||||||
|
|
||||||
static const u8 sDizzyPunchDescription[] = _(
|
static const u8 sDizzyPunchDescription[] = _(
|
||||||
"A rhythmic punch that may\n"
|
"A rhythmic punch that may\n"
|
||||||
@ -603,7 +603,7 @@ static const u8 sSplashDescription[] = _(
|
|||||||
|
|
||||||
static const u8 sAcidArmorDescription[] = _(
|
static const u8 sAcidArmorDescription[] = _(
|
||||||
"Liquifies the user's body\n"
|
"Liquifies the user's body\n"
|
||||||
"to sharply raise DEFENSE.");
|
"to sharply raise Defense.");
|
||||||
|
|
||||||
static const u8 sCrabhammerDescription[] = _(
|
static const u8 sCrabhammerDescription[] = _(
|
||||||
"Hammers with a pincer. Has a\n"
|
"Hammers with a pincer. Has a\n"
|
||||||
@ -635,7 +635,7 @@ static const u8 sHyperFangDescription[] = _(
|
|||||||
|
|
||||||
static const u8 sSharpenDescription[] = _(
|
static const u8 sSharpenDescription[] = _(
|
||||||
"Reduces the polygon count\n"
|
"Reduces the polygon count\n"
|
||||||
"and raises ATTACK.");
|
"and raises Attack.");
|
||||||
|
|
||||||
static const u8 sConversionDescription[] = _(
|
static const u8 sConversionDescription[] = _(
|
||||||
"Changes the user's type\n"
|
"Changes the user's type\n"
|
||||||
@ -711,7 +711,7 @@ static const u8 sAeroblastDescription[] = _(
|
|||||||
|
|
||||||
static const u8 sCottonSporeDescription[] = _(
|
static const u8 sCottonSporeDescription[] = _(
|
||||||
"Spores cling to the foe,\n"
|
"Spores cling to the foe,\n"
|
||||||
"sharply reducing SPEED.");
|
"sharply reducing Speed.");
|
||||||
|
|
||||||
static const u8 sReversalDescription[] = _(
|
static const u8 sReversalDescription[] = _(
|
||||||
"Inflicts more damage when\n"
|
"Inflicts more damage when\n"
|
||||||
@ -735,7 +735,7 @@ static const u8 sMachPunchDescription[] = _(
|
|||||||
|
|
||||||
static const u8 sScaryFaceDescription[] = _(
|
static const u8 sScaryFaceDescription[] = _(
|
||||||
"Frightens with a scary face\n"
|
"Frightens with a scary face\n"
|
||||||
"to sharply reduce SPEED.");
|
"to sharply reduce Speed.");
|
||||||
|
|
||||||
static const u8 sFeintAttackDescription[] = _(
|
static const u8 sFeintAttackDescription[] = _(
|
||||||
"Draws the foe close, then\n"
|
"Draws the foe close, then\n"
|
||||||
@ -746,7 +746,7 @@ static const u8 sSweetKissDescription[] = _(
|
|||||||
"look. May cause confusion.");
|
"look. May cause confusion.");
|
||||||
|
|
||||||
static const u8 sBellyDrumDescription[] = _(
|
static const u8 sBellyDrumDescription[] = _(
|
||||||
"Maximizes ATTACK while\n"
|
"Maximizes Attack while\n"
|
||||||
"sacrificing HP.");
|
"sacrificing HP.");
|
||||||
|
|
||||||
static const u8 sSludgeBombDescription[] = _(
|
static const u8 sSludgeBombDescription[] = _(
|
||||||
@ -778,12 +778,12 @@ static const u8 sDestinyBondDescription[] = _(
|
|||||||
"is also made to faint.");
|
"is also made to faint.");
|
||||||
|
|
||||||
static const u8 sPerishSongDescription[] = _(
|
static const u8 sPerishSongDescription[] = _(
|
||||||
"Any POKéMON hearing this\n"
|
"Any Pokémon hearing this\n"
|
||||||
"song faints in 3 turns.");
|
"song faints in 3 turns.");
|
||||||
|
|
||||||
static const u8 sIcyWindDescription[] = _(
|
static const u8 sIcyWindDescription[] = _(
|
||||||
"A chilling attack that\n"
|
"A chilling attack that\n"
|
||||||
"lowers the foe's SPEED.");
|
"lowers the foe's Speed.");
|
||||||
|
|
||||||
static const u8 sDetectDescription[] = _(
|
static const u8 sDetectDescription[] = _(
|
||||||
"Evades attack, but may fail\n"
|
"Evades attack, but may fail\n"
|
||||||
@ -815,7 +815,7 @@ static const u8 sEndureDescription[] = _(
|
|||||||
|
|
||||||
static const u8 sCharmDescription[] = _(
|
static const u8 sCharmDescription[] = _(
|
||||||
"Charms the foe and sharply\n"
|
"Charms the foe and sharply\n"
|
||||||
"reduces its ATTACK.");
|
"reduces its Attack.");
|
||||||
|
|
||||||
static const u8 sRolloutDescription[] = _(
|
static const u8 sRolloutDescription[] = _(
|
||||||
"An attack lasting 5 turns\n"
|
"An attack lasting 5 turns\n"
|
||||||
@ -827,7 +827,7 @@ static const u8 sFalseSwipeDescription[] = _(
|
|||||||
|
|
||||||
static const u8 sSwaggerDescription[] = _(
|
static const u8 sSwaggerDescription[] = _(
|
||||||
"Confuses the foe, but also\n"
|
"Confuses the foe, but also\n"
|
||||||
"sharply raises ATTACK.");
|
"sharply raises Attack.");
|
||||||
|
|
||||||
static const u8 sMilkDrinkDescription[] = _(
|
static const u8 sMilkDrinkDescription[] = _(
|
||||||
"Recovers up to half the\n"
|
"Recovers up to half the\n"
|
||||||
@ -871,7 +871,7 @@ static const u8 sPresentDescription[] = _(
|
|||||||
|
|
||||||
static const u8 sFrustrationDescription[] = _(
|
static const u8 sFrustrationDescription[] = _(
|
||||||
"An attack that is stronger\n"
|
"An attack that is stronger\n"
|
||||||
"if the TRAINER is disliked.");
|
"if the Trainer is disliked.");
|
||||||
|
|
||||||
static const u8 sSafeguardDescription[] = _(
|
static const u8 sSafeguardDescription[] = _(
|
||||||
"A mystical force prevents\n"
|
"A mystical force prevents\n"
|
||||||
@ -923,11 +923,11 @@ static const u8 sSweetScentDescription[] = _(
|
|||||||
|
|
||||||
static const u8 sIronTailDescription[] = _(
|
static const u8 sIronTailDescription[] = _(
|
||||||
"Attacks with a rock-hard\n"
|
"Attacks with a rock-hard\n"
|
||||||
"tail. May lower DEFENSE.");
|
"tail. May lower Defense.");
|
||||||
|
|
||||||
static const u8 sMetalClawDescription[] = _(
|
static const u8 sMetalClawDescription[] = _(
|
||||||
"A claw attack that may\n"
|
"A claw attack that may\n"
|
||||||
"raise the user's ATTACK.");
|
"raise the user's Attack.");
|
||||||
|
|
||||||
static const u8 sVitalThrowDescription[] = _(
|
static const u8 sVitalThrowDescription[] = _(
|
||||||
"Makes the user's move last,\n"
|
"Makes the user's move last,\n"
|
||||||
@ -958,16 +958,16 @@ static const u8 sTwisterDescription[] = _(
|
|||||||
"to tear at the foe.");
|
"to tear at the foe.");
|
||||||
|
|
||||||
static const u8 sRainDanceDescription[] = _(
|
static const u8 sRainDanceDescription[] = _(
|
||||||
"Boosts the power of WATER-\n"
|
"Boosts the power of Water-\n"
|
||||||
"type moves for 5 turns.");
|
"type moves for 5 turns.");
|
||||||
|
|
||||||
static const u8 sSunnyDayDescription[] = _(
|
static const u8 sSunnyDayDescription[] = _(
|
||||||
"Boosts the power of FIRE-\n"
|
"Boosts the power of Fire-\n"
|
||||||
"type moves for 5 turns.");
|
"type moves for 5 turns.");
|
||||||
|
|
||||||
static const u8 sCrunchDescription[] = _(
|
static const u8 sCrunchDescription[] = _(
|
||||||
"Crunches with sharp fangs.\n"
|
"Crunches with sharp fangs.\n"
|
||||||
"May lower DEFENSE.");
|
"May lower Defense.");
|
||||||
|
|
||||||
static const u8 sMirrorCoatDescription[] = _(
|
static const u8 sMirrorCoatDescription[] = _(
|
||||||
"Counters the foe's special\n"
|
"Counters the foe's special\n"
|
||||||
@ -987,7 +987,7 @@ static const u8 sAncientPowerDescription[] = _(
|
|||||||
|
|
||||||
static const u8 sShadowBallDescription[] = _(
|
static const u8 sShadowBallDescription[] = _(
|
||||||
"Hurls a black blob that may\n"
|
"Hurls a black blob that may\n"
|
||||||
"lower the foe's SP. DEF.");
|
"lower the foe's Sp. Def.");
|
||||||
|
|
||||||
static const u8 sFutureSightDescription[] = _(
|
static const u8 sFutureSightDescription[] = _(
|
||||||
"Heightens inner power to\n"
|
"Heightens inner power to\n"
|
||||||
@ -995,14 +995,14 @@ static const u8 sFutureSightDescription[] = _(
|
|||||||
|
|
||||||
static const u8 sRockSmashDescription[] = _(
|
static const u8 sRockSmashDescription[] = _(
|
||||||
"A rock-crushing attack\n"
|
"A rock-crushing attack\n"
|
||||||
"that may lower DEFENSE.");
|
"that may lower Defense.");
|
||||||
|
|
||||||
static const u8 sWhirlpoolDescription[] = _(
|
static const u8 sWhirlpoolDescription[] = _(
|
||||||
"Traps and hurts the foe in\n"
|
"Traps and hurts the foe in\n"
|
||||||
"a whirlpool for 2 to 5 turns.");
|
"a whirlpool for 2 to 5 turns.");
|
||||||
|
|
||||||
static const u8 sBeatUpDescription[] = _(
|
static const u8 sBeatUpDescription[] = _(
|
||||||
"Summons party POKéMON to\n"
|
"Summons party Pokémon to\n"
|
||||||
"join in the attack.");
|
"join in the attack.");
|
||||||
|
|
||||||
static const u8 sFakeOutDescription[] = _(
|
static const u8 sFakeOutDescription[] = _(
|
||||||
@ -1039,7 +1039,7 @@ static const u8 sTormentDescription[] = _(
|
|||||||
|
|
||||||
static const u8 sFlatterDescription[] = _(
|
static const u8 sFlatterDescription[] = _(
|
||||||
"Confuses the foe, but\n"
|
"Confuses the foe, but\n"
|
||||||
"raises its SP. ATK.");
|
"raises its Sp. Atk.");
|
||||||
|
|
||||||
static const u8 sWillOWispDescription[] = _(
|
static const u8 sWillOWispDescription[] = _(
|
||||||
"Inflicts a burn on the foe\n"
|
"Inflicts a burn on the foe\n"
|
||||||
@ -1050,7 +1050,7 @@ static const u8 sMementoDescription[] = _(
|
|||||||
"the foe's abilities.");
|
"the foe's abilities.");
|
||||||
|
|
||||||
static const u8 sFacadeDescription[] = _(
|
static const u8 sFacadeDescription[] = _(
|
||||||
"Boosts ATTACK when burned,\n"
|
"Boosts Attack when burned,\n"
|
||||||
"paralyzed, or poisoned.");
|
"paralyzed, or poisoned.");
|
||||||
|
|
||||||
static const u8 sFocusPunchDescription[] = _(
|
static const u8 sFocusPunchDescription[] = _(
|
||||||
@ -1170,27 +1170,27 @@ static const u8 sArmThrustDescription[] = _(
|
|||||||
"strike the foe 2 to 5 times.");
|
"strike the foe 2 to 5 times.");
|
||||||
|
|
||||||
static const u8 sCamouflageDescription[] = _(
|
static const u8 sCamouflageDescription[] = _(
|
||||||
"Alters the POKéMON's type\n"
|
"Alters the Pokémon's type\n"
|
||||||
"depending on the location.");
|
"depending on the location.");
|
||||||
|
|
||||||
static const u8 sTailGlowDescription[] = _(
|
static const u8 sTailGlowDescription[] = _(
|
||||||
"Flashes a light that sharply\n"
|
"Flashes a light that sharply\n"
|
||||||
"raises SP. ATK.");
|
"raises Sp. Atk.");
|
||||||
|
|
||||||
static const u8 sLusterPurgeDescription[] = _(
|
static const u8 sLusterPurgeDescription[] = _(
|
||||||
"Attacks with a burst of\n"
|
"Attacks with a burst of\n"
|
||||||
"light. May lower SP. DEF.");
|
"light. May lower Sp. Def.");
|
||||||
|
|
||||||
static const u8 sMistBallDescription[] = _(
|
static const u8 sMistBallDescription[] = _(
|
||||||
"Attacks with a flurry of\n"
|
"Attacks with a flurry of\n"
|
||||||
"down. May lower SP. ATK.");
|
"down. May lower Sp. Atk.");
|
||||||
|
|
||||||
static const u8 sFeatherDanceDescription[] = _(
|
static const u8 sFeatherDanceDescription[] = _(
|
||||||
"Envelops the foe with down\n"
|
"Envelops the foe with down\n"
|
||||||
"to sharply reduce ATTACK.");
|
"to sharply reduce Attack.");
|
||||||
|
|
||||||
static const u8 sTeeterDanceDescription[] = _(
|
static const u8 sTeeterDanceDescription[] = _(
|
||||||
"Confuses all POKéMON on\n"
|
"Confuses all Pokémon on\n"
|
||||||
"the scene.");
|
"the scene.");
|
||||||
|
|
||||||
static const u8 sBlazeKickDescription[] = _(
|
static const u8 sBlazeKickDescription[] = _(
|
||||||
@ -1223,7 +1223,7 @@ static const u8 sPoisonFangDescription[] = _(
|
|||||||
|
|
||||||
static const u8 sCrushClawDescription[] = _(
|
static const u8 sCrushClawDescription[] = _(
|
||||||
"Tears at the foe with sharp\n"
|
"Tears at the foe with sharp\n"
|
||||||
"claws. May lower DEFENSE.");
|
"claws. May lower Defense.");
|
||||||
|
|
||||||
static const u8 sBlastBurnDescription[] = _(
|
static const u8 sBlastBurnDescription[] = _(
|
||||||
"Powerful, but leaves the\n"
|
"Powerful, but leaves the\n"
|
||||||
@ -1235,7 +1235,7 @@ static const u8 sHydroCannonDescription[] = _(
|
|||||||
|
|
||||||
static const u8 sMeteorMashDescription[] = _(
|
static const u8 sMeteorMashDescription[] = _(
|
||||||
"Fires a meteor-like punch.\n"
|
"Fires a meteor-like punch.\n"
|
||||||
"May raise ATTACK.");
|
"May raise Attack.");
|
||||||
|
|
||||||
static const u8 sAstonishDescription[] = _(
|
static const u8 sAstonishDescription[] = _(
|
||||||
"An attack that may shock\n"
|
"An attack that may shock\n"
|
||||||
@ -1251,7 +1251,7 @@ static const u8 sAromatherapyDescription[] = _(
|
|||||||
|
|
||||||
static const u8 sFakeTearsDescription[] = _(
|
static const u8 sFakeTearsDescription[] = _(
|
||||||
"Feigns crying to sharply\n"
|
"Feigns crying to sharply\n"
|
||||||
"lower the foe's SP. DEF.");
|
"lower the foe's Sp. Def.");
|
||||||
|
|
||||||
static const u8 sAirCutterDescription[] = _(
|
static const u8 sAirCutterDescription[] = _(
|
||||||
"Hacks with razorlike wind.\n"
|
"Hacks with razorlike wind.\n"
|
||||||
@ -1259,7 +1259,7 @@ static const u8 sAirCutterDescription[] = _(
|
|||||||
|
|
||||||
static const u8 sOverheatDescription[] = _(
|
static const u8 sOverheatDescription[] = _(
|
||||||
"Allows a full-power attack,\n"
|
"Allows a full-power attack,\n"
|
||||||
"but sharply lowers SP. ATK.");
|
"but sharply lowers Sp. Atk.");
|
||||||
|
|
||||||
static const u8 sOdorSleuthDescription[] = _(
|
static const u8 sOdorSleuthDescription[] = _(
|
||||||
"Negates the foe's efforts\n"
|
"Negates the foe's efforts\n"
|
||||||
@ -1267,7 +1267,7 @@ static const u8 sOdorSleuthDescription[] = _(
|
|||||||
|
|
||||||
static const u8 sRockTombDescription[] = _(
|
static const u8 sRockTombDescription[] = _(
|
||||||
"Stops the foe from moving\n"
|
"Stops the foe from moving\n"
|
||||||
"with rocks and cuts SPEED.");
|
"with rocks and cuts Speed.");
|
||||||
|
|
||||||
static const u8 sSilverWindDescription[] = _(
|
static const u8 sSilverWindDescription[] = _(
|
||||||
"A powdery attack that may\n"
|
"A powdery attack that may\n"
|
||||||
@ -1275,7 +1275,7 @@ static const u8 sSilverWindDescription[] = _(
|
|||||||
|
|
||||||
static const u8 sMetalSoundDescription[] = _(
|
static const u8 sMetalSoundDescription[] = _(
|
||||||
"Emits a horrible screech\n"
|
"Emits a horrible screech\n"
|
||||||
"that sharply lowers SP. DEF.");
|
"that sharply lowers Sp. Def.");
|
||||||
|
|
||||||
static const u8 sGrassWhistleDescription[] = _(
|
static const u8 sGrassWhistleDescription[] = _(
|
||||||
"Lulls the foe into sleep\n"
|
"Lulls the foe into sleep\n"
|
||||||
@ -1283,10 +1283,10 @@ static const u8 sGrassWhistleDescription[] = _(
|
|||||||
|
|
||||||
static const u8 sTickleDescription[] = _(
|
static const u8 sTickleDescription[] = _(
|
||||||
"Makes the foe laugh to\n"
|
"Makes the foe laugh to\n"
|
||||||
"lower ATTACK and DEFENSE.");
|
"lower Attack and Defense.");
|
||||||
|
|
||||||
static const u8 sCosmicPowerDescription[] = _(
|
static const u8 sCosmicPowerDescription[] = _(
|
||||||
"Raises DEFENSE and SP. DEF\n"
|
"Raises Defense and Sp. Def\n"
|
||||||
"with a mystic power.");
|
"with a mystic power.");
|
||||||
|
|
||||||
static const u8 sWaterSpoutDescription[] = _(
|
static const u8 sWaterSpoutDescription[] = _(
|
||||||
@ -1335,7 +1335,7 @@ static const u8 sIcicleSpearDescription[] = _(
|
|||||||
|
|
||||||
static const u8 sIronDefenseDescription[] = _(
|
static const u8 sIronDefenseDescription[] = _(
|
||||||
"Hardens the body's surface\n"
|
"Hardens the body's surface\n"
|
||||||
"to sharply raise DEFENSE.");
|
"to sharply raise Defense.");
|
||||||
|
|
||||||
static const u8 sBlockDescription[] = _(
|
static const u8 sBlockDescription[] = _(
|
||||||
"Blocks the foe's way to\n"
|
"Blocks the foe's way to\n"
|
||||||
@ -1343,7 +1343,7 @@ static const u8 sBlockDescription[] = _(
|
|||||||
|
|
||||||
static const u8 sHowlDescription[] = _(
|
static const u8 sHowlDescription[] = _(
|
||||||
"Howls to raise the spirit\n"
|
"Howls to raise the spirit\n"
|
||||||
"and boosts ATTACK.");
|
"and boosts Attack.");
|
||||||
|
|
||||||
static const u8 sDragonClawDescription[] = _(
|
static const u8 sDragonClawDescription[] = _(
|
||||||
"Slashes the foe with sharp\n"
|
"Slashes the foe with sharp\n"
|
||||||
@ -1355,7 +1355,7 @@ static const u8 sFrenzyPlantDescription[] = _(
|
|||||||
|
|
||||||
static const u8 sBulkUpDescription[] = _(
|
static const u8 sBulkUpDescription[] = _(
|
||||||
"Bulks up the body to boost\n"
|
"Bulks up the body to boost\n"
|
||||||
"both ATTACK and DEFENSE.");
|
"both Attack and Defense.");
|
||||||
|
|
||||||
static const u8 sBounceDescription[] = _(
|
static const u8 sBounceDescription[] = _(
|
||||||
"Bounces up, then down the\n"
|
"Bounces up, then down the\n"
|
||||||
@ -1363,7 +1363,7 @@ static const u8 sBounceDescription[] = _(
|
|||||||
|
|
||||||
static const u8 sMudShotDescription[] = _(
|
static const u8 sMudShotDescription[] = _(
|
||||||
"Hurls mud at the foe and\n"
|
"Hurls mud at the foe and\n"
|
||||||
"reduces SPEED.");
|
"reduces Speed.");
|
||||||
|
|
||||||
static const u8 sPoisonTailDescription[] = _(
|
static const u8 sPoisonTailDescription[] = _(
|
||||||
"Has a high critical-hit\n"
|
"Has a high critical-hit\n"
|
||||||
@ -1386,7 +1386,7 @@ static const u8 sWaterSportDescription[] = _(
|
|||||||
"raise resistance to fire.");
|
"raise resistance to fire.");
|
||||||
|
|
||||||
static const u8 sCalmMindDescription[] = _(
|
static const u8 sCalmMindDescription[] = _(
|
||||||
"Raises SP. ATK and SP. DEF\n"
|
"Raises Sp. Atk and Sp. Def\n"
|
||||||
"by focusing the mind.");
|
"by focusing the mind.");
|
||||||
|
|
||||||
static const u8 sLeafBladeDescription[] = _(
|
static const u8 sLeafBladeDescription[] = _(
|
||||||
@ -1395,7 +1395,7 @@ static const u8 sLeafBladeDescription[] = _(
|
|||||||
|
|
||||||
static const u8 sDragonDanceDescription[] = _(
|
static const u8 sDragonDanceDescription[] = _(
|
||||||
"A mystical dance that ups\n"
|
"A mystical dance that ups\n"
|
||||||
"ATTACK and SPEED.");
|
"Attack and Speed.");
|
||||||
|
|
||||||
static const u8 sRockBlastDescription[] = _(
|
static const u8 sRockBlastDescription[] = _(
|
||||||
"Hurls boulders at the foe\n"
|
"Hurls boulders at the foe\n"
|
||||||
@ -1415,7 +1415,7 @@ static const u8 sDoomDesireDescription[] = _(
|
|||||||
|
|
||||||
static const u8 sPsychoBoostDescription[] = _(
|
static const u8 sPsychoBoostDescription[] = _(
|
||||||
"Allows a full-power attack,\n"
|
"Allows a full-power attack,\n"
|
||||||
"but sharply lowers SP. ATK.");
|
"but sharply lowers Sp. Atk.");
|
||||||
|
|
||||||
static const u8 sROOSTDescription[] = _(
|
static const u8 sROOSTDescription[] = _(
|
||||||
"Restores the user's HP by\n"
|
"Restores the user's HP by\n"
|
||||||
@ -1426,8 +1426,8 @@ static const u8 sGRAVITYDescription[] = _(
|
|||||||
"negating levitation.");
|
"negating levitation.");
|
||||||
|
|
||||||
static const u8 sMIRACLE_EYEDescription[] = _(
|
static const u8 sMIRACLE_EYEDescription[] = _(
|
||||||
"Makes GHOSTS and evasive\n"
|
"Negate evasiveness and\n"
|
||||||
"foes easier to hit.");
|
"Dark-type's immunities.");
|
||||||
|
|
||||||
static const u8 sWAKE_UP_SLAPDescription[] = _(
|
static const u8 sWAKE_UP_SLAPDescription[] = _(
|
||||||
"Powerful against sleeping\n"
|
"Powerful against sleeping\n"
|
||||||
@ -1718,7 +1718,7 @@ static const u8 sDEFOGDescription[] = _(
|
|||||||
"lowers evasion.");
|
"lowers evasion.");
|
||||||
|
|
||||||
static const u8 sTRICK_ROOMDescription[] = _(
|
static const u8 sTRICK_ROOMDescription[] = _(
|
||||||
"Slower POKéMON get to move\n"
|
"Slower Pokémon get to move\n"
|
||||||
"first for 5 turns.");
|
"first for 5 turns.");
|
||||||
|
|
||||||
static const u8 sDRACO_METEORDescription[] = _(
|
static const u8 sDRACO_METEORDescription[] = _(
|
||||||
@ -2183,7 +2183,7 @@ static const u8 sBELCHDescription[] = _(
|
|||||||
|
|
||||||
static const u8 sROTOTILLERDescription[] = _(
|
static const u8 sROTOTILLERDescription[] = _(
|
||||||
"Ups the Attack and Sp. Atk\n"
|
"Ups the Attack and Sp. Atk\n"
|
||||||
"of Grass-type POKéMON.");
|
"of Grass-type Pokémon.");
|
||||||
|
|
||||||
static const u8 sSTICKY_WEBDescription[] = _(
|
static const u8 sSTICKY_WEBDescription[] = _(
|
||||||
"Weaves a sticky net that\n"
|
"Weaves a sticky net that\n"
|
||||||
@ -2243,7 +2243,7 @@ static const u8 sCRAFTY_SHIELDDescription[] = _(
|
|||||||
|
|
||||||
static const u8 sFLOWER_SHIELDDescription[] = _(
|
static const u8 sFLOWER_SHIELDDescription[] = _(
|
||||||
"Raises the Defense of\n"
|
"Raises the Defense of\n"
|
||||||
"Grass-type POKéMON.");
|
"Grass-type Pokémon.");
|
||||||
|
|
||||||
static const u8 sGRASSY_TERRAINDescription[] = _(
|
static const u8 sGRASSY_TERRAINDescription[] = _(
|
||||||
"The ground turns to grass\n"
|
"The ground turns to grass\n"
|
||||||
@ -2315,7 +2315,7 @@ static const u8 sSPIKY_SHIELDDescription[] = _(
|
|||||||
|
|
||||||
static const u8 sAROMATIC_MISTDescription[] = _(
|
static const u8 sAROMATIC_MISTDescription[] = _(
|
||||||
"Raises the Sp. Def of a\n"
|
"Raises the Sp. Def of a\n"
|
||||||
"partner POKéMON.");
|
"partner Pokémon.");
|
||||||
|
|
||||||
static const u8 sEERIE_IMPULSEDescription[] = _(
|
static const u8 sEERIE_IMPULSEDescription[] = _(
|
||||||
"Exposes the foe to a pulse\n"
|
"Exposes the foe to a pulse\n"
|
||||||
@ -2431,7 +2431,7 @@ static const u8 sSPARKLING_ARIADescription[] = _(
|
|||||||
|
|
||||||
static const u8 sICE_HAMMERDescription[] = _(
|
static const u8 sICE_HAMMERDescription[] = _(
|
||||||
"Swings the fist to strike.\n"
|
"Swings the fist to strike.\n"
|
||||||
"Lowers the user's SPEED.");
|
"Lowers the user's Speed.");
|
||||||
|
|
||||||
static const u8 sFLORAL_HEALINGDescription[] = _(
|
static const u8 sFLORAL_HEALINGDescription[] = _(
|
||||||
"Restores an ally's HP.\n"
|
"Restores an ally's HP.\n"
|
||||||
@ -2455,7 +2455,7 @@ static const u8 sLEAFAGEDescription[] = _(
|
|||||||
|
|
||||||
static const u8 sSPOTLIGHTDescription[] = _(
|
static const u8 sSPOTLIGHTDescription[] = _(
|
||||||
"Makes the foe attack the\n"
|
"Makes the foe attack the\n"
|
||||||
"spotlighted POKéMON.");
|
"spotlighted Pokémon.");
|
||||||
|
|
||||||
static const u8 sTOXIC_THREADDescription[] = _(
|
static const u8 sTOXIC_THREADDescription[] = _(
|
||||||
"Attacks with a thread that\n"
|
"Attacks with a thread that\n"
|
||||||
|
1678
src/data/trainers.h
1678
src/data/trainers.h
File diff suppressed because it is too large
Load Diff
23
src/item.c
23
src/item.c
@ -953,3 +953,26 @@ u8 ItemId_GetSecondaryId(u16 itemId)
|
|||||||
{
|
{
|
||||||
return gItems[SanitizeItemId(itemId)].secondaryId;
|
return gItems[SanitizeItemId(itemId)].secondaryId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool32 IsPinchBerryItemEffect(u16 holdEffect)
|
||||||
|
{
|
||||||
|
switch (holdEffect)
|
||||||
|
{
|
||||||
|
case HOLD_EFFECT_ATTACK_UP:
|
||||||
|
case HOLD_EFFECT_DEFENSE_UP:
|
||||||
|
case HOLD_EFFECT_SPEED_UP:
|
||||||
|
case HOLD_EFFECT_SP_ATTACK_UP:
|
||||||
|
case HOLD_EFFECT_SP_DEFENSE_UP:
|
||||||
|
case HOLD_EFFECT_CRITICAL_UP:
|
||||||
|
case HOLD_EFFECT_RANDOM_STAT_UP:
|
||||||
|
#ifdef HOLD_EFFECT_CUSTAP_BERRY
|
||||||
|
case HOLD_EFFECT_CUSTAP_BERRY:
|
||||||
|
#endif
|
||||||
|
#ifdef HOLD_EFFECT_MICLE_BERRY
|
||||||
|
case HOLD_EFFECT_MICLE_BERRY:
|
||||||
|
#endif
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
@ -4454,7 +4454,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
|
|||||||
if ((itemEffect[i] & ITEM0_X_ATTACK)
|
if ((itemEffect[i] & ITEM0_X_ATTACK)
|
||||||
&& gBattleMons[gActiveBattler].statStages[STAT_ATK] < MAX_STAT_STAGE)
|
&& gBattleMons[gActiveBattler].statStages[STAT_ATK] < MAX_STAT_STAGE)
|
||||||
{
|
{
|
||||||
if (B_X_ITEMS_BUFF == GEN_7)
|
if (B_X_ITEMS_BUFF >= GEN_7)
|
||||||
gBattleMons[gActiveBattler].statStages[STAT_ATK] += 2;
|
gBattleMons[gActiveBattler].statStages[STAT_ATK] += 2;
|
||||||
else
|
else
|
||||||
gBattleMons[gActiveBattler].statStages[STAT_ATK] += itemEffect[i] & ITEM0_X_ATTACK;
|
gBattleMons[gActiveBattler].statStages[STAT_ATK] += itemEffect[i] & ITEM0_X_ATTACK;
|
||||||
@ -4472,7 +4472,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
|
|||||||
if ((itemEffect[i] & ITEM1_X_DEFEND)
|
if ((itemEffect[i] & ITEM1_X_DEFEND)
|
||||||
&& gBattleMons[gActiveBattler].statStages[STAT_DEF] < MAX_STAT_STAGE)
|
&& gBattleMons[gActiveBattler].statStages[STAT_DEF] < MAX_STAT_STAGE)
|
||||||
{
|
{
|
||||||
if (B_X_ITEMS_BUFF == GEN_7)
|
if (B_X_ITEMS_BUFF >= GEN_7)
|
||||||
gBattleMons[gActiveBattler].statStages[STAT_DEF] += 2;
|
gBattleMons[gActiveBattler].statStages[STAT_DEF] += 2;
|
||||||
else
|
else
|
||||||
gBattleMons[gActiveBattler].statStages[STAT_DEF] += (itemEffect[i] & ITEM1_X_DEFEND) >> 4;
|
gBattleMons[gActiveBattler].statStages[STAT_DEF] += (itemEffect[i] & ITEM1_X_DEFEND) >> 4;
|
||||||
@ -4485,7 +4485,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
|
|||||||
if ((itemEffect[i] & ITEM1_X_SPEED)
|
if ((itemEffect[i] & ITEM1_X_SPEED)
|
||||||
&& gBattleMons[gActiveBattler].statStages[STAT_SPEED] < MAX_STAT_STAGE)
|
&& gBattleMons[gActiveBattler].statStages[STAT_SPEED] < MAX_STAT_STAGE)
|
||||||
{
|
{
|
||||||
if (B_X_ITEMS_BUFF == GEN_7)
|
if (B_X_ITEMS_BUFF >= GEN_7)
|
||||||
gBattleMons[gActiveBattler].statStages[STAT_SPEED] += 2;
|
gBattleMons[gActiveBattler].statStages[STAT_SPEED] += 2;
|
||||||
else
|
else
|
||||||
gBattleMons[gActiveBattler].statStages[STAT_SPEED] += itemEffect[i] & ITEM1_X_SPEED;
|
gBattleMons[gActiveBattler].statStages[STAT_SPEED] += itemEffect[i] & ITEM1_X_SPEED;
|
||||||
@ -4500,7 +4500,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
|
|||||||
if ((itemEffect[i] & ITEM2_X_ACCURACY)
|
if ((itemEffect[i] & ITEM2_X_ACCURACY)
|
||||||
&& gBattleMons[gActiveBattler].statStages[STAT_ACC] < MAX_STAT_STAGE)
|
&& gBattleMons[gActiveBattler].statStages[STAT_ACC] < MAX_STAT_STAGE)
|
||||||
{
|
{
|
||||||
if (B_X_ITEMS_BUFF == GEN_7)
|
if (B_X_ITEMS_BUFF >= GEN_7)
|
||||||
gBattleMons[gActiveBattler].statStages[STAT_ACC] += 2;
|
gBattleMons[gActiveBattler].statStages[STAT_ACC] += 2;
|
||||||
else
|
else
|
||||||
gBattleMons[gActiveBattler].statStages[STAT_ACC] += (itemEffect[i] & ITEM2_X_ACCURACY) >> 4;
|
gBattleMons[gActiveBattler].statStages[STAT_ACC] += (itemEffect[i] & ITEM2_X_ACCURACY) >> 4;
|
||||||
@ -4513,7 +4513,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
|
|||||||
if ((itemEffect[i] & ITEM2_X_SPATK)
|
if ((itemEffect[i] & ITEM2_X_SPATK)
|
||||||
&& gBattleMons[gActiveBattler].statStages[STAT_SPATK] < MAX_STAT_STAGE)
|
&& gBattleMons[gActiveBattler].statStages[STAT_SPATK] < MAX_STAT_STAGE)
|
||||||
{
|
{
|
||||||
if (B_X_ITEMS_BUFF == GEN_7)
|
if (B_X_ITEMS_BUFF >= GEN_7)
|
||||||
gBattleMons[gActiveBattler].statStages[STAT_SPATK] += 2;
|
gBattleMons[gActiveBattler].statStages[STAT_SPATK] += 2;
|
||||||
else
|
else
|
||||||
gBattleMons[gActiveBattler].statStages[STAT_SPATK] += itemEffect[i] & ITEM2_X_SPATK;
|
gBattleMons[gActiveBattler].statStages[STAT_SPATK] += itemEffect[i] & ITEM2_X_SPATK;
|
||||||
@ -4529,7 +4529,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
|
|||||||
if ((itemEffect[i] & ITEM1_X_ATTACK)
|
if ((itemEffect[i] & ITEM1_X_ATTACK)
|
||||||
&& gBattleMons[gActiveBattler].statStages[STAT_ATK] < MAX_STAT_STAGE)
|
&& gBattleMons[gActiveBattler].statStages[STAT_ATK] < MAX_STAT_STAGE)
|
||||||
{
|
{
|
||||||
if (B_X_ITEMS_BUFF == GEN_7)
|
if (B_X_ITEMS_BUFF >= GEN_7)
|
||||||
gBattleMons[gActiveBattler].statStages[STAT_ATK] += 2;
|
gBattleMons[gActiveBattler].statStages[STAT_ATK] += 2;
|
||||||
else
|
else
|
||||||
gBattleMons[gActiveBattler].statStages[STAT_ATK] += 1;
|
gBattleMons[gActiveBattler].statStages[STAT_ATK] += 1;
|
||||||
@ -4542,7 +4542,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
|
|||||||
if ((itemEffect[i] & ITEM1_X_DEFENSE)
|
if ((itemEffect[i] & ITEM1_X_DEFENSE)
|
||||||
&& gBattleMons[gActiveBattler].statStages[STAT_DEF] < MAX_STAT_STAGE)
|
&& gBattleMons[gActiveBattler].statStages[STAT_DEF] < MAX_STAT_STAGE)
|
||||||
{
|
{
|
||||||
if (B_X_ITEMS_BUFF == GEN_7)
|
if (B_X_ITEMS_BUFF >= GEN_7)
|
||||||
gBattleMons[gActiveBattler].statStages[STAT_DEF] += 2;
|
gBattleMons[gActiveBattler].statStages[STAT_DEF] += 2;
|
||||||
else
|
else
|
||||||
gBattleMons[gActiveBattler].statStages[STAT_DEF] += 1;
|
gBattleMons[gActiveBattler].statStages[STAT_DEF] += 1;
|
||||||
@ -4555,7 +4555,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
|
|||||||
if ((itemEffect[i] & ITEM1_X_SPEED)
|
if ((itemEffect[i] & ITEM1_X_SPEED)
|
||||||
&& gBattleMons[gActiveBattler].statStages[STAT_SPEED] < MAX_STAT_STAGE)
|
&& gBattleMons[gActiveBattler].statStages[STAT_SPEED] < MAX_STAT_STAGE)
|
||||||
{
|
{
|
||||||
if (B_X_ITEMS_BUFF == GEN_7)
|
if (B_X_ITEMS_BUFF >= GEN_7)
|
||||||
gBattleMons[gActiveBattler].statStages[STAT_SPEED] += 2;
|
gBattleMons[gActiveBattler].statStages[STAT_SPEED] += 2;
|
||||||
else
|
else
|
||||||
gBattleMons[gActiveBattler].statStages[STAT_SPEED] += 1;
|
gBattleMons[gActiveBattler].statStages[STAT_SPEED] += 1;
|
||||||
@ -4568,7 +4568,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
|
|||||||
if ((itemEffect[i] & ITEM1_X_SPATK)
|
if ((itemEffect[i] & ITEM1_X_SPATK)
|
||||||
&& gBattleMons[gActiveBattler].statStages[STAT_SPATK] < MAX_STAT_STAGE)
|
&& gBattleMons[gActiveBattler].statStages[STAT_SPATK] < MAX_STAT_STAGE)
|
||||||
{
|
{
|
||||||
if (B_X_ITEMS_BUFF == GEN_7)
|
if (B_X_ITEMS_BUFF >= GEN_7)
|
||||||
gBattleMons[gActiveBattler].statStages[STAT_SPATK] += 2;
|
gBattleMons[gActiveBattler].statStages[STAT_SPATK] += 2;
|
||||||
else
|
else
|
||||||
gBattleMons[gActiveBattler].statStages[STAT_SPATK] += 1;
|
gBattleMons[gActiveBattler].statStages[STAT_SPATK] += 1;
|
||||||
@ -4581,7 +4581,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
|
|||||||
if ((itemEffect[i] & ITEM1_X_SPDEF)
|
if ((itemEffect[i] & ITEM1_X_SPDEF)
|
||||||
&& gBattleMons[gActiveBattler].statStages[STAT_SPDEF] < MAX_STAT_STAGE)
|
&& gBattleMons[gActiveBattler].statStages[STAT_SPDEF] < MAX_STAT_STAGE)
|
||||||
{
|
{
|
||||||
if (B_X_ITEMS_BUFF == GEN_7)
|
if (B_X_ITEMS_BUFF >= GEN_7)
|
||||||
gBattleMons[gActiveBattler].statStages[STAT_SPDEF] += 2;
|
gBattleMons[gActiveBattler].statStages[STAT_SPDEF] += 2;
|
||||||
else
|
else
|
||||||
gBattleMons[gActiveBattler].statStages[STAT_SPDEF] += 1;
|
gBattleMons[gActiveBattler].statStages[STAT_SPDEF] += 1;
|
||||||
@ -4594,7 +4594,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
|
|||||||
if ((itemEffect[i] & ITEM1_X_ACCURACY)
|
if ((itemEffect[i] & ITEM1_X_ACCURACY)
|
||||||
&& gBattleMons[gActiveBattler].statStages[STAT_ACC] < MAX_STAT_STAGE)
|
&& gBattleMons[gActiveBattler].statStages[STAT_ACC] < MAX_STAT_STAGE)
|
||||||
{
|
{
|
||||||
if (B_X_ITEMS_BUFF == GEN_7)
|
if (B_X_ITEMS_BUFF >= GEN_7)
|
||||||
gBattleMons[gActiveBattler].statStages[STAT_ACC] += 2;
|
gBattleMons[gActiveBattler].statStages[STAT_ACC] += 2;
|
||||||
else
|
else
|
||||||
gBattleMons[gActiveBattler].statStages[STAT_ACC] += 1;
|
gBattleMons[gActiveBattler].statStages[STAT_ACC] += 1;
|
||||||
@ -5148,7 +5148,7 @@ static void BufferStatRoseMessage(s32 arg0)
|
|||||||
{
|
{
|
||||||
gBattlerTarget = gBattlerInMenuId;
|
gBattlerTarget = gBattlerInMenuId;
|
||||||
StringCopy(gBattleTextBuff1, gStatNamesTable[sStatsToRaise[arg0]]);
|
StringCopy(gBattleTextBuff1, gStatNamesTable[sStatsToRaise[arg0]]);
|
||||||
if (B_X_ITEMS_BUFF == GEN_7)
|
if (B_X_ITEMS_BUFF >= GEN_7)
|
||||||
{
|
{
|
||||||
StringCopy(gBattleTextBuff2, gText_StatSharply);
|
StringCopy(gBattleTextBuff2, gText_StatSharply);
|
||||||
StringAppend(gBattleTextBuff2, gText_StatRose);
|
StringAppend(gBattleTextBuff2, gText_StatRose);
|
||||||
|
@ -897,7 +897,7 @@ void FillHillTrainersParties(void)
|
|||||||
// hill trainers.
|
// hill trainers.
|
||||||
u32 GetTrainerHillAIFlags(void)
|
u32 GetTrainerHillAIFlags(void)
|
||||||
{
|
{
|
||||||
return (AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY);
|
return (AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY);
|
||||||
}
|
}
|
||||||
|
|
||||||
u8 GetTrainerEncounterMusicIdInTrainerHill(u16 trainerId)
|
u8 GetTrainerEncounterMusicIdInTrainerHill(u16 trainerId)
|
||||||
|
@ -91,7 +91,7 @@
|
|||||||
.include "src/region_map.o"
|
.include "src/region_map.o"
|
||||||
.include "src/decoration.o"
|
.include "src/decoration.o"
|
||||||
.include "src/slot_machine.o"
|
.include "src/slot_machine.o"
|
||||||
.include "src/battle_ai_script_commands.o"
|
.include "src/battle_ai_main.o"
|
||||||
.include "src/fldeff_misc.o"
|
.include "src/fldeff_misc.o"
|
||||||
.include "src/pokeblock.o"
|
.include "src/pokeblock.o"
|
||||||
.include "src/field_specials.o"
|
.include "src/field_specials.o"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user