mirror of
https://github.com/thornAvery/jep-hack.git
synced 2026-02-06 16:15:24 +13:00
First Commit
Upload literally everything from the pokecrystal16 expand-move-ID branch
This commit is contained in:
commit
2f8a41f833
4618 changed files with 480386 additions and 0 deletions
251
engine/events/battle_tower/load_trainer.asm
Normal file
251
engine/events/battle_tower/load_trainer.asm
Normal file
|
|
@ -0,0 +1,251 @@
|
|||
LoadOpponentTrainerAndPokemon:
|
||||
ldh a, [rSVBK]
|
||||
push af
|
||||
ld a, BANK(wBT_OTTrainer)
|
||||
ldh [rSVBK], a
|
||||
|
||||
; Fill wBT_OTTrainer with zeros
|
||||
xor a
|
||||
ld hl, wBT_OTTrainer
|
||||
ld bc, BATTLE_TOWER_STRUCT_LENGTH
|
||||
call ByteFill
|
||||
|
||||
; Write $ff into the Item-Slots
|
||||
ld a, $ff
|
||||
ld [wBT_OTMon1Item], a
|
||||
ld [wBT_OTMon2Item], a
|
||||
ld [wBT_OTMon3Item], a
|
||||
|
||||
; Set wBT_OTTrainer as start address to write the following data to
|
||||
ld de, wBT_OTTrainer
|
||||
|
||||
ldh a, [hRandomAdd]
|
||||
ld b, a
|
||||
.resample ; loop to find a random trainer
|
||||
call Random
|
||||
ldh a, [hRandomAdd]
|
||||
add b
|
||||
ld b, a ; b contains the nr of the trainer
|
||||
maskbits BATTLETOWER_NUM_UNIQUE_TRAINERS
|
||||
cp BATTLETOWER_NUM_UNIQUE_TRAINERS
|
||||
jr nc, .resample
|
||||
ld b, a
|
||||
|
||||
ld a, BANK(sBTTrainers)
|
||||
call OpenSRAM
|
||||
|
||||
ld c, BATTLETOWER_STREAK_LENGTH
|
||||
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 LoadRandomBattleTowerMon
|
||||
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
|
||||
ldh [rSVBK], a
|
||||
|
||||
ret
|
||||
|
||||
LoadRandomBattleTowerMon:
|
||||
ld c, BATTLETOWER_PARTY_LENGTH
|
||||
.loop
|
||||
push bc
|
||||
ld a, BANK(sBTMonOfTrainers)
|
||||
call OpenSRAM
|
||||
|
||||
.FindARandomBattleTowerMon:
|
||||
; a = 1, 2, ..., 10 indicating level 10, 20, ..., 100 opponents
|
||||
ld a, [wBTChoiceOfLvlGroup]
|
||||
dec a
|
||||
ld hl, BattleTowerMons
|
||||
ld bc, BATTLETOWER_NUM_UNIQUE_MON * (NICKNAMED_MON_STRUCT_LENGTH + 5)
|
||||
call AddNTimes
|
||||
|
||||
ldh a, [hRandomAdd]
|
||||
ld b, a
|
||||
.resample
|
||||
call Random
|
||||
ldh a, [hRandomAdd]
|
||||
add b
|
||||
ld b, a
|
||||
maskbits BATTLETOWER_NUM_UNIQUE_MON
|
||||
cp BATTLETOWER_NUM_UNIQUE_MON
|
||||
jr nc, .resample
|
||||
ld bc, NICKNAMED_MON_STRUCT_LENGTH + 5
|
||||
call AddNTimes
|
||||
|
||||
; hl = pointer to the mon that will be loaded (1 byte species, 1 byte item, 2 -> 1 byte each move, NICKNAMED_MON_STRUCT_LENGTH - 6 bytes data)
|
||||
ld a, [hli]
|
||||
ld c, a
|
||||
ld a, [hli]
|
||||
ld b, a
|
||||
push hl
|
||||
push de
|
||||
; check if it matches any of the previous two trainers' chosen Pokémon (six Pokémon in total)
|
||||
ld e, 6
|
||||
ld hl, sBTMonPrevTrainer1
|
||||
.check_previous_mons_loop
|
||||
ld a, [hli]
|
||||
cp c
|
||||
ld a, [hli]
|
||||
jr nz, .check_previous_mons_next
|
||||
cp b
|
||||
jr z, .pop_and_retry
|
||||
.check_previous_mons_next
|
||||
dec e
|
||||
jr nz, .check_previous_mons_loop
|
||||
ld h, b
|
||||
ld l, c
|
||||
call GetPokemonIDFromIndex
|
||||
ld hl, wTempSpecies
|
||||
ld [hl], a
|
||||
; check if it matches any of the current trainer's first two Pokémon (no need to check for the last one)
|
||||
ld a, [wBT_OTMon1]
|
||||
cp [hl]
|
||||
jr z, .pop_and_retry
|
||||
ld a, [wBT_OTMon2]
|
||||
.pop_and_retry
|
||||
pop de
|
||||
pop hl
|
||||
jr z, .FindARandomBattleTowerMon
|
||||
|
||||
; check if the held item matches any of the current trainer's first two Pokémon's held items
|
||||
ld a, [wBT_OTMon1Item]
|
||||
cp [hl]
|
||||
jr z, .FindARandomBattleTowerMon
|
||||
ld a, [wBT_OTMon2Item]
|
||||
cp [hl]
|
||||
jr z, .FindARandomBattleTowerMon
|
||||
|
||||
; reserve and load the converted species from wTempSpecies, manually load item and moves, and copy everything else
|
||||
push hl
|
||||
ld l, LOCKED_MON_ID_BATTLE_TOWER_1
|
||||
; LOCKED_MOVE_ID_BATTLE_TOWER_MON1_MOVE1 rotated right 2
|
||||
ld c, (LOCKED_MOVE_ID_BATTLE_TOWER_MON1_MOVE1 >> 2) | ((LOCKED_MOVE_ID_BATTLE_TOWER_MON1_MOVE1 & 3) << 6)
|
||||
ld a, e
|
||||
; assume that NICKNAMED_MON_STRUCT_LENGTH is not a multiple of $80 (it's actually far less than $80)
|
||||
cp LOW(wBT_OTMon1)
|
||||
jr z, .got_index
|
||||
inc l
|
||||
inc c
|
||||
cp LOW(wBT_OTMon2)
|
||||
jr z, .got_index
|
||||
inc l
|
||||
inc c
|
||||
.got_index
|
||||
ld a, [wTempSpecies]
|
||||
ld [de], a
|
||||
inc de
|
||||
call LockPokemonID
|
||||
pop hl
|
||||
; item
|
||||
ld a, [hli]
|
||||
ld [de], a
|
||||
inc de
|
||||
; moves
|
||||
ld b, NUM_MOVES
|
||||
rlc c
|
||||
rlc c
|
||||
.move_loop
|
||||
ld a, [hli]
|
||||
push hl
|
||||
ld h, [hl]
|
||||
ld l, a
|
||||
call GetMoveIDFromIndex
|
||||
ld [de], a
|
||||
inc de
|
||||
ld l, c
|
||||
call LockMoveID
|
||||
inc c
|
||||
pop hl
|
||||
inc hl
|
||||
dec b
|
||||
jr nz, .move_loop
|
||||
ld c, NICKNAMED_MON_STRUCT_LENGTH - 6
|
||||
call CopyBytes
|
||||
|
||||
; rename the Pokémon to its default name (overriding the transliterated Japanese nicknames)
|
||||
push de
|
||||
ld hl, -MON_NAME_LENGTH
|
||||
add hl, de
|
||||
push hl
|
||||
; wNamedObjectIndexBuffer = wTempSpecies
|
||||
call GetPokemonName
|
||||
ld h, d
|
||||
ld l, e
|
||||
pop de
|
||||
ld bc, MON_NAME_LENGTH
|
||||
call CopyBytes
|
||||
pop de
|
||||
|
||||
pop bc
|
||||
dec c
|
||||
jp nz, .loop
|
||||
|
||||
push de
|
||||
ld hl, sBTMonPrevTrainer1
|
||||
ld de, sBTMonPrevPrevTrainer1
|
||||
ld bc, 6
|
||||
push hl
|
||||
call CopyBytes
|
||||
pop de
|
||||
ld a, [wBT_OTMon1]
|
||||
call .store_index
|
||||
ld a, [wBT_OTMon2]
|
||||
call .store_index
|
||||
ld a, [wBT_OTMon3]
|
||||
call .store_index
|
||||
pop de
|
||||
jp CloseSRAM
|
||||
|
||||
.store_index
|
||||
call GetPokemonIndexFromID
|
||||
ld a, l
|
||||
ld [de], a
|
||||
inc de
|
||||
ld a, h
|
||||
ld [de], a
|
||||
inc de
|
||||
ret
|
||||
|
||||
INCLUDE "data/battle_tower/classes.asm"
|
||||
|
||||
INCLUDE "data/battle_tower/parties.asm"
|
||||
Loading…
Add table
Add a link
Reference in a new issue