aboutsummaryrefslogtreecommitdiffstats
path: root/engine/pokemon
diff options
context:
space:
mode:
authorNarishma-gb <194818981+Narishma-gb@users.noreply.github.com>2025-11-27 19:39:25 +0100
committerGitHub <noreply@github.com>2025-11-27 13:39:25 -0500
commit3a4382c6055e21da72357dd18638947a2acbbda9 (patch)
treecb383fbd6a0dc57e3b0f9e9483c2a3f898f42f96 /engine/pokemon
parentAvoid magic numbers for most `CopyData` calls (#542) (diff)
downloadpokeyellow-3a4382c6055e21da72357dd18638947a2acbbda9.tar.gz
pokeyellow-3a4382c6055e21da72357dd18638947a2acbbda9.tar.xz
pokeyellow-3a4382c6055e21da72357dd18638947a2acbbda9.zip
Use more Pokemon data constants, create MOVE_NAME_LENGTH (#543)
Diffstat (limited to 'engine/pokemon')
-rw-r--r--engine/pokemon/add_mon.asm33
-rw-r--r--engine/pokemon/bills_pc.asm4
-rw-r--r--engine/pokemon/evos_moves.asm10
-rw-r--r--engine/pokemon/learn_move.asm6
-rw-r--r--engine/pokemon/load_mon_data.asm6
-rw-r--r--engine/pokemon/remove_mon.asm70
-rw-r--r--engine/pokemon/set_types.asm2
-rw-r--r--engine/pokemon/status_screen.asm2
8 files changed, 73 insertions, 60 deletions
diff --git a/engine/pokemon/add_mon.asm b/engine/pokemon/add_mon.asm
index a7c201ea..455221ce 100644
--- a/engine/pokemon/add_mon.asm
+++ b/engine/pokemon/add_mon.asm
@@ -59,7 +59,7 @@ _AddPartyMon::
.next3
ldh a, [hNewPartyLength]
dec a
- ld bc, wPartyMon2 - wPartyMon1
+ ld bc, PARTYMON_STRUCT_LENGTH
call AddNTimes
ld e, l
ld d, h
@@ -117,12 +117,12 @@ _AddPartyMon::
.next4
push bc
- ld bc, wPartyMon1DVs - wPartyMon1
+ ld bc, MON_DVS
add hl, bc
pop bc
ld [hli], a
ld [hl], b ; write IVs
- ld bc, (wPartyMon1HPExp - 1) - (wPartyMon1DVs + 1)
+ ld bc, (MON_HP_EXP - 1) - (MON_DVS + 1)
add hl, bc
ld a, 1
ld c, a
@@ -142,7 +142,7 @@ _AddPartyMon::
inc de
jr .copyMonTypesAndMoves
.copyEnemyMonData
- ld bc, wEnemyMon1DVs - wEnemyMon1
+ ld bc, MON_DVS
add hl, bc
ld a, [wEnemyMonDVs] ; copy IVs from cur enemy mon
ld [hli], a
@@ -237,7 +237,7 @@ _AddPartyMon::
jr .done
.calcFreshStats
pop hl
- ld bc, wPartyMon1HPExp - 1 - wPartyMon1
+ ld bc, MON_HP_EXP - 1
add hl, bc
ld b, $0
call CalcStats ; calculate fresh set of stats
@@ -294,7 +294,7 @@ _AddEnemyMonToPlayerParty::
ld hl, wPartyMons
ld a, [wPartyCount]
dec a
- ld bc, wPartyMon2 - wPartyMon1
+ ld bc, PARTYMON_STRUCT_LENGTH
call AddNTimes
ld e, l
ld d, h
@@ -379,12 +379,12 @@ _MoveMon::
ld a, [wMoveMonType]
dec a
ld hl, wPartyMons
- ld bc, wPartyMon2 - wPartyMon1 ; $2c
+ ld bc, PARTYMON_STRUCT_LENGTH
ld a, [wPartyCount]
jr nz, .addMonOffset
; if it's PARTY_TO_BOX
ld hl, wBoxMons
- ld bc, wBoxMon2 - wBoxMon1 ; $21
+ ld bc, BOXMON_STRUCT_LENGTH
ld a, [wBoxCount]
.addMonOffset
dec a
@@ -396,20 +396,20 @@ _MoveMon::
ld a, [wMoveMonType]
and a
ld hl, wBoxMons
- ld bc, wBoxMon2 - wBoxMon1 ; $21
+ ld bc, BOXMON_STRUCT_LENGTH
jr z, .addMonOffset2
cp DAYCARE_TO_PARTY
ld hl, wDayCareMon
jr z, .copyMonData
ld hl, wPartyMons
- ld bc, wPartyMon2 - wPartyMon1 ; $2c
+ ld bc, PARTYMON_STRUCT_LENGTH
.addMonOffset2
ld a, [wWhichPokemon]
call AddNTimes
.copyMonData
push hl
push de
- ld bc, wBoxMon2 - wBoxMon1
+ ld bc, BOXMON_STRUCT_LENGTH
call CopyData
pop de
pop hl
@@ -418,7 +418,7 @@ _MoveMon::
jr z, .findOTdest
cp DAYCARE_TO_PARTY
jr z, .findOTdest
- ld bc, wBoxMon2 - wBoxMon1
+ ld bc, BOXMON_STRUCT_LENGTH
add hl, bc
ld a, [hl] ; hl = Level
inc de
@@ -493,6 +493,7 @@ _MoveMon::
jr z, .done
cp PARTY_TO_DAYCARE
jr z, .done
+ ; returning mon to party, compute level and stats
push hl
srl a
add $2
@@ -502,13 +503,13 @@ _MoveMon::
ld a, d
ld [wCurEnemyLevel], a
pop hl
- ld bc, wBoxMon2 - wBoxMon1
- add hl, bc
+ ld bc, BOXMON_STRUCT_LENGTH
+ add hl, bc ; hl = wPartyMon*Level
ld [hli], a
ld d, h
ld e, l
- ld bc, -18
- add hl, bc
+ ld bc, (MON_HP_EXP - 1) - MON_STATS
+ add hl, bc ; hl = wPartyMon*HPExp - 1
ld b, $1
call CalcStats
.done
diff --git a/engine/pokemon/bills_pc.asm b/engine/pokemon/bills_pc.asm
index 0fcdedc6..09adfa37 100644
--- a/engine/pokemon/bills_pc.asm
+++ b/engine/pokemon/bills_pc.asm
@@ -352,11 +352,11 @@ BoxNoPCText:
KnowsHMMove::
; returns whether mon with party index [wWhichPokemon] knows an HM move
ld hl, wPartyMon1Moves
- ld bc, wPartyMon2 - wPartyMon1
+ ld bc, PARTYMON_STRUCT_LENGTH
jr .next
; unreachable
ld hl, wBoxMon1Moves
- ld bc, wBoxMon2 - wBoxMon1
+ ld bc, BOXMON_STRUCT_LENGTH
.next
ld a, [wWhichPokemon]
call AddNTimes
diff --git a/engine/pokemon/evos_moves.asm b/engine/pokemon/evos_moves.asm
index 1b92a093..794cb164 100644
--- a/engine/pokemon/evos_moves.asm
+++ b/engine/pokemon/evos_moves.asm
@@ -177,13 +177,13 @@ Evolution_PartyMonLoop: ; loop over party mons
call CalcStats
ld a, [wWhichPokemon]
ld hl, wPartyMon1
- ld bc, wPartyMon2 - wPartyMon1
+ ld bc, PARTYMON_STRUCT_LENGTH
call AddNTimes
ld e, l
ld d, h
push hl
push bc
- ld bc, wPartyMon1MaxHP - wPartyMon1
+ ld bc, MON_MAXHP
add hl, bc
ld a, [hli]
ld b, a
@@ -357,7 +357,7 @@ LearnMoveFromLevelUp:
; If it is not 0, this function will not work properly.
ld hl, wPartyMon1Moves
ld a, [wWhichPokemon]
- ld bc, wPartyMon2 - wPartyMon1
+ ld bc, PARTYMON_STRUCT_LENGTH
call AddNTimes
.next
ld b, NUM_MOVES
@@ -458,7 +458,7 @@ WriteMonMoves:
; shift PP as well if learning moves from day care
push de
- ld bc, wPartyMon1PP - (wPartyMon1Moves + 3)
+ ld bc, MON_PP - (MON_MOVES + 3)
add hl, bc
ld d, h
ld e, l
@@ -477,7 +477,7 @@ WriteMonMoves:
; write move PP value if learning moves from day care
push hl
ld a, [hl]
- ld hl, wPartyMon1PP - wPartyMon1Moves
+ ld hl, MON_PP - MON_MOVES
add hl, de
push hl
dec a
diff --git a/engine/pokemon/learn_move.asm b/engine/pokemon/learn_move.asm
index 62ffeefd..b57fedcd 100644
--- a/engine/pokemon/learn_move.asm
+++ b/engine/pokemon/learn_move.asm
@@ -10,7 +10,7 @@ LearnMove:
DontAbandonLearning:
ld hl, wPartyMon1Moves
- ld bc, wPartyMon2Moves - wPartyMon1Moves
+ ld bc, PARTYMON_STRUCT_LENGTH
ld a, [wWhichPokemon]
call AddNTimes
ld d, h
@@ -38,7 +38,7 @@ DontAbandonLearning:
.next
ld a, [wMoveNum]
ld [hl], a
- ld bc, wPartyMon1PP - wPartyMon1Moves
+ ld bc, MON_PP - MON_MOVES
add hl, bc
push hl
push de
@@ -66,7 +66,7 @@ DontAbandonLearning:
ld de, wBattleMonMoves
ld bc, NUM_MOVES
call CopyData
- ld bc, wPartyMon1PP - wPartyMon1OTID
+ ld bc, MON_PP - MON_OTID
add hl, bc
ld de, wBattleMonPP
ld bc, NUM_MOVES
diff --git a/engine/pokemon/load_mon_data.asm b/engine/pokemon/load_mon_data.asm
index 7a39f083..d90b9cd8 100644
--- a/engine/pokemon/load_mon_data.asm
+++ b/engine/pokemon/load_mon_data.asm
@@ -23,7 +23,7 @@ LoadMonData_::
call GetMonHeader
ld hl, wPartyMons
- ld bc, wPartyMon2 - wPartyMon1
+ ld bc, PARTYMON_STRUCT_LENGTH
ld a, [wMonDataLocation]
cp ENEMY_PARTY_DATA
jr c, .getMonEntry
@@ -33,7 +33,7 @@ LoadMonData_::
cp 2
ld hl, wBoxMons
- ld bc, wBoxMon2 - wBoxMon1
+ ld bc, BOXMON_STRUCT_LENGTH
jr z, .getMonEntry
ld hl, wDayCareMon
@@ -45,5 +45,5 @@ LoadMonData_::
.copyMonData
ld de, wLoadedMon
- ld bc, wPartyMon2 - wPartyMon1
+ ld bc, PARTYMON_STRUCT_LENGTH
jp CopyData
diff --git a/engine/pokemon/remove_mon.asm b/engine/pokemon/remove_mon.asm
index 60ec8c27..ee47f0c8 100644
--- a/engine/pokemon/remove_mon.asm
+++ b/engine/pokemon/remove_mon.asm
@@ -2,15 +2,16 @@ _RemovePokemon::
ld hl, wPartyCount
ld a, [wRemoveMonFromBox]
and a
- jr z, .usePartyCount
+ jr z, .gotCount
ld hl, wBoxCount
-.usePartyCount
+.gotCount
ld a, [hl]
dec a
ld [hli], a
+
ld a, [wWhichPokemon]
ld c, a
- ld b, $0
+ ld b, 0
add hl, bc
ld e, l
ld d, h
@@ -21,21 +22,27 @@ _RemovePokemon::
ld [hli], a
inc a ; reached terminator?
jr nz, .shiftMonSpeciesLoop ; if not, continue shifting species
+
ld hl, wPartyMonOT
ld d, PARTY_LENGTH - 1 ; max number of pokemon to shift
ld a, [wRemoveMonFromBox]
and a
- jr z, .usePartyMonOTs
+ jr z, .gotOTsPointer
ld hl, wBoxMonOT
ld d, MONS_PER_BOX - 1
-.usePartyMonOTs
+.gotOTsPointer
ld a, [wWhichPokemon]
call SkipFixedLengthTextEntries
ld a, [wWhichPokemon]
cp d ; are we removing the last pokemon?
jr nz, .notRemovingLastMon ; if not, shift the pokemon below
- ld [hl], $ff ; else, write the terminator and return
+
+ ; bug: to erase a string, this should be ld [hl], '@'
+ ; This is not needed, as wBoxSpecies/wPartySpecies determine if a slot is used.
+ ; Besides, existing mon nick is left untouched
+ ld [hl], $ff
ret
+
.notRemovingLastMon
ld d, h
ld e, l
@@ -44,44 +51,49 @@ _RemovePokemon::
ld bc, wPartyMonNicks
ld a, [wRemoveMonFromBox]
and a
- jr z, .usePartyMonNicks
+ jr z, .gotNicksPointer
ld bc, wBoxMonNicks
-.usePartyMonNicks
+.gotNicksPointer
call CopyDataUntil
+
ld hl, wPartyMons
- ld bc, wPartyMon2 - wPartyMon1
+ ld bc, PARTYMON_STRUCT_LENGTH
ld a, [wRemoveMonFromBox]
and a
- jr z, .usePartyMonStructs
+ jr z, .gotMonStructs
ld hl, wBoxMons
- ld bc, wBoxMon2 - wBoxMon1
-.usePartyMonStructs
+ ld bc, BOXMON_STRUCT_LENGTH
+.gotMonStructs
ld a, [wWhichPokemon]
call AddNTimes ; get address of the pokemon removed
- ld d, h ; store in de for CopyDataUntil
+
+ ld d, h ; de = start address for CopyDataUntil
ld e, l
ld a, [wRemoveMonFromBox]
and a
- jr z, .copyUntilPartyMonOTs
- ld bc, wBoxMon2 - wBoxMon1
- add hl, bc ; get address of pokemon after the pokemon removed
- ld bc, wBoxMonOT ; address of when to stop copying
- jr .continue
-.copyUntilPartyMonOTs
- ld bc, wPartyMon2 - wPartyMon1
- add hl, bc ; get address of pokemon after the pokemon removed
- ld bc, wPartyMonOT ; address of when to stop copying
-.continue
- call CopyDataUntil ; shift all pokemon data after the removed mon to the removed mon's location
+ jr z, .copyUntilPartyMonOT
+; copy until wBoxMonOT
+ ld bc, BOXMON_STRUCT_LENGTH
+ add hl, bc ; get address of next slot
+ ld bc, wBoxMonOT
+ jr .shiftOTs
+.copyUntilPartyMonOT
+ ld bc, PARTYMON_STRUCT_LENGTH
+ add hl, bc ; get address of next slot
+ ld bc, wPartyMonOT
+.shiftOTs
+ call CopyDataUntil ; shift all pokemon data up one slot
+
ld hl, wPartyMonNicks
ld a, [wRemoveMonFromBox]
and a
- jr z, .usePartyMonNicks2
+ jr z, .gotNicksPointer2
ld hl, wBoxMonNicks
-.usePartyMonNicks2
+.gotNicksPointer2
ld bc, NAME_LENGTH
ld a, [wWhichPokemon]
call AddNTimes
+
ld d, h
ld e, l
ld bc, NAME_LENGTH
@@ -89,7 +101,7 @@ _RemovePokemon::
ld bc, wPartyMonNicksEnd
ld a, [wRemoveMonFromBox]
and a
- jr z, .copyUntilPartyMonNicksEnd
+ jr z, .shiftMonNicks
ld bc, wBoxMonNicksEnd
-.copyUntilPartyMonNicksEnd
- jp CopyDataUntil
+.shiftMonNicks
+ jp CopyDataUntil ; shift all pokemon nicknames up one slot
diff --git a/engine/pokemon/set_types.asm b/engine/pokemon/set_types.asm
index 2cf8f14c..d42c3cf3 100644
--- a/engine/pokemon/set_types.asm
+++ b/engine/pokemon/set_types.asm
@@ -1,7 +1,7 @@
; updates the types of a party mon (pointed to in hl) to the ones of the mon specified in [wPokedexNum]
SetPartyMonTypes:
call GetPredefRegisters
- ld bc, wPartyMon1Type - wPartyMon1 ; $5
+ ld bc, MON_TYPE
add hl, bc
ld a, [wPokedexNum]
ld [wCurSpecies], a
diff --git a/engine/pokemon/status_screen.asm b/engine/pokemon/status_screen.asm
index 80cdfb17..9c708a22 100644
--- a/engine/pokemon/status_screen.asm
+++ b/engine/pokemon/status_screen.asm
@@ -361,7 +361,7 @@ StatusScreen2:
pop de
pop hl
push hl
- ld bc, wPartyMon1PP - wPartyMon1Moves - 1
+ ld bc, MON_PP - MON_MOVES - 1
add hl, bc
ld a, [hl]
and PP_MASK