Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix the 6-bit Caught Level to record Pokemon > Level 63 #8

Merged
merged 2 commits into from
May 27, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 10 additions & 5 deletions constants/pokemon_data_constants.asm
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,11 @@ MON_SPECIES rb
MON_ITEM rb
MON_MOVES rb NUM_MOVES
MON_ID rw
MON_EXP rb 3
MON_EXP rb
rsset MON_EXP
MON_CAUGHTTIME rb
MON_EXP2 rb
MON_EXP3 rb
MON_STAT_EXP rw NUM_EXP_STATS
rsset MON_STAT_EXP
MON_HP_EXP rw
Expand All @@ -92,7 +96,7 @@ MON_HAPPINESS rb
MON_POKERUS rb
MON_CAUGHTDATA rw
rsset MON_CAUGHTDATA
MON_CAUGHTTIME rb
rb_skip
MON_CAUGHTGENDER rb
rsset MON_CAUGHTDATA
MON_CAUGHTLEVEL rb
Expand All @@ -115,10 +119,11 @@ PARTYMON_STRUCT_LENGTH EQU _RS
NICKNAMED_MON_STRUCT_LENGTH EQU PARTYMON_STRUCT_LENGTH + MON_NAME_LENGTH
REDMON_STRUCT_LENGTH EQU 44

; caught data
; experience data
CAUGHT_TIME_MASK EQU %11000000
EXP_MASK EQU %00111111

CAUGHT_TIME_MASK EQU %11000000
CAUGHT_LEVEL_MASK EQU %00111111
; caught data

CAUGHT_GENDER_MASK EQU %10000000
CAUGHT_LOCATION_MASK EQU %01111111
Expand Down
44 changes: 40 additions & 4 deletions engine/battle/core.asm
Original file line number Diff line number Diff line change
Expand Up @@ -7139,10 +7139,20 @@ GiveExperiencePoints:
ld [hl], a
jr nc, .no_exp_overflow
dec hl
push bc
push af
ld a, [hl]
and EXP_MASK
ld b, a
inc [hl]
vulcandth marked this conversation as resolved.
Show resolved Hide resolved
pop af
ld a, b
pop bc
inc a
jr nz, .no_exp_overflow
ld a, $ff
ld a, EXP_MASK
ld [hli], a
ld a, $ff
ld [hli], a
ld [hl], a

Expand Down Expand Up @@ -7173,13 +7183,19 @@ GiveExperiencePoints:
ld a, [hld]
sbc c
ld a, [hl]
push af
and EXP_MASK
ld d, a
pop af
ld a, d
sbc b
jr c, .not_max_exp
ld a, b
ld [hli], a
ld a, c
ld [hli], a
ld a, d
ldh a, [hQuotient + 3]
ld d, a
ld [hld], a

.not_max_exp
Expand Down Expand Up @@ -7470,9 +7486,13 @@ AnimateExpBar:
ld [hld], a
jr nc, .NoOverflow
inc [hl]
ld a, [hl]
and EXP_MASK
and a
jr nz, .NoOverflow
ld a, $ff
ld a, EXP_MASK
ld [hli], a
ld a, $ff
ld [hli], a
ld [hl], a

Expand All @@ -7491,13 +7511,22 @@ AnimateExpBar:
ld a, [hld]
sbc c
ld a, [hl]
push de
push af
and EXP_MASK
ld d, a
pop af
ld a, d
sbc b
pop de
jr c, .AlreadyAtMaxExp
ld a, b
ld [hli], a
ld a, c
ld [hli], a
ld a, d
ld a, [hl]
and CAUGHT_TIME_MASK
or d
ld [hld], a

.AlreadyAtMaxExp:
Expand Down Expand Up @@ -7878,6 +7907,13 @@ CalcExpBar:
sbc b
ld [hld], a
ld a, [de]
push de
push af
and EXP_MASK
ld d, a
pop af
ld a, d
pop de
ld c, a
ldh a, [hMathBuffer]
sbc c
Expand Down
14 changes: 14 additions & 0 deletions engine/events/happiness_egg.asm
Original file line number Diff line number Diff line change
Expand Up @@ -158,9 +158,16 @@ DayCareStep::
dec hl
inc [hl]
ld a, [hl]
and EXP_MASK
cp HIGH(MAX_DAY_CARE_EXP >> 8)
jr c, .day_care_lady
push de
ld a, [hl]
and CAUGHT_TIME_MASK
ld d, a
ld a, HIGH(MAX_DAY_CARE_EXP >> 8)
or d
pop de
ld [hl], a

.day_care_lady
Expand All @@ -180,9 +187,16 @@ DayCareStep::
dec hl
inc [hl]
ld a, [hl]
and EXP_MASK
cp HIGH(MAX_DAY_CARE_EXP >> 8)
jr c, .check_egg
push de
ld a, [hl]
and CAUGHT_TIME_MASK
ld d, a
ld a, HIGH(MAX_DAY_CARE_EXP >> 8)
or d
pop de
ld [hl], a

.check_egg
Expand Down
19 changes: 12 additions & 7 deletions engine/events/poke_seer.asm
Original file line number Diff line number Diff line change
Expand Up @@ -95,10 +95,17 @@ SeerAction4:
ret

ReadCaughtData:
ld a, MON_CAUGHTTIME
call GetPartyParamLocation
ld a , [hl]
and CAUGHT_TIME_MASK
rlca
rlca
ld [wSeerCaughtTime], a
ld a, MON_CAUGHTDATA
call GetPartyParamLocation
ld a, [hli]
ld [wSeerCaughtData], a
ld [wSeerCaughtLevel], a
ld a, [hld]
ld [wSeerCaughtGender], a
or [hl]
Expand Down Expand Up @@ -153,8 +160,8 @@ GetCaughtLevel:

; caught level
; Limited to between 1 and 63 since it's a 6-bit quantity.
ld a, [wSeerCaughtData]
and CAUGHT_LEVEL_MASK
ld a, [wSeerCaughtLevel]
and a
jr z, .unknown
cp CAUGHT_EGG_LEVEL ; egg marker value
jr nz, .print
Expand All @@ -179,12 +186,10 @@ GetCaughtLevel:
db "???@"

GetCaughtTime:
ld a, [wSeerCaughtData]
and CAUGHT_TIME_MASK
ld a, [wSeerCaughtTime]
and a
jr z, .none

rlca
rlca
dec a
ld hl, .times
call GetNthString
Expand Down
7 changes: 7 additions & 0 deletions engine/items/item_effects.asm
Original file line number Diff line number Diff line change
Expand Up @@ -1321,7 +1321,14 @@ RareCandyEffect:
ld a, MON_EXP
call GetPartyParamLocation

push de
ld a, [hl]
and CAUGHT_TIME_MASK
ld d, a
ldh a, [hMultiplicand + 0]
and EXP_MASK
or d
pop de
ld [hli], a
ldh a, [hMultiplicand + 1]
ld [hli], a
Expand Down
28 changes: 19 additions & 9 deletions engine/pokemon/caught_data.asm
Original file line number Diff line number Diff line change
Expand Up @@ -163,16 +163,26 @@ CaughtAskNicknameText:
SetCaughtData:
ld a, [wPartyCount]
dec a
ld hl, wPartyMon1CaughtLevel
; ld hl, wPartyMon1CaughtLevel
vulcandth marked this conversation as resolved.
Show resolved Hide resolved
ld hl, wPartyMon1CaughtTime
call GetPartyLocation
SetBoxmonOrEggmonCaughtData:
ld a, [hl]
and EXP_MASK
ld b, a
ld a, [wTimeOfDay]
inc a
rrca
rrca
ld b, a
ld a, [wCurPartyLevel]
or b
ld [hl], a
ld a, (wPartyMon1CaughtLevel - wPartyMon1CaughtTime)
add l
ld l, a
adc h
sub l
ld h, a
ld a, [wCurPartyLevel]
ld [hli], a
ld a, [wMapGroup]
ld b, a
Expand All @@ -199,18 +209,18 @@ SetBoxmonOrEggmonCaughtData:
ret

SetBoxMonCaughtData:
ld a, BANK(sBoxMon1CaughtLevel)
ld a, BANK(sBoxMon1CaughtTime)
call OpenSRAM
ld hl, sBoxMon1CaughtLevel
ld hl, sBoxMon1CaughtTime
call SetBoxmonOrEggmonCaughtData
call CloseSRAM
ret

SetGiftBoxMonCaughtData:
push bc
ld a, BANK(sBoxMon1CaughtLevel)
ld a, BANK(sBoxMon1CaughtTime)
call OpenSRAM
ld hl, sBoxMon1CaughtLevel
ld hl, sBoxMon1CaughtTime
pop bc
call SetGiftMonCaughtData
call CloseSRAM
Expand All @@ -219,7 +229,7 @@ SetGiftBoxMonCaughtData:
SetGiftPartyMonCaughtData:
ld a, [wPartyCount]
dec a
ld hl, wPartyMon1CaughtLevel
ld hl, wPartyMon1CaughtTime
push bc
call GetPartyLocation
pop bc
Expand All @@ -234,7 +244,7 @@ SetGiftMonCaughtData:

SetEggMonCaughtData:
ld a, [wCurPartyMon]
ld hl, wPartyMon1CaughtLevel
ld hl, wPartyMon1CaughtTime
call GetPartyLocation
ld a, [wCurPartyLevel]
push af
Expand Down
7 changes: 7 additions & 0 deletions engine/pokemon/experience.asm
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,13 @@ CalcLevel:
ldh a, [hProduct + 1]
ld c, a
ld a, [hl]
push de
push af
and EXP_MASK
ld d, a
pop af
ld a, d
pop de
sbc c
pop hl
jr nc, .next_level
Expand Down
6 changes: 6 additions & 0 deletions engine/pokemon/move_mon.asm
Original file line number Diff line number Diff line change
Expand Up @@ -889,7 +889,13 @@ RetrieveBreedmon:
pop bc
ld hl, MON_EXP
add hl, bc
ld a, [hl]
and CAUGHT_TIME_MASK
push de
ld d, a
ldh a, [hMultiplicand]
or d
pop de
ld [hli], a
ldh a, [hMultiplicand + 1]
ld [hli], a
Expand Down
18 changes: 16 additions & 2 deletions engine/pokemon/stats_screen.asm
Original file line number Diff line number Diff line change
Expand Up @@ -633,6 +633,14 @@ LoadPinkPage:
hlcoord 13, 10
lb bc, 3, 7
ld de, wTempMonExp
ld a, [de]
and EXP_MASK
ld [wStringBuffer1], a
ld a, [wTempMonExp + 1]
ld [wStringBuffer1 + 1], a
ld a, [wTempMonExp + 2]
ld [wStringBuffer1 + 2], a
ld de, wStringBuffer1
call PrintNum
call .CalcExpToNextLevel
hlcoord 13, 13
Expand Down Expand Up @@ -677,7 +685,6 @@ LoadPinkPage:
ld d, a
farcall CalcExpAtLevel
ld hl, wTempMonExp + 2
ld hl, wTempMonExp + 2
ldh a, [hQuotient + 3]
sub [hl]
dec hl
Expand All @@ -687,7 +694,14 @@ LoadPinkPage:
dec hl
ld [wExpToNextLevel + 1], a
ldh a, [hQuotient + 1]
sbc [hl]
push af
ld e, a
ld a, [hl]
and EXP_MASK
ld d, a
pop af
ld a, e
sbc d
ld [wExpToNextLevel], a
ret

Expand Down
2 changes: 1 addition & 1 deletion macros/wram.asm
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ box_struct: MACRO
\1Item:: db
\1Moves:: ds NUM_MOVES
\1ID:: dw
\1CaughtTime::
\1Exp:: ds 3
\1StatExp::
\1HPExp:: dw
Expand All @@ -21,7 +22,6 @@ box_struct: MACRO
\1Happiness:: db
\1PokerusStatus:: db
\1CaughtData::
\1CaughtTime::
\1CaughtLevel:: db
\1CaughtGender::
\1CaughtLocation:: db
Expand Down
2 changes: 1 addition & 1 deletion wram.asm
Original file line number Diff line number Diff line change
Expand Up @@ -1848,7 +1848,7 @@ wSeerOT:: ds NAME_LENGTH
wSeerOTGrammar:: db
wSeerCaughtLevelString:: ds 4
wSeerCaughtLevel:: db
wSeerCaughtData:: db
wSeerCaughtTime:: db
wSeerCaughtGender:: db


Expand Down