summaryrefslogtreecommitdiff
path: root/engine/move_mon.asm
diff options
context:
space:
mode:
Diffstat (limited to 'engine/move_mon.asm')
-rwxr-xr-xengine/move_mon.asm1651
1 files changed, 0 insertions, 1651 deletions
diff --git a/engine/move_mon.asm b/engine/move_mon.asm
deleted file mode 100755
index 7410375f..00000000
--- a/engine/move_mon.asm
+++ /dev/null
@@ -1,1651 +0,0 @@
-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]
- ldh [hMoveMon], a
- add e
- ld e, a
- jr nc, .asm_d8ad
- inc d
-.asm_d8ad
- ld a, [wCurPartySpecies]
- 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
- ldh a, [hMoveMon]
- dec a
- call SkipNames
- ld d, h
- ld e, l
- ld hl, wPlayerName
- ld bc, NAME_LENGTH
- call CopyBytes
- ld a, [wMonType]
- and a
- jr nz, .asm_d8f6
- ld a, [wCurPartySpecies]
- ld [wd151], a
- call GetPokemonName
- ld hl, wPartyMonNicknames
- ldh 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
- ldh a, [hMoveMon]
- dec a
- ld bc, PARTYMON_STRUCT_LENGTH
- call AddNTimes
-GeneratePartyMonStats:
- ld e, l
- ld d, h
- push hl
- ld a, [wCurPartySpecies]
- ld [wCurSpecies], 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
-
- ; Initialize ID.
- ld a, [wPlayerID]
- ld [de], a
- inc de
- ld a, [wPlayerID + 1]
- ld [de], a
- inc de
-
- ; Initialize Exp.
- push de
- ld a, [wCurPartyLevel]
- ld d, a
- callfar CalcExpAtLevel
- pop de
- ldh a, [hProduct + 1]
- ld [de], a
- inc de
- ldh a, [hProduct + 2]
- ld [de], a
- inc de
- ldh a, [hProduct + 3]
- ld [de], a
- inc de
-
- ; Initialize stat experience.
- xor a
- ld b, MON_DVS - MON_STAT_EXP
-.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
- farcall GetTrainerDVs ; 9:7271
- pop hl
- jr .asm_d9bb
-
-.asm_d998
- ld a, [wCurPartySpecies]
- 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 CalcMonStatC
- ldh a, [hProduct + 2]
- ld [de], a
- inc de
- ldh a, [hProduct + 3]
- 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 CalcMonStats
-.asm_da4b
- ld a, [wMonType]
- and $f
- jr nz, .asm_da71
- ld a, [wCurPartySpecies]
- cp $c9
- jr nz, .asm_da71
- ld hl, wPartyMon1DVs
- ld a, [wPokemonData]
- dec a
- ld bc, PARTYMON_STRUCT_LENGTH
- call AddNTimes
- predef GetUnownLetter
- callfar 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, [wCurPartyMon]
- 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, [wCurPartyMon]
- call SkipNames
- ld bc, NAME_LENGTH
- call CopyBytes
- ld a, [wCurPartySpecies]
- ld [wd151], a
- cp EGG
- 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], 70
-.asm_db18
- ld a, [wCurPartySpecies]
- cp UNOWN
- jr nz, .asm_db43
- ld hl, wPartyMon1DVs
- ld a, [wPartyCount]
- dec a
- ld bc, PARTYMON_STRUCT_LENGTH
- call AddNTimes
- predef GetUnownLetter
- callfar UpdateUnownDex
- ld a, [wFirstUnownSeen]
- and a
- jr nz, .asm_db43
- ld a, [wd11e]
- ld [wFirstUnownSeen], a
-.asm_db43
- and a
- ret
-
-SendGetMonIntoFromBox: ; db45 (3:5b45)
- ld a, $1
- call OpenSRAM
- ld a, [wPokemonWithdrawDepositParameter]
- and a
- jr z, .asm_db66
- cp $2
- jr z, .asm_db66
- cp $3
- ld hl, wBreedMon1Species
- 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, [wPokemonWithdrawDepositParameter]
- cp $2
- ld a, [wBreedMon1Species]
- jr z, .asm_db82
- ld a, [wCurPartySpecies]
-.asm_db82
- ld [hli], a
- ld [hl], $ff
- ld a, [wPokemonWithdrawDepositParameter]
- 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, [wPokemonWithdrawDepositParameter]
- and a
- ld hl, sBoxMon1Species
- ld bc, BOXMON_STRUCT_LENGTH
- jr z, .asm_dbbd
- cp $2
- ld hl, wBreedMon1Species
- jr z, .asm_dbc3
- ld hl, wPartyMon1Species
- ld bc, PARTYMON_STRUCT_LENGTH
-.asm_dbbd
- ld a, [wCurPartyMon]
- call AddNTimes
-.asm_dbc3
- ld bc, BOXMON_STRUCT_LENGTH
- call CopyBytes
- ld a, [wPokemonWithdrawDepositParameter]
- cp $3
- ld de, wBreedMon1OT
- 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, [wPokemonWithdrawDepositParameter]
- and a
- jr z, .asm_dbfb
- ld hl, wBreedMon1OT
- cp $2
- jr z, .asm_dc01
- ld hl, wPartyMon6StatsEnd
-.asm_dbfb
- ld a, [wCurPartyMon]
- call SkipNames
-.asm_dc01
- ld bc, NAME_LENGTH
- call CopyBytes
- ld a, [wPokemonWithdrawDepositParameter]
- cp $3
- ld de, wBreedMon1Nick
- 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, [wPokemonWithdrawDepositParameter]
- and a
- jr z, .asm_dc39
- ld hl, wBreedMon1Nick
- cp $2
- jr z, .asm_dc3f
- ld hl, wPartyMon1Nickname
-.asm_dc39
- ld a, [wCurPartyMon]
- call SkipNames
-.asm_dc3f
- ld bc, NAME_LENGTH
- call CopyBytes
- pop hl
- ld a, [wPokemonWithdrawDepositParameter]
- cp $1
- jr z, .asm_dcaa
- cp $3
- jp z, Functiondcb2
- push hl
- srl a
- add $2
- ld [wMonType], a
- predef CopyMonToTempMon
- callfar 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 CalcMonStats
- pop bc
- ld a, [wPokemonWithdrawDepositParameter]
- 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, [wCurPartySpecies]
- 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
- farcall 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
-
-RetrieveMonFromDayCareMan:
- ld a, [wBreedMon1Species]
- ld [wCurPartySpecies], a
- ld de, SFX_TRANSACTION
- call PlaySFX
- call WaitSFX
- call GetBreedMon1LevelGrowth
- ld a, b
- ld [wMovementBufferCount], a
- ld a, e
- ld [wCurPartyLevel], a
- xor a
- ld [wPokemonWithdrawDepositParameter], a
- jp Functiondd6a
-
-RetrieveMonFromDayCareLady:
- ld a, [wBreedMon2Species]
- ld [wCurPartySpecies], a
- ld de, SFX_TRANSACTION
- call PlaySFX
- call WaitSFX
- call GetBreedMon2LevelGrowth
- ld a, b
- ld [wMovementBufferCount], a
- ld a, e
- ld [wCurPartyLevel], a
- ld a, $1
- ld [wPokemonWithdrawDepositParameter], 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, [wPokemonWithdrawDepositParameter]
- and a
- ld a, [wBreedMon1Species]
- ld de, wBreedMon1Nick
- jr z, .asm_dd8c
- ld a, [wBreedMon2Species]
- ld de, wBreedMon2Nick
-.asm_dd8c
- ld [hli], a
- ld [wCurSpecies], 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 CalcMonStats
- 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 [wCurPartyMon], a
- farcall Functionc6bc ; same bank
- ld a, [wCurPartyLevel]
- ld d, a
- callfar CalcExpAtLevel
- pop bc
- ld hl, $8
- add hl, bc
- ldh a, [hQuotient]
- ld [hli], a
- ldh a, [hPrintNum3]
- ld [hli], a
- ldh 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
-
-DepositMonWithDayCareMan:
- ld de, wBreedMon1Nick
- call Functionde4a
- xor a
- ld [wPokemonWithdrawDepositParameter], a
- jp RemoveMonFromPartyOrBox
-
-DepositMonWithDayCareLady:
- ld de, wBreedMon2Nick
- call Functionde4a
- xor a
- ld [wPokemonWithdrawDepositParameter], a
- jp RemoveMonFromPartyOrBox
-
-Functionde4a: ; de4a (3:5e4a)
- ld a, [wCurPartyMon]
- ld hl, wPartyMonNicknames
- call SkipNames
- call CopyBytes
- ld a, [wCurPartyMon]
- ld hl, wPartyMon1OT
- call SkipNames
- call CopyBytes
- ld a, [wCurPartyMon]
- ld hl, wPartyMon1
- ld bc, PARTYMON_STRUCT_LENGTH
- call AddNTimes
- ld bc, BOXMON_STRUCT_LENGTH
- jp CopyBytes
-
-SendMonIntoBox: ; 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, [wCurPartySpecies]
- ld [wCurSpecies], 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, wPlayerName
- ld de, sBoxMonOT
- ld bc, NAME_LENGTH
- call CopyBytes
- ld a, [wCurPartySpecies]
- 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
- callfar CalcExpAtLevel
- pop de
- ldh a, [hQuotient]
- ld [de], a
- inc de
- ldh a, [hPrintNum3]
- ld [de], a
- inc de
- ldh 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, [wCurPartySpecies]
- dec a
- call SetSeenAndCaughtMon
- ld a, [wCurPartySpecies]
- cp $c9
- jr nz, .asm_df26
- ld hl, sBoxMon1DVs
- predef GetUnownLetter
- callfar 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, [wCurPartySpecies]
- push af
- callfar GetPreEvolution
- callfar 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 SmallFarFlagAction
-.asm_dfc9
- pop bc
- ld a, c
- and a
- jr nz, .asm_dfdf
- ld a, [wCurPartySpecies]
- dec a
- ld c, a
- ld d, $0
- ld hl, wPokedexSeen
- ld b, RESET_FLAG
- predef SmallFarFlagAction
-.asm_dfdf
- pop af
- ld [wCurPartySpecies], a
- ld a, [wPokemonData]
- dec a
- ld bc, PARTYMON_STRUCT_LENGTH
- ld hl, wPartyMon1Species
- call AddNTimes
- ld a, [wCurPartySpecies]
- 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, [wDebugFlags]
- bit 1, a
- ld a, $1
- jr nz, .asm_e028
- ld a, [wBaseEggSteps]
-.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, [wPokemonWithdrawDepositParameter]
- 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, [wCurPartyMon]
- 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, [wPokemonWithdrawDepositParameter]
- and a
- jr z, .asm_e073
- ld hl, sBoxMonOT
- ld d, $13
-.asm_e073
- ld a, [wCurPartyMon]
- call SkipNames
- ld a, [wCurPartyMon]
- 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, [wPokemonWithdrawDepositParameter]
- and a
- jr z, .asm_e096
- ld bc, sBoxMonNicknames
-.asm_e096
- call CopyDataUntil
- ld hl, wPartyMon1
- ld bc, PARTYMON_STRUCT_LENGTH
- ld a, [wPokemonWithdrawDepositParameter]
- and a
- jr z, .asm_e0ab
- ld hl, sBoxMon1Species
- ld bc, BOXMON_STRUCT_LENGTH
-.asm_e0ab
- ld a, [wCurPartyMon]
- call AddNTimes
- ld d, h
- ld e, l
- ld a, [wPokemonWithdrawDepositParameter]
- 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 CopyDataUntil
- ld hl, wPartyMonNicknames
- ld a, [wPokemonWithdrawDepositParameter]
- and a
- jr z, .asm_e0d8
- ld hl, sBoxMonNicknames
-.asm_e0d8
- ld bc, NAME_LENGTH
- ld a, [wCurPartyMon]
- call AddNTimes
- ld d, h
- ld e, l
- ld bc, NAME_LENGTH
- add hl, bc
- ld bc, wPartyMonNicknamesEnd
- ld a, [wPokemonWithdrawDepositParameter]
- and a
- jr z, .asm_e0f3
- ld bc, sBoxEnd
-.asm_e0f3
- call CopyDataUntil
-.asm_e0f6
- ld a, [wPokemonWithdrawDepositParameter]
- and a
- jp nz, CloseSRAM
- ld a, [wLinkMode]
- and a
- ret nz
- ld a, $0
- call OpenSRAM
- ld hl, wPokemonData
- ld a, [wCurPartyMon]
- 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, [wCurPartyMon]
- 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 [wCurSpecies], 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 CalcMonStats
- pop de
- ld a, MON_HP
- call GetPartyParamLocation
- ld a, [de]
- inc de
- ld [hli], a
- ld a, [de]
- ld [hl], a
- ret
-
-CalcMonStats: ; 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 CalcMonStatC
- ldh a, [hMultiplicand + 1]
- ld [de], a
- inc de
- ldh a, [hMultiplicand + 2]
- ld [de], a
- inc de
- ld a, c
- cp STAT_SDEF
- jr nz, .loop
- ret
-; e17b
-
-CalcMonStatC: ; 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
- ldh [hMultiplicand], a
- ldh [hMultiplicand + 1], a
- inc b
- ld a, b
- cp $ff
- jr z, .no_stat_exp
- ldh [hMultiplicand + 2], a
- ldh [hMultiplier], a
- call Multiply
- ld a, [hld]
- ld d, a
- ldh a, [hProduct + 3]
- sub d
- ld a, [hli]
- ld d, a
- ldh 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
- ldh [hMultiplicand + 2], a
- ld a, d
- ldh [hMultiplicand + 1], a
- xor a
- ldh [hMultiplicand + 0], a
- ld a, [wCurPartyLevel]
- ldh [hMultiplier], a
- call Multiply
- ldh a, [hProduct + 1]
- ldh [hDividend + 0], a
- ldh a, [hProduct + 2]
- ldh [hDividend + 1], a
- ldh a, [hProduct + 3]
- ldh [hDividend + 2], a
- ld a, 100
- ldh [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
- ldh a, [hQuotient + 2]
- add b
- ldh [hMultiplicand + 2], a
- jr nc, .no_overflow_3
- ldh a, [hQuotient + 1]
- inc a
- ldh [hMultiplicand + 1], a
-
-.no_overflow_3
- ld a, 10
-
-.not_hp
- ld b, a
- ldh a, [hQuotient + 2]
- add b
- ldh [hMultiplicand + 2], a
- jr nc, .no_overflow_4
- ldh a, [hQuotient + 1]
- inc a
- ldh [hMultiplicand + 1], a
-
-.no_overflow_4
- ldh a, [hQuotient + 1]
- cp (1000 / $100) + 1
- jr nc, .max_stat
- cp 1000 / $100
- jr c, .stat_value_okay
- ldh a, [hQuotient + 2]
- cp 1000 % $100
- jr c, .stat_value_okay
-
-.max_stat
- ld a, 999 / $100
- ldh [hMultiplicand + 1], a
- ld a, 999 % $100
- ldh [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 [wCurPartyMon], 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, [wCurPartyMon]
- 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 [wTempEnemyMonSpecies], a
- callfar LoadEnemyMon
- call SendMonIntoBox
- jp nc, Functione3af
- ld a, BOXMON
- ld [wMonType], a
- xor a
- ld [wCurPartyMon], 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, [wCurPartySpecies]
- ld [wd151], a
- ld [wTempEnemyMonSpecies], a
- call GetPokemonName
- ld hl, wStringBuffer1
- ld de, wMonOrItemNameBuffer
- ld bc, MON_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, MON_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, [wCurPartyMon]
- ld hl, wPartyMon1OT
- call SkipNames
- ld d, h
- ld e, l
- pop hl
- ld a, [wScriptBank]
- call FarCopyBytes
- ld a, [wCurPartyMon]
- 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, MON_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
- callfar Functionc7cd0
- pop de
- jr c, .asm_e38d
- call InitNickname
-.asm_e38d
- pop bc
- pop de
- ld a, b
- and a
- ret z
- ld hl, TextJump_WasSentToBillsPC
- call PrintText
- ld a, BANK(sBoxMonNicknames)
- call OpenSRAM
- ld hl, wMonOrItemNameBuffer
- ld de, sBoxMonNicknames
- ld bc, MON_NAME_LENGTH
- call CopyBytes
- call CloseSRAM
- ld b, $1
- ret
-
-Functione3af: ; e3af (3:63af)
- pop bc
- pop de
- ld b, $2
- ret
-
-TextJump_WasSentToBillsPC:
- text_far Text_WasSentToBillsPC
- db "@"
-
-InitNickname: ; e3b9 (3:63b9)
- push de
- call LoadStandardMenuHeader
- call DisableSpriteUpdates
- pop de
- push de
- ld b, $0
- farcall 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