jep-hack/engine/battle/read_trainer_party.asm
Zeta_Null 2f8a41f833 First Commit
Upload literally everything from the pokecrystal16 expand-move-ID branch
2023-09-10 12:35:35 -04:00

299 lines
4.2 KiB
NASM

ReadTrainerParty:
ld a, [wInBattleTowerBattle]
bit 0, a
ret nz
ld a, [wLinkMode]
and a
ret nz
ld hl, wOTPartyCount
xor a
ld [hli], a
dec a
ld [hl], a
ld hl, wOTPartyMons
ld bc, PARTYMON_STRUCT_LENGTH * PARTY_LENGTH
xor a
call ByteFill
ld a, [wOtherTrainerClass]
cp CAL
jr nz, .not_cal2
ld a, [wOtherTrainerID]
cp CAL2
jr z, .cal2
ld a, [wOtherTrainerClass]
.not_cal2
dec a
ld c, a
ld b, 0
ld hl, TrainerGroups
add hl, bc
add hl, bc
add hl, bc
ld a, [hli]
ld [wTrainerGroupBank], a
ld a, [hli]
ld h, [hl]
ld l, a
ld a, [wOtherTrainerID]
ld b, a
.skip_trainer
dec b
jr z, .got_trainer
.loop
ld a, [wTrainerGroupBank]
call GetFarByte
add a, l
ld l, a
jr nc, .skip_trainer
inc h
jr .skip_trainer
.got_trainer
inc hl
.skip_name
call GetNextTrainerDataByte
cp "@"
jr nz, .skip_name
call GetNextTrainerDataByte
ld [wOtherTrainerType], a
ld d, h
ld e, l
call ReadTrainerPartyPieces
.done
jp ComputeTrainerReward
.cal2
ld a, BANK(sMysteryGiftTrainer)
call OpenSRAM
ld a, TRAINERTYPE_MOVES
ld [wOtherTrainerType], a
ld de, sMysteryGiftTrainer
call ReadTrainerPartyPieces
call CloseSRAM
jr .done
ReadTrainerPartyPieces:
ld h, d
ld l, e
.loop
call GetNextTrainerDataByte
cp $ff
ret z
ld [wCurPartyLevel], a
call GetNextTrainerDataByte
push hl
push af
call GetNextTrainerDataByte
ld h, a
pop af
ld l, a
call GetPokemonIDFromIndex
ld [wCurPartySpecies], a
ld a, OTPARTYMON
ld [wMonType], a
predef TryAddMonToParty
pop hl
inc hl ;because hl was pushed before the last call to GetNextTrainerDataByte
ld a, [wOtherTrainerType]
and TRAINERTYPE_ITEM
jr z, .no_item
push hl
ld a, [wOTPartyCount]
dec a
ld hl, wOTPartyMon1Item
call GetPartyLocation
ld d, h
ld e, l
pop hl
call GetNextTrainerDataByte
ld [de], a
.no_item
ld a, [wOtherTrainerType]
rra ; TRAINERTYPE_MOVES_F == 0
jr nc, .no_moves
push hl
ld a, [wOTPartyCount]
dec a
ld hl, wOTPartyMon1Moves
call GetPartyLocation
ld d, h
ld e, l
pop hl
ld b, NUM_MOVES
.copy_moves
call GetNextTrainerDataByte
push hl
push af
call GetNextTrainerDataByte
ld h, a
pop af
ld l, a
call GetMoveIDFromIndex
pop hl
inc hl
ld [de], a
inc de
dec b
jr nz, .copy_moves
push hl
ld a, [wOTPartyCount]
dec a
ld hl, wOTPartyMon1
call GetPartyLocation
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
ld l, a
ld a, MOVE_PP
call GetMoveAttribute
pop hl
ld [de], a
inc de
dec b
jr nz, .copy_pp
.copied_pp
pop hl
.no_moves
jp .loop
ComputeTrainerReward:
ld hl, hProduct
xor a
ld [hli], a
ld [hli], a ; hMultiplicand + 0
ld [hli], a ; hMultiplicand + 1
ld a, [wEnemyTrainerBaseReward]
ld [hli], a ; hMultiplicand + 2
ld a, [wCurPartyLevel]
ld [hl], a ; hMultiplier
call Multiply
ld hl, wBattleReward
xor a
ld [hli], a
ldh a, [hProduct + 2]
ld [hli], a
ldh a, [hProduct + 3]
ld [hl], a
ret
Battle_GetTrainerName::
ld a, [wInBattleTowerBattle]
bit 0, a
ld hl, wOTPlayerName
ld a, BANK(@)
ld [wTrainerGroupBank], a
jp nz, CopyTrainerName
ld a, [wOtherTrainerID]
ld b, a
ld a, [wOtherTrainerClass]
ld c, a
; fallthrough
GetTrainerName::
ld a, c
cp CAL
jr nz, .not_cal2
ld a, BANK(sMysteryGiftTrainerHouseFlag)
call OpenSRAM
ld a, [sMysteryGiftTrainerHouseFlag]
and a
call CloseSRAM
jr z, .not_cal2
ld a, BANK(sMysteryGiftPartnerName)
call OpenSRAM
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
add hl, bc
ld a, [hli]
ld [wTrainerGroupBank], a
ld a, [hli]
ld h, [hl]
ld l, a
pop bc
.loop
dec b
jr z, .done
ld a, [wTrainerGroupBank]
call GetFarByte
add a, l
ld l, a
jr nc, .loop
inc h
jr .loop
.done
inc hl
; fallthrough
CopyTrainerName:
ld de, wStringBuffer1
push de
ld bc, NAME_LENGTH
ld a, [wTrainerGroupBank]
call FarCopyBytes
pop de
ret
IncompleteCopyNameFunction: ; unreferenced
; Copy of CopyTrainerName but without "call CopyBytes"
ld de, wStringBuffer1
push de
ld bc, NAME_LENGTH
pop de
ret
GetNextTrainerDataByte:
ld a, [wTrainerGroupBank]
call GetFarByte
inc hl
ret
INCLUDE "data/trainers/party_pointers.asm"