diff options
author | pikalaxalt <PikalaxALT@gmail.com> | 2016-05-16 09:36:24 -0400 |
---|---|---|
committer | pikalaxalt <PikalaxALT@gmail.com> | 2016-05-16 09:36:24 -0400 |
commit | 12396874cf3220cbf3788d86ded266f234eeda1b (patch) | |
tree | c98568336085f73b249b37bfb5d751f515229216 | |
parent | e5155435001c0036335e7555c244b5a35ec13f07 (diff) |
HP bar animation addresses and AI switch
-rw-r--r-- | battle/ai/items.asm | 36 | ||||
-rwxr-xr-x | battle/ai/switch.asm | 91 | ||||
-rwxr-xr-x | engine/anim_hp_bar.asm | 77 | ||||
-rw-r--r-- | misc/mobile_40.asm | 24 | ||||
-rw-r--r-- | wram.asm | 21 |
5 files changed, 133 insertions, 116 deletions
diff --git a/battle/ai/items.asm b/battle/ai/items.asm index ae367c83c..d72df4c1a 100644 --- a/battle/ai/items.asm +++ b/battle/ai/items.asm @@ -571,20 +571,20 @@ EnemyUsedFullHeal: ; 383a3 (e:43a3) EnemyUsedMaxPotion: ; 383ae (e:43ae) ld a, MAX_POTION - ld [wd1f1], a + ld [CurEnemyItem], a jr FullRestoreContinue EnemyUsedFullRestore: ; 383b5 (e:43b5) call AI_HealStatus ld a, FULL_RESTORE - ld [wd1f1], a + ld [CurEnemyItem], a ld hl, EnemySubStatus3 res SUBSTATUS_CONFUSED, [hl] xor a ld [EnemyConfuseCount], a FullRestoreContinue: ; 383c6 - ld de, wd1ec + ld de, wCurHPAnimOldHP ld hl, EnemyMonHP + 1 ld a, [hld] ld [de], a @@ -596,11 +596,11 @@ FullRestoreContinue: ; 383c6 ld a, [hld] ld [de], a inc de - ld [Buffer1], a + ld [wCurHPAnimMaxHP], a ld [EnemyMonHP + 1], a ld a, [hl] ld [de], a - ld [Buffer2], a + ld [wCurHPAnimMaxHP + 1], a ld [EnemyMonHP], a jr EnemyPotionFinish ; 383e8 (e:43e8) @@ -620,20 +620,20 @@ EnemyUsedHyperPotion: ; 383f4 (e:43f4) ld b, 200 EnemyPotionContinue: ; 383f8 - ld [wd1f1], a + ld [CurEnemyItem], a ld hl, EnemyMonHP + 1 ld a, [hl] - ld [wd1ec], a + ld [wCurHPAnimOldHP], a add b ld [hld], a - ld [wd1ee], a + ld [wCurHPAnimNewHP], a ld a, [hl] - ld [wd1ec + 1], a - ld [wd1ee + 1], a + ld [wCurHPAnimOldHP + 1], a + ld [wCurHPAnimNewHP + 1], a jr nc, .ok inc a ld [hl], a - ld [wd1ee + 1], a + ld [wCurHPAnimNewHP + 1], a .ok inc hl ld a, [hld] @@ -641,22 +641,22 @@ EnemyPotionContinue: ; 383f8 ld de, EnemyMonMaxHP + 1 ld a, [de] dec de - ld [Buffer1], a + ld [wCurHPAnimMaxHP], a sub b ld a, [hli] ld b, a ld a, [de] - ld [Buffer2], a + ld [wCurHPAnimMaxHP + 1], a sbc b jr nc, EnemyPotionFinish inc de ld a, [de] dec de ld [hld], a - ld [wd1ee], a + ld [wCurHPAnimNewHP], a ld a, [de] ld [hl], a - ld [wd1ef], a + ld [wCurHPAnimNewHP + 1], a EnemyPotionFinish: ; 38436 call PrintText_UsedItemOn @@ -843,7 +843,7 @@ EnemyUsedXSpecial: ; 38553 ; a = ITEM_CONSTANT ; b = BATTLE_CONSTANT (ATTACK, DEFENSE, SPEED, SP_ATTACK, SP_DEFENSE, ACCURACY, EVASION) EnemyUsedXItem: - ld [wd1f1], a + ld [CurEnemyItem], a push bc call PrintText_UsedItemOn pop bc @@ -855,13 +855,13 @@ EnemyUsedXItem: ; Parameter ; a = ITEM_CONSTANT PrintText_UsedItemOn_AND_AIUpdateHUD: ; 38568 - ld [wd1f1], a + ld [CurEnemyItem], a call PrintText_UsedItemOn jp AIUpdateHUD ; 38571 PrintText_UsedItemOn: ; 38571 - ld a, [wd1f1] + ld a, [CurEnemyItem] ld [wd265], a call GetItemName ld hl, StringBuffer1 diff --git a/battle/ai/switch.asm b/battle/ai/switch.asm index 3a0b27a0f..cb1fe3660 100755 --- a/battle/ai/switch.asm +++ b/battle/ai/switch.asm @@ -136,9 +136,11 @@ CheckPlayerMoveTypeMatchups: ; 3484e jr c, .loop2 ; neutral -rept 5 inc c -endr + inc c + inc c + inc c + inc c cp 10 jr z, .loop2 @@ -161,11 +163,6 @@ endr .doubledown call .DecreaseScore - - ; fallthrough -; 34931 - - .DecreaseScore: ; 34931 ld a, [wEnemyAISwitchScore] dec a @@ -173,7 +170,6 @@ endr ret ; 34939 - .IncreaseScore: ; 34939 ld a, [wEnemyAISwitchScore] inc a @@ -198,16 +194,16 @@ CheckAbleToSwitch: ; 34941 ; Perish count is 1 call FindAliveEnemyMons - call FindEnemyMonsWithEnoughHP + call FindEnemyMonsWithAtLeastQuarterMaxHP call FindEnemyMonsThatResistPlayer - call Function34a85 + call FindAliveEnemyMonsWithASuperEffectiveMove ld a, e cp 2 jr nz, .not_2 ld a, [wEnemyAISwitchScore] - add $30 + add $30 ; maximum chance ld [wEnemySwitchMonParam], a ret @@ -223,12 +219,11 @@ CheckAbleToSwitch: ; 34941 jr nc, .loop1 ld a, b - add $30 + add $30 ; maximum chance ld [wEnemySwitchMonParam], a ret .no_perish - call CheckPlayerMoveTypeMatchups ld a, [wEnemyAISwitchScore] cp 11 @@ -238,13 +233,13 @@ CheckAbleToSwitch: ; 34941 and a jr z, .no_last_counter_move - call Function34a2a + call FindEnemyMonsImmuneToLastCounterMove ld a, [wEnemyAISwitchScore] and a jr z, .no_last_counter_move ld c, a - call Function34aa7 + call FindEnemyMonsWithASuperEffectiveMove ld a, [wEnemyAISwitchScore] cp $ff ret z @@ -285,9 +280,9 @@ CheckAbleToSwitch: ; 34941 ret nc call FindAliveEnemyMons - call FindEnemyMonsWithEnoughHP + call FindEnemyMonsWithAtLeastQuarterMaxHP call FindEnemyMonsThatResistPlayer - call Function34a85 + call FindAliveEnemyMonsWithASuperEffectiveMove ld a, e cp $2 @@ -352,7 +347,7 @@ FindAliveEnemyMons: ; 349f4 ; 34a2a -Function34a2a: ; 34a2a +FindEnemyMonsImmuneToLastCounterMove: ; 34a2a ld hl, OTPartyMon1 ld a, [OTPartyCount] ld b, a @@ -361,44 +356,50 @@ Function34a2a: ; 34a2a xor a ld [wEnemyAISwitchScore], a -.asm_34a39 +.loop ld a, [CurOTMon] cp d push hl - jr z, .asm_34a77 + jr z, .next push hl push bc + + ; If the Pokemon has at least 1 HP... ld bc, MON_HP add hl, bc pop bc ld a, [hli] or [hl] pop hl - jr z, .asm_34a77 + jr z, .next ld a, [hl] ld [CurSpecies], a call GetBaseData + + ; the enemy's last move is damaging... ld a, [LastEnemyCounterMove] dec a ld hl, Moves + MOVE_POWER call GetMoveAttr and a - jr z, .asm_34a77 + jr z, .next + ; and the Pokemon is immune to it... inc hl call GetMoveByte ld hl, BaseType call CheckTypeMatchup ld a, [wTypeMatchup] and a - jr nz, .asm_34a77 + jr nz, .next + ; ... encourage that Pokemon. ld a, [wEnemyAISwitchScore] or c ld [wEnemyAISwitchScore], a -.asm_34a77 +.next pop hl dec b ret z @@ -410,11 +411,11 @@ Function34a2a: ; 34a2a inc d srl c - jr .asm_34a39 + jr .loop ; 34a85 -Function34a85: ; 34a85 +FindAliveEnemyMonsWithASuperEffectiveMove: ; 34a85 push bc ld a, [OTPartyCount] ld e, a @@ -444,13 +445,9 @@ Function34a85: ; 34a85 and c ld c, a +FindEnemyMonsWithASuperEffectiveMove: ; 34aa7 - ; fallthrough -; 34aa7 - -Function34aa7: ; 34aa7 - - ld a, $ff + ld a, -1 ld [wEnemyAISwitchScore], a ld hl, OTPartyMon1Moves ld b, 1 << (PARTY_LENGTH - 1) @@ -463,32 +460,40 @@ Function34aa7: ; 34aa7 push hl push bc + ; for move on mon: ld b, NUM_MOVES ld c, 0 .loop3 + ; if move is None: break ld a, [hli] and a push hl jr z, .break3 + ; if move has no power: continue dec a ld hl, Moves + MOVE_POWER call GetMoveAttr and a jr z, .nope + ; check type matchups inc hl call GetMoveByte ld hl, BattleMonType1 call CheckTypeMatchup + + ; if immune or not very effective: continue ld a, [wTypeMatchup] cp 10 jr c, .nope + ; if neutral: load 1 and continue ld e, 1 cp 10 + 1 jr c, .nope + ; if super-effective: load 2 and break ld e, 2 jr .break3 @@ -505,18 +510,19 @@ Function34aa7: ; 34aa7 ld a, e pop bc pop hl - cp $2 - jr z, .done2 - - cp $1 - jr nz, .next + cp 2 + jr z, .done2 ; at least one move is super-effective + cp 1 + jr nz, .next ; no move does more than half damage + ; encourage this pokemon ld a, d or b ld d, a - jr .next + jr .next ; such a long jump .next + ; next pokemon? push bc ld bc, PARTYMON_STRUCT_LENGTH add hl, bc @@ -524,12 +530,14 @@ Function34aa7: ; 34aa7 srl b jr nc, .loop + ; if no pokemon has a super-effective move: return ld a, d ld b, a and a ret z .done2 + ; convert the bit flag to an int and return push bc sla b sla b @@ -608,7 +616,7 @@ FindEnemyMonsThatResistPlayer: ; 34b20 ; 34b77 -FindEnemyMonsWithEnoughHP: ; 34b77 +FindEnemyMonsWithAtLeastQuarterMaxHP: ; 34b77 push bc ld de, OTPartySpecies ld b, 1 << (PARTY_LENGTH - 1) @@ -629,13 +637,12 @@ FindEnemyMonsWithEnoughHP: ; 34b77 inc hl inc hl ; hl = MaxHP + 1 -; b = (4 * b) % $100 + (c & 3) -; c = c / 4 +; bc = [CurHP] * 4 srl c rl b srl c rl b -; a = (MaxHP / $100) - b - (1 if c > (MaxHP % $100) else 0) +; if bc >= [hl], encourage ld a, [hld] cp c ld a, [hl] diff --git a/engine/anim_hp_bar.asm b/engine/anim_hp_bar.asm index 21a378dee..6272ff7ea 100755 --- a/engine/anim_hp_bar.asm +++ b/engine/anim_hp_bar.asm @@ -41,10 +41,10 @@ _AnimateHPBar: ; d627 ; d65f .IsMaximumMoreThan48Pixels: ; d65f - ld a, [Buffer2] + ld a, [wCurHPAnimMaxHP + 1] and a jr nz, .player - ld a, [Buffer1] + ld a, [wCurHPAnimMaxHP] cp 6 * 8 jr nc, .player and a @@ -56,11 +56,8 @@ _AnimateHPBar: ; d627 ; d670 .ComputePixels: ; d670 -; Buffer1-2: Max HP -; Buffer3-4: Old HP -; Buffer5-6: New HP push hl - ld hl, Buffer1 + ld hl, wCurHPAnimMaxHP ld a, [hli] ld e, a ld a, [hli] @@ -74,20 +71,20 @@ _AnimateHPBar: ; d627 ld a, e ld [wCurHPBarPixels], a - ld a, [Buffer5] + ld a, [wCurHPAnimNewHP] ld c, a - ld a, [Buffer6] + ld a, [wCurHPAnimNewHP + 1] ld b, a - ld a, [Buffer1] + ld a, [wCurHPAnimMaxHP] ld e, a - ld a, [Buffer2] + ld a, [wCurHPAnimMaxHP + 1] ld d, a call ComputeHPBarPixels ld a, e ld [wNewHPBarPixels], a push hl - ld hl, Buffer3 + ld hl, wCurHPAnimOldHP ld a, [hli] ld c, a ld a, [hli] @@ -104,18 +101,18 @@ _AnimateHPBar: ; d627 sbc b ld d, a jr c, .negative - ld a, [Buffer3] - ld [wd1f5], a - ld a, [Buffer5] - ld [wd1f6], a + ld a, [wCurHPAnimOldHP] + ld [wCurHPAnimLowHP], a + ld a, [wCurHPAnimNewHP] + ld [wCurHPAnimHighHP], a ld bc, 1 jr .got_direction .negative - ld a, [Buffer3] - ld [wd1f6], a - ld a, [Buffer5] - ld [wd1f5], a + ld a, [wCurHPAnimOldHP] + ld [wCurHPAnimHighHP], a + ld a, [wCurHPAnimNewHP] + ld [wCurHPAnimLowHP], a ld a, e xor $ff inc a @@ -126,9 +123,9 @@ _AnimateHPBar: ; d627 ld bc, -1 .got_direction ld a, d - ld [wd1f3], a + ld [wCurHPAnimDeltaHP], a ld a, e - ld [wd1f4], a + ld [wCurHPAnimDeltaHP + 1], a ret ; d6e2 @@ -151,7 +148,7 @@ ShortAnim_UpdateVariables: ; d6e2 LongAnim_UpdateVariables: ; d6f5 .loop - ld hl, Buffer3 + ld hl, wCurHPAnimOldHP ld a, [hli] ld e, a ld a, [hli] @@ -171,13 +168,13 @@ LongAnim_UpdateVariables: ; d6f5 ld h, d add hl, bc ld a, l - ld [Buffer3], a + ld [wCurHPAnimOldHP], a ld a, h - ld [Buffer4], a + ld [wCurHPAnimOldHP + 1], a push hl push de push bc - ld hl, Buffer1 + ld hl, wCurHPAnimMaxHP ld a, [hli] ld e, a ld a, [hli] @@ -222,13 +219,13 @@ ShortHPBarAnim_UpdateTiles: ; d730 LongHPBarAnim_UpdateTiles: ; d749 call HPBarAnim_UpdateHPRemaining - ld a, [Buffer3] + ld a, [wCurHPAnimOldHP] ld c, a - ld a, [Buffer4] + ld a, [wCurHPAnimOldHP + 1] ld b, a - ld a, [Buffer1] + ld a, [wCurHPAnimMaxHP] ld e, a - ld a, [Buffer2] + ld a, [wCurHPAnimMaxHP + 1] ld d, a call ComputeHPBarPixels ld c, e @@ -277,9 +274,9 @@ HPBarAnim_UpdateHPRemaining: ; d784 ld [hli], a ld [hld], a dec hl - ld a, [Buffer3] + ld a, [wCurHPAnimOldHP] ld [StringBuffer2 + 1], a - ld a, [Buffer4] + ld a, [wCurHPAnimOldHP + 1] ld [StringBuffer2], a ld de, StringBuffer2 lb bc, 2, 3 @@ -292,9 +289,9 @@ HPBarAnim_PaletteUpdate: ; d7b4 ld a, [hCGB] and a ret z - ld hl, wd1f0 + ld hl, wCurHPAnimPal call SetHPPal - ld a, [wd1f0] + ld a, [wCurHPAnimPal] ld c, a callba ApplyHPBarPals ret @@ -375,7 +372,7 @@ HPBarAnim_BGMapUpdate: ; d7c9 ; d839 ShortHPBar_CalcPixelFrame: ; d839 - ld a, [Buffer1] + ld a, [wCurHPAnimMaxHP] ld c, a ld b, 0 ld hl, 0 @@ -411,24 +408,24 @@ ShortHPBar_CalcPixelFrame: ; d839 jr c, .no_carry inc b .no_carry - ld a, [wd1f5] + ld a, [wCurHPAnimLowHP] cp b jr nc, .finish - ld a, [wd1f6] + ld a, [wCurHPAnimHighHP] cp b jr c, .finish ld a, b .finish - ld [Buffer3], a + ld [wCurHPAnimOldHP], a ret .return_zero xor a - ld [Buffer3], a + ld [wCurHPAnimOldHP], a ret .return_max - ld a, [Buffer1] - ld [Buffer3], a + ld a, [wCurHPAnimMaxHP] + ld [wCurHPAnimOldHP], a ret ; d88c diff --git a/misc/mobile_40.asm b/misc/mobile_40.asm index 5f618c4fe..936b8e13b 100644 --- a/misc/mobile_40.asm +++ b/misc/mobile_40.asm @@ -7450,17 +7450,17 @@ Function10339a: ; 10339a Function1033af: ; 1033af call GetJoypad ld a, [hJoyPressed] - bit 5, a + bit D_LEFT_F, a jr nz, .left - bit 4, a + bit D_RIGHT_F, a jr nz, .right - bit 1, a + bit B_BUTTON_F, a jr nz, .b - bit 0, a + bit A_BUTTON_F, a jr nz, .a - bit 6, a + bit D_UP_F, a jr nz, .up - bit 7, a + bit D_DOWN_F, a jr nz, .down ret @@ -7468,7 +7468,7 @@ Function1033af: ; 1033af ld a, [wd1f0] dec a ld [wd1f0], a - cp $01 + cp 1 ret nc ld a, [wd1ee] ld [wd1f0], a @@ -7482,7 +7482,7 @@ Function1033af: ; 1033af ld a, [wd1ee] cp c ret nc - ld a, $01 + ld a, 1 ld [wd1f0], a ret @@ -7494,8 +7494,8 @@ Function1033af: ; 1033af .a ld a, [wd1f3] - cp $03 - jr nz, .asm_103412 + cp 3 + jr nz, .a_return ld de, SFX_TRANSACTION call PlaySFX ld hl, Buffer2 @@ -7506,9 +7506,9 @@ Function1033af: ; 1033af .left .right -.asm_103412 +.a_return ld a, [wd1f3] - cp $03 + cp 3 ret z ld de, SFX_PUSH_BUTTON call PlaySFX @@ -2022,7 +2022,20 @@ TilesetPalettes:: ; d1e6 EvolvableFlags:: ; d1e8 flag_array PARTY_LENGTH -wForceEvolution:: ds 1 +wForceEvolution:: db ; d1e9 + +; HP bar animations +wCurHPAnimMaxHP:: dw ; d1ea +wCurHPAnimOldHP:: dw ; d1ec +wCurHPAnimNewHP:: dw ; d1ee +wCurHPAnimPal:: db ; d1f0 +wCurHPBarPixels:: db ; d1f1 +wNewHPBarPixels:: db ; d1f2 +wCurHPAnimDeltaHP:: dw ; d1f3 +wCurHPAnimLowHP:: db ; d1f5 +wCurHPAnimHighHP:: db ; d1f6 + ds wCurHPAnimMaxHP - @ + MagikarpLength:: Buffer1:: ; d1ea ds 1 @@ -2039,14 +2052,14 @@ wd1ee:: ds 1 Buffer6:: wd1ef:: ds 1 wd1f0:: ds 1 -wCurHPBarPixels:: +CurEnemyItem:: wd1f1:: ds 1 -wNewHPBarPixels:: wd1f2:: ds 1 wd1f3:: ds 1 wd1f4:: ds 1 wd1f5:: ds 1 -wd1f6:: ds 4 +wd1f6:: + ds 4 LinkBattleRNs:: ; d1fa ds 10 |