pokecrystal-board/engine/battle/read_trainer_party.asm

399 lines
5.1 KiB
NASM
Raw Normal View History

ReadTrainerParty: ; 39771
2018-01-23 14:39:09 -08:00
ld a, [wInBattleTowerBattle]
bit 0, a
ret nz
ld a, [wLinkMode]
and a
ret nz
2018-01-23 14:39:09 -08:00
ld hl, wOTPartyCount
xor a
ld [hli], a
dec a
ld [hl], a
2018-01-23 14:39:09 -08:00
ld hl, wOTPartyMons
ld bc, wOTPartyMonsEnd - wOTPartyMons
xor a
call ByteFill
2018-01-23 14:39:09 -08:00
ld a, [wOtherTrainerClass]
cp CAL
jr nz, .not_cal2
2018-01-23 14:39:09 -08:00
ld a, [wOtherTrainerID]
cp CAL2
jr z, .cal2
2018-01-23 14:39:09 -08:00
ld a, [wOtherTrainerClass]
.not_cal2
dec a
ld c, a
ld b, 0
ld hl, TrainerGroups
add hl, bc
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
2018-01-23 14:39:09 -08:00
ld a, [wOtherTrainerID]
ld b, a
.skip_trainer
dec b
jr z, .got_trainer
.loop
ld a, [hli]
2018-01-25 18:34:42 -08:00
cp -1
jr nz, .loop
jr .skip_trainer
.got_trainer
.skip_name
ld a, [hli]
cp "@"
jr nz, .skip_name
ld a, [hli]
ld c, a
ld b, 0
ld d, h
ld e, l
ld hl, TrainerTypes
add hl, bc
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
ld bc, .done
push bc
jp hl
.done
jp ComputeTrainerReward
.cal2
ld a, BANK(sMysteryGiftTrainer)
call GetSRAMBank
ld de, sMysteryGiftTrainer
call TrainerType2
call CloseSRAM
jr .done
; 397e3
TrainerTypes: ; 397e3
2018-01-25 18:34:42 -08:00
; entries correspond to TRAINERTYPE_* constants
dw TrainerType1 ; level, species
dw TrainerType2 ; level, species, moves
dw TrainerType3 ; level, species, item
dw TrainerType4 ; level, species, item, moves
; 397eb
TrainerType1: ; 397eb
; normal (level, species)
ld h, d
ld l, e
.loop
ld a, [hli]
cp $ff
ret z
2018-01-23 14:39:09 -08:00
ld [wCurPartyLevel], a
ld a, [hli]
2018-01-23 14:39:09 -08:00
ld [wCurPartySpecies], a
ld a, OTPARTYMON
2018-01-23 14:39:09 -08:00
ld [wMonType], a
push hl
predef TryAddMonToParty
pop hl
jr .loop
; 39806
TrainerType2: ; 39806
; moves
ld h, d
ld l, e
.loop
ld a, [hli]
cp $ff
ret z
2018-01-23 14:39:09 -08:00
ld [wCurPartyLevel], a
ld a, [hli]
2018-01-23 14:39:09 -08:00
ld [wCurPartySpecies], a
ld a, OTPARTYMON
2018-01-23 14:39:09 -08:00
ld [wMonType], a
push hl
predef TryAddMonToParty
2018-01-23 14:39:09 -08:00
ld a, [wOTPartyCount]
dec a
2018-01-23 14:39:09 -08:00
ld hl, wOTPartyMon1Moves
ld bc, PARTYMON_STRUCT_LENGTH
call AddNTimes
ld d, h
ld e, l
pop hl
ld b, NUM_MOVES
.copy_moves
ld a, [hli]
ld [de], a
inc de
dec b
jr nz, .copy_moves
push hl
2018-01-23 14:39:09 -08:00
ld a, [wOTPartyCount]
dec a
2018-01-23 14:39:09 -08:00
ld hl, wOTPartyMon1Species
ld bc, PARTYMON_STRUCT_LENGTH
call AddNTimes
ld d, h
ld e, l
ld hl, MON_PP
add hl, de
push hl
ld hl, MON_MOVES
add hl, de
pop de
ld b, NUM_MOVES
.copy_pp
ld a, [hli]
and a
jr z, .copied_pp
push hl
push bc
dec a
ld hl, Moves + MOVE_PP
ld bc, MOVE_LENGTH
call AddNTimes
ld a, BANK(Moves)
call GetFarByte
pop bc
pop hl
ld [de], a
inc de
dec b
jr nz, .copy_pp
.copied_pp
pop hl
jr .loop
; 39871
TrainerType3: ; 39871
; item
ld h, d
ld l, e
.loop
ld a, [hli]
cp $ff
ret z
2018-01-23 14:39:09 -08:00
ld [wCurPartyLevel], a
ld a, [hli]
2018-01-23 14:39:09 -08:00
ld [wCurPartySpecies], a
ld a, OTPARTYMON
2018-01-23 14:39:09 -08:00
ld [wMonType], a
push hl
predef TryAddMonToParty
2018-01-23 14:39:09 -08:00
ld a, [wOTPartyCount]
dec a
2018-01-23 14:39:09 -08:00
ld hl, wOTPartyMon1Item
ld bc, PARTYMON_STRUCT_LENGTH
call AddNTimes
ld d, h
ld e, l
pop hl
ld a, [hli]
ld [de], a
jr .loop
; 3989d (e:589d)
TrainerType4: ; 3989d
; item + moves
ld h, d
ld l, e
.loop
ld a, [hli]
cp $ff
ret z
2018-01-23 14:39:09 -08:00
ld [wCurPartyLevel], a
ld a, [hli]
2018-01-23 14:39:09 -08:00
ld [wCurPartySpecies], a
ld a, OTPARTYMON
2018-01-23 14:39:09 -08:00
ld [wMonType], a
push hl
predef TryAddMonToParty
2018-01-23 14:39:09 -08:00
ld a, [wOTPartyCount]
dec a
2018-01-23 14:39:09 -08:00
ld hl, wOTPartyMon1Item
ld bc, PARTYMON_STRUCT_LENGTH
call AddNTimes
ld d, h
ld e, l
pop hl
ld a, [hli]
ld [de], a
push hl
2018-01-23 14:39:09 -08:00
ld a, [wOTPartyCount]
dec a
2018-01-23 14:39:09 -08:00
ld hl, wOTPartyMon1Moves
ld bc, PARTYMON_STRUCT_LENGTH
call AddNTimes
ld d, h
ld e, l
pop hl
ld b, NUM_MOVES
.copy_moves
ld a, [hli]
ld [de], a
inc de
dec b
jr nz, .copy_moves
push hl
2018-01-23 14:39:09 -08:00
ld a, [wOTPartyCount]
dec a
2018-01-23 14:39:09 -08:00
ld hl, wOTPartyMon1
ld bc, PARTYMON_STRUCT_LENGTH
call AddNTimes
ld d, h
ld e, l
ld hl, MON_PP
add hl, de
push hl
ld hl, MON_MOVES
add hl, de
pop de
ld b, NUM_MOVES
.copy_pp
ld a, [hli]
and a
jr z, .copied_pp
push hl
push bc
dec a
ld hl, Moves + MOVE_PP
ld bc, MOVE_LENGTH
call AddNTimes
ld a, BANK(Moves)
call GetFarByte
pop bc
pop hl
ld [de], a
inc de
dec b
jr nz, .copy_pp
.copied_pp
pop hl
jr .loop
; 3991b
ComputeTrainerReward: ; 3991b (e:591b)
ld hl, hProduct
xor a
ld [hli], a
ld [hli], a
ld [hli], a
ld a, [wEnemyTrainerBaseReward]
ld [hli], a
2018-01-23 14:39:09 -08:00
ld a, [wCurPartyLevel]
ld [hl], a
call Multiply
ld hl, wBattleReward
xor a
ld [hli], a
ld a, [hProduct + 2]
ld [hli], a
ld a, [hProduct + 3]
ld [hl], a
ret
Battle_GetTrainerName:: ; 39939
2018-01-23 14:39:09 -08:00
ld a, [wInBattleTowerBattle]
bit 0, a
2018-01-23 14:39:09 -08:00
ld hl, wOTPlayerName
jp nz, CopyTrainerName
2018-01-23 14:39:09 -08:00
ld a, [wOtherTrainerID]
ld b, a
2018-01-23 14:39:09 -08:00
ld a, [wOtherTrainerClass]
ld c, a
GetTrainerName:: ; 3994c
ld a, c
cp CAL
jr nz, .not_cal2
ld a, BANK(sMysteryGiftTrainerHouseFlag)
call GetSRAMBank
ld a, [sMysteryGiftTrainerHouseFlag]
and a
call CloseSRAM
jr z, .not_cal2
ld a, BANK(sMysteryGiftPartnerName)
call GetSRAMBank
ld hl, sMysteryGiftPartnerName
call CopyTrainerName
jp CloseSRAM
.not_cal2
dec c
push bc
ld b, 0
ld hl, TrainerGroups
add hl, bc
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
pop bc
.loop
dec b
jr z, CopyTrainerName
.skip
ld a, [hli]
cp $ff
jr nz, .skip
jr .loop
CopyTrainerName: ; 39984
2018-01-23 14:39:09 -08:00
ld de, wStringBuffer1
push de
ld bc, NAME_LENGTH
call CopyBytes
pop de
ret
; 39990
Function39990: ; 39990
; This function is useless.
2018-01-23 14:39:09 -08:00
ld de, wStringBuffer1
push de
ld bc, NAME_LENGTH
pop de
ret
; 39999