pokecrystal-board/engine/events/battle_tower/battle_tower.asm

1621 lines
25 KiB
NASM
Raw Normal View History

2018-06-24 07:09:41 -07:00
BattleTowerRoomMenu:
2015-12-28 14:09:53 -08:00
; special
2015-12-08 13:06:13 -08:00
call InitBattleTowerChallengeRAM
2017-12-24 09:47:30 -08:00
farcall _BattleTowerRoomMenu
ret
2018-06-24 07:09:41 -07:00
Function1700ba:
2015-12-08 13:06:13 -08:00
call InitBattleTowerChallengeRAM
2017-12-24 09:47:30 -08:00
farcall Function11811a
ret
2018-06-24 07:09:41 -07:00
Function1700c4:
ldh a, [rSVBK]
push af
2019-04-10 11:46:16 -07:00
ld a, BANK(w3_d202TrainerData) ; aka BANK(w3_dffc) and BANK(w3_d202Name)
ldh [rSVBK], a
call Function17042c
2015-11-25 07:16:29 -08:00
2019-04-10 11:46:16 -07:00
ld a, BANK(s5_be45) ; aka BANK(s5_be46) and BANK(s5_aa41) and BANK(s5_aa5d)
call GetSRAMBank
2019-04-10 11:46:16 -07:00
ld a, 1
ld [s5_be45], a
xor a
2019-04-10 11:46:16 -07:00
ld [s5_be46], a
2015-11-25 07:16:29 -08:00
ld hl, w3_dffc
2019-04-10 11:46:16 -07:00
ld de, s5_aa41
2015-12-25 20:34:33 -08:00
ld bc, 4
call CopyBytes
2015-12-25 20:34:33 -08:00
ld hl, w3_d202Name
2019-04-10 11:46:16 -07:00
ld de, s5_aa8e
ld bc, BATTLETOWER_STREAK_LENGTH * $cc ; length of battle tower struct from japanese games?
call CopyBytes
2019-04-10 11:46:16 -07:00
ld hl, s5_aa5d ; some sort of count
ld a, [hl]
inc [hl]
inc hl
sla a
sla a
ld e, a
2019-04-10 11:46:16 -07:00
ld d, 0
add hl, de
ld e, l
ld d, h
2015-11-25 07:16:29 -08:00
ld hl, w3_dffc
2015-12-25 20:34:33 -08:00
ld bc, 4
call CopyBytes
call CloseSRAM
pop af
ldh [rSVBK], a
ret
2018-06-24 07:09:41 -07:00
Function170114:
2015-12-08 13:06:13 -08:00
call InitBattleTowerChallengeRAM
2015-12-25 20:34:33 -08:00
call .Function170121
2017-12-24 09:47:30 -08:00
farcall Function11805f
ret
2018-06-24 07:09:41 -07:00
.Function170121:
2019-04-10 11:46:16 -07:00
ld a, BANK(s5_a948)
call GetSRAMBank
2019-04-10 11:46:16 -07:00
ld hl, s5_a948
ld de, wc608
2019-04-10 11:46:16 -07:00
ld bc, 246
call CopyBytes
call CloseSRAM
call Function170c8b
ret
2018-06-24 07:09:41 -07:00
Function170139:
2015-11-25 07:16:29 -08:00
; Convert the 4-digit decimal number at 5:aa41 into binary
2019-04-10 11:46:16 -07:00
ld a, BANK(s5_aa41)
call GetSRAMBank
2019-04-10 11:46:16 -07:00
ld de, s5_aa41
ld h, 0
ld l, h
2015-11-25 07:16:29 -08:00
ld bc, 1000
call .DecToBin
ld bc, 100
call .DecToBin
ld bc, 10
call .DecToBin
ld a, [de]
ld c, a
2019-04-10 11:46:16 -07:00
ld b, 0
add hl, bc
call CloseSRAM
; Store that number in wc608
ld a, h
ld [wc608], a
ld a, l
ld [wc608 + 1], a
ld hl, wBT_OTTempMon1DVs
2018-01-23 14:39:09 -08:00
ld a, [wPlayerID]
ld [hli], a
2018-01-23 14:39:09 -08:00
ld a, [wPlayerID + 1]
ld [hli], a
ld a, [wSecretID]
ld [hli], a
ld a, [wSecretID + 1]
ld [hli], a
ld e, l
ld d, h
2018-01-23 14:39:09 -08:00
ld hl, wPlayerName
2017-12-21 08:56:33 -08:00
ld bc, NAME_LENGTH_JAPANESE - 1
call CopyBytes
2018-01-23 14:39:09 -08:00
ld bc, wPlayerID
ld de, wPlayerGender
2017-12-24 09:47:30 -08:00
farcall GetMobileOTTrainerClass
ld de, wBT_OTTempMon1CaughtGender
ld a, c
ld [de], a
inc de
2018-01-23 14:39:09 -08:00
ld a, LOW(wPartyMons)
ld [wcd49], a
2018-01-23 14:39:09 -08:00
ld a, HIGH(wPartyMons)
ld [wcd4a], a
2018-01-23 14:39:09 -08:00
ld a, LOW(wPartyMonNicknames)
ld [wcd4b], a
2018-01-23 14:39:09 -08:00
ld a, HIGH(wPartyMonNicknames)
ld [wcd4c], a
2015-11-25 07:16:29 -08:00
ld a, 3
.CopyLoop:
push af
ld a, [wcd49]
ld l, a
ld a, [wcd4a]
ld h, a
2015-11-25 07:16:29 -08:00
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
2015-11-25 07:16:29 -08:00
jr nz, .CopyLoop
2019-04-10 11:46:16 -07:00
ld a, BANK(s4_a013)
call GetSRAMBank
2019-04-10 11:46:16 -07:00
ld hl, s4_a013
ld bc, 36
call CopyBytes
call CloseSRAM
2019-04-10 11:46:16 -07:00
ld a, BANK(s5_a894) ; aka BANK(s5_a948)
call GetSRAMBank
2019-04-10 11:46:16 -07:00
ld hl, s5_a894
2017-12-21 08:56:33 -08:00
ld bc, NAME_LENGTH_JAPANESE
call CopyBytes
ld hl, wc608
2019-04-10 11:46:16 -07:00
ld de, s5_a948
ld bc, 246
call CopyBytes
call CloseSRAM
ret
2018-06-24 07:09:41 -07:00
.DecToBin:
ld a, [de]
inc de
and a
ret z
2015-11-25 07:16:29 -08:00
.digit_loop
add hl, bc
dec a
2015-11-25 07:16:29 -08:00
jr nz, .digit_loop
ret
2018-06-24 07:09:41 -07:00
BattleTowerBattle:
2019-04-10 11:46:16 -07:00
xor a ; FALSE
2015-12-08 13:06:13 -08:00
ld [wBattleTowerBattleEnded], a
2015-11-07 11:38:52 -08:00
call _BattleTowerBattle
ret
2018-06-24 07:09:41 -07:00
DummySpecial_17021d:
2015-11-07 11:38:52 -08:00
ret
2018-06-24 07:09:41 -07:00
InitBattleTowerChallengeRAM:
2015-11-07 11:38:52 -08:00
xor a
2015-12-08 13:06:13 -08:00
ld [wBattleTowerBattleEnded], a
ld [wNrOfBeatenBattleTowerTrainers], a
2015-11-07 11:38:52 -08:00
ld [wcf65], a
ld [wcf66], a
ret
2018-06-24 07:09:41 -07:00
_BattleTowerBattle:
2015-11-07 11:38:52 -08:00
.loop
2015-12-26 18:59:03 -08:00
call .do_dw
2015-11-07 11:38:52 -08:00
call DelayFrame
2015-12-08 13:06:13 -08:00
ld a, [wBattleTowerBattleEnded]
2019-04-10 11:46:16 -07:00
cp TRUE
2015-11-07 11:38:52 -08:00
jr nz, .loop
ret
2018-06-24 07:09:41 -07:00
.do_dw
2015-12-08 13:06:13 -08:00
ld a, [wBattleTowerBattleEnded]
2015-11-07 11:38:52 -08:00
ld e, a
ld d, 0
2015-12-26 18:59:03 -08:00
ld hl, .dw
2015-11-07 11:38:52 -08:00
add hl, de
add hl, de
2015-11-07 11:38:52 -08:00
ld a, [hli]
ld h, [hl]
ld l, a
jp hl
2015-11-07 11:38:52 -08:00
2018-06-24 07:09:41 -07:00
.dw
2015-11-07 11:38:52 -08:00
dw RunBattleTowerTrainer
dw SkipBattleTowerTrainer
2018-06-24 07:09:41 -07:00
RunBattleTowerTrainer:
2018-01-23 14:39:09 -08:00
ld a, [wOptions]
2015-11-07 11:38:52 -08:00
push af
2018-01-23 14:39:09 -08:00
ld hl, wOptions
2015-11-07 11:38:52 -08:00
set BATTLE_SHIFT, [hl] ; SET MODE
2018-01-23 14:39:09 -08:00
ld a, [wInBattleTowerBattle]
2015-11-07 11:38:52 -08:00
push af
2019-04-10 11:46:16 -07:00
or 1
2018-01-23 14:39:09 -08:00
ld [wInBattleTowerBattle], a
2015-11-07 11:38:52 -08:00
xor a
ld [wLinkMode], a
farcall StubbedTrainerRankings_Healings
2017-12-24 09:47:30 -08:00
farcall HealParty
2015-11-07 11:38:52 -08:00
call ReadBTTrainerParty
call Clears5_a89a
predef StartBattle
2017-12-24 09:47:30 -08:00
farcall LoadPokemonData
farcall HealParty
2015-11-07 11:38:52 -08:00
ld a, [wBattleResult]
2018-01-23 14:39:09 -08:00
ld [wScriptVar], a
2018-04-05 08:44:02 -07:00
and a ; WIN?
2015-11-07 11:38:52 -08:00
jr nz, .lost
ld a, BANK(sNrOfBeatenBattleTowerTrainers)
call GetSRAMBank
ld a, [sNrOfBeatenBattleTowerTrainers]
2015-12-08 13:06:13 -08:00
ld [wNrOfBeatenBattleTowerTrainers], a
2015-11-07 11:38:52 -08:00
call CloseSRAM
2018-01-23 14:39:09 -08:00
ld hl, wStringBuffer3
2015-12-08 13:06:13 -08:00
ld a, [wNrOfBeatenBattleTowerTrainers]
2015-11-07 11:38:52 -08:00
add "1"
ld [hli], a
ld a, "@"
ld [hl], a
.lost
pop af
2018-01-23 14:39:09 -08:00
ld [wInBattleTowerBattle], a
2015-11-07 11:38:52 -08:00
pop af
2018-01-23 14:39:09 -08:00
ld [wOptions], a
2019-04-10 11:46:16 -07:00
ld a, TRUE
2015-12-08 13:06:13 -08:00
ld [wBattleTowerBattleEnded], a
2015-11-07 11:38:52 -08:00
ret
2018-06-24 07:09:41 -07:00
ReadBTTrainerParty:
; Initialise the BattleTower-Trainer and his mon
2015-11-07 11:38:52 -08:00
call CopyBTTrainer_FromBT_OT_TowBT_OTTemp
; Check the nicknames for illegal characters, and replace bad nicknames
; with their species names.
2018-07-15 04:18:28 -07:00
ld de, wBT_OTTempMon1Name
2018-01-20 09:25:55 -08:00
ld c, MON_NAME_LENGTH
2017-12-24 09:47:30 -08:00
farcall CheckStringForErrors
2015-11-07 11:38:52 -08:00
jr nc, .skip_mon_1
ld a, [wBT_OTTempMon1]
2015-11-07 11:38:52 -08:00
ld [wNamedObjectIndexBuffer], a
call GetPokemonName
ld l, e
ld h, d
2018-07-15 04:18:28 -07:00
ld de, wBT_OTTempMon1Name
2018-01-20 09:25:55 -08:00
ld bc, MON_NAME_LENGTH
2015-11-07 11:38:52 -08:00
call CopyBytes
.skip_mon_1
2018-07-15 04:18:28 -07:00
ld de, wBT_OTTempMon2Name
2018-01-20 09:25:55 -08:00
ld c, MON_NAME_LENGTH
2017-12-24 09:47:30 -08:00
farcall CheckStringForErrors
2015-11-07 11:38:52 -08:00
jr nc, .skip_mon_2
2018-07-15 04:18:28 -07:00
ld a, [wBT_OTTempMon2]
2015-11-07 11:38:52 -08:00
ld [wNamedObjectIndexBuffer], a
call GetPokemonName
ld l, e
ld h, d
2018-07-15 04:18:28 -07:00
ld de, wBT_OTTempMon2Name
2018-01-20 09:25:55 -08:00
ld bc, MON_NAME_LENGTH
2015-11-07 11:38:52 -08:00
call CopyBytes
.skip_mon_2
2018-07-15 04:18:28 -07:00
ld de, wBT_OTTempMon3Name
2018-01-20 09:25:55 -08:00
ld c, MON_NAME_LENGTH
2017-12-24 09:47:30 -08:00
farcall CheckStringForErrors
2015-11-07 11:38:52 -08:00
jr nc, .skip_mon_3
2018-07-15 04:18:28 -07:00
ld a, [wBT_OTTempMon3]
2015-11-07 11:38:52 -08:00
ld [wNamedObjectIndexBuffer], a
call GetPokemonName
ld l, e
ld h, d
2018-07-15 04:18:28 -07:00
ld de, wBT_OTTempMon3Name
2018-01-20 09:25:55 -08:00
ld bc, MON_NAME_LENGTH
2015-11-07 11:38:52 -08:00
call CopyBytes
.skip_mon_3
; Add the terminator character to each of these names
ld a, "@"
2018-07-15 04:18:28 -07:00
ld [wBT_OTTempMon1NameEnd - 1], a
ld [wBT_OTTempMon2NameEnd - 1], a
ld [wBT_OTTempMon3NameEnd - 1], a
2015-11-07 11:38:52 -08:00
; Fix errors in the movesets
call CheckBTMonMovesForErrors
2018-01-23 14:39:09 -08:00
; Repair the trainer name if needed, then copy it to wOTPlayerName
2015-11-07 11:38:52 -08:00
ld de, wBT_OTTempName
ld c, NAME_LENGTH - 1
2017-12-24 09:47:30 -08:00
farcall CheckStringForErrors
2015-11-07 11:38:52 -08:00
jr nc, .trainer_name_okay
ld hl, BT_ChrisName
jr .done_trainer_name
.trainer_name_okay
ld hl, wBT_OTTempName
2015-11-07 11:38:52 -08:00
.done_trainer_name
2018-01-23 14:39:09 -08:00
ld de, wOTPlayerName
2015-11-07 11:38:52 -08:00
ld bc, NAME_LENGTH - 1
call CopyBytes
ld a, "@"
ld [de], a
ld hl, wBT_OTTempTrainerClass
ld a, [hli]
2018-01-23 14:39:09 -08:00
ld [wOtherTrainerClass], a
ld a, LOW(wOTPartyMonNicknames)
ld [wBGMapBuffer], a
ld a, HIGH(wOTPartyMonNicknames)
ld [wBGMapBuffer + 1], a
2015-11-07 11:38:52 -08:00
; Copy mon into Memory from the address in hl
2018-01-23 14:39:09 -08:00
ld de, wOTPartyMon1Species
ld bc, wOTPartyCount
2018-01-20 09:25:55 -08:00
ld a, BATTLETOWER_PARTY_LENGTH
2015-11-07 11:38:52 -08:00
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
2018-01-23 14:39:09 -08:00
ld a, [wBGMapBuffer]
2015-11-07 11:38:52 -08:00
ld e, a
2018-01-23 14:39:09 -08:00
ld a, [wBGMapBuffer + 1]
2015-11-07 11:38:52 -08:00
ld d, a
2018-01-20 09:25:55 -08:00
ld bc, MON_NAME_LENGTH
2015-11-07 11:38:52 -08:00
call CopyBytes
ld a, e
2018-01-23 14:39:09 -08:00
ld [wBGMapBuffer], a
2015-11-07 11:38:52 -08:00
ld a, d
2018-01-23 14:39:09 -08:00
ld [wBGMapBuffer + 1], a
2015-11-07 11:38:52 -08:00
pop de
pop bc
pop af
dec a
and a
jr nz, .otpartymon_loop
ld a, -1
ld [bc], a
ret
2018-06-24 07:09:41 -07:00
ValidateBTParty:
2015-11-07 18:04:54 -08:00
; Check for and fix errors in party data
ld hl, wBT_OTTempMon1Species
2018-01-20 09:25:55 -08:00
ld d, BATTLETOWER_PARTY_LENGTH
2015-11-07 18:04:54 -08:00
.pkmn_loop
2015-11-07 11:38:52 -08:00
push de
push hl
ld b, h
ld c, l
ld a, [hl]
and a
2018-01-23 07:56:36 -08:00
x = $ff
rept ($ff + -NUM_POKEMON)
2015-11-07 18:04:54 -08:00
jr z, .invalid
2018-01-23 07:56:36 -08:00
cp x
x = x + -1
2015-11-07 18:04:54 -08:00
endr
jr nz, .valid
2015-11-07 11:38:52 -08:00
2015-11-07 18:04:54 -08:00
.invalid
ld a, SMEARGLE
2015-11-07 11:38:52 -08:00
ld [hl], a
2015-11-07 18:04:54 -08:00
.valid
2018-01-23 14:39:09 -08:00
ld [wCurSpecies], a
2015-11-07 11:38:52 -08:00
call GetBaseData
2019-04-10 11:46:16 -07:00
ld a, BANK(s5_b2fb)
2015-11-07 11:38:52 -08:00
call GetSRAMBank
2019-04-10 11:46:16 -07:00
ld a, [s5_b2fb] ; s5_b2fb ; max level?
2015-11-07 11:38:52 -08:00
call CloseSRAM
ld e, a
2015-11-07 18:04:54 -08:00
ld hl, MON_LEVEL
2015-11-07 11:38:52 -08:00
add hl, bc
ld a, [hl]
2015-11-07 18:04:54 -08:00
cp MIN_LEVEL
ld a, MIN_LEVEL
jr c, .load
2015-11-07 11:38:52 -08:00
ld a, [hl]
cp e
2015-11-07 18:04:54 -08:00
jr c, .dont_load
2015-11-07 11:38:52 -08:00
ld a, e
2015-11-07 18:04:54 -08:00
.load
2015-11-07 11:38:52 -08:00
ld [hl], a
2015-11-07 18:04:54 -08:00
.dont_load
2018-01-23 14:39:09 -08:00
ld [wCurPartyLevel], a
2015-11-07 18:04:54 -08:00
ld hl, MON_MOVES
2015-11-07 11:38:52 -08:00
add hl, bc
2015-11-07 18:04:54 -08:00
ld d, NUM_MOVES - 1
2015-11-07 11:38:52 -08:00
ld a, [hli]
and a
2015-11-07 18:04:54 -08:00
jr z, .not_move
cp NUM_ATTACKS + 1
jr nc, .not_move
jr .valid_move
2015-11-07 11:38:52 -08:00
2015-11-07 18:04:54 -08:00
.not_move
2015-11-07 11:38:52 -08:00
dec hl
2015-11-07 18:04:54 -08:00
ld a, POUND
2015-11-07 11:38:52 -08:00
ld [hli], a
xor a
ld [hli], a
ld [hli], a
2015-11-07 11:38:52 -08:00
ld [hl], a
2015-11-07 18:04:54 -08:00
jr .done_moves
2015-11-07 11:38:52 -08:00
2015-11-07 18:04:54 -08:00
.valid_move
2015-11-07 11:38:52 -08:00
ld a, [hl]
2015-11-07 18:04:54 -08:00
cp NUM_ATTACKS + 1
jr c, .next
2015-11-07 11:38:52 -08:00
ld [hl], $0
2015-11-07 18:04:54 -08:00
.next
2015-11-07 11:38:52 -08:00
inc hl
dec d
2015-11-07 18:04:54 -08:00
jr nz, .valid_move
2015-11-07 11:38:52 -08:00
2015-11-07 18:04:54 -08:00
.done_moves
ld hl, MON_MAXHP
2015-11-07 11:38:52 -08:00
add hl, bc
ld d, h
ld e, l
push hl
push de
2015-12-21 11:10:16 -08:00
ld hl, MON_STAT_EXP - 1
2015-11-07 11:38:52 -08:00
add hl, bc
ld b, TRUE
predef CalcMonStats
2015-11-07 11:38:52 -08:00
pop de
pop hl
dec de
dec de
2015-11-07 11:38:52 -08:00
ld a, [hli]
ld [de], a
inc de
ld a, [hl]
ld [de], a
pop hl
ld bc, NICKNAMED_MON_STRUCT_LENGTH
2015-11-07 11:38:52 -08:00
add hl, bc
pop de
dec d
2015-11-07 18:04:54 -08:00
jp nz, .pkmn_loop
2015-11-07 11:38:52 -08:00
ret
2018-06-24 07:09:41 -07:00
BT_ChrisName:
2015-11-07 11:38:52 -08:00
db "CHRIS@"
2018-06-24 07:09:41 -07:00
Function17042c:
ld hl, w3_d202TrainerData
2018-01-20 09:25:55 -08:00
ld a, BATTLETOWER_STREAK_LENGTH
.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
2015-11-25 07:16:29 -08:00
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
INCLUDE "data/battle_tower/unknown_levels.asm"
2018-06-24 07:09:41 -07:00
CopyBTTrainer_FromBT_OT_TowBT_OTTemp:
2018-01-23 14:39:09 -08:00
; copy the BattleTower-Trainer data that lies at 'wBT_OTTrainer' to 'wBT_OTTemp'
ldh a, [rSVBK]
push af
2018-01-23 14:39:09 -08:00
ld a, BANK(wBT_OTTrainer)
ldh [rSVBK], a
2018-01-23 14:39:09 -08:00
ld hl, wBT_OTTrainer
2017-12-23 08:34:55 -08:00
ld de, wBT_OTTemp
ld bc, BATTLE_TOWER_STRUCT_LENGTH
call CopyBytes
pop af
ldh [rSVBK], a
ld a, BANK(sBattleTowerChallengeState)
call GetSRAMBank
2015-11-26 18:05:32 -08:00
ld a, BATTLETOWER_CHALLENGE_IN_PROGESS
ld [sBattleTowerChallengeState], a
ld hl, sNrOfBeatenBattleTowerTrainers
inc [hl]
call CloseSRAM
2018-06-24 07:09:41 -07:00
SkipBattleTowerTrainer:
ret
2015-11-25 07:16:29 -08:00
2018-06-24 07:09:41 -07:00
Unreferenced_Function1704ca:
ld a, [s5_be46]
cp BATTLETOWER_STREAK_LENGTH
jr c, .not_max
ld a, BATTLETOWER_STREAK_LENGTH - 1
.not_max
ld hl, s5_aa8e + BATTLE_TOWER_STRUCT_LENGTH * (BATTLETOWER_STREAK_LENGTH - 1)
ld de, -BATTLE_TOWER_STRUCT_LENGTH
.loop
and a
jr z, .done
add hl, de
dec a
jr .loop
.done
ret
2018-06-24 07:09:41 -07:00
Function1704e1:
2019-04-08 05:15:10 -07:00
call SpeechTextbox
call FadeToMenu
2015-12-08 13:06:13 -08:00
call InitBattleTowerChallengeRAM
2015-11-25 07:16:29 -08:00
call .JumptableLoop
call CloseSubmenu
ret
2018-06-24 07:09:41 -07:00
.JumptableLoop:
call ClearBGPalettes
call ClearSprites
call ClearScreen
2015-11-25 07:16:29 -08:00
.loop
call JoyTextDelay
ld a, [wJumptableIndex]
bit 7, a
2015-11-25 07:16:29 -08:00
jr nz, .done
call .DoJumptable
2017-12-24 09:47:30 -08:00
farcall ReloadMapPart
2015-11-25 07:16:29 -08:00
jr .loop
2015-11-25 07:16:29 -08:00
.done
ret
2018-06-24 07:09:41 -07:00
.DoJumptable:
ld a, [wJumptableIndex]
ld e, a
ld d, 0
2015-12-26 18:59:03 -08:00
ld hl, .dw
add hl, de
add hl, de
ld a, [hli]
ld h, [hl]
ld l, a
jp hl
2018-06-24 07:09:41 -07:00
.dw
2015-11-25 07:16:29 -08:00
dw .Jumptable_0
dw .Jumptable_1
dw .Jumptable_2
2018-06-24 07:09:41 -07:00
.Jumptable_0:
2019-04-10 11:46:16 -07:00
ld a, BANK(s5_a89c)
call GetSRAMBank
2019-04-10 11:46:16 -07:00
ld hl, s5_a89c
2018-01-23 14:39:09 -08:00
ld de, wStringBuffer3
2019-04-10 11:46:16 -07:00
ld bc, 22
call CopyBytes
2019-04-10 11:46:16 -07:00
ld hl, s5_a8b2
ld de, wc608
2019-04-10 11:46:16 -07:00
ld bc, 150
call CopyBytes
call CloseSRAM
hlcoord 1, 1
2018-01-23 14:39:09 -08:00
ld de, wStringBuffer3
call PlaceString
hlcoord 1, 3
2015-11-25 07:16:29 -08:00
ld de, .String_Mail
call PlaceString
hlcoord 4, 3
2018-01-23 14:39:09 -08:00
ld de, wStringBuffer4
call PlaceString
hlcoord 8, 3
2015-11-25 07:16:29 -08:00
ld de, .String_PastReaders
call PlaceString
2015-11-25 07:16:29 -08:00
call .DrawBorder
call .PlaceTextItems
jr .NextJumptableFunction
2015-11-25 07:16:29 -08:00
.Jumptable_1:
call SetPalettes
2015-11-25 07:16:29 -08:00
call .NextJumptableFunction
2015-11-25 07:16:29 -08:00
.Jumptable_2:
ld hl, hJoyPressed
ld a, [hl]
2015-11-25 07:16:29 -08:00
and A_BUTTON
jr nz, .pressed_a_or_b
ld a, [hl]
2015-11-25 07:16:29 -08:00
and B_BUTTON
jr nz, .pressed_a_or_b
ld a, [hl]
2015-11-25 07:16:29 -08:00
and D_UP
jr nz, .pressed_up
ld a, [hl]
2015-11-25 07:16:29 -08:00
and D_DOWN
jr nz, .pressed_down
ret
2015-11-25 07:16:29 -08:00
.pressed_up
2015-12-08 13:06:13 -08:00
ld a, [wNrOfBeatenBattleTowerTrainers]
and a
ret z
2015-11-25 07:16:29 -08:00
sub 15
2015-12-08 13:06:13 -08:00
ld [wNrOfBeatenBattleTowerTrainers], a
2015-11-25 07:16:29 -08:00
call .PlaceTextItems
ret
2015-11-25 07:16:29 -08:00
.pressed_down
2015-12-08 13:06:13 -08:00
ld a, [wNrOfBeatenBattleTowerTrainers]
2015-11-25 07:16:29 -08:00
cp 60
ret z
2015-11-25 07:16:29 -08:00
add 15
2015-12-08 13:06:13 -08:00
ld [wNrOfBeatenBattleTowerTrainers], a
2015-11-25 07:16:29 -08:00
call .PlaceTextItems
ret
2015-11-25 07:16:29 -08:00
.pressed_a_or_b
ld hl, wJumptableIndex
set 7, [hl]
ret
2015-11-25 07:16:29 -08:00
.NextJumptableFunction:
ld hl, wJumptableIndex
inc [hl]
ret
2018-06-24 07:09:41 -07:00
.DrawBorder:
hlcoord 0, 4
2018-01-11 18:14:35 -08:00
ld a, "┌"
ld [hli], a
2015-11-25 07:16:29 -08:00
ld c, SCREEN_WIDTH - 2
.top_border_loop
2018-01-11 18:14:35 -08:00
ld a, "─"
ld [hli], a
dec c
2015-11-25 07:16:29 -08:00
jr nz, .top_border_loop
2018-01-11 18:14:35 -08:00
ld a, "┐"
ld [hli], a
2015-11-25 07:16:29 -08:00
ld de, SCREEN_WIDTH
ld c, 12
.left_border_loop
2018-01-11 18:14:35 -08:00
ld a, "│"
ld [hl], a
add hl, de
dec c
2015-11-25 07:16:29 -08:00
jr nz, .left_border_loop
2018-01-11 18:14:35 -08:00
ld a, "└"
ld [hli], a
2015-11-25 07:16:29 -08:00
ld c, SCREEN_WIDTH - 2
.bottom_border_loop
2018-01-11 18:14:35 -08:00
ld a, "─"
ld [hli], a
dec c
2015-11-25 07:16:29 -08:00
jr nz, .bottom_border_loop
2018-01-11 18:14:35 -08:00
ld a, "┘"
ld [hl], a
2015-11-25 07:16:29 -08:00
ld de, -SCREEN_WIDTH
add hl, de
2015-11-25 07:16:29 -08:00
ld c, 12
.right_border_loop
2018-01-11 18:14:35 -08:00
ld a, "│"
ld [hl], a
add hl, de
dec c
2015-11-25 07:16:29 -08:00
jr nz, .right_border_loop
ret
2018-06-24 07:09:41 -07:00
.PlaceTextItems:
2015-11-25 07:16:29 -08:00
call .ClearBox
call .PlaceUpDownArrows
ld a, $50
ld [wcd4e], a
ld hl, wc608
2015-12-08 13:06:13 -08:00
ld a, [wNrOfBeatenBattleTowerTrainers]
ld c, a
xor a
ld b, a
add hl, bc
push hl
pop bc
hlcoord 1, 6
2015-11-25 07:16:29 -08:00
ld a, 6
.loop1
push af
push hl
2015-11-25 07:16:29 -08:00
ld a, 3
.loop2
push af
ld de, wcd49
ld a, [bc]
and a
2015-11-25 07:16:29 -08:00
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
2015-11-25 07:16:29 -08:00
jr nz, .loop3a
jr .rejoin
2015-11-25 07:16:29 -08:00
.fill_with_e3
ld a, 5
.loop3b
push af
ld a, $e3
ld [de], a
inc de
inc bc
pop af
dec a
2015-11-25 07:16:29 -08:00
jr nz, .loop3b
2015-11-25 07:16:29 -08:00
.rejoin
ld de, wcd49
push bc
call PlaceString
2017-12-21 08:56:33 -08:00
ld de, NAME_LENGTH_JAPANESE
add hl, de
pop bc
pop af
dec a
2015-11-25 07:16:29 -08:00
jr nz, .loop2
pop hl
2015-11-25 07:16:29 -08:00
ld de, $28
add hl, de
pop af
dec a
2015-11-25 07:16:29 -08:00
jr nz, .loop1
ret
2018-06-24 07:09:41 -07:00
.ClearBox:
hlcoord 1, 5
xor a
2015-11-25 07:16:29 -08:00
ld b, 12
.clearbox_row
ld c, SCREEN_WIDTH - 2
.clearbox_column
ld [hli], a
dec c
2015-11-25 07:16:29 -08:00
jr nz, .clearbox_column
inc hl
inc hl
dec b
2015-11-25 07:16:29 -08:00
jr nz, .clearbox_row
ret
2018-06-24 07:09:41 -07:00
.PlaceUpDownArrows:
2015-12-08 13:06:13 -08:00
ld a, [wNrOfBeatenBattleTowerTrainers]
and a
2015-11-25 07:16:29 -08:00
jr z, .nope
hlcoord 18, 5
2015-11-25 07:16:29 -08:00
ld a, "▲"
ld [hl], a
2015-11-25 07:16:29 -08:00
.nope
2015-12-08 13:06:13 -08:00
ld a, [wNrOfBeatenBattleTowerTrainers]
2015-11-25 07:16:29 -08:00
cp 60
ret z
hlcoord 18, 16
2015-11-25 07:16:29 -08:00
ld a, "▼"
ld [hl], a
ret
2018-06-24 07:09:41 -07:00
.String_Mail:
db "ルーム@"
2018-06-24 07:09:41 -07:00
.String_PastReaders:
db "れきだいりーダーいちらん@"
2018-06-24 07:09:41 -07:00
BattleTowerAction:
2018-01-23 14:39:09 -08:00
ld a, [wScriptVar]
ld e, a
ld d, 0
2015-12-26 18:59:03 -08:00
ld hl, .dw
add hl, de
add hl, de
ld a, [hli]
ld h, [hl]
ld l, a
jp hl
2018-06-24 07:09:41 -07:00
.dw
2019-04-10 11:46:16 -07:00
dw BattleTowerAction_CheckExplanationRead
dw BattleTowerAction_SetExplanationRead
dw BattleTowerAction_GetChallengeState
dw BattleTowerAction_SetByteToQuickSaveChallenge
dw BattleTowerAction_SetByteToCancelChallenge
dw Function1707ac
dw Function1707f4
dw SaveBattleTowerLevelGroup
dw LoadBattleTowerLevelGroup
dw BattleTower_CheckSaveFileExistsAndIsYours
dw Function1708b1
dw CheckMobileEventIndex
dw Function1708c8
dw Function1708f0
dw BattleTowerAction_EggTicket
dw Function1709aa
dw Function1709bb
dw Function170a9c
dw Function170aa0
dw Function170aaf
dw Function170abe
dw Function170ad7
dw Function170807
dw Function17081d
dw BattleTowerAction_LevelCheck
dw BattleTowerAction_UbersCheck
dw ResetBattleTowerTrainersSRAM
dw BattleTower_GiveReward
dw Function17071b
dw Function170729
dw BattleTower_RandomlyChooseReward
dw BattleTower_SaveOptions
; Reset the save memory for BattleTower-Trainers (Counter and all 7 TrainerBytes)
2019-04-10 11:46:16 -07:00
ResetBattleTowerTrainersSRAM:
ld a, BANK(sBTTrainers)
call GetSRAMBank
ld a, $ff
ld hl, sBTTrainers
2018-01-20 09:25:55 -08:00
ld bc, BATTLETOWER_STREAK_LENGTH
call ByteFill
xor a
ld [sNrOfBeatenBattleTowerTrainers], a
call CloseSRAM
ret
2019-04-10 11:46:16 -07:00
BattleTower_GiveReward:
ld a, BANK(sBattleTowerReward)
call GetSRAMBank
ld a, [sBattleTowerReward]
call CloseSRAM
2018-01-23 14:39:09 -08:00
ld [wScriptVar], a
ld hl, wNumItems
ld a, [hli]
cp MAX_ITEMS
ret c
ld b, MAX_ITEMS
2018-01-23 14:39:09 -08:00
ld a, [wScriptVar]
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
2018-01-23 14:39:09 -08:00
ld [wScriptVar], a
ret
2019-04-10 11:46:16 -07:00
Function17071b:
ld a, BANK(sBattleTowerChallengeState)
call GetSRAMBank
2015-11-26 18:05:32 -08:00
ld a, BATTLETOWER_WON_CHALLENGE
ld [sBattleTowerChallengeState], a
call CloseSRAM
ret
2019-04-10 11:46:16 -07:00
Function170729:
ld a, BANK(sBattleTowerChallengeState)
call GetSRAMBank
2015-11-26 18:05:32 -08:00
ld a, BATTLETOWER_RECEIVED_REWARD
ld [sBattleTowerChallengeState], a
call CloseSRAM
ret
2019-04-10 11:46:16 -07:00
BattleTower_SaveOptions:
2017-12-24 09:47:30 -08:00
farcall SaveOptions
ret
2019-04-10 11:46:16 -07:00
BattleTower_RandomlyChooseReward:
; Generate a random stat boosting item.
.loop
call Random
ldh 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
2019-04-10 11:46:16 -07:00
BattleTowerAction_CheckExplanationRead:
2015-11-26 18:05:32 -08:00
call BattleTower_CheckSaveFileExistsAndIsYours
2018-01-23 14:39:09 -08:00
ld a, [wScriptVar]
and a
ret z
ld a, BANK(sBattleTowerSaveFileFlags)
call GetSRAMBank
ld a, [sBattleTowerSaveFileFlags]
2019-04-10 11:46:16 -07:00
and 2
2018-01-23 14:39:09 -08:00
ld [wScriptVar], a
call CloseSRAM
ret
2019-04-10 11:46:16 -07:00
BattleTowerAction_GetChallengeState:
ld hl, sBattleTowerChallengeState
ld a, BANK(sBattleTowerChallengeState)
call GetSRAMBank
ld a, [hl]
2018-01-23 14:39:09 -08:00
ld [wScriptVar], a
call CloseSRAM
ret
2019-04-10 11:46:16 -07:00
BattleTowerAction_SetExplanationRead:
ld a, BANK(sBattleTowerSaveFileFlags)
call GetSRAMBank
ld a, [sBattleTowerSaveFileFlags]
2019-04-10 11:46:16 -07:00
or 2
ld [sBattleTowerSaveFileFlags], a
call CloseSRAM
ret
2019-04-10 11:46:16 -07:00
BattleTowerAction_SetByteToQuickSaveChallenge:
2015-11-26 18:05:32 -08:00
ld c, BATTLETOWER_SAVED_AND_LEFT
jr asm_17079f
2019-04-10 11:46:16 -07:00
BattleTowerAction_SetByteToCancelChallenge:
2015-11-26 18:05:32 -08:00
ld c, BATTLETOWER_NO_CHALLENGE
2018-06-24 07:09:41 -07:00
asm_17079f:
ld a, BANK(sBattleTowerChallengeState)
call GetSRAMBank
ld a, c
ld [sBattleTowerChallengeState], a
call CloseSRAM
ret
2019-04-10 11:46:16 -07:00
Function1707ac:
ld a, BANK(s5_aa8c) ; aka BANK(s5_be46)
call GetSRAMBank
2019-04-10 11:46:16 -07:00
ld a, [s5_aa8c]
ld b, a
2019-04-10 11:46:16 -07:00
ld a, [s5_be46]
2018-01-23 14:39:09 -08:00
ld [wScriptVar], a
call CloseSRAM
and a
ret z
ld a, b
2019-04-10 11:46:16 -07:00
cp 2
jr nc, .asm_1707ef
push bc
call UpdateTime
pop bc
2019-04-10 11:46:16 -07:00
ld a, BANK(s5_aa8c)
call GetSRAMBank
2019-04-10 11:46:16 -07:00
ld a, [s5_aa8b]
call CloseSRAM
ld c, a
2018-01-23 14:39:09 -08:00
ld a, [wCurDay]
sub c
jr c, .asm_1707e5
2019-04-10 11:46:16 -07:00
cp 8
jr nc, .asm_1707ef
ld a, b
and a
jr nz, .asm_1707ef
ret
.asm_1707e5
2018-01-23 14:39:09 -08:00
ld hl, wCurDay
ld a, $8c
sub c
add [hl]
2019-04-10 11:46:16 -07:00
cp 8
ret c
.asm_1707ef
2019-04-10 11:46:16 -07:00
ld a, 8
2018-01-23 14:39:09 -08:00
ld [wScriptVar], a
2019-04-10 11:46:16 -07:00
Function1707f4:
ld a, BANK(s5_be46) ; aka BANK(s5_aa8b) and BANK(s5_aa8c)
call GetSRAMBank
xor a
2019-04-10 11:46:16 -07:00
ld [s5_be46], a
ld [s5_aa8b], a
ld [s5_aa8c], a
call CloseSRAM
ret
2019-04-10 11:46:16 -07:00
Function170807:
call UpdateTime
2019-04-10 11:46:16 -07:00
ld a, BANK(s5_b2f9) ; aka BANK(s5_b2fa)
call GetSRAMBank
2018-01-23 14:39:09 -08:00
ld a, [wCurDay]
2019-04-10 11:46:16 -07:00
ld [s5_b2f9], a
xor a
2019-04-10 11:46:16 -07:00
ld [s5_b2fa], a
call CloseSRAM
ret
2019-04-10 11:46:16 -07:00
Function17081d:
xor a
2018-01-23 14:39:09 -08:00
ld [wScriptVar], a
2019-04-10 11:46:16 -07:00
ld a, BANK(s5_b2f9) ; aka BANK(s5_b2fa)
call GetSRAMBank
2019-04-10 11:46:16 -07:00
ld a, [s5_b2f9]
ld c, a
2019-04-10 11:46:16 -07:00
ld a, [s5_b2fa]
ld b, a
call CloseSRAM
2019-04-10 11:46:16 -07:00
cp 2
jr nc, .asm_170853
push bc
call UpdateTime
pop bc
2018-01-23 14:39:09 -08:00
ld a, [wCurDay]
sub c
jr c, .asm_170849
2019-04-10 11:46:16 -07:00
cp 11
jr nc, .asm_170853
ld a, b
and a
jr nz, .asm_170853
ret
2015-11-26 18:05:32 -08:00
.asm_170849
2018-01-23 14:39:09 -08:00
ld hl, wCurDay
2015-11-26 18:05:32 -08:00
ld a, 140
sub c
add [hl]
2019-04-10 11:46:16 -07:00
cp 11
ret c
.asm_170853
2019-04-10 11:46:16 -07:00
ld a, 1
2018-01-23 14:39:09 -08:00
ld [wScriptVar], a
2019-04-10 11:46:16 -07:00
ld a, BANK(s5_b2f9) ; aka BANK(s5_b2fa)
call GetSRAMBank
xor a
2019-04-10 11:46:16 -07:00
ld [s5_b2f9], a
ld [s5_b2fa], a
call CloseSRAM
ret
2019-04-10 11:46:16 -07:00
SaveBattleTowerLevelGroup:
2015-11-26 18:05:32 -08:00
ld a, BANK(sBTChoiceOfLevelGroup)
call GetSRAMBank
ldh a, [rSVBK]
push af
2019-04-10 11:46:16 -07:00
ld a, BANK(wBTChoiceOfLvlGroup)
ldh [rSVBK], a
2015-11-26 18:05:32 -08:00
ld a, [wBTChoiceOfLvlGroup]
ld [sBTChoiceOfLevelGroup], a
pop af
ldh [rSVBK], a
call CloseSRAM
ret
2019-04-10 11:46:16 -07:00
LoadBattleTowerLevelGroup: ; Load level group choice
2015-11-26 18:05:32 -08:00
ld a, BANK(sBTChoiceOfLevelGroup)
call GetSRAMBank
ldh a, [rSVBK]
push af
2019-04-10 11:46:16 -07:00
ld a, BANK(wBTChoiceOfLvlGroup)
ldh [rSVBK], a
2015-11-26 18:05:32 -08:00
ld a, [sBTChoiceOfLevelGroup]
ld [wBTChoiceOfLvlGroup], a
pop af
ldh [rSVBK], a
call CloseSRAM
ret
2019-04-10 11:46:16 -07:00
BattleTower_CheckSaveFileExistsAndIsYours:
ld a, [wSaveFileExists]
and a
jr z, .nope
2017-12-24 09:47:30 -08:00
farcall CompareLoadedAndSavedPlayerID
jr z, .yes
2019-04-10 11:46:16 -07:00
xor a ; FALSE
jr .nope
.yes
2019-04-10 11:46:16 -07:00
ld a, TRUE
.nope
2018-01-23 14:39:09 -08:00
ld [wScriptVar], a
ret
2018-06-24 07:09:41 -07:00
Function1708b1: ; BattleTowerAction $0a
xor a
2018-01-23 14:39:09 -08:00
ld [wMusicFade], a
call MaxVolume
ret
2018-06-24 07:09:41 -07:00
CheckMobileEventIndex: ; BattleTowerAction $0b something to do with GS Ball
ld a, BANK(sMobileEventIndex)
call GetSRAMBank
ld a, [sMobileEventIndex]
2018-01-23 14:39:09 -08:00
ld [wScriptVar], a
call CloseSRAM
ret
2018-06-24 07:09:41 -07:00
Function1708c8: ; BattleTowerAction $0c
call UpdateTime
2019-04-10 11:46:16 -07:00
ld a, BANK(s5_aa8b) ; aka BANK(s5_aa8c) and BANK(s5_aa5d) and BANK(s5_aa48) and BANK(s5_aa47)
call GetSRAMBank
2018-01-23 14:39:09 -08:00
ld a, [wCurDay]
2019-04-10 11:46:16 -07:00
ld [s5_aa8b], a
xor a
2019-04-10 11:46:16 -07:00
ld [s5_aa8c], a
ld a, [s5_aa5d]
cp 2
jr nc, .asm_1708ec
2018-01-23 14:39:09 -08:00
ld a, [wCurDay]
2019-04-10 11:46:16 -07:00
ld [s5_aa48], a
ld a, 1
ld [s5_aa47], a
.asm_1708ec
call CloseSRAM
ret
2018-06-24 07:09:41 -07:00
Function1708f0: ; BattleTowerAction $0d
2019-04-10 11:46:16 -07:00
xor a ; FALSE
2018-01-23 14:39:09 -08:00
ld [wScriptVar], a
call UpdateTime
2019-04-10 11:46:16 -07:00
ld a, BANK(s5_aa48) ; aka BANK(s5_aa47)
call GetSRAMBank
2019-04-10 11:46:16 -07:00
ld a, [s5_aa48]
ld c, a
2019-04-10 11:46:16 -07:00
ld a, [s5_aa47]
call CloseSRAM
and a
ret z
2018-01-23 14:39:09 -08:00
ld hl, wCurDay
ld a, c
cp [hl]
jr nz, Function170923
2019-04-10 11:46:16 -07:00
ld a, BANK(s5_aa5d)
call GetSRAMBank
2019-04-10 11:46:16 -07:00
ld a, [s5_aa5d]
call CloseSRAM
2019-04-10 11:46:16 -07:00
cp 5
ret c
2019-04-10 11:46:16 -07:00
ld a, TRUE
2018-01-23 14:39:09 -08:00
ld [wScriptVar], a
ret
2018-06-24 07:09:41 -07:00
Function170923:
2019-04-10 11:46:16 -07:00
ld a, BANK(s5_aa48) ; aka BANK(s5_aa47) and BANK(s5_aa5d)
call GetSRAMBank
xor a
2019-04-10 11:46:16 -07:00
ld [s5_aa48], a
ld [s5_aa47], a
ld hl, s5_aa5d
ld bc, MOBILE_LOGIN_PASSWORD_LENGTH
call ByteFill
call CloseSRAM
ret
2018-06-24 07:09:41 -07:00
BattleTowerAction_EggTicket: ; BattleTowerAction $0e
2019-04-10 11:46:16 -07:00
xor a ; FALSE
2018-01-23 14:39:09 -08:00
ld [wScriptVar], a
ld a, EGG_TICKET
2018-01-23 14:39:09 -08:00
ld [wCurItem], a
ld hl, wNumItems
call CheckItem
ret nc
2018-01-23 14:39:09 -08:00
ld a, [wPartyCount]
ld b, 0
ld c, a
2018-01-23 14:39:09 -08:00
ld hl, wPartySpecies
.loop
ld a, [hli]
cp EGG
jr nz, .not_egg
push hl
2018-01-23 14:39:09 -08:00
ld hl, wPartyMonOT
2017-12-21 08:56:33 -08:00
ld de, NAME_LENGTH_JAPANESE
ld a, b
and a
jr z, .skip
.loop2
add hl, de
dec a
jr nz, .loop2
.skip
2018-03-02 16:39:16 -08:00
ld de, String_MysteryJP
2017-12-21 08:56:33 -08:00
ld a, NAME_LENGTH_JAPANESE
2015-11-26 18:05:32 -08:00
.compare_loop
push af
ld a, [de]
inc de
cp [hl]
inc hl
2015-11-26 18:05:32 -08:00
jr nz, .different
pop af
dec a
2015-11-26 18:05:32 -08:00
jr nz, .compare_loop
rept 4
dec hl
endr
2015-11-26 18:05:32 -08:00
ld a, "@"
ld [hli], a
ld [hli], a
pop hl
ld a, EGG_TICKET
2018-01-23 14:39:09 -08:00
ld [wCurItem], a
2015-11-26 18:05:32 -08:00
ld a, 1
ld [wItemQuantityChangeBuffer], a
2015-11-26 18:05:32 -08:00
ld a, -1
2018-01-23 14:39:09 -08:00
ld [wCurItemQuantity], a
ld hl, wNumItems
call TossItem
2019-04-10 11:46:16 -07:00
ld a, TRUE
2018-01-23 14:39:09 -08:00
ld [wScriptVar], a
ret
2015-11-26 18:05:32 -08:00
.different
pop af
pop hl
.not_egg
inc b
dec c
jr nz, .loop
ret
2018-06-24 07:09:41 -07:00
String_MysteryJP:
2018-03-02 16:39:16 -08:00
db "なぞナゾ@@" ; MYSTERY
2018-06-24 07:09:41 -07:00
Function1709aa: ; BattleTowerAction $0f
ldh a, [rSVBK]
push af
ld a, BANK(w3_d090)
ldh [rSVBK], a
ld a, [w3_d090]
2018-01-23 14:39:09 -08:00
ld [wScriptVar], a
pop af
ldh [rSVBK], a
ret
2018-06-24 07:09:41 -07:00
Function1709bb: ; BattleTowerAction $10
2019-04-10 11:46:16 -07:00
xor a ; FALSE
2018-01-23 14:39:09 -08:00
ld [wScriptVar], a
2019-04-10 11:46:16 -07:00
ld a, BANK(s5_a800)
call GetSRAMBank
2019-04-10 11:46:16 -07:00
ld a, [s5_a800]
call CloseSRAM
cp 6
jr nc, .invalid
ld e, a
ld d, 0
2018-03-02 16:39:16 -08:00
ld hl, .jumptable
add hl, de
add hl, de
ld a, [hli]
ld h, [hl]
ld l, a
jp hl
.invalid
2019-04-10 11:46:16 -07:00
ld a, BANK(s5_a800)
call GetSRAMBank
xor a
2019-04-10 11:46:16 -07:00
ld [s5_a800], a
call CloseSRAM
ret
2018-06-24 07:09:41 -07:00
.jumptable:
2015-11-26 18:05:32 -08:00
dw .NoAction
dw .NoAction
dw .DoAction1
dw .DoAction1
dw .Action4
dw .Action5
2018-06-24 07:09:41 -07:00
.DoAction1:
2019-04-10 11:46:16 -07:00
ld a, BANK(s5_a800)
call GetSRAMBank
2019-04-10 11:46:16 -07:00
ld a, 1
ld [s5_a800], a
call CloseSRAM
2018-06-24 07:09:41 -07:00
.NoAction:
ret
2018-06-24 07:09:41 -07:00
.Action4:
2019-04-10 11:46:16 -07:00
ld a, BANK(s5_b023) ; aka BANK(s5_a825) and BANK(s5_a826)
call GetSRAMBank
2019-04-10 11:46:16 -07:00
ld hl, s5_b023
ld de, wc608
2019-04-10 11:46:16 -07:00
ld bc, 105
call CopyBytes
2019-04-10 11:46:16 -07:00
ld a, [s5_a825]
ld [wcd30], a
2019-04-10 11:46:16 -07:00
ld a, [s5_a826]
ld [wcd31], a
call CloseSRAM
2017-12-24 09:47:30 -08:00
farcall Function11b6b4
farcall Function17d0f3
2019-04-10 11:46:16 -07:00
ld a, TRUE
2018-01-23 14:39:09 -08:00
ld [wScriptVar], a
ret
2018-06-24 07:09:41 -07:00
.Action5:
2019-04-10 11:46:16 -07:00
ld a, 0 ; ???
call GetSRAMBank
ld hl, wRTC
ld de, wc608
2019-04-10 11:46:16 -07:00
ld bc, 4
call CopyBytes
call CloseSRAM
2019-04-10 11:46:16 -07:00
ld a, BANK(s5_b08c)
call GetSRAMBank
2019-04-10 11:46:16 -07:00
ld hl, s5_b08c
ld de, wc608
2019-04-10 11:46:16 -07:00
ld c, 4
2015-11-26 18:05:32 -08:00
.compare_loop
ld a, [de]
inc de
cp [hl]
2015-11-26 18:05:32 -08:00
jr nz, .different
inc hl
dec c
2015-11-26 18:05:32 -08:00
jr nz, .compare_loop
call CloseSRAM
2018-01-23 14:39:09 -08:00
ld a, [wMapGroup]
ld b, a
2018-01-23 14:39:09 -08:00
ld a, [wMapNumber]
ld c, a
call GetMapSceneID
ld a, d
or e
jr z, .no_scene
ld a, [de]
and a
ret nz
.no_scene
2019-04-10 11:46:16 -07:00
ld a, TRUE
2018-01-23 14:39:09 -08:00
ld [wScriptVar], a
ret
2015-11-26 18:05:32 -08:00
.different
call CloseSRAM
2019-04-10 11:46:16 -07:00
ld a, BANK(s5_a800)
call GetSRAMBank
xor a
2019-04-10 11:46:16 -07:00
ld [s5_a800], a
call CloseSRAM
2018-01-23 14:39:09 -08:00
ld [wScriptVar], a
ld a, [wMapGroup]
ld b, a
2018-01-23 14:39:09 -08:00
ld a, [wMapNumber]
ld c, a
call GetMapSceneID
ld a, d
or e
jr z, .no_scene_2
xor a
ld [de], a
.no_scene_2
ret
2019-04-10 11:46:16 -07:00
Function170a9c:
2018-03-02 16:39:16 -08:00
ld c, FALSE
jr asm_170aa2
2019-04-10 11:46:16 -07:00
Function170aa0:
2018-03-02 16:39:16 -08:00
ld c, TRUE
2018-06-24 07:09:41 -07:00
asm_170aa2:
2019-04-10 11:46:16 -07:00
ld a, BANK(s5_aa8d)
call GetSRAMBank
ld a, c
2019-04-10 11:46:16 -07:00
ld [s5_aa8d], a
call CloseSRAM
ret
2019-04-10 11:46:16 -07:00
Function170aaf:
ld a, BANK(s5_aa8d)
call GetSRAMBank
2019-04-10 11:46:16 -07:00
ld a, [s5_aa8d]
2018-01-23 14:39:09 -08:00
ld [wScriptVar], a
call CloseSRAM
ret
2019-04-10 11:46:16 -07:00
Function170abe:
2015-11-26 18:05:32 -08:00
call BattleTower_CheckSaveFileExistsAndIsYours
2018-01-23 14:39:09 -08:00
ld a, [wScriptVar]
and a
ret z
2015-11-26 18:05:32 -08:00
ld a, BANK(sBattleTowerSaveFileFlags)
call GetSRAMBank
ld a, [sBattleTowerSaveFileFlags]
2019-04-10 11:46:16 -07:00
and 1
2018-01-23 14:39:09 -08:00
ld [wScriptVar], a
call CloseSRAM
ret
2019-04-10 11:46:16 -07:00
Function170ad7:
ld a, BANK(sBattleTowerSaveFileFlags)
call GetSRAMBank
ld a, [sBattleTowerSaveFileFlags]
2019-04-10 11:46:16 -07:00
or 1
ld [sBattleTowerSaveFileFlags], a
call CloseSRAM
ret
2019-04-10 11:46:16 -07:00
BattleTowerAction_LevelCheck:
ld a, BANK(s5_b2fb)
call GetSRAMBank
2019-04-10 11:46:16 -07:00
ld a, [s5_b2fb]
call CloseSRAM
2015-11-26 18:05:32 -08:00
ld c, 10
call SimpleDivide
ld a, b
ld [wcd4f], a
xor a
2018-01-23 14:39:09 -08:00
ld [wScriptVar], a
2019-04-10 11:46:16 -07:00
farcall BattleTower_LevelCheck
ret nc
2019-04-10 11:46:16 -07:00
ld a, BANK(s5_b2fb)
call GetSRAMBank
2019-04-10 11:46:16 -07:00
ld a, [s5_b2fb]
call CloseSRAM
2018-01-23 14:39:09 -08:00
ld [wScriptVar], a
ret
2019-04-10 11:46:16 -07:00
BattleTowerAction_UbersCheck:
ld a, BANK(s5_b2fb)
call GetSRAMBank
2019-04-10 11:46:16 -07:00
ld a, [s5_b2fb]
call CloseSRAM
ld c, 10
call SimpleDivide
ld a, b
ld [wcd4f], a
xor a
2018-01-23 14:39:09 -08:00
ld [wScriptVar], a
2017-12-24 09:47:30 -08:00
farcall BattleTower_UbersCheck
ret nc
2019-04-10 11:46:16 -07:00
ld a, BANK(s5_b2fb)
call GetSRAMBank
2019-04-10 11:46:16 -07:00
ld a, [s5_b2fb]
call CloseSRAM
2018-01-23 14:39:09 -08:00
ld [wScriptVar], a
ret
2015-12-08 13:06:13 -08:00
LoadOpponentTrainerAndPokemonWithOTSprite:
2017-12-24 09:47:30 -08:00
farcall Function_LoadOpponentTrainerAndPokemons
ldh a, [rSVBK]
2015-12-08 13:06:13 -08:00
push af
2019-04-10 11:46:16 -07:00
ld a, BANK(wBT_OTTrainerClass)
ldh [rSVBK], a
2018-01-23 14:39:09 -08:00
ld hl, wBT_OTTrainerClass
2015-12-08 13:06:13 -08:00
ld a, [hl]
dec a
ld c, a
2019-04-10 11:46:16 -07:00
ld b, 0
2015-12-08 13:06:13 -08:00
pop af
ldh [rSVBK], a
ld hl, BTTrainerClassSprites
2015-12-08 13:06:13 -08:00
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
2018-01-23 14:39:09 -08:00
ld a, [wScriptVar]
2015-12-08 13:06:13 -08:00
dec a
sla a
ld e, a
sla a
sla a
sla a
ld c, a
ld b, 0
ld d, 0
2018-01-23 14:39:09 -08:00
ld hl, wMapObjects
2015-12-08 13:06:13 -08:00
add hl, bc
inc hl
ld a, [wBTTempOTSprite]
ld [hl], a
2018-01-23 14:39:09 -08:00
ld hl, wUsedSprites
2015-12-08 13:06:13 -08:00
add hl, de
ld [hli], a
ldh [hUsedSpriteIndex], a
2015-12-08 13:06:13 -08:00
ld a, [hl]
ldh [hUsedSpriteTile], a
2017-12-24 09:47:30 -08:00
farcall GetUsedSprite
2015-12-08 13:06:13 -08:00
ret
INCLUDE "data/trainers/sprites.asm"
2015-12-08 13:06:13 -08:00
2018-06-24 07:09:41 -07:00
DummySpecial_170bd2:
2015-12-08 13:06:13 -08:00
ret
2018-06-24 07:09:41 -07:00
CheckForBattleTowerRules:
farcall _CheckForBattleTowerRules
2019-04-10 11:46:16 -07:00
jr c, .ready
xor a ; FALSE
2019-04-10 11:46:16 -07:00
jr .end
2015-12-08 13:06:13 -08:00
2019-04-10 11:46:16 -07:00
.ready
ld a, TRUE
2015-12-08 13:06:13 -08:00
2019-04-10 11:46:16 -07:00
.end
2018-01-23 14:39:09 -08:00
ld [wScriptVar], a
2015-12-08 13:06:13 -08:00
ret