summaryrefslogtreecommitdiff
path: root/engine
diff options
context:
space:
mode:
authorentrpntr <entrpntr@gmail.com>2020-04-08 09:09:04 -0400
committerentrpntr <entrpntr@gmail.com>2020-04-08 09:09:04 -0400
commit1413f4ee55e7a2b434c6bc047ac6f8f9ae96bb79 (patch)
treeeacd77a2adedc0858164c8c845349d2d9660c4bc /engine
parent8df3c3f15b443d48a7bbbaa5512da3088d954117 (diff)
Add engine/battle/read_trainer_[attributes|party].asm.
Diffstat (limited to 'engine')
-rw-r--r--engine/battle/read_trainer_attributes.asm66
-rw-r--r--engine/battle/read_trainer_party.asm374
-rw-r--r--engine/menus/intro_menu.asm4
-rwxr-xr-xengine/pokemon/move_mon.asm2
4 files changed, 443 insertions, 3 deletions
diff --git a/engine/battle/read_trainer_attributes.asm b/engine/battle/read_trainer_attributes.asm
new file mode 100644
index 00000000..3f4d4a98
--- /dev/null
+++ b/engine/battle/read_trainer_attributes.asm
@@ -0,0 +1,66 @@
+GetTrainerClassName:
+ ld hl, wRivalName
+ ld a, c
+ cp RIVAL1
+ jr z, .rival
+
+ ld [wCurSpecies], a
+ ld a, TRAINER_NAME
+ ld [wNamedObjectTypeBuffer], a
+ call GetName
+ ld de, wStringBuffer1
+ ret
+
+.rival
+ ld de, wStringBuffer1
+ push de
+ ld bc, TRAINER_CLASS_NAME_LENGTH
+ call CopyBytes
+ pop de
+ ret
+
+GetOTName:
+ ld hl, wOTPlayerName
+ ld a, [wLinkMode]
+ and a
+ jr nz, .ok
+
+ ld hl, wRivalName
+ ld a, c
+ cp RIVAL1
+ jr z, .ok
+
+ ld [wCurSpecies], a
+ ld a, TRAINER_NAME
+ ld [wNamedObjectTypeBuffer], a
+ call GetName
+ ld hl, wStringBuffer1
+
+.ok
+ ld bc, TRAINER_CLASS_NAME_LENGTH
+ ld de, wOTClassName
+ push de
+ call CopyBytes
+ pop de
+ ret
+
+GetTrainerAttributes:
+ ld a, [wTrainerClass]
+ ld c, a
+ call GetOTName
+ ld a, [wTrainerClass]
+ dec a
+ ld hl, TrainerClassAttributes + TRNATTR_ITEM1
+ ld bc, NUM_TRAINER_ATTRIBUTES
+ call AddNTimes
+ ld de, wEnemyTrainerItem1
+ ld a, [hli]
+ ld [de], a
+ inc de
+ ld a, [hli]
+ ld [de], a
+ ld a, [hl]
+ ld [wEnemyTrainerBaseReward], a
+ ret
+
+INCLUDE "data/trainers/attributes.asm"
diff --git a/engine/battle/read_trainer_party.asm b/engine/battle/read_trainer_party.asm
new file mode 100644
index 00000000..18e23f13
--- /dev/null
+++ b/engine/battle/read_trainer_party.asm
@@ -0,0 +1,374 @@
+ReadTrainerParty:
+ 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 OpenSRAM
+ ld de, sMysteryGiftTrainer
+ call TrainerType2
+ call CloseSRAM
+ jr .done
+
+TrainerTypes:
+; 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
+
+TrainerType1:
+; 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
+
+TrainerType2:
+; 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
+
+TrainerType3:
+; 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
+
+TrainerType4:
+; 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
+
+ComputeTrainerReward:
+ ld hl, hProduct
+ xor a
+ ld [hli], a
+ ld [hli], a ; hMultiplicand + 0
+ ld [hli], a ; hMultiplicand + 1
+ ld a, [wEnemyTrainerBaseReward]
+ ld [hli], a ; hMultiplicand + 2
+ ld a, [wCurPartyLevel]
+ ld [hl], a ; hMultiplier
+ call Multiply
+ ld hl, wBattleReward
+ xor a
+ ld [hli], a
+ ldh a, [hProduct + 2]
+ ld [hli], a
+ ldh a, [hProduct + 3]
+ ld [hl], a
+ ret
+
+Battle_GetTrainerName::
+ ld a, [wOtherTrainerID]
+ ld b, a
+ ld a, [wOtherTrainerClass]
+ ld c, a
+
+GetTrainerName::
+ ld a, c
+ cp CAL
+ jr nz, .not_cal2
+
+ ld a, BANK(sMysteryGiftTrainerHouseFlag)
+ call OpenSRAM
+ ld a, [sMysteryGiftTrainerHouseFlag]
+ and a
+ call CloseSRAM
+ jr z, .not_cal2
+
+ ld a, BANK(sMysteryGiftPartnerName)
+ call OpenSRAM
+ 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:
+ ld de, wStringBuffer1
+ push de
+ ld bc, NAME_LENGTH
+ call CopyBytes
+ pop de
+ ret
+
+INCLUDE "data/trainers/parties.asm"
diff --git a/engine/menus/intro_menu.asm b/engine/menus/intro_menu.asm
index b9d0d316..41b93708 100644
--- a/engine/menus/intro_menu.asm
+++ b/engine/menus/intro_menu.asm
@@ -324,9 +324,9 @@ Function5c41: ; 5c41 (1:5c41)
ld [wRoamMon2MapNumber], a
ld [wRoamMon3MapNumber], a
- ld a, BANK(s0_abe2)
+ ld a, BANK(sMysteryGiftItem)
call OpenSRAM
- ld hl, s0_abe2
+ ld hl, sMysteryGiftItem
xor a
ld [hli], a
dec a
diff --git a/engine/pokemon/move_mon.asm b/engine/pokemon/move_mon.asm
index f60f3a1a..26b0f0b9 100755
--- a/engine/pokemon/move_mon.asm
+++ b/engine/pokemon/move_mon.asm
@@ -375,7 +375,7 @@ AddTempmonToParty: ; da9c (3:5a9c)
call SkipNames
ld d, h
ld e, l
- ld hl, wOTPartyMon1Nickname
+ ld hl, wOTPartyMonNicknames
ld a, [wCurPartyMon]
call SkipNames
ld bc, NAME_LENGTH