mirror of
https://gitlab.com/xCrystal/pokecrystal-board.git
synced 2024-11-16 11:27:33 -08:00
31cce83e9b
(This is not expected to be their final location, but it makes them easier to relocate when necessary, and easier for users to edit until the whole project's file structure is finalized.)
211 lines
4.0 KiB
NASM
211 lines
4.0 KiB
NASM
Function_LoadOpponentTrainerAndPokemons: ; 1f8000
|
|
ld a, [rSVBK]
|
|
push af
|
|
ld a, BANK(BT_OTTrainer)
|
|
ld [rSVBK], a
|
|
|
|
; Fill BT_OTTrainer with zeros
|
|
xor a
|
|
ld hl, BT_OTTrainer
|
|
ld bc, BT_OTTrainerEnd - BT_OTTrainer
|
|
call ByteFill
|
|
|
|
; Write $ff into the Item-Slots
|
|
ld a, $ff
|
|
ld [BT_OTPkmn1Item], a
|
|
ld [BT_OTPkmn2Item], a
|
|
ld [BT_OTPkmn3Item], a
|
|
|
|
; Set BT_OTTrainer as start address to write the following data to
|
|
ld de, BT_OTTrainer
|
|
|
|
ld a, [hRandomAdd]
|
|
ld b, a
|
|
.resample ; loop to find a random trainer
|
|
call Random
|
|
ld a, [hRandomAdd]
|
|
add b
|
|
ld b, a ; b contains the nr of the trainer
|
|
IF DEF(CRYSTAL11)
|
|
and (1 << 7) - 1
|
|
cp 70
|
|
ELSE
|
|
and (1 << 5) - 1
|
|
cp 21
|
|
ENDC
|
|
jr nc, .resample
|
|
ld b, a
|
|
|
|
ld a, BANK(sBTTrainers)
|
|
call GetSRAMBank
|
|
|
|
ld c, BATTLETOWER_NROFTRAINERS
|
|
ld hl, sBTTrainers
|
|
.next_trainer
|
|
ld a, [hli]
|
|
cp b
|
|
jr z, .resample
|
|
dec c
|
|
jr nz, .next_trainer ; c <= 7 initialise all 7 trainers?
|
|
|
|
ld hl, sBTTrainers
|
|
ld a, [sNrOfBeatenBattleTowerTrainers]
|
|
ld c, a
|
|
ld a, b
|
|
ld b, 0
|
|
add hl, bc
|
|
ld [hl], a
|
|
|
|
call CloseSRAM
|
|
|
|
push af
|
|
; Copy name (10 bytes) and class (1 byte) of trainer
|
|
ld hl, BattleTowerTrainers
|
|
ld bc, NAME_LENGTH
|
|
call AddNTimes
|
|
ld bc, NAME_LENGTH
|
|
call CopyBytes
|
|
|
|
call Function_LoadRandomBattleTowerPkmn
|
|
pop af
|
|
|
|
ld hl, BattleTowerTrainerData
|
|
ld bc, BATTLETOWER_TRAINERDATALENGTH
|
|
call AddNTimes
|
|
ld bc, BATTLETOWER_TRAINERDATALENGTH
|
|
.copy_bt_trainer_data_loop
|
|
ld a, BANK(BattleTowerTrainerData)
|
|
call GetFarByte
|
|
ld [de], a
|
|
inc hl
|
|
inc de
|
|
dec bc
|
|
ld a, b
|
|
or c
|
|
jr nz, .copy_bt_trainer_data_loop
|
|
|
|
pop af
|
|
ld [rSVBK], a
|
|
|
|
ret
|
|
|
|
|
|
Function_LoadRandomBattleTowerPkmn: ; 1f8081
|
|
ld c, BATTLETOWER_NROFPKMNS
|
|
.loop
|
|
push bc
|
|
ld a, BANK(sBTPkmnPrevTrainer1)
|
|
call GetSRAMBank
|
|
|
|
.FindARandomBattleTowerPkmn:
|
|
; From Which LevelGroup are the Pkmn loaded
|
|
; a = 1..10
|
|
ld a, [wBTChoiceOfLvlGroup] ; [$d800]
|
|
dec a
|
|
ld hl, BattleTowerMons
|
|
ld bc, BattleTowerMons2 - BattleTowerMons1
|
|
call AddNTimes
|
|
|
|
ld a, [hRandomAdd]
|
|
ld b, a
|
|
.resample
|
|
call Random
|
|
ld a, [hRandomAdd]
|
|
add b
|
|
ld b, a
|
|
and $1f
|
|
cp BATTLETOWER_NRMONSPERLEVELBRACKET
|
|
jr nc, .resample
|
|
; in register 'a' is the chosen Pkmn of the LevelGroup
|
|
|
|
; Check if Pkmn was already loaded before
|
|
; Check current and the 2 previous teams
|
|
; includes check if item is double at the current team
|
|
ld bc, PARTYMON_STRUCT_LENGTH + PKMN_NAME_LENGTH
|
|
call AddNTimes
|
|
ld a, [hli]
|
|
ld b, a
|
|
ld a, [hld]
|
|
ld c, a
|
|
ld a, [BT_OTPkmn1]
|
|
cp b
|
|
jr z, .FindARandomBattleTowerPkmn
|
|
ld a, [BT_OTPkmn1Item]
|
|
cp c
|
|
jr z, .FindARandomBattleTowerPkmn
|
|
ld a, [BT_OTPkmn2]
|
|
cp b
|
|
jr z, .FindARandomBattleTowerPkmn
|
|
ld a, [BT_OTPkmn2Item]
|
|
cp c
|
|
jr z, .FindARandomBattleTowerPkmn
|
|
ld a, [BT_OTPkmn3]
|
|
cp b
|
|
jr z, .FindARandomBattleTowerPkmn
|
|
ld a, [BT_OTPkmn3Item]
|
|
cp c
|
|
jr z, .FindARandomBattleTowerPkmn
|
|
ld a, [sBTPkmnPrevTrainer1]
|
|
cp b
|
|
jr z, .FindARandomBattleTowerPkmn
|
|
ld a, [sBTPkmnPrevTrainer2]
|
|
cp b
|
|
jr z, .FindARandomBattleTowerPkmn
|
|
ld a, [sBTPkmnPrevTrainer3]
|
|
cp b
|
|
jr z, .FindARandomBattleTowerPkmn
|
|
ld a, [sBTPkmnPrevPrevTrainer1]
|
|
cp b
|
|
jr z, .FindARandomBattleTowerPkmn
|
|
ld a, [sBTPkmnPrevPrevTrainer2]
|
|
cp b
|
|
jr z, .FindARandomBattleTowerPkmn
|
|
ld a, [sBTPkmnPrevPrevTrainer3]
|
|
cp b
|
|
jr z, .FindARandomBattleTowerPkmn
|
|
|
|
ld bc, PARTYMON_STRUCT_LENGTH + PKMN_NAME_LENGTH
|
|
call CopyBytes
|
|
|
|
ld a, [wNamedObjectIndexBuffer]
|
|
push af
|
|
push de
|
|
ld hl, - (PARTYMON_STRUCT_LENGTH + PKMN_NAME_LENGTH)
|
|
add hl, de
|
|
ld a, [hl]
|
|
ld [wNamedObjectIndexBuffer], a
|
|
ld bc, PARTYMON_STRUCT_LENGTH
|
|
add hl, bc
|
|
push hl
|
|
call GetPokemonName
|
|
ld h, d
|
|
ld l, e
|
|
pop de
|
|
ld bc, PKMN_NAME_LENGTH
|
|
call CopyBytes
|
|
|
|
pop de
|
|
pop af
|
|
ld [wNamedObjectIndexBuffer], a
|
|
pop bc
|
|
dec c
|
|
jp nz, .loop
|
|
|
|
ld a, [sBTPkmnPrevTrainer1]
|
|
ld [sBTPkmnPrevPrevTrainer1], a
|
|
ld a, [sBTPkmnPrevTrainer2]
|
|
ld [sBTPkmnPrevPrevTrainer2], a
|
|
ld a, [sBTPkmnPrevTrainer3]
|
|
ld [sBTPkmnPrevPrevTrainer3], a
|
|
ld a, [BT_OTPkmn1]
|
|
ld [sBTPkmnPrevTrainer1], a
|
|
ld a, [BT_OTPkmn2]
|
|
ld [sBTPkmnPrevTrainer2], a
|
|
ld a, [BT_OTPkmn3]
|
|
ld [sBTPkmnPrevTrainer3], a
|
|
call CloseSRAM
|
|
ret
|
|
; 1f814e
|
|
|
|
INCLUDE "data/battle_tower.asm"
|