mirror of
https://github.com/Ninjdai1/pokeemerald.git
synced 2025-03-19 12:08:34 +01:00
Merge pull request #1724 from AsparagusEduardo/BE_TerrainMoves
Moves affected by Terrain: Camouflage, Secret Power & Terrain Pulse
This commit is contained in:
commit
a90cf4a501
@ -5,6 +5,7 @@
|
|||||||
#include "constants/moves.h"
|
#include "constants/moves.h"
|
||||||
#include "constants/pokemon.h"
|
#include "constants/pokemon.h"
|
||||||
#include "constants/items.h"
|
#include "constants/items.h"
|
||||||
|
#include "constants/battle_config.h"
|
||||||
.include "asm/macros.inc"
|
.include "asm/macros.inc"
|
||||||
.include "asm/macros/battle_anim_script.inc"
|
.include "asm/macros/battle_anim_script.inc"
|
||||||
.include "constants/constants.inc"
|
.include "constants/constants.inc"
|
||||||
@ -14081,7 +14082,87 @@ Move_RISING_VOLTAGE::
|
|||||||
end @to do:
|
end @to do:
|
||||||
|
|
||||||
Move_TERRAIN_PULSE::
|
Move_TERRAIN_PULSE::
|
||||||
end @to do:
|
loadspritegfx ANIM_TAG_DRAGON_PULSE
|
||||||
|
monbg ANIM_TARGET
|
||||||
|
setalpha 12, 8
|
||||||
|
createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 0, 7, RGB_BLACK
|
||||||
|
launchtask AnimTask_TerrainPulse 0x5 0x0
|
||||||
|
jumpargeq 0x0, TYPE_ELECTRIC, TerrainPulseElectric
|
||||||
|
jumpargeq 0x0, TYPE_GRASS, TerrainPulseGrass
|
||||||
|
jumpargeq 0x0, TYPE_FAIRY, TerrainPulseFairy
|
||||||
|
jumpargeq 0x0, TYPE_PSYCHIC, TerrainPulsePsychic
|
||||||
|
TerrainPulseNormal:
|
||||||
|
createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_DRAGON_PULSE, 0, 12, 12, RGB_WHITE
|
||||||
|
waitforvisualfinish
|
||||||
|
playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER
|
||||||
|
createsoundtask SoundTask_LoopSEAdjustPanning, SE_M_PSYBEAM2, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 3, 4, 0, 15
|
||||||
|
call DragonPulseParticle
|
||||||
|
call DragonPulseParticle
|
||||||
|
createvisualtask AnimTask_SwayMon, 5, 0, 2, 51200, 24, ANIM_TARGET
|
||||||
|
createvisualtask AnimTask_BlendColorCycle, 2, 4, 2, 2, 0, 12, RGB_WHITE
|
||||||
|
goto TerrainPulseEnd
|
||||||
|
|
||||||
|
TerrainPulseElectric:
|
||||||
|
createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_DRAGON_PULSE, 0, 12, 12, RGB(27, 27, 0)
|
||||||
|
waitforvisualfinish
|
||||||
|
playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER
|
||||||
|
createsoundtask SoundTask_LoopSEAdjustPanning, SE_M_PSYBEAM2, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 3, 4, 0, 15
|
||||||
|
call DragonPulseParticle
|
||||||
|
call DragonPulseParticle
|
||||||
|
createvisualtask AnimTask_SwayMon, 5, 0, 4, 51200, 24, ANIM_TARGET
|
||||||
|
createvisualtask AnimTask_BlendColorCycle, 2, 4, 2, 2, 0, 12, RGB(27, 27, 0)
|
||||||
|
goto TerrainPulseEnd
|
||||||
|
|
||||||
|
TerrainPulseGrass:
|
||||||
|
createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_DRAGON_PULSE, 0, 12, 12, RGB(11, 26, 11)
|
||||||
|
waitforvisualfinish
|
||||||
|
playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER
|
||||||
|
createsoundtask SoundTask_LoopSEAdjustPanning, SE_M_PSYBEAM2, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 3, 4, 0, 15
|
||||||
|
call DragonPulseParticle
|
||||||
|
call DragonPulseParticle
|
||||||
|
createvisualtask AnimTask_SwayMon, 5, 0, 4, 51200, 24, ANIM_TARGET
|
||||||
|
createvisualtask AnimTask_BlendColorCycle, 2, 4, 2, 2, 0, 12, RGB(11, 26, 11)
|
||||||
|
goto TerrainPulseEnd
|
||||||
|
|
||||||
|
TerrainPulseFairy:
|
||||||
|
createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_DRAGON_PULSE, 0, 12, 12, RGB(31, 24, 31)
|
||||||
|
waitforvisualfinish
|
||||||
|
playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER
|
||||||
|
createsoundtask SoundTask_LoopSEAdjustPanning, SE_M_PSYBEAM2, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 3, 4, 0, 15
|
||||||
|
call DragonPulseParticle
|
||||||
|
call DragonPulseParticle
|
||||||
|
createvisualtask AnimTask_SwayMon, 5, 0, 4, 51200, 24, ANIM_TARGET
|
||||||
|
createvisualtask AnimTask_BlendColorCycle, 2, 4, 2, 2, 0, 12, RGB(31, 24, 31)
|
||||||
|
goto TerrainPulseEnd
|
||||||
|
|
||||||
|
TerrainPulsePsychic:
|
||||||
|
createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_DRAGON_PULSE, 0, 12, 12, RGB(27, 0, 13)
|
||||||
|
waitforvisualfinish
|
||||||
|
playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER
|
||||||
|
createsoundtask SoundTask_LoopSEAdjustPanning, SE_M_PSYBEAM2, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 3, 4, 0, 15
|
||||||
|
call DragonPulseParticle
|
||||||
|
call DragonPulseParticle
|
||||||
|
createvisualtask AnimTask_SwayMon, 5, 0, 4, 51200, 24, ANIM_TARGET
|
||||||
|
createvisualtask AnimTask_BlendColorCycle, 2, 4, 2, 2, 0, 12, RGB(27, 0, 13)
|
||||||
|
goto TerrainPulseEnd
|
||||||
|
|
||||||
|
TerrainPulseEnd:
|
||||||
|
call DragonPulseParticle
|
||||||
|
call DragonPulseParticle
|
||||||
|
call DragonPulseParticle
|
||||||
|
call DragonPulseParticle
|
||||||
|
call DragonPulseParticle
|
||||||
|
call DragonPulseParticle
|
||||||
|
call DragonPulseParticle
|
||||||
|
call DragonPulseParticle
|
||||||
|
call DragonPulseParticle
|
||||||
|
waitforvisualfinish
|
||||||
|
delay 1
|
||||||
|
createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 7, 0, RGB_BLACK
|
||||||
|
waitforvisualfinish
|
||||||
|
blendoff
|
||||||
|
clearmonbg ANIM_TARGET
|
||||||
|
end
|
||||||
|
|
||||||
Move_SKITTER_SMACK::
|
Move_SKITTER_SMACK::
|
||||||
end @to do:
|
end @to do:
|
||||||
@ -23353,6 +23434,11 @@ Move_SKY_UPPERCUT:
|
|||||||
end
|
end
|
||||||
|
|
||||||
Move_SECRET_POWER:
|
Move_SECRET_POWER:
|
||||||
|
createvisualtask AnimTask_GetFieldTerrain, 5
|
||||||
|
jumpargeq 0, STATUS_FIELD_MISTY_TERRAIN, Move_FAIRY_WIND
|
||||||
|
jumpargeq 0, STATUS_FIELD_GRASSY_TERRAIN, Move_NEEDLE_ARM
|
||||||
|
jumpargeq 0, STATUS_FIELD_ELECTRIC_TERRAIN, Move_THUNDER_SHOCK
|
||||||
|
jumpargeq 0, STATUS_FIELD_PSYCHIC_TERRAIN, Move_CONFUSION
|
||||||
createvisualtask AnimTask_GetBattleTerrain, 5
|
createvisualtask AnimTask_GetBattleTerrain, 5
|
||||||
jumpargeq 0, BATTLE_TERRAIN_GRASS, Move_NEEDLE_ARM
|
jumpargeq 0, BATTLE_TERRAIN_GRASS, Move_NEEDLE_ARM
|
||||||
jumpargeq 0, BATTLE_TERRAIN_LONG_GRASS, Move_MAGICAL_LEAF
|
jumpargeq 0, BATTLE_TERRAIN_LONG_GRASS, Move_MAGICAL_LEAF
|
||||||
@ -23362,8 +23448,36 @@ Move_SECRET_POWER:
|
|||||||
jumpargeq 0, BATTLE_TERRAIN_POND, Move_BUBBLE_BEAM
|
jumpargeq 0, BATTLE_TERRAIN_POND, Move_BUBBLE_BEAM
|
||||||
jumpargeq 0, BATTLE_TERRAIN_MOUNTAIN, Move_ROCK_THROW
|
jumpargeq 0, BATTLE_TERRAIN_MOUNTAIN, Move_ROCK_THROW
|
||||||
jumpargeq 0, BATTLE_TERRAIN_CAVE, Move_BITE
|
jumpargeq 0, BATTLE_TERRAIN_CAVE, Move_BITE
|
||||||
|
jumpargeq 0, BATTLE_TERRAIN_BUILDING, Move_STRENGTH
|
||||||
|
jumpargeq 0, BATTLE_TERRAIN_SOARING, Move_GUST
|
||||||
|
jumpargeq 0, BATTLE_TERRAIN_SKY_PILLAR, Move_GUST
|
||||||
|
jumpargeq 0, BATTLE_TERRAIN_BURIAL_GROUND, Move_SHADOW_SNEAK
|
||||||
|
jumpargeq 0, BATTLE_TERRAIN_PUDDLE, Move_MUD_SHOT
|
||||||
|
jumpargeq 0, BATTLE_TERRAIN_MARSH, Move_MUD_SHOT
|
||||||
|
jumpargeq 0, BATTLE_TERRAIN_SWAMP, Move_MUD_SHOT
|
||||||
|
.if B_SECRET_POWER_ANIMATION >= GEN_7
|
||||||
|
jumpargeq 0, BATTLE_TERRAIN_SNOW, Move_ICE_SHARD
|
||||||
|
.else
|
||||||
|
jumpargeq 0, BATTLE_TERRAIN_SNOW, Move_AVALANCHE
|
||||||
|
.endif
|
||||||
|
jumpargeq 0, BATTLE_TERRAIN_ICE, Move_ICE_SHARD
|
||||||
|
jumpargeq 0, BATTLE_TERRAIN_VOLCANO, Move_INCINERATE
|
||||||
|
jumpargeq 0, BATTLE_TERRAIN_DISTORTION_WORLD, Move_POUND
|
||||||
|
jumpargeq 0, BATTLE_TERRAIN_SPACE, Move_SWIFT
|
||||||
|
jumpargeq 0, BATTLE_TERRAIN_ULTRA_SPACE, Move_PSYWAVE
|
||||||
|
.if B_SECRET_POWER_ANIMATION >= GEN_7
|
||||||
|
jumpargeq 0, BATTLE_TERRAIN_BUILDING, Move_SPIT_UP
|
||||||
|
goto Move_SPIT_UP
|
||||||
|
.elseif B_SECRET_POWER_ANIMATION == GEN_6
|
||||||
|
jumpargeq 0, BATTLE_TERRAIN_BUILDING, Move_BODY_SLAM
|
||||||
|
goto Move_BODY_SLAM
|
||||||
|
.elseif B_SECRET_POWER_ANIMATION == GEN_5 || B_SECRET_POWER_ANIMATION == GEN_4
|
||||||
|
jumpargeq 0, BATTLE_TERRAIN_BUILDING, Move_BODY_SLAM
|
||||||
|
goto Move_MUD_SLAP
|
||||||
|
.else
|
||||||
jumpargeq 0, BATTLE_TERRAIN_BUILDING, Move_STRENGTH
|
jumpargeq 0, BATTLE_TERRAIN_BUILDING, Move_STRENGTH
|
||||||
goto Move_SLAM
|
goto Move_SLAM
|
||||||
|
.endif
|
||||||
|
|
||||||
Move_TWISTER:
|
Move_TWISTER:
|
||||||
loadspritegfx ANIM_TAG_LEAF
|
loadspritegfx ANIM_TAG_LEAF
|
||||||
|
@ -395,6 +395,7 @@ gBattleScriptsForMoveEffects::
|
|||||||
.4byte BattleScript_EffectAuraWheel @ EFFECT_AURA_WHEEL
|
.4byte BattleScript_EffectAuraWheel @ EFFECT_AURA_WHEEL
|
||||||
.4byte BattleScript_EffectPhotonGeyser @ EFFECT_PHOTON_GEYSER
|
.4byte BattleScript_EffectPhotonGeyser @ EFFECT_PHOTON_GEYSER
|
||||||
.4byte BattleScript_EffectShellSideArm @ EFFECT_SHELL_SIDE_ARM
|
.4byte BattleScript_EffectShellSideArm @ EFFECT_SHELL_SIDE_ARM
|
||||||
|
.4byte BattleScript_EffectHit @ EFFECT_TERRAIN_PULSE
|
||||||
|
|
||||||
BattleScript_EffectShellSideArm:
|
BattleScript_EffectShellSideArm:
|
||||||
shellsidearmcheck
|
shellsidearmcheck
|
||||||
|
@ -222,10 +222,7 @@ struct FieldTimer
|
|||||||
u8 wonderRoomTimer;
|
u8 wonderRoomTimer;
|
||||||
u8 magicRoomTimer;
|
u8 magicRoomTimer;
|
||||||
u8 trickRoomTimer;
|
u8 trickRoomTimer;
|
||||||
u8 grassyTerrainTimer;
|
u8 terrainTimer;
|
||||||
u8 mistyTerrainTimer;
|
|
||||||
u8 electricTerrainTimer;
|
|
||||||
u8 psychicTerrainTimer;
|
|
||||||
u8 gravityTimer;
|
u8 gravityTimer;
|
||||||
u8 fairyLockTimer;
|
u8 fairyLockTimer;
|
||||||
};
|
};
|
||||||
|
@ -36,6 +36,7 @@ u32 IsAbilityStatusProtected(u32 battler);
|
|||||||
bool32 TryResetBattlerStatChanges(u8 battler);
|
bool32 TryResetBattlerStatChanges(u8 battler);
|
||||||
bool32 CanCamouflage(u8 battlerId);
|
bool32 CanCamouflage(u8 battlerId);
|
||||||
u16 GetNaturePowerMove(void);
|
u16 GetNaturePowerMove(void);
|
||||||
|
u16 GetSecretPowerMoveEffect(void);
|
||||||
void StealTargetItem(u8 battlerStealer, u8 battlerItem);
|
void StealTargetItem(u8 battlerStealer, u8 battlerItem);
|
||||||
u8 GetCatchingBattler(void);
|
u8 GetCatchingBattler(void);
|
||||||
|
|
||||||
|
@ -374,6 +374,21 @@
|
|||||||
#define BATTLE_TERRAIN_CAVE 7
|
#define BATTLE_TERRAIN_CAVE 7
|
||||||
#define BATTLE_TERRAIN_BUILDING 8
|
#define BATTLE_TERRAIN_BUILDING 8
|
||||||
#define BATTLE_TERRAIN_PLAIN 9
|
#define BATTLE_TERRAIN_PLAIN 9
|
||||||
|
// New battle terrains are used for Secret Power but not fully implemented.
|
||||||
|
#define BATTLE_TERRAIN_SOARING 10
|
||||||
|
#define BATTLE_TERRAIN_SKY_PILLAR 11
|
||||||
|
#define BATTLE_TERRAIN_BURIAL_GROUND 12
|
||||||
|
#define BATTLE_TERRAIN_PUDDLE 13
|
||||||
|
#define BATTLE_TERRAIN_MARSH 14
|
||||||
|
#define BATTLE_TERRAIN_SWAMP 15
|
||||||
|
#define BATTLE_TERRAIN_SNOW 16
|
||||||
|
#define BATTLE_TERRAIN_ICE 17
|
||||||
|
#define BATTLE_TERRAIN_VOLCANO 18
|
||||||
|
#define BATTLE_TERRAIN_DISTORTION_WORLD 19
|
||||||
|
#define BATTLE_TERRAIN_SPACE 20
|
||||||
|
#define BATTLE_TERRAIN_ULTRA_SPACE 21
|
||||||
|
|
||||||
|
#define BATTLE_TERRAIN_COUNT 22
|
||||||
|
|
||||||
#define B_WAIT_TIME_LONG 64
|
#define B_WAIT_TIME_LONG 64
|
||||||
#define B_WAIT_TIME_MED 48
|
#define B_WAIT_TIME_MED 48
|
||||||
|
@ -95,7 +95,6 @@
|
|||||||
#define B_CRIT_CHANCE GEN_7 // 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_7 // 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_PARALYSIS_SPEED GEN_7 // 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_8 // In Gen8, damage is boosted by 30% 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_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_7 // 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.
|
||||||
|
|
||||||
@ -184,26 +183,31 @@
|
|||||||
// Eg: Replace with VAR_UNUSED_0x40F7 so you can use VAR_TERRAIN for that feature.
|
// Eg: Replace with VAR_UNUSED_0x40F7 so you can use VAR_TERRAIN for that feature.
|
||||||
#define VAR_TERRAIN 0 // If this var has a value, assigning a STATUS_FIELD_xx_TERRAIN to it before battle causes the battle to start with that terrain active
|
#define VAR_TERRAIN 0 // If this var has a value, assigning a STATUS_FIELD_xx_TERRAIN to it before battle causes the battle to start with that terrain active
|
||||||
|
|
||||||
|
// Terrain settings
|
||||||
|
#define B_TERRAIN_BG_CHANGE TRUE // If set to TRUE, terrain moves permanently change the default battle background until the effect fades.
|
||||||
|
#define B_THUNDERSTORM_TERRAIN TRUE // If TRUE, overworld Thunderstorm generates Rain and Electric Terrain as in Gen 8.
|
||||||
|
#define B_TERRAIN_TYPE_BOOST GEN_8 // In Gen8, damage is boosted by 30% instead of 50%.
|
||||||
|
#define B_SECRET_POWER_EFFECT GEN_7 // Secret Power's effects change depending on terrain and generation. See GetSecretPowerMoveEffect.
|
||||||
|
#define B_SECRET_POWER_ANIMATION GEN_7 // Secret Power's animations change depending on terrain and generation.
|
||||||
|
#define B_NATURE_POWER_MOVES GEN_8 // Nature Power calls different moves depending on terrain and generation. See sNaturePowerMoves.
|
||||||
|
#define B_CAMOUFLAGE_TYPES GEN_7 // Camouflage changes the user to different types depending on terrain and generation. See sTerrainToType.
|
||||||
|
|
||||||
// Interface settings
|
// Interface settings
|
||||||
#define B_ABILITY_POP_UP TRUE // In Gen5+, the Pokémon abilities are displayed in a pop-up, when they activate in battle.
|
#define B_ABILITY_POP_UP TRUE // In Gen5+, the Pokémon abilities are displayed in a pop-up, when they activate in battle.
|
||||||
#define B_FAST_INTRO TRUE // If set to TRUE, battle intro texts print at the same time as animation of a Pokémon, as opposing to waiting for the animation to end.
|
#define B_FAST_INTRO TRUE // If set to TRUE, battle intro texts print at the same time as animation of a Pokémon, as opposing to waiting for the animation to end.
|
||||||
#define B_SHOW_TARGETS TRUE // If set to TRUE, all available targets, for moves hitting 2 or 3 Pokémon, will be shown before selecting a move.
|
#define B_SHOW_TARGETS TRUE // If set to TRUE, all available targets, for moves hitting 2 or 3 Pokémon, will be shown before selecting a move.
|
||||||
#define B_SHOW_SPLIT_ICON TRUE // If set to TRUE, it will show an icon in the summary showing the move's category split.
|
#define B_SHOW_SPLIT_ICON TRUE // If set to TRUE, it will show an icon in the summary showing the move's category split.
|
||||||
#define B_HIDE_HEALTHBOX_IN_ANIMS TRUE // If set to TRUE, hides healthboxes during move animations.
|
#define B_HIDE_HEALTHBOX_IN_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.
|
|
||||||
|
|
||||||
// Critical Capture
|
// Catching settings
|
||||||
#define B_CRITICAL_CAPTURE TRUE // If set to TRUE, Critical Capture will be enabled.
|
#define B_SEMI_INVULNERABLE_CATCH GEN_7 // In Gen4+, you cannot throw a ball against a Pokemon that is in a semi-invulnerable state (dig/fly/etc)
|
||||||
#define B_CATCHING_CHARM_BOOST 20 // % boost in Critical Capture odds if player has the Catching Charm.
|
#define B_CATCHING_CHARM_BOOST 20 // % boost in Critical Capture odds if player has the Catching Charm.
|
||||||
|
#define B_CRITICAL_CAPTURE TRUE // If set to TRUE, Critical Capture will be enabled.
|
||||||
// Last Used Ball
|
|
||||||
#define B_LAST_USED_BALL TRUE // If TRUE, the "last used ball" feature from Gen 7 will be implemented
|
#define B_LAST_USED_BALL TRUE // If TRUE, the "last used ball" feature from Gen 7 will be implemented
|
||||||
#define B_LAST_USED_BALL_BUTTON R_BUTTON // If last used ball is implemented, this button (or button combo) will trigger throwing the last used ball.
|
#define B_LAST_USED_BALL_BUTTON R_BUTTON // If last used ball is implemented, this button (or button combo) will trigger throwing the last used ball.
|
||||||
|
|
||||||
// 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_THUNDERSTORM_TERRAIN TRUE // If TRUE, overworld Thunderstorm generates Rain and Electric Terrain as in Gen 8.
|
|
||||||
#define B_SEMI_INVULNERABLE_CATCH GEN_7 // In Gen4+, you cannot throw a ball against a Pokemon that is in a semi-invulnerable state (dig/fly/etc)
|
|
||||||
|
|
||||||
// Animation Settings
|
// Animation Settings
|
||||||
#define B_NEW_SWORD_PARTICLE FALSE // If set to TRUE, it updates Swords Dance's particle.
|
#define B_NEW_SWORD_PARTICLE FALSE // If set to TRUE, it updates Swords Dance's particle.
|
||||||
|
@ -378,7 +378,8 @@
|
|||||||
#define EFFECT_AURA_WHEEL 372
|
#define EFFECT_AURA_WHEEL 372
|
||||||
#define EFFECT_PHOTON_GEYSER 373
|
#define EFFECT_PHOTON_GEYSER 373
|
||||||
#define EFFECT_SHELL_SIDE_ARM 374
|
#define EFFECT_SHELL_SIDE_ARM 374
|
||||||
|
#define EFFECT_TERRAIN_PULSE 375
|
||||||
|
|
||||||
#define NUM_BATTLE_MOVE_EFFECTS 375
|
#define NUM_BATTLE_MOVE_EFFECTS 376
|
||||||
|
|
||||||
#endif // GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H
|
#endif // GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H
|
||||||
|
@ -5073,3 +5073,25 @@ void AnimTask_ShellSideArm(u8 taskId)
|
|||||||
gBattleAnimArgs[0] = FALSE;
|
gBattleAnimArgs[0] = FALSE;
|
||||||
DestroyAnimVisualTask(taskId);
|
DestroyAnimVisualTask(taskId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AnimTask_TerrainPulse(u8 taskId)
|
||||||
|
{
|
||||||
|
if (IsBattlerTerrainAffected(gBattleAnimAttacker, STATUS_FIELD_TERRAIN_ANY))
|
||||||
|
{
|
||||||
|
if (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN)
|
||||||
|
gBattleAnimArgs[0] = TYPE_ELECTRIC;
|
||||||
|
else if (gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN)
|
||||||
|
gBattleAnimArgs[0] = TYPE_GRASS;
|
||||||
|
else if (gFieldStatuses & STATUS_FIELD_MISTY_TERRAIN)
|
||||||
|
gBattleAnimArgs[0] = TYPE_FAIRY;
|
||||||
|
else if (gFieldStatuses & STATUS_FIELD_PSYCHIC_TERRAIN)
|
||||||
|
gBattleAnimArgs[0] = TYPE_PSYCHIC;
|
||||||
|
else //failsafe
|
||||||
|
gBattleAnimArgs[0] = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
gBattleAnimArgs[0] = 0;
|
||||||
|
}
|
||||||
|
DestroyAnimVisualTask(taskId);
|
||||||
|
}
|
||||||
|
@ -136,6 +136,7 @@ void AnimTask_SetCamouflageBlend(u8 taskId)
|
|||||||
gBattleAnimArgs[4] = RGB(31, 31, 31);
|
gBattleAnimArgs[4] = RGB(31, 31, 31);
|
||||||
break;
|
break;
|
||||||
case BATTLE_TERRAIN_PLAIN:
|
case BATTLE_TERRAIN_PLAIN:
|
||||||
|
default:
|
||||||
gBattleAnimArgs[4] = RGB(31, 31, 31);
|
gBattleAnimArgs[4] = RGB(31, 31, 31);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -904,6 +905,12 @@ void AnimTask_GetBattleTerrain(u8 taskId)
|
|||||||
DestroyAnimVisualTask(taskId);
|
DestroyAnimVisualTask(taskId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AnimTask_GetFieldTerrain(u8 taskId)
|
||||||
|
{
|
||||||
|
gBattleAnimArgs[0] = gFieldStatuses & STATUS_FIELD_TERRAIN_ANY;
|
||||||
|
DestroyAnimVisualTask(taskId);
|
||||||
|
}
|
||||||
|
|
||||||
void AnimTask_AllocBackupPalBuffer(u8 taskId)
|
void AnimTask_AllocBackupPalBuffer(u8 taskId)
|
||||||
{
|
{
|
||||||
gMonSpritesGfxPtr->buffer = AllocZeroed(0x2000);
|
gMonSpritesGfxPtr->buffer = AllocZeroed(0x2000);
|
||||||
|
@ -5192,6 +5192,22 @@ void SetTypeBeforeUsingMove(u16 move, u8 battlerAtk)
|
|||||||
if (ItemId_GetPocket(gBattleMons[battlerAtk].item) == POCKET_BERRIES)
|
if (ItemId_GetPocket(gBattleMons[battlerAtk].item) == POCKET_BERRIES)
|
||||||
gBattleStruct->dynamicMoveType = gNaturalGiftTable[ITEM_TO_BERRY(gBattleMons[battlerAtk].item)].type;
|
gBattleStruct->dynamicMoveType = gNaturalGiftTable[ITEM_TO_BERRY(gBattleMons[battlerAtk].item)].type;
|
||||||
}
|
}
|
||||||
|
else if (gBattleMoves[move].effect == EFFECT_TERRAIN_PULSE)
|
||||||
|
{
|
||||||
|
if (IsBattlerTerrainAffected(battlerAtk, STATUS_FIELD_TERRAIN_ANY))
|
||||||
|
{
|
||||||
|
if (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN)
|
||||||
|
gBattleStruct->dynamicMoveType = TYPE_ELECTRIC | 0x80;
|
||||||
|
else if (gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN)
|
||||||
|
gBattleStruct->dynamicMoveType = TYPE_GRASS | 0x80;
|
||||||
|
else if (gFieldStatuses & STATUS_FIELD_MISTY_TERRAIN)
|
||||||
|
gBattleStruct->dynamicMoveType = TYPE_FAIRY | 0x80;
|
||||||
|
else if (gFieldStatuses & STATUS_FIELD_PSYCHIC_TERRAIN)
|
||||||
|
gBattleStruct->dynamicMoveType = TYPE_PSYCHIC | 0x80;
|
||||||
|
else //failsafe
|
||||||
|
gBattleStruct->dynamicMoveType = TYPE_NORMAL | 0x80;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
attackerAbility = GetBattlerAbility(battlerAtk);
|
attackerAbility = GetBattlerAbility(battlerAtk);
|
||||||
GET_MOVE_TYPE(move, moveType);
|
GET_MOVE_TYPE(move, moveType);
|
||||||
|
@ -1097,18 +1097,76 @@ static const u16 sMoveEffectsForbiddenToInstruct[] =
|
|||||||
FORBIDDEN_INSTRUCT_END
|
FORBIDDEN_INSTRUCT_END
|
||||||
};
|
};
|
||||||
|
|
||||||
static const u16 sNaturePowerMoves[] =
|
static const u16 sNaturePowerMoves[BATTLE_TERRAIN_COUNT] =
|
||||||
{
|
{
|
||||||
|
#if B_NATURE_POWER_MOVES >= GEN_7
|
||||||
[BATTLE_TERRAIN_GRASS] = MOVE_ENERGY_BALL,
|
[BATTLE_TERRAIN_GRASS] = MOVE_ENERGY_BALL,
|
||||||
[BATTLE_TERRAIN_LONG_GRASS] = MOVE_ENERGY_BALL,
|
[BATTLE_TERRAIN_LONG_GRASS] = MOVE_ENERGY_BALL,
|
||||||
[BATTLE_TERRAIN_SAND] = MOVE_EARTH_POWER,
|
[BATTLE_TERRAIN_SAND] = MOVE_EARTH_POWER,
|
||||||
[BATTLE_TERRAIN_UNDERWATER] = MOVE_HYDRO_PUMP,
|
|
||||||
[BATTLE_TERRAIN_WATER] = MOVE_HYDRO_PUMP,
|
[BATTLE_TERRAIN_WATER] = MOVE_HYDRO_PUMP,
|
||||||
[BATTLE_TERRAIN_POND] = MOVE_HYDRO_PUMP,
|
[BATTLE_TERRAIN_POND] = MOVE_HYDRO_PUMP,
|
||||||
[BATTLE_TERRAIN_MOUNTAIN] = MOVE_EARTH_POWER,
|
[BATTLE_TERRAIN_MOUNTAIN] = MOVE_EARTH_POWER,
|
||||||
[BATTLE_TERRAIN_CAVE] = MOVE_POWER_GEM,
|
[BATTLE_TERRAIN_CAVE] = MOVE_EARTH_POWER,
|
||||||
[BATTLE_TERRAIN_BUILDING] = MOVE_TRI_ATTACK,
|
[BATTLE_TERRAIN_BUILDING] = MOVE_TRI_ATTACK,
|
||||||
[BATTLE_TERRAIN_PLAIN] = MOVE_TRI_ATTACK
|
[BATTLE_TERRAIN_PLAIN] = MOVE_TRI_ATTACK,
|
||||||
|
[BATTLE_TERRAIN_SNOW] = MOVE_ICE_BEAM,
|
||||||
|
#elif B_NATURE_POWER_MOVES == GEN_6
|
||||||
|
[BATTLE_TERRAIN_GRASS] = MOVE_ENERGY_BALL,
|
||||||
|
[BATTLE_TERRAIN_LONG_GRASS] = MOVE_ENERGY_BALL,
|
||||||
|
[BATTLE_TERRAIN_SAND] = MOVE_EARTH_POWER,
|
||||||
|
[BATTLE_TERRAIN_WATER] = MOVE_HYDRO_PUMP,
|
||||||
|
[BATTLE_TERRAIN_POND] = MOVE_HYDRO_PUMP,
|
||||||
|
[BATTLE_TERRAIN_MOUNTAIN] = MOVE_EARTH_POWER,
|
||||||
|
[BATTLE_TERRAIN_CAVE] = MOVE_EARTH_POWER,
|
||||||
|
[BATTLE_TERRAIN_BUILDING] = MOVE_TRI_ATTACK,
|
||||||
|
[BATTLE_TERRAIN_PLAIN] = MOVE_TRI_ATTACK,
|
||||||
|
[BATTLE_TERRAIN_SNOW] = MOVE_FROST_BREATH,
|
||||||
|
#elif B_NATURE_POWER_MOVES == GEN_5
|
||||||
|
[BATTLE_TERRAIN_GRASS] = MOVE_SEED_BOMB,
|
||||||
|
[BATTLE_TERRAIN_LONG_GRASS] = MOVE_SEED_BOMB,
|
||||||
|
[BATTLE_TERRAIN_SAND] = MOVE_EARTHQUAKE,
|
||||||
|
[BATTLE_TERRAIN_WATER] = MOVE_HYDRO_PUMP,
|
||||||
|
[BATTLE_TERRAIN_POND] = MOVE_HYDRO_PUMP,
|
||||||
|
[BATTLE_TERRAIN_MOUNTAIN] = MOVE_EARTHQUAKE,
|
||||||
|
[BATTLE_TERRAIN_CAVE] = MOVE_EARTHQUAKE,
|
||||||
|
[BATTLE_TERRAIN_BUILDING] = MOVE_TRI_ATTACK,
|
||||||
|
[BATTLE_TERRAIN_PLAIN] = MOVE_EARTHQUAKE,
|
||||||
|
[BATTLE_TERRAIN_SNOW] = MOVE_BLIZZARD,
|
||||||
|
#elif B_NATURE_POWER_MOVES == GEN_4
|
||||||
|
[BATTLE_TERRAIN_GRASS] = MOVE_SEED_BOMB,
|
||||||
|
[BATTLE_TERRAIN_LONG_GRASS] = MOVE_SEED_BOMB,
|
||||||
|
[BATTLE_TERRAIN_SAND] = MOVE_EARTHQUAKE,
|
||||||
|
[BATTLE_TERRAIN_WATER] = MOVE_HYDRO_PUMP,
|
||||||
|
[BATTLE_TERRAIN_POND] = MOVE_HYDRO_PUMP,
|
||||||
|
[BATTLE_TERRAIN_MOUNTAIN] = MOVE_ROCK_SLIDE,
|
||||||
|
[BATTLE_TERRAIN_CAVE] = MOVE_ROCK_SLIDE,
|
||||||
|
[BATTLE_TERRAIN_BUILDING] = MOVE_TRI_ATTACK,
|
||||||
|
[BATTLE_TERRAIN_PLAIN] = MOVE_EARTHQUAKE,
|
||||||
|
[BATTLE_TERRAIN_SNOW] = MOVE_BLIZZARD,
|
||||||
|
#else // Gen 1-3
|
||||||
|
[BATTLE_TERRAIN_GRASS] = MOVE_STUN_SPORE,
|
||||||
|
[BATTLE_TERRAIN_LONG_GRASS] = MOVE_RAZOR_LEAF,
|
||||||
|
[BATTLE_TERRAIN_SAND] = MOVE_EARTHQUAKE,
|
||||||
|
[BATTLE_TERRAIN_WATER] = MOVE_SURF,
|
||||||
|
[BATTLE_TERRAIN_POND] = MOVE_BUBBLE_BEAM,
|
||||||
|
[BATTLE_TERRAIN_MOUNTAIN] = MOVE_ROCK_SLIDE,
|
||||||
|
[BATTLE_TERRAIN_CAVE] = MOVE_SHADOW_BALL,
|
||||||
|
[BATTLE_TERRAIN_BUILDING] = MOVE_SWIFT,
|
||||||
|
[BATTLE_TERRAIN_PLAIN] = MOVE_SWIFT,
|
||||||
|
[BATTLE_TERRAIN_SNOW] = MOVE_BLIZZARD,
|
||||||
|
#endif
|
||||||
|
[BATTLE_TERRAIN_UNDERWATER] = MOVE_HYDRO_PUMP,
|
||||||
|
[BATTLE_TERRAIN_SOARING] = MOVE_AIR_SLASH,
|
||||||
|
[BATTLE_TERRAIN_SKY_PILLAR] = MOVE_AIR_SLASH,
|
||||||
|
[BATTLE_TERRAIN_BURIAL_GROUND] = MOVE_SHADOW_BALL,
|
||||||
|
[BATTLE_TERRAIN_PUDDLE] = MOVE_MUD_BOMB,
|
||||||
|
[BATTLE_TERRAIN_MARSH] = MOVE_MUD_BOMB,
|
||||||
|
[BATTLE_TERRAIN_SWAMP] = MOVE_MUD_BOMB,
|
||||||
|
[BATTLE_TERRAIN_ICE] = MOVE_ICE_BEAM,
|
||||||
|
[BATTLE_TERRAIN_VOLCANO] = MOVE_LAVA_PLUME,
|
||||||
|
[BATTLE_TERRAIN_DISTORTION_WORLD] = MOVE_TRI_ATTACK,
|
||||||
|
[BATTLE_TERRAIN_SPACE] = MOVE_DRACO_METEOR,
|
||||||
|
[BATTLE_TERRAIN_ULTRA_SPACE] = MOVE_PSYSHOCK,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const u16 sPickupItems[] =
|
static const u16 sPickupItems[] =
|
||||||
@ -1153,7 +1211,7 @@ static const u8 sPickupProbabilities[] =
|
|||||||
30, 40, 50, 60, 70, 80, 90, 94, 98
|
30, 40, 50, 60, 70, 80, 90, 94, 98
|
||||||
};
|
};
|
||||||
|
|
||||||
static const u8 sTerrainToType[] =
|
static const u8 sTerrainToType[BATTLE_TERRAIN_COUNT] =
|
||||||
{
|
{
|
||||||
[BATTLE_TERRAIN_GRASS] = TYPE_GRASS,
|
[BATTLE_TERRAIN_GRASS] = TYPE_GRASS,
|
||||||
[BATTLE_TERRAIN_LONG_GRASS] = TYPE_GRASS,
|
[BATTLE_TERRAIN_LONG_GRASS] = TYPE_GRASS,
|
||||||
@ -1161,10 +1219,30 @@ 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_GROUND,
|
|
||||||
[BATTLE_TERRAIN_CAVE] = TYPE_ROCK,
|
[BATTLE_TERRAIN_CAVE] = TYPE_ROCK,
|
||||||
[BATTLE_TERRAIN_BUILDING] = TYPE_NORMAL,
|
[BATTLE_TERRAIN_BUILDING] = TYPE_NORMAL,
|
||||||
|
[BATTLE_TERRAIN_SOARING] = TYPE_FLYING,
|
||||||
|
[BATTLE_TERRAIN_SKY_PILLAR] = TYPE_FLYING,
|
||||||
|
[BATTLE_TERRAIN_BURIAL_GROUND] = TYPE_GHOST,
|
||||||
|
[BATTLE_TERRAIN_PUDDLE] = TYPE_GROUND,
|
||||||
|
[BATTLE_TERRAIN_MARSH] = TYPE_GROUND,
|
||||||
|
[BATTLE_TERRAIN_SWAMP] = TYPE_GROUND,
|
||||||
|
[BATTLE_TERRAIN_SNOW] = TYPE_ICE,
|
||||||
|
[BATTLE_TERRAIN_ICE] = TYPE_ICE,
|
||||||
|
[BATTLE_TERRAIN_VOLCANO] = TYPE_FIRE,
|
||||||
|
[BATTLE_TERRAIN_DISTORTION_WORLD] = TYPE_NORMAL,
|
||||||
|
[BATTLE_TERRAIN_SPACE] = TYPE_DRAGON,
|
||||||
|
[BATTLE_TERRAIN_ULTRA_SPACE] = TYPE_PSYCHIC,
|
||||||
|
#if B_CAMOUFLAGE_TYPES >= GEN_5
|
||||||
|
[BATTLE_TERRAIN_MOUNTAIN] = TYPE_GROUND,
|
||||||
|
[BATTLE_TERRAIN_PLAIN] = TYPE_GROUND,
|
||||||
|
#elif B_CAMOUFLAGE_TYPES == GEN_4
|
||||||
|
[BATTLE_TERRAIN_MOUNTAIN] = TYPE_ROCK,
|
||||||
|
[BATTLE_TERRAIN_PLAIN] = TYPE_GROUND,
|
||||||
|
#else
|
||||||
|
[BATTLE_TERRAIN_MOUNTAIN] = TYPE_ROCK,
|
||||||
[BATTLE_TERRAIN_PLAIN] = TYPE_NORMAL,
|
[BATTLE_TERRAIN_PLAIN] = TYPE_NORMAL,
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
// - ITEM_ULTRA_BALL skips Master Ball and ITEM_NONE
|
// - ITEM_ULTRA_BALL skips Master Ball and ITEM_NONE
|
||||||
@ -7250,19 +7328,19 @@ static void HandleTerrainMove(u32 moveEffect)
|
|||||||
switch (moveEffect)
|
switch (moveEffect)
|
||||||
{
|
{
|
||||||
case EFFECT_MISTY_TERRAIN:
|
case EFFECT_MISTY_TERRAIN:
|
||||||
statusFlag = STATUS_FIELD_MISTY_TERRAIN, timer = &gFieldTimers.mistyTerrainTimer;
|
statusFlag = STATUS_FIELD_MISTY_TERRAIN, timer = &gFieldTimers.terrainTimer;
|
||||||
gBattleCommunication[MULTISTRING_CHOOSER] = 0;
|
gBattleCommunication[MULTISTRING_CHOOSER] = 0;
|
||||||
break;
|
break;
|
||||||
case EFFECT_GRASSY_TERRAIN:
|
case EFFECT_GRASSY_TERRAIN:
|
||||||
statusFlag = STATUS_FIELD_GRASSY_TERRAIN, timer = &gFieldTimers.grassyTerrainTimer;
|
statusFlag = STATUS_FIELD_GRASSY_TERRAIN, timer = &gFieldTimers.terrainTimer;
|
||||||
gBattleCommunication[MULTISTRING_CHOOSER] = 1;
|
gBattleCommunication[MULTISTRING_CHOOSER] = 1;
|
||||||
break;
|
break;
|
||||||
case EFFECT_ELECTRIC_TERRAIN:
|
case EFFECT_ELECTRIC_TERRAIN:
|
||||||
statusFlag = STATUS_FIELD_ELECTRIC_TERRAIN, timer = &gFieldTimers.electricTerrainTimer;
|
statusFlag = STATUS_FIELD_ELECTRIC_TERRAIN, timer = &gFieldTimers.terrainTimer;
|
||||||
gBattleCommunication[MULTISTRING_CHOOSER] = 2;
|
gBattleCommunication[MULTISTRING_CHOOSER] = 2;
|
||||||
break;
|
break;
|
||||||
case EFFECT_PSYCHIC_TERRAIN:
|
case EFFECT_PSYCHIC_TERRAIN:
|
||||||
statusFlag = STATUS_FIELD_PSYCHIC_TERRAIN, timer = &gFieldTimers.psychicTerrainTimer;
|
statusFlag = STATUS_FIELD_PSYCHIC_TERRAIN, timer = &gFieldTimers.terrainTimer;
|
||||||
gBattleCommunication[MULTISTRING_CHOOSER] = 3;
|
gBattleCommunication[MULTISTRING_CHOOSER] = 3;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -8859,22 +8937,19 @@ static void Cmd_various(void)
|
|||||||
gBattlescriptCurrInstr += 7; // can heal
|
gBattlescriptCurrInstr += 7; // can heal
|
||||||
return;
|
return;
|
||||||
case VARIOUS_REMOVE_TERRAIN:
|
case VARIOUS_REMOVE_TERRAIN:
|
||||||
|
gFieldTimers.terrainTimer = 0;
|
||||||
switch (gFieldStatuses & STATUS_FIELD_TERRAIN_ANY)
|
switch (gFieldStatuses & STATUS_FIELD_TERRAIN_ANY)
|
||||||
{
|
{
|
||||||
case STATUS_FIELD_MISTY_TERRAIN:
|
case STATUS_FIELD_MISTY_TERRAIN:
|
||||||
gFieldTimers.mistyTerrainTimer = 0;
|
|
||||||
gBattleCommunication[MULTISTRING_CHOOSER] = 0;
|
gBattleCommunication[MULTISTRING_CHOOSER] = 0;
|
||||||
break;
|
break;
|
||||||
case STATUS_FIELD_GRASSY_TERRAIN:
|
case STATUS_FIELD_GRASSY_TERRAIN:
|
||||||
gFieldTimers.grassyTerrainTimer = 0;
|
|
||||||
gBattleCommunication[MULTISTRING_CHOOSER] = 1;
|
gBattleCommunication[MULTISTRING_CHOOSER] = 1;
|
||||||
break;
|
break;
|
||||||
case STATUS_FIELD_ELECTRIC_TERRAIN:
|
case STATUS_FIELD_ELECTRIC_TERRAIN:
|
||||||
gFieldTimers.electricTerrainTimer = 0;
|
|
||||||
gBattleCommunication[MULTISTRING_CHOOSER] = 2;
|
gBattleCommunication[MULTISTRING_CHOOSER] = 2;
|
||||||
break;
|
break;
|
||||||
case STATUS_FIELD_PSYCHIC_TERRAIN:
|
case STATUS_FIELD_PSYCHIC_TERRAIN:
|
||||||
gFieldTimers.psychicTerrainTimer = 0;
|
|
||||||
gBattleCommunication[MULTISTRING_CHOOSER] = 3;
|
gBattleCommunication[MULTISTRING_CHOOSER] = 3;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -11866,6 +11941,8 @@ u16 GetNaturePowerMove(void)
|
|||||||
return MOVE_ENERGY_BALL;
|
return MOVE_ENERGY_BALL;
|
||||||
else if (gFieldStatuses & STATUS_FIELD_PSYCHIC_TERRAIN)
|
else if (gFieldStatuses & STATUS_FIELD_PSYCHIC_TERRAIN)
|
||||||
return MOVE_PSYCHIC;
|
return MOVE_PSYCHIC;
|
||||||
|
else if (sNaturePowerMoves == MOVE_NONE)
|
||||||
|
return MOVE_TRI_ATTACK;
|
||||||
return sNaturePowerMoves[gBattleTerrain];
|
return sNaturePowerMoves[gBattleTerrain];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -12448,38 +12525,113 @@ static void Cmd_jumpifhasnohp(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void Cmd_getsecretpowereffect(void)
|
static void Cmd_getsecretpowereffect(void)
|
||||||
|
{
|
||||||
|
gBattleScripting.moveEffect = GetSecretPowerMoveEffect();
|
||||||
|
gBattlescriptCurrInstr++;
|
||||||
|
}
|
||||||
|
|
||||||
|
u16 GetSecretPowerMoveEffect(void)
|
||||||
|
{
|
||||||
|
u16 moveEffect;
|
||||||
|
u32 fieldTerrain = gFieldStatuses & STATUS_FIELD_TERRAIN_ANY;
|
||||||
|
if (fieldTerrain)
|
||||||
|
{
|
||||||
|
switch (fieldTerrain)
|
||||||
|
{
|
||||||
|
case STATUS_FIELD_MISTY_TERRAIN:
|
||||||
|
moveEffect = MOVE_EFFECT_SP_ATK_MINUS_1;
|
||||||
|
break;
|
||||||
|
case STATUS_FIELD_GRASSY_TERRAIN:
|
||||||
|
moveEffect = MOVE_EFFECT_SLEEP;
|
||||||
|
break;
|
||||||
|
case STATUS_FIELD_ELECTRIC_TERRAIN:
|
||||||
|
moveEffect = MOVE_EFFECT_PARALYSIS;
|
||||||
|
break;
|
||||||
|
case STATUS_FIELD_PSYCHIC_TERRAIN:
|
||||||
|
moveEffect = MOVE_EFFECT_SPD_MINUS_1;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
moveEffect = MOVE_EFFECT_PARALYSIS;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
switch (gBattleTerrain)
|
switch (gBattleTerrain)
|
||||||
{
|
{
|
||||||
case BATTLE_TERRAIN_GRASS:
|
case BATTLE_TERRAIN_GRASS:
|
||||||
gBattleScripting.moveEffect = MOVE_EFFECT_SLEEP;
|
#if B_SECRET_POWER_EFFECT >= GEN_4
|
||||||
|
moveEffect = MOVE_EFFECT_SLEEP;
|
||||||
|
#else
|
||||||
|
moveEffect = MOVE_EFFECT_POISON;
|
||||||
|
#endif
|
||||||
break;
|
break;
|
||||||
case BATTLE_TERRAIN_LONG_GRASS:
|
case BATTLE_TERRAIN_LONG_GRASS:
|
||||||
gBattleScripting.moveEffect = MOVE_EFFECT_SLEEP;
|
moveEffect = MOVE_EFFECT_SLEEP;
|
||||||
break;
|
break;
|
||||||
case BATTLE_TERRAIN_SAND:
|
case BATTLE_TERRAIN_SAND:
|
||||||
gBattleScripting.moveEffect = MOVE_EFFECT_ACC_MINUS_1;
|
moveEffect = MOVE_EFFECT_ACC_MINUS_1;
|
||||||
break;
|
break;
|
||||||
case BATTLE_TERRAIN_UNDERWATER:
|
case BATTLE_TERRAIN_UNDERWATER:
|
||||||
gBattleScripting.moveEffect = MOVE_EFFECT_ATK_MINUS_1;
|
#if B_SECRET_POWER_EFFECT >= GEN_6
|
||||||
|
moveEffect = MOVE_EFFECT_ATK_MINUS_1;
|
||||||
|
#else
|
||||||
|
moveEffect = MOVE_EFFECT_DEF_MINUS_1;
|
||||||
|
#endif
|
||||||
break;
|
break;
|
||||||
case BATTLE_TERRAIN_WATER:
|
case BATTLE_TERRAIN_WATER:
|
||||||
gBattleScripting.moveEffect = MOVE_EFFECT_ATK_MINUS_1;
|
moveEffect = MOVE_EFFECT_ATK_MINUS_1;
|
||||||
break;
|
break;
|
||||||
case BATTLE_TERRAIN_POND:
|
case BATTLE_TERRAIN_POND:
|
||||||
gBattleScripting.moveEffect = MOVE_EFFECT_ATK_MINUS_1;
|
#if B_SECRET_POWER_EFFECT >= GEN_4
|
||||||
|
moveEffect = MOVE_EFFECT_ATK_MINUS_1;
|
||||||
|
#else
|
||||||
|
moveEffect = MOVE_EFFECT_SPD_MINUS_1;
|
||||||
|
#endif
|
||||||
break;
|
break;
|
||||||
case BATTLE_TERRAIN_MOUNTAIN:
|
case BATTLE_TERRAIN_MOUNTAIN:
|
||||||
gBattleScripting.moveEffect = MOVE_EFFECT_ACC_MINUS_1;
|
#if B_SECRET_POWER_EFFECT >= GEN_5
|
||||||
|
moveEffect = MOVE_EFFECT_ACC_MINUS_1;
|
||||||
|
#elif B_SECRET_POWER_EFFECT == GEN_4
|
||||||
|
moveEffect = MOVE_EFFECT_FLINCH;
|
||||||
|
#else
|
||||||
|
moveEffect = MOVE_EFFECT_CONFUSION;
|
||||||
|
#endif
|
||||||
break;
|
break;
|
||||||
case BATTLE_TERRAIN_CAVE:
|
case BATTLE_TERRAIN_CAVE:
|
||||||
gBattleScripting.moveEffect = MOVE_EFFECT_FLINCH;
|
case BATTLE_TERRAIN_BURIAL_GROUND:
|
||||||
|
case BATTLE_TERRAIN_SPACE:
|
||||||
|
moveEffect = MOVE_EFFECT_FLINCH;
|
||||||
|
break;
|
||||||
|
case BATTLE_TERRAIN_SOARING:
|
||||||
|
case BATTLE_TERRAIN_SKY_PILLAR:
|
||||||
|
case BATTLE_TERRAIN_MARSH:
|
||||||
|
case BATTLE_TERRAIN_SWAMP:
|
||||||
|
moveEffect = MOVE_EFFECT_SPD_MINUS_1;
|
||||||
|
break;
|
||||||
|
case BATTLE_TERRAIN_PUDDLE:
|
||||||
|
#if B_SECRET_POWER_EFFECT >= GEN_5
|
||||||
|
moveEffect = MOVE_EFFECT_SPD_MINUS_1;
|
||||||
|
#else
|
||||||
|
moveEffect = MOVE_EFFECT_ACC_MINUS_1;
|
||||||
|
#endif
|
||||||
|
break;
|
||||||
|
case BATTLE_TERRAIN_SNOW:
|
||||||
|
case BATTLE_TERRAIN_ICE:
|
||||||
|
moveEffect = MOVE_EFFECT_FREEZE;
|
||||||
|
break;
|
||||||
|
case BATTLE_TERRAIN_VOLCANO:
|
||||||
|
moveEffect = MOVE_EFFECT_BURN;
|
||||||
|
break;
|
||||||
|
case BATTLE_TERRAIN_ULTRA_SPACE:
|
||||||
|
moveEffect = MOVE_EFFECT_DEF_MINUS_1;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
gBattleScripting.moveEffect = MOVE_EFFECT_PARALYSIS;
|
moveEffect = MOVE_EFFECT_PARALYSIS;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
gBattlescriptCurrInstr++;
|
}
|
||||||
|
return moveEffect;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void Cmd_pickup(void)
|
static void Cmd_pickup(void)
|
||||||
@ -12709,10 +12861,30 @@ bool32 CanCamouflage(u8 battlerId)
|
|||||||
|
|
||||||
static void Cmd_settypetoterrain(void)
|
static void Cmd_settypetoterrain(void)
|
||||||
{
|
{
|
||||||
if (!IS_BATTLER_OF_TYPE(gBattlerAttacker, sTerrainToType[gBattleTerrain]))
|
u8 terrainType;
|
||||||
|
switch(gFieldStatuses & STATUS_FIELD_TERRAIN_ANY)
|
||||||
{
|
{
|
||||||
SET_BATTLER_TYPE(gBattlerAttacker, sTerrainToType[gBattleTerrain]);
|
case STATUS_FIELD_ELECTRIC_TERRAIN:
|
||||||
PREPARE_TYPE_BUFFER(gBattleTextBuff1, sTerrainToType[gBattleTerrain]);
|
terrainType = TYPE_ELECTRIC;
|
||||||
|
break;
|
||||||
|
case STATUS_FIELD_GRASSY_TERRAIN:
|
||||||
|
terrainType = TYPE_GRASS;
|
||||||
|
break;
|
||||||
|
case STATUS_FIELD_MISTY_TERRAIN:
|
||||||
|
terrainType = TYPE_FAIRY;
|
||||||
|
break;
|
||||||
|
case STATUS_FIELD_PSYCHIC_TERRAIN:
|
||||||
|
terrainType = TYPE_PSYCHIC;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
terrainType = sTerrainToType[gBattleTerrain];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!IS_BATTLER_OF_TYPE(gBattlerAttacker, terrainType))
|
||||||
|
{
|
||||||
|
SET_BATTLER_TYPE(gBattlerAttacker, terrainType);
|
||||||
|
PREPARE_TYPE_BUFFER(gBattleTextBuff1, terrainType);
|
||||||
|
|
||||||
gBattlescriptCurrInstr += 5;
|
gBattlescriptCurrInstr += 5;
|
||||||
}
|
}
|
||||||
|
@ -2326,7 +2326,7 @@ u8 DoFieldEndTurnEffects(void)
|
|||||||
break;
|
break;
|
||||||
case ENDTURN_ELECTRIC_TERRAIN:
|
case ENDTURN_ELECTRIC_TERRAIN:
|
||||||
if (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN
|
if (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN
|
||||||
&& (!(gFieldStatuses & STATUS_FIELD_TERRAIN_PERMANENT) && --gFieldTimers.electricTerrainTimer == 0))
|
&& (!(gFieldStatuses & STATUS_FIELD_TERRAIN_PERMANENT) && --gFieldTimers.terrainTimer == 0))
|
||||||
{
|
{
|
||||||
gFieldStatuses &= ~(STATUS_FIELD_ELECTRIC_TERRAIN | STATUS_FIELD_TERRAIN_PERMANENT);
|
gFieldStatuses &= ~(STATUS_FIELD_ELECTRIC_TERRAIN | STATUS_FIELD_TERRAIN_PERMANENT);
|
||||||
TryToRevertMimicry();
|
TryToRevertMimicry();
|
||||||
@ -2337,7 +2337,7 @@ u8 DoFieldEndTurnEffects(void)
|
|||||||
break;
|
break;
|
||||||
case ENDTURN_MISTY_TERRAIN:
|
case ENDTURN_MISTY_TERRAIN:
|
||||||
if (gFieldStatuses & STATUS_FIELD_MISTY_TERRAIN
|
if (gFieldStatuses & STATUS_FIELD_MISTY_TERRAIN
|
||||||
&& (!(gFieldStatuses & STATUS_FIELD_TERRAIN_PERMANENT) && --gFieldTimers.mistyTerrainTimer == 0))
|
&& (!(gFieldStatuses & STATUS_FIELD_TERRAIN_PERMANENT) && --gFieldTimers.terrainTimer == 0))
|
||||||
{
|
{
|
||||||
gFieldStatuses &= ~(STATUS_FIELD_MISTY_TERRAIN);
|
gFieldStatuses &= ~(STATUS_FIELD_MISTY_TERRAIN);
|
||||||
TryToRevertMimicry();
|
TryToRevertMimicry();
|
||||||
@ -2350,7 +2350,7 @@ u8 DoFieldEndTurnEffects(void)
|
|||||||
if (gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN)
|
if (gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN)
|
||||||
{
|
{
|
||||||
if (!(gFieldStatuses & STATUS_FIELD_TERRAIN_PERMANENT)
|
if (!(gFieldStatuses & STATUS_FIELD_TERRAIN_PERMANENT)
|
||||||
&& (gFieldTimers.grassyTerrainTimer == 0 || --gFieldTimers.grassyTerrainTimer == 0))
|
&& (gFieldTimers.terrainTimer == 0 || --gFieldTimers.terrainTimer == 0))
|
||||||
{
|
{
|
||||||
gFieldStatuses &= ~(STATUS_FIELD_GRASSY_TERRAIN);
|
gFieldStatuses &= ~(STATUS_FIELD_GRASSY_TERRAIN);
|
||||||
TryToRevertMimicry();
|
TryToRevertMimicry();
|
||||||
@ -2362,7 +2362,7 @@ u8 DoFieldEndTurnEffects(void)
|
|||||||
break;
|
break;
|
||||||
case ENDTURN_PSYCHIC_TERRAIN:
|
case ENDTURN_PSYCHIC_TERRAIN:
|
||||||
if (gFieldStatuses & STATUS_FIELD_PSYCHIC_TERRAIN
|
if (gFieldStatuses & STATUS_FIELD_PSYCHIC_TERRAIN
|
||||||
&& (!(gFieldStatuses & STATUS_FIELD_TERRAIN_PERMANENT) && --gFieldTimers.psychicTerrainTimer == 0))
|
&& (!(gFieldStatuses & STATUS_FIELD_TERRAIN_PERMANENT) && --gFieldTimers.terrainTimer == 0))
|
||||||
{
|
{
|
||||||
gFieldStatuses &= ~(STATUS_FIELD_PSYCHIC_TERRAIN);
|
gFieldStatuses &= ~(STATUS_FIELD_PSYCHIC_TERRAIN);
|
||||||
TryToRevertMimicry();
|
TryToRevertMimicry();
|
||||||
@ -4338,28 +4338,28 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ABILITY_ELECTRIC_SURGE:
|
case ABILITY_ELECTRIC_SURGE:
|
||||||
if (TryChangeBattleTerrain(battler, STATUS_FIELD_ELECTRIC_TERRAIN, &gFieldTimers.electricTerrainTimer))
|
if (TryChangeBattleTerrain(battler, STATUS_FIELD_ELECTRIC_TERRAIN, &gFieldTimers.terrainTimer))
|
||||||
{
|
{
|
||||||
BattleScriptPushCursorAndCallback(BattleScript_ElectricSurgeActivates);
|
BattleScriptPushCursorAndCallback(BattleScript_ElectricSurgeActivates);
|
||||||
effect++;
|
effect++;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ABILITY_GRASSY_SURGE:
|
case ABILITY_GRASSY_SURGE:
|
||||||
if (TryChangeBattleTerrain(battler, STATUS_FIELD_GRASSY_TERRAIN, &gFieldTimers.grassyTerrainTimer))
|
if (TryChangeBattleTerrain(battler, STATUS_FIELD_GRASSY_TERRAIN, &gFieldTimers.terrainTimer))
|
||||||
{
|
{
|
||||||
BattleScriptPushCursorAndCallback(BattleScript_GrassySurgeActivates);
|
BattleScriptPushCursorAndCallback(BattleScript_GrassySurgeActivates);
|
||||||
effect++;
|
effect++;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ABILITY_MISTY_SURGE:
|
case ABILITY_MISTY_SURGE:
|
||||||
if (TryChangeBattleTerrain(battler, STATUS_FIELD_MISTY_TERRAIN, &gFieldTimers.mistyTerrainTimer))
|
if (TryChangeBattleTerrain(battler, STATUS_FIELD_MISTY_TERRAIN, &gFieldTimers.terrainTimer))
|
||||||
{
|
{
|
||||||
BattleScriptPushCursorAndCallback(BattleScript_MistySurgeActivates);
|
BattleScriptPushCursorAndCallback(BattleScript_MistySurgeActivates);
|
||||||
effect++;
|
effect++;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ABILITY_PSYCHIC_SURGE:
|
case ABILITY_PSYCHIC_SURGE:
|
||||||
if (TryChangeBattleTerrain(battler, STATUS_FIELD_PSYCHIC_TERRAIN, &gFieldTimers.psychicTerrainTimer))
|
if (TryChangeBattleTerrain(battler, STATUS_FIELD_PSYCHIC_TERRAIN, &gFieldTimers.terrainTimer))
|
||||||
{
|
{
|
||||||
BattleScriptPushCursorAndCallback(BattleScript_PsychicSurgeActivates);
|
BattleScriptPushCursorAndCallback(BattleScript_PsychicSurgeActivates);
|
||||||
effect++;
|
effect++;
|
||||||
@ -7865,6 +7865,11 @@ static u16 CalcMoveBasePower(u16 move, u8 battlerAtk, u8 battlerDef)
|
|||||||
if (gFieldStatuses & STATUS_FIELD_GRAVITY)
|
if (gFieldStatuses & STATUS_FIELD_GRAVITY)
|
||||||
MulModifier(&basePower, UQ_4_12(1.5));
|
MulModifier(&basePower, UQ_4_12(1.5));
|
||||||
break;
|
break;
|
||||||
|
case EFFECT_TERRAIN_PULSE:
|
||||||
|
if ((gFieldStatuses & STATUS_FIELD_TERRAIN_ANY)
|
||||||
|
&& IsBattlerGrounded(gBattlerAttacker))
|
||||||
|
basePower *= 2;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// move-specific base power changes
|
// move-specific base power changes
|
||||||
|
@ -11347,7 +11347,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] =
|
|||||||
|
|
||||||
[MOVE_TERRAIN_PULSE] =
|
[MOVE_TERRAIN_PULSE] =
|
||||||
{
|
{
|
||||||
.effect = EFFECT_PLACEHOLDER, //TODO
|
.effect = EFFECT_TERRAIN_PULSE,
|
||||||
.power = 50,
|
.power = 50,
|
||||||
.type = TYPE_NORMAL,
|
.type = TYPE_NORMAL,
|
||||||
.accuracy = 100,
|
.accuracy = 100,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user