pokeyellow/engine/move_mon.asm
2016-03-17 18:00:54 -04:00

172 lines
2.9 KiB
NASM

_MoveMon: ; f3a4 (3:73a4)
ld a, [wMoveMonType]
and a
jr z, .checkPartyMonSlots
cp DAYCARE_TO_PARTY
jr z, .checkPartyMonSlots
cp PARTY_TO_DAYCARE
ld hl, wDayCareMon
jr z, .asm_f3fb
ld hl, wNumInBox
ld a, [hl]
cp MONS_PER_BOX
jr nz, .partyOrBoxNotFull
jr .boxFull
.checkPartyMonSlots
ld hl, wPartyCount
ld a, [hl]
cp PARTY_LENGTH
jr nz, .partyOrBoxNotFull
.boxFull
scf
ret
.partyOrBoxNotFull
inc a
ld [hl], a ; increment number of mons in party/box
ld c, a
ld b, 0
add hl, bc
ld a, [wMoveMonType]
cp DAYCARE_TO_PARTY
ld a, [wDayCareMon]
jr z, .asm_f3dc
ld a, [wcf91]
.asm_f3dc
ld [hli], a ; write new mon ID
ld [hl], $ff ; write new sentinel
ld a, [wMoveMonType]
dec a
ld hl, wPartyMons
ld bc, wPartyMon2 - wPartyMon1 ; $2c
ld a, [wPartyCount]
jr nz, .skipToNewMonEntry
ld hl, wBoxMons
ld bc, wBoxMon2 - wBoxMon1 ; $21
ld a, [wNumInBox]
.skipToNewMonEntry
dec a
call AddNTimes
.asm_f3fb
push hl
ld e, l
ld d, h
ld a, [wMoveMonType]
and a
ld hl, wBoxMons
ld bc, wBoxMon2 - wBoxMon1 ; $21
jr z, .asm_f417
cp DAYCARE_TO_PARTY
ld hl, wDayCareMon
jr z, .asm_f41d
ld hl, wPartyMons
ld bc, wPartyMon2 - wPartyMon1 ; $2c
.asm_f417
ld a, [wWhichPokemon]
call AddNTimes
.asm_f41d
push hl
push de
ld bc, wBoxMon2 - wBoxMon1
call CopyData
pop de
pop hl
ld a, [wMoveMonType]
and a
jr z, .asm_f43a
cp DAYCARE_TO_PARTY
jr z, .asm_f43a
ld bc, wBoxMon2 - wBoxMon1
add hl, bc
ld a, [hl]
inc de
inc de
inc de
ld [de], a
.asm_f43a
ld a, [wMoveMonType]
cp PARTY_TO_DAYCARE
ld de, wDayCareMonOT
jr z, .asm_f459
dec a
ld hl, wPartyMonOT
ld a, [wPartyCount]
jr nz, .asm_f453
ld hl, wBoxMonOT
ld a, [wNumInBox]
.asm_f453
dec a
call SkipFixedLengthTextEntries
ld d, h
ld e, l
.asm_f459
ld hl, wBoxMonOT
ld a, [wMoveMonType]
and a
jr z, .asm_f46c
ld hl, wDayCareMonOT
cp DAYCARE_TO_PARTY
jr z, .asm_f472
ld hl, wPartyMonOT
.asm_f46c
ld a, [wWhichPokemon]
call SkipFixedLengthTextEntries
.asm_f472
ld bc, NAME_LENGTH
call CopyData
ld a, [wMoveMonType]
cp PARTY_TO_DAYCARE
ld de, wDayCareMonName
jr z, .asm_f497
dec a
ld hl, wPartyMonNicks
ld a, [wPartyCount]
jr nz, .asm_f491
ld hl, wBoxMonNicks
ld a, [wNumInBox]
.asm_f491
dec a
call SkipFixedLengthTextEntries
ld d, h
ld e, l
.asm_f497
ld hl, wBoxMonNicks
ld a, [wMoveMonType]
and a
jr z, .asm_f4aa
ld hl, wDayCareMonName
cp DAYCARE_TO_PARTY
jr z, .asm_f4b0
ld hl, wPartyMonNicks
.asm_f4aa
ld a, [wWhichPokemon]
call SkipFixedLengthTextEntries
.asm_f4b0
ld bc, NAME_LENGTH
call CopyData
pop hl
ld a, [wMoveMonType]
cp PARTY_TO_BOX
jr z, .asm_f4ea
cp PARTY_TO_DAYCARE
jr z, .asm_f4ea
push hl
srl a
add $2
ld [wMonDataLocation], a
call LoadMonData
callba CalcLevelFromExperience
ld a, d
ld [wCurEnemyLVL], a
pop hl
ld bc, wBoxMon2 - wBoxMon1
add hl, bc
ld [hli], a
ld d, h
ld e, l
ld bc, -18
add hl, bc
ld b, $1
call CalcStats
.asm_f4ea
and a
ret