merge rhh/upcoming
@ -23,17 +23,14 @@ body:
|
||||
label: Version
|
||||
description: What version of pokeemerald-expansion are you using as a base?
|
||||
options:
|
||||
- 1.10.2 (Latest release)
|
||||
- 1.11.0 (Latest release)
|
||||
- master (default, unreleased bugfixes)
|
||||
- upcoming (Edge)
|
||||
- 1.10.3
|
||||
- 1.10.2
|
||||
- 1.10.1
|
||||
- 1.10.0
|
||||
- 1.9.4
|
||||
- 1.9.3
|
||||
- 1.9.2
|
||||
- 1.9.1
|
||||
- 1.9.0
|
||||
- pre-1.9.0
|
||||
- pre-1.10.0
|
||||
validations:
|
||||
required: true
|
||||
- type: input
|
||||
|
||||
11
.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml
vendored
@ -23,17 +23,14 @@ body:
|
||||
label: Version
|
||||
description: What version of pokeemerald-expansion are you using as a base?
|
||||
options:
|
||||
- 1.10.2 (Latest release)
|
||||
- 1.11.0 (Latest release)
|
||||
- master (default, unreleased bugfixes)
|
||||
- upcoming (Edge)
|
||||
- 1.10.3
|
||||
- 1.10.2
|
||||
- 1.10.1
|
||||
- 1.10.0
|
||||
- 1.9.4
|
||||
- 1.9.3
|
||||
- 1.9.2
|
||||
- 1.9.1
|
||||
- 1.9.0
|
||||
- pre-1.9.0
|
||||
- pre-1.10.0
|
||||
validations:
|
||||
required: true
|
||||
- type: input
|
||||
|
||||
11
.github/ISSUE_TEMPLATE/04_other_errors.yaml
vendored
@ -23,17 +23,14 @@ body:
|
||||
label: Version
|
||||
description: What version of pokeemerald-expansion are you using as a base?
|
||||
options:
|
||||
- 1.10.2 (Latest release)
|
||||
- 1.11.0 (Latest release)
|
||||
- master (default, unreleased bugfixes)
|
||||
- upcoming (Edge)
|
||||
- 1.10.3
|
||||
- 1.10.2
|
||||
- 1.10.1
|
||||
- 1.10.0
|
||||
- 1.9.4
|
||||
- 1.9.3
|
||||
- 1.9.2
|
||||
- 1.9.1
|
||||
- 1.9.0
|
||||
- pre-1.9.0
|
||||
- pre-1.10.0
|
||||
validations:
|
||||
required: true
|
||||
- type: input
|
||||
|
||||
@ -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.10.2 https://github.com/rh-hideout/pokeemerald-expansion/
|
||||
Based off RHH's pokeemerald-expansion 1.11.0 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.
|
||||
|
||||
@ -1640,8 +1640,8 @@
|
||||
callnative BS_TryTriggerStatusForm
|
||||
.endm
|
||||
|
||||
.macro setphotongeysercategory
|
||||
callnative BS_SetPhotonGeyserCategory
|
||||
.macro setdynamicmovecategory
|
||||
callnative BS_SetDynamicMoveCategory
|
||||
.endm
|
||||
|
||||
.macro tryupperhand failInstr:req
|
||||
|
||||
@ -2422,6 +2422,12 @@
|
||||
.2byte \dest
|
||||
.endm
|
||||
|
||||
@ Hides any follower Pokémon if present, putting them into their Poké Ball; by default waits for their movement to finish.
|
||||
.macro hidefollower wait=1
|
||||
callnative ScrFunc_hidefollower
|
||||
.2byte \wait
|
||||
.endm
|
||||
|
||||
.macro increasedifficulty
|
||||
callnative Script_IncreaseDifficulty, requests_effects=1
|
||||
.endm
|
||||
|
||||
@ -1880,7 +1880,7 @@ gBattleAnimMove_Avalanche::
|
||||
loadspritegfx ANIM_TAG_ICE_CHUNK
|
||||
monbg ANIM_DEF_PARTNER
|
||||
createsprite gShakeMonOrTerrainSpriteTemplate, ANIM_TARGET, 2, 7, 1, 11, 1
|
||||
createsprite gAvalancheSpriteTemplate, ANIM_TARGET, 130, 4, -5, 1, -5, 1
|
||||
createsprite gAvalancheSpriteTemplate, ANIM_TARGET, 130, -5, 1, -5, 1
|
||||
playsewithpan SE_M_ROCK_THROW, SOUND_PAN_TARGET
|
||||
delay 2
|
||||
createsprite gAvalancheSpriteTemplate, ANIM_TARGET, 130, 5, 0, 6, 1
|
||||
@ -5623,7 +5623,6 @@ gBattleAnimMove_Bulldoze::
|
||||
gBattleAnimMove_FrostBreath::
|
||||
loadspritegfx ANIM_TAG_ICE_CHUNK
|
||||
loadspritegfx ANIM_TAG_SMALL_EMBER
|
||||
loadspritegfx ANIM_TAG_FIRE_PLUME
|
||||
fadetobg BG_ICE
|
||||
waitbgfadeout
|
||||
createvisualtask AnimTask_StartSlidingBg, 0x5, 0x300, 0x0, 0x0, 0xffff
|
||||
@ -5635,6 +5634,8 @@ gBattleAnimMove_FrostBreath::
|
||||
waitforvisualfinish
|
||||
createsprite gFrostBreathBlueBreathTemplate, ANIM_TARGET, 2, 0x1e, 0xf, 0x0, 0xa, 0xa
|
||||
waitforvisualfinish
|
||||
unloadspritegfx ANIM_TAG_SMALL_EMBER
|
||||
loadspritegfx ANIM_TAG_FIRE_PLUME
|
||||
loopsewithpan SE_M_ICY_WIND, SOUND_PAN_TARGET, 0xb, 0x3
|
||||
createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 3, 25, 1
|
||||
createsprite gFrostBreathBlueRageTemplate, ANIM_TARGET, 66, 0x1, 0x5, 0x0
|
||||
@ -7718,7 +7719,6 @@ gBattleAnimMove_ParabolicCharge::
|
||||
loadspritegfx ANIM_TAG_SPARK
|
||||
loadspritegfx ANIM_TAG_LIGHTNING
|
||||
loadspritegfx ANIM_TAG_ORBS
|
||||
loadspritegfx ANIM_TAG_BLUE_STAR
|
||||
monbg ANIM_ATTACKER
|
||||
setalpha 12, 8
|
||||
createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 0, 6, RGB(18, 16, 3)
|
||||
@ -7741,6 +7741,11 @@ gBattleAnimMove_ParabolicCharge::
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 5, 4, 0, 0, 0, RGB_BLACK
|
||||
ParabolicChargeHeal:
|
||||
waitforvisualfinish
|
||||
unloadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT
|
||||
unloadspritegfx ANIM_TAG_ELECTRIC_ORBS
|
||||
unloadspritegfx ANIM_TAG_SPARK
|
||||
unloadspritegfx ANIM_TAG_LIGHTNING
|
||||
loadspritegfx ANIM_TAG_BLUE_STAR
|
||||
clearmonbg ANIM_ATTACKER
|
||||
waitforvisualfinish
|
||||
call HealingEffect
|
||||
@ -12314,14 +12319,13 @@ ZingZapSparks2:
|
||||
return
|
||||
|
||||
gBattleAnimMove_NaturesMadness::
|
||||
loadspritegfx ANIM_TAG_ICE_CRYSTALS @small circles
|
||||
loadspritegfx ANIM_TAG_THIN_RING @ring
|
||||
loadspritegfx ANIM_TAG_SPARKLE_2 @stars
|
||||
loadspritegfx ANIM_TAG_PINK_PETAL @pink
|
||||
loadspritegfx ANIM_TAG_ICE_CHUNK @blue green
|
||||
loadspritegfx ANIM_TAG_ICE_CRYSTALS @small circles CrystalsTemplate
|
||||
loadspritegfx ANIM_TAG_THIN_RING @ring PinkRingTemplate, GrayRingTemplate
|
||||
loadspritegfx ANIM_TAG_SPARKLE_2 @stars PinkStarsTemplate
|
||||
loadspritegfx ANIM_TAG_PINK_PETAL @pink PinkRingTemplate, PinkStarsTemplate
|
||||
loadspritegfx ANIM_TAG_ICE_CHUNK @blue green CrystalsTemplate
|
||||
loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge
|
||||
loadspritegfx ANIM_TAG_TEAL_ALERT @charge particles
|
||||
loadspritegfx ANIM_TAG_ECLIPSING_ORB @blue green
|
||||
monbg ANIM_ATTACKER
|
||||
setalpha 14, 8
|
||||
delay 0x1
|
||||
@ -12357,6 +12361,8 @@ gBattleAnimMove_NaturesMadness::
|
||||
delay 0x1
|
||||
monbg ANIM_TARGET
|
||||
waitforvisualfinish
|
||||
unloadspritegfx ANIM_TAG_SPARKLE_2
|
||||
loadspritegfx ANIM_TAG_ECLIPSING_ORB @blue green grayRing
|
||||
createsprite gNaturesMadnessGrayRingTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x1, 0x0
|
||||
playsewithpan SE_M_HEAL_BELL, SOUND_PAN_ATTACKER
|
||||
delay 0xe
|
||||
@ -13140,7 +13146,6 @@ gBattleAnimMove_StuffCheeks::
|
||||
loadspritegfx ANIM_TAG_BERRY_NORMAL
|
||||
loadspritegfx ANIM_TAG_SHARP_TEETH
|
||||
loadspritegfx ANIM_TAG_THIN_RING
|
||||
loadspritegfx ANIM_TAG_SPARKLE_2
|
||||
playsewithpan SE_M_METRONOME, 0xc0
|
||||
createsprite gFloatingBerryTemplate, ANIM_ATTACKER, 1, 0x0
|
||||
delay 0x45
|
||||
|
||||
@ -640,7 +640,7 @@ BattleScript_AffectionBasedStatus_HealFreezeString:
|
||||
printstring STRINGID_ATTACKERMELTEDTHEICE
|
||||
goto BattleScript_AffectionBasedStatusHeal_Continue
|
||||
BattleScript_AffectionBasedStatus_HealFrostbiteString:
|
||||
printstring STRINGID_ATTACKERMELTEDTHEICE
|
||||
printstring STRINGID_ATTACKERHEALEDITSFROSTBITE
|
||||
BattleScript_AffectionBasedStatusHeal_Continue:
|
||||
waitmessage B_WAIT_TIME_LONG
|
||||
clearstatus BS_ATTACKER
|
||||
@ -836,8 +836,8 @@ BattleScript_FlingMissed:
|
||||
ppreduce
|
||||
goto BattleScript_MoveMissedPause
|
||||
|
||||
BattleScript_EffectPhotonGeyser::
|
||||
setphotongeysercategory
|
||||
BattleScript_EffectDynamicCategory::
|
||||
setdynamicmovecategory
|
||||
goto BattleScript_EffectHit
|
||||
|
||||
BattleScript_EffectAuraWheel:: @ Aura Wheel can only be used by Morpeko
|
||||
@ -1034,6 +1034,7 @@ BattleScript_EffectCoaching::
|
||||
setallytonexttarget EffectCoaching_CheckAllyStats
|
||||
goto BattleScript_ButItFailed
|
||||
EffectCoaching_CheckAllyStats:
|
||||
accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON
|
||||
jumpifstat BS_TARGET, CMP_NOT_EQUAL, STAT_ATK, MAX_STAT_STAGE, BattleScript_CoachingWorks
|
||||
jumpifstat BS_TARGET, CMP_NOT_EQUAL, STAT_DEF, MAX_STAT_STAGE, BattleScript_CoachingWorks
|
||||
goto BattleScript_ButItFailed @ ally at max atk, def
|
||||
@ -1563,6 +1564,7 @@ BattleScript_RototillerMoveTargetEnd:
|
||||
moveendto MOVEEND_NEXT_TARGET
|
||||
addbyte gBattlerTarget, 1
|
||||
jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_RototillerLoop
|
||||
restoretarget
|
||||
end
|
||||
|
||||
BattleScript_RototillerCantRaiseMultipleStats:
|
||||
@ -1743,8 +1745,6 @@ BattleScript_EffectCopycat::
|
||||
trycopycat BattleScript_CopycatFail
|
||||
attackanimation
|
||||
waitanimation
|
||||
setbyte sB_ANIM_TURN, 0
|
||||
setbyte sB_ANIM_TARGETS_HIT, 0
|
||||
jumptocalledmove TRUE
|
||||
BattleScript_CopycatFail:
|
||||
ppreduce
|
||||
@ -1762,8 +1762,6 @@ BattleScript_EffectInstruct::
|
||||
copybyte gBattlerTarget, gEffectBattler
|
||||
printstring STRINGID_USEDINSTRUCTEDMOVE
|
||||
waitmessage B_WAIT_TIME_LONG
|
||||
setbyte sB_ANIM_TURN, 0
|
||||
setbyte sB_ANIM_TARGETS_HIT, 0
|
||||
jumptocalledmove TRUE
|
||||
|
||||
BattleScript_EffectAutotomize::
|
||||
@ -2187,8 +2185,6 @@ BattleScript_EffectMeFirst::
|
||||
trymefirst BattleScript_FailedFromPpReduce
|
||||
attackanimation
|
||||
waitanimation
|
||||
setbyte sB_ANIM_TURN, 0
|
||||
setbyte sB_ANIM_TARGETS_HIT, 0
|
||||
jumptocalledmove TRUE
|
||||
|
||||
BattleScript_EffectAttackSpAttackUp::
|
||||
@ -3657,12 +3653,12 @@ BattleScript_EffectParalyze::
|
||||
jumpifmovehadnoeffect BattleScript_ButItFailed
|
||||
jumpifstatus BS_TARGET, STATUS1_PARALYSIS, BattleScript_AlreadyParalyzed
|
||||
jumpifelectricabilityaffected BS_TARGET, ABILITY_VOLT_ABSORB, BattleScript_VoltAbsorbHeal
|
||||
clearmoveresultflags MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE
|
||||
tryparalyzetype BS_ATTACKER, BS_TARGET, BattleScript_NotAffected
|
||||
jumpifstatus BS_TARGET, STATUS1_ANY, BattleScript_ButItFailed
|
||||
jumpifterrainaffected BS_TARGET, STATUS_FIELD_MISTY_TERRAIN, BattleScript_MistyTerrainPrevents
|
||||
accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE
|
||||
jumpifsafeguard BattleScript_SafeguardProtected
|
||||
clearmoveresultflags MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE
|
||||
attackanimation
|
||||
waitanimation
|
||||
seteffectprimary MOVE_EFFECT_PARALYSIS
|
||||
@ -3781,6 +3777,7 @@ BattleScript_TwoTurnMovesSecondTurn::
|
||||
|
||||
BattleScript_TwoTurnMovesSecondTurnRet:
|
||||
setbyte sB_ANIM_TURN, 1
|
||||
setbyte sB_ANIM_TARGETS_HIT, 0
|
||||
clearstatusfromeffect BS_ATTACKER, MOVE_EFFECT_CHARGING
|
||||
clearsemiinvulnerablebit @ only for moves with EFFECT_SEMI_INVULNERABLE/EFFECT_SKY_DROP
|
||||
return
|
||||
@ -3843,8 +3840,6 @@ BattleScript_EffectMetronome::
|
||||
pause B_WAIT_TIME_SHORT
|
||||
attackanimation
|
||||
waitanimation
|
||||
setbyte sB_ANIM_TURN, 0
|
||||
setbyte sB_ANIM_TARGETS_HIT, 0
|
||||
metronome
|
||||
|
||||
BattleScript_EffectLeechSeed::
|
||||
@ -4051,8 +4046,6 @@ BattleScript_SleepTalkIsAsleep::
|
||||
BattleScript_SleepTalkUsingMove::
|
||||
attackanimation
|
||||
waitanimation
|
||||
setbyte sB_ANIM_TURN, 0
|
||||
setbyte sB_ANIM_TARGETS_HIT, 0
|
||||
jumptocalledmove TRUE
|
||||
|
||||
BattleScript_EffectDestinyBond::
|
||||
@ -4167,11 +4160,15 @@ BattleScript_CurseTrySpeed::
|
||||
setbyte sB_ANIM_TURN, 1
|
||||
attackanimation
|
||||
waitanimation
|
||||
setbyte sSTAT_ANIM_PLAYED, FALSE
|
||||
playstatchangeanimation BS_ATTACKER, BIT_SPEED, STAT_CHANGE_NEGATIVE
|
||||
setstatchanger STAT_SPEED, 1, TRUE
|
||||
statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_CurseTryAttack
|
||||
printfromtable gStatDownStringIds
|
||||
waitmessage B_WAIT_TIME_LONG
|
||||
BattleScript_CurseTryAttack::
|
||||
setbyte sSTAT_ANIM_PLAYED, FALSE
|
||||
playstatchangeanimation BS_ATTACKER, BIT_ATK | BIT_DEF, 0
|
||||
setstatchanger STAT_ATK, 1, FALSE
|
||||
statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_CurseTryDefense
|
||||
printfromtable gStatUpStringIds
|
||||
@ -5070,8 +5067,6 @@ BattleScript_EffectAssist::
|
||||
assistattackselect BattleScript_FailedFromPpReduce
|
||||
attackanimation
|
||||
waitanimation
|
||||
setbyte sB_ANIM_TURN, 0
|
||||
setbyte sB_ANIM_TARGETS_HIT, 0
|
||||
jumptocalledmove TRUE
|
||||
|
||||
BattleScript_EffectIngrain::
|
||||
@ -5112,6 +5107,7 @@ BattleScript_EffectBrickBreak::
|
||||
accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
|
||||
attackstring
|
||||
ppreduce
|
||||
typecalc
|
||||
removelightscreenreflect
|
||||
critcalc
|
||||
damagecalc
|
||||
@ -8675,8 +8671,6 @@ BattleScript_BattleBondActivatesOnMoveEndAttacker::
|
||||
BattleScript_DancerActivates::
|
||||
call BattleScript_AbilityPopUp
|
||||
waitmessage B_WAIT_TIME_SHORT
|
||||
setbyte sB_ANIM_TURN, 0
|
||||
setbyte sB_ANIM_TARGETS_HIT, 0
|
||||
orword gHitMarker, HITMARKER_ALLOW_NO_PP
|
||||
jumptocalledmove TRUE
|
||||
|
||||
|
||||
@ -118,7 +118,6 @@ EventScript_FollowerSwap:
|
||||
return
|
||||
|
||||
EventScript_FollowerMoveNorth:
|
||||
applymovement OBJ_EVENT_ID_FOLLOWER, Movement_WalkUp
|
||||
applymovement OBJ_EVENT_ID_PLAYER, Movement_WalkDown
|
||||
waitmovement 0
|
||||
applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_FaceUp
|
||||
@ -126,7 +125,6 @@ EventScript_FollowerMoveNorth:
|
||||
return
|
||||
|
||||
EventScript_FollowerMoveEast:
|
||||
applymovement OBJ_EVENT_ID_FOLLOWER, Movement_WalkRight
|
||||
applymovement OBJ_EVENT_ID_PLAYER, Movement_WalkLeft
|
||||
waitmovement 0
|
||||
applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_FaceRight
|
||||
@ -134,7 +132,6 @@ EventScript_FollowerMoveEast:
|
||||
return
|
||||
|
||||
EventScript_FollowerMoveSouth:
|
||||
applymovement OBJ_EVENT_ID_FOLLOWER, Movement_WalkDown
|
||||
applymovement OBJ_EVENT_ID_PLAYER, Movement_WalkUp
|
||||
waitmovement 0
|
||||
applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_FaceDown
|
||||
@ -142,7 +139,6 @@ EventScript_FollowerMoveSouth:
|
||||
return
|
||||
|
||||
EventScript_FollowerMoveWest:
|
||||
applymovement OBJ_EVENT_ID_FOLLOWER, Movement_WalkLeft
|
||||
applymovement OBJ_EVENT_ID_PLAYER, Movement_WalkRight
|
||||
waitmovement 0
|
||||
applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_FaceLeft
|
||||
|
||||
@ -33,7 +33,8 @@ EventScript_PkmnCenterNurse_IllTakeYourPkmn2::
|
||||
return
|
||||
|
||||
EventScript_PkmnCenterNurse_TakeAndHealPkmn::
|
||||
applymovement VAR_0x800B, Movement_PkmnCenterNurse_Turn @ Changed from Common_Movement_WalkInPlaceFasterLeft to force the follower to enter their Poké Ball
|
||||
hidefollower 0
|
||||
applymovement VAR_0x800B, Movement_PkmnCenterNurse_Turn
|
||||
waitmovement 0
|
||||
dofieldeffect FLDEFF_POKECENTER_HEAL
|
||||
.if OW_UNION_DISABLE_CHECK == FALSE && OW_FLAG_MOVE_UNION_ROOM_CHECK != 0
|
||||
|
||||
@ -8,11 +8,13 @@ Std_MsgboxNPC:
|
||||
return
|
||||
|
||||
Std_MsgboxSign:
|
||||
setflag FLAG_SAFE_FOLLOWER_MOVEMENT
|
||||
lockall
|
||||
message NULL
|
||||
waitmessage
|
||||
waitbuttonpress
|
||||
releaseall
|
||||
clearflag FLAG_SAFE_FOLLOWER_MOVEMENT
|
||||
return
|
||||
|
||||
Std_MsgboxDefault:
|
||||
|
||||
@ -20,7 +20,10 @@
|
||||
- [How to use the Testing System](tutorials/how_to_testing_system.md)
|
||||
- [How to add new Trainer Slides](tutorials/how_to_new_trainer_slide.md)
|
||||
- [Changelog](./CHANGELOG.md)
|
||||
- [1.11.x]()
|
||||
- [Version 1.11.0](changelogs/1.11.x/1.11.0.md)
|
||||
- [1.10.x]()
|
||||
- [Version 1.10.3](changelogs/1.10.x/1.10.3.md)
|
||||
- [Version 1.10.2](changelogs/1.10.x/1.10.2.md)
|
||||
- [Version 1.10.1](changelogs/1.10.x/1.10.1.md)
|
||||
- [Version 1.10.0](changelogs/1.10.x/1.10.0.md)
|
||||
|
||||
120
docs/changelogs/1.10.x/1.10.3.md
Normal file
@ -0,0 +1,120 @@
|
||||
```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 test
|
||||
`.
|
||||
```
|
||||
|
||||
|
||||
## 🧬 General 🧬
|
||||
### Fixed
|
||||
* Fix Using a Safari Ball crashes the game #6206 by @ExMingYan in [#6220](https://github.com/rh-hideout/pokeemerald-expansion/pull/6220)
|
||||
* Try a new solution to Fix Safari #6206 by @ExMingYan in [#6228](https://github.com/rh-hideout/pokeemerald-expansion/pull/6228)
|
||||
* Remove obsolete check for steven when retrieving partner name by @u8-Salem and @hedara90 in [#6283](https://github.com/rh-hideout/pokeemerald-expansion/pull/6283)
|
||||
* Fix spit up getting skipped by @cawtds in [#6295](https://github.com/rh-hideout/pokeemerald-expansion/pull/6295)
|
||||
|
||||
## 🗺️ Overworld 🗺️
|
||||
### Changed
|
||||
* Merrp merge (12th of February) by @hedara90 in [#6244](https://github.com/rh-hideout/pokeemerald-expansion/pull/6244)
|
||||
|
||||
### Fixed
|
||||
* Follower Object Event refactor by @hedara90 and @AsparagusEduardo in [#6129](https://github.com/rh-hideout/pokeemerald-expansion/pull/6129)
|
||||
- Adds `OBJ_EVENT_GFX_SPECIES_FEMALE` and `OBJ_EVENT_GFX_SPECIES_SHINY_FEMALE`
|
||||
* Fixed Kecleon Shiny palette by @hedara90 in [#6298](https://github.com/rh-hideout/pokeemerald-expansion/pull/6298)
|
||||
* Shifted the follower graphicsIds by @hedara90 in [#6329](https://github.com/rh-hideout/pokeemerald-expansion/pull/6329)
|
||||
|
||||
## 🐉 Pokémon 🐉
|
||||
### Changed
|
||||
* Add Poltchageist family form data by @Bassoonian and @wiz1989 in [#6163](https://github.com/rh-hideout/pokeemerald-expansion/pull/6163)
|
||||
|
||||
### Fixed
|
||||
* Fixed non-regional forms breeding incorrectly by @AsparagusEduardo and @cawtds in [#4985](https://github.com/rh-hideout/pokeemerald-expansion/pull/4985)
|
||||
* Fixed compilation error when turning P_GENDER_DIFFERENCES off by @AsparagusEduardo in [#6223](https://github.com/rh-hideout/pokeemerald-expansion/pull/6223)
|
||||
|
||||
## ⚔️ Battle General ⚔️
|
||||
### Fixed
|
||||
* Fixes battler mutation during the intim script by @AlexOn1ine in [#6151](https://github.com/rh-hideout/pokeemerald-expansion/pull/6151)
|
||||
* Fixes Dynamic Moves types in SumScreen while in Battle by @AlexOn1ine in [#6145](https://github.com/rh-hideout/pokeemerald-expansion/pull/6145)
|
||||
* Fixes Dragon Tail missing timing against Rocky Helmet / Iron Barbs by @AlexOn1ine in [#6154](https://github.com/rh-hideout/pokeemerald-expansion/pull/6154)
|
||||
* Prevent sameMoveTurns from incrementing when unable to use move by @moostoet in [#6167](https://github.com/rh-hideout/pokeemerald-expansion/pull/6167)
|
||||
* Fixes Suction Cups ability popup and Red Card + Guard Dog interaction by @PhallenTree in [#6171](https://github.com/rh-hideout/pokeemerald-expansion/pull/6171)
|
||||
* Fixed Unnerve message and wrote tests by @hedara90 in [#6192](https://github.com/rh-hideout/pokeemerald-expansion/pull/6192)
|
||||
* Fixes Spectral Thief stealing boost at the wrong time by @AlexOn1ine in [#6197](https://github.com/rh-hideout/pokeemerald-expansion/pull/6197)
|
||||
* Fixes BATTLER_TURN_DAMAGED battler id by @AlexOn1ine in [#6236](https://github.com/rh-hideout/pokeemerald-expansion/pull/6236)
|
||||
* Fixed multi battle forced switches by @hedara90 in [#6243](https://github.com/rh-hideout/pokeemerald-expansion/pull/6243)
|
||||
* Fixes ability Embody Aspect triggering multiple times by @AlexOn1ine in [#6259](https://github.com/rh-hideout/pokeemerald-expansion/pull/6259)
|
||||
* Fixes Called moves ignoring redirection by @PhallenTree in [#6267](https://github.com/rh-hideout/pokeemerald-expansion/pull/6267)
|
||||
* Fixes Protean not restoring types after ai damage calcs by @AlexOn1ine in [#6280](https://github.com/rh-hideout/pokeemerald-expansion/pull/6280)
|
||||
* Restoretarget in Rototiller script + Tests by @AlexOn1ine in [#6296](https://github.com/rh-hideout/pokeemerald-expansion/pull/6296)
|
||||
* Fixes Brick Break/Psychic Fangs/Raging Bull breaking screens if target is immune by @PhallenTree in [#6308](https://github.com/rh-hideout/pokeemerald-expansion/pull/6308)
|
||||
* Fixes intimidate missing timing during a mega evo / switch by @AlexOn1ine in [#6322](https://github.com/rh-hideout/pokeemerald-expansion/pull/6322)
|
||||
* Fixes Coaching on semi-invulnerable ally, Air Balloon being stolen, Immunity abilities being ignored by Mold Breaker by @PhallenTree in [#6327](https://github.com/rh-hideout/pokeemerald-expansion/pull/6327)
|
||||
* Fixes effect paralyze not being absorbed by absorbing abilities by @AlexOn1ine in [#6338](https://github.com/rh-hideout/pokeemerald-expansion/pull/6338)
|
||||
* Added MOVE_TARGET_OPPONENT and added it to Me First, by @hedara90 in [#6336](https://github.com/rh-hideout/pokeemerald-expansion/pull/6336)
|
||||
* Fixes recoil moves causing recoil when absorbed by @AlexOn1ine in [#6341](https://github.com/rh-hideout/pokeemerald-expansion/pull/6341)
|
||||
* Fixed protect not resetting the counter in earlier gens by @hedara90 in [#6342](https://github.com/rh-hideout/pokeemerald-expansion/pull/6342)
|
||||
|
||||
## 🤹 Moves 🤹
|
||||
### Added
|
||||
* Added missing in-battle "Move Info" button prompt by @AsparagusEduardo and @TeamAquasHideout from who I got the source from and @BelialClover from who Archie got the source from. in [#6155](https://github.com/rh-hideout/pokeemerald-expansion/pull/6155)
|
||||
|
||||
### Changed
|
||||
* Fixes non-Ghost type Curse animation by @PhallenTree in [#6299](https://github.com/rh-hideout/pokeemerald-expansion/pull/6299)
|
||||
|
||||
### Fixed
|
||||
* Fixed Future Sight not being affected by Electrify by @AsparagusEduardo in [#6213](https://github.com/rh-hideout/pokeemerald-expansion/pull/6213)
|
||||
* Fixes Expanding Force and Spectral Thief move animations by @PhallenTree in [#6185](https://github.com/rh-hideout/pokeemerald-expansion/pull/6185)
|
||||
|
||||
## 🧶 Items 🧶
|
||||
### Fixed
|
||||
* Fixed curing status2 with items in double battles by @hedara90 and @wiz1989 in [#6335](https://github.com/rh-hideout/pokeemerald-expansion/pull/6335)
|
||||
|
||||
## 🤖 Battle AI 🤖
|
||||
### Fixed
|
||||
* Fix AI wrongly thinking it strikes first with priority even if player is using priority themselves by @moostoet in [#6274](https://github.com/rh-hideout/pokeemerald-expansion/pull/6274)
|
||||
* Big Root AI Fix by @Pawkkie in [#6309](https://github.com/rh-hideout/pokeemerald-expansion/pull/6309)
|
||||
* Fix AI hold effect considerations by @Pawkkie in [#6310](https://github.com/rh-hideout/pokeemerald-expansion/pull/6310)
|
||||
* fix for multi 2vs1 opponent sends out too many mons bug by @Bivurnum in [#6324](https://github.com/rh-hideout/pokeemerald-expansion/pull/6324)
|
||||
|
||||
## 🧹 Other Cleanup 🧹
|
||||
* Cleanup some global battler ID usage by @ghoulslash in [#6181](https://github.com/rh-hideout/pokeemerald-expansion/pull/6181)
|
||||
* Fix typo in Nuzzle's description by @Bassoonian in [#6209](https://github.com/rh-hideout/pokeemerald-expansion/pull/6209)
|
||||
* Remove whitespace from trainers data file by @AsparagusEduardo in [#6234](https://github.com/rh-hideout/pokeemerald-expansion/pull/6234)
|
||||
* Changed bit order for follower graphicsId creation by @hedara90 in [#6249](https://github.com/rh-hideout/pokeemerald-expansion/pull/6249)
|
||||
* Use more accurate count in MovesInfo by @AlexOn1ine in [#6260](https://github.com/rh-hideout/pokeemerald-expansion/pull/6260)
|
||||
* Fix Extra `task->tState++` and `break` in `Task_DrawFieldMessageBox` by @Deokishisu in [#6261](https://github.com/rh-hideout/pokeemerald-expansion/pull/6261)
|
||||
* Resized gimmick indicators to reduce VRAM usage by @hedara90 in [#6319](https://github.com/rh-hideout/pokeemerald-expansion/pull/6319)
|
||||
|
||||
## 🧪 Test Runner 🧪
|
||||
### Changed
|
||||
* Tests for Big Pecks by @hedara90 in [#6158](https://github.com/rh-hideout/pokeemerald-expansion/pull/6158)
|
||||
* Water Compaction tests by @hedara90 in [#6159](https://github.com/rh-hideout/pokeemerald-expansion/pull/6159)
|
||||
* Wrote tests for Electrify by @hedara90 in [#6179](https://github.com/rh-hideout/pokeemerald-expansion/pull/6179)
|
||||
* Sheer Force Test Fixes by @ghoulslash in [#6198](https://github.com/rh-hideout/pokeemerald-expansion/pull/6198)
|
||||
* Minor Terrain Seed Test Improvement by @ghoulslash in [#6207](https://github.com/rh-hideout/pokeemerald-expansion/pull/6207)
|
||||
* Added test support for 5 battle configs by @AsparagusEduardo in [#5914](https://github.com/rh-hideout/pokeemerald-expansion/pull/5914)
|
||||
* Added missing Dream Eater and Reflect Type tests by @AsparagusEduardo in [#6245](https://github.com/rh-hideout/pokeemerald-expansion/pull/6245)
|
||||
|
||||
### Fixed
|
||||
* Fixes Brick Break/Psychic Fangs/Raging Bull breaking screens if target is immune by @PhallenTree in [#6308](https://github.com/rh-hideout/pokeemerald-expansion/pull/6308)
|
||||
|
||||
## 📚 Documentation 📚
|
||||
* Update how_to_testing_system.md by @hedara90 in [#6281](https://github.com/rh-hideout/pokeemerald-expansion/pull/6281)
|
||||
* Update SCOPE.md with Intergenerational Feature Compatibility by @Pawkkie in [#6325](https://github.com/rh-hideout/pokeemerald-expansion/pull/6325)
|
||||
|
||||
## 📦 Branch Synchronisation 📦
|
||||
### pret
|
||||
* 11th of February in [#6231](https://github.com/rh-hideout/pokeemerald-expansion/pull/6231)
|
||||
* Replace easy_chat alphabetialOrder magic numbers with EC_INDEX values by @rayrobdod in [pret#2096](https://github.com/pret/pokeemerald/pull/2096)
|
||||
* Fixed switchout bug in multibattle where order of mons gets messed up by @shachar700 in [pret#2099](https://github.com/pret/pokeemerald/pull/2099)
|
||||
|
||||
## New Contributors
|
||||
* @ExMingYan made their first contribution in [#6220](https://github.com/rh-hideout/pokeemerald-expansion/pull/6220)
|
||||
* @Deokishisu made their first contribution in [#6261](https://github.com/rh-hideout/pokeemerald-expansion/pull/6261)
|
||||
* @Bivurnum made their first contribution in [#6324](https://github.com/rh-hideout/pokeemerald-expansion/pull/6324)
|
||||
|
||||
**Full Changelog**: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.10.2...test
|
||||
|
||||
|
||||
<!--Last PR: 6342-->
|
||||
<!--Used to keep track of the last PR merged in case new ones come in before the changelog is done.-->
|
||||
385
docs/changelogs/1.11.x/1.11.0.md
Normal file
@ -0,0 +1,385 @@
|
||||
```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 test
|
||||
`.
|
||||
```
|
||||
|
||||
## 🌋 *REFACTORS* 🌋
|
||||
📜 = Uses a migration script.
|
||||
* Pursuit refactor by @PhallenTree in [#5707](https://github.com/rh-hideout/pokeemerald-expansion/pull/5707)
|
||||
* Atk Canceller refactor / reorder / clean up by @AlexOn1ine in [#5885](https://github.com/rh-hideout/pokeemerald-expansion/pull/5885)
|
||||
* Battle Weather Refactor by @AlexOn1ine in [#5833](https://github.com/rh-hideout/pokeemerald-expansion/pull/5833)
|
||||
* Replace WEATHER_HAS_EFFECT with HasWeatherEffect by @AlexOn1ine in [#6069](https://github.com/rh-hideout/pokeemerald-expansion/pull/6069)
|
||||
* Cleaned up Trainer Slides, added automated Trainer Slide tests, add new Enemy Critical Hit Slide by @pkmnsnfrn and @AlexOn1ine, @hedara90, @AsparagusEduardo, @mrgriffin in [#6018](https://github.com/rh-hideout/pokeemerald-expansion/pull/6018)
|
||||
* If users created new entries in sTrainerSlides, they will need to be ported to the new system.
|
||||
* Introduces BattleTurnCounter to simplify timer checks by @AlexOn1ine in [#6080](https://github.com/rh-hideout/pokeemerald-expansion/pull/6080)
|
||||
* Convert max effects to normal move effects by @AlexOn1ine in [#6143](https://github.com/rh-hideout/pokeemerald-expansion/pull/6143)
|
||||
* Redefine IsBattlerAlive in battle.h as a static inline by @AlexOn1ine in [#6211](https://github.com/rh-hideout/pokeemerald-expansion/pull/6211)
|
||||
* Consolidated Frontier teams into battle_frontier_trainers.h by @fdeblasio in [#5892](https://github.com/rh-hideout/pokeemerald-expansion/pull/5892)
|
||||
|
||||
## 🧬 General 🧬
|
||||
### Added
|
||||
* Add Script Cmd for Forcing Save Game by @ghoulslash in [#6090](https://github.com/rh-hideout/pokeemerald-expansion/pull/6090)
|
||||
* Trainer Party Pools by @hedara90 in [#5731](https://github.com/rh-hideout/pokeemerald-expansion/pull/5731)
|
||||
- Documentation on how to use this can be found under `docs/tutorials/how_to_trainer_party_pool.md`
|
||||
* Add Code Entry functionality by @Pawkkie and @PCG06 for the Mystery Gift iteration in [#5951](https://github.com/rh-hideout/pokeemerald-expansion/pull/5951)
|
||||
|
||||
### Changed
|
||||
* Added "Game Clear" flag toggle to debug menu by @AsparagusEduardo in [#5929](https://github.com/rh-hideout/pokeemerald-expansion/pull/5929)
|
||||
* Initialize m4a and IRQ handler in a loaded section by @SBird1337 in [#5912](https://github.com/rh-hideout/pokeemerald-expansion/pull/5912)
|
||||
* Debug menu and `createmon` additions/cleanup by @AsparagusEduardo in [#5994](https://github.com/rh-hideout/pokeemerald-expansion/pull/5994)
|
||||
- Added Tera Type, Dynamax Level, and Gigantamax Factor to the "Give Pokémon (complex)" debug menu option.
|
||||
- Added `dmaxLevel` option to `givemon` and `createmon`.
|
||||
- Added `WEATHER_COUNT`.
|
||||
- Cleaned up repeated code instances in debug menu.
|
||||
- Fixed mislabel of `ggMaxFactor` in `givemon` and `createmon`. Now it's `gmaxFactor`.
|
||||
* Introduces BattlerState struct for the Battle Engine by @AlexOn1ine and @mrgriffin provided the framework for this change in [#5954](https://github.com/rh-hideout/pokeemerald-expansion/pull/5954)
|
||||
* Reorder Makefile rules so that pokeemerald-test.elf builds in build/test by @mrgriffin in [#6004](https://github.com/rh-hideout/pokeemerald-expansion/pull/6004)
|
||||
* Use SET8 and SET32 consistently by @AZero13 in [#5544](https://github.com/rh-hideout/pokeemerald-expansion/pull/5544)
|
||||
* Ewram and unused function cleanup sweep by @hedara90 in [#6019](https://github.com/rh-hideout/pokeemerald-expansion/pull/6019)
|
||||
* Re-removed trainers.h trailing whitespace by @fdeblasio in [#6048](https://github.com/rh-hideout/pokeemerald-expansion/pull/6048)
|
||||
* Add Steven Multi to debug menu by @Pawkkie in [#6064](https://github.com/rh-hideout/pokeemerald-expansion/pull/6064)
|
||||
* Remove gDecompressionBuffer by @DizzyEggg in [#6029](https://github.com/rh-hideout/pokeemerald-expansion/pull/6029)
|
||||
* Trainer Battle Parameter Consolidation by @u8-Salem in [#5982](https://github.com/rh-hideout/pokeemerald-expansion/pull/5982)
|
||||
Breaking: raw uses of `trainerbattle` need to be adjusted to provide all possible parameter. Unused parameter musst be 0 or an alias. already parameterized macros like `trainerbattle_single` work out of the box.
|
||||
* Consolidated contest opponent filters into gContestOpponents by @fdeblasio in [#6119](https://github.com/rh-hideout/pokeemerald-expansion/pull/6119)
|
||||
* Don't use SeedRng some places where it isn't necessary by @tertu-m in [#6156](https://github.com/rh-hideout/pokeemerald-expansion/pull/6156)
|
||||
* Removed Trainer Slides footgun by @AsparagusEduardo in [#6205](https://github.com/rh-hideout/pokeemerald-expansion/pull/6205)
|
||||
* Consolidate duplicate dialogue of nature girl in Battle Frontier by @fdeblasio in [#6195](https://github.com/rh-hideout/pokeemerald-expansion/pull/6195)
|
||||
* Prevented fanfares from playing in headless mode by @pkmnsnfrn and @hedara90, @AsparagusEduardo in [#6219](https://github.com/rh-hideout/pokeemerald-expansion/pull/6219)
|
||||
|
||||
### Fixed
|
||||
* Don't write to NULL in TryFindHiddenPokemon by @DizzyEggg in [#5983](https://github.com/rh-hideout/pokeemerald-expansion/pull/5983)
|
||||
* Allow Party Menu with 0 Pokemon by @DizzyEggg in [#5997](https://github.com/rh-hideout/pokeemerald-expansion/pull/5997)
|
||||
* Revert map related enum conversion by @hedara90 in [#6078](https://github.com/rh-hideout/pokeemerald-expansion/pull/6078)
|
||||
* Revert "Revert map related enum conversion" by @hedara90 in [#6079](https://github.com/rh-hideout/pokeemerald-expansion/pull/6079)
|
||||
* Revert "Converts a bunch of defines to enums" by @Bassoonian in [#6082](https://github.com/rh-hideout/pokeemerald-expansion/pull/6082)
|
||||
* Fix upcoming not working on no cash by @DizzyEggg in [#6121](https://github.com/rh-hideout/pokeemerald-expansion/pull/6121)
|
||||
* Add the header required for TPP tags to work by @hedara90 in [#6162](https://github.com/rh-hideout/pokeemerald-expansion/pull/6162)
|
||||
* Fixed regression from master/upcoming merge by @AsparagusEduardo and @hedara90 , for doing the original merge when I couldn't in [#6199](https://github.com/rh-hideout/pokeemerald-expansion/pull/6199)
|
||||
* Fix Using a Safari Ball crashes the game #6206 by @ExMingYan in [#6220](https://github.com/rh-hideout/pokeemerald-expansion/pull/6220)
|
||||
* Fixed typo in requests_effects by @hedara90 and @purrfectdoodle in [#6215](https://github.com/rh-hideout/pokeemerald-expansion/pull/6215)
|
||||
* Try a new solution to Fix Safari #6206 by @ExMingYan in [#6228](https://github.com/rh-hideout/pokeemerald-expansion/pull/6228)
|
||||
* Remove obsolete check for steven when retrieving partner name by @u8-Salem and @hedara90 in [#6283](https://github.com/rh-hideout/pokeemerald-expansion/pull/6283)
|
||||
* Fix spit up getting skipped by @cawtds in [#6295](https://github.com/rh-hideout/pokeemerald-expansion/pull/6295)
|
||||
|
||||
## 🗺️ Overworld 🗺️
|
||||
### Added
|
||||
* Adds Dexnav by @ghoulslash in [#4818](https://github.com/rh-hideout/pokeemerald-expansion/pull/4818)
|
||||
* Fly from Pokenav by @khbsd in [#5679](https://github.com/rh-hideout/pokeemerald-expansion/pull/5679)
|
||||
* Expanded Pokémon Follower transformation functionality by @AsparagusEduardo in [#5048](https://github.com/rh-hideout/pokeemerald-expansion/pull/5048)
|
||||
|
||||
### Changed
|
||||
* Arbitrary trainer scripts + on frame/trigger softlock prevention by @mrgriffin in [#5033](https://github.com/rh-hideout/pokeemerald-expansion/pull/5033)
|
||||
* Removed OW_AUTO_SIGNPOST by @pkmnsnfrn in [#5974](https://github.com/rh-hideout/pokeemerald-expansion/pull/5974)
|
||||
* Fix leftover test change from #5033 by @mrgriffin in [#5987](https://github.com/rh-hideout/pokeemerald-expansion/pull/5987)
|
||||
* Match current gen behavior for battle environment after fishing by @kittenchilly in [#6099](https://github.com/rh-hideout/pokeemerald-expansion/pull/6099)
|
||||
* Add Mega Evolution, Primal Reversion, and Ultra Necrozma overworld sprites by @khbsd in [#5874](https://github.com/rh-hideout/pokeemerald-expansion/pull/5874)
|
||||
* Replaced hardcoded numbers in DexNav with variables by @fdeblasio in [#6241](https://github.com/rh-hideout/pokeemerald-expansion/pull/6241)
|
||||
* Merrp merge (12th of February) by @hedara90 in [#6244](https://github.com/rh-hideout/pokeemerald-expansion/pull/6244)
|
||||
* Adds a follower flag define to disable followers on the fly by @AlexOn1ine in [#6174](https://github.com/rh-hideout/pokeemerald-expansion/pull/6174)
|
||||
|
||||
### Fixed
|
||||
* Fix Trainer Hill OOB array access by @SBird1337 in [#5930](https://github.com/rh-hideout/pokeemerald-expansion/pull/5930)
|
||||
* Revert #5033 change to MapHeaderRunScriptType by @mrgriffin in [#5975](https://github.com/rh-hideout/pokeemerald-expansion/pull/5975)
|
||||
* Restore lock/lockall/locktrainer/release/releaseall in triggers by @mrgriffin in [#5976](https://github.com/rh-hideout/pokeemerald-expansion/pull/5976)
|
||||
* Follower Object Event refactor by @hedara90 and @AsparagusEduardo in [#6129](https://github.com/rh-hideout/pokeemerald-expansion/pull/6129)
|
||||
- Fixes `OBJ_EVENT_GFX_SPECIES_SHINY`
|
||||
- Adds `OBJ_EVENT_GFX_SPECIES_FEMALE` and `OBJ_EVENT_GFX_SPECIES_SHINY_FEMALE`
|
||||
* Fixes Static Assert from pr #6174 by @AlexOn1ine in [#6258](https://github.com/rh-hideout/pokeemerald-expansion/pull/6258)
|
||||
* Fixed Kecleon Shiny palette by @hedara90 in [#6298](https://github.com/rh-hideout/pokeemerald-expansion/pull/6298)
|
||||
|
||||
## 🐉 Pokémon 🐉
|
||||
### Added
|
||||
* IV/EV Info on Summary Screen by @khbsd in [#6027](https://github.com/rh-hideout/pokeemerald-expansion/pull/6027)
|
||||
* Add caught mon to full party by sending a different mon to the Box by @fakuzatsu in [#6058](https://github.com/rh-hideout/pokeemerald-expansion/pull/6058)
|
||||
|
||||
### Changed
|
||||
* Remove form change function footguns by @AsparagusEduardo and @AlexOn1ine for letting me know of this potential issue. in [#5995](https://github.com/rh-hideout/pokeemerald-expansion/pull/5995)
|
||||
- `GetBattleFormChangeTargetSpecies`, `GetFormChangeTargetSpecies` and `GetFormChangeTargetSpeciesBoxMon` now return the current species of the Pokémon instead of `SPECIES_NONE` as a precaution to avoid accidental deletions of Pokémon when using these functions.
|
||||
* Remove redundant calls to GetMonData in pokemon.c by @AZero13 in [#5545](https://github.com/rh-hideout/pokeemerald-expansion/pull/5545)
|
||||
* Rename Furfrou Species tags to match Pokemon Showdown exports by @moostoet in [#6041](https://github.com/rh-hideout/pokeemerald-expansion/pull/6041)
|
||||
* Add Mega Evolution, Primal Reversion, and Ultra Necrozma overworld sprites by @khbsd in [#5874](https://github.com/rh-hideout/pokeemerald-expansion/pull/5874)
|
||||
* Add Poltchageist family form data by @Bassoonian and @wiz1989 in [#6163](https://github.com/rh-hideout/pokeemerald-expansion/pull/6163)
|
||||
|
||||
### Fixed
|
||||
* Evolution level 1 learn by @hedara90 in [#5791](https://github.com/rh-hideout/pokeemerald-expansion/pull/5791)
|
||||
* Fixed non-regional forms breeding incorrectly by @AsparagusEduardo and @cawtds in [#4985](https://github.com/rh-hideout/pokeemerald-expansion/pull/4985)
|
||||
* Fixed compilation error when turning P_GENDER_DIFFERENCES off by @AsparagusEduardo in [#6223](https://github.com/rh-hideout/pokeemerald-expansion/pull/6223)
|
||||
* Reverted compound literal OW mon pic tables by @AsparagusEduardo in [#6216](https://github.com/rh-hideout/pokeemerald-expansion/pull/6216)
|
||||
|
||||
## ⚔️ Battle General ⚔️
|
||||
### Added
|
||||
* Add B_FLAG_SLEEP_CLAUSE by @Pawkkie, @Pawkkie and @iriv24 in [#5566](https://github.com/rh-hideout/pokeemerald-expansion/pull/5566)
|
||||
- Based on Smogon's sleep clause [philosophy](https://www.smogon.com/xy/articles/clauses#:~:text=Sleep%20Clause,t%20be%20put%20to%20sleep.)
|
||||
- Toggleable per-battle by setting / unsetting the flag assigned to B_FLAG_SLEEP_CLAUSE
|
||||
* Variadic IS_BATTLER_OF_TYPE and GetBattlerTypes by @mrgriffin in [#5708](https://github.com/rh-hideout/pokeemerald-expansion/pull/5708)
|
||||
* Simultaneous HP Reduction (CFRU Port) by @AsparagusEduardo and @AlexOn1ine for the port to expansion. @Skeli789 for the CFRU implementation. in [#5770](https://github.com/rh-hideout/pokeemerald-expansion/pull/5770)
|
||||
* Destiny Bond fails on repeated use in Gen 7+ by @Pawkkie in [#5652](https://github.com/rh-hideout/pokeemerald-expansion/pull/5652)
|
||||
* Adds Pledge Side Statuses as Starting Statuses by @AlexOn1ine in [#5899](https://github.com/rh-hideout/pokeemerald-expansion/pull/5899)
|
||||
* Adds B_VAR_DIFFICULTY and related functions READ DESC by @pkmnsnfrn in [#5337](https://github.com/rh-hideout/pokeemerald-expansion/pull/5337)
|
||||
* Config for move slot rearrangement in battle by @hedara90 and @ghoulslash for pointing out the exact point in the code where move slot rearrangement is handled. in [#6017](https://github.com/rh-hideout/pokeemerald-expansion/pull/6017)
|
||||
- Move slot rearrangement is disabled by default in battle, set `B_MOVE_REARRANGEMENT_IN_BATTLE` to `GEN_3` to enable rearrangement again.
|
||||
|
||||
### Changed
|
||||
* Sleep Clause global config by @Pawkkie in [#5762](https://github.com/rh-hideout/pokeemerald-expansion/pull/5762)
|
||||
* Pursuit refactor by @PhallenTree in [#5707](https://github.com/rh-hideout/pokeemerald-expansion/pull/5707)
|
||||
* Changes Various defines to an Enum by @AlexOn1ine in [#5839](https://github.com/rh-hideout/pokeemerald-expansion/pull/5839)
|
||||
* move overwrittenAbilities field to DisableStruct by @ghoulslash in [#5946](https://github.com/rh-hideout/pokeemerald-expansion/pull/5946)
|
||||
* Battle Weather Refactor by @AlexOn1ine in [#5833](https://github.com/rh-hideout/pokeemerald-expansion/pull/5833)
|
||||
* Easy customizable Hidden Move types by @AsparagusEduardo in [#5872](https://github.com/rh-hideout/pokeemerald-expansion/pull/5872)
|
||||
- `gTypesInfo` now has a `isHiddenPowerType` field that inserts them into the Hidden Power type calculation.
|
||||
- ***Warning:*** Changing this from the vanilla settings will change any existing Hidden Power's type, and external calculators will not work either.
|
||||
* Introduces BattlerState struct for the Battle Engine by @AlexOn1ine and @mrgriffin provided the framework for this change in [#5954](https://github.com/rh-hideout/pokeemerald-expansion/pull/5954)
|
||||
* Cleaned up Trainer Slides, added automated Trainer Slide tests, add new Enemy Critical Hit Slide by @pkmnsnfrn and @AlexOn1ine, @hedara90, @AsparagusEduardo, @mrgriffin in [#6018](https://github.com/rh-hideout/pokeemerald-expansion/pull/6018)
|
||||
* If users created new entries in sTrainerSlides, they will need to be ported to the new system.
|
||||
* Introduces BattleTurnCounter to simplfy timer checks by @AlexOn1ine in [#6080](https://github.com/rh-hideout/pokeemerald-expansion/pull/6080)
|
||||
* Replace BattleStruct members quickClawRandom/quickDrawRandom with locals by @AlexOn1ine in [#6136](https://github.com/rh-hideout/pokeemerald-expansion/pull/6136)
|
||||
* Added Difficulty Fallback for Trainer Slides by @pkmnsnfrn in [#6088](https://github.com/rh-hideout/pokeemerald-expansion/pull/6088)
|
||||
* CanAbilityX Function Cleanup by @ghoulslash in [#6183](https://github.com/rh-hideout/pokeemerald-expansion/pull/6183)
|
||||
* Unify setreflect/setlightscreen and MOVE_EFFECT_REFLECT/LIGHT_SCREEN by @ghoulslash in [#6196](https://github.com/rh-hideout/pokeemerald-expansion/pull/6196)
|
||||
|
||||
### Fixed
|
||||
* Fix Sleep Clause AI handling of partner sleeping moves by @Pawkkie in [#5761](https://github.com/rh-hideout/pokeemerald-expansion/pull/5761)
|
||||
* Fix fixed point damage calculation off-by-1s by @SBird1337 in [#5775](https://github.com/rh-hideout/pokeemerald-expansion/pull/5775)
|
||||
Fixes a bunch of rounding errors that cause wrong outputs in the damage calculation.
|
||||
* Fixes simu hp reduction when no partner was on field by @AlexOn1ine in [#5799](https://github.com/rh-hideout/pokeemerald-expansion/pull/5799)
|
||||
* Fixes Regenerator healing past maxHP by @PhallenTree in [#5861](https://github.com/rh-hideout/pokeemerald-expansion/pull/5861)
|
||||
* Fixes Pursuit + Emergency Exit causing double switches and Pursuit user fainting causing target to not finish switch by @PhallenTree in [#5849](https://github.com/rh-hideout/pokeemerald-expansion/pull/5849)
|
||||
* Fixes regression caused by argument refactor by @AlexOn1ine in [#5870](https://github.com/rh-hideout/pokeemerald-expansion/pull/5870)
|
||||
* Fixes Sparkling Aria Shield Dust / Covert Cloak interaction by @AlexOn1ine in [#5911](https://github.com/rh-hideout/pokeemerald-expansion/pull/5911)
|
||||
* Battle Weather Refactor oversight by @AlexOn1ine in [#5960](https://github.com/rh-hideout/pokeemerald-expansion/pull/5960)
|
||||
* Shell Bell Clean up / Simplification and Tests by @AlexOn1ine in [#5924](https://github.com/rh-hideout/pokeemerald-expansion/pull/5924)
|
||||
* Dynamic move type was ignored in doubles for spread moves by @AlexOn1ine in [#5984](https://github.com/rh-hideout/pokeemerald-expansion/pull/5984)
|
||||
* Fixes self effect moves not procing for spread moves when battler 3 w… by @AlexOn1ine in [#6020](https://github.com/rh-hideout/pokeemerald-expansion/pull/6020)
|
||||
* Fix UB when accessing move result flags by @cawtds in [#6030](https://github.com/rh-hideout/pokeemerald-expansion/pull/6030)
|
||||
* Fix Powder (status) config and some terrain timers not using gBattleTurnCounter by @PhallenTree in [#6109](https://github.com/rh-hideout/pokeemerald-expansion/pull/6109)
|
||||
* Fix Powder config not checking for Powder status by @PhallenTree in [#6113](https://github.com/rh-hideout/pokeemerald-expansion/pull/6113)
|
||||
* Fixes battler mutation during the intim script by @AlexOn1ine in [#6151](https://github.com/rh-hideout/pokeemerald-expansion/pull/6151)
|
||||
* Fixes Dynamic Moves types in SumScreen while in Battle by @AlexOn1ine in [#6145](https://github.com/rh-hideout/pokeemerald-expansion/pull/6145)
|
||||
* Fixes Dragon Tail missing timing against Rocky Helmet / Iron Barbs by @AlexOn1ine in [#6154](https://github.com/rh-hideout/pokeemerald-expansion/pull/6154)
|
||||
* Prevent sameMoveTurns from incrementing when unable to use move by @moostoet in [#6167](https://github.com/rh-hideout/pokeemerald-expansion/pull/6167)
|
||||
* Fixes Suction Cups ability popup and Red Card + Guard Dog interaction by @PhallenTree in [#6171](https://github.com/rh-hideout/pokeemerald-expansion/pull/6171)
|
||||
* Fixed Unnerve message and wrote tests by @hedara90 in [#6192](https://github.com/rh-hideout/pokeemerald-expansion/pull/6192)
|
||||
* Fixes Spectral Thief stealing boost at the wrong time by @AlexOn1ine in [#6197](https://github.com/rh-hideout/pokeemerald-expansion/pull/6197)
|
||||
* Fixes BATTLER_TURN_DAMAGED battler id by @AlexOn1ine in [#6236](https://github.com/rh-hideout/pokeemerald-expansion/pull/6236)
|
||||
* Fixed multi battle forced switches by @hedara90 in [#6243](https://github.com/rh-hideout/pokeemerald-expansion/pull/6243)
|
||||
* Fixes ability Embody Aspect triggering multiple times by @AlexOn1ine in [#6259](https://github.com/rh-hideout/pokeemerald-expansion/pull/6259)
|
||||
* Fixes Called moves ignoring redirection by @PhallenTree in [#6267](https://github.com/rh-hideout/pokeemerald-expansion/pull/6267)
|
||||
* Fixes Protean not restoring types after ai damage calcs by @AlexOn1ine in [#6280](https://github.com/rh-hideout/pokeemerald-expansion/pull/6280)
|
||||
* Restoretarget in Rototiller script + Tests by @AlexOn1ine in [#6296](https://github.com/rh-hideout/pokeemerald-expansion/pull/6296)
|
||||
* Fixes inconsistency for Kings rock. by @AlexOn1ine in [#6302](https://github.com/rh-hideout/pokeemerald-expansion/pull/6302)
|
||||
* Fixes Shell Bell for Spread Moves by @AlexOn1ine in [#6303](https://github.com/rh-hideout/pokeemerald-expansion/pull/6303)
|
||||
* Fixes Brick Break/Psychic Fangs/Raging Bull breaking screens if target is immune by @PhallenTree in [#6308](https://github.com/rh-hideout/pokeemerald-expansion/pull/6308)
|
||||
* Fixes doesnt effect message for Thunder Wave by @AlexOn1ine in [#6304](https://github.com/rh-hideout/pokeemerald-expansion/pull/6304)
|
||||
* Fixes Tera Shell activating on moves that have no effect on target by @AlexOn1ine in [#6271](https://github.com/rh-hideout/pokeemerald-expansion/pull/6271)
|
||||
* Fixes fainted battler being able to select an action by @PhallenTree in [#6339](https://github.com/rh-hideout/pokeemerald-expansion/pull/6339)
|
||||
|
||||
## 🤹 Moves 🤹
|
||||
### Added
|
||||
* Added missing in-battle "Move Info" button prompt by @AsparagusEduardo and @TeamAquasHideout from who I got the source from and @BelialClover from who Archie got the source from. in [#6155](https://github.com/rh-hideout/pokeemerald-expansion/pull/6155)
|
||||
|
||||
### Changed
|
||||
* New Volt Switch Animation by @AlexOn1ine in [#5729](https://github.com/rh-hideout/pokeemerald-expansion/pull/5729)
|
||||
* Refactors argument into a union by @AlexOn1ine in [#5853](https://github.com/rh-hideout/pokeemerald-expansion/pull/5853)
|
||||
* Encapsulate move data by @AsparagusEduardo in [#5852](https://github.com/rh-hideout/pokeemerald-expansion/pull/5852)
|
||||
* Removes Resource Flags and moves fields to DisableStruct by @AlexOn1ine in [#5945](https://github.com/rh-hideout/pokeemerald-expansion/pull/5945)
|
||||
* Tera starstorm by @hedara90 in [#6073](https://github.com/rh-hideout/pokeemerald-expansion/pull/6073)
|
||||
* Tachyon Cutter and Salt Cure animations by @hedara90 in [#6182](https://github.com/rh-hideout/pokeemerald-expansion/pull/6182)
|
||||
* Heal Bell/Aromatherapy/Sparkly Swirl improvements and fixes by @AsparagusEduardo in [#6210](https://github.com/rh-hideout/pokeemerald-expansion/pull/6210)
|
||||
- Removed `EFFECT_SPARKLY_SWIRL` in favor of `MOVE_EFFECT_AROMATHEROPY`.
|
||||
* Moved sValidApprenticeMove into gMovesInfo by @fdeblasio in [#6254](https://github.com/rh-hideout/pokeemerald-expansion/pull/6254)
|
||||
* Fixes non-Ghost type Curse animation by @PhallenTree in [#6299](https://github.com/rh-hideout/pokeemerald-expansion/pull/6299)
|
||||
* Remove pursuitSwitchByMove and additional if statement by @PhallenTree in [#6326](https://github.com/rh-hideout/pokeemerald-expansion/pull/6326)
|
||||
|
||||
### Fixed
|
||||
* Fixes moves based on Dragon Darts with strikeCount > 2 always hitting the same battler from the second hit onwards by @PhallenTree in [#5830](https://github.com/rh-hideout/pokeemerald-expansion/pull/5830)
|
||||
* Last fix for Sparkling Aria / Covert Cloak / Shield Dust interaction by @AlexOn1ine in [#5956](https://github.com/rh-hideout/pokeemerald-expansion/pull/5956)
|
||||
* Added WEATHER_DOWNPOUR to Weather Ball's dynamic type by @fdeblasio in [#6100](https://github.com/rh-hideout/pokeemerald-expansion/pull/6100)
|
||||
* Fixed Future Sight not being affected by Electrify by @AsparagusEduardo in [#6213](https://github.com/rh-hideout/pokeemerald-expansion/pull/6213)
|
||||
* Fixes Expanding Force and Spectral Thief move animations by @PhallenTree in [#6185](https://github.com/rh-hideout/pokeemerald-expansion/pull/6185)
|
||||
* Made some move animations fit in VRAM by @hedara90 in [#6289](https://github.com/rh-hideout/pokeemerald-expansion/pull/6289)
|
||||
|
||||
## 🧶 Items 🧶
|
||||
### Fixed
|
||||
* Adds missing Friend Ball friendship bonus upon catching by @PhallenTree in [#5795](https://github.com/rh-hideout/pokeemerald-expansion/pull/5795)
|
||||
|
||||
## 🤖 Battle AI 🤖
|
||||
### Added
|
||||
* Smart Switching handles Soundproof by @Pawkkie and @Robdeezy for the idea! in [#5703](https://github.com/rh-hideout/pokeemerald-expansion/pull/5703)
|
||||
* Add Revival Blessing AI by @Pawkkie in [#5704](https://github.com/rh-hideout/pokeemerald-expansion/pull/5704)
|
||||
* Add AI_FLAG_WEIGH_ABILITY_PREDICTION by @Pawkkie and @khbsd and @ghoulslash for the idea, @AlexOn1ine and @mrgriffin for getting it working :) in [#5636](https://github.com/rh-hideout/pokeemerald-expansion/pull/5636)
|
||||
* Add AI_FLAG_PREFER_HIGHEST_DAMAGE_MOVE by @Pawkkie in [#6025](https://github.com/rh-hideout/pokeemerald-expansion/pull/6025)
|
||||
* Add AI_FLAG_PREDICT_SWITCH by @Pawkkie and @kithr1 in [#6028](https://github.com/rh-hideout/pokeemerald-expansion/pull/6028)
|
||||
* Add AI_FLAG_PREDICT_INCOMING_MON: AI will score against predicted switchin if predicting switch by @Pawkkie in [#6037](https://github.com/rh-hideout/pokeemerald-expansion/pull/6037)
|
||||
* Switch trapping AI will consider Trace by @Pawkkie in [#6059](https://github.com/rh-hideout/pokeemerald-expansion/pull/6059)
|
||||
* AI adds score to Pursuit if it OHKOs by @Pawkkie in [#6166](https://github.com/rh-hideout/pokeemerald-expansion/pull/6166)
|
||||
* Switch chance config support by @Pawkkie in [#6187](https://github.com/rh-hideout/pokeemerald-expansion/pull/6187)
|
||||
- Config can be changed in config/ai.h
|
||||
* Add function to adjust AI scoring for generalized item effects by @moostoet and @AlexOn1ine and @Pawkkie for the input on slight changes to make to the logic (config, no magic numbers...) in [#6247](https://github.com/rh-hideout/pokeemerald-expansion/pull/6247)
|
||||
|
||||
### Changed
|
||||
* Fixed AI not handling type effectiveness beyond x8 by @AsparagusEduardo and @/sshadowzkmao in [#6127](https://github.com/rh-hideout/pokeemerald-expansion/pull/6127)
|
||||
- Removed the use of `AI_EFFECTIVENESS_` in favor of storing the actual type effectiveness.
|
||||
- Renamed `AI_GetTypeEffectiveness` to `AI_GetMoveEffectiveness`, removing the original one.
|
||||
* Remove global sBattler_AI by @AlexOn1ine in [#6128](https://github.com/rh-hideout/pokeemerald-expansion/pull/6128)
|
||||
* SwitchType enum to clean up GetMostSuitableMonToSwitchInto by @Pawkkie in [#6184](https://github.com/rh-hideout/pokeemerald-expansion/pull/6184)
|
||||
|
||||
### Fixed
|
||||
* Eject item ace flag switch AI fixes by @Pawkkie and @wiz1989 for reporting the bug in [#6098](https://github.com/rh-hideout/pokeemerald-expansion/pull/6098)
|
||||
* Fix Choice'd mons referring to incorrect move when switching by @Pawkkie and @/capncrunch in [#6204](https://github.com/rh-hideout/pokeemerald-expansion/pull/6204)
|
||||
* Fix AI switching in absorbing mon incorrectly by @Pawkkie in [#6227](https://github.com/rh-hideout/pokeemerald-expansion/pull/6227)
|
||||
* Improve Yawn and Status Switching by @Pawkkie and @/Chape for finding this behaviour in [#6202](https://github.com/rh-hideout/pokeemerald-expansion/pull/6202)
|
||||
* Fix AI wrongly thinking it strikes first with priority even if player is using priority themselves by @moostoet in [#6274](https://github.com/rh-hideout/pokeemerald-expansion/pull/6274)
|
||||
* Fix AI hazard move handling, minor AI tweaks by @Pawkkie and @ShadowzLmao2 in [#6311](https://github.com/rh-hideout/pokeemerald-expansion/pull/6311)
|
||||
* Fix Overzealous Absorber Switching by @Pawkkie and @iriv24 and @ravepossum for squinting at a conditional for nearly 30mins with me to find a semicolon in [#6318](https://github.com/rh-hideout/pokeemerald-expansion/pull/6318)
|
||||
* Fix Substitute / Shed Tail Switch AI by @Pawkkie in [#6334](https://github.com/rh-hideout/pokeemerald-expansion/pull/6334)
|
||||
|
||||
## 🧹 Other Cleanup 🧹
|
||||
* Split "Do nothing" move effects by @AsparagusEduardo in [#5613](https://github.com/rh-hideout/pokeemerald-expansion/pull/5613)
|
||||
* Sleep Clause global config by @Pawkkie in [#5762](https://github.com/rh-hideout/pokeemerald-expansion/pull/5762)
|
||||
* Converts multi-choice options to COMPOUND_STRINGs by @fdeblasio in [#5686](https://github.com/rh-hideout/pokeemerald-expansion/pull/5686)
|
||||
* Converted item-related variables to COMPOUND_STRINGs by @fdeblasio in [#5714](https://github.com/rh-hideout/pokeemerald-expansion/pull/5714)
|
||||
* Adds SleepClauseBlock enum to CanBeSlept by @Pawkkie and @AlexOn1ine in [#5773](https://github.com/rh-hideout/pokeemerald-expansion/pull/5773)
|
||||
* Swapped DESELECT and CHECK_TAG to be in right places by @fdeblasio in [#5794](https://github.com/rh-hideout/pokeemerald-expansion/pull/5794)
|
||||
* Changes target TURN_DAMAGED and MAX_HP to inlines by @AlexOn1ine in [#5822](https://github.com/rh-hideout/pokeemerald-expansion/pull/5822)
|
||||
* Changes Various defines to an Enum by @AlexOn1ine in [#5839](https://github.com/rh-hideout/pokeemerald-expansion/pull/5839)
|
||||
* Remove fno-toplevel-reorder by @DizzyEggg in [#5809](https://github.com/rh-hideout/pokeemerald-expansion/pull/5809)
|
||||
* Refactors argument into a union by @AlexOn1ine in [#5853](https://github.com/rh-hideout/pokeemerald-expansion/pull/5853)
|
||||
* Clean up redundancy for mugshots by @AlexOn1ine in [#5906](https://github.com/rh-hideout/pokeemerald-expansion/pull/5906)
|
||||
* Encapsulate move data by @AsparagusEduardo in [#5852](https://github.com/rh-hideout/pokeemerald-expansion/pull/5852)
|
||||
* Initialize m4a and IRQ handler in a loaded section by @SBird1337 in [#5912](https://github.com/rh-hideout/pokeemerald-expansion/pull/5912)
|
||||
* Remove EWRAM gHpDealt (not needed anymore) by @AlexOn1ine in [#5925](https://github.com/rh-hideout/pokeemerald-expansion/pull/5925)
|
||||
* Fix DexNav static asserts by @Bassoonian in [#5944](https://github.com/rh-hideout/pokeemerald-expansion/pull/5944)
|
||||
* Move overwrittenAbilities field to DisableStruct by @ghoulslash in [#5946](https://github.com/rh-hideout/pokeemerald-expansion/pull/5946)
|
||||
* Converted 2 various to callnative by @AsparagusEduardo in [#5950](https://github.com/rh-hideout/pokeemerald-expansion/pull/5950)
|
||||
- Removed `VARIOUS_SWAP_SIDE_STATUSES` and `VARIOUS_SWAP_STATS`.
|
||||
* Shell Bell Clean up / Simplification and Tests by @AlexOn1ine in [#5924](https://github.com/rh-hideout/pokeemerald-expansion/pull/5924)
|
||||
* Removed OW_AUTO_SIGNPOST by @pkmnsnfrn, @doejohn126 discovered the issue in [#5974](https://github.com/rh-hideout/pokeemerald-expansion/pull/5974)
|
||||
* Fix leftover test change from #5033 by @mrgriffin in [#5987](https://github.com/rh-hideout/pokeemerald-expansion/pull/5987)
|
||||
* Multiple removals of hardcoded move IDs by @AsparagusEduardo in [#5964](https://github.com/rh-hideout/pokeemerald-expansion/pull/5964)
|
||||
* Missed two uses of new hazard type enum by @Pawkkie in [#5996](https://github.com/rh-hideout/pokeemerald-expansion/pull/5996)
|
||||
* Debug menu and `createmon` additions/cleanup by @AsparagusEduardo in [#5994](https://github.com/rh-hideout/pokeemerald-expansion/pull/5994)
|
||||
- Added Tera Type, Dynamax Level, and Gigantamax Factor to the "Give Pokémon (complex)" debug menu option.
|
||||
- Added `dmaxLevel` option to `givemon` and `createmon`.
|
||||
- Added `WEATHER_COUNT`.
|
||||
- Cleaned up repeated code instances in debug menu.
|
||||
- Fixed mislabel of `ggMaxFactor` in `givemon` and `createmon`. Now it's `gmaxFactor`.
|
||||
* Free some IWRAM by @DizzyEggg in [#6000](https://github.com/rh-hideout/pokeemerald-expansion/pull/6000)
|
||||
* Removes Resource Flags and moves fields to DisableStruct by @AlexOn1ine in [#5945](https://github.com/rh-hideout/pokeemerald-expansion/pull/5945)
|
||||
* Future Sight Innards Out follow up for upcoming by @AlexOn1ine in [#5998](https://github.com/rh-hideout/pokeemerald-expansion/pull/5998)
|
||||
* Remove redundant calls to GetMonData in pokemon.c by @AZero13 in [#5545](https://github.com/rh-hideout/pokeemerald-expansion/pull/5545)
|
||||
* Use SET8 and SET32 consistently by @AZero13 in [#5544](https://github.com/rh-hideout/pokeemerald-expansion/pull/5544)
|
||||
* Rename Furfrou Species tags to match Pokemon Showdown exports by @moostoet in [#6041](https://github.com/rh-hideout/pokeemerald-expansion/pull/6041)
|
||||
* Rename DexNav flags and vars by @Bassoonian in [#6044](https://github.com/rh-hideout/pokeemerald-expansion/pull/6044)
|
||||
* Re-removed trainers.h trailing whitespace by @fdeblasio in [#6048](https://github.com/rh-hideout/pokeemerald-expansion/pull/6048)
|
||||
* Moved front animations frames to gSpeciesInfo by @AsparagusEduardo in [#5605](https://github.com/rh-hideout/pokeemerald-expansion/pull/5605)
|
||||
* Clean up array access by using index instead of dereferencing the value by @AlexOn1ine in [#6057](https://github.com/rh-hideout/pokeemerald-expansion/pull/6057)
|
||||
* Add a uniquely striking pair of brackets by @Pawkkie in [#6068](https://github.com/rh-hideout/pokeemerald-expansion/pull/6068)
|
||||
* Replace WEATHER_HAS_EFFECT with HasWeatherEffect by @AlexOn1ine in [#6069](https://github.com/rh-hideout/pokeemerald-expansion/pull/6069)
|
||||
* Converts a bunch of defines to enums by @Bassoonian in [#6071](https://github.com/rh-hideout/pokeemerald-expansion/pull/6071)
|
||||
- Replaced `BATTLE_TERRAIN` #defines with the `BattleTerrain` enum
|
||||
- Replaced `MAP_TYPE` #defines with the `MapType` enum
|
||||
- Replaced `MAP_BATTLE_SCENE` #defines with the `MapBattleScene` enum
|
||||
- Replaced `BACK_ANIM` #defines with the `BackAnim` enum
|
||||
- Replaced `ANIM` #defines with the `AnimFunctionIDs` enum
|
||||
- Replaced `INGAME_TRADE` #defines with the `InGameTradeID` enum
|
||||
- Replaced `TRAINER_CLASS` #defines with the `TRAINER_CLASS` enum
|
||||
* Return the universe to a state of balanced quilibrium by @Pawkkie in [#6074](https://github.com/rh-hideout/pokeemerald-expansion/pull/6074)
|
||||
* Cleaned up Debug Menu by @AsparagusEduardo in [#6070](https://github.com/rh-hideout/pokeemerald-expansion/pull/6070)
|
||||
* Remove gDecompressionBuffer by @DizzyEggg in [#6029](https://github.com/rh-hideout/pokeemerald-expansion/pull/6029)
|
||||
* Cleaned up Trainer Slides, added automated Trainer Slide tests, add new Enemy Critical Hit Slide by @pkmnsnfrn and @AlexOn1ine, @hedara90, @AsparagusEduardo, @mrgriffin in [#6018](https://github.com/rh-hideout/pokeemerald-expansion/pull/6018)
|
||||
* If users created new entries in sTrainerSlides, they will need to be ported to the new system.
|
||||
* Terrain function standarization by @fdeblasio in [#6097](https://github.com/rh-hideout/pokeemerald-expansion/pull/6097)
|
||||
* Updated trainer pic tutorial by @fdeblasio in [#6049](https://github.com/rh-hideout/pokeemerald-expansion/pull/6049)
|
||||
* Remove UnusedBattleInit from battle_bg.c by @DizzyEggg in [#6116](https://github.com/rh-hideout/pokeemerald-expansion/pull/6116)
|
||||
* Consolidated contest opponent filters into gContestOpponents by @fdeblasio in [#6119](https://github.com/rh-hideout/pokeemerald-expansion/pull/6119)
|
||||
* Replace BattleStruct members quickClawRandom/quickDrawRandom with locals by @AlexOn1ine in [#6136](https://github.com/rh-hideout/pokeemerald-expansion/pull/6136)
|
||||
* Updated Trainer Ids used in Trainer Slides tests by @pkmnsnfrn and @AlexOn1ine found the original bug, @AsparagusEduardo confirmed it in [#6138](https://github.com/rh-hideout/pokeemerald-expansion/pull/6138)
|
||||
* Added Difficulty Fallback for Trainer Slides by @pkmnsnfrn in [#6088](https://github.com/rh-hideout/pokeemerald-expansion/pull/6088)
|
||||
* Clean up follow up for Simultaneous Reduction HP by @AlexOn1ine in [#6139](https://github.com/rh-hideout/pokeemerald-expansion/pull/6139)
|
||||
* Remove global sBattler_AI by @AlexOn1ine in [#6128](https://github.com/rh-hideout/pokeemerald-expansion/pull/6128)
|
||||
* Clarify MOVE_EFFECT_SLEEP sleep clause handling by @Pawkkie in [#6161](https://github.com/rh-hideout/pokeemerald-expansion/pull/6161)
|
||||
* Remove unused PainSplit scripting global by @AlexOn1ine in [#6164](https://github.com/rh-hideout/pokeemerald-expansion/pull/6164)
|
||||
* Don't use SeedRng some places where it isn't necessary by @tertu-m in [#6156](https://github.com/rh-hideout/pokeemerald-expansion/pull/6156)
|
||||
* Cleaned up party data access GetPartyBattlerData by @AsparagusEduardo in [#6172](https://github.com/rh-hideout/pokeemerald-expansion/pull/6172)
|
||||
* Changed two LocalRandom calls to new LocalRandom32 by @hedara90 in [#6173](https://github.com/rh-hideout/pokeemerald-expansion/pull/6173)
|
||||
* Cleanup some global battler ID usage by @ghoulslash in [#6181](https://github.com/rh-hideout/pokeemerald-expansion/pull/6181)
|
||||
* Clean up - Add ability args instead of calcing the ability again by @AlexOn1ine in [#6186](https://github.com/rh-hideout/pokeemerald-expansion/pull/6186)
|
||||
* CanAbilityX Function Cleanup by @ghoulslash in [#6183](https://github.com/rh-hideout/pokeemerald-expansion/pull/6183)
|
||||
* SwitchType enum to clean up GetMostSuitableMonToSwitchInto by @Pawkkie in [#6184](https://github.com/rh-hideout/pokeemerald-expansion/pull/6184)
|
||||
* Unify setreflect/setlightscreen and MOVE_EFFECT_REFLECT/LIGHT_SCREEN by @ghoulslash in [#6196](https://github.com/rh-hideout/pokeemerald-expansion/pull/6196)
|
||||
* Removed Trainer Slides footgun by @AsparagusEduardo in [#6205](https://github.com/rh-hideout/pokeemerald-expansion/pull/6205)
|
||||
* Fix typo in Nuzzle's description by @Bassoonian in [#6209](https://github.com/rh-hideout/pokeemerald-expansion/pull/6209)
|
||||
* Consolidate duplicate dialogue of nature girl in Battle Frontier by @fdeblasio in [#6195](https://github.com/rh-hideout/pokeemerald-expansion/pull/6195)
|
||||
* Fixed missing move encapsulation in upcoming by @AsparagusEduardo in [#6226](https://github.com/rh-hideout/pokeemerald-expansion/pull/6226)
|
||||
* Consolidated Frontier teams into battle_frontier_trainers.h by @fdeblasio in [#5892](https://github.com/rh-hideout/pokeemerald-expansion/pull/5892)
|
||||
* Add abstraction layer for battler positions by @AlexOn1ine in [#6212](https://github.com/rh-hideout/pokeemerald-expansion/pull/6212)
|
||||
* Revert unintentional change by @AlexOn1ine in [#6239](https://github.com/rh-hideout/pokeemerald-expansion/pull/6239)
|
||||
* Remove whitespace from trainers data file by @AsparagusEduardo in [#6234](https://github.com/rh-hideout/pokeemerald-expansion/pull/6234)
|
||||
* Replaced hardcoded numbers in DexNav with variables by @fdeblasio in [#6241](https://github.com/rh-hideout/pokeemerald-expansion/pull/6241)
|
||||
* fix for battle ui for add to party menu (#6229) by @fakuzatsu in [#6240](https://github.com/rh-hideout/pokeemerald-expansion/pull/6240)
|
||||
* Changed bit order for follower graphicsId creation by @hedara90 in [#6249](https://github.com/rh-hideout/pokeemerald-expansion/pull/6249)
|
||||
* Minor Clean up for CanAbilityX. Follow up for #6183 by @AlexOn1ine in [#6252](https://github.com/rh-hideout/pokeemerald-expansion/pull/6252)
|
||||
* Moved sValidApprenticeMove into gMovesInfo by @fdeblasio in [#6254](https://github.com/rh-hideout/pokeemerald-expansion/pull/6254)
|
||||
* Use more accurate count in MovesInfo by @AlexOn1ine in [#6260](https://github.com/rh-hideout/pokeemerald-expansion/pull/6260)
|
||||
* Fix Extra `task->tState++` and `break` in `Task_DrawFieldMessageBox` by @Deokishisu in [#6261](https://github.com/rh-hideout/pokeemerald-expansion/pull/6261)
|
||||
* Expand usage of IsBattlerAlly (rename from IsAlly) by @AlexOn1ine in [#6251](https://github.com/rh-hideout/pokeemerald-expansion/pull/6251)
|
||||
* Rename SetPhotonGeyser to a more general use and clean up by @AlexOn1ine in [#6272](https://github.com/rh-hideout/pokeemerald-expansion/pull/6272)
|
||||
* Fix padding amount in MoveInfo by @AlexOn1ine in [#6307](https://github.com/rh-hideout/pokeemerald-expansion/pull/6307)
|
||||
* Refactor testing flags and vars to not conflict with user ones by @hedara90 in [#6301](https://github.com/rh-hideout/pokeemerald-expansion/pull/6301)
|
||||
* Clean up leftover from simu hp reduction development by @AlexOn1ine in [#6323](https://github.com/rh-hideout/pokeemerald-expansion/pull/6323)
|
||||
* Remove pursuitSwitchByMove and additional if statement by @PhallenTree in [#6326](https://github.com/rh-hideout/pokeemerald-expansion/pull/6326)
|
||||
|
||||
## 🧪 Test Runner 🧪
|
||||
### Changed
|
||||
* New Ally Switch test fails on CI by @AlexOn1ine in [#5896](https://github.com/rh-hideout/pokeemerald-expansion/pull/5896)
|
||||
* Added final Sparkling Aria+Shield Dust interaction test by @hedara90 in [#5923](https://github.com/rh-hideout/pokeemerald-expansion/pull/5923)
|
||||
* Converted 2 various to callnative by @AsparagusEduardo in [#5950](https://github.com/rh-hideout/pokeemerald-expansion/pull/5950)
|
||||
- Removed `VARIOUS_SWAP_SIDE_STATUSES` and `VARIOUS_SWAP_STATS`.
|
||||
* Cleaned up Trainer Slides, added automated Trainer Slide tests, add new Enemy Critical Hit Slide by @pkmnsnfrn and @AlexOn1ine, @hedara90, @AsparagusEduardo, @mrgriffin in [#6018](https://github.com/rh-hideout/pokeemerald-expansion/pull/6018)
|
||||
* If users created new entries in sTrainerSlides, they will need to be ported to the new system.
|
||||
* Tests for Big Pecks by @hedara90 in [#6158](https://github.com/rh-hideout/pokeemerald-expansion/pull/6158)
|
||||
* Water Compaction tests by @hedara90 in [#6159](https://github.com/rh-hideout/pokeemerald-expansion/pull/6159)
|
||||
* Wrote tests for Electrify by @hedara90 in [#6179](https://github.com/rh-hideout/pokeemerald-expansion/pull/6179)
|
||||
* Sheer Force Test Fixes by @ghoulslash in [#6198](https://github.com/rh-hideout/pokeemerald-expansion/pull/6198)
|
||||
* Minor Terrain Seed Test Improvement by @ghoulslash in [#6207](https://github.com/rh-hideout/pokeemerald-expansion/pull/6207)
|
||||
* Fix Liquid Ooze + Leech Seed Test by @ghoulslash in [#6217](https://github.com/rh-hideout/pokeemerald-expansion/pull/6217)
|
||||
* Prevented fanfares from playing in headless mode by @pkmnsnfrn and @hedara90, @AsparagusEduardo in [#6219](https://github.com/rh-hideout/pokeemerald-expansion/pull/6219)
|
||||
* Added test support for 5 battle configs by @AsparagusEduardo in [#5914](https://github.com/rh-hideout/pokeemerald-expansion/pull/5914)
|
||||
* Added missing Dream Eater and Reflect Type tests by @AsparagusEduardo in [#6245](https://github.com/rh-hideout/pokeemerald-expansion/pull/6245)
|
||||
* Refactor testing flags and vars to not conflict with user ones by @hedara90 in [#6301](https://github.com/rh-hideout/pokeemerald-expansion/pull/6301)
|
||||
|
||||
### Fixed
|
||||
* Fix ASSUMPTIONS not working by @DizzyEggg in [#5869](https://github.com/rh-hideout/pokeemerald-expansion/pull/5869)
|
||||
* Updated Trainer Ids used in Trainer Slides tests by @pkmnsnfrn and @AlexOn1ine found the original bug, @AsparagusEduardo confirmed it in [#6138](https://github.com/rh-hideout/pokeemerald-expansion/pull/6138)
|
||||
* Adjusted G-Max Depletion test by @AsparagusEduardo and @AlexOn1ine for being a cool dude being patient with me during the PR. in [#6201](https://github.com/rh-hideout/pokeemerald-expansion/pull/6201)
|
||||
* Do not add TRAINER_FLAG_DOUBLE_BATTLE to recorded battles by @mrgriffin in [#6285](https://github.com/rh-hideout/pokeemerald-expansion/pull/6285)
|
||||
* Fixes Brick Break/Psychic Fangs/Raging Bull breaking screens if target is immune by @PhallenTree in [#6308](https://github.com/rh-hideout/pokeemerald-expansion/pull/6308)
|
||||
|
||||
## 📚 Documentation 📚
|
||||
* Updating install instructions by @hedara90 in [#5610](https://github.com/rh-hideout/pokeemerald-expansion/pull/5610)
|
||||
- Install instructions have been moved into individual files under `docs/install/ `
|
||||
* Documentation for DisableStruct by @AlexOn1ine in [#6066](https://github.com/rh-hideout/pokeemerald-expansion/pull/6066)
|
||||
* Cleaned up Trainer Slides, added automated Trainer Slide tests, add new Enemy Critical Hit Slide by @pkmnsnfrn and @AlexOn1ine, @hedara90, @AsparagusEduardo, @mrgriffin in [#6018](https://github.com/rh-hideout/pokeemerald-expansion/pull/6018)
|
||||
* If users created new entries in sTrainerSlides, they will need to be ported to the new system.
|
||||
* Updated trainer pic tutorial by @fdeblasio in [#6049](https://github.com/rh-hideout/pokeemerald-expansion/pull/6049)
|
||||
* Update how_to_testing_system.md by @hedara90 in [#6281](https://github.com/rh-hideout/pokeemerald-expansion/pull/6281)
|
||||
|
||||
## 📦 Branch Synchronisation 📦
|
||||
### pret
|
||||
* 11th of February in [#6231](https://github.com/rh-hideout/pokeemerald-expansion/pull/6231)
|
||||
* Replace easy_chat alphabetialOrder magic numbers with EC_INDEX values by @rayrobdod in [pret#2096](https://github.com/pret/pokeemerald/pull/2096)
|
||||
* Fixed switchout bug in multibattle where order of mons gets messed up by @shachar700 in [pret#2099](https://github.com/pret/pokeemerald/pull/2099)
|
||||
|
||||
## New Contributors
|
||||
* @khbsd made their first contribution in [#5679](https://github.com/rh-hideout/pokeemerald-expansion/pull/5679)
|
||||
* @ExMingYan made their first contribution in [#6220](https://github.com/rh-hideout/pokeemerald-expansion/pull/6220)
|
||||
* @Deokishisu made their first contribution in [#6261](https://github.com/rh-hideout/pokeemerald-expansion/pull/6261)
|
||||
|
||||
**Full Changelog**: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.10.2...test
|
||||
|
||||
|
||||
<!--Last PR: 6339-->
|
||||
<!--Used to keep track of the last PR merged in case new ones come in before the changelog is done.-->
|
||||
@ -54,6 +54,7 @@ Pull Requests that fall into this category are not in scope by default and shoul
|
||||
2. **Fangame Features**: Adds a popular feature from other fangames
|
||||
3. **Popular Non-SS Features**: Exceptions can be made for uniquely popular or requested features (Drowsy, PLA Legend Plate, etc.)
|
||||
4. **External Program**: External programs like poryscript, porymoves, etc.
|
||||
5. **Intergenerational Feature Compatibility**: Addresses limitations and issues resulting from including all generational behaviours in a GBA native title, and extrapolation of features no longer supported by GameFreak
|
||||
|
||||
## Workflow for Proposed Feature Scope Discussion
|
||||
For the contributor:
|
||||
|
||||
@ -554,6 +554,10 @@ Causes the test to fail if a and b compare incorrectly, e.g.
|
||||
EXPECT_EQ(results[0].damage, Q_4_12(1.5), results[1].damage);
|
||||
```
|
||||
|
||||
### `FORCE_MOVE_ANIM`
|
||||
`FORCE_MOVE_ANIM(TRUE)`
|
||||
Forces the moves in the current test to do their animations in headless mode. Useful for debugging animations.
|
||||
|
||||
## Overworld Command Reference
|
||||
|
||||
### `OVERWORLD_SCRIPT`
|
||||
|
||||
|
Before Width: | Height: | Size: 211 B After Width: | Height: | Size: 178 B |
|
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 568 B |
|
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 560 B |
|
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 567 B |
|
Before Width: | Height: | Size: 268 B After Width: | Height: | Size: 184 B |
|
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 555 B |
|
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 570 B |
|
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 563 B |
|
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 565 B |
|
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 568 B |
|
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 566 B |
|
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 557 B |
|
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 551 B |
|
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 558 B |
|
Before Width: | Height: | Size: 365 B After Width: | Height: | Size: 218 B |
|
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 559 B |
|
Before Width: | Height: | Size: 209 B After Width: | Height: | Size: 177 B |
|
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 566 B |
|
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 563 B |
|
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 563 B |
|
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 555 B |
|
Before Width: | Height: | Size: 5.3 KiB After Width: | Height: | Size: 582 B |
|
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 560 B |
@ -14,6 +14,6 @@ JASC-PAL
|
||||
96 168 120
|
||||
64 136 96
|
||||
232 232 248
|
||||
152 40 64
|
||||
39 44 149
|
||||
0 0 0
|
||||
0 0 0
|
||||
|
||||
@ -814,12 +814,9 @@ struct BattleStruct
|
||||
u8 additionalEffectsCounter:4; // A counter for the additionalEffects applied by the current move in Cmd_setadditionaleffects
|
||||
u8 redCardActivates:1;
|
||||
u8 padding2:2; // padding in the middle so pursuit fields are together
|
||||
u8 pursuitSwitchByMove:1;
|
||||
u8 pursuitStoredSwitch; // Stored id for the Pursuit target's switch
|
||||
s32 battlerExpReward;
|
||||
u16 prevTurnSpecies[MAX_BATTLERS_COUNT]; // Stores species the AI has in play at start of turn
|
||||
|
||||
// Simultaneous hp reduction for spread moves
|
||||
s32 moveDamage[MAX_BATTLERS_COUNT];
|
||||
s32 critChance[MAX_BATTLERS_COUNT];
|
||||
u16 moveResultFlags[MAX_BATTLERS_COUNT];
|
||||
@ -830,9 +827,13 @@ struct BattleStruct
|
||||
u8 calculatedSpreadMoveAccuracy:1;
|
||||
u8 printedStrongWindsWeakenedAttack:1;
|
||||
u8 numSpreadTargets:2;
|
||||
u8 padding3:2;
|
||||
u8 bypassMoldBreakerChecks:1; // for ABILITYEFFECT_IMMUNITY
|
||||
u8 padding3:1;
|
||||
u8 usedEjectItem;
|
||||
u8 usedMicleBerry;
|
||||
struct MessageStatus slideMessageStatus;
|
||||
u8 trainerSlideSpriteIds[MAX_BATTLERS_COUNT];
|
||||
u8 embodyAspectBoost[NUM_BATTLE_SIDES];
|
||||
};
|
||||
|
||||
// The palaceFlags member of struct BattleStruct contains 1 flag per move to indicate which moves the AI should consider,
|
||||
@ -1241,6 +1242,11 @@ static inline u32 GetBattlerSide(u32 battler)
|
||||
return GetBattlerPosition(battler) & BIT_SIDE;
|
||||
}
|
||||
|
||||
static inline bool32 IsBattlerAlly(u32 battlerAtk, u32 battlerDef)
|
||||
{
|
||||
return (GetBattlerSide(battlerAtk) == GetBattlerSide(battlerDef));
|
||||
}
|
||||
|
||||
static inline u32 GetOpposingSideBattler(u32 battler)
|
||||
{
|
||||
return GetBattlerAtPosition(BATTLE_OPPOSITE(GetBattlerSide(battler)));
|
||||
|
||||
@ -35,7 +35,7 @@ typedef s32 (*AiScoreFunc)(u32, u32, u32, s32);
|
||||
#define POWERFUL_STATUS_MOVE 10 // Moves with this score will be chosen over a move that faints target
|
||||
#define NO_DAMAGE_OR_FAILS -20 // Move fails or does no damage
|
||||
|
||||
// Scores given in AI_CalcMoveEffectScore
|
||||
// Scores given in AI_CalcMoveEffectScore and AI_CalcHoldEffectMoveScore
|
||||
#define NO_INCREASE 0
|
||||
#define WEAK_EFFECT 1
|
||||
#define DECENT_EFFECT 2
|
||||
|
||||
@ -127,7 +127,7 @@ bool32 IsAromaVeilProtectedEffect(u32 moveEffect);
|
||||
bool32 IsNonVolatileStatusMoveEffect(u32 moveEffect);
|
||||
bool32 IsMoveRedirectionPrevented(u32 battlerAtk, u32 move, u32 atkAbility);
|
||||
bool32 IsMoveEncouragedToHit(u32 battlerAtk, u32 battlerDef, u32 move);
|
||||
bool32 IsHazardMoveEffect(u32 moveEffect);
|
||||
bool32 IsHazardMove(u32 move);
|
||||
bool32 IsTwoTurnNotSemiInvulnerableMove(u32 battlerAtk, u32 move);
|
||||
void ProtectChecks(u32 battlerAtk, u32 battlerDef, u32 move, u32 predictedMove, s32 *score);
|
||||
bool32 ShouldSetSandstorm(u32 battler, u32 ability, u32 holdEffect);
|
||||
@ -154,6 +154,8 @@ bool32 HasSubstituteIgnoringMove(u32 battler);
|
||||
bool32 HasHighCritRatioMove(u32 battler);
|
||||
bool32 HasMagicCoatAffectedMove(u32 battler);
|
||||
bool32 HasSnatchAffectedMove(u32 battler);
|
||||
bool32 IsHazardClearingMove(u32 move);
|
||||
bool32 IsSubstituteEffect(u32 effect);
|
||||
|
||||
// status checks
|
||||
bool32 AI_CanGetFrostbite(u32 battler, u32 ability);
|
||||
@ -215,7 +217,9 @@ bool32 AI_ShouldCopyStatChanges(u32 battlerAtk, u32 battlerDef);
|
||||
bool32 AI_ShouldSetUpHazards(u32 battlerAtk, u32 battlerDef, struct AiLogicData *aiData);
|
||||
void IncreaseTidyUpScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score);
|
||||
bool32 AI_ShouldSpicyExtract(u32 battlerAtk, u32 battlerAtkPartner, u32 move, struct AiLogicData *aiData);
|
||||
void IncreaseSubstituteMoveScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score);
|
||||
u32 IncreaseSubstituteMoveScore(u32 battlerAtk, u32 battlerDef, u32 move);
|
||||
bool32 IsBattlerItemEnabled(u32 battler);
|
||||
bool32 IsBattlerPredictedToSwitch(u32 battler);
|
||||
bool32 HasLowAccuracyMove(u32 battlerAtk, u32 battlerDef);
|
||||
|
||||
#endif //GUARD_BATTLE_AI_UTIL_H
|
||||
|
||||
@ -51,7 +51,6 @@ void StealTargetItem(u8 battlerStealer, u8 battlerItem);
|
||||
u8 GetCatchingBattler(void);
|
||||
u32 GetHighestStatId(u32 battlerId);
|
||||
bool32 ProteanTryChangeType(u32 battler, u32 ability, u32 move, u32 moveType);
|
||||
bool32 ShouldTeraShellDistortTypeMatchups(u32 move, u32 battlerDef);
|
||||
bool32 IsMoveNotAllowedInSkyBattles(u32 move);
|
||||
bool32 DoSwitchInAbilities(u32 battlerId);
|
||||
u8 GetFirstFaintedPartyIndex(u8 battlerId);
|
||||
|
||||
@ -827,7 +827,7 @@ extern const u8 BattleScript_MoveEffectHaze[];
|
||||
extern const u8 BattleScript_MoveEffectIonDeluge[];
|
||||
extern const u8 BattleScript_EffectHyperspaceFury[];
|
||||
extern const u8 BattleScript_EffectAuraWheel[];
|
||||
extern const u8 BattleScript_EffectPhotonGeyser[];
|
||||
extern const u8 BattleScript_EffectDynamicCategory[];
|
||||
extern const u8 BattleScript_EffectNoRetreat[];
|
||||
extern const u8 BattleScript_EffectTarShot[];
|
||||
extern const u8 BattleScript_EffectPoltergeist[];
|
||||
|
||||
@ -24,8 +24,8 @@
|
||||
|
||||
enum AbilityEffectOptions
|
||||
{
|
||||
ABILITY_CHECK_TRIGGER,
|
||||
ABILITY_RUN_SCRIPT,
|
||||
ABILITY_CHECK_TRIGGER,
|
||||
ABILITY_RUN_SCRIPT,
|
||||
};
|
||||
|
||||
enum MoveAbsorbed
|
||||
@ -175,6 +175,7 @@ void HandleAction_ThrowBall(void);
|
||||
u32 GetCurrentBattleWeather(void);
|
||||
u32 EndOrContinueWeather(void);
|
||||
bool32 IsAffectedByFollowMe(u32 battlerAtk, u32 defSide, u32 move);
|
||||
bool32 HandleMoveTargetRedirection(void);
|
||||
void HandleAction_UseMove(void);
|
||||
void HandleAction_Switch(void);
|
||||
void HandleAction_UseItem(void);
|
||||
|
||||
@ -9,6 +9,7 @@
|
||||
#define SHOULD_SWITCH_WONDER_GUARD_PERCENTAGE 100
|
||||
#define SHOULD_SWITCH_TRUANT_PERCENTAGE 100
|
||||
#define SHOULD_SWITCH_ALL_MOVES_BAD_PERCENTAGE 100
|
||||
#define STAY_IN_STATS_RAISED 2 // Number of stat stages that must be raised across any stats before the AI won't switch mon out in certain cases
|
||||
|
||||
// AI smart switching chances; if you want more complex behaviour, modify GetSwitchChance
|
||||
#define SHOULD_SWITCH_ABSORBS_MOVE_PERCENTAGE 100
|
||||
@ -43,6 +44,9 @@
|
||||
#define SHOULD_SWITCH_REGENERATOR_PERCENTAGE 50
|
||||
#define SHOULD_SWITCH_REGENERATOR_STATS_RAISED_PERCENTAGE 20
|
||||
|
||||
// AI held item-based move scoring
|
||||
#define LOW_ACCURACY_THRESHOLD 75 // Moves with accuracy equal OR below this value are considered low accuracy
|
||||
|
||||
// AI prediction chances
|
||||
#define PREDICT_SWITCH_CHANCE 50
|
||||
|
||||
|
||||
@ -60,6 +60,32 @@
|
||||
#define OW_FOLLOWERS_WEATHER_FORMS FALSE // If TRUE, Castform and Cherrim gain FORM_CHANGE_OVERWORLD_WEATHER, which will make them transform in the overworld based on the weather.
|
||||
#define OW_FOLLOWERS_COPY_WILD_PKMN FALSE // If TRUE, follower Pokémon that know Transform or have Illusion/Imposter will copy wild Pokémon at random.
|
||||
#define OW_BATTLE_ONLY_FORMS TRUE // If TRUE, loads overworld sprites for battle-only forms like Mega Evos. Requires OW_POKEMON_OBJECT_EVENTS.
|
||||
#define B_FLAG_FOLLOWERS_DISABLED 0 // Enables / Disables followers by using a flag. Helpful to disable followers for a period of time.
|
||||
|
||||
|
||||
#define OW_FOLLOWERS_SCRIPT_MOVEMENT TRUE // TRUE: Script collisions hide follower, FLAG_SAFE_FOLLOWER_MOVEMENT on by default
|
||||
// FALSE: Script collisions unhandled, FLAG_SAFE_FOLLOWER_MOVEMENT off by default
|
||||
|
||||
// If set, the only pokemon allowed to follow you
|
||||
// will be those matching species, met location,
|
||||
// and/or met level;
|
||||
// These accept vars, too: VAR_TEMP_1, etc
|
||||
#define OW_MON_ALLOWED_SPECIES (0)
|
||||
#define OW_MON_ALLOWED_MET_LVL (0)
|
||||
#define OW_MON_ALLOWED_MET_LOC (0)
|
||||
// Examples:
|
||||
// Yellow Pikachu:
|
||||
// #define OW_MON_ALLOWED_SPECIES (SPECIES_PIKACHU)
|
||||
// #define OW_MON_ALLOWED_MET_LVL (0)
|
||||
// #define OW_MON_ALLOWED_MET_LOC (MAPSEC_PALLET_TOWN)
|
||||
// Hoenn Starter:
|
||||
// #define OW_MON_ALLOWED_SPECIES (0)
|
||||
// #define OW_MON_ALLOWED_MET_LVL (5)
|
||||
// #define OW_MON_ALLOWED_MET_LOC (MAPSEC_ROUTE_101)
|
||||
// Species set in VAR_XXXX:
|
||||
// #define OW_MON_ALLOWED_SPECIES (VAR_XXXX)
|
||||
// #define OW_MON_ALLOWED_MET_LVL (0)
|
||||
// #define OW_MON_ALLOWED_MET_LOC (0)
|
||||
|
||||
// Out-of-battle Ability effects
|
||||
#define OW_SYNCHRONIZE_NATURE GEN_LATEST // In Gen8+, if a Pokémon with Synchronize leads the party, wild Pokémon will always have their same Nature as opposed to the 50% chance in previous games. Gift Pokémon excluded.
|
||||
|
||||
@ -1131,10 +1131,10 @@
|
||||
|
||||
// Vars
|
||||
#undef B_VAR_DIFFICULTY
|
||||
#define B_VAR_DIFFICULTY VAR_UNUSED_0x404E
|
||||
#define B_VAR_DIFFICULTY TESTING_VAR_DIFFICULTY
|
||||
|
||||
// Flags
|
||||
#undef B_FLAG_SLEEP_CLAUSE
|
||||
#define B_FLAG_SLEEP_CLAUSE FLAG_SPECIAL_FLAG_UNUSED_0x4003
|
||||
#define B_FLAG_SLEEP_CLAUSE TESTING_FLAG_SLEEP_CLAUSE
|
||||
|
||||
#endif // GUARD_CONFIG_TEST_H
|
||||
|
||||
@ -558,7 +558,7 @@ enum MoveEffects
|
||||
|
||||
#define MOVE_TARGET_SELECTED 0
|
||||
#define MOVE_TARGET_DEPENDS (1 << 0)
|
||||
#define MOVE_TARGET_USER_OR_SELECTED (1 << 1)
|
||||
#define MOVE_TARGET_OPPONENT (1 << 1)
|
||||
#define MOVE_TARGET_RANDOM (1 << 2)
|
||||
#define MOVE_TARGET_BOTH (1 << 3)
|
||||
#define MOVE_TARGET_USER (1 << 4)
|
||||
|
||||
@ -270,10 +270,10 @@
|
||||
#define OBJ_EVENT_GFX_VAR_E (OBJ_EVENT_GFX_VARS + 0xE)
|
||||
#define OBJ_EVENT_GFX_VAR_F (OBJ_EVENT_GFX_VARS + 0xF)
|
||||
|
||||
#define OBJ_EVENT_MON (1 << 13)
|
||||
#define OBJ_EVENT_MON_SHINY (1 << 14)
|
||||
#define OBJ_EVENT_MON_FEMALE (1 << 15)
|
||||
#define OBJ_EVENT_MON_SPECIES_MASK (OBJ_EVENT_MON - 1)
|
||||
#define OBJ_EVENT_MON (1u << 14)
|
||||
#define OBJ_EVENT_MON_SHINY (1u << 13)
|
||||
#define OBJ_EVENT_MON_FEMALE (1u << 12)
|
||||
#define OBJ_EVENT_MON_SPECIES_MASK (~(7u << 12))
|
||||
|
||||
// Used to call a specific species' follower graphics. Useful for static encounters.
|
||||
#define OBJ_EVENT_GFX_SPECIES(name) (SPECIES_##name + OBJ_EVENT_MON)
|
||||
|
||||
@ -1,9 +1,9 @@
|
||||
#ifndef GUARD_CONSTANTS_EXPANSION_H
|
||||
#define GUARD_CONSTANTS_EXPANSION_H
|
||||
|
||||
// Last version: 1.10.2
|
||||
// Last version: 1.11.0
|
||||
#define EXPANSION_VERSION_MAJOR 1
|
||||
#define EXPANSION_VERSION_MINOR 11
|
||||
#define EXPANSION_VERSION_MINOR 12
|
||||
#define EXPANSION_VERSION_PATCH 0
|
||||
|
||||
// FALSE if this this version of Expansion is not a tagged commit, i.e.
|
||||
|
||||
@ -1648,6 +1648,7 @@
|
||||
#define FLAG_SPECIAL_FLAG_UNUSED_0x4003 (SPECIAL_FLAGS_START + 0x3) // Unused Flag
|
||||
#define FLAG_STORING_ITEMS_IN_PYRAMID_BAG (SPECIAL_FLAGS_START + 0x4)
|
||||
#define FLAG_SAFE_FOLLOWER_MOVEMENT (SPECIAL_FLAGS_START + 0x5) // When set, applymovement does not put the follower inside a pokeball
|
||||
// Also, scripted movements on the player will move follower(s), too
|
||||
// FLAG_SPECIAL_FLAG_0x4005 - 0x407F also exist and are unused
|
||||
#define SPECIAL_FLAGS_END (SPECIAL_FLAGS_START + 0x7F)
|
||||
#define NUM_SPECIAL_FLAGS (SPECIAL_FLAGS_END - SPECIAL_FLAGS_START + 1)
|
||||
@ -1659,4 +1660,16 @@
|
||||
#define FLAG_TEMP_HIDE_FOLLOWER FLAG_TEMP_E
|
||||
#define FLAG_TEMP_HIDE_MIRAGE_ISLAND_BERRY_TREE FLAG_TEMP_11
|
||||
|
||||
#if TESTING
|
||||
#define TESTING_FLAGS_START 0x5000
|
||||
#define TESTING_FLAG_SLEEP_CLAUSE (TESTING_FLAGS_START + 0x0)
|
||||
#define TESTING_FLAG_UNUSED_1 (TESTING_FLAGS_START + 0x1)
|
||||
#define TESTING_FLAG_UNUSED_2 (TESTING_FLAGS_START + 0x2)
|
||||
#define TESTING_FLAG_UNUSED_3 (TESTING_FLAGS_START + 0x3)
|
||||
#define TESTING_FLAG_UNUSED_4 (TESTING_FLAGS_START + 0x4)
|
||||
#define TESTING_FLAG_UNUSED_5 (TESTING_FLAGS_START + 0x5)
|
||||
#define TESTING_FLAG_UNUSED_6 (TESTING_FLAGS_START + 0x6)
|
||||
#define TESTING_FLAG_UNUSED_7 (TESTING_FLAGS_START + 0x7)
|
||||
#endif // TESTING
|
||||
|
||||
#endif // GUARD_CONSTANTS_FLAGS_H
|
||||
|
||||
@ -324,4 +324,16 @@
|
||||
|
||||
#define VAR_TEMP_TRANSFERRED_SPECIES VAR_TEMP_1
|
||||
|
||||
#if TESTING
|
||||
#define TESTING_VARS_START 0x9000
|
||||
#define TESTING_VAR_DIFFICULTY (TESTING_VARS_START + 0x0)
|
||||
#define TESTING_VAR_UNUSED_1 (TESTING_VARS_START + 0x1)
|
||||
#define TESTING_VAR_UNUSED_2 (TESTING_VARS_START + 0x2)
|
||||
#define TESTING_VAR_UNUSED_3 (TESTING_VARS_START + 0x3)
|
||||
#define TESTING_VAR_UNUSED_4 (TESTING_VARS_START + 0x4)
|
||||
#define TESTING_VAR_UNUSED_5 (TESTING_VARS_START + 0x5)
|
||||
#define TESTING_VAR_UNUSED_6 (TESTING_VARS_START + 0x6)
|
||||
#define TESTING_VAR_UNUSED_7 (TESTING_VARS_START + 0x7)
|
||||
#endif // TESTING
|
||||
|
||||
#endif // GUARD_CONSTANTS_VARS_H
|
||||
|
||||
@ -178,6 +178,7 @@ u8 GetWalkInPlaceFastMovementAction(u32);
|
||||
u8 GetWalkInPlaceNormalMovementAction(u32);
|
||||
u8 GetWalkInPlaceSlowMovementAction(u32);
|
||||
u8 GetCollisionAtCoords(struct ObjectEvent *, s16 x, s16 y, u32 dir);
|
||||
u32 GetObjectObjectCollidesWith(struct ObjectEvent *objectEvent, s16 x, s16 y, bool32 addCoords);
|
||||
void MoveCoords(u8 direction, s16 *x, s16 *y);
|
||||
bool8 ObjectEventIsHeldMovementActive(struct ObjectEvent *);
|
||||
u8 ObjectEventClearHeldMovementIfFinished(struct ObjectEvent *);
|
||||
|
||||
@ -104,7 +104,9 @@ struct MoveInfo
|
||||
bool32 parentalBondBanned:1;
|
||||
bool32 skyBattleBanned:1;
|
||||
bool32 sketchBanned:1;
|
||||
u32 padding:19;
|
||||
//Other
|
||||
bool32 validApprenticeMove:1;
|
||||
u32 padding:3;
|
||||
// end of word
|
||||
|
||||
union {
|
||||
|
||||
@ -3,6 +3,7 @@
|
||||
|
||||
void ReshowBattleScreenDummy(void);
|
||||
void ReshowBattleScreenAfterMenu(void);
|
||||
void ReshowBlankBattleScreenAfterMenu(void);
|
||||
void CreateBattlerSprite(u32 battler);
|
||||
|
||||
#endif // GUARD_RESHOW_BATTLE_SCREEN_H
|
||||
|
||||
@ -339,7 +339,7 @@ static u16 GetRandomAlternateMove(u8 monId)
|
||||
numLearnsetMoves = j;
|
||||
i = 0;
|
||||
|
||||
// i < 5 here is arbitrary, i isnt used and is only incremented when the selected move isnt in sValidApprenticeMoves
|
||||
// i < 5 here is arbitrary, i isn't used and is only incremented when the selected move isn't valid (determined by the validApprenticeMove value)
|
||||
// This while loop contains 3 potential infinite loops, though none of them would occur in the base game
|
||||
while (i < 5)
|
||||
{
|
||||
@ -411,7 +411,7 @@ static u16 GetRandomAlternateMove(u8 monId)
|
||||
|
||||
if (TrySetMove(monId, moveId))
|
||||
{
|
||||
if (sValidApprenticeMoves[moveId])
|
||||
if (gMovesInfo[moveId].validApprenticeMove)
|
||||
break;
|
||||
i++;
|
||||
}
|
||||
|
||||
@ -893,10 +893,10 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
|
||||
// target ability checks
|
||||
if (!DoesBattlerIgnoreAbilityChecks(battlerAtk, aiData->abilities[battlerAtk], move))
|
||||
{
|
||||
if (CanAbilityBlockMove(battlerAtk, battlerDef, move, aiData->abilities[battlerDef], FALSE))
|
||||
if (CanAbilityBlockMove(battlerAtk, battlerDef, move, aiData->abilities[battlerDef], ABILITY_CHECK_TRIGGER))
|
||||
RETURN_SCORE_MINUS(20);
|
||||
|
||||
if (CanAbilityAbsorbMove(battlerAtk, battlerDef, aiData->abilities[battlerDef], move, moveType, FALSE))
|
||||
if (CanAbilityAbsorbMove(battlerAtk, battlerDef, aiData->abilities[battlerDef], move, moveType, ABILITY_CHECK_TRIGGER))
|
||||
RETURN_SCORE_MINUS(20);
|
||||
|
||||
switch (aiData->abilities[battlerDef])
|
||||
@ -2112,7 +2112,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
|
||||
|
||||
if (isDoubleBattle)
|
||||
{
|
||||
if (IsHazardMoveEffect(GetMoveEffect(aiData->partnerMove)) // partner is going to set up hazards
|
||||
if (IsHazardMove(aiData->partnerMove) // partner is going to set up hazards
|
||||
&& AI_IsFaster(BATTLE_PARTNER(battlerAtk), battlerAtk, aiData->partnerMove)) // partner is going to set up before the potential Defog
|
||||
{
|
||||
ADJUST_SCORE(-10);
|
||||
@ -2349,9 +2349,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
|
||||
}
|
||||
break;
|
||||
case EFFECT_NATURAL_GIFT:
|
||||
if (aiData->abilities[battlerAtk] == ABILITY_KLUTZ
|
||||
|| gFieldStatuses & STATUS_FIELD_MAGIC_ROOM
|
||||
|| GetPocketByItemId(gBattleMons[battlerAtk].item) != POCKET_BERRIES)
|
||||
if (!IsBattlerItemEnabled(battlerAtk) || GetPocketByItemId(gBattleMons[battlerAtk].item) != POCKET_BERRIES)
|
||||
ADJUST_SCORE(-10);
|
||||
break;
|
||||
case EFFECT_GRASSY_TERRAIN:
|
||||
@ -2458,9 +2456,8 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
|
||||
}
|
||||
break;
|
||||
case EFFECT_EMBARGO:
|
||||
if (aiData->abilities[battlerDef] == ABILITY_KLUTZ
|
||||
|| gFieldStatuses & STATUS_FIELD_MAGIC_ROOM
|
||||
|| gStatuses3[battlerDef] & STATUS3_EMBARGO
|
||||
if (!IsBattlerItemEnabled(battlerAtk)
|
||||
|| gStatuses3[battlerDef] & STATUS3_EMBARGO
|
||||
|| PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove))
|
||||
ADJUST_SCORE(-10);
|
||||
break;
|
||||
@ -2706,7 +2703,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
|
||||
} // move effect checks
|
||||
|
||||
// Choice items
|
||||
if (HOLD_EFFECT_CHOICE(aiData->holdEffects[battlerAtk]) && gBattleMons[battlerAtk].ability != ABILITY_KLUTZ)
|
||||
if (HOLD_EFFECT_CHOICE(aiData->holdEffects[battlerAtk]) && IsBattlerItemEnabled(battlerAtk))
|
||||
{
|
||||
// Don't use user-target moves ie. Swords Dance, with exceptions
|
||||
if ((moveTarget & MOVE_TARGET_USER)
|
||||
@ -3295,6 +3292,34 @@ static s32 AI_CompareDamagingMoves(u32 battlerAtk, u32 battlerDef, u32 currId)
|
||||
return score;
|
||||
}
|
||||
|
||||
static u32 AI_CalcHoldEffectMoveScore(u32 battlerAtk, u32 battlerDef, u32 move)
|
||||
{
|
||||
struct AiLogicData *aiData = AI_DATA;
|
||||
u32 holdEffect = aiData->holdEffects[battlerAtk];
|
||||
|
||||
s32 score = 0;
|
||||
|
||||
switch (holdEffect)
|
||||
{
|
||||
case HOLD_EFFECT_BLUNDER_POLICY:
|
||||
{
|
||||
u32 moveAcc = aiData->moveAccuracy[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex];
|
||||
|
||||
if (moveAcc <= LOW_ACCURACY_THRESHOLD)
|
||||
{
|
||||
ADJUST_SCORE(GOOD_EFFECT);
|
||||
}
|
||||
else
|
||||
{
|
||||
ADJUST_SCORE(-DECENT_EFFECT);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return score;
|
||||
}
|
||||
|
||||
static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move)
|
||||
{
|
||||
// move data
|
||||
@ -3341,6 +3366,12 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move)
|
||||
if (aiData->holdEffects[battlerAtk] == HOLD_EFFECT_BIG_ROOT && effectiveness >= UQ_4_12(1.0))
|
||||
ADJUST_SCORE(DECENT_EFFECT);
|
||||
break;
|
||||
case EFFECT_DREAM_EATER:
|
||||
case EFFECT_STRENGTH_SAP:
|
||||
case EFFECT_AQUA_RING:
|
||||
if (aiData->holdEffects[battlerAtk] == HOLD_EFFECT_BIG_ROOT)
|
||||
ADJUST_SCORE(DECENT_EFFECT);
|
||||
break;
|
||||
case EFFECT_EXPLOSION:
|
||||
case EFFECT_MEMENTO:
|
||||
if (AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_WILL_SUICIDE && gBattleMons[battlerDef].statStages[STAT_EVASION] < 7)
|
||||
@ -3562,8 +3593,6 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move)
|
||||
case EFFECT_MOONLIGHT:
|
||||
if (ShouldRecover(battlerAtk, battlerDef, move, 50))
|
||||
ADJUST_SCORE(GOOD_EFFECT);
|
||||
if (aiData->holdEffects[battlerAtk] == HOLD_EFFECT_BIG_ROOT)
|
||||
ADJUST_SCORE(DECENT_EFFECT);
|
||||
break;
|
||||
case EFFECT_TOXIC:
|
||||
case EFFECT_POISON:
|
||||
@ -3622,7 +3651,8 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move)
|
||||
break;
|
||||
case EFFECT_SUBSTITUTE:
|
||||
case EFFECT_SHED_TAIL:
|
||||
IncreaseSubstituteMoveScore(battlerAtk, battlerDef, move, &score);
|
||||
ADJUST_SCORE(IncreaseSubstituteMoveScore(battlerAtk, battlerDef, move));
|
||||
break;
|
||||
case EFFECT_MIMIC:
|
||||
if (AI_IsFaster(battlerAtk, battlerDef, move))
|
||||
{
|
||||
@ -3638,7 +3668,8 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move)
|
||||
|| aiData->abilities[battlerDef] == ABILITY_MAGIC_GUARD)
|
||||
break;
|
||||
ADJUST_SCORE(GOOD_EFFECT);
|
||||
if (!HasDamagingMove(battlerDef) || IsBattlerTrapped(battlerDef, FALSE))
|
||||
if (!HasDamagingMove(battlerDef) || IsBattlerTrapped(battlerDef, FALSE)
|
||||
|| aiData->holdEffects[battlerAtk] == HOLD_EFFECT_BIG_ROOT)
|
||||
ADJUST_SCORE(DECENT_EFFECT);
|
||||
break;
|
||||
case EFFECT_DO_NOTHING:
|
||||
@ -3987,7 +4018,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move)
|
||||
{
|
||||
if (isDoubleBattle)
|
||||
{
|
||||
if (IsHazardMoveEffect(GetMoveEffect(aiData->partnerMove)) // Partner is going to set up hazards
|
||||
if (IsHazardMove(aiData->partnerMove) // Partner is going to set up hazards
|
||||
&& AI_IsSlower(battlerAtk, BATTLE_PARTNER(battlerAtk), move)) // Partner going first
|
||||
break; // Don't use Defog if partner is going to set up hazards
|
||||
}
|
||||
@ -4831,6 +4862,7 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score
|
||||
}
|
||||
|
||||
ADJUST_SCORE(AI_CalcMoveEffectScore(battlerAtk, battlerDef, move));
|
||||
ADJUST_SCORE(AI_CalcHoldEffectMoveScore(battlerAtk, battlerDef, move));
|
||||
|
||||
return score;
|
||||
}
|
||||
|
||||
@ -125,6 +125,20 @@ static bool32 IsAceMon(u32 battler, u32 monPartyId)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool32 AreStatsRaised(u32 battler)
|
||||
{
|
||||
u8 buffedStatsValue = 0;
|
||||
s32 i;
|
||||
|
||||
for (i = 0; i < NUM_BATTLE_STATS; i++)
|
||||
{
|
||||
if (gBattleMons[battler].statStages[i] > DEFAULT_STAT_STAGE)
|
||||
buffedStatsValue += gBattleMons[battler].statStages[i] - DEFAULT_STAT_STAGE;
|
||||
}
|
||||
|
||||
return (buffedStatsValue > STAY_IN_STATS_RAISED);
|
||||
}
|
||||
|
||||
void GetAIPartyIndexes(u32 battler, s32 *firstId, s32 *lastId)
|
||||
{
|
||||
if (BATTLE_TWO_VS_ONE_OPPONENT && (battler & BIT_SIDE) == B_SIDE_OPPONENT)
|
||||
@ -408,7 +422,7 @@ static bool32 FindMonThatAbsorbsOpponentsMove(u32 battler)
|
||||
s32 firstId;
|
||||
s32 lastId;
|
||||
struct Pokemon *party;
|
||||
u16 monAbility;
|
||||
u16 monAbility, aiMove;
|
||||
u32 opposingBattler = GetOppositeBattler(battler);
|
||||
u32 incomingMove = AI_DATA->lastUsedMove[opposingBattler];
|
||||
u32 incomingType = GetMoveType(incomingMove);
|
||||
@ -421,9 +435,25 @@ static bool32 FindMonThatAbsorbsOpponentsMove(u32 battler)
|
||||
return FALSE;
|
||||
if (gBattleStruct->prevTurnSpecies[battler] != gBattleMons[battler].species) // AI mon has changed, player's behaviour no longer reliable; note to override this if using AI_FLAG_PREDICT_MOVE
|
||||
return FALSE;
|
||||
|
||||
if (HasSuperEffectiveMoveAgainstOpponents(battler, TRUE) && (RandomPercentage(RNG_AI_SWITCH_ABSORBING_STAY_IN, STAY_IN_ABSORBING_PERCENTAGE) || AI_DATA->aiSwitchPredictionInProgress))
|
||||
return FALSE;
|
||||
if (AreStatsRaised(battler))
|
||||
return FALSE;
|
||||
|
||||
// Don't switch if mon could OHKO
|
||||
for (i = 0; i < MAX_MON_MOVES; i++)
|
||||
{
|
||||
aiMove = gBattleMons[battler].moves[i];
|
||||
if (aiMove != MOVE_NONE)
|
||||
{
|
||||
// Only check damage if it's a damaging move
|
||||
if (!IsBattleMoveStatus(aiMove))
|
||||
{
|
||||
if (AI_DATA->simulatedDmg[battler][opposingBattler][i].expected > gBattleMons[opposingBattler].hp)
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (IsDoubleBattle())
|
||||
{
|
||||
@ -593,6 +623,10 @@ static bool32 ShouldSwitchIfBadlyStatused(u32 battler)
|
||||
{
|
||||
switchMon = TRUE;
|
||||
|
||||
// If we don't have a good switchin, not worth switching
|
||||
if (AI_DATA->mostSuitableMonId[battler] == PARTY_SIZE)
|
||||
switchMon = FALSE;
|
||||
|
||||
// Check if Active Pokemon can KO opponent instead of switching
|
||||
// Will still fall asleep, but take out opposing Pokemon first
|
||||
if (AiExpectsToFaintPlayer(battler))
|
||||
@ -626,7 +660,8 @@ static bool32 ShouldSwitchIfBadlyStatused(u32 battler)
|
||||
|
||||
// Secondary Damage
|
||||
if (monAbility != ABILITY_MAGIC_GUARD
|
||||
&& !AiExpectsToFaintPlayer(battler))
|
||||
&& !AiExpectsToFaintPlayer(battler)
|
||||
&& AI_DATA->mostSuitableMonId[battler] != PARTY_SIZE)
|
||||
{
|
||||
//Toxic
|
||||
if (((gBattleMons[battler].status1 & STATUS1_TOXIC_COUNTER) >= STATUS1_TOXIC_TURN(2))
|
||||
@ -654,6 +689,7 @@ static bool32 ShouldSwitchIfBadlyStatused(u32 battler)
|
||||
// Infatuation
|
||||
if (gBattleMons[battler].status2 & STATUS2_INFATUATION
|
||||
&& !AiExpectsToFaintPlayer(battler)
|
||||
&& AI_DATA->mostSuitableMonId[battler] != PARTY_SIZE
|
||||
&& RandomPercentage(RNG_AI_SWITCH_INFATUATION, GetSwitchChance(SHOULD_SWITCH_INFATUATION)))
|
||||
return SetSwitchinAndSwitch(battler, PARTY_SIZE);
|
||||
}
|
||||
@ -756,20 +792,6 @@ static bool32 HasSuperEffectiveMoveAgainstOpponents(u32 battler, bool32 noRng)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool32 AreStatsRaised(u32 battler)
|
||||
{
|
||||
u8 buffedStatsValue = 0;
|
||||
s32 i;
|
||||
|
||||
for (i = 0; i < NUM_BATTLE_STATS; i++)
|
||||
{
|
||||
if (gBattleMons[battler].statStages[i] > DEFAULT_STAT_STAGE)
|
||||
buffedStatsValue += gBattleMons[battler].statStages[i] - DEFAULT_STAT_STAGE;
|
||||
}
|
||||
|
||||
return (buffedStatsValue > 3);
|
||||
}
|
||||
|
||||
static bool32 FindMonWithFlagsAndSuperEffective(u32 battler, u16 flags, u32 percentChance)
|
||||
{
|
||||
u32 battlerIn1, battlerIn2;
|
||||
@ -902,14 +924,8 @@ static bool32 CanMonSurviveHazardSwitchin(u32 battler)
|
||||
for (j = 0; j < MAX_MON_MOVES; j++)
|
||||
{
|
||||
aiMove = GetMonData(&party[i], MON_DATA_MOVE1 + j, NULL);
|
||||
u32 aiEffect = GetMoveEffect(aiMove);
|
||||
if (aiEffect == EFFECT_RAPID_SPIN
|
||||
|| (B_DEFOG_EFFECT_CLEARING >= GEN_6 && aiEffect == EFFECT_DEFOG)
|
||||
|| aiEffect == EFFECT_TIDY_UP)
|
||||
{
|
||||
// Have a mon that can clear the hazards, so switching out is okay
|
||||
if (IsHazardClearingMove(aiMove)) // Have a mon that can clear the hazards, so switching out is okay
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
// Faints to hazards and party can't clear them, don't switch out
|
||||
@ -950,7 +966,7 @@ static bool32 ShouldSwitchIfBadChoiceLock(u32 battler)
|
||||
{
|
||||
u32 holdEffect = GetBattlerHoldEffect(battler, FALSE);
|
||||
|
||||
if (HOLD_EFFECT_CHOICE(holdEffect) && gBattleMons[battler].ability != ABILITY_KLUTZ)
|
||||
if (HOLD_EFFECT_CHOICE(holdEffect) && IsBattlerItemEnabled(battler))
|
||||
{
|
||||
if (GetMoveCategory(AI_DATA->lastUsedMove[battler]) == DAMAGE_CATEGORY_STATUS && RandomPercentage(RNG_AI_SWITCH_CHOICE_LOCKED, GetSwitchChance(SHOULD_SWITCH_CHOICE_LOCKED)))
|
||||
return SetSwitchinAndSwitch(battler, PARTY_SIZE);
|
||||
@ -1005,6 +1021,23 @@ static bool32 ShouldSwitchIfAttackingStatsLowered(u32 battler)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool32 HasGoodSubstituteMove(u32 battler)
|
||||
{
|
||||
int i;
|
||||
u32 aiMove, aiMoveEffect, opposingBattler = GetOppositeBattler(battler);
|
||||
for (i = 0; i < MAX_MON_MOVES; i++)
|
||||
{
|
||||
aiMove = gBattleMons[battler].moves[i];
|
||||
aiMoveEffect = GetMoveEffect(aiMove);
|
||||
if (IsSubstituteEffect(aiMoveEffect))
|
||||
{
|
||||
if (IncreaseSubstituteMoveScore(battler, opposingBattler, aiMove) > 0)
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool32 ShouldSwitch(u32 battler)
|
||||
{
|
||||
u32 battlerIn1, battlerIn2;
|
||||
@ -1069,19 +1102,21 @@ bool32 ShouldSwitch(u32 battler)
|
||||
return FALSE;
|
||||
|
||||
// NOTE: The sequence of the below functions matter! Do not change unless you have carefully considered the outcome.
|
||||
// Since the order is sequencial, and some of these functions prompt switch to specific party members.
|
||||
// Since the order is sequential, and some of these functions prompt switch to specific party members.
|
||||
|
||||
// FindMon functions can prompt a switch to specific party members that override GetMostSuitableMonToSwitchInto
|
||||
// The rest can prompt a switch to party member returned by GetMostSuitableMonToSwitchInto
|
||||
|
||||
// These Functions can prompt switch to specific party members that override GetMostSuitableMonToSwitchInto
|
||||
if (FindMonThatHitsWonderGuard(battler))
|
||||
return TRUE;
|
||||
if (FindMonThatAbsorbsOpponentsMove(battler))
|
||||
return TRUE;
|
||||
|
||||
// These Functions can prompt switch to party member returned by GetMostSuitableMonToSwitchInto
|
||||
if ((AI_THINKING_STRUCT->aiFlags[GetThinkingBattler(battler)] & AI_FLAG_SMART_SWITCHING) && (CanMonSurviveHazardSwitchin(battler) == FALSE))
|
||||
return FALSE;
|
||||
if (HasGoodSubstituteMove(battler))
|
||||
return FALSE;
|
||||
if (ShouldSwitchIfTrapperInParty(battler))
|
||||
return TRUE;
|
||||
if (FindMonThatAbsorbsOpponentsMove(battler))
|
||||
return TRUE;
|
||||
if (ShouldSwitchIfOpponentChargingOrInvulnerable(battler))
|
||||
return TRUE;
|
||||
if (ShouldSwitchIfTruant(battler))
|
||||
@ -1344,10 +1379,10 @@ bool32 IsMonGrounded(u16 heldItemEffect, u32 ability, u8 type1, u8 type2)
|
||||
{
|
||||
// List that makes mon not grounded
|
||||
if (type1 == TYPE_FLYING || type2 == TYPE_FLYING || ability == ABILITY_LEVITATE
|
||||
|| (heldItemEffect == HOLD_EFFECT_AIR_BALLOON && ability != ABILITY_KLUTZ))
|
||||
|| (heldItemEffect == HOLD_EFFECT_AIR_BALLOON && !(ability == ABILITY_KLUTZ || (gFieldStatuses & STATUS_FIELD_MAGIC_ROOM))))
|
||||
{
|
||||
// List that overrides being off the ground
|
||||
if ((heldItemEffect == HOLD_EFFECT_IRON_BALL && ability != ABILITY_KLUTZ) || (gFieldStatuses & STATUS_FIELD_GRAVITY) || (gFieldStatuses & STATUS_FIELD_MAGIC_ROOM))
|
||||
if ((heldItemEffect == HOLD_EFFECT_IRON_BALL && !(ability == ABILITY_KLUTZ || (gFieldStatuses & STATUS_FIELD_MAGIC_ROOM))) || (gFieldStatuses & STATUS_FIELD_GRAVITY) || (gFieldStatuses & STATUS_FIELD_MAGIC_ROOM))
|
||||
return TRUE;
|
||||
else
|
||||
return FALSE;
|
||||
|
||||
@ -423,23 +423,14 @@ static inline s32 DmgRoll(s32 dmg)
|
||||
bool32 IsDamageMoveUnusable(u32 battlerAtk, u32 battlerDef, u32 move, u32 moveType)
|
||||
{
|
||||
struct AiLogicData *aiData = AI_DATA;
|
||||
u32 battlerDefAbility;
|
||||
|
||||
if (DoesBattlerIgnoreAbilityChecks(battlerAtk, aiData->abilities[battlerAtk], move))
|
||||
battlerDefAbility = ABILITY_NONE;
|
||||
else
|
||||
battlerDefAbility = aiData->abilities[battlerDef];
|
||||
|
||||
if (battlerDef == BATTLE_PARTNER(battlerAtk))
|
||||
battlerDefAbility = aiData->abilities[battlerDef];
|
||||
|
||||
if (gBattleStruct->battlerState[battlerDef].commandingDondozo)
|
||||
return TRUE;
|
||||
|
||||
if (CanAbilityBlockMove(battlerAtk, battlerDef, move, aiData->abilities[battlerDef], FALSE))
|
||||
if (CanAbilityBlockMove(battlerAtk, battlerDef, move, aiData->abilities[battlerDef], ABILITY_CHECK_TRIGGER))
|
||||
return TRUE;
|
||||
|
||||
if (CanAbilityAbsorbMove(battlerAtk, battlerDef, aiData->abilities[battlerDef], move, moveType, FALSE))
|
||||
if (CanAbilityAbsorbMove(battlerAtk, battlerDef, aiData->abilities[battlerDef], move, moveType, ABILITY_CHECK_TRIGGER))
|
||||
return TRUE;
|
||||
|
||||
switch (GetMoveEffect(move))
|
||||
@ -470,7 +461,7 @@ bool32 IsDamageMoveUnusable(u32 battlerAtk, u32 battlerDef, u32 move, u32 moveTy
|
||||
return TRUE;
|
||||
break;
|
||||
case EFFECT_POLTERGEIST:
|
||||
if (AI_DATA->items[battlerDef] == ITEM_NONE || gFieldStatuses & STATUS_FIELD_MAGIC_ROOM || battlerDefAbility == ABILITY_KLUTZ)
|
||||
if (AI_DATA->items[battlerDef] == ITEM_NONE || !IsBattlerItemEnabled(battlerDef))
|
||||
return TRUE;
|
||||
break;
|
||||
case EFFECT_FIRST_TURN_ONLY:
|
||||
@ -533,6 +524,20 @@ static inline s32 SetFixedMoveBasePower(u32 battlerAtk, u32 move)
|
||||
return fixedBasePower;
|
||||
}
|
||||
|
||||
static inline void AI_StoreBattlerTypes(u32 battlerAtk, u32 *types)
|
||||
{
|
||||
types[0] = gBattleMons[battlerAtk].types[0];
|
||||
types[1] = gBattleMons[battlerAtk].types[1];
|
||||
types[2] = gBattleMons[battlerAtk].types[2];
|
||||
}
|
||||
|
||||
static inline void AI_RestoreBattlerTypes(u32 battlerAtk, u32 *types)
|
||||
{
|
||||
gBattleMons[battlerAtk].types[0] = types[0];
|
||||
gBattleMons[battlerAtk].types[1] = types[1];
|
||||
gBattleMons[battlerAtk].types[2] = types[2];
|
||||
}
|
||||
|
||||
static inline void CalcDynamicMoveDamage(struct DamageCalculationData *damageCalcData, s32 *expectedDamage, s32 *minimumDamage, u32 holdEffectAtk, u32 abilityAtk)
|
||||
{
|
||||
u32 move = damageCalcData->move;
|
||||
@ -658,6 +663,9 @@ struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u
|
||||
{
|
||||
s32 critChanceIndex, fixedBasePower;
|
||||
|
||||
u32 types[3];
|
||||
AI_StoreBattlerTypes(battlerAtk, types);
|
||||
|
||||
ProteanTryChangeType(battlerAtk, aiData->abilities[battlerAtk], move, moveType);
|
||||
fixedBasePower = SetFixedMoveBasePower(battlerAtk, move);
|
||||
|
||||
@ -735,6 +743,8 @@ struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u
|
||||
aiData->holdEffects[battlerAtk],
|
||||
aiData->abilities[battlerAtk]);
|
||||
}
|
||||
|
||||
AI_RestoreBattlerTypes(battlerAtk, types);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -1068,8 +1078,15 @@ s32 AI_WhoStrikesFirst(u32 battlerAI, u32 battler, u32 moveConsidered)
|
||||
u32 abilityAI = AI_DATA->abilities[battlerAI];
|
||||
u32 abilityPlayer = AI_DATA->abilities[battler];
|
||||
|
||||
if (GetBattleMovePriority(battlerAI, moveConsidered) > 0)
|
||||
u32 predictedMove = AI_DATA->lastUsedMove[battler]; // TODO update for move prediction
|
||||
|
||||
s8 aiPriority = GetBattleMovePriority(battlerAI, moveConsidered);
|
||||
s8 playerPriority = GetBattleMovePriority(battler, predictedMove);
|
||||
|
||||
if (aiPriority > playerPriority)
|
||||
return AI_IS_FASTER;
|
||||
else if (aiPriority < playerPriority)
|
||||
return AI_IS_SLOWER;
|
||||
|
||||
speedBattlerAI = GetBattlerTotalSpeedStatArgs(battlerAI, abilityAI, holdEffectAI);
|
||||
speedBattler = GetBattlerTotalSpeedStatArgs(battler, abilityPlayer, holdEffectPlayer);
|
||||
@ -1445,8 +1462,10 @@ bool32 IsConfusionMoveEffect(u32 moveEffect)
|
||||
}
|
||||
}
|
||||
|
||||
bool32 IsHazardMoveEffect(u32 moveEffect)
|
||||
bool32 IsHazardMove(u32 move)
|
||||
{
|
||||
// Hazard setting moves like Stealth Rock, Spikes, etc.
|
||||
u32 i, moveEffect = gMovesInfo[move].effect;
|
||||
switch (moveEffect)
|
||||
{
|
||||
case EFFECT_SPIKES:
|
||||
@ -1454,9 +1473,48 @@ bool32 IsHazardMoveEffect(u32 moveEffect)
|
||||
case EFFECT_STICKY_WEB:
|
||||
case EFFECT_STEALTH_ROCK:
|
||||
return TRUE;
|
||||
default:
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
u32 additionalEffectCount = GetMoveAdditionalEffectCount(move);
|
||||
for (i = 0; i < additionalEffectCount; i++)
|
||||
{
|
||||
const struct AdditionalEffect *additionalEffect = GetMoveAdditionalEffectById(move, i);
|
||||
switch (additionalEffect->moveEffect)
|
||||
{
|
||||
case MOVE_EFFECT_STEELSURGE:
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool32 IsHazardClearingMove(u32 move)
|
||||
{
|
||||
// Hazard clearing effects like Rapid Spin, Tidy Up, etc.
|
||||
u32 i, moveEffect = gMovesInfo[move].effect;
|
||||
switch (moveEffect)
|
||||
{
|
||||
case EFFECT_RAPID_SPIN:
|
||||
case EFFECT_TIDY_UP:
|
||||
return TRUE;
|
||||
case EFFECT_DEFOG:
|
||||
if (B_DEFOG_EFFECT_CLEARING >= GEN_6)
|
||||
return TRUE;
|
||||
break;
|
||||
}
|
||||
|
||||
u32 additionalEffectCount = GetMoveAdditionalEffectCount(move);
|
||||
for (i = 0; i < additionalEffectCount; i++)
|
||||
{
|
||||
const struct AdditionalEffect *additionalEffect = GetMoveAdditionalEffectById(move, i);
|
||||
switch (additionalEffect->moveEffect)
|
||||
{
|
||||
case MOVE_EFFECT_DEFOG:
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool32 IsMoveRedirectionPrevented(u32 battlerAtk, u32 move, u32 atkAbility)
|
||||
@ -2360,6 +2418,19 @@ bool32 IsSwitchOutEffect(u32 effect)
|
||||
}
|
||||
}
|
||||
|
||||
bool32 IsSubstituteEffect(u32 effect)
|
||||
{
|
||||
// Substitute effects like Substitute, Shed Tail, etc.
|
||||
switch (effect)
|
||||
{
|
||||
case EFFECT_SUBSTITUTE:
|
||||
case EFFECT_SHED_TAIL:
|
||||
return TRUE;
|
||||
default:
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
bool32 IsChaseEffect(u32 effect)
|
||||
{
|
||||
// Effects that hit switching out mons like Pursuit
|
||||
@ -2931,7 +3002,7 @@ bool32 IsBattlerIncapacitated(u32 battler, u32 ability)
|
||||
if ((gBattleMons[battler].status1 & STATUS1_FREEZE) && !HasThawingMove(battler))
|
||||
return TRUE; // if battler has thawing move we assume they will definitely use it, and thus being frozen should be neglected
|
||||
|
||||
if (gBattleMons[battler].status1 & STATUS1_SLEEP)
|
||||
if (gBattleMons[battler].status1 & STATUS1_SLEEP && !HasMoveEffect(battler, EFFECT_SLEEP_TALK))
|
||||
return TRUE;
|
||||
|
||||
if (gBattleMons[battler].status2 & STATUS2_RECHARGE || (ability == ABILITY_TRUANT && gDisableStructs[battler].truantCounter != 0))
|
||||
@ -3687,6 +3758,20 @@ static const u16 sRecycleEncouragedItems[] =
|
||||
ITEM_CUSTAP_BERRY,
|
||||
ITEM_MENTAL_HERB,
|
||||
ITEM_FOCUS_SASH,
|
||||
ITEM_SALAC_BERRY,
|
||||
ITEM_LIECHI_BERRY,
|
||||
ITEM_AGUAV_BERRY,
|
||||
ITEM_FIGY_BERRY,
|
||||
ITEM_IAPAPA_BERRY,
|
||||
ITEM_MAGO_BERRY,
|
||||
ITEM_WIKI_BERRY,
|
||||
ITEM_MENTAL_HERB,
|
||||
ITEM_POWER_HERB,
|
||||
ITEM_BERRY_JUICE,
|
||||
ITEM_WEAKNESS_POLICY,
|
||||
ITEM_BLUNDER_POLICY,
|
||||
ITEM_KEE_BERRY,
|
||||
ITEM_MARANGA_BERRY,
|
||||
// TODO expand this
|
||||
};
|
||||
|
||||
@ -4065,6 +4150,7 @@ bool32 AI_ShouldCopyStatChanges(u32 battlerAtk, u32 battlerDef)
|
||||
case STAT_SPATK:
|
||||
return (HasMoveWithCategory(battlerAtk, DAMAGE_CATEGORY_SPECIAL));
|
||||
case STAT_ACC:
|
||||
return (HasLowAccuracyMove(battlerAtk, battlerDef));
|
||||
case STAT_EVASION:
|
||||
case STAT_SPEED:
|
||||
return TRUE;
|
||||
@ -4084,7 +4170,10 @@ bool32 AI_ShouldSetUpHazards(u32 battlerAtk, u32 battlerDef, struct AiLogicData
|
||||
if (aiData->abilities[battlerDef] == ABILITY_MAGIC_BOUNCE
|
||||
|| CountUsablePartyMons(battlerDef) == 0
|
||||
|| HasMoveEffect(battlerDef, EFFECT_RAPID_SPIN)
|
||||
|| HasMoveEffect(battlerDef, EFFECT_DEFOG))
|
||||
|| HasMoveEffect(battlerDef, EFFECT_TIDY_UP)
|
||||
|| HasMoveEffect(battlerDef, EFFECT_DEFOG)
|
||||
|| HasMoveWithAdditionalEffect(battlerDef, MOVE_EFFECT_DEFOG)
|
||||
|| HasMoveEffect(battlerDef, EFFECT_MAGIC_COAT))
|
||||
return FALSE;
|
||||
|
||||
return TRUE;
|
||||
@ -4147,31 +4236,32 @@ bool32 AI_ShouldSpicyExtract(u32 battlerAtk, u32 battlerAtkPartner, u32 move, st
|
||||
&& HasMoveWithCategory(battlerAtkPartner, DAMAGE_CATEGORY_PHYSICAL));
|
||||
}
|
||||
|
||||
void IncreaseSubstituteMoveScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score)
|
||||
u32 IncreaseSubstituteMoveScore(u32 battlerAtk, u32 battlerDef, u32 move)
|
||||
{
|
||||
u32 effect = GetMoveEffect(move);
|
||||
u32 scoreIncrease = 0;
|
||||
if (effect == EFFECT_SUBSTITUTE) // Substitute specific
|
||||
{
|
||||
if (HasAnyKnownMove(battlerDef) && GetBestDmgFromBattler(battlerDef, battlerAtk) < gBattleMons[battlerAtk].maxHP / 4)
|
||||
ADJUST_SCORE_PTR(GOOD_EFFECT);
|
||||
scoreIncrease += GOOD_EFFECT;
|
||||
}
|
||||
else if (effect == EFFECT_SHED_TAIL) // Shed Tail specific
|
||||
{
|
||||
if ((ShouldPivot(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef], move, AI_THINKING_STRUCT->movesetIndex))
|
||||
&& (HasAnyKnownMove(battlerDef) && (GetBestDmgFromBattler(battlerDef, battlerAtk) < gBattleMons[battlerAtk].maxHP / 2)))
|
||||
ADJUST_SCORE_PTR(BEST_EFFECT);
|
||||
scoreIncrease += BEST_EFFECT;
|
||||
}
|
||||
|
||||
if (gStatuses3[battlerDef] & STATUS3_PERISH_SONG)
|
||||
ADJUST_SCORE_PTR(GOOD_EFFECT);
|
||||
scoreIncrease += GOOD_EFFECT;
|
||||
|
||||
if (gBattleMons[battlerDef].status1 & STATUS1_SLEEP)
|
||||
ADJUST_SCORE_PTR(GOOD_EFFECT);
|
||||
scoreIncrease += GOOD_EFFECT;
|
||||
else if (gBattleMons[battlerDef].status1 & (STATUS1_BURN | STATUS1_PSN_ANY | STATUS1_FROSTBITE))
|
||||
ADJUST_SCORE_PTR(DECENT_EFFECT);
|
||||
scoreIncrease += DECENT_EFFECT;
|
||||
|
||||
if (IsBattlerPredictedToSwitch(battlerDef))
|
||||
ADJUST_SCORE(DECENT_EFFECT);
|
||||
scoreIncrease += DECENT_EFFECT;
|
||||
|
||||
if (HasMoveEffect(battlerDef, EFFECT_SLEEP)
|
||||
|| HasMoveEffect(battlerDef, EFFECT_TOXIC)
|
||||
@ -4180,8 +4270,33 @@ void IncreaseSubstituteMoveScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *
|
||||
|| HasMoveEffect(battlerDef, EFFECT_WILL_O_WISP)
|
||||
|| HasMoveEffect(battlerDef, EFFECT_CONFUSE)
|
||||
|| HasMoveEffect(battlerDef, EFFECT_LEECH_SEED))
|
||||
ADJUST_SCORE_PTR(GOOD_EFFECT);
|
||||
scoreIncrease += GOOD_EFFECT;
|
||||
|
||||
if (AI_DATA->hpPercents[battlerAtk] > 70)
|
||||
ADJUST_SCORE_PTR(WEAK_EFFECT);
|
||||
scoreIncrease += WEAK_EFFECT;
|
||||
return scoreIncrease;
|
||||
}
|
||||
|
||||
bool32 HasLowAccuracyMove(u32 battlerAtk, u32 battlerDef)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < MAX_MON_MOVES; i++)
|
||||
{
|
||||
if (AI_DATA->moveAccuracy[battlerAtk][battlerDef][i] <= LOW_ACCURACY_THRESHOLD)
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool32 IsBattlerItemEnabled(u32 battler)
|
||||
{
|
||||
if (AI_THINKING_STRUCT->aiFlags[battler] & AI_FLAG_NEGATE_UNAWARE)
|
||||
return TRUE;
|
||||
if (gFieldStatuses & STATUS_FIELD_MAGIC_ROOM)
|
||||
return FALSE;
|
||||
if (gStatuses3[battler] & STATUS3_EMBARGO)
|
||||
return FALSE;
|
||||
if (gBattleMons[battler].ability == ABILITY_KLUTZ && !(gStatuses3[battler] & STATUS3_GASTRO_ACID))
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@ -304,7 +304,7 @@ void DoMoveAnim(u16 move)
|
||||
// Make sure the anim target of moves hitting everyone is at the opposite side.
|
||||
if (GetBattlerMoveTargetType(gBattlerAttacker, move) & MOVE_TARGET_FOES_AND_ALLY && IsDoubleBattle())
|
||||
{
|
||||
while (GetBattlerSide(gBattleAnimAttacker) == GetBattlerSide(gBattleAnimTarget))
|
||||
while (IsBattlerAlly(gBattleAnimAttacker, gBattleAnimTarget))
|
||||
{
|
||||
if (++gBattleAnimTarget >= MAX_BATTLERS_COUNT)
|
||||
gBattleAnimTarget = 0;
|
||||
@ -563,7 +563,7 @@ static u8 GetBattleAnimMoveTargets(u8 battlerArgIndex, u8 *targets)
|
||||
case MOVE_TARGET_BOTH: // all opponents
|
||||
for (i = 0; i < gBattlersCount; i++)
|
||||
{
|
||||
if (i != ignoredTgt && !IsAlly(i, ignoredTgt) && IS_ALIVE_AND_PRESENT(i))
|
||||
if (i != ignoredTgt && !IsBattlerAlly(i, ignoredTgt) && IS_ALIVE_AND_PRESENT(i))
|
||||
targets[numTargets++] = i + MAX_BATTLERS_COUNT;
|
||||
}
|
||||
break;
|
||||
@ -2157,8 +2157,7 @@ static void Cmd_teamattack_moveback(void)
|
||||
sBattleAnimScriptPtr += 2;
|
||||
|
||||
// Apply to double battles when attacking own side
|
||||
if (!IsContest() && IsDoubleBattle()
|
||||
&& GetBattlerSide(gBattleAnimAttacker) == GetBattlerSide(gBattleAnimTarget))
|
||||
if (!IsContest() && IsDoubleBattle() && IsBattlerAlly(gBattleAnimAttacker, gBattleAnimTarget))
|
||||
{
|
||||
if (wantedBattler == ANIM_ATTACKER)
|
||||
{
|
||||
@ -2195,7 +2194,7 @@ static void Cmd_teamattack_movefwd(void)
|
||||
|
||||
// Apply to double battles when attacking own side
|
||||
if (!IsContest() && IsDoubleBattle()
|
||||
&& GetBattlerSide(gBattleAnimAttacker) == GetBattlerSide(gBattleAnimTarget))
|
||||
&& IsBattlerAlly(gBattleAnimAttacker, gBattleAnimTarget))
|
||||
{
|
||||
if (wantedBattler == ANIM_ATTACKER)
|
||||
{
|
||||
|
||||
@ -389,7 +389,7 @@ void AnimTranslateStinger(struct Sprite *sprite)
|
||||
}
|
||||
}
|
||||
|
||||
if (!IsContest() && GetBattlerSide(gBattleAnimAttacker) == GetBattlerSide(gBattleAnimTarget))
|
||||
if (!IsContest() && IsBattlerAlly(gBattleAnimAttacker, gBattleAnimTarget))
|
||||
{
|
||||
if (GetBattlerPosition(gBattleAnimTarget) == B_POSITION_PLAYER_LEFT
|
||||
|| GetBattlerPosition(gBattleAnimTarget) == B_POSITION_OPPONENT_LEFT)
|
||||
|
||||
@ -4022,7 +4022,7 @@ static const union AffineAnimCmd *const sAffineAnims_TeraStarstormBeamRing[] =
|
||||
sAffineAnim_TeraStarstormBeamRing,
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gTeraStarstormBeamSpriteTemplate =
|
||||
const struct SpriteTemplate gTeraStarstormBeamSpriteTemplate =
|
||||
{
|
||||
.tileTag = ANIM_TAG_STARSTORM,
|
||||
.paletteTag = ANIM_TAG_STARSTORM,
|
||||
@ -4170,7 +4170,7 @@ void AnimTranslateLinearSingleSineWave(struct Sprite *sprite)
|
||||
|
||||
sprite->data[5] = gBattleAnimArgs[5];
|
||||
InitAnimArcTranslation(sprite);
|
||||
if (GetBattlerSide(gBattleAnimAttacker) == GetBattlerSide(gBattleAnimTarget))
|
||||
if (IsBattlerAlly(gBattleAnimAttacker, gBattleAnimTarget))
|
||||
sprite->data[0] = 1;
|
||||
else
|
||||
sprite->data[0] = 0;
|
||||
@ -6845,10 +6845,12 @@ static void TrySwapWishBattlerIds(u32 battlerAtk, u32 battlerPartner)
|
||||
// if used future sight on opposing side, properly track who used it
|
||||
if (gSideStatuses[oppSide] & SIDE_STATUS_FUTUREATTACK)
|
||||
{
|
||||
u32 battlerAtkSide = GetBattlerSide(battlerAtk);
|
||||
for (i = 0; i < gBattlersCount; i++)
|
||||
{
|
||||
if (IsAlly(i,battlerAtk))
|
||||
if (battlerAtkSide == GetBattlerSide(i))
|
||||
continue; // only on opposing side
|
||||
|
||||
if (gWishFutureKnock.futureSightBattlerIndex[i] == battlerAtk)
|
||||
{
|
||||
// if target was attacked with future sight from us, now they'll be the partner slot
|
||||
|
||||
@ -717,7 +717,7 @@ static void AnimSunlight(struct Sprite *sprite)
|
||||
// arg 6: ? (todo: something related to which mon the pixel offsets are based on)
|
||||
static void AnimEmberFlare(struct Sprite *sprite)
|
||||
{
|
||||
if (GetBattlerSide(gBattleAnimAttacker) == GetBattlerSide(gBattleAnimTarget)
|
||||
if (IsBattlerAlly(gBattleAnimAttacker, gBattleAnimTarget)
|
||||
&& (gBattleAnimAttacker == GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT)
|
||||
|| gBattleAnimAttacker == GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT)))
|
||||
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
|
||||
|
||||
@ -8896,7 +8896,7 @@ static void SpriteCB_AnimSpriteOnTargetSideCentre(struct Sprite *sprite)
|
||||
|
||||
if (!sprite->data[0])
|
||||
{
|
||||
if (IsAlly(gBattleAnimAttacker, target))
|
||||
if (IsBattlerAlly(gBattleAnimAttacker, target))
|
||||
{
|
||||
if (IsDoubleBattle())
|
||||
InitSpritePosToAnimAttackersCentre(sprite, FALSE);
|
||||
@ -9072,7 +9072,7 @@ static void SpriteCB_DragonEnergyShot(struct Sprite* sprite)
|
||||
u8 def1 = gBattleAnimTarget;
|
||||
u8 def2 = BATTLE_PARTNER(def1);
|
||||
|
||||
if (!IsDoubleBattle() || IsAlly(gBattleAnimAttacker, gBattleAnimTarget))
|
||||
if (!IsDoubleBattle() || IsBattlerAlly(gBattleAnimAttacker, gBattleAnimTarget))
|
||||
y = GetBattlerSpriteCoord(def1, BATTLER_COORD_Y_PIC_OFFSET);
|
||||
else
|
||||
{
|
||||
@ -9172,7 +9172,7 @@ static void SpriteCB_GlacialLance(struct Sprite* sprite)
|
||||
|
||||
sprite->data[0] = gBattleAnimArgs[6];
|
||||
|
||||
if (!IsDoubleBattle() || IsAlly(gBattleAnimAttacker, gBattleAnimTarget))
|
||||
if (!IsDoubleBattle() || IsBattlerAlly(gBattleAnimAttacker, gBattleAnimTarget))
|
||||
{
|
||||
sprite->data[2] = GetBattlerSpriteCoord(def1, BATTLER_COORD_X_2) + gBattleAnimArgs[2]; //Converge on target
|
||||
sprite->data[4] = GetBattlerSpriteCoord(def1, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3];
|
||||
|
||||
@ -501,7 +501,7 @@ static void AnimPsychoCut(struct Sprite *sprite)
|
||||
}
|
||||
}
|
||||
|
||||
if (!IsContest() && GetBattlerSide(gBattleAnimAttacker) == GetBattlerSide(gBattleAnimTarget))
|
||||
if (!IsContest() && IsBattlerAlly(gBattleAnimAttacker, gBattleAnimTarget))
|
||||
{
|
||||
if (GetBattlerPosition(gBattleAnimTarget) == B_POSITION_PLAYER_LEFT
|
||||
|| GetBattlerPosition(gBattleAnimTarget) == B_POSITION_OPPONENT_LEFT)
|
||||
|
||||
@ -403,7 +403,7 @@ void AnimTask_CentredFrozenIceCube(u8 taskId)
|
||||
u8 battler1 = gBattleAnimTarget;
|
||||
u8 battler2 = BATTLE_PARTNER(battler1);
|
||||
|
||||
if (!IsDoubleBattle() || IsAlly(gBattleAnimAttacker, gBattleAnimTarget))
|
||||
if (!IsDoubleBattle() || IsBattlerAlly(gBattleAnimAttacker, gBattleAnimTarget))
|
||||
{
|
||||
x = GetBattlerSpriteCoord(battler1, BATTLER_COORD_X_2);
|
||||
y = GetBattlerSpriteCoord(battler1, BATTLER_COORD_Y_PIC_OFFSET);
|
||||
|
||||
@ -1036,7 +1036,7 @@ void AnimTask_SetAnimAttackerAndTargetForEffectTgt(u8 taskId)
|
||||
|
||||
void AnimTask_IsTargetSameSide(u8 taskId)
|
||||
{
|
||||
if (GetBattlerSide(gBattleAnimAttacker) == GetBattlerSide(gBattleAnimTarget))
|
||||
if (IsBattlerAlly(gBattleAnimAttacker, gBattleAnimTarget))
|
||||
gBattleAnimArgs[ARG_RET_ID] = TRUE;
|
||||
else
|
||||
gBattleAnimArgs[ARG_RET_ID] = FALSE;
|
||||
|
||||
@ -940,7 +940,7 @@ static void AnimHydroCannonBeam(struct Sprite *sprite)
|
||||
{
|
||||
bool8 animType;
|
||||
u8 coordType;
|
||||
if (GetBattlerSide(gBattleAnimAttacker) == GetBattlerSide(gBattleAnimTarget))
|
||||
if (IsBattlerAlly(gBattleAnimAttacker, gBattleAnimTarget))
|
||||
{
|
||||
gBattleAnimArgs[0] *= -1;
|
||||
if (GetBattlerPosition(gBattleAnimAttacker) == B_POSITION_PLAYER_LEFT || GetBattlerPosition(gBattleAnimAttacker) == B_POSITION_OPPONENT_LEFT)
|
||||
|
||||
@ -560,7 +560,7 @@ static void OpponentHandleChooseMove(u32 battler)
|
||||
default:
|
||||
{
|
||||
u16 chosenMove = moveInfo->moves[chosenMoveId];
|
||||
if (GetBattlerMoveTargetType(battler, chosenMove) & (MOVE_TARGET_USER_OR_SELECTED | MOVE_TARGET_USER))
|
||||
if (GetBattlerMoveTargetType(battler, chosenMove) & MOVE_TARGET_USER)
|
||||
gBattlerTarget = battler;
|
||||
if (GetBattlerMoveTargetType(battler, chosenMove) & MOVE_TARGET_BOTH)
|
||||
{
|
||||
@ -595,7 +595,7 @@ static void OpponentHandleChooseMove(u32 battler)
|
||||
move = moveInfo->moves[chosenMoveId];
|
||||
} while (move == MOVE_NONE);
|
||||
|
||||
if (GetBattlerMoveTargetType(battler, move) & (MOVE_TARGET_USER_OR_SELECTED | MOVE_TARGET_USER))
|
||||
if (GetBattlerMoveTargetType(battler, move) & MOVE_TARGET_USER)
|
||||
BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, (chosenMoveId) | (battler << 8));
|
||||
else if (IsDoubleBattle())
|
||||
{
|
||||
|
||||
@ -495,8 +495,6 @@ void HandleInputChooseTarget(u32 battler)
|
||||
case B_POSITION_PLAYER_RIGHT:
|
||||
if (battler != gMultiUsePlayerCursor)
|
||||
i++;
|
||||
else if (moveTarget & MOVE_TARGET_USER_OR_SELECTED)
|
||||
i++;
|
||||
break;
|
||||
case B_POSITION_OPPONENT_LEFT:
|
||||
case B_POSITION_OPPONENT_RIGHT:
|
||||
@ -505,7 +503,8 @@ void HandleInputChooseTarget(u32 battler)
|
||||
}
|
||||
|
||||
if (gAbsentBattlerFlags & (1u << gMultiUsePlayerCursor)
|
||||
|| !CanTargetBattler(battler, gMultiUsePlayerCursor, move))
|
||||
|| !CanTargetBattler(battler, gMultiUsePlayerCursor, move)
|
||||
|| (moveTarget & MOVE_TARGET_OPPONENT && GetBattlerSide(gMultiUsePlayerCursor) == B_SIDE_PLAYER))
|
||||
i = 0;
|
||||
} while (i == 0);
|
||||
}
|
||||
@ -545,8 +544,6 @@ void HandleInputChooseTarget(u32 battler)
|
||||
case B_POSITION_PLAYER_RIGHT:
|
||||
if (battler != gMultiUsePlayerCursor)
|
||||
i++;
|
||||
else if (moveTarget & MOVE_TARGET_USER_OR_SELECTED)
|
||||
i++;
|
||||
break;
|
||||
case B_POSITION_OPPONENT_LEFT:
|
||||
case B_POSITION_OPPONENT_RIGHT:
|
||||
@ -555,7 +552,8 @@ void HandleInputChooseTarget(u32 battler)
|
||||
}
|
||||
|
||||
if (gAbsentBattlerFlags & (1u << gMultiUsePlayerCursor)
|
||||
|| !CanTargetBattler(battler, gMultiUsePlayerCursor, move))
|
||||
|| !CanTargetBattler(battler, gMultiUsePlayerCursor, move)
|
||||
|| (moveTarget & MOVE_TARGET_OPPONENT && GetBattlerSide(gMultiUsePlayerCursor) == B_SIDE_PLAYER))
|
||||
i = 0;
|
||||
} while (i == 0);
|
||||
}
|
||||
@ -690,12 +688,7 @@ void HandleInputChooseMove(u32 battler)
|
||||
else
|
||||
gMultiUsePlayerCursor = GetOpposingSideBattler(battler);
|
||||
|
||||
if (!gBattleResources->bufferA[battler][1]) // not a double battle
|
||||
{
|
||||
if (moveTarget & MOVE_TARGET_USER_OR_SELECTED && !gBattleResources->bufferA[battler][2])
|
||||
canSelectTarget = 1;
|
||||
}
|
||||
else // double battle
|
||||
if (gBattleResources->bufferA[battler][1]) // a double battle
|
||||
{
|
||||
if (!(moveTarget & (MOVE_TARGET_RANDOM | MOVE_TARGET_BOTH | MOVE_TARGET_DEPENDS | MOVE_TARGET_FOES_AND_ALLY | MOVE_TARGET_OPPONENTS_FIELD | MOVE_TARGET_USER | MOVE_TARGET_ALLY)))
|
||||
canSelectTarget = 1; // either selected or user
|
||||
@ -706,7 +699,7 @@ void HandleInputChooseMove(u32 battler)
|
||||
{
|
||||
canSelectTarget = 0;
|
||||
}
|
||||
else if (!(moveTarget & (MOVE_TARGET_USER | MOVE_TARGET_USER_OR_SELECTED)) && CountAliveMonsInBattle(BATTLE_ALIVE_EXCEPT_BATTLER, battler) <= 1)
|
||||
else if (!(moveTarget & MOVE_TARGET_USER) && CountAliveMonsInBattle(BATTLE_ALIVE_EXCEPT_BATTLER, battler) <= 1)
|
||||
{
|
||||
gMultiUsePlayerCursor = GetDefaultMoveTarget(battler);
|
||||
canSelectTarget = 0;
|
||||
@ -749,7 +742,7 @@ void HandleInputChooseMove(u32 battler)
|
||||
case 1:
|
||||
gBattlerControllerFuncs[battler] = HandleInputChooseTarget;
|
||||
|
||||
if (moveTarget & (MOVE_TARGET_USER | MOVE_TARGET_USER_OR_SELECTED))
|
||||
if (moveTarget & MOVE_TARGET_USER)
|
||||
gMultiUsePlayerCursor = battler;
|
||||
else if (gAbsentBattlerFlags & (1u << GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)))
|
||||
gMultiUsePlayerCursor = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
|
||||
|
||||
@ -353,7 +353,7 @@ static void PlayerPartnerHandleChooseMove(u32 battler)
|
||||
gBattlerTarget = gBattleStruct->aiChosenTarget[battler];
|
||||
u32 moveTarget = GetBattlerMoveTargetType(battler, moveInfo->moves[chosenMoveId]);
|
||||
|
||||
if (moveTarget & (MOVE_TARGET_USER | MOVE_TARGET_USER_OR_SELECTED))
|
||||
if (moveTarget & MOVE_TARGET_USER)
|
||||
gBattlerTarget = battler;
|
||||
else if (moveTarget & MOVE_TARGET_BOTH)
|
||||
{
|
||||
|
||||
@ -326,7 +326,7 @@ static u8 GetBattlePalaceMoveGroup(u8 battler, u16 move)
|
||||
switch (GetBattlerMoveTargetType(battler, move))
|
||||
{
|
||||
case MOVE_TARGET_SELECTED:
|
||||
case MOVE_TARGET_USER_OR_SELECTED:
|
||||
case MOVE_TARGET_OPPONENT:
|
||||
case MOVE_TARGET_RANDOM:
|
||||
case MOVE_TARGET_BOTH:
|
||||
case MOVE_TARGET_FOES_AND_ALLY:
|
||||
|
||||
@ -371,10 +371,10 @@ void UpdateIndicatorLevelData(u32 healthboxId, u32 level)
|
||||
|
||||
static const s8 sIndicatorPositions[][2] =
|
||||
{
|
||||
[B_POSITION_PLAYER_LEFT] = {53, -9},
|
||||
[B_POSITION_OPPONENT_LEFT] = {44, -9},
|
||||
[B_POSITION_PLAYER_RIGHT] = {52, -9},
|
||||
[B_POSITION_OPPONENT_RIGHT] = {44, -9},
|
||||
[B_POSITION_PLAYER_LEFT] = {49, -9},
|
||||
[B_POSITION_OPPONENT_LEFT] = {40, -9},
|
||||
[B_POSITION_PLAYER_RIGHT] = {48, -9},
|
||||
[B_POSITION_OPPONENT_RIGHT] = {40, -9},
|
||||
};
|
||||
|
||||
void CreateIndicatorSprite(u32 battler)
|
||||
|
||||
@ -513,7 +513,8 @@ static void CB2_InitBattleInternal(void)
|
||||
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && !(gBattleTypeFlags & (BATTLE_TYPE_FRONTIER
|
||||
| BATTLE_TYPE_EREADER_TRAINER
|
||||
| BATTLE_TYPE_TRAINER_HILL)))
|
||||
| BATTLE_TYPE_TRAINER_HILL
|
||||
| BATTLE_TYPE_RECORDED)))
|
||||
{
|
||||
gBattleTypeFlags |= (IsTrainerDoubleBattle(TRAINER_BATTLE_PARAM.opponentA) ? BATTLE_TYPE_DOUBLE : 0);
|
||||
}
|
||||
@ -3205,6 +3206,9 @@ void SwitchInClearSetData(u32 battler)
|
||||
gCurrentMove = MOVE_NONE;
|
||||
gBattleStruct->arenaTurnCounter = 0xFF;
|
||||
|
||||
// Restore struct member so replacement does not miss timing
|
||||
gSpecialStatuses[battler].switchInAbilityDone = FALSE;
|
||||
|
||||
// Reset damage to prevent things like red card activating if the switched-in mon is holding it
|
||||
gSpecialStatuses[battler].physicalDmg = 0;
|
||||
gSpecialStatuses[battler].specialDmg = 0;
|
||||
@ -3875,7 +3879,7 @@ static void TryDoEventsBeforeFirstTurn(void)
|
||||
gBattleStruct->monToSwitchIntoId[i] = PARTY_SIZE;
|
||||
gChosenActionByBattler[i] = B_ACTION_NONE;
|
||||
gChosenMoveByBattler[i] = MOVE_NONE;
|
||||
gBattleStruct->battlerState[i].absentBattlerFlags = gAbsentBattlerFlags & (1u << i);
|
||||
gBattleStruct->battlerState[i].absentBattlerFlags = (gAbsentBattlerFlags & (1u << i) ? TRUE : FALSE);
|
||||
}
|
||||
TurnValuesCleanUp(FALSE);
|
||||
SpecialStatusesClear();
|
||||
@ -3985,7 +3989,7 @@ void BattleTurnPassed(void)
|
||||
{
|
||||
gChosenActionByBattler[i] = B_ACTION_NONE;
|
||||
gChosenMoveByBattler[i] = MOVE_NONE;
|
||||
gBattleStruct->battlerState[i].absentBattlerFlags = gAbsentBattlerFlags & (1u << i);
|
||||
gBattleStruct->battlerState[i].absentBattlerFlags = (gAbsentBattlerFlags & (1u << i) ? TRUE : FALSE);
|
||||
gBattleStruct->monToSwitchIntoId[i] = PARTY_SIZE;
|
||||
gStatuses4[i] &= ~STATUS4_ELECTRIFIED;
|
||||
gBattleMons[i].status2 &= ~STATUS2_FLINCHED;
|
||||
|
||||
@ -344,6 +344,7 @@ static bool8 CanBurnHitThaw(u16 move);
|
||||
static u32 GetNextTarget(u32 moveTarget, bool32 excludeCurrent);
|
||||
static void TryUpdateEvolutionTracker(u32 evolutionMethod, u32 upAmount, u16 usedMove);
|
||||
static void AccuracyCheck(bool32 recalcDragonDarts, const u8 *nextInstr, const u8 *failInstr, u16 move);
|
||||
static void ResetValuesForCalledMove(void);
|
||||
|
||||
static void Cmd_attackcanceler(void);
|
||||
static void Cmd_accuracycheck(void);
|
||||
@ -1147,19 +1148,6 @@ bool32 ProteanTryChangeType(u32 battler, u32 ability, u32 move, u32 moveType)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool32 ShouldTeraShellDistortTypeMatchups(u32 move, u32 battlerDef)
|
||||
{
|
||||
if (!gSpecialStatuses[battlerDef].distortedTypeMatchups
|
||||
&& gBattleMons[battlerDef].species == SPECIES_TERAPAGOS_TERASTAL
|
||||
&& gBattleMons[battlerDef].hp == gBattleMons[battlerDef].maxHP
|
||||
&& !IsBattleMoveStatus(move)
|
||||
&& !(gBattleStruct->moveResultFlags[battlerDef] & MOVE_RESULT_NO_EFFECT)
|
||||
&& GetBattlerAbility(battlerDef) == ABILITY_TERA_SHELL)
|
||||
return TRUE;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool32 IsMoveNotAllowedInSkyBattles(u32 move)
|
||||
{
|
||||
return (gBattleStruct->isSkyBattle && IsMoveSkyBattleBanned(gCurrentMove));
|
||||
@ -1209,6 +1197,9 @@ static void Cmd_attackcanceler(void)
|
||||
|
||||
if (AbilityBattleEffects(ABILITYEFFECT_MOVES_BLOCK, gBattlerTarget, 0, 0, 0))
|
||||
return;
|
||||
if (gMovesInfo[gCurrentMove].effect == EFFECT_PARALYZE && AbilityBattleEffects(ABILITYEFFECT_ABSORBING, gBattlerTarget, 0, 0, gCurrentMove))
|
||||
return;
|
||||
|
||||
if (!gBattleMons[gBattlerAttacker].pp[gCurrMovePos] && gCurrentMove != MOVE_STRUGGLE
|
||||
&& !(gHitMarker & (HITMARKER_ALLOW_NO_PP | HITMARKER_NO_ATTACKSTRING | HITMARKER_NO_PPDEDUCT))
|
||||
&& !(gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS))
|
||||
@ -2008,10 +1999,21 @@ static void Cmd_critcalc(void)
|
||||
gBattlescriptCurrInstr = cmd->nextInstr;
|
||||
}
|
||||
|
||||
static inline void GetShellSideArmCategory(u32 battlerDef)
|
||||
static inline void CalculateAndSetMoveDamage(struct DamageCalculationData *damageCalcData, u32 battlerDef)
|
||||
{
|
||||
if (GetMoveEffect(gCurrentMove) == EFFECT_SHELL_SIDE_ARM)
|
||||
gBattleStruct->swapDamageCategory = (gBattleStruct->shellSideArmCategory[gBattlerAttacker][battlerDef] != GetMoveCategory(gCurrentMove));
|
||||
|
||||
damageCalcData->battlerDef = battlerDef;
|
||||
damageCalcData->isCrit = gSpecialStatuses[battlerDef].criticalHit;
|
||||
gBattleStruct->moveDamage[battlerDef] = CalculateMoveDamage(damageCalcData, 0);
|
||||
|
||||
// Slighly hacky but we need to check move result flags for distortion match-up as well but it can only be done after damage calcs
|
||||
if (gSpecialStatuses[battlerDef].distortedTypeMatchups && gBattleStruct->moveResultFlags[battlerDef] & MOVE_RESULT_NO_EFFECT)
|
||||
{
|
||||
gSpecialStatuses[battlerDef].distortedTypeMatchups = FALSE;
|
||||
gSpecialStatuses[battlerDef].teraShellAbilityDone = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
static void Cmd_damagecalc(void)
|
||||
@ -2043,28 +2045,12 @@ static void Cmd_damagecalc(void)
|
||||
|| gBattleStruct->moveResultFlags[battlerDef] & MOVE_RESULT_NO_EFFECT)
|
||||
continue;
|
||||
|
||||
if (ShouldTeraShellDistortTypeMatchups(gCurrentMove, battlerDef))
|
||||
{
|
||||
gSpecialStatuses[battlerDef].distortedTypeMatchups = TRUE;
|
||||
gSpecialStatuses[battlerDef].teraShellAbilityDone = TRUE;
|
||||
}
|
||||
GetShellSideArmCategory(battlerDef);
|
||||
damageCalcData.battlerDef = battlerDef;
|
||||
damageCalcData.isCrit = gSpecialStatuses[battlerDef].criticalHit;
|
||||
gBattleStruct->moveDamage[battlerDef] = CalculateMoveDamage(&damageCalcData, 0);
|
||||
CalculateAndSetMoveDamage(&damageCalcData, battlerDef);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (ShouldTeraShellDistortTypeMatchups(gCurrentMove, gBattlerTarget))
|
||||
{
|
||||
gSpecialStatuses[gBattlerTarget].distortedTypeMatchups = TRUE;
|
||||
gSpecialStatuses[gBattlerTarget].teraShellAbilityDone = TRUE;
|
||||
}
|
||||
GetShellSideArmCategory(gBattlerTarget);
|
||||
damageCalcData.battlerDef = gBattlerTarget;
|
||||
damageCalcData.isCrit = gSpecialStatuses[gBattlerTarget].criticalHit;
|
||||
gBattleStruct->moveDamage[gBattlerTarget] = CalculateMoveDamage(&damageCalcData, 0);
|
||||
CalculateAndSetMoveDamage(&damageCalcData, gBattlerTarget);
|
||||
}
|
||||
|
||||
gBattlescriptCurrInstr = cmd->nextInstr;
|
||||
@ -3901,7 +3887,7 @@ void SetMoveEffect(bool32 primary, bool32 certain)
|
||||
gProtectStructs[gBattlerTarget].banefulBunkered = FALSE;
|
||||
gProtectStructs[gBattlerTarget].obstructed = FALSE;
|
||||
gProtectStructs[gBattlerTarget].silkTrapped = FALSE;
|
||||
gProtectStructs[gBattlerAttacker].burningBulwarked = FALSE;
|
||||
gProtectStructs[gBattlerTarget].burningBulwarked = FALSE;
|
||||
BattleScriptPush(gBattlescriptCurrInstr + 1);
|
||||
if (gCurrentMove == MOVE_HYPERSPACE_FURY)
|
||||
gBattlescriptCurrInstr = BattleScript_HyperspaceFuryRemoveProtect;
|
||||
@ -6377,6 +6363,7 @@ static void Cmd_moveend(void)
|
||||
else if (moveRecoil > 0
|
||||
&& !(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT)
|
||||
&& IsBattlerAlive(gBattlerAttacker)
|
||||
&& IsBattlerTurnDamaged(gBattlerTarget)
|
||||
&& gBattleScripting.savedDmg != 0) // Some checks may be redundant alongside this one
|
||||
{
|
||||
gBattleStruct->moveDamage[gBattlerAttacker] = max(1, gBattleScripting.savedDmg * max(1, moveRecoil) / 100);
|
||||
@ -7346,7 +7333,7 @@ static void Cmd_moveend(void)
|
||||
else if (IsBattlerAlive(gBattlerTarget))
|
||||
{
|
||||
gBattlerAttacker = gBattlerTarget;
|
||||
if (gBattleStruct->pursuitSwitchByMove)
|
||||
if (gBattleStruct->pursuitStoredSwitch == PARTY_SIZE)
|
||||
gBattlescriptCurrInstr = BattleScript_MoveSwitchOpenPartyScreen;
|
||||
else
|
||||
gBattlescriptCurrInstr = BattleScript_DoSwitchOut;
|
||||
@ -8747,6 +8734,18 @@ static void Cmd_hidepartystatussummary(void)
|
||||
gBattlescriptCurrInstr = cmd->nextInstr;
|
||||
}
|
||||
|
||||
static void ResetValuesForCalledMove(void)
|
||||
{
|
||||
if (gBattlerByTurnOrder[gCurrentTurnActionNumber] != gBattlerAttacker)
|
||||
gBattleStruct->atkCancellerTracker = 0;
|
||||
else
|
||||
SetAtkCancellerForCalledMove();
|
||||
gBattleScripting.animTurn = 0;
|
||||
gBattleScripting.animTargetsHit = 0;
|
||||
SetTypeBeforeUsingMove(gCurrentMove, gBattlerAttacker);
|
||||
HandleMoveTargetRedirection();
|
||||
}
|
||||
|
||||
static void Cmd_jumptocalledmove(void)
|
||||
{
|
||||
CMD_ARGS(bool8 notChosenMove);
|
||||
@ -8756,6 +8755,8 @@ static void Cmd_jumptocalledmove(void)
|
||||
else
|
||||
gChosenMove = gCurrentMove = gCalledMove;
|
||||
|
||||
ResetValuesForCalledMove();
|
||||
|
||||
gBattlescriptCurrInstr = GetMoveBattleScript(gCurrentMove);
|
||||
}
|
||||
|
||||
@ -10812,10 +10813,8 @@ static void Cmd_various(void)
|
||||
gBattlescriptCurrInstr = cmd->failInstr;
|
||||
else
|
||||
{
|
||||
SetTypeBeforeUsingMove(gCalledMove, gBattlerTarget);
|
||||
gEffectBattler = gBattleStruct->lastMoveTarget[gBattlerTarget];
|
||||
gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED;
|
||||
gBattleStruct->atkCancellerTracker = 0;
|
||||
PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, battler, gBattlerPartyIndexes[battler]);
|
||||
gBattlescriptCurrInstr = cmd->nextInstr;
|
||||
}
|
||||
@ -11611,7 +11610,8 @@ static void TryResetProtectUseCounter(u32 battler)
|
||||
u32 lastEffect = GetMoveEffect(lastMove);
|
||||
if (lastMove == MOVE_UNAVAILABLE
|
||||
|| (!gBattleMoveEffects[lastEffect].usesProtectCounter
|
||||
&& (B_ALLY_SWITCH_FAIL_CHANCE >= GEN_9 && lastEffect != EFFECT_ALLY_SWITCH)))
|
||||
&& ((B_ALLY_SWITCH_FAIL_CHANCE >= GEN_9 && lastEffect != EFFECT_ALLY_SWITCH)
|
||||
|| B_ALLY_SWITCH_FAIL_CHANCE < GEN_9)))
|
||||
gDisableStructs[battler].protectUses = 0;
|
||||
}
|
||||
|
||||
@ -11805,8 +11805,8 @@ static void SetMoveForMirrorMove(u32 move)
|
||||
gCurrentMove = move;
|
||||
}
|
||||
|
||||
SetAtkCancellerForCalledMove();
|
||||
gBattlerTarget = GetBattleMoveTarget(gCurrentMove, NO_TARGET_OVERRIDE);
|
||||
ResetValuesForCalledMove();
|
||||
gBattlescriptCurrInstr = GetMoveBattleScript(gCurrentMove);
|
||||
}
|
||||
|
||||
@ -12490,7 +12490,7 @@ static u32 ChangeStatBuffs(s8 statValue, u32 statId, u32 flags, const u8 *BS_ptr
|
||||
// Check Mirror Herb / Opportunist
|
||||
for (index = 0; index < gBattlersCount; index++)
|
||||
{
|
||||
if (GetBattlerSide(index) == GetBattlerSide(battler))
|
||||
if (IsBattlerAlly(index, battler))
|
||||
continue; // Only triggers on opposing side
|
||||
|
||||
if (GetBattlerAbility(index) == ABILITY_OPPORTUNIST
|
||||
@ -12615,7 +12615,6 @@ static void Cmd_forcerandomswitch(void)
|
||||
{
|
||||
CMD_ARGS(const u8 *failInstr);
|
||||
|
||||
s32 i;
|
||||
s32 battler1PartyId = 0;
|
||||
s32 battler2PartyId = 0;
|
||||
|
||||
@ -12750,7 +12749,7 @@ static void Cmd_forcerandomswitch(void)
|
||||
battler1PartyId = gBattlerPartyIndexes[gBattlerTarget];
|
||||
}
|
||||
|
||||
for (i = firstMonId; i < lastMonId; i++)
|
||||
for (u32 i = firstMonId; i < lastMonId; i++)
|
||||
{
|
||||
if (GetMonData(&party[i], MON_DATA_SPECIES) != SPECIES_NONE
|
||||
&& !GetMonData(&party[i], MON_DATA_IS_EGG)
|
||||
@ -12781,12 +12780,12 @@ static void Cmd_forcerandomswitch(void)
|
||||
|| (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK && gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER)
|
||||
|| (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK && gBattleTypeFlags & BATTLE_TYPE_MULTI))
|
||||
{
|
||||
SwitchPartyOrderLinkMulti(gBattlerTarget, i, 0);
|
||||
SwitchPartyOrderLinkMulti(BATTLE_PARTNER(gBattlerTarget), i, 1);
|
||||
SwitchPartyOrderLinkMulti(gBattlerTarget, gBattleStruct->monToSwitchIntoId[gBattlerTarget], 0);
|
||||
SwitchPartyOrderLinkMulti(BATTLE_PARTNER(gBattlerTarget), gBattleStruct->monToSwitchIntoId[gBattlerTarget], 1);
|
||||
}
|
||||
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER)
|
||||
SwitchPartyOrderInGameMulti(gBattlerTarget, i);
|
||||
SwitchPartyOrderInGameMulti(gBattlerTarget, gBattleStruct->monToSwitchIntoId[gBattlerTarget]);
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -13335,10 +13334,10 @@ static void Cmd_metronome(void)
|
||||
#endif
|
||||
|
||||
gCurrentMove = RandomUniformExcept(RNG_METRONOME, 1, moveCount - 1, InvalidMetronomeMove);
|
||||
SetAtkCancellerForCalledMove();
|
||||
PrepareStringBattle(STRINGID_WAGGLINGAFINGER, gBattlerAttacker);
|
||||
gBattlescriptCurrInstr = GetMoveBattleScript(gCurrentMove);
|
||||
gBattlerTarget = GetBattleMoveTarget(gCurrentMove, NO_TARGET_OVERRIDE);
|
||||
ResetValuesForCalledMove();
|
||||
}
|
||||
|
||||
static void Cmd_dmgtolevel(void)
|
||||
@ -14277,7 +14276,6 @@ static void Cmd_jumpifnopursuitswitchdmg(void)
|
||||
{
|
||||
ChangeOrderTargetAfterAttacker();
|
||||
gBattleStruct->battlerState[gBattlerAttacker].pursuitTarget = TRUE;
|
||||
gBattleStruct->pursuitSwitchByMove = gActionsByTurnOrder[gCurrentTurnActionNumber] == B_ACTION_USE_MOVE;
|
||||
gBattleStruct->pursuitStoredSwitch = gBattleStruct->monToSwitchIntoId[gBattlerAttacker];
|
||||
gBattleStruct->moveTarget[gBattlerTarget] = gBattlerAttacker;
|
||||
gBattlerTarget = savedTarget;
|
||||
@ -16347,12 +16345,13 @@ static void Cmd_trygivecaughtmonnick(void)
|
||||
{
|
||||
GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]], MON_DATA_NICKNAME, gBattleStruct->caughtMonNick);
|
||||
FreeAllWindowBuffers();
|
||||
MainCallback callback = CalculatePlayerPartyCount() == PARTY_SIZE ? ReshowBlankBattleScreenAfterMenu : BattleMainCB2;
|
||||
|
||||
DoNamingScreen(NAMING_SCREEN_CAUGHT_MON, gBattleStruct->caughtMonNick,
|
||||
GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]], MON_DATA_SPECIES),
|
||||
GetMonGender(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]]),
|
||||
GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]], MON_DATA_PERSONALITY, NULL),
|
||||
ReshowBattleScreenAfterMenu);
|
||||
callback);
|
||||
|
||||
gBattleCommunication[MULTIUSE_STATE]++;
|
||||
}
|
||||
@ -17696,13 +17695,25 @@ void BS_AllySwitchFailChance(void)
|
||||
gBattlescriptCurrInstr = cmd->nextInstr;
|
||||
}
|
||||
|
||||
void BS_SetPhotonGeyserCategory(void)
|
||||
void BS_SetDynamicMoveCategory(void)
|
||||
{
|
||||
NATIVE_ARGS();
|
||||
u32 effect = GetMoveEffect(gCurrentMove);
|
||||
if (!((effect == EFFECT_TERA_BLAST && GetActiveGimmick(gBattlerAttacker) != GIMMICK_TERA)
|
||||
|| (effect == EFFECT_TERA_STARSTORM && GetActiveGimmick(gBattlerAttacker) != GIMMICK_TERA && gBattleMons[gBattlerAttacker].species == SPECIES_TERAPAGOS_STELLAR)))
|
||||
|
||||
switch (GetMoveEffect(gCurrentMove))
|
||||
{
|
||||
case EFFECT_TERA_BLAST:
|
||||
if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_TERA)
|
||||
gBattleStruct->swapDamageCategory = (GetCategoryBasedOnStats(gBattlerAttacker) != GetMoveCategory(gCurrentMove));
|
||||
break;
|
||||
case EFFECT_TERA_STARSTORM:
|
||||
if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_TERA && gBattleMons[gBattlerAttacker].species == SPECIES_TERAPAGOS_STELLAR)
|
||||
gBattleStruct->swapDamageCategory = (GetCategoryBasedOnStats(gBattlerAttacker) != GetMoveCategory(gCurrentMove));
|
||||
break;
|
||||
default:
|
||||
gBattleStruct->swapDamageCategory = (GetCategoryBasedOnStats(gBattlerAttacker) != GetMoveCategory(gCurrentMove));
|
||||
break;
|
||||
}
|
||||
|
||||
gBattlescriptCurrInstr = cmd->nextInstr;
|
||||
}
|
||||
|
||||
@ -17950,7 +17961,7 @@ void BS_JumpIfSleepClause(void)
|
||||
NATIVE_ARGS(const u8 *jumpInstr);
|
||||
|
||||
// Can freely sleep own partner
|
||||
if (IsDoubleBattle() && IsSleepClauseEnabled() && GetBattlerSide(gBattlerAttacker) == GetBattlerSide(gBattlerTarget))
|
||||
if (IsDoubleBattle() && IsSleepClauseEnabled() && IsBattlerAlly(gBattlerAttacker, gBattlerTarget))
|
||||
{
|
||||
gBattleStruct->battlerState[gBattlerTarget].sleepClauseEffectExempt = TRUE;
|
||||
gBattlescriptCurrInstr = cmd->nextInstr;
|
||||
@ -18025,14 +18036,10 @@ void BS_JumpIfBlockedBySoundproof(void)
|
||||
void BS_SetMagicCoatTarget(void)
|
||||
{
|
||||
NATIVE_ARGS();
|
||||
u32 side;
|
||||
gBattleStruct->attackerBeforeBounce = gBattleScripting.battler = gBattlerAttacker;
|
||||
gBattlerAttacker = gBattlerTarget;
|
||||
side = BATTLE_OPPOSITE(GetBattlerSide(gBattlerAttacker));
|
||||
if (IsAffectedByFollowMe(gBattlerAttacker, side, gCurrentMove))
|
||||
gBattlerTarget = gSideTimers[side].followmeTarget;
|
||||
else
|
||||
gBattlerTarget = gBattleStruct->attackerBeforeBounce;
|
||||
gBattlerTarget = gBattleStruct->attackerBeforeBounce;
|
||||
HandleMoveTargetRedirection();
|
||||
|
||||
gBattlescriptCurrInstr = cmd->nextInstr;
|
||||
}
|
||||
@ -18070,7 +18077,7 @@ void BS_TryWindRiderPower(void)
|
||||
|
||||
u32 battler = GetBattlerForBattleScript(cmd->battler);
|
||||
u16 ability = GetBattlerAbility(battler);
|
||||
if (GetBattlerSide(battler) == GetBattlerSide(gBattlerAttacker)
|
||||
if (IsBattlerAlly(battler, gBattlerAttacker)
|
||||
&& (ability == ABILITY_WIND_RIDER || ability == ABILITY_WIND_POWER))
|
||||
{
|
||||
gLastUsedAbility = ability;
|
||||
|
||||
@ -65,6 +65,7 @@ static u32 GetFlingPowerFromItemId(u32 itemId);
|
||||
static void SetRandomMultiHitCounter();
|
||||
static u32 GetBattlerItemHoldEffectParam(u32 battler, u32 item);
|
||||
static bool32 CanBeInfinitelyConfused(u32 battler);
|
||||
|
||||
ARM_FUNC NOINLINE static uq4_12_t PercentToUQ4_12(u32 percent);
|
||||
ARM_FUNC NOINLINE static uq4_12_t PercentToUQ4_12_Floored(u32 percent);
|
||||
|
||||
@ -243,10 +244,10 @@ u32 EndOrContinueWeather(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static u8 CalcBeatUpPower(void)
|
||||
static u32 CalcBeatUpPower(void)
|
||||
{
|
||||
u8 basePower;
|
||||
u16 species;
|
||||
u32 basePower;
|
||||
u32 species;
|
||||
struct Pokemon *party = GetBattlerParty(gBattlerAttacker);
|
||||
|
||||
// Party slot is incremented by the battle script for Beat Up after this damage calculation
|
||||
@ -256,6 +257,18 @@ static u8 CalcBeatUpPower(void)
|
||||
return basePower;
|
||||
}
|
||||
|
||||
static bool32 ShouldTeraShellDistortTypeMatchups(u32 move, u32 battlerDef, u32 abilityDef)
|
||||
{
|
||||
if (!gSpecialStatuses[battlerDef].distortedTypeMatchups
|
||||
&& gBattleMons[battlerDef].species == SPECIES_TERAPAGOS_TERASTAL
|
||||
&& gBattleMons[battlerDef].hp == gBattleMons[battlerDef].maxHP
|
||||
&& !IsBattleMoveStatus(move)
|
||||
&& abilityDef == ABILITY_TERA_SHELL)
|
||||
return TRUE;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool32 IsAffectedByFollowMe(u32 battlerAtk, u32 defSide, u32 move)
|
||||
{
|
||||
u32 ability = GetBattlerAbility(battlerAtk);
|
||||
@ -276,11 +289,69 @@ bool32 IsAffectedByFollowMe(u32 battlerAtk, u32 defSide, u32 move)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool32 HandleMoveTargetRedirection(void)
|
||||
{
|
||||
u32 redirectorOrderNum = MAX_BATTLERS_COUNT;
|
||||
u16 moveTarget = GetBattlerMoveTargetType(gBattlerAttacker, gCurrentMove);
|
||||
u32 moveType = GetBattleMoveType(gCurrentMove);
|
||||
u32 moveEffect = GetMoveEffect(gCurrentMove);
|
||||
u32 side = BATTLE_OPPOSITE(GetBattlerSide(gBattlerAttacker));
|
||||
u32 ability = GetBattlerAbility(gBattleStruct->moveTarget[gBattlerAttacker]);
|
||||
|
||||
if (IsAffectedByFollowMe(gBattlerAttacker, side, gCurrentMove)
|
||||
&& moveTarget == MOVE_TARGET_SELECTED
|
||||
&& GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gSideTimers[side].followmeTarget))
|
||||
{
|
||||
gBattleStruct->moveTarget[gBattlerAttacker] = gBattlerTarget = gSideTimers[side].followmeTarget; // follow me moxie fix
|
||||
return TRUE;
|
||||
}
|
||||
else if (IsDoubleBattle()
|
||||
&& gSideTimers[side].followmeTimer == 0
|
||||
&& (!IsBattleMoveStatus(gCurrentMove) || (moveTarget != MOVE_TARGET_USER && moveTarget != MOVE_TARGET_ALL_BATTLERS))
|
||||
&& ((ability != ABILITY_LIGHTNING_ROD && moveType == TYPE_ELECTRIC)
|
||||
|| (ability != ABILITY_STORM_DRAIN && moveType == TYPE_WATER)))
|
||||
{
|
||||
// Find first battler that redirects the move (in turn order)
|
||||
u32 battler;
|
||||
for (battler = 0; battler < gBattlersCount; battler++)
|
||||
{
|
||||
ability = GetBattlerAbility(battler);
|
||||
if ((B_REDIRECT_ABILITY_ALLIES >= GEN_4 || !IsAlly(gBattlerAttacker, battler))
|
||||
&& battler != gBattlerAttacker
|
||||
&& gBattleStruct->moveTarget[gBattlerAttacker] != battler
|
||||
&& ((ability == ABILITY_LIGHTNING_ROD && moveType == TYPE_ELECTRIC)
|
||||
|| (ability == ABILITY_STORM_DRAIN && moveType == TYPE_WATER))
|
||||
&& GetBattlerTurnOrderNum(battler) < redirectorOrderNum
|
||||
&& moveEffect != EFFECT_SNIPE_SHOT
|
||||
&& moveEffect != EFFECT_PLEDGE
|
||||
&& GetBattlerAbility(gBattlerAttacker) != ABILITY_PROPELLER_TAIL
|
||||
&& GetBattlerAbility(gBattlerAttacker) != ABILITY_STALWART)
|
||||
{
|
||||
redirectorOrderNum = GetBattlerTurnOrderNum(battler);
|
||||
}
|
||||
}
|
||||
if (redirectorOrderNum != MAX_BATTLERS_COUNT)
|
||||
{
|
||||
u16 battlerAbility;
|
||||
battler = gBattlerByTurnOrder[redirectorOrderNum];
|
||||
battlerAbility = GetBattlerAbility(battler);
|
||||
|
||||
RecordAbilityBattle(battler, gBattleMons[battler].ability);
|
||||
if (battlerAbility == ABILITY_LIGHTNING_ROD && gCurrentMove != MOVE_TEATIME)
|
||||
gSpecialStatuses[battler].lightningRodRedirected = TRUE;
|
||||
else if (battlerAbility == ABILITY_STORM_DRAIN)
|
||||
gSpecialStatuses[battler].stormDrainRedirected = TRUE;
|
||||
gBattlerTarget = battler;
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// Functions
|
||||
void HandleAction_UseMove(void)
|
||||
{
|
||||
u32 battler, i, side, moveType, ability, var = MAX_BATTLERS_COUNT;
|
||||
u16 moveTarget;
|
||||
u32 i;
|
||||
|
||||
gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber];
|
||||
if (gBattleStruct->battlerState[gBattlerAttacker].absentBattlerFlags
|
||||
@ -350,7 +421,6 @@ void HandleAction_UseMove(void)
|
||||
|
||||
// Set dynamic move type.
|
||||
SetTypeBeforeUsingMove(gChosenMove, gBattlerAttacker);
|
||||
moveType = GetBattleMoveType(gCurrentMove);
|
||||
|
||||
// check Z-Move used
|
||||
if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_Z_MOVE && !IsBattleMoveStatus(gCurrentMove) && !IsZMove(gCurrentMove))
|
||||
@ -365,117 +435,44 @@ void HandleAction_UseMove(void)
|
||||
gCurrentMove = gChosenMove = GetMaxMove(gBattlerAttacker, gCurrentMove);
|
||||
}
|
||||
|
||||
moveTarget = GetBattlerMoveTargetType(gBattlerAttacker, gCurrentMove);
|
||||
u32 moveEffect = GetMoveEffect(gCurrentMove);
|
||||
|
||||
// choose target
|
||||
side = BATTLE_OPPOSITE(GetBattlerSide(gBattlerAttacker));
|
||||
ability = GetBattlerAbility(gBattleStruct->moveTarget[gBattlerAttacker]);
|
||||
if (IsAffectedByFollowMe(gBattlerAttacker, side, gCurrentMove)
|
||||
&& moveTarget == MOVE_TARGET_SELECTED
|
||||
&& GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gSideTimers[side].followmeTarget))
|
||||
if (!HandleMoveTargetRedirection())
|
||||
{
|
||||
gBattleStruct->moveTarget[gBattlerAttacker] = gBattlerTarget = gSideTimers[side].followmeTarget; // follow me moxie fix
|
||||
}
|
||||
else if (IsDoubleBattle()
|
||||
&& gSideTimers[side].followmeTimer == 0
|
||||
&& !gBattleStruct->battlerState[gBattleStruct->moveTarget[gBattlerAttacker]].pursuitTarget
|
||||
&& (!IsBattleMoveStatus(gCurrentMove) || (moveTarget != MOVE_TARGET_USER && moveTarget != MOVE_TARGET_ALL_BATTLERS))
|
||||
&& ((ability != ABILITY_LIGHTNING_ROD && moveType == TYPE_ELECTRIC)
|
||||
|| (ability != ABILITY_STORM_DRAIN && moveType == TYPE_WATER)))
|
||||
{
|
||||
// Find first battler that redirects the move (in turn order)
|
||||
for (battler = 0; battler < gBattlersCount; battler++)
|
||||
u32 moveTarget = GetBattlerMoveTargetType(gBattlerAttacker, gCurrentMove);
|
||||
if (IsDoubleBattle() && moveTarget & MOVE_TARGET_RANDOM)
|
||||
{
|
||||
ability = GetBattlerAbility(battler);
|
||||
if ((B_REDIRECT_ABILITY_ALLIES >= GEN_4 || !IsAlly(gBattlerAttacker, battler))
|
||||
&& battler != gBattlerAttacker
|
||||
&& gBattleStruct->moveTarget[gBattlerAttacker] != battler
|
||||
&& ((ability == ABILITY_LIGHTNING_ROD && moveType == TYPE_ELECTRIC)
|
||||
|| (ability == ABILITY_STORM_DRAIN && moveType == TYPE_WATER))
|
||||
&& GetBattlerTurnOrderNum(battler) < var
|
||||
&& moveEffect != EFFECT_SNIPE_SHOT
|
||||
&& moveEffect != EFFECT_PLEDGE
|
||||
&& GetBattlerAbility(gBattlerAttacker) != ABILITY_PROPELLER_TAIL
|
||||
&& GetBattlerAbility(gBattlerAttacker) != ABILITY_STALWART)
|
||||
{
|
||||
var = GetBattlerTurnOrderNum(battler);
|
||||
}
|
||||
}
|
||||
if (var == MAX_BATTLERS_COUNT)
|
||||
{
|
||||
if (moveTarget & MOVE_TARGET_RANDOM)
|
||||
{
|
||||
gBattlerTarget = SetRandomTarget(gBattlerAttacker);
|
||||
}
|
||||
else if (moveTarget & MOVE_TARGET_FOES_AND_ALLY)
|
||||
{
|
||||
for (gBattlerTarget = 0; gBattlerTarget < gBattlersCount; gBattlerTarget++)
|
||||
{
|
||||
if (gBattlerTarget == gBattlerAttacker)
|
||||
continue;
|
||||
if (IsBattlerAlive(gBattlerTarget))
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattlerTarget = gBattleStruct->moveTarget[gBattlerAttacker];
|
||||
}
|
||||
|
||||
if (!IsBattlerAlive(gBattlerTarget) && GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gBattlerTarget))
|
||||
gBattlerTarget = SetRandomTarget(gBattlerAttacker);
|
||||
if (gAbsentBattlerFlags & (1u << gBattlerTarget)
|
||||
&& GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gBattlerTarget))
|
||||
{
|
||||
gBattlerTarget = GetPartnerBattler(gBattlerTarget);
|
||||
}
|
||||
}
|
||||
else if (moveTarget == MOVE_TARGET_ALLY)
|
||||
{
|
||||
if (IsBattlerAlive(BATTLE_PARTNER(gBattlerAttacker)))
|
||||
gBattlerTarget = BATTLE_PARTNER(gBattlerAttacker);
|
||||
else
|
||||
gBattlerTarget = gBattlerAttacker;
|
||||
}
|
||||
else if (IsDoubleBattle() && moveTarget == MOVE_TARGET_FOES_AND_ALLY)
|
||||
{
|
||||
for (gBattlerTarget = 0; gBattlerTarget < gBattlersCount; gBattlerTarget++)
|
||||
{
|
||||
if (gBattlerTarget == gBattlerAttacker)
|
||||
continue;
|
||||
if (IsBattlerAlive(gBattlerTarget))
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
u16 battlerAbility;
|
||||
battler = gBattlerByTurnOrder[var];
|
||||
battlerAbility = GetBattlerAbility(battler);
|
||||
|
||||
RecordAbilityBattle(battler, gBattleMons[battler].ability);
|
||||
if (battlerAbility == ABILITY_LIGHTNING_ROD && gCurrentMove != MOVE_TEATIME)
|
||||
gSpecialStatuses[battler].lightningRodRedirected = TRUE;
|
||||
else if (battlerAbility == ABILITY_STORM_DRAIN)
|
||||
gSpecialStatuses[battler].stormDrainRedirected = TRUE;
|
||||
gBattlerTarget = battler;
|
||||
}
|
||||
}
|
||||
else if (IsDoubleBattle() && moveTarget & MOVE_TARGET_RANDOM)
|
||||
{
|
||||
gBattlerTarget = SetRandomTarget(gBattlerAttacker);
|
||||
if (gAbsentBattlerFlags & (1u << gBattlerTarget)
|
||||
&& GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gBattlerTarget))
|
||||
{
|
||||
gBattlerTarget = GetPartnerBattler(gBattlerTarget);
|
||||
}
|
||||
}
|
||||
else if (moveTarget == MOVE_TARGET_ALLY)
|
||||
{
|
||||
if (IsBattlerAlive(BATTLE_PARTNER(gBattlerAttacker)))
|
||||
gBattlerTarget = BATTLE_PARTNER(gBattlerAttacker);
|
||||
else
|
||||
gBattlerTarget = gBattlerAttacker;
|
||||
}
|
||||
else if (IsDoubleBattle() && moveTarget == MOVE_TARGET_FOES_AND_ALLY)
|
||||
{
|
||||
for (gBattlerTarget = 0; gBattlerTarget < gBattlersCount; gBattlerTarget++)
|
||||
{
|
||||
if (gBattlerTarget == gBattlerAttacker)
|
||||
continue;
|
||||
if (IsBattlerAlive(gBattlerTarget))
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattlerTarget = gBattleStruct->moveTarget[gBattlerAttacker];
|
||||
if (!IsBattlerAlive(gBattlerTarget)
|
||||
&& moveTarget != MOVE_TARGET_OPPONENTS_FIELD
|
||||
&& (GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gBattlerTarget)))
|
||||
{
|
||||
gBattlerTarget = GetPartnerBattler(gBattlerTarget);
|
||||
gBattlerTarget = *(gBattleStruct->moveTarget + gBattlerAttacker);
|
||||
if (!IsBattlerAlive(gBattlerTarget)
|
||||
&& moveTarget != MOVE_TARGET_OPPONENTS_FIELD
|
||||
&& (GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gBattlerTarget)))
|
||||
{
|
||||
gBattlerTarget = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gBattlerTarget)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -500,7 +497,7 @@ void HandleAction_UseMove(void)
|
||||
}
|
||||
}
|
||||
|
||||
if ((GetBattlerSide(gBattlerAttacker) == GetBattlerSide(gBattlerTarget))
|
||||
if ((IsBattlerAlly(gBattlerAttacker, gBattlerTarget))
|
||||
&& (!IsBattlerAlive(gBattlerTarget) || gProtectStructs[BATTLE_PARTNER(gBattlerAttacker)].usedAllySwitch))
|
||||
{
|
||||
gBattlescriptCurrInstr = BattleScript_FailedFromAtkCanceler;
|
||||
@ -1896,7 +1893,8 @@ static void CancellerAsleep(u32 *effect)
|
||||
gBattleMons[gBattlerAttacker].status1 -= toSub;
|
||||
if (gBattleMons[gBattlerAttacker].status1 & STATUS1_SLEEP)
|
||||
{
|
||||
if (gChosenMove != MOVE_SNORE && gChosenMove != MOVE_SLEEP_TALK)
|
||||
u32 moveEffect = GetMoveEffect(gChosenMove);
|
||||
if (moveEffect != EFFECT_SNORE && moveEffect != EFFECT_SLEEP_TALK)
|
||||
{
|
||||
gBattlescriptCurrInstr = BattleScript_MoveUsedIsAsleep;
|
||||
gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
|
||||
@ -2232,7 +2230,7 @@ static void CancellerThaw(u32 *effect)
|
||||
|
||||
static void CancellerStanceChangeTwo(u32 *effect)
|
||||
{
|
||||
if (B_STANCE_CHANGE_FAIL >= GEN_7 && TryFormChangeBeforeMove())
|
||||
if (B_STANCE_CHANGE_FAIL >= GEN_7 && !gBattleStruct->isAtkCancelerForCalledMove && TryFormChangeBeforeMove())
|
||||
*effect = 1;
|
||||
}
|
||||
|
||||
@ -2570,6 +2568,21 @@ bool32 HasNoMonsToSwitch(u32 battler, u8 partyIdBattlerOn1, u8 partyIdBattlerOn2
|
||||
playerId = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
|
||||
party = gEnemyParty;
|
||||
|
||||
// Edge case: If both opposing Pokemon were knocked out on the same turn,
|
||||
// make sure opponent only sents out the final Pokemon once.
|
||||
if (battler == playerId
|
||||
&& (gHitMarker & HITMARKER_FAINTED(flankId))
|
||||
&& (gHitMarker & HITMARKER_FAINTED(playerId)))
|
||||
{
|
||||
u8 count = 0;
|
||||
for (i = 0; i < PARTY_SIZE; i++)
|
||||
if (IsValidForBattle(&party[i]))
|
||||
count++;
|
||||
|
||||
if (count < 2)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (partyIdBattlerOn1 == PARTY_SIZE)
|
||||
partyIdBattlerOn1 = gBattlerPartyIndexes[flankId];
|
||||
if (partyIdBattlerOn2 == PARTY_SIZE)
|
||||
@ -2934,7 +2947,7 @@ bool32 CanAbilityBlockMove(u32 battlerAtk, u32 battlerDef, u32 move, u32 ability
|
||||
case ABILITY_DAZZLING:
|
||||
case ABILITY_QUEENLY_MAJESTY:
|
||||
case ABILITY_ARMOR_TAIL:
|
||||
if (atkPriority > 0 && !IsAlly(battlerAtk, battlerDef))
|
||||
if (atkPriority > 0 && !IsBattlerAlly(battlerAtk, battlerDef))
|
||||
{
|
||||
if (gBattleMons[battlerAtk].status2 & STATUS2_MULTIPLETURNS)
|
||||
gHitMarker |= HITMARKER_NO_PPDEDUCT;
|
||||
@ -2959,7 +2972,7 @@ bool32 CanAbilityBlockMove(u32 battlerAtk, u32 battlerDef, u32 move, u32 ability
|
||||
case ABILITY_DAZZLING:
|
||||
case ABILITY_QUEENLY_MAJESTY:
|
||||
case ABILITY_ARMOR_TAIL:
|
||||
if (atkPriority > 0 && !IsAlly(battlerAtk, BATTLE_PARTNER(battlerDef)))
|
||||
if (atkPriority > 0 && !IsBattlerAlly(battlerAtk, BATTLE_PARTNER(battlerDef)))
|
||||
{
|
||||
if (gBattleMons[battlerAtk].status2 & STATUS2_MULTIPLETURNS)
|
||||
gHitMarker |= HITMARKER_NO_PPDEDUCT;
|
||||
@ -3989,7 +4002,8 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
|
||||
case ABILITY_EMBODY_ASPECT_HEARTHFLAME_MASK:
|
||||
case ABILITY_EMBODY_ASPECT_WELLSPRING_MASK:
|
||||
case ABILITY_EMBODY_ASPECT_CORNERSTONE_MASK:
|
||||
if (!gSpecialStatuses[battler].switchInAbilityDone)
|
||||
if (!gSpecialStatuses[battler].switchInAbilityDone
|
||||
&& !(gBattleStruct->embodyAspectBoost[GetBattlerSide(battler)] & (1u << gBattlerPartyIndexes[battler])))
|
||||
{
|
||||
u32 stat;
|
||||
|
||||
@ -4008,6 +4022,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
|
||||
gBattleScripting.savedBattler = gBattlerAttacker;
|
||||
gBattlerAttacker = battler;
|
||||
gSpecialStatuses[battler].switchInAbilityDone = TRUE;
|
||||
gBattleStruct->embodyAspectBoost[GetBattlerSide(battler)] |= 1u << gBattlerPartyIndexes[battler];
|
||||
SET_STATCHANGER(stat, 1, FALSE);
|
||||
BattleScriptPushCursorAndCallback(BattleScript_BattlerAbilityStatRaiseOnSwitchIn);
|
||||
effect++;
|
||||
@ -5004,7 +5019,6 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
|
||||
// Set bit and save Dancer mon's original target
|
||||
gSpecialStatuses[battler].dancerUsedMove = TRUE;
|
||||
gSpecialStatuses[battler].dancerOriginalTarget = gBattleStruct->moveTarget[battler] | 0x4;
|
||||
gBattleStruct->atkCancellerTracker = 0;
|
||||
gBattlerAttacker = gBattlerAbility = battler;
|
||||
gCalledMove = gCurrentMove;
|
||||
|
||||
@ -5013,10 +5027,9 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
|
||||
|
||||
// Edge case for dance moves that hit multiply targets
|
||||
gHitMarker &= ~HITMARKER_NO_ATTACKSTRING;
|
||||
SetTypeBeforeUsingMove(gCalledMove, battler);
|
||||
|
||||
// Make sure that the target isn't an ally - if it is, target the original user
|
||||
if (GetBattlerSide(gBattlerTarget) == GetBattlerSide(gBattlerAttacker))
|
||||
if (IsBattlerAlly(gBattlerTarget, gBattlerAttacker))
|
||||
gBattlerTarget = (gBattleScripting.savedBattler & 0xF0) >> 4;
|
||||
gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED;
|
||||
BattleScriptExecute(BattleScript_DancerActivates);
|
||||
@ -5049,6 +5062,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
|
||||
}
|
||||
break;
|
||||
case ABILITYEFFECT_IMMUNITY:
|
||||
gBattleStruct->bypassMoldBreakerChecks = TRUE;
|
||||
for (battler = 0; battler < gBattlersCount; battler++)
|
||||
{
|
||||
switch (GetBattlerAbility(battler))
|
||||
@ -5140,6 +5154,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
|
||||
return effect;
|
||||
}
|
||||
}
|
||||
gBattleStruct->bypassMoldBreakerChecks = FALSE;
|
||||
break;
|
||||
case ABILITYEFFECT_SYNCHRONIZE:
|
||||
if (gLastUsedAbility == ABILITY_SYNCHRONIZE && (gHitMarker & HITMARKER_SYNCHRONISE_EFFECT))
|
||||
@ -5379,7 +5394,9 @@ u32 GetBattlerAbility(u32 battler)
|
||||
&& gBattleMons[battler].ability == ABILITY_COMATOSE)
|
||||
return ABILITY_NONE;
|
||||
|
||||
if (noAbilityShield && CanBreakThroughAbility(gBattlerAttacker, battler, gBattleMons[gBattlerAttacker].ability))
|
||||
if (!gBattleStruct->bypassMoldBreakerChecks
|
||||
&& noAbilityShield
|
||||
&& CanBreakThroughAbility(gBattlerAttacker, battler, gBattleMons[gBattlerAttacker].ability))
|
||||
return ABILITY_NONE;
|
||||
|
||||
return gBattleMons[battler].ability;
|
||||
@ -5393,7 +5410,9 @@ u32 GetBattlerAbility(u32 battler)
|
||||
&& noAbilityShield)
|
||||
return ABILITY_NONE;
|
||||
|
||||
if (noAbilityShield && CanBreakThroughAbility(gBattlerAttacker, battler, gBattleMons[gBattlerAttacker].ability))
|
||||
if (!gBattleStruct->bypassMoldBreakerChecks
|
||||
&& noAbilityShield
|
||||
&& CanBreakThroughAbility(gBattlerAttacker, battler, gBattleMons[gBattlerAttacker].ability))
|
||||
return ABILITY_NONE;
|
||||
|
||||
return gBattleMons[battler].ability;
|
||||
@ -6853,9 +6872,7 @@ u32 ItemBattleEffects(enum ItemCaseId caseID, u32 battler, bool32 moveTurn)
|
||||
atkHoldEffectParam *= 2;
|
||||
if (gSideStatuses[GetBattlerSide(battler)] & SIDE_STATUS_RAINBOW && gCurrentMove != MOVE_SECRET_POWER)
|
||||
atkHoldEffectParam *= 2;
|
||||
if (gBattleStruct->moveDamage[battler] != 0 // Need to have done damage
|
||||
&& !(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT)
|
||||
&& IsBattlerTurnDamaged(gBattlerTarget)
|
||||
if (IsBattlerTurnDamaged(gBattlerTarget)
|
||||
&& !MoveIgnoresKingsRock(gCurrentMove)
|
||||
&& gBattleMons[gBattlerTarget].hp
|
||||
&& RandomPercentage(RNG_HOLD_EFFECT_FLINCH, atkHoldEffectParam)
|
||||
@ -6889,7 +6906,7 @@ u32 ItemBattleEffects(enum ItemCaseId caseID, u32 battler, bool32 moveTurn)
|
||||
{
|
||||
case HOLD_EFFECT_SHELL_BELL:
|
||||
if (gBattleScripting.savedDmg > 0
|
||||
&& !(gBattleStruct->moveResultFlags[battler] & MOVE_RESULT_NO_EFFECT)
|
||||
&& !(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT)
|
||||
&& gBattlerAttacker != gBattlerTarget
|
||||
&& !IsBattlerAtMaxHp(gBattlerAttacker)
|
||||
&& IsBattlerAlive(gBattlerAttacker)
|
||||
@ -7229,6 +7246,7 @@ u32 GetBattleMoveTarget(u16 move, u8 setTarget)
|
||||
switch (moveTarget)
|
||||
{
|
||||
case MOVE_TARGET_SELECTED:
|
||||
case MOVE_TARGET_OPPONENT:
|
||||
side = BATTLE_OPPOSITE(GetBattlerSide(gBattlerAttacker));
|
||||
if (IsAffectedByFollowMe(gBattlerAttacker, side, move))
|
||||
{
|
||||
@ -7288,7 +7306,6 @@ u32 GetBattleMoveTarget(u16 move, u8 setTarget)
|
||||
else
|
||||
targetBattler = GetOpposingSideBattler(gBattlerAttacker);
|
||||
break;
|
||||
case MOVE_TARGET_USER_OR_SELECTED:
|
||||
case MOVE_TARGET_USER:
|
||||
default:
|
||||
targetBattler = gBattlerAttacker;
|
||||
@ -7427,7 +7444,7 @@ u32 GetBattlerHoldEffectInternal(u32 battler, bool32 checkNegating, bool32 check
|
||||
return HOLD_EFFECT_NONE;
|
||||
if (gFieldStatuses & STATUS_FIELD_MAGIC_ROOM)
|
||||
return HOLD_EFFECT_NONE;
|
||||
if (checkAbility && GetBattlerAbility(battler) == ABILITY_KLUTZ)
|
||||
if (checkAbility && GetBattlerAbility(battler) == ABILITY_KLUTZ && !(gStatuses3[battler] & STATUS3_GASTRO_ACID))
|
||||
return HOLD_EFFECT_NONE;
|
||||
}
|
||||
|
||||
@ -7639,7 +7656,7 @@ u32 GetMoveTargetCount(struct DamageCalculationData *damageCalcData)
|
||||
case MOVE_TARGET_DEPENDS:
|
||||
case MOVE_TARGET_SELECTED:
|
||||
case MOVE_TARGET_RANDOM:
|
||||
case MOVE_TARGET_USER_OR_SELECTED:
|
||||
case MOVE_TARGET_OPPONENT:
|
||||
return IsBattlerAlive(battlerDef);
|
||||
case MOVE_TARGET_USER:
|
||||
return IsBattlerAlive(battlerAtk);
|
||||
@ -9286,7 +9303,7 @@ s32 CalculateMoveDamageVars(struct DamageCalculationData *damageCalcData, u32 fi
|
||||
holdEffectAtk, holdEffectDef, abilityAtk, abilityDef);
|
||||
}
|
||||
|
||||
static inline void MulByTypeEffectiveness(uq4_12_t *modifier, u32 move, u32 moveType, u32 battlerDef, u32 defType, u32 battlerAtk, bool32 recordAbilities)
|
||||
static inline void MulByTypeEffectiveness(uq4_12_t *modifier, u32 move, u32 moveType, u32 battlerDef, u32 defAbility, u32 defType, u32 battlerAtk, bool32 recordAbilities)
|
||||
{
|
||||
uq4_12_t mod = GetTypeModifier(moveType, defType);
|
||||
u32 abilityAtk = GetBattlerAbility(battlerAtk);
|
||||
@ -9326,11 +9343,15 @@ static inline void MulByTypeEffectiveness(uq4_12_t *modifier, u32 move, u32 move
|
||||
mod = UQ_4_12(1.0);
|
||||
}
|
||||
|
||||
if (gSpecialStatuses[battlerDef].distortedTypeMatchups || (AI_DATA->aiCalcInProgress && ShouldTeraShellDistortTypeMatchups(move, battlerDef)))
|
||||
if (gSpecialStatuses[battlerDef].distortedTypeMatchups || (mod > UQ_4_12(0.0) && ShouldTeraShellDistortTypeMatchups(move, battlerDef, defAbility)))
|
||||
{
|
||||
mod = UQ_4_12(0.5);
|
||||
if (recordAbilities)
|
||||
RecordAbilityBattle(battlerDef, GetBattlerAbility(battlerDef));
|
||||
{
|
||||
RecordAbilityBattle(battlerDef, defAbility);
|
||||
gSpecialStatuses[battlerDef].distortedTypeMatchups = TRUE;
|
||||
gSpecialStatuses[battlerDef].teraShellAbilityDone = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
*modifier = uq4_12_multiply(*modifier, mod);
|
||||
@ -9340,9 +9361,9 @@ static inline void TryNoticeIllusionInTypeEffectiveness(u32 move, u32 moveType,
|
||||
{
|
||||
// Check if the type effectiveness would've been different if the pokemon really had the types as the disguise.
|
||||
uq4_12_t presumedModifier = UQ_4_12(1.0);
|
||||
MulByTypeEffectiveness(&presumedModifier, move, moveType, battlerDef, gSpeciesInfo[illusionSpecies].types[0], battlerAtk, FALSE);
|
||||
MulByTypeEffectiveness(&presumedModifier, move, moveType, battlerDef, ABILITY_ILLUSION, gSpeciesInfo[illusionSpecies].types[0], battlerAtk, FALSE);
|
||||
if (gSpeciesInfo[illusionSpecies].types[1] != gSpeciesInfo[illusionSpecies].types[0])
|
||||
MulByTypeEffectiveness(&presumedModifier, move, moveType, battlerDef, gSpeciesInfo[illusionSpecies].types[1], battlerAtk, FALSE);
|
||||
MulByTypeEffectiveness(&presumedModifier, move, moveType, battlerDef, ABILITY_ILLUSION, gSpeciesInfo[illusionSpecies].types[1], battlerAtk, FALSE);
|
||||
|
||||
if (presumedModifier != resultingModifier)
|
||||
RecordAbilityBattle(battlerDef, ABILITY_ILLUSION);
|
||||
@ -9378,11 +9399,11 @@ static inline uq4_12_t CalcTypeEffectivenessMultiplierInternal(u32 move, u32 mov
|
||||
u32 types[3];
|
||||
GetBattlerTypes(battlerDef, FALSE, types);
|
||||
|
||||
MulByTypeEffectiveness(&modifier, move, moveType, battlerDef, types[0], battlerAtk, recordAbilities);
|
||||
MulByTypeEffectiveness(&modifier, move, moveType, battlerDef, defAbility, types[0], battlerAtk, recordAbilities);
|
||||
if (types[1] != types[0])
|
||||
MulByTypeEffectiveness(&modifier, move, moveType, battlerDef, types[1], battlerAtk, recordAbilities);
|
||||
MulByTypeEffectiveness(&modifier, move, moveType, battlerDef, defAbility, types[1], battlerAtk, recordAbilities);
|
||||
if (types[2] != TYPE_MYSTERY && types[2] != types[1] && types[2] != types[0])
|
||||
MulByTypeEffectiveness(&modifier, move, moveType, battlerDef, types[2], battlerAtk, recordAbilities);
|
||||
MulByTypeEffectiveness(&modifier, move, moveType, battlerDef, defAbility, types[2], battlerAtk, recordAbilities);
|
||||
if (moveType == TYPE_FIRE && gDisableStructs[battlerDef].tarShot)
|
||||
modifier = uq4_12_multiply(modifier, UQ_4_12(2.0));
|
||||
|
||||
@ -9464,9 +9485,9 @@ uq4_12_t CalcPartyMonTypeEffectivenessMultiplier(u16 move, u16 speciesDef, u16 a
|
||||
|
||||
if (move != MOVE_STRUGGLE && moveType != TYPE_MYSTERY)
|
||||
{
|
||||
MulByTypeEffectiveness(&modifier, move, moveType, 0, gSpeciesInfo[speciesDef].types[0], 0, FALSE);
|
||||
MulByTypeEffectiveness(&modifier, move, moveType, 0, 0, gSpeciesInfo[speciesDef].types[0], 0, FALSE);
|
||||
if (gSpeciesInfo[speciesDef].types[1] != gSpeciesInfo[speciesDef].types[0])
|
||||
MulByTypeEffectiveness(&modifier, move, moveType, 0, gSpeciesInfo[speciesDef].types[1], 0, FALSE);
|
||||
MulByTypeEffectiveness(&modifier, move, moveType, 0, 0, gSpeciesInfo[speciesDef].types[1], 0, FALSE);
|
||||
|
||||
if (moveType == TYPE_GROUND && abilityDef == ABILITY_LEVITATE && !(gFieldStatuses & STATUS_FIELD_GRAVITY))
|
||||
modifier = UQ_4_12(0.0);
|
||||
@ -9502,9 +9523,9 @@ uq4_12_t GetOverworldTypeEffectiveness(struct Pokemon *mon, u8 moveType)
|
||||
|
||||
if (moveType != TYPE_MYSTERY)
|
||||
{
|
||||
MulByTypeEffectiveness(&modifier, MOVE_POUND, moveType, 0, type1, 0, FALSE);
|
||||
MulByTypeEffectiveness(&modifier, MOVE_POUND, moveType, 0, 0, type1, 0, FALSE);
|
||||
if (type2 != type1)
|
||||
MulByTypeEffectiveness(&modifier, MOVE_POUND, moveType, 0, type2, 0, FALSE);
|
||||
MulByTypeEffectiveness(&modifier, MOVE_POUND, moveType, 0, 0, type2, 0, FALSE);
|
||||
|
||||
if ((modifier <= UQ_4_12(1.0) && abilityDef == ABILITY_WONDER_GUARD)
|
||||
|| (moveType == TYPE_FIRE && abilityDef == ABILITY_FLASH_FIRE)
|
||||
@ -10241,8 +10262,12 @@ bool32 CanStealItem(u32 battlerStealing, u32 battlerItem, u16 item)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// It's supposed to pop before trying to steal but this also works
|
||||
if (ItemId_GetHoldEffect(item) == HOLD_EFFECT_AIR_BALLOON)
|
||||
return FALSE;
|
||||
|
||||
if (!CanBattlerGetOrLoseItem(battlerItem, item) // Battler with item cannot have it stolen
|
||||
||!CanBattlerGetOrLoseItem(battlerStealing, item)) // Stealer cannot take the item
|
||||
|| !CanBattlerGetOrLoseItem(battlerStealing, item)) // Stealer cannot take the item
|
||||
return FALSE;
|
||||
|
||||
return TRUE;
|
||||
@ -10385,7 +10410,7 @@ bool32 BlocksPrankster(u16 move, u32 battlerPrankster, u32 battlerDef, bool32 ch
|
||||
return FALSE;
|
||||
if (!gProtectStructs[battlerPrankster].pranksterElevated)
|
||||
return FALSE;
|
||||
if (GetBattlerSide(battlerPrankster) == GetBattlerSide(battlerDef))
|
||||
if (IsBattlerAlly(battlerPrankster, battlerDef))
|
||||
return FALSE;
|
||||
if (checkTarget && (GetBattlerMoveTargetType(battlerPrankster, move) & (MOVE_TARGET_OPPONENTS_FIELD | MOVE_TARGET_DEPENDS)))
|
||||
return FALSE;
|
||||
@ -10452,12 +10477,13 @@ u32 GetBattlerMoveTargetType(u32 battler, u32 move)
|
||||
bool32 CanTargetBattler(u32 battlerAtk, u32 battlerDef, u16 move)
|
||||
{
|
||||
if (GetMoveEffect(move) == EFFECT_HIT_ENEMY_HEAL_ALLY
|
||||
&& GetBattlerSide(battlerAtk) == GetBattlerSide(battlerDef)
|
||||
&& gStatuses3[battlerAtk] & STATUS3_HEAL_BLOCK)
|
||||
&& IsBattlerAlly(battlerAtk, battlerDef)
|
||||
&& gStatuses3[battlerAtk] & STATUS3_HEAL_BLOCK)
|
||||
return FALSE; // Pokémon affected by Heal Block cannot target allies with Pollen Puff
|
||||
if ((GetActiveGimmick(battlerAtk) == GIMMICK_DYNAMAX || IsGimmickSelected(battlerAtk, GIMMICK_DYNAMAX))
|
||||
&& GetBattlerSide(battlerAtk) == GetBattlerSide(battlerDef))
|
||||
if (IsBattlerAlly(battlerAtk, battlerDef) && (GetActiveGimmick(battlerAtk) == GIMMICK_DYNAMAX
|
||||
|| IsGimmickSelected(battlerAtk, GIMMICK_DYNAMAX)))
|
||||
return FALSE;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@ -10578,11 +10604,6 @@ bool32 MoveEffectIsGuaranteed(u32 battler, u32 battlerAbility, const struct Addi
|
||||
return additionalEffect->chance == 0 || CalcSecondaryEffectChance(battler, battlerAbility, additionalEffect) >= 100;
|
||||
}
|
||||
|
||||
bool32 IsAlly(u32 battlerAtk, u32 battlerDef)
|
||||
{
|
||||
return (GetBattlerSide(battlerAtk) == GetBattlerSide(battlerDef));
|
||||
}
|
||||
|
||||
bool32 IsGen6ExpShareEnabled(void)
|
||||
{
|
||||
if (I_EXP_SHARE_FLAG <= TEMP_FLAGS_END)
|
||||
@ -10967,8 +10988,7 @@ void ClearPursuitValues(void)
|
||||
{
|
||||
for (u32 i = 0; i < gBattlersCount; i++)
|
||||
gBattleStruct->battlerState[i].pursuitTarget = FALSE;
|
||||
gBattleStruct->pursuitSwitchByMove = FALSE;
|
||||
gBattleStruct->pursuitStoredSwitch = 0;
|
||||
gBattleStruct->pursuitStoredSwitch = PARTY_SIZE;
|
||||
}
|
||||
|
||||
void ClearPursuitValuesIfSet(u32 battler)
|
||||
|
||||
@ -5485,10 +5485,10 @@ static void SetMoveTargetPosition(u16 move)
|
||||
{
|
||||
switch (GetBattlerMoveTargetType(gBattlerAttacker, move))
|
||||
{
|
||||
case MOVE_TARGET_USER_OR_SELECTED:
|
||||
case MOVE_TARGET_USER:
|
||||
gBattlerTarget = B_POSITION_PLAYER_RIGHT;
|
||||
break;
|
||||
case MOVE_TARGET_OPPONENT:
|
||||
case MOVE_TARGET_SELECTED:
|
||||
case MOVE_TARGET_RANDOM:
|
||||
case MOVE_TARGET_BOTH:
|
||||
|
||||
@ -568,367 +568,6 @@ static const u8 *const sApprenticeChallengeTexts[NUM_APPRENTICES] =
|
||||
gText_ApprenticeChallenge15,
|
||||
};
|
||||
|
||||
// Unclear what the criteria are for valid moves
|
||||
// Notably, a large percentage of multi-strike moves are not valid
|
||||
static const bool8 sValidApprenticeMoves[MOVES_COUNT] =
|
||||
{
|
||||
[MOVE_NONE] = FALSE,
|
||||
[MOVE_POUND] = FALSE,
|
||||
[MOVE_KARATE_CHOP] = TRUE,
|
||||
[MOVE_DOUBLE_SLAP] = TRUE,
|
||||
[MOVE_COMET_PUNCH] = FALSE,
|
||||
[MOVE_MEGA_PUNCH] = TRUE,
|
||||
[MOVE_PAY_DAY] = FALSE,
|
||||
[MOVE_FIRE_PUNCH] = TRUE,
|
||||
[MOVE_ICE_PUNCH] = TRUE,
|
||||
[MOVE_THUNDER_PUNCH] = TRUE,
|
||||
[MOVE_SCRATCH] = FALSE,
|
||||
[MOVE_VISE_GRIP] = FALSE,
|
||||
[MOVE_GUILLOTINE] = TRUE,
|
||||
[MOVE_RAZOR_WIND] = FALSE,
|
||||
[MOVE_SWORDS_DANCE] = TRUE,
|
||||
[MOVE_CUT] = FALSE,
|
||||
[MOVE_GUST] = FALSE,
|
||||
[MOVE_WING_ATTACK] = FALSE,
|
||||
[MOVE_WHIRLWIND] = TRUE,
|
||||
[MOVE_FLY] = TRUE,
|
||||
[MOVE_BIND] = TRUE,
|
||||
[MOVE_SLAM] = TRUE,
|
||||
[MOVE_VINE_WHIP] = FALSE,
|
||||
[MOVE_STOMP] = TRUE,
|
||||
[MOVE_DOUBLE_KICK] = TRUE,
|
||||
[MOVE_MEGA_KICK] = TRUE,
|
||||
[MOVE_JUMP_KICK] = TRUE,
|
||||
[MOVE_ROLLING_KICK] = TRUE,
|
||||
[MOVE_SAND_ATTACK] = TRUE,
|
||||
[MOVE_HEADBUTT] = TRUE,
|
||||
[MOVE_HORN_ATTACK] = FALSE,
|
||||
[MOVE_FURY_ATTACK] = FALSE,
|
||||
[MOVE_HORN_DRILL] = TRUE,
|
||||
[MOVE_TACKLE] = FALSE,
|
||||
[MOVE_BODY_SLAM] = TRUE,
|
||||
[MOVE_WRAP] = TRUE,
|
||||
[MOVE_TAKE_DOWN] = TRUE,
|
||||
[MOVE_THRASH] = TRUE,
|
||||
[MOVE_DOUBLE_EDGE] = TRUE,
|
||||
[MOVE_TAIL_WHIP] = FALSE,
|
||||
[MOVE_POISON_STING] = FALSE,
|
||||
[MOVE_TWINEEDLE] = TRUE,
|
||||
[MOVE_PIN_MISSILE] = FALSE,
|
||||
[MOVE_LEER] = FALSE,
|
||||
[MOVE_BITE] = TRUE,
|
||||
[MOVE_GROWL] = FALSE,
|
||||
[MOVE_ROAR] = TRUE,
|
||||
[MOVE_SING] = TRUE,
|
||||
[MOVE_SUPERSONIC] = TRUE,
|
||||
[MOVE_SONIC_BOOM] = TRUE,
|
||||
[MOVE_DISABLE] = TRUE,
|
||||
[MOVE_ACID] = FALSE,
|
||||
[MOVE_EMBER] = FALSE,
|
||||
[MOVE_FLAMETHROWER] = TRUE,
|
||||
[MOVE_MIST] = TRUE,
|
||||
[MOVE_WATER_GUN] = FALSE,
|
||||
[MOVE_HYDRO_PUMP] = TRUE,
|
||||
[MOVE_SURF] = TRUE,
|
||||
[MOVE_ICE_BEAM] = TRUE,
|
||||
[MOVE_BLIZZARD] = TRUE,
|
||||
[MOVE_PSYBEAM] = TRUE,
|
||||
[MOVE_BUBBLE_BEAM] = FALSE,
|
||||
[MOVE_AURORA_BEAM] = FALSE,
|
||||
[MOVE_HYPER_BEAM] = TRUE,
|
||||
[MOVE_PECK] = FALSE,
|
||||
[MOVE_DRILL_PECK] = TRUE,
|
||||
[MOVE_SUBMISSION] = TRUE,
|
||||
[MOVE_LOW_KICK] = TRUE,
|
||||
[MOVE_COUNTER] = TRUE,
|
||||
[MOVE_SEISMIC_TOSS] = TRUE,
|
||||
[MOVE_STRENGTH] = TRUE,
|
||||
[MOVE_ABSORB] = FALSE,
|
||||
[MOVE_MEGA_DRAIN] = FALSE,
|
||||
[MOVE_LEECH_SEED] = TRUE,
|
||||
[MOVE_GROWTH] = TRUE,
|
||||
[MOVE_RAZOR_LEAF] = TRUE,
|
||||
[MOVE_SOLAR_BEAM] = TRUE,
|
||||
[MOVE_POISON_POWDER] = TRUE,
|
||||
[MOVE_STUN_SPORE] = TRUE,
|
||||
[MOVE_SLEEP_POWDER] = TRUE,
|
||||
[MOVE_PETAL_DANCE] = TRUE,
|
||||
[MOVE_STRING_SHOT] = FALSE,
|
||||
[MOVE_DRAGON_RAGE] = TRUE,
|
||||
[MOVE_FIRE_SPIN] = TRUE,
|
||||
[MOVE_THUNDER_SHOCK] = FALSE,
|
||||
[MOVE_THUNDERBOLT] = TRUE,
|
||||
[MOVE_THUNDER_WAVE] = TRUE,
|
||||
[MOVE_THUNDER] = TRUE,
|
||||
[MOVE_ROCK_THROW] = FALSE,
|
||||
[MOVE_EARTHQUAKE] = TRUE,
|
||||
[MOVE_FISSURE] = TRUE,
|
||||
[MOVE_DIG] = TRUE,
|
||||
[MOVE_TOXIC] = TRUE,
|
||||
[MOVE_CONFUSION] = FALSE,
|
||||
[MOVE_PSYCHIC] = TRUE,
|
||||
[MOVE_HYPNOSIS] = TRUE,
|
||||
[MOVE_MEDITATE] = TRUE,
|
||||
[MOVE_AGILITY] = TRUE,
|
||||
[MOVE_QUICK_ATTACK] = TRUE,
|
||||
[MOVE_RAGE] = FALSE,
|
||||
[MOVE_TELEPORT] = FALSE,
|
||||
[MOVE_NIGHT_SHADE] = TRUE,
|
||||
[MOVE_MIMIC] = TRUE,
|
||||
[MOVE_SCREECH] = TRUE,
|
||||
[MOVE_DOUBLE_TEAM] = TRUE,
|
||||
[MOVE_RECOVER] = TRUE,
|
||||
[MOVE_HARDEN] = TRUE,
|
||||
[MOVE_MINIMIZE] = TRUE,
|
||||
[MOVE_SMOKESCREEN] = TRUE,
|
||||
[MOVE_CONFUSE_RAY] = TRUE,
|
||||
[MOVE_WITHDRAW] = TRUE,
|
||||
[MOVE_DEFENSE_CURL] = TRUE,
|
||||
[MOVE_BARRIER] = TRUE,
|
||||
[MOVE_LIGHT_SCREEN] = TRUE,
|
||||
[MOVE_HAZE] = TRUE,
|
||||
[MOVE_REFLECT] = TRUE,
|
||||
[MOVE_FOCUS_ENERGY] = TRUE,
|
||||
[MOVE_BIDE] = FALSE,
|
||||
[MOVE_METRONOME] = TRUE,
|
||||
[MOVE_MIRROR_MOVE] = TRUE,
|
||||
[MOVE_SELF_DESTRUCT] = TRUE,
|
||||
[MOVE_EGG_BOMB] = TRUE,
|
||||
[MOVE_LICK] = TRUE,
|
||||
[MOVE_SMOG] = FALSE,
|
||||
[MOVE_SLUDGE] = FALSE,
|
||||
[MOVE_BONE_CLUB] = FALSE,
|
||||
[MOVE_FIRE_BLAST] = TRUE,
|
||||
[MOVE_WATERFALL] = TRUE,
|
||||
[MOVE_CLAMP] = TRUE,
|
||||
[MOVE_SWIFT] = TRUE,
|
||||
[MOVE_SKULL_BASH] = TRUE,
|
||||
[MOVE_SPIKE_CANNON] = FALSE,
|
||||
[MOVE_CONSTRICT] = FALSE,
|
||||
[MOVE_AMNESIA] = TRUE,
|
||||
[MOVE_KINESIS] = TRUE,
|
||||
[MOVE_SOFT_BOILED] = TRUE,
|
||||
[MOVE_HIGH_JUMP_KICK] = TRUE,
|
||||
[MOVE_GLARE] = TRUE,
|
||||
[MOVE_DREAM_EATER] = TRUE,
|
||||
[MOVE_POISON_GAS] = FALSE,
|
||||
[MOVE_BARRAGE] = FALSE,
|
||||
[MOVE_LEECH_LIFE] = FALSE,
|
||||
[MOVE_LOVELY_KISS] = TRUE,
|
||||
[MOVE_SKY_ATTACK] = TRUE,
|
||||
[MOVE_TRANSFORM] = TRUE,
|
||||
[MOVE_BUBBLE] = FALSE,
|
||||
[MOVE_DIZZY_PUNCH] = TRUE,
|
||||
[MOVE_SPORE] = TRUE,
|
||||
[MOVE_FLASH] = TRUE,
|
||||
[MOVE_PSYWAVE] = TRUE,
|
||||
[MOVE_SPLASH] = FALSE,
|
||||
[MOVE_ACID_ARMOR] = TRUE,
|
||||
[MOVE_CRABHAMMER] = TRUE,
|
||||
[MOVE_EXPLOSION] = TRUE,
|
||||
[MOVE_FURY_SWIPES] = FALSE,
|
||||
[MOVE_BONEMERANG] = TRUE,
|
||||
[MOVE_REST] = TRUE,
|
||||
[MOVE_ROCK_SLIDE] = TRUE,
|
||||
[MOVE_HYPER_FANG] = TRUE,
|
||||
[MOVE_SHARPEN] = TRUE,
|
||||
[MOVE_CONVERSION] = TRUE,
|
||||
[MOVE_TRI_ATTACK] = TRUE,
|
||||
[MOVE_SUPER_FANG] = TRUE,
|
||||
[MOVE_SLASH] = TRUE,
|
||||
[MOVE_SUBSTITUTE] = TRUE,
|
||||
[MOVE_STRUGGLE] = TRUE,
|
||||
[MOVE_SKETCH] = TRUE,
|
||||
[MOVE_TRIPLE_KICK] = TRUE,
|
||||
[MOVE_THIEF] = TRUE,
|
||||
[MOVE_SPIDER_WEB] = TRUE,
|
||||
[MOVE_MIND_READER] = TRUE,
|
||||
[MOVE_NIGHTMARE] = TRUE,
|
||||
[MOVE_FLAME_WHEEL] = FALSE,
|
||||
[MOVE_SNORE] = TRUE,
|
||||
[MOVE_CURSE] = TRUE,
|
||||
[MOVE_FLAIL] = TRUE,
|
||||
[MOVE_CONVERSION_2] = TRUE,
|
||||
[MOVE_AEROBLAST] = TRUE,
|
||||
[MOVE_COTTON_SPORE] = TRUE,
|
||||
[MOVE_REVERSAL] = TRUE,
|
||||
[MOVE_SPITE] = TRUE,
|
||||
[MOVE_POWDER_SNOW] = FALSE,
|
||||
[MOVE_PROTECT] = TRUE,
|
||||
[MOVE_MACH_PUNCH] = TRUE,
|
||||
[MOVE_SCARY_FACE] = TRUE,
|
||||
[MOVE_FEINT_ATTACK] = TRUE,
|
||||
[MOVE_SWEET_KISS] = TRUE,
|
||||
[MOVE_BELLY_DRUM] = TRUE,
|
||||
[MOVE_SLUDGE_BOMB] = TRUE,
|
||||
[MOVE_MUD_SLAP] = TRUE,
|
||||
[MOVE_OCTAZOOKA] = TRUE,
|
||||
[MOVE_SPIKES] = TRUE,
|
||||
[MOVE_ZAP_CANNON] = TRUE,
|
||||
[MOVE_FORESIGHT] = TRUE,
|
||||
[MOVE_DESTINY_BOND] = TRUE,
|
||||
[MOVE_PERISH_SONG] = TRUE,
|
||||
[MOVE_ICY_WIND] = TRUE,
|
||||
[MOVE_DETECT] = TRUE,
|
||||
[MOVE_BONE_RUSH] = FALSE,
|
||||
[MOVE_LOCK_ON] = TRUE,
|
||||
[MOVE_OUTRAGE] = TRUE,
|
||||
[MOVE_SANDSTORM] = TRUE,
|
||||
[MOVE_GIGA_DRAIN] = TRUE,
|
||||
[MOVE_ENDURE] = TRUE,
|
||||
[MOVE_CHARM] = TRUE,
|
||||
[MOVE_ROLLOUT] = TRUE,
|
||||
[MOVE_FALSE_SWIPE] = TRUE,
|
||||
[MOVE_SWAGGER] = TRUE,
|
||||
[MOVE_MILK_DRINK] = TRUE,
|
||||
[MOVE_SPARK] = FALSE,
|
||||
[MOVE_FURY_CUTTER] = TRUE,
|
||||
[MOVE_STEEL_WING] = TRUE,
|
||||
[MOVE_MEAN_LOOK] = TRUE,
|
||||
[MOVE_ATTRACT] = TRUE,
|
||||
[MOVE_SLEEP_TALK] = TRUE,
|
||||
[MOVE_HEAL_BELL] = TRUE,
|
||||
[MOVE_RETURN] = TRUE,
|
||||
[MOVE_PRESENT] = TRUE,
|
||||
[MOVE_FRUSTRATION] = TRUE,
|
||||
[MOVE_SAFEGUARD] = TRUE,
|
||||
[MOVE_PAIN_SPLIT] = TRUE,
|
||||
[MOVE_SACRED_FIRE] = TRUE,
|
||||
[MOVE_MAGNITUDE] = FALSE,
|
||||
[MOVE_DYNAMIC_PUNCH] = TRUE,
|
||||
[MOVE_MEGAHORN] = TRUE,
|
||||
[MOVE_DRAGON_BREATH] = TRUE,
|
||||
[MOVE_BATON_PASS] = TRUE,
|
||||
[MOVE_ENCORE] = TRUE,
|
||||
[MOVE_PURSUIT] = TRUE,
|
||||
[MOVE_RAPID_SPIN] = TRUE,
|
||||
[MOVE_SWEET_SCENT] = TRUE,
|
||||
[MOVE_IRON_TAIL] = TRUE,
|
||||
[MOVE_METAL_CLAW] = TRUE,
|
||||
[MOVE_VITAL_THROW] = TRUE,
|
||||
[MOVE_MORNING_SUN] = TRUE,
|
||||
[MOVE_SYNTHESIS] = TRUE,
|
||||
[MOVE_MOONLIGHT] = TRUE,
|
||||
[MOVE_HIDDEN_POWER] = TRUE,
|
||||
[MOVE_CROSS_CHOP] = TRUE,
|
||||
[MOVE_TWISTER] = FALSE,
|
||||
[MOVE_RAIN_DANCE] = TRUE,
|
||||
[MOVE_SUNNY_DAY] = TRUE,
|
||||
[MOVE_CRUNCH] = TRUE,
|
||||
[MOVE_MIRROR_COAT] = TRUE,
|
||||
[MOVE_PSYCH_UP] = TRUE,
|
||||
[MOVE_EXTREME_SPEED] = TRUE,
|
||||
[MOVE_ANCIENT_POWER] = TRUE,
|
||||
[MOVE_SHADOW_BALL] = TRUE,
|
||||
[MOVE_FUTURE_SIGHT] = TRUE,
|
||||
[MOVE_ROCK_SMASH] = TRUE,
|
||||
[MOVE_WHIRLPOOL] = TRUE,
|
||||
[MOVE_BEAT_UP] = TRUE,
|
||||
[MOVE_FAKE_OUT] = TRUE,
|
||||
[MOVE_UPROAR] = TRUE,
|
||||
[MOVE_STOCKPILE] = TRUE,
|
||||
[MOVE_SPIT_UP] = TRUE,
|
||||
[MOVE_SWALLOW] = TRUE,
|
||||
[MOVE_HEAT_WAVE] = TRUE,
|
||||
[MOVE_HAIL] = TRUE,
|
||||
[MOVE_TORMENT] = TRUE,
|
||||
[MOVE_FLATTER] = TRUE,
|
||||
[MOVE_WILL_O_WISP] = TRUE,
|
||||
[MOVE_MEMENTO] = TRUE,
|
||||
[MOVE_FACADE] = TRUE,
|
||||
[MOVE_FOCUS_PUNCH] = TRUE,
|
||||
[MOVE_SMELLING_SALTS] = TRUE,
|
||||
[MOVE_FOLLOW_ME] = TRUE,
|
||||
[MOVE_NATURE_POWER] = TRUE,
|
||||
[MOVE_CHARGE] = TRUE,
|
||||
[MOVE_TAUNT] = TRUE,
|
||||
[MOVE_HELPING_HAND] = TRUE,
|
||||
[MOVE_TRICK] = TRUE,
|
||||
[MOVE_ROLE_PLAY] = TRUE,
|
||||
[MOVE_WISH] = TRUE,
|
||||
[MOVE_ASSIST] = TRUE,
|
||||
[MOVE_INGRAIN] = TRUE,
|
||||
[MOVE_SUPERPOWER] = TRUE,
|
||||
[MOVE_MAGIC_COAT] = TRUE,
|
||||
[MOVE_RECYCLE] = TRUE,
|
||||
[MOVE_REVENGE] = TRUE,
|
||||
[MOVE_BRICK_BREAK] = TRUE,
|
||||
[MOVE_YAWN] = TRUE,
|
||||
[MOVE_KNOCK_OFF] = TRUE,
|
||||
[MOVE_ENDEAVOR] = TRUE,
|
||||
[MOVE_ERUPTION] = TRUE,
|
||||
[MOVE_SKILL_SWAP] = TRUE,
|
||||
[MOVE_IMPRISON] = TRUE,
|
||||
[MOVE_REFRESH] = TRUE,
|
||||
[MOVE_GRUDGE] = TRUE,
|
||||
[MOVE_SNATCH] = TRUE,
|
||||
[MOVE_SECRET_POWER] = TRUE,
|
||||
[MOVE_DIVE] = TRUE,
|
||||
[MOVE_ARM_THRUST] = FALSE,
|
||||
[MOVE_CAMOUFLAGE] = TRUE,
|
||||
[MOVE_TAIL_GLOW] = TRUE,
|
||||
[MOVE_LUSTER_PURGE] = TRUE,
|
||||
[MOVE_MIST_BALL] = TRUE,
|
||||
[MOVE_FEATHER_DANCE] = TRUE,
|
||||
[MOVE_TEETER_DANCE] = TRUE,
|
||||
[MOVE_BLAZE_KICK] = TRUE,
|
||||
[MOVE_MUD_SPORT] = TRUE,
|
||||
[MOVE_ICE_BALL] = FALSE,
|
||||
[MOVE_NEEDLE_ARM] = TRUE,
|
||||
[MOVE_SLACK_OFF] = TRUE,
|
||||
[MOVE_HYPER_VOICE] = TRUE,
|
||||
[MOVE_POISON_FANG] = FALSE,
|
||||
[MOVE_CRUSH_CLAW] = TRUE,
|
||||
[MOVE_BLAST_BURN] = TRUE,
|
||||
[MOVE_HYDRO_CANNON] = TRUE,
|
||||
[MOVE_METEOR_MASH] = TRUE,
|
||||
[MOVE_ASTONISH] = TRUE,
|
||||
[MOVE_WEATHER_BALL] = TRUE,
|
||||
[MOVE_AROMATHERAPY] = TRUE,
|
||||
[MOVE_FAKE_TEARS] = TRUE,
|
||||
[MOVE_AIR_CUTTER] = TRUE,
|
||||
[MOVE_OVERHEAT] = TRUE,
|
||||
[MOVE_ODOR_SLEUTH] = TRUE,
|
||||
[MOVE_ROCK_TOMB] = TRUE,
|
||||
[MOVE_SILVER_WIND] = TRUE,
|
||||
[MOVE_METAL_SOUND] = TRUE,
|
||||
[MOVE_GRASS_WHISTLE] = TRUE,
|
||||
[MOVE_TICKLE] = TRUE,
|
||||
[MOVE_COSMIC_POWER] = TRUE,
|
||||
[MOVE_WATER_SPOUT] = TRUE,
|
||||
[MOVE_SIGNAL_BEAM] = TRUE,
|
||||
[MOVE_SHADOW_PUNCH] = TRUE,
|
||||
[MOVE_EXTRASENSORY] = TRUE,
|
||||
[MOVE_SKY_UPPERCUT] = TRUE,
|
||||
[MOVE_SAND_TOMB] = TRUE,
|
||||
[MOVE_SHEER_COLD] = TRUE,
|
||||
[MOVE_MUDDY_WATER] = TRUE,
|
||||
[MOVE_BULLET_SEED] = FALSE,
|
||||
[MOVE_AERIAL_ACE] = TRUE,
|
||||
[MOVE_ICICLE_SPEAR] = FALSE,
|
||||
[MOVE_IRON_DEFENSE] = TRUE,
|
||||
[MOVE_BLOCK] = TRUE,
|
||||
[MOVE_HOWL] = TRUE,
|
||||
[MOVE_DRAGON_CLAW] = TRUE,
|
||||
[MOVE_FRENZY_PLANT] = TRUE,
|
||||
[MOVE_BULK_UP] = TRUE,
|
||||
[MOVE_BOUNCE] = TRUE,
|
||||
[MOVE_MUD_SHOT] = FALSE,
|
||||
[MOVE_POISON_TAIL] = TRUE,
|
||||
[MOVE_COVET] = TRUE,
|
||||
[MOVE_VOLT_TACKLE] = TRUE,
|
||||
[MOVE_MAGICAL_LEAF] = TRUE,
|
||||
[MOVE_WATER_SPORT] = TRUE,
|
||||
[MOVE_CALM_MIND] = TRUE,
|
||||
[MOVE_LEAF_BLADE] = TRUE,
|
||||
[MOVE_DRAGON_DANCE] = TRUE,
|
||||
[MOVE_ROCK_BLAST] = FALSE,
|
||||
[MOVE_SHOCK_WAVE] = TRUE,
|
||||
[MOVE_WATER_PULSE] = TRUE,
|
||||
[MOVE_DOOM_DESIRE] = TRUE,
|
||||
[MOVE_PSYCHO_BOOST] = TRUE,
|
||||
};
|
||||
|
||||
// The possible questions to ask after the initial 3 WHICH MON questions. Retrieved from here and shuffled
|
||||
// WHAT_ITEM has max 3 occurrences, one for each party member
|
||||
// WHICH_MOVE has max 5 occurrences, defined as NUM_WHICH_MOVE_QUESTIONS
|
||||
|
||||
@ -1909,7 +1909,7 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] =
|
||||
|
||||
[EFFECT_PHOTON_GEYSER] =
|
||||
{
|
||||
.battleScript = BattleScript_EffectPhotonGeyser,
|
||||
.battleScript = BattleScript_EffectDynamicCategory,
|
||||
.battleTvScore = 0, // TODO: Assign points
|
||||
},
|
||||
|
||||
@ -2201,13 +2201,13 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] =
|
||||
|
||||
[EFFECT_TERA_BLAST] =
|
||||
{
|
||||
.battleScript = BattleScript_EffectPhotonGeyser,
|
||||
.battleScript = BattleScript_EffectDynamicCategory,
|
||||
.battleTvScore = 0, // TODO: Assign points
|
||||
},
|
||||
|
||||
[EFFECT_TERA_STARSTORM] =
|
||||
{
|
||||
.battleScript = BattleScript_EffectPhotonGeyser,
|
||||
.battleScript = BattleScript_EffectDynamicCategory,
|
||||
.battleTvScore = 0, // TODO: Assign points
|
||||
},
|
||||
|
||||
|
||||
@ -135,8 +135,8 @@ static const struct SpritePalette sSpritePalette_TeraIndicator = {sTeraIndicator
|
||||
|
||||
static const struct OamData sOamData_GimmickIndicator =
|
||||
{
|
||||
.shape = SPRITE_SHAPE(16x16),
|
||||
.size = SPRITE_SIZE(16x16),
|
||||
.shape = SPRITE_SHAPE(8x16),
|
||||
.size = SPRITE_SIZE(8x16),
|
||||
.priority = 1,
|
||||
};
|
||||
|
||||
|
||||
6632
src/data/object_events/object_event_pic_tables_followers.h
Normal file
@ -45,7 +45,7 @@
|
||||
#define OVERWORLD_PAL_FEMALE(...)
|
||||
#endif //OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
|
||||
|
||||
#define OVERWORLD_DATA(objEventPic, _size, shadow, _tracks, _anims) \
|
||||
#define OVERWORLD_DATA(picTable, _size, shadow, _tracks, _anims) \
|
||||
{ \
|
||||
.tileTag = TAG_NONE, \
|
||||
.paletteTag = OBJ_EVENT_PAL_TAG_DYNAMIC, \
|
||||
@ -61,7 +61,7 @@
|
||||
.oam = (_size == SIZE_32x32 ? &gObjectEventBaseOam_32x32 : &gObjectEventBaseOam_64x64), \
|
||||
.subspriteTables = (_size == SIZE_32x32 ? sOamTables_32x32 : sOamTables_64x64), \
|
||||
.anims = _anims, \
|
||||
.images = (const struct SpriteFrameImage[]) { overworld_ascending_frames(objEventPic, SIZE_32x32 ? 4 : 8, SIZE_32x32 ? 4 : 8), }, \
|
||||
.images = picTable, \
|
||||
.affineAnims = gDummySpriteAffineAnimTable, \
|
||||
}
|
||||
|
||||
@ -139,7 +139,7 @@ const struct SpeciesInfo gSpeciesInfo[] =
|
||||
.oam = &gObjectEventBaseOam_32x32,
|
||||
.subspriteTables = sOamTables_32x32,
|
||||
.anims = sAnimTable_Following,
|
||||
.images = (const struct SpriteFrameImage[]) { overworld_ascending_frames(gObjectEventPic_Substitute, 4, 4), },
|
||||
.images = sPicTable_Substitute,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
},
|
||||
#endif
|
||||
|
||||
@ -58,7 +58,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(1, 2, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Turtwig)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Turtwig,
|
||||
sPicTable_Turtwig,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -127,7 +127,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(1, 2, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Grotle)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Grotle,
|
||||
sPicTable_Grotle,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -201,7 +201,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(1, 10, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Torterra)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Torterra,
|
||||
sPicTable_Torterra,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -273,7 +273,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(4, 3, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Chimchar)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Chimchar,
|
||||
sPicTable_Chimchar,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -345,7 +345,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(-7, 6, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Monferno)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Monferno,
|
||||
sPicTable_Monferno,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -420,7 +420,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(0, 9, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Infernape)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Infernape,
|
||||
sPicTable_Infernape,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -492,7 +492,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(0, -1, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Piplup)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Piplup,
|
||||
sPicTable_Piplup,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -570,7 +570,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(0, 7, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Prinplup)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Prinplup,
|
||||
sPicTable_Prinplup,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -647,7 +647,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(2, 12, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Empoleon)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Empoleon,
|
||||
sPicTable_Empoleon,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -727,7 +727,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(-2, 1, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Starly)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Starly,
|
||||
sPicTable_Starly,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -736,7 +736,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
gShinyOverworldPalette_Starly
|
||||
)
|
||||
OVERWORLD_FEMALE(
|
||||
gObjectEventPic_StarlyF,
|
||||
sPicTable_StarlyF,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -807,7 +807,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(-1, 5, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Staravia)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Staravia,
|
||||
sPicTable_Staravia,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -816,7 +816,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
gShinyOverworldPalette_Staravia
|
||||
)
|
||||
OVERWORLD_FEMALE(
|
||||
gObjectEventPic_StaraviaF,
|
||||
sPicTable_StaraviaF,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -892,7 +892,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(1, 10, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Staraptor)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Staraptor,
|
||||
sPicTable_Staraptor,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -901,7 +901,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
gShinyOverworldPalette_Staraptor
|
||||
)
|
||||
OVERWORLD_FEMALE(
|
||||
gObjectEventPic_StaraptorF,
|
||||
sPicTable_StaraptorF,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -977,7 +977,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(1, 1, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Bidoof)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Bidoof,
|
||||
sPicTable_Bidoof,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -986,7 +986,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
gShinyOverworldPalette_Bidoof
|
||||
)
|
||||
OVERWORLD_FEMALE(
|
||||
gObjectEventPic_BidoofF,
|
||||
sPicTable_BidoofF,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -1058,7 +1058,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(-5, 5, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Bibarel)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Bibarel,
|
||||
sPicTable_Bibarel,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -1067,7 +1067,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
gShinyOverworldPalette_Bibarel
|
||||
)
|
||||
OVERWORLD_FEMALE(
|
||||
gObjectEventPic_BibarelF,
|
||||
sPicTable_BibarelF,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -1153,7 +1153,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(-5, 2, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Kricketot)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Kricketot,
|
||||
sPicTable_Kricketot,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -1162,7 +1162,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
gShinyOverworldPalette_Kricketot
|
||||
)
|
||||
OVERWORLD_FEMALE(
|
||||
gObjectEventPic_KricketotF,
|
||||
sPicTable_KricketotF,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -1239,7 +1239,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(-3, 6, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Kricketune)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Kricketune,
|
||||
sPicTable_Kricketune,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -1248,7 +1248,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
gShinyOverworldPalette_Kricketune
|
||||
)
|
||||
OVERWORLD_FEMALE(
|
||||
gObjectEventPic_KricketuneF,
|
||||
sPicTable_KricketuneF,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -1320,7 +1320,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(-1, 1, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Shinx)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Shinx,
|
||||
sPicTable_Shinx,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -1329,7 +1329,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
gShinyOverworldPalette_Shinx
|
||||
)
|
||||
OVERWORLD_FEMALE(
|
||||
gObjectEventPic_ShinxF,
|
||||
sPicTable_ShinxF,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -1400,7 +1400,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(-4, 2, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Luxio)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Luxio,
|
||||
sPicTable_Luxio,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -1409,7 +1409,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
gShinyOverworldPalette_Luxio
|
||||
)
|
||||
OVERWORLD_FEMALE(
|
||||
gObjectEventPic_LuxioF,
|
||||
sPicTable_LuxioF,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -1488,7 +1488,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(-1, 10, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Luxray)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Luxray,
|
||||
sPicTable_Luxray,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -1497,7 +1497,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
gShinyOverworldPalette_Luxray
|
||||
)
|
||||
OVERWORLD_FEMALE(
|
||||
gObjectEventPic_LuxrayF,
|
||||
sPicTable_LuxrayF,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -1562,7 +1562,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(4, 4, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Cranidos)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Cranidos,
|
||||
sPicTable_Cranidos,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -1632,7 +1632,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(7, 11, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Rampardos)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Rampardos,
|
||||
sPicTable_Rampardos,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -1700,7 +1700,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(3, -1, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Shieldon)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Shieldon,
|
||||
sPicTable_Shieldon,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -1768,7 +1768,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(1, 6, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Bastiodon)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Bastiodon,
|
||||
sPicTable_Bastiodon,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -1833,7 +1833,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(-1, 8, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Burmy)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_BurmyPlant,
|
||||
sPicTable_BurmyPlant,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -1901,7 +1901,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(-1, 9, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Burmy)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_BurmySandy,
|
||||
sPicTable_BurmySandy,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -1969,7 +1969,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(-1, 13, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Burmy)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_BurmyTrash,
|
||||
sPicTable_BurmyTrash,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -2038,7 +2038,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(0, 9, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Wormadam)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_WormadamPlant,
|
||||
sPicTable_WormadamPlant,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -2103,7 +2103,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(-1, 9, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Wormadam)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_WormadamSandy,
|
||||
sPicTable_WormadamSandy,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -2169,7 +2169,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(0, 9, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Wormadam)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_WormadamTrash,
|
||||
sPicTable_WormadamTrash,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -2230,8 +2230,8 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
.iconPalIndex = 0, \
|
||||
SHADOW(-1, 9, SHADOW_SIZE_S) \
|
||||
FOOTPRINT(Mothim) \
|
||||
OVERWORLD( \
|
||||
gObjectEventPic_Mothim, \
|
||||
OVERWORLD( \
|
||||
sPicTable_Mothim, \
|
||||
SIZE_32x32, \
|
||||
SHADOW_SIZE_M, \
|
||||
TRACKS_FOOT, \
|
||||
@ -2314,7 +2314,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(-4, 10, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Combee)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Combee,
|
||||
sPicTable_Combee,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -2323,7 +2323,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
gShinyOverworldPalette_Combee
|
||||
)
|
||||
OVERWORLD_FEMALE(
|
||||
gObjectEventPic_CombeeF,
|
||||
sPicTable_CombeeF,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -2398,7 +2398,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(-1, 11, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Vespiquen)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Vespiquen,
|
||||
sPicTable_Vespiquen,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -2476,7 +2476,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(-2, 1, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Pachirisu)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Pachirisu,
|
||||
sPicTable_Pachirisu,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -2485,7 +2485,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
gShinyOverworldPalette_Pachirisu
|
||||
)
|
||||
OVERWORLD_FEMALE(
|
||||
gObjectEventPic_PachirisuF,
|
||||
sPicTable_PachirisuF,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -2556,7 +2556,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(1, 4, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Buizel)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Buizel,
|
||||
sPicTable_Buizel,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -2565,7 +2565,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
gShinyOverworldPalette_Buizel
|
||||
)
|
||||
OVERWORLD_FEMALE(
|
||||
gObjectEventPic_BuizelF,
|
||||
sPicTable_BuizelF,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -2638,7 +2638,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(-4, 10, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Floatzel)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Floatzel,
|
||||
sPicTable_Floatzel,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -2647,7 +2647,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
gShinyOverworldPalette_Floatzel
|
||||
)
|
||||
OVERWORLD_FEMALE(
|
||||
gObjectEventPic_FloatzelF,
|
||||
sPicTable_FloatzelF,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -2720,7 +2720,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(-4, -2, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Cherubi)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Cherubi,
|
||||
sPicTable_Cherubi,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -2791,7 +2791,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(0, 6, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Cherrim)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_CherrimOvercast,
|
||||
sPicTable_CherrimOvercast,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -2920,7 +2920,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(1, 0, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Shellos)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_ShellosWestSea,
|
||||
sPicTable_ShellosWestSea,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -2985,7 +2985,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(2, -1, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Shellos)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_ShellosEast,
|
||||
sPicTable_ShellosEast,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -3050,7 +3050,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(1, 3, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Gastrodon)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_GastrodonWestSea,
|
||||
sPicTable_GastrodonWestSea,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -3113,7 +3113,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(2, 4, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Gastrodon)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_GastrodonEast,
|
||||
sPicTable_GastrodonEast,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -3184,7 +3184,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(1, 9, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Drifloon)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Drifloon,
|
||||
sPicTable_Drifloon,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -3256,7 +3256,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(0, 11, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Drifblim)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Drifblim,
|
||||
sPicTable_Drifblim,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -3323,7 +3323,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(3, 5, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Buneary)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Buneary,
|
||||
sPicTable_Buneary,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -3391,7 +3391,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(0, 10, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Lopunny)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Lopunny,
|
||||
sPicTable_Lopunny,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -3457,7 +3457,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
FOOTPRINT(Lopunny)
|
||||
#if OW_BATTLE_ONLY_FORMS
|
||||
OVERWORLD(
|
||||
gObjectEventPic_LopunnyMega,
|
||||
sPicTable_LopunnyMega,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -3530,7 +3530,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(-3, 6, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Glameow)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Glameow,
|
||||
sPicTable_Glameow,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -3602,7 +3602,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(4, 8, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Purugly)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Purugly,
|
||||
sPicTable_Purugly,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -3672,7 +3672,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(-1, 0, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Stunky)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Stunky,
|
||||
sPicTable_Stunky,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -3740,7 +3740,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(-3, 6, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Skuntank)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Skuntank,
|
||||
sPicTable_Skuntank,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -3817,7 +3817,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(0, 6, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Bronzor)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Bronzor,
|
||||
sPicTable_Bronzor,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -3889,7 +3889,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(5, 12, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Bronzong)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Bronzong,
|
||||
sPicTable_Bronzong,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -3971,7 +3971,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(-1, 3, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Chatot)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Chatot,
|
||||
sPicTable_Chatot,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -4040,7 +4040,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(-1, 7, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Spiritomb)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Spiritomb,
|
||||
sPicTable_Spiritomb,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -4115,7 +4115,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(1, 5, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Gible)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Gible,
|
||||
sPicTable_Gible,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -4124,7 +4124,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
gShinyOverworldPalette_Gible
|
||||
)
|
||||
OVERWORLD_FEMALE(
|
||||
gObjectEventPic_GibleF,
|
||||
sPicTable_GibleF,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -4195,7 +4195,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(3, 8, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Gabite)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Gabite,
|
||||
sPicTable_Gabite,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -4204,7 +4204,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
gShinyOverworldPalette_Gabite
|
||||
)
|
||||
OVERWORLD_FEMALE(
|
||||
gObjectEventPic_GabiteF,
|
||||
sPicTable_GabiteF,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -4282,7 +4282,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(5, 11, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Garchomp)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Garchomp,
|
||||
sPicTable_Garchomp,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -4291,7 +4291,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
gShinyOverworldPalette_Garchomp
|
||||
)
|
||||
OVERWORLD_FEMALE(
|
||||
gObjectEventPic_GarchompF,
|
||||
sPicTable_GarchompF,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -4355,7 +4355,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
FOOTPRINT(Garchomp)
|
||||
#if OW_BATTLE_ONLY_FORMS
|
||||
OVERWORLD(
|
||||
gObjectEventPic_GarchompMega,
|
||||
sPicTable_GarchompMega,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -4429,7 +4429,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(3, 3, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Riolu)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Riolu,
|
||||
sPicTable_Riolu,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -4497,7 +4497,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(-1, 7, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Lucario)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Lucario,
|
||||
sPicTable_Lucario,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -4564,7 +4564,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
FOOTPRINT(Lucario)
|
||||
#if OW_BATTLE_ONLY_FORMS
|
||||
OVERWORLD(
|
||||
gObjectEventPic_LucarioMega,
|
||||
sPicTable_LucarioMega,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -4645,7 +4645,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(2, -1, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Hippopotas)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Hippopotas,
|
||||
sPicTable_Hippopotas,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -4654,7 +4654,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
gShinyOverworldPalette_Hippopotas
|
||||
)
|
||||
OVERWORLD_FEMALE(
|
||||
gObjectEventPic_HippopotasF,
|
||||
sPicTable_HippopotasF,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -4727,7 +4727,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
NO_SHADOW
|
||||
FOOTPRINT(Hippowdon)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Hippowdon,
|
||||
sPicTable_Hippowdon,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -4813,7 +4813,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(-2, 3, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Skorupi)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Skorupi,
|
||||
sPicTable_Skorupi,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -4888,7 +4888,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(-3, 6, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Drapion)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Drapion,
|
||||
sPicTable_Drapion,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -4964,7 +4964,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(2, 4, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Croagunk)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Croagunk,
|
||||
sPicTable_Croagunk,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -4973,7 +4973,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
gShinyOverworldPalette_Croagunk
|
||||
)
|
||||
OVERWORLD_FEMALE(
|
||||
gObjectEventPic_CroagunkF,
|
||||
sPicTable_CroagunkF,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -5048,7 +5048,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(3, 7, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Toxicroak)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Toxicroak,
|
||||
sPicTable_Toxicroak,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -5057,7 +5057,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
gShinyOverworldPalette_Toxicroak
|
||||
)
|
||||
OVERWORLD_FEMALE(
|
||||
gObjectEventPic_ToxicroakF,
|
||||
sPicTable_ToxicroakF,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -5133,7 +5133,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(0, 9, SHADOW_SIZE_XL_BATTLE_ONLY)
|
||||
FOOTPRINT(Carnivine)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Carnivine,
|
||||
sPicTable_Carnivine,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -5213,7 +5213,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(0, 1, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Finneon)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Finneon,
|
||||
sPicTable_Finneon,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -5222,7 +5222,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
gShinyOverworldPalette_Finneon
|
||||
)
|
||||
OVERWORLD_FEMALE(
|
||||
gObjectEventPic_FinneonF,
|
||||
sPicTable_FinneonF,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -5297,7 +5297,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(-1, 8, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Lumineon)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Lumineon,
|
||||
sPicTable_Lumineon,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -5306,7 +5306,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
gShinyOverworldPalette_Lumineon
|
||||
)
|
||||
OVERWORLD_FEMALE(
|
||||
gObjectEventPic_LumineonF,
|
||||
sPicTable_LumineonF,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -5379,7 +5379,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(1, 4, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Snover)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Snover,
|
||||
sPicTable_Snover,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -5388,7 +5388,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
gShinyOverworldPalette_Snover
|
||||
)
|
||||
OVERWORLD_FEMALE(
|
||||
gObjectEventPic_SnoverF,
|
||||
sPicTable_SnoverF,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -5460,7 +5460,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(0, 11, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Abomasnow)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Abomasnow,
|
||||
sPicTable_Abomasnow,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -5469,7 +5469,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
gShinyOverworldPalette_Abomasnow
|
||||
)
|
||||
OVERWORLD_FEMALE(
|
||||
gObjectEventPic_AbomasnowF,
|
||||
sPicTable_AbomasnowF,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -5535,7 +5535,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
FOOTPRINT(Abomasnow)
|
||||
#if OW_BATTLE_ONLY_FORMS
|
||||
OVERWORLD(
|
||||
gObjectEventPic_AbomasnowMega,
|
||||
sPicTable_AbomasnowMega,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -5612,7 +5612,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(0, 10, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Rotom)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Rotom,
|
||||
sPicTable_Rotom,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -5690,7 +5690,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(-1, 7, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Rotom)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_RotomHeat,
|
||||
sPicTable_RotomHeat,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -5761,7 +5761,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(0, 10, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Rotom)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_RotomWash,
|
||||
sPicTable_RotomWash,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -5830,7 +5830,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(0, 13, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Rotom)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_RotomFrost,
|
||||
sPicTable_RotomFrost,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -5924,7 +5924,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(4, 9, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Rotom)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_RotomFan,
|
||||
sPicTable_RotomFan,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -5996,7 +5996,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(2, 14, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Rotom)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_RotomMow,
|
||||
sPicTable_RotomMow,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -6074,7 +6074,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(2, 11, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Uxie)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Uxie,
|
||||
sPicTable_Uxie,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -6158,7 +6158,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(0, 13, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Mesprit)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Mesprit,
|
||||
sPicTable_Mesprit,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -6236,7 +6236,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(0, 17, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Azelf)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Azelf,
|
||||
sPicTable_Azelf,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -6313,7 +6313,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(4, 12, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Dialga)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Dialga,
|
||||
sPicTable_Dialga,
|
||||
SIZE_64x64,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -6380,7 +6380,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(2, 11, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Dialga)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_DialgaOrigin,
|
||||
sPicTable_DialgaOrigin,
|
||||
SIZE_64x64,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_NONE,
|
||||
@ -6460,7 +6460,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(0, 10, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Palkia)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Palkia,
|
||||
sPicTable_Palkia,
|
||||
SIZE_64x64,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -6527,7 +6527,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(-3, 14, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Palkia)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_PalkiaOrigin,
|
||||
sPicTable_PalkiaOrigin,
|
||||
SIZE_64x64,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_NONE,
|
||||
@ -6606,7 +6606,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(2, 2, SHADOW_SIZE_XL_BATTLE_ONLY)
|
||||
FOOTPRINT(Heatran)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Heatran,
|
||||
sPicTable_Heatran,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -6681,7 +6681,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(3, 10, SHADOW_SIZE_XL_BATTLE_ONLY)
|
||||
FOOTPRINT(Regigigas)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Regigigas,
|
||||
sPicTable_Regigigas,
|
||||
SIZE_64x64,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -6759,7 +6759,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(3, 11, SHADOW_SIZE_L)
|
||||
FOOTPRINT(GiratinaAltered)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_GiratinaAltered,
|
||||
sPicTable_GiratinaAltered,
|
||||
SIZE_64x64,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -6833,7 +6833,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(0, 18, SHADOW_SIZE_L)
|
||||
FOOTPRINT(GiratinaOrigin)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_GiratinaOrigin,
|
||||
sPicTable_GiratinaOrigin,
|
||||
SIZE_64x64,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -6916,7 +6916,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(-2, 12, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Cresselia)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Cresselia,
|
||||
sPicTable_Cresselia,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -6993,7 +6993,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(0, 7, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Phione)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Phione,
|
||||
sPicTable_Phione,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -7069,7 +7069,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(-5, 8, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Manaphy)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Manaphy,
|
||||
sPicTable_Manaphy,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -7148,7 +7148,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(4, 12, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Darkrai)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Darkrai,
|
||||
sPicTable_Darkrai,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -7229,7 +7229,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(1, -3, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Shaymin)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_ShayminLand,
|
||||
sPicTable_ShayminLand,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -7307,7 +7307,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(3, 7, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Shaymin)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_ShayminSky,
|
||||
sPicTable_ShayminSky,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -7388,7 +7388,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
|
||||
SHADOW(-1, 15, SHADOW_SIZE_XL_BATTLE_ONLY) \
|
||||
FOOTPRINT(Arceus) \
|
||||
OVERWORLD( \
|
||||
gObjectEventPic_Arceus ##typeName, \
|
||||
sPicTable_Arceus ##typeName, \
|
||||
SIZE_64x64, \
|
||||
SHADOW_SIZE_M, \
|
||||
TRACKS_FOOT, \
|
||||
|
||||
@ -60,7 +60,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(-2, 3, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Chespin)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Chespin,
|
||||
sPicTable_Chespin,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -130,7 +130,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(2, 4, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Quilladin)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Quilladin,
|
||||
sPicTable_Quilladin,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -197,7 +197,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(4, 10, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Chesnaught)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Chesnaught,
|
||||
sPicTable_Chesnaught,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -269,7 +269,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(0, 4, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Fennekin)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Fennekin,
|
||||
sPicTable_Fennekin,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -337,7 +337,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(-2, 10, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Braixen)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Braixen,
|
||||
sPicTable_Braixen,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -408,7 +408,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(7, 14, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Delphox)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Delphox,
|
||||
sPicTable_Delphox,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -480,7 +480,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(2, 0, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Froakie)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Froakie,
|
||||
sPicTable_Froakie,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -547,7 +547,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(0, 5, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Frogadier)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Frogadier,
|
||||
sPicTable_Frogadier,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -607,7 +607,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(4, 6, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Greninja)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Greninja,
|
||||
sPicTable_Greninja,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -667,7 +667,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(4, 6, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Greninja)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Greninja,
|
||||
sPicTable_Greninja,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -794,7 +794,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(3, 9, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Bunnelby)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Bunnelby,
|
||||
sPicTable_Bunnelby,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -861,7 +861,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(8, 10, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Diggersby)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Diggersby,
|
||||
sPicTable_Diggersby,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -932,7 +932,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(-2, 0, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Fletchling)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Fletchling,
|
||||
sPicTable_Fletchling,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -1006,7 +1006,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(0, 12, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Fletchinder)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Fletchinder,
|
||||
sPicTable_Fletchinder,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -1073,7 +1073,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(-2, 17, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Talonflame)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Talonflame,
|
||||
sPicTable_Talonflame,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -1133,7 +1133,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(1, 1, SHADOW_SIZE_S) \
|
||||
FOOTPRINT(Scatterbug) \
|
||||
OVERWORLD( \
|
||||
gObjectEventPic_Scatterbug, \
|
||||
sPicTable_Scatterbug, \
|
||||
SIZE_32x32, \
|
||||
SHADOW_SIZE_M, \
|
||||
TRACKS_FOOT, \
|
||||
@ -1216,7 +1216,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(0, 2, SHADOW_SIZE_M) \
|
||||
FOOTPRINT(Spewpa) \
|
||||
OVERWORLD( \
|
||||
gObjectEventPic_Spewpa, \
|
||||
sPicTable_Spewpa, \
|
||||
SIZE_32x32, \
|
||||
SHADOW_SIZE_M, \
|
||||
TRACKS_FOOT, \
|
||||
@ -1299,7 +1299,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(0, 20, SHADOW_SIZE_M) \
|
||||
FOOTPRINT(Vivillon) \
|
||||
OVERWORLD( \
|
||||
gObjectEventPic_Vivillon ##form, \
|
||||
sPicTable_Vivillon ##form, \
|
||||
SIZE_32x32, \
|
||||
SHADOW_SIZE_M, \
|
||||
TRACKS_FOOT, \
|
||||
@ -1548,7 +1548,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(2, 3, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Litleo)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Litleo,
|
||||
sPicTable_Litleo,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -1623,7 +1623,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(-2, 11, SHADOW_SIZE_XL_BATTLE_ONLY)
|
||||
FOOTPRINT(Pyroar)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Pyroar,
|
||||
sPicTable_Pyroar,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -1632,7 +1632,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
gShinyOverworldPalette_Pyroar
|
||||
)
|
||||
OVERWORLD_FEMALE(
|
||||
gObjectEventPic_PyroarF,
|
||||
sPicTable_PyroarF,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -1689,11 +1689,11 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(0, 11, SHADOW_SIZE_S) \
|
||||
FOOTPRINT(Flabebe) \
|
||||
OVERWORLD( \
|
||||
gObjectEventPic_Flabebe##Form, \
|
||||
sPicTable_Flabebe##Form, \
|
||||
SIZE_32x32, \
|
||||
SHADOW_SIZE_M, \
|
||||
TRACKS_FOOT, \
|
||||
sAnimTable_Following, \
|
||||
sAnimTable_Following, \
|
||||
gOverworldPalette_Flabebe##Form, \
|
||||
gShinyOverworldPalette_Flabebe##Form \
|
||||
) \
|
||||
@ -1778,7 +1778,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(-3, 12, SHADOW_SIZE_S) \
|
||||
FOOTPRINT(Floette) \
|
||||
OVERWORLD( \
|
||||
gObjectEventPic_Floette ##form, \
|
||||
sPicTable_Floette ##form, \
|
||||
SIZE_32x32, \
|
||||
SHADOW_SIZE_M, \
|
||||
TRACKS_FOOT, \
|
||||
@ -1927,7 +1927,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(-5, 15, SHADOW_SIZE_M) \
|
||||
FOOTPRINT(Florges) \
|
||||
OVERWORLD( \
|
||||
gObjectEventPic_Florges ##Form, \
|
||||
sPicTable_Florges ##Form, \
|
||||
SIZE_32x32, \
|
||||
SHADOW_SIZE_M, \
|
||||
TRACKS_FOOT, \
|
||||
@ -2039,7 +2039,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(2, 7, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Skiddo)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Skiddo,
|
||||
sPicTable_Skiddo,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -2107,7 +2107,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(2, 9, SHADOW_SIZE_XL_BATTLE_ONLY)
|
||||
FOOTPRINT(Gogoat)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Gogoat,
|
||||
sPicTable_Gogoat,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -2179,7 +2179,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(-2, 2, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Pancham)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Pancham,
|
||||
sPicTable_Pancham,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -2251,7 +2251,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(-2, 13, SHADOW_SIZE_XL_BATTLE_ONLY)
|
||||
FOOTPRINT(Pangoro)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Pangoro,
|
||||
sPicTable_Pangoro,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -2312,7 +2312,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(3, 10, SHADOW_SIZE_XL_BATTLE_ONLY) \
|
||||
FOOTPRINT(Furfrou) \
|
||||
OVERWORLD( \
|
||||
gObjectEventPic_Furfrou##_form, \
|
||||
sPicTable_Furfrou##_form, \
|
||||
SIZE_32x32, \
|
||||
SHADOW_SIZE_M, \
|
||||
TRACKS_FOOT, \
|
||||
@ -2398,7 +2398,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(-1, 4, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Espurr)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Espurr,
|
||||
sPicTable_Espurr,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -2463,7 +2463,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(-2, 11, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Meowstic)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_MeowsticM,
|
||||
sPicTable_MeowsticM,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -2526,7 +2526,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(-2, 12, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Meowstic)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_MeowsticF,
|
||||
sPicTable_MeowsticF,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -2596,7 +2596,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(-10, 11, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Honedge)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Honedge,
|
||||
sPicTable_Honedge,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -2667,7 +2667,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(8, 11, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Doublade)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Doublade,
|
||||
sPicTable_Doublade,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -2740,7 +2740,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(0, 14, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Aegislash)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_AegislashShield,
|
||||
sPicTable_AegislashShield,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -2882,7 +2882,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(-1, 13, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Spritzee)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Spritzee,
|
||||
sPicTable_Spritzee,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -2950,7 +2950,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(0, 10, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Aromatisse)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Aromatisse,
|
||||
sPicTable_Aromatisse,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -3022,7 +3022,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(0, -1, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Swirlix)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Swirlix,
|
||||
sPicTable_Swirlix,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -3093,7 +3093,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(1, 6, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Slurpuff)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Slurpuff,
|
||||
sPicTable_Slurpuff,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -3163,7 +3163,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(-1, 11, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Inkay)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Inkay,
|
||||
sPicTable_Inkay,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -3232,7 +3232,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(5, 14, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Malamar)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Malamar,
|
||||
sPicTable_Malamar,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -3303,7 +3303,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(-3, 5, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Binacle)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Binacle,
|
||||
sPicTable_Binacle,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -3371,7 +3371,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(4, 14, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Barbaracle)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Barbaracle,
|
||||
sPicTable_Barbaracle,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -3444,7 +3444,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(3, 5, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Skrelp)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Skrelp,
|
||||
sPicTable_Skrelp,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -3513,7 +3513,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(-3, 14, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Dragalge)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Dragalge,
|
||||
sPicTable_Dragalge,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -3584,7 +3584,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(4, -6, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Clauncher)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Clauncher,
|
||||
sPicTable_Clauncher,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -3658,7 +3658,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(6, 1, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Clawitzer)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Clawitzer,
|
||||
sPicTable_Clawitzer,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -3726,7 +3726,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(-1, 1, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Helioptile)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Helioptile,
|
||||
sPicTable_Helioptile,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -3795,7 +3795,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(-2, 10, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Heliolisk)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Heliolisk,
|
||||
sPicTable_Heliolisk,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -3864,7 +3864,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(3, 2, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Tyrunt)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Tyrunt,
|
||||
sPicTable_Tyrunt,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -3931,7 +3931,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(-2, 14, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Tyrantrum)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Tyrantrum,
|
||||
sPicTable_Tyrantrum,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -4006,7 +4006,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(0, 8, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Amaura)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Amaura,
|
||||
sPicTable_Amaura,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -4073,7 +4073,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(-6, 14, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Aurorus)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Aurorus,
|
||||
sPicTable_Aurorus,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -4146,7 +4146,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(3, 6, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Hawlucha)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Hawlucha,
|
||||
sPicTable_Hawlucha,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -4215,7 +4215,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(-2, 1, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Dedenne)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Dedenne,
|
||||
sPicTable_Dedenne,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -4292,7 +4292,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(-1, 5, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Carbink)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Carbink,
|
||||
sPicTable_Carbink,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -4361,7 +4361,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(-1, -1, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Goomy)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Goomy,
|
||||
sPicTable_Goomy,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -4431,7 +4431,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(1, 6, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Sliggoo)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Sliggoo,
|
||||
sPicTable_Sliggoo,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -4502,7 +4502,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(-2, 14, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Goodra)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Goodra,
|
||||
sPicTable_Goodra,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -4567,7 +4567,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(2, 6, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Sliggoo)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_SliggooHisui,
|
||||
sPicTable_SliggooHisui,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -4633,7 +4633,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(1, 12, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Goodra)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_GoodraHisui,
|
||||
sPicTable_GoodraHisui,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -4712,7 +4712,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(-1, 12, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Klefki)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Klefki,
|
||||
sPicTable_Klefki,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -4782,7 +4782,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(-1, 5, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Phantump)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Phantump,
|
||||
sPicTable_Phantump,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -4854,7 +4854,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(-1, 13, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Trevenant)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Trevenant,
|
||||
sPicTable_Trevenant,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -4918,7 +4918,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(0, 1, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Pumpkaboo)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_PumpkabooAverage,
|
||||
sPicTable_PumpkabooAverage,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -4983,7 +4983,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(-1, -1, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Pumpkaboo)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_PumpkabooSmall,
|
||||
sPicTable_PumpkabooSmall,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -5048,7 +5048,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(0, 2, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Pumpkaboo)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_PumpkabooLarge,
|
||||
sPicTable_PumpkabooLarge,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -5115,7 +5115,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(1, 4, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Pumpkaboo)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_PumpkabooSuper,
|
||||
sPicTable_PumpkabooSuper,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -5181,7 +5181,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(3, 10, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Gourgeist)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_GourgeistAverage,
|
||||
sPicTable_GourgeistAverage,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -5244,7 +5244,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(4, 9, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Gourgeist)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_GourgeistSmall,
|
||||
sPicTable_GourgeistSmall,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -5307,7 +5307,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(4, 12, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Gourgeist)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_GourgeistLarge,
|
||||
sPicTable_GourgeistLarge,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -5372,7 +5372,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(4, 14, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Gourgeist)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_GourgeistSuper,
|
||||
sPicTable_GourgeistSuper,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -5449,7 +5449,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(1, -1, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Bergmite)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Bergmite,
|
||||
sPicTable_Bergmite,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -5519,7 +5519,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(1, -1, SHADOW_SIZE_XL_BATTLE_ONLY)
|
||||
FOOTPRINT(Avalugg)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Avalugg,
|
||||
sPicTable_Avalugg,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -5582,7 +5582,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(2, -2, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Avalugg)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_AvaluggHisui,
|
||||
sPicTable_AvaluggHisui,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -5663,7 +5663,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(2, 11, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Noibat)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Noibat,
|
||||
sPicTable_Noibat,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -5734,7 +5734,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(5, 10, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Noivern)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Noivern,
|
||||
sPicTable_Noivern,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -5794,7 +5794,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(3, 14, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Xerneas)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_XerneasNeutral,
|
||||
sPicTable_XerneasNeutral,
|
||||
SIZE_64x64,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -5857,7 +5857,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(3, 14, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Xerneas)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_XerneasActive,
|
||||
sPicTable_XerneasActive,
|
||||
SIZE_64x64,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -5932,7 +5932,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(0, 16, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Yveltal)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Yveltal,
|
||||
sPicTable_Yveltal,
|
||||
SIZE_64x64,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -5996,7 +5996,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(0, 13, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Zygarde)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Zygarde50,
|
||||
sPicTable_Zygarde50,
|
||||
SIZE_64x64,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -6059,7 +6059,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(0, 13, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Zygarde)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Zygarde50,
|
||||
sPicTable_Zygarde50,
|
||||
SIZE_64x64,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -6122,7 +6122,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(1, 11, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Zygarde)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Zygarde10,
|
||||
sPicTable_Zygarde10,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -6186,7 +6186,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(1, 11, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Zygarde)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Zygarde10,
|
||||
sPicTable_Zygarde10,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -6258,7 +6258,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(-3, 13, SHADOW_SIZE_XL_BATTLE_ONLY)
|
||||
FOOTPRINT(Zygarde)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_ZygardeComplete,
|
||||
sPicTable_ZygardeComplete,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -6332,7 +6332,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(0, 13, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Diancie)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Diancie,
|
||||
sPicTable_Diancie,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -6402,7 +6402,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
FOOTPRINT(Diancie)
|
||||
#if OW_BATTLE_ONLY_FORMS
|
||||
OVERWORLD(
|
||||
gObjectEventPic_DiancieMega,
|
||||
sPicTable_DiancieMega,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -6485,7 +6485,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(0, 13, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Hoopa)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_HoopaConfined,
|
||||
sPicTable_HoopaConfined,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -6556,7 +6556,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(1, 14, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Hoopa)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_HoopaUnbound,
|
||||
sPicTable_HoopaUnbound,
|
||||
SIZE_64x64,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -6628,7 +6628,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
|
||||
SHADOW(0, 12, SHADOW_SIZE_XL_BATTLE_ONLY)
|
||||
FOOTPRINT(Volcanion)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Volcanion,
|
||||
sPicTable_Volcanion,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
|
||||
@ -57,7 +57,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(-1, 1, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Rowlet)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Rowlet,
|
||||
sPicTable_Rowlet,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -125,7 +125,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(0, 5, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Dartrix)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Dartrix,
|
||||
sPicTable_Dartrix,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -192,7 +192,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(-1, 13, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Decidueye)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Decidueye,
|
||||
sPicTable_Decidueye,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -256,7 +256,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(-1, 14, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Decidueye)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_DecidueyeHisui,
|
||||
sPicTable_DecidueyeHisui,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -323,7 +323,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(1, 1, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Litten)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Litten,
|
||||
sPicTable_Litten,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -387,7 +387,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(5, 7, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Torracat)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Torracat,
|
||||
sPicTable_Torracat,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -450,7 +450,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(4, 14, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Incineroar)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Incineroar,
|
||||
sPicTable_Incineroar,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -514,7 +514,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(0, 1, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Popplio)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Popplio,
|
||||
sPicTable_Popplio,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -578,7 +578,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(-5, 6, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Brionne)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Brionne,
|
||||
sPicTable_Brionne,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -641,7 +641,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(-6, 11, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Primarina)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Primarina,
|
||||
sPicTable_Primarina,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -710,7 +710,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(0, 3, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Pikipek)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Pikipek,
|
||||
sPicTable_Pikipek,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -780,7 +780,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(1, 8, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Trumbeak)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Trumbeak,
|
||||
sPicTable_Trumbeak,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -847,7 +847,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(9, 12, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Toucannon)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Toucannon,
|
||||
sPicTable_Toucannon,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -912,7 +912,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(-9, 1, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Yungoos)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Yungoos,
|
||||
sPicTable_Yungoos,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -973,7 +973,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(-2, 8, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Gumshoos)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Gumshoos,
|
||||
sPicTable_Gumshoos,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -1033,7 +1033,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(-2, 8, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Gumshoos)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Gumshoos,
|
||||
sPicTable_Gumshoos,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -1100,7 +1100,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(0, -4, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Grubbin)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Grubbin,
|
||||
sPicTable_Grubbin,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -1169,7 +1169,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
NO_SHADOW
|
||||
FOOTPRINT(Charjabug)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Charjabug,
|
||||
sPicTable_Charjabug,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -1231,7 +1231,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(-1, 16, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Vikavolt)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Vikavolt,
|
||||
sPicTable_Vikavolt,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -1299,7 +1299,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(-1, 16, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Vikavolt)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Vikavolt,
|
||||
sPicTable_Vikavolt,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -1367,7 +1367,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(7, 6, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Crabrawler)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Crabrawler,
|
||||
sPicTable_Crabrawler,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -1433,7 +1433,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(1, 14, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Crabominable)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Crabominable,
|
||||
sPicTable_Crabominable,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -1498,7 +1498,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(-4, 9, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Oricorio)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_OricorioBaile,
|
||||
sPicTable_OricorioBaile,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -1564,7 +1564,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(5, 8, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Oricorio)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_OricorioPomPom,
|
||||
sPicTable_OricorioPomPom,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -1630,7 +1630,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(-3, 11, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Oricorio)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_OricorioPau,
|
||||
sPicTable_OricorioPau,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -1696,7 +1696,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(7, 10, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Oricorio)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_OricorioSensu,
|
||||
sPicTable_OricorioSensu,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -1798,7 +1798,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(0, 5, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Cutiefly)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Cutiefly,
|
||||
sPicTable_Cutiefly,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -1861,7 +1861,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(-1, 12, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Ribombee)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Ribombee,
|
||||
sPicTable_Ribombee,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -1922,7 +1922,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(-1, 12, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Ribombee)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Ribombee,
|
||||
sPicTable_Ribombee,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -1985,7 +1985,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(-2, 2, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Rockruff)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Rockruff,
|
||||
sPicTable_Rockruff,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -2047,7 +2047,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(-2, 2, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Rockruff)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Rockruff,
|
||||
sPicTable_Rockruff,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -2115,7 +2115,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(5, 7, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Lycanroc)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_LycanrocMidday,
|
||||
sPicTable_LycanrocMidday,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -2181,7 +2181,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(5, 13, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Lycanroc)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_LycanrocMidnight,
|
||||
sPicTable_LycanrocMidnight,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -2247,7 +2247,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(5, 7, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Lycanroc)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_LycanrocDusk,
|
||||
sPicTable_LycanrocDusk,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -2313,7 +2313,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(-1, 3, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Wishiwashi)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_WishiwashiSolo,
|
||||
sPicTable_WishiwashiSolo,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -2437,7 +2437,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(0, -1, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Mareanie)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Mareanie,
|
||||
sPicTable_Mareanie,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -2502,7 +2502,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(0, 6, SHADOW_SIZE_XL_BATTLE_ONLY)
|
||||
FOOTPRINT(Toxapex)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Toxapex,
|
||||
sPicTable_Toxapex,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -2567,7 +2567,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(2, 6, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Mudbray)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Mudbray,
|
||||
sPicTable_Mudbray,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -2632,7 +2632,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(4, 13, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Mudsdale)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Mudsdale,
|
||||
sPicTable_Mudsdale,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -2704,7 +2704,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(1, 2, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Dewpider)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Dewpider,
|
||||
sPicTable_Dewpider,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -2766,7 +2766,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(-6, 9, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Araquanid)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Araquanid,
|
||||
sPicTable_Araquanid,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -2826,7 +2826,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(-6, 9, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Araquanid)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Araquanid,
|
||||
sPicTable_Araquanid,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -2894,7 +2894,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(0, 3, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Fomantis)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Fomantis,
|
||||
sPicTable_Fomantis,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -2956,7 +2956,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(-1, 12, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Lurantis)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Lurantis,
|
||||
sPicTable_Lurantis,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -3016,7 +3016,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(-1, 12, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Lurantis)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Lurantis,
|
||||
sPicTable_Lurantis,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -3085,7 +3085,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(-1, 4, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Morelull)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Morelull,
|
||||
sPicTable_Morelull,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -3151,7 +3151,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(0, 10, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Shiinotic)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Shiinotic,
|
||||
sPicTable_Shiinotic,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -3220,7 +3220,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(3, 1, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Salandit)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Salandit,
|
||||
sPicTable_Salandit,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -3282,7 +3282,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(-4, 9, SHADOW_SIZE_XL_BATTLE_ONLY)
|
||||
FOOTPRINT(Salazzle)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Salazzle,
|
||||
sPicTable_Salazzle,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -3342,7 +3342,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(-4, 9, SHADOW_SIZE_XL_BATTLE_ONLY)
|
||||
FOOTPRINT(Salazzle)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Salazzle,
|
||||
sPicTable_Salazzle,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -3413,7 +3413,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(0, 3, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Stufful)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Stufful,
|
||||
sPicTable_Stufful,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -3481,7 +3481,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(-1, 13, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Bewear)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Bewear,
|
||||
sPicTable_Bewear,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -3546,7 +3546,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(-2, -3, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Bounsweet)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Bounsweet,
|
||||
sPicTable_Bounsweet,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -3612,7 +3612,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(-2, 7, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Steenee)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Steenee,
|
||||
sPicTable_Steenee,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -3677,7 +3677,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(1, 13, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Tsareena)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Tsareena,
|
||||
sPicTable_Tsareena,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -3744,7 +3744,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(0, 10, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Comfey)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Comfey,
|
||||
sPicTable_Comfey,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -3812,7 +3812,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(-2, 6, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Oranguru)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Oranguru,
|
||||
sPicTable_Oranguru,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -3880,7 +3880,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(-4, 12, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Passimian)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Passimian,
|
||||
sPicTable_Passimian,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -3949,7 +3949,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(-4, -3, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Wimpod)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Wimpod,
|
||||
sPicTable_Wimpod,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -4017,7 +4017,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(2, 13, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Golisopod)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Golisopod,
|
||||
sPicTable_Golisopod,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -4082,7 +4082,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
NO_SHADOW
|
||||
FOOTPRINT(Sandygast)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Sandygast,
|
||||
sPicTable_Sandygast,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -4147,7 +4147,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
NO_SHADOW
|
||||
FOOTPRINT(Palossand)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Palossand,
|
||||
sPicTable_Palossand,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -4215,7 +4215,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(-3, -3, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Pyukumuku)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Pyukumuku,
|
||||
sPicTable_Pyukumuku,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -4280,7 +4280,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(1, 11, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Type_Null)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_TypeNull,
|
||||
sPicTable_TypeNull,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -4343,7 +4343,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(1, 13, SHADOW_SIZE_L) \
|
||||
FOOTPRINT(Silvally) \
|
||||
OVERWORLD( \
|
||||
gObjectEventPic_Silvally, \
|
||||
sPicTable_Silvally, \
|
||||
SIZE_32x32, \
|
||||
SHADOW_SIZE_M, \
|
||||
TRACKS_FOOT, \
|
||||
@ -4435,7 +4435,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
.iconPalIndex = 0, \
|
||||
SHADOW(0, 14, SHADOW_SIZE_S) \
|
||||
OVERWORLD( \
|
||||
gObjectEventPic_MiniorMeteor, \
|
||||
sPicTable_MiniorMeteor, \
|
||||
SIZE_32x32, \
|
||||
SHADOW_SIZE_M, \
|
||||
TRACKS_FOOT, \
|
||||
@ -4543,7 +4543,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(-4, 0, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Komala)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Komala,
|
||||
sPicTable_Komala,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -4613,7 +4613,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(-3, 12, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Turtonator)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Turtonator,
|
||||
sPicTable_Turtonator,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -4675,7 +4675,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(-1, 4, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Togedemaru)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Togedemaru,
|
||||
sPicTable_Togedemaru,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -4736,7 +4736,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(-1, 4, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Togedemaru)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Togedemaru,
|
||||
sPicTable_Togedemaru,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -4801,7 +4801,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(-3, 1, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Mimikyu)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_MimikyuDisguised,
|
||||
sPicTable_MimikyuDisguised,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -4916,7 +4916,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(-3, 1, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Mimikyu)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_MimikyuDisguised,
|
||||
sPicTable_MimikyuDisguised,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -5041,7 +5041,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(0, -1, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Bruxish)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Bruxish,
|
||||
sPicTable_Bruxish,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -5110,7 +5110,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(5, 13, SHADOW_SIZE_XL_BATTLE_ONLY)
|
||||
FOOTPRINT(Drampa)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Drampa,
|
||||
sPicTable_Drampa,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -5177,7 +5177,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(-1, 12, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Dhelmise)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Dhelmise,
|
||||
sPicTable_Dhelmise,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -5245,7 +5245,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(0, 5, SHADOW_SIZE_S)
|
||||
FOOTPRINT(JangmoO)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_JangmoO,
|
||||
sPicTable_JangmoO,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -5313,7 +5313,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(-2, 12, SHADOW_SIZE_M)
|
||||
FOOTPRINT(HakamoO)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_HakamoO,
|
||||
sPicTable_HakamoO,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -5374,7 +5374,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(0, 13, SHADOW_SIZE_L)
|
||||
FOOTPRINT(KommoO)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_KommoO,
|
||||
sPicTable_KommoO,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -5440,7 +5440,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(0, 13, SHADOW_SIZE_L)
|
||||
FOOTPRINT(KommoO)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_KommoO,
|
||||
sPicTable_KommoO,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -5516,7 +5516,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(-1, 19, SHADOW_SIZE_M)
|
||||
FOOTPRINT(TapuKoko)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_TapuKoko,
|
||||
sPicTable_TapuKoko,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -5587,7 +5587,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(0, 13, SHADOW_SIZE_S)
|
||||
FOOTPRINT(TapuLele)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_TapuLele,
|
||||
sPicTable_TapuLele,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -5660,7 +5660,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(4, 16, SHADOW_SIZE_M)
|
||||
FOOTPRINT(TapuBulu)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_TapuBulu,
|
||||
sPicTable_TapuBulu,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -5732,7 +5732,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(1, 15, SHADOW_SIZE_M)
|
||||
FOOTPRINT(TapuFini)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_TapuFini,
|
||||
sPicTable_TapuFini,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -5799,7 +5799,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(0, 8, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Cosmog)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Cosmog,
|
||||
sPicTable_Cosmog,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -5868,7 +5868,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(0, 5, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Cosmoem)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Cosmoem,
|
||||
sPicTable_Cosmoem,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -5936,7 +5936,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(-1, 11, SHADOW_SIZE_XL_BATTLE_ONLY)
|
||||
FOOTPRINT(Solgaleo)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Solgaleo,
|
||||
sPicTable_Solgaleo,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -6002,7 +6002,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(4, 17, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Lunala)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Lunala,
|
||||
sPicTable_Lunala,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -6070,7 +6070,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(-2, 14, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Nihilego)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Nihilego,
|
||||
sPicTable_Nihilego,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -6137,7 +6137,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(-2, 12, SHADOW_SIZE_XL_BATTLE_ONLY)
|
||||
FOOTPRINT(Buzzwole)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Buzzwole,
|
||||
sPicTable_Buzzwole,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -6203,7 +6203,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(0, 13, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Pheromosa)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Pheromosa,
|
||||
sPicTable_Pheromosa,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -6269,7 +6269,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(0, 13, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Xurkitree)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Xurkitree,
|
||||
sPicTable_Xurkitree,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -6337,7 +6337,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(-1, 13, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Celesteela)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Celesteela,
|
||||
sPicTable_Celesteela,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -6404,7 +6404,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(2, 14, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Kartana)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Kartana,
|
||||
sPicTable_Kartana,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -6470,7 +6470,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(4, 10, SHADOW_SIZE_XL_BATTLE_ONLY)
|
||||
FOOTPRINT(Guzzlord)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Guzzlord,
|
||||
sPicTable_Guzzlord,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -6539,7 +6539,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(-1, 15, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Necrozma)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Necrozma,
|
||||
sPicTable_Necrozma,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -6607,7 +6607,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(-3, 11, SHADOW_SIZE_XL_BATTLE_ONLY)
|
||||
FOOTPRINT(Necrozma)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_NecrozmaDuskMane,
|
||||
sPicTable_NecrozmaDuskMane,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -6677,7 +6677,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(3, 17, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Necrozma)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_NecrozmaDawnWings,
|
||||
sPicTable_NecrozmaDawnWings,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -6751,7 +6751,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
FOOTPRINT(Necrozma)
|
||||
#if OW_BATTLE_ONLY_FORMS
|
||||
OVERWORLD(
|
||||
gObjectEventPic_NecrozmaUltra,
|
||||
sPicTable_NecrozmaUltra,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -6824,7 +6824,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(-2, 14, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Magearna)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Magearna,
|
||||
sPicTable_Magearna,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -6889,7 +6889,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(-2, 14, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Magearna)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_MagearnaOriginal,
|
||||
sPicTable_MagearnaOriginal,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -6963,7 +6963,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(0, 5, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Marshadow)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Marshadow,
|
||||
sPicTable_Marshadow,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -7030,7 +7030,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(-1, 12, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Poipole)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Poipole,
|
||||
sPicTable_Poipole,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -7095,7 +7095,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(7, 17, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Naganadel)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Naganadel,
|
||||
sPicTable_Naganadel,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -7161,7 +7161,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(2, 15, SHADOW_SIZE_XL_BATTLE_ONLY)
|
||||
FOOTPRINT(Stakataka)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Stakataka,
|
||||
sPicTable_Stakataka,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -7227,7 +7227,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(0, 13, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Blacephalon)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Blacephalon,
|
||||
sPicTable_Blacephalon,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -7292,7 +7292,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(0, 9, SHADOW_SIZE_XL_BATTLE_ONLY)
|
||||
FOOTPRINT(Zeraora)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Zeraora,
|
||||
sPicTable_Zeraora,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -7358,7 +7358,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(-1, 2, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Meltan)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Meltan,
|
||||
sPicTable_Meltan,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -7422,7 +7422,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
|
||||
SHADOW(3, 10, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Melmetal)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Melmetal,
|
||||
sPicTable_Melmetal,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
|
||||
@ -54,7 +54,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(1, 1, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Grookey)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Grookey,
|
||||
sPicTable_Grookey,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -117,7 +117,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(5, 6, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Thwackey)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Thwackey,
|
||||
sPicTable_Thwackey,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -179,7 +179,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(2, 8, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Rillaboom)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Rillaboom,
|
||||
sPicTable_Rillaboom,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -302,7 +302,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(-1, 6, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Scorbunny)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Scorbunny,
|
||||
sPicTable_Scorbunny,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -365,7 +365,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(-4, 5, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Raboot)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Raboot,
|
||||
sPicTable_Raboot,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -428,7 +428,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(0, 14, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Cinderace)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Cinderace,
|
||||
sPicTable_Cinderace,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -553,7 +553,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(-3, 3, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Sobble)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Sobble,
|
||||
sPicTable_Sobble,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -616,7 +616,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(2, 5, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Drizzile)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Drizzile,
|
||||
sPicTable_Drizzile,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -679,7 +679,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(-5, 12, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Inteleon)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Inteleon,
|
||||
sPicTable_Inteleon,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -803,7 +803,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(-7, 5, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Skwovet)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Skwovet,
|
||||
sPicTable_Skwovet,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -868,7 +868,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(-11, 10, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Greedent)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Greedent,
|
||||
sPicTable_Greedent,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -940,7 +940,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(-1, -3, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Rookidee)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Rookidee,
|
||||
sPicTable_Rookidee,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -1013,7 +1013,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(2, 16, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Corvisquire)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Corvisquire,
|
||||
sPicTable_Corvisquire,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -1080,7 +1080,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(-1, 9, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Corviknight)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Corviknight,
|
||||
sPicTable_Corviknight,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -1203,7 +1203,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(2, 1, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Blipbug)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Blipbug,
|
||||
sPicTable_Blipbug,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -1269,7 +1269,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(-1, 0, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Dottler)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Dottler,
|
||||
sPicTable_Dottler,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -1334,7 +1334,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(0, 15, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Orbeetle)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Orbeetle,
|
||||
sPicTable_Orbeetle,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -1459,7 +1459,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(0, 4, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Nickit)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Nickit,
|
||||
sPicTable_Nickit,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -1523,7 +1523,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(-9, 7, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Thievul)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Thievul,
|
||||
sPicTable_Thievul,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -1587,7 +1587,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(0, 2, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Gossifleur)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Gossifleur,
|
||||
sPicTable_Gossifleur,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -1651,7 +1651,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(-2, 8, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Eldegoss)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Eldegoss,
|
||||
sPicTable_Eldegoss,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -1715,7 +1715,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(1, 1, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Wooloo)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Wooloo,
|
||||
sPicTable_Wooloo,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -1779,7 +1779,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(2, 8, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Dubwool)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Dubwool,
|
||||
sPicTable_Dubwool,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -1846,7 +1846,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(3, 1, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Chewtle)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Chewtle,
|
||||
sPicTable_Chewtle,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -1913,7 +1913,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(-2, 4, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Drednaw)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Drednaw,
|
||||
sPicTable_Drednaw,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -2037,7 +2037,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(-1, 2, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Yamper)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Yamper,
|
||||
sPicTable_Yamper,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -2101,7 +2101,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(0, 7, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Boltund)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Boltund,
|
||||
sPicTable_Boltund,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -2165,7 +2165,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(0, -3, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Rolycoly)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Rolycoly,
|
||||
sPicTable_Rolycoly,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -2228,7 +2228,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(0, 3, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Carkol)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Carkol,
|
||||
sPicTable_Carkol,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -2291,7 +2291,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(1, 12, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Coalossal)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Coalossal,
|
||||
sPicTable_Coalossal,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -2415,7 +2415,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(-1, -3, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Applin)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Applin,
|
||||
sPicTable_Applin,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -2482,7 +2482,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(-6, 11, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Flapple)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Flapple,
|
||||
sPicTable_Flapple,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -2603,7 +2603,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(5, 6, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Appletun)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Appletun,
|
||||
sPicTable_Appletun,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -2725,7 +2725,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(-4, 8, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Dipplin)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Dipplin,
|
||||
sPicTable_Dipplin,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -2788,7 +2788,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(1, 12, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Hydrapple)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Hydrapple,
|
||||
sPicTable_Hydrapple,
|
||||
SIZE_64x64,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -2852,7 +2852,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(3, 1, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Silicobra)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Silicobra,
|
||||
sPicTable_Silicobra,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -2916,7 +2916,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(2, -1, SHADOW_SIZE_XL_BATTLE_ONLY)
|
||||
FOOTPRINT(Sandaconda)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Sandaconda,
|
||||
sPicTable_Sandaconda,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -3039,7 +3039,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(5, 14, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Cramorant)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Cramorant,
|
||||
sPicTable_Cramorant,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -3218,7 +3218,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(-1, -5, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Arrokuda)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Arrokuda,
|
||||
sPicTable_Arrokuda,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -3282,7 +3282,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(4, 5, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Barraskewda)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Barraskewda,
|
||||
sPicTable_Barraskewda,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -3346,7 +3346,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(-2, 1, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Toxel)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Toxel,
|
||||
sPicTable_Toxel,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -3411,7 +3411,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(-6, 13, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Toxtricity)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_ToxtricityAmped,
|
||||
sPicTable_ToxtricityAmped,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -3528,7 +3528,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(1, 12, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Toxtricity)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_ToxtricityLowKey,
|
||||
sPicTable_ToxtricityLowKey,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -3651,7 +3651,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(6, -4, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Sizzlipede)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Sizzlipede,
|
||||
sPicTable_Sizzlipede,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -3719,7 +3719,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(-3, 7, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Centiskorch)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Centiskorch,
|
||||
sPicTable_Centiskorch,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -3843,7 +3843,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(1, -2, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Clobbopus)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Clobbopus,
|
||||
sPicTable_Clobbopus,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -3906,7 +3906,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(4, 9, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Grapploct)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Grapploct,
|
||||
sPicTable_Grapploct,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -3970,7 +3970,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(3, 3, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Sinistea)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Sinistea,
|
||||
sPicTable_Sinistea,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -4035,7 +4035,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(3, 4, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Sinistea)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Sinistea,
|
||||
sPicTable_Sinistea,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -4099,7 +4099,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(0, 12, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Polteageist)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Polteageist,
|
||||
sPicTable_Polteageist,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -4163,7 +4163,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(0, 11, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Polteageist)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Polteageist,
|
||||
sPicTable_Polteageist,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -4228,7 +4228,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(0, 1, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Hatenna)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Hatenna,
|
||||
sPicTable_Hatenna,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -4291,7 +4291,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(0, 5, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Hattrem)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Hattrem,
|
||||
sPicTable_Hattrem,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -4353,7 +4353,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(6, 13, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Hatterene)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Hatterene,
|
||||
sPicTable_Hatterene,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -4477,7 +4477,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(0, 2, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Impidimp)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Impidimp,
|
||||
sPicTable_Impidimp,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -4540,7 +4540,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(0, 7, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Morgrem)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Morgrem,
|
||||
sPicTable_Morgrem,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -4603,7 +4603,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(1, 11, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Grimmsnarl)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Grimmsnarl,
|
||||
sPicTable_Grimmsnarl,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -4727,7 +4727,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(0, 6, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Milcery)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Milcery,
|
||||
sPicTable_Milcery,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -4798,7 +4798,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(0, 5, SHADOW_SIZE_S) \
|
||||
FOOTPRINT(Alcremie) \
|
||||
OVERWORLD( \
|
||||
gObjectEventPic_AlcremieStrawberry, /*Alcremie ##sweet*/ \
|
||||
sPicTable_AlcremieStrawberry, /*Alcremie ##sweet*/ \
|
||||
SIZE_32x32, \
|
||||
SHADOW_SIZE_M, \
|
||||
TRACKS_FOOT, \
|
||||
@ -4968,7 +4968,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(-7, 5, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Falinks)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Falinks,
|
||||
sPicTable_Falinks,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -5031,7 +5031,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(-1, -4, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Pincurchin)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Pincurchin,
|
||||
sPicTable_Pincurchin,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -5097,7 +5097,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(-2, -7, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Snom)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Snom,
|
||||
sPicTable_Snom,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -5162,7 +5162,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(-7, 13, SHADOW_SIZE_XL_BATTLE_ONLY)
|
||||
FOOTPRINT(Frosmoth)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Frosmoth,
|
||||
sPicTable_Frosmoth,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -5226,7 +5226,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(0, 10, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Stonjourner)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Stonjourner,
|
||||
sPicTable_Stonjourner,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -5291,7 +5291,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(-1, 13, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Eiscue)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_EiscueIce,
|
||||
sPicTable_EiscueIce,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -5414,7 +5414,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(2, 4, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Indeedee)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_IndeedeeM,
|
||||
sPicTable_IndeedeeM,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -5477,7 +5477,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(2, 4, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Indeedee)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_IndeedeeF,
|
||||
sPicTable_IndeedeeF,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -5543,7 +5543,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(0, 0, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Morpeko)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_MorpekoFullBelly,
|
||||
sPicTable_MorpekoFullBelly,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -5667,7 +5667,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(5, 2, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Cufant)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Cufant,
|
||||
sPicTable_Cufant,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -5731,7 +5731,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(6, 7, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Copperajah)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Copperajah,
|
||||
sPicTable_Copperajah,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -5856,7 +5856,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(-4, 10, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Dracozolt)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Dracozolt,
|
||||
sPicTable_Dracozolt,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -5919,7 +5919,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(-2, 11, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Arctozolt)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Arctozolt,
|
||||
sPicTable_Arctozolt,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -5983,7 +5983,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(2, 11, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Dracovish)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Dracovish,
|
||||
sPicTable_Dracovish,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -6047,7 +6047,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(0, 11, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Arctovish)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Arctovish,
|
||||
sPicTable_Arctovish,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -6114,7 +6114,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(2, 11, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Duraludon)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Duraludon,
|
||||
sPicTable_Duraludon,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -6240,7 +6240,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(4, 14, SHADOW_SIZE_XL_BATTLE_ONLY)
|
||||
FOOTPRINT(Archaludon)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Archaludon,
|
||||
sPicTable_Archaludon,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -6306,7 +6306,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(0, 2, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Dreepy)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Dreepy,
|
||||
sPicTable_Dreepy,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -6370,7 +6370,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(0, 9, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Drakloak)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Drakloak,
|
||||
sPicTable_Drakloak,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -6434,7 +6434,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(0, 12, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Dragapult)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Dragapult,
|
||||
sPicTable_Dragapult,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -6497,7 +6497,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(-1, 9, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Zacian)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_ZacianHero,
|
||||
sPicTable_ZacianHero,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -6564,7 +6564,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(-3, 12, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Zacian)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_ZacianCrowned,
|
||||
sPicTable_ZacianCrowned,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -6633,7 +6633,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(-1, 12, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Zamazenta)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_ZamazentaHero,
|
||||
sPicTable_ZamazentaHero,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -6700,7 +6700,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(0, 12, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Zamazenta)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_ZamazentaCrowned,
|
||||
sPicTable_ZamazentaCrowned,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -6770,7 +6770,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(0, 14, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Eternatus)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Eternatus,
|
||||
sPicTable_Eternatus,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -6895,7 +6895,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(-2, 5, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Kubfu)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Kubfu,
|
||||
sPicTable_Kubfu,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -6963,7 +6963,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(0, 14, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Urshifu)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Urshifu,
|
||||
sPicTable_Urshifu,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -7088,7 +7088,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(4, 14, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Urshifu)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Urshifu,
|
||||
sPicTable_Urshifu,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -7216,7 +7216,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(5, 11, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Zarude)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Zarude,
|
||||
sPicTable_Zarude,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -7341,7 +7341,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(-3, 14, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Regieleki)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Regieleki,
|
||||
sPicTable_Regieleki,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -7408,7 +7408,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(0, 13, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Regidrago)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Regidrago,
|
||||
sPicTable_Regidrago,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -7473,7 +7473,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(-5, 11, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Glastrier)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Glastrier,
|
||||
sPicTable_Glastrier,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -7539,7 +7539,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(-6, 12, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Spectrier)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Spectrier,
|
||||
sPicTable_Spectrier,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -7605,7 +7605,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(-1, 12, SHADOW_SIZE_S)
|
||||
FOOTPRINT(Calyrex)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_Calyrex,
|
||||
sPicTable_Calyrex,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -7672,7 +7672,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(-5, 11, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Calyrex)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_CalyrexIce,
|
||||
sPicTable_CalyrexIce,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -7739,7 +7739,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(-5, 12, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Calyrex)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_CalyrexShadow,
|
||||
sPicTable_CalyrexShadow,
|
||||
SIZE_32x32,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_FOOT,
|
||||
@ -7810,7 +7810,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(-3, 19, SHADOW_SIZE_M)
|
||||
FOOTPRINT(Enamorus)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_EnamorusIncarnate,
|
||||
sPicTable_EnamorusIncarnate,
|
||||
SIZE_64x64,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_NONE,
|
||||
@ -7876,7 +7876,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
|
||||
SHADOW(2, 8, SHADOW_SIZE_L)
|
||||
FOOTPRINT(Enamorus)
|
||||
OVERWORLD(
|
||||
gObjectEventPic_EnamorusTherian,
|
||||
sPicTable_EnamorusTherian,
|
||||
SIZE_64x64,
|
||||
SHADOW_SIZE_M,
|
||||
TRACKS_NONE,
|
||||
|
||||
@ -3439,7 +3439,7 @@ static void DebugAction_Give_Pokemon_ComplexCreateMon(u8 taskId) //https://githu
|
||||
//Moves
|
||||
for (i = 0; i < MAX_MON_MOVES; i++)
|
||||
{
|
||||
if (moves[i] == MOVE_NONE || moves[i] == 0xFF || moves[i] >= MOVES_COUNT)
|
||||
if (moves[i] == MOVE_NONE || moves[i] >= MOVES_COUNT)
|
||||
continue;
|
||||
|
||||
SetMonMoveSlot(&mon, moves[i], i);
|
||||
|
||||
@ -27,6 +27,13 @@ EWRAM_DATA u16 gSpecialVar_MonBoxPos = 0;
|
||||
EWRAM_DATA u16 gSpecialVar_Unused_0x8014 = 0;
|
||||
EWRAM_DATA static u8 sSpecialFlags[SPECIAL_FLAGS_SIZE] = {0};
|
||||
|
||||
#if TESTING
|
||||
#define TEST_FLAGS_SIZE 1
|
||||
#define TEST_VARS_SIZE 8
|
||||
EWRAM_DATA static u8 sTestFlags[TEST_FLAGS_SIZE] = {0};
|
||||
EWRAM_DATA static u16 sTestVars[TEST_VARS_SIZE] = {0};
|
||||
#endif // TESTING
|
||||
|
||||
extern u16 *const gSpecialVars[];
|
||||
|
||||
const u16 gBadgeFlags[NUM_BADGES] =
|
||||
@ -179,6 +186,10 @@ u16 *GetVarPointer(u16 id)
|
||||
return NULL;
|
||||
else if (id < SPECIAL_VARS_START)
|
||||
return &gSaveBlock1Ptr->vars[id - VARS_START];
|
||||
#if TESTING
|
||||
else if (id >= TESTING_VARS_START)
|
||||
return &sTestVars[id - TESTING_VARS_START];
|
||||
#endif // TESTING
|
||||
else
|
||||
return gSpecialVars[id - SPECIAL_VARS_START];
|
||||
}
|
||||
@ -219,6 +230,10 @@ u8 *GetFlagPointer(u16 id)
|
||||
return NULL;
|
||||
else if (id < SPECIAL_FLAGS_START)
|
||||
return &gSaveBlock1Ptr->flags[id / 8];
|
||||
#if TESTING
|
||||
else if (id >= TESTING_FLAGS_START)
|
||||
return &sTestFlags[(id - TESTING_FLAGS_START) / 8];
|
||||
#endif // TESTING
|
||||
else
|
||||
return &sSpecialFlags[(id - SPECIAL_FLAGS_START) / 8];
|
||||
}
|
||||
|
||||
@ -381,7 +381,7 @@ static const bool8 sMovementTypeHasRange[NUM_MOVEMENT_TYPES] = {
|
||||
[MOVEMENT_TYPE_COPY_PLAYER_CLOCKWISE_IN_GRASS] = TRUE,
|
||||
};
|
||||
|
||||
const u8 gInitialMovementTypeFacingDirections[] = {
|
||||
const u8 gInitialMovementTypeFacingDirections[NUM_MOVEMENT_TYPES] = {
|
||||
[MOVEMENT_TYPE_NONE] = DIR_SOUTH,
|
||||
[MOVEMENT_TYPE_LOOK_AROUND] = DIR_SOUTH,
|
||||
[MOVEMENT_TYPE_WANDER_AROUND] = DIR_SOUTH,
|
||||
@ -463,6 +463,7 @@ const u8 gInitialMovementTypeFacingDirections[] = {
|
||||
[MOVEMENT_TYPE_WALK_SLOWLY_IN_PLACE_UP] = DIR_NORTH,
|
||||
[MOVEMENT_TYPE_WALK_SLOWLY_IN_PLACE_LEFT] = DIR_WEST,
|
||||
[MOVEMENT_TYPE_WALK_SLOWLY_IN_PLACE_RIGHT] = DIR_EAST,
|
||||
[MOVEMENT_TYPE_FOLLOW_PLAYER] = DIR_SOUTH,
|
||||
};
|
||||
|
||||
#include "data/object_events/object_event_graphics_info_pointers.h"
|
||||
@ -1925,6 +1926,14 @@ struct Pokemon *GetFirstLiveMon(void)
|
||||
u32 i;
|
||||
for (i = 0; i < PARTY_SIZE; i++)
|
||||
{
|
||||
struct Pokemon *mon = &gPlayerParty[i];
|
||||
if ((OW_MON_ALLOWED_SPECIES && GetMonData(mon, MON_DATA_SPECIES_OR_EGG) != VarGet(OW_MON_ALLOWED_SPECIES))
|
||||
|| (OW_MON_ALLOWED_MET_LVL && GetMonData(mon, MON_DATA_MET_LEVEL) != VarGet(OW_MON_ALLOWED_MET_LVL))
|
||||
|| (OW_MON_ALLOWED_MET_LOC && GetMonData(mon, MON_DATA_MET_LOCATION) != VarGet(OW_MON_ALLOWED_MET_LOC)))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (gPlayerParty[i].hp > 0 && !(gPlayerParty[i].box.isEgg || gPlayerParty[i].box.isBadEgg))
|
||||
return &gPlayerParty[i];
|
||||
}
|
||||
@ -2179,6 +2188,7 @@ void UpdateFollowingPokemon(void)
|
||||
// 3. flag is set
|
||||
if (OW_POKEMON_OBJECT_EVENTS == FALSE
|
||||
|| OW_FOLLOWERS_ENABLED == FALSE
|
||||
|| FlagGet(B_FLAG_FOLLOWERS_DISABLED)
|
||||
|| !GetFollowerInfo(&species, &shiny, &female)
|
||||
|| SpeciesToGraphicsInfo(species, shiny, female) == NULL
|
||||
|| (gMapHeader.mapType == MAP_TYPE_INDOOR && SpeciesToGraphicsInfo(species, shiny, female)->oam->size > ST_OAM_SIZE_2)
|
||||
@ -5423,6 +5433,7 @@ bool8 MovementType_FollowPlayer_Moving(struct ObjectEvent *objectEvent, struct S
|
||||
objectEvent->movementActionId = MOVEMENT_ACTION_NONE;
|
||||
sprite->sActionFuncId = 0;
|
||||
objectEvent->singleMovementActive = FALSE;
|
||||
objectEvent->facingDirectionLocked = FALSE;
|
||||
if (sprite->sTypeFuncId) // restore nonzero state
|
||||
sprite->sTypeFuncId = 1;
|
||||
}
|
||||
@ -5493,7 +5504,8 @@ bool8 FollowablePlayerMovement_Step(struct ObjectEvent *objectEvent, struct Spri
|
||||
{
|
||||
// Animate exiting pokeball
|
||||
// Player is jumping, but follower is invisible
|
||||
if (PlayerGetCopyableMovement() == COPY_MOVE_JUMP2)
|
||||
// don't emerge if player is jumping or moving via script
|
||||
if (PlayerGetCopyableMovement() == COPY_MOVE_JUMP2 || ArePlayerFieldControlsLocked())
|
||||
{
|
||||
sprite->sTypeFuncId = 0; // return to shadowing state
|
||||
return FALSE;
|
||||
@ -5514,6 +5526,15 @@ bool8 FollowablePlayerMovement_Step(struct ObjectEvent *objectEvent, struct Spri
|
||||
|
||||
// Follow player
|
||||
direction = GetDirectionToFace(x, y, targetX, targetY);
|
||||
// During a script, if player sidesteps or backsteps,
|
||||
// mirror player's direction instead
|
||||
if (ArePlayerFieldControlsLocked()
|
||||
&& gObjectEvents[gPlayerAvatar.objectEventId].facingDirection != gObjectEvents[gPlayerAvatar.objectEventId].movementDirection)
|
||||
{
|
||||
direction = gObjectEvents[gPlayerAvatar.objectEventId].movementDirection;
|
||||
objectEvent->facingDirectionLocked = TRUE;
|
||||
}
|
||||
|
||||
MoveCoords(direction, &x, &y);
|
||||
GetCollisionAtCoords(objectEvent, x, y, direction); // Sets directionOverwrite for stairs
|
||||
if (GetLedgeJumpDirection(x, y, direction) != DIR_NONE)
|
||||
@ -5521,53 +5542,28 @@ bool8 FollowablePlayerMovement_Step(struct ObjectEvent *objectEvent, struct Spri
|
||||
// InitJumpRegular will set the proper speed
|
||||
ObjectEventSetSingleMovement(objectEvent, sprite, GetJump2MovementAction(direction));
|
||||
}
|
||||
else if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_DASH))
|
||||
else if (playerAction >= MOVEMENT_ACTION_WALK_SLOW_DOWN && playerAction <= MOVEMENT_ACTION_WALK_SLOW_RIGHT)
|
||||
{
|
||||
// Set follow speed according to player's speed
|
||||
if (playerAction >= MOVEMENT_ACTION_RUN_DOWN_SLOW && playerAction <= MOVEMENT_ACTION_RUN_RIGHT_SLOW)
|
||||
if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_DASH)) // on sideways stairs
|
||||
objectEvent->movementActionId = GetWalkNormalMovementAction(direction);
|
||||
else
|
||||
objectEvent->movementActionId = GetWalkFastMovementAction(direction);
|
||||
}
|
||||
else if (PlayerGetCopyableMovement() == COPY_MOVE_JUMP2)
|
||||
{
|
||||
ObjectEventSetSingleMovement(objectEvent, sprite, GetWalkSlowMovementAction(direction));
|
||||
}
|
||||
else
|
||||
{
|
||||
if (playerAction >= MOVEMENT_ACTION_WALK_SLOW_DOWN && playerAction <= MOVEMENT_ACTION_WALK_SLOW_RIGHT)
|
||||
{
|
||||
ObjectEventSetSingleMovement(objectEvent, sprite, GetWalkSlowMovementAction(direction));
|
||||
}
|
||||
else
|
||||
{
|
||||
objectEvent->movementActionId = GetWalkNormalMovementAction(direction);
|
||||
if (OW_FOLLOWERS_BOBBING == TRUE)
|
||||
sprite->y2 = -1;
|
||||
}
|
||||
}
|
||||
sprite->sActionFuncId = 0;
|
||||
if (GetLedgeJumpDirection(x, y, direction) != DIR_NONE)
|
||||
{
|
||||
// InitJumpRegular will set the proper speed
|
||||
ObjectEventSetSingleMovement(objectEvent, sprite, GetJump2MovementAction(direction));
|
||||
}
|
||||
else if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_DASH))
|
||||
{
|
||||
// Set follow speed according to player's speed
|
||||
ObjectEventSetSingleMovement(objectEvent, sprite, GetWalkFastMovementAction(direction));
|
||||
}
|
||||
else if (PlayerGetCopyableMovement() == COPY_MOVE_JUMP2)
|
||||
{
|
||||
// If *player* jumps, make step take twice as long
|
||||
ObjectEventSetSingleMovement(objectEvent, sprite, GetWalkSlowMovementAction(direction));
|
||||
}
|
||||
else if (gSprites[gPlayerAvatar.spriteId].data[4] == MOVE_SPEED_FAST_1)
|
||||
{
|
||||
objectEvent->movementActionId = GetWalkFastMovementAction(direction);
|
||||
}
|
||||
else
|
||||
{
|
||||
ObjectEventSetSingleMovement(objectEvent, sprite, GetWalkNormalMovementAction(direction));
|
||||
objectEvent->movementActionId = GetWalkNormalMovementAction(direction);
|
||||
if (OW_FOLLOWERS_BOBBING == TRUE)
|
||||
sprite->y2 = -1;
|
||||
}
|
||||
sprite->sActionFuncId = 0;
|
||||
objectEvent->singleMovementActive = TRUE;
|
||||
sprite->sTypeFuncId = 2;
|
||||
return TRUE;
|
||||
@ -6231,13 +6227,19 @@ static bool8 IsMetatileDirectionallyImpassable(struct ObjectEvent *objectEvent,
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool8 DoesObjectCollideWithObjectAt(struct ObjectEvent *objectEvent, s16 x, s16 y)
|
||||
u32 GetObjectObjectCollidesWith(struct ObjectEvent *objectEvent, s16 x, s16 y, bool32 addCoords)
|
||||
{
|
||||
u8 i;
|
||||
struct ObjectEvent *curObject;
|
||||
|
||||
if (objectEvent->localId == OBJ_EVENT_ID_FOLLOWER)
|
||||
return FALSE; // follower cannot collide with other objects, but they can collide with it
|
||||
return OBJECT_EVENTS_COUNT; // follower cannot collide with other objects, but they can collide with it
|
||||
|
||||
if (addCoords)
|
||||
{
|
||||
x += objectEvent->currentCoords.x;
|
||||
y += objectEvent->currentCoords.y;
|
||||
}
|
||||
|
||||
for (i = 0; i < OBJECT_EVENTS_COUNT; i++)
|
||||
{
|
||||
@ -6248,11 +6250,16 @@ static bool8 DoesObjectCollideWithObjectAt(struct ObjectEvent *objectEvent, s16
|
||||
if ((curObject->currentCoords.x == x && curObject->currentCoords.y == y) || (curObject->previousCoords.x == x && curObject->previousCoords.y == y))
|
||||
{
|
||||
if (AreElevationsCompatible(objectEvent->currentElevation, curObject->currentElevation))
|
||||
return TRUE;
|
||||
return i;
|
||||
}
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
return OBJECT_EVENTS_COUNT;
|
||||
}
|
||||
|
||||
static bool8 DoesObjectCollideWithObjectAt(struct ObjectEvent *objectEvent, s16 x, s16 y)
|
||||
{
|
||||
return (GetObjectObjectCollidesWith(objectEvent, x, y, FALSE) < OBJECT_EVENTS_COUNT);
|
||||
}
|
||||
|
||||
bool8 IsBerryTreeSparkling(u8 localId, u8 mapNum, u8 mapGroup)
|
||||
@ -6404,6 +6411,19 @@ static u8 TryUpdateMovementActionOnStairs(struct ObjectEvent *objectEvent, u8 mo
|
||||
}
|
||||
}
|
||||
|
||||
static const u8 sActionIdToCopyableMovement[] = {
|
||||
[MOVEMENT_ACTION_FACE_DOWN ... MOVEMENT_ACTION_FACE_RIGHT] = COPY_MOVE_FACE,
|
||||
[MOVEMENT_ACTION_WALK_SLOW_DOWN ... MOVEMENT_ACTION_WALK_NORMAL_RIGHT] = COPY_MOVE_WALK,
|
||||
[MOVEMENT_ACTION_JUMP_2_DOWN ... MOVEMENT_ACTION_JUMP_2_RIGHT] = COPY_MOVE_JUMP2,
|
||||
[MOVEMENT_ACTION_WALK_FAST_DOWN ... MOVEMENT_ACTION_WALK_FAST_RIGHT] = COPY_MOVE_WALK,
|
||||
[MOVEMENT_ACTION_RIDE_WATER_CURRENT_DOWN ... MOVEMENT_ACTION_PLAYER_RUN_RIGHT] = COPY_MOVE_WALK,
|
||||
// Not a typo; follower needs to take an action with a duration == JUMP's,
|
||||
// and JUMP2 here will lead to WALK_SLOW later
|
||||
[MOVEMENT_ACTION_JUMP_DOWN ... MOVEMENT_ACTION_JUMP_RIGHT] = COPY_MOVE_JUMP2,
|
||||
|
||||
[MOVEMENT_ACTION_NONE] = COPY_MOVE_NONE,
|
||||
};
|
||||
|
||||
bool8 ObjectEventSetHeldMovement(struct ObjectEvent *objectEvent, u8 movementActionId)
|
||||
{
|
||||
if (ObjectEventIsMovementOverridden(objectEvent))
|
||||
@ -6416,6 +6436,16 @@ bool8 ObjectEventSetHeldMovement(struct ObjectEvent *objectEvent, u8 movementAct
|
||||
objectEvent->heldMovementActive = TRUE;
|
||||
objectEvent->heldMovementFinished = FALSE;
|
||||
gSprites[objectEvent->spriteId].sActionFuncId = 0;
|
||||
|
||||
// When player is moved via script, set copyable movement
|
||||
// for any followers via a lookup table
|
||||
if (ArePlayerFieldControlsLocked()
|
||||
&& objectEvent->isPlayer
|
||||
&& FlagGet(FLAG_SAFE_FOLLOWER_MOVEMENT))
|
||||
{
|
||||
objectEvent->playerCopyableMovement = sActionIdToCopyableMovement[objectEvent->movementActionId];
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@ -6439,6 +6469,15 @@ void ObjectEventClearHeldMovement(struct ObjectEvent *objectEvent)
|
||||
objectEvent->heldMovementFinished = FALSE;
|
||||
gSprites[objectEvent->spriteId].sTypeFuncId = 0;
|
||||
gSprites[objectEvent->spriteId].sActionFuncId = 0;
|
||||
|
||||
// When player is moved via script, set copyable movement
|
||||
// for any followers via a lookup table
|
||||
if (ArePlayerFieldControlsLocked()
|
||||
&& objectEvent->isPlayer
|
||||
&& FlagGet(FLAG_SAFE_FOLLOWER_MOVEMENT))
|
||||
{
|
||||
objectEvent->playerCopyableMovement = sActionIdToCopyableMovement[objectEvent->movementActionId];
|
||||
}
|
||||
}
|
||||
|
||||
u8 ObjectEventCheckHeldMovementStatus(struct ObjectEvent *objectEvent)
|
||||
|
||||
@ -38,8 +38,6 @@ static void Task_DrawFieldMessage(u8 taskId)
|
||||
LoadMessageBoxAndBorderGfx();
|
||||
task->tState++;
|
||||
break;
|
||||
task->tState++;
|
||||
break;
|
||||
case 1:
|
||||
DrawDialogueFrame(0, TRUE);
|
||||
task->tState++;
|
||||
|
||||
@ -1186,6 +1186,15 @@ void ItemUseInBattle_PartyMenuChooseMove(u8 taskId)
|
||||
ItemUseInBattle_ShowPartyMenu(taskId);
|
||||
}
|
||||
|
||||
static bool32 SelectedMonHasStatus2(u16 itemId)
|
||||
{
|
||||
if (gPartyMenu.slotId == 0)
|
||||
return gBattleMons[0].status2 & GetItemStatus2Mask(itemId);
|
||||
else if (gBattleTypeFlags & (BATTLE_TYPE_DOUBLE | BATTLE_TYPE_MULTI) && gPartyMenu.slotId == 1)
|
||||
return gBattleMons[2].status2 & GetItemStatus2Mask(itemId);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// Returns whether an item can be used in battle and sets the fail text.
|
||||
bool32 CannotUseItemsInBattle(u16 itemId, struct Pokemon *mon)
|
||||
{
|
||||
@ -1258,13 +1267,13 @@ bool32 CannotUseItemsInBattle(u16 itemId, struct Pokemon *mon)
|
||||
break;
|
||||
case EFFECT_ITEM_CURE_STATUS:
|
||||
if (!((GetMonData(mon, MON_DATA_STATUS) & GetItemStatus1Mask(itemId))
|
||||
|| (gPartyMenu.slotId == 0 && gBattleMons[gBattlerInMenuId].status2 & GetItemStatus2Mask(itemId))))
|
||||
|| SelectedMonHasStatus2(itemId)))
|
||||
cannotUse = TRUE;
|
||||
break;
|
||||
case EFFECT_ITEM_HEAL_AND_CURE_STATUS:
|
||||
if ((hp == 0 || hp == GetMonData(mon, MON_DATA_MAX_HP))
|
||||
&& !((GetMonData(mon, MON_DATA_STATUS) & GetItemStatus1Mask(itemId))
|
||||
|| (gPartyMenu.slotId == 0 && gBattleMons[gBattlerInMenuId].status2 & GetItemStatus2Mask(itemId))))
|
||||
|| SelectedMonHasStatus2(itemId)))
|
||||
cannotUse = TRUE;
|
||||
break;
|
||||
case EFFECT_ITEM_REVIVE:
|
||||
|
||||
@ -73,6 +73,8 @@
|
||||
#include "constants/trainer_hill.h"
|
||||
#include "constants/weather.h"
|
||||
|
||||
STATIC_ASSERT((B_FLAG_FOLLOWERS_DISABLED == 0 || OW_FOLLOWERS_ENABLED), FollowersFlagAssignedWithoutEnablingThem);
|
||||
|
||||
struct CableClubPlayer
|
||||
{
|
||||
u8 playerId;
|
||||
|
||||