mirror of
https://github.com/pret/pokeyellow.git
synced 2026-04-24 23:46:48 -05:00
108 lines
2.2 KiB
NASM
108 lines
2.2 KiB
NASM
_RemovePokemon::
|
|
ld hl, wPartyCount
|
|
ld a, [wRemoveMonFromBox]
|
|
and a
|
|
jr z, .gotCount
|
|
ld hl, wBoxCount
|
|
.gotCount
|
|
ld a, [hl]
|
|
dec a
|
|
ld [hli], a
|
|
|
|
ld a, [wWhichPokemon]
|
|
ld c, a
|
|
ld b, 0
|
|
add hl, bc
|
|
ld e, l
|
|
ld d, h
|
|
inc de
|
|
.shiftMonSpeciesLoop
|
|
ld a, [de]
|
|
inc de
|
|
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, .gotOTsPointer
|
|
ld hl, wBoxMonOT
|
|
ld d, MONS_PER_BOX - 1
|
|
.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
|
|
|
|
; 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
|
|
ld bc, NAME_LENGTH
|
|
add hl, bc
|
|
ld bc, wPartyMonNicks
|
|
ld a, [wRemoveMonFromBox]
|
|
and a
|
|
jr z, .gotNicksPointer
|
|
ld bc, wBoxMonNicks
|
|
.gotNicksPointer
|
|
call CopyDataUntil
|
|
|
|
ld hl, wPartyMons
|
|
ld bc, PARTYMON_STRUCT_LENGTH
|
|
ld a, [wRemoveMonFromBox]
|
|
and a
|
|
jr z, .gotMonStructs
|
|
ld hl, wBoxMons
|
|
ld bc, BOXMON_STRUCT_LENGTH
|
|
.gotMonStructs
|
|
ld a, [wWhichPokemon]
|
|
call AddNTimes ; get address of the pokemon removed
|
|
|
|
ld d, h ; de = start address for CopyDataUntil
|
|
ld e, l
|
|
ld a, [wRemoveMonFromBox]
|
|
and a
|
|
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, .gotNicksPointer2
|
|
ld hl, wBoxMonNicks
|
|
.gotNicksPointer2
|
|
ld bc, NAME_LENGTH
|
|
ld a, [wWhichPokemon]
|
|
call AddNTimes
|
|
|
|
ld d, h
|
|
ld e, l
|
|
ld bc, NAME_LENGTH
|
|
add hl, bc
|
|
ld bc, wPartyMonNicksEnd
|
|
ld a, [wRemoveMonFromBox]
|
|
and a
|
|
jr z, .shiftMonNicks
|
|
ld bc, wBoxMonNicksEnd
|
|
.shiftMonNicks
|
|
jp CopyDataUntil ; shift all pokemon nicknames up one slot
|