From b4792d3f7e3149d2d30e6560db590aa844cea366 Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Thu, 25 Jul 2024 14:06:02 -0500 Subject: [PATCH 1/4] Add Axe Kick animation --- data/battle_anim_scripts.s | 22 ++++++++++++++++++---- src/battle_anim_new.c | 11 +++++++++++ 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index aa62732c7d..6bcf1271ec 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -17423,7 +17423,7 @@ Move_LAST_RESPECTS:: restorebg waitbgfadein end - + Move_TIDY_UP:: loadspritegfx ANIM_TAG_PINK_CLOUD monbg ANIM_ATTACKER @@ -17444,7 +17444,7 @@ Move_TIDY_UP:: clearmonbg ANIM_ATTACKER blendoff end - + Move_KOWTOW_CLEAVE:: loadspritegfx ANIM_TAG_SLASH loadspritegfx ANIM_TAG_CROSS_IMPACT @@ -17738,7 +17738,7 @@ Move_HYDRO_STEAM:: createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 3, 9, 0, RGB_RED waitforvisualfinish end - + Move_POUNCE:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET @@ -17844,8 +17844,22 @@ ElectroShotUnleash: blendoff end -Move_TERA_BLAST:: Move_AXE_KICK:: + loadspritegfx ANIM_TAG_HANDS_AND_FEET + loadspritegfx ANIM_TAG_IMPACT + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 20, 0, 0, 4 + delay 0x7 + createsprite gAxeKickSpriteTemplate, ANIM_TARGET, 3 + delay 0x2 + playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 1, 0, 0, ANIM_TARGET, 1 + createvisualtask AnimTask_SquishTarget, 0x2 + waitforvisualfinish + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 1, 4 + end + +Move_TERA_BLAST:: Move_ORDER_UP:: Move_SPICY_EXTRACT:: Move_SPIN_OUT:: diff --git a/src/battle_anim_new.c b/src/battle_anim_new.c index fed928e747..24ccaa2983 100644 --- a/src/battle_anim_new.c +++ b/src/battle_anim_new.c @@ -4771,6 +4771,17 @@ const struct SpriteTemplate gUltraBurstSymbolSpriteTemplate = .callback = AnimSpriteOnMonPos }; +const struct SpriteTemplate gAxeKickSpriteTemplate = +{ + .tileTag = ANIM_TAG_HANDS_AND_FEET, + .paletteTag = ANIM_TAG_HANDS_AND_FEET, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = &gAnims_HandsAndFeet[2], + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimBounceBallLand, +}; + // Z MOVES //activate const struct SpriteTemplate gZMoveSymbolSpriteTemplate = From 9979fe01ac226c9a4fc1143493db91b56f24bc75 Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Sun, 28 Jul 2024 11:47:49 -0500 Subject: [PATCH 2/4] Update battle_anim_scripts.s --- data/battle_anim_scripts.s | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index 0947c39d1c..1f83317c9e 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -17902,12 +17902,12 @@ Move_AXE_KICK:: loadspritegfx ANIM_TAG_IMPACT playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 20, 0, 0, 4 - delay 0x7 + delay 7 createsprite gAxeKickSpriteTemplate, ANIM_TARGET, 3 - delay 0x2 + delay 2 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 1, 0, 0, ANIM_TARGET, 1 - createvisualtask AnimTask_SquishTarget, 0x2 + createvisualtask AnimTask_SquishTarget, 2 waitforvisualfinish createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 1, 4 end From 904d59220dfc2e49ea4e3023bf71b10087fb77cb Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Sun, 28 Jul 2024 11:55:57 -0500 Subject: [PATCH 3/4] Shorten squish anim --- data/battle_anim_scripts.s | 24 ++++++++++++------------ src/battle_anim_new.c | 17 +++++++++++++++++ 2 files changed, 29 insertions(+), 12 deletions(-) diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index 1f83317c9e..45a957100e 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -17845,15 +17845,15 @@ ElectroShotUnleash: end Move_IVY_CUDGEL:: - loadspritegfx ANIM_TAG_IVY_CUDGEL_GRASS + loadspritegfx ANIM_TAG_IVY_CUDGEL_GRASS loadspritegfx ANIM_TAG_WOOD_HAMMER loadspritegfx ANIM_TAG_WOOD_HAMMER_HAMMER loadspritegfx ANIM_TAG_IMPACT playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 12, 4, 2, 4 - jumpifmovetypeequal TYPE_FIRE, IvyCudgelFire - jumpifmovetypeequal TYPE_ROCK, IvyCudgelRock - jumpifmovetypeequal TYPE_WATER, IvyCudgelWater + jumpifmovetypeequal TYPE_FIRE, IvyCudgelFire + jumpifmovetypeequal TYPE_ROCK, IvyCudgelRock + jumpifmovetypeequal TYPE_WATER, IvyCudgelWater createsprite gIvyCudgelSpriteTemplate, ANIM_TARGET, 2 delay 60 createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_ATTACKER, 3, 0, 12, 4 @@ -17862,9 +17862,9 @@ Move_IVY_CUDGEL:: delay 6 call WoodHammerImpact waitforvisualfinish - end + end IvyCudgelFire: - loadspritegfx ANIM_TAG_IVY_CUDGEL_FIRE + loadspritegfx ANIM_TAG_IVY_CUDGEL_FIRE createsprite gIvyCudgelFireSpriteTemplate, ANIM_TARGET, 2 delay 60 createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_ATTACKER, 3, 0, 12, 4 @@ -17873,9 +17873,9 @@ IvyCudgelFire: delay 6 call WoodHammerImpact waitforvisualfinish - end + end IvyCudgelRock: - loadspritegfx ANIM_TAG_IVY_CUDGEL_ROCK + loadspritegfx ANIM_TAG_IVY_CUDGEL_ROCK createsprite gIvyCudgelRockSpriteTemplate, ANIM_TARGET, 2 delay 60 createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_ATTACKER, 3, 0, 12, 4 @@ -17884,9 +17884,9 @@ IvyCudgelRock: delay 6 call WoodHammerImpact waitforvisualfinish - end + end IvyCudgelWater: - loadspritegfx ANIM_TAG_IVY_CUDGEL_WATER + loadspritegfx ANIM_TAG_IVY_CUDGEL_WATER createsprite gIvyCudgelWaterSpriteTemplate, ANIM_TARGET, 2 delay 60 createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_ATTACKER, 3, 0, 12, 4 @@ -17895,7 +17895,7 @@ IvyCudgelWater: delay 6 call WoodHammerImpact waitforvisualfinish - end + end Move_AXE_KICK:: loadspritegfx ANIM_TAG_HANDS_AND_FEET @@ -17907,7 +17907,7 @@ Move_AXE_KICK:: delay 2 playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 1, 0, 0, ANIM_TARGET, 1 - createvisualtask AnimTask_SquishTarget, 2 + createvisualtask AnimTask_SquishTargetShort, 2 waitforvisualfinish createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 1, 4 end diff --git a/src/battle_anim_new.c b/src/battle_anim_new.c index 24ccaa2983..a4dce6aa0d 100644 --- a/src/battle_anim_new.c +++ b/src/battle_anim_new.c @@ -110,6 +110,14 @@ static const union AffineAnimCmd sSquishTargetAffineAnimCmds[] = AFFINEANIMCMD_END, }; +static const union AffineAnimCmd sSquishTargetShortAffineAnimCmds[] = +{ + AFFINEANIMCMD_FRAME(0, 64, 0, 4), //Flatten + AFFINEANIMCMD_FRAME(0, 0, 0, 16), + AFFINEANIMCMD_FRAME(0, -64, 0, 4), + AFFINEANIMCMD_END, +}; + // GEN 4 // shadow sneak const struct SpriteTemplate gShadowSneakImpactSpriteTemplate = @@ -8525,6 +8533,15 @@ void AnimTask_SquishTarget(u8 taskId) task->func = AnimTask_WaitAffineAnim; } +void AnimTask_SquishTargetShort(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + u8 spriteId = GetAnimBattlerSpriteId(ANIM_TARGET); + + PrepareAffineAnimInTaskData(task, spriteId, sSquishTargetShortAffineAnimCmds); + task->func = AnimTask_WaitAffineAnim; +} + void CoreEnforcerLoadBeamTarget(struct Sprite *sprite) { sprite->data[0] = gBattleAnimArgs[2]; From a89820fa960f64f114b5f5606e2eacec600b3873 Mon Sep 17 00:00:00 2001 From: hedara90 <90hedara@gmail.com> Date: Mon, 29 Jul 2024 13:45:14 +0200 Subject: [PATCH 4/4] Fixed Hidden Power damage category for PSS < GEN_4 (#5053) * Fixed Hidden Power damage category for PSS < GEN_4 * Fixed category display regression * Wrapped GET_MOVE_TYPE --------- Co-authored-by: Hedara --- include/battle.h | 7 +++---- src/battle_util.c | 8 +++++--- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/include/battle.h b/include/battle.h index 73ae60831f..19a7ca2425 100644 --- a/include/battle.h +++ b/include/battle.h @@ -795,13 +795,12 @@ STATIC_ASSERT(sizeof(((struct BattleStruct *)0)->palaceFlags) * 8 >= MAX_BATTLER #define F_DYNAMIC_TYPE_IGNORE_PHYSICALITY (1 << 6) // If set, the dynamic type's physicality won't be used for certain move effects. #define F_DYNAMIC_TYPE_SET (1 << 7) // Set for all dynamic types to distinguish a dynamic type of Normal (0) from no dynamic type. -#define GET_MOVE_TYPE(move, typeArg) \ -{ \ +#define GET_MOVE_TYPE(move, typeArg) do { \ if (gBattleStruct->dynamicMoveType) \ typeArg = gBattleStruct->dynamicMoveType & DYNAMIC_TYPE_MASK; \ else \ - typeArg = gMovesInfo[move].type; \ -} + typeArg = gMovesInfo[move].type; \ +} while(0) #define IS_MOVE_PHYSICAL(move)(GetBattleMoveCategory(move) == DAMAGE_CATEGORY_PHYSICAL) #define IS_MOVE_SPECIAL(move)(GetBattleMoveCategory(move) == DAMAGE_CATEGORY_SPECIAL) diff --git a/src/battle_util.c b/src/battle_util.c index e87fa9f368..0ec40fb14f 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -10828,6 +10828,7 @@ bool32 ShouldGetStatBadgeBoost(u16 badgeFlag, u32 battler) u8 GetBattleMoveCategory(u32 moveId) { + u8 moveType; if (gBattleStruct != NULL && gBattleStruct->zmove.active && !IS_MOVE_STATUS(moveId)) return gBattleStruct->zmove.activeCategory; if (gBattleStruct != NULL && IsMaxMove(moveId)) // TODO: Might be buggy depending on when this is called. @@ -10839,10 +10840,11 @@ u8 GetBattleMoveCategory(u32 moveId) if (IS_MOVE_STATUS(moveId)) return DAMAGE_CATEGORY_STATUS; - else if (gMovesInfo[moveId].type < TYPE_MYSTERY) - return DAMAGE_CATEGORY_PHYSICAL; + else if (gMain.inBattle) + GET_MOVE_TYPE(moveId, moveType); else - return DAMAGE_CATEGORY_SPECIAL; + moveType = gMovesInfo[moveId].type; + return moveType < TYPE_MYSTERY ? DAMAGE_CATEGORY_PHYSICAL : DAMAGE_CATEGORY_SPECIAL; } static bool32 TryRemoveScreens(u32 battler)