Experience and level calculations

This commit is contained in:
PikalaxALT 2015-11-03 12:36:33 -05:00
parent 40eae001a1
commit b1dc88b728
6 changed files with 88 additions and 83 deletions

View File

@ -7543,7 +7543,7 @@ endr
call GetBaseData call GetBaseData
push bc push bc
ld d, MAX_LEVEL ld d, MAX_LEVEL
callab Function50e47 callab CalcExpAtLevel
pop bc pop bc
ld hl, $000a ld hl, $000a
add hl, bc add hl, bc
@ -7572,7 +7572,7 @@ endr
xor a ; PARTYMON xor a ; PARTYMON
ld [MonType], a ld [MonType], a
predef CopyPkmnToTempMon predef CopyPkmnToTempMon
callab Function50e1b callab CalcLevel
pop bc pop bc
ld hl, PartyMon1Level - PartyMon1 ld hl, PartyMon1Level - PartyMon1
add hl, bc add hl, bc
@ -7864,7 +7864,7 @@ endr
.asm_3f186 .asm_3f186
ld d, MAX_LEVEL ld d, MAX_LEVEL
callab Function50e47 callab CalcExpAtLevel
ld a, [hMultiplicand] ld a, [hMultiplicand]
ld b, a ld b, a
ld a, [$ffb5] ld a, [$ffb5]
@ -7887,7 +7887,7 @@ endr
ld [hld], a ld [hld], a
.asm_3f1a8 .asm_3f1a8
callab Function50e1b callab CalcLevel
ld a, d ld a, d
pop bc pop bc
pop de pop de
@ -8235,7 +8235,7 @@ Function3f39c: ; 3f39c
push de push de
ld d, b ld d, b
push de push de
callab Function50e47 callab CalcExpAtLevel
pop de pop de
ld hl, hMultiplicand ld hl, hMultiplicand
ld a, [hli] ld a, [hli]
@ -8245,7 +8245,7 @@ Function3f39c: ; 3f39c
ld a, [hl] ld a, [hl]
push af push af
inc d inc d
callab Function50e47 callab CalcExpAtLevel
ld hl, $ffb6 ld hl, $ffb6
ld a, [hl] ld a, [hl]
ld [$ffba], a ld [$ffba], a

View File

@ -1407,11 +1407,11 @@ Function10955: ; 10955
call DisableLCD call DisableLCD
ld hl, PackMenuGFX ld hl, PackMenuGFX
ld de, VTiles2 ld de, VTiles2
ld bc, $0600 ld bc, $60 tiles
ld a, BANK(PackMenuGFX) ld a, BANK(PackMenuGFX)
call FarCopyBytes call FarCopyBytes
hlcoord 0, 1 hlcoord 0, 1
ld bc, 220 ld bc, 11 * SCREEN_WIDTH
ld a, $24 ld a, $24
call ByteFill call ByteFill
hlcoord 5, 1 hlcoord 5, 1
@ -1419,12 +1419,12 @@ Function10955: ; 10955
call ClearBox call ClearBox
hlcoord 0, 0 hlcoord 0, 0
ld a, $28 ld a, $28
ld c, $14 ld c, SCREEN_WIDTH
.asm_1098a .loop
ld [hli], a ld [hli], a
inc a inc a
dec c dec c
jr nz, .asm_1098a jr nz, .loop
call DrawPocketName call DrawPocketName
call Function109a5 call Function109a5
hlcoord 0, 12 hlcoord 0, 12

View File

@ -5,7 +5,7 @@
sprite_header: MACRO sprite_header: MACRO
dw \1 dw \1
db \2 * $40, BANK(\1) db \2 * 4 tiles, BANK(\1)
db \3, \4 db \3, \4
ENDM ENDM

View File

@ -1382,7 +1382,7 @@ RareCandy: ; ef14
ld [CurPartyLevel], a ld [CurPartyLevel], a
push de push de
ld d, a ld d, a
callba Function50e47 callba CalcExpAtLevel
pop de pop de
ld a, PartyMon1Exp - PartyMon1 ld a, PartyMon1Exp - PartyMon1

View File

@ -175,4 +175,5 @@ bcd: MACRO
endr endr
ENDM ENDM
tiles EQUS "* $10"
tile EQUS "+ $10 *" tile EQUS "+ $10 *"

144
main.asm
View File

@ -8068,7 +8068,7 @@ endr
push de push de
ld a, [CurPartyLevel] ld a, [CurPartyLevel]
ld d, a ld d, a
callab Function50e47 callab CalcExpAtLevel
pop de pop de
ld a, [hMultiplicand] ld a, [hMultiplicand]
ld [de], a ld [de], a
@ -8527,7 +8527,7 @@ SentGetPkmnIntoFromBox: ; db3f
add $2 add $2
ld [MonType], a ld [MonType], a
predef CopyPkmnToTempMon predef CopyPkmnToTempMon
callab Function50e1b callab CalcLevel
ld a, d ld a, d
ld [CurPartyLevel], a ld [CurPartyLevel], a
pop hl pop hl
@ -8777,7 +8777,7 @@ Functiondd64: ; dd64
callba HealPartyMon callba HealPartyMon
ld a, [CurPartyLevel] ld a, [CurPartyLevel]
ld d, a ld d, a
callab Function50e47 callab CalcExpAtLevel
pop bc pop bc
ld hl, $0008 ld hl, $0008
add hl, bc add hl, bc
@ -8892,7 +8892,7 @@ SentPkmnIntoBox: ; de6e
push de push de
ld a, [CurPartyLevel] ld a, [CurPartyLevel]
ld d, a ld d, a
callab Function50e47 callab CalcExpAtLevel
pop de pop de
ld a, [hMultiplicand] ld a, [hMultiplicand]
ld [de], a ld [de], a
@ -10134,7 +10134,7 @@ Functione698: ; e698
ld de, TempMon ld de, TempMon
ld bc, $0020 ld bc, $0020
call CopyBytes call CopyBytes
callab Function50e1b callab CalcLevel
ld a, [wBreedMon1Level] ld a, [wBreedMon1Level]
ld b, a ld b, a
ld a, d ld a, d
@ -10149,7 +10149,7 @@ Functione6b3: ; e6b3
ld de, TempMon ld de, TempMon
ld bc, $0020 ld bc, $0020
call CopyBytes call CopyBytes
callab Function50e1b callab CalcLevel
ld a, [wBreedMon2Level] ld a, [wBreedMon2Level]
ld b, a ld b, a
ld a, d ld a, d
@ -16891,7 +16891,7 @@ LoadEmote:: ; 1442f
emote_header: MACRO emote_header: MACRO
dw \1 dw \1
db \2 * $10, BANK(\1) db \2 tiles, BANK(\1)
dw \3 dw \3
ENDM ENDM
@ -20345,7 +20345,7 @@ Function16a66: ; 16a66
ld [hl], a ld [hl], a
ld a, [CurPartyLevel] ld a, [CurPartyLevel]
ld d, a ld d, a
callab Function50e47 callab CalcExpAtLevel
ld hl, wEggMonExp ld hl, wEggMonExp
ld a, [hMultiplicand] ld a, [hMultiplicand]
ld [hli], a ld [hli], a
@ -44560,7 +44560,7 @@ Function4e0e7: ; 4e0e7 (13:60e7)
jr z, .asm_4e111 jr z, .asm_4e111
inc a inc a
ld d, a ld d, a
callba Function50e47 callba CalcExpAtLevel
rept 2 rept 2
ld hl, TempMonExp + 2 ld hl, TempMonExp + 2
endr endr
@ -48102,43 +48102,43 @@ Function50db9: ; 50db9
; 50e1b ; 50e1b
Function50e1b: ; 50e1b CalcLevel: ; 50e1b
ld a, [TempMonSpecies] ld a, [TempMonSpecies]
ld [CurSpecies], a ld [CurSpecies], a
call GetBaseData call GetBaseData
ld d, 1 ld d, 1
.asm_50e26 .next_level
inc d inc d
ld a, d ld a, d
cp (MAX_LEVEL + 1) % $100 cp (MAX_LEVEL + 1) % $100
jr z, .asm_50e45 jr z, .got_level
call Function50e47 call CalcExpAtLevel
push hl push hl
ld hl, TempMonExp + 2 ld hl, TempMonExp + 2
ld a, [hMultiplicand + 2] ld a, [hProduct + 3]
ld c, a ld c, a
ld a, [hld] ld a, [hld]
sub c sub c
ld a, [hMultiplicand + 1] ld a, [hProduct + 2]
ld c, a ld c, a
ld a, [hld] ld a, [hld]
sbc c sbc c
ld a, [hMultiplicand + 0] ld a, [hProduct + 1]
ld c, a ld c, a
ld a, [hl] ld a, [hl]
sbc c sbc c
pop hl pop hl
jr nc, .asm_50e26 jr nc, .next_level
.asm_50e45 .got_level
dec d dec d
ret ret
; 50e47 ; 50e47
Function50e47: ; 50e47 CalcExpAtLevel: ; 50e47
; (a/b)*n**3 + c*n**2 + d*n - e
ld a, [BaseGrowthRate] ld a, [BaseGrowthRate]
rept 2 rept 2
add a add a
@ -48147,36 +48147,38 @@ endr
ld b, 0 ld b, 0
ld hl, GrowthRates ld hl, GrowthRates
add hl, bc add hl, bc
call Function50eed ; Cube the level
call .LevelSquared
ld a, d ld a, d
ld [hMultiplier], a ld [hMultiplier], a
call Multiply call Multiply
; Multiply by a
ld a, [hl] ld a, [hl]
and $f0 and $f0
swap a swap a
ld [hMultiplier], a ld [hMultiplier], a
call Multiply call Multiply
; Divide by b
ld a, [hli] ld a, [hli]
and $f and $f
ld [hDivisor], a ld [hDivisor], a
ld b, $4 ld b, 4
call Divide call Divide
; Push the cubic term to the stack
ld a, [hQuotient + 0] ld a, [hQuotient + 0]
push af push af
ld a, [hQuotient + 1] ld a, [hQuotient + 1]
push af push af
ld a, [hQuotient + 2] ld a, [hQuotient + 2]
push af push af
; Square the level and multiply by the lower 7 bits of c
call Function50eed call .LevelSquared
ld a, [hl] ld a, [hl]
and $7f and $7f
ld [hMultiplier], a ld [hMultiplier], a
call Multiply call Multiply
; Push the absolute value of the quadratic term to the stack
ld a, [hProduct + 1] ld a, [hProduct + 1]
push af push af
ld a, [hProduct + 2] ld a, [hProduct + 2]
@ -48185,7 +48187,7 @@ endr
push af push af
ld a, [hli] ld a, [hli]
push af push af
; Multiply the level by d
xor a xor a
ld [hMultiplicand + 0], a ld [hMultiplicand + 0], a
ld [hMultiplicand + 1], a ld [hMultiplicand + 1], a
@ -48194,68 +48196,70 @@ endr
ld a, [hli] ld a, [hli]
ld [hMultiplier], a ld [hMultiplier], a
call Multiply call Multiply
; Subtract e
ld b, [hl] ld b, [hl]
ld a, [hProduct + 3] ld a, [hProduct + 3]
sub b sub b
ld [$ffb6], a ld [hMultiplicand + 2], a
ld b, $0 ld b, $0
ld a, [hProduct + 2] ld a, [hProduct + 2]
sbc b sbc b
ld [$ffb5], a ld [hMultiplicand + 1], a
ld a, [hProduct + 1]
sbc b
ld [hMultiplicand], a
; If bit 7 of c is set, c is negative; otherwise, it's positive
pop af
and $80
jr nz, .subtract
; Add c*n**2 to (d*n - e)
pop bc
ld a, [hProduct + 3]
add b
ld [hMultiplicand + 2], a
pop bc
ld a, [hProduct + 2]
adc b
ld [hMultiplicand + 1], a
pop bc
ld a, [hProduct + 1]
adc b
ld [hMultiplicand], a
jr .done_quadratic
.subtract
; Subtract c*n**2 from (d*n - e)
pop bc
ld a, [hProduct + 3]
sub b
ld [hMultiplicand + 2], a
pop bc
ld a, [hProduct + 2]
sbc b
ld [hMultiplicand + 1], a
pop bc
ld a, [hProduct + 1] ld a, [hProduct + 1]
sbc b sbc b
ld [hMultiplicand], a ld [hMultiplicand], a
pop af .done_quadratic
and $80 ; Add (a/b)*n**3 to (d*n - e +/- c*n**2)
jr nz, .asm_50ec8
pop bc pop bc
ld a, [$ffb6] ld a, [hProduct + 3]
add b add b
ld [$ffb6], a ld [hMultiplicand + 2], a
pop bc pop bc
ld a, [$ffb5] ld a, [hProduct + 2]
adc b adc b
ld [$ffb5], a ld [hMultiplicand + 1], a
pop bc pop bc
ld a, [hMultiplicand] ld a, [hProduct + 1]
adc b
ld [hMultiplicand], a
jr .asm_50eda
.asm_50ec8
pop bc
ld a, [$ffb6]
sub b
ld [$ffb6], a
pop bc
ld a, [$ffb5]
sbc b
ld [$ffb5], a
pop bc
ld a, [hMultiplicand]
sbc b
ld [hMultiplicand], a
.asm_50eda
pop bc
ld a, [$ffb6]
add b
ld [$ffb6], a
pop bc
ld a, [$ffb5]
adc b
ld [$ffb5], a
pop bc
ld a, [hMultiplicand]
adc b adc b
ld [hMultiplicand], a ld [hMultiplicand], a
ret ret
; 50eed ; 50eed
Function50eed: ; 50eed .LevelSquared: ; 50eed
xor a xor a
ld [hMultiplicand + 0], a ld [hMultiplicand + 0], a
ld [hMultiplicand + 1], a ld [hMultiplicand + 1], a