summaryrefslogtreecommitdiff
path: root/misc/battle_tower_5c.asm
diff options
context:
space:
mode:
authorPikalaxALT <PikalaxALT@gmail.com>2015-11-07 14:38:52 -0500
committerPikalaxALT <PikalaxALT@gmail.com>2015-11-07 14:38:52 -0500
commit09603bf0315862d7c008e08a9960e6111a0859f8 (patch)
tree2048e722577287becfa79420fab1aabbf1e12a77 /misc/battle_tower_5c.asm
parenteb39f6a3396b21047a11dd871263c6dbc5f2c65f (diff)
More Battle Tower shenanigans
Diffstat (limited to 'misc/battle_tower_5c.asm')
-rwxr-xr-xmisc/battle_tower_5c.asm422
1 files changed, 422 insertions, 0 deletions
diff --git a/misc/battle_tower_5c.asm b/misc/battle_tower_5c.asm
new file mode 100755
index 000000000..6d5ad2ebf
--- /dev/null
+++ b/misc/battle_tower_5c.asm
@@ -0,0 +1,422 @@
+BattleTowerBattle: ; 170215
+ xor a
+ ld [wcf63], a
+ call _BattleTowerBattle
+ ret
+; 17021d
+
+EmptySpecial_17021d: ; 17021d
+ ret
+; 17021e
+
+Function17021e: ; 17021e
+ xor a
+ ld [wcf63], a
+ ld [wcf64], a
+ ld [wcf65], a
+ ld [wcf66], a
+ ret
+; 17022c
+
+_BattleTowerBattle: ; 17022c
+.loop
+ call .do_jumptable
+ call DelayFrame
+ ld a, [wcf63]
+ cp $1
+ jr nz, .loop
+ ret
+; 17023a
+
+.do_jumptable: ; 17023a
+ ld a, [wcf63]
+ ld e, a
+ ld d, 0
+ ld hl, .jumptable
+rept 2
+ add hl, de
+endr
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ jp [hl]
+; 170249
+
+.jumptable: ; 170249
+ dw RunBattleTowerTrainer
+ dw SkipBattleTowerTrainer
+; 17024d
+
+RunBattleTowerTrainer: ; 17024d
+ ld a, [Options]
+ push af
+ ld hl, Options
+ set BATTLE_SHIFT, [hl] ; SET MODE
+
+ ld a, [InBattleTowerBattle]
+ push af
+ or $1
+ ld [InBattleTowerBattle], a
+
+ xor a
+ ld [wLinkMode], a
+ callba Mobile_HealParty
+ callba HealParty
+ call ReadBTTrainerParty
+ call Clears5_a89a
+ predef StartBattle
+ callba LoadPokemonData
+ callba HealParty
+ ld a, [wBattleResult]
+ ld [ScriptVar], a
+ and a
+ jr nz, .lost
+ ld a, BANK(sNrOfBeatenBattleTowerTrainers)
+ call GetSRAMBank
+ ld a, [sNrOfBeatenBattleTowerTrainers]
+ ld [wNrOfBeatenBattleTowerTrainers], a ; wcf64
+ call CloseSRAM
+ ld hl, StringBuffer3
+ ld a, [wNrOfBeatenBattleTowerTrainers] ; wcf64
+ add "1"
+ ld [hli], a
+ ld a, "@"
+ ld [hl], a
+
+.lost
+ pop af
+ ld [InBattleTowerBattle], a
+ pop af
+ ld [Options], a
+ ld a, $1
+ ld [wcf63], a
+ ret
+
+
+ReadBTTrainerParty: ; 1702b7
+; Initialise the BattleTower-Trainer and his Pkmn
+ call CopyBTTrainer_FromBT_OT_TowBT_OTTemp
+
+; Check the nicknames for illegal characters, and replace bad nicknames
+; with their species names.
+ ld de, wBT_OTTempPkmn1Name ; $c643
+ ld c, PKMN_NAME_LENGTH
+ callba CheckStringForErrors
+ jr nc, .skip_mon_1
+
+ ld a, [wBT_OTTempPkmn1]
+ ld [wNamedObjectIndexBuffer], a
+ call GetPokemonName
+ ld l, e
+ ld h, d
+ ld de, wBT_OTTempPkmn1Name ; $c643
+ ld bc, PKMN_NAME_LENGTH
+ call CopyBytes
+
+.skip_mon_1
+ ld de, wBT_OTTempPkmn2Name ; $c67e
+ ld c, PKMN_NAME_LENGTH
+ callba CheckStringForErrors
+ jr nc, .skip_mon_2
+ ld a, [wBT_OTTempPkmn2] ; [$c64e]
+ ld [wNamedObjectIndexBuffer], a
+ call GetPokemonName
+ ld l, e
+ ld h, d
+ ld de, wBT_OTTempPkmn2Name ; $c67e
+ ld bc, PKMN_NAME_LENGTH
+ call CopyBytes
+
+.skip_mon_2
+ ld de, wBT_OTTempPkmn3Name ; $c686 + 51 = $c6b9
+ ld c, PKMN_NAME_LENGTH
+ callba CheckStringForErrors
+ jr nc, .skip_mon_3
+ ld a, [wBT_OTTempPkmn3] ; [$c689]
+ ld [wNamedObjectIndexBuffer], a
+ call GetPokemonName
+ ld l, e
+ ld h, d
+ ld de, wBT_OTTempPkmn3Name ; $c686 + 51 = $c6b9
+ ld bc, PKMN_NAME_LENGTH
+ call CopyBytes
+
+.skip_mon_3
+; Add the terminator character to each of these names
+ ld a, "@"
+ ld [wBT_OTTempPkmn1NameEnd - 1], a ; $c64d
+ ld [wBT_OTTempPkmn2NameEnd - 1], a ; $c688
+ ld [wBT_OTTempPkmn3NameEnd - 1], a ; $c68a + 57 = $c6c3
+; Fix errors in the movesets
+ call CheckBTMonMovesForErrors
+; Repair the trainer name if needed, then copy it to OTPlayerName
+ ld de, wBT_OTTempName
+ ld c, NAME_LENGTH - 1
+ callba CheckStringForErrors
+ jr nc, .trainer_name_okay
+ ld hl, BT_ChrisName
+ jr .done_trainer_name
+
+.trainer_name_okay
+ ld hl, wBT_OTTempName ; 0xc608
+
+.done_trainer_name
+ ld de, OTPlayerName
+ ld bc, NAME_LENGTH - 1
+ call CopyBytes
+ ld a, "@"
+ ld [de], a
+
+ ld hl, wBT_OTTempTrainerClass
+ ld a, [hli]
+ ld [OtherTrainerClass], a
+ ld a, OTPartyMonNicknames % $100
+ ld [BGMapBuffer], a
+ ld a, OTPartyMonNicknames / $100
+ ld [BGMapBuffer + 1], a
+
+ ; Copy Pkmn into Memory from the address in hl
+ ld de, OTPartyMon1Species
+ ld bc, OTPartyCount
+ ld a, BATTLETOWER_NROFPKMNS ; Number of Pkmn the BattleTower-Trainer has
+ ld [bc], a
+ inc bc
+.otpartymon_loop
+ push af
+ ld a, [hl]
+ ld [bc], a
+ inc bc
+ push bc
+ ld bc, PARTYMON_STRUCT_LENGTH
+ call CopyBytes
+ push de
+ ld a, [BGMapBuffer]
+ ld e, a
+ ld a, [BGMapBuffer + 1]
+ ld d, a
+ ld bc, PKMN_NAME_LENGTH
+ call CopyBytes
+ ld a, e
+ ld [BGMapBuffer], a
+ ld a, d
+ ld [BGMapBuffer + 1], a
+ pop de
+ pop bc
+ pop af
+ dec a
+ and a
+ jr nz, .otpartymon_loop
+ ld a, -1
+ ld [bc], a
+ ret
+; 170394
+
+Function170394: ; 170394
+ ld hl, $c608 + 11
+ ld d, $3
+.asm_170399
+ push de
+ push hl
+ ld b, h
+ ld c, l
+ ld a, [hl]
+ and a
+ jr z, .asm_1703b1
+ cp $ff
+ jr z, .asm_1703b1
+ cp $fe
+ jr z, .asm_1703b1
+ cp $fd
+ jr z, .asm_1703b1
+ cp $fc
+ jr nz, .asm_1703b4
+
+.asm_1703b1
+ ld a, $eb
+ ld [hl], a
+
+.asm_1703b4
+ ld [CurSpecies], a
+ call GetBaseData
+ ld a, $5
+ call GetSRAMBank
+ ld a, [$b2fb]
+ call CloseSRAM
+ ld e, a
+ ld hl, $001f
+ add hl, bc
+ ld a, [hl]
+ cp $2
+ ld a, $2
+ jr c, .asm_1703d6
+ ld a, [hl]
+ cp e
+ jr c, .asm_1703d7
+ ld a, e
+
+.asm_1703d6
+ ld [hl], a
+
+.asm_1703d7
+ ld [CurPartyLevel], a
+ ld hl, $0002
+ add hl, bc
+ ld d, $3
+ ld a, [hli]
+ and a
+ jr z, .asm_1703ea
+ cp $fc
+ jr nc, .asm_1703ea
+ jr .asm_1703f4
+
+.asm_1703ea
+ dec hl
+ ld a, $1
+ ld [hli], a
+ xor a
+rept 2
+ ld [hli], a
+endr
+ ld [hl], a
+ jr .asm_1703ff
+
+.asm_1703f4
+ ld a, [hl]
+ cp $fc
+ jr c, .asm_1703fb
+ ld [hl], $0
+
+.asm_1703fb
+ inc hl
+ dec d
+ jr nz, .asm_1703f4
+
+.asm_1703ff
+ ld hl, $0024
+ add hl, bc
+ ld d, h
+ ld e, l
+ push hl
+ push de
+ ld hl, $000a
+ add hl, bc
+ ld b, $1
+ predef CalcPkmnStats
+ pop de
+ pop hl
+rept 2
+ dec de
+endr
+ ld a, [hli]
+ ld [de], a
+ inc de
+ ld a, [hl]
+ ld [de], a
+ pop hl
+ ld bc, PARTYMON_STRUCT_LENGTH + PKMN_NAME_LENGTH
+ add hl, bc
+ pop de
+ dec d
+ jp nz, .asm_170399
+ ret
+; 170426
+
+BT_ChrisName: ; 170426
+ db "CHRIS@"
+; 17042c
+
+Function17042c: ; 17042c
+ ld hl, OTPartyMon2ID
+ ld a, $7
+.asm_170431
+ push af
+ push hl
+ ld c, $12
+.asm_170435
+ ld a, [hli]
+ ld b, a
+ ld a, [hli]
+ and a
+ jr z, .asm_170451
+ cp $f
+ jr nc, .asm_17045b
+ push hl
+ ld hl, Unknown_170470
+ dec a
+ ld e, a
+ ld d, 0
+ add hl, de
+ ld a, [hl]
+ pop hl
+ cp b
+ jr c, .asm_17045b
+ jr z, .asm_17045b
+ jr .asm_170456
+
+.asm_170451
+ ld a, b
+ cp $fc
+ jr nc, .asm_17045b
+
+.asm_170456
+ dec c
+ jr nz, .asm_170435
+ jr .asm_170466
+
+.asm_17045b
+ pop de
+ push de
+ ld hl, Unknown_17047e
+ ld bc, BATTLETOWER_TRAINERDATALENGTH
+ call CopyBytes
+
+.asm_170466
+ pop hl
+ ld de, $00e0
+ add hl, de
+ pop af
+ dec a
+ jr nz, .asm_170431
+ ret
+; 170470
+
+Unknown_170470:
+ db $12, $24, $45, $45, $42, $42, $45, $42, $27, $27, $45, $27, $42, $24
+
+Unknown_17047e:
+ db $03, $04, $05, $08
+ db $03, $05, $0e, $06
+ db $03, $02, $00, $00
+ db $39, $07, $07, $04
+ db $00, $05, $04, $07
+ db $01, $05, $00, $00
+ db $0f, $05, $14, $07
+ db $05, $05, $11, $0c
+ db $0c, $06, $06, $04
+
+
+CopyBTTrainer_FromBT_OT_TowBT_OTTemp: ; 1704a2
+; copy the BattleTower-Trainer data that lies at 'BT_OTTrainer' to 'wBT_OTTemp'
+ ld a, [rSVBK]
+ push af
+ ld a, $3 ; BANK(BT_OTTrainer)
+ ld [rSVBK], a
+
+ ld hl, BT_OTTrainer ; $d100
+ ld de, wBT_OTTemp ; $c608
+ ld bc, BATTLE_TOWER_STRUCT_LENGTH
+ call CopyBytes
+
+ pop af
+ ld [rSVBK], a
+
+ ld a, BANK(s1_be45)
+ call GetSRAMBank
+ ld a, $2
+ ld [s1_be45], a
+ ld hl, sNrOfBeatenBattleTowerTrainers
+ inc [hl]
+ call CloseSRAM
+SkipBattleTowerTrainer: ; 1704c9
+ ret
+; 1704ca