From 7d178cd4c7fd85ec67f97cfa406896bbbec8ccd1 Mon Sep 17 00:00:00 2001 From: earthoul Date: Sat, 13 Dec 2025 00:44:27 +0900 Subject: [PATCH] Refactor with cp16 variants --- src/engine/bank03.asm | 82 ++++------------------- src/engine/bank0c.asm | 8 +-- src/engine/bank0d.asm | 40 ++--------- src/engine/bank0f.asm | 32 ++------- src/engine/bank10.asm | 96 ++++----------------------- src/engine/black_box.asm | 16 +---- src/engine/card_list_ops.asm | 40 ++--------- src/engine/duel/effect_functions1.asm | 11 +-- src/macros/code.asm | 44 ++++++++++++ 9 files changed, 90 insertions(+), 279 deletions(-) diff --git a/src/engine/bank03.asm b/src/engine/bank03.asm index 49fd6bb..2504ecd 100644 --- a/src/engine/bank03.asm +++ b/src/engine/bank03.asm @@ -764,7 +764,8 @@ CountGRCoinPiecesObtained: pop bc ret -; return the location name in hl, using c == island and a == location +; for c = island and a = location, +; return the location name in hl GetLocationName: push af push bc @@ -801,7 +802,7 @@ GetCurrentLocationName: pop af ret -; using de == receiving card, return its long name in hl +; for de = receiving card id, return its long name in hl ; the first half of this function and the next two are identical GetReceivingCardLongName: push af @@ -813,21 +814,9 @@ GetReceivingCardLongName: ld c, a ld a, [hli] ld b, a - ld a, b - cp $ff - jr c, .ok - jr nz, .ok ; redundant - ld a, c - cp $ff -.ok + cp16bc_long $ffff jr z, .not_found - ld a, b - cp d - jr c, .next - jr nz, .next - ld a, c - cp e -.next + cp16bc_long de jr z, .load_name ld a, CARD_RECEIVE_STRUCT_TEXTS_SIZE add l @@ -859,7 +848,7 @@ GetReceivingCardLongName: pop af ret -; using de == receiving card, return its short name in hl +; for de = receiving card id, return its short name in hl GetReceivingCardShortName: push af push bc @@ -870,21 +859,9 @@ GetReceivingCardShortName: ld c, a ld a, [hli] ld b, a - ld a, b - cp $ff - jr c, .ok - jr nz, .ok ; redundant - ld a, c - cp $ff -.ok + cp16bc_long $ffff jr z, .not_found - ld a, b - cp d - jr c, .next - jr nz, .next - ld a, c - cp e -.next + cp16bc_long de jr z, .load_short_name ld a, CARD_RECEIVE_STRUCT_TEXTS_SIZE add l @@ -918,7 +895,7 @@ GetReceivingCardShortName: pop af ret -; using de == receiving card, return its "received" text in hl +; for de = receiving card id, return its "received" text in hl GetReceivedCardText: push af push bc @@ -929,21 +906,9 @@ GetReceivedCardText: ld c, a ld a, [hli] ld b, a - ld a, b - cp $ff - jr c, .ok - jr nz, .ok ; redundant - ld a, c - cp $ff -.ok + cp16bc_long $ffff jr z, .not_found - ld a, b - cp d - jr c, .next - jr nz, .next - ld a, c - cp e -.next + cp16bc_long de jr z, .load_received_text ld a, CARD_RECEIVE_STRUCT_TEXTS_SIZE add l @@ -4541,14 +4506,7 @@ ScriptCommand_CompareLoadedVarWord: ld hl, wScriptFlags res 0, [hl] res 1, [hl] - ld a, d - cp b - jr c, .high_byte_not_equal - jr nz, .high_byte_not_equal -; high byte equal - ld a, e - cp c -.high_byte_not_equal + cp16_long bc jr nz, .not_equal set 0, [hl] .not_equal @@ -5130,25 +5088,13 @@ Func_ebc6: ld e, a ld a, [wde15 + 1] ld d, a - ld a, d - cp $00 - jr c, .asm_ec1d - jr nz, .asm_ec1d - ld a, e - cp $00 -.asm_ec1d + cp16_long 0 jr z, .asm_ec36 ld a, [wde15 + 2] ld e, a ld a, [wde15 + 3] ld d, a - ld a, d - cp $00 - jr c, .asm_ec31 - jr nz, .asm_ec31 - ld a, e - cp $00 -.asm_ec31 + cp16_long 0 jr z, .asm_ec36 scf ccf diff --git a/src/engine/bank0c.asm b/src/engine/bank0c.asm index b0b8bbe..3fca72f 100644 --- a/src/engine/bank0c.asm +++ b/src/engine/bank0c.asm @@ -1065,13 +1065,7 @@ Func_311d5: ld [wd615], a call LoadTxRam3 farcall GetGameCenterChips - ld a, b - cp h - jr c, .asm_3123b - jr nz, .asm_3123b - ld a, c - cp l -.asm_3123b + cp16bc_long hl jr nc, .asm_31248 ld a, $01 start_script diff --git a/src/engine/bank0d.asm b/src/engine/bank0d.asm index 66406eb..fc7285e 100644 --- a/src/engine/bank0d.asm +++ b/src/engine/bank0d.asm @@ -1296,37 +1296,13 @@ Func_349cd: Func_349d5: ld a, [wPlayerOWObject] farcall GetOWObjectTilePosition - ld a, d - cp $0b - jr c, .asm_349e6 - jr nz, .asm_349e6 - ld a, e - cp $08 -.asm_349e6 + cpcoord 11, 8 jr z, .asm_34a0e - ld a, d - cp $0a - jr c, .asm_349f2 - jr nz, .asm_349f2 - ld a, e - cp $09 -.asm_349f2 + cpcoord 10, 9 jr z, .asm_34a2a - ld a, d - cp $09 - jr c, .asm_349fe - jr nz, .asm_349fe - ld a, e - cp $09 -.asm_349fe + cpcoord 9, 9 jr z, .asm_34a46 - ld a, d - cp $08 - jr c, .asm_34a0a - jr nz, .asm_34a0a - ld a, e - cp $08 -.asm_34a0a + cpcoord 8, 8 jr z, .asm_34a62 jr .asm_34a7c .asm_34a0e @@ -2280,13 +2256,7 @@ Func_3512c: ld [wd615], a call LoadTxRam3 farcall GetGameCenterChips - ld a, b - cp h - jr c, .asm_35199 - jr nz, .asm_35199 - ld a, c - cp l -.asm_35199 + cp16bc_long hl jr nc, .asm_351a6 ld a, $01 start_script diff --git a/src/engine/bank0f.asm b/src/engine/bank0f.asm index b9d6745..ba66467 100644 --- a/src/engine/bank0f.asm +++ b/src/engine/bank0f.asm @@ -290,13 +290,7 @@ Func_3c1d0: ld a, [sLinkDuelCounter + 1] ld b, a call DisableSRAM - ld a, b - cp $00 - jr c, .asm_3c278 - jr nz, .asm_3c278 - ld a, c - cp $32 -.asm_3c278 + cp16bc_long 50 jr z, .asm_3c280 ld a, $01 start_script @@ -317,13 +311,7 @@ Func_3c1d0: ld a, [sLinkDuelCounter + 1] ld b, a call DisableSRAM - ld a, b - cp $00 - jr c, .asm_3c2a9 - jr nz, .asm_3c2a9 - ld a, c - cp $64 -.asm_3c2a9 + cp16bc_long 100 jr z, .asm_3c2b1 ld a, $01 start_script @@ -6793,13 +6781,7 @@ Func_3f44f: ld [wd615], a call LoadTxRam3 farcall GetGameCenterChips - ld a, b - cp h - jr c, .asm_3f4bc - jr nz, .asm_3f4bc - ld a, c - cp l -.asm_3f4bc + cp16bc_long hl jr nc, .asm_3f4c9 ld a, $01 start_script @@ -7283,13 +7265,7 @@ Func_3f858: ld b, a ld a, [wTextBoxFrameColor] ld c, a - ld a, b - cp $00 - jr c, .asm_3f874 - jr nz, .asm_3f874 - ld a, c - cp $03 -.asm_3f874 + cp16bc_lb 0, 3 jr nz, .asm_3f87b farcall Func_1352a ret diff --git a/src/engine/bank10.asm b/src/engine/bank10.asm index 46636a6..81346c2 100644 --- a/src/engine/bank10.asm +++ b/src/engine/bank10.asm @@ -1672,13 +1672,7 @@ Func_41074: ld a, [wde11 + 1] ld b, a inc bc - ld a, b - cp $03 - jr c, .asm_41090 - jr nz, .asm_41090 - ld a, c - cp $e8 -.asm_41090 + cp16bc_long 1000 jr nc, .asm_4109a ld a, c ld [wde11], a @@ -1709,13 +1703,7 @@ Func_41074: ld a, [wde0d + 1] ld b, a inc bc - ld a, b - cp $03 - jr c, .asm_410d7 - jr nz, .asm_410d7 - ld a, c - cp $e8 -.asm_410d7 + cp16bc_long 1000 jr nc, .asm_410e1 ld a, c ld [wde0d], a @@ -1752,13 +1740,7 @@ Func_41074: ld e, a ld a, [wde11 + 1] ld d, a - ld a, d - cp $00 - jr c, .asm_41127 - jr nz, .asm_41127 - ld a, e - cp $32 -.asm_41127 + cp16_long 50 jr nz, .asm_4110a call Func_41167 jr .asm_4110a @@ -1772,13 +1754,7 @@ Func_4112e: ld e, a ld a, [wde15 + 1] ld d, a - ld a, b - cp d - jr c, .asm_41146 - jr nz, .asm_41146 - ld a, c - cp e -.asm_41146 + cp16bc_long de jr nc, .asm_4114a scf ret @@ -3445,37 +3421,13 @@ Func_41dac: Func_41db4: ld a, [wPlayerOWObject] farcall GetOWObjectTilePosition - ld a, d - cp $05 - jr c, .asm_41dc5 - jr nz, .asm_41dc5 - ld a, e - cp $08 -.asm_41dc5 + cpcoord 5, 8 jr z, .asm_41ded - ld a, d - cp $04 - jr c, .asm_41dd1 - jr nz, .asm_41dd1 - ld a, e - cp $09 -.asm_41dd1 + cpcoord 4, 9 jr z, .asm_41e09 - ld a, d - cp $03 - jr c, .asm_41ddd - jr nz, .asm_41ddd - ld a, e - cp $09 -.asm_41ddd + cpcoord 3, 9 jr z, .asm_41e25 - ld a, d - cp $02 - jr c, .asm_41de9 - jr nz, .asm_41de9 - ld a, e - cp $08 -.asm_41de9 + cpcoord 2, 8 jr z, .asm_41e41 jr .asm_41e5b .asm_41ded @@ -4656,13 +4608,7 @@ Func_42776: ld a, [wde13 + 1] ld b, a inc bc - ld a, b - cp $03 - jr c, .asm_42792 - jr nz, .asm_42792 - ld a, c - cp $e8 -.asm_42792 + cp16bc_long 1000 jr nc, .asm_4279c ld a, c ld [wde13], a @@ -4693,13 +4639,7 @@ Func_42776: ld a, [wde0f + 1] ld b, a inc bc - ld a, b - cp $03 - jr c, .asm_427da - jr nz, .asm_427da - ld a, c - cp $e8 -.asm_427da + cp16bc_long 1000 jr nc, .asm_427e4 ld a, c ld [wde0f], a @@ -4736,13 +4676,7 @@ Func_42776: ld e, a ld a, [wde13 + 1] ld d, a - ld a, d - cp $00 - jr c, .asm_4282c - jr nz, .asm_4282c - ld a, e - cp $32 -.asm_4282c + cp16_long 50 jr nz, .asm_4280f call Func_4286c jr .asm_4280f @@ -4756,13 +4690,7 @@ Func_42833: ld e, a ld a, [wde17 + 1] ld d, a - ld a, b - cp d - jr c, .asm_4284b - jr nz, .asm_4284b - ld a, c - cp e -.asm_4284b + cp16bc_long de jr nc, .asm_4284f scf ret diff --git a/src/engine/black_box.asm b/src/engine/black_box.asm index 6f6ddad..4bea4ee 100644 --- a/src/engine/black_box.asm +++ b/src/engine/black_box.asm @@ -963,13 +963,7 @@ CheckIfSpecialPromoCard: ld b, a or c jr z, .not_found - ld a, b - cp d - jr c, .next_card - jr nz, .next_card - ld a, c - cp e -.next_card + cp16bc_long de jr nz, .loop_cards ; found @@ -1030,13 +1024,7 @@ Stubbed_CountSpecialPromoCardsInHL: ld b, a or c jr z, .next_card_in_list - ld a, b - cp d - jr c, .next_promo - jr nz, .next_promo - ld a, c - cp e -.next_promo + cp16bc_long de jr nz, .loop_promo pop hl pop bc diff --git a/src/engine/card_list_ops.asm b/src/engine/card_list_ops.asm index cb71489..f2b7277 100644 --- a/src/engine/card_list_ops.asm +++ b/src/engine/card_list_ops.asm @@ -38,13 +38,7 @@ CheckIfAllIdenticalCardsInHL: ld b, a or c jr z, .all_identical - ld a, d - cp b - jr c, .skip_low - jr nz, .skip_low - ld a, e - cp c -.skip_low + cp16_long bc jr nz, .empty_or_different jr .loop_cards @@ -102,13 +96,7 @@ SearchCardInListInHL: ld b, a or c jr z, .not_found - ld a, d - cp b - jr c, .not_equal - jr nz, .not_equal - ld a, e - cp c -.not_equal + cp16_long bc jr z, .found pop af inc a @@ -312,13 +300,7 @@ ENDR ld e, a ld a, [wLoadedCard1Name + 1] ld d, a - ld a, d - cp b - jr c, .next_lookup - jr nz, .next_lookup - ld a, e - cp c -.next_lookup + cp16_long bc jr nz, .loop_lookup ld a, BASIC | STAGE2 jr .valid @@ -524,13 +506,7 @@ ListUniqueCardsOfTheSameTypeAndRarity: ld a, d ld [hli], a .check_bounds - ld a, d - cp HIGH(NUM_CARDS) - jr c, .next_card - jr nz, .next_card - ld a, e - cp LOW(NUM_CARDS) -.next_card + cp16_long NUM_CARDS inc de jr nz, .loop_cards ; done, append $0000 terminator @@ -787,13 +763,7 @@ RemoveCardFromListInHL: ld b, a or c jr z, .not_found - ld a, d - cp b - jr c, .next_card - jr nz, .next_card - ld a, e - cp c -.next_card + cp16_long bc jr nz, .loop_cards ; found diff --git a/src/engine/duel/effect_functions1.asm b/src/engine/duel/effect_functions1.asm index 2ea4551..93f1520 100644 --- a/src/engine/duel/effect_functions1.asm +++ b/src/engine/duel/effect_functions1.asm @@ -975,7 +975,7 @@ SetUsedPkmnPowerThisTurnFlag: ; - a = SUBSTATUS1_* constant ApplySubstatus1ToAttackingCardAndSetCountdown: call ApplySubstatus1ToAttackingCard - + ; set turn countdown to %01 ld a, DUELVARS_ARENA_CARD_SUBSTATUS3 get_turn_duelist_var @@ -2414,12 +2414,7 @@ CheckIfCardHasGrassOrRainbowEnergyAttached: push hl ld a, l call GetCardIDFromDeckIndex - ld a, d - cp b - jr nz, .not_equal - ld a, e - cp c -.not_equal + cp16 bc pop hl pop de jr z, .no_carry @@ -9830,7 +9825,7 @@ ReelIn_AddToHandEffect: cp $ff jr nz, .loop_add_cards ret - + .loop_add_cards ; copy from hTempList to wDuelTempList ld a, [hli] diff --git a/src/macros/code.asm b/src/macros/code.asm index a8564e0..3d04fa8 100644 --- a/src/macros/code.asm +++ b/src/macros/code.asm @@ -52,6 +52,46 @@ MACRO? cp16 : ENDM +MACRO? cp16_long + ld a, d + cp HIGH(\1) + jr c, :+ + jr nz, :+ + ld a, e + cp LOW(\1) +: +ENDM + +MACRO? cp16bc_long + ld a, b + cp HIGH(\1) + jr c, :+ + jr nz, :+ + ld a, c + cp LOW(\1) +: +ENDM + +MACRO? cp16_lb + ld a, d + cp \1 + jr c, :+ + jr nz, :+ + ld a, e + cp \2 +: +ENDM + +MACRO? cp16bc_lb + ld a, b + cp \1 + jr c, :+ + jr nz, :+ + ld a, c + cp \2 +: +ENDM + MACRO? cphl inc hl ld a, [hld] @@ -61,3 +101,7 @@ MACRO? cphl cp LOW(\1) : ENDM + +MACRO? cpcoord + cp16_lb \1, \2 +ENDM