summaryrefslogtreecommitdiff
path: root/src
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
parente8b079962bdee30fc5a36994ef928cdf47609898 (diff)
More animation-related functions
Diffstat (limited to 'src')
-rw-r--r--src/constants/animation_constants.asm15
-rw-r--r--src/constants/duel_interface_constants.asm2
-rw-r--r--src/engine/bank01.asm4
-rw-r--r--src/engine/bank06.asm165
-rw-r--r--src/engine/bank07.asm22
-rw-r--r--src/engine/home.asm2
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