diff options
author | ElectroDeoxys <ElectroDeoxys@gmail.com> | 2021-02-02 23:31:36 +0000 |
---|---|---|
committer | ElectroDeoxys <ElectroDeoxys@gmail.com> | 2021-02-02 23:31:36 +0000 |
commit | ab9b857e68af66e8bc37628bd76dbba337971a15 (patch) | |
tree | 95263557d2f75352fab1b45178e422e571478124 /src | |
parent | e8b079962bdee30fc5a36994ef928cdf47609898 (diff) |
More animation-related functions
Diffstat (limited to 'src')
-rw-r--r-- | src/constants/animation_constants.asm | 15 | ||||
-rw-r--r-- | src/constants/duel_interface_constants.asm | 2 | ||||
-rw-r--r-- | src/engine/bank01.asm | 4 | ||||
-rw-r--r-- | src/engine/bank06.asm | 165 | ||||
-rw-r--r-- | src/engine/bank07.asm | 22 | ||||
-rw-r--r-- | src/engine/home.asm | 2 |
6 files changed, 129 insertions, 81 deletions
diff --git a/src/constants/animation_constants.asm b/src/constants/animation_constants.asm index 75c82d8..80c425d 100644 --- a/src/constants/animation_constants.asm +++ b/src/constants/animation_constants.asm @@ -113,6 +113,10 @@ const DUEL_ANIM_DUEL_DRAW ; $5f const DUEL_ANIM_96 ; $60 +; animations passed this point are treated differently +DUEL_SPECIAL_ANIMS EQU const_value + +DUEL_SCREEN_ANIMS EQU const_value const DUEL_ANIM_SMALL_SHAKE_X ; $61 const DUEL_ANIM_BIG_SHAKE_X ; $62 const DUEL_ANIM_SMALL_SHAKE_Y ; $63 @@ -120,6 +124,17 @@ const DUEL_ANIM_FLASH ; $65 const DUEL_ANIM_DISTORT ; $66 + const_def $96 + const DUEL_ANIM_150 ; $96 + const DUEL_ANIM_PRINT_DAMAGE ; $97 + const DUEL_ANIM_UPDATE_HUD ; $98 + const DUEL_ANIM_153 ; $99 + const DUEL_ANIM_154 ; $9a + const DUEL_ANIM_155 ; $9b + const DUEL_ANIM_156 ; $9c + const DUEL_ANIM_157 ; $9d + const DUEL_ANIM_158 ; $9e + ; Special animations const_def $fa const DUEL_ANIM_SHAKE1 ; $fa diff --git a/src/constants/duel_interface_constants.asm b/src/constants/duel_interface_constants.asm index baf0a4c..6add375 100644 --- a/src/constants/duel_interface_constants.asm +++ b/src/constants/duel_interface_constants.asm @@ -37,6 +37,8 @@ HEADER_POKEMON EQU $02 ; wDuelDisplayedScreen constants DUEL_MAIN_SCENE EQU $01 PLAY_AREA_CARD_LIST EQU $02 +UNKNOWN_SCREEN_4 EQU $04 ; used for some animations +UNKNOWN_SCREEN_5 EQU $05 ; used for some animations COIN_TOSS EQU $06 DRAW_CARDS EQU $07 LARGE_CARD_PICTURE EQU $08 diff --git a/src/engine/bank01.asm b/src/engine/bank01.asm index 46f5919..2d0ebf5 100644 --- a/src/engine/bank01.asm +++ b/src/engine/bank01.asm @@ -8196,7 +8196,7 @@ Func_741a: ; 741a (1:741a) xor a ld [wDuelAnimLocationParam], a push hl - farcall Func_18f9c + farcall PlayAttackAnimationCommands pop hl jr .loop .done @@ -8278,7 +8278,7 @@ PlayMoveAnimation: ; 7494 (1:7494) ld [wLoadedMoveAnimation], a .got_anim - farcall Func_18f9c + farcall PlayAttackAnimationCommands pop bc pop de pop hl diff --git a/src/engine/bank06.asm b/src/engine/bank06.asm index 8fc7f28..10876f0 100644 --- a/src/engine/bank06.asm +++ b/src/engine/bank06.asm @@ -1051,7 +1051,9 @@ Func_18661: ; 18661 (6:4661) ; (6:46f7) INCLUDE "data/effect_commands.asm" -Func_18f9c: ; 18f9c (6:4f9c) +; reads the animation commands from PointerTable_AttackAnimation +; of attack in wLoadedMoveAnimation and plays them +PlayAttackAnimationCommands: ; 18f9c (6:4f9c) ld a, [wLoadedMoveAnimation] or a ret z @@ -1060,19 +1062,20 @@ Func_18f9c: ; 18f9c (6:4f9c) ld h, 0 add hl, hl ld de, PointerTable_AttackAnimation -.asm_4fa8 add hl, de ld e, [hl] inc hl ld d, [hl] + push de ld hl, wce7e ld a, [hl] or a - jr nz, .asm_4fd3 + jr nz, .read_command ld [hl], $01 call Func_3b21 pop de + push de ld a, DUEL_ANIM_SCREEN_MAIN_SCENE ld [wDuelAnimationScreen], a @@ -1082,52 +1085,54 @@ Func_18f9c: ; 18f9c (6:4f9c) ld [wDuelAnimLocationParam], a ld a, [de] cp $04 - jr z, .asm_4fd3 - ld a, $96 + jr z, .read_command + ld a, DUEL_ANIM_150 call PlayDuelAnimation -.asm_4fd3 +.read_command pop de -.asm_4fd4 + ; fallthrough + +PlayAttackAnimationCommands_NextCommand: ; 18fd4 (6:4fd4) ld a, [de] inc de - ld hl, PointerTable_006_508f + ld hl, AnimationCommandPointerTable jp JumpToFunctionInTable -Func_18fdc: ; 18fdc (6:4fdc) +AnimationCommand_AnimEnd: ; 18fdc (6:4fdc) ret -Func_18fdd: ; 18fdd (6:4fdd) +AnimationCommand_AnimPlayer: ; 18fdd (6:4fdd) ldh a, [hWhoseTurn] ld [wDuelAnimDuelistSide], a ld a, [wDuelType] cp $00 - jr nz, Func_19014 + jr nz, AnimationCommand_AnimNormal ld a, PLAYER_TURN ld [wDuelAnimDuelistSide], a - jr Func_19014 + jr AnimationCommand_AnimNormal -Func_18ff0: ; 18ff0 (6:4ff0) +AnimationCommand_AnimOpponent: ; 18ff0 (6:4ff0) call SwapTurn ldh a, [hWhoseTurn] ld [wDuelAnimDuelistSide], a call SwapTurn ld a, [wDuelType] cp $00 - jr nz, Func_19014 + jr nz, AnimationCommand_AnimNormal ld a, OPPONENT_TURN ld [wDuelAnimDuelistSide], a - jr Func_19014 + jr AnimationCommand_AnimNormal -Func_19009: ; 19009 (6:5009) +AnimationCommand_AnimUnknown2: ; 19009 (6:5009) ld a, [wce82] and $7f ld [wDuelAnimLocationParam], a - jr Func_19014 + jr AnimationCommand_AnimNormal -Func_19013: ; 19013 (6:5013) +AnimationCommand_AnimEnd2: ; 19013 (6:5013) ret -Func_19014: ; 19014 (6:5014) +AnimationCommand_AnimNormal: ; 19014 (6:5014) ld a, [de] inc de cp DUEL_ANIM_SHOW_DAMAGE @@ -1141,10 +1146,10 @@ Func_19014: ; 19014 (6:5014) .play_anim call PlayDuelAnimation - jr Func_18f9c.asm_4fd4 + jr PlayAttackAnimationCommands_NextCommand .show_damage - ld a, $97 + ld a, DUEL_ANIM_PRINT_DAMAGE call PlayDuelAnimation ld a, [wce81] ld [wd4b3], a @@ -1163,27 +1168,29 @@ Func_19014: ; 19014 (6:5014) call PlayDuelAnimation ld a, [wDuelDisplayedScreen] cp DUEL_MAIN_SCENE - jr nz, .asm_5054 - ld a, $98 + jr nz, .skip_update_hud + ld a, DUEL_ANIM_UPDATE_HUD call PlayDuelAnimation -.asm_5054 - jp Func_18f9c.asm_4fd4 +.skip_update_hud + jp PlayAttackAnimationCommands_NextCommand +; screen shake happens differently +; depending on whose turn it is .shake_1 ld c, DUEL_ANIM_SMALL_SHAKE_X ld b, DUEL_ANIM_SMALL_SHAKE_Y - jr .asm_5067 + jr .check_duelist .shake_2 ld c, DUEL_ANIM_BIG_SHAKE_X ld b, DUEL_ANIM_BIG_SHAKE_Y - jr .asm_5067 + jr .check_duelist .shake_3 ld c, DUEL_ANIM_SMALL_SHAKE_Y ld b, DUEL_ANIM_SMALL_SHAKE_X -.asm_5067 +.check_duelist ldh a, [hWhoseTurn] cp PLAYER_TURN ld a, c @@ -1195,86 +1202,97 @@ Func_19014: ; 19014 (6:5014) ld a, b jr .play_anim -Func_19079: ; 19079 (6:5079) +AnimationCommand_AnimUnknown: ; 19079 (6:5079) ld a, [de] inc de ld [wd4b3], a ld a, [wce82] ld [wDuelAnimLocationParam], a - call Func_1909d - ld a, $96 + call SetDuelAnimationScreen + ld a, DUEL_ANIM_150 call PlayDuelAnimation - jp Func_18f9c.asm_4fd4 - -PointerTable_006_508f: ; 1908f (6:508f) - dw Func_18fdc - dw Func_19014 - dw Func_18fdd - dw Func_18ff0 - dw Func_19079 - dw Func_19009 - dw Func_19013 - -Func_1909d: ; 1909d (6:509d) + jp PlayAttackAnimationCommands_NextCommand + +AnimationCommandPointerTable: ; 1908f (6:508f) + dw AnimationCommand_AnimEnd ; anim_end + dw AnimationCommand_AnimNormal ; anim_normal + dw AnimationCommand_AnimPlayer ; anim_player + dw AnimationCommand_AnimOpponent ; anim_opponent + dw AnimationCommand_AnimUnknown ; anim_unknown + dw AnimationCommand_AnimUnknown2 ; anim_unknown2 + dw AnimationCommand_AnimEnd2 ; anim_end2 (unused) + +; sets wDuelAnimationScreen according to wd4b3 +; if wd4b3 == $01, set it to Main Scene +; if wd4b3 == $04, st it to Play Area scene +SetDuelAnimationScreen: ; 1909d (6:509d) ld a, [wd4b3] cp $04 - jr z, .asm_50ad + jr z, .set_play_area_screen cp $01 ret nz ld a, DUEL_ANIM_SCREEN_MAIN_SCENE ld [wDuelAnimationScreen], a ret -.asm_50ad +.set_play_area_screen ld a, [wDuelAnimLocationParam] ld l, a ld a, [wWhoseTurn] ld h, a cp PLAYER_TURN - jr z, .asm_50cc + jr z, .player + +; opponent ld a, [wDuelType] cp $00 jr z, .asm_50c6 + +; link duel or vs. AI bit 7, l jr z, .asm_50e2 jr .asm_50d2 + .asm_50c6 bit 7, l jr z, .asm_50da jr .asm_50ea -.asm_50cc + +.player bit 7, l jr z, .asm_50d2 jr .asm_50e2 .asm_50d2 - ld l, $04 + ld l, UNKNOWN_SCREEN_4 ld h, PLAYER_TURN ld a, DUEL_ANIM_SCREEN_PLAYER_PLAY_AREA - jr .asm_50f0 + jr .ok .asm_50da - ld l, $04 + ld l, UNKNOWN_SCREEN_4 ld h, OPPONENT_TURN ld a, DUEL_ANIM_SCREEN_PLAYER_PLAY_AREA - jr .asm_50f0 + jr .ok .asm_50e2 - ld l, $05 + ld l, UNKNOWN_SCREEN_5 ld h, OPPONENT_TURN ld a, DUEL_ANIM_SCREEN_OPP_PLAY_AREA - jr .asm_50f0 + jr .ok .asm_50ea - ld l, $05 + ld l, UNKNOWN_SCREEN_5 ld h, PLAYER_TURN ld a, DUEL_ANIM_SCREEN_OPP_PLAY_AREA -.asm_50f0: + +.ok: ld [wDuelAnimationScreen], a ret -; this part is not perfectly analyzed. -; needs some fix. +Func_190f4: ; 190f4 (6:50f4) ld a, [wd4b3] cp $04 - jr z, Func_190fb.asm_510f + jr z, Func_1910f + ; fallthrough + Func_190fb: ; 190fb (6:50fb) cp $01 jr nz, .asm_510e @@ -1286,14 +1304,15 @@ Func_190fb: ; 190fb (6:50fb) bank1call DrawDuelMainScene .asm_510e ret -.asm_510f - call Func_1909d + +Func_1910f: ; 1910f (6:510f) + call SetDuelAnimationScreen ld a, [wDuelDisplayedScreen] cp l - jr z, .asm_512e + jr z, .skip_change_screen ld a, l push af - ld l, $c2 + ld l, PLAYER_TURN ld a, [wDuelType] cp $00 jr nz, .asm_5127 @@ -1303,27 +1322,30 @@ Func_190fb: ; 190fb (6:50fb) call DrawYourOrOppPlayAreaScreen_Bank0 pop af ld [wDuelDisplayedScreen], a -.asm_512e +.skip_change_screen call DrawWideTextBox ret -; needs analyze. +; prints text related to the damage received +; by card stored in wTempNonTurnDuelistCardID +; takes into account type effectiveness +PrintDamageText: ; 19132 (6:5132) push hl push bc push de ld a, [wLoadedMoveAnimation] cp ATK_ANIM_HEAL - jr z, .asm_5164 + jr z, .skip cp ATK_ANIM_HEALING_WIND_PLAY_AREA - jr z, .asm_5164 + jr z, .skip ld a, [wTempNonTurnDuelistCardID] ld e, a ld d, $00 call LoadCardDataToBuffer1_FromCardID - ld a, $12 + ld a, 18 call CopyCardNameAndLevel - ld [hl], $00 + ld [hl], TX_END ld hl, wTxRam2 xor a ld [hli], a @@ -1336,7 +1358,7 @@ Func_190fb: ; 190fb (6:50fb) ld a, l or h call nz, DrawWideTextBox_PrintText -.asm_5164 +.skip pop de pop bc pop hl @@ -1372,13 +1394,14 @@ GetDamageText: ; 19168 (6:5168) ldtx hl, DidNotReceiveDamageResistanceText ret ; resistant -; needs analyze. +UpdateMainSceneHUD: ; 19199 (6:5199) ld a, [wDuelDisplayedScreen] - cp $01 + cp DUEL_MAIN_SCENE ret nz bank1call DrawDuelHUDs ret +Func_191a3: ; 191a3 (6:51a3) ret INCLUDE "data/attack_animations.asm" diff --git a/src/engine/bank07.asm b/src/engine/bank07.asm index 0d562c0..ce0087e 100644 --- a/src/engine/bank07.asm +++ b/src/engine/bank07.asm @@ -597,7 +597,7 @@ PlayLoadedDuelAnimation: ; 1c8ef (7:48ef) .okay ld a, [wTempAnimation] ld [wd4bf], a - cp $61 + cp DUEL_SPECIAL_ANIMS jp nc, Func_1cb5e push hl @@ -1117,7 +1117,7 @@ Func_1cbcc: ; 1cbcc (7:4bcc) call GetAnimCoordsAndFlags ld a, [wd4b7] - add $fd + add -3 ld e, a ld a, $4b adc 0 @@ -1229,7 +1229,7 @@ InitScreenAnimation: ; 1cc76 (7:4c76) jr nz, .skip ld a, [wTempAnimation] ld [wd42a], a - sub $61 + sub DUEL_SCREEN_ANIMS add a add a ld c, a @@ -1485,27 +1485,35 @@ DistortScreen: ; 1cdc3 (7:4dc3) ; 0x1ce03 Func_1ce03: ; 1ce03 (7:4e03) - cp $9e + cp DUEL_ANIM_158 jr z, .asm_1ce17 sub $96 add a ld c, a ld b, $00 - ld hl, $4e22 + ld hl, .pointer_table add hl, bc ld a, [hli] ld h, [hl] ld l, a jp Func_3bb5 + .asm_1ce17 ld a, [wDuelAnimDamage] ld l, a ld a, [wDuelAnimDamage + 1] ld h, a jp Func_3bb5 -; 0x1ce22 - INCROM $1ce22, $1ce32 +.pointer_table + dw Func_190f4 ; DUEL_ANIM_150 + dw PrintDamageText ; DUEL_ANIM_PRINT_DAMAGE + dw UpdateMainSceneHUD ; DUEL_ANIM_UPDATE_HUD + dw Func_191a3 ; DUEL_ANIM_153 + dw Func_191a3 ; DUEL_ANIM_154 + dw Func_191a3 ; DUEL_ANIM_155 + dw Func_191a3 ; DUEL_ANIM_156 + dw Func_191a3 ; DUEL_ANIM_157 ; data for each animation ID (see src/constants/sprite_constants.asm) Animations: ; 1ce32 (7:4e32) diff --git a/src/engine/home.asm b/src/engine/home.asm index 476f182..9a0fcbb 100644 --- a/src/engine/home.asm +++ b/src/engine/home.asm @@ -11132,7 +11132,7 @@ PlayDuelAnimation: ; 3b6a (0:3b6a) ld a, BANK(LoadDuelAnimationToBuffer) call BankswitchROM ld a, [wTempAnimation] - cp $61 + cp DUEL_SPECIAL_ANIMS jr nc, .load_buffer ld hl, wDuelAnimBufferSize |