diff options
Diffstat (limited to 'engine/battle/15.asm')
-rwxr-xr-x | engine/battle/15.asm | 366 |
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 "@" |