mirror of
https://github.com/thornAvery/kep-hack.git
synced 2025-09-17 02:40:50 +12:00
Further split bank e stuff
This commit is contained in:
parent
10211cc461
commit
ce9940a2eb
122
engine/battle/bank_e_misc.asm
Normal file
122
engine/battle/bank_e_misc.asm
Normal file
|
@ -0,0 +1,122 @@
|
||||||
|
; formats a string at wMovesString that lists the moves at wMoves
|
||||||
|
FormatMovesString: ; 39b87 (e:5b87)
|
||||||
|
ld hl, wMoves
|
||||||
|
ld de, wMovesString
|
||||||
|
ld b, $0
|
||||||
|
.printMoveNameLoop
|
||||||
|
ld a, [hli]
|
||||||
|
and a ; end of move list?
|
||||||
|
jr z, .printDashLoop ; print dashes when no moves are left
|
||||||
|
push hl
|
||||||
|
ld [wd0b5], a
|
||||||
|
ld a, BANK(MoveNames)
|
||||||
|
ld [wPredefBank], a
|
||||||
|
ld a, MOVE_NAME
|
||||||
|
ld [wNameListType], a
|
||||||
|
call GetName
|
||||||
|
ld hl, wcd6d
|
||||||
|
.copyNameLoop
|
||||||
|
ld a, [hli]
|
||||||
|
cp $50
|
||||||
|
jr z, .doneCopyingName
|
||||||
|
ld [de], a
|
||||||
|
inc de
|
||||||
|
jr .copyNameLoop
|
||||||
|
.doneCopyingName
|
||||||
|
ld a, b
|
||||||
|
ld [wcd6c], a
|
||||||
|
inc b
|
||||||
|
ld a, $4e ; line break
|
||||||
|
ld [de], a
|
||||||
|
inc de
|
||||||
|
pop hl
|
||||||
|
ld a, b
|
||||||
|
cp NUM_MOVES
|
||||||
|
jr z, .done
|
||||||
|
jr .printMoveNameLoop
|
||||||
|
.printDashLoop
|
||||||
|
ld a, "-"
|
||||||
|
ld [de], a
|
||||||
|
inc de
|
||||||
|
inc b
|
||||||
|
ld a, b
|
||||||
|
cp NUM_MOVES
|
||||||
|
jr z, .done
|
||||||
|
ld a, $4e ; line break
|
||||||
|
ld [de], a
|
||||||
|
inc de
|
||||||
|
jr .printDashLoop
|
||||||
|
.done
|
||||||
|
ld a, "@"
|
||||||
|
ld [de], a
|
||||||
|
ret
|
||||||
|
|
||||||
|
; XXX this is called in a few places, but it doesn't appear to do anything useful
|
||||||
|
Func_39bd5: ; 39bd5 (e:5bd5)
|
||||||
|
ld a, [wd11b]
|
||||||
|
cp $1
|
||||||
|
jr nz, .asm_39be6
|
||||||
|
ld hl, wEnemyPartyCount
|
||||||
|
ld de, wEnemyMonOT
|
||||||
|
ld a, ENEMYOT_NAME
|
||||||
|
jr .asm_39c18
|
||||||
|
.asm_39be6
|
||||||
|
cp $4
|
||||||
|
jr nz, .calcAttackStat4
|
||||||
|
ld hl, wPartyCount
|
||||||
|
ld de, wPartyMonOT
|
||||||
|
ld a, PLAYEROT_NAME
|
||||||
|
jr .asm_39c18
|
||||||
|
.calcAttackStat4
|
||||||
|
cp $5
|
||||||
|
jr nz, .asm_39c02
|
||||||
|
ld hl, wStringBuffer2 + 11
|
||||||
|
ld de, MonsterNames
|
||||||
|
ld a, MONSTER_NAME
|
||||||
|
jr .asm_39c18
|
||||||
|
.asm_39c02
|
||||||
|
cp $2
|
||||||
|
jr nz, .asm_39c10
|
||||||
|
ld hl, wNumBagItems
|
||||||
|
ld de, ItemNames
|
||||||
|
ld a, ITEM_NAME
|
||||||
|
jr .asm_39c18
|
||||||
|
.asm_39c10
|
||||||
|
ld hl, wStringBuffer2 + 11
|
||||||
|
ld de, ItemNames
|
||||||
|
ld a, ITEM_NAME
|
||||||
|
.asm_39c18
|
||||||
|
ld [wNameListType], a
|
||||||
|
ld a, l
|
||||||
|
ld [wList], a
|
||||||
|
ld a, h
|
||||||
|
ld [wList + 1], a
|
||||||
|
ld a, e
|
||||||
|
ld [wcf8d], a
|
||||||
|
ld a, d
|
||||||
|
ld [wcf8e], a
|
||||||
|
ld bc, ItemPrices
|
||||||
|
ld a, c
|
||||||
|
ld [wItemPrices], a
|
||||||
|
ld a, b
|
||||||
|
ld [wItemPrices + 1], a
|
||||||
|
ret
|
||||||
|
|
||||||
|
; get species of mon e in list [wcc49] for LoadMonData
|
||||||
|
GetMonSpecies: ; 39c37 (e:5c37)
|
||||||
|
ld hl, wPartySpecies
|
||||||
|
ld a, [wcc49]
|
||||||
|
and a
|
||||||
|
jr z, .getSpecies
|
||||||
|
dec a
|
||||||
|
jr z, .enemyParty
|
||||||
|
ld hl, wBoxSpecies
|
||||||
|
jr .getSpecies
|
||||||
|
.enemyParty
|
||||||
|
ld hl, wEnemyPartyMons
|
||||||
|
.getSpecies
|
||||||
|
ld d, 0
|
||||||
|
add hl, de
|
||||||
|
ld a, [hl]
|
||||||
|
ld [wcf91], a
|
||||||
|
ret
|
164
engine/battle/read_trainer_party.asm
Normal file
164
engine/battle/read_trainer_party.asm
Normal file
|
@ -0,0 +1,164 @@
|
||||||
|
ReadTrainer: ; 39c53 (e:5c53)
|
||||||
|
|
||||||
|
; don't change any moves in a link battle
|
||||||
|
ld a,[wLinkState]
|
||||||
|
and a
|
||||||
|
ret nz
|
||||||
|
|
||||||
|
; set [wEnemyPartyCount] to 0, [wEnemyPartyMons] to FF
|
||||||
|
; XXX first is total enemy pokemon?
|
||||||
|
; XXX second is species of first pokemon?
|
||||||
|
ld hl,wEnemyPartyCount
|
||||||
|
xor a
|
||||||
|
ld [hli],a
|
||||||
|
dec a
|
||||||
|
ld [hl],a
|
||||||
|
|
||||||
|
; get the pointer to trainer data for this class
|
||||||
|
ld a,[W_CUROPPONENT]
|
||||||
|
sub $C9 ; convert value from pokemon to trainer
|
||||||
|
add a,a
|
||||||
|
ld hl,TrainerDataPointers
|
||||||
|
ld c,a
|
||||||
|
ld b,0
|
||||||
|
add hl,bc ; hl points to trainer class
|
||||||
|
ld a,[hli]
|
||||||
|
ld h,[hl]
|
||||||
|
ld l,a
|
||||||
|
ld a,[W_TRAINERNO]
|
||||||
|
ld b,a
|
||||||
|
; At this point b contains the trainer number,
|
||||||
|
; and hl points to the trainer class.
|
||||||
|
; Our next task is to iterate through the trainers,
|
||||||
|
; decrementing b each time, until we get to the right one.
|
||||||
|
.outer
|
||||||
|
dec b
|
||||||
|
jr z,.IterateTrainer
|
||||||
|
.inner
|
||||||
|
ld a,[hli]
|
||||||
|
and a
|
||||||
|
jr nz,.inner
|
||||||
|
jr .outer
|
||||||
|
|
||||||
|
; if the first byte of trainer data is FF,
|
||||||
|
; - each pokemon has a specific level
|
||||||
|
; (as opposed to the whole team being of the same level)
|
||||||
|
; - if [W_LONEATTACKNO] != 0, one pokemon on the team has a special move
|
||||||
|
; else the first byte is the level of every pokemon on the team
|
||||||
|
.IterateTrainer
|
||||||
|
ld a,[hli]
|
||||||
|
cp $FF ; is the trainer special?
|
||||||
|
jr z,.SpecialTrainer ; if so, check for special moves
|
||||||
|
ld [W_CURENEMYLVL],a
|
||||||
|
.LoopTrainerData
|
||||||
|
ld a,[hli]
|
||||||
|
and a ; have we reached the end of the trainer data?
|
||||||
|
jr z,.FinishUp
|
||||||
|
ld [wcf91],a ; write species somewhere (XXX why?)
|
||||||
|
ld a,1
|
||||||
|
ld [wcc49],a
|
||||||
|
push hl
|
||||||
|
call AddPartyMon
|
||||||
|
pop hl
|
||||||
|
jr .LoopTrainerData
|
||||||
|
.SpecialTrainer
|
||||||
|
; if this code is being run:
|
||||||
|
; - each pokemon has a specific level
|
||||||
|
; (as opposed to the whole team being of the same level)
|
||||||
|
; - if [W_LONEATTACKNO] != 0, one pokemon on the team has a special move
|
||||||
|
ld a,[hli]
|
||||||
|
and a ; have we reached the end of the trainer data?
|
||||||
|
jr z,.AddLoneMove
|
||||||
|
ld [W_CURENEMYLVL],a
|
||||||
|
ld a,[hli]
|
||||||
|
ld [wcf91],a
|
||||||
|
ld a,1
|
||||||
|
ld [wcc49],a
|
||||||
|
push hl
|
||||||
|
call AddPartyMon
|
||||||
|
pop hl
|
||||||
|
jr .SpecialTrainer
|
||||||
|
.AddLoneMove
|
||||||
|
; does the trainer have a single monster with a different move
|
||||||
|
ld a,[W_LONEATTACKNO] ; Brock is 01, Misty is 02, Erika is 04, etc
|
||||||
|
and a
|
||||||
|
jr z,.AddTeamMove
|
||||||
|
dec a
|
||||||
|
add a,a
|
||||||
|
ld c,a
|
||||||
|
ld b,0
|
||||||
|
ld hl,LoneMoves
|
||||||
|
add hl,bc
|
||||||
|
ld a,[hli]
|
||||||
|
ld d,[hl]
|
||||||
|
ld hl,wEnemyMon1Moves + 2
|
||||||
|
ld bc,wEnemyMon2 - wEnemyMon1
|
||||||
|
call AddNTimes
|
||||||
|
ld [hl],d
|
||||||
|
jr .FinishUp
|
||||||
|
.AddTeamMove
|
||||||
|
; check if our trainer's team has special moves
|
||||||
|
|
||||||
|
; get trainer class number
|
||||||
|
ld a,[W_CUROPPONENT]
|
||||||
|
sub $C8
|
||||||
|
ld b,a
|
||||||
|
ld hl,TeamMoves
|
||||||
|
|
||||||
|
; iterate through entries in TeamMoves, checking each for our trainer class
|
||||||
|
.IterateTeamMoves
|
||||||
|
ld a,[hli]
|
||||||
|
cp b
|
||||||
|
jr z,.GiveTeamMoves ; is there a match?
|
||||||
|
inc hl ; if not, go to the next entry
|
||||||
|
inc a
|
||||||
|
jr nz,.IterateTeamMoves
|
||||||
|
|
||||||
|
; no matches found. is this trainer champion rival?
|
||||||
|
ld a,b
|
||||||
|
cp SONY3
|
||||||
|
jr z,.ChampionRival
|
||||||
|
jr .FinishUp ; nope
|
||||||
|
.GiveTeamMoves
|
||||||
|
ld a,[hl]
|
||||||
|
ld [wEnemyMon5Moves + 2],a
|
||||||
|
jr .FinishUp
|
||||||
|
.ChampionRival ; give moves to his team
|
||||||
|
|
||||||
|
; pidgeot
|
||||||
|
ld a,SKY_ATTACK
|
||||||
|
ld [wEnemyMon1Moves + 2],a
|
||||||
|
|
||||||
|
; starter
|
||||||
|
ld a,[W_RIVALSTARTER]
|
||||||
|
cp STARTER3
|
||||||
|
ld b,MEGA_DRAIN
|
||||||
|
jr z,.GiveStarterMove
|
||||||
|
cp STARTER1
|
||||||
|
ld b,FIRE_BLAST
|
||||||
|
jr z,.GiveStarterMove
|
||||||
|
ld b,BLIZZARD ; must be squirtle
|
||||||
|
.GiveStarterMove
|
||||||
|
ld a,b
|
||||||
|
ld [wEnemyMon6Moves + 2],a
|
||||||
|
.FinishUp ; XXX this needs documenting
|
||||||
|
xor a ; clear D079-D07B
|
||||||
|
ld de,wd079
|
||||||
|
ld [de],a
|
||||||
|
inc de
|
||||||
|
ld [de],a
|
||||||
|
inc de
|
||||||
|
ld [de],a
|
||||||
|
ld a,[W_CURENEMYLVL]
|
||||||
|
ld b,a
|
||||||
|
.LastLoop
|
||||||
|
ld hl,wd047
|
||||||
|
ld c,2
|
||||||
|
push bc
|
||||||
|
predef AddBCDPredef
|
||||||
|
pop bc
|
||||||
|
inc de
|
||||||
|
inc de
|
||||||
|
dec b
|
||||||
|
jr nz,.LastLoop
|
||||||
|
ret
|
|
@ -324,439 +324,13 @@ TrainerClassMoveChoiceModifications: ; 3989b (e:589b)
|
||||||
db 1,0 ; AGATHA
|
db 1,0 ; AGATHA
|
||||||
db 1,3,0 ; LANCE
|
db 1,3,0 ; LANCE
|
||||||
|
|
||||||
TrainerPicAndMoneyPointers: ; 39914 (e:5914)
|
INCLUDE "engine/battle/trainer_pic_money_pointers.asm"
|
||||||
; trainer pic pointers and base money.
|
|
||||||
; money received after battle = base money × level of highest-level enemy mon
|
|
||||||
dw YoungsterPic
|
|
||||||
money 1500
|
|
||||||
|
|
||||||
dw BugCatcherPic
|
|
||||||
money 1000
|
|
||||||
|
|
||||||
dw LassPic
|
|
||||||
money 1500
|
|
||||||
|
|
||||||
dw SailorPic
|
|
||||||
money 3000
|
|
||||||
|
|
||||||
dw JrTrainerMPic
|
|
||||||
money 2000
|
|
||||||
|
|
||||||
dw JrTrainerFPic
|
|
||||||
money 2000
|
|
||||||
|
|
||||||
dw PokemaniacPic
|
|
||||||
money 5000
|
|
||||||
|
|
||||||
dw SuperNerdPic
|
|
||||||
money 2500
|
|
||||||
|
|
||||||
dw HikerPic
|
|
||||||
money 3500
|
|
||||||
|
|
||||||
dw BikerPic
|
|
||||||
money 2000
|
|
||||||
|
|
||||||
dw BurglarPic
|
|
||||||
money 9000
|
|
||||||
|
|
||||||
dw EngineerPic
|
|
||||||
money 5000
|
|
||||||
|
|
||||||
dw JugglerPic
|
|
||||||
money 3500
|
|
||||||
|
|
||||||
dw FisherPic
|
|
||||||
money 3500
|
|
||||||
|
|
||||||
dw SwimmerPic
|
|
||||||
money 500
|
|
||||||
|
|
||||||
dw CueBallPic
|
|
||||||
money 2500
|
|
||||||
|
|
||||||
dw GamblerPic
|
|
||||||
money 7000
|
|
||||||
|
|
||||||
dw BeautyPic
|
|
||||||
money 7000
|
|
||||||
|
|
||||||
dw PsychicPic
|
|
||||||
money 1000
|
|
||||||
|
|
||||||
dw RockerPic
|
|
||||||
money 2500
|
|
||||||
|
|
||||||
dw JugglerPic
|
|
||||||
money 3500
|
|
||||||
|
|
||||||
dw TamerPic
|
|
||||||
money 4000
|
|
||||||
|
|
||||||
dw BirdKeeperPic
|
|
||||||
money 2500
|
|
||||||
|
|
||||||
dw BlackbeltPic
|
|
||||||
money 2500
|
|
||||||
|
|
||||||
dw Rival1Pic
|
|
||||||
money 3500
|
|
||||||
|
|
||||||
dw ProfOakPic
|
|
||||||
money 9900
|
|
||||||
|
|
||||||
dw ChiefPic
|
|
||||||
money 3000
|
|
||||||
|
|
||||||
dw ScientistPic
|
|
||||||
money 5000
|
|
||||||
|
|
||||||
dw GiovanniPic
|
|
||||||
money 9900
|
|
||||||
|
|
||||||
dw RocketPic
|
|
||||||
money 3000
|
|
||||||
|
|
||||||
dw CooltrainerMPic
|
|
||||||
money 3500
|
|
||||||
|
|
||||||
dw CooltrainerFPic
|
|
||||||
money 3500
|
|
||||||
|
|
||||||
dw BrunoPic
|
|
||||||
money 9900
|
|
||||||
|
|
||||||
dw BrockPic
|
|
||||||
money 9900
|
|
||||||
|
|
||||||
dw MistyPic
|
|
||||||
money 9900
|
|
||||||
|
|
||||||
dw LtSurgePic
|
|
||||||
money 9900
|
|
||||||
|
|
||||||
dw ErikaPic
|
|
||||||
money 9900
|
|
||||||
|
|
||||||
dw KogaPic
|
|
||||||
money 9900
|
|
||||||
|
|
||||||
dw BlainePic
|
|
||||||
money 9900
|
|
||||||
|
|
||||||
dw SabrinaPic
|
|
||||||
money 9900
|
|
||||||
|
|
||||||
dw GentlemanPic
|
|
||||||
money 7000
|
|
||||||
|
|
||||||
dw Rival2Pic
|
|
||||||
money 6500
|
|
||||||
|
|
||||||
dw Rival3Pic
|
|
||||||
money 9900
|
|
||||||
|
|
||||||
dw LoreleiPic
|
|
||||||
money 9900
|
|
||||||
|
|
||||||
dw ChannelerPic
|
|
||||||
money 3000
|
|
||||||
|
|
||||||
dw AgathaPic
|
|
||||||
money 9900
|
|
||||||
|
|
||||||
dw LancePic
|
|
||||||
money 9900
|
|
||||||
|
|
||||||
INCLUDE "text/trainer_names.asm"
|
INCLUDE "text/trainer_names.asm"
|
||||||
|
|
||||||
; formats a string at wMovesString that lists the moves at wMoves
|
INCLUDE "engine/battle/bank_e_misc.asm"
|
||||||
FormatMovesString: ; 39b87 (e:5b87)
|
|
||||||
ld hl, wMoves
|
|
||||||
ld de, wMovesString
|
|
||||||
ld b, $0
|
|
||||||
.printMoveNameLoop
|
|
||||||
ld a, [hli]
|
|
||||||
and a ; end of move list?
|
|
||||||
jr z, .printDashLoop ; print dashes when no moves are left
|
|
||||||
push hl
|
|
||||||
ld [wd0b5], a
|
|
||||||
ld a, BANK(MoveNames)
|
|
||||||
ld [wPredefBank], a
|
|
||||||
ld a, MOVE_NAME
|
|
||||||
ld [wNameListType], a
|
|
||||||
call GetName
|
|
||||||
ld hl, wcd6d
|
|
||||||
.copyNameLoop
|
|
||||||
ld a, [hli]
|
|
||||||
cp $50
|
|
||||||
jr z, .doneCopyingName
|
|
||||||
ld [de], a
|
|
||||||
inc de
|
|
||||||
jr .copyNameLoop
|
|
||||||
.doneCopyingName
|
|
||||||
ld a, b
|
|
||||||
ld [wcd6c], a
|
|
||||||
inc b
|
|
||||||
ld a, $4e ; line break
|
|
||||||
ld [de], a
|
|
||||||
inc de
|
|
||||||
pop hl
|
|
||||||
ld a, b
|
|
||||||
cp NUM_MOVES
|
|
||||||
jr z, .done
|
|
||||||
jr .printMoveNameLoop
|
|
||||||
.printDashLoop
|
|
||||||
ld a, "-"
|
|
||||||
ld [de], a
|
|
||||||
inc de
|
|
||||||
inc b
|
|
||||||
ld a, b
|
|
||||||
cp NUM_MOVES
|
|
||||||
jr z, .done
|
|
||||||
ld a, $4e ; line break
|
|
||||||
ld [de], a
|
|
||||||
inc de
|
|
||||||
jr .printDashLoop
|
|
||||||
.done
|
|
||||||
ld a, "@"
|
|
||||||
ld [de], a
|
|
||||||
ret
|
|
||||||
|
|
||||||
; XXX this is called in a few places, but it doesn't appear to do anything useful
|
INCLUDE "engine/battle/read_trainer_party.asm"
|
||||||
Func_39bd5: ; 39bd5 (e:5bd5)
|
|
||||||
ld a, [wd11b]
|
|
||||||
cp $1
|
|
||||||
jr nz, .asm_39be6
|
|
||||||
ld hl, wEnemyPartyCount
|
|
||||||
ld de, wEnemyMonOT
|
|
||||||
ld a, ENEMYOT_NAME
|
|
||||||
jr .asm_39c18
|
|
||||||
.asm_39be6
|
|
||||||
cp $4
|
|
||||||
jr nz, .calcAttackStat4
|
|
||||||
ld hl, wPartyCount
|
|
||||||
ld de, wPartyMonOT
|
|
||||||
ld a, PLAYEROT_NAME
|
|
||||||
jr .asm_39c18
|
|
||||||
.calcAttackStat4
|
|
||||||
cp $5
|
|
||||||
jr nz, .asm_39c02
|
|
||||||
ld hl, wStringBuffer2 + 11
|
|
||||||
ld de, MonsterNames
|
|
||||||
ld a, MONSTER_NAME
|
|
||||||
jr .asm_39c18
|
|
||||||
.asm_39c02
|
|
||||||
cp $2
|
|
||||||
jr nz, .asm_39c10
|
|
||||||
ld hl, wNumBagItems
|
|
||||||
ld de, ItemNames
|
|
||||||
ld a, ITEM_NAME
|
|
||||||
jr .asm_39c18
|
|
||||||
.asm_39c10
|
|
||||||
ld hl, wStringBuffer2 + 11
|
|
||||||
ld de, ItemNames
|
|
||||||
ld a, ITEM_NAME
|
|
||||||
.asm_39c18
|
|
||||||
ld [wNameListType], a
|
|
||||||
ld a, l
|
|
||||||
ld [wList], a
|
|
||||||
ld a, h
|
|
||||||
ld [wList + 1], a
|
|
||||||
ld a, e
|
|
||||||
ld [wcf8d], a
|
|
||||||
ld a, d
|
|
||||||
ld [wcf8e], a
|
|
||||||
ld bc, ItemPrices
|
|
||||||
ld a, c
|
|
||||||
ld [wItemPrices], a
|
|
||||||
ld a, b
|
|
||||||
ld [wItemPrices + 1], a
|
|
||||||
ret
|
|
||||||
|
|
||||||
; get species of mon e in list [wcc49] for LoadMonData
|
|
||||||
GetMonSpecies: ; 39c37 (e:5c37)
|
|
||||||
ld hl, wPartySpecies
|
|
||||||
ld a, [wcc49]
|
|
||||||
and a
|
|
||||||
jr z, .getSpecies
|
|
||||||
dec a
|
|
||||||
jr z, .enemyParty
|
|
||||||
ld hl, wBoxSpecies
|
|
||||||
jr .getSpecies
|
|
||||||
.enemyParty
|
|
||||||
ld hl, wEnemyPartyMons
|
|
||||||
.getSpecies
|
|
||||||
ld d, 0
|
|
||||||
add hl, de
|
|
||||||
ld a, [hl]
|
|
||||||
ld [wcf91], a
|
|
||||||
ret
|
|
||||||
|
|
||||||
ReadTrainer: ; 39c53 (e:5c53)
|
|
||||||
|
|
||||||
; don't change any moves in a link battle
|
|
||||||
ld a,[wLinkState]
|
|
||||||
and a
|
|
||||||
ret nz
|
|
||||||
|
|
||||||
; set [wEnemyPartyCount] to 0, [wEnemyPartyMons] to FF
|
|
||||||
; XXX first is total enemy pokemon?
|
|
||||||
; XXX second is species of first pokemon?
|
|
||||||
ld hl,wEnemyPartyCount
|
|
||||||
xor a
|
|
||||||
ld [hli],a
|
|
||||||
dec a
|
|
||||||
ld [hl],a
|
|
||||||
|
|
||||||
; get the pointer to trainer data for this class
|
|
||||||
ld a,[W_CUROPPONENT]
|
|
||||||
sub $C9 ; convert value from pokemon to trainer
|
|
||||||
add a,a
|
|
||||||
ld hl,TrainerDataPointers
|
|
||||||
ld c,a
|
|
||||||
ld b,0
|
|
||||||
add hl,bc ; hl points to trainer class
|
|
||||||
ld a,[hli]
|
|
||||||
ld h,[hl]
|
|
||||||
ld l,a
|
|
||||||
ld a,[W_TRAINERNO]
|
|
||||||
ld b,a
|
|
||||||
; At this point b contains the trainer number,
|
|
||||||
; and hl points to the trainer class.
|
|
||||||
; Our next task is to iterate through the trainers,
|
|
||||||
; decrementing b each time, until we get to the right one.
|
|
||||||
.outer
|
|
||||||
dec b
|
|
||||||
jr z,.IterateTrainer
|
|
||||||
.inner
|
|
||||||
ld a,[hli]
|
|
||||||
and a
|
|
||||||
jr nz,.inner
|
|
||||||
jr .outer
|
|
||||||
|
|
||||||
; if the first byte of trainer data is FF,
|
|
||||||
; - each pokemon has a specific level
|
|
||||||
; (as opposed to the whole team being of the same level)
|
|
||||||
; - if [W_LONEATTACKNO] != 0, one pokemon on the team has a special move
|
|
||||||
; else the first byte is the level of every pokemon on the team
|
|
||||||
.IterateTrainer
|
|
||||||
ld a,[hli]
|
|
||||||
cp $FF ; is the trainer special?
|
|
||||||
jr z,.SpecialTrainer ; if so, check for special moves
|
|
||||||
ld [W_CURENEMYLVL],a
|
|
||||||
.LoopTrainerData
|
|
||||||
ld a,[hli]
|
|
||||||
and a ; have we reached the end of the trainer data?
|
|
||||||
jr z,.FinishUp
|
|
||||||
ld [wcf91],a ; write species somewhere (XXX why?)
|
|
||||||
ld a,1
|
|
||||||
ld [wcc49],a
|
|
||||||
push hl
|
|
||||||
call AddPartyMon
|
|
||||||
pop hl
|
|
||||||
jr .LoopTrainerData
|
|
||||||
.SpecialTrainer
|
|
||||||
; if this code is being run:
|
|
||||||
; - each pokemon has a specific level
|
|
||||||
; (as opposed to the whole team being of the same level)
|
|
||||||
; - if [W_LONEATTACKNO] != 0, one pokemon on the team has a special move
|
|
||||||
ld a,[hli]
|
|
||||||
and a ; have we reached the end of the trainer data?
|
|
||||||
jr z,.AddLoneMove
|
|
||||||
ld [W_CURENEMYLVL],a
|
|
||||||
ld a,[hli]
|
|
||||||
ld [wcf91],a
|
|
||||||
ld a,1
|
|
||||||
ld [wcc49],a
|
|
||||||
push hl
|
|
||||||
call AddPartyMon
|
|
||||||
pop hl
|
|
||||||
jr .SpecialTrainer
|
|
||||||
.AddLoneMove
|
|
||||||
; does the trainer have a single monster with a different move
|
|
||||||
ld a,[W_LONEATTACKNO] ; Brock is 01, Misty is 02, Erika is 04, etc
|
|
||||||
and a
|
|
||||||
jr z,.AddTeamMove
|
|
||||||
dec a
|
|
||||||
add a,a
|
|
||||||
ld c,a
|
|
||||||
ld b,0
|
|
||||||
ld hl,LoneMoves
|
|
||||||
add hl,bc
|
|
||||||
ld a,[hli]
|
|
||||||
ld d,[hl]
|
|
||||||
ld hl,wEnemyMon1Moves + 2
|
|
||||||
ld bc,wEnemyMon2 - wEnemyMon1
|
|
||||||
call AddNTimes
|
|
||||||
ld [hl],d
|
|
||||||
jr .FinishUp
|
|
||||||
.AddTeamMove
|
|
||||||
; check if our trainer's team has special moves
|
|
||||||
|
|
||||||
; get trainer class number
|
|
||||||
ld a,[W_CUROPPONENT]
|
|
||||||
sub $C8
|
|
||||||
ld b,a
|
|
||||||
ld hl,TeamMoves
|
|
||||||
|
|
||||||
; iterate through entries in TeamMoves, checking each for our trainer class
|
|
||||||
.IterateTeamMoves
|
|
||||||
ld a,[hli]
|
|
||||||
cp b
|
|
||||||
jr z,.GiveTeamMoves ; is there a match?
|
|
||||||
inc hl ; if not, go to the next entry
|
|
||||||
inc a
|
|
||||||
jr nz,.IterateTeamMoves
|
|
||||||
|
|
||||||
; no matches found. is this trainer champion rival?
|
|
||||||
ld a,b
|
|
||||||
cp SONY3
|
|
||||||
jr z,.ChampionRival
|
|
||||||
jr .FinishUp ; nope
|
|
||||||
.GiveTeamMoves
|
|
||||||
ld a,[hl]
|
|
||||||
ld [wEnemyMon5Moves + 2],a
|
|
||||||
jr .FinishUp
|
|
||||||
.ChampionRival ; give moves to his team
|
|
||||||
|
|
||||||
; pidgeot
|
|
||||||
ld a,SKY_ATTACK
|
|
||||||
ld [wEnemyMon1Moves + 2],a
|
|
||||||
|
|
||||||
; starter
|
|
||||||
ld a,[W_RIVALSTARTER]
|
|
||||||
cp STARTER3
|
|
||||||
ld b,MEGA_DRAIN
|
|
||||||
jr z,.GiveStarterMove
|
|
||||||
cp STARTER1
|
|
||||||
ld b,FIRE_BLAST
|
|
||||||
jr z,.GiveStarterMove
|
|
||||||
ld b,BLIZZARD ; must be squirtle
|
|
||||||
.GiveStarterMove
|
|
||||||
ld a,b
|
|
||||||
ld [wEnemyMon6Moves + 2],a
|
|
||||||
.FinishUp ; XXX this needs documenting
|
|
||||||
xor a ; clear D079-D07B
|
|
||||||
ld de,wd079
|
|
||||||
ld [de],a
|
|
||||||
inc de
|
|
||||||
ld [de],a
|
|
||||||
inc de
|
|
||||||
ld [de],a
|
|
||||||
ld a,[W_CURENEMYLVL]
|
|
||||||
ld b,a
|
|
||||||
.LastLoop
|
|
||||||
ld hl,wd047
|
|
||||||
ld c,2
|
|
||||||
push bc
|
|
||||||
predef AddBCDPredef
|
|
||||||
pop bc
|
|
||||||
inc de
|
|
||||||
inc de
|
|
||||||
dec b
|
|
||||||
jr nz,.LastLoop
|
|
||||||
ret
|
|
||||||
|
|
||||||
INCLUDE "data/trainer_moves.asm"
|
INCLUDE "data/trainer_moves.asm"
|
||||||
|
|
143
engine/battle/trainer_pic_money_pointers.asm
Normal file
143
engine/battle/trainer_pic_money_pointers.asm
Normal file
|
@ -0,0 +1,143 @@
|
||||||
|
TrainerPicAndMoneyPointers: ; 39914 (e:5914)
|
||||||
|
; trainer pic pointers and base money.
|
||||||
|
; money received after battle = base money × level of highest-level enemy mon
|
||||||
|
dw YoungsterPic
|
||||||
|
money 1500
|
||||||
|
|
||||||
|
dw BugCatcherPic
|
||||||
|
money 1000
|
||||||
|
|
||||||
|
dw LassPic
|
||||||
|
money 1500
|
||||||
|
|
||||||
|
dw SailorPic
|
||||||
|
money 3000
|
||||||
|
|
||||||
|
dw JrTrainerMPic
|
||||||
|
money 2000
|
||||||
|
|
||||||
|
dw JrTrainerFPic
|
||||||
|
money 2000
|
||||||
|
|
||||||
|
dw PokemaniacPic
|
||||||
|
money 5000
|
||||||
|
|
||||||
|
dw SuperNerdPic
|
||||||
|
money 2500
|
||||||
|
|
||||||
|
dw HikerPic
|
||||||
|
money 3500
|
||||||
|
|
||||||
|
dw BikerPic
|
||||||
|
money 2000
|
||||||
|
|
||||||
|
dw BurglarPic
|
||||||
|
money 9000
|
||||||
|
|
||||||
|
dw EngineerPic
|
||||||
|
money 5000
|
||||||
|
|
||||||
|
dw JugglerPic
|
||||||
|
money 3500
|
||||||
|
|
||||||
|
dw FisherPic
|
||||||
|
money 3500
|
||||||
|
|
||||||
|
dw SwimmerPic
|
||||||
|
money 500
|
||||||
|
|
||||||
|
dw CueBallPic
|
||||||
|
money 2500
|
||||||
|
|
||||||
|
dw GamblerPic
|
||||||
|
money 7000
|
||||||
|
|
||||||
|
dw BeautyPic
|
||||||
|
money 7000
|
||||||
|
|
||||||
|
dw PsychicPic
|
||||||
|
money 1000
|
||||||
|
|
||||||
|
dw RockerPic
|
||||||
|
money 2500
|
||||||
|
|
||||||
|
dw JugglerPic
|
||||||
|
money 3500
|
||||||
|
|
||||||
|
dw TamerPic
|
||||||
|
money 4000
|
||||||
|
|
||||||
|
dw BirdKeeperPic
|
||||||
|
money 2500
|
||||||
|
|
||||||
|
dw BlackbeltPic
|
||||||
|
money 2500
|
||||||
|
|
||||||
|
dw Rival1Pic
|
||||||
|
money 3500
|
||||||
|
|
||||||
|
dw ProfOakPic
|
||||||
|
money 9900
|
||||||
|
|
||||||
|
dw ChiefPic
|
||||||
|
money 3000
|
||||||
|
|
||||||
|
dw ScientistPic
|
||||||
|
money 5000
|
||||||
|
|
||||||
|
dw GiovanniPic
|
||||||
|
money 9900
|
||||||
|
|
||||||
|
dw RocketPic
|
||||||
|
money 3000
|
||||||
|
|
||||||
|
dw CooltrainerMPic
|
||||||
|
money 3500
|
||||||
|
|
||||||
|
dw CooltrainerFPic
|
||||||
|
money 3500
|
||||||
|
|
||||||
|
dw BrunoPic
|
||||||
|
money 9900
|
||||||
|
|
||||||
|
dw BrockPic
|
||||||
|
money 9900
|
||||||
|
|
||||||
|
dw MistyPic
|
||||||
|
money 9900
|
||||||
|
|
||||||
|
dw LtSurgePic
|
||||||
|
money 9900
|
||||||
|
|
||||||
|
dw ErikaPic
|
||||||
|
money 9900
|
||||||
|
|
||||||
|
dw KogaPic
|
||||||
|
money 9900
|
||||||
|
|
||||||
|
dw BlainePic
|
||||||
|
money 9900
|
||||||
|
|
||||||
|
dw SabrinaPic
|
||||||
|
money 9900
|
||||||
|
|
||||||
|
dw GentlemanPic
|
||||||
|
money 7000
|
||||||
|
|
||||||
|
dw Rival2Pic
|
||||||
|
money 6500
|
||||||
|
|
||||||
|
dw Rival3Pic
|
||||||
|
money 9900
|
||||||
|
|
||||||
|
dw LoreleiPic
|
||||||
|
money 9900
|
||||||
|
|
||||||
|
dw ChannelerPic
|
||||||
|
money 3000
|
||||||
|
|
||||||
|
dw AgathaPic
|
||||||
|
money 9900
|
||||||
|
|
||||||
|
dw LancePic
|
||||||
|
money 9900
|
2
main.asm
2
main.asm
|
@ -5465,7 +5465,7 @@ BaseStats: INCLUDE "data/base_stats.asm"
|
||||||
INCLUDE "data/cries.asm"
|
INCLUDE "data/cries.asm"
|
||||||
INCLUDE "engine/battle/unused_stats_functions.asm"
|
INCLUDE "engine/battle/unused_stats_functions.asm"
|
||||||
INCLUDE "engine/battle/scroll_draw_trainer_pic.asm"
|
INCLUDE "engine/battle/scroll_draw_trainer_pic.asm"
|
||||||
INCLUDE "engine/battle/trainer_party_ai_misc.asm"
|
INCLUDE "engine/battle/trainer_ai.asm"
|
||||||
INCLUDE "engine/battle/draw_hud_pokeball_gfx.asm"
|
INCLUDE "engine/battle/draw_hud_pokeball_gfx.asm"
|
||||||
|
|
||||||
TradingAnimationGraphics:
|
TradingAnimationGraphics:
|
||||||
|
|
Loading…
Reference in a new issue