pokecrystal-board/engine/battle/read_trainer_party.asm

391 lines
5.0 KiB
NASM
Raw Normal View History

2018-06-24 07:09:41 -07:00
ReadTrainerParty:
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
2018-06-24 07:09:41 -07:00
TrainerTypes:
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
2018-06-24 07:09:41 -07:00
TrainerType1:
; 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
2018-06-24 07:09:41 -07:00
TrainerType2:
; 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
2018-06-24 07:09:41 -07:00
TrainerType3:
; 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
2018-06-24 07:09:41 -07:00
TrainerType4:
; 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
2018-06-24 07:09:41 -07:00
ComputeTrainerReward:
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
2018-06-24 07:09:41 -07:00
Battle_GetTrainerName::
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
2018-06-24 07:09:41 -07:00
GetTrainerName::
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
2018-06-24 07:09:41 -07:00
CopyTrainerName:
2018-01-23 14:39:09 -08:00
ld de, wStringBuffer1
push de
ld bc, NAME_LENGTH
call CopyBytes
pop de
ret
2018-06-24 07:09:41 -07:00
Function39990:
; This function is useless.
2018-01-23 14:39:09 -08:00
ld de, wStringBuffer1
push de
ld bc, NAME_LENGTH
pop de
ret