summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorElectroDeoxys <ElectroDeoxys@gmail.com>2021-02-02 10:06:15 +0000
committerElectroDeoxys <ElectroDeoxys@gmail.com>2021-02-02 10:13:40 +0000
commit152fb72933bbe7326d6172f3e2c8659346e8acc7 (patch)
treec0227e025c15bb4a1b3cae8d3b75318414162ab4 /src
parent4d4d7e554def50e5fdbc04a5d2a78f3a69a76327 (diff)
Identify Duel Animation structs
Diffstat (limited to 'src')
-rw-r--r--src/constants/animation_constants.asm12
-rw-r--r--src/engine/bank01.asm12
-rw-r--r--src/engine/bank06.asm112
-rw-r--r--src/engine/bank07.asm48
-rw-r--r--src/engine/home.asm4
-rw-r--r--src/macros/wram.asm10
-rw-r--r--src/text/text1.asm8
-rw-r--r--src/text/text_offsets.asm8
-rw-r--r--src/wram.asm40
9 files changed, 153 insertions, 101 deletions
diff --git a/src/constants/animation_constants.asm b/src/constants/animation_constants.asm
index 44faa75..78988ca 100644
--- a/src/constants/animation_constants.asm
+++ b/src/constants/animation_constants.asm
@@ -118,3 +118,15 @@
const DUEL_ANIM_SHAKE1 ; $fa
const DUEL_ANIM_SHAKE2 ; $fb
const DUEL_ANIM_SHAKE3 ; $fc
+
+ ; Duel Anim Struct constants
+ const_def
+ const DUEL_ANIM_STRUCT_ID ; $0
+ const DUEL_ANIM_STRUCT_SCREEN ; $1
+ const DUEL_ANIM_STRUCT_DUELIST_SIDE ; $2
+ const DUEL_ANIM_STRUCT_LOCATION_PARAM ; $3
+ const DUEL_ANIM_STRUCT_DAMAGE ; $4
+const_value = const_value + 1
+ const DUEL_ANIM_STRUCT_UNKNOWN_2 ; $6
+ const DUEL_ANIM_STRUCT_BANK ; $7
+DUEL_ANIM_STRUCT_SIZE EQU const_value
diff --git a/src/engine/bank01.asm b/src/engine/bank01.asm
index 16d335a..ba06c56 100644
--- a/src/engine/bank01.asm
+++ b/src/engine/bank01.asm
@@ -6926,17 +6926,17 @@ Func_6cab: ; 6cab (1:6cab)
jr z, .store_duelist_turn
call SwapTurn
ldh a, [hWhoseTurn]
- ld [wd4af], a
+ ld [wDuelAnimDuelistSide], a
call SwapTurn
jr .asm_6ccb
.store_duelist_turn
ldh a, [hWhoseTurn]
- ld [wd4af], a
+ ld [wDuelAnimDuelistSide], a
.asm_6ccb
xor a
- ld [wd4b0], a
+ ld [wDuelAnimLocationParam], a
ld a, DUEL_ANIM_SCREEN_MAIN_SCENE
ld [wDuelAnimationScreen], a
pop af
@@ -7028,9 +7028,9 @@ HandlePoisonDamage: ; 6d3f (1:6d3f)
.not_double_poisoned
push af
- ld [wd4b1], a
+ ld [wDuelAnimDamage], a
xor a
- ld [wd4b2], a
+ ld [wDuelAnimDamage + 1], a
push hl
call Func_6c7e
@@ -8194,7 +8194,7 @@ Func_741a: ; 741a (1:741a)
ld a, e
ld [wLoadedMoveAnimation], a
xor a
- ld [wd4b0], a
+ ld [wDuelAnimLocationParam], a
push hl
farcall Func_18f9c
pop hl
diff --git a/src/engine/bank06.asm b/src/engine/bank06.asm
index 8eb6e9a..09d9de1 100644
--- a/src/engine/bank06.asm
+++ b/src/engine/bank06.asm
@@ -1077,9 +1077,9 @@ Func_18f9c: ; 18f9c (6:4f9c)
ld a, DUEL_ANIM_SCREEN_MAIN_SCENE
ld [wDuelAnimationScreen], a
ld a, $01
- ld [$d4b3], a
+ ld [wd4b3], a
xor a
- ld [wd4b0], a
+ ld [wDuelAnimLocationParam], a
ld a, [de]
cp $04
jr z, .asm_4fd3
@@ -1098,30 +1098,30 @@ Func_18fdc: ; 18fdc (6:4fdc)
Func_18fdd: ; 18fdd (6:4fdd)
ldh a, [hWhoseTurn]
- ld [wd4af], a
+ ld [wDuelAnimDuelistSide], a
ld a, [wDuelType]
cp $00
jr nz, Func_19014
- ld a, $c2
- ld [wd4af], a
+ ld a, PLAYER_TURN
+ ld [wDuelAnimDuelistSide], a
jr Func_19014
Func_18ff0: ; 18ff0 (6:4ff0)
call SwapTurn
ldh a, [hWhoseTurn]
- ld [wd4af], a
+ ld [wDuelAnimDuelistSide], a
call SwapTurn
ld a, [wDuelType]
cp $00
jr nz, Func_19014
- ld a, $c3
- ld [wd4af], a
+ ld a, OPPONENT_TURN
+ ld [wDuelAnimDuelistSide], a
jr Func_19014
Func_19009: ; 19009 (6:5009)
ld a, [wce82]
and $7f
- ld [wd4b0], a
+ ld [wDuelAnimLocationParam], a
jr Func_19014
Func_19013: ; 19013 (6:5013)
@@ -1131,55 +1131,61 @@ Func_19014: ; 19014 (6:5014)
ld a, [de]
inc de
cp DUEL_ANIM_SHOW_DAMAGE
- jr z, .asm_502b
+ jr z, .show_damage
cp DUEL_ANIM_SHAKE1
- jr z, .asm_5057
+ jr z, .shake_1
cp DUEL_ANIM_SHAKE2
- jr z, .asm_505d
+ jr z, .shake_2
cp DUEL_ANIM_SHAKE3
- jr z, .asm_5063
+ jr z, .shake_3
.play_anim
call Func_3b6a
jr Func_18f9c.asm_4fd4
-.asm_502b
+.show_damage
ld a, $97
call Func_3b6a
ld a, [wce81]
- ld [$d4b3], a
+ ld [wd4b3], a
+
push de
ld hl, wce7f
- ld de, $d4b1
+ ld de, wDuelAnimDamage
ld a, [hli]
ld [de], a
inc de
ld a, [hli]
ld [de], a
pop de
+
ld a, $8c
call Func_3b6a
ld a, [wDuelDisplayedScreen]
- cp $01
+ cp DUEL_MAIN_SCENE
jr nz, .asm_5054
ld a, $98
call Func_3b6a
.asm_5054
jp Func_18f9c.asm_4fd4
-.asm_5057
+
+.shake_1
ld c, $61
ld b, $63
jr .asm_5067
-.asm_505d
+
+.shake_2
ld c, $62
ld b, $64
jr .asm_5067
-.asm_5063
+
+.shake_3
ld c, $63
ld b, $61
+
.asm_5067
ldh a, [hWhoseTurn]
- cp $c2
+ cp PLAYER_TURN
ld a, c
jr z, .play_anim
ld a, [wDuelType]
@@ -1192,9 +1198,9 @@ Func_19014: ; 19014 (6:5014)
Func_19079: ; 19079 (6:5079)
ld a, [de]
inc de
- ld [$d4b3], a
+ ld [wd4b3], a
ld a, [wce82]
- ld [wd4b0], a
+ ld [wDuelAnimLocationParam], a
call Func_1909d
ld a, $96
call Func_3b6a
@@ -1210,7 +1216,7 @@ PointerTable_006_508f: ; 1908f (6:508f)
dw Func_19013
Func_1909d: ; 1909d (6:509d)
- ld a, [$d4b3]
+ ld a, [wd4b3]
cp $04
jr z, .asm_50ad
cp $01
@@ -1220,11 +1226,11 @@ Func_1909d: ; 1909d (6:509d)
ret
.asm_50ad
- ld a, [wd4b0]
+ ld a, [wDuelAnimLocationParam]
ld l, a
ld a, [wWhoseTurn]
ld h, a
- cp $c2
+ cp PLAYER_TURN
jr z, .asm_50cc
ld a, [wDuelType]
cp $00
@@ -1240,24 +1246,25 @@ Func_1909d: ; 1909d (6:509d)
bit 7, l
jr z, .asm_50d2
jr .asm_50e2
+
.asm_50d2
ld l, $04
- ld h, $c2
+ ld h, PLAYER_TURN
ld a, DUEL_ANIM_SCREEN_PLAYER_PLAY_AREA
jr .asm_50f0
.asm_50da
ld l, $04
- ld h, $c3
+ ld h, OPPONENT_TURN
ld a, DUEL_ANIM_SCREEN_PLAYER_PLAY_AREA
jr .asm_50f0
.asm_50e2
ld l, $05
- ld h, $c3
+ ld h, OPPONENT_TURN
ld a, DUEL_ANIM_SCREEN_OPP_PLAY_AREA
jr .asm_50f0
.asm_50ea
ld l, $05
- ld h, $c2
+ ld h, PLAYER_TURN
ld a, DUEL_ANIM_SCREEN_OPP_PLAY_AREA
.asm_50f0:
ld [wDuelAnimationScreen], a
@@ -1265,7 +1272,7 @@ Func_1909d: ; 1909d (6:509d)
; this part is not perfectly analyzed.
; needs some fix.
- ld a, [$d4b3]
+ ld a, [wd4b3]
cp $04
jr z, Func_190fb.asm_510f
Func_190fb: ; 190fb (6:50fb)
@@ -1325,7 +1332,7 @@ Func_190fb: ; 190fb (6:50fb)
ld a, [hli]
ld h, [hl]
ld l, a
- call Func_19168
+ call GetDamageText
ld a, l
or h
call nz, DrawWideTextBox_PrintText
@@ -1335,32 +1342,35 @@ Func_190fb: ; 190fb (6:50fb)
pop hl
ret
-Func_19168: ; 19168 (6:5168)
+; returns in hl the text id associated with
+; the damage in hl and its effectiveness
+GetDamageText: ; 19168 (6:5168)
ld a, l
or h
- jr z, .asm_5188
+ jr z, .no_damage
call LoadTxRam3
ld a, [wce81]
- ld hl, $003a
- and $06
- ret z
- ld hl, $0038
- cp $06
- ret z
- and $02
- ld hl, $0037
- ret nz
- ld hl, $0036
- ret
-.asm_5188
+ ldtx hl, AttackDamageText
+ and (1 << RESISTANCE) | (1 << WEAKNESS)
+ ret z ; not weak or resistant
+ ldtx hl, ReceivedDamageDueToWeaknessAltText
+ cp (1 << RESISTANCE) | (1 << WEAKNESS)
+ ret z ; weak and resistant
+ and (1 << WEAKNESS)
+ ldtx hl, ReceivedDamageDueToWeaknessText
+ ret nz ; weak
+ ldtx hl, ReceivedDamageDueToResistanceText
+ ret ; resistant
+
+.no_damage
call CheckNoDamageOrEffect
ret c
- ld hl, $003b
+ ldtx hl, NoDamageText
ld a, [wce81]
- and $04
- ret z
- ld hl, $0039
- ret
+ and (1 << RESISTANCE)
+ ret z ; not resistant
+ ldtx hl, DidNotReceiveDamageResistanceText
+ ret ; resistant
; needs analyze.
ld a, [wDuelDisplayedScreen]
diff --git a/src/engine/bank07.asm b/src/engine/bank07.asm
index 614cb61..4695918 100644
--- a/src/engine/bank07.asm
+++ b/src/engine/bank07.asm
@@ -754,7 +754,7 @@ GetAnimCoordsAndFlags: ; 1c9a2 (7:49a2)
add a ; 12 * [wDuelAnimationScreen]
ld c, a
- ld a, [wd4af]
+ ld a, [wDuelAnimDuelistSide]
cp PLAYER_TURN
jr z, .player_side
; opponent side
@@ -762,8 +762,8 @@ GetAnimCoordsAndFlags: ; 1c9a2 (7:49a2)
add c
ld c, a
.player_side
- ld a, [wd4b0]
- add c ; a = [wd4b0] + c
+ ld a, [wDuelAnimLocationParam]
+ add c ; a = [wDuelAnimLocationParam] + c
ld c, a
ld b, 0
ld hl, AnimationCoordinatesIndex
@@ -838,30 +838,30 @@ Func_1ca31: ; 1ca31 (7:4a31)
ld hl, wd4ad
ld a, [hl]
ld c, a
- add %00001000
+ add DUEL_ANIM_STRUCT_SIZE
and %01111111
cp b
jp z, .asm_007_4a6b
ld [hl], a
ld b, $00
- ld hl, wd42c
+ ld hl, wDuelAnimBuffer
add hl, bc
ld a, [wTempAnimation]
ld [hli], a
ld a, [wDuelAnimationScreen]
ld [hli], a
- ld a, [wd4af]
+ ld a, [wDuelAnimDuelistSide]
ld [hli], a
- ld a, [wd4b0]
+ ld a, [wDuelAnimLocationParam]
ld [hli], a
- ld a, [wd4b1]
+ ld a, [wDuelAnimDamage]
ld [hli], a
- ld a, [wd4b2]
+ ld a, [wDuelAnimDamage + 1]
ld [hli], a
ld a, [wd4b3]
ld [hli], a
- ld a, [wd4be]
+ ld a, [wDuelAnimReturnBank]
ld [hl], a
.asm_007_4a6b
@@ -880,29 +880,29 @@ Func_1ca6e: ; 1ca6e (7:4a6e)
jr z, .asm_1cab0
ld c, a
- add $08
- and $7f
+ add DUEL_ANIM_STRUCT_SIZE
+ and %01111111
ld [wd4ac], a
ld b, $00
- ld hl, wd42c
+ ld hl, wDuelAnimBuffer
add hl, bc
ld a, [hli]
ld [wTempAnimation], a
ld a, [hli]
ld [wDuelAnimationScreen], a
ld a, [hli]
- ld [wd4af], a
+ ld [wDuelAnimDuelistSide], a
ld a, [hli]
- ld [wd4b0], a
+ ld [wDuelAnimLocationParam], a
ld a, [hli]
- ld [wd4b1], a
+ ld [wDuelAnimDamage], a
ld a, [hli]
- ld [wd4b2], a
+ ld [wDuelAnimDamage + 1], a
ld a, [hli]
ld [wd4b3], a
ld a, [hl]
- ld [wd4be], a
+ ld [wDuelAnimReturnBank], a
call Func_1c8ef
call CheckAnyAnimationPlaying
@@ -1035,10 +1035,10 @@ Func_1cb5e: ; 1cb5e (7:4b5e)
jp nz, Func_1cc76
jr .asm_1cb6a ; redundant
.asm_1cb6a
- ld a, [wd4b2]
+ ld a, [wDuelAnimDamage + 1]
cp $03
jr nz, .asm_1cb76
- ld a, [wd4b1]
+ ld a, [wDuelAnimDamage]
cp $e8
.asm_1cb76
ret nc
@@ -1131,9 +1131,9 @@ Func_1cbcc: ; 1cbcc (7:4bcc)
INCROM $1cbfd, $1cc03
Func_1cc03: ; 1cc03 (7:4c03)
- ld a, [wd4b1]
+ ld a, [wDuelAnimDamage]
ld l, a
- ld a, [wd4b2]
+ ld a, [wDuelAnimDamage + 1]
ld h, a
ld de, wd4b4
@@ -1444,9 +1444,9 @@ Func_1ce03: ; 1ce03 (7:4e03)
ld l, a
jp Func_3bb5
.asm_1ce17
- ld a, [wd4b1]
+ ld a, [wDuelAnimDamage]
ld l, a
- ld a, [wd4b2]
+ ld a, [wDuelAnimDamage + 1]
ld h, a
jp Func_3bb5
; 0x1ce22
diff --git a/src/engine/home.asm b/src/engine/home.asm
index c860dd3..cc16ca3 100644
--- a/src/engine/home.asm
+++ b/src/engine/home.asm
@@ -11121,7 +11121,7 @@ Func_3b6a: ; 3b6a (0:3b6a)
ld [wTempAnimation], a ; hold an animation temporarily
ldh a, [hBankROM]
push af
- ld [wd4be], a
+ ld [wDuelAnimReturnBank], a
push hl
push bc
@@ -11171,7 +11171,7 @@ Func_3bb5: ; 3bb5 (0:3bb5)
ld [wd4c0], a
ldh a, [hBankROM]
push af
- ld a, [wd4be]
+ ld a, [wDuelAnimReturnBank]
call BankswitchROM
call Func_3cb4
call CallHL2
diff --git a/src/macros/wram.asm b/src/macros/wram.asm
index 7b8456b..d17c505 100644
--- a/src/macros/wram.asm
+++ b/src/macros/wram.asm
@@ -83,3 +83,13 @@ sprite_vram_struct: MACRO
\1TileOffset:: ds 1
\1TileSize:: ds 1
ENDM
+
+duel_anim_struct: MACRO
+\1ID:: ds 1
+\1Screen:: ds 1
+\1DuelistSide:: ds 1
+\1LocationParam:: ds 1
+\1Damage:: ds 2
+\1Unknown2:: ds 1
+\1Bank:: ds 1
+ENDM
diff --git a/src/text/text1.asm b/src/text/text1.asm
index 93c389f..fa04f0f 100644
--- a/src/text/text1.asm
+++ b/src/text/text1.asm
@@ -217,22 +217,22 @@ PokemonsAttackText: ; 365d8 (d:65d8)
text "<RAMTEXT>!"
done
-ResistanceLessDamageText: ; 365e1 (d:65e1)
+ReceivedDamageDueToResistanceText: ; 365e1 (d:65e1)
text "<RAMTEXT> received"
line "<RAMNUM> damage due to Resistance!"
done
-Text0037: ; 36609 (d:6609)
+ReceivedDamageDueToWeaknessText: ; 36609 (d:6609)
text "<RAMTEXT> received"
line "<RAMNUM> damage due to Weakness!"
done
-Text0038: ; 3662f (d:662f)
+ReceivedDamageDueToWeaknessAltText: ; 3662f (d:662f)
text "<RAMTEXT> received"
line "<RAMNUM> damage due to Weakness!"
done
-ResistanceNoDamageText: ; 36655 (d:6655)
+DidNotReceiveDamageResistanceText: ; 36655 (d:6655)
text "<RAMTEXT> did not"
line "receive damage due to Resistance."
done
diff --git a/src/text/text_offsets.asm b/src/text/text_offsets.asm
index b793894..ff175e4 100644
--- a/src/text/text_offsets.asm
+++ b/src/text/text_offsets.asm
@@ -55,10 +55,10 @@ TextOffsets:: ; 34000 (d:4000)
textpointer UsedText ; 0x0033
textpointer Text0034 ; 0x0034
textpointer PokemonsAttackText ; 0x0035
- textpointer ResistanceLessDamageText ; 0x0036
- textpointer Text0037 ; 0x0037
- textpointer Text0038 ; 0x0038
- textpointer ResistanceNoDamageText ; 0x0039
+ textpointer ReceivedDamageDueToResistanceText ; 0x0036
+ textpointer ReceivedDamageDueToWeaknessText ; 0x0037
+ textpointer ReceivedDamageDueToWeaknessAltText ; 0x0038
+ textpointer DidNotReceiveDamageResistanceText ; 0x0039
textpointer AttackDamageText ; 0x003a
textpointer NoDamageText ; 0x003b
textpointer NoSelectableAttackText ; 0x003c
diff --git a/src/wram.asm b/src/wram.asm
index 30ea0e3..34f2333 100644
--- a/src/wram.asm
+++ b/src/wram.asm
@@ -2365,8 +2365,23 @@ wd42a:: ; d42a
wAnimFlags:: ; d42b
ds $1
-wd42c:: ; d42c
- ds $80
+wDuelAnimBuffer:: ; d42c
+ duel_anim_struct wDuelAnim1
+ duel_anim_struct wDuelAnim2
+ duel_anim_struct wDuelAnim3
+ duel_anim_struct wDuelAnim4
+ duel_anim_struct wDuelAnim5
+ duel_anim_struct wDuelAnim6
+ duel_anim_struct wDuelAnim7
+ duel_anim_struct wDuelAnim8
+ duel_anim_struct wDuelAnim9
+ duel_anim_struct wDuelAnim10
+ duel_anim_struct wDuelAnim11
+ duel_anim_struct wDuelAnim12
+ duel_anim_struct wDuelAnim13
+ duel_anim_struct wDuelAnim14
+ duel_anim_struct wDuelAnim15
+ duel_anim_struct wDuelAnim16
wd4ac:: ; d4ac
ds $1
@@ -2382,17 +2397,21 @@ wd4ad:: ; d4ad
wDuelAnimationScreen:: ; d4ae
ds $1
-wd4af:: ; d4af
- ds $1
-
-wd4b0:: ; d4b0
+; which side to play animation
+; uses PLAYER_TURN and OPPONENT_TURN constants
+wDuelAnimDuelistSide:: ; d4af
ds $1
-wd4b1:: ; d4b1
+; used in GetAnimCoordsAndFlags to determine
+; what coordinates to draw the animation in.
+; e.g. used to know what Play Area card
+; to draw a hit animation in the Play Area screen.
+wDuelAnimLocationParam:: ; d4b0
ds $1
-wd4b2:: ; d4b2
- ds $1
+; damage value to display with animation
+wDuelAnimDamage:: ; d4b1
+ ds $2
wd4b3:: ; d4b3
ds $1
@@ -2417,7 +2436,8 @@ wd4bb:: ; d4bb
wd4bc:: ; d4bc
ds $2
-wd4be:: ; d4be
+; bank number to return to after processing animation
+wDuelAnimReturnBank:: ; d4be
ds $1
wd4bf:: ; d4bf