summaryrefslogtreecommitdiff
path: root/engine/routines/applypokerustick.asm
diff options
context:
space:
mode:
Diffstat (limited to 'engine/routines/applypokerustick.asm')
-rw-r--r--engine/routines/applypokerustick.asm26
1 files changed, 26 insertions, 0 deletions
diff --git a/engine/routines/applypokerustick.asm b/engine/routines/applypokerustick.asm
new file mode 100644
index 000000000..3c97fdc5e
--- /dev/null
+++ b/engine/routines/applypokerustick.asm
@@ -0,0 +1,26 @@
+ApplyPokerusTick: ; 13988
+; decreases all pokemon's pokerus counter by b. if the lower nybble reaches zero, the pokerus is cured.
+ ld hl, PartyMon1PokerusStatus ; PartyMon1 + MON_PKRS
+ ld a, [PartyCount]
+ and a
+ ret z ; make sure it's not wasting time on an empty party
+ ld c, a
+.loop
+ ld a, [hl]
+ and $f ; lower nybble is the number of days remaining
+ jr z, .next ; if already 0, skip
+ sub b ; subtract the number of days
+ jr nc, .ok ; max(result, 0)
+ xor a
+.ok
+ ld d, a ; back up this value because we need to preserve the strain (upper nybble)
+ ld a, [hl]
+ and $f0
+ add d
+ ld [hl], a ; this prevents a cured pokemon from recontracting pokerus
+.next
+ ld de, PARTYMON_STRUCT_LENGTH
+ add hl, de
+ dec c
+ jr nz, .loop
+ ret