summaryrefslogtreecommitdiff
path: root/engine/move_mon.asm
diff options
context:
space:
mode:
authorpikalaxalt <PikalaxALT@gmail.com>2016-06-22 14:28:59 -0400
committerpikalaxalt <PikalaxALT@gmail.com>2016-06-22 14:28:59 -0400
commitdb563ed25a240b364124c1b3f0519dc046d21246 (patch)
tree15bb3699e136e70f8105731a7c41c8bbe2aa09ad /engine/move_mon.asm
parentf5ca2c3e66c0517111905ef3491423182a83ee56 (diff)
engine/move_mon.asm
Diffstat (limited to 'engine/move_mon.asm')
-rwxr-xr-xengine/move_mon.asm1642
1 files changed, 1642 insertions, 0 deletions
diff --git a/engine/move_mon.asm b/engine/move_mon.asm
new file mode 100755
index 00000000..f4d65683
--- /dev/null
+++ b/engine/move_mon.asm
@@ -0,0 +1,1642 @@
+TryAddMonToParty:: ; d892 (3:5892)
+ ld de, wPartyCount
+ ld a, [wMonType]
+ and $f
+ jr z, .asm_d89f
+ ld de, wOTPartyCount
+.asm_d89f
+ ld a, [de]
+ inc a
+ cp $7
+ ret nc
+ ld [de], a
+ ld a, [de]
+ ld [hMoveMon], a
+ add e
+ ld e, a
+ jr nc, .asm_d8ad
+ inc d
+.asm_d8ad
+ ld a, [wd004]
+ ld [de], a
+ inc de
+ ld a, $ff
+ ld [de], a
+ ld hl, wPartyMon1OT
+ ld a, [wMonType]
+ and $f
+ jr z, .asm_d8c2
+ ld hl, wOTPartyMonOT
+.asm_d8c2
+ ld a, [hMoveMon]
+ dec a
+ call SkipNames
+ ld d, h
+ ld e, l
+ ld hl, wPlayersName
+ ld bc, NAME_LENGTH
+ call CopyBytes
+ ld a, [wMonType]
+ and a
+ jr nz, .asm_d8f6
+ ld a, [wd004]
+ ld [wd151], a
+ call GetPokemonName
+ ld hl, wPartyMonNicknames
+ ld a, [hMoveMon]
+ dec a
+ call SkipNames
+ ld d, h
+ ld e, l
+ ld hl, wStringBuffer1
+ ld bc, NAME_LENGTH
+ call CopyBytes
+.asm_d8f6
+ ld hl, wPartyMon1Species
+ ld a, [wMonType]
+ and $f
+ jr z, .asm_d903
+ ld hl, wOTPartyMon1
+.asm_d903
+ ld a, [hMoveMon]
+ dec a
+ ld bc, PARTYMON_STRUCT_LENGTH
+ call AddNTimes
+ ld e, l
+ ld d, h
+ push hl
+ ld a, [wCurPartySpecies]
+ ld [wce60], a
+ call GetBaseData
+ ld a, [wd120]
+ ld [de], a
+ inc de
+ ld a, [wBattleMode]
+ and a
+ ld a, $0
+ jr z, .asm_d928
+ ld a, [wEnemyMonItem]
+.asm_d928
+ ld [de], a
+ inc de
+ push de
+ ld h, d
+ ld l, e
+ ld a, [wBattleMode]
+ and a
+ jr z, .asm_d949
+ ld a, [wMonType]
+ and a
+ jr nz, .asm_d949
+ ld de, wEnemyMonMoves
+ ld a, [de]
+ inc de
+ ld [hli], a
+ ld a, [de]
+ inc de
+ ld [hli], a
+ ld a, [de]
+ inc de
+ ld [hli], a
+ ld a, [de]
+ ld [hl], a
+ jr .asm_d956
+
+.asm_d949
+ xor a
+ ld [hli], a
+ ld [hli], a
+ ld [hli], a
+ ld [hl], a
+ ld [wBuffer1], a
+ predef FillMoves
+.asm_d956
+ pop de
+ inc de
+ inc de
+ inc de
+ inc de
+ ld a, [wPlayerID]
+ ld [de], a
+ inc de
+ ld a, [wPlayerID + 1]
+ ld [de], a
+ inc de
+ push de
+ ld a, [wCurPartyLevel]
+ ld d, a
+ callab CalcExpAtLevel ; 14:5550
+ pop de
+ ld a, [hPrintNum2]
+ ld [de], a
+ inc de
+ ld a, [hStringCmpString2]
+ ld [de], a
+ inc de
+ ld a, [hPrintNum4]
+ ld [de], a
+ inc de
+ xor a
+ ld b, $a
+.asm_d980
+ ld [de], a
+ inc de
+ dec b
+ jr nz, .asm_d980
+ pop hl
+ push hl
+ ld a, [wMonType]
+ and $f
+ jr z, .asm_d998
+ push hl
+ callba GetTrainerDVs ; 9:7271
+ pop hl
+ jr .asm_d9bb
+
+.asm_d998
+ ld a, [wd004]
+ ld [wd151], a
+ dec a
+ push de
+ call CheckCaughtMon
+ ld a, [wd151]
+ dec a
+ call SetSeenAndCaughtMon
+ pop de
+ pop hl
+ push hl
+ ld a, [wBattleMode]
+ and a
+ jr nz, .asm_d9f9
+ call Random
+ ld b, a
+ call Random
+ ld c, a
+.asm_d9bb
+ ld a, b
+ ld [de], a
+ inc de
+ ld a, c
+ ld [de], a
+ inc de
+ push hl
+ push de
+ inc hl
+ inc hl
+ call FillPP
+ pop de
+ pop hl
+ inc de
+ inc de
+ inc de
+ inc de
+ ld a, $46
+ ld [de], a
+ inc de
+ xor a
+ ld [de], a
+ inc de
+ ld [de], a
+ inc de
+ ld [de], a
+ inc de
+ ld a, [wCurPartyLevel]
+ ld [de], a
+ inc de
+ xor a
+ ld [de], a
+ inc de
+ ld [de], a
+ inc de
+ ld bc, $a
+ add hl, bc
+ ld a, $1
+ ld c, a
+ ld b, $0
+ call CalcPkmnStatC
+ ld a, [hStringCmpString2]
+ ld [de], a
+ inc de
+ ld a, [hPrintNum4]
+ ld [de], a
+ inc de
+ jr .asm_da2f
+
+.asm_d9f9
+ ld a, [wEnemyMonMovesEnd]
+ ld [de], a
+ inc de
+ ld a, [wEnemyMonMovesEnd + 1]
+ ld [de], a
+ inc de
+ push hl
+ ld hl, wEnemyMonPP
+ ld b, $4
+.asm_da09
+ ld a, [hli]
+ ld [de], a
+ inc de
+ dec b
+ jr nz, .asm_da09
+ pop hl
+ ld a, $46
+ ld [de], a
+ inc de
+ xor a
+ ld [de], a
+ inc de
+ ld [de], a
+ inc de
+ ld [de], a
+ inc de
+ ld a, [wCurPartyLevel]
+ ld [de], a
+ inc de
+ ld hl, wEnemyMonStatus
+ ld a, [hli]
+ ld [de], a
+ inc de
+ ld a, [hli]
+ ld [de], a
+ inc de
+ ld a, [hli]
+ ld [de], a
+ inc de
+ ld a, [hl]
+ ld [de], a
+ inc de
+.asm_da2f
+ ld a, [wBattleMode]
+ dec a
+ jr nz, .asm_da41
+ ld hl, wEnemyMonMaxHP
+ ld bc, $c
+ call CopyBytes
+ pop hl
+ jr .asm_da4b
+
+.asm_da41
+ pop hl
+ ld bc, $a
+ add hl, bc
+ ld b, $0
+ call CalcPkmnStats
+.asm_da4b
+ ld a, [wMonType]
+ and $f
+ jr nz, .asm_da71
+ ld a, [wd004]
+ cp $c9
+ jr nz, .asm_da71
+ ld hl, wPartyMon1DVs
+ ld a, [wPokemonData]
+ dec a
+ ld bc, PARTYMON_STRUCT_LENGTH
+ call AddNTimes
+ predef GetUnownLetter
+ callab UpdateUnownDex
+.asm_da71
+ scf
+ ret
+
+FillPP: ; da73 (3:5a73)
+ push bc
+ ld b, $4
+.asm_da76
+ ld a, [hli]
+ and a
+ jr z, .asm_da95
+ dec a
+ push hl
+ push de
+ push bc
+ ld hl, $5afe
+ ld bc, $7
+ call AddNTimes
+ ld de, wStringBuffer1
+ ld a, $10
+ call FarCopyBytes
+ pop bc
+ pop de
+ pop hl
+ ld a, [wStringBuffer1 + 5]
+.asm_da95
+ ld [de], a
+ inc de
+ dec b
+ jr nz, .asm_da76
+ pop bc
+ ret
+
+AddTempmonToParty: ; da9c (3:5a9c)
+ ld hl, wPartyCount
+ ld a, [hl]
+ cp $6
+ scf
+ ret z
+ inc a
+ ld [hl], a
+ ld c, a
+ ld b, $0
+ add hl, bc
+ ld a, [wCurPartySpecies]
+ ld [hli], a
+ ld [hl], $ff
+ ld hl, wPartyMon1Species
+ ld a, [wPartyCount]
+ dec a
+ ld bc, PARTYMON_STRUCT_LENGTH
+ call AddNTimes
+ ld e, l
+ ld d, h
+ ld hl, wTempMonSpecies
+ call CopyBytes
+ ld hl, wPartyMon6StatsEnd
+ ld a, [wPartyCount]
+ dec a
+ call SkipNames
+ ld d, h
+ ld e, l
+ ld hl, wOTPartyMon6StatsEnd
+ ld a, [wd005]
+ call SkipNames
+ ld bc, NAME_LENGTH
+ call CopyBytes
+ ld hl, wPartyMonNicknames
+ ld a, [wPartyCount]
+ dec a
+ call SkipNames
+ ld d, h
+ ld e, l
+ ld hl, wOTPartyMon1Nickname
+ ld a, [wd005]
+ call SkipNames
+ ld bc, NAME_LENGTH
+ call CopyBytes
+ ld a, [wd004]
+ ld [wd151], a
+ cp $fd
+ jr z, .asm_db18
+ dec a
+ call SetSeenAndCaughtMon
+ ld hl, wPartyMon1Happiness
+ ld a, [wPokemonData]
+ dec a
+ ld bc, PARTYMON_STRUCT_LENGTH
+ call AddNTimes
+ ld [hl], $46
+.asm_db18
+ ld a, [wCurPartySpecies]
+ cp $c9
+ jr nz, .asm_db43
+ ld hl, wPartyMon1DVs
+ ld a, [wPartyCount]
+ dec a
+ ld bc, PARTYMON_STRUCT_LENGTH
+ call AddNTimes
+ predef GetUnownLetter
+ callab UpdateUnownDex
+ ld a, [wdc3f]
+ and a
+ jr nz, .asm_db43
+ ld a, [wd11e]
+ ld [wdc3f], a
+.asm_db43
+ and a
+ ret
+
+SentGetPkmnIntoFromBox: ; db45 (3:5b45)
+ ld a, $1
+ call OpenSRAM
+ ld a, [wd008]
+ and a
+ jr z, .asm_db66
+ cp $2
+ jr z, .asm_db66
+ cp $3
+ ld hl, wBreedMon1
+ jr z, .asm_dba1
+ ld hl, sBoxCount
+ ld a, [hl]
+ cp MONS_PER_BOX
+ jr nz, .asm_db6f
+ jp Functiondcb7
+
+.asm_db66
+ ld hl, wPartyCount
+ ld a, [hl]
+ cp $6
+ jp z, Functiondcb7
+.asm_db6f
+ inc a
+ ld [hl], a
+ ld c, a
+ ld b, $0
+ add hl, bc
+ ld a, [wd008]
+ cp $2
+ ld a, [wBreedMon1]
+ jr z, .asm_db82
+ ld a, [wd004]
+.asm_db82
+ ld [hli], a
+ ld [hl], $ff
+ ld a, [wd008]
+ dec a
+ ld hl, wPartyMons
+ ld bc, PARTYMON_STRUCT_LENGTH
+ ld a, [wPokemonData]
+ jr nz, .asm_db9d
+ ld hl, sBoxMon1Species
+ ld bc, BOXMON_STRUCT_LENGTH
+ ld a, [sBoxCount]
+.asm_db9d
+ dec a
+ call AddNTimes
+.asm_dba1
+ push hl
+ ld e, l
+ ld d, h
+ ld a, [wd008]
+ and a
+ ld hl, sBoxMon1Species
+ ld bc, BOXMON_STRUCT_LENGTH
+ jr z, .asm_dbbd
+ cp $2
+ ld hl, wBreedMon1
+ jr z, .asm_dbc3
+ ld hl, wPartyMon1Species
+ ld bc, PARTYMON_STRUCT_LENGTH
+.asm_dbbd
+ ld a, [wd005]
+ call AddNTimes
+.asm_dbc3
+ ld bc, BOXMON_STRUCT_LENGTH
+ call CopyBytes
+ ld a, [wd008]
+ cp $3
+ ld de, wdc4c
+ jr z, .asm_dbe8
+ dec a
+ ld hl, wPartyMonOT
+ ld a, [wPokemonData]
+ jr nz, .asm_dbe2
+ ld hl, sBoxMonOT
+ ld a, [sBoxCount]
+.asm_dbe2
+ dec a
+ call SkipNames
+ ld d, h
+ ld e, l
+.asm_dbe8
+ ld hl, sBoxMonOT
+ ld a, [wd008]
+ and a
+ jr z, .asm_dbfb
+ ld hl, wdc4c
+ cp $2
+ jr z, .asm_dc01
+ ld hl, wPartyMon6StatsEnd
+.asm_dbfb
+ ld a, [wd005]
+ call SkipNames
+.asm_dc01
+ ld bc, NAME_LENGTH
+ call CopyBytes
+ ld a, [wd008]
+ cp $3
+ ld de, wdc41
+ jr z, .asm_dc26
+ dec a
+ ld hl, wPartyMon1Nickname
+ ld a, [wPokemonData]
+ jr nz, .asm_dc20
+ ld hl, sBoxMonNicknames
+ ld a, [sBoxCount]
+.asm_dc20
+ dec a
+ call SkipNames
+ ld d, h
+ ld e, l
+.asm_dc26
+ ld hl, sBoxMonNicknames
+ ld a, [wd008]
+ and a
+ jr z, .asm_dc39
+ ld hl, wdc41
+ cp $2
+ jr z, .asm_dc3f
+ ld hl, wPartyMon1Nickname
+.asm_dc39
+ ld a, [wd005]
+ call SkipNames
+.asm_dc3f
+ ld bc, NAME_LENGTH
+ call CopyBytes
+ pop hl
+ ld a, [wd008]
+ cp $1
+ jr z, .asm_dcaa
+ cp $3
+ jp z, Functiondcb2
+ push hl
+ srl a
+ add $2
+ ld [wMonType], a
+ predef CopyPkmnToTempMon
+ callab CalcLevel
+ ld a, d
+ ld [wCurPartyLevel], a
+ pop hl
+ ld b, h
+ ld c, l
+ ld hl, $1f
+ add hl, bc
+ ld [hl], a
+ ld hl, $24
+ add hl, bc
+ ld d, h
+ ld e, l
+ ld hl, $a
+ add hl, bc
+ push bc
+ ld b, $1
+ call CalcPkmnStats
+ pop bc
+ ld a, [wd008]
+ and a
+ jr nz, Functiondcb2
+ ld hl, $20
+ add hl, bc
+ xor a
+ ld [hl], a
+ ld hl, $22
+ add hl, bc
+ ld d, h
+ ld e, l
+ ld a, [wd004]
+ cp $fd
+ jr z, .asm_dca4
+ inc hl
+ inc hl
+ ld a, [hli]
+ ld [de], a
+ ld a, [hl]
+ inc de
+ ld [de], a
+ jr Functiondcb2
+
+.asm_dca4
+ xor a
+ ld [de], a
+ inc de
+ ld [de], a
+ jr Functiondcb2
+
+.asm_dcaa
+ ld a, [sBoxCount]
+ dec a
+ ld b, a
+ call Functiondcbc
+Functiondcb2: ; dcb2 (3:5cb2)
+ call CloseSRAM
+ and a
+ ret
+
+Functiondcb7: ; dcb7 (3:5cb7)
+ call CloseSRAM
+ scf
+ ret
+
+Functiondcbc: ; dcbc (3:5cbc)
+ ld a, b
+ ld hl, sBoxMon1Species
+ ld bc, BOXMON_STRUCT_LENGTH
+ call AddNTimes
+ ld b, h
+ ld c, l
+ ld hl, $17
+ add hl, bc
+ push hl
+ push bc
+ ld de, wTempMonPP
+ ld bc, $4
+ call CopyBytes
+ pop bc
+ ld hl, $2
+ add hl, bc
+ push hl
+ ld de, wTempMonMoves
+ ld bc, $4
+ call CopyBytes
+ pop hl
+ pop de
+ ld a, [wMenuCursorY]
+ push af
+ ld a, [wMonType]
+ push af
+ ld b, $0
+.asm_dcf2
+ ld a, [hli]
+ and a
+ jr z, .asm_dd1e
+ ld [wTempMonMoves], a
+ ld a, $2
+ ld [wMonType], a
+ ld a, b
+ ld [wMenuCursorY], a
+ push bc
+ push hl
+ push de
+ callba GetMaxPPOfMove ; same bank
+ pop de
+ pop hl
+ ld a, [wd151]
+ ld b, a
+ ld a, [de]
+ and $c0
+ add b
+ ld [de], a
+ pop bc
+ inc de
+ inc b
+ ld a, b
+ cp $4
+ jr c, .asm_dcf2
+.asm_dd1e
+ pop af
+ ld [wMonType], a
+ pop af
+ ld [wMenuCursorY], a
+ ret
+
+RetrievePokemonFromDaycareMan:
+ ld a, [wBreedMon1Species]
+ ld [wCurPartySpecies], a
+ ld de, SFX_TRANSACTION
+ call PlaySFX
+ call WaitSFX
+ call Functione673
+ ld a, b
+ ld [wMovementBufferCount], a
+ ld a, e
+ ld [wCurPartyLevel], a
+ xor a
+ ld [wd008], a
+ jp Functiondd6a
+
+RetrievePokemonFromDaycareLady:
+ ld a, [wBreedMon2]
+ ld [wCurPartySpecies], a
+ ld de, SFX_TRANSACTION
+ call PlaySFX
+ call WaitSFX
+ call Functione68e
+ ld a, b
+ ld [wMovementBufferCount], a
+ ld a, e
+ ld [wCurPartyLevel], a
+ ld a, $1
+ ld [wd008], a
+ jp Functiondd6a ; super long jump
+
+Functiondd6a: ; dd6a (3:5d6a)
+ ld hl, wPokemonData
+ ld a, [hl]
+ cp $6
+ jr nz, .asm_dd74
+ scf ; We shouldn't be here if we've come this far.
+ ret
+
+.asm_dd74
+ inc a
+ ld [hl], a
+ ld c, a
+ ld b, $0
+ add hl, bc
+ ld a, [wd008]
+ and a
+ ld a, [wBreedMon1]
+ ld de, wdc41
+ jr z, .asm_dd8c
+ ld a, [wBreedMon2]
+ ld de, wdc7a
+.asm_dd8c
+ ld [hli], a
+ ld [wce60], a
+ ld a, $ff
+ ld [hl], a
+ ld hl, wPartyMon1Nickname
+ ld a, [wPartyCount]
+ dec a
+ call SkipNames
+ push hl
+ ld h, d
+ ld l, e
+ pop de
+ call CopyBytes
+ push hl
+ ld hl, wPartyMonOT
+ ld a, [wPartyCount]
+ dec a
+ call SkipNames
+ ld d, h
+ ld e, l
+ pop hl
+ call CopyBytes
+ push hl
+ call Functionde20
+ pop hl
+ ld bc, BOXMON_STRUCT_LENGTH
+ call CopyBytes
+ call GetBaseData
+ call Functionde20
+ ld b, d
+ ld c, e
+ ld hl, $1f
+ add hl, bc
+ ld a, [wCurPartyLevel]
+ ld [hl], a
+ ld hl, $24
+ add hl, bc
+ ld d, h
+ ld e, l
+ ld hl, $a
+ add hl, bc
+ push bc
+ ld b, $1
+ call CalcPkmnStats
+ ld hl, wPartyMon1Moves
+ ld a, [wPokemonData]
+ dec a
+ ld bc, PARTYMON_STRUCT_LENGTH
+ call AddNTimes
+ ld d, h
+ ld e, l
+ ld a, $1
+ ld [wCurHPAnim], a
+ predef FillMoves
+ ld a, [wPartyCount]
+ dec a
+ ld [wd005], a
+ callba Functionc6bc ; same bank
+ ld a, [wCurPartyLevel]
+ ld d, a
+ callab CalcExpAtLevel
+ pop bc
+ ld hl, $8
+ add hl, bc
+ ld a, [hQuotient]
+ ld [hli], a
+ ld a, [hPrintNum3]
+ ld [hli], a
+ ld a, [hPrintNum4]
+ ld [hl], a
+ and a
+ ret
+
+Functionde20: ; de20 (3:5e20)
+ ld a, [wPartyCount]
+ dec a
+ ld hl, wPartyMon1
+ ld bc, PARTYMON_STRUCT_LENGTH
+ call AddNTimes
+ ld d, h
+ ld e, l
+ ret
+
+ ld de, wdc41
+ call Functionde4a
+ xor a
+ ld [wd008], a
+ jp RemoveMonFromPartyOrBox
+
+ ld de, wdc7a
+ call Functionde4a
+ xor a
+ ld [wd008], a
+ jp RemoveMonFromPartyOrBox
+
+Functionde4a: ; de4a (3:5e4a)
+ ld a, [wd005]
+ ld hl, wPartyMonNicknames
+ call SkipNames
+ call CopyBytes
+ ld a, [wd005]
+ ld hl, wPartyMon1OT
+ call SkipNames
+ call CopyBytes
+ ld a, [wd005]
+ ld hl, wPartyMon1
+ ld bc, PARTYMON_STRUCT_LENGTH
+ call AddNTimes
+ ld bc, BOXMON_STRUCT_LENGTH
+ jp CopyBytes
+
+SentPkmnIntoBox: ; de74 (3:5e74)
+ ld a, $1
+ call OpenSRAM
+ ld de, sBoxCount
+ ld a, [de]
+ cp $14
+ jp nc, Functiondf48
+ inc a
+ ld [de], a
+ ld a, [wd004]
+ ld [wce60], a
+ ld c, a
+.asm_de8b
+ inc de
+ ld a, [de]
+ ld b, a
+ ld a, c
+ ld c, b
+ ld [de], a
+ inc a
+ jr nz, .asm_de8b
+ call GetBaseData
+ call Functiondf4d
+ ld hl, wPlayersName
+ ld de, sBoxMonOT
+ ld bc, NAME_LENGTH
+ call CopyBytes
+ ld a, [wd004]
+ ld [wd151], a
+ call GetPokemonName
+ ld de, sBoxMonNicknames
+ ld hl, wStringBuffer1
+ ld bc, NAME_LENGTH
+ call CopyBytes
+ ld hl, wEnemyMon
+ ld de, sBoxMon1Species
+ ld bc, $6
+ call CopyBytes
+ ld hl, wGameData
+ ld a, [hli]
+ ld [de], a
+ inc de
+ ld a, [hl]
+ ld [de], a
+ inc de
+ push de
+ ld a, [wCurPartyLevel]
+ ld d, a
+ callab CalcExpAtLevel
+ pop de
+ ld a, [hQuotient]
+ ld [de], a
+ inc de
+ ld a, [hPrintNum3]
+ ld [de], a
+ inc de
+ ld a, [hPrintNum4]
+ ld [de], a
+ inc de
+ xor a
+ ld b, $a
+.asm_deeb
+ ld [de], a
+ inc de
+ dec b
+ jr nz, .asm_deeb
+ ld hl, wEnemyMonMovesEnd
+ ld b, $6
+.asm_def5
+ ld a, [hli]
+ ld [de], a
+ inc de
+ dec b
+ jr nz, .asm_def5
+ ld a, $46
+ ld [de], a
+ inc de
+ xor a
+ ld [de], a
+ inc de
+ ld [de], a
+ inc de
+ ld [de], a
+ inc de
+ ld a, [wCurPartyLevel]
+ ld [de], a
+ ld a, [wd004]
+ dec a
+ call SetSeenAndCaughtMon
+ ld a, [wCurPartySpecies]
+ cp $c9
+ jr nz, .asm_df26
+ ld hl, sBoxMon1DVs
+ predef GetUnownLetter
+ callab UpdateUnownDex
+.asm_df26
+ ld hl, sBoxMon1Moves
+ ld de, wTempMonMoves
+ ld bc, $4
+ call CopyBytes
+ ld hl, sBoxMon1PP
+ ld de, wTempMonPP
+ ld bc, $4
+ call CopyBytes
+ ld b, $0
+ call Functiondcbc
+ call CloseSRAM
+ scf
+ ret
+
+Functiondf48: ; df48 (3:5f48)
+ call CloseSRAM
+ and a
+ ret
+
+Functiondf4d: ; df4d (3:5f4d)
+ ld hl, sBoxMonOT
+ ld bc, NAME_LENGTH
+ call Functiondf65
+ ld hl, sBoxMonNicknames
+ ld bc, NAME_LENGTH
+ call Functiondf65
+ ld hl, sBoxMon1Species
+ ld bc, BOXMON_STRUCT_LENGTH
+Functiondf65: ; df65 (3:5f65)
+ ld a, [sBoxCount]
+ cp $2
+ ret c
+ push hl
+ call AddNTimes
+ dec hl
+ ld e, l
+ ld d, h
+ pop hl
+ ld a, [sBoxCount]
+ dec a
+ call AddNTimes
+ dec hl
+ push hl
+ ld a, [sBoxCount]
+ dec a
+ ld hl, $0
+ call AddNTimes
+ ld c, l
+ ld b, h
+ pop hl
+.asm_df89
+ ld a, [hld]
+ ld [de], a
+ dec de
+ dec bc
+ ld a, c
+ or b
+ jr nz, .asm_df89
+ ret
+
+GiveEgg: ; df92 (3:5f92)
+ ld a, [wd004]
+ push af
+ callab GetPreEvolution
+ callab GetPreEvolution
+ ld a, [wCurPartySpecies]
+ dec a
+ push af
+ call CheckCaughtMon
+ pop af
+ push bc
+ call CheckSeenMon
+ push bc
+ call TryAddMonToParty
+ pop bc
+ ld a, c
+ and a
+ jr nz, .asm_dfc9
+ ld a, [wCurPartySpecies]
+ dec a
+ ld c, a
+ ld d, $0
+ ld hl, wPokedexCaught
+ ld b, RESET_FLAG
+ predef FlagPredef
+.asm_dfc9
+ pop bc
+ ld a, c
+ and a
+ jr nz, .asm_dfdf
+ ld a, [wd004]
+ dec a
+ ld c, a
+ ld d, $0
+ ld hl, wPokedexSeen
+ ld b, RESET_FLAG
+ predef FlagPredef
+.asm_dfdf
+ pop af
+ ld [wd004], a
+ ld a, [wPokemonData]
+ dec a
+ ld bc, PARTYMON_STRUCT_LENGTH
+ ld hl, wPartyMon1Species
+ call AddNTimes
+ ld a, [wd004]
+ ld [hl], a
+ ld hl, wPokemonData
+ ld a, [hl]
+ ld b, $0
+ ld c, a
+ add hl, bc
+ ld a, $fd
+ ld [hl], a
+ ld a, [wPokemonData]
+ dec a
+ ld hl, wPartyMon1Nickname
+ call SkipNames
+ ld de, String_Egg
+ call CopyName2
+ ld a, [wPartyCount]
+ dec a
+ ld hl, wPartyMon1Happiness
+ ld bc, PARTYMON_STRUCT_LENGTH
+ call AddNTimes
+ ld a, [wMonStatusFlags]
+ bit 1, a
+ ld a, $1
+ jr nz, .asm_e028
+ ld a, [wd12f]
+.asm_e028
+ ld [hl], a
+ ld a, [wPartyCount]
+ dec a
+ ld hl, wPartyMon1HP
+ ld bc, PARTYMON_STRUCT_LENGTH
+ call AddNTimes
+ xor a
+ ld [hli], a
+ ld [hl], a
+ and a
+ ret
+
+String_Egg:
+ db "EGG@"
+
+RemoveMonFromPartyOrBox: ; e03f (3:603f)
+ ld hl, wPartyCount
+ ld a, [wd008]
+ and a
+ jr z, .asm_e050
+ ld a, $1
+ call OpenSRAM
+ ld hl, sBoxCount
+.asm_e050
+ ld a, [hl]
+ dec a
+ ld [hli], a
+ ld a, [wd005]
+ ld c, a
+ ld b, $0
+ add hl, bc
+ ld e, l
+ ld d, h
+ inc de
+.asm_e05d
+ ld a, [de]
+ inc de
+ ld [hli], a
+ inc a
+ jr nz, .asm_e05d
+ ld hl, wPartyMon6StatsEnd
+ ld d, $5
+ ld a, [wd008]
+ and a
+ jr z, .asm_e073
+ ld hl, sBoxMonOT
+ ld d, $13
+.asm_e073
+ ld a, [wd005]
+ call SkipNames
+ ld a, [wd005]
+ cp d
+ jr nz, .asm_e084
+ ld [hl], $ff
+ jp .asm_e0f6
+
+.asm_e084
+ ld d, h
+ ld e, l
+ ld bc, NAME_LENGTH
+ add hl, bc
+ ld bc, wPartyMonNicknames
+ ld a, [wd008]
+ and a
+ jr z, .asm_e096
+ ld bc, sBoxMonNicknames
+.asm_e096
+ call Function3231
+ ld hl, wPartyMon1
+ ld bc, PARTYMON_STRUCT_LENGTH
+ ld a, [wd008]
+ and a
+ jr z, .asm_e0ab
+ ld hl, sBoxMon1Species
+ ld bc, BOXMON_STRUCT_LENGTH
+.asm_e0ab
+ ld a, [wd005]
+ call AddNTimes
+ ld d, h
+ ld e, l
+ ld a, [wd008]
+ and a
+ jr z, .asm_e0c2
+ ld bc, BOXMON_STRUCT_LENGTH
+ add hl, bc
+ ld bc, sBoxMonOT
+ jr .asm_e0c9
+
+.asm_e0c2
+ ld bc, PARTYMON_STRUCT_LENGTH
+ add hl, bc
+ ld bc, wPartyMonOT
+.asm_e0c9
+ call Function3231
+ ld hl, wPartyMonNicknames
+ ld a, [wd008]
+ and a
+ jr z, .asm_e0d8
+ ld hl, sBoxMonNicknames
+.asm_e0d8
+ ld bc, NAME_LENGTH
+ ld a, [wd005]
+ call AddNTimes
+ ld d, h
+ ld e, l
+ ld bc, NAME_LENGTH
+ add hl, bc
+ ld bc, wdbce
+ ld a, [wd008]
+ and a
+ jr z, .asm_e0f3
+ ld bc, sBoxEnd
+.asm_e0f3
+ call Function3231
+.asm_e0f6
+ ld a, [wd008]
+ and a
+ jp nz, CloseSRAM
+ ld a, [wLinkMode]
+ and a
+ ret nz
+ ld a, $0
+ call OpenSRAM
+ ld hl, wPokemonData
+ ld a, [wd005]
+ cp [hl]
+ jr z, .asm_e137
+ ld hl, s0_a600
+ ld bc, MAIL_STRUCT_LENGTH
+ call AddNTimes
+ push hl
+ add hl, bc
+ pop de
+ ld a, [wd005]
+ ld b, a
+.asm_e120
+ push bc
+ push hl
+ ld bc, MAIL_STRUCT_LENGTH
+ call CopyBytes
+ pop hl
+ push hl
+ ld bc, MAIL_STRUCT_LENGTH
+ add hl, bc
+ pop de
+ pop bc
+ inc b
+ ld a, [wPartyCount]
+ cp b
+ jr nz, .asm_e120
+.asm_e137
+ jp CloseSRAM
+
+ComputeNPCTrademonStats:
+ ld a, MON_LEVEL
+ call GetPartyParamLocation
+ ld a, [hl]
+ ld [MON_LEVEL], a ; wow
+ ld a, MON_SPECIES
+ call GetPartyParamLocation
+ ld a, [hl]
+ ld [wce60], a
+ call GetBaseData
+ ld a, MON_MAXHP
+ call GetPartyParamLocation
+ ld d, h
+ ld e, l
+ push de
+ ld a, MON_STAT_EXP - 1
+ call GetPartyParamLocation
+ ld b, $1
+ call CalcPkmnStats
+ pop de
+ ld a, MON_HP
+ call GetPartyParamLocation
+ ld a, [de]
+ inc de
+ ld [hli], a
+ ld a, [de]
+ ld [hl], a
+ ret
+
+CalcPkmnStats: ; e16d
+; Calculates all 6 Stats of a Pkmn
+; b: Take into account stat EXP if TRUE
+; 'c' counts from 1-6 and points with 'BaseStats' to the base value
+; hl is the path to the Stat EXP
+; results in $ffb7 and $ffb8 are saved in [de]
+
+ ld c, $0
+.loop
+ inc c
+ call CalcPkmnStatC
+ ld a, [hMultiplicand + 1]
+ ld [de], a
+ inc de
+ ld a, [hMultiplicand + 2]
+ ld [de], a
+ inc de
+ ld a, c
+ cp STAT_SDEF
+ jr nz, .loop
+ ret
+; e17b
+
+CalcPkmnStatC: ; e181
+; 'c' is 1-6 and points to the BaseStat
+; 1: HP
+; 2: Attack
+; 3: Defense
+; 4: Speed
+; 5: SpAtk
+; 6: SpDef
+ push hl
+ push de
+ push bc
+ ld a, b
+ ld d, a
+ push hl
+ ld hl, wd121
+ dec hl ; has to be decreased, because 'c' begins with 1
+ ld b, $0
+ add hl, bc
+ ld a, [hl]
+ ld e, a
+ pop hl
+ push hl
+ ld a, c
+ cp STAT_SDEF
+ jr nz, .not_spdef
+ dec hl
+ dec hl
+
+.not_spdef
+ sla c
+ ld a, d
+ and a
+ jr z, .no_stat_exp
+ add hl, bc
+.sqrt_loop
+ xor a
+ ld [hMultiplicand], a
+ ld [hMultiplicand + 1], a
+ inc b
+ ld a, b
+ cp $ff
+ jr z, .no_stat_exp
+ ld [hMultiplicand + 2], a
+ ld [hMultiplier], a
+ call Multiply
+ ld a, [hld]
+ ld d, a
+ ld a, [hProduct + 3]
+ sub d
+ ld a, [hli]
+ ld d, a
+ ld a, [hProduct + 2]
+ sbc d
+ jr c, .sqrt_loop
+.no_stat_exp
+ srl c
+ pop hl
+ push bc
+ ld bc, MON_DVS - MON_HP_EXP + 1
+ add hl, bc
+ pop bc
+ ld a, c
+ cp STAT_ATK
+ jr z, .Attack
+ cp STAT_DEF
+ jr z, .Defense
+ cp STAT_SPD
+ jr z, .Speed
+ cp STAT_SATK
+ jr z, .Special
+ cp STAT_SDEF
+ jr z, .Special
+; DV_HP = (DV_ATK & 1) << 3 + (DV_DEF & 1) << 2 + (DV_SPD & 1) << 1 + (DV_SPC & 1)
+ push bc
+ ld a, [hl]
+ swap a
+ and $1
+ add a
+ add a
+ add a
+ ld b, a
+ ld a, [hli]
+ and $1
+ add a
+ add a
+ add b
+ ld b, a
+ ld a, [hl]
+ swap a
+ and $1
+ add a
+ add b
+ ld b, a
+ ld a, [hl]
+ and $1
+ add b
+ pop bc
+ jr .GotDV
+
+.Attack:
+ ld a, [hl]
+ swap a
+ and $f
+ jr .GotDV
+
+.Defense:
+ ld a, [hl]
+ and $f
+ jr .GotDV
+
+.Speed:
+ inc hl
+ ld a, [hl]
+ swap a
+ and $f
+ jr .GotDV
+
+.Special:
+ inc hl
+ ld a, [hl]
+ and $f
+
+.GotDV:
+ ld d, 0
+ add e
+ ld e, a
+ jr nc, .no_overflow_1
+ inc d
+
+.no_overflow_1
+ sla e
+ rl d
+ srl b
+ srl b
+ ld a, b
+ add e
+ jr nc, .no_overflow_2
+ inc d
+
+.no_overflow_2
+ ld [hMultiplicand + 2], a
+ ld a, d
+ ld [hMultiplicand + 1], a
+ xor a
+ ld [hMultiplicand + 0], a
+ ld a, [wCurPartyLevel]
+ ld [hMultiplier], a
+ call Multiply
+ ld a, [hProduct + 1]
+ ld [hDividend + 0], a
+ ld a, [hProduct + 2]
+ ld [hDividend + 1], a
+ ld a, [hProduct + 3]
+ ld [hDividend + 2], a
+ ld a, 100
+ ld [hDivisor], a
+ ld a, 3
+ ld b, a
+ call Divide
+ ld a, c
+ cp STAT_HP
+ ld a, 5
+ jr nz, .not_hp
+ ld a, [wCurPartyLevel]
+ ld b, a
+ ld a, [hQuotient + 2]
+ add b
+ ld [hMultiplicand + 2], a
+ jr nc, .no_overflow_3
+ ld a, [hQuotient + 1]
+ inc a
+ ld [hMultiplicand + 1], a
+
+.no_overflow_3
+ ld a, 10
+
+.not_hp
+ ld b, a
+ ld a, [hQuotient + 2]
+ add b
+ ld [hMultiplicand + 2], a
+ jr nc, .no_overflow_4
+ ld a, [hQuotient + 1]
+ inc a
+ ld [hMultiplicand + 1], a
+
+.no_overflow_4
+ ld a, [hQuotient + 1]
+ cp (1000 / $100) + 1
+ jr nc, .max_stat
+ cp 1000 / $100
+ jr c, .stat_value_okay
+ ld a, [hQuotient + 2]
+ cp 1000 % $100
+ jr c, .stat_value_okay
+
+.max_stat
+ ld a, 999 / $100
+ ld [hMultiplicand + 1], a
+ ld a, 999 % $100
+ ld [hMultiplicand + 2], a
+
+.stat_value_okay
+ pop bc
+ pop de
+ pop hl
+ ret
+
+GivePoke: ; Give a Pokemon from script
+ push de
+ push bc
+ xor a
+ ld [wMonType], a
+ call TryAddMonToParty
+ jr nc, .asm_e2c9
+ ld hl, wPartyMon1Nickname
+ ld a, [wPokemonData]
+ dec a
+ ld [wd005], a
+ call SkipNames
+ ld d, h
+ ld e, l
+ pop bc
+ ld a, b
+ ld b, $0
+ push bc
+ push de
+ push af
+ ld a, [wd002]
+ and a
+ jr z, .asm_e2fa
+ ld a, [wd005]
+ ld hl, wPartyMon1Item
+ ld bc, PARTYMON_STRUCT_LENGTH
+ call AddNTimes
+ ld a, [wd002]
+ ld [hl], a
+ jr .asm_e2fa
+
+.asm_e2c9
+ ld a, [wCurPartySpecies]
+ ld [wd0ed], a
+ callab LoadEnemyMon
+ call SentPkmnIntoBox
+ jp nc, Functione3af
+ ld a, BOXMON
+ ld [wMonType], a
+ xor a
+ ld [wd005], a
+ ld de, wMonOrItemNameBuffer
+ pop bc
+ ld a, b
+ ld b, $1
+ push bc
+ push de
+ push af
+ ld a, [wd002]
+ and a
+ jr z, .asm_e2fa
+ ld a, [wd002]
+ ld [sBoxMon1Item], a
+.asm_e2fa
+ ld a, [wd004]
+ ld [wd151], a
+ ld [wd0ed], a
+ call GetPokemonName
+ ld hl, wStringBuffer1
+ ld de, wMonOrItemNameBuffer
+ ld bc, PKMN_NAME_LENGTH
+ call CopyBytes
+ pop af
+ and a
+ jr z, .asm_e381
+ pop de
+ pop bc
+ pop hl
+ push bc
+ push hl
+ ld a, [wScriptBank]
+ call GetFarHalfword
+ ld bc, PKMN_NAME_LENGTH
+ ld a, [wScriptBank]
+ call FarCopyBytes
+ pop hl
+ inc hl
+ inc hl
+ ld a, [wScriptBank]
+ call GetFarHalfword
+ pop bc
+ ld a, b
+ and a
+ push de
+ push bc
+ jr nz, .asm_e360
+ push hl
+ ld a, [wd005]
+ ld hl, wPartyMon1OT
+ call SkipNames
+ ld d, h
+ ld e, l
+ pop hl
+ ld a, [wScriptBank]
+ call FarCopyBytes
+ ld a, [wd005]
+ ld hl, wPartyMon1ID
+ ld bc, PARTYMON_STRUCT_LENGTH
+ call AddNTimes
+ ld a, 01001 / $100
+ ld [hli], a
+ ld [hl], 01001 % $100
+ jr .asm_e38d
+
+.asm_e360
+ ld a, BANK(sBoxMonOT)
+ call OpenSRAM
+ ld de, sBoxMonOT
+ ld bc, PKMN_NAME_LENGTH
+ ld a, [wScriptBank]
+ call FarCopyBytes
+ ld hl, sBoxMon1ID
+ call Random
+ ld [hli], a
+ call Random
+ ld [hl], a
+ call CloseSRAM
+ jr .asm_e38d
+
+.asm_e381
+ callab Functionc7cd0
+ pop de
+ jr c, .asm_e38d
+ call InitNickname
+.asm_e38d
+ pop bc
+ pop de
+ ld a, b
+ and a
+ ret z
+ ld hl, Text_WasSentToBillsPC
+ call PrintText
+ ld a, BANK(sBoxMonNicknames)
+ call OpenSRAM
+ ld hl, wMonOrItemNameBuffer
+ ld de, sBoxMonNicknames
+ ld bc, PKMN_NAME_LENGTH
+ call CopyBytes
+ call CloseSRAM
+ ld b, $1
+ ret
+
+Functione3af: ; e3af (3:63af)
+ pop bc
+ pop de
+ ld b, $2
+ ret
+
+Text_WasSentToBillsPC:
+ text_jump Text_WasSentToBillsPC_
+ db "@"
+
+InitNickname: ; e3b9 (3:63b9)
+ push de
+ call LoadStandardMenuDataHeader
+ call DisableSpriteUpdates
+ pop de
+ push de
+ ld b, $0
+ callba NamingScreen
+ pop hl
+ ld de, wStringBuffer1
+ call InitName
+ ld a, $4 ; XXX could this be in bank 4 in pokered?
+ ld hl, ExitAllMenus
+ rst FarCall
+ ret