pokecrystal-board/engine/battle/read_trainer_party.asm
mid-kid 81fff9bb80 Fix file permissions
I have no idea why this was a thing (do people store this repo on FAT32
flash drives or something?), but quite a bit of files had a permission
of 755. This isn't really a problem, but it's inconsistent and weird.
2018-04-01 17:05:10 +02:00

399 lines
5.1 KiB
NASM

ReadTrainerParty: ; 39771
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, wOTPartyMonsEnd - wOTPartyMons
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
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, [hli]
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
; 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
ld [wCurPartyLevel], a
ld a, [hli]
ld [wCurPartySpecies], a
ld a, OTPARTYMON
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
ld [wCurPartyLevel], a
ld a, [hli]
ld [wCurPartySpecies], a
ld a, OTPARTYMON
ld [wMonType], a
push hl
predef TryAddMonToParty
ld a, [wOTPartyCount]
dec a
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
ld a, [wOTPartyCount]
dec a
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
ld [wCurPartyLevel], a
ld a, [hli]
ld [wCurPartySpecies], a
ld a, OTPARTYMON
ld [wMonType], a
push hl
predef TryAddMonToParty
ld a, [wOTPartyCount]
dec a
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
ld [wCurPartyLevel], a
ld a, [hli]
ld [wCurPartySpecies], a
ld a, OTPARTYMON
ld [wMonType], a
push hl
predef TryAddMonToParty
ld a, [wOTPartyCount]
dec a
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
ld a, [wOTPartyCount]
dec a
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
ld a, [wOTPartyCount]
dec a
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
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
ld a, [wInBattleTowerBattle]
bit 0, a
ld hl, wOTPlayerName
jp nz, CopyTrainerName
ld a, [wOtherTrainerID]
ld b, a
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
ld de, wStringBuffer1
push de
ld bc, NAME_LENGTH
call CopyBytes
pop de
ret
; 39990
Function39990: ; 39990
; This function is useless.
ld de, wStringBuffer1
push de
ld bc, NAME_LENGTH
pop de
ret
; 39999