summaryrefslogtreecommitdiff
path: root/engine/battle/15.asm
diff options
context:
space:
mode:
Diffstat (limited to 'engine/battle/15.asm')
-rwxr-xr-xengine/battle/15.asm366
1 files changed, 366 insertions, 0 deletions
diff --git a/engine/battle/15.asm b/engine/battle/15.asm
new file mode 100755
index 00000000..d2e93ab1
--- /dev/null
+++ b/engine/battle/15.asm
@@ -0,0 +1,366 @@
+GainExperience: ; 5524f (15:524f)
+ ld a, [W_ISLINKBATTLE] ; $d12b
+ cp $4
+ ret z
+ call Func_5546c
+ ld hl, W_PARTYMON1_NUM ; $d16b (aliases: W_PARTYMON1DATA)
+ xor a
+ ld [wWhichPokemon], a ; $cf92
+
+Func_5525f: ; 5525f (15:525f)
+ inc hl
+ ld a, [hli]
+ or [hl]
+ jp z, Func_55436
+ push hl
+ ld hl, W_PLAYERMONSALIVEFLAGS
+ ld a, [wWhichPokemon] ; $cf92
+ ld c, a
+ ld b, $2
+ ld a, $10
+ call Predef ; indirect jump to HandleBitArray (f666 (3:7666))
+ ld a, c
+ and a
+ pop hl
+ jp z, Func_55436
+ ld de, $10
+ add hl, de
+ ld d, h
+ ld e, l
+ ld hl, $d002
+ ld c, $5
+.asm_55285
+ ld a, [hli]
+ ld b, a
+ ld a, [de]
+ add b
+ ld [de], a
+ jr nc, .asm_5529a
+ dec de
+ ld a, [de]
+ inc a
+ jr z, .asm_55295
+ ld [de], a
+ inc de
+ jr .asm_5529a
+.asm_55295
+ ld a, $ff
+ ld [de], a
+ inc de
+ ld [de], a
+.asm_5529a
+ dec c
+ jr z, .asm_552a1
+ inc de
+ inc de
+ jr .asm_55285
+.asm_552a1
+ xor a
+ ld [H_NUMTOPRINT], a ; $ff96 (aliases: H_MULTIPLICAND)
+ ld [$ff97], a
+ ld a, [$d008]
+ ld [$ff98], a
+ ld a, [W_ENEMYMONLEVEL] ; $cff3
+ ld [H_REMAINDER], a ; $ff99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN)
+ call Multiply
+ ld a, $7
+ ld [H_REMAINDER], a ; $ff99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN)
+ ld b, $4
+ call Divide
+ ld hl, $fff2
+ add hl, de
+ ld b, [hl]
+ inc hl
+ ld a, [wPlayerID] ; $d359
+ cp b
+ jr nz, .asm_552d1
+ ld b, [hl]
+ ld a, [wPlayerID + 1] ; $d35a
+ cp b
+ ld a, $0
+ jr z, .asm_552d6
+.asm_552d1
+ call Func_5549f
+ ld a, $1
+.asm_552d6
+ ld [$cf4d], a
+ ld a, [W_ISINBATTLE] ; $d057
+ dec a
+ call nz, Func_5549f
+ inc hl
+ inc hl
+ inc hl
+ ld b, [hl]
+ ld a, [$ff98]
+ ld [$cf4c], a
+ add b
+ ld [hld], a
+ ld b, [hl]
+ ld a, [$ff97]
+ ld [$cf4b], a
+ adc b
+ ld [hl], a
+ jr nc, .asm_552f8
+ dec hl
+ inc [hl]
+ inc hl
+.asm_552f8
+ inc hl
+ push hl
+ ld a, [wWhichPokemon] ; $cf92
+ ld c, a
+ ld b, $0
+ ld hl, W_PARTYMON1 ; $d164
+ add hl, bc
+ ld a, [hl]
+ ld [$d0b5], a
+ call GetMonHeader
+ ld d, $64
+ callab CalcExperience
+ ld a, [H_NUMTOPRINT] ; $ff96 (aliases: H_MULTIPLICAND)
+ ld b, a
+ ld a, [$ff97]
+ ld c, a
+ ld a, [$ff98]
+ ld d, a
+ pop hl
+ ld a, [hld]
+ sub d
+ ld a, [hld]
+ sbc c
+ ld a, [hl]
+ sbc b
+ jr c, .asm_5532e
+ ld a, b
+ ld [hli], a
+ ld a, c
+ ld [hli], a
+ ld a, d
+ ld [hld], a
+ dec hl
+.asm_5532e
+ push hl
+ ld a, [wWhichPokemon] ; $cf92
+ ld hl, W_PARTYMON1NAME ; $d2b5
+ call GetPartyMonName
+ ld hl, GainedText
+ call PrintText
+ xor a
+ ld [$cc49], a
+ call LoadMonData
+ pop hl
+ ld bc, $13
+ add hl, bc
+ push hl
+ callba Func_58f43
+ pop hl
+ ld a, [hl]
+ cp d
+ jp z, Func_55436
+ ld a, [W_CURENEMYLVL] ; $d127
+ push af
+ push hl
+ ld a, d
+ ld [W_CURENEMYLVL], a ; $d127
+ ld [hl], a
+ ld bc, $ffdf
+ add hl, bc
+ ld a, [hl]
+ ld [$d0b5], a
+ ld [$d11e], a
+ call GetMonHeader
+ ld bc, $23
+ add hl, bc
+ push hl
+ ld a, [hld]
+ ld c, a
+ ld b, [hl]
+ push bc
+ ld d, h
+ ld e, l
+ ld bc, $ffee
+ add hl, bc
+ ld b, $1
+ call CalcStats
+ pop bc
+ pop hl
+ ld a, [hld]
+ sub c
+ ld c, a
+ ld a, [hl]
+ sbc b
+ ld b, a
+ ld de, $ffe0
+ add hl, de
+ ld a, [hl]
+ add c
+ ld [hld], a
+ ld a, [hl]
+ adc b
+ ld [hl], a
+ ld a, [wPlayerMonNumber] ; $cc2f
+ ld b, a
+ ld a, [wWhichPokemon] ; $cf92
+ cp b
+ jr nz, .asm_553f7
+ ld de, W_PLAYERMONCURHP ; $d015
+ ld a, [hli]
+ ld [de], a
+ inc de
+ ld a, [hl]
+ ld [de], a
+ ld bc, $1f
+ add hl, bc
+ push hl
+ ld de, W_PLAYERMONLEVEL ; $d022
+ ld bc, $b
+ call CopyData
+ pop hl
+ ld a, [W_PLAYERBATTSTATUS3] ; $d064
+ bit 3, a
+ jr nz, .asm_553c8
+ ld de, $cd0f
+ ld bc, $b
+ call CopyData
+.asm_553c8
+ xor a
+ ld [$d11e], a
+ callab Func_3ed99
+ callab Func_3ed1a
+ callab Func_3ee19
+ callab Func_3cd60
+ callab Func_3ee94
+ call SaveScreenTilesToBuffer1
+.asm_553f7
+ ld hl, GrewLevelText
+ call PrintText
+ xor a
+ ld [$cc49], a
+ call LoadMonData
+ ld d, $1
+ callab PrintStatsBox
+ call WaitForTextScrollButtonPress
+ call LoadScreenTilesFromBuffer1
+ xor a
+ ld [$cc49], a
+ ld a, [$d0b5]
+ ld [$d11e], a
+ ld a, $1a
+ call Predef ; indirect jump to Func_3af5b (3af5b (e:6f5b))
+ ld hl, $ccd3
+ ld a, [wWhichPokemon] ; $cf92
+ ld c, a
+ ld b, $1
+ ld a, $10
+ call Predef ; indirect jump to HandleBitArray (f666 (3:7666))
+ pop hl
+ pop af
+ ld [W_CURENEMYLVL], a ; $d127
+
+Func_55436: ; 55436 (15:5436)
+ ld a, [W_NUMINPARTY] ; $d163
+ ld b, a
+ ld a, [wWhichPokemon] ; $cf92
+ inc a
+ cp b
+ jr z, .asm_55450
+ ld [wWhichPokemon], a ; $cf92
+ ld bc, $2c
+ ld hl, W_PARTYMON1_NUM ; $d16b (aliases: W_PARTYMON1DATA)
+ call AddNTimes
+ jp Func_5525f
+.asm_55450
+ ld hl, W_PLAYERMONSALIVEFLAGS
+ xor a
+ ld [hl], a
+ ld a, [wPlayerMonNumber] ; $cc2f
+ ld c, a
+ ld b, $1
+ push bc
+ ld a, $10
+ call Predef ; indirect jump to HandleBitArray (f666 (3:7666))
+ ld hl, $ccf5
+ xor a
+ ld [hl], a
+ pop bc
+ ld a, $10
+ jp Predef ; indirect jump to HandleBitArray (f666 (3:7666))
+
+Func_5546c: ; 5546c (15:546c)
+ ld a, [W_PLAYERMONSALIVEFLAGS]
+ ld b, a
+ xor a
+ ld c, $8
+ ld d, $0
+.asm_55475
+ xor a
+ srl b
+ adc d
+ ld d, a
+ dec c
+ jr nz, .asm_55475
+ cp $2
+ ret c
+ ld [$d11e], a
+ ld hl, $d002
+ ld c, $7
+.asm_55488
+ xor a
+ ld [H_DIVIDEND], a ; $ff95 (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT)
+ ld a, [hl]
+ ld [H_NUMTOPRINT], a ; $ff96 (aliases: H_MULTIPLICAND)
+ ld a, [$d11e]
+ ld [H_REMAINDER], a ; $ff99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN)
+ ld b, $2
+ call Divide
+ ld a, [$ff98]
+ ld [hli], a
+ dec c
+ jr nz, .asm_55488
+ ret
+
+Func_5549f: ; 5549f (15:549f)
+ ld a, [$ff97]
+ ld b, a
+ ld a, [$ff98]
+ ld c, a
+ srl b
+ rr c
+ add c
+ ld [$ff98], a
+ ld a, [$ff97]
+ adc b
+ ld [$ff97], a
+ ret
+
+GainedText: ; 554b2 (15:54b2)
+ TX_FAR _GainedText
+ db $08 ; asm
+ ld a, [$cc5b]
+ ld hl, WithExpAllText
+ and a
+ ret nz
+ ld hl, ExpPointsText
+ ld a, [$cf4d]
+ and a
+ ret z
+ ld hl, BoostedText
+ ret
+
+WithExpAllText: ; 554cb (15:54cb)
+ TX_FAR _WithExpAllText
+ db $08 ; asm
+ ld hl, ExpPointsText
+ ret
+
+BoostedText: ; 554d4 (15:54d4)
+ TX_FAR _BoostedText
+
+ExpPointsText: ; 554d8 (15:54d8)
+ TX_FAR _ExpPointsText
+ db "@"
+
+GrewLevelText: ; 554dd (15:54dd)
+ TX_FAR _GrewLevelText
+ db $0b
+ db "@"