summaryrefslogtreecommitdiff
path: root/src/engine/bank06.asm
diff options
context:
space:
mode:
authorElectroDeoxys <ElectroDeoxys@gmail.com>2021-02-02 23:31:36 +0000
committerElectroDeoxys <ElectroDeoxys@gmail.com>2021-02-02 23:31:36 +0000
commitab9b857e68af66e8bc37628bd76dbba337971a15 (patch)
tree95263557d2f75352fab1b45178e422e571478124 /src/engine/bank06.asm
parente8b079962bdee30fc5a36994ef928cdf47609898 (diff)
More animation-related functions
Diffstat (limited to 'src/engine/bank06.asm')
-rw-r--r--src/engine/bank06.asm165
1 files changed, 94 insertions, 71 deletions
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"