diff options
author | ElectroDeoxys <ElectroDeoxys@gmail.com> | 2021-02-02 10:06:15 +0000 |
---|---|---|
committer | ElectroDeoxys <ElectroDeoxys@gmail.com> | 2021-02-02 10:13:40 +0000 |
commit | 152fb72933bbe7326d6172f3e2c8659346e8acc7 (patch) | |
tree | c0227e025c15bb4a1b3cae8d3b75318414162ab4 /src | |
parent | 4d4d7e554def50e5fdbc04a5d2a78f3a69a76327 (diff) |
Identify Duel Animation structs
Diffstat (limited to 'src')
-rw-r--r-- | src/constants/animation_constants.asm | 12 | ||||
-rw-r--r-- | src/engine/bank01.asm | 12 | ||||
-rw-r--r-- | src/engine/bank06.asm | 112 | ||||
-rw-r--r-- | src/engine/bank07.asm | 48 | ||||
-rw-r--r-- | src/engine/home.asm | 4 | ||||
-rw-r--r-- | src/macros/wram.asm | 10 | ||||
-rw-r--r-- | src/text/text1.asm | 8 | ||||
-rw-r--r-- | src/text/text_offsets.asm | 8 | ||||
-rw-r--r-- | src/wram.asm | 40 |
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 |