Merge branch 'rh-hideout:master' into master

This commit is contained in:
摆烂 2025-05-02 09:34:31 +08:00 committed by GitHub
commit fc76d93d26
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
319 changed files with 2677 additions and 2264 deletions

View File

@ -23,9 +23,10 @@ body:
label: Version
description: What version of pokeemerald-expansion are you using as a base?
options:
- 1.11.1 (Latest release)
- 1.11.2 (Latest release)
- master (default, unreleased bugfixes)
- upcoming (Edge)
- 1.11.1
- 1.11.0
- 1.10.3
- 1.10.2

View File

@ -23,9 +23,10 @@ body:
label: Version
description: What version of pokeemerald-expansion are you using as a base?
options:
- 1.11.1 (Latest release)
- 1.11.2 (Latest release)
- master (default, unreleased bugfixes)
- upcoming (Edge)
- 1.11.1
- 1.11.0
- 1.10.3
- 1.10.2

View File

@ -23,9 +23,10 @@ body:
label: Version
description: What version of pokeemerald-expansion are you using as a base?
options:
- 1.11.1 (Latest release)
- 1.11.2 (Latest release)
- master (default, unreleased bugfixes)
- upcoming (Edge)
- 1.11.1
- 1.11.0
- 1.10.3
- 1.10.2

View File

@ -2,7 +2,7 @@ name: Labels
on:
pull_request:
types: [opened, labeled, unlabeled]
types: [opened, synchronize, labeled, unlabeled]
jobs:
label:

View File

@ -10,7 +10,7 @@ The main advantage of using vanilla pokeemerald as a base is being able to link
If you use pokeemerald-expansion in your hack, please add RHH (Rom Hacking Hideout) to your credits list. Optionally, you can list the version used, so it can help players know what features to expect.
You can phrase it as the following:
```
Based off RHH's pokeemerald-expansion 1.11.1 https://github.com/rh-hideout/pokeemerald-expansion/
Based off RHH's pokeemerald-expansion 1.11.2 https://github.com/rh-hideout/pokeemerald-expansion/
```
#### Important: DO NOT use GitHub's "Download Zip" option. Using this option will not download the commit history required to update your expansion version or merge other feature branches. Instead, please read [this guide](https://github.com/Pawkkie/Team-Aquas-Asset-Repo/wiki/The-Basics-of-GitHub) to learn how to fork the repository and clone locally from there.

View File

@ -1100,7 +1100,7 @@
.byte \battler
.endm
.macro callterrainattack
.macro callenvironmentattack
.byte 0xcc
.endm
@ -1255,7 +1255,7 @@
.4byte \failInstr
.endm
.macro settypetoterrain failInstr:req
.macro settypetoenvironment failInstr:req
.byte 0xeb
.4byte \failInstr
.endm

View File

@ -1878,7 +1878,7 @@ gBattleAnimMove_Avalanche::
loadspritegfx ANIM_TAG_ROCKS
loadspritegfx ANIM_TAG_ICE_CHUNK
monbg ANIM_DEF_PARTNER
createsprite gShakeMonOrTerrainSpriteTemplate, ANIM_ATTACKER, 2, 7, 1, 11, 1
createsprite gShakeMonOrPlatformSpriteTemplate, ANIM_ATTACKER, 2, 7, 1, 11, 1
createsprite gAvalancheSpriteTemplate, ANIM_TARGET, 2, -5, 1, -5, 1
playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET
delay 2
@ -12878,7 +12878,7 @@ gBattleAnimMove_GlitzyGlow::
createsprite gSynchronoiseYellowRingTemplate, ANIM_ATTACKER, 0, 25, 0, 0, 0, 0, 0, 1
delay 36
createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 6, 1
createvisualtask AnimTask_ShakeBattleTerrain, 2, 1, 0, 6, 1
createvisualtask AnimTask_ShakeBattlePlatforms, 2, 1, 0, 6, 1
waitforvisualfinish
createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 12, 0, 0 @Darken
waitforvisualfinish
@ -13691,7 +13691,7 @@ OverdriveRings:
createsprite gHyperVoiceRingSpriteTemplate, ANIM_ATTACKER, 0, 0x2d, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1
createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 6, 1
createvisualtask AnimTask_ShakeMon2, 2, ANIM_DEF_PARTNER, 1, 0, 6, 1
createvisualtask AnimTask_ShakeBattleTerrain, 0x2, 0x1, 0x0, 0x6, 0x1
createvisualtask AnimTask_ShakeBattlePlatforms, 0x2, 0x1, 0x0, 0x6, 0x1
createvisualtask SoundTask_WaitForCry, 0x5
return
@ -14327,7 +14327,7 @@ gBattleAnimMove_RisingVoltage::
loadspritegfx ANIM_TAG_LIGHTNING
monbg ANIM_ATTACKER
setalpha 12, 8
createvisualtask AnimTask_GetBattleTerrain, 0x5,
createvisualtask AnimTask_GetBattleEnvironment, 0x5,
jumpargeq 0x0, BG_ELECTRIC_TERRAIN, ANIM_RISING_VOLTAGE_STRONGER
ANIM_RISING_VOLTAGE_NORMAL:
createvisualtask AnimTask_BlendBattleAnimPal, 0x2, F_PAL_BG, 0x1, 0x0, 0x4, 0x0 @;To black
@ -15296,7 +15296,7 @@ gBattleAnimMove_AstralBarrage::
setalpha 12, 8
fadetobg BG_GHOST
waitbgfadein
createsprite gShakeMonOrTerrainSpriteTemplate, ANIM_ATTACKER, 2, 4, 1, 180, 1
createsprite gShakeMonOrPlatformSpriteTemplate, ANIM_ATTACKER, 2, 4, 1, 180, 1
createsoundtask SoundTask_LoopSEAdjustPanning, SE_M_FAINT_ATTACK, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 5, 20, 0, 5
createsprite gSuperpowerRockSpriteTemplate, ANIM_ATTACKER, 41, 200, 96, 1, 120
delay 8
@ -16508,7 +16508,7 @@ gBattleAnimMove_AlluringVoice::
createsprite gHyperVoiceRingSpriteTemplate, ANIM_ATTACKER, 0, 45, 0, 0, 0, 0, 0, 1
createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 6, 1
createvisualtask AnimTask_ShakeMon2, 2, ANIM_DEF_PARTNER, 1, 0, 6, 1
createvisualtask AnimTask_ShakeBattleTerrain, 2, 1, 0, 6, 1
createvisualtask AnimTask_ShakeBattlePlatforms, 2, 1, 0, 6, 1
createvisualtask SoundTask_WaitForCry, 5
delay 0xA
createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 26, 1
@ -17118,7 +17118,7 @@ TorchSongEffect:
createvisualtask AnimTask_ScaleMonAndRestore, 5, -5, -5, 5, ANIM_ATTACKER, 0
createsprite gHyperVoiceRingSpriteTemplate, ANIM_ATTACKER, 0, 45, 0, 0, 0, 0, 0, 1
createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 6, 1
createvisualtask AnimTask_ShakeBattleTerrain, 2, 1, 0, 6, 1
createvisualtask AnimTask_ShakeBattlePlatforms, 2, 1, 0, 6, 1
createvisualtask SoundTask_WaitForCry, 5
return
@ -17599,7 +17599,7 @@ gBattleAnimMove_MakeItRain::
jumprettrue MakingItRainOnPlayer
MakingItRainContinue:
waitbgfadeout
createsprite gShakeMonOrTerrainSpriteTemplate, ANIM_ATTACKER, 2, 7, 1, 11, 1
createsprite gShakeMonOrPlatformSpriteTemplate, ANIM_ATTACKER, 2, 7, 1, 11, 1
loopsewithpan SE_M_PAY_DAY, SOUND_PAN_TARGET, 8, 15
createsprite gMakingItRainTemplate, ANIM_TARGET, 2, -5, 0, -5, 1
delay 2
@ -19965,7 +19965,7 @@ gBattleAnimMove_MeanLook::
gBattleAnimMove_RockThrow::
loadspritegfx ANIM_TAG_ROCKS
createsprite gShakeMonOrTerrainSpriteTemplate, ANIM_TARGET, 2, 6, 1, 15, 1
createsprite gShakeMonOrPlatformSpriteTemplate, ANIM_TARGET, 2, 6, 1, 15, 1
createsprite gFallingRockSpriteTemplate, ANIM_TARGET, 2, 0, 1, 0, 0
playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET
delay 6
@ -19987,7 +19987,7 @@ gBattleAnimMove_RockThrow::
gBattleAnimMove_RockSlide::
loadspritegfx ANIM_TAG_ROCKS
monbg ANIM_DEF_PARTNER
createsprite gShakeMonOrTerrainSpriteTemplate, ANIM_ATTACKER, 2, 7, 1, 11, 1
createsprite gShakeMonOrPlatformSpriteTemplate, ANIM_ATTACKER, 2, 7, 1, 11, 1
createsprite gFallingRockSpriteTemplate, ANIM_TARGET, 2, -5, 1, -5, 1
playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET
delay 2
@ -20781,7 +20781,7 @@ gBattleAnimMove_Barrage::
createvisualtask AnimTask_BarrageBall, 3
playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER
delay 24
createsprite gShakeMonOrTerrainSpriteTemplate, ANIM_ATTACKER, 2, 8, 1, 40, 1
createsprite gShakeMonOrPlatformSpriteTemplate, ANIM_ATTACKER, 2, 8, 1, 40, 1
createvisualtask AnimTask_ShakeMon, 3, ANIM_TARGET, 0, 4, 20, 1
createvisualtask AnimTask_ShakeMon, 3, ANIM_DEF_PARTNER, 0, 4, 20, 1
loopsewithpan SE_M_STRENGTH, SOUND_PAN_TARGET, 8, 2
@ -21528,7 +21528,7 @@ gBattleAnimMove_Superpower::
createsprite gSuperpowerOrbSpriteTemplate, ANIM_TARGET, 2, ANIM_ATTACKER
playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER
delay 20
createsprite gShakeMonOrTerrainSpriteTemplate, ANIM_ATTACKER, 2, 4, 1, 180, 1
createsprite gShakeMonOrPlatformSpriteTemplate, ANIM_ATTACKER, 2, 4, 1, 180, 1
createvisualtask SoundTask_PlaySE2WithPanning, 5, SE_M_EARTHQUAKE, 0
delay 40
createsprite gSuperpowerRockSpriteTemplate, ANIM_ATTACKER, 41, 200, 96, 1, 120
@ -22879,7 +22879,7 @@ SnoreEffect:
playsewithpan SE_M_SNORE, SOUND_PAN_ATTACKER
createvisualtask AnimTask_ScaleMonAndRestore, 5, -7, -7, 7, ANIM_ATTACKER, 1
createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 7, 1
createsprite gShakeMonOrTerrainSpriteTemplate, ANIM_ATTACKER, 2, 6, 1, 14, 0, 0
createsprite gShakeMonOrPlatformSpriteTemplate, ANIM_ATTACKER, 2, 6, 1, 14, 0, 0
createsprite gSnoreZSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, -42, -38, 24, 0, 0
createsprite gSnoreZSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 0, -42, 24, 0, 0
createsprite gSnoreZSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 42, -38, 24, 0, 0
@ -24727,7 +24727,7 @@ gBattleAnimMove_AncientPower::
loadspritegfx ANIM_TAG_IMPACT
monbg ANIM_DEF_PARTNER
setalpha 12, 8
createsprite gShakeMonOrTerrainSpriteTemplate, ANIM_ATTACKER, 2, 4, 1, 10, 1
createsprite gShakeMonOrPlatformSpriteTemplate, ANIM_ATTACKER, 2, 4, 1, 10, 1
createsprite gAncientPowerRockSpriteTemplate, ANIM_ATTACKER, 2, 20, 32, -48, 50, 2
createsprite gAncientPowerRockSpriteTemplate, ANIM_ATTACKER, 2, 0, 32, -38, 25, 5
createsprite gAncientPowerRockSpriteTemplate, ANIM_ATTACKER, 2, 32, 32, -28, 40, 3
@ -25152,14 +25152,14 @@ gBattleAnimMove_MetalClaw::
playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET
createsprite gClawSlashSpriteTemplate, ANIM_TARGET, 2, -10, -10, 0
createsprite gClawSlashSpriteTemplate, ANIM_TARGET, 2, -10, 10, 0
createsprite gShakeMonOrTerrainSpriteTemplate, ANIM_ATTACKER, 2, -4, 1, 10, 3, 1
createsprite gShakeMonOrPlatformSpriteTemplate, ANIM_ATTACKER, 2, -4, 1, 10, 3, 1
delay 8
createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 6, 4
delay 2
playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET
createsprite gClawSlashSpriteTemplate, ANIM_TARGET, 2, 10, -10, 1
createsprite gClawSlashSpriteTemplate, ANIM_TARGET, 2, 10, 10, 1
createsprite gShakeMonOrTerrainSpriteTemplate, ANIM_ATTACKER, 2, -4, 1, 10, 3, 1
createsprite gShakeMonOrPlatformSpriteTemplate, ANIM_ATTACKER, 2, -4, 1, 10, 3, 1
waitforvisualfinish
end
@ -26375,7 +26375,7 @@ HyperVoiceEffect:
createsprite gHyperVoiceRingSpriteTemplate, ANIM_ATTACKER, 0, 45, 0, 0, 0, 0, 0, 1
createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 6, 1
createvisualtask AnimTask_ShakeMon2, 2, ANIM_DEF_PARTNER, 1, 0, 6, 1
createvisualtask AnimTask_ShakeBattleTerrain, 2, 1, 0, 6, 1
createvisualtask AnimTask_ShakeBattlePlatforms, 2, 1, 0, 6, 1
createvisualtask SoundTask_WaitForCry, 5
return
@ -26497,7 +26497,7 @@ gBattleAnimMove_DragonClaw::
createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_RAZOR_WIND, SOUND_PAN_TARGET
createsprite gClawSlashSpriteTemplate, ANIM_TARGET, 2, -10, -10, 0
createsprite gClawSlashSpriteTemplate, ANIM_TARGET, 2, -10, 10, 0
createsprite gShakeMonOrTerrainSpriteTemplate, ANIM_ATTACKER, 2, -4, 1, 10, 3, 1
createsprite gShakeMonOrPlatformSpriteTemplate, ANIM_ATTACKER, 2, -4, 1, 10, 3, 1
createsprite gFireSpinSpriteTemplate, ANIM_ATTACKER, 2, 0, 32, 480, 20, 16, -46, ANIM_ATTACKER
delay 2
createsprite gFireSpinSpriteTemplate, ANIM_ATTACKER, 2, 0, 33, 576, 20, 8, 42, ANIM_ATTACKER
@ -26510,7 +26510,7 @@ gBattleAnimMove_DragonClaw::
createvisualtask SoundTask_PlaySE1WithPanning, 5, SE_M_RAZOR_WIND, SOUND_PAN_TARGET
createsprite gClawSlashSpriteTemplate, ANIM_TARGET, 2, 10, -10, 1
createsprite gClawSlashSpriteTemplate, ANIM_TARGET, 2, 10, 10, 1
createsprite gShakeMonOrTerrainSpriteTemplate, ANIM_ATTACKER, 2, -4, 1, 10, 3, 1
createsprite gShakeMonOrPlatformSpriteTemplate, ANIM_ATTACKER, 2, -4, 1, 10, 3, 1
createsprite gFireSpinSpriteTemplate, ANIM_ATTACKER, 2, 0, 33, 464, 30, 15, -50, ANIM_ATTACKER
delay 2
createsprite gFireSpinSpriteTemplate, ANIM_ATTACKER, 2, 0, 28, 528, 30, 13, 50, ANIM_ATTACKER
@ -26971,7 +26971,7 @@ gBattleAnimMove_BlastBurn::
createsprite gFirePlumeSpriteTemplate, ANIM_ATTACKER, 70, 60, -30, 24, 0, 0, 0
createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, -4, 3, ANIM_TARGET, 0
createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 12, 0, 20, 1
createvisualtask AnimTask_ShakeBattleTerrain, 2, 2, 0, 10, 1
createvisualtask AnimTask_ShakeBattlePlatforms, 2, 2, 0, 10, 1
createsprite gFirePlumeSpriteTemplate, ANIM_ATTACKER, 66, 96, 0, 24, 0, 0, 0
createsprite gFirePlumeSpriteTemplate, ANIM_ATTACKER, 66, 60, 30, 24, 0, 0, 0
createsprite gFirePlumeSpriteTemplate, ANIM_ATTACKER, 2, 0, 48, 24, 0, 0, 0
@ -26985,32 +26985,32 @@ gBattleAnimMove_BlastBurn::
gBattleAnimMove_RockTomb::
loadspritegfx ANIM_TAG_X_SIGN
loadspritegfx ANIM_TAG_ROCKS
createvisualtask AnimTask_ShakeBattleTerrain, 2, 2, 0, 10, 1
createvisualtask AnimTask_ShakeBattlePlatforms, 2, 2, 0, 10, 1
waitforvisualfinish
createsprite gRockTombRockSpriteTemplate, ANIM_TARGET, 2, 20, 12, 64, 114, 0
delay 8
createvisualtask AnimTask_ShakeBattleTerrain, 2, 0, 2, 3, 1
createvisualtask AnimTask_ShakeBattlePlatforms, 2, 0, 2, 3, 1
playsewithpan SE_M_STRENGTH, SOUND_PAN_TARGET
delay 8
createsprite gRockTombRockSpriteTemplate, ANIM_TARGET, 2, -20, 12, 64, 98, 0
delay 8
createvisualtask AnimTask_ShakeBattleTerrain, 2, 0, 2, 3, 1
createvisualtask AnimTask_ShakeBattlePlatforms, 2, 0, 2, 3, 1
playsewithpan SE_M_STRENGTH, SOUND_PAN_TARGET
delay 8
createsprite gRockTombRockSpriteTemplate, ANIM_TARGET, 66, 3, 6, 64, 82, 0
delay 8
createvisualtask AnimTask_ShakeBattleTerrain, 2, 0, 2, 3, 1
createvisualtask AnimTask_ShakeBattlePlatforms, 2, 0, 2, 3, 1
playsewithpan SE_M_STRENGTH, SOUND_PAN_TARGET
delay 8
createsprite gRockTombRockSpriteTemplate, ANIM_TARGET, 2, -3, 13, 64, 66, 0
delay 8
createvisualtask AnimTask_ShakeBattleTerrain, 2, 0, 2, 3, 1
createvisualtask AnimTask_ShakeBattlePlatforms, 2, 0, 2, 3, 1
playsewithpan SE_M_STRENGTH, SOUND_PAN_TARGET
delay 24
playsewithpan SE_M_HYPER_BEAM, SOUND_PAN_TARGET
createsprite gRedXSpriteTemplate, ANIM_TARGET, 5, ANIM_TARGET, 50
createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 3, 0, 20, 1
createvisualtask AnimTask_ShakeBattleTerrain, 2, 2, 0, 10, 1
createvisualtask AnimTask_ShakeBattlePlatforms, 2, 2, 0, 10, 1
waitforvisualfinish
end
@ -27508,42 +27508,42 @@ gBattleAnimMove_SecretPower::
jumpargeq 0, STATUS_FIELD_GRASSY_TERRAIN, gBattleAnimMove_NeedleArm
jumpargeq 0, STATUS_FIELD_ELECTRIC_TERRAIN, gBattleAnimMove_ThunderShock
jumpargeq 0, STATUS_FIELD_PSYCHIC_TERRAIN, gBattleAnimMove_Confusion
createvisualtask AnimTask_GetBattleTerrain, 5
jumpargeq 0, BATTLE_TERRAIN_GRASS, gBattleAnimMove_NeedleArm
jumpargeq 0, BATTLE_TERRAIN_LONG_GRASS, gBattleAnimMove_MagicalLeaf
jumpargeq 0, BATTLE_TERRAIN_SAND, gBattleAnimMove_MudShot
jumpargeq 0, BATTLE_TERRAIN_UNDERWATER, gBattleAnimMove_Waterfall
jumpargeq 0, BATTLE_TERRAIN_WATER, gBattleAnimMove_Surf
jumpargeq 0, BATTLE_TERRAIN_POND, gBattleAnimMove_BubbleBeam
jumpargeq 0, BATTLE_TERRAIN_MOUNTAIN, gBattleAnimMove_RockThrow
jumpargeq 0, BATTLE_TERRAIN_CAVE, gBattleAnimMove_Bite
jumpargeq 0, BATTLE_TERRAIN_BUILDING, gBattleAnimMove_Strength
jumpargeq 0, BATTLE_TERRAIN_SOARING, gBattleAnimMove_Gust
jumpargeq 0, BATTLE_TERRAIN_SKY_PILLAR, gBattleAnimMove_Gust
jumpargeq 0, BATTLE_TERRAIN_BURIAL_GROUND, gBattleAnimMove_ShadowSneak
jumpargeq 0, BATTLE_TERRAIN_PUDDLE, gBattleAnimMove_MudShot
jumpargeq 0, BATTLE_TERRAIN_MARSH, gBattleAnimMove_MudShot
jumpargeq 0, BATTLE_TERRAIN_SWAMP, gBattleAnimMove_MudShot
jumpargeq 0, BATTLE_TERRAIN_ICE, gBattleAnimMove_IceShard
jumpargeq 0, BATTLE_TERRAIN_VOLCANO, gBattleAnimMove_Incinerate
jumpargeq 0, BATTLE_TERRAIN_DISTORTION_WORLD, gBattleAnimMove_Pound
jumpargeq 0, BATTLE_TERRAIN_SPACE, gBattleAnimMove_Swift
jumpargeq 0, BATTLE_TERRAIN_ULTRA_SPACE, gBattleAnimMove_Psywave
createvisualtask AnimTask_GetBattleEnvironment, 5
jumpargeq 0, BATTLE_ENVIRONMENT_GRASS, gBattleAnimMove_NeedleArm
jumpargeq 0, BATTLE_ENVIRONMENT_LONG_GRASS, gBattleAnimMove_MagicalLeaf
jumpargeq 0, BATTLE_ENVIRONMENT_SAND, gBattleAnimMove_MudShot
jumpargeq 0, BATTLE_ENVIRONMENT_UNDERWATER, gBattleAnimMove_Waterfall
jumpargeq 0, BATTLE_ENVIRONMENT_WATER, gBattleAnimMove_Surf
jumpargeq 0, BATTLE_ENVIRONMENT_POND, gBattleAnimMove_BubbleBeam
jumpargeq 0, BATTLE_ENVIRONMENT_MOUNTAIN, gBattleAnimMove_RockThrow
jumpargeq 0, BATTLE_ENVIRONMENT_CAVE, gBattleAnimMove_Bite
jumpargeq 0, BATTLE_ENVIRONMENT_BUILDING, gBattleAnimMove_Strength
jumpargeq 0, BATTLE_ENVIRONMENT_SOARING, gBattleAnimMove_Gust
jumpargeq 0, BATTLE_ENVIRONMENT_SKY_PILLAR, gBattleAnimMove_Gust
jumpargeq 0, BATTLE_ENVIRONMENT_BURIAL_GROUND, gBattleAnimMove_ShadowSneak
jumpargeq 0, BATTLE_ENVIRONMENT_PUDDLE, gBattleAnimMove_MudShot
jumpargeq 0, BATTLE_ENVIRONMENT_MARSH, gBattleAnimMove_MudShot
jumpargeq 0, BATTLE_ENVIRONMENT_SWAMP, gBattleAnimMove_MudShot
jumpargeq 0, BATTLE_ENVIRONMENT_ICE, gBattleAnimMove_IceShard
jumpargeq 0, BATTLE_ENVIRONMENT_VOLCANO, gBattleAnimMove_Incinerate
jumpargeq 0, BATTLE_ENVIRONMENT_DISTORTION_WORLD, gBattleAnimMove_Pound
jumpargeq 0, BATTLE_ENVIRONMENT_SPACE, gBattleAnimMove_Swift
jumpargeq 0, BATTLE_ENVIRONMENT_ULTRA_SPACE, gBattleAnimMove_Psywave
.if B_SECRET_POWER_ANIMATION >= GEN_7
jumpargeq 0, BATTLE_TERRAIN_SNOW, gBattleAnimMove_IceShard
jumpargeq 0, BATTLE_TERRAIN_BUILDING, gBattleAnimMove_SpitUp
jumpargeq 0, BATTLE_ENVIRONMENT_SNOW, gBattleAnimMove_IceShard
jumpargeq 0, BATTLE_ENVIRONMENT_BUILDING, gBattleAnimMove_SpitUp
goto gBattleAnimMove_SpitUp
.elseif B_SECRET_POWER_ANIMATION >= GEN_6
jumpargeq 0, BATTLE_TERRAIN_SNOW, gBattleAnimMove_Avalanche
jumpargeq 0, BATTLE_TERRAIN_BUILDING, gBattleAnimMove_BodySlam
jumpargeq 0, BATTLE_ENVIRONMENT_SNOW, gBattleAnimMove_Avalanche
jumpargeq 0, BATTLE_ENVIRONMENT_BUILDING, gBattleAnimMove_BodySlam
goto gBattleAnimMove_BodySlam
.elseif B_SECRET_POWER_ANIMATION >= GEN_4
jumpargeq 0, BATTLE_TERRAIN_SNOW, gBattleAnimMove_Avalanche
jumpargeq 0, BATTLE_TERRAIN_BUILDING, gBattleAnimMove_BodySlam
jumpargeq 0, BATTLE_ENVIRONMENT_SNOW, gBattleAnimMove_Avalanche
jumpargeq 0, BATTLE_ENVIRONMENT_BUILDING, gBattleAnimMove_BodySlam
goto gBattleAnimMove_MudSlap
.else
jumpargeq 0, BATTLE_TERRAIN_SNOW, gBattleAnimMove_Avalanche
jumpargeq 0, BATTLE_TERRAIN_BUILDING, gBattleAnimMove_Strength
jumpargeq 0, BATTLE_ENVIRONMENT_SNOW, gBattleAnimMove_Avalanche
jumpargeq 0, BATTLE_ENVIRONMENT_BUILDING, gBattleAnimMove_Strength
goto gBattleAnimMove_Slam
.endif

View File

@ -4946,7 +4946,7 @@ BattleScript_EffectNaturePower::
attackcanceler
attackstring
pause B_WAIT_TIME_SHORT
callterrainattack
callenvironmentattack
printstring STRINGID_NATUREPOWERTURNEDINTO
waitmessage B_WAIT_TIME_LONG
return
@ -5395,7 +5395,7 @@ BattleScript_EffectCamouflage::
attackcanceler
attackstring
ppreduce
settypetoterrain BattleScript_ButItFailed
settypetoenvironment BattleScript_ButItFailed
attackanimation
waitanimation
printstring STRINGID_PKMNCHANGEDTYPE

View File

@ -17,6 +17,7 @@
- [How to add new Trainer Slides](tutorials/how_to_new_trainer_slide.md)
- [Changelog](./CHANGELOG.md)
- [1.11.x]()
- [Version 1.11.2](changelogs/1.11.x/1.11.2.md)
- [Version 1.11.1](changelogs/1.11.x/1.11.1.md)
- [Version 1.11.0](changelogs/1.11.x/1.11.0.md)
- [1.10.x]()

View File

@ -0,0 +1,143 @@
```md
## How to update
- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`.
- Once you have your remote set up, run the command `git pull RHH expansion/1.11.2
`.
```
## 🧬 General 🧬
### Changed
* 1.11.1 Release by @hedara90 in [#6503](https://github.com/rh-hideout/pokeemerald-expansion/pull/6503)
* Add General Merge to label check by @hedara90 in [#6512](https://github.com/rh-hideout/pokeemerald-expansion/pull/6512)
* Added AI switch display to the battle debug by @hedara90 in [#6529](https://github.com/rh-hideout/pokeemerald-expansion/pull/6529)
* Consolidated "How to add Pokémon" tutorials by @AsparagusEduardo in [#6541](https://github.com/rh-hideout/pokeemerald-expansion/pull/6541)
* Fixed Behemoth Blade/Bash handler not using form change tables by @AsparagusEduardo in [#6558](https://github.com/rh-hideout/pokeemerald-expansion/pull/6558)
* Documentation by @hedara90 in [#6576](https://github.com/rh-hideout/pokeemerald-expansion/pull/6576)
* Corrected Dexnav config related comment by @LOuroboros in [#6610](https://github.com/rh-hideout/pokeemerald-expansion/pull/6610)
* Make generated files match the current formatting by @hedara90 in [#6636](https://github.com/rh-hideout/pokeemerald-expansion/pull/6636)
### Fixed
* Mark RTC/Flash save hint string as used by @aronson in [#6507](https://github.com/rh-hideout/pokeemerald-expansion/pull/6507)
* Fix move names in learnset helper by @malad1211 in [#6510](https://github.com/rh-hideout/pokeemerald-expansion/pull/6510)
* Fix no eligible mons when only the partner wins in multi battle by @Bivurnum in [#6626](https://github.com/rh-hideout/pokeemerald-expansion/pull/6626)
* Fixed broken palette load for shiny followers in the sprite visualizer by @hedara90 in [#6683](https://github.com/rh-hideout/pokeemerald-expansion/pull/6683)
* Fix `FORM_CHANGE_ITEM_HOLD` bug manifested during `givemon` by @AsparagusEduardo in [#6702](https://github.com/rh-hideout/pokeemerald-expansion/pull/6702)
## 🗺️ Overworld 🗺️
### Fixed
* Added call to ItemId_GetDescription by @pkmnsnfrn in [#6582](https://github.com/rh-hideout/pokeemerald-expansion/pull/6582)
## 🐉 Pokémon 🐉
### Changed
* Add clarification for EVO_SCRIPT_TRIGGER_DMG by @Bassoonian in [#6579](https://github.com/rh-hideout/pokeemerald-expansion/pull/6579)
### Fixed
* Capped Exp from Daycare to level cap by @hedara90 in [#6622](https://github.com/rh-hideout/pokeemerald-expansion/pull/6622)
## ⚔️ Battle General ⚔️
### Changed
* Fixes Thermal Exchange not curing existing burn by @PhallenTree in [#6545](https://github.com/rh-hideout/pokeemerald-expansion/pull/6545)
* Add clarification for underlying math in EV caps by @Bassoonian and @i0brendan0 in [#6580](https://github.com/rh-hideout/pokeemerald-expansion/pull/6580)
* Added missing `gMovesInfo` encapsulation by @AsparagusEduardo in [#6656](https://github.com/rh-hideout/pokeemerald-expansion/pull/6656)
* Remove misleading comment by @AlexOn1ine in [#6684](https://github.com/rh-hideout/pokeemerald-expansion/pull/6684)
### Fixed
* Fixes Tera Type not being carried over to during form change / evolution by @AlexOn1ine in [#6502](https://github.com/rh-hideout/pokeemerald-expansion/pull/6502)
* Fixes Hone Claws checking the wrong stats for its stat change animation and Stockpile drops being stopped by stat reduction prevention effects by @PhallenTree in [#6522](https://github.com/rh-hideout/pokeemerald-expansion/pull/6522)
* Fixes Red Card against Dynamaxed mons by @AlexOn1ine in [#6526](https://github.com/rh-hideout/pokeemerald-expansion/pull/6526)
* Fixes transformed mon being able to use tera on Terapagos by @AlexOn1ine in [#6528](https://github.com/rh-hideout/pokeemerald-expansion/pull/6528)
* Fixes Will-O-Wisp not being blocked by Thermal Exchange by @AlexOn1ine in [#6534](https://github.com/rh-hideout/pokeemerald-expansion/pull/6534)
* Add hold effects for PLA Origin Trio items by @Bassoonian in [#6578](https://github.com/rh-hideout/pokeemerald-expansion/pull/6578)
* Ability imposter by @wiz1989 and @AlexOn1ine in [#6552](https://github.com/rh-hideout/pokeemerald-expansion/pull/6552)
* Fixes Dynamax reversion animation when fainting by @PhallenTree in [#6597](https://github.com/rh-hideout/pokeemerald-expansion/pull/6597)
* Fix potential compile error caused by sTeraIndicatorDataPtrs by @AlexOn1ine in [#6599](https://github.com/rh-hideout/pokeemerald-expansion/pull/6599)
* Revert wrongly done Embody Aspect fix by @AlexOn1ine in [#6607](https://github.com/rh-hideout/pokeemerald-expansion/pull/6607)
* Fixes wrong battler's Illusion wearing off when the Attacker faints and fixes Illusion tests by @PhallenTree in [#6596](https://github.com/rh-hideout/pokeemerald-expansion/pull/6596)
* Fixes Gulp Missile freezing the game if when attacker fainted by @AlexOn1ine in [#6639](https://github.com/rh-hideout/pokeemerald-expansion/pull/6639)
* Fixes Big Root Leech Seed heal amount by @AlexOn1ine in [#6638](https://github.com/rh-hideout/pokeemerald-expansion/pull/6638)
* Fix Mirror Armor and Obstruct interaction by @AlexOn1ine in [#6630](https://github.com/rh-hideout/pokeemerald-expansion/pull/6630)
* Fixes some restore issues by @AlexOn1ine in [#6629](https://github.com/rh-hideout/pokeemerald-expansion/pull/6629)
* Fixes Ally Switch cancelling partner's moves targeting that side of the field by @PhallenTree and @hedara90 made the Ally Switch test in #6646 in [#6647](https://github.com/rh-hideout/pokeemerald-expansion/pull/6647)
* Fixes commander activation on a fainted mon by @AlexOn1ine in [#6632](https://github.com/rh-hideout/pokeemerald-expansion/pull/6632)
* Fix captivate-oblivious interaction and related test by @cawtds in [#6653](https://github.com/rh-hideout/pokeemerald-expansion/pull/6653)
* Fix gBattlerTarget OOB for Gravity and Perish Song by @AlexOn1ine in [#6662](https://github.com/rh-hideout/pokeemerald-expansion/pull/6662)
* Fixes Intimidate / Eject Pack interaction by @AlexOn1ine in [#6645](https://github.com/rh-hideout/pokeemerald-expansion/pull/6645)
* Fixes Neutralizing Gas activating again after switch-in by @PhallenTree in [#6667](https://github.com/rh-hideout/pokeemerald-expansion/pull/6667)
* Fixes Bug Bite eaten berry not ignoring Unnerve by @AlexOn1ine in [#6666](https://github.com/rh-hideout/pokeemerald-expansion/pull/6666)
* Fixes Mirror Armor stat drops not being stopped by Substitute by @PhallenTree in [#6675](https://github.com/rh-hideout/pokeemerald-expansion/pull/6675)
* Fixes Magician Life Orb interaction by @AlexOn1ine in [#6676](https://github.com/rh-hideout/pokeemerald-expansion/pull/6676)
* Fixes Unburden doubling speed when affected by Neutralizing Gas by @PhallenTree in [#6691](https://github.com/rh-hideout/pokeemerald-expansion/pull/6691)
* Fix various Toxic Spikes interactions by @hedara90 in [#6690](https://github.com/rh-hideout/pokeemerald-expansion/pull/6690)
* Fixes Z and Max moves dmg reduction against side protection by @AlexOn1ine in [#6697](https://github.com/rh-hideout/pokeemerald-expansion/pull/6697)
* Fixes Stomping Tantrum not doubling power if asleep or frozen by @AlexOn1ine in [#6719](https://github.com/rh-hideout/pokeemerald-expansion/pull/6719)
## 🤹 Moves 🤹
### Fixed
* Gimmick Indicator refactor by @hedara90 in [#6553](https://github.com/rh-hideout/pokeemerald-expansion/pull/6553)
- This frees up a lot of VRAM in battles.
* Animation fixes from lucky adapted to expansion by @hedara90 and @/luckytyphlosion in [#6452](https://github.com/rh-hideout/pokeemerald-expansion/pull/6452)
* Fix Magma Storm getting stuck by @hedara90 in [#6605](https://github.com/rh-hideout/pokeemerald-expansion/pull/6605)
* Fix VRAM load for Black Hole Eclipse by @hedara90 in [#6635](https://github.com/rh-hideout/pokeemerald-expansion/pull/6635)
* Fixes some moves trying to load too much VRAM by @hedara90 in [#6633](https://github.com/rh-hideout/pokeemerald-expansion/pull/6633)
## 🧶 Items 🧶
### Fixed
* Fix using items to heal partner in battle by @hedara90 in [#6517](https://github.com/rh-hideout/pokeemerald-expansion/pull/6517)
## 🤖 Battle AI 🤖
### Changed
* Add AI thinking cycle count display to frame count by @aronson in [#6509](https://github.com/rh-hideout/pokeemerald-expansion/pull/6509)
* Remove redundant AI defines by @Bassoonian in [#6590](https://github.com/rh-hideout/pokeemerald-expansion/pull/6590)
## 🧹 Other Cleanup 🧹
* Added call to ItemId_GetDescription by @pkmnsnfrn in [#6582](https://github.com/rh-hideout/pokeemerald-expansion/pull/6582)
* Remove redundant AI defines by @Bassoonian in [#6590](https://github.com/rh-hideout/pokeemerald-expansion/pull/6590)
* Corrected Dexnav config related comment by @LOuroboros in [#6610](https://github.com/rh-hideout/pokeemerald-expansion/pull/6610)
* Added missing `gMovesInfo` encapsulation by @AsparagusEduardo in [#6656](https://github.com/rh-hideout/pokeemerald-expansion/pull/6656)
* Remove HitmarkerSwapAttackerTarget by @AlexOn1ine in [#6627](https://github.com/rh-hideout/pokeemerald-expansion/pull/6627)
* Remove misleading comment by @AlexOn1ine in [#6684](https://github.com/rh-hideout/pokeemerald-expansion/pull/6684)
## 🧪 Test Runner 🧪
### Changed
* Support make check on macOS by @aronson in [#6513](https://github.com/rh-hideout/pokeemerald-expansion/pull/6513)
- The new test runner binary will not support macOS versions older than 10.7 or 11 (for Intel and Apple Silicon respectively).
- macOS users running `make check` may need to confirm with an OS dialog they're willing to open `mgba-rom-test-mac` when run for the first time.
- macOS users running `make check` must have `stdbuf` installed through `brew`'s `coreutils` package.
* Thermal exchange tests by @hedara90 in [#6536](https://github.com/rh-hideout/pokeemerald-expansion/pull/6536)
* Air Balloon AI tests by @Pawkkie in [#6604](https://github.com/rh-hideout/pokeemerald-expansion/pull/6604)
* Big Root tests by @Bassoonian in [#6601](https://github.com/rh-hideout/pokeemerald-expansion/pull/6601)
* Test for Freeze vs Scald thaw by @AlexOn1ine in [#6658](https://github.com/rh-hideout/pokeemerald-expansion/pull/6658)
* Adds a whole bunch of new tests by @Bassoonian in [#6685](https://github.com/rh-hideout/pokeemerald-expansion/pull/6685)
### Fixed
* Fixed Color Change test referring to the wrong mon by @hedara90 in [#6644](https://github.com/rh-hideout/pokeemerald-expansion/pull/6644)
* Fixed LGPE move test fail with `B_UPDATED_MOVE_DATA` to `GEN_7` by @AsparagusEduardo in [#6657](https://github.com/rh-hideout/pokeemerald-expansion/pull/6657)
* Use correct define for moves in test runner by @AsparagusEduardo in [#6711](https://github.com/rh-hideout/pokeemerald-expansion/pull/6711)
## 📚 Documentation 📚
* Consolidated "How to add Pokémon" tutorials by @AsparagusEduardo in [#6541](https://github.com/rh-hideout/pokeemerald-expansion/pull/6541)
* Documentation by @hedara90 in [#6576](https://github.com/rh-hideout/pokeemerald-expansion/pull/6576)
* Add clarification for underlying math in EV caps by @Bassoonian and @i0brendan0 in [#6580](https://github.com/rh-hideout/pokeemerald-expansion/pull/6580)
* Add clarification for EVO_SCRIPT_TRIGGER_DMG by @Bassoonian in [#6579](https://github.com/rh-hideout/pokeemerald-expansion/pull/6579)
## 📦 Branch Synchronisation 📦
### pret
* 11 of April in [#6575](https://github.com/rh-hideout/pokeemerald-expansion/pull/6575)
* Align gMPlayTrack_BGM by @DizzyEggg in [pret#2115](https://github.com/pret/pokeemerald/pull/2115)
* GENDER_COUNT in sPlayer/RivalAvatarGfxIds by @AsparagusEduardo in [pret#2117](https://github.com/pret/pokeemerald/pull/2117)
* Fixed init call when using AGBPrint as log handler by @pokemonmasteraaron in [pret#2119](https://github.com/pret/pokeemerald/pull/2119)
* Make linkDirection more robust to member reordering by @cawtds in [pret#2118](https://github.com/pret/pokeemerald/pull/2118)
* 29th of April 2025 in [#6722](https://github.com/rh-hideout/pokeemerald-expansion/pull/6722)
* Rename battle terrain to environment by @Bassoonian in [pret#2014](https://github.com/pret/pokeemerald/pull/2014)
* Fixes for Mirage Tower graphics by @GriffinRichards in [pret#2120](https://github.com/pret/pokeemerald/pull/2120)
* Missing constant in Birch speech dialogue by @estellarc in [pret#2123](https://github.com/pret/pokeemerald/pull/2123)
## New Contributors
* @malad1211 made their first contribution in [#6510](https://github.com/rh-hideout/pokeemerald-expansion/pull/6510)
**Full Changelog**: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.11.1...expansion/1.11.2
<!--Last PR: 6719-->
<!--Used to keep track of the last PR merged in case new ones come in before the changelog is done.-->

View File

Before

Width:  |  Height:  |  Size: 308 B

After

Width:  |  Height:  |  Size: 308 B

View File

Before

Width:  |  Height:  |  Size: 709 B

After

Width:  |  Height:  |  Size: 709 B

View File

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

Before

Width:  |  Height:  |  Size: 864 B

After

Width:  |  Height:  |  Size: 864 B

View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

Before

Width:  |  Height:  |  Size: 900 B

After

Width:  |  Height:  |  Size: 900 B

View File

Before

Width:  |  Height:  |  Size: 592 B

After

Width:  |  Height:  |  Size: 592 B

View File

Before

Width:  |  Height:  |  Size: 732 B

After

Width:  |  Height:  |  Size: 732 B

View File

Before

Width:  |  Height:  |  Size: 760 B

After

Width:  |  Height:  |  Size: 760 B

View File

Before

Width:  |  Height:  |  Size: 725 B

After

Width:  |  Height:  |  Size: 725 B

View File

Before

Width:  |  Height:  |  Size: 644 B

After

Width:  |  Height:  |  Size: 644 B

View File

Before

Width:  |  Height:  |  Size: 805 B

After

Width:  |  Height:  |  Size: 805 B

View File

Before

Width:  |  Height:  |  Size: 961 B

After

Width:  |  Height:  |  Size: 961 B

View File

Before

Width:  |  Height:  |  Size: 820 B

After

Width:  |  Height:  |  Size: 820 B

View File

Before

Width:  |  Height:  |  Size: 712 B

After

Width:  |  Height:  |  Size: 712 B

View File

Before

Width:  |  Height:  |  Size: 793 B

After

Width:  |  Height:  |  Size: 793 B

View File

Before

Width:  |  Height:  |  Size: 739 B

After

Width:  |  Height:  |  Size: 739 B

View File

Before

Width:  |  Height:  |  Size: 506 B

After

Width:  |  Height:  |  Size: 506 B

View File

Before

Width:  |  Height:  |  Size: 773 B

After

Width:  |  Height:  |  Size: 773 B

View File

Before

Width:  |  Height:  |  Size: 887 B

After

Width:  |  Height:  |  Size: 887 B

View File

Before

Width:  |  Height:  |  Size: 766 B

After

Width:  |  Height:  |  Size: 766 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 904 B

After

Width:  |  Height:  |  Size: 935 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 790 B

View File

@ -295,6 +295,9 @@ graphics/pokenav/region_map/map.8bpp: %.8bpp: %.png
$(MISCGFXDIR)/japanese_hof.4bpp: %.4bpp: %.png
$(GFX) $< $@ -num_tiles 29 -Wnum_tiles
$(MISCGFXDIR)/mirage_tower.4bpp: %.4bpp: %.png
$(GFX) $< $@ -num_tiles 73 -Wnum_tiles
$(BATINTGFXDIR)/textbox.gbapal: $(BATINTGFXDIR)/textbox_0.gbapal \
$(BATINTGFXDIR)/textbox_1.gbapal
@cat $^ >$@

View File

@ -148,27 +148,19 @@ struct ProtectStruct
u32 helpingHand:1;
u32 bounceMove:1;
u32 stealMove:1;
u32 prlzImmobility:1;
u32 nonVolatileStatusImmobility:1;
u32 confusionSelfDmg:1;
u32 targetAffected:1;
u32 chargingTurn:1;
u32 fleeType:2; // 0: Normal, 1: FLEE_ITEM, 2: FLEE_ABILITY
u32 usedImprisonedMove:1;
u32 loveImmobility:1;
u32 usedDisabledMove:1;
u32 usedTauntedMove:1;
u32 flag2Unknown:1; // Only set to 0 once. Checked in 'WasUnableToUseMove' function.
u32 flinchImmobility:1;
u32 unableToUseMove:1; // Not to be confused with HITMARKER_UNABLE_TO_USE_MOVE (It is questionable though if there is a difference. Needs further research)
u32 notFirstStrike:1;
u32 palaceUnableToUseMove:1;
u32 usedHealBlockedMove:1;
u32 usedGravityPreventedMove:1;
u32 powderSelfDmg:1;
u32 usedThroatChopPreventedMove:1;
u32 statRaised:1;
u32 usedCustapBerry:1; // also quick claw
u32 touchedProtectLike:1;
u32 unused:1;
u32 unused:9;
// End of 32-bit bitfield
u16 disableEjectPack:1;
u16 statFell:1;
@ -906,10 +898,6 @@ static inline bool32 IsBattleMoveRecoil(u32 move)
}
#define IS_BATTLER_PROTECTED(battlerId)(gProtectStructs[battlerId].protected \
|| gSideStatuses[GetBattlerSide(battlerId)] & SIDE_STATUS_WIDE_GUARD \
|| gSideStatuses[GetBattlerSide(battlerId)] & SIDE_STATUS_QUICK_GUARD \
|| gSideStatuses[GetBattlerSide(battlerId)] & SIDE_STATUS_CRAFTY_SHIELD \
|| gSideStatuses[GetBattlerSide(battlerId)] & SIDE_STATUS_MAT_BLOCK \
|| gProtectStructs[battlerId].spikyShielded \
|| gProtectStructs[battlerId].kingsShielded \
|| gProtectStructs[battlerId].banefulBunkered \
@ -1091,7 +1079,7 @@ extern u8 gBattleTextBuff1[TEXT_BUFF_ARRAY_COUNT];
extern u8 gBattleTextBuff2[TEXT_BUFF_ARRAY_COUNT];
extern u8 gBattleTextBuff3[TEXT_BUFF_ARRAY_COUNT + 13]; //to handle stupidly large z move names
extern u32 gBattleTypeFlags;
extern u8 gBattleTerrain;
extern u8 gBattleEnvironment;
extern u8 *gBattleAnimBgTileBuffer;
extern u8 *gBattleAnimBgTilemapBuffer;
extern u32 gBattleControllerExecFlags;
@ -1294,5 +1282,12 @@ static inline bool32 IsBattlerInvalidForSpreadMove(u32 battlerAtk, u32 battlerDe
|| (battlerDef == BATTLE_PARTNER(battlerAtk) && (moveTarget == MOVE_TARGET_BOTH));
}
#endif // GUARD_BATTLE_H
static inline bool32 IsBattlerSideProtected(u32 battler)
{
return gSideStatuses[GetBattlerSide(battler)] & (SIDE_STATUS_WIDE_GUARD
| SIDE_STATUS_QUICK_GUARD
| SIDE_STATUS_CRAFTY_SHIELD
| SIDE_STATUS_MAT_BLOCK);
}
#endif // GUARD_BATTLE_H

View File

@ -82,7 +82,7 @@ void LoadMoveBg(u16 bgId);
// battle_intro.c
void SetAnimBgAttribute(u8 bgId, u8 attributeId, u8 value);
void DrawBattlerOnBg(int bgId, u8 x, u8 y, u8 battlerPosition, u8 paletteId, u8 *tiles, u16 *tilemap, u16 tilesOffset);
void HandleIntroSlide(u8 terrainId);
void HandleIntroSlide(u8 environmentId);
int GetAnimBgAttribute(u8 bgId, u8 attributeId);
// battle_anim_mons.c

View File

@ -60,7 +60,7 @@ void BattleSetup_StartLatiBattle(void);
void BattleSetup_StartLegendaryBattle(void);
void StartGroudonKyogreBattle(void);
void StartRegiBattle(void);
u8 BattleSetup_GetTerrainId(void);
u8 BattleSetup_GetEnvironmentId(void);
u8 GetWildBattleTransition(void);
u8 GetTrainerBattleTransition(void);
u8 GetSpecialBattleTransition(s32 id);

View File

@ -311,6 +311,8 @@ bool32 IsMoveEffectRemoveSpeciesType(u32 move, u32 moveEffect, u32 argument);
bool32 MoveHasChargeTurnAdditionalEffect(u32 move);
bool32 CanTargetPartner(u32 battlerAtk, u32 battlerDef);
bool32 TargetFullyImmuneToCurrMove(u32 battlerAtk, u32 battlerDef);
bool32 MoodyCantRaiseStat(u32 stat);
bool32 MoodyCantLowerStat(u32 stat);
bool32 CanBeSlept(u32 battler, u32 ability, enum SleepClauseBlock isBlockedBySleepClause);
bool32 CanBePoisoned(u32 battlerAtk, u32 battlerDef, u32 defAbility);

View File

@ -470,32 +470,32 @@ enum MoveEffects
#define MOVE_EFFECT_CERTAIN 0x4000
#define MOVE_EFFECT_CONTINUE 0x8000
// Battle terrain defines for gBattleTerrain.
#define BATTLE_TERRAIN_GRASS 0
#define BATTLE_TERRAIN_LONG_GRASS 1
#define BATTLE_TERRAIN_SAND 2
#define BATTLE_TERRAIN_UNDERWATER 3
#define BATTLE_TERRAIN_WATER 4
#define BATTLE_TERRAIN_POND 5
#define BATTLE_TERRAIN_MOUNTAIN 6
#define BATTLE_TERRAIN_CAVE 7
#define BATTLE_TERRAIN_BUILDING 8
#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
// Battle environment defines for gBattleEnvironment.
#define BATTLE_ENVIRONMENT_GRASS 0
#define BATTLE_ENVIRONMENT_LONG_GRASS 1
#define BATTLE_ENVIRONMENT_SAND 2
#define BATTLE_ENVIRONMENT_UNDERWATER 3
#define BATTLE_ENVIRONMENT_WATER 4
#define BATTLE_ENVIRONMENT_POND 5
#define BATTLE_ENVIRONMENT_MOUNTAIN 6
#define BATTLE_ENVIRONMENT_CAVE 7
#define BATTLE_ENVIRONMENT_BUILDING 8
#define BATTLE_ENVIRONMENT_PLAIN 9
// New battle environments are used for Secret Power but not fully implemented.
#define BATTLE_ENVIRONMENT_SOARING 10
#define BATTLE_ENVIRONMENT_SKY_PILLAR 11
#define BATTLE_ENVIRONMENT_BURIAL_GROUND 12
#define BATTLE_ENVIRONMENT_PUDDLE 13
#define BATTLE_ENVIRONMENT_MARSH 14
#define BATTLE_ENVIRONMENT_SWAMP 15
#define BATTLE_ENVIRONMENT_SNOW 16
#define BATTLE_ENVIRONMENT_ICE 17
#define BATTLE_ENVIRONMENT_VOLCANO 18
#define BATTLE_ENVIRONMENT_DISTORTION_WORLD 19
#define BATTLE_ENVIRONMENT_SPACE 20
#define BATTLE_ENVIRONMENT_ULTRA_SPACE 21
#define BATTLE_TERRAIN_COUNT 22
#define BATTLE_ENVIRONMENT_COUNT 22
#define B_WAIT_TIME_LONG (B_WAIT_TIME_MULTIPLIER * 4)
#define B_WAIT_TIME_MED (B_WAIT_TIME_MULTIPLIER * 3)

View File

@ -1,10 +1,10 @@
#ifndef GUARD_CONSTANTS_EXPANSION_H
#define GUARD_CONSTANTS_EXPANSION_H
// Last version: 1.11.1
// Last version: 1.11.2
#define EXPANSION_VERSION_MAJOR 1
#define EXPANSION_VERSION_MINOR 11
#define EXPANSION_VERSION_PATCH 2
#define EXPANSION_VERSION_PATCH 3
// FALSE if this this version of Expansion is not a tagged commit, i.e.
// it contains unreleased changes.

View File

@ -12,6 +12,7 @@ enum GenConfigTag
GEN_CONFIG_GALE_WINGS,
GEN_CONFIG_HEAL_BELL_SOUNDPROOF,
GEN_CONFIG_TELEPORT_BEHAVIOR,
GEN_CONFIG_MOODY_STATS,
GEN_CONFIG_COUNT
};

View File

@ -15,6 +15,7 @@ static const u8 sGenerationalChanges[GEN_CONFIG_COUNT] =
[GEN_CONFIG_GALE_WINGS] = B_GALE_WINGS,
[GEN_CONFIG_HEAL_BELL_SOUNDPROOF] = B_HEAL_BELL_SOUNDPROOF,
[GEN_CONFIG_TELEPORT_BEHAVIOR] = B_TELEPORT_BEHAVIOR,
[GEN_CONFIG_MOODY_STATS] = B_MOODY_ACC_EVASION,
};
#if TESTING

View File

@ -214,72 +214,72 @@ extern const u32 gBattleVSFrame_Tilemap[];
extern const u32 gMultiBattleIntroBg_Opponent_Tilemap[];
extern const u32 gMultiBattleIntroBg_Player_Tilemap[];
// battle terrains
extern const u32 gBattleTerrainTiles_TallGrass[];
extern const u32 gBattleTerrainTilemap_TallGrass[];
extern const u32 gBattleTerrainAnimTiles_TallGrass[];
extern const u32 gBattleTerrainAnimTilemap_TallGrass[];
extern const u32 gBattleTerrainPalette_TallGrass[];
extern const u32 gBattleTerrainTiles_LongGrass[];
extern const u32 gBattleTerrainTilemap_LongGrass[];
extern const u32 gBattleTerrainAnimTiles_LongGrass[];
extern const u32 gBattleTerrainAnimTilemap_LongGrass[];
extern const u32 gBattleTerrainPalette_LongGrass[];
extern const u32 gBattleTerrainTiles_Sand[];
extern const u32 gBattleTerrainTilemap_Sand[];
extern const u32 gBattleTerrainAnimTiles_Sand[];
extern const u32 gBattleTerrainAnimTilemap_Sand[];
extern const u32 gBattleTerrainPalette_Sand[];
extern const u32 gBattleTerrainTiles_Underwater[];
extern const u32 gBattleTerrainTilemap_Underwater[];
extern const u32 gBattleTerrainAnimTiles_Underwater[];
extern const u32 gBattleTerrainAnimTilemap_Underwater[];
extern const u32 gBattleTerrainPalette_Underwater[];
extern const u32 gBattleTerrainTiles_Water[];
extern const u32 gBattleTerrainTilemap_Water[];
extern const u32 gBattleTerrainAnimTiles_Water[];
extern const u32 gBattleTerrainAnimTilemap_Water[];
extern const u32 gBattleTerrainPalette_Water[];
extern const u32 gBattleTerrainTiles_PondWater[];
extern const u32 gBattleTerrainTilemap_PondWater[];
extern const u32 gBattleTerrainAnimTiles_PondWater[];
extern const u32 gBattleTerrainAnimTilemap_PondWater[];
extern const u32 gBattleTerrainPalette_PondWater[];
extern const u32 gBattleTerrainTiles_Rock[];
extern const u32 gBattleTerrainTilemap_Rock[];
extern const u32 gBattleTerrainAnimTiles_Rock[];
extern const u32 gBattleTerrainAnimTilemap_Rock[];
extern const u32 gBattleTerrainPalette_Rock[];
extern const u32 gBattleTerrainTiles_Cave[];
extern const u32 gBattleTerrainTilemap_Cave[];
extern const u32 gBattleTerrainAnimTiles_Cave[];
extern const u32 gBattleTerrainAnimTilemap_Cave[];
extern const u32 gBattleTerrainPalette_Cave[];
extern const u32 gBattleTerrainTiles_Building[];
extern const u32 gBattleTerrainTilemap_Building[];
extern const u32 gBattleTerrainAnimTiles_Building[];
extern const u32 gBattleTerrainAnimTilemap_Building[];
extern const u32 gBattleTerrainPalette_Building[];
extern const u32 gBattleTerrainPalette_Plain[];
extern const u32 gBattleTerrainPalette_Frontier[];
extern const u32 gBattleTerrainTiles_Stadium[];
extern const u32 gBattleTerrainTilemap_Stadium[];
extern const u32 gBattleTerrainTiles_Rayquaza[];
extern const u32 gBattleTerrainTilemap_Rayquaza[];
extern const u32 gBattleTerrainAnimTiles_Rayquaza[];
extern const u32 gBattleTerrainAnimTilemap_Rayquaza[];
extern const u32 gBattleTerrainPalette_Rayquaza[];
extern const u32 gBattleTerrainPalette_Kyogre[];
extern const u32 gBattleTerrainPalette_Groudon[];
extern const u32 gBattleTerrainPalette_BuildingGym[];
extern const u32 gBattleTerrainPalette_BuildingLeader[];
extern const u32 gBattleTerrainPalette_StadiumAqua[];
extern const u32 gBattleTerrainPalette_StadiumMagma[];
extern const u32 gBattleTerrainPalette_StadiumSidney[];
extern const u32 gBattleTerrainPalette_StadiumPhoebe[];
extern const u32 gBattleTerrainPalette_StadiumGlacia[];
extern const u32 gBattleTerrainPalette_StadiumDrake[];
extern const u32 gBattleTerrainPalette_StadiumWallace[];
// battle environments
extern const u32 gBattleEnvironmentTiles_TallGrass[];
extern const u32 gBattleEnvironmentTilemap_TallGrass[];
extern const u32 gBattleEnvironmentAnimTiles_TallGrass[];
extern const u32 gBattleEnvironmentAnimTilemap_TallGrass[];
extern const u32 gBattleEnvironmentPalette_TallGrass[];
extern const u32 gBattleEnvironmentTiles_LongGrass[];
extern const u32 gBattleEnvironmentTilemap_LongGrass[];
extern const u32 gBattleEnvironmentAnimTiles_LongGrass[];
extern const u32 gBattleEnvironmentAnimTilemap_LongGrass[];
extern const u32 gBattleEnvironmentPalette_LongGrass[];
extern const u32 gBattleEnvironmentTiles_Sand[];
extern const u32 gBattleEnvironmentTilemap_Sand[];
extern const u32 gBattleEnvironmentAnimTiles_Sand[];
extern const u32 gBattleEnvironmentAnimTilemap_Sand[];
extern const u32 gBattleEnvironmentPalette_Sand[];
extern const u32 gBattleEnvironmentTiles_Underwater[];
extern const u32 gBattleEnvironmentTilemap_Underwater[];
extern const u32 gBattleEnvironmentAnimTiles_Underwater[];
extern const u32 gBattleEnvironmentAnimTilemap_Underwater[];
extern const u32 gBattleEnvironmentPalette_Underwater[];
extern const u32 gBattleEnvironmentTiles_Water[];
extern const u32 gBattleEnvironmentTilemap_Water[];
extern const u32 gBattleEnvironmentAnimTiles_Water[];
extern const u32 gBattleEnvironmentAnimTilemap_Water[];
extern const u32 gBattleEnvironmentPalette_Water[];
extern const u32 gBattleEnvironmentTiles_PondWater[];
extern const u32 gBattleEnvironmentTilemap_PondWater[];
extern const u32 gBattleEnvironmentAnimTiles_PondWater[];
extern const u32 gBattleEnvironmentAnimTilemap_PondWater[];
extern const u32 gBattleEnvironmentPalette_PondWater[];
extern const u32 gBattleEnvironmentTiles_Rock[];
extern const u32 gBattleEnvironmentTilemap_Rock[];
extern const u32 gBattleEnvironmentAnimTiles_Rock[];
extern const u32 gBattleEnvironmentAnimTilemap_Rock[];
extern const u32 gBattleEnvironmentPalette_Rock[];
extern const u32 gBattleEnvironmentTiles_Cave[];
extern const u32 gBattleEnvironmentTilemap_Cave[];
extern const u32 gBattleEnvironmentAnimTiles_Cave[];
extern const u32 gBattleEnvironmentAnimTilemap_Cave[];
extern const u32 gBattleEnvironmentPalette_Cave[];
extern const u32 gBattleEnvironmentTiles_Building[];
extern const u32 gBattleEnvironmentTilemap_Building[];
extern const u32 gBattleEnvironmentAnimTiles_Building[];
extern const u32 gBattleEnvironmentAnimTilemap_Building[];
extern const u32 gBattleEnvironmentPalette_Building[];
extern const u32 gBattleEnvironmentPalette_Plain[];
extern const u32 gBattleEnvironmentPalette_Frontier[];
extern const u32 gBattleEnvironmentTiles_Stadium[];
extern const u32 gBattleEnvironmentTilemap_Stadium[];
extern const u32 gBattleEnvironmentTiles_Rayquaza[];
extern const u32 gBattleEnvironmentTilemap_Rayquaza[];
extern const u32 gBattleEnvironmentAnimTiles_Rayquaza[];
extern const u32 gBattleEnvironmentAnimTilemap_Rayquaza[];
extern const u32 gBattleEnvironmentPalette_Rayquaza[];
extern const u32 gBattleEnvironmentPalette_Kyogre[];
extern const u32 gBattleEnvironmentPalette_Groudon[];
extern const u32 gBattleEnvironmentPalette_BuildingGym[];
extern const u32 gBattleEnvironmentPalette_BuildingLeader[];
extern const u32 gBattleEnvironmentPalette_StadiumAqua[];
extern const u32 gBattleEnvironmentPalette_StadiumMagma[];
extern const u32 gBattleEnvironmentPalette_StadiumSidney[];
extern const u32 gBattleEnvironmentPalette_StadiumPhoebe[];
extern const u32 gBattleEnvironmentPalette_StadiumGlacia[];
extern const u32 gBattleEnvironmentPalette_StadiumDrake[];
extern const u32 gBattleEnvironmentPalette_StadiumWallace[];
// Pokédex
extern const u32 gPokedexInterface_Gfx[];

View File

@ -146,11 +146,14 @@ enum RandomTag
RNG_INFATUATION,
RNG_LOADED_DICE,
RNG_METRONOME,
RNG_MOODY_INCREASE,
RNG_MOODY_DECREASE,
RNG_PARALYSIS,
RNG_PICKUP,
RNG_POISON_POINT,
RNG_POISON_TOUCH,
RNG_RAMPAGE_TURNS,
RNG_RANDOM_STAT_UP,
RNG_SECONDARY_EFFECT,
RNG_SECONDARY_EFFECT_2,
RNG_SECONDARY_EFFECT_3,

View File

@ -114,12 +114,12 @@
* not paralyzed without specifying the exact outputs which led to that.
*
* As a final example, to test that Meditate works you might:
* 1. Put a Wobbuffet that knows Meditate and Tackle in your party.
* 1. Put a Wobbuffet that knows Meditate and Scratch in your party.
* 2. Battle a wild Wobbuffet.
* 3. Use Tackle and note the amount the HP bar reduced.
* 3. Use Scratch and note the amount the HP bar reduced.
* 4. Battle a wild Wobbuffet.
* 5. Use Meditate and that the stat change animation and message play.
* 6. Use Tackle and check that the HP bar reduced by more than in 3.
* 6. Use Scratch and check that the HP bar reduced by more than in 3.
*
* This can be translated to an automated test as follows:
*
@ -129,19 +129,19 @@
* PARAMETRIZE { raiseAttack = FALSE; }
* PARAMETRIZE { raiseAttack = TRUE; }
* GIVEN {
* ASSUME(GetMoveCategory(MOVE_TACKLE) == DAMAGE_CATEGORY_PHYSICAL);
* ASSUME(GetMoveCategory(MOVE_SCRATCH) == DAMAGE_CATEGORY_PHYSICAL);
* PLAYER(SPECIES_WOBBUFFET);
* OPPONENT(SPECIES_WOBBUFFET);
* } WHEN {
* if (raiseAttack) TURN { MOVE(player, MOVE_MEDITATE); } // 5.
* TURN { MOVE(player, MOVE_TACKLE); } // 3 & 6.
* TURN { MOVE(player, MOVE_SCRATCH); } // 3 & 6.
* } SCENE {
* if (raiseAttack) {
* ANIMATION(ANIM_TYPE_MOVE, MOVE_MEDITATE, player);
* ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); // 5.
* MESSAGE("Wobbuffet's attack rose!"); // 5.
* }
* ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player);
* ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, player);
* HP_BAR(opponent, captureDamage: &results[i].damage); // 3 & 6.
* } FINALLY {
* EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage); // 6.
@ -344,7 +344,7 @@
* battles to choose the target (when necessary), and allowed: FALSE is
* used to reject an illegal move e.g. a Disabled one. WITH_RNG allows
* the move to specify an explicit outcome for an RNG tag.
* MOVE(playerLeft, MOVE_TACKLE, target: opponentRight);
* MOVE(playerLeft, MOVE_SCRATCH, target: opponentRight);
* If the battler does not have an explicit Moves specified the moveset
* will be populated based on the MOVEs it uses.
*
@ -372,7 +372,7 @@
* ID must be specified, and party index and move slot if applicable, e.g:
* USE_ITEM(player, ITEM_X_ATTACK);
* USE_ITEM(player, ITEM_POTION, partyIndex: 0);
* USE_ITEM(player, ITEM_LEPPA_BERRY, partyIndex: 0, move: MOVE_TACKLE);
* USE_ITEM(player, ITEM_LEPPA_BERRY, partyIndex: 0, move: MOVE_SCRATCH);
*
* SCENE
* Contains an abridged description of the UI during the THEN. The order
@ -389,7 +389,7 @@
* ANIMATION(type, animId, [battler], [target:])
* Causes the test to fail if the animation does not play. A common use
* of this command is to check if a move was successful, e.g.:
* ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player);
* ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, player);
* target can only be specified for ANIM_TYPE_MOVE.
*
* EXPERIENCE_BAR(battler, [exp: | captureGainedExp:])

View File

@ -18,7 +18,7 @@ static void AnimTask_DigEndBounceMovementSetInvisible(u8);
static void AnimTask_DigSetVisibleUnderground(u8);
static void AnimTask_DigRiseUpFromHole(u8);
static void SetDigScanlineEffect(u8, s16, s16);
static void AnimTask_ShakeTerrain(u8);
static void AnimTask_ShakePlatforms(u8);
static void AnimTask_ShakeBattlers(u8);
static void SetBattlersXOffsetForShake(struct Task *);
static void WaitForFissureCompletion(u8);
@ -581,12 +581,12 @@ static void AnimDigDirtMound(struct Sprite *sprite)
#define tMaxTime data[3]
#define tbattlerSpriteIds(i) data[9 + (i)]
#define tNumBattlers data[13] // AnimTask_ShakeBattlers
#define tInitialX data[13] // AnimTask_ShakeTerrain
#define tInitialX data[13] // AnimTask_ShakePlatforms
#define tHorizOffset data[14]
#define tInitHorizOffset data[15]
// Shakes battler(s) or the battle terrain back and forth horizontally. Used by e.g. Earthquake, Eruption
// arg0: What to shake. 0-3 for any specific battler, MAX_BATTLERS_COUNT for all battlers, MAX_BATTLERS_COUNT + 1 for the terrain
// Shakes battler(s) or the battle platforms back and forth horizontally. Used by e.g. Earthquake, Eruption
// arg0: What to shake. 0-3 for any specific battler, MAX_BATTLERS_COUNT for all battlers, MAX_BATTLERS_COUNT + 1 for the platforms
// arg1: Shake intensity, used to calculate horizontal pixel offset (if 0, use move power instead)
// arg2: Length of time to shake for
void AnimTask_HorizontalShake(u8 taskId)
@ -602,9 +602,9 @@ void AnimTask_HorizontalShake(u8 taskId)
task->tMaxTime = gBattleAnimArgs[2];
switch (gBattleAnimArgs[0])
{
case MAX_BATTLERS_COUNT + 1: // Shake terrain
case MAX_BATTLERS_COUNT + 1: // Shake platforms
task->tInitialX = gBattle_BG3_X;
task->func = AnimTask_ShakeTerrain;
task->func = AnimTask_ShakePlatforms;
break;
case MAX_BATTLERS_COUNT: // Shake all battlers
task->tNumBattlers = 0;
@ -633,7 +633,7 @@ void AnimTask_HorizontalShake(u8 taskId)
}
}
static void AnimTask_ShakeTerrain(u8 taskId)
static void AnimTask_ShakePlatforms(u8 taskId)
{
struct Task *task = &gTasks[taskId];

View File

@ -13,9 +13,9 @@ static void AnimComplexPaletteBlend(struct Sprite *);
static void AnimComplexPaletteBlend_Step1(struct Sprite *);
static void AnimComplexPaletteBlend_Step2(struct Sprite *);
static void AnimCirclingSparkle(struct Sprite *);
static void AnimShakeMonOrBattleTerrain(struct Sprite *);
static void AnimShakeMonOrBattleTerrain_Step(struct Sprite *);
static void AnimShakeMonOrBattleTerrain_UpdateCoordOffsetEnabled(void);
static void AnimShakeMonOrBattlePlatforms(struct Sprite *);
static void AnimShakeMonOrBattlePlatforms_Step(struct Sprite *);
static void AnimShakeMonOrBattlePlatforms_UpdateCoordOffsetEnabled(void);
static void AnimHitSplatPersistent(struct Sprite *);
static void AnimHitSplatHandleInvert(struct Sprite *);
static void AnimConfusionDuck_Step(struct Sprite *);
@ -27,7 +27,7 @@ static void BlendColorCycleByTag(u8, u8, u8);
static void AnimTask_BlendColorCycleByTagLoop(u8);
static void AnimTask_FlashAnimTagWithColor_Step1(u8);
static void AnimTask_FlashAnimTagWithColor_Step2(u8);
static void AnimTask_ShakeBattleTerrain_Step(u8);
static void AnimTask_ShakeBattlePlatforms_Step(u8);
static void AnimMovePowerSwapGuardSwap(struct Sprite *);
static const union AnimCmd sAnim_ConfusionDuck_0[] =
@ -171,7 +171,7 @@ static const struct SpriteTemplate sCirclingSparkleSpriteTemplate =
.callback = AnimCirclingSparkle,
};
const struct SpriteTemplate gShakeMonOrTerrainSpriteTemplate =
const struct SpriteTemplate gShakeMonOrPlatformSpriteTemplate =
{
.tileTag = 0,
.paletteTag = 0,
@ -179,7 +179,7 @@ const struct SpriteTemplate gShakeMonOrTerrainSpriteTemplate =
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimShakeMonOrBattleTerrain,
.callback = AnimShakeMonOrBattlePlatforms,
};
static const union AffineAnimCmd sAffineAnim_HitSplat_0[] =
@ -899,7 +899,7 @@ void AnimTask_TintPalettes(u8 taskId)
#undef tColorG
#undef tColorB
static void AnimShakeMonOrBattleTerrain(struct Sprite *sprite)
static void AnimShakeMonOrBattlePlatforms(struct Sprite *sprite)
{
u16 var0;
@ -929,12 +929,12 @@ static void AnimShakeMonOrBattleTerrain(struct Sprite *sprite)
sprite->data[5] = gBattleAnimArgs[3];
var0 = sprite->data[5] - 2;
if (var0 < 2)
AnimShakeMonOrBattleTerrain_UpdateCoordOffsetEnabled();
AnimShakeMonOrBattlePlatforms_UpdateCoordOffsetEnabled();
sprite->callback = AnimShakeMonOrBattleTerrain_Step;
sprite->callback = AnimShakeMonOrBattlePlatforms_Step;
}
static void AnimShakeMonOrBattleTerrain_Step(struct Sprite *sprite)
static void AnimShakeMonOrBattlePlatforms_Step(struct Sprite *sprite)
{
u8 i;
u16 var0;
@ -967,7 +967,7 @@ static void AnimShakeMonOrBattleTerrain_Step(struct Sprite *sprite)
}
}
static void AnimShakeMonOrBattleTerrain_UpdateCoordOffsetEnabled(void)
static void AnimShakeMonOrBattlePlatforms_UpdateCoordOffsetEnabled(void)
{
gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].coordOffsetEnabled = FALSE;
gSprites[gBattlerSpriteIds[gBattleAnimTarget]].coordOffsetEnabled = FALSE;
@ -986,19 +986,19 @@ static void AnimShakeMonOrBattleTerrain_UpdateCoordOffsetEnabled(void)
}
}
// Task data for AnimTask_ShakeBattleTerrain
// Task data for AnimTask_ShakeBattlePlatforms
#define tXOffset data[0]
#define tYOffset data[1]
#define tNumShakes data[2]
#define tTimer data[3]
#define tShakeDelay data[8]
// Can shake battle terrain back and forth on the X or down and back to original pos on Y (cant shake up from orig pos)
// Can shake battle platforms back and forth on the X or down and back to original pos on Y (cant shake up from orig pos)
// arg0: x offset of shake
// arg1: y offset of shake
// arg2: number of shakes
// arg3: time between shakes
void AnimTask_ShakeBattleTerrain(u8 taskId)
void AnimTask_ShakeBattlePlatforms(u8 taskId)
{
gTasks[taskId].tXOffset = gBattleAnimArgs[0];
gTasks[taskId].tYOffset = gBattleAnimArgs[1];
@ -1007,11 +1007,11 @@ void AnimTask_ShakeBattleTerrain(u8 taskId)
gTasks[taskId].tShakeDelay = gBattleAnimArgs[3];
gBattle_BG3_X = gBattleAnimArgs[0];
gBattle_BG3_Y = gBattleAnimArgs[1];
gTasks[taskId].func = AnimTask_ShakeBattleTerrain_Step;
gTasks[taskId].func = AnimTask_ShakeBattlePlatforms_Step;
gTasks[taskId].func(taskId);
}
static void AnimTask_ShakeBattleTerrain_Step(u8 taskId)
static void AnimTask_ShakeBattlePlatforms_Step(u8 taskId)
{
if (gTasks[taskId].tTimer == 0)
{

View File

@ -104,36 +104,36 @@ void AnimTask_BlendBattleAnimPalExclude(u8 taskId)
void AnimTask_SetCamouflageBlend(u8 taskId)
{
u32 selectedPalettes = UnpackSelectedBattlePalettes(gBattleAnimArgs[0]);
switch (gBattleTerrain)
switch (gBattleEnvironment)
{
case BATTLE_TERRAIN_GRASS:
case BATTLE_ENVIRONMENT_GRASS:
gBattleAnimArgs[4] = RGB(12, 24, 2);
break;
case BATTLE_TERRAIN_LONG_GRASS:
case BATTLE_ENVIRONMENT_LONG_GRASS:
gBattleAnimArgs[4] = RGB(0, 15, 2);
break;
case BATTLE_TERRAIN_SAND:
case BATTLE_ENVIRONMENT_SAND:
gBattleAnimArgs[4] = RGB(30, 24, 11);
break;
case BATTLE_TERRAIN_UNDERWATER:
case BATTLE_ENVIRONMENT_UNDERWATER:
gBattleAnimArgs[4] = RGB(0, 0, 18);
break;
case BATTLE_TERRAIN_WATER:
case BATTLE_ENVIRONMENT_WATER:
gBattleAnimArgs[4] = RGB(11, 22, 31);
break;
case BATTLE_TERRAIN_POND:
case BATTLE_ENVIRONMENT_POND:
gBattleAnimArgs[4] = RGB(11, 22, 31);
break;
case BATTLE_TERRAIN_MOUNTAIN:
case BATTLE_ENVIRONMENT_MOUNTAIN:
gBattleAnimArgs[4] = RGB(22, 16, 10);
break;
case BATTLE_TERRAIN_CAVE:
case BATTLE_ENVIRONMENT_CAVE:
gBattleAnimArgs[4] = RGB(14, 9, 3);
break;
case BATTLE_TERRAIN_BUILDING:
case BATTLE_ENVIRONMENT_BUILDING:
gBattleAnimArgs[4] = RGB_WHITE;
break;
case BATTLE_TERRAIN_PLAIN:
case BATTLE_ENVIRONMENT_PLAIN:
default:
gBattleAnimArgs[4] = RGB_WHITE;
break;
@ -916,9 +916,9 @@ static void UpdateMonScrollingBgMask(u8 taskId)
}
}
void AnimTask_GetBattleTerrain(u8 taskId)
void AnimTask_GetBattleEnvironment(u8 taskId)
{
gBattleAnimArgs[0] = gBattleTerrain;
gBattleAnimArgs[0] = gBattleEnvironment;
DestroyAnimVisualTask(taskId);
}

View File

@ -610,96 +610,96 @@ const struct WindowTemplate * const gBattleWindowTemplates[] =
[B_WIN_TYPE_ARENA] = sBattleArenaWindowTemplates,
};
const struct BattleBackground sBattleTerrainTable[] =
const struct BattleBackground sBattleEnvironmentTable[] =
{
[BATTLE_TERRAIN_GRASS] =
[BATTLE_ENVIRONMENT_GRASS] =
{
.tileset = gBattleTerrainTiles_TallGrass,
.tilemap = gBattleTerrainTilemap_TallGrass,
.entryTileset = gBattleTerrainAnimTiles_TallGrass,
.entryTilemap = gBattleTerrainAnimTilemap_TallGrass,
.palette = gBattleTerrainPalette_TallGrass,
.tileset = gBattleEnvironmentTiles_TallGrass,
.tilemap = gBattleEnvironmentTilemap_TallGrass,
.entryTileset = gBattleEnvironmentAnimTiles_TallGrass,
.entryTilemap = gBattleEnvironmentAnimTilemap_TallGrass,
.palette = gBattleEnvironmentPalette_TallGrass,
},
[BATTLE_TERRAIN_LONG_GRASS] =
[BATTLE_ENVIRONMENT_LONG_GRASS] =
{
.tileset = gBattleTerrainTiles_LongGrass,
.tilemap = gBattleTerrainTilemap_LongGrass,
.entryTileset = gBattleTerrainAnimTiles_LongGrass,
.entryTilemap = gBattleTerrainAnimTilemap_LongGrass,
.palette = gBattleTerrainPalette_LongGrass,
.tileset = gBattleEnvironmentTiles_LongGrass,
.tilemap = gBattleEnvironmentTilemap_LongGrass,
.entryTileset = gBattleEnvironmentAnimTiles_LongGrass,
.entryTilemap = gBattleEnvironmentAnimTilemap_LongGrass,
.palette = gBattleEnvironmentPalette_LongGrass,
},
[BATTLE_TERRAIN_SAND] =
[BATTLE_ENVIRONMENT_SAND] =
{
.tileset = gBattleTerrainTiles_Sand,
.tilemap = gBattleTerrainTilemap_Sand,
.entryTileset = gBattleTerrainAnimTiles_Sand,
.entryTilemap = gBattleTerrainAnimTilemap_Sand,
.palette = gBattleTerrainPalette_Sand,
.tileset = gBattleEnvironmentTiles_Sand,
.tilemap = gBattleEnvironmentTilemap_Sand,
.entryTileset = gBattleEnvironmentAnimTiles_Sand,
.entryTilemap = gBattleEnvironmentAnimTilemap_Sand,
.palette = gBattleEnvironmentPalette_Sand,
},
[BATTLE_TERRAIN_UNDERWATER] =
[BATTLE_ENVIRONMENT_UNDERWATER] =
{
.tileset = gBattleTerrainTiles_Underwater,
.tilemap = gBattleTerrainTilemap_Underwater,
.entryTileset = gBattleTerrainAnimTiles_Underwater,
.entryTilemap = gBattleTerrainAnimTilemap_Underwater,
.palette = gBattleTerrainPalette_Underwater,
.tileset = gBattleEnvironmentTiles_Underwater,
.tilemap = gBattleEnvironmentTilemap_Underwater,
.entryTileset = gBattleEnvironmentAnimTiles_Underwater,
.entryTilemap = gBattleEnvironmentAnimTilemap_Underwater,
.palette = gBattleEnvironmentPalette_Underwater,
},
[BATTLE_TERRAIN_WATER] =
[BATTLE_ENVIRONMENT_WATER] =
{
.tileset = gBattleTerrainTiles_Water,
.tilemap = gBattleTerrainTilemap_Water,
.entryTileset = gBattleTerrainAnimTiles_Water,
.entryTilemap = gBattleTerrainAnimTilemap_Water,
.palette = gBattleTerrainPalette_Water,
.tileset = gBattleEnvironmentTiles_Water,
.tilemap = gBattleEnvironmentTilemap_Water,
.entryTileset = gBattleEnvironmentAnimTiles_Water,
.entryTilemap = gBattleEnvironmentAnimTilemap_Water,
.palette = gBattleEnvironmentPalette_Water,
},
[BATTLE_TERRAIN_POND] =
[BATTLE_ENVIRONMENT_POND] =
{
.tileset = gBattleTerrainTiles_PondWater,
.tilemap = gBattleTerrainTilemap_PondWater,
.entryTileset = gBattleTerrainAnimTiles_PondWater,
.entryTilemap = gBattleTerrainAnimTilemap_PondWater,
.palette = gBattleTerrainPalette_PondWater,
.tileset = gBattleEnvironmentTiles_PondWater,
.tilemap = gBattleEnvironmentTilemap_PondWater,
.entryTileset = gBattleEnvironmentAnimTiles_PondWater,
.entryTilemap = gBattleEnvironmentAnimTilemap_PondWater,
.palette = gBattleEnvironmentPalette_PondWater,
},
[BATTLE_TERRAIN_MOUNTAIN] =
[BATTLE_ENVIRONMENT_MOUNTAIN] =
{
.tileset = gBattleTerrainTiles_Rock,
.tilemap = gBattleTerrainTilemap_Rock,
.entryTileset = gBattleTerrainAnimTiles_Rock,
.entryTilemap = gBattleTerrainAnimTilemap_Rock,
.palette = gBattleTerrainPalette_Rock,
.tileset = gBattleEnvironmentTiles_Rock,
.tilemap = gBattleEnvironmentTilemap_Rock,
.entryTileset = gBattleEnvironmentAnimTiles_Rock,
.entryTilemap = gBattleEnvironmentAnimTilemap_Rock,
.palette = gBattleEnvironmentPalette_Rock,
},
[BATTLE_TERRAIN_CAVE] =
[BATTLE_ENVIRONMENT_CAVE] =
{
.tileset = gBattleTerrainTiles_Cave,
.tilemap = gBattleTerrainTilemap_Cave,
.entryTileset = gBattleTerrainAnimTiles_Cave,
.entryTilemap = gBattleTerrainAnimTilemap_Cave,
.palette = gBattleTerrainPalette_Cave,
.tileset = gBattleEnvironmentTiles_Cave,
.tilemap = gBattleEnvironmentTilemap_Cave,
.entryTileset = gBattleEnvironmentAnimTiles_Cave,
.entryTilemap = gBattleEnvironmentAnimTilemap_Cave,
.palette = gBattleEnvironmentPalette_Cave,
},
[BATTLE_TERRAIN_BUILDING] =
[BATTLE_ENVIRONMENT_BUILDING] =
{
.tileset = gBattleTerrainTiles_Building,
.tilemap = gBattleTerrainTilemap_Building,
.entryTileset = gBattleTerrainAnimTiles_Building,
.entryTilemap = gBattleTerrainAnimTilemap_Building,
.palette = gBattleTerrainPalette_Building,
.tileset = gBattleEnvironmentTiles_Building,
.tilemap = gBattleEnvironmentTilemap_Building,
.entryTileset = gBattleEnvironmentAnimTiles_Building,
.entryTilemap = gBattleEnvironmentAnimTilemap_Building,
.palette = gBattleEnvironmentPalette_Building,
},
[BATTLE_TERRAIN_PLAIN] =
[BATTLE_ENVIRONMENT_PLAIN] =
{
.tileset = gBattleTerrainTiles_Building,
.tilemap = gBattleTerrainTilemap_Building,
.entryTileset = gBattleTerrainAnimTiles_Building,
.entryTilemap = gBattleTerrainAnimTilemap_Building,
.palette = gBattleTerrainPalette_Plain,
.tileset = gBattleEnvironmentTiles_Building,
.tilemap = gBattleEnvironmentTilemap_Building,
.entryTileset = gBattleEnvironmentAnimTiles_Building,
.entryTilemap = gBattleEnvironmentAnimTilemap_Building,
.palette = gBattleEnvironmentPalette_Plain,
},
};
@ -754,33 +754,33 @@ void DrawMainBattleBackground(void)
{
if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_FRONTIER | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_RECORDED_LINK))
{
LZDecompressVram(gBattleTerrainTiles_Building, (void *)(BG_CHAR_ADDR(2)));
LZDecompressVram(gBattleTerrainTilemap_Building, (void *)(BG_SCREEN_ADDR(26)));
LoadCompressedPalette(gBattleTerrainPalette_Frontier, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
LZDecompressVram(gBattleEnvironmentTiles_Building, (void *)(BG_CHAR_ADDR(2)));
LZDecompressVram(gBattleEnvironmentTilemap_Building, (void *)(BG_SCREEN_ADDR(26)));
LoadCompressedPalette(gBattleEnvironmentPalette_Frontier, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
}
else if (gBattleTypeFlags & BATTLE_TYPE_LEGENDARY)
{
switch (GetMonData(&gEnemyParty[0], MON_DATA_SPECIES, NULL))
{
case SPECIES_GROUDON:
LZDecompressVram(gBattleTerrainTiles_Cave, (void*)(BG_CHAR_ADDR(2)));
LZDecompressVram(gBattleTerrainTilemap_Cave, (void*)(BG_SCREEN_ADDR(26)));
LoadCompressedPalette(gBattleTerrainPalette_Groudon, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
LZDecompressVram(gBattleEnvironmentTiles_Cave, (void*)(BG_CHAR_ADDR(2)));
LZDecompressVram(gBattleEnvironmentTilemap_Cave, (void*)(BG_SCREEN_ADDR(26)));
LoadCompressedPalette(gBattleEnvironmentPalette_Groudon, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
break;
case SPECIES_KYOGRE:
LZDecompressVram(gBattleTerrainTiles_Water, (void*)(BG_CHAR_ADDR(2)));
LZDecompressVram(gBattleTerrainTilemap_Water, (void*)(BG_SCREEN_ADDR(26)));
LoadCompressedPalette(gBattleTerrainPalette_Kyogre, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
LZDecompressVram(gBattleEnvironmentTiles_Water, (void*)(BG_CHAR_ADDR(2)));
LZDecompressVram(gBattleEnvironmentTilemap_Water, (void*)(BG_SCREEN_ADDR(26)));
LoadCompressedPalette(gBattleEnvironmentPalette_Kyogre, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
break;
case SPECIES_RAYQUAZA:
LZDecompressVram(gBattleTerrainTiles_Rayquaza, (void*)(BG_CHAR_ADDR(2)));
LZDecompressVram(gBattleTerrainTilemap_Rayquaza, (void*)(BG_SCREEN_ADDR(26)));
LoadCompressedPalette(gBattleTerrainPalette_Rayquaza, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
LZDecompressVram(gBattleEnvironmentTiles_Rayquaza, (void*)(BG_CHAR_ADDR(2)));
LZDecompressVram(gBattleEnvironmentTilemap_Rayquaza, (void*)(BG_SCREEN_ADDR(26)));
LoadCompressedPalette(gBattleEnvironmentPalette_Rayquaza, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
break;
default:
LZDecompressVram(sBattleTerrainTable[gBattleTerrain].tileset, (void *)(BG_CHAR_ADDR(2)));
LZDecompressVram(sBattleTerrainTable[gBattleTerrain].tilemap, (void *)(BG_SCREEN_ADDR(26)));
LoadCompressedPalette(sBattleTerrainTable[gBattleTerrain].palette, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
LZDecompressVram(sBattleEnvironmentTable[gBattleEnvironment].tileset, (void *)(BG_CHAR_ADDR(2)));
LZDecompressVram(sBattleEnvironmentTable[gBattleEnvironment].tilemap, (void *)(BG_SCREEN_ADDR(26)));
LoadCompressedPalette(sBattleEnvironmentTable[gBattleEnvironment].palette, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
break;
}
}
@ -791,16 +791,16 @@ void DrawMainBattleBackground(void)
u32 trainerClass = GetTrainerClassFromId(TRAINER_BATTLE_PARAM.opponentA);
if (trainerClass == TRAINER_CLASS_LEADER)
{
LZDecompressVram(gBattleTerrainTiles_Building, (void *)(BG_CHAR_ADDR(2)));
LZDecompressVram(gBattleTerrainTilemap_Building, (void *)(BG_SCREEN_ADDR(26)));
LoadCompressedPalette(gBattleTerrainPalette_BuildingLeader, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
LZDecompressVram(gBattleEnvironmentTiles_Building, (void *)(BG_CHAR_ADDR(2)));
LZDecompressVram(gBattleEnvironmentTilemap_Building, (void *)(BG_SCREEN_ADDR(26)));
LoadCompressedPalette(gBattleEnvironmentPalette_BuildingLeader, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
return;
}
else if (trainerClass == TRAINER_CLASS_CHAMPION)
{
LZDecompressVram(gBattleTerrainTiles_Stadium, (void *)(BG_CHAR_ADDR(2)));
LZDecompressVram(gBattleTerrainTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26)));
LoadCompressedPalette(gBattleTerrainPalette_StadiumWallace, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
LZDecompressVram(gBattleEnvironmentTiles_Stadium, (void *)(BG_CHAR_ADDR(2)));
LZDecompressVram(gBattleEnvironmentTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26)));
LoadCompressedPalette(gBattleEnvironmentPalette_StadiumWallace, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
return;
}
}
@ -809,49 +809,49 @@ void DrawMainBattleBackground(void)
{
default:
case MAP_BATTLE_SCENE_NORMAL:
LZDecompressVram(sBattleTerrainTable[gBattleTerrain].tileset, (void *)(BG_CHAR_ADDR(2)));
LZDecompressVram(sBattleTerrainTable[gBattleTerrain].tilemap, (void *)(BG_SCREEN_ADDR(26)));
LoadCompressedPalette(sBattleTerrainTable[gBattleTerrain].palette, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
LZDecompressVram(sBattleEnvironmentTable[gBattleEnvironment].tileset, (void *)(BG_CHAR_ADDR(2)));
LZDecompressVram(sBattleEnvironmentTable[gBattleEnvironment].tilemap, (void *)(BG_SCREEN_ADDR(26)));
LoadCompressedPalette(sBattleEnvironmentTable[gBattleEnvironment].palette, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
break;
case MAP_BATTLE_SCENE_GYM:
LZDecompressVram(gBattleTerrainTiles_Building, (void *)(BG_CHAR_ADDR(2)));
LZDecompressVram(gBattleTerrainTilemap_Building, (void *)(BG_SCREEN_ADDR(26)));
LoadCompressedPalette(gBattleTerrainPalette_BuildingGym, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
LZDecompressVram(gBattleEnvironmentTiles_Building, (void *)(BG_CHAR_ADDR(2)));
LZDecompressVram(gBattleEnvironmentTilemap_Building, (void *)(BG_SCREEN_ADDR(26)));
LoadCompressedPalette(gBattleEnvironmentPalette_BuildingGym, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
break;
case MAP_BATTLE_SCENE_MAGMA:
LZDecompressVram(gBattleTerrainTiles_Stadium, (void *)(BG_CHAR_ADDR(2)));
LZDecompressVram(gBattleTerrainTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26)));
LoadCompressedPalette(gBattleTerrainPalette_StadiumMagma, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
LZDecompressVram(gBattleEnvironmentTiles_Stadium, (void *)(BG_CHAR_ADDR(2)));
LZDecompressVram(gBattleEnvironmentTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26)));
LoadCompressedPalette(gBattleEnvironmentPalette_StadiumMagma, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
break;
case MAP_BATTLE_SCENE_AQUA:
LZDecompressVram(gBattleTerrainTiles_Stadium, (void *)(BG_CHAR_ADDR(2)));
LZDecompressVram(gBattleTerrainTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26)));
LoadCompressedPalette(gBattleTerrainPalette_StadiumAqua, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
LZDecompressVram(gBattleEnvironmentTiles_Stadium, (void *)(BG_CHAR_ADDR(2)));
LZDecompressVram(gBattleEnvironmentTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26)));
LoadCompressedPalette(gBattleEnvironmentPalette_StadiumAqua, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
break;
case MAP_BATTLE_SCENE_SIDNEY:
LZDecompressVram(gBattleTerrainTiles_Stadium, (void *)(BG_CHAR_ADDR(2)));
LZDecompressVram(gBattleTerrainTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26)));
LoadCompressedPalette(gBattleTerrainPalette_StadiumSidney, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
LZDecompressVram(gBattleEnvironmentTiles_Stadium, (void *)(BG_CHAR_ADDR(2)));
LZDecompressVram(gBattleEnvironmentTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26)));
LoadCompressedPalette(gBattleEnvironmentPalette_StadiumSidney, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
break;
case MAP_BATTLE_SCENE_PHOEBE:
LZDecompressVram(gBattleTerrainTiles_Stadium, (void *)(BG_CHAR_ADDR(2)));
LZDecompressVram(gBattleTerrainTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26)));
LoadCompressedPalette(gBattleTerrainPalette_StadiumPhoebe, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
LZDecompressVram(gBattleEnvironmentTiles_Stadium, (void *)(BG_CHAR_ADDR(2)));
LZDecompressVram(gBattleEnvironmentTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26)));
LoadCompressedPalette(gBattleEnvironmentPalette_StadiumPhoebe, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
break;
case MAP_BATTLE_SCENE_GLACIA:
LZDecompressVram(gBattleTerrainTiles_Stadium, (void *)(BG_CHAR_ADDR(2)));
LZDecompressVram(gBattleTerrainTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26)));
LoadCompressedPalette(gBattleTerrainPalette_StadiumGlacia, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
LZDecompressVram(gBattleEnvironmentTiles_Stadium, (void *)(BG_CHAR_ADDR(2)));
LZDecompressVram(gBattleEnvironmentTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26)));
LoadCompressedPalette(gBattleEnvironmentPalette_StadiumGlacia, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
break;
case MAP_BATTLE_SCENE_DRAKE:
LZDecompressVram(gBattleTerrainTiles_Stadium, (void *)(BG_CHAR_ADDR(2)));
LZDecompressVram(gBattleTerrainTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26)));
LoadCompressedPalette(gBattleTerrainPalette_StadiumDrake, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
LZDecompressVram(gBattleEnvironmentTiles_Stadium, (void *)(BG_CHAR_ADDR(2)));
LZDecompressVram(gBattleEnvironmentTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26)));
LoadCompressedPalette(gBattleEnvironmentPalette_StadiumDrake, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
break;
case MAP_BATTLE_SCENE_FRONTIER:
LZDecompressVram(gBattleTerrainTiles_Building, (void *)(BG_CHAR_ADDR(2)));
LZDecompressVram(gBattleTerrainTilemap_Building, (void *)(BG_SCREEN_ADDR(26)));
LoadCompressedPalette(gBattleTerrainPalette_Frontier, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
LZDecompressVram(gBattleEnvironmentTiles_Building, (void *)(BG_CHAR_ADDR(2)));
LZDecompressVram(gBattleEnvironmentTilemap_Building, (void *)(BG_SCREEN_ADDR(26)));
LoadCompressedPalette(gBattleEnvironmentPalette_Frontier, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
break;
}
}
@ -1148,8 +1148,8 @@ void DrawBattleEntryBackground(void)
{
if (!(gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) || gPartnerTrainerId > TRAINER_PARTNER(PARTNER_NONE))
{
LZDecompressVram(gBattleTerrainAnimTiles_Building, (void *)(BG_CHAR_ADDR(1)));
LZDecompressVram(gBattleTerrainAnimTilemap_Building, (void *)(BG_SCREEN_ADDR(28)));
LZDecompressVram(gBattleEnvironmentAnimTiles_Building, (void *)(BG_CHAR_ADDR(1)));
LZDecompressVram(gBattleEnvironmentAnimTilemap_Building, (void *)(BG_SCREEN_ADDR(28)));
}
else
{
@ -1168,20 +1168,20 @@ void DrawBattleEntryBackground(void)
switch (GetMonData(&gEnemyParty[0], MON_DATA_SPECIES, NULL))
{
case SPECIES_GROUDON:
LZDecompressVram(gBattleTerrainAnimTiles_Cave, (void*)(BG_CHAR_ADDR(1)));
LZDecompressVram(gBattleTerrainAnimTilemap_Cave, (void*)(BG_SCREEN_ADDR(28)));
LZDecompressVram(gBattleEnvironmentAnimTiles_Cave, (void*)(BG_CHAR_ADDR(1)));
LZDecompressVram(gBattleEnvironmentAnimTilemap_Cave, (void*)(BG_SCREEN_ADDR(28)));
break;
case SPECIES_KYOGRE:
LZDecompressVram(gBattleTerrainAnimTiles_Underwater, (void*)(BG_CHAR_ADDR(1)));
LZDecompressVram(gBattleTerrainAnimTilemap_Underwater, (void*)(BG_SCREEN_ADDR(28)));
LZDecompressVram(gBattleEnvironmentAnimTiles_Underwater, (void*)(BG_CHAR_ADDR(1)));
LZDecompressVram(gBattleEnvironmentAnimTilemap_Underwater, (void*)(BG_SCREEN_ADDR(28)));
break;
case SPECIES_RAYQUAZA:
LZDecompressVram(gBattleTerrainAnimTiles_Rayquaza, (void*)(BG_CHAR_ADDR(1)));
LZDecompressVram(gBattleTerrainAnimTilemap_Rayquaza, (void*)(BG_SCREEN_ADDR(28)));
LZDecompressVram(gBattleEnvironmentAnimTiles_Rayquaza, (void*)(BG_CHAR_ADDR(1)));
LZDecompressVram(gBattleEnvironmentAnimTilemap_Rayquaza, (void*)(BG_SCREEN_ADDR(28)));
break;
default:
LZDecompressVram(sBattleTerrainTable[gBattleTerrain].entryTileset, (void *)(BG_CHAR_ADDR(1)));
LZDecompressVram(sBattleTerrainTable[gBattleTerrain].entryTilemap, (void *)(BG_SCREEN_ADDR(28)));
LZDecompressVram(sBattleEnvironmentTable[gBattleEnvironment].entryTileset, (void *)(BG_CHAR_ADDR(1)));
LZDecompressVram(sBattleEnvironmentTable[gBattleEnvironment].entryTilemap, (void *)(BG_SCREEN_ADDR(28)));
break;
}
}
@ -1192,27 +1192,27 @@ void DrawBattleEntryBackground(void)
u32 trainerClass = GetTrainerClassFromId(TRAINER_BATTLE_PARAM.opponentA);
if (trainerClass == TRAINER_CLASS_LEADER)
{
LZDecompressVram(gBattleTerrainAnimTiles_Building, (void *)(BG_CHAR_ADDR(1)));
LZDecompressVram(gBattleTerrainAnimTilemap_Building, (void *)(BG_SCREEN_ADDR(28)));
LZDecompressVram(gBattleEnvironmentAnimTiles_Building, (void *)(BG_CHAR_ADDR(1)));
LZDecompressVram(gBattleEnvironmentAnimTilemap_Building, (void *)(BG_SCREEN_ADDR(28)));
return;
}
else if (trainerClass == TRAINER_CLASS_CHAMPION)
{
LZDecompressVram(gBattleTerrainAnimTiles_Building, (void *)(BG_CHAR_ADDR(1)));
LZDecompressVram(gBattleTerrainAnimTilemap_Building, (void *)(BG_SCREEN_ADDR(28)));
LZDecompressVram(gBattleEnvironmentAnimTiles_Building, (void *)(BG_CHAR_ADDR(1)));
LZDecompressVram(gBattleEnvironmentAnimTilemap_Building, (void *)(BG_SCREEN_ADDR(28)));
return;
}
}
if (GetCurrentMapBattleScene() == MAP_BATTLE_SCENE_NORMAL)
{
LZDecompressVram(sBattleTerrainTable[gBattleTerrain].entryTileset, (void *)(BG_CHAR_ADDR(1)));
LZDecompressVram(sBattleTerrainTable[gBattleTerrain].entryTilemap, (void *)(BG_SCREEN_ADDR(28)));
LZDecompressVram(sBattleEnvironmentTable[gBattleEnvironment].entryTileset, (void *)(BG_CHAR_ADDR(1)));
LZDecompressVram(sBattleEnvironmentTable[gBattleEnvironment].entryTilemap, (void *)(BG_SCREEN_ADDR(28)));
}
else
{
LZDecompressVram(gBattleTerrainAnimTiles_Building, (void *)(BG_CHAR_ADDR(1)));
LZDecompressVram(gBattleTerrainAnimTilemap_Building, (void *)(BG_SCREEN_ADDR(28)));
LZDecompressVram(gBattleEnvironmentAnimTiles_Building, (void *)(BG_CHAR_ADDR(1)));
LZDecompressVram(gBattleEnvironmentAnimTilemap_Building, (void *)(BG_SCREEN_ADDR(28)));
}
}
}
@ -1236,17 +1236,17 @@ bool8 LoadChosenBattleElement(u8 caseId)
case 3:
if (gBattleTypeFlags & (BATTLE_TYPE_FRONTIER | BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK | BATTLE_TYPE_EREADER_TRAINER))
{
LZDecompressVram(gBattleTerrainTiles_Building, (void *)(BG_CHAR_ADDR(2)));
LZDecompressVram(gBattleEnvironmentTiles_Building, (void *)(BG_CHAR_ADDR(2)));
}
else if (gBattleTypeFlags & BATTLE_TYPE_LEGENDARY)
{
switch (GetMonData(&gEnemyParty[0], MON_DATA_SPECIES, NULL))
{
case SPECIES_GROUDON:
LZDecompressVram(gBattleTerrainTiles_Cave, (void*)(BG_CHAR_ADDR(2)));
LZDecompressVram(gBattleEnvironmentTiles_Cave, (void*)(BG_CHAR_ADDR(2)));
break;
case SPECIES_KYOGRE:
LZDecompressVram(gBattleTerrainTilemap_Water, (void*)(BG_SCREEN_ADDR(2)));
LZDecompressVram(gBattleEnvironmentTilemap_Water, (void*)(BG_SCREEN_ADDR(2)));
break;
}
}
@ -1257,12 +1257,12 @@ bool8 LoadChosenBattleElement(u8 caseId)
u32 trainerClass = GetTrainerClassFromId(TRAINER_BATTLE_PARAM.opponentA);
if (trainerClass == TRAINER_CLASS_LEADER)
{
LZDecompressVram(gBattleTerrainTiles_Building, (void *)(BG_CHAR_ADDR(2)));
LZDecompressVram(gBattleEnvironmentTiles_Building, (void *)(BG_CHAR_ADDR(2)));
break;
}
else if (trainerClass == TRAINER_CLASS_CHAMPION)
{
LZDecompressVram(gBattleTerrainTiles_Stadium, (void *)(BG_CHAR_ADDR(2)));
LZDecompressVram(gBattleEnvironmentTiles_Stadium, (void *)(BG_CHAR_ADDR(2)));
break;
}
}
@ -1271,31 +1271,31 @@ bool8 LoadChosenBattleElement(u8 caseId)
{
default:
case MAP_BATTLE_SCENE_NORMAL:
LZDecompressVram(sBattleTerrainTable[gBattleTerrain].tileset, (void *)(BG_CHAR_ADDR(2)));
LZDecompressVram(sBattleEnvironmentTable[gBattleEnvironment].tileset, (void *)(BG_CHAR_ADDR(2)));
break;
case MAP_BATTLE_SCENE_GYM:
LZDecompressVram(gBattleTerrainTiles_Building, (void *)(BG_CHAR_ADDR(2)));
LZDecompressVram(gBattleEnvironmentTiles_Building, (void *)(BG_CHAR_ADDR(2)));
break;
case MAP_BATTLE_SCENE_MAGMA:
LZDecompressVram(gBattleTerrainTiles_Stadium, (void *)(BG_CHAR_ADDR(2)));
LZDecompressVram(gBattleEnvironmentTiles_Stadium, (void *)(BG_CHAR_ADDR(2)));
break;
case MAP_BATTLE_SCENE_AQUA:
LZDecompressVram(gBattleTerrainTiles_Stadium, (void *)(BG_CHAR_ADDR(2)));
LZDecompressVram(gBattleEnvironmentTiles_Stadium, (void *)(BG_CHAR_ADDR(2)));
break;
case MAP_BATTLE_SCENE_SIDNEY:
LZDecompressVram(gBattleTerrainTiles_Stadium, (void *)(BG_CHAR_ADDR(2)));
LZDecompressVram(gBattleEnvironmentTiles_Stadium, (void *)(BG_CHAR_ADDR(2)));
break;
case MAP_BATTLE_SCENE_PHOEBE:
LZDecompressVram(gBattleTerrainTiles_Stadium, (void *)(BG_CHAR_ADDR(2)));
LZDecompressVram(gBattleEnvironmentTiles_Stadium, (void *)(BG_CHAR_ADDR(2)));
break;
case MAP_BATTLE_SCENE_GLACIA:
LZDecompressVram(gBattleTerrainTiles_Stadium, (void *)(BG_CHAR_ADDR(2)));
LZDecompressVram(gBattleEnvironmentTiles_Stadium, (void *)(BG_CHAR_ADDR(2)));
break;
case MAP_BATTLE_SCENE_DRAKE:
LZDecompressVram(gBattleTerrainTiles_Stadium, (void *)(BG_CHAR_ADDR(2)));
LZDecompressVram(gBattleEnvironmentTiles_Stadium, (void *)(BG_CHAR_ADDR(2)));
break;
case MAP_BATTLE_SCENE_FRONTIER:
LZDecompressVram(gBattleTerrainTiles_Building, (void *)(BG_CHAR_ADDR(2)));
LZDecompressVram(gBattleEnvironmentTiles_Building, (void *)(BG_CHAR_ADDR(2)));
break;
}
}
@ -1303,14 +1303,14 @@ bool8 LoadChosenBattleElement(u8 caseId)
case 4:
if (gBattleTypeFlags & (BATTLE_TYPE_FRONTIER | BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK | BATTLE_TYPE_EREADER_TRAINER))
{
LZDecompressVram(gBattleTerrainTilemap_Building, (void *)(BG_SCREEN_ADDR(26)));
LZDecompressVram(gBattleEnvironmentTilemap_Building, (void *)(BG_SCREEN_ADDR(26)));
}
else if (gBattleTypeFlags & BATTLE_TYPE_LEGENDARY)
{
if (GetMonData(&gEnemyParty[0], MON_DATA_SPECIES, NULL) == SPECIES_GROUDON)
LZDecompressVram(gBattleTerrainTilemap_Cave, (void*)(BG_SCREEN_ADDR(26)));
LZDecompressVram(gBattleEnvironmentTilemap_Cave, (void*)(BG_SCREEN_ADDR(26)));
else
LZDecompressVram(gBattleTerrainTilemap_Water, (void *)(BG_SCREEN_ADDR(26)));
LZDecompressVram(gBattleEnvironmentTilemap_Water, (void *)(BG_SCREEN_ADDR(26)));
}
else
{
@ -1319,12 +1319,12 @@ bool8 LoadChosenBattleElement(u8 caseId)
u32 trainerClass = GetTrainerClassFromId(TRAINER_BATTLE_PARAM.opponentA);
if (trainerClass == TRAINER_CLASS_LEADER)
{
LZDecompressVram(gBattleTerrainTilemap_Building, (void *)(BG_SCREEN_ADDR(26)));
LZDecompressVram(gBattleEnvironmentTilemap_Building, (void *)(BG_SCREEN_ADDR(26)));
break;
}
else if (trainerClass == TRAINER_CLASS_CHAMPION)
{
LZDecompressVram(gBattleTerrainTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26)));
LZDecompressVram(gBattleEnvironmentTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26)));
break;
}
}
@ -1333,31 +1333,31 @@ bool8 LoadChosenBattleElement(u8 caseId)
{
default:
case MAP_BATTLE_SCENE_NORMAL:
LZDecompressVram(sBattleTerrainTable[gBattleTerrain].tilemap, (void *)(BG_SCREEN_ADDR(26)));
LZDecompressVram(sBattleEnvironmentTable[gBattleEnvironment].tilemap, (void *)(BG_SCREEN_ADDR(26)));
break;
case MAP_BATTLE_SCENE_GYM:
LZDecompressVram(gBattleTerrainTilemap_Building, (void *)(BG_SCREEN_ADDR(26)));
LZDecompressVram(gBattleEnvironmentTilemap_Building, (void *)(BG_SCREEN_ADDR(26)));
break;
case MAP_BATTLE_SCENE_MAGMA:
LZDecompressVram(gBattleTerrainTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26)));
LZDecompressVram(gBattleEnvironmentTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26)));
break;
case MAP_BATTLE_SCENE_AQUA:
LZDecompressVram(gBattleTerrainTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26)));
LZDecompressVram(gBattleEnvironmentTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26)));
break;
case MAP_BATTLE_SCENE_SIDNEY:
LZDecompressVram(gBattleTerrainTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26)));
LZDecompressVram(gBattleEnvironmentTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26)));
break;
case MAP_BATTLE_SCENE_PHOEBE:
LZDecompressVram(gBattleTerrainTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26)));
LZDecompressVram(gBattleEnvironmentTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26)));
break;
case MAP_BATTLE_SCENE_GLACIA:
LZDecompressVram(gBattleTerrainTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26)));
LZDecompressVram(gBattleEnvironmentTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26)));
break;
case MAP_BATTLE_SCENE_DRAKE:
LZDecompressVram(gBattleTerrainTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26)));
LZDecompressVram(gBattleEnvironmentTilemap_Stadium, (void *)(BG_SCREEN_ADDR(26)));
break;
case MAP_BATTLE_SCENE_FRONTIER:
LZDecompressVram(gBattleTerrainTilemap_Building, (void *)(BG_SCREEN_ADDR(26)));
LZDecompressVram(gBattleEnvironmentTilemap_Building, (void *)(BG_SCREEN_ADDR(26)));
break;
}
}
@ -1365,14 +1365,14 @@ bool8 LoadChosenBattleElement(u8 caseId)
case 5:
if (gBattleTypeFlags & (BATTLE_TYPE_FRONTIER | BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK | BATTLE_TYPE_EREADER_TRAINER))
{
LoadCompressedPalette(gBattleTerrainPalette_Frontier, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
LoadCompressedPalette(gBattleEnvironmentPalette_Frontier, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
}
else if (gBattleTypeFlags & BATTLE_TYPE_LEGENDARY)
{
if (GetMonData(&gEnemyParty[0], MON_DATA_SPECIES, NULL) == SPECIES_GROUDON)
LoadCompressedPalette(gBattleTerrainPalette_Groudon, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
LoadCompressedPalette(gBattleEnvironmentPalette_Groudon, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
else
LoadCompressedPalette(gBattleTerrainPalette_Kyogre, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
LoadCompressedPalette(gBattleEnvironmentPalette_Kyogre, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
}
else
{
@ -1381,12 +1381,12 @@ bool8 LoadChosenBattleElement(u8 caseId)
u32 trainerClass = GetTrainerClassFromId(TRAINER_BATTLE_PARAM.opponentA);
if (trainerClass == TRAINER_CLASS_LEADER)
{
LoadCompressedPalette(gBattleTerrainPalette_BuildingLeader, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
LoadCompressedPalette(gBattleEnvironmentPalette_BuildingLeader, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
break;
}
else if (trainerClass == TRAINER_CLASS_CHAMPION)
{
LoadCompressedPalette(gBattleTerrainPalette_StadiumWallace, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
LoadCompressedPalette(gBattleEnvironmentPalette_StadiumWallace, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
break;
}
}
@ -1395,31 +1395,31 @@ bool8 LoadChosenBattleElement(u8 caseId)
{
default:
case MAP_BATTLE_SCENE_NORMAL:
LoadCompressedPalette(sBattleTerrainTable[gBattleTerrain].palette, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
LoadCompressedPalette(sBattleEnvironmentTable[gBattleEnvironment].palette, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
break;
case MAP_BATTLE_SCENE_GYM:
LoadCompressedPalette(gBattleTerrainPalette_BuildingGym, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
LoadCompressedPalette(gBattleEnvironmentPalette_BuildingGym, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
break;
case MAP_BATTLE_SCENE_MAGMA:
LoadCompressedPalette(gBattleTerrainPalette_StadiumMagma, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
LoadCompressedPalette(gBattleEnvironmentPalette_StadiumMagma, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
break;
case MAP_BATTLE_SCENE_AQUA:
LoadCompressedPalette(gBattleTerrainPalette_StadiumAqua, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
LoadCompressedPalette(gBattleEnvironmentPalette_StadiumAqua, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
break;
case MAP_BATTLE_SCENE_SIDNEY:
LoadCompressedPalette(gBattleTerrainPalette_StadiumSidney, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
LoadCompressedPalette(gBattleEnvironmentPalette_StadiumSidney, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
break;
case MAP_BATTLE_SCENE_PHOEBE:
LoadCompressedPalette(gBattleTerrainPalette_StadiumPhoebe, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
LoadCompressedPalette(gBattleEnvironmentPalette_StadiumPhoebe, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
break;
case MAP_BATTLE_SCENE_GLACIA:
LoadCompressedPalette(gBattleTerrainPalette_StadiumGlacia, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
LoadCompressedPalette(gBattleEnvironmentPalette_StadiumGlacia, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
break;
case MAP_BATTLE_SCENE_DRAKE:
LoadCompressedPalette(gBattleTerrainPalette_StadiumDrake, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
LoadCompressedPalette(gBattleEnvironmentPalette_StadiumDrake, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
break;
case MAP_BATTLE_SCENE_FRONTIER:
LoadCompressedPalette(gBattleTerrainPalette_Frontier, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
LoadCompressedPalette(gBattleEnvironmentPalette_Frontier, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
break;
}
}

View File

@ -1415,10 +1415,10 @@ void BtlController_EmitFaintingCry(u32 battler, u32 bufferId)
PrepareBufferDataTransfer(battler, bufferId, gBattleResources->transferBuffer, 4);
}
void BtlController_EmitIntroSlide(u32 battler, u32 bufferId, u8 terrainId)
void BtlController_EmitIntroSlide(u32 battler, u32 bufferId, u8 environmentId)
{
gBattleResources->transferBuffer[0] = CONTROLLER_INTROSLIDE;
gBattleResources->transferBuffer[1] = terrainId;
gBattleResources->transferBuffer[1] = environmentId;
PrepareBufferDataTransfer(battler, bufferId, gBattleResources->transferBuffer, 2);
}

View File

@ -24,16 +24,16 @@ static const u8 sBattleAnimBgCnts[] = {REG_OFFSET_BG0CNT, REG_OFFSET_BG1CNT, REG
static const TaskFunc sBattleIntroSlideFuncs[] =
{
[BATTLE_TERRAIN_GRASS] = BattleIntroSlide1,
[BATTLE_TERRAIN_LONG_GRASS] = BattleIntroSlide1,
[BATTLE_TERRAIN_SAND] = BattleIntroSlide2,
[BATTLE_TERRAIN_UNDERWATER] = BattleIntroSlide2,
[BATTLE_TERRAIN_WATER] = BattleIntroSlide2,
[BATTLE_TERRAIN_POND] = BattleIntroSlide1,
[BATTLE_TERRAIN_MOUNTAIN] = BattleIntroSlide1,
[BATTLE_TERRAIN_CAVE] = BattleIntroSlide1,
[BATTLE_TERRAIN_BUILDING] = BattleIntroSlide3,
[BATTLE_TERRAIN_PLAIN] = BattleIntroSlide3,
[BATTLE_ENVIRONMENT_GRASS] = BattleIntroSlide1,
[BATTLE_ENVIRONMENT_LONG_GRASS] = BattleIntroSlide1,
[BATTLE_ENVIRONMENT_SAND] = BattleIntroSlide2,
[BATTLE_ENVIRONMENT_UNDERWATER] = BattleIntroSlide2,
[BATTLE_ENVIRONMENT_WATER] = BattleIntroSlide2,
[BATTLE_ENVIRONMENT_POND] = BattleIntroSlide1,
[BATTLE_ENVIRONMENT_MOUNTAIN] = BattleIntroSlide1,
[BATTLE_ENVIRONMENT_CAVE] = BattleIntroSlide1,
[BATTLE_ENVIRONMENT_BUILDING] = BattleIntroSlide3,
[BATTLE_ENVIRONMENT_PLAIN] = BattleIntroSlide3,
};
void SetAnimBgAttribute(u8 bgId, u8 attributeId, u8 value)
@ -100,9 +100,9 @@ int GetAnimBgAttribute(u8 bgId, u8 attributeId)
}
#define tState data[0]
#define tTerrain data[1]
#define tEnvironment data[1]
void HandleIntroSlide(u8 terrain)
void HandleIntroSlide(u8 environment)
{
u8 taskId;
@ -120,16 +120,16 @@ void HandleIntroSlide(u8 terrain)
}
else if (GetMonData(&gEnemyParty[0], MON_DATA_SPECIES, NULL) == SPECIES_KYOGRE)
{
terrain = BATTLE_TERRAIN_UNDERWATER;
environment = BATTLE_ENVIRONMENT_UNDERWATER;
taskId = CreateTask(BattleIntroSlide2, 0);
}
else
{
taskId = CreateTask(sBattleIntroSlideFuncs[terrain], 0);
taskId = CreateTask(sBattleIntroSlideFuncs[environment], 0);
}
gTasks[taskId].tState = 0;
gTasks[taskId].tTerrain = terrain;
gTasks[taskId].tEnvironment = environment;
gTasks[taskId].data[2] = 0;
gTasks[taskId].data[3] = 0;
gTasks[taskId].data[4] = 0;
@ -244,7 +244,7 @@ static void BattleIntroSlide1(u8 taskId)
}
else
{
if (gTasks[taskId].tTerrain == BATTLE_TERRAIN_LONG_GRASS)
if (gTasks[taskId].tEnvironment == BATTLE_ENVIRONMENT_LONG_GRASS)
{
if (gBattle_BG1_Y != (u16)(-80))
gBattle_BG1_Y -= 2;
@ -292,18 +292,18 @@ static void BattleIntroSlide2(u8 taskId)
if (B_FAST_INTRO_NO_SLIDE || gTestRunnerHeadless)
return BattleIntroNoSlide(taskId);
switch (gTasks[taskId].tTerrain)
switch (gTasks[taskId].tEnvironment)
{
case BATTLE_TERRAIN_SAND:
case BATTLE_TERRAIN_WATER:
case BATTLE_ENVIRONMENT_SAND:
case BATTLE_ENVIRONMENT_WATER:
gBattle_BG1_X += 8;
break;
case BATTLE_TERRAIN_UNDERWATER:
case BATTLE_ENVIRONMENT_UNDERWATER:
gBattle_BG1_X += 6;
break;
}
if (gTasks[taskId].tTerrain == BATTLE_TERRAIN_WATER)
if (gTasks[taskId].tEnvironment == BATTLE_ENVIRONMENT_WATER)
{
gBattle_BG1_Y = Cos2(gTasks[taskId].data[6]) / 512 - 8;
if (gTasks[taskId].data[6] < 180)

View File

@ -143,7 +143,7 @@ EWRAM_DATA u8 gBattleTextBuff1[TEXT_BUFF_ARRAY_COUNT] = {0};
EWRAM_DATA u8 gBattleTextBuff2[TEXT_BUFF_ARRAY_COUNT] = {0};
EWRAM_DATA u8 gBattleTextBuff3[TEXT_BUFF_ARRAY_COUNT + 13] = {0}; // expanded for stupidly long z move names
EWRAM_DATA u32 gBattleTypeFlags = 0;
EWRAM_DATA u8 gBattleTerrain = 0;
EWRAM_DATA u8 gBattleEnvironment = 0;
EWRAM_DATA struct MultiPartnerMenuPokemon gMultiPartnerParty[MULTI_PARTY_SIZE] = {0};
EWRAM_DATA static struct MultiPartnerMenuPokemon* sMultiPartnerPartyBuffer = NULL;
EWRAM_DATA u8 *gBattleAnimBgTileBuffer = NULL;
@ -505,10 +505,10 @@ static void CB2_InitBattleInternal(void)
if (!DEBUG_OVERWORLD_MENU || (DEBUG_OVERWORLD_MENU && !gIsDebugBattle))
{
gBattleTerrain = BattleSetup_GetTerrainId();
gBattleEnvironment = BattleSetup_GetEnvironmentId();
}
if (gBattleTypeFlags & BATTLE_TYPE_RECORDED)
gBattleTerrain = BATTLE_TERRAIN_BUILDING;
gBattleEnvironment = BATTLE_ENVIRONMENT_BUILDING;
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && !(gBattleTypeFlags & (BATTLE_TYPE_FRONTIER
| BATTLE_TYPE_EREADER_TRAINER
@ -3283,21 +3283,13 @@ const u8* FaintClearSetData(u32 battler)
gProtectStructs[battler].helpingHand = FALSE;
gProtectStructs[battler].bounceMove = FALSE;
gProtectStructs[battler].stealMove = FALSE;
gProtectStructs[battler].prlzImmobility = FALSE;
gProtectStructs[battler].nonVolatileStatusImmobility = FALSE;
gProtectStructs[battler].unableToUseMove = FALSE;
gProtectStructs[battler].confusionSelfDmg = FALSE;
gProtectStructs[battler].targetAffected = FALSE;
gProtectStructs[battler].chargingTurn = FALSE;
gProtectStructs[battler].fleeType = 0;
gProtectStructs[battler].usedImprisonedMove = FALSE;
gProtectStructs[battler].loveImmobility = FALSE;
gProtectStructs[battler].usedDisabledMove = FALSE;
gProtectStructs[battler].usedTauntedMove = FALSE;
gProtectStructs[battler].flag2Unknown = FALSE;
gProtectStructs[battler].flinchImmobility = FALSE;
gProtectStructs[battler].notFirstStrike = FALSE;
gProtectStructs[battler].usedHealBlockedMove = FALSE;
gProtectStructs[battler].usedGravityPreventedMove = FALSE;
gProtectStructs[battler].usedThroatChopPreventedMove = FALSE;
gProtectStructs[battler].statRaised = FALSE;
gProtectStructs[battler].statFell = FALSE;
gProtectStructs[battler].pranksterElevated = FALSE;
@ -3423,7 +3415,7 @@ static void DoBattleIntro(void)
if (!gBattleControllerExecFlags)
{
battler = GetBattlerAtPosition(0);
BtlController_EmitIntroSlide(battler, BUFFER_A, gBattleTerrain);
BtlController_EmitIntroSlide(battler, BUFFER_A, gBattleEnvironment);
MarkBattlerForControllerExec(battler);
gBattleCommunication[0] = 0;
gBattleCommunication[1] = 0;

View File

@ -551,7 +551,7 @@ static void Cmd_unused_c8(void);
static void Cmd_trymemento(void);
static void Cmd_setforcedtarget(void);
static void Cmd_setcharge(void);
static void Cmd_callterrainattack(void);
static void Cmd_callenvironmentattack(void);
static void Cmd_curestatuswithmove(void);
static void Cmd_settorment(void);
static void Cmd_jumpifnodamage(void);
@ -582,7 +582,7 @@ static void Cmd_unused_0xE7(void);
static void Cmd_settypebasedhalvers(void);
static void Cmd_jumpifsubstituteblocks(void);
static void Cmd_tryrecycleitem(void);
static void Cmd_settypetoterrain(void);
static void Cmd_settypetoenvironment(void);
static void Cmd_pursuitdoubles(void);
static void Cmd_snatchsetbattlers(void);
static void Cmd_removescreens(void);
@ -810,7 +810,7 @@ void (* const gBattleScriptingCommandsTable[])(void) =
Cmd_trymemento, //0xC9
Cmd_setforcedtarget, //0xCA
Cmd_setcharge, //0xCB
Cmd_callterrainattack, //0xCC
Cmd_callenvironmentattack, //0xCC
Cmd_curestatuswithmove, //0xCD
Cmd_settorment, //0xCE
Cmd_jumpifnodamage, //0xCF
@ -841,7 +841,7 @@ void (* const gBattleScriptingCommandsTable[])(void) =
Cmd_settypebasedhalvers, //0xE8
Cmd_jumpifsubstituteblocks, //0xE9
Cmd_tryrecycleitem, //0xEA
Cmd_settypetoterrain, //0xEB
Cmd_settypetoenvironment, //0xEB
Cmd_pursuitdoubles, //0xEC
Cmd_snatchsetbattlers, //0xED
Cmd_removescreens, //0xEE
@ -972,76 +972,76 @@ static const u16 sFinalStrikeOnlyEffects[] =
MOVE_EFFECT_WRAP,
};
static const u16 sNaturePowerMoves[BATTLE_TERRAIN_COUNT] =
static const u16 sNaturePowerMoves[BATTLE_ENVIRONMENT_COUNT] =
{
#if B_NATURE_POWER_MOVES >= GEN_7
[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_ICE_BEAM,
[BATTLE_ENVIRONMENT_GRASS] = MOVE_ENERGY_BALL,
[BATTLE_ENVIRONMENT_LONG_GRASS] = MOVE_ENERGY_BALL,
[BATTLE_ENVIRONMENT_SAND] = MOVE_EARTH_POWER,
[BATTLE_ENVIRONMENT_WATER] = MOVE_HYDRO_PUMP,
[BATTLE_ENVIRONMENT_POND] = MOVE_HYDRO_PUMP,
[BATTLE_ENVIRONMENT_MOUNTAIN] = MOVE_EARTH_POWER,
[BATTLE_ENVIRONMENT_CAVE] = MOVE_EARTH_POWER,
[BATTLE_ENVIRONMENT_BUILDING] = MOVE_TRI_ATTACK,
[BATTLE_ENVIRONMENT_PLAIN] = MOVE_TRI_ATTACK,
[BATTLE_ENVIRONMENT_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,
[BATTLE_ENVIRONMENT_GRASS] = MOVE_ENERGY_BALL,
[BATTLE_ENVIRONMENT_LONG_GRASS] = MOVE_ENERGY_BALL,
[BATTLE_ENVIRONMENT_SAND] = MOVE_EARTH_POWER,
[BATTLE_ENVIRONMENT_WATER] = MOVE_HYDRO_PUMP,
[BATTLE_ENVIRONMENT_POND] = MOVE_HYDRO_PUMP,
[BATTLE_ENVIRONMENT_MOUNTAIN] = MOVE_EARTH_POWER,
[BATTLE_ENVIRONMENT_CAVE] = MOVE_EARTH_POWER,
[BATTLE_ENVIRONMENT_BUILDING] = MOVE_TRI_ATTACK,
[BATTLE_ENVIRONMENT_PLAIN] = MOVE_TRI_ATTACK,
[BATTLE_ENVIRONMENT_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,
[BATTLE_ENVIRONMENT_GRASS] = MOVE_SEED_BOMB,
[BATTLE_ENVIRONMENT_LONG_GRASS] = MOVE_SEED_BOMB,
[BATTLE_ENVIRONMENT_SAND] = MOVE_EARTHQUAKE,
[BATTLE_ENVIRONMENT_WATER] = MOVE_HYDRO_PUMP,
[BATTLE_ENVIRONMENT_POND] = MOVE_HYDRO_PUMP,
[BATTLE_ENVIRONMENT_MOUNTAIN] = MOVE_EARTHQUAKE,
[BATTLE_ENVIRONMENT_CAVE] = MOVE_EARTHQUAKE,
[BATTLE_ENVIRONMENT_BUILDING] = MOVE_TRI_ATTACK,
[BATTLE_ENVIRONMENT_PLAIN] = MOVE_EARTHQUAKE,
[BATTLE_ENVIRONMENT_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,
[BATTLE_ENVIRONMENT_GRASS] = MOVE_SEED_BOMB,
[BATTLE_ENVIRONMENT_LONG_GRASS] = MOVE_SEED_BOMB,
[BATTLE_ENVIRONMENT_SAND] = MOVE_EARTHQUAKE,
[BATTLE_ENVIRONMENT_WATER] = MOVE_HYDRO_PUMP,
[BATTLE_ENVIRONMENT_POND] = MOVE_HYDRO_PUMP,
[BATTLE_ENVIRONMENT_MOUNTAIN] = MOVE_ROCK_SLIDE,
[BATTLE_ENVIRONMENT_CAVE] = MOVE_ROCK_SLIDE,
[BATTLE_ENVIRONMENT_BUILDING] = MOVE_TRI_ATTACK,
[BATTLE_ENVIRONMENT_PLAIN] = MOVE_EARTHQUAKE,
[BATTLE_ENVIRONMENT_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,
[BATTLE_ENVIRONMENT_GRASS] = MOVE_STUN_SPORE,
[BATTLE_ENVIRONMENT_LONG_GRASS] = MOVE_RAZOR_LEAF,
[BATTLE_ENVIRONMENT_SAND] = MOVE_EARTHQUAKE,
[BATTLE_ENVIRONMENT_WATER] = MOVE_SURF,
[BATTLE_ENVIRONMENT_POND] = MOVE_BUBBLE_BEAM,
[BATTLE_ENVIRONMENT_MOUNTAIN] = MOVE_ROCK_SLIDE,
[BATTLE_ENVIRONMENT_CAVE] = MOVE_SHADOW_BALL,
[BATTLE_ENVIRONMENT_BUILDING] = MOVE_SWIFT,
[BATTLE_ENVIRONMENT_PLAIN] = MOVE_SWIFT,
[BATTLE_ENVIRONMENT_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,
[BATTLE_ENVIRONMENT_UNDERWATER] = MOVE_HYDRO_PUMP,
[BATTLE_ENVIRONMENT_SOARING] = MOVE_AIR_SLASH,
[BATTLE_ENVIRONMENT_SKY_PILLAR] = MOVE_AIR_SLASH,
[BATTLE_ENVIRONMENT_BURIAL_GROUND] = MOVE_SHADOW_BALL,
[BATTLE_ENVIRONMENT_PUDDLE] = MOVE_MUD_BOMB,
[BATTLE_ENVIRONMENT_MARSH] = MOVE_MUD_BOMB,
[BATTLE_ENVIRONMENT_SWAMP] = MOVE_MUD_BOMB,
[BATTLE_ENVIRONMENT_ICE] = MOVE_ICE_BEAM,
[BATTLE_ENVIRONMENT_VOLCANO] = MOVE_LAVA_PLUME,
[BATTLE_ENVIRONMENT_DISTORTION_WORLD] = MOVE_TRI_ATTACK,
[BATTLE_ENVIRONMENT_SPACE] = MOVE_DRACO_METEOR,
[BATTLE_ENVIRONMENT_ULTRA_SPACE] = MOVE_PSYSHOCK,
};
#define _ 0
@ -1082,30 +1082,30 @@ static const struct PickupItem sPickupTable[] =
#undef _
static const u8 sTerrainToType[BATTLE_TERRAIN_COUNT] =
static const u8 sEnvironmentToType[BATTLE_ENVIRONMENT_COUNT] =
{
[BATTLE_TERRAIN_GRASS] = TYPE_GRASS,
[BATTLE_TERRAIN_LONG_GRASS] = TYPE_GRASS,
[BATTLE_TERRAIN_SAND] = TYPE_GROUND,
[BATTLE_TERRAIN_UNDERWATER] = TYPE_WATER,
[BATTLE_TERRAIN_WATER] = TYPE_WATER,
[BATTLE_TERRAIN_POND] = TYPE_WATER,
[BATTLE_TERRAIN_CAVE] = TYPE_ROCK,
[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,
[BATTLE_TERRAIN_MOUNTAIN] = (B_CAMOUFLAGE_TYPES >= GEN_5 ? TYPE_GROUND : TYPE_ROCK),
[BATTLE_TERRAIN_PLAIN] = (B_CAMOUFLAGE_TYPES >= GEN_4 ? TYPE_GROUND : TYPE_NORMAL),
[BATTLE_ENVIRONMENT_GRASS] = TYPE_GRASS,
[BATTLE_ENVIRONMENT_LONG_GRASS] = TYPE_GRASS,
[BATTLE_ENVIRONMENT_SAND] = TYPE_GROUND,
[BATTLE_ENVIRONMENT_UNDERWATER] = TYPE_WATER,
[BATTLE_ENVIRONMENT_WATER] = TYPE_WATER,
[BATTLE_ENVIRONMENT_POND] = TYPE_WATER,
[BATTLE_ENVIRONMENT_CAVE] = TYPE_ROCK,
[BATTLE_ENVIRONMENT_BUILDING] = TYPE_NORMAL,
[BATTLE_ENVIRONMENT_SOARING] = TYPE_FLYING,
[BATTLE_ENVIRONMENT_SKY_PILLAR] = TYPE_FLYING,
[BATTLE_ENVIRONMENT_BURIAL_GROUND] = TYPE_GHOST,
[BATTLE_ENVIRONMENT_PUDDLE] = TYPE_GROUND,
[BATTLE_ENVIRONMENT_MARSH] = TYPE_GROUND,
[BATTLE_ENVIRONMENT_SWAMP] = TYPE_GROUND,
[BATTLE_ENVIRONMENT_SNOW] = TYPE_ICE,
[BATTLE_ENVIRONMENT_ICE] = TYPE_ICE,
[BATTLE_ENVIRONMENT_VOLCANO] = TYPE_FIRE,
[BATTLE_ENVIRONMENT_DISTORTION_WORLD] = TYPE_NORMAL,
[BATTLE_ENVIRONMENT_SPACE] = TYPE_DRAGON,
[BATTLE_ENVIRONMENT_ULTRA_SPACE] = TYPE_PSYCHIC,
[BATTLE_ENVIRONMENT_MOUNTAIN] = (B_CAMOUFLAGE_TYPES >= GEN_5 ? TYPE_GROUND : TYPE_ROCK),
[BATTLE_ENVIRONMENT_PLAIN] = (B_CAMOUFLAGE_TYPES >= GEN_4 ? TYPE_GROUND : TYPE_NORMAL),
};
static bool32 NoTargetPresent(u8 battler, u32 move)
@ -3893,7 +3893,7 @@ void SetMoveEffect(bool32 primary, bool32 certain)
}
break;
case MOVE_EFFECT_FEINT:
if (IS_BATTLER_PROTECTED(gBattlerTarget))
if (IS_BATTLER_PROTECTED(gBattlerTarget) || IsBattlerSideProtected(gBattlerTarget))
{
gProtectStructs[gBattlerTarget].protected = FALSE;
gSideStatuses[GetBattlerSide(gBattlerTarget)] &= ~SIDE_STATUS_WIDE_GUARD;
@ -4065,18 +4065,18 @@ void SetMoveEffect(bool32 primary, bool32 certain)
}
else
{
switch (gBattleTerrain)
switch (gBattleEnvironment)
{
case BATTLE_TERRAIN_GRASS:
case BATTLE_ENVIRONMENT_GRASS:
gBattleScripting.moveEffect = (B_SECRET_POWER_EFFECT >= GEN_4 ? MOVE_EFFECT_SLEEP : MOVE_EFFECT_POISON);
break;
case BATTLE_TERRAIN_UNDERWATER:
case BATTLE_ENVIRONMENT_UNDERWATER:
gBattleScripting.moveEffect = (B_SECRET_POWER_EFFECT >= GEN_6 ? MOVE_EFFECT_ATK_MINUS_1 : MOVE_EFFECT_DEF_MINUS_1);
break;
case BATTLE_TERRAIN_POND:
case BATTLE_ENVIRONMENT_POND:
gBattleScripting.moveEffect = (B_SECRET_POWER_EFFECT >= GEN_4 ? MOVE_EFFECT_ATK_MINUS_1 : MOVE_EFFECT_SPD_MINUS_1);
break;
case BATTLE_TERRAIN_MOUNTAIN:
case BATTLE_ENVIRONMENT_MOUNTAIN:
if (B_SECRET_POWER_EFFECT >= GEN_5)
gBattleScripting.moveEffect = MOVE_EFFECT_ACC_MINUS_1;
else if (B_SECRET_POWER_EFFECT >= GEN_4)
@ -4084,37 +4084,37 @@ void SetMoveEffect(bool32 primary, bool32 certain)
else
gBattleScripting.moveEffect = MOVE_EFFECT_CONFUSION;
break;
case BATTLE_TERRAIN_PUDDLE:
case BATTLE_ENVIRONMENT_PUDDLE:
gBattleScripting.moveEffect = (B_SECRET_POWER_EFFECT >= GEN_5 ? MOVE_EFFECT_SPD_MINUS_1 : MOVE_EFFECT_ACC_MINUS_1);
break;
case BATTLE_TERRAIN_LONG_GRASS:
case BATTLE_ENVIRONMENT_LONG_GRASS:
gBattleScripting.moveEffect = MOVE_EFFECT_SLEEP;
break;
case BATTLE_TERRAIN_SAND:
case BATTLE_ENVIRONMENT_SAND:
gBattleScripting.moveEffect = MOVE_EFFECT_ACC_MINUS_1;
break;
case BATTLE_TERRAIN_WATER:
case BATTLE_ENVIRONMENT_WATER:
gBattleScripting.moveEffect = MOVE_EFFECT_ATK_MINUS_1;
break;
case BATTLE_TERRAIN_CAVE:
case BATTLE_TERRAIN_BURIAL_GROUND:
case BATTLE_TERRAIN_SPACE:
case BATTLE_ENVIRONMENT_CAVE:
case BATTLE_ENVIRONMENT_BURIAL_GROUND:
case BATTLE_ENVIRONMENT_SPACE:
gBattleScripting.moveEffect = MOVE_EFFECT_FLINCH;
break;
case BATTLE_TERRAIN_SOARING:
case BATTLE_TERRAIN_SKY_PILLAR:
case BATTLE_TERRAIN_MARSH:
case BATTLE_TERRAIN_SWAMP:
case BATTLE_ENVIRONMENT_SOARING:
case BATTLE_ENVIRONMENT_SKY_PILLAR:
case BATTLE_ENVIRONMENT_MARSH:
case BATTLE_ENVIRONMENT_SWAMP:
gBattleScripting.moveEffect = MOVE_EFFECT_SPD_MINUS_1;
break;
case BATTLE_TERRAIN_SNOW:
case BATTLE_TERRAIN_ICE:
case BATTLE_ENVIRONMENT_SNOW:
case BATTLE_ENVIRONMENT_ICE:
gBattleScripting.moveEffect = MOVE_EFFECT_FREEZE_OR_FROSTBITE;
break;
case BATTLE_TERRAIN_VOLCANO:
case BATTLE_ENVIRONMENT_VOLCANO:
gBattleScripting.moveEffect = MOVE_EFFECT_BURN;
break;
case BATTLE_TERRAIN_ULTRA_SPACE:
case BATTLE_ENVIRONMENT_ULTRA_SPACE:
gBattleScripting.moveEffect = MOVE_EFFECT_DEF_MINUS_1;
break;
default:
@ -6820,7 +6820,7 @@ static void Cmd_moveend(void)
case MOVEEND_UPDATE_LAST_MOVES:
if ((gBattleStruct->moveResultFlags[gBattlerTarget] & (MOVE_RESULT_FAILED | MOVE_RESULT_DOESNT_AFFECT_FOE))
|| (gBattleMons[gBattlerAttacker].status2 & (STATUS2_FLINCHED))
|| gProtectStructs[gBattlerAttacker].prlzImmobility)
|| gProtectStructs[gBattlerAttacker].nonVolatileStatusImmobility)
gBattleStruct->battlerState[gBattlerAttacker].lastMoveFailed = TRUE;
else
gBattleStruct->battlerState[gBattlerAttacker].lastMoveFailed = FALSE;
@ -14833,7 +14833,7 @@ static void Cmd_setcharge(void)
}
// Nature Power
static void Cmd_callterrainattack(void)
static void Cmd_callenvironmentattack(void)
{
CMD_ARGS();
@ -14846,7 +14846,7 @@ static void Cmd_callterrainattack(void)
u32 GetNaturePowerMove(u32 battler)
{
u32 move = sNaturePowerMoves[gBattleTerrain];
u32 move = sNaturePowerMoves[gBattleEnvironment];
if (gFieldStatuses & STATUS_FIELD_MISTY_TERRAIN)
move = MOVE_MOONBLAST;
else if (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN)
@ -14855,7 +14855,7 @@ u32 GetNaturePowerMove(u32 battler)
move = MOVE_ENERGY_BALL;
else if (gFieldStatuses & STATUS_FIELD_PSYCHIC_TERRAIN)
move = MOVE_PSYCHIC;
else if (sNaturePowerMoves[gBattleTerrain] == MOVE_NONE)
else if (sNaturePowerMoves[gBattleEnvironment] == MOVE_NONE)
move = MOVE_TRI_ATTACK;
if (GetActiveGimmick(battler) == GIMMICK_Z_MOVE)
@ -15739,39 +15739,39 @@ static void Cmd_tryrecycleitem(void)
bool32 CanCamouflage(u8 battler)
{
if (IS_BATTLER_OF_TYPE(battler, sTerrainToType[gBattleTerrain]))
if (IS_BATTLER_OF_TYPE(battler, sEnvironmentToType[gBattleEnvironment]))
return FALSE;
return TRUE;
}
static void Cmd_settypetoterrain(void)
static void Cmd_settypetoenvironment(void)
{
CMD_ARGS(const u8 *failInstr);
u8 terrainType;
u8 environmentType;
switch(gFieldStatuses & STATUS_FIELD_TERRAIN_ANY)
{
case STATUS_FIELD_ELECTRIC_TERRAIN:
terrainType = TYPE_ELECTRIC;
environmentType = TYPE_ELECTRIC;
break;
case STATUS_FIELD_GRASSY_TERRAIN:
terrainType = TYPE_GRASS;
environmentType = TYPE_GRASS;
break;
case STATUS_FIELD_MISTY_TERRAIN:
terrainType = TYPE_FAIRY;
environmentType = TYPE_FAIRY;
break;
case STATUS_FIELD_PSYCHIC_TERRAIN:
terrainType = TYPE_PSYCHIC;
environmentType = TYPE_PSYCHIC;
break;
default:
terrainType = sTerrainToType[gBattleTerrain];
environmentType = sEnvironmentToType[gBattleEnvironment];
break;
}
if (!IS_BATTLER_OF_TYPE(gBattlerAttacker, terrainType) && GetActiveGimmick(gBattlerAttacker) != GIMMICK_TERA)
if (!IS_BATTLER_OF_TYPE(gBattlerAttacker, environmentType) && GetActiveGimmick(gBattlerAttacker) != GIMMICK_TERA)
{
SET_BATTLER_TYPE(gBattlerAttacker, terrainType);
PREPARE_TYPE_BUFFER(gBattleTextBuff1, terrainType);
SET_BATTLER_TYPE(gBattlerAttacker, environmentType);
PREPARE_TYPE_BUFFER(gBattleTextBuff1, environmentType);
gBattlescriptCurrInstr = cmd->nextInstr;
}

View File

@ -605,7 +605,7 @@ static void CB2_EndScriptedWildBattle(void)
}
}
u8 BattleSetup_GetTerrainId(void)
u8 BattleSetup_GetEnvironmentId(void)
{
u16 tileBehavior;
s16 x, y;
@ -618,11 +618,11 @@ u8 BattleSetup_GetTerrainId(void)
tileBehavior = MapGridGetMetatileBehaviorAt(x, y);
if (MetatileBehavior_IsTallGrass(tileBehavior))
return BATTLE_TERRAIN_GRASS;
return BATTLE_ENVIRONMENT_GRASS;
if (MetatileBehavior_IsLongGrass(tileBehavior))
return BATTLE_TERRAIN_LONG_GRASS;
return BATTLE_ENVIRONMENT_LONG_GRASS;
if (MetatileBehavior_IsSandOrDeepSand(tileBehavior))
return BATTLE_TERRAIN_SAND;
return BATTLE_ENVIRONMENT_SAND;
switch (gMapHeader.mapType)
{
@ -632,41 +632,41 @@ u8 BattleSetup_GetTerrainId(void)
break;
case MAP_TYPE_UNDERGROUND:
if (MetatileBehavior_IsIndoorEncounter(tileBehavior))
return BATTLE_TERRAIN_BUILDING;
return BATTLE_ENVIRONMENT_BUILDING;
if (MetatileBehavior_IsSurfableWaterOrUnderwater(tileBehavior))
return BATTLE_TERRAIN_POND;
return BATTLE_TERRAIN_CAVE;
return BATTLE_ENVIRONMENT_POND;
return BATTLE_ENVIRONMENT_CAVE;
case MAP_TYPE_INDOOR:
case MAP_TYPE_SECRET_BASE:
return BATTLE_TERRAIN_BUILDING;
return BATTLE_ENVIRONMENT_BUILDING;
case MAP_TYPE_UNDERWATER:
return BATTLE_TERRAIN_UNDERWATER;
return BATTLE_ENVIRONMENT_UNDERWATER;
case MAP_TYPE_OCEAN_ROUTE:
if (MetatileBehavior_IsSurfableWaterOrUnderwater(tileBehavior))
return BATTLE_TERRAIN_WATER;
return BATTLE_TERRAIN_PLAIN;
return BATTLE_ENVIRONMENT_WATER;
return BATTLE_ENVIRONMENT_PLAIN;
}
if (MetatileBehavior_IsDeepOrOceanWater(tileBehavior))
return BATTLE_TERRAIN_WATER;
return BATTLE_ENVIRONMENT_WATER;
if (MetatileBehavior_IsSurfableWaterOrUnderwater(tileBehavior))
return BATTLE_TERRAIN_POND;
return BATTLE_ENVIRONMENT_POND;
if (MetatileBehavior_IsMountain(tileBehavior))
return BATTLE_TERRAIN_MOUNTAIN;
return BATTLE_ENVIRONMENT_MOUNTAIN;
if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING))
{
// Is BRIDGE_TYPE_POND_*?
if (MetatileBehavior_GetBridgeType(tileBehavior) != BRIDGE_TYPE_OCEAN)
return BATTLE_TERRAIN_POND;
return BATTLE_ENVIRONMENT_POND;
if (MetatileBehavior_IsBridgeOverWater(tileBehavior) == TRUE)
return BATTLE_TERRAIN_WATER;
return BATTLE_ENVIRONMENT_WATER;
}
if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(ROUTE113) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(ROUTE113))
return BATTLE_TERRAIN_SAND;
return BATTLE_ENVIRONMENT_SAND;
if (GetSavedWeather() == WEATHER_SANDSTORM)
return BATTLE_TERRAIN_SAND;
return BATTLE_ENVIRONMENT_SAND;
return BATTLE_TERRAIN_PLAIN;
return BATTLE_ENVIRONMENT_PLAIN;
}
static u8 GetBattleTransitionTypeByMap(void)

View File

@ -1081,21 +1081,12 @@ const u8* CancelMultiTurnMoves(u32 battler)
bool32 WasUnableToUseMove(u32 battler)
{
if (gProtectStructs[battler].prlzImmobility
|| gProtectStructs[battler].usedImprisonedMove
|| gProtectStructs[battler].loveImmobility
|| gProtectStructs[battler].usedDisabledMove
|| gProtectStructs[battler].usedTauntedMove
|| gProtectStructs[battler].usedGravityPreventedMove
|| gProtectStructs[battler].usedHealBlockedMove
|| gProtectStructs[battler].flag2Unknown
|| gProtectStructs[battler].flinchImmobility
|| gProtectStructs[battler].confusionSelfDmg
|| gProtectStructs[battler].powderSelfDmg
|| gProtectStructs[battler].usedThroatChopPreventedMove)
if (gProtectStructs[battler].nonVolatileStatusImmobility
|| gProtectStructs[battler].unableToUseMove
|| gProtectStructs[battler].powderSelfDmg
|| gProtectStructs[battler].confusionSelfDmg)
return TRUE;
else
return FALSE;
return FALSE;
}
void PrepareStringBattle(u16 stringId, u32 battler)
@ -1613,6 +1604,18 @@ u32 GetBattlerAffectionHearts(u32 battler)
return GetMonAffectionHearts(&party[gBattlerPartyIndexes[battler]]);
}
// gBattlerAttacker is the battler that's trying to raise their stats and due to limitations of RandomUniformExcept, cannot be an argument
bool32 MoodyCantRaiseStat(u32 stat)
{
return CompareStat(gBattlerAttacker, stat, MAX_STAT_STAGE, CMP_EQUAL);
}
// gBattlerAttacker is the battler that's trying to lower their stats and due to limitations of RandomUniformExcept, cannot be an argument
bool32 MoodyCantLowerStat(u32 stat)
{
return stat == GET_STAT_BUFF_ID(gBattleScripting.statChanger) || CompareStat(gBattlerAttacker, stat, MIN_STAT_STAGE, CMP_EQUAL);
}
void TryToRevertMimicryAndFlags(void)
{
u32 i;
@ -3223,6 +3226,7 @@ static void CancellerAsleep(u32 *effect)
u32 moveEffect = GetMoveEffect(gChosenMove);
if (moveEffect != EFFECT_SNORE && moveEffect != EFFECT_SLEEP_TALK)
{
gProtectStructs[gBattlerAttacker].nonVolatileStatusImmobility = TRUE;
gBattlescriptCurrInstr = BattleScript_MoveUsedIsAsleep;
gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
*effect = 2;
@ -3247,6 +3251,7 @@ static void CancellerFrozen(u32 *effect)
{
if (!RandomPercentage(RNG_FROZEN, 20))
{
gProtectStructs[gBattlerAttacker].nonVolatileStatusImmobility = TRUE;
gBattlescriptCurrInstr = BattleScript_MoveUsedIsFrozen;
gHitMarker |= (HITMARKER_NO_ATTACKSTRING | HITMARKER_UNABLE_TO_USE_MOVE);
}
@ -3335,7 +3340,7 @@ static void CancellerFlinch(u32 *effect)
{
if (gBattleMons[gBattlerAttacker].status2 & STATUS2_FLINCHED)
{
gProtectStructs[gBattlerAttacker].flinchImmobility = TRUE;
gProtectStructs[gBattlerAttacker].unableToUseMove = TRUE;
CancelMultiTurnMoves(gBattlerAttacker);
gBattlescriptCurrInstr = BattleScript_MoveUsedFlinched;
gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
@ -3356,7 +3361,7 @@ static void CancellerInLove(u32 *effect)
{
BattleScriptPush(BattleScript_MoveUsedIsInLoveCantAttack);
gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
gProtectStructs[gBattlerAttacker].loveImmobility = TRUE;
gProtectStructs[gBattlerAttacker].unableToUseMove = TRUE;
CancelMultiTurnMoves(gBattlerAttacker);
}
gBattlescriptCurrInstr = BattleScript_MoveUsedIsInLove;
@ -3368,7 +3373,7 @@ static void CancellerDisabled(u32 *effect)
{
if (GetActiveGimmick(gBattlerAttacker) != GIMMICK_Z_MOVE && gDisableStructs[gBattlerAttacker].disabledMove == gCurrentMove && gDisableStructs[gBattlerAttacker].disabledMove != MOVE_NONE)
{
gProtectStructs[gBattlerAttacker].usedDisabledMove = TRUE;
gProtectStructs[gBattlerAttacker].unableToUseMove = TRUE;
gBattleScripting.battler = gBattlerAttacker;
CancelMultiTurnMoves(gBattlerAttacker);
gBattlescriptCurrInstr = BattleScript_MoveUsedIsDisabled;
@ -3381,7 +3386,7 @@ static void CancellerHealBlocked(u32 *effect)
{
if (GetActiveGimmick(gBattlerAttacker) != GIMMICK_Z_MOVE && gStatuses3[gBattlerAttacker] & STATUS3_HEAL_BLOCK && IsHealBlockPreventingMove(gBattlerAttacker, gCurrentMove))
{
gProtectStructs[gBattlerAttacker].usedHealBlockedMove = TRUE;
gProtectStructs[gBattlerAttacker].unableToUseMove = TRUE;
gBattleScripting.battler = gBattlerAttacker;
CancelMultiTurnMoves(gBattlerAttacker);
gBattlescriptCurrInstr = BattleScript_MoveUsedHealBlockPrevents;
@ -3394,7 +3399,7 @@ static void CancellerGravity(u32 *effect)
{
if (gFieldStatuses & STATUS_FIELD_GRAVITY && IsGravityPreventingMove(gCurrentMove))
{
gProtectStructs[gBattlerAttacker].usedGravityPreventedMove = TRUE;
gProtectStructs[gBattlerAttacker].unableToUseMove = TRUE;
gBattleScripting.battler = gBattlerAttacker;
CancelMultiTurnMoves(gBattlerAttacker);
gBattlescriptCurrInstr = BattleScript_MoveUsedGravityPrevents;
@ -3407,7 +3412,7 @@ static void CancellerThroatChop(u32 *effect)
{
if (GetActiveGimmick(gBattlerAttacker) != GIMMICK_Z_MOVE && gDisableStructs[gBattlerAttacker].throatChopTimer && IsSoundMove(gCurrentMove))
{
gProtectStructs[gBattlerAttacker].usedThroatChopPreventedMove = TRUE;
gProtectStructs[gBattlerAttacker].unableToUseMove = TRUE;
CancelMultiTurnMoves(gBattlerAttacker);
gBattlescriptCurrInstr = BattleScript_MoveUsedIsThroatChopPrevented;
gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
@ -3419,7 +3424,7 @@ static void CancellerTaunted(u32 *effect)
{
if (GetActiveGimmick(gBattlerAttacker) != GIMMICK_Z_MOVE && gDisableStructs[gBattlerAttacker].tauntTimer && IsBattleMoveStatus(gCurrentMove))
{
gProtectStructs[gBattlerAttacker].usedTauntedMove = TRUE;
gProtectStructs[gBattlerAttacker].unableToUseMove = TRUE;
CancelMultiTurnMoves(gBattlerAttacker);
gBattlescriptCurrInstr = BattleScript_MoveUsedIsTaunted;
gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
@ -3431,7 +3436,7 @@ static void CancellerImprisoned(u32 *effect)
{
if (GetActiveGimmick(gBattlerAttacker) != GIMMICK_Z_MOVE && GetImprisonedMovesCount(gBattlerAttacker, gCurrentMove))
{
gProtectStructs[gBattlerAttacker].usedImprisonedMove = TRUE;
gProtectStructs[gBattlerAttacker].unableToUseMove = TRUE;
CancelMultiTurnMoves(gBattlerAttacker);
gBattlescriptCurrInstr = BattleScript_MoveUsedIsImprisoned;
gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
@ -3489,7 +3494,7 @@ static void CancellerParalysed(u32 *effect)
&& !(B_MAGIC_GUARD == GEN_4 && GetBattlerAbility(gBattlerAttacker) == ABILITY_MAGIC_GUARD)
&& !RandomPercentage(RNG_PARALYSIS, 75))
{
gProtectStructs[gBattlerAttacker].prlzImmobility = TRUE;
gProtectStructs[gBattlerAttacker].nonVolatileStatusImmobility = TRUE;
// This is removed in FRLG and Emerald for some reason
//CancelMultiTurnMoves(gBattlerAttacker);
gBattlescriptCurrInstr = BattleScript_MoveUsedIsParalyzed;
@ -5476,7 +5481,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
if (gDisableStructs[battler].isFirstTurn != 2)
{
u32 validToRaise = 0, validToLower = 0;
u32 statsNum = B_MOODY_ACC_EVASION >= GEN_8 ? NUM_STATS : NUM_BATTLE_STATS;
u32 statsNum = GetGenConfig(GEN_CONFIG_MOODY_STATS) >= GEN_8 ? NUM_STATS : NUM_BATTLE_STATS;
for (i = STAT_ATK; i < statsNum; i++)
{
@ -5486,29 +5491,21 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
validToRaise |= 1u << i;
}
if (validToLower != 0 || validToRaise != 0) // Can lower one stat, or can raise one stat
gBattleScripting.statChanger = gBattleScripting.savedStatChanger = 0; // for raising and lowering stat respectively
if (validToRaise) // Find stat to raise
{
gBattleScripting.statChanger = gBattleScripting.savedStatChanger = 0; // for raising and lowering stat respectively
if (validToRaise != 0) // Find stat to raise
{
do
{
i = (Random() % statsNum) + STAT_ATK;
} while (!(validToRaise & (1u << i)));
SET_STATCHANGER(i, 2, FALSE);
validToLower &= ~(1u << i); // Can't lower the same stat as raising.
}
if (validToLower != 0) // Find stat to lower
{
do
{
i = (Random() % statsNum) + STAT_ATK;
} while (!(validToLower & (1u << i)));
SET_STATCHANGER2(gBattleScripting.savedStatChanger, i, 1, TRUE);
}
BattleScriptPushCursorAndCallback(BattleScript_MoodyActivates);
effect++;
i = RandomUniformExcept(RNG_MOODY_INCREASE, STAT_ATK, statsNum - 1, MoodyCantRaiseStat);
SET_STATCHANGER(i, 2, FALSE);
validToLower &= ~(1u << i); // Can't lower the same stat as raising.
}
if (validToLower) // Find stat to lower
{
// MoodyCantLowerStat already checks that both stats are different
i = RandomUniformExcept(RNG_MOODY_DECREASE, STAT_ATK, statsNum - 1, MoodyCantLowerStat);
SET_STATCHANGER2(gBattleScripting.savedStatChanger, i, 1, TRUE);
}
BattleScriptPushCursorAndCallback(BattleScript_MoodyActivates);
effect++;
}
break;
case ABILITY_TRUANT:
@ -6983,23 +6980,24 @@ static enum ItemEffect StatRaiseBerry(u32 battler, u32 itemId, u32 statId, enum
static enum ItemEffect RandomStatRaiseBerry(u32 battler, u32 itemId, enum ItemCaseId caseID)
{
s32 i;
s32 stat;
u16 stringId;
for (i = 0; i < NUM_STATS - 1; i++)
for (stat = STAT_ATK; stat < NUM_STATS; stat++)
{
if (CompareStat(battler, STAT_ATK + i, MAX_STAT_STAGE, CMP_LESS_THAN))
if (CompareStat(battler, stat, MAX_STAT_STAGE, CMP_LESS_THAN))
break;
}
if (i != NUM_STATS - 1 && HasEnoughHpToEatBerry(battler, GetBattlerItemHoldEffectParam(battler, itemId), itemId))
if (stat != NUM_STATS && HasEnoughHpToEatBerry(battler, GetBattlerItemHoldEffectParam(battler, itemId), itemId))
{
u16 battlerAbility = GetBattlerAbility(battler);
do
{
i = Random() % (NUM_STATS - 1);
} while (!CompareStat(battler, STAT_ATK + i, MAX_STAT_STAGE, CMP_LESS_THAN));
u32 savedAttacker = gBattlerAttacker;
// MoodyCantRaiseStat requires that the battler is set to gBattlerAttacker
gBattlerAttacker = battler;
stat = RandomUniformExcept(RNG_RANDOM_STAT_UP, STAT_ATK, NUM_STATS - 1, MoodyCantRaiseStat);
gBattlerAttacker = savedAttacker;
PREPARE_STAT_BUFFER(gBattleTextBuff1, i + 1);
PREPARE_STAT_BUFFER(gBattleTextBuff1, stat);
stringId = (battlerAbility == ABILITY_CONTRARY) ? STRINGID_STATFELL : STRINGID_STATROSE;
gBattleTextBuff2[0] = B_BUFF_PLACEHOLDER_BEGIN;
gBattleTextBuff2[1] = B_BUFF_STRING;
@ -7011,11 +7009,11 @@ static enum ItemEffect RandomStatRaiseBerry(u32 battler, u32 itemId, enum ItemCa
gBattleTextBuff2[7] = EOS;
gEffectBattler = battler;
if (battlerAbility == ABILITY_RIPEN)
SET_STATCHANGER(i + 1, 4, FALSE);
SET_STATCHANGER(stat, 4, FALSE);
else
SET_STATCHANGER(i + 1, 2, FALSE);
SET_STATCHANGER(stat, 2, FALSE);
gBattleScripting.animArg1 = STAT_ANIM_PLUS2 + i + 1;
gBattleScripting.animArg1 = STAT_ANIM_PLUS2 + stat;
gBattleScripting.animArg2 = 0;
if (caseID == ITEMEFFECT_ON_SWITCH_IN_FIRST_TURN || caseID == ITEMEFFECT_NORMAL)
{

Some files were not shown because too many files have changed in this diff Show More