kep-hack/engine/battle/unused_stats_functions.asm
Llinos Evans 0af5bd126b Port PureRGB AI
Short tests showed positive results. Revert if it fucks up anything.

PureRGB enhances Gen 1 AI in various ways, fixing notorious glitches and making it not do completely stupid things. I would use shin pokered's, but it may be too difficult for unfamiliar players, and has a bunch of outdated markers I'd have to spruce up.

Relevant changes:
- Burn effect calls have been replaced with Fire Blast's effect, replicating the burn spread use-case of Fire Blast
- Teleport references removed because pureRGB uses a unique version
- Any straggler references to effects not used in pureRGB
- Mist properly referred to as we only have one move that provides stat drop immunity.

Updated the sprite gallery too!!
2023-09-07 02:14:38 +01:00

95 lines
1.7 KiB
NASM

; Used by the pureRGB AI
;shinpokerednote: ADDED: doubles attack if burned or quadruples speed if paralyzed.
;It's meant to be run right before healing paralysis or burn so as to
;undo the stat changes.
UndoBurnParStats:
ld hl, wBattleMonStatus
ld de, wPlayerStatsToDouble
ldh a, [hWhoseTurn]
and a
jr z, .checkburn
ld hl, wEnemyMonStatus
ld de, wEnemyStatsToDouble
.checkburn
ld a, [hl] ;load statuses
and 1 << BRN ;test for burn
jr z, .checkpar
ld a, $01
ld [de], a ;set attack to be doubled to undo the stat change of BRN
call DoubleSelectedStats
jr .return
.checkpar
ld a, [hl] ;load statuses
and 1 << PAR ;test for paralyze
jr z, .return
ld a, $04
ld [de], a ;set speed to be doubled (done twice) to undo the stat change of BRN
call DoubleSelectedStats
call DoubleSelectedStats
.return
xor a
ld [de], a ;reset the stat change bits
ret
; Reused for pureRGB AI
DoubleSelectedStats:
ldh a, [hWhoseTurn]
and a
ld a, [wPlayerStatsToDouble]
ld hl, wBattleMonAttack + 1
jr z, .notEnemyTurn
ld a, [wEnemyStatsToDouble]
ld hl, wEnemyMonAttack + 1
.notEnemyTurn
ld c, 4
ld b, a
.loop
srl b
call c, .doubleStat
inc hl
inc hl
dec c
ret z
jr .loop
.doubleStat
ld a, [hl]
add a
ld [hld], a
ld a, [hl]
rl a
ld [hli], a
ret
; does nothing since no stats are ever selected (barring glitches)
;HalveSelectedStats:
; ldh a, [hWhoseTurn]
; and a
; ld a, [wPlayerStatsToHalve]
; ld hl, wBattleMonAttack
; jr z, .notEnemyTurn
; ld a, [wEnemyStatsToHalve]
; ld hl, wEnemyMonAttack
;.notEnemyTurn
; ld c, 4
; ld b, a
;.loop
; srl b
; call c, .halveStat
; inc hl
; inc hl
; dec c
; ret z
; jr .loop
;.halveStat
; ld a, [hl]
; srl a
; ld [hli], a
; rr [hl]
; or [hl]
; jr nz, .nonzeroStat
; ld [hl], 1
;.nonzeroStat
;dec hl
; ret