Anims for Uppercut, Coin Hurl, and Strong Arm

Uppercut reimagines KEP's clusterfuck of an animation, reversing Karate Chop and then reworking the sounds

Coin Hurl works like the Poke Ball toss, and then spits out coins on-hit. Looks sort of like Acid in practice. This was weirdly complicated to implement as I had to disentangle the throw animation from the Poke Ball toss in Game Freak fashion.

Strong Arm does the "metal" starting animation, then does its best Rollout into DynamicPunch impression.
This commit is contained in:
Llinos Evans 2024-08-26 23:39:23 +01:00
parent 6919fa5fe3
commit 1f0cc46814
5 changed files with 97 additions and 9 deletions

View file

@ -218,6 +218,7 @@ DEF BATTLEANIM_BASE_TILE EQU 7 * 7 ; Maximum size of a pokemon picture
const ANIM_OBJ_PLAYERHEAD_1ROW const ANIM_OBJ_PLAYERHEAD_1ROW
const ANIM_OBJ_ENEMYFEET_2ROW const ANIM_OBJ_ENEMYFEET_2ROW
const ANIM_OBJ_PLAYERHEAD_2ROW const ANIM_OBJ_PLAYERHEAD_2ROW
const ANIM_OBJ_COIN_HURL
DEF NUM_ANIM_OBJS EQU const_value DEF NUM_ANIM_OBJS EQU const_value
; DoBattleAnimFrame arguments (see engine/battle_anims/functions.asm) ; DoBattleAnimFrame arguments (see engine/battle_anims/functions.asm)
@ -302,6 +303,7 @@ DEF NUM_ANIM_OBJS EQU const_value
const BATTLEANIMFUNC_ANCIENT_POWER const BATTLEANIMFUNC_ANCIENT_POWER
const BATTLEANIMFUNC_ROCK_SMASH const BATTLEANIMFUNC_ROCK_SMASH
const BATTLEANIMFUNC_COTTON const BATTLEANIMFUNC_COTTON
const BATTLEANIMFUNC_COINHURL
DEF NUM_BATTLEANIMFUNCS EQU const_value DEF NUM_BATTLEANIMFUNCS EQU const_value
; BattleAnimFrameData indexes (see data/battle_anims/framesets.asm) ; BattleAnimFrameData indexes (see data/battle_anims/framesets.asm)

View file

@ -395,4 +395,6 @@ BattleAnimObjects:
battleanimobj ABSOLUTE_X, $00, BATTLEANIMFRAMESET_B7, BATTLEANIMFUNC_NULL, PAL_BATTLE_OB_ENEMY, ANIM_GFX_PLAYERHEAD battleanimobj ABSOLUTE_X, $00, BATTLEANIMFRAMESET_B7, BATTLEANIMFUNC_NULL, PAL_BATTLE_OB_ENEMY, ANIM_GFX_PLAYERHEAD
; ANIM_OBJ_PLAYERHEAD_2ROW ; ANIM_OBJ_PLAYERHEAD_2ROW
battleanimobj ABSOLUTE_X, $00, BATTLEANIMFRAMESET_B8, BATTLEANIMFUNC_NULL, PAL_BATTLE_OB_PLAYER, ANIM_GFX_ENEMYFEET battleanimobj ABSOLUTE_X, $00, BATTLEANIMFRAMESET_B8, BATTLEANIMFUNC_NULL, PAL_BATTLE_OB_PLAYER, ANIM_GFX_ENEMYFEET
; ANIM_OBJ_COIN_HURL - just the Poke Ball toss but with Pay Day's gfx chucked in
battleanimobj ABSOLUTE_X, $ff, BATTLEANIMFRAMESET_75, BATTLEANIMFUNC_COINHURL, PAL_BATTLE_OB_BROWN, ANIM_GFX_STATUS
assert_table_length NUM_ANIM_OBJS assert_table_length NUM_ANIM_OBJS

View file

@ -283,14 +283,14 @@ BattleAnimations::
dw BattleAnim_RockSlash dw BattleAnim_RockSlash
dw BattleAnim_CrossCutter dw BattleAnim_CrossCutter
dw BattleAnim_Megaphone dw BattleAnim_Megaphone
dw BattleAnim_Wind_Ride ; Mystic Ice - to be changed, all new anims here are temp dw BattleAnim_Wind_Ride ; Mystic Ice - to be changed, all new anims here are temp. Wind Ride's animation fits Mystic Ice but may want some touch-ups. It's buggy.
dw BattleAnim_Splash ; Bounce dw BattleAnim_Splash ; Bounce
dw BattleAnim_Flash ; Bright Moss dw BattleAnim_Flash ; Bright Moss
dw BattleAnim_PayDay ; Coin Hurl dw BattleAnim_CoinHurl ; Coin Hurl
dw BattleAnim_RockSmash ; Uproot dw BattleAnim_RockSmash ; Uproot
dw BattleAnim_Psybeam ; Synchronize dw BattleAnim_Psybeam ; Synchronize
dw BattleAnim_Rollout ; Strong Arm (I want it to look like Arm Thrust in ADV!) dw BattleAnim_StrongArm
dw BattleAnim_MegaPunch ; Uppercut (replicate the KEP one!!) dw BattleAnim_Uppercut
dw BattleAnim_WaterGun ; uhhh dw BattleAnim_WaterGun ; uhhh
dw BattleAnim_Wind_Ride ; Wind Ride but real dw BattleAnim_Wind_Ride ; Wind Ride but real
dw BattleAnim_Flash ; Dazzling Gleam dw BattleAnim_Flash ; Dazzling Gleam
@ -1334,7 +1334,7 @@ BattleAnim_RazorWind:
anim_wait 24 anim_wait 24
anim_ret anim_ret
BattleAnim_Sonicboom_JP: ; unreferenced BattleAnim_Sonicboom:
anim_2gfx ANIM_GFX_WHIP, ANIM_GFX_HIT anim_2gfx ANIM_GFX_WHIP, ANIM_GFX_HIT
.loop .loop
anim_sound 3, 0, SFX_RAZOR_WIND anim_sound 3, 0, SFX_RAZOR_WIND
@ -1359,7 +1359,6 @@ BattleAnim_Sonicboom_JP: ; unreferenced
anim_ret anim_ret
BattleAnim_Gust: BattleAnim_Gust:
BattleAnim_Sonicboom:
anim_2gfx ANIM_GFX_WIND, ANIM_GFX_HIT anim_2gfx ANIM_GFX_WIND, ANIM_GFX_HIT
.loop .loop
anim_sound 0, 1, SFX_RAZOR_WIND anim_sound 0, 1, SFX_RAZOR_WIND
@ -4705,7 +4704,7 @@ BattleAnim_Wind_Ride:
anim_sound 0, 1, SFX_MEGA_KICK anim_sound 0, 1, SFX_MEGA_KICK
anim_obj ANIM_OBJ_HIT_BIG_YFIX, 136, 56, $0 anim_obj ANIM_OBJ_HIT_BIG_YFIX, 136, 56, $0
anim_bgeffect ANIM_BG_SHOW_MON, $0, BG_EFFECT_USER, $0 anim_bgeffect ANIM_BG_SHOW_MON, $0, BG_EFFECT_USER, $0
anim_wait 32 anim_wait 32 ; something causes the tip of the back sprite to disappear
anim_ret anim_ret
@ -4898,6 +4897,73 @@ BattleAnimSub_Glimmer2:
anim_wait 16 anim_wait 16
anim_ret anim_ret
; Splices the "metal" animation, Tackle, and DynamicPunch, using the Spark SFX from Rollout.
BattleAnim_StrongArm:
anim_1gfx ANIM_GFX_REFLECT
anim_obp0 $0
anim_sound 0, 0, SFX_RAGE
anim_call BattleAnim_TargetObj_1Row
anim_call BattleAnimSub_Metallic
anim_call BattleAnim_ShowMon_0
anim_1gfx ANIM_GFX_HIT
anim_resetobp0
anim_sound 0, 0, SFX_SPARK
anim_call BattleAnim_TargetObj_1Row
anim_bgeffect ANIM_BG_TACKLE, $0, BG_EFFECT_USER, $0
anim_wait 4
anim_sound 0, 1, SFX_MEGA_PUNCH
anim_obj ANIM_OBJ_HIT_BIG, 136, 40, $0
anim_wait 8
anim_2gfx ANIM_GFX_HIT, ANIM_GFX_EXPLOSION
anim_resetobp0
anim_obj ANIM_OBJ_PUNCH_SHAKE, 136, 56, $43
anim_wait 16
anim_bgeffect ANIM_BG_SHAKE_SCREEN_X, $e, $4, $0
anim_call BattleAnim_ShowMon_0
anim_ret
; Made in virtually the same way to KEP, reversing Karate Chop's animation.
; Difference here is using Comet Punch's SFX, not repeating it, having the Punch icon, and having a lower low and higher high in its arc. Karate Chop changed lots in GSC!
BattleAnim_Uppercut:
anim_1gfx ANIM_GFX_HIT
anim_sound 0, 1, SFX_COMET_PUNCH
anim_obj ANIM_OBJ_PUNCH, 136, 52, $0
anim_obj ANIM_OBJ_HIT_YFIX, 136, 52, $0
anim_wait 3
anim_obj ANIM_OBJ_PUNCH, 136, 48, $0
anim_obj ANIM_OBJ_HIT_YFIX, 136, 48, $0
anim_wait 3
anim_obj ANIM_OBJ_PUNCH, 136, 44, $0
anim_obj ANIM_OBJ_HIT_YFIX, 136, 44, $0
anim_wait 3
anim_obj ANIM_OBJ_PUNCH, 136, 40, $0
anim_obj ANIM_OBJ_HIT_YFIX, 136, 40, $0
anim_wait 3
anim_obj ANIM_OBJ_PUNCH, 136, 36, $0
anim_obj ANIM_OBJ_HIT_YFIX, 136, 36, $0
anim_wait 16
anim_ret
; Takes the Poke Ball throw code, applies it to the Pay Day coins, then spits out coins on hit.
BattleAnim_CoinHurl:
anim_2gfx ANIM_GFX_HIT, ANIM_GFX_STATUS
anim_sound 6, 2, SFX_PAY_DAY
anim_obj ANIM_OBJ_COIN_HURL, 68, 92, $40
anim_wait 4
anim_sound 6, 2, SFX_PAY_DAY
anim_obj ANIM_OBJ_COIN_HURL, 68, 92, $40
anim_wait 4
anim_sound 6, 2, SFX_PAY_DAY
anim_obj ANIM_OBJ_COIN_HURL, 68, 92, $40
anim_wait 28
anim_obj ANIM_OBJ_PAY_DAY, 110, 76, $1
anim_wait 2
anim_obj ANIM_OBJ_PAY_DAY, 120, 66, $1
anim_wait 2
anim_obj ANIM_OBJ_PAY_DAY, 130, 86, $1
anim_wait 64
anim_ret
BattleAnim_TargetObj_1Row: BattleAnim_TargetObj_1Row:
anim_battlergfx_2row anim_battlergfx_2row
anim_bgeffect ANIM_BG_BATTLEROBJ_1ROW, $0, BG_EFFECT_TARGET, $0 anim_bgeffect ANIM_BG_BATTLEROBJ_1ROW, $0, BG_EFFECT_TARGET, $0

View file

@ -94,6 +94,7 @@ DoBattleAnimFrame:
dw BattleAnimFunction_AncientPower dw BattleAnimFunction_AncientPower
dw BattleAnimFunction_RockSmash dw BattleAnimFunction_RockSmash
dw BattleAnimFunction_Cotton dw BattleAnimFunction_Cotton
dw BattleAnimFunction_CoinHurl
assert_table_length NUM_BATTLEANIMFUNCS assert_table_length NUM_BATTLEANIMFUNCS
BattleAnimFunction_Null: BattleAnimFunction_Null:
@ -273,6 +274,23 @@ BattleAnimFunction_MoveFromUserToTargetAndDisappear:
call DeinitBattleAnimation call DeinitBattleAnimation
ret ret
; Poke Ball animation function without the jumptable and palchoice
; managed to finish this by freak accident tbh it's nice tho
BattleAnimFunction_CoinHurl:
call BattleAnimFunction_ThrowFromUserToTarget
ret c
ld hl, BATTLEANIMSTRUCT_YOFFSET
add hl, bc
ld a, [hl]
ld hl, BATTLEANIMSTRUCT_YCOORD
add hl, bc
add [hl]
ld [hl], a
ld a, BATTLEANIMFRAMESET_75
call ReinitBattleAnimFrameset
call DeinitBattleAnimation
ret
BattleAnimFunction_PokeBall: BattleAnimFunction_PokeBall:
call BattleAnim_AnonJumptable call BattleAnim_AnonJumptable
.anon_dw .anon_dw

View file

@ -8,12 +8,12 @@ DebugRoom_MapScripts:
DebugPokemon1Script: DebugPokemon1Script:
opentext opentext
getmonname STRING_BUFFER_3, PIKACHU getmonname STRING_BUFFER_3, PERSIAN
writetext ReceivedDebugPokemonText writetext ReceivedDebugPokemonText
playsound SFX_CAUGHT_MON playsound SFX_CAUGHT_MON
waitsfx waitsfx
promptbutton promptbutton
givepoke PIKACHU, 24, POISON_STONE givepoke PERSIAN, 90, TM_ROCK_SMASH
closetext closetext
end end