Merge branch 'upcoming' into stairWarps
This commit is contained in:
commit
009b42394e
@ -691,6 +691,32 @@ gBattleAnimMove_LuckyChant::
|
||||
end
|
||||
|
||||
gBattleAnimMove_MeFirst::
|
||||
loadspritegfx ANIM_TAG_ORBS
|
||||
loadspritegfx ANIM_TAG_FINGER
|
||||
loadspritegfx ANIM_TAG_THOUGHT_BUBBLE
|
||||
createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ORBS, 0, 12, 12, 0x7FAF
|
||||
setalpha 11, 5
|
||||
monbg_static ANIM_DEF_PARTNER
|
||||
splitbgprio_all
|
||||
createsprite gThoughtBubbleSpriteTemplate, ANIM_ATTACKER, 11, 0, 100
|
||||
playsewithpan SE_M_METRONOME, SOUND_PAN_ATTACKER
|
||||
delay 6
|
||||
createsprite gMetronomeFingerSpriteTemplate, ANIM_ATTACKER, 12, 0
|
||||
delay 24
|
||||
loopsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER, 22, 3
|
||||
waitforvisualfinish
|
||||
panse SE_M_MINIMIZE, SOUND_PAN_TARGET, SOUND_PAN_ATTACKER, -3, 0
|
||||
createvisualtask AnimTask_ShrinkTargetCopy, 5, 128, 24
|
||||
delay 15
|
||||
createsprite gMimicOrbSpriteTemplate, ANIM_TARGET, 2, -12, 24
|
||||
delay 10
|
||||
setarg 7, 0xFFFF
|
||||
waitforvisualfinish
|
||||
playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER
|
||||
createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 0, 2, 0, 11, RGB_WHITE
|
||||
waitforvisualfinish
|
||||
clearmonbg_static ANIM_DEF_PARTNER
|
||||
blendoff
|
||||
end
|
||||
|
||||
gBattleAnimMove_Copycat::
|
||||
@ -1092,8 +1118,8 @@ gBattleAnimMove_ForcePalm::
|
||||
end
|
||||
|
||||
gBattleAnimMove_AuraSphere::
|
||||
loadspritegfx ANIM_TAG_METEOR
|
||||
loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT
|
||||
loadspritegfx ANIM_TAG_IMPACT_2
|
||||
loadspritegfx ANIM_TAG_LEER
|
||||
monbg ANIM_ATK_PARTNER
|
||||
splitbgprio ANIM_ATTACKER
|
||||
setalpha 12, 8
|
||||
@ -3600,17 +3626,18 @@ gBattleAnimMove_DarkVoid::
|
||||
waitbgfadein
|
||||
createvisualtask AnimTask_DestinyBondWhiteShadow, 5, 0, 0x30
|
||||
loopsewithpan SE_M_CONFUSE_RAY, SOUND_PAN_ATTACKER, 5, 2
|
||||
delay 0x30
|
||||
createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0xfd00, 0x15, 0, 0x70 @Last is speed
|
||||
createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_DEF_PARTNER, 0xfd00, 0x15, 0, 0x70 @Last is speed
|
||||
delay 0x40
|
||||
delay 48
|
||||
createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, -768, 21, 0, 112 @Last is duration
|
||||
createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_DEF_PARTNER, -768, 21, 0, 112 @Last is duration
|
||||
delay 64
|
||||
invisible ANIM_TARGET
|
||||
invisible ANIM_DEF_PARTNER
|
||||
createsprite gDarkVoidPurpleStarsTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 0, 0x20, 0x3c
|
||||
createsprite gDarkVoidPurpleStarsTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 0, 32, 60
|
||||
createsprite gDarkVoidPurpleStarsTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_DEF_PARTNER, 0, 32, 60
|
||||
waitforvisualfinish
|
||||
createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0, 16
|
||||
createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_DEF_PARTNER, 0, 16
|
||||
delay 0x20
|
||||
delay 32
|
||||
call UnsetPsychicBg
|
||||
visible ANIM_TARGET
|
||||
visible ANIM_DEF_PARTNER
|
||||
@ -9827,27 +9854,25 @@ gBattleAnimMove_BanefulBunker::
|
||||
|
||||
gBattleAnimMove_SpiritShackle::
|
||||
loadspritegfx ANIM_TAG_SPIRIT_ARROW @Arrow
|
||||
loadspritegfx ANIM_TAG_CHAIN_LINK @Chain
|
||||
monbg ANIM_DEF_PARTNER
|
||||
splitbgprio ANIM_TARGET
|
||||
setalpha 12, 8
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x10, 0x0
|
||||
waitforvisualfinish
|
||||
loadspritegfx ANIM_TAG_PURPLE_CHAIN
|
||||
createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_PURPLE_CHAIN, 0, 9, 9, RGB_BLACK
|
||||
monbg ANIM_TARGET
|
||||
playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER
|
||||
createsprite gSpiritShackleArrowTemplate, ANIM_TARGET, 2, 0x10, 0x0, 0x0, 0x0, 0xf
|
||||
delay 0x8
|
||||
createsprite gSpiritShackleArrowTemplate, ANIM_TARGET, 2, 16, 0, 0, 0, 15
|
||||
delay 8
|
||||
createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 10, 1
|
||||
waitforvisualfinish
|
||||
loopsewithpan SE_SHINY, SOUND_PAN_ATTACKER, 0x1c, 0x2
|
||||
createsprite gSpiritShackleChainTemplate, ANIM_TARGET, 2, 0xfff0, 0xfff0
|
||||
delay 0x4
|
||||
createsprite gSpiritShackleChainTemplate, ANIM_TARGET, 2, 0xfff0, 0x0
|
||||
delay 0x4
|
||||
createsprite gSpiritShackleChainTemplate, ANIM_TARGET, 2, 0xfff0, 0x10
|
||||
loopsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET, 6, 2
|
||||
createsprite gChainBindingSpriteTemplate, ANIM_TARGET, 4, 0, 16, 0, 1
|
||||
delay 7
|
||||
createsprite gChainBindingSpriteTemplate, ANIM_TARGET, 2, 0, 8, 1, 1
|
||||
delay 3
|
||||
createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 8, 1
|
||||
delay 20
|
||||
setarg 7, 0xFFFF
|
||||
playsewithpan SE_M_BIND, SOUND_PAN_TARGET
|
||||
waitforvisualfinish
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x10, 0x0, 0x0
|
||||
waitforvisualfinish
|
||||
clearmonbg ANIM_DEF_PARTNER
|
||||
clearmonbg ANIM_TARGET
|
||||
blendoff
|
||||
end
|
||||
|
||||
@ -12621,43 +12646,385 @@ PhotonGeyserBeam:
|
||||
return
|
||||
|
||||
gBattleAnimMove_ZippyZap::
|
||||
end @to do:
|
||||
loadspritegfx ANIM_TAG_IMPACT
|
||||
loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT
|
||||
loadspritegfx ANIM_TAG_SPARK_2
|
||||
monbg ANIM_ATK_PARTNER
|
||||
setalpha 12, 8
|
||||
playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER
|
||||
createsprite gGrowingShockWaveOrbSpriteTemplate, ANIM_ATTACKER, 2 @electric circle
|
||||
waitforvisualfinish
|
||||
createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 24, 6, 1, 5
|
||||
createvisualtask AnimTask_TraceMonBlended, 2, 0, 4, 7, 3
|
||||
playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER
|
||||
delay 4
|
||||
createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 0, 6, 1
|
||||
createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 4, 0, 0, ANIM_TARGET, 1
|
||||
call ElectricityEffect
|
||||
playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET
|
||||
waitforvisualfinish
|
||||
clearmonbg ANIM_ATK_PARTNER
|
||||
blendoff
|
||||
waitforvisualfinish
|
||||
end
|
||||
|
||||
gBattleAnimMove_SplishySplash::
|
||||
end @to do:
|
||||
loadspritegfx ANIM_TAG_SPARK_2
|
||||
createvisualtask AnimTask_CreateSurfWave, 2, ANIM_SURF_PAL_SURF
|
||||
delay 24
|
||||
panse SE_M_SURF, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0
|
||||
waitforvisualfinish
|
||||
createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 10, 1
|
||||
call ElectricityEffect
|
||||
end
|
||||
|
||||
gBattleAnimMove_FloatyFall::
|
||||
end @to do:
|
||||
loadspritegfx ANIM_TAG_ROUND_SHADOW
|
||||
loadspritegfx ANIM_TAG_IMPACT
|
||||
createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ROUND_SHADOW, 0, 12, 12, RGB_YELLOW
|
||||
monbg ANIM_DEF_PARTNER
|
||||
setalpha 12, 8
|
||||
playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER
|
||||
createsprite gFlyBallUpSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 13, 336
|
||||
waitforvisualfinish
|
||||
playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER
|
||||
createsprite gFlyBallAttackSpriteTemplate, ANIM_ATTACKER, 2, 20, FALSE
|
||||
delay 20
|
||||
createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 0
|
||||
createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 6, 0, 8, 1
|
||||
playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET
|
||||
waitforvisualfinish
|
||||
clearmonbg ANIM_DEF_PARTNER
|
||||
blendoff
|
||||
waitforvisualfinish
|
||||
end
|
||||
|
||||
gBattleAnimMove_PikaPapow::
|
||||
end @to do:
|
||||
createvisualtask AnimTask_GetReturnPowerLevel, 2
|
||||
delay 2
|
||||
jumpreteq 0, gBattleAnimMove_ThunderShock
|
||||
jumpreteq 1, gBattleAnimMove_ShockWave
|
||||
jumpreteq 2, gBattleAnimMove_Thunderbolt
|
||||
jumpreteq 3, gBattleAnimMove_Thunder
|
||||
|
||||
gBattleAnimMove_BouncyBubble::
|
||||
end @to do:
|
||||
loadspritegfx ANIM_TAG_BUBBLE
|
||||
loadspritegfx ANIM_TAG_SMALL_BUBBLES
|
||||
loadspritegfx ANIM_TAG_ORBS
|
||||
loadspritegfx ANIM_TAG_BLUE_STAR
|
||||
loadspritegfx ANIM_TAG_IMPACT
|
||||
monbg ANIM_TARGET
|
||||
splitbgprio ANIM_TARGET
|
||||
setalpha 12, 8
|
||||
delay 1
|
||||
createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 0, 12, RGB(13, 12, 31)
|
||||
waitforvisualfinish
|
||||
playsewithpan SE_M_ABSORB, SOUND_PAN_TARGET
|
||||
createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 0
|
||||
delay 2
|
||||
createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 5, 5, 1
|
||||
waitforvisualfinish
|
||||
call WaterBubblesEffectLong
|
||||
call GigaDrainAbsorbEffect
|
||||
waitforvisualfinish
|
||||
delay 15
|
||||
call HealingEffect
|
||||
waitforvisualfinish
|
||||
createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 12, 0, RGB(13, 12, 31)
|
||||
waitforvisualfinish
|
||||
clearmonbg ANIM_TARGET
|
||||
blendoff
|
||||
end
|
||||
|
||||
gBattleAnimMove_BuzzyBuzz::
|
||||
end @to do:
|
||||
loadspritegfx ANIM_TAG_ELECTRIC_ORBS
|
||||
loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT
|
||||
loadspritegfx ANIM_TAG_SPARK
|
||||
loadspritegfx ANIM_TAG_LIGHTNING
|
||||
loadspritegfx ANIM_TAG_SHOCK_3
|
||||
loadspritegfx ANIM_TAG_SPARK_2
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 0, 6, RGB_BLACK
|
||||
waitforvisualfinish
|
||||
createsprite gSpriteTemplate_SpiritBreakChargeBall, ANIM_TARGET, 1, ANIM_TARGET
|
||||
delay 10
|
||||
createvisualtask AnimTask_ElectricBolt, 5, 24, -52, 0
|
||||
playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_TARGET
|
||||
delay 7
|
||||
createvisualtask AnimTask_ElectricBolt, 5, -24, -52, 0
|
||||
playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_TARGET
|
||||
delay 7
|
||||
createvisualtask AnimTask_ElectricBolt, 5, 0, -60, 1
|
||||
playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_TARGET
|
||||
delay 9
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 0, 0, 13, RGB_BLACK
|
||||
waitforvisualfinish
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 0, 13, 0, RGB_BLACK
|
||||
waitforvisualfinish
|
||||
delay 20
|
||||
waitplaysewithpan SE_M_THUNDERBOLT2, SOUND_PAN_TARGET, 19
|
||||
call ElectricityEffect
|
||||
waitforvisualfinish
|
||||
delay 20
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 6, 0, RGB_BLACK
|
||||
waitforvisualfinish
|
||||
end
|
||||
|
||||
gBattleAnimMove_SizzlySlide::
|
||||
end @to do:
|
||||
loadspritegfx ANIM_TAG_SMALL_EMBER
|
||||
loadspritegfx ANIM_TAG_IMPACT
|
||||
monbg ANIM_ATK_PARTNER
|
||||
setalpha 12, 8
|
||||
createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 0
|
||||
playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER
|
||||
delay 2
|
||||
createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 4
|
||||
playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER
|
||||
delay 2
|
||||
createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 8
|
||||
playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER
|
||||
delay 2
|
||||
createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 12
|
||||
playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER
|
||||
delay 2
|
||||
createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 16
|
||||
playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER
|
||||
delay 2
|
||||
createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 20
|
||||
playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER
|
||||
delay 2
|
||||
createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 24
|
||||
playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER
|
||||
waitforvisualfinish
|
||||
createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 24, 6, 1, 5
|
||||
createvisualtask AnimTask_TraceMonBlended, 2, 0, 4, 7, 3
|
||||
playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER
|
||||
delay 4
|
||||
createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 0, 6, 1
|
||||
createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 4, 0, 0, ANIM_TARGET, 1
|
||||
createvisualtask AnimTask_BlendMonInAndOut, 3, ANIM_TARGET, RGB_RED, 12, 1, 1
|
||||
playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_TARGET
|
||||
call FireSpreadEffect
|
||||
delay 7
|
||||
createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 9
|
||||
waitforvisualfinish
|
||||
clearmonbg ANIM_ATK_PARTNER
|
||||
end
|
||||
|
||||
gBattleAnimMove_GlitzyGlow::
|
||||
end @to do:
|
||||
loadspritegfx ANIM_TAG_THIN_RING @hypervoice ring
|
||||
loadspritegfx ANIM_TAG_SPARK_2 @yellow color
|
||||
loadspritegfx ANIM_TAG_WATER_ORB @blue color
|
||||
loadspritegfx ANIM_TAG_POISON_BUBBLE @violet color
|
||||
loadspritegfx ANIM_TAG_SMALL_EMBER @flame wheel particle
|
||||
loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT
|
||||
createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_CIRCLE_OF_LIGHT, 0, 12, 12, 0x289F
|
||||
monbg ANIM_DEF_PARTNER
|
||||
splitbgprio_foes ANIM_TARGET
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 12, 0 @Darken
|
||||
playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER
|
||||
createsprite gGrowingShockWaveOrbSpriteTemplate, ANIM_ATTACKER, 0, 0
|
||||
delay 18
|
||||
panse SE_M_SCREECH, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 2, 0
|
||||
createsprite gSynchronoiseVioletRingTemplate, ANIM_ATTACKER, 0, 25, 0, 0, 0, 0, 0, 1
|
||||
delay 1
|
||||
createsprite gSynchronoiseBlueRingTemplate, ANIM_ATTACKER, 0, 25, 0, 0, 0, 0, 0, 1
|
||||
delay 1
|
||||
createsprite gSynchronoiseYellowRingTemplate, ANIM_ATTACKER, 0, 25, 0, 0, 0, 0, 0, 1
|
||||
delay 36
|
||||
createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 6, 1
|
||||
createvisualtask AnimTask_ShakeBattleTerrain, 2, 1, 0, 6, 1
|
||||
waitforvisualfinish
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 12, 0, 0 @Darken
|
||||
waitforvisualfinish
|
||||
clearmonbg ANIM_DEF_PARTNER
|
||||
blendoff
|
||||
delay 1
|
||||
unloadspritegfx ANIM_TAG_THIN_RING @hypervoice ring
|
||||
unloadspritegfx ANIM_TAG_SPARK_2 @yellow color
|
||||
unloadspritegfx ANIM_TAG_WATER_ORB @blue color
|
||||
unloadspritegfx ANIM_TAG_POISON_BUBBLE @violet color
|
||||
unloadspritegfx ANIM_TAG_SMALL_EMBER @flame wheel particle
|
||||
unloadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT
|
||||
waitforvisualfinish
|
||||
goto gBattleAnimMove_LightScreen
|
||||
|
||||
gBattleAnimMove_BaddyBad::
|
||||
end @to do:
|
||||
loadspritegfx ANIM_TAG_STRAIGHT_BEAM
|
||||
createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_STRAIGHT_BEAM, 0, 14, 14, RGB_BLACK
|
||||
monbg ANIM_ATTACKER
|
||||
splitbgprio ANIM_ATTACKER
|
||||
playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER
|
||||
fadetobg BG_DARK
|
||||
waitbgfadein
|
||||
delay 10
|
||||
playsewithpan SE_M_LEER, SOUND_PAN_ATTACKER
|
||||
createvisualtask AnimTask_NightShadeClone, 5, 133
|
||||
delay 10
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 6, 0, 16, RGB_BLACK
|
||||
createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 4, 0, 96, 1
|
||||
panse SE_M_SOLAR_BEAM, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 2, 0
|
||||
call PhotonGeyserBeam
|
||||
waitforvisualfinish
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 1, 16, 0, RGB_BLACK
|
||||
waitforvisualfinish
|
||||
delay 1
|
||||
restorebg
|
||||
waitbgfadein
|
||||
waitforvisualfinish
|
||||
clearmonbg ANIM_ATTACKER
|
||||
unloadspritegfx ANIM_TAG_STRAIGHT_BEAM
|
||||
waitforvisualfinish
|
||||
goto gBattleAnimMove_Reflect
|
||||
|
||||
gBattleAnimMove_SappySeed::
|
||||
end @to do:
|
||||
loadspritegfx ANIM_TAG_SPROUT
|
||||
loadspritegfx ANIM_TAG_SEED
|
||||
playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_TARGET
|
||||
createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 4, 0, 40, 1
|
||||
createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, 20, ANIM_TARGET, 1
|
||||
delay 2
|
||||
createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, 20, ANIM_TARGET, 1
|
||||
createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, 10, ANIM_TARGET, 1
|
||||
delay 2
|
||||
createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, 20, ANIM_TARGET, 1
|
||||
createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, 10, ANIM_TARGET, 1
|
||||
createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, ANIM_TARGET, 1
|
||||
delay 2
|
||||
createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, 20, ANIM_TARGET, 1
|
||||
createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, 10, ANIM_TARGET, 1
|
||||
createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, ANIM_TARGET, 1
|
||||
createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, -10, ANIM_TARGET, 1
|
||||
delay 2
|
||||
createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, 20, ANIM_TARGET, 1
|
||||
createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, 10, ANIM_TARGET, 1
|
||||
createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, ANIM_TARGET, 1
|
||||
createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, -10, ANIM_TARGET, 1
|
||||
createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, -20, ANIM_TARGET, 1
|
||||
delay 2
|
||||
createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, 20, ANIM_TARGET, 1
|
||||
createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, 10, ANIM_TARGET, 1
|
||||
createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, ANIM_TARGET, 1
|
||||
createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, -10, ANIM_TARGET, 1
|
||||
createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, -20, ANIM_TARGET, 1
|
||||
createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, -30, ANIM_TARGET, 1
|
||||
delay 2
|
||||
call FullBeanstalk
|
||||
call FallingSeeds
|
||||
call FullBeanstalk
|
||||
call FullBeanstalk
|
||||
call FullBeanstalk
|
||||
call FullBeanstalk
|
||||
call FullBeanstalk
|
||||
call FullBeanstalk
|
||||
call FullBeanstalk
|
||||
call FullBeanstalk
|
||||
call FullBeanstalk
|
||||
call FullBeanstalk
|
||||
call FullBeanstalk
|
||||
call FullBeanstalk
|
||||
call FullBeanstalk
|
||||
call FullBeanstalk
|
||||
waitforvisualfinish
|
||||
end
|
||||
FullBeanstalk:
|
||||
createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, 20, ANIM_TARGET, 1
|
||||
createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, 10, ANIM_TARGET, 1
|
||||
createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, ANIM_TARGET, 1
|
||||
createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, -10, ANIM_TARGET, 1
|
||||
createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, -20, ANIM_TARGET, 1
|
||||
createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, -30, ANIM_TARGET, 1
|
||||
createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, -40, ANIM_TARGET, 1
|
||||
delay 2
|
||||
return
|
||||
FallingSeeds:
|
||||
createsprite gFallingSeedSpriteTemplate, ANIM_TARGET, 2, -20, 0, -10, 0
|
||||
playsewithpan SE_M_POISON_POWDER, SOUND_PAN_TARGET
|
||||
createsprite gFallingSeedSpriteTemplate, ANIM_TARGET, 2, 28, 0, 10, 0
|
||||
playsewithpan SE_M_POISON_POWDER, SOUND_PAN_TARGET
|
||||
createsprite gFallingSeedSpriteTemplate, ANIM_TARGET, 2, -10, 0, -5, 0
|
||||
playsewithpan SE_M_POISON_POWDER, SOUND_PAN_TARGET
|
||||
createsprite gFallingSeedSpriteTemplate, ANIM_TARGET, 2, 10, 0, 6, 0
|
||||
playsewithpan SE_M_POISON_POWDER, SOUND_PAN_TARGET
|
||||
createsprite gFallingSeedSpriteTemplate, ANIM_TARGET, 2, 24, 0, 10, 0
|
||||
playsewithpan SE_M_POISON_POWDER, SOUND_PAN_TARGET
|
||||
createsprite gFallingSeedSpriteTemplate, ANIM_TARGET, 2, -32, 0, -10, 0
|
||||
playsewithpan SE_M_POISON_POWDER, SOUND_PAN_TARGET
|
||||
createsprite gFallingSeedSpriteTemplate, ANIM_TARGET, 2, -20, 0, -10, 0
|
||||
playsewithpan SE_M_POISON_POWDER, SOUND_PAN_TARGET
|
||||
createsprite gFallingSeedSpriteTemplate, ANIM_TARGET, 2, 30, 0, 10, 0
|
||||
playsewithpan SE_M_POISON_POWDER, SOUND_PAN_TARGET
|
||||
return
|
||||
|
||||
gBattleAnimMove_FreezyFrost::
|
||||
end @to do:
|
||||
loadspritegfx ANIM_TAG_ICICLE_SPEAR
|
||||
loadspritegfx ANIM_TAG_ICE_SPIKES
|
||||
loadspritegfx ANIM_TAG_IMPACT
|
||||
createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_ICICLE_SPEAR, 0, 0, 12, RGB_BLACK
|
||||
createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_ICE_SPIKES, 0, 0, 12, RGB_BLACK
|
||||
waitforvisualfinish
|
||||
call FreezyFrostHitEffect
|
||||
call FreezyFrostHitEffect
|
||||
call FreezyFrostHitEffect
|
||||
call FreezyFrostHitEffect
|
||||
waitforvisualfinish
|
||||
call IceSpikesEffectLong
|
||||
waitforvisualfinish
|
||||
end
|
||||
FreezyFrostHitEffect:
|
||||
createsprite gFreezyFrostRisingSpearSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, -4, 16
|
||||
playsewithpan SE_M_ROCK_THROW SOUND_PAN_TARGET
|
||||
delay 1
|
||||
createsprite gFreezyFrostRisingSpearSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 4109, 16
|
||||
playsewithpan SE_M_ROCK_THROW SOUND_PAN_TARGET
|
||||
delay 1
|
||||
createsprite gFreezyFrostRisingSpearSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 4, 16
|
||||
playsewithpan SE_M_ROCK_THROW SOUND_PAN_TARGET
|
||||
delay 1
|
||||
createsprite gFreezyFrostRisingSpearSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, -16, 16
|
||||
playsewithpan SE_M_ROCK_THROW SOUND_PAN_TARGET
|
||||
delay 1
|
||||
return
|
||||
|
||||
gBattleAnimMove_SparklySwirl::
|
||||
end @to do:
|
||||
loadspritegfx ANIM_TAG_GUST
|
||||
loadspritegfx ANIM_TAG_PINK_PETAL
|
||||
createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_GUST, 0, 15, 15, RGB(31, 21, 21)
|
||||
monbg ANIM_DEF_PARTNER
|
||||
splitbgprio ANIM_TARGET
|
||||
playsewithpan SE_M_GUST, SOUND_PAN_TARGET
|
||||
createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 2, 47, 1
|
||||
call HurricaneGust
|
||||
call PinkPetalVortex
|
||||
call HurricaneGust
|
||||
call PinkPetalVortex
|
||||
call HurricaneGust
|
||||
call PinkPetalVortex
|
||||
waitforvisualfinish
|
||||
stopsound
|
||||
clearmonbg ANIM_TARGET
|
||||
end
|
||||
PinkPetalVortex:
|
||||
createsprite gPinkPetalVortexTemplate, ANIM_TARGET, 2, 0, 28, 528, 30, 13, 50, 1
|
||||
delay 2
|
||||
createsprite gPinkPetalVortexTemplate, ANIM_TARGET, 2, 0, 32, 480, 20, 16, -46, 1
|
||||
delay 2
|
||||
createsprite gPinkPetalVortexTemplate, ANIM_TARGET, 2, 0, 33, 576, 20, 8, 42, 1
|
||||
delay 2
|
||||
createsprite gPinkPetalVortexTemplate, ANIM_TARGET, 2, 0, 31, 400, 25, 11, -42, 1
|
||||
delay 2
|
||||
createsprite gPinkPetalVortexTemplate, ANIM_TARGET, 2, 0, 28, 512, 25, 16, 46, 1
|
||||
delay 2
|
||||
createsprite gPinkPetalVortexTemplate, ANIM_TARGET, 2, 0, 33, 464, 30, 15, -50, 1
|
||||
delay 2
|
||||
return
|
||||
|
||||
gBattleAnimMove_VeeveeVolley::
|
||||
end @to do:
|
||||
createvisualtask AnimTask_GetReturnPowerLevel, 2
|
||||
delay 2
|
||||
jumpreteq 0, gBattleAnimMove_Tackle
|
||||
jumpreteq 1, gBattleAnimMove_Headbutt
|
||||
jumpreteq 2, gBattleAnimMove_TakeDown
|
||||
jumpreteq 3, gBattleAnimMove_DoubleEdge
|
||||
|
||||
gBattleAnimMove_DoubleIronBash::
|
||||
loadspritegfx ANIM_TAG_GUST
|
||||
@ -13004,6 +13371,9 @@ gBattleAnimMove_ClangorousSoul::
|
||||
createsprite gClangorousSoulRedFistTemplate, ANIM_ATTACKER, 2, 0x10, 0, 0, 0, 10, ANIM_ATTACKER, ANIM_LEFT_FIST, 1
|
||||
playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET
|
||||
waitforvisualfinish
|
||||
unloadspritegfx ANIM_TAG_HORSESHOE_SIDE_FIST
|
||||
unloadspritegfx ANIM_TAG_SPARKLE_2 @stars
|
||||
waitforvisualfinish
|
||||
loadspritegfx ANIM_TAG_THIN_RING @ring
|
||||
playsewithpan SE_SHINY, SOUND_PAN_ATTACKER
|
||||
createsprite gClangorousSoulRedRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0
|
||||
@ -13104,8 +13474,31 @@ gBattleAnimMove_DrumBeating::
|
||||
blendoff
|
||||
end
|
||||
|
||||
gBattleAnimMove_SnapTrap:: @ placeholder
|
||||
goto gBattleAnimMove_Bite
|
||||
gBattleAnimMove_SnapTrap::
|
||||
loadspritegfx ANIM_TAG_LEAF @leaves
|
||||
loadspritegfx ANIM_TAG_FLOWER @flowers
|
||||
loadspritegfx ANIM_TAG_SHARP_TEETH
|
||||
loadspritegfx ANIM_TAG_IMPACT
|
||||
createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SHARP_TEETH, 0, 10, 10, 0x0688
|
||||
monbg ANIM_TARGET
|
||||
setalpha 12, 8
|
||||
playsewithpan SE_M_BITE, SOUND_PAN_TARGET
|
||||
createsprite gSharpTeethSpriteTemplate, ANIM_ATTACKER, 2, 0, -32, 0, 0, 819, 10
|
||||
createsprite gSharpTeethSpriteTemplate, ANIM_ATTACKER, 2, 0, 32, 4, 0, -819, 10
|
||||
createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 4, 0, 6, 1
|
||||
playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET
|
||||
delay 10
|
||||
playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER
|
||||
createsprite gTropKickLeavesTemplate, ANIM_TARGET, 1, 0, 10, 192, 176, 40
|
||||
createsprite gTropKickLeavesTemplate, ANIM_TARGET, 1, 0, 10, -192, 240, 40
|
||||
createsprite gTropKickLeavesTemplate, ANIM_TARGET, 1, 0, 10, 192, -160, 40
|
||||
createsprite gTropKickLeavesTemplate, ANIM_TARGET, 1, 0, 10, -192, -112, 40
|
||||
createsprite gTropKickLeavesTemplate, ANIM_TARGET, 1, 0, 10, 160, 48, 40
|
||||
createsprite gTropKickLeavesTemplate, ANIM_TARGET, 1, 0, 10, -224, -32, 40
|
||||
createsprite gTropKickLeavesTemplate, ANIM_TARGET, 1, 0, 10, 112, -128, 40
|
||||
waitforvisualfinish
|
||||
clearmonbg ANIM_DEF_PARTNER
|
||||
end
|
||||
|
||||
gBattleAnimMove_PyroBall::
|
||||
loadspritegfx ANIM_TAG_FLAT_ROCK
|
||||
@ -14848,7 +15241,44 @@ gBattleAnimMove_GlacialLance::
|
||||
|
||||
|
||||
gBattleAnimMove_AstralBarrage::
|
||||
goto gBattleAnimMove_ShadowBall
|
||||
loadspritegfx ANIM_TAG_FLAT_ROCK
|
||||
loadspritegfx ANIM_TAG_ICE_CRYSTALS
|
||||
loadspritegfx ANIM_TAG_GHOSTLY_SPIRIT
|
||||
createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_FLAT_ROCK, 0x0, 0xA, 0xA, RGB(2, 1, 4)
|
||||
createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_ICE_CRYSTALS, 0x0, 0xA, 0xA, RGB(2, 1, 4)
|
||||
monbg ANIM_ATK_PARTNER
|
||||
splitbgprio ANIM_ATTACKER
|
||||
setalpha 12, 8
|
||||
fadetobg BG_GHOST
|
||||
waitbgfadein
|
||||
createsprite gShakeMonOrTerrainSpriteTemplate, ANIM_ATTACKER, 2, 4, 1, 180, 1
|
||||
createsoundtask SoundTask_LoopSEAdjustPanning, SE_M_FAINT_ATTACK, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 5, 20, 0, 5
|
||||
createsprite gSuperpowerRockSpriteTemplate, ANIM_ATTACKER, 41, 200, 96, 1, 120
|
||||
delay 8
|
||||
createsprite gSuperpowerRockSpriteTemplate, ANIM_ATTACKER, 41, 20, 248, 4, 112
|
||||
delay 8
|
||||
createsprite gSuperpowerRockSpriteTemplate, ANIM_ATTACKER, 41, 130, 160, 2, 104
|
||||
delay 8
|
||||
createsprite gSuperpowerRockSpriteTemplate, ANIM_ATTACKER, 41, 160, 192, 0, 96
|
||||
delay 8
|
||||
createsprite gSuperpowerRockSpriteTemplate, ANIM_ATTACKER, 41, 60, 288, 3, 88
|
||||
delay 74
|
||||
panse SE_M_BLIZZARD, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0
|
||||
call BlizzardIceCrystals
|
||||
call BlizzardIceCrystals
|
||||
playsewithpan SE_M_BLIZZARD2, SOUND_PAN_TARGET
|
||||
waitforvisualfinish
|
||||
playsewithpan SE_M_NIGHTMARE, SOUND_PAN_TARGET
|
||||
createspriteontargets gCurseGhostSpriteTemplate, ANIM_TARGET, 3, 2, 8, -5, ANIM_TARGET, 0
|
||||
createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 8, 0, 16, 1
|
||||
createvisualtask AnimTask_ShakeMon2, 2, ANIM_DEF_PARTNER, 8, 0, 16, 1
|
||||
waitforvisualfinish
|
||||
clearmonbg ANIM_ATK_PARTNER
|
||||
restorebg
|
||||
waitbgfadein
|
||||
blendoff
|
||||
delay 1
|
||||
end
|
||||
|
||||
|
||||
@Credits to Skeli
|
||||
@ -14995,8 +15425,9 @@ gBattleAnimMove_SpringtideStorm::
|
||||
loadspritegfx ANIM_TAG_GUST
|
||||
loadspritegfx ANIM_TAG_RED_HEART
|
||||
playsewithpan SE_M_GUST, SOUND_PAN_TARGET
|
||||
createvisualtaskontargets AnimTask_ShakeMon2, 2, 0, ANIM_TARGET, 0, 4, 0x58, 1
|
||||
createvisualtask AnimTask_BlendColorCycle, 0x2, F_PAL_TARGET, 0x2, 0x6, 0x0, 0xB, 0x7ADF
|
||||
createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 88, 1
|
||||
createvisualtask AnimTask_ShakeMon2, 2, ANIM_DEF_PARTNER, 1, 0, 88, 1
|
||||
createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_TARGET | F_PAL_DEF_PARTNER), 2, 6, 0, 11, 0x7ADF
|
||||
call HurricaneGustCentered
|
||||
call SpringtideStormHeartSwirl
|
||||
call HurricaneGustCentered
|
||||
@ -15565,8 +15996,9 @@ gBattleAnimMove_BleakwindStorm::
|
||||
loadspritegfx ANIM_TAG_GUST
|
||||
loadspritegfx ANIM_TAG_ICE_CRYSTALS
|
||||
playsewithpan SE_M_GUST, SOUND_PAN_TARGET
|
||||
createvisualtaskontargets AnimTask_ShakeMon2, 2, 0, ANIM_TARGET, 0, 4, 0x58, 1
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x4, 0x0, 0xB, 0x7FFF
|
||||
createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 88, 1
|
||||
createvisualtask AnimTask_ShakeMon2, 2, ANIM_DEF_PARTNER, 1, 0, 88, 1
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_TARGET | F_PAL_DEF_PARTNER), 4, 0, 11, 0x7FFF
|
||||
call HurricaneGustCentered
|
||||
call BleakwindStormIceSwirl
|
||||
call HurricaneGustCentered
|
||||
@ -15581,7 +16013,7 @@ gBattleAnimMove_BleakwindStorm::
|
||||
call BleakwindStormIceSwirl
|
||||
waitforvisualfinish
|
||||
stopsound
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x1, 0xB, 0x0, 0x7FFF
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_TARGET | F_PAL_DEF_PARTNER), 1, 11, 0, 0x7FFF
|
||||
waitforvisualfinish
|
||||
end
|
||||
BleakwindStormIceSwirl:
|
||||
@ -15605,11 +16037,12 @@ gBattleAnimMove_WildboltStorm::
|
||||
loadspritegfx ANIM_TAG_SPARK_2
|
||||
fadetobg BG_MAX_LIGHTNING
|
||||
waitbgfadeout
|
||||
createvisualtask AnimTask_StartSlidingBg, 0x5, 0xff00, 0x0, 0x1, 0xffff
|
||||
createvisualtask AnimTask_StartSlidingBg, 5, -256, 0, 1, 0xffff
|
||||
waitbgfadein
|
||||
playsewithpan SE_M_GUST, SOUND_PAN_TARGET
|
||||
createvisualtaskontargets AnimTask_ShakeMon2, 2, 0, ANIM_TARGET, 0, 4, 0x58, 1
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 0x4, 0x0, 0xB, 0x07FE
|
||||
createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 88, 1
|
||||
createvisualtask AnimTask_ShakeMon2, 2, ANIM_DEF_PARTNER, 1, 0, 88, 1
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_TARGET | F_PAL_DEF_PARTNER), 4, 0, 11, 0x07FE
|
||||
call HurricaneGustCentered
|
||||
call WildboltStormSparkSwirl
|
||||
call HurricaneGustCentered
|
||||
@ -15624,7 +16057,7 @@ gBattleAnimMove_WildboltStorm::
|
||||
call WildboltStormSparkSwirl
|
||||
waitforvisualfinish
|
||||
stopsound
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x1, 0xB, 0x0, 0x07FE
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_TARGET | F_PAL_DEF_PARTNER), 1, 11, 0, 0x07FE
|
||||
call UnsetPsychicBg
|
||||
waitforvisualfinish
|
||||
end
|
||||
@ -15650,8 +16083,9 @@ gBattleAnimMove_SandsearStorm::
|
||||
loadspritegfx ANIM_TAG_SMALL_EMBER
|
||||
createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_GUST, 0x0, 0xA, 0xA, 0x190B
|
||||
playsewithpan SE_M_GUST, SOUND_PAN_TARGET
|
||||
createvisualtaskontargets AnimTask_ShakeMon2, 2, 0, ANIM_TARGET, 0, 4, 0x58, 1
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x4, 0x0, 0xB, 0x1F
|
||||
createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 88, 1
|
||||
createvisualtask AnimTask_ShakeMon2, 2, ANIM_DEF_PARTNER, 1, 0, 88, 1
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_TARGET | F_PAL_DEF_PARTNER), 4, 0, 11, 0x1F
|
||||
call HurricaneGustCentered
|
||||
call SandsearStormFireSpin
|
||||
call HurricaneGustCentered
|
||||
@ -15666,7 +16100,7 @@ gBattleAnimMove_SandsearStorm::
|
||||
call SandsearStormFireSpin
|
||||
waitforvisualfinish
|
||||
stopsound
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x1, 0xB, 0x0, 0x1F
|
||||
createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_TARGET | F_PAL_DEF_PARTNER), 1, 11, 0, 0x1F
|
||||
waitforvisualfinish
|
||||
end
|
||||
|
||||
@ -15997,7 +16431,30 @@ ChillyReceptionSnowballs:
|
||||
return
|
||||
|
||||
gBattleAnimMove_BurningBulwark::
|
||||
goto gBattleAnimMove_Protect
|
||||
loadspritegfx ANIM_TAG_PROTECT @protect
|
||||
loadspritegfx ANIM_TAG_SMALL_EMBER @fire
|
||||
monbg ANIM_ATK_PARTNER
|
||||
splitbgprio ANIM_ATTACKER
|
||||
waitplaysewithpan SE_M_REFLECT, SOUND_PAN_ATTACKER 16
|
||||
createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_PROTECT, 0, 13, 13, 0x015B
|
||||
createsprite gProtectSpriteTemplate, ANIM_ATTACKER, 2, 24, 0, 90
|
||||
createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 0
|
||||
delay 2
|
||||
createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 4
|
||||
delay 2
|
||||
createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 8
|
||||
delay 2
|
||||
createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 12
|
||||
delay 2
|
||||
createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 16
|
||||
delay 2
|
||||
createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 20
|
||||
delay 2
|
||||
createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 24
|
||||
createvisualtask AnimTask_BlendMonInAndOut, 3, ANIM_ATTACKER, RGB_RED, 10, 0, 2
|
||||
waitforvisualfinish
|
||||
clearmonbg ANIM_ATK_PARTNER
|
||||
end
|
||||
|
||||
gBattleAnimMove_AlluringVoice::
|
||||
loadspritegfx ANIM_TAG_THIN_RING
|
||||
@ -27667,8 +28124,8 @@ Status_Thunder_Cage:
|
||||
@ TODO
|
||||
goto gBattleAnimMove_ThunderCage
|
||||
|
||||
Status_Snap_Trap: @ placeholder
|
||||
goto gBattleAnimMove_Bite
|
||||
Status_Snap_Trap:
|
||||
goto gBattleAnimMove_SnapTrap
|
||||
|
||||
Status_SandTomb:
|
||||
loadspritegfx ANIM_TAG_MUD_SAND
|
||||
@ -33004,6 +33461,9 @@ gBattleAnimMove_ClangorousSoulblaze::
|
||||
createsprite gClangorousSoulRedFistTemplate, ANIM_ATTACKER, 2, 0x10, 0x0, 0x0, 0x0, 0xa, ANIM_ATTACKER, ANIM_LEFT_FIST, 0x1
|
||||
playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET
|
||||
waitforvisualfinish
|
||||
unloadspritegfx ANIM_TAG_HORSESHOE_SIDE_FIST
|
||||
unloadspritegfx ANIM_TAG_SPARKLE_2 @stars
|
||||
waitforvisualfinish
|
||||
loadspritegfx ANIM_TAG_THIN_RING @ring
|
||||
playsewithpan SE_SHINY, SOUND_PAN_ATTACKER
|
||||
createsprite gClangorousSoulRedRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0
|
||||
|
||||
@ -4724,6 +4724,9 @@ BattleScript_ButItFailed::
|
||||
resultmessage
|
||||
waitmessage B_WAIT_TIME_LONG
|
||||
goto BattleScript_MoveEnd
|
||||
BattleScript_RestoreAttackerButItFailed:
|
||||
restoreattacker
|
||||
goto BattleScript_ButItFailed
|
||||
|
||||
BattleScript_NotAffected::
|
||||
pause B_WAIT_TIME_SHORT
|
||||
@ -6460,12 +6463,14 @@ BattleScript_SeedSowerActivates::
|
||||
return
|
||||
|
||||
BattleScript_AngerShellActivates::
|
||||
saveattacker
|
||||
copybyte gBattlerAttacker, gBattlerTarget
|
||||
call BattleScript_AbilityPopUp
|
||||
jumpifstat BS_TARGET, CMP_LESS_THAN, STAT_ATK, MAX_STAT_STAGE, BattleScript_AngerShellTryDef
|
||||
jumpifstat BS_TARGET, CMP_LESS_THAN, STAT_SPATK, MAX_STAT_STAGE, BattleScript_AngerShellTryDef
|
||||
jumpifstat BS_TARGET, CMP_LESS_THAN, STAT_SPEED, MAX_STAT_STAGE, BattleScript_AngerShellTryDef
|
||||
jumpifstat BS_TARGET, CMP_GREATER_THAN, STAT_DEF, MIN_STAT_STAGE, BattleScript_AngerShellTryDef
|
||||
jumpifstat BS_TARGET, CMP_EQUAL, STAT_SPDEF, MIN_STAT_STAGE, BattleScript_ButItFailed
|
||||
jumpifstat BS_TARGET, CMP_EQUAL, STAT_SPDEF, MIN_STAT_STAGE, BattleScript_RestoreAttackerButItFailed
|
||||
BattleScript_AngerShellTryDef::
|
||||
setbyte sSTAT_ANIM_PLAYED, FALSE
|
||||
modifybattlerstatstage BS_ATTACKER, STAT_DEF, DECREASE, 1, BattleScript_AngerShellTrySpDef, ANIM_ON
|
||||
@ -6479,6 +6484,7 @@ BattleScript_AngerShellTrySpAtk:
|
||||
BattleScript_AngerShellTrySpeed:
|
||||
modifybattlerstatstage BS_ATTACKER, STAT_SPEED, INCREASE, 1, BattleScript_AngerShellRet, ANIM_ON
|
||||
BattleScript_AngerShellRet:
|
||||
restoreattacker
|
||||
return
|
||||
|
||||
BattleScript_WindPowerActivates::
|
||||
|
||||
@ -724,6 +724,11 @@ EventScript_BackupMrBrineyLocation::
|
||||
.include "data/scripts/rival_graphics.inc"
|
||||
.include "data/scripts/set_gym_trainers.inc"
|
||||
|
||||
EventScript_CancelMessageBox::
|
||||
special UseBlankMessageToCancelPokemonPic
|
||||
release
|
||||
end
|
||||
|
||||
Common_EventScript_ShowBagIsFull::
|
||||
msgbox gText_TooBadBagIsFull, MSGBOX_DEFAULT
|
||||
release
|
||||
@ -1143,6 +1148,5 @@ EventScript_VsSeekerChargingDone::
|
||||
.include "data/scripts/trainer_hill.inc"
|
||||
.include "data/scripts/test_signpost.inc"
|
||||
.include "data/scripts/follower.inc"
|
||||
.include "data/text/frontier_brain.inc"
|
||||
.include "data/text/save.inc"
|
||||
.include "data/text/birch_speech.inc"
|
||||
|
||||
@ -554,3 +554,4 @@ gSpecials::
|
||||
def_special Script_GetChosenMonDefensiveEVs
|
||||
def_special Script_GetChosenMonOffensiveIVs
|
||||
def_special Script_GetChosenMonDefensiveIVs
|
||||
def_special UseBlankMessageToCancelPokemonPic
|
||||
|
||||
@ -1,108 +0,0 @@
|
||||
@ Battle Tower
|
||||
gText_AnabelWonSilver::
|
||||
.string "It's very disappointing…$"
|
||||
|
||||
gText_AnabelDefeatSilver::
|
||||
.string "Okay, I understand…$"
|
||||
|
||||
gText_AnabelWonGold::
|
||||
.string "I'm terribly sorry…$"
|
||||
|
||||
gText_AnabelDefeatGold::
|
||||
.string "Thank you…$"
|
||||
|
||||
@ Battle Dome
|
||||
gText_TuckerWonSilver::
|
||||
.string "Ahahaha! Aren't you embarrassed?\n"
|
||||
.string "Everyone's watching!$"
|
||||
|
||||
gText_TuckerDefeatSilver::
|
||||
.string "Grr…\n"
|
||||
.string "What the…$"
|
||||
|
||||
gText_TuckerWonGold::
|
||||
.string "My DOME ACE title isn't just for show!$"
|
||||
|
||||
gText_TuckerDefeatGold::
|
||||
.string "Ahahaha!\n"
|
||||
.string "You're inspiring!$"
|
||||
|
||||
@ Battle Factory
|
||||
gText_NolandWonSilver::
|
||||
.string "Way to work!\n"
|
||||
.string "That was a good lesson, eh?$"
|
||||
|
||||
gText_NolandDefeatSilver::
|
||||
.string "Good job!\n"
|
||||
.string "You know what you're doing!$"
|
||||
|
||||
gText_NolandWonGold::
|
||||
.string "Hey, hey, hey!\n"
|
||||
.string "You're finished already?$"
|
||||
|
||||
gText_NolandDefeatGold::
|
||||
.string "What happened here?$"
|
||||
|
||||
@ Battle Pike
|
||||
gText_LucyWonSilver::
|
||||
.string "Humph…$"
|
||||
|
||||
gText_LucyDefeatSilver::
|
||||
.string "Urk…$"
|
||||
|
||||
gText_LucyWonGold::
|
||||
.string "Hah!$"
|
||||
|
||||
gText_LucyDefeatGold::
|
||||
.string "Darn!$"
|
||||
|
||||
@ Battle Arena
|
||||
gText_GretaWonSilver::
|
||||
.string "Oh, come on!\n"
|
||||
.string "You have to try harder than that!$"
|
||||
|
||||
gText_GretaDefeatSilver::
|
||||
.string "No way!\n"
|
||||
.string "Good job!$"
|
||||
|
||||
gText_GretaWonGold::
|
||||
.string "Heheh!\n"
|
||||
.string "What did you expect?$"
|
||||
|
||||
gText_GretaDefeatGold::
|
||||
.string "Huh?\n"
|
||||
.string "Are you serious?!$"
|
||||
|
||||
@ Battle Palace
|
||||
gText_SpenserWonSilver::
|
||||
.string "Your POKéMON are wimpy because\n"
|
||||
.string "you're wimpy as a TRAINER!$"
|
||||
|
||||
gText_SpenserDefeatSilver::
|
||||
.string "Ah…\n"
|
||||
.string "Now this is something else…$"
|
||||
|
||||
gText_SpenserWonGold::
|
||||
.string "Gwahahaha!\n"
|
||||
.string "My brethren, we have nothing to fear!$"
|
||||
|
||||
gText_SpenserDefeatGold::
|
||||
.string "Gwah!\n"
|
||||
.string "Hahahaha!$"
|
||||
|
||||
@ Battle Pyramid
|
||||
gText_BrandonWonSilver::
|
||||
.string "Hey! What's wrong with you!\n"
|
||||
.string "Let's see some effort! Get up!$"
|
||||
|
||||
gText_BrandonDefeatSilver::
|
||||
.string "That's it! You've done great!\n"
|
||||
.string "You've worked hard for this!$"
|
||||
|
||||
gText_BrandonWonGold::
|
||||
.string "Hey! Don't you give up now!\n"
|
||||
.string "Get up! Don't lose faith in yourself!$"
|
||||
|
||||
gText_BrandonDefeatGold::
|
||||
.string "That's it! You've done it!\n"
|
||||
.string "You kept working for this!$"
|
||||
34
gflib/text.c
34
gflib/text.c
@ -932,8 +932,9 @@ bool32 TextPrinterWaitAutoMode(struct TextPrinter *textPrinter)
|
||||
{
|
||||
struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields);
|
||||
|
||||
if (subStruct->autoScrollDelay == 49)
|
||||
if (subStruct->autoScrollDelay == NUM_FRAMES_AUTO_SCROLL_DELAY)
|
||||
{
|
||||
subStruct->autoScrollDelay = 0;
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
@ -943,21 +944,29 @@ bool32 TextPrinterWaitAutoMode(struct TextPrinter *textPrinter)
|
||||
}
|
||||
}
|
||||
|
||||
void SetResultWithButtonPress(bool32 *result)
|
||||
{
|
||||
if (JOY_NEW(A_BUTTON | B_BUTTON))
|
||||
{
|
||||
*result = TRUE;
|
||||
PlaySE(SE_SELECT);
|
||||
}
|
||||
}
|
||||
|
||||
bool32 TextPrinterWaitWithDownArrow(struct TextPrinter *textPrinter)
|
||||
{
|
||||
bool32 result = FALSE;
|
||||
if (gTextFlags.autoScroll != 0)
|
||||
if (gTextFlags.autoScroll != 0 || AUTO_SCROLL_TEXT)
|
||||
{
|
||||
result = TextPrinterWaitAutoMode(textPrinter);
|
||||
|
||||
if (AUTO_SCROLL_TEXT)
|
||||
SetResultWithButtonPress(&result);
|
||||
}
|
||||
else
|
||||
{
|
||||
TextPrinterDrawDownArrow(textPrinter);
|
||||
if (JOY_NEW(A_BUTTON | B_BUTTON))
|
||||
{
|
||||
result = TRUE;
|
||||
PlaySE(SE_SELECT);
|
||||
}
|
||||
SetResultWithButtonPress(&result);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@ -965,17 +974,16 @@ bool32 TextPrinterWaitWithDownArrow(struct TextPrinter *textPrinter)
|
||||
bool32 TextPrinterWait(struct TextPrinter *textPrinter)
|
||||
{
|
||||
bool32 result = FALSE;
|
||||
if (gTextFlags.autoScroll != 0)
|
||||
if (gTextFlags.autoScroll != 0 || AUTO_SCROLL_TEXT)
|
||||
{
|
||||
result = TextPrinterWaitAutoMode(textPrinter);
|
||||
|
||||
if (AUTO_SCROLL_TEXT)
|
||||
SetResultWithButtonPress(&result);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (JOY_NEW(A_BUTTON | B_BUTTON))
|
||||
{
|
||||
result = TRUE;
|
||||
PlaySE(SE_SELECT);
|
||||
}
|
||||
SetResultWithButtonPress(&result);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 236 B After Width: | Height: | Size: 341 B |
BIN
graphics/text_window/signpost.bin
Normal file
BIN
graphics/text_window/signpost.bin
Normal file
Binary file not shown.
BIN
graphics/text_window/signpost.png
Normal file
BIN
graphics/text_window/signpost.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 193 B |
@ -1153,11 +1153,10 @@ static inline u32 GetBattlerSide(u32 battler)
|
||||
return GetBattlerPosition(battler) & BIT_SIDE;
|
||||
}
|
||||
|
||||
static inline struct Pokemon* GetBattlerData(u32 battlerId)
|
||||
static inline struct Pokemon* GetPartyBattlerData(u32 battler)
|
||||
{
|
||||
u32 index = gBattlerPartyIndexes[battlerId];
|
||||
|
||||
return (GetBattlerSide(battlerId) == B_SIDE_OPPONENT) ? &gEnemyParty[index] : &gPlayerParty[index];
|
||||
u32 index = gBattlerPartyIndexes[battler];
|
||||
return (GetBattlerSide(battler) == B_SIDE_OPPONENT) ? &gEnemyParty[index] : &gPlayerParty[index];
|
||||
}
|
||||
|
||||
static inline struct Pokemon *GetSideParty(u32 side)
|
||||
@ -1176,3 +1175,4 @@ static inline bool32 IsDoubleBattle(void)
|
||||
}
|
||||
|
||||
#endif // GUARD_BATTLE_H
|
||||
|
||||
|
||||
@ -557,4 +557,7 @@ void CoreEnforcerLoadBeamTarget(struct Sprite *sprite);
|
||||
void SpriteCB_RandomCentredHits(struct Sprite *sprite);
|
||||
void InitSpritePosToAnimTargetsCentre(struct Sprite *sprite, bool32 respectMonPicOffsets);
|
||||
|
||||
// battle_anim_bug.c
|
||||
void AnimTranslateStinger(struct Sprite *sprite);
|
||||
|
||||
#endif // GUARD_BATTLE_ANIM_H
|
||||
|
||||
@ -72,6 +72,9 @@
|
||||
#define SUMMARY_SCREEN_NATURE_COLORS TRUE // If TRUE, nature-based stat boosts and reductions will be red and blue in the summary screen.
|
||||
#define HQ_RANDOM TRUE // If TRUE, replaces the default RNG with an implementation of SFC32 RNG. May break code that relies on RNG.
|
||||
#define COMPETITIVE_PARTY_SYNTAX TRUE // If TRUE, parties are defined in "competitive syntax".
|
||||
#define AUTO_SCROLL_TEXT FALSE // If TRUE, text will automatically scroll to the next line after NUM_FRAMES_AUTO_SCROLL_DELAY. Players can still press A_BUTTON or B_BUTTON to scroll on their own.
|
||||
#define NUM_FRAMES_AUTO_SCROLL_DELAY 49
|
||||
|
||||
|
||||
// Measurement system constants to be used for UNITS
|
||||
#define UNITS_IMPERIAL 0 // Inches, feet, pounds
|
||||
|
||||
@ -3,6 +3,7 @@
|
||||
|
||||
// Movement config
|
||||
#define OW_RUNNING_INDOORS GEN_LATEST // In Gen4+, players are allowed to run indoors.
|
||||
#define OW_AUTO_SIGNPOST FALSE // When enabled, if the tile that the player is facing has MB_SIGNPOST, MB_POKEMART_SIGN, or MB_POKEMON_CENTER_SIGN, the player will automatically read the signpost, as seen in FRLG.
|
||||
|
||||
// Other settings
|
||||
#define OW_POISON_DAMAGE GEN_LATEST // In Gen4, Pokémon no longer faint from Poison in the overworld. In Gen5+, they no longer take damage at all.
|
||||
|
||||
@ -30,9 +30,9 @@
|
||||
#define MB_UNUSED_SOOTOPOLIS_DEEP_WATER_2 0x1A
|
||||
#define MB_STAIRS_OUTSIDE_ABANDONED_SHIP 0x1B
|
||||
#define MB_SHOAL_CAVE_ENTRANCE 0x1C
|
||||
#define MB_UNUSED_1D 0x1D
|
||||
#define MB_UNUSED_1E 0x1E
|
||||
#define MB_UNUSED_1F 0x1F
|
||||
#define MB_SIGNPOST 0x1D
|
||||
#define MB_POKEMON_CENTER_SIGN 0x1E
|
||||
#define MB_POKEMART_SIGN 0x1F
|
||||
#define MB_ICE 0x20
|
||||
#define MB_SAND 0x21
|
||||
#define MB_SEAWEED 0x22
|
||||
|
||||
@ -649,4 +649,8 @@ extern const u8 EventScript_VsSeekerChargingDone[];
|
||||
extern const u8 Common_Movement_FollowerSafeStart[];
|
||||
extern const u8 Common_Movement_FollowerSafeEnd[];
|
||||
|
||||
extern const u8 EventScript_CancelMessageBox[];
|
||||
extern const u8 Common_EventScript_ShowPokemonCenterSign[];
|
||||
extern const u8 Common_EventScript_ShowPokemartSign[];
|
||||
|
||||
#endif // GUARD_EVENT_SCRIPTS_H
|
||||
|
||||
@ -34,5 +34,9 @@ u8 TrySetDiveWarp(void);
|
||||
const u8 *GetInteractedLinkPlayerScript(struct MapPosition *position, u8 metatileBehavior, u8 direction);
|
||||
const u8 *GetCoordEventScriptAtMapPosition(struct MapPosition *position);
|
||||
void ClearPoisonStepCounter(void);
|
||||
void CancelSignPostMessageBox(struct FieldInput *input);
|
||||
|
||||
#define NOT_SIGNPOST 0
|
||||
#define WALK_AWAY_SIGNPOST_FRAMES 6
|
||||
|
||||
#endif // GUARD_FIELDCONTROLAVATAR_H
|
||||
|
||||
@ -19,4 +19,6 @@ u8 GetFieldMessageBoxMode(void);
|
||||
void StopFieldMessage(void);
|
||||
void InitFieldMessageBox(void);
|
||||
|
||||
extern u8 gWalkAwayFromSignpostTimer;
|
||||
|
||||
#endif // GUARD_FIELD_MESSAGE_BOX_H
|
||||
|
||||
@ -2,6 +2,7 @@
|
||||
#define GUARD_GRAPHICS_H
|
||||
|
||||
// overworld
|
||||
extern const u32 gSignpostWindow_Gfx[];
|
||||
extern const u32 gMessageBox_Gfx[];
|
||||
extern const u16 gMessageBox_Pal[];
|
||||
|
||||
|
||||
@ -5,6 +5,12 @@
|
||||
#include "text.h"
|
||||
#include "window.h"
|
||||
|
||||
#define DLG_WINDOW_PALETTE_NUM 15
|
||||
#define DLG_WINDOW_BASE_TILE_NUM 0x200
|
||||
#define STD_WINDOW_PALETTE_NUM 14
|
||||
#define STD_WINDOW_PALETTE_SIZE PLTT_SIZEOF(10)
|
||||
#define STD_WINDOW_BASE_TILE_NUM 0x214
|
||||
|
||||
#define MENU_NOTHING_CHOSEN -2
|
||||
#define MENU_B_PRESSED -1
|
||||
|
||||
|
||||
@ -153,5 +153,8 @@ bool8 MetatileBehavior_IsDirectionalUpLeftStairWarp(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_IsDirectionalDownRightStairWarp(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_IsDirectionalDownLeftStairWarp(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_IsDirectionalStairWarp(u8 metatileBehavior);
|
||||
bool8 MetatileBehavior_IsSignpost(u32);
|
||||
bool8 MetatileBehavior_IsPokemonCenterSign(u32);
|
||||
bool8 MetatileBehavior_IsPokeMartSign(u32);
|
||||
|
||||
#endif // GUARD_METATILE_BEHAVIOR_H
|
||||
|
||||
@ -63,4 +63,7 @@ void InitRamScript_NoObjectEvent(u8 *script, u16 scriptSize);
|
||||
// srccmd.h
|
||||
void SetMovingNpcId(u16 npcId);
|
||||
|
||||
extern u8 gMsgIsSignPost;
|
||||
extern u8 gMsgBoxIsCancelable;
|
||||
|
||||
#endif // GUARD_SCRIPT_H
|
||||
|
||||
@ -62,15 +62,6 @@ extern const u8 gText_MultiLink[];
|
||||
extern const u8 gText_Single[];
|
||||
extern const u8 gText_Double[];
|
||||
|
||||
extern const u8 gText_Spicy[];
|
||||
extern const u8 gText_Dry[];
|
||||
extern const u8 gText_Sweet[];
|
||||
extern const u8 gText_Bitter[];
|
||||
extern const u8 gText_Sour[];
|
||||
|
||||
extern const u8 gText_StowCase[];
|
||||
extern const u8 gText_LvVar1[];
|
||||
|
||||
extern const u8 gText_Spicy2[];
|
||||
extern const u8 gText_Dry2[];
|
||||
extern const u8 gText_Sweet2[];
|
||||
@ -117,9 +108,6 @@ extern const u8 gText_NoDecorationsInUse[];
|
||||
extern const u8 gText_Exit[];
|
||||
extern const u8 gText_Cancel[];
|
||||
|
||||
extern const u8 gText_ThrowAwayVar1[];
|
||||
extern const u8 gText_Var1ThrownAway[];
|
||||
|
||||
extern const u8 gText_Color161Shadow161[];
|
||||
extern const u8 gText_GoBackPrevMenu[];
|
||||
extern const u8 gText_CantPlaceInRoom[];
|
||||
@ -184,25 +172,6 @@ extern const u8 gText_Coins[];
|
||||
extern const u8 gText_Silver[];
|
||||
extern const u8 gText_Gold[];
|
||||
|
||||
extern const u8 gText_Var1AteTheVar2[];
|
||||
extern const u8 gText_Var1HappilyAteVar2[];
|
||||
extern const u8 gText_Var1DisdainfullyAteVar2[];
|
||||
|
||||
extern const u8 gText_RedPokeblock[];
|
||||
extern const u8 gText_BluePokeblock[];
|
||||
extern const u8 gText_PinkPokeblock[];
|
||||
extern const u8 gText_GreenPokeblock[];
|
||||
extern const u8 gText_YellowPokeblock[];
|
||||
extern const u8 gText_PurplePokeblock[];
|
||||
extern const u8 gText_IndigoPokeblock[];
|
||||
extern const u8 gText_BrownPokeblock[];
|
||||
extern const u8 gText_LiteBluePokeblock[];
|
||||
extern const u8 gText_OlivePokeblock[];
|
||||
extern const u8 gText_GrayPokeblock[];
|
||||
extern const u8 gText_BlackPokeblock[];
|
||||
extern const u8 gText_WhitePokeblock[];
|
||||
extern const u8 gText_GoldPokeblock[];
|
||||
|
||||
extern const u8 gMenuText_Use[];
|
||||
extern const u8 gMenuText_Toss[];
|
||||
extern const u8 gMenuText_Give[];
|
||||
@ -334,19 +303,6 @@ extern const u8 gText_LoadingEvent[];
|
||||
extern const u8 gText_DontRemoveCableTurnOff[];
|
||||
extern const u8 gText_LinkStandby2[];
|
||||
|
||||
// berry tag screen text
|
||||
extern const u8 gBerryFirmnessString_VerySoft[];
|
||||
extern const u8 gBerryFirmnessString_Soft[];
|
||||
extern const u8 gBerryFirmnessString_Hard[];
|
||||
extern const u8 gBerryFirmnessString_VeryHard[];
|
||||
extern const u8 gBerryFirmnessString_SuperHard[];
|
||||
extern const u8 gText_BerryTag[];
|
||||
extern const u8 gText_NumberVar1Var2[];
|
||||
extern const u8 gText_SizeSlash[];
|
||||
extern const u8 gText_Var1DotVar2[];
|
||||
extern const u8 gText_ThreeMarks[];
|
||||
extern const u8 gText_FirmSlash[];
|
||||
|
||||
// item menu screen text
|
||||
extern const u8 gText_CloseBag[];
|
||||
extern const u8 gText_NumberItem_HM[];
|
||||
@ -1263,36 +1219,6 @@ extern const u8 gText_FrontierFacilityRoomsCleared[];
|
||||
extern const u8 gText_FrontierFacilityKOsStreak[];
|
||||
extern const u8 gText_FrontierFacilityFloorsCleared[];
|
||||
|
||||
// Frontier Brain
|
||||
extern const u8 gText_AnabelWonSilver[];
|
||||
extern const u8 gText_TuckerWonSilver[];
|
||||
extern const u8 gText_SpenserWonSilver[];
|
||||
extern const u8 gText_GretaWonSilver[];
|
||||
extern const u8 gText_NolandWonSilver[];
|
||||
extern const u8 gText_LucyWonSilver[];
|
||||
extern const u8 gText_BrandonWonSilver[];
|
||||
extern const u8 gText_AnabelDefeatSilver[];
|
||||
extern const u8 gText_TuckerDefeatSilver[];
|
||||
extern const u8 gText_SpenserDefeatSilver[];
|
||||
extern const u8 gText_GretaDefeatSilver[];
|
||||
extern const u8 gText_NolandDefeatSilver[];
|
||||
extern const u8 gText_LucyDefeatSilver[];
|
||||
extern const u8 gText_BrandonDefeatSilver[];
|
||||
extern const u8 gText_AnabelWonGold[];
|
||||
extern const u8 gText_TuckerWonGold[];
|
||||
extern const u8 gText_SpenserWonGold[];
|
||||
extern const u8 gText_GretaWonGold[];
|
||||
extern const u8 gText_NolandWonGold[];
|
||||
extern const u8 gText_LucyWonGold[];
|
||||
extern const u8 gText_BrandonWonGold[];
|
||||
extern const u8 gText_AnabelDefeatGold[];
|
||||
extern const u8 gText_TuckerDefeatGold[];
|
||||
extern const u8 gText_SpenserDefeatGold[];
|
||||
extern const u8 gText_GretaDefeatGold[];
|
||||
extern const u8 gText_NolandDefeatGold[];
|
||||
extern const u8 gText_LucyDefeatGold[];
|
||||
extern const u8 gText_BrandonDefeatGold[];
|
||||
|
||||
// Battle Tower.
|
||||
extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_Apprentice1Intro[];
|
||||
extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_Apprentice1Mon1[];
|
||||
|
||||
@ -14,6 +14,7 @@ extern const u16 gTextWindowFrame1_Pal[];
|
||||
|
||||
const struct TilesPal *GetWindowFrameTilesPal(u8 id);
|
||||
void LoadMessageBoxGfx(u8 windowId, u16 destOffset, u8 palOffset);
|
||||
void LoadSignBoxGfx(u8 windowId, u16 destOffset, u8 palOffset);
|
||||
void LoadWindowGfx(u8 windowId, u8 frameId, u16 destOffset, u8 palOffset);
|
||||
void LoadUserWindowBorderGfx(u8 windowId, u16 destOffset, u8 palOffset);
|
||||
void LoadUserWindowBorderGfx_(u8 windowId, u16 destOffset, u8 palOffset);
|
||||
@ -23,5 +24,6 @@ void DrawTextBorderInner(u8 windowId, u16 tileNum, u8 palNum);
|
||||
void rbox_fill_rectangle(u8 windowId);
|
||||
const u16 *GetTextWindowPalette(u8 id);
|
||||
const u16 *GetOverworldTextboxPalettePtr(void);
|
||||
void LoadSignPostWindowFrameGfx(void);
|
||||
|
||||
#endif // GUARD_TEXT_WINDOW_H
|
||||
|
||||
@ -11,7 +11,6 @@ static void AnimTranslateWebThread_Step(struct Sprite *);
|
||||
static void AnimStringWrap(struct Sprite *);
|
||||
static void AnimSpiderWeb_Step(struct Sprite *);
|
||||
static void AnimSpiderWeb_End(struct Sprite *);
|
||||
static void AnimTranslateStinger(struct Sprite *);
|
||||
static void AnimTailGlowOrb(struct Sprite *);
|
||||
|
||||
static const union AffineAnimCmd sAffineAnim_MegahornHorn_0[] =
|
||||
@ -371,7 +370,7 @@ static void AnimSpiderWeb_End(struct Sprite *sprite)
|
||||
// arg 2: target x pixel offset
|
||||
// arg 3: target y pixel offset
|
||||
// arg 4: duration
|
||||
static void AnimTranslateStinger(struct Sprite *sprite)
|
||||
void AnimTranslateStinger(struct Sprite *sprite)
|
||||
{
|
||||
s16 lVarX, lVarY;
|
||||
u16 rot;
|
||||
|
||||
@ -5495,8 +5495,8 @@ static void AnimMilkBottle_Step2(struct Sprite *sprite, int unk1, int unk2)
|
||||
|
||||
void AnimGrantingStars(struct Sprite *sprite)
|
||||
{
|
||||
if (!gBattleAnimArgs[2])
|
||||
SetSpriteCoordsToAnimAttackerCoords(sprite);
|
||||
if (!InitSpritePosToAnimBattler(gBattleAnimArgs[2], sprite, FALSE))
|
||||
return;
|
||||
|
||||
SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]);
|
||||
sprite->y += gBattleAnimArgs[1];
|
||||
|
||||
@ -1281,6 +1281,17 @@ const struct SpriteTemplate gTeraCrystalSpreadSpriteTemplate =
|
||||
.callback = AnimTask_TeraCrystalShatter,
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gPinkPetalVortexTemplate =
|
||||
{
|
||||
.tileTag = ANIM_TAG_PINK_PETAL,
|
||||
.paletteTag = ANIM_TAG_PINK_PETAL,
|
||||
.oam = &gOamData_AffineOff_ObjNormal_8x8,
|
||||
.anims = gSweetScentPetalAnimCmdTable,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = AnimParticleInVortex
|
||||
};
|
||||
|
||||
// Task data for AnimTask_TeraCrystalShatter
|
||||
#define tCounter data[0]
|
||||
#define tDX data[6]
|
||||
|
||||
@ -414,9 +414,9 @@ const struct SpriteTemplate gPalmSpriteTemplate =
|
||||
|
||||
const struct SpriteTemplate gAuraSphereBlast =
|
||||
{
|
||||
.tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
|
||||
.paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT,
|
||||
.oam = &gOamData_AffineOff_ObjNormal_64x64,
|
||||
.tileTag = ANIM_TAG_IMPACT_2,
|
||||
.paletteTag = ANIM_TAG_IMPACT_2,
|
||||
.oam = &gOamData_AffineNormal_ObjNormal_32x32,
|
||||
.anims = gDummySpriteAnimTable,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
|
||||
@ -359,7 +359,10 @@ const struct SpriteTemplate gSkyAttackBirdSpriteTemplate =
|
||||
// same as AnimEllipticalGust but centered on targets
|
||||
static void AnimEllipticalGustCentered(struct Sprite *sprite)
|
||||
{
|
||||
InitSpritePosToAnimTargetsCentre(sprite, FALSE);
|
||||
if (IsDoubleBattle())
|
||||
InitSpritePosToAnimTargetsCentre(sprite, FALSE);
|
||||
else
|
||||
InitSpritePosToAnimTarget(sprite, FALSE);
|
||||
sprite->y += 20;
|
||||
sprite->data[1] = 191;
|
||||
sprite->callback = AnimEllipticalGust_Step;
|
||||
|
||||
@ -487,11 +487,7 @@ static void ReverseVerticalDipDirection(struct Sprite *sprite)
|
||||
// arg 2: duration
|
||||
static void SlideMonToOriginalPos(struct Sprite *sprite)
|
||||
{
|
||||
u32 monSpriteId;
|
||||
if (!gBattleAnimArgs[0])
|
||||
monSpriteId = gBattlerSpriteIds[gBattleAnimAttacker];
|
||||
else
|
||||
monSpriteId = gBattlerSpriteIds[gBattleAnimTarget];
|
||||
u32 monSpriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
|
||||
|
||||
sprite->data[0] = gBattleAnimArgs[2];
|
||||
sprite->data[1] = gSprites[monSpriteId].x + gSprites[monSpriteId].x2;
|
||||
@ -554,15 +550,9 @@ static void SlideMonToOriginalPos_Step(struct Sprite *sprite)
|
||||
// arg 4: duration
|
||||
static void SlideMonToOffset(struct Sprite *sprite)
|
||||
{
|
||||
u8 battler;
|
||||
u8 monSpriteId;
|
||||
if (!gBattleAnimArgs[0])
|
||||
battler = gBattleAnimAttacker;
|
||||
else
|
||||
battler = gBattleAnimTarget;
|
||||
u8 monSpriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
|
||||
|
||||
monSpriteId = gBattlerSpriteIds[battler];
|
||||
if (GetBattlerSide(battler) != B_SIDE_PLAYER)
|
||||
if (GetBattlerSide(gBattleAnimArgs[0]) != B_SIDE_PLAYER)
|
||||
{
|
||||
gBattleAnimArgs[1] = -gBattleAnimArgs[1];
|
||||
if (gBattleAnimArgs[3] == 1)
|
||||
|
||||
@ -116,11 +116,7 @@ u8 GetBattlerSpriteCoord(u8 battlerId, u8 coordType)
|
||||
}
|
||||
else
|
||||
{
|
||||
if (GetBattlerSide(battlerId) != B_SIDE_PLAYER)
|
||||
mon = &gEnemyParty[gBattlerPartyIndexes[battlerId]];
|
||||
else
|
||||
mon = &gPlayerParty[gBattlerPartyIndexes[battlerId]];
|
||||
|
||||
mon = GetPartyBattlerData(battlerId);
|
||||
illusionMon = GetIllusionMonPtr(battlerId);
|
||||
if (illusionMon != NULL)
|
||||
mon = illusionMon;
|
||||
|
||||
@ -99,7 +99,6 @@ static void SpriteCB_GlacialLance_Step1(struct Sprite* sprite);
|
||||
static void SpriteCB_GlacialLance_Step2(struct Sprite* sprite);
|
||||
static void SpriteCB_GlacialLance(struct Sprite* sprite);
|
||||
static void SpriteCB_TripleArrowKick(struct Sprite* sprite);
|
||||
static void AnimMakingItRain(struct Sprite *sprite);
|
||||
|
||||
// const data
|
||||
// general
|
||||
@ -2176,18 +2175,7 @@ const struct SpriteTemplate gSpiritShackleArrowTemplate =
|
||||
.anims = gDummySpriteAnimTable,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = AnimSonicBoomProjectile
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gSpiritShackleChainTemplate =
|
||||
{
|
||||
.tileTag = ANIM_TAG_CHAIN_LINK,
|
||||
.paletteTag = ANIM_TAG_CHAIN_LINK,
|
||||
.oam = &gOamData_AffineOff_ObjNormal_32x16,
|
||||
.anims = gDummySpriteAnimTable,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = AnimThunderWave
|
||||
.callback = AnimTranslateStinger
|
||||
};
|
||||
|
||||
//darkest lariat
|
||||
@ -7235,18 +7223,6 @@ const struct SpriteTemplate gBitterBladeImpactTemplate =
|
||||
.callback = AnimClawSlash
|
||||
};
|
||||
|
||||
// Make It Rain
|
||||
const struct SpriteTemplate gMakingItRainTemplate =
|
||||
{
|
||||
.tileTag = ANIM_TAG_COIN,
|
||||
.paletteTag = ANIM_TAG_COIN,
|
||||
.oam = &gOamData_AffineNormal_ObjNormal_16x16,
|
||||
.anims = gCoinAnimTable,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = AnimMakingItRain,
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gRedExplosionSpriteTemplate =
|
||||
{
|
||||
.tileTag = ANIM_TAG_RED_EXPLOSION,
|
||||
@ -7280,6 +7256,39 @@ const struct SpriteTemplate gMoonUpSpriteTemplate =
|
||||
.callback = AnimWeatherBallUp,
|
||||
};
|
||||
|
||||
const union AnimCmd gSproutAnimCmds[] =
|
||||
{
|
||||
ANIMCMD_FRAME(96, 5),
|
||||
ANIMCMD_END,
|
||||
};
|
||||
|
||||
const union AnimCmd *const gSproutAnimTable[] =
|
||||
{
|
||||
gSproutAnimCmds,
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gSproutGrowSpriteTemplate =
|
||||
{
|
||||
.tileTag = ANIM_TAG_SPROUT,
|
||||
.paletteTag = ANIM_TAG_SPROUT,
|
||||
.oam = &gOamData_AffineOff_ObjNormal_32x32,
|
||||
.anims = gSproutAnimTable,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = AnimSpriteOnMonPos,
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gFreezyFrostRisingSpearSpriteTemplate =
|
||||
{
|
||||
.tileTag = ANIM_TAG_ICICLE_SPEAR,
|
||||
.paletteTag = ANIM_TAG_ICICLE_SPEAR,
|
||||
.oam = &gOamData_AffineOff_ObjNormal_32x32,
|
||||
.anims = gDummySpriteAnimTable,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = SpriteCB_GeyserTarget
|
||||
};
|
||||
|
||||
// functions
|
||||
//general
|
||||
void AnimTask_IsTargetPartner(u8 taskId)
|
||||
@ -9266,26 +9275,6 @@ void AnimTask_StickySyrup(u8 taskId)
|
||||
DestroyAnimVisualTask(taskId);
|
||||
}
|
||||
|
||||
static void AnimMakingItRain(struct Sprite *sprite)
|
||||
{
|
||||
if (gBattleAnimArgs[3] != 0)
|
||||
SetAverageBattlerPositions(gBattleAnimTarget, FALSE, &sprite->x, &sprite->y); //coin shower on target
|
||||
|
||||
sprite->x += gBattleAnimArgs[0];
|
||||
sprite->y += 14;
|
||||
StartSpriteAnim(sprite, gBattleAnimArgs[1]);
|
||||
AnimateSprite(sprite);
|
||||
sprite->data[0] = 0;
|
||||
sprite->data[1] = 0;
|
||||
sprite->data[2] = 4;
|
||||
sprite->data[3] = 16;
|
||||
sprite->data[4] = -70;
|
||||
sprite->data[5] = gBattleAnimArgs[2];
|
||||
StoreSpriteCallbackInData6(sprite, AnimFallingRock_Step);
|
||||
sprite->callback = TranslateSpriteInEllipse;
|
||||
sprite->callback(sprite);
|
||||
}
|
||||
|
||||
void AnimTask_RandomBool(u8 taskId)
|
||||
{
|
||||
if (RandomPercentage(RNG_NONE, 50))
|
||||
|
||||
@ -349,6 +349,28 @@ const struct SpriteTemplate gSeedFlareGreenWavesTemplate =
|
||||
.callback = AnimFlyingSandCrescent
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gMakingItRainTemplate =
|
||||
{
|
||||
.tileTag = ANIM_TAG_COIN,
|
||||
.paletteTag = ANIM_TAG_COIN,
|
||||
.oam = &gOamData_AffineNormal_ObjNormal_16x16,
|
||||
.anims = gCoinAnimTable,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = AnimFallingRock,
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gFallingSeedSpriteTemplate =
|
||||
{
|
||||
.tileTag = ANIM_TAG_SEED,
|
||||
.paletteTag = ANIM_TAG_SEED,
|
||||
.oam = &gOamData_AffineOff_ObjNormal_16x16,
|
||||
.anims = gDummySpriteAnimTable,
|
||||
.images = NULL,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = AnimFallingRock,
|
||||
};
|
||||
|
||||
static void AnimStealthRock(struct Sprite *sprite)
|
||||
{
|
||||
s16 x, y;
|
||||
@ -456,7 +478,14 @@ void AnimRockFragment(struct Sprite *sprite)
|
||||
// Swirls particle in vortex. Used for moves like Fire Spin or Sand Tomb
|
||||
void AnimParticleInVortex(struct Sprite *sprite)
|
||||
{
|
||||
InitSpritePosToAnimBattler(gBattleAnimArgs[6], sprite, FALSE);
|
||||
if (IsDoubleBattle() //got a little lazy here will fix later
|
||||
&& (gAnimMoveIndex == MOVE_BLEAKWIND_STORM
|
||||
|| gAnimMoveIndex == MOVE_SANDSEAR_STORM
|
||||
|| gAnimMoveIndex == MOVE_SPRINGTIDE_STORM
|
||||
|| gAnimMoveIndex == MOVE_WILDBOLT_STORM))
|
||||
InitSpritePosToAnimTargetsCentre(sprite, FALSE);
|
||||
else
|
||||
InitSpritePosToAnimTarget(sprite, FALSE);
|
||||
sprite->data[0] = gBattleAnimArgs[3];
|
||||
sprite->data[1] = gBattleAnimArgs[2];
|
||||
sprite->data[2] = gBattleAnimArgs[4];
|
||||
|
||||
@ -2269,14 +2269,9 @@ static void UpdateMonData(struct BattleDebugMenu *data)
|
||||
{
|
||||
if (data->battlerWasChanged[i])
|
||||
{
|
||||
struct Pokemon *mon;
|
||||
struct Pokemon *mon = GetPartyBattlerData(i);
|
||||
struct BattlePokemon *battleMon = &gBattleMons[i];
|
||||
|
||||
if (GetBattlerSide(i) == B_SIDE_PLAYER)
|
||||
mon = &gPlayerParty[gBattlerPartyIndexes[i]];
|
||||
else
|
||||
mon = &gEnemyParty[gBattlerPartyIndexes[i]];
|
||||
|
||||
SetMonData(mon, MON_DATA_HELD_ITEM, &battleMon->item);
|
||||
SetMonData(mon, MON_DATA_STATUS, &battleMon->status1);
|
||||
SetMonData(mon, MON_DATA_HP, &battleMon->hp);
|
||||
|
||||
@ -304,7 +304,7 @@ static const s8 sCenterToCornerVecXs[8] ={-32, -16, -16, -32, -32};
|
||||
|
||||
// extra args are money and ball
|
||||
#define TRAINER_CLASS(trainerClass, trainerName, ...) \
|
||||
[TRAINER_CLASS_##trainerClass] = \
|
||||
[trainerClass] = \
|
||||
{ \
|
||||
.name = _(trainerName), \
|
||||
.money = DEFAULT(5, __VA_ARGS__), \
|
||||
@ -313,72 +313,72 @@ static const s8 sCenterToCornerVecXs[8] ={-32, -16, -16, -32, -32};
|
||||
|
||||
const struct TrainerClass gTrainerClasses[TRAINER_CLASS_COUNT] =
|
||||
{
|
||||
TRAINER_CLASS(PKMN_TRAINER_1, "{PKMN} TRAINER"),
|
||||
TRAINER_CLASS(PKMN_TRAINER_2, "{PKMN} TRAINER"),
|
||||
TRAINER_CLASS(HIKER, "HIKER", 10),
|
||||
TRAINER_CLASS(TEAM_AQUA, "TEAM AQUA"),
|
||||
TRAINER_CLASS(PKMN_BREEDER, "{PKMN} BREEDER", 10, B_TRAINER_CLASS_POKE_BALLS >= GEN_8 ? ITEM_HEAL_BALL : ITEM_FRIEND_BALL),
|
||||
TRAINER_CLASS(COOLTRAINER, "COOLTRAINER", 12, ITEM_ULTRA_BALL),
|
||||
TRAINER_CLASS(BIRD_KEEPER, "BIRD KEEPER", 8),
|
||||
TRAINER_CLASS(COLLECTOR, "COLLECTOR", 15, ITEM_PREMIER_BALL),
|
||||
TRAINER_CLASS(SWIMMER_M, "SWIMMER♂", 2, ITEM_DIVE_BALL),
|
||||
TRAINER_CLASS(TEAM_MAGMA, "TEAM MAGMA"),
|
||||
TRAINER_CLASS(EXPERT, "EXPERT", 10),
|
||||
TRAINER_CLASS(AQUA_ADMIN, "AQUA ADMIN", 10),
|
||||
TRAINER_CLASS(BLACK_BELT, "BLACK BELT", 8, ITEM_ULTRA_BALL),
|
||||
TRAINER_CLASS(AQUA_LEADER, "AQUA LEADER", 20, ITEM_MASTER_BALL),
|
||||
TRAINER_CLASS(HEX_MANIAC, "HEX MANIAC", 6),
|
||||
TRAINER_CLASS(AROMA_LADY, "AROMA LADY", 10),
|
||||
TRAINER_CLASS(RUIN_MANIAC, "RUIN MANIAC", 15),
|
||||
TRAINER_CLASS(INTERVIEWER, "INTERVIEWER", 12),
|
||||
TRAINER_CLASS(TUBER_F, "TUBER", 1),
|
||||
TRAINER_CLASS(TUBER_M, "TUBER", 1),
|
||||
TRAINER_CLASS(LADY, "LADY", 50),
|
||||
TRAINER_CLASS(BEAUTY, "BEAUTY", 20),
|
||||
TRAINER_CLASS(RICH_BOY, "RICH BOY", 50),
|
||||
TRAINER_CLASS(POKEMANIAC, "POKéMANIAC", 15),
|
||||
TRAINER_CLASS(GUITARIST, "GUITARIST", 8),
|
||||
TRAINER_CLASS(KINDLER, "KINDLER", 8),
|
||||
TRAINER_CLASS(CAMPER, "CAMPER", 4),
|
||||
TRAINER_CLASS(PICNICKER, "PICNICKER", 4),
|
||||
TRAINER_CLASS(BUG_MANIAC, "BUG MANIAC", 15),
|
||||
TRAINER_CLASS(PSYCHIC, "PSYCHIC", 6),
|
||||
TRAINER_CLASS(GENTLEMAN, "GENTLEMAN", 20, ITEM_LUXURY_BALL),
|
||||
TRAINER_CLASS(ELITE_FOUR, "ELITE FOUR", 25, ITEM_ULTRA_BALL),
|
||||
TRAINER_CLASS(LEADER, "LEADER", 25),
|
||||
TRAINER_CLASS(SCHOOL_KID, "SCHOOL KID"),
|
||||
TRAINER_CLASS(SR_AND_JR, "SR. AND JR.", 4),
|
||||
TRAINER_CLASS(WINSTRATE, "WINSTRATE", 10),
|
||||
TRAINER_CLASS(POKEFAN, "POKéFAN", 20),
|
||||
TRAINER_CLASS(YOUNGSTER, "YOUNGSTER", 4),
|
||||
TRAINER_CLASS(CHAMPION, "CHAMPION", 50),
|
||||
TRAINER_CLASS(FISHERMAN, "FISHERMAN", 10, B_TRAINER_CLASS_POKE_BALLS >= GEN_8 ? ITEM_DIVE_BALL : ITEM_LURE_BALL),
|
||||
TRAINER_CLASS(TRIATHLETE, "TRIATHLETE", 10),
|
||||
TRAINER_CLASS(DRAGON_TAMER, "DRAGON TAMER", 12),
|
||||
TRAINER_CLASS(NINJA_BOY, "NINJA BOY", 3),
|
||||
TRAINER_CLASS(BATTLE_GIRL, "BATTLE GIRL", 6),
|
||||
TRAINER_CLASS(PARASOL_LADY, "PARASOL LADY", 10),
|
||||
TRAINER_CLASS(SWIMMER_F, "SWIMMER♀", 2, ITEM_DIVE_BALL),
|
||||
TRAINER_CLASS(TWINS, "TWINS", 3),
|
||||
TRAINER_CLASS(SAILOR, "SAILOR", 8),
|
||||
TRAINER_CLASS(COOLTRAINER_2, "COOLTRAINER", 5, ITEM_ULTRA_BALL),
|
||||
TRAINER_CLASS(MAGMA_ADMIN, "MAGMA ADMIN", 10),
|
||||
TRAINER_CLASS(RIVAL, "{PKMN} TRAINER", 15),
|
||||
TRAINER_CLASS(BUG_CATCHER, "BUG CATCHER", 4),
|
||||
TRAINER_CLASS(PKMN_RANGER, "{PKMN} RANGER", 12),
|
||||
TRAINER_CLASS(MAGMA_LEADER, "MAGMA LEADER", 20, ITEM_MASTER_BALL),
|
||||
TRAINER_CLASS(LASS, "LASS", 4),
|
||||
TRAINER_CLASS(YOUNG_COUPLE, "YOUNG COUPLE", 8),
|
||||
TRAINER_CLASS(OLD_COUPLE, "OLD COUPLE", 10),
|
||||
TRAINER_CLASS(SIS_AND_BRO, "SIS AND BRO", 3),
|
||||
TRAINER_CLASS(SALON_MAIDEN, "SALON MAIDEN"),
|
||||
TRAINER_CLASS(DOME_ACE, "DOME ACE"),
|
||||
TRAINER_CLASS(PALACE_MAVEN, "PALACE MAVEN"),
|
||||
TRAINER_CLASS(ARENA_TYCOON, "ARENA TYCOON"),
|
||||
TRAINER_CLASS(FACTORY_HEAD, "FACTORY HEAD"),
|
||||
TRAINER_CLASS(PIKE_QUEEN, "PIKE QUEEN"),
|
||||
TRAINER_CLASS(PYRAMID_KING, "PYRAMID KING"),
|
||||
TRAINER_CLASS(RS_PROTAG, "{PKMN} TRAINER"),
|
||||
TRAINER_CLASS(TRAINER_CLASS_PKMN_TRAINER_1, "{PKMN} TRAINER"),
|
||||
TRAINER_CLASS(TRAINER_CLASS_PKMN_TRAINER_2, "{PKMN} TRAINER"),
|
||||
TRAINER_CLASS(TRAINER_CLASS_HIKER, "HIKER", 10),
|
||||
TRAINER_CLASS(TRAINER_CLASS_TEAM_AQUA, "TEAM AQUA"),
|
||||
TRAINER_CLASS(TRAINER_CLASS_PKMN_BREEDER, "{PKMN} BREEDER", 10, B_TRAINER_CLASS_POKE_BALLS >= GEN_8 ? ITEM_HEAL_BALL : ITEM_FRIEND_BALL),
|
||||
TRAINER_CLASS(TRAINER_CLASS_COOLTRAINER, "COOLTRAINER", 12, ITEM_ULTRA_BALL),
|
||||
TRAINER_CLASS(TRAINER_CLASS_BIRD_KEEPER, "BIRD KEEPER", 8),
|
||||
TRAINER_CLASS(TRAINER_CLASS_COLLECTOR, "COLLECTOR", 15, ITEM_PREMIER_BALL),
|
||||
TRAINER_CLASS(TRAINER_CLASS_SWIMMER_M, "SWIMMER♂", 2, ITEM_DIVE_BALL),
|
||||
TRAINER_CLASS(TRAINER_CLASS_TEAM_MAGMA, "TEAM MAGMA"),
|
||||
TRAINER_CLASS(TRAINER_CLASS_EXPERT, "EXPERT", 10),
|
||||
TRAINER_CLASS(TRAINER_CLASS_AQUA_ADMIN, "AQUA ADMIN", 10),
|
||||
TRAINER_CLASS(TRAINER_CLASS_BLACK_BELT, "BLACK BELT", 8, ITEM_ULTRA_BALL),
|
||||
TRAINER_CLASS(TRAINER_CLASS_AQUA_LEADER, "AQUA LEADER", 20, ITEM_MASTER_BALL),
|
||||
TRAINER_CLASS(TRAINER_CLASS_HEX_MANIAC, "HEX MANIAC", 6),
|
||||
TRAINER_CLASS(TRAINER_CLASS_AROMA_LADY, "AROMA LADY", 10),
|
||||
TRAINER_CLASS(TRAINER_CLASS_RUIN_MANIAC, "RUIN MANIAC", 15),
|
||||
TRAINER_CLASS(TRAINER_CLASS_INTERVIEWER, "INTERVIEWER", 12),
|
||||
TRAINER_CLASS(TRAINER_CLASS_TUBER_F, "TUBER", 1),
|
||||
TRAINER_CLASS(TRAINER_CLASS_TUBER_M, "TUBER", 1),
|
||||
TRAINER_CLASS(TRAINER_CLASS_LADY, "LADY", 50),
|
||||
TRAINER_CLASS(TRAINER_CLASS_BEAUTY, "BEAUTY", 20),
|
||||
TRAINER_CLASS(TRAINER_CLASS_RICH_BOY, "RICH BOY", 50),
|
||||
TRAINER_CLASS(TRAINER_CLASS_POKEMANIAC, "POKéMANIAC", 15),
|
||||
TRAINER_CLASS(TRAINER_CLASS_GUITARIST, "GUITARIST", 8),
|
||||
TRAINER_CLASS(TRAINER_CLASS_KINDLER, "KINDLER", 8),
|
||||
TRAINER_CLASS(TRAINER_CLASS_CAMPER, "CAMPER", 4),
|
||||
TRAINER_CLASS(TRAINER_CLASS_PICNICKER, "PICNICKER", 4),
|
||||
TRAINER_CLASS(TRAINER_CLASS_BUG_MANIAC, "BUG MANIAC", 15),
|
||||
TRAINER_CLASS(TRAINER_CLASS_PSYCHIC, "PSYCHIC", 6),
|
||||
TRAINER_CLASS(TRAINER_CLASS_GENTLEMAN, "GENTLEMAN", 20, ITEM_LUXURY_BALL),
|
||||
TRAINER_CLASS(TRAINER_CLASS_ELITE_FOUR, "ELITE FOUR", 25, ITEM_ULTRA_BALL),
|
||||
TRAINER_CLASS(TRAINER_CLASS_LEADER, "LEADER", 25),
|
||||
TRAINER_CLASS(TRAINER_CLASS_SCHOOL_KID, "SCHOOL KID"),
|
||||
TRAINER_CLASS(TRAINER_CLASS_SR_AND_JR, "SR. AND JR.", 4),
|
||||
TRAINER_CLASS(TRAINER_CLASS_WINSTRATE, "WINSTRATE", 10),
|
||||
TRAINER_CLASS(TRAINER_CLASS_POKEFAN, "POKéFAN", 20),
|
||||
TRAINER_CLASS(TRAINER_CLASS_YOUNGSTER, "YOUNGSTER", 4),
|
||||
TRAINER_CLASS(TRAINER_CLASS_CHAMPION, "CHAMPION", 50),
|
||||
TRAINER_CLASS(TRAINER_CLASS_FISHERMAN, "FISHERMAN", 10, B_TRAINER_CLASS_POKE_BALLS >= GEN_8 ? ITEM_DIVE_BALL : ITEM_LURE_BALL),
|
||||
TRAINER_CLASS(TRAINER_CLASS_TRIATHLETE, "TRIATHLETE", 10),
|
||||
TRAINER_CLASS(TRAINER_CLASS_DRAGON_TAMER, "DRAGON TAMER", 12),
|
||||
TRAINER_CLASS(TRAINER_CLASS_NINJA_BOY, "NINJA BOY", 3),
|
||||
TRAINER_CLASS(TRAINER_CLASS_BATTLE_GIRL, "BATTLE GIRL", 6),
|
||||
TRAINER_CLASS(TRAINER_CLASS_PARASOL_LADY, "PARASOL LADY", 10),
|
||||
TRAINER_CLASS(TRAINER_CLASS_SWIMMER_F, "SWIMMER♀", 2, ITEM_DIVE_BALL),
|
||||
TRAINER_CLASS(TRAINER_CLASS_TWINS, "TWINS", 3),
|
||||
TRAINER_CLASS(TRAINER_CLASS_SAILOR, "SAILOR", 8),
|
||||
TRAINER_CLASS(TRAINER_CLASS_COOLTRAINER_2, "COOLTRAINER", 5, ITEM_ULTRA_BALL),
|
||||
TRAINER_CLASS(TRAINER_CLASS_MAGMA_ADMIN, "MAGMA ADMIN", 10),
|
||||
TRAINER_CLASS(TRAINER_CLASS_RIVAL, "{PKMN} TRAINER", 15),
|
||||
TRAINER_CLASS(TRAINER_CLASS_BUG_CATCHER, "BUG CATCHER", 4),
|
||||
TRAINER_CLASS(TRAINER_CLASS_PKMN_RANGER, "{PKMN} RANGER", 12),
|
||||
TRAINER_CLASS(TRAINER_CLASS_MAGMA_LEADER, "MAGMA LEADER", 20, ITEM_MASTER_BALL),
|
||||
TRAINER_CLASS(TRAINER_CLASS_LASS, "LASS", 4),
|
||||
TRAINER_CLASS(TRAINER_CLASS_YOUNG_COUPLE, "YOUNG COUPLE", 8),
|
||||
TRAINER_CLASS(TRAINER_CLASS_OLD_COUPLE, "OLD COUPLE", 10),
|
||||
TRAINER_CLASS(TRAINER_CLASS_SIS_AND_BRO, "SIS AND BRO", 3),
|
||||
TRAINER_CLASS(TRAINER_CLASS_SALON_MAIDEN, "SALON MAIDEN"),
|
||||
TRAINER_CLASS(TRAINER_CLASS_DOME_ACE, "DOME ACE"),
|
||||
TRAINER_CLASS(TRAINER_CLASS_PALACE_MAVEN, "PALACE MAVEN"),
|
||||
TRAINER_CLASS(TRAINER_CLASS_ARENA_TYCOON, "ARENA TYCOON"),
|
||||
TRAINER_CLASS(TRAINER_CLASS_FACTORY_HEAD, "FACTORY HEAD"),
|
||||
TRAINER_CLASS(TRAINER_CLASS_PIKE_QUEEN, "PIKE QUEEN"),
|
||||
TRAINER_CLASS(TRAINER_CLASS_PYRAMID_KING, "PYRAMID KING"),
|
||||
TRAINER_CLASS(TRAINER_CLASS_RS_PROTAG, "{PKMN} TRAINER"),
|
||||
};
|
||||
|
||||
static void (* const sTurnActionsFuncsTable[])(void) =
|
||||
@ -6010,9 +6010,7 @@ void SetTypeBeforeUsingMove(u32 move, u32 battler)
|
||||
gBattleStruct->dynamicMoveType = TYPE_ELECTRIC | F_DYNAMIC_TYPE_SET;
|
||||
|
||||
// Check if a gem should activate.
|
||||
moveType = GetMoveType(move);
|
||||
if (holdEffect == HOLD_EFFECT_GEMS
|
||||
&& moveType == ItemId_GetSecondaryId(heldItem))
|
||||
if (holdEffect == HOLD_EFFECT_GEMS && GetMoveType(move) == ItemId_GetSecondaryId(heldItem))
|
||||
{
|
||||
gSpecialStatuses[battler].gemParam = GetBattlerHoldEffectParam(battler);
|
||||
gSpecialStatuses[battler].gemBoost = TRUE;
|
||||
|
||||
@ -3091,14 +3091,9 @@ static const u8 *TryGetStatusString(u8 *src)
|
||||
|
||||
static void GetBattlerNick(u32 battler, u8 *dst)
|
||||
{
|
||||
struct Pokemon *mon, *illusionMon;
|
||||
struct Pokemon *illusionMon = GetIllusionMonPtr(battler);
|
||||
struct Pokemon *mon = GetPartyBattlerData(battler);
|
||||
|
||||
if (GetBattlerSide(battler) == B_SIDE_PLAYER)
|
||||
mon = &gPlayerParty[gBattlerPartyIndexes[battler]];
|
||||
else
|
||||
mon = &gEnemyParty[gBattlerPartyIndexes[battler]];
|
||||
|
||||
illusionMon = GetIllusionMonPtr(battler);
|
||||
if (illusionMon != NULL)
|
||||
mon = illusionMon;
|
||||
GetMonData(mon, MON_DATA_NICKNAME, dst);
|
||||
|
||||
@ -8637,6 +8637,10 @@ static void RemoveAllTerrains(void)
|
||||
BattleScriptPushCursor(); \
|
||||
gBattlescriptCurrInstr = battlescript; \
|
||||
} \
|
||||
else \
|
||||
{ \
|
||||
gBattlerAttacker = saveBattler; \
|
||||
} \
|
||||
return TRUE; \
|
||||
} \
|
||||
}
|
||||
@ -8651,9 +8655,9 @@ static bool32 TryDefogClear(u32 battlerAtk, bool32 clear)
|
||||
struct SideTimer *sideTimer = &gSideTimers[i];
|
||||
u32 *sideStatuses = &gSideStatuses[i];
|
||||
|
||||
gBattlerAttacker = i; // For correct battle string. Ally's / Foe's
|
||||
if (GetBattlerSide(battlerAtk) != i)
|
||||
{
|
||||
gBattlerAttacker = i; // For correct battle string. Ally's / Foe's
|
||||
DEFOG_CLEAR(SIDE_STATUS_REFLECT, reflectTimer, BattleScript_SideStatusWoreOffReturn, MOVE_REFLECT);
|
||||
DEFOG_CLEAR(SIDE_STATUS_LIGHTSCREEN, lightscreenTimer, BattleScript_SideStatusWoreOffReturn, MOVE_LIGHT_SCREEN);
|
||||
DEFOG_CLEAR(SIDE_STATUS_MIST, mistTimer, BattleScript_SideStatusWoreOffReturn, MOVE_MIST);
|
||||
@ -8662,6 +8666,7 @@ static bool32 TryDefogClear(u32 battlerAtk, bool32 clear)
|
||||
}
|
||||
if (B_DEFOG_EFFECT_CLEARING >= GEN_6)
|
||||
{
|
||||
gBattlerAttacker = i; // For correct battle string. Ally's / Foe's
|
||||
DEFOG_CLEAR(SIDE_STATUS_SPIKES, spikesAmount, BattleScript_SpikesDefog, 0);
|
||||
DEFOG_CLEAR(SIDE_STATUS_STEALTH_ROCK, stealthRockAmount, BattleScript_StealthRockDefog, 0);
|
||||
DEFOG_CLEAR(SIDE_STATUS_TOXIC_SPIKES, toxicSpikesAmount, BattleScript_ToxicSpikesDefog, 0);
|
||||
@ -9872,10 +9877,7 @@ static void Cmd_various(void)
|
||||
case VARIOUS_HANDLE_FORM_CHANGE:
|
||||
{
|
||||
VARIOUS_ARGS(u8 case_);
|
||||
if (GetBattlerSide(battler) == B_SIDE_OPPONENT)
|
||||
mon = &gEnemyParty[gBattlerPartyIndexes[battler]];
|
||||
else
|
||||
mon = &gPlayerParty[gBattlerPartyIndexes[battler]];
|
||||
mon = GetPartyBattlerData(battler);
|
||||
|
||||
// Change species.
|
||||
if (cmd->case_ == 0)
|
||||
|
||||
@ -338,17 +338,8 @@ void BattleTv_SetDataBasedOnString(u16 stringId)
|
||||
defSide = GetBattlerSide(gBattlerTarget);
|
||||
effSide = GetBattlerSide(gEffectBattler);
|
||||
scriptingSide = GetBattlerSide(gBattleMsgDataPtr->scrActive);
|
||||
|
||||
if (atkSide == B_SIDE_PLAYER)
|
||||
atkMon = &gPlayerParty[gBattlerPartyIndexes[gBattlerAttacker]];
|
||||
else
|
||||
atkMon = &gEnemyParty[gBattlerPartyIndexes[gBattlerAttacker]];
|
||||
|
||||
if (defSide == B_SIDE_PLAYER)
|
||||
defMon = &gPlayerParty[gBattlerPartyIndexes[gBattlerTarget]];
|
||||
else
|
||||
defMon = &gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]];
|
||||
|
||||
atkMon = GetPartyBattlerData(gBattlerAttacker);
|
||||
defMon = GetPartyBattlerData(gBattlerTarget);
|
||||
moveSlot = GetBattlerMoveSlotId(gBattlerAttacker, gBattleMsgDataPtr->currentMove);
|
||||
|
||||
if (moveSlot >= MAX_MON_MOVES && IsNotSpecialBattleString(stringId) && stringId > BATTLESTRINGS_TABLE_START)
|
||||
|
||||
@ -5936,7 +5936,6 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
|
||||
&& HadMoreThanHalfHpNowDoesnt(gBattlerTarget)
|
||||
&& !(TestIfSheerForceAffected(gBattlerAttacker, gCurrentMove)))
|
||||
{
|
||||
gBattlerAttacker = gBattlerTarget;
|
||||
BattleScriptPushCursor();
|
||||
gBattlescriptCurrInstr = BattleScript_AngerShellActivates;
|
||||
effect++;
|
||||
@ -8542,13 +8541,9 @@ bool32 IsBattlerProtected(u32 battlerAtk, u32 battlerDef, u32 move)
|
||||
if (gProtectStructs[battlerDef].maxGuarded && IsMoveBlockedByMaxGuard(move))
|
||||
return TRUE;
|
||||
|
||||
// Protective Pads doesn't stop Unseen Fist from bypassing Protect effects, so IsMoveMakingContact() isn't used here.
|
||||
// This means extra logic is needed to handle Shell Side Arm.
|
||||
if (GetBattlerAbility(gBattlerAttacker) == ABILITY_UNSEEN_FIST
|
||||
&& (gMovesInfo[move].makesContact
|
||||
|| (gMovesInfo[move].effect == EFFECT_SHELL_SIDE_ARM
|
||||
&& gBattleStruct->shellSideArmCategory[battlerAtk][battlerDef] == DAMAGE_CATEGORY_PHYSICAL))
|
||||
&& !gProtectStructs[battlerDef].maxGuarded) // Max Guard cannot be bypassed by Unseen Fist
|
||||
if (!gProtectStructs[battlerDef].maxGuarded // Max Guard cannot be bypassed by Unseen Fist
|
||||
&& IsMoveMakingContact(move, gBattlerAttacker)
|
||||
&& GetBattlerAbility(gBattlerAttacker) == ABILITY_UNSEEN_FIST)
|
||||
return FALSE;
|
||||
else if (gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_CRAFTY_SHIELD
|
||||
&& IS_MOVE_STATUS(move))
|
||||
|
||||
@ -143,11 +143,12 @@ static const struct WindowTemplate sWindowTemplates[] =
|
||||
|
||||
static const u8 *const sBerryFirmnessStrings[] =
|
||||
{
|
||||
gBerryFirmnessString_VerySoft,
|
||||
gBerryFirmnessString_Soft,
|
||||
gBerryFirmnessString_Hard,
|
||||
gBerryFirmnessString_VeryHard,
|
||||
gBerryFirmnessString_SuperHard
|
||||
[BERRY_FIRMNESS_UNKNOWN] = COMPOUND_STRING("???"),
|
||||
[BERRY_FIRMNESS_VERY_SOFT] = COMPOUND_STRING("Very soft"),
|
||||
[BERRY_FIRMNESS_SOFT] = COMPOUND_STRING("Soft"),
|
||||
[BERRY_FIRMNESS_HARD] = COMPOUND_STRING("Hard"),
|
||||
[BERRY_FIRMNESS_VERY_HARD] = COMPOUND_STRING("Very hard"),
|
||||
[BERRY_FIRMNESS_SUPER_HARD] = COMPOUND_STRING("Super hard")
|
||||
};
|
||||
|
||||
// this file's functions
|
||||
@ -172,6 +173,13 @@ static void Task_DisplayAnotherBerry(u8 taskId);
|
||||
static void TryChangeDisplayedBerry(u8 taskId, s8 toMove);
|
||||
static void HandleBagCursorPositionChange(s8 toMove);
|
||||
|
||||
static const u8 sText_SizeSlash[] = _("SIZE /");
|
||||
static const u8 sText_FirmSlash[] = _("FIRM /");
|
||||
static const u8 sText_Var1DotVar2[] = _("{STR_VAR_1}.{STR_VAR_2}”");
|
||||
static const u8 sText_NumberVar1Var2[] = _("{NO}{STR_VAR_1} {STR_VAR_2}");
|
||||
static const u8 sText_BerryTag[] = _("BERRY TAG");
|
||||
static const u8 sText_ThreeMarks[] = _("???");
|
||||
|
||||
// code
|
||||
void DoBerryTagScreen(void)
|
||||
{
|
||||
@ -386,7 +394,7 @@ static void AddBerryTagTextToBg0(void)
|
||||
{
|
||||
memcpy(GetBgTilemapBuffer(0), sBerryTag->tilemapBuffers[2], sizeof(sBerryTag->tilemapBuffers[2]));
|
||||
FillWindowPixelBuffer(WIN_BERRY_TAG, PIXEL_FILL(15));
|
||||
PrintTextInBerryTagScreen(WIN_BERRY_TAG, gText_BerryTag, GetStringCenterAlignXOffset(FONT_NORMAL, gText_BerryTag, 0x40), 1, 0, 1);
|
||||
PrintTextInBerryTagScreen(WIN_BERRY_TAG, sText_BerryTag, GetStringCenterAlignXOffset(FONT_NORMAL, sText_BerryTag, 0x40), 1, 0, 1);
|
||||
PutWindowTilemap(WIN_BERRY_TAG);
|
||||
ScheduleBgCopyTilemapToVram(0);
|
||||
}
|
||||
@ -405,14 +413,14 @@ static void PrintBerryNumberAndName(void)
|
||||
const struct Berry *berry = GetBerryInfo(sBerryTag->berryId);
|
||||
ConvertIntToDecimalStringN(gStringVar1, sBerryTag->berryId, STR_CONV_MODE_LEADING_ZEROS, 2);
|
||||
StringCopy(gStringVar2, berry->name);
|
||||
StringExpandPlaceholders(gStringVar4, gText_NumberVar1Var2);
|
||||
StringExpandPlaceholders(gStringVar4, sText_NumberVar1Var2);
|
||||
PrintTextInBerryTagScreen(WIN_BERRY_NAME, gStringVar4, 0, 1, 0, 0);
|
||||
}
|
||||
|
||||
static void PrintBerrySize(void)
|
||||
{
|
||||
const struct Berry *berry = GetBerryInfo(sBerryTag->berryId);
|
||||
AddTextPrinterParameterized(WIN_SIZE_FIRM, FONT_NORMAL, gText_SizeSlash, 0, 1, TEXT_SKIP_DRAW, NULL);
|
||||
AddTextPrinterParameterized(WIN_SIZE_FIRM, FONT_NORMAL, sText_SizeSlash, 0, 1, TEXT_SKIP_DRAW, NULL);
|
||||
if (berry->size != 0)
|
||||
{
|
||||
u32 inches, fraction;
|
||||
@ -425,23 +433,23 @@ static void PrintBerrySize(void)
|
||||
|
||||
ConvertIntToDecimalStringN(gStringVar1, inches, STR_CONV_MODE_LEFT_ALIGN, 2);
|
||||
ConvertIntToDecimalStringN(gStringVar2, fraction, STR_CONV_MODE_LEFT_ALIGN, 2);
|
||||
StringExpandPlaceholders(gStringVar4, gText_Var1DotVar2);
|
||||
StringExpandPlaceholders(gStringVar4, sText_Var1DotVar2);
|
||||
AddTextPrinterParameterized(WIN_SIZE_FIRM, FONT_NORMAL, gStringVar4, 0x28, 1, 0, NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
AddTextPrinterParameterized(WIN_SIZE_FIRM, FONT_NORMAL, gText_ThreeMarks, 0x28, 1, 0, NULL);
|
||||
AddTextPrinterParameterized(WIN_SIZE_FIRM, FONT_NORMAL, sText_ThreeMarks, 0x28, 1, 0, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
static void PrintBerryFirmness(void)
|
||||
{
|
||||
const struct Berry *berry = GetBerryInfo(sBerryTag->berryId);
|
||||
AddTextPrinterParameterized(WIN_SIZE_FIRM, FONT_NORMAL, gText_FirmSlash, 0, 0x11, TEXT_SKIP_DRAW, NULL);
|
||||
AddTextPrinterParameterized(WIN_SIZE_FIRM, FONT_NORMAL, sText_FirmSlash, 0, 0x11, TEXT_SKIP_DRAW, NULL);
|
||||
if (berry->firmness != 0)
|
||||
AddTextPrinterParameterized(WIN_SIZE_FIRM, FONT_NORMAL, sBerryFirmnessStrings[berry->firmness - 1], 0x28, 0x11, 0, NULL);
|
||||
AddTextPrinterParameterized(WIN_SIZE_FIRM, FONT_NORMAL, sBerryFirmnessStrings[berry->firmness], 0x28, 0x11, 0, NULL);
|
||||
else
|
||||
AddTextPrinterParameterized(WIN_SIZE_FIRM, FONT_NORMAL, gText_ThreeMarks, 0x28, 0x11, 0, NULL);
|
||||
AddTextPrinterParameterized(WIN_SIZE_FIRM, FONT_NORMAL, sText_ThreeMarks, 0x28, 0x11, 0, NULL);
|
||||
}
|
||||
|
||||
static void PrintBerryDescription1(void)
|
||||
|
||||
@ -297,110 +297,110 @@ const u32 gTrainerBackPicPalette_Leaf[] = INCBIN_U32("graphics/trainers/back_pic
|
||||
// gTrainerFrontPic/gTrainerPalette pointers, (e.g "gTrainerFrontPic_Hiker" and "gTrainerPalette_Hiker").
|
||||
// The last three parameters control the X and Y coordinates and rotation of the mugshot on the screen.
|
||||
// They default to 0, 0, and 0x200 which are default values used by the majority of the game's trainer sprites.
|
||||
#define TRAINER_SPRITE(trainerPic, file, ...) \
|
||||
[TRAINER_PIC_##trainerPic] = \
|
||||
{ \
|
||||
.frontPic = {gTrainerFrontPic_##file, TRAINER_PIC_SIZE, TRAINER_PIC_##trainerPic},\
|
||||
.palette = {gTrainerPalette_##file, TRAINER_PIC_##trainerPic}, \
|
||||
.mugshotCoords = {DEFAULT(0, __VA_ARGS__), DEFAULT_2(0, __VA_ARGS__)}, \
|
||||
.mugshotRotation = DEFAULT_3(0x200, __VA_ARGS__), \
|
||||
#define TRAINER_SPRITE(trainerPic, picFile, paletteFile, ...) \
|
||||
[trainerPic] = \
|
||||
{ \
|
||||
.frontPic = {picFile, TRAINER_PIC_SIZE, trainerPic}, \
|
||||
.palette = {paletteFile, trainerPic}, \
|
||||
.mugshotCoords = {DEFAULT(0, __VA_ARGS__), DEFAULT_2(0, __VA_ARGS__)}, \
|
||||
.mugshotRotation = DEFAULT_3(0x200, __VA_ARGS__), \
|
||||
}
|
||||
|
||||
const struct TrainerSprite gTrainerSprites[] =
|
||||
{
|
||||
TRAINER_SPRITE(HIKER, Hiker),
|
||||
TRAINER_SPRITE(AQUA_GRUNT_M, AquaGruntM),
|
||||
TRAINER_SPRITE(POKEMON_BREEDER_F, PokemonBreederF),
|
||||
TRAINER_SPRITE(COOLTRAINER_M, CoolTrainerM),
|
||||
TRAINER_SPRITE(BIRD_KEEPER, BirdKeeper),
|
||||
TRAINER_SPRITE(COLLECTOR, Collector),
|
||||
TRAINER_SPRITE(AQUA_GRUNT_F, AquaGruntF),
|
||||
TRAINER_SPRITE(SWIMMER_M, SwimmerM),
|
||||
TRAINER_SPRITE(MAGMA_GRUNT_M, MagmaGruntM),
|
||||
TRAINER_SPRITE(EXPERT_M, ExpertM),
|
||||
TRAINER_SPRITE(AQUA_ADMIN_M, AquaAdminM),
|
||||
TRAINER_SPRITE(BLACK_BELT, BlackBelt),
|
||||
TRAINER_SPRITE(AQUA_ADMIN_F, AquaAdminF),
|
||||
TRAINER_SPRITE(AQUA_LEADER_ARCHIE, AquaLeaderArchie),
|
||||
TRAINER_SPRITE(HEX_MANIAC, HexManiac),
|
||||
TRAINER_SPRITE(AROMA_LADY, AromaLady),
|
||||
TRAINER_SPRITE(RUIN_MANIAC, RuinManiac),
|
||||
TRAINER_SPRITE(INTERVIEWER, Interviewer),
|
||||
TRAINER_SPRITE(TUBER_F, TuberF),
|
||||
TRAINER_SPRITE(TUBER_M, TuberM),
|
||||
TRAINER_SPRITE(COOLTRAINER_F, CoolTrainerF),
|
||||
TRAINER_SPRITE(LADY, Lady),
|
||||
TRAINER_SPRITE(BEAUTY, Beauty),
|
||||
TRAINER_SPRITE(RICH_BOY, RichBoy),
|
||||
TRAINER_SPRITE(EXPERT_F, ExpertF),
|
||||
TRAINER_SPRITE(POKEMANIAC, Pokemaniac),
|
||||
TRAINER_SPRITE(MAGMA_GRUNT_F, MagmaGruntF),
|
||||
TRAINER_SPRITE(GUITARIST, Guitarist),
|
||||
TRAINER_SPRITE(KINDLER, Kindler),
|
||||
TRAINER_SPRITE(CAMPER, Camper),
|
||||
TRAINER_SPRITE(PICNICKER, Picnicker),
|
||||
TRAINER_SPRITE(BUG_MANIAC, BugManiac),
|
||||
TRAINER_SPRITE(POKEMON_BREEDER_M, PokemonBreederM),
|
||||
TRAINER_SPRITE(PSYCHIC_M, PsychicM),
|
||||
TRAINER_SPRITE(PSYCHIC_F, PsychicF),
|
||||
TRAINER_SPRITE(GENTLEMAN, Gentleman),
|
||||
TRAINER_SPRITE(ELITE_FOUR_SIDNEY, EliteFourSidney),
|
||||
TRAINER_SPRITE(ELITE_FOUR_PHOEBE, EliteFourPhoebe),
|
||||
TRAINER_SPRITE(ELITE_FOUR_GLACIA, EliteFourGlacia, -4, 4, 0x1B0),
|
||||
TRAINER_SPRITE(ELITE_FOUR_DRAKE, EliteFourDrake, 0, 5, 0x1A0),
|
||||
TRAINER_SPRITE(LEADER_ROXANNE, LeaderRoxanne),
|
||||
TRAINER_SPRITE(LEADER_BRAWLY, LeaderBrawly),
|
||||
TRAINER_SPRITE(LEADER_WATTSON, LeaderWattson),
|
||||
TRAINER_SPRITE(LEADER_FLANNERY, LeaderFlannery),
|
||||
TRAINER_SPRITE(LEADER_NORMAN, LeaderNorman),
|
||||
TRAINER_SPRITE(LEADER_WINONA, LeaderWinona),
|
||||
TRAINER_SPRITE(LEADER_TATE_AND_LIZA, LeaderTateAndLiza),
|
||||
TRAINER_SPRITE(LEADER_JUAN, LeaderJuan),
|
||||
TRAINER_SPRITE(SCHOOL_KID_M, SchoolKidM),
|
||||
TRAINER_SPRITE(SCHOOL_KID_F, SchoolKidF),
|
||||
TRAINER_SPRITE(SR_AND_JR, SrAndJr),
|
||||
TRAINER_SPRITE(POKEFAN_M, PokefanM),
|
||||
TRAINER_SPRITE(POKEFAN_F, PokefanF),
|
||||
TRAINER_SPRITE(YOUNGSTER, Youngster),
|
||||
TRAINER_SPRITE(CHAMPION_WALLACE, ChampionWallace, -8, 7, 0x188),
|
||||
TRAINER_SPRITE(FISHERMAN, Fisherman),
|
||||
TRAINER_SPRITE(CYCLING_TRIATHLETE_M, CyclingTriathleteM),
|
||||
TRAINER_SPRITE(CYCLING_TRIATHLETE_F, CyclingTriathleteF),
|
||||
TRAINER_SPRITE(RUNNING_TRIATHLETE_M, RunningTriathleteM),
|
||||
TRAINER_SPRITE(RUNNING_TRIATHLETE_F, RunningTriathleteF),
|
||||
TRAINER_SPRITE(SWIMMING_TRIATHLETE_M, SwimmingTriathleteM),
|
||||
TRAINER_SPRITE(SWIMMING_TRIATHLETE_F, SwimmingTriathleteF),
|
||||
TRAINER_SPRITE(DRAGON_TAMER, DragonTamer),
|
||||
TRAINER_SPRITE(NINJA_BOY, NinjaBoy),
|
||||
TRAINER_SPRITE(BATTLE_GIRL, BattleGirl),
|
||||
TRAINER_SPRITE(PARASOL_LADY, ParasolLady),
|
||||
TRAINER_SPRITE(SWIMMER_F, SwimmerF),
|
||||
TRAINER_SPRITE(TWINS, Twins),
|
||||
TRAINER_SPRITE(SAILOR, Sailor),
|
||||
TRAINER_SPRITE(MAGMA_ADMIN, MagmaAdmin),
|
||||
TRAINER_SPRITE(WALLY, Wally),
|
||||
TRAINER_SPRITE(BRENDAN, Brendan),
|
||||
TRAINER_SPRITE(MAY, May),
|
||||
TRAINER_SPRITE(BUG_CATCHER, BugCatcher),
|
||||
TRAINER_SPRITE(POKEMON_RANGER_M, PokemonRangerM),
|
||||
TRAINER_SPRITE(POKEMON_RANGER_F, PokemonRangerF),
|
||||
TRAINER_SPRITE(MAGMA_LEADER_MAXIE, MagmaLeaderMaxie),
|
||||
TRAINER_SPRITE(LASS, Lass),
|
||||
TRAINER_SPRITE(YOUNG_COUPLE, YoungCouple),
|
||||
TRAINER_SPRITE(OLD_COUPLE, OldCouple),
|
||||
TRAINER_SPRITE(SIS_AND_BRO, SisAndBro),
|
||||
TRAINER_SPRITE(STEVEN, Steven, 0, 7, 0x188),
|
||||
TRAINER_SPRITE(SALON_MAIDEN_ANABEL, SalonMaidenAnabel),
|
||||
TRAINER_SPRITE(DOME_ACE_TUCKER, DomeAceTucker),
|
||||
TRAINER_SPRITE(PALACE_MAVEN_SPENSER, PalaceMavenSpenser),
|
||||
TRAINER_SPRITE(ARENA_TYCOON_GRETA, ArenaTycoonGreta),
|
||||
TRAINER_SPRITE(FACTORY_HEAD_NOLAND, FactoryHeadNoland),
|
||||
TRAINER_SPRITE(PIKE_QUEEN_LUCY, PikeQueenLucy),
|
||||
TRAINER_SPRITE(PYRAMID_KING_BRANDON, PyramidKingBrandon),
|
||||
TRAINER_SPRITE(RED, Red),
|
||||
TRAINER_SPRITE(LEAF, Leaf),
|
||||
TRAINER_SPRITE(RS_BRENDAN, RubySapphireBrendan),
|
||||
TRAINER_SPRITE(RS_MAY, RubySapphireMay),
|
||||
TRAINER_SPRITE(TRAINER_PIC_HIKER, gTrainerFrontPic_Hiker, gTrainerPalette_Hiker),
|
||||
TRAINER_SPRITE(TRAINER_PIC_AQUA_GRUNT_M, gTrainerFrontPic_AquaGruntM, gTrainerPalette_AquaGruntM),
|
||||
TRAINER_SPRITE(TRAINER_PIC_POKEMON_BREEDER_F, gTrainerFrontPic_PokemonBreederF, gTrainerPalette_PokemonBreederF),
|
||||
TRAINER_SPRITE(TRAINER_PIC_COOLTRAINER_M, gTrainerFrontPic_CoolTrainerM, gTrainerPalette_CoolTrainerM),
|
||||
TRAINER_SPRITE(TRAINER_PIC_BIRD_KEEPER, gTrainerFrontPic_BirdKeeper, gTrainerPalette_BirdKeeper),
|
||||
TRAINER_SPRITE(TRAINER_PIC_COLLECTOR, gTrainerFrontPic_Collector, gTrainerPalette_Collector),
|
||||
TRAINER_SPRITE(TRAINER_PIC_AQUA_GRUNT_F, gTrainerFrontPic_AquaGruntF, gTrainerPalette_AquaGruntF),
|
||||
TRAINER_SPRITE(TRAINER_PIC_SWIMMER_M, gTrainerFrontPic_SwimmerM, gTrainerPalette_SwimmerM),
|
||||
TRAINER_SPRITE(TRAINER_PIC_MAGMA_GRUNT_M, gTrainerFrontPic_MagmaGruntM, gTrainerPalette_MagmaGruntM),
|
||||
TRAINER_SPRITE(TRAINER_PIC_EXPERT_M, gTrainerFrontPic_ExpertM, gTrainerPalette_ExpertM),
|
||||
TRAINER_SPRITE(TRAINER_PIC_AQUA_ADMIN_M, gTrainerFrontPic_AquaAdminM, gTrainerPalette_AquaAdminM),
|
||||
TRAINER_SPRITE(TRAINER_PIC_BLACK_BELT, gTrainerFrontPic_BlackBelt, gTrainerPalette_BlackBelt),
|
||||
TRAINER_SPRITE(TRAINER_PIC_AQUA_ADMIN_F, gTrainerFrontPic_AquaAdminF, gTrainerPalette_AquaAdminF),
|
||||
TRAINER_SPRITE(TRAINER_PIC_AQUA_LEADER_ARCHIE, gTrainerFrontPic_AquaLeaderArchie, gTrainerPalette_AquaLeaderArchie),
|
||||
TRAINER_SPRITE(TRAINER_PIC_HEX_MANIAC, gTrainerFrontPic_HexManiac, gTrainerPalette_HexManiac),
|
||||
TRAINER_SPRITE(TRAINER_PIC_AROMA_LADY, gTrainerFrontPic_AromaLady, gTrainerPalette_AromaLady),
|
||||
TRAINER_SPRITE(TRAINER_PIC_RUIN_MANIAC, gTrainerFrontPic_RuinManiac, gTrainerPalette_RuinManiac),
|
||||
TRAINER_SPRITE(TRAINER_PIC_INTERVIEWER, gTrainerFrontPic_Interviewer, gTrainerPalette_Interviewer),
|
||||
TRAINER_SPRITE(TRAINER_PIC_TUBER_F, gTrainerFrontPic_TuberF, gTrainerPalette_TuberF),
|
||||
TRAINER_SPRITE(TRAINER_PIC_TUBER_M, gTrainerFrontPic_TuberM, gTrainerPalette_TuberM),
|
||||
TRAINER_SPRITE(TRAINER_PIC_COOLTRAINER_F, gTrainerFrontPic_CoolTrainerF, gTrainerPalette_CoolTrainerF),
|
||||
TRAINER_SPRITE(TRAINER_PIC_LADY, gTrainerFrontPic_Lady, gTrainerPalette_Lady),
|
||||
TRAINER_SPRITE(TRAINER_PIC_BEAUTY, gTrainerFrontPic_Beauty, gTrainerPalette_Beauty),
|
||||
TRAINER_SPRITE(TRAINER_PIC_RICH_BOY, gTrainerFrontPic_RichBoy, gTrainerPalette_RichBoy),
|
||||
TRAINER_SPRITE(TRAINER_PIC_EXPERT_F, gTrainerFrontPic_ExpertF, gTrainerPalette_ExpertF),
|
||||
TRAINER_SPRITE(TRAINER_PIC_POKEMANIAC, gTrainerFrontPic_Pokemaniac, gTrainerPalette_Pokemaniac),
|
||||
TRAINER_SPRITE(TRAINER_PIC_MAGMA_GRUNT_F, gTrainerFrontPic_MagmaGruntF, gTrainerPalette_MagmaGruntF),
|
||||
TRAINER_SPRITE(TRAINER_PIC_GUITARIST, gTrainerFrontPic_Guitarist, gTrainerPalette_Guitarist),
|
||||
TRAINER_SPRITE(TRAINER_PIC_KINDLER, gTrainerFrontPic_Kindler, gTrainerPalette_Kindler),
|
||||
TRAINER_SPRITE(TRAINER_PIC_CAMPER, gTrainerFrontPic_Camper, gTrainerPalette_Camper),
|
||||
TRAINER_SPRITE(TRAINER_PIC_PICNICKER, gTrainerFrontPic_Picnicker, gTrainerPalette_Picnicker),
|
||||
TRAINER_SPRITE(TRAINER_PIC_BUG_MANIAC, gTrainerFrontPic_BugManiac, gTrainerPalette_BugManiac),
|
||||
TRAINER_SPRITE(TRAINER_PIC_POKEMON_BREEDER_M, gTrainerFrontPic_PokemonBreederM, gTrainerPalette_PokemonBreederM),
|
||||
TRAINER_SPRITE(TRAINER_PIC_PSYCHIC_M, gTrainerFrontPic_PsychicM, gTrainerPalette_PsychicM),
|
||||
TRAINER_SPRITE(TRAINER_PIC_PSYCHIC_F, gTrainerFrontPic_PsychicF, gTrainerPalette_PsychicF),
|
||||
TRAINER_SPRITE(TRAINER_PIC_GENTLEMAN, gTrainerFrontPic_Gentleman, gTrainerPalette_Gentleman),
|
||||
TRAINER_SPRITE(TRAINER_PIC_ELITE_FOUR_SIDNEY, gTrainerFrontPic_EliteFourSidney, gTrainerPalette_EliteFourSidney),
|
||||
TRAINER_SPRITE(TRAINER_PIC_ELITE_FOUR_PHOEBE, gTrainerFrontPic_EliteFourPhoebe, gTrainerPalette_EliteFourPhoebe),
|
||||
TRAINER_SPRITE(TRAINER_PIC_ELITE_FOUR_GLACIA, gTrainerFrontPic_EliteFourGlacia, gTrainerPalette_EliteFourGlacia, -4, 4, 0x1B0),
|
||||
TRAINER_SPRITE(TRAINER_PIC_ELITE_FOUR_DRAKE, gTrainerFrontPic_EliteFourDrake, gTrainerPalette_EliteFourDrake, 0, 5, 0x1A0),
|
||||
TRAINER_SPRITE(TRAINER_PIC_LEADER_ROXANNE, gTrainerFrontPic_LeaderRoxanne, gTrainerPalette_LeaderRoxanne),
|
||||
TRAINER_SPRITE(TRAINER_PIC_LEADER_BRAWLY, gTrainerFrontPic_LeaderBrawly, gTrainerPalette_LeaderBrawly),
|
||||
TRAINER_SPRITE(TRAINER_PIC_LEADER_WATTSON, gTrainerFrontPic_LeaderWattson, gTrainerPalette_LeaderWattson),
|
||||
TRAINER_SPRITE(TRAINER_PIC_LEADER_FLANNERY, gTrainerFrontPic_LeaderFlannery, gTrainerPalette_LeaderFlannery),
|
||||
TRAINER_SPRITE(TRAINER_PIC_LEADER_NORMAN, gTrainerFrontPic_LeaderNorman, gTrainerPalette_LeaderNorman),
|
||||
TRAINER_SPRITE(TRAINER_PIC_LEADER_WINONA, gTrainerFrontPic_LeaderWinona, gTrainerPalette_LeaderWinona),
|
||||
TRAINER_SPRITE(TRAINER_PIC_LEADER_TATE_AND_LIZA, gTrainerFrontPic_LeaderTateAndLiza, gTrainerPalette_LeaderTateAndLiza),
|
||||
TRAINER_SPRITE(TRAINER_PIC_LEADER_JUAN, gTrainerFrontPic_LeaderJuan, gTrainerPalette_LeaderJuan),
|
||||
TRAINER_SPRITE(TRAINER_PIC_SCHOOL_KID_M, gTrainerFrontPic_SchoolKidM, gTrainerPalette_SchoolKidM),
|
||||
TRAINER_SPRITE(TRAINER_PIC_SCHOOL_KID_F, gTrainerFrontPic_SchoolKidF, gTrainerPalette_SchoolKidF),
|
||||
TRAINER_SPRITE(TRAINER_PIC_SR_AND_JR, gTrainerFrontPic_SrAndJr, gTrainerPalette_SrAndJr),
|
||||
TRAINER_SPRITE(TRAINER_PIC_POKEFAN_M, gTrainerFrontPic_PokefanM, gTrainerPalette_PokefanM),
|
||||
TRAINER_SPRITE(TRAINER_PIC_POKEFAN_F, gTrainerFrontPic_PokefanF, gTrainerPalette_PokefanF),
|
||||
TRAINER_SPRITE(TRAINER_PIC_YOUNGSTER, gTrainerFrontPic_Youngster, gTrainerPalette_Youngster),
|
||||
TRAINER_SPRITE(TRAINER_PIC_CHAMPION_WALLACE, gTrainerFrontPic_ChampionWallace, gTrainerPalette_ChampionWallace, -8, 7, 0x188),
|
||||
TRAINER_SPRITE(TRAINER_PIC_FISHERMAN, gTrainerFrontPic_Fisherman, gTrainerPalette_Fisherman),
|
||||
TRAINER_SPRITE(TRAINER_PIC_CYCLING_TRIATHLETE_M, gTrainerFrontPic_CyclingTriathleteM, gTrainerPalette_CyclingTriathleteM),
|
||||
TRAINER_SPRITE(TRAINER_PIC_CYCLING_TRIATHLETE_F, gTrainerFrontPic_CyclingTriathleteF, gTrainerPalette_CyclingTriathleteF),
|
||||
TRAINER_SPRITE(TRAINER_PIC_RUNNING_TRIATHLETE_M, gTrainerFrontPic_RunningTriathleteM, gTrainerPalette_RunningTriathleteM),
|
||||
TRAINER_SPRITE(TRAINER_PIC_RUNNING_TRIATHLETE_F, gTrainerFrontPic_RunningTriathleteF, gTrainerPalette_RunningTriathleteF),
|
||||
TRAINER_SPRITE(TRAINER_PIC_SWIMMING_TRIATHLETE_M, gTrainerFrontPic_SwimmingTriathleteM, gTrainerPalette_SwimmingTriathleteM),
|
||||
TRAINER_SPRITE(TRAINER_PIC_SWIMMING_TRIATHLETE_F, gTrainerFrontPic_SwimmingTriathleteF, gTrainerPalette_SwimmingTriathleteF),
|
||||
TRAINER_SPRITE(TRAINER_PIC_DRAGON_TAMER, gTrainerFrontPic_DragonTamer, gTrainerPalette_DragonTamer),
|
||||
TRAINER_SPRITE(TRAINER_PIC_NINJA_BOY, gTrainerFrontPic_NinjaBoy, gTrainerPalette_NinjaBoy),
|
||||
TRAINER_SPRITE(TRAINER_PIC_BATTLE_GIRL, gTrainerFrontPic_BattleGirl, gTrainerPalette_BattleGirl),
|
||||
TRAINER_SPRITE(TRAINER_PIC_PARASOL_LADY, gTrainerFrontPic_ParasolLady, gTrainerPalette_ParasolLady),
|
||||
TRAINER_SPRITE(TRAINER_PIC_SWIMMER_F, gTrainerFrontPic_SwimmerF, gTrainerPalette_SwimmerF),
|
||||
TRAINER_SPRITE(TRAINER_PIC_TWINS, gTrainerFrontPic_Twins, gTrainerPalette_Twins),
|
||||
TRAINER_SPRITE(TRAINER_PIC_SAILOR, gTrainerFrontPic_Sailor, gTrainerPalette_Sailor),
|
||||
TRAINER_SPRITE(TRAINER_PIC_MAGMA_ADMIN, gTrainerFrontPic_MagmaAdmin, gTrainerPalette_MagmaAdmin),
|
||||
TRAINER_SPRITE(TRAINER_PIC_WALLY, gTrainerFrontPic_Wally, gTrainerPalette_Wally),
|
||||
TRAINER_SPRITE(TRAINER_PIC_BRENDAN, gTrainerFrontPic_Brendan, gTrainerPalette_Brendan),
|
||||
TRAINER_SPRITE(TRAINER_PIC_MAY, gTrainerFrontPic_May, gTrainerPalette_May),
|
||||
TRAINER_SPRITE(TRAINER_PIC_BUG_CATCHER, gTrainerFrontPic_BugCatcher, gTrainerPalette_BugCatcher),
|
||||
TRAINER_SPRITE(TRAINER_PIC_POKEMON_RANGER_M, gTrainerFrontPic_PokemonRangerM, gTrainerPalette_PokemonRangerM),
|
||||
TRAINER_SPRITE(TRAINER_PIC_POKEMON_RANGER_F, gTrainerFrontPic_PokemonRangerF, gTrainerPalette_PokemonRangerF),
|
||||
TRAINER_SPRITE(TRAINER_PIC_MAGMA_LEADER_MAXIE, gTrainerFrontPic_MagmaLeaderMaxie, gTrainerPalette_MagmaLeaderMaxie),
|
||||
TRAINER_SPRITE(TRAINER_PIC_LASS, gTrainerFrontPic_Lass, gTrainerPalette_Lass),
|
||||
TRAINER_SPRITE(TRAINER_PIC_YOUNG_COUPLE, gTrainerFrontPic_YoungCouple, gTrainerPalette_YoungCouple),
|
||||
TRAINER_SPRITE(TRAINER_PIC_OLD_COUPLE, gTrainerFrontPic_OldCouple, gTrainerPalette_OldCouple),
|
||||
TRAINER_SPRITE(TRAINER_PIC_SIS_AND_BRO, gTrainerFrontPic_SisAndBro, gTrainerPalette_SisAndBro),
|
||||
TRAINER_SPRITE(TRAINER_PIC_STEVEN, gTrainerFrontPic_Steven, gTrainerPalette_Steven, 0, 7, 0x188),
|
||||
TRAINER_SPRITE(TRAINER_PIC_SALON_MAIDEN_ANABEL, gTrainerFrontPic_SalonMaidenAnabel, gTrainerPalette_SalonMaidenAnabel),
|
||||
TRAINER_SPRITE(TRAINER_PIC_DOME_ACE_TUCKER, gTrainerFrontPic_DomeAceTucker, gTrainerPalette_DomeAceTucker),
|
||||
TRAINER_SPRITE(TRAINER_PIC_PALACE_MAVEN_SPENSER, gTrainerFrontPic_PalaceMavenSpenser, gTrainerPalette_PalaceMavenSpenser),
|
||||
TRAINER_SPRITE(TRAINER_PIC_ARENA_TYCOON_GRETA, gTrainerFrontPic_ArenaTycoonGreta, gTrainerPalette_ArenaTycoonGreta),
|
||||
TRAINER_SPRITE(TRAINER_PIC_FACTORY_HEAD_NOLAND, gTrainerFrontPic_FactoryHeadNoland, gTrainerPalette_FactoryHeadNoland),
|
||||
TRAINER_SPRITE(TRAINER_PIC_PIKE_QUEEN_LUCY, gTrainerFrontPic_PikeQueenLucy, gTrainerPalette_PikeQueenLucy),
|
||||
TRAINER_SPRITE(TRAINER_PIC_PYRAMID_KING_BRANDON, gTrainerFrontPic_PyramidKingBrandon, gTrainerPalette_PyramidKingBrandon),
|
||||
TRAINER_SPRITE(TRAINER_PIC_RED, gTrainerFrontPic_Red, gTrainerPalette_Red),
|
||||
TRAINER_SPRITE(TRAINER_PIC_LEAF, gTrainerFrontPic_Leaf, gTrainerPalette_Leaf),
|
||||
TRAINER_SPRITE(TRAINER_PIC_RS_BRENDAN, gTrainerFrontPic_RubySapphireBrendan, gTrainerPalette_RubySapphireBrendan),
|
||||
TRAINER_SPRITE(TRAINER_PIC_RS_MAY, gTrainerFrontPic_RubySapphireMay, gTrainerPalette_RubySapphireMay),
|
||||
};
|
||||
|
||||
static const union AnimCmd sAnimCmd_Hoenn[] =
|
||||
@ -526,23 +526,23 @@ const struct SpriteFrameImage gTrainerBackPicTable_Steven[] =
|
||||
// .backPic goes functionally unused, since none of these pics are compressed
|
||||
// and the place they would get extracted to gets overwritten later anyway
|
||||
// the casts are so they'll play nice with the strict struct definition
|
||||
#define TRAINER_BACK_SPRITE(trainerPic, yOffset, sprite, pal, anim) \
|
||||
[TRAINER_BACK_PIC_##trainerPic] = \
|
||||
{ \
|
||||
.coordinates = {.size = 8, .y_offset = yOffset}, \
|
||||
.backPic = {(const u32 *)gTrainerBackPic_##sprite, TRAINER_PIC_SIZE * ARRAY_COUNT(gTrainerBackPicTable_##sprite), TRAINER_BACK_PIC_##trainerPic}, \
|
||||
.palette = {gTrainer##pal, TRAINER_BACK_PIC_##trainerPic}, \
|
||||
.animation = sBackAnims_##anim, \
|
||||
#define TRAINER_BACK_SPRITE(trainerPic, yOffset, sprite, table, pal, anim) \
|
||||
[trainerPic] = \
|
||||
{ \
|
||||
.coordinates = {.size = 8, .y_offset = yOffset}, \
|
||||
.backPic = {(const u32 *)sprite, TRAINER_PIC_SIZE * ARRAY_COUNT(table), trainerPic}, \
|
||||
.palette = {pal, trainerPic}, \
|
||||
.animation = anim, \
|
||||
}
|
||||
|
||||
const struct TrainerBacksprite gTrainerBacksprites[] =
|
||||
{
|
||||
TRAINER_BACK_SPRITE(BRENDAN, 4, Brendan, Palette_Brendan, Hoenn),
|
||||
TRAINER_BACK_SPRITE(MAY, 4, May, Palette_May, Hoenn),
|
||||
TRAINER_BACK_SPRITE(RED, 5, Red, BackPicPalette_Red, Kanto),
|
||||
TRAINER_BACK_SPRITE(LEAF, 5, Leaf, BackPicPalette_Leaf, Kanto),
|
||||
TRAINER_BACK_SPRITE(RUBY_SAPPHIRE_BRENDAN, 4, RubySapphireBrendan, Palette_RubySapphireBrendan, Hoenn),
|
||||
TRAINER_BACK_SPRITE(RUBY_SAPPHIRE_MAY, 4, RubySapphireMay, Palette_RubySapphireMay, Hoenn),
|
||||
TRAINER_BACK_SPRITE(WALLY, 4, Wally, Palette_Wally, Hoenn),
|
||||
TRAINER_BACK_SPRITE(STEVEN, 4, Steven, Palette_Steven, Hoenn),
|
||||
TRAINER_BACK_SPRITE(TRAINER_BACK_PIC_BRENDAN, 4, gTrainerBackPic_Brendan, gTrainerBackPicTable_Brendan, gTrainerPalette_Brendan, sBackAnims_Hoenn),
|
||||
TRAINER_BACK_SPRITE(TRAINER_BACK_PIC_MAY, 4, gTrainerBackPic_May, gTrainerBackPicTable_May, gTrainerPalette_May, sBackAnims_Hoenn),
|
||||
TRAINER_BACK_SPRITE(TRAINER_BACK_PIC_RED, 5, gTrainerBackPic_Red, gTrainerBackPicTable_Red, gTrainerBackPicPalette_Red, sBackAnims_Kanto),
|
||||
TRAINER_BACK_SPRITE(TRAINER_BACK_PIC_LEAF, 5, gTrainerBackPic_Leaf, gTrainerBackPicTable_Leaf, gTrainerBackPicPalette_Leaf, sBackAnims_Kanto),
|
||||
TRAINER_BACK_SPRITE(TRAINER_BACK_PIC_RUBY_SAPPHIRE_BRENDAN, 4, gTrainerBackPic_RubySapphireBrendan, gTrainerBackPicTable_RubySapphireBrendan, gTrainerPalette_RubySapphireBrendan, sBackAnims_Hoenn),
|
||||
TRAINER_BACK_SPRITE(TRAINER_BACK_PIC_RUBY_SAPPHIRE_MAY, 4, gTrainerBackPic_RubySapphireMay, gTrainerBackPicTable_RubySapphireMay, gTrainerPalette_RubySapphireMay, sBackAnims_Hoenn),
|
||||
TRAINER_BACK_SPRITE(TRAINER_BACK_PIC_WALLY, 4, gTrainerBackPic_Wally, gTrainerBackPicTable_Wally, gTrainerPalette_Wally, sBackAnims_Hoenn),
|
||||
TRAINER_BACK_SPRITE(TRAINER_BACK_PIC_STEVEN, 4, gTrainerBackPic_Steven, gTrainerBackPicTable_Steven, gTrainerPalette_Steven, sBackAnims_Hoenn),
|
||||
};
|
||||
|
||||
@ -10,6 +10,7 @@
|
||||
#include "event_scripts.h"
|
||||
#include "fieldmap.h"
|
||||
#include "field_control_avatar.h"
|
||||
#include "field_message_box.h"
|
||||
#include "field_player_avatar.h"
|
||||
#include "field_poison.h"
|
||||
#include "field_screen_effect.h"
|
||||
@ -34,6 +35,7 @@
|
||||
#include "constants/event_objects.h"
|
||||
#include "constants/field_poison.h"
|
||||
#include "constants/map_types.h"
|
||||
#include "constants/metatile_behaviors.h"
|
||||
#include "constants/songs.h"
|
||||
#include "constants/trainer_hill.h"
|
||||
|
||||
@ -73,6 +75,11 @@ static void UpdateFollowerStepCounter(void);
|
||||
#if OW_POISON_DAMAGE < GEN_5
|
||||
static bool8 UpdatePoisonStepCounter(void);
|
||||
#endif // OW_POISON_DAMAGE
|
||||
static bool32 TrySetUpWalkIntoSignpostScript(struct MapPosition * position, u32 metatileBehavior, u32 playerDirection);
|
||||
static void SetMsgSignPostAndVarFacing(u32 playerDirection);
|
||||
static void SetUpWalkIntoSignScript(const u8 *script, u32 playerDirection);
|
||||
static u32 GetFacingSignpostType(u16 metatileBehvaior, u32 direction);
|
||||
static const u8 *GetSignpostScriptAtMapPosition(struct MapPosition * position);
|
||||
|
||||
void FieldClearPlayerInput(struct FieldInput *input)
|
||||
{
|
||||
@ -154,6 +161,7 @@ int ProcessPlayerFieldInput(struct FieldInput *input)
|
||||
gSpecialVar_LastTalked = 0;
|
||||
gSelectedObjectEvent = 0;
|
||||
|
||||
gMsgIsSignPost = FALSE;
|
||||
playerDirection = GetPlayerFacingDirection();
|
||||
GetPlayerPosition(&position);
|
||||
metatileBehavior = MapGridGetMetatileBehaviorAt(position.x, position.y);
|
||||
@ -173,6 +181,17 @@ int ProcessPlayerFieldInput(struct FieldInput *input)
|
||||
if (TryStartStepBasedScript(&position, metatileBehavior, playerDirection) == TRUE)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if ((input->checkStandardWildEncounter) && ((input->dpadDirection == 0) || input->dpadDirection == playerDirection))
|
||||
{
|
||||
GetInFrontOfPlayerPosition(&position);
|
||||
metatileBehavior = MapGridGetMetatileBehaviorAt(position.x, position.y);
|
||||
if (TrySetUpWalkIntoSignpostScript(&position, metatileBehavior, playerDirection) == TRUE)
|
||||
return TRUE;
|
||||
GetPlayerPosition(&position);
|
||||
metatileBehavior = MapGridGetMetatileBehaviorAt(position.x, position.y);
|
||||
}
|
||||
|
||||
if (input->checkStandardWildEncounter && CheckStandardWildEncounter(metatileBehavior) == TRUE)
|
||||
return TRUE;
|
||||
if (input->heldDirection && input->dpadDirection == playerDirection)
|
||||
@ -183,6 +202,10 @@ int ProcessPlayerFieldInput(struct FieldInput *input)
|
||||
|
||||
GetInFrontOfPlayerPosition(&position);
|
||||
metatileBehavior = MapGridGetMetatileBehaviorAt(position.x, position.y);
|
||||
|
||||
if (input->heldDirection && (input->dpadDirection == playerDirection) && (TrySetUpWalkIntoSignpostScript(&position, metatileBehavior, playerDirection) == TRUE))
|
||||
return TRUE;
|
||||
|
||||
if (input->pressedAButton && TryStartInteractionScript(&position, metatileBehavior, playerDirection) == TRUE)
|
||||
return TRUE;
|
||||
|
||||
@ -344,6 +367,9 @@ static const u8 *GetInteractedBackgroundEventScript(struct MapPosition *position
|
||||
if (bgEvent->bgUnion.script == NULL)
|
||||
return EventScript_TestSignpostMsg;
|
||||
|
||||
if (GetFacingSignpostType(metatileBehavior, direction) != NOT_SIGNPOST)
|
||||
SetMsgSignPostAndVarFacing(direction);
|
||||
|
||||
switch (bgEvent->kind)
|
||||
{
|
||||
case BG_EVENT_PLAYER_FACING_ANY:
|
||||
@ -1075,3 +1101,113 @@ int SetCableClubWarp(void)
|
||||
SetupWarp(&gMapHeader, GetWarpEventAtMapPosition(&gMapHeader, &position), &position);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static bool32 TrySetUpWalkIntoSignpostScript(struct MapPosition *position, u32 metatileBehavior, u32 playerDirection)
|
||||
{
|
||||
const u8 *script;
|
||||
|
||||
if ((JOY_HELD(DPAD_LEFT | DPAD_RIGHT)) || (playerDirection != DIR_NORTH))
|
||||
return FALSE;
|
||||
|
||||
switch (GetFacingSignpostType(metatileBehavior, playerDirection))
|
||||
{
|
||||
case MB_POKEMON_CENTER_SIGN:
|
||||
SetUpWalkIntoSignScript(Common_EventScript_ShowPokemonCenterSign, playerDirection);
|
||||
return TRUE;
|
||||
case MB_POKEMART_SIGN:
|
||||
SetUpWalkIntoSignScript(Common_EventScript_ShowPokemartSign, playerDirection);
|
||||
return TRUE;
|
||||
case MB_SIGNPOST:
|
||||
script = GetSignpostScriptAtMapPosition(position);
|
||||
if (script == NULL)
|
||||
return FALSE;
|
||||
SetUpWalkIntoSignScript(script, playerDirection);
|
||||
return TRUE;
|
||||
default:
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
static u32 GetFacingSignpostType(u16 metatileBehavior, u32 playerDirection)
|
||||
{
|
||||
if (MetatileBehavior_IsPokemonCenterSign(metatileBehavior) == TRUE)
|
||||
return MB_POKEMON_CENTER_SIGN;
|
||||
if (MetatileBehavior_IsPokeMartSign(metatileBehavior) == TRUE)
|
||||
return MB_POKEMART_SIGN;
|
||||
if (MetatileBehavior_IsSignpost(metatileBehavior) == TRUE)
|
||||
return MB_SIGNPOST;
|
||||
|
||||
return NOT_SIGNPOST;
|
||||
}
|
||||
|
||||
static void SetMsgSignPostAndVarFacing(u32 playerDirection)
|
||||
{
|
||||
gWalkAwayFromSignpostTimer = WALK_AWAY_SIGNPOST_FRAMES;
|
||||
gMsgBoxIsCancelable = TRUE;
|
||||
gMsgIsSignPost = TRUE;
|
||||
gSpecialVar_Facing = playerDirection;
|
||||
}
|
||||
|
||||
static void SetUpWalkIntoSignScript(const u8 *script, u32 playerDirection)
|
||||
{
|
||||
ScriptContext_SetupScript(script);
|
||||
SetMsgSignPostAndVarFacing(playerDirection);
|
||||
}
|
||||
|
||||
static const u8 *GetSignpostScriptAtMapPosition(struct MapPosition *position)
|
||||
{
|
||||
const struct BgEvent *event = GetBackgroundEventAtPosition(&gMapHeader, position->x - 7, position->y - 7, position->elevation);
|
||||
if (event == NULL)
|
||||
return NULL;
|
||||
if (event->bgUnion.script != NULL)
|
||||
return event->bgUnion.script;
|
||||
return EventScript_TestSignpostMsg;
|
||||
}
|
||||
|
||||
static void Task_OpenStartMenu(u8 taskId)
|
||||
{
|
||||
if (ArePlayerFieldControlsLocked())
|
||||
return;
|
||||
|
||||
PlaySE(SE_WIN_OPEN);
|
||||
ShowStartMenu();
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
|
||||
bool32 IsDpadPushedToTurnOrMovePlayer(struct FieldInput *input)
|
||||
{
|
||||
return (input->dpadDirection != 0 && GetPlayerFacingDirection() != input->dpadDirection);
|
||||
}
|
||||
|
||||
void CancelSignPostMessageBox(struct FieldInput *input)
|
||||
{
|
||||
if (!ScriptContext_IsEnabled())
|
||||
return;
|
||||
|
||||
if (gWalkAwayFromSignpostTimer)
|
||||
{
|
||||
gWalkAwayFromSignpostTimer--;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!gMsgBoxIsCancelable)
|
||||
return;
|
||||
|
||||
if (IsDpadPushedToTurnOrMovePlayer(input))
|
||||
{
|
||||
ScriptContext_SetupScript(EventScript_CancelMessageBox);
|
||||
LockPlayerFieldControls();
|
||||
return;
|
||||
}
|
||||
|
||||
if (!input->pressedStartButton)
|
||||
return;
|
||||
|
||||
ScriptContext_SetupScript(EventScript_CancelMessageBox);
|
||||
LockPlayerFieldControls();
|
||||
|
||||
if (FuncIsActiveTask(Task_OpenStartMenu))
|
||||
return;
|
||||
|
||||
CreateTask(Task_OpenStartMenu, 8);
|
||||
}
|
||||
|
||||
@ -5,8 +5,11 @@
|
||||
#include "text.h"
|
||||
#include "match_call.h"
|
||||
#include "field_message_box.h"
|
||||
#include "text_window.h"
|
||||
#include "script.h"
|
||||
|
||||
static EWRAM_DATA u8 sFieldMessageBoxMode = 0;
|
||||
EWRAM_DATA u8 gWalkAwayFromSignpostTimer = 0;
|
||||
|
||||
static void ExpandStringAndStartDrawFieldMessage(const u8 *, bool32);
|
||||
static void StartDrawFieldMessage(void);
|
||||
@ -29,7 +32,12 @@ static void Task_DrawFieldMessage(u8 taskId)
|
||||
switch (task->tState)
|
||||
{
|
||||
case 0:
|
||||
LoadMessageBoxAndBorderGfx();
|
||||
if (gMsgIsSignPost)
|
||||
LoadSignPostWindowFrameGfx();
|
||||
else
|
||||
LoadMessageBoxAndBorderGfx();
|
||||
task->tState++;
|
||||
break;
|
||||
task->tState++;
|
||||
break;
|
||||
case 1:
|
||||
|
||||
@ -4276,3 +4276,10 @@ void PreparePartyForSkyBattle(void)
|
||||
VarSet(B_VAR_SKY_BATTLE,participatingPokemonSlot);
|
||||
CompactPartySlots();
|
||||
}
|
||||
|
||||
void UseBlankMessageToCancelPokemonPic(void)
|
||||
{
|
||||
u8 t = EOS;
|
||||
AddTextPrinterParameterized(0, FONT_NORMAL, &t, 0, 1, 0, NULL);
|
||||
ScriptMenu_HidePokemonPic();
|
||||
}
|
||||
|
||||
@ -94,71 +94,155 @@ static void ShowPyramidResultsWindow(void);
|
||||
static void ShowLinkContestResultsWindow(void);
|
||||
static void CopyFrontierBrainText(bool8 playerWonText);
|
||||
|
||||
#define FRONTIER_BRAIN_SPRITES(Brain) \
|
||||
.trainerId = TRAINER_##Brain, \
|
||||
.objEventGfx = OBJ_EVENT_GFX_##Brain
|
||||
|
||||
#define FRONTIER_BRAIN_TEXTS(Brain) \
|
||||
.lostTexts = {gText_##Brain##DefeatSilver, gText_##Brain##DefeatGold}, \
|
||||
.wonTexts = {gText_##Brain##WonSilver, gText_##Brain##WonGold}
|
||||
|
||||
// battledBit: Flags to change the conversation when the Frontier Brain is encountered for a battle
|
||||
// First bit is has battled them before and not won yet, second bit is has battled them and won (obtained a Symbol)
|
||||
const struct FrontierBrain gFrontierBrainInfo[NUM_FRONTIER_FACILITIES] =
|
||||
{
|
||||
[FRONTIER_FACILITY_TOWER] =
|
||||
{
|
||||
FRONTIER_BRAIN_SPRITES(ANABEL),
|
||||
.trainerId = TRAINER_ANABEL,
|
||||
.objEventGfx = OBJ_EVENT_GFX_ANABEL,
|
||||
.isFemale = TRUE,
|
||||
FRONTIER_BRAIN_TEXTS(Anabel),
|
||||
.lostTexts = {
|
||||
COMPOUND_STRING("Okay, I understand…"), //Silver
|
||||
COMPOUND_STRING("Thank you…") //Gold
|
||||
},
|
||||
.wonTexts = {
|
||||
COMPOUND_STRING("It's very disappointing…"), //Silver
|
||||
COMPOUND_STRING("I'm terribly sorry…") //Gold
|
||||
},
|
||||
.battledBit = {1 << 0, 1 << 1},
|
||||
.streakAppearances = {35, 70, 35, 1},
|
||||
},
|
||||
[FRONTIER_FACILITY_DOME] =
|
||||
{
|
||||
FRONTIER_BRAIN_SPRITES(TUCKER),
|
||||
.trainerId = TRAINER_TUCKER,
|
||||
.objEventGfx = OBJ_EVENT_GFX_TUCKER,
|
||||
.isFemale = FALSE,
|
||||
FRONTIER_BRAIN_TEXTS(Tucker),
|
||||
.lostTexts = {
|
||||
COMPOUND_STRING(
|
||||
"Grr…\n"
|
||||
"What the…"), //Silver
|
||||
COMPOUND_STRING(
|
||||
"Ahahaha!\n"
|
||||
"You're inspiring!") //Gold
|
||||
},
|
||||
.wonTexts = {
|
||||
COMPOUND_STRING(
|
||||
"Ahahaha! Aren't you embarrassed?\n"
|
||||
"Everyone's watching!"), //Silver
|
||||
COMPOUND_STRING("My DOME ACE title isn't just for show!") //Gold
|
||||
},
|
||||
.battledBit = {1 << 2, 1 << 3},
|
||||
.streakAppearances = {1, 2, 5, 0},
|
||||
},
|
||||
[FRONTIER_FACILITY_PALACE] =
|
||||
{
|
||||
FRONTIER_BRAIN_SPRITES(SPENSER),
|
||||
.trainerId = TRAINER_SPENSER,
|
||||
.objEventGfx = OBJ_EVENT_GFX_SPENSER,
|
||||
.isFemale = FALSE,
|
||||
FRONTIER_BRAIN_TEXTS(Spenser),
|
||||
.lostTexts = {
|
||||
COMPOUND_STRING(
|
||||
"Ah…\n"
|
||||
"Now this is something else…"), //Silver
|
||||
COMPOUND_STRING(
|
||||
"Gwah!\n"
|
||||
"Hahahaha!") //Gold
|
||||
},
|
||||
.wonTexts = {
|
||||
COMPOUND_STRING(
|
||||
"Your POKéMON are wimpy because\n"
|
||||
"you're wimpy as a TRAINER!"), //Silver
|
||||
COMPOUND_STRING(
|
||||
"Gwahahaha!\n"
|
||||
"My brethren, we have nothing to fear!") //Gold
|
||||
},
|
||||
.battledBit = {1 << 4, 1 << 5},
|
||||
.streakAppearances = {21, 42, 21, 1},
|
||||
},
|
||||
[FRONTIER_FACILITY_ARENA] =
|
||||
{
|
||||
FRONTIER_BRAIN_SPRITES(GRETA),
|
||||
.trainerId = TRAINER_GRETA,
|
||||
.objEventGfx = OBJ_EVENT_GFX_GRETA,
|
||||
.isFemale = TRUE,
|
||||
FRONTIER_BRAIN_TEXTS(Greta),
|
||||
.lostTexts = {
|
||||
COMPOUND_STRING(
|
||||
"No way!\n"
|
||||
"Good job!"), //Silver
|
||||
COMPOUND_STRING(
|
||||
"Huh?\n"
|
||||
"Are you serious?!") //Gold
|
||||
},
|
||||
.wonTexts = {
|
||||
COMPOUND_STRING(
|
||||
"Oh, come on!\n"
|
||||
"You have to try harder than that!"), //Silver
|
||||
COMPOUND_STRING(
|
||||
"Heheh!\n"
|
||||
"What did you expect?") //Gold
|
||||
},
|
||||
.battledBit = {1 << 6, 1 << 7},
|
||||
.streakAppearances = {28, 56, 28, 1},
|
||||
},
|
||||
[FRONTIER_FACILITY_FACTORY] =
|
||||
{
|
||||
FRONTIER_BRAIN_SPRITES(NOLAND),
|
||||
.trainerId = TRAINER_NOLAND,
|
||||
.objEventGfx = OBJ_EVENT_GFX_NOLAND,
|
||||
.isFemale = FALSE,
|
||||
FRONTIER_BRAIN_TEXTS(Noland),
|
||||
.lostTexts = {
|
||||
COMPOUND_STRING(
|
||||
"Good job!\n"
|
||||
"You know what you're doing!"), //Silver
|
||||
COMPOUND_STRING("What happened here?") //Gold
|
||||
},
|
||||
.wonTexts = {
|
||||
COMPOUND_STRING(
|
||||
"Way to work!\n"
|
||||
"That was a good lesson, eh?"), //Silver
|
||||
COMPOUND_STRING(
|
||||
"Hey, hey, hey!\n"
|
||||
"You're finished already?") //Gold
|
||||
},
|
||||
.battledBit = {1 << 8, 1 << 9},
|
||||
.streakAppearances = {21, 42, 21, 1},
|
||||
},
|
||||
[FRONTIER_FACILITY_PIKE] =
|
||||
{
|
||||
FRONTIER_BRAIN_SPRITES(LUCY),
|
||||
.trainerId = TRAINER_LUCY,
|
||||
.objEventGfx = OBJ_EVENT_GFX_LUCY,
|
||||
.isFemale = TRUE,
|
||||
FRONTIER_BRAIN_TEXTS(Lucy),
|
||||
.lostTexts = {
|
||||
COMPOUND_STRING("Urk…"), //Silver
|
||||
COMPOUND_STRING("Darn!") //Gold
|
||||
},
|
||||
.wonTexts = {
|
||||
COMPOUND_STRING("Humph…"), //Silver
|
||||
COMPOUND_STRING("Hah!") //Gold
|
||||
},
|
||||
.battledBit = {1 << 10, 1 << 11},
|
||||
.streakAppearances = {28, 140, 56, 1},
|
||||
},
|
||||
[FRONTIER_FACILITY_PYRAMID] =
|
||||
{
|
||||
FRONTIER_BRAIN_SPRITES(BRANDON),
|
||||
.trainerId = TRAINER_BRANDON,
|
||||
.objEventGfx = OBJ_EVENT_GFX_BRANDON,
|
||||
.isFemale = FALSE,
|
||||
FRONTIER_BRAIN_TEXTS(Brandon),
|
||||
.lostTexts = {
|
||||
COMPOUND_STRING(
|
||||
"That's it! You've done great!\n"
|
||||
"You've worked hard for this!"), //Silver
|
||||
COMPOUND_STRING(
|
||||
"That's it! You've done it!\n"
|
||||
"You kept working for this!") //Gold
|
||||
},
|
||||
.wonTexts = {
|
||||
COMPOUND_STRING(
|
||||
"Hey! What's wrong with you!\n"
|
||||
"Let's see some effort! Get up!"), //Silver
|
||||
COMPOUND_STRING(
|
||||
"Hey! Don't you give up now!\n"
|
||||
"Get up! Don't lose faith in yourself!") //Gold
|
||||
},
|
||||
.battledBit = {1 << 12, 1 << 13},
|
||||
.streakAppearances = {21, 70, 35, 0},
|
||||
},
|
||||
|
||||
@ -2026,6 +2026,7 @@ const u16 gTradeMenuMonBox_Tilemap[] = INCBIN_U16("graphics/trade/menu_mon_box.b
|
||||
|
||||
const u16 gMessageBox_Pal[] = INCBIN_U16("graphics/text_window/message_box.gbapal");
|
||||
const u8 gMessageBox_Gfx[] = INCBIN_U8("graphics/text_window/message_box.4bpp");
|
||||
const u8 gSignpostWindow_Gfx[] = INCBIN_U8("graphics/text_window/signpost.4bpp");
|
||||
|
||||
const u32 gWallpaperIcon_Cross[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/icons/cross.4bpp.lz");
|
||||
const u32 gWallpaperIcon_Bolt[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/icons/bolt.4bpp.lz");
|
||||
|
||||
125
src/menu.c
125
src/menu.c
@ -17,18 +17,13 @@
|
||||
#include "sound.h"
|
||||
#include "string_util.h"
|
||||
#include "strings.h"
|
||||
#include "script.h"
|
||||
#include "task.h"
|
||||
#include "text_window.h"
|
||||
#include "window.h"
|
||||
#include "config/overworld.h"
|
||||
#include "constants/songs.h"
|
||||
|
||||
#define DLG_WINDOW_PALETTE_NUM 15
|
||||
#define DLG_WINDOW_BASE_TILE_NUM 0x200
|
||||
#define STD_WINDOW_PALETTE_NUM 14
|
||||
#define STD_WINDOW_PALETTE_SIZE PLTT_SIZEOF(10)
|
||||
#define STD_WINDOW_BASE_TILE_NUM 0x214
|
||||
|
||||
struct MenuInfoIcon
|
||||
{
|
||||
u8 width;
|
||||
@ -54,6 +49,8 @@ struct Menu
|
||||
|
||||
static u16 AddWindowParameterized(u8, u8, u8, u8, u8, u8, u16);
|
||||
static void WindowFunc_DrawStandardFrame(u8, u8, u8, u8, u8, u8);
|
||||
static void WindowFunc_DrawSignFrame(u8, u8, u8, u8, u8, u8);
|
||||
static inline void *GetWindowFunc_DialogueFrame(void);
|
||||
static void WindowFunc_DrawDialogueFrame(u8, u8, u8, u8, u8, u8);
|
||||
static void WindowFunc_ClearStdWindowAndFrame(u8, u8, u8, u8, u8, u8);
|
||||
static void WindowFunc_ClearDialogWindowAndFrame(u8, u8, u8, u8, u8, u8);
|
||||
@ -220,9 +217,123 @@ void LoadMessageBoxAndBorderGfx(void)
|
||||
LoadUserWindowBorderGfx(0, STD_WINDOW_BASE_TILE_NUM, BG_PLTT_ID(STD_WINDOW_PALETTE_NUM));
|
||||
}
|
||||
|
||||
void LoadSignPostWindowFrameGfx(void)
|
||||
{
|
||||
Menu_LoadStdPal();
|
||||
LoadSignBoxGfx(0, DLG_WINDOW_BASE_TILE_NUM, BG_PLTT_ID(DLG_WINDOW_PALETTE_NUM));
|
||||
LoadUserWindowBorderGfx(0, STD_WINDOW_BASE_TILE_NUM, BG_PLTT_ID(STD_WINDOW_PALETTE_NUM));
|
||||
}
|
||||
|
||||
static void WindowFunc_DrawSignFrame(u8 bg, u8 tilemapLeft, u8 tilemapTop, u8 width, u8 height, u8 paletteNum)
|
||||
{
|
||||
FillBgTilemapBufferRect(bg,
|
||||
DLG_WINDOW_BASE_TILE_NUM + 0,
|
||||
tilemapLeft - 2,
|
||||
tilemapTop - 1,
|
||||
1,
|
||||
1,
|
||||
DLG_WINDOW_PALETTE_NUM);
|
||||
FillBgTilemapBufferRect(bg,
|
||||
DLG_WINDOW_BASE_TILE_NUM + 1,
|
||||
tilemapLeft - 1,
|
||||
tilemapTop - 1,
|
||||
1,
|
||||
1,
|
||||
DLG_WINDOW_PALETTE_NUM);
|
||||
FillBgTilemapBufferRect(bg,
|
||||
DLG_WINDOW_BASE_TILE_NUM + 2,
|
||||
tilemapLeft - 2,
|
||||
tilemapTop,
|
||||
1,
|
||||
4,
|
||||
DLG_WINDOW_PALETTE_NUM);
|
||||
FillBgTilemapBufferRect(bg,
|
||||
DLG_WINDOW_BASE_TILE_NUM + 3,
|
||||
tilemapLeft - 1,
|
||||
tilemapTop,
|
||||
1,
|
||||
4,
|
||||
DLG_WINDOW_PALETTE_NUM);
|
||||
FillBgTilemapBufferRect(bg,
|
||||
BG_TILE_V_FLIP(DLG_WINDOW_BASE_TILE_NUM + 0),
|
||||
tilemapLeft - 2,
|
||||
tilemapTop + 4,
|
||||
1,
|
||||
1,
|
||||
DLG_WINDOW_PALETTE_NUM);
|
||||
FillBgTilemapBufferRect(bg,
|
||||
BG_TILE_V_FLIP(DLG_WINDOW_BASE_TILE_NUM + 1),
|
||||
tilemapLeft - 1,
|
||||
tilemapTop + 4,
|
||||
1,
|
||||
1,
|
||||
DLG_WINDOW_PALETTE_NUM);
|
||||
FillBgTilemapBufferRect(bg,
|
||||
DLG_WINDOW_BASE_TILE_NUM + 4,
|
||||
tilemapLeft,
|
||||
tilemapTop - 1,
|
||||
26,
|
||||
1,
|
||||
DLG_WINDOW_PALETTE_NUM);
|
||||
FillBgTilemapBufferRect(bg,
|
||||
BG_TILE_H_FLIP(DLG_WINDOW_BASE_TILE_NUM + 0),
|
||||
tilemapLeft + 27,
|
||||
tilemapTop - 1,
|
||||
1,
|
||||
1,
|
||||
DLG_WINDOW_PALETTE_NUM);
|
||||
FillBgTilemapBufferRect(bg,
|
||||
BG_TILE_H_FLIP(DLG_WINDOW_BASE_TILE_NUM + 1),
|
||||
tilemapLeft + 26,
|
||||
tilemapTop - 1,
|
||||
1,
|
||||
1,
|
||||
DLG_WINDOW_PALETTE_NUM);
|
||||
FillBgTilemapBufferRect(bg,
|
||||
BG_TILE_H_FLIP(DLG_WINDOW_BASE_TILE_NUM + 2),
|
||||
tilemapLeft + 27,
|
||||
tilemapTop,
|
||||
1,
|
||||
4,
|
||||
DLG_WINDOW_PALETTE_NUM);
|
||||
FillBgTilemapBufferRect(bg,
|
||||
BG_TILE_H_FLIP(DLG_WINDOW_BASE_TILE_NUM + 3),
|
||||
tilemapLeft + 26,
|
||||
tilemapTop,
|
||||
1,
|
||||
4,
|
||||
DLG_WINDOW_PALETTE_NUM);
|
||||
FillBgTilemapBufferRect(bg,
|
||||
BG_TILE_V_FLIP(BG_TILE_H_FLIP(DLG_WINDOW_BASE_TILE_NUM + 0)),
|
||||
tilemapLeft + 27,
|
||||
tilemapTop + 4,
|
||||
1,
|
||||
1,
|
||||
DLG_WINDOW_PALETTE_NUM);
|
||||
FillBgTilemapBufferRect(bg,
|
||||
BG_TILE_V_FLIP(BG_TILE_H_FLIP(DLG_WINDOW_BASE_TILE_NUM + 1)),
|
||||
tilemapLeft + 26,
|
||||
tilemapTop + 4,
|
||||
1,
|
||||
1,
|
||||
DLG_WINDOW_PALETTE_NUM);
|
||||
FillBgTilemapBufferRect(bg,
|
||||
BG_TILE_V_FLIP(DLG_WINDOW_BASE_TILE_NUM + 4),
|
||||
tilemapLeft,
|
||||
tilemapTop + 4,
|
||||
26,
|
||||
1,
|
||||
DLG_WINDOW_PALETTE_NUM);
|
||||
}
|
||||
|
||||
static inline void *GetWindowFunc_DialogueFrame(void)
|
||||
{
|
||||
return (gMsgIsSignPost ? WindowFunc_DrawSignFrame : WindowFunc_DrawDialogueFrame);
|
||||
}
|
||||
|
||||
void DrawDialogueFrame(u8 windowId, bool8 copyToVram)
|
||||
{
|
||||
CallWindowFunction(windowId, WindowFunc_DrawDialogueFrame);
|
||||
CallWindowFunction(windowId, GetWindowFunc_DialogueFrame());
|
||||
FillWindowPixelBuffer(windowId, PIXEL_FILL(1));
|
||||
PutWindowTilemap(windowId);
|
||||
if (copyToVram == TRUE)
|
||||
|
||||
@ -125,6 +125,9 @@ static const u8 sTileBitAttributes[NUM_METATILE_BEHAVIORS] =
|
||||
[MB_ISOLATED_HORIZONTAL_RAIL] = TILE_FLAG_UNUSED,
|
||||
[MB_VERTICAL_RAIL] = TILE_FLAG_UNUSED,
|
||||
[MB_HORIZONTAL_RAIL] = TILE_FLAG_UNUSED,
|
||||
[MB_SIGNPOST] = TILE_FLAG_UNUSED,
|
||||
[MB_POKEMON_CENTER_SIGN] = TILE_FLAG_UNUSED,
|
||||
[MB_POKEMART_SIGN] = TILE_FLAG_UNUSED,
|
||||
};
|
||||
|
||||
bool8 MetatileBehavior_IsATile(u8 metatileBehavior)
|
||||
@ -1443,3 +1446,18 @@ bool8 MetatileBehavior_IsDirectionalStairWarp(u8 metatileBehavior)
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool8 MetatileBehavior_IsSignpost(u32 metatileBehavior)
|
||||
{
|
||||
return (metatileBehavior == MB_SIGNPOST);
|
||||
}
|
||||
|
||||
bool8 MetatileBehavior_IsPokemonCenterSign(u32 metatileBehavior)
|
||||
{
|
||||
return (metatileBehavior == MB_POKEMON_CENTER_SIGN);
|
||||
}
|
||||
|
||||
bool8 MetatileBehavior_IsPokeMartSign(u32 metatileBehavior)
|
||||
{
|
||||
return (metatileBehavior == MB_POKEMART_SIGN);
|
||||
}
|
||||
|
||||
@ -1508,6 +1508,7 @@ static void DoCB1_Overworld(u16 newKeys, u16 heldKeys)
|
||||
UpdatePlayerAvatarTransitionState();
|
||||
FieldClearPlayerInput(&inputStruct);
|
||||
FieldGetPlayerInput(&inputStruct, newKeys, heldKeys);
|
||||
CancelSignPostMessageBox(&inputStruct);
|
||||
if (!ArePlayerFieldControlsLocked())
|
||||
{
|
||||
if (ProcessPlayerFieldInput(&inputStruct) == 1)
|
||||
|
||||
@ -1571,12 +1571,8 @@ void FreeBallGfx(u8 ballId)
|
||||
|
||||
static u16 GetBattlerPokeballItemId(u8 battlerId)
|
||||
{
|
||||
struct Pokemon *mon, *illusionMon;
|
||||
|
||||
if (GetBattlerSide(battlerId) == B_SIDE_PLAYER)
|
||||
mon = &gPlayerParty[gBattlerPartyIndexes[battlerId]];
|
||||
else
|
||||
mon = &gEnemyParty[gBattlerPartyIndexes[battlerId]];
|
||||
struct Pokemon *illusionMon;
|
||||
struct Pokemon *mon = GetPartyBattlerData(battlerId);
|
||||
|
||||
illusionMon = GetIllusionMonPtr(battlerId);
|
||||
if (illusionMon != NULL)
|
||||
|
||||
@ -130,6 +130,11 @@ static void ReturnToPokeblockCaseOnField(void);
|
||||
static void CreateTossPokeblockYesNoMenu(u8);
|
||||
static void TossPokeblock(u8);
|
||||
|
||||
static const u8 sText_StowCase[] = _("Stow CASE.");
|
||||
static const u8 sText_LvVar1[] = _("{LV}{STR_VAR_1}");
|
||||
static const u8 sText_ThrowAwayVar1[] = _("Throw away this\n{STR_VAR_1}?");
|
||||
static const u8 sText_Var1ThrownAway[] = _("The {STR_VAR_1}\nwas thrown away.");
|
||||
|
||||
EWRAM_DATA static struct PokeblockSavedData sSavedPokeblockData = {0};
|
||||
EWRAM_DATA static struct PokeblockMenuStruct *sPokeblockMenu = NULL;
|
||||
|
||||
@ -197,20 +202,20 @@ static const struct BgTemplate sBgTemplatesForPokeblockMenu[] =
|
||||
const u8 *const gPokeblockNames[] =
|
||||
{
|
||||
[PBLOCK_CLR_NONE] = NULL,
|
||||
[PBLOCK_CLR_RED] = gText_RedPokeblock,
|
||||
[PBLOCK_CLR_BLUE] = gText_BluePokeblock,
|
||||
[PBLOCK_CLR_PINK] = gText_PinkPokeblock,
|
||||
[PBLOCK_CLR_GREEN] = gText_GreenPokeblock,
|
||||
[PBLOCK_CLR_YELLOW] = gText_YellowPokeblock,
|
||||
[PBLOCK_CLR_PURPLE] = gText_PurplePokeblock,
|
||||
[PBLOCK_CLR_INDIGO] = gText_IndigoPokeblock,
|
||||
[PBLOCK_CLR_BROWN] = gText_BrownPokeblock,
|
||||
[PBLOCK_CLR_LITE_BLUE] = gText_LiteBluePokeblock,
|
||||
[PBLOCK_CLR_OLIVE] = gText_OlivePokeblock,
|
||||
[PBLOCK_CLR_GRAY] = gText_GrayPokeblock,
|
||||
[PBLOCK_CLR_BLACK] = gText_BlackPokeblock,
|
||||
[PBLOCK_CLR_WHITE] = gText_WhitePokeblock,
|
||||
[PBLOCK_CLR_GOLD] = gText_GoldPokeblock
|
||||
[PBLOCK_CLR_RED] = COMPOUND_STRING("RED {POKEBLOCK}"),
|
||||
[PBLOCK_CLR_BLUE] = COMPOUND_STRING("BLUE {POKEBLOCK}"),
|
||||
[PBLOCK_CLR_PINK] = COMPOUND_STRING("PINK {POKEBLOCK}"),
|
||||
[PBLOCK_CLR_GREEN] = COMPOUND_STRING("GREEN {POKEBLOCK}"),
|
||||
[PBLOCK_CLR_YELLOW] = COMPOUND_STRING("YELLOW {POKEBLOCK}"),
|
||||
[PBLOCK_CLR_PURPLE] = COMPOUND_STRING("PURPLE {POKEBLOCK}"),
|
||||
[PBLOCK_CLR_INDIGO] = COMPOUND_STRING("INDIGO {POKEBLOCK}"),
|
||||
[PBLOCK_CLR_BROWN] = COMPOUND_STRING("BROWN {POKEBLOCK}"),
|
||||
[PBLOCK_CLR_LITE_BLUE] = COMPOUND_STRING("LITEBLUE {POKEBLOCK}"),
|
||||
[PBLOCK_CLR_OLIVE] = COMPOUND_STRING("OLIVE {POKEBLOCK}"),
|
||||
[PBLOCK_CLR_GRAY] = COMPOUND_STRING("GRAY {POKEBLOCK}"),
|
||||
[PBLOCK_CLR_BLACK] = COMPOUND_STRING("BLACK {POKEBLOCK}"),
|
||||
[PBLOCK_CLR_WHITE] = COMPOUND_STRING("WHITE {POKEBLOCK}"),
|
||||
[PBLOCK_CLR_GOLD] = COMPOUND_STRING("GOLD {POKEBLOCK}")
|
||||
};
|
||||
|
||||
static const struct MenuAction sPokeblockMenuActions[] =
|
||||
@ -702,11 +707,11 @@ static void DrawPokeblockMenuTitleText(void)
|
||||
const u8 *itemName = ItemId_GetName(ITEM_POKEBLOCK_CASE);
|
||||
PrintOnPokeblockWindow(WIN_TITLE, itemName, GetStringCenterAlignXOffset(FONT_NORMAL, itemName, 0x48));
|
||||
|
||||
PrintOnPokeblockWindow(WIN_SPICY, gText_Spicy, 0);
|
||||
PrintOnPokeblockWindow(WIN_DRY, gText_Dry, 0);
|
||||
PrintOnPokeblockWindow(WIN_SWEET, gText_Sweet, 0);
|
||||
PrintOnPokeblockWindow(WIN_BITTER, gText_Bitter, 0);
|
||||
PrintOnPokeblockWindow(WIN_SOUR, gText_Sour, 0);
|
||||
PrintOnPokeblockWindow(WIN_SPICY, COMPOUND_STRING("SPICY"), 0);
|
||||
PrintOnPokeblockWindow(WIN_DRY, COMPOUND_STRING("DRY"), 0);
|
||||
PrintOnPokeblockWindow(WIN_SWEET, COMPOUND_STRING("SWEET"), 0);
|
||||
PrintOnPokeblockWindow(WIN_BITTER, COMPOUND_STRING("BITTER"), 0);
|
||||
PrintOnPokeblockWindow(WIN_SOUR, COMPOUND_STRING("SOUR"), 0);
|
||||
|
||||
for (i = 0; i < WIN_ACTIONS_TALL; i++)
|
||||
PutWindowTilemap(i);
|
||||
@ -723,7 +728,7 @@ static void UpdatePokeblockList(void)
|
||||
sPokeblockMenu->items[i].id = i;
|
||||
}
|
||||
|
||||
StringCopy(sPokeblockMenu->menuItemsStrings[i], gText_StowCase);
|
||||
StringCopy(sPokeblockMenu->menuItemsStrings[i], sText_StowCase);
|
||||
sPokeblockMenu->items[i].name = sPokeblockMenu->menuItemsStrings[i];
|
||||
sPokeblockMenu->items[i].id = LIST_CANCEL;
|
||||
|
||||
@ -744,7 +749,7 @@ static void PutPokeblockListMenuString(u8 *dst, u16 pkblId)
|
||||
*(txtPtr++) = CHAR_BLOCK_1;
|
||||
|
||||
ConvertIntToDecimalStringN(gStringVar1, GetHighestPokeblocksFlavorLevel(pkblock), STR_CONV_MODE_LEFT_ALIGN, 3);
|
||||
StringExpandPlaceholders(txtPtr, gText_LvVar1);
|
||||
StringExpandPlaceholders(txtPtr, sText_LvVar1);
|
||||
}
|
||||
|
||||
static void MovePokeblockMenuCursor(s32 pkblId, bool8 onInit, struct ListMenu *list)
|
||||
@ -1203,7 +1208,7 @@ static void PokeblockAction_Toss(u8 taskId)
|
||||
|
||||
ClearStdWindowAndFrameToTransparent(tWindowId, FALSE);
|
||||
StringCopy(gStringVar1, gPokeblockNames[gSaveBlock1Ptr->pokeblocks[gSpecialVar_ItemId].color]);
|
||||
StringExpandPlaceholders(gStringVar4, gText_ThrowAwayVar1);
|
||||
StringExpandPlaceholders(gStringVar4, sText_ThrowAwayVar1);
|
||||
DisplayMessageAndContinueTask(taskId, WIN_TOSS_MSG, 10, 13, FONT_NORMAL, GetPlayerTextSpeedDelay(), gStringVar4, CreateTossPokeblockYesNoMenu);
|
||||
}
|
||||
|
||||
@ -1214,7 +1219,7 @@ static void CreateTossPokeblockYesNoMenu(u8 taskId)
|
||||
|
||||
static void TossedPokeblockMessage(u8 taskId)
|
||||
{
|
||||
StringExpandPlaceholders(gStringVar4, gText_Var1ThrownAway);
|
||||
StringExpandPlaceholders(gStringVar4, sText_Var1ThrownAway);
|
||||
DisplayMessageAndContinueTask(taskId, WIN_TOSS_MSG, 10, 13, FONT_NORMAL, GetPlayerTextSpeedDelay(), gStringVar4, TossPokeblock);
|
||||
}
|
||||
|
||||
|
||||
@ -96,6 +96,10 @@ static u8 CreatePokeblockCaseSpriteForFeeding(void);
|
||||
static u8 CreateMonSprite(struct Pokemon *);
|
||||
static void SpriteCB_ThrownPokeblock(struct Sprite *);
|
||||
|
||||
static const u8 sText_Var1AteTheVar2[] = _("{STR_VAR_1} ate the\n{STR_VAR_2}.{PAUSE_UNTIL_PRESS}");
|
||||
static const u8 sText_Var1HappilyAteVar2[] = _("{STR_VAR_1} happily ate the\n{STR_VAR_2}.{PAUSE_UNTIL_PRESS}");
|
||||
static const u8 sText_Var1DisdainfullyAteVar2[] = _("{STR_VAR_1} disdainfully ate the\n{STR_VAR_2}.{PAUSE_UNTIL_PRESS}");
|
||||
|
||||
EWRAM_DATA static struct PokeblockFeed *sPokeblockFeed = NULL;
|
||||
EWRAM_DATA static struct CompressedSpritePalette sPokeblockSpritePal = {0};
|
||||
|
||||
@ -792,11 +796,11 @@ static void Task_PrintAtePokeblockMessage(u8 taskId)
|
||||
PokeblockCopyName(pokeblock, gStringVar2);
|
||||
|
||||
if (gPokeblockGain == 0)
|
||||
StringExpandPlaceholders(gStringVar4, gText_Var1AteTheVar2);
|
||||
StringExpandPlaceholders(gStringVar4, sText_Var1AteTheVar2);
|
||||
else if (gPokeblockGain > 0)
|
||||
StringExpandPlaceholders(gStringVar4, gText_Var1HappilyAteVar2);
|
||||
StringExpandPlaceholders(gStringVar4, sText_Var1HappilyAteVar2);
|
||||
else
|
||||
StringExpandPlaceholders(gStringVar4, gText_Var1DisdainfullyAteVar2);
|
||||
StringExpandPlaceholders(gStringVar4, sText_Var1DisdainfullyAteVar2);
|
||||
|
||||
gTextFlags.canABSpeedUpPrint = TRUE;
|
||||
AddTextPrinterParameterized2(0, FONT_NORMAL, gStringVar4, GetPlayerTextSpeedDelay(), NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
|
||||
|
||||
@ -1800,29 +1800,19 @@ void CalculateMonStats(struct Pokemon *mon)
|
||||
CALC_STAT(baseSpAttack, spAttackIV, spAttackEV, STAT_SPATK, MON_DATA_SPATK)
|
||||
CALC_STAT(baseSpDefense, spDefenseIV, spDefenseEV, STAT_SPDEF, MON_DATA_SPDEF)
|
||||
|
||||
if (species == SPECIES_SHEDINJA)
|
||||
{
|
||||
if (currentHP != 0 || oldMaxHP == 0)
|
||||
currentHP = 1;
|
||||
else
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (currentHP == 0 && oldMaxHP == 0)
|
||||
currentHP = newMaxHP;
|
||||
else if (currentHP != 0)
|
||||
{
|
||||
if (newMaxHP > oldMaxHP)
|
||||
currentHP += newMaxHP - oldMaxHP;
|
||||
if (currentHP <= 0)
|
||||
currentHP = 1;
|
||||
if (currentHP > newMaxHP)
|
||||
currentHP = newMaxHP;
|
||||
}
|
||||
else
|
||||
return;
|
||||
}
|
||||
// Since a pokemon's maxHP data could either not have
|
||||
// been initialized at this point or this pokemon is
|
||||
// just fainted, the check for oldMaxHP is important.
|
||||
if (currentHP == 0 && oldMaxHP != 0)
|
||||
return;
|
||||
|
||||
// Only add to currentHP if newMaxHP went up.
|
||||
if (newMaxHP > oldMaxHP)
|
||||
currentHP += newMaxHP - oldMaxHP;
|
||||
|
||||
// Ensure currentHP does not surpass newMaxHP.
|
||||
if (currentHP > newMaxHP)
|
||||
currentHP = newMaxHP;
|
||||
|
||||
SetMonData(mon, MON_DATA_HP, ¤tHP);
|
||||
}
|
||||
|
||||
@ -1291,6 +1291,7 @@ bool8 ScrCmd_releaseall(struct ScriptContext *ctx)
|
||||
ObjectEventClearHeldMovementIfFinished(&gObjectEvents[playerObjectId]);
|
||||
ScriptMovement_UnfreezeObjectEvents();
|
||||
UnfreezeObjectEvents();
|
||||
gMsgBoxIsCancelable = FALSE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@ -1309,6 +1310,7 @@ bool8 ScrCmd_release(struct ScriptContext *ctx)
|
||||
ObjectEventClearHeldMovementIfFinished(&gObjectEvents[playerObjectId]);
|
||||
ScriptMovement_UnfreezeObjectEvents();
|
||||
UnfreezeObjectEvents();
|
||||
gMsgBoxIsCancelable = FALSE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
@ -5,6 +5,7 @@
|
||||
#include "util.h"
|
||||
#include "constants/event_objects.h"
|
||||
#include "constants/map_scripts.h"
|
||||
#include "field_message_box.h"
|
||||
|
||||
#define RAM_SCRIPT_MAGIC 51
|
||||
|
||||
@ -26,6 +27,8 @@ static u8 sGlobalScriptContextStatus;
|
||||
static struct ScriptContext sGlobalScriptContext;
|
||||
static struct ScriptContext sImmediateScriptContext;
|
||||
static bool8 sLockFieldControls;
|
||||
EWRAM_DATA u8 gMsgIsSignPost = FALSE;
|
||||
EWRAM_DATA u8 gMsgBoxIsCancelable = FALSE;
|
||||
|
||||
extern ScrCmdFunc gScriptCmdTable[];
|
||||
extern ScrCmdFunc gScriptCmdTableEnd[];
|
||||
|
||||
@ -141,7 +141,6 @@ const u8 gText_Store[] = _("STORE");
|
||||
const u8 gMenuText_Check[] = _("CHECK");
|
||||
const u8 gText_None[] = _("NONE");
|
||||
const u8 gMenuText_Deselect[] = _("DESELECT");
|
||||
const u8 gText_ThreeMarks[] = _("???");
|
||||
const u8 gText_FiveMarks[] = _("?????");
|
||||
const u8 gText_Slash[] = _("/");
|
||||
const u8 gText_OneDash[] = _("-");
|
||||
@ -224,64 +223,19 @@ const u8 *const gPyramidBagMenu_ReturnToStrings[] =
|
||||
};
|
||||
|
||||
const u8 gText_ReturnToVar1[] = _("Return to\n{STR_VAR_1}.");
|
||||
const u8 gText_ItemsPocket[] = _("ITEMS");
|
||||
const u8 gText_PokeBallsPocket[] = _("POKé BALLS");
|
||||
const u8 gText_TMHMPocket[] = _("TMs & HMs");
|
||||
const u8 gText_BerriesPocket[] = _("BERRIES");
|
||||
const u8 gText_KeyItemsPocket[] = _("KEY ITEMS");
|
||||
|
||||
const u8 *const gPocketNamesStringsTable[] =
|
||||
{
|
||||
[ITEMS_POCKET] = gText_ItemsPocket,
|
||||
[BALLS_POCKET] = gText_PokeBallsPocket,
|
||||
[TMHM_POCKET] = gText_TMHMPocket,
|
||||
[BERRIES_POCKET] = gText_BerriesPocket,
|
||||
[KEYITEMS_POCKET] = gText_KeyItemsPocket
|
||||
[ITEMS_POCKET] = COMPOUND_STRING("ITEMS"),
|
||||
[BALLS_POCKET] = COMPOUND_STRING("POKé BALLS"),
|
||||
[TMHM_POCKET] = COMPOUND_STRING("TMs & HMs"),
|
||||
[BERRIES_POCKET] = COMPOUND_STRING("BERRIES"),
|
||||
[KEYITEMS_POCKET] = COMPOUND_STRING("KEY ITEMS")
|
||||
};
|
||||
|
||||
const u8 gText_NumberItem_TMBerry[] = _("{NO}{STR_VAR_1}{CLEAR 0x07}{STR_VAR_2}");
|
||||
const u8 gText_NumberItem_HM[] = _("{CLEAR_TO 0x11}{STR_VAR_1}{CLEAR 0x05}{STR_VAR_2}");
|
||||
const u8 gText_SizeSlash[] = _("SIZE /");
|
||||
const u8 gText_FirmSlash[] = _("FIRM /");
|
||||
const u8 gText_Var1DotVar2[] = _("{STR_VAR_1}.{STR_VAR_2}”");
|
||||
|
||||
// Berry firmness strings
|
||||
const u8 gBerryFirmnessString_VerySoft[] = _("Very soft");
|
||||
const u8 gBerryFirmnessString_Soft[] = _("Soft");
|
||||
const u8 gBerryFirmnessString_Hard[] = _("Hard");
|
||||
const u8 gBerryFirmnessString_VeryHard[] = _("Very hard");
|
||||
const u8 gBerryFirmnessString_SuperHard[] = _("Super hard");
|
||||
|
||||
const u8 gText_NumberVar1Var2[] = _("{NO}{STR_VAR_1} {STR_VAR_2}");
|
||||
const u8 gText_BerryTag[] = _("BERRY TAG");
|
||||
const u8 gText_RedPokeblock[] = _("RED {POKEBLOCK}");
|
||||
const u8 gText_BluePokeblock[] = _("BLUE {POKEBLOCK}");
|
||||
const u8 gText_PinkPokeblock[] = _("PINK {POKEBLOCK}");
|
||||
const u8 gText_GreenPokeblock[] = _("GREEN {POKEBLOCK}");
|
||||
const u8 gText_YellowPokeblock[] = _("YELLOW {POKEBLOCK}");
|
||||
const u8 gText_PurplePokeblock[] = _("PURPLE {POKEBLOCK}");
|
||||
const u8 gText_IndigoPokeblock[] = _("INDIGO {POKEBLOCK}");
|
||||
const u8 gText_BrownPokeblock[] = _("BROWN {POKEBLOCK}");
|
||||
const u8 gText_LiteBluePokeblock[] = _("LITEBLUE {POKEBLOCK}");
|
||||
const u8 gText_OlivePokeblock[] = _("OLIVE {POKEBLOCK}");
|
||||
const u8 gText_GrayPokeblock[] = _("GRAY {POKEBLOCK}");
|
||||
const u8 gText_BlackPokeblock[] = _("BLACK {POKEBLOCK}");
|
||||
const u8 gText_WhitePokeblock[] = _("WHITE {POKEBLOCK}");
|
||||
const u8 gText_GoldPokeblock[] = _("GOLD {POKEBLOCK}");
|
||||
const u8 gText_Spicy[] = _("SPICY");
|
||||
const u8 gText_Dry[] = _("DRY");
|
||||
const u8 gText_Sweet[] = _("SWEET");
|
||||
const u8 gText_Bitter[] = _("BITTER");
|
||||
const u8 gText_Sour[] = _("SOUR");
|
||||
const u8 gText_Tasty[] = _("TASTY"); // Unused
|
||||
const u8 gText_Feel[] = _("FEEL"); // Unused
|
||||
const u8 gText_StowCase[] = _("Stow CASE.");
|
||||
const u8 gText_LvVar1[] = _("{LV}{STR_VAR_1}");
|
||||
const u8 gText_ThrowAwayVar1[] = _("Throw away this\n{STR_VAR_1}?");
|
||||
const u8 gText_Var1ThrownAway[] = _("The {STR_VAR_1}\nwas thrown away.");
|
||||
const u8 gText_Var1AteTheVar2[] = _("{STR_VAR_1} ate the\n{STR_VAR_2}.{PAUSE_UNTIL_PRESS}");
|
||||
const u8 gText_Var1HappilyAteVar2[] = _("{STR_VAR_1} happily ate the\n{STR_VAR_2}.{PAUSE_UNTIL_PRESS}");
|
||||
const u8 gText_Var1DisdainfullyAteVar2[] = _("{STR_VAR_1} disdainfully ate the\n{STR_VAR_2}.{PAUSE_UNTIL_PRESS}");
|
||||
const u8 gText_ShopBuy[] = _("BUY");
|
||||
const u8 gText_ShopSell[] = _("SELL");
|
||||
const u8 gText_ShopQuit[] = _("QUIT");
|
||||
|
||||
@ -5,6 +5,7 @@
|
||||
#include "palette.h"
|
||||
#include "bg.h"
|
||||
#include "graphics.h"
|
||||
#include "menu.h"
|
||||
|
||||
const u8 gTextWindowFrame1_Gfx[] = INCBIN_U8("graphics/text_window/1.4bpp");
|
||||
static const u8 sTextWindowFrame2_Gfx[] = INCBIN_U8("graphics/text_window/2.4bpp");
|
||||
@ -96,6 +97,12 @@ void LoadMessageBoxGfx(u8 windowId, u16 destOffset, u8 palOffset)
|
||||
LoadPalette(GetOverworldTextboxPalettePtr(), palOffset, PLTT_SIZE_4BPP);
|
||||
}
|
||||
|
||||
void LoadSignBoxGfx(u8 windowId, u16 destOffset, u8 palOffset)
|
||||
{
|
||||
LoadBgTiles(GetWindowAttribute(windowId, WINDOW_BG), gSignpostWindow_Gfx, 0x1C0, destOffset);
|
||||
LoadPalette(GetTextWindowPalette(1), palOffset, PLTT_SIZE_4BPP);
|
||||
}
|
||||
|
||||
void LoadUserWindowBorderGfx_(u8 windowId, u16 destOffset, u8 palOffset)
|
||||
{
|
||||
LoadUserWindowBorderGfx(windowId, destOffset, palOffset);
|
||||
|
||||
@ -291,7 +291,7 @@ static bool32 UseDoubleBattleCoords(u32 position)
|
||||
|
||||
static u32 GetMonPublicType(u32 battlerId, u32 typeNum)
|
||||
{
|
||||
struct Pokemon* mon = GetBattlerData(battlerId);
|
||||
struct Pokemon* mon = GetPartyBattlerData(battlerId);
|
||||
u32 monSpecies = GetMonData(mon,MON_DATA_SPECIES,NULL);
|
||||
struct Pokemon* monIllusion;
|
||||
u32 illusionSpecies;
|
||||
|
||||
@ -383,3 +383,21 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes everything it can"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Defog is used on the correct side if opposing mon is behind a substitute with Screen up")
|
||||
{
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN { MOVE(opponent, MOVE_LIGHT_SCREEN); }
|
||||
TURN { MOVE(opponent, MOVE_SUBSTITUTE); MOVE(player, MOVE_DEFOG); }
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_LIGHT_SCREEN, opponent);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_SUBSTITUTE, opponent);
|
||||
MESSAGE("Wobbuffet used Defog!");
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_DEFOG, player);
|
||||
MESSAGE("Foe Wobbuffet's evasiveness fell!");
|
||||
MESSAGE("Foe's Light Screen wore off!");
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user