ReadTrainerParty: ; 39771 ld a, [InBattleTowerBattle] bit 0, a ret nz ld a, [wLinkMode] and a ret nz ld hl, OTPartyCount xor a ld [hli], a dec a ld [hl], a ld hl, OTPartyMons ld bc, OTPartyMonsEnd - OTPartyMons xor a call ByteFill ld a, [OtherTrainerClass] cp CAL jr nz, .not_cal2 ld a, [OtherTrainerID] cp CAL2 jr z, .cal2 ld a, [OtherTrainerClass] .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, [OtherTrainerID] 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 [CurPartyLevel], a ld a, [hli] ld [CurPartySpecies], a ld a, OTPARTYMON ld [MonType], 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 [CurPartyLevel], a ld a, [hli] ld [CurPartySpecies], a ld a, OTPARTYMON ld [MonType], a push hl predef TryAddMonToParty ld a, [OTPartyCount] dec a ld hl, OTPartyMon1Moves 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, [OTPartyCount] dec a ld hl, OTPartyMon1Species 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 [CurPartyLevel], a ld a, [hli] ld [CurPartySpecies], a ld a, OTPARTYMON ld [MonType], a push hl predef TryAddMonToParty ld a, [OTPartyCount] dec a ld hl, OTPartyMon1Item 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 [CurPartyLevel], a ld a, [hli] ld [CurPartySpecies], a ld a, OTPARTYMON ld [MonType], a push hl predef TryAddMonToParty ld a, [OTPartyCount] dec a ld hl, OTPartyMon1Item 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, [OTPartyCount] dec a ld hl, OTPartyMon1Moves 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, [OTPartyCount] dec a ld hl, OTPartyMon1 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, [CurPartyLevel] 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, [InBattleTowerBattle] bit 0, a ld hl, OTPlayerName jp nz, CopyTrainerName ld a, [OtherTrainerID] ld b, a ld a, [OtherTrainerClass] 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, StringBuffer1 push de ld bc, NAME_LENGTH call CopyBytes pop de ret ; 39990 Function39990: ; 39990 ; This function is useless. ld de, StringBuffer1 push de ld bc, NAME_LENGTH pop de ret ; 39999