diff options
author | xCrystal <rgr.crystal@gmail.com> | 2016-03-06 22:14:47 +0100 |
---|---|---|
committer | xCrystal <rgr.crystal@gmail.com> | 2016-03-06 22:22:21 +0100 |
commit | 845e54b091ca11b1c32416515ca10eb477ff5716 (patch) | |
tree | e567fe5d36748f390e81cc709b9f6cf7d6d1b95f /src | |
parent | d351b99bd529c265d6084c51789006ee378c19be (diff) |
temp card id addresses and some status handling functions
Diffstat (limited to 'src')
-rw-r--r-- | src/constants/duel_constants.asm | 2 | ||||
-rwxr-xr-x | src/engine/bank1.asm | 4 | ||||
-rw-r--r-- | src/engine/effect_functions.asm | 26 | ||||
-rwxr-xr-x | src/engine/home.asm | 179 | ||||
-rwxr-xr-x | src/wram.asm | 12 |
5 files changed, 117 insertions, 106 deletions
diff --git a/src/constants/duel_constants.asm b/src/constants/duel_constants.asm index 39de13d..0411888 100644 --- a/src/constants/duel_constants.asm +++ b/src/constants/duel_constants.asm @@ -62,7 +62,7 @@ SUBSTATUS1_NO_DAMAGE_10 EQU $10 SUBSTATUS1_NO_DAMAGE_11 EQU $11 SUBSTATUS1_REDUCE_BY_20 EQU $13 SUBSTATUS1_BARRIER EQU $14 -SUBSTATUS1_KABUTO_ARMOR EQU $15 +SUBSTATUS1_HALVE_DAMAGE EQU $15 SUBSTATUS1_DESTINY_BOND EQU $16 SUBSTATUS1_NO_DAMAGE_17 EQU $17 SUBSTATUS1_NEXT_TURN_DOUBLE_DAMAGE EQU $19 diff --git a/src/engine/bank1.asm b/src/engine/bank1.asm index d6ec72b..8d68012 100755 --- a/src/engine/bank1.asm +++ b/src/engine/bank1.asm @@ -500,7 +500,7 @@ OpenBattleAttackMenu: ; 46fc (1:46fc) .openAttackMenu push af ld a, [wSelectedDuelSubMenuItem] - ld hl, AttackMenuCursorProperties + ld hl, AttackMenuCursorData call InitializeCursorParameters pop af ld [wNumMenuItems], a @@ -604,7 +604,7 @@ Func_478b: ; 478b (1:478b) jr z, .asm_47d4 ret -AttackMenuCursorProperties: +AttackMenuCursorData: db $01 db $0d db $02 diff --git a/src/engine/effect_functions.asm b/src/engine/effect_functions.asm index 143ab22..df4bb99 100644 --- a/src/engine/effect_functions.asm +++ b/src/engine/effect_functions.asm @@ -36,28 +36,30 @@ applyEffect ld a, [$ff97] ld hl, $cc05 cp [hl] - jr nz, .asm_2c061 - ld a, [wccc4] - cp $cb - jr z, .asm_2c058 - cp $cc - jr z, .asm_2c058 - cp $be - jr nz, .asm_2c061 + jr nz, .canInduceStatus + ld a, [wTempNonTurnDuelistCardId] + cp CLEFAIRY_DOLL + jr z, .cantInduceStatus + cp MYSTERIOUS_FOSSIL + jr z, .cantInduceStatus + ; snorlax's thick skinned prevents it from being statused... + cp SNORLAX + jr nz, .canInduceStatus call SwapTurn xor a - call Func_34f0 + ; ...unless already so, or if affected by muk's toxic gas + call CheckIfUnderAnyCannotUseStatus2 call SwapTurn - jr c, .asm_2c061 + jr c, .canInduceStatus -.asm_2c058 +.cantInduceStatus ld a, c ld [wccf1], a call Func_2c09c or a ret -.asm_2c061 +.canInduceStatus ld hl, wcccd push hl ld e, [hl] diff --git a/src/engine/home.asm b/src/engine/home.asm index a739504..74af158 100755 --- a/src/engine/home.asm +++ b/src/engine/home.asm @@ -2140,7 +2140,7 @@ Func_0f7f: ; 0f7f (0:0f7f) push bc ld [$ff9e], a ld a, DUELVARS_DUELIST_TYPE - call GetOpposingTurnDuelistVariable + call GetNonTurnDuelistVariable cp $1 jr nz, .asm_f98 ld hl, $ff9e @@ -2179,22 +2179,22 @@ Func_100b: ; 100b (0:100b) call GetTurnDuelistVariable call LoadDeckCardToDE ld a, e - ld [wccc3], a + ld [wTempTurnDuelistCardId], a call SwapTurn ld a, DUELVARS_ARENA_CARD call GetTurnDuelistVariable call LoadDeckCardToDE ld a, e - ld [wccc4], a + ld [wTempNonTurnDuelistCardId], a call SwapTurn pop hl push hl call EnableExtRAM ld a, [wcc06] ld [hli], a - ld a, [wccc4] + ld a, [wTempNonTurnDuelistCardId] ld [hli], a - ld a, [wccc3] + ld a, [wTempTurnDuelistCardId] ld [hli], a pop hl ld de, $0010 @@ -2478,7 +2478,7 @@ GetTurnDuelistVariable: ; 160b (0:160b) ; returns [([hWhoseTurn] ^ $1) << 8 + a] in a and in [hl] ; i.e. variable a of the player whose turn it is not -GetOpposingTurnDuelistVariable: ; 1611 (0:1611) +GetNonTurnDuelistVariable: ; 1611 (0:1611) ld l, a ldh a, [hWhoseTurn] ld h, OPPONENT_TURN @@ -2499,7 +2499,7 @@ CopyMoveDataAndDamageToBuffer: ; 16c0 (0:16c0) ld [$ff9f], a call LoadDeckCardToBuffer1 ld a, [$cc2b] - ld [wccc2], a + ld [wTempCardId], a ld hl, wCardBuffer1Move1 dec e jr nz, .gotMove @@ -2530,13 +2530,13 @@ Func_16f6: ; 16f6 (0:16f6) ld [$ff9f], a call LoadDeckCardToDE ld a, e - ld [wccc3], a + ld [wTempTurnDuelistCardId], a call SwapTurn ld a, DUELVARS_ARENA_CARD call GetTurnDuelistVariable call LoadDeckCardToDE ld a, e - ld [wccc4], a + ld [wTempNonTurnDuelistCardId], a call SwapTurn xor a ld [wccec], a @@ -2554,7 +2554,7 @@ Func_1730: ; 1730 (0:1730) ld [wcc10], a ld a, [$ff9f] ld [wcc11], a - ld a, [wccc2] + ld a, [wTempCardId] ld [wcc12], a ld a, [wMoveBufferCategory] cp POKEMON_POWER @@ -2613,7 +2613,7 @@ Func_1730: ; 1730 (0:1730) ld a, [wccc1] ld c, a ld a, DUELVARS_ARENA_CARD_HP - call GetOpposingTurnDuelistVariable + call GetNonTurnDuelistVariable push de push hl call $7494 @@ -2641,12 +2641,12 @@ Func_17ed: ; 17ed (0:17ed) ld a, $1 ld [wNoDamageOrEffect], a Func_17fb: ; 17fb (0:17fb) - ld a, [wccc4] + ld a, [wTempNonTurnDuelistCardId] push af ld a, $4 call TryExecuteEffectCommandFunction pop af - ld [wccc4], a + ld [wTempNonTurnDuelistCardId], a call Func_367b bank1call $6df1 call Func_1bb4 @@ -2741,7 +2741,7 @@ Func_189d: ; 189d (0:189d) or d jr nz, .asm_18b9 ld a, DUELVARS_ARENA_CARD_SUBSTATUS2 - call GetOpposingTurnDuelistVariable + call GetNonTurnDuelistVariable or a jr nz, .asm_18b9 ld a, [wcccd] @@ -2758,7 +2758,7 @@ Func_189d: ; 189d (0:189d) ret nc bank1call $4f9d ld a, DUELVARS_ARENA_CARD_SUBSTATUS2 - call GetOpposingTurnDuelistVariable + call GetNonTurnDuelistVariable ld [hl], $0 ld de, $0000 ret @@ -2788,6 +2788,7 @@ Func_18d7: ; 18d7 (0:18d7) INCBIN "baserom.gbc",$18f9,$195c - $18f9 +; this function appears to apply several damage modifiers Func_195c: ; 195c (0:195c) ld hl, wDamage ld [hli], a @@ -2797,10 +2798,10 @@ Func_195c: ; 195c (0:195c) xor a ld [wNoDamageOrEffect], a bank1call $7415 - ld a, [wccc4] + ld a, [wTempNonTurnDuelistCardId] push af - ld a, [wccc3] - ld [wccc4], a + ld a, [wTempTurnDuelistCardId] + ld [wTempNonTurnDuelistCardId], a bank1call Func_1a22 ; switch to bank 1, but call a home func ld a, [wccc1] ld c, a @@ -2810,7 +2811,7 @@ Func_195c: ; 195c (0:195c) bank1call $7469 call Func_1ad0 pop af - ld [wccc4], a + ld [wTempNonTurnDuelistCardId], a pop af ld [wNoDamageOrEffect], a ret @@ -2821,23 +2822,23 @@ Func_1994: ; 1994 (0:1994) ld hl, wDamage ld a, [hli] or [hl] - jr nz, .asm_19a3 + jr nz, .nonZeroDamage ld de, $0000 ret -.asm_19a3 +.nonZeroDamage xor a ld [$ff9d], a ld d, [hl] dec hl ld e, [hl] bit 7, d - jr z, .asm_19b8 - res 7, d + jr z, .safe + res 7, d ; cap at 2^15 xor a ld [wccc1], a call HandleDoubleDamageSubstatus - jr .asm_19f3 -.asm_19b8 + jr .checkPluspowerAndDefender +.safe call HandleDoubleDamageSubstatus ld a, e or d @@ -2860,14 +2861,14 @@ Func_1994: ; 1994 (0:1994) call Func_374a call SwapTurn and b - jr z, .asm_19f3 + jr z, .checkPluspowerAndDefender ld hl, $ffe2 add hl, de ld e, l ld d, h ld hl, $ccc1 set 2, [hl] -.asm_19f3 +.checkPluspowerAndDefender ld b, CARD_LOCATION_ARENA call ApplyAttachedPluspower call SwapTurn @@ -2875,9 +2876,9 @@ Func_1994: ; 1994 (0:1994) call ApplyAttachedDefender call HandleDamageReduction bit 7, d - jr z, .asm_1a0a + jr z, .noUnderflow ld de, $0000 -.asm_1a0a +.noUnderflow call SwapTurn ret @@ -2902,7 +2903,7 @@ Func_1a22: ; 1a22 (0:1a22) ld a, [hli] or [hl] or a - jr z, .asm_1a65 + jr z, .noDamage ld d, [hl] dec hl ld e, [hl] @@ -2931,9 +2932,9 @@ Func_1a22: ; 1a22 (0:1a22) call ApplyAttachedPluspower ld b, CARD_LOCATION_ARENA call ApplyAttachedDefender - bit 7, d + bit 7, d ; test for underflow ret z -.asm_1a65 +.noDamage ld de, $0000 ret @@ -2997,17 +2998,17 @@ Func_1aac: ; 1aac (0:1aac) call GetTurnDuelistVariable or a ret nz - ld a, [wccc4] + ld a, [wTempNonTurnDuelistCardId] push af ld a, e add DUELVARS_ARENA_CARD call GetTurnDuelistVariable call LoadDeckCardToBuffer1 ld a, [wCardBuffer1ID] - ld [wccc4], a + ld [wTempNonTurnDuelistCardId], a call Func_1ad3 pop af - ld [wccc4], a + ld [wTempNonTurnDuelistCardId], a scf ret @@ -3016,7 +3017,7 @@ Func_1ad0: ; 1ad0 (0:1ad0) or a ret nz Func_1ad3: ; 1ad3 (0:1ad3) - ld a, [wccc4] + ld a, [wTempNonTurnDuelistCardId] ld e, a call LoadCardDataToBuffer1 ld hl, $cc27 @@ -3051,7 +3052,7 @@ Func_1b8d: ; 1b8d (0:1b8d) ld [hli], a ld a, [wMoveBufferName] ld [hli], a - ld a, [$ccab] + ld a, [wMoveBufferName + 1] ld [hli], a text_hl PokemonsAttackText ; text when using an attack call DrawWideTextBox_PrintText @@ -3105,12 +3106,12 @@ INCBIN "baserom.gbc",$1c05,$1c72 - $1c05 ; returns [hWhoseTurn] <-- ([hWhoseTurn] ^ $1) ; As a side effect, this also returns a duelist variable in a similar manner to -; GetOpposingTurnDuelistVariable, but this function appears to be +; GetNonTurnDuelistVariable, but this function appears to be ; only called to swap the turn value. SwapTurn: ; 1c72 (0:1c72) push af push hl - call GetOpposingTurnDuelistVariable + call GetNonTurnDuelistVariable ld a, h ldh [hWhoseTurn], a pop hl @@ -4228,7 +4229,10 @@ Func_256d: ; 256d (0:256d) INCBIN "baserom.gbc",$2589,$2636 - $2589 -; initializes cursor parameters from the 8 bytes starting at hl +; initializes cursor parameters given the 8 bytes starting at hl, +; which represent the following: +; x position, y position, y displacement between items, number of items, +; cursor tile number, tile behind cursor, ??, ?? InitializeCursorParameters: ; 2636 (0:2636) ld [wCurMenuItem], a ldh [hCurrentMenuItem], a @@ -5780,9 +5784,9 @@ CommentedOut_3243: ; 3243 (0:3243) ; check if the attacked card has any substatus that reduces the damage this turn HandleDamageReduction: ; 3244 (0:3244) - call HandleSubstatus2DamageReduction + call HandleDamageReductionExceptSubstatus2 ld a, DUELVARS_ARENA_CARD_SUBSTATUS2 - call GetOpposingTurnDuelistVariable + call GetNonTurnDuelistVariable or a ret z cp SUBSTATUS2_REDUCE_BY_20 @@ -5805,7 +5809,7 @@ HandleDamageReduction: ; 3244 (0:3244) ld d, h ret -HandleSubstatus2DamageReduction: ; 3269 (0:3269) +HandleDamageReductionExceptSubstatus2: ; 3269 (0:3269) ld a, [wNoDamageOrEffect] or a jr nz, .noDamage @@ -5826,20 +5830,20 @@ HandleSubstatus2DamageReduction: ; 3269 (0:3269) cp SUBSTATUS1_REDUCE_BY_20 jr z, .reduceDamageBy20 cp SUBSTATUS1_HARDEN - jr z, .preventLessThan30Damage - cp SUBSTATUS1_KABUTO_ARMOR + jr z, .preventLessThan40Damage + cp SUBSTATUS1_HALVE_DAMAGE jr z, .halveDamage .notAffectedBySubstatus1 - call Func_34ef + call CheckIfUnderAnyCannotUseStatus ret c ld a, [wMoveBufferCategory] cp POKEMON_POWER ret z - ld a, [wccc4] - cp $9b - jr z, .asm_32d8 - cp $8b - jr z, .asm_32e9 + ld a, [wTempNonTurnDuelistCardId] + cp MR_MIME + jr z, .preventLessThan30Damage ; invisible wall + cp KABUTO + jr z, .halveDamage2 ; kabuto armor ret .noDamage ld de, 0 @@ -5856,7 +5860,7 @@ HandleSubstatus2DamageReduction: ; 3269 (0:3269) ld e, l ld d, h ret -.preventLessThan30Damage +.preventLessThan40Damage ld bc, 40 call CompareDEtoBC ret nc @@ -5872,21 +5876,21 @@ HandleSubstatus2DamageReduction: ; 3269 (0:3269) ld e, l ld d, h ret -.asm_32d8 +.preventLessThan30Damage ld a, [wMoveBufferCategory] cp POKEMON_POWER ret z - ld bc, $001e + ld bc, 30 call CompareDEtoBC ret c - ld de, $0000 + ld de, 0 ret -.asm_32e9 +.halveDamage2 sla d rr e bit 0, e ret z - ld hl, $fffb + ld hl, -5 add hl, de ld e, l ld d, h @@ -5997,12 +6001,12 @@ HandleNoDamageOrEffectSubstatus: ; 3432 (0:3432) text_hl NoDamageOrEffectDueToAgilityText cp SUBSTATUS1_AGILITY jr z, .noDamageOrEffect - call Func_34ef + call CheckIfUnderAnyCannotUseStatus ccf ret nc - ld a, [wccc4] - cp $a0 - jr z, .asm_3470 + ld a, [wTempNonTurnDuelistCardId] + cp MEW1 + jr z, .neutralizingShield or a ret .noDamageOrEffect @@ -6010,11 +6014,11 @@ HandleNoDamageOrEffectSubstatus: ; 3432 (0:3432) ld [wNoDamageOrEffect], a scf ret -.asm_3470 +.neutralizingShield ld a, [wcce6] or a ret nz - ld a, [wccc3] + ld a, [wTempTurnDuelistCardId] ld e, a ld d, $0 call LoadCardDataToBuffer2 @@ -6026,18 +6030,18 @@ HandleNoDamageOrEffectSubstatus: ; 3432 (0:3432) jr .noDamageOrEffect Func_348a: ; 348a (0:348a) - ld a, [wccc4] - cp $96 - jr z, .asm_3493 + ld a, [wTempNonTurnDuelistCardId] + cp HAUNTER1 + jr z, .transparency .asm_3491 or a ret -.asm_3493 +.transparency ld a, [wMoveBufferCategory] cp POKEMON_POWER jr z, .asm_3491 ld a, [wcceb] - call Func_34f0 + call CheckIfUnderAnyCannotUseStatus2 jr c, .asm_3491 xor a ld [wcac2], a @@ -6062,23 +6066,26 @@ Func_34e2: ; 34e2 (0:34e2) call Func_3525 ret -Func_34ef: ; 34ef (0:34ef) +; returns carry if paralyzed, asleep, confused, and/or toxic gas in play, +; meaning that move and/or pkmn power cannot be used +CheckIfUnderAnyCannotUseStatus: ; 34ef (0:34ef) xor a -Func_34f0: ; 34f0 (0:34f0) +; same as above, but if a is non-0, only toxic gas is checked +CheckIfUnderAnyCannotUseStatus2: ; 34f0 (0:34f0) or a - jr nz, .asm_3500 + jr nz, .checkToxicGas ld a, DUELVARS_ARENA_CARD_STATUS call GetTurnDuelistVariable and PASSIVE_STATUS_MASK text_hl CannotUseDueToStatusText scf - jr nz, .asm_3508 -.asm_3500 - ld a, $27 + jr nz, .done ; return carry +.checkToxicGas + ld a, MUK call Func_3509 text_hl UnableDueToToxicGasText -.asm_3508 +.done ret Func_3509: ; 3509 (0:3509) @@ -6188,18 +6195,18 @@ INCBIN "baserom.gbc",$3615,$363b - $3615 ; the attacking card faints if it was affected by destiny bond HandleDestinyBondSubstatus: ; 363b (0:363b) ld a, DUELVARS_ARENA_CARD_SUBSTATUS1 - call GetOpposingTurnDuelistVariable + call GetNonTurnDuelistVariable cp SUBSTATUS1_DESTINY_BOND jr z, .checkHP ret .checkHP ld a, DUELVARS_ARENA_CARD - call GetOpposingTurnDuelistVariable + call GetNonTurnDuelistVariable cp $ff ret z ld a, DUELVARS_ARENA_CARD_HP - call GetOpposingTurnDuelistVariable + call GetNonTurnDuelistVariable or a ret nz ld a, DUELVARS_ARENA_CARD_HP @@ -6225,11 +6232,11 @@ HandleDestinyBondSubstatus: ; 363b (0:363b) ; 0x367b Func_367b: ; 367b (0:367b) - ld a, [wccc4] - cp $7f - jr z, .asm_3683 + ld a, [wTempNonTurnDuelistCardId] + cp MACHAMP + jr z, .strikesBack ret -.asm_3683 +.strikesBack ld a, [wMoveBufferCategory] and RESIDUAL ret nz @@ -6237,7 +6244,7 @@ Func_367b: ; 367b (0:367b) or a ret z call SwapTurn - call Func_34ef + call CheckIfUnderAnyCannotUseStatus call SwapTurn ret c ld hl, $000a @@ -6248,11 +6255,11 @@ Func_367b: ; 367b (0:367b) Func_36a2: ; 36a2 (0:36a2) push hl call Func_2ec4 - ld a, [wccc3] + ld a, [wTempTurnDuelistCardId] ld e, a ld d, $0 call LoadCardDataToBuffer2 - ld hl, $cc68 + ld hl, wCardBuffer2Name ld a, [hli] ld h, [hl] ld l, a @@ -6305,7 +6312,7 @@ Func_36f7: ; 36f7 (0:36f7) ret .asm_3718 ld a, e - call Func_34f0 + call CheckIfUnderAnyCannotUseStatus2 jr c, .asm_3703 ld a, e add $d4 diff --git a/src/wram.asm b/src/wram.asm index 7daef8b..3fa3549 100755 --- a/src/wram.asm +++ b/src/wram.asm @@ -461,7 +461,7 @@ wMoveBuffer:: ; cca6 ; big-endian wDamage:: ; ccb9 ds $2 - + ds $4 wccbf:: ; ccbf @@ -470,14 +470,16 @@ wccbf:: ; ccbf wccc1:: ; ccc1 ds $1 -wccc2:: ; ccc2 +wTempCardId:: ; ccc2 ds $1 -wccc3:: ; ccc3 +wTempTurnDuelistCardId:: ; ccc3 ds $1 -wccc4:: ; ccc4 - ds $2 +wTempNonTurnDuelistCardId:: ; ccc4 + ds $1 + + ds $1 ; may contain 0 or 1 depending on which move was selected wSelectedMoveIndex:: ; ccc6 |