mirror of
https://gitlab.com/xCrystal/pokecrystal-board.git
synced 2024-11-16 11:27:33 -08:00
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"
|