pokecrystal-board/misc/battle_tower_5c.asm
mid-kid afc92eadc1 Label BattleTowerRoomMenu
All of the functions called by it are prefixed with BattleTowerRoomMenu,
but a bunch of them seem more generic than that, since they're part of
different mobile menus. Also called another menu jumptable
BattleTowerRoomMenu2 for the lack of a better name (only the Yes/No menu
functions are used in western crystal).
The names of the more generic functions should be fixed when we start
labelling other menus.
2017-11-25 17:03:20 +01:00

1773 lines
27 KiB
NASM
Executable File

BattleTowerRoomMenu: ; 1700b0
; special
call InitBattleTowerChallengeRAM
callba _BattleTowerRoomMenu
ret
; 1700ba
Function1700ba: ; 1700ba
call InitBattleTowerChallengeRAM
callba Function11811a
ret
; 1700c4
Function1700c4: ; 1700c4
ld a, [rSVBK]
push af
ld a, $3
ld [rSVBK], a
call Function17042c
ld a, $5
call GetSRAMBank
ld a, $1
ld [$be45], a
xor a
ld [$be46], a
ld hl, w3_dffc
ld de, $aa41
ld bc, 4
call CopyBytes
ld hl, w3_d202Name
ld de, $aa8e
ld bc, 7 * $cc ; length of battle tower struct from japanese games?
call CopyBytes
ld hl, $aa5d ; some sort of count
ld a, [hl]
inc [hl]
inc hl
sla a
sla a
ld e, a
ld d, $0
add hl, de
ld e, l
ld d, h
ld hl, w3_dffc
ld bc, 4
call CopyBytes
call CloseSRAM
pop af
ld [rSVBK], a
ret
; 170114
Function170114: ; 170114
call InitBattleTowerChallengeRAM
call .Function170121
callba Function11805f
ret
; 170121
.Function170121: ; 170121
ld a, $5
call GetSRAMBank
ld hl, $a948
ld de, wMisc
ld bc, $f6 ; 246
call CopyBytes
call CloseSRAM
call Function170c8b
ret
; 170139
Function170139: ; 170139
; Convert the 4-digit decimal number at 5:aa41 into binary
ld a, $5
call GetSRAMBank
ld de, $aa41
ld h, $0
ld l, h
ld bc, 1000
call .DecToBin
ld bc, 100
call .DecToBin
ld bc, 10
call .DecToBin
ld a, [de]
ld c, a
ld b, $0
add hl, bc
call CloseSRAM
; Store that number in wMisc
ld a, h
ld [wMisc], a
ld a, l
ld [wMisc + 1], a
ld hl, wBT_OTTempPkmn1DVs
ld a, [PlayerID]
ld [hli], a
ld a, [PlayerID + 1]
ld [hli], a
ld a, [wSecretID]
ld [hli], a
ld a, [wSecretID + 1]
ld [hli], a
ld e, l
ld d, h
ld hl, PlayerName
ld bc, 5 ; Japanese name length
call CopyBytes
ld bc, PlayerID
ld de, PlayerGender
callba GetMobileOTTrainerClass
ld de, wBT_OTTempPkmn1CaughtGender
ld a, c
ld [de], a
inc de
ld a, PartyMons % $100
ld [wcd49], a
ld a, PartyMons / $100
ld [wcd4a], a
ld a, PartyMonNicknames % $100
ld [wcd4b], a
ld a, PartyMonNicknames / $100
ld [wcd4c], a
ld a, 3
.CopyLoop:
push af
ld a, [wcd49]
ld l, a
ld a, [wcd4a]
ld h, a
ld bc, PARTYMON_STRUCT_LENGTH
call CopyBytes
ld a, l
ld [wcd49], a
ld a, h
ld [wcd4a], a
ld a, [wcd4b]
ld l, a
ld a, [wcd4c]
ld h, a
ld bc, $0006
call CopyBytes
ld a, l
ld [wcd4b], a
ld a, h
ld [wcd4c], a
pop af
dec a
jr nz, .CopyLoop
ld a, $4
call GetSRAMBank
ld hl, $a013
ld bc, $24
call CopyBytes
call CloseSRAM
ld a, $5
call GetSRAMBank
ld hl, $a894
ld bc, 6
call CopyBytes
ld hl, wMisc
ld de, $a948
ld bc, $f6
call CopyBytes
call CloseSRAM
ret
; 17020c
.DecToBin: ; 17020c
ld a, [de]
inc de
and a
ret z
.digit_loop
add hl, bc
dec a
jr nz, .digit_loop
ret
; 170215
BattleTowerBattle: ; 170215
xor a
ld [wBattleTowerBattleEnded], a
call _BattleTowerBattle
ret
; 17021d
EmptySpecial_17021d: ; 17021d
ret
; 17021e
InitBattleTowerChallengeRAM: ; 17021e
xor a
ld [wBattleTowerBattleEnded], a
ld [wNrOfBeatenBattleTowerTrainers], a
ld [wcf65], a
ld [wcf66], a
ret
; 17022c
_BattleTowerBattle: ; 17022c
.loop
call .do_dw
call DelayFrame
ld a, [wBattleTowerBattleEnded]
cp $1
jr nz, .loop
ret
; 17023a
.do_dw ; 17023a
ld a, [wBattleTowerBattleEnded]
ld e, a
ld d, 0
ld hl, .dw
add hl, de
add hl, de
ld a, [hli]
ld h, [hl]
ld l, a
jp hl
; 170249
.dw ; 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 TrainerRankings_Healings
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
call CloseSRAM
ld hl, StringBuffer3
ld a, [wNrOfBeatenBattleTowerTrainers]
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 [wBattleTowerBattleEnded], 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
ValidateBTParty: ; 170394
; Check for and fix errors in party data
ld hl, wBT_OTTempPkmn1Species
ld d, BATTLETOWER_NROFPKMNS
.pkmn_loop
push de
push hl
ld b, h
ld c, l
ld a, [hl]
and a
idx = $ff
rept ($ff +- NUM_POKEMON)
jr z, .invalid
cp idx
idx = idx +- 1
endr
jr nz, .valid
.invalid
ld a, SMEARGLE
ld [hl], a
.valid
ld [CurSpecies], a
call GetBaseData
ld a, $5
call GetSRAMBank
ld a, [$b2fb] ; s5_b2fb ; max level?
call CloseSRAM
ld e, a
ld hl, MON_LEVEL
add hl, bc
ld a, [hl]
cp MIN_LEVEL
ld a, MIN_LEVEL
jr c, .load
ld a, [hl]
cp e
jr c, .dont_load
ld a, e
.load
ld [hl], a
.dont_load
ld [CurPartyLevel], a
ld hl, MON_MOVES
add hl, bc
ld d, NUM_MOVES - 1
ld a, [hli]
and a
jr z, .not_move
cp NUM_ATTACKS + 1
jr nc, .not_move
jr .valid_move
.not_move
dec hl
ld a, POUND
ld [hli], a
xor a
ld [hli], a
ld [hli], a
ld [hl], a
jr .done_moves
.valid_move
ld a, [hl]
cp NUM_ATTACKS + 1
jr c, .next
ld [hl], $0
.next
inc hl
dec d
jr nz, .valid_move
.done_moves
ld hl, MON_MAXHP
add hl, bc
ld d, h
ld e, l
push hl
push de
ld hl, MON_STAT_EXP - 1
add hl, bc
ld b, $1
predef CalcPkmnStats
pop de
pop hl
dec de
dec de
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, .pkmn_loop
ret
; 170426
BT_ChrisName: ; 170426
db "CHRIS@"
; 17042c
Function17042c: ; 17042c
ld hl, w3_d202TrainerData
ld a, BATTLETOWER_NROFTRAINERS
.loop
push af
push hl
ld c, BATTLETOWER_TRAINERDATALENGTH / 2
.loop2
; First byte is a comparison value.
ld a, [hli]
ld b, a
; Second byte is a lookup index.
ld a, [hli]
and a
jr z, .empty
cp 15
jr nc, .copy_data
push hl
ld hl, Unknown_170470
dec a
ld e, a
ld d, 0
add hl, de
ld a, [hl]
pop hl
; If Unknown_170470[a-1] <= b, overwrite the current trainer's data
; with Unknown17047e, and exit the inner loop.
cp b
jr c, .copy_data
jr z, .copy_data
jr .next_iteration
.empty
; If a == 0 and b >= $fc, overwrite the current trainer's data with
; Unknown17047e, and exit the inner loop.
ld a, b
cp $fc
jr nc, .copy_data
.next_iteration
dec c
jr nz, .loop2
jr .next_trainer
.copy_data
pop de
push de
ld hl, Unknown_17047e
ld bc, BATTLETOWER_TRAINERDATALENGTH
call CopyBytes
.next_trainer
pop hl
ld de, BATTLE_TOWER_STRUCT_LENGTH
add hl, de
pop af
dec a
jr nz, .loop
ret
; 170470
Unknown_170470:
db $12
db $24
db $45
db $45
db $42
db $42
db $45
db $42
db $27
db $27
db $45
db $27
db $42
db $24
Unknown_17047e:
; see data/battle_tower_2.asm
db $03, 4
db $05, 8
db $03, 5
db $0e, 6
db $03, 2
db $00, 0
db $39, 7
db $07, 4
db $00, 5
db $04, 7
db $01, 5
db $00, 0
db $0f, 5
db $14, 7
db $05, 5
db $11, 12
db $0c, 6
db $06, 4
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 ; wMisc
ld bc, BATTLE_TOWER_STRUCT_LENGTH
call CopyBytes
pop af
ld [rSVBK], a
ld a, BANK(sBattleTowerChallengeState)
call GetSRAMBank
ld a, BATTLETOWER_CHALLENGE_IN_PROGESS
ld [sBattleTowerChallengeState], a
ld hl, sNrOfBeatenBattleTowerTrainers
inc [hl]
call CloseSRAM
SkipBattleTowerTrainer: ; 1704c9
ret
; 1704ca
Function1704ca: ; 1704ca
; unreferenced mobile function
ld a, [$be46]
cp $7
jr c, .asm_1704d3
ld a, $6
.asm_1704d3
ld hl, $afce
ld de, -$e0
.asm_1704d9
and a
jr z, .asm_1704e0
add hl, de
dec a
jr .asm_1704d9
.asm_1704e0
ret
; 1704e1
Function1704e1: ; 1704e1
; unreferenced special
call SpeechTextBox
call FadeToMenu
call InitBattleTowerChallengeRAM
call .JumptableLoop
call CloseSubmenu
ret
; 1704f1
.JumptableLoop: ; 1704f1
call ClearBGPalettes
call ClearSprites
call ClearScreen
.loop
call JoyTextDelay
ld a, [wJumptableIndex]
bit 7, a
jr nz, .done
call .DoJumptable
callba ReloadMapPart
jr .loop
.done
ret
; 170510
.DoJumptable: ; 170510
ld a, [wJumptableIndex]
ld e, a
ld d, 0
ld hl, .dw
add hl, de
add hl, de
ld a, [hli]
ld h, [hl]
ld l, a
jp hl
; 17051f
.dw ; 17051f
dw .Jumptable_0
dw .Jumptable_1
dw .Jumptable_2
; 170525
.Jumptable_0: ; 170525
ld a, $5
call GetSRAMBank
ld hl, $a89c
ld de, StringBuffer3
ld bc, $16
call CopyBytes
ld hl, $a8b2
ld de, wMisc
ld bc, $0096
call CopyBytes
call CloseSRAM
hlcoord 1, 1
ld de, StringBuffer3
call PlaceString
hlcoord 1, 3
ld de, .String_Mail
call PlaceString
hlcoord 4, 3
ld de, StringBuffer4
call PlaceString
hlcoord 8, 3
ld de, .String_PastReaders
call PlaceString
call .DrawBorder
call .PlaceTextItems
jr .NextJumptableFunction
.Jumptable_1:
call SetPalettes
call .NextJumptableFunction
.Jumptable_2:
ld hl, hJoyPressed
ld a, [hl]
and A_BUTTON
jr nz, .pressed_a_or_b
ld a, [hl]
and B_BUTTON
jr nz, .pressed_a_or_b
ld a, [hl]
and D_UP
jr nz, .pressed_up
ld a, [hl]
and D_DOWN
jr nz, .pressed_down
ret
.pressed_up
ld a, [wNrOfBeatenBattleTowerTrainers]
and a
ret z
sub 15
ld [wNrOfBeatenBattleTowerTrainers], a
call .PlaceTextItems
ret
.pressed_down
ld a, [wNrOfBeatenBattleTowerTrainers]
cp 60
ret z
add 15
ld [wNrOfBeatenBattleTowerTrainers], a
call .PlaceTextItems
ret
.pressed_a_or_b
ld hl, wJumptableIndex
set 7, [hl]
ret
.NextJumptableFunction:
ld hl, wJumptableIndex
inc [hl]
ret
; 1705b7
.DrawBorder: ; 1705b7
hlcoord 0, 4
ld a, $79
ld [hli], a
ld c, SCREEN_WIDTH - 2
.top_border_loop
ld a, $7a
ld [hli], a
dec c
jr nz, .top_border_loop
ld a, $7b
ld [hli], a
ld de, SCREEN_WIDTH
ld c, 12
.left_border_loop
ld a, $7c
ld [hl], a
add hl, de
dec c
jr nz, .left_border_loop
ld a, $7d
ld [hli], a
ld c, SCREEN_WIDTH - 2
.bottom_border_loop
ld a, $7a
ld [hli], a
dec c
jr nz, .bottom_border_loop
ld a, $7e
ld [hl], a
ld de, -SCREEN_WIDTH
add hl, de
ld c, 12
.right_border_loop
ld a, $7c
ld [hl], a
add hl, de
dec c
jr nz, .right_border_loop
ret
; 1705f0
.PlaceTextItems: ; 1705f0
call .ClearBox
call .PlaceUpDownArrows
ld a, $50
ld [wcd4e], a
ld hl, wMisc
ld a, [wNrOfBeatenBattleTowerTrainers]
ld c, a
xor a
ld b, a
add hl, bc
push hl
pop bc
hlcoord 1, 6
ld a, 6
.loop1
push af
push hl
ld a, 3
.loop2
push af
ld de, wcd49
ld a, [bc]
and a
jr z, .fill_with_e3
; .copy
ld a, 5
.loop3a
push af
ld a, [bc]
ld [de], a
inc bc
inc de
pop af
dec a
jr nz, .loop3a
jr .rejoin
.fill_with_e3
ld a, 5
.loop3b
push af
ld a, $e3
ld [de], a
inc de
inc bc
pop af
dec a
jr nz, .loop3b
.rejoin
ld de, wcd49
push bc
call PlaceString
ld de, 6
add hl, de
pop bc
pop af
dec a
jr nz, .loop2
pop hl
ld de, $28
add hl, de
pop af
dec a
jr nz, .loop1
ret
; 17064b
.ClearBox: ; 17064b
hlcoord 1, 5
xor a
ld b, 12
.clearbox_row
ld c, SCREEN_WIDTH - 2
.clearbox_column
ld [hli], a
dec c
jr nz, .clearbox_column
inc hl
inc hl
dec b
jr nz, .clearbox_row
ret
; 17065d
.PlaceUpDownArrows: ; 17065d
ld a, [wNrOfBeatenBattleTowerTrainers]
and a
jr z, .nope
hlcoord 18, 5
ld a, "▲"
ld [hl], a
.nope
ld a, [wNrOfBeatenBattleTowerTrainers]
cp 60
ret z
hlcoord 18, 16
ld a, "▼"
ld [hl], a
ret
; 170676
.String_Mail: ; 170676
db "ルーム@"
; 17067a
.String_PastReaders: ; 17067a
db "れきだいりーダーいちらん@"
; 170687
BattleTowerAction: ; 170687
ld a, [ScriptVar]
ld e, a
ld d, 0
ld hl, .dw
add hl, de
add hl, de
ld a, [hli]
ld h, [hl]
ld l, a
jp hl
; 170696
.dw ; 170696 (5c:4696)
dw BattleTowerAction_CheckExplanationRead ; 0x00
dw BattleTowerAction_SetExplanationRead ; 0x01
dw BattleTowerAction_GetChallengeState ; 0x02
dw BattleTowerAction_SetByteToQuickSaveChallenge ; 0x03
dw BattleTowerAction_SetByteToCancelChallenge ; 0x04
dw Function1707ac ; 0x05
dw Function1707f4 ; 0x06
dw SaveBattleTowerLevelGroup ; 0x07
dw LoadBattleTowerLevelGroup ; 0x08
dw BattleTower_CheckSaveFileExistsAndIsYours ; 0x09
dw Function1708b1 ; 0x0a
dw CheckMobileEventIndex ; 0x0b
dw Function1708c8 ; 0x0c
dw Function1708f0 ; 0x0d
dw BattleTowerAction_EggTicket ; 0x0e
dw Function1709aa ; 0x0f
dw Function1709bb ; 0x10
dw Function170a9c ; 0x11
dw Function170aa0 ; 0x12
dw Function170aaf ; 0x13
dw Function170abe ; 0x14
dw Function170ad7 ; 0x15
dw Function170807 ; 0x16
dw Function17081d ; 0x17
dw BattleTowerAction_LevelCheck ; 0x18
dw BattleTowerAction_UbersCheck ; 0x19
dw ResetBattleTowerTrainersSRAM ; 0x1a
dw BattleTower_GiveReward ; 0x1b
dw Function17071b ; 0x1c
dw Function170729 ; 0x1d
dw BattleTower_RandomlyChooseReward ; 0x1e
dw BattleTower_SaveOptions ; 0x1f
; Reset the save memory for BattleTower-Trainers (Counter and all 7 TrainerBytes)
ResetBattleTowerTrainersSRAM: ; 1706d6 (5c:46d6) BattleTowerAction $1a
ld a, BANK(sBTTrainers)
call GetSRAMBank
ld a, $ff
ld hl, sBTTrainers
ld bc, BATTLETOWER_NROFTRAINERS
call ByteFill
xor a
ld [sNrOfBeatenBattleTowerTrainers], a
call CloseSRAM
ret
BattleTower_GiveReward: ; 1706ee (5c:46ee) BattleTowerAction $1b
ld a, BANK(sBattleTowerReward)
call GetSRAMBank
ld a, [sBattleTowerReward]
call CloseSRAM
ld [ScriptVar], a
ld hl, NumItems
ld a, [hli]
cp MAX_ITEMS
ret c
ld b, MAX_ITEMS
ld a, [ScriptVar]
ld c, a
.loop
ld a, [hli]
cp c
jr nz, .next
ld a, [hl]
cp 95
ret c
.next
inc hl
dec b
jr nz, .loop
ld a, POTION
ld [ScriptVar], a
ret
Function17071b: ; 17071b (5c:471b) BattleTowerAction $1c
ld a, BANK(sBattleTowerChallengeState)
call GetSRAMBank
ld a, BATTLETOWER_WON_CHALLENGE
ld [sBattleTowerChallengeState], a
call CloseSRAM
ret
Function170729: ; 170729 (5c:4729) BattleTowerAction $1d
ld a, BANK(sBattleTowerChallengeState)
call GetSRAMBank
ld a, BATTLETOWER_RECEIVED_REWARD
ld [sBattleTowerChallengeState], a
call CloseSRAM
ret
BattleTower_SaveOptions: ; 170737 (5c:4737) BattleTowerAction $1f
callba SaveOptions
ret
BattleTower_RandomlyChooseReward: ; 17073e (5c:473e) BattleTowerAction $1e
; Generate a random stat boosting item.
.loop
call Random
ld a, [hRandomAdd]
and $7
cp 6
jr c, .okay
sub 6
.okay
add HP_UP
cp LUCKY_PUNCH
jr z, .loop
push af
ld a, BANK(sBattleTowerReward)
call GetSRAMBank
pop af
ld [sBattleTowerReward], a
call CloseSRAM
ret
BattleTowerAction_CheckExplanationRead: ; 17075f (5c:475f) BattleTowerAction $00
call BattleTower_CheckSaveFileExistsAndIsYours
ld a, [ScriptVar]
and a
ret z
ld a, BANK(s1_be4f)
call GetSRAMBank
ld a, [s1_be4f]
and $2
ld [ScriptVar], a
call CloseSRAM
ret
BattleTowerAction_GetChallengeState: ; 170778 (5c:4778) BattleTowerAction $02
ld hl, sBattleTowerChallengeState
ld a, BANK(sBattleTowerChallengeState)
call GetSRAMBank
ld a, [hl]
ld [ScriptVar], a
call CloseSRAM
ret
BattleTowerAction_SetExplanationRead: ; 170788 (5c:4788) BattleTowerAction $01
ld a, BANK(s1_be4f)
call GetSRAMBank
ld a, [s1_be4f]
or $2
ld [s1_be4f], a
call CloseSRAM
ret
BattleTowerAction_SetByteToQuickSaveChallenge: ; 170799 (5c:4799) BattleTowerAction $03
ld c, BATTLETOWER_SAVED_AND_LEFT
jr asm_17079f
BattleTowerAction_SetByteToCancelChallenge: ; 17079d (5c:479d) BattleTowerAction $04
ld c, BATTLETOWER_NO_CHALLENGE
asm_17079f: ; 17079f (5c:479f)
ld a, BANK(sBattleTowerChallengeState)
call GetSRAMBank
ld a, c
ld [sBattleTowerChallengeState], a
call CloseSRAM
ret
Function1707ac: ; 1707ac (5c:47ac) BattleTowerAction $05
ld a, $5
call GetSRAMBank
ld a, [$aa8c]
ld b, a
ld a, [$be46]
ld [ScriptVar], a
call CloseSRAM
and a
ret z
ld a, b
cp $2
jr nc, .asm_1707ef
push bc
call UpdateTime
pop bc
ld a, $5
call GetSRAMBank
ld a, [$aa8b]
call CloseSRAM
ld c, a
ld a, [CurDay]
sub c
jr c, .asm_1707e5
cp $8
jr nc, .asm_1707ef
ld a, b
and a
jr nz, .asm_1707ef
ret
.asm_1707e5
ld hl, CurDay
ld a, $8c
sub c
add [hl]
cp $8
ret c
.asm_1707ef
ld a, $8
ld [ScriptVar], a
Function1707f4: ; 1707f4 (5c:47f4) BattleTowerAction $06
ld a, $5
call GetSRAMBank
xor a
ld [$be46], a
ld [$aa8b], a
ld [$aa8c], a
call CloseSRAM
ret
Function170807: ; 170807 (5c:4807) BattleTowerAction $16
call UpdateTime
ld a, $5
call GetSRAMBank
ld a, [CurDay]
ld [$b2f9], a
xor a
ld [$b2fa], a
call CloseSRAM
ret
Function17081d: ; 17081d (5c:481d) BattleTowerAction $17
xor a
ld [ScriptVar], a
ld a, $5
call GetSRAMBank
ld a, [$b2f9]
ld c, a
ld a, [$b2fa]
ld b, a
call CloseSRAM
cp $2
jr nc, .asm_170853
push bc
call UpdateTime
pop bc
ld a, [CurDay]
sub c
jr c, .asm_170849
cp $b
jr nc, .asm_170853
ld a, b
and a
jr nz, .asm_170853
ret
.asm_170849
ld hl, CurDay
ld a, 140
sub c
add [hl]
cp $b
ret c
.asm_170853
ld a, $1
ld [ScriptVar], a
ld a, $5
call GetSRAMBank
xor a
ld [$b2f9], a
ld [$b2fa], a
call CloseSRAM
ret
SaveBattleTowerLevelGroup: ; 170868 (5c:4868) BattleTowerAction $07
ld a, BANK(sBTChoiceOfLevelGroup)
call GetSRAMBank
ld a, [rSVBK]
push af
ld a, $3
ld [rSVBK], a
ld a, [wBTChoiceOfLvlGroup]
ld [sBTChoiceOfLevelGroup], a
pop af
ld [rSVBK], a
call CloseSRAM
ret
LoadBattleTowerLevelGroup: ; 170881 (5c:4881) BattleTowerAction $08 ; Load level group choice
ld a, BANK(sBTChoiceOfLevelGroup)
call GetSRAMBank
ld a, [rSVBK]
push af
ld a, $3
ld [rSVBK], a
ld a, [sBTChoiceOfLevelGroup]
ld [wBTChoiceOfLvlGroup], a
pop af
ld [rSVBK], a
call CloseSRAM
ret
BattleTower_CheckSaveFileExistsAndIsYours: ; 17089a BattleTowerAction $09
ld a, [wSaveFileExists]
and a
jr z, .nope
callba CompareLoadedAndSavedPlayerID
jr z, .yes
xor a
jr .nope
.yes
ld a, $1
.nope
ld [ScriptVar], a
ret
; 1708b1
Function1708b1: ; 1708b1 (5c:48b1) BattleTowerAction $0a
xor a
ld [MusicFade], a
call MaxVolume
ret
CheckMobileEventIndex: ; 1708b9 (5c:48b9) BattleTowerAction $0b something to do with GS Ball
ld a, BANK(sMobileEventIndex)
call GetSRAMBank
ld a, [sMobileEventIndex]
ld [ScriptVar], a
call CloseSRAM
ret
Function1708c8: ; 1708c8 (5c:48c8) BattleTowerAction $0c
call UpdateTime
ld a, $5
call GetSRAMBank
ld a, [CurDay]
ld [$aa8b], a
xor a
ld [$aa8c], a
ld a, [$aa5d]
cp $2
jr nc, .asm_1708ec
ld a, [CurDay]
ld [$aa48], a
ld a, $1
ld [$aa47], a
.asm_1708ec
call CloseSRAM
ret
Function1708f0: ; 1708f0 (5c:48f0) BattleTowerAction $0d
xor a
ld [ScriptVar], a
call UpdateTime
ld a, $5
call GetSRAMBank
ld a, [$aa48]
ld c, a
ld a, [$aa47]
call CloseSRAM
and a
ret z
ld hl, CurDay
ld a, c
cp [hl]
jr nz, Function170923
ld a, $5
call GetSRAMBank
ld a, [$aa5d]
call CloseSRAM
cp $5
ret c
ld a, $1
ld [ScriptVar], a
ret
Function170923: ; 170923
ld a, $5
call GetSRAMBank
xor a
ld [$aa48], a
ld [$aa47], a
ld hl, $aa5d
ld bc, $0011
call ByteFill
call CloseSRAM
ret
; 17093c
BattleTowerAction_EggTicket: ; 17093c (5c:493c) BattleTowerAction $0e
xor a
ld [ScriptVar], a
ld a, EGG_TICKET
ld [CurItem], a
ld hl, NumItems
call CheckItem
ret nc
ld a, [PartyCount]
ld b, 0
ld c, a
ld hl, PartySpecies
.loop
ld a, [hli]
cp EGG
jr nz, .not_egg
push hl
ld hl, PartyMonOT ; wddff (aliases: PartyMonOT)
ld de, $6 ; NAME_LENGTH
ld a, b
and a
jr z, .skip
.loop2
add hl, de
dec a
jr nz, .loop2
.skip
ld de, String_1709a4
ld a, $6 ; NAME_LENGTH
.compare_loop
push af
ld a, [de]
inc de
cp [hl]
inc hl
jr nz, .different
pop af
dec a
jr nz, .compare_loop
rept 4
dec hl
endr
ld a, "@"
ld [hli], a
ld [hli], a
pop hl
ld a, EGG_TICKET
ld [CurItem], a
ld a, 1
ld [wItemQuantityChangeBuffer], a
ld a, -1
ld [CurItemQuantity], a
ld hl, NumItems
call TossItem
ld a, $1
ld [ScriptVar], a
ret
.different
pop af
pop hl
.not_egg
inc b
dec c
jr nz, .loop
ret
; 1709a4 (5c:49a4)
String_1709a4: ; 1709a4
db "なぞナゾ@@"
Function1709aa: ; 1709aa (5c:49aa) BattleTowerAction $0f
ld a, [rSVBK]
push af
ld a, BANK(w3_d090)
ld [rSVBK], a
ld a, [w3_d090]
ld [ScriptVar], a
pop af
ld [rSVBK], a
ret
Function1709bb: ; 1709bb (5c:49bb) BattleTowerAction $10
xor a
ld [ScriptVar], a
ld a, $5
call GetSRAMBank
ld a, [$a800]
call CloseSRAM
cp 6
jr nc, .invalid
ld e, a
ld d, 0
ld hl, Jumptable_1709e7
add hl, de
add hl, de
ld a, [hli]
ld h, [hl]
ld l, a
jp hl
.invalid
ld a, $5
call GetSRAMBank
xor a
ld [$a800], a
call CloseSRAM
ret
; 1709e7 (5c:49e7)
Jumptable_1709e7: ; 1709e7
dw .NoAction
dw .NoAction
dw .DoAction1
dw .DoAction1
dw .Action4
dw .Action5
; 1709f3
.DoAction1: ; 1709f3
ld a, $5
call GetSRAMBank
ld a, $1
ld [$a800], a
call CloseSRAM
.NoAction: ; 170a00
ret
; 170a01
.Action4: ; 170a01
ld a, $5
call GetSRAMBank
ld hl, $b023
ld de, wMisc
ld bc, $0069
call CopyBytes
ld a, [$a825]
ld [wcd30], a
ld a, [$a826]
ld [wcd31], a
call CloseSRAM
callba Function11b6b4
callba Function17d0f3
ld a, $1
ld [ScriptVar], a
ret
; 170a33
.Action5: ; 170a33
ld a, $0
call GetSRAMBank
ld hl, wRTC
ld de, wMisc
ld bc, $0004
call CopyBytes
call CloseSRAM
ld a, $5
call GetSRAMBank
ld hl, $b08c
ld de, wMisc
ld c, $4
.compare_loop
ld a, [de]
inc de
cp [hl]
jr nz, .different
inc hl
dec c
jr nz, .compare_loop
call CloseSRAM
ld a, [MapGroup]
ld b, a
ld a, [MapNumber]
ld c, a
call GetMapTrigger
ld a, d
or e
jr z, .no_trigger
ld a, [de]
and a
ret nz
.no_trigger
ld a, $1
ld [ScriptVar], a
ret
.different
call CloseSRAM
ld a, $5
call GetSRAMBank
xor a
ld [$a800], a
call CloseSRAM
ld [ScriptVar], a
ld a, [MapGroup]
ld b, a
ld a, [MapNumber]
ld c, a
call GetMapTrigger
ld a, d
or e
jr z, .no_trigger_2
xor a
ld [de], a
.no_trigger_2
ret
; 170a9c
Function170a9c: ; 170a9c (5c:4a9c) BattleTowerAction $11
ld c, $0
jr asm_170aa2
Function170aa0: ; 170aa0 (5c:4aa0) BattleTowerAction $12
ld c, $1
asm_170aa2: ; 170aa2 (5c:4aa2)
ld a, $5
call GetSRAMBank
ld a, c
ld [$aa8d], a
call CloseSRAM
ret
Function170aaf: ; 170aaf (5c:4aaf) BattleTowerAction $13
ld a, $5
call GetSRAMBank
ld a, [$aa8d]
ld [ScriptVar], a
call CloseSRAM
ret
Function170abe: ; 170abe (5c:4abe) BattleTowerAction $14
call BattleTower_CheckSaveFileExistsAndIsYours
ld a, [ScriptVar]
and a
ret z
ld a, BANK(s1_be4f)
call GetSRAMBank
ld a, [s1_be4f]
and $1
ld [ScriptVar], a
call CloseSRAM
ret
Function170ad7: ; 170ad7 (5c:4ad7) BattleTowerAction $15
ld a, BANK(s1_be4f)
call GetSRAMBank
ld a, [s1_be4f]
or $1
ld [s1_be4f], a
call CloseSRAM
ret
BattleTowerAction_LevelCheck: ; 170ae8 (5c:4ae8) BattleTowerAction $18
ld a, $5
call GetSRAMBank
ld a, [$b2fb]
call CloseSRAM
ld c, 10
call SimpleDivide
ld a, b
ld [wcd4f], a
xor a
ld [ScriptVar], a
callba BattleTower_LevelCheck ; level check
ret nc
ld a, $5
call GetSRAMBank
ld a, [$b2fb]
call CloseSRAM
ld [ScriptVar], a
ret
BattleTowerAction_UbersCheck: ; 170b16 (5c:4b16) BattleTowerAction $19
ld a, $5
call GetSRAMBank
ld a, [$b2fb]
call CloseSRAM
ld c, 10
call SimpleDivide
ld a, b
ld [wcd4f], a
xor a
ld [ScriptVar], a
callba BattleTower_UbersCheck
ret nc
ld a, $5
call GetSRAMBank
ld a, [$b2fb]
call CloseSRAM
ld [ScriptVar], a
ret
Function_LoadOpponentTrainerAndPokemonsWithOTSprite: ; 0x170b44
callba Function_LoadOpponentTrainerAndPokemons
ld a, [rSVBK]
push af
ld a, $3
ld [rSVBK], a
ld hl, BT_OTTrainerClass
ld a, [hl]
dec a
ld c, a
ld b, $0
pop af
ld [rSVBK], a
ld hl, .Sprites
add hl, bc
ld a, [hl]
ld [wBTTempOTSprite], a
; Load sprite of the opponent trainer
; because s/he is chosen randomly and appears out of nowhere
ld a, [ScriptVar]
dec a
sla a
ld e, a
sla a
sla a
sla a
ld c, a
ld b, 0
ld d, 0
ld hl, MapObjects
add hl, bc
inc hl
ld a, [wBTTempOTSprite]
ld [hl], a
ld hl, UsedSprites
add hl, de
ld [hli], a
ld [hUsedSpriteIndex], a
ld a, [hl]
ld [hUsedSpriteTile], a
callba GetUsedSprite
ret
; 170b90
.Sprites:
db SPRITE_FALKNER
db SPRITE_WHITNEY
db SPRITE_BUGSY
db SPRITE_MORTY
db SPRITE_PRYCE
db SPRITE_JASMINE
db SPRITE_CHUCK
db SPRITE_CLAIR
db SPRITE_SILVER
db SPRITE_OAK
db SPRITE_WILL
db SPRITE_CHRIS
db SPRITE_BRUNO
db SPRITE_KAREN
db SPRITE_KOGA
db SPRITE_LANCE
db SPRITE_BROCK
db SPRITE_MISTY
db SPRITE_SURGE
db SPRITE_SCIENTIST
db SPRITE_ERIKA
db SPRITE_YOUNGSTER
db SPRITE_YOUNGSTER
db SPRITE_YOUNGSTER
db SPRITE_LASS
db SPRITE_JANINE
db SPRITE_COOLTRAINER_M
db SPRITE_COOLTRAINER_F
db SPRITE_BUENA
db SPRITE_SUPER_NERD
db SPRITE_ROCKET
db SPRITE_GENTLEMAN
db SPRITE_BUENA
db SPRITE_TEACHER
db SPRITE_SABRINA
db SPRITE_BUG_CATCHER
db SPRITE_FISHER
db SPRITE_SUPER_NERD
db SPRITE_COOLTRAINER_F
db SPRITE_SAILOR
db SPRITE_SUPER_NERD
db SPRITE_BLUE
db SPRITE_ROCKER
db SPRITE_POKEFAN_M
db SPRITE_BIKER
db SPRITE_BLAINE
db SPRITE_PHARMACIST
db SPRITE_FISHER
db SPRITE_SUPER_NERD
db SPRITE_BLACK_BELT
db SPRITE_ROCKET
db SPRITE_YOUNGSTER
db SPRITE_LASS
db SPRITE_YOUNGSTER
db SPRITE_ROCKET_GIRL
db SPRITE_SAGE
db SPRITE_GRANNY
db SPRITE_ROCKER
db SPRITE_POKEFAN_M
db SPRITE_KIMONO_GIRL
db SPRITE_TWIN
db SPRITE_POKEFAN_F
db SPRITE_RED
db SPRITE_BLUE
db SPRITE_OFFICER
db SPRITE_ROCKET_GIRL
ret_170bd2: ; 170bd2
ret
; 170bd3
SpecialCheckForBattleTowerRules: ; 170bd3
callba CheckForBattleTowerRules
jr c, .asm_170bde
xor a
jr .asm_170be0
.asm_170bde
ld a, $1
.asm_170be0
ld [ScriptVar], a
ret
; 170be4