shithub: pokecrystal

Download patch

ref: 12396874cf3220cbf3788d86ded266f234eeda1b
parent: e5155435001c0036335e7555c244b5a35ec13f07
author: pikalaxalt <PikalaxALT@gmail.com>
date: Mon May 16 05:36:24 EDT 2016

HP bar animation addresses and AI switch

--- a/battle/ai/items.asm
+++ b/battle/ai/items.asm
@@ -571,13 +571,13 @@
 
 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
@@ -584,7 +584,7 @@
 	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 @@
 	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 @@
 	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,12 +641,12 @@
 	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
@@ -653,10 +653,10 @@
 	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 @@
 ; 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 @@
 ; 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
--- a/battle/ai/switch.asm
+++ b/battle/ai/switch.asm
@@ -136,9 +136,11 @@
 	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 @@
 
 .doubledown
 	call .DecreaseScore
-
-	; fallthrough
-; 34931
-
-
 .DecreaseScore: ; 34931
 	ld a, [wEnemyAISwitchScore]
 	dec a
@@ -173,7 +170,6 @@
 	ret
 ; 34939
 
-
 .IncreaseScore: ; 34939
 	ld a, [wEnemyAISwitchScore]
 	inc a
@@ -198,9 +194,9 @@
 	; Perish count is 1
 
 	call FindAliveEnemyMons
-	call FindEnemyMonsWithEnoughHP
+	call FindEnemyMonsWithAtLeastQuarterMaxHP
 	call FindEnemyMonsThatResistPlayer
-	call Function34a85
+	call FindAliveEnemyMonsWithASuperEffectiveMove
 
 	ld a, e
 	cp 2
@@ -207,7 +203,7 @@
 	jr nz, .not_2
 
 	ld a, [wEnemyAISwitchScore]
-	add $30
+	add $30 ; maximum chance
 	ld [wEnemySwitchMonParam], a
 	ret
 
@@ -223,12 +219,11 @@
 	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 @@
 	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 @@
 	ret nc
 
 	call FindAliveEnemyMons
-	call FindEnemyMonsWithEnoughHP
+	call FindEnemyMonsWithAtLeastQuarterMaxHP
 	call FindEnemyMonsThatResistPlayer
-	call Function34a85
+	call FindAliveEnemyMonsWithASuperEffectiveMove
 
 	ld a, e
 	cp $2
@@ -352,7 +347,7 @@
 ; 34a2a
 
 
-Function34a2a: ; 34a2a
+FindEnemyMonsImmuneToLastCounterMove: ; 34a2a
 	ld hl, OTPartyMon1
 	ld a, [OTPartyCount]
 	ld b, a
@@ -361,14 +356,16 @@
 	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
@@ -375,18 +372,21 @@
 	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
@@ -393,12 +393,13 @@
 	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 @@
 
 	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 @@
 
 	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,14 +460,17 @@
 
 	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
@@ -477,18 +477,23 @@
 	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 @@
 	ld a, e
 	pop bc
 	pop hl
-	cp $2
-	jr z, .done2
+	cp 2
+	jr z, .done2 ; at least one move is super-effective
+	cp 1
+	jr nz, .next ; no move does more than half damage
 
-	cp $1
-	jr nz, .next
-
+	; 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,6 +530,7 @@
 	srl b
 	jr nc, .loop
 
+	; if no pokemon has a super-effective move: return
 	ld a, d
 	ld b, a
 	and a
@@ -530,6 +537,7 @@
 	ret z
 
 .done2
+	; convert the bit flag to an int and return
 	push bc
 	sla b
 	sla b
@@ -608,7 +616,7 @@
 ; 34b77
 
 
-FindEnemyMonsWithEnoughHP: ; 34b77
+FindEnemyMonsWithAtLeastQuarterMaxHP: ; 34b77
 	push bc
 	ld de, OTPartySpecies
 	ld b, 1 << (PARTY_LENGTH - 1)
@@ -629,13 +637,12 @@
 	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]
--- a/engine/anim_hp_bar.asm
+++ b/engine/anim_hp_bar.asm
@@ -41,10 +41,10 @@
 ; 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 @@
 ; 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,13 +71,13 @@
 	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
@@ -87,7 +84,7 @@
 	ld [wNewHPBarPixels], a
 
 	push hl
-	ld hl, Buffer3
+	ld hl, wCurHPAnimOldHP
 	ld a, [hli]
 	ld c, a
 	ld a, [hli]
@@ -104,18 +101,18 @@
 	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 @@
 	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 @@
 
 LongAnim_UpdateVariables: ; d6f5
 .loop
-	ld hl, Buffer3
+	ld hl, wCurHPAnimOldHP
 	ld a, [hli]
 	ld e, a
 	ld a, [hli]
@@ -171,13 +168,13 @@
 	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 @@
 
 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 @@
 	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 @@
 	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 @@
 ; d839
 
 ShortHPBar_CalcPixelFrame: ; d839
-	ld a, [Buffer1]
+	ld a, [wCurHPAnimMaxHP]
 	ld c, a
 	ld b, 0
 	ld hl, 0
@@ -411,24 +408,24 @@
 	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
--- a/misc/mobile_40.asm
+++ b/misc/mobile_40.asm
@@ -7450,17 +7450,17 @@
 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 @@
 	ld a, [wd1f0]
 	dec a
 	ld [wd1f0], a
-	cp $01
+	cp 1
 	ret nc
 	ld a, [wd1ee]
 	ld [wd1f0], a
@@ -7482,7 +7482,7 @@
 	ld a, [wd1ee]
 	cp c
 	ret nc
-	ld a, $01
+	ld a, 1
 	ld [wd1f0], a
 	ret
 
@@ -7494,8 +7494,8 @@
 
 .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 @@
 
 .left
 .right
-.asm_103412
+.a_return
 	ld a, [wd1f3]
-	cp $03
+	cp 3
 	ret z
 	ld de, SFX_PUSH_BUTTON
 	call PlaySFX
--- a/wram.asm
+++ b/wram.asm
@@ -2022,7 +2022,20 @@
 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 @@
 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
--