summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpikalaxalt <PikalaxALT@gmail.com>2016-05-16 09:36:24 -0400
committerpikalaxalt <PikalaxALT@gmail.com>2016-05-16 09:36:24 -0400
commit12396874cf3220cbf3788d86ded266f234eeda1b (patch)
treec98568336085f73b249b37bfb5d751f515229216
parente5155435001c0036335e7555c244b5a35ec13f07 (diff)
HP bar animation addresses and AI switch
-rw-r--r--battle/ai/items.asm36
-rwxr-xr-xbattle/ai/switch.asm91
-rwxr-xr-xengine/anim_hp_bar.asm77
-rw-r--r--misc/mobile_40.asm24
-rw-r--r--wram.asm21
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
diff --git a/wram.asm b/wram.asm
index 801b356c4..33ae950a5 100644
--- a/wram.asm
+++ b/wram.asm
@@ -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