diff options
author | entrpntr <entrpntr@gmail.com> | 2020-04-08 09:09:04 -0400 |
---|---|---|
committer | entrpntr <entrpntr@gmail.com> | 2020-04-08 09:09:04 -0400 |
commit | 1413f4ee55e7a2b434c6bc047ac6f8f9ae96bb79 (patch) | |
tree | eacd77a2adedc0858164c8c845349d2d9660c4bc /engine | |
parent | 8df3c3f15b443d48a7bbbaa5512da3088d954117 (diff) |
Add engine/battle/read_trainer_[attributes|party].asm.
Diffstat (limited to 'engine')
-rw-r--r-- | engine/battle/read_trainer_attributes.asm | 66 | ||||
-rw-r--r-- | engine/battle/read_trainer_party.asm | 374 | ||||
-rw-r--r-- | engine/menus/intro_menu.asm | 4 | ||||
-rwxr-xr-x | engine/pokemon/move_mon.asm | 2 |
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 |