summaryrefslogtreecommitdiff
path: root/engine
diff options
context:
space:
mode:
authorPikalaxALT <PikalaxALT@gmail.com>2015-11-16 21:46:36 -0500
committerPikalaxALT <PikalaxALT@gmail.com>2015-11-16 21:46:36 -0500
commit042fc4bfe5f55df87712d33b6f832a591b136f1a (patch)
tree6709cb7a5b303aadaa094ce216c86e7f5f117ba0 /engine
parentba871547eda6e17e988f4e1dfa7b899050205d5e (diff)
Split up some more banks in main.asm
Diffstat (limited to 'engine')
-rwxr-xr-xengine/money.asm209
-rwxr-xr-xengine/pokecenter_pc.asm705
-rwxr-xr-xengine/timeset.asm771
3 files changed, 1685 insertions, 0 deletions
diff --git a/engine/money.asm b/engine/money.asm
new file mode 100755
index 000000000..5935a23e7
--- /dev/null
+++ b/engine/money.asm
@@ -0,0 +1,209 @@
+GiveMoney:: ; 15fd7
+ ld a, $3
+ call AddMoney
+ ld bc, MaxMoney
+ ld a, $3
+ call CompareMoney
+ jr z, .asm_15ff5
+ jr c, .asm_15ff5
+ ld hl, MaxMoney
+ ld a, [hli]
+ ld [de], a
+ inc de
+ ld a, [hli]
+ ld [de], a
+ inc de
+ ld a, [hli]
+ ld [de], a
+ scf
+ ret
+
+.asm_15ff5
+ and a
+ ret
+; 15ff7
+
+MaxMoney: ; 15ff7
+ dt 999999
+; 15ffa
+
+
+TakeMoney:: ; 15ffa
+ ld a, 3
+ call SubtractMoney
+ jr nc, .asm_16009
+ xor a
+ ld [de], a
+ inc de
+ ld [de], a
+ inc de
+ ld [de], a
+ scf
+ ret
+
+.asm_16009
+ and a
+ ret
+; 1600b
+
+CompareMoney:: ; 1600b
+ ld a, $3
+CompareFunds: ; 1600d
+ push hl
+ push de
+ push bc
+ ld h, b
+ ld l, c
+ ld c, $0
+ ld b, a
+.loop1
+ dec a
+ jr z, .done
+ inc de
+ inc hl
+ jr .loop1
+
+.done
+ and a
+.loop2
+ ld a, [de]
+ sbc [hl]
+ jr z, .okay
+ inc c
+
+.okay
+ dec de
+ dec hl
+ dec b
+ jr nz, .loop2
+ jr c, .set_carry
+ ld a, c
+ and a
+ jr .skip_carry
+
+.set_carry
+ ld a, $1
+ and a
+ scf
+
+.skip_carry
+ pop bc
+ pop de
+ pop hl
+ ret
+; 16035
+
+SubtractMoney: ; 16035
+ ld a, 3
+SubtractFunds: ; 16037
+ push hl
+ push de
+ push bc
+ ld h, b
+ ld l, c
+ ld b, a
+ ld c, 0
+.loop
+ dec a
+ jr z, .done
+ inc de
+ inc hl
+ jr .loop
+
+.done
+ and a
+.loop2
+ ld a, [de]
+ sbc [hl]
+ ld [de], a
+ dec de
+ dec hl
+ dec b
+ jr nz, .loop2
+ pop bc
+ pop de
+ pop hl
+ ret
+; 16053
+
+AddMoney: ; 16053
+ ld a, $3
+AddFunds: ; 16055
+ push hl
+ push de
+ push bc
+ ld h, b
+ ld l, c
+ ld b, a
+.loop1
+ dec a
+ jr z, .done
+ inc de
+ inc hl
+ jr .loop1
+
+.done
+ and a
+.loop2
+ ld a, [de]
+ adc [hl]
+ ld [de], a
+ dec de
+ dec hl
+ dec b
+ jr nz, .loop2
+ pop bc
+ pop de
+ pop hl
+ ret
+; 1606f
+
+GiveCoins:: ; 1606f
+ ld a, 2
+ ld de, Coins
+ call AddFunds
+ ld a, 2
+ ld bc, .maxcoins
+ call CompareFunds
+ jr c, .not_maxed
+ ld hl, .maxcoins
+ ld a, [hli]
+ ld [de], a
+ inc de
+ ld a, [hli]
+ ld [de], a
+ scf
+ ret
+
+.not_maxed
+ and a
+ ret
+; 1608d
+
+.maxcoins: ; 1608d
+ bigdw 9999
+; 1608f
+
+
+TakeCoins:: ; 1608f
+ ld a, 2
+ ld de, Coins
+ call SubtractFunds
+ jr nc, .asm_1609f
+ xor a
+ ld [de], a
+ inc de
+ ld [de], a
+ scf
+ ret
+
+.asm_1609f
+ and a
+ ret
+; 160a1
+
+CheckCoins:: ; 160a1
+ ld a, $2
+ ld de, Coins
+ jp CompareFunds
+; 160a9
diff --git a/engine/pokecenter_pc.asm b/engine/pokecenter_pc.asm
new file mode 100755
index 000000000..ee37edca5
--- /dev/null
+++ b/engine/pokecenter_pc.asm
@@ -0,0 +1,705 @@
+PokemonCenterPC: ; 1559a
+ call PC_CheckPartyForPokemon
+ ret c
+ call PC_PlayBootSound
+ ld hl, UnknownText_0x15a27
+ call PC_DisplayText
+ ld hl, UnknownText_0x15a2c
+ call PC_DisplayTextWaitMenu
+ ld hl, .TopMenu
+ call LoadMenuDataHeader
+.loop
+ xor a
+ ld [hBGMapMode], a
+ call .ChooseWhichPCListToUse
+ ld [wcf76], a
+ call DoNthMenu
+ jr c, .shutdown
+ ld a, [MenuSelection]
+ ld hl, .JumpTable
+ call MenuJumptable
+ jr nc, .loop
+
+.shutdown
+ call PC_PlayShutdownSound
+ call ExitMenu
+ call WriteBackup
+ ret
+; 155d6
+
+.TopMenu: ; 0x155d6
+ db $48 ; flags
+ db 00, 00 ; start coords
+ db 12, 15 ; end coords
+ dw .MenuData2
+ db 1 ; default option
+; 0x155de
+
+.MenuData2: ; 0x155de
+ db $a0 ; flags
+ db 0 ; items
+ dw .WhichPC
+ dw PlaceNthMenuStrings
+ dw .JumpTable
+; 0x155e6
+
+.JumpTable: ; 155e6
+ dw PlayersPC, .String_PlayersPC
+ dw BillsPC, .String_BillsPC
+ dw OaksPC, .String_OaksPC
+ dw HallOfFamePC, .String_HallOfFame
+ dw TurnOffPC, .String_TurnOff
+; 155fa
+
+.String_PlayersPC: db "<PLAYER>'s PC@"
+.String_BillsPC: db "BILL's PC@"
+.String_OaksPC: db "PROF.OAK's PC@"
+.String_HallOfFame: db "HALL OF FAME@"
+.String_TurnOff: db "TURN OFF@"
+; 1562c
+
+.WhichPC: ; 1562c
+ ; before pokedex
+ db 3 ; items
+ db 1, 0, 4 ; bill's, player's, turn off
+ db -1
+
+ ; before Hall Of Fame
+ db 4 ; items
+ db 1, 0, 2, 4 ; bill's, player's, oak's, turn off
+ db -1
+
+ ; postgame
+ db 5 ; items
+ db 1, 0, 2, 3, 4 ; bill's, player's, oak's, hall of fame, turn off
+ db -1
+; 1563e
+
+.ChooseWhichPCListToUse: ; 1563e
+ call CheckReceivedDex
+ jr nz, .got_dex
+ ld a, $0
+ ret
+
+.got_dex
+ ld a, [wHallOfFameCount]
+ and a
+ ld a, $1
+ ret z
+ ld a, $2
+ ret
+; 15650
+
+PC_CheckPartyForPokemon: ; 15650
+ ld a, [PartyCount]
+ and a
+ ret nz
+ ld de, SFX_CHOOSE_PC_OPTION
+ call PlaySFX
+ ld hl, UnknownText_0x15663
+ call PC_DisplayText
+ scf
+ ret
+; 15663
+
+UnknownText_0x15663: ; 0x15663
+ ; Bzzzzt! You must have a #MON to use this!
+ text_jump UnknownText_0x1c1328
+ db "@"
+; 0x15668
+
+BillsPC: ; 15668
+ call PC_PlayChoosePCSound
+ ld hl, UnknownText_0x15a31
+ call PC_DisplayText
+ callba _BillsPC
+ and a
+ ret
+; 15679 (5:5679)
+
+PlayersPC: ; 15679
+ call PC_PlayChoosePCSound
+ ld hl, UnknownText_0x15a36
+ call PC_DisplayText
+ ld b, $0
+ call _PlayersPC
+ and a
+ ret
+; 15689
+
+OaksPC: ; 15689
+ call PC_PlayChoosePCSound
+ ld hl, UnknownText_0x15a3b
+ call PC_DisplayText
+ callba ProfOaksPC
+ and a
+ ret
+; 1569a
+
+HallOfFamePC: ; 1569a
+ call PC_PlayChoosePCSound
+ call FadeToMenu
+ callba _HallOfFamePC
+ call Function2b3c
+ and a
+ ret
+; 156ab
+
+TurnOffPC: ; 156ab
+ ld hl, UnknownText_0x15a40
+ call PrintText
+ scf
+ ret
+; 156b3
+
+PC_PlayBootSound: ; 156b3
+ ld de, SFX_BOOT_PC
+ jr PC_WaitPlaySFX
+
+PC_PlayShutdownSound: ; 156b8
+ ld de, SFX_SHUT_DOWN_PC
+ call PC_WaitPlaySFX
+ call WaitSFX
+ ret
+
+PC_PlayChoosePCSound: ; 156c2
+ ld de, SFX_CHOOSE_PC_OPTION
+ jr PC_WaitPlaySFX
+
+Function156c7: ; 156c7
+ ld de, SFX_SWITCH_POKEMON
+ call PC_WaitPlaySFX
+ ld de, SFX_SWITCH_POKEMON
+
+PC_WaitPlaySFX: ; 156d0
+ push de
+ call WaitSFX
+ pop de
+ call PlaySFX
+ ret
+; 156d9
+
+Function156d9: ; 156d9
+ call PC_PlayBootSound
+ ld hl, UnknownText_0x156ff
+ call PC_DisplayText
+ ld b, $1
+ call _PlayersPC
+ and a
+ jr nz, .asm_156f9
+ call OverworldTextModeSwitch
+ call Function321c
+ call UpdateSprites
+ call PC_PlayShutdownSound
+ ld c, $0
+ ret
+
+.asm_156f9
+ call ClearBGPalettes
+ ld c, $1
+ ret
+; 156ff
+
+UnknownText_0x156ff: ; 0x156ff
+ ; turned on the PC.
+ text_jump UnknownText_0x1c1353
+ db "@"
+; 0x15704
+
+_PlayersPC: ; 15704
+ ld a, b
+ ld [wcf76], a
+ ld hl, UnknownText_0x157cc
+ call PC_DisplayTextWaitMenu
+ call Function15715
+ call ExitMenu
+ ret
+; 15715
+
+Function15715: ; 15715
+ xor a
+ ld [wd0d7], a
+ ld [wd0dd], a
+ ld hl, KrissPCMenuData
+ call LoadMenuDataHeader
+.asm_15722
+ call UpdateTimePals
+ call DoNthMenu
+ jr c, .asm_15731
+ call MenuJumptable
+ jr nc, .asm_15722
+ jr .asm_15732
+
+.asm_15731
+ xor a
+
+.asm_15732
+ call ExitMenu
+ ret
+; 15736
+
+KrissPCMenuData: ; 0x15736
+ db %01000000
+ db 0, 0 ; top left corner coords (y, x)
+ db 12, 15 ; bottom right corner coords (y, x)
+ dw .KrissPCMenuData2
+ db 1 ; default selected option
+
+.KrissPCMenuData2
+ db %10100000 ; bit7
+ db 0 ; # items?
+ dw .KrissPCMenuList1
+ dw PlaceNthMenuStrings
+ dw .KrissPCMenuPointers
+
+.KrissPCMenuPointers ; 0x15746
+ dw KrisWithdrawItemMenu, .WithdrawItem
+ dw KrisDepositItemMenu, .DepositItem
+ dw KrisTossItemMenu, .TossItem
+ dw KrisMailBoxMenu, .MailBox
+ dw KrisDecorationMenu, .Decoration
+ dw KrisLogOffMenu, .LogOff
+ dw KrisLogOffMenu, .TurnOff
+
+.WithdrawItem db "WITHDRAW ITEM@"
+.DepositItem db "DEPOSIT ITEM@"
+.TossItem db "TOSS ITEM@"
+.MailBox db "MAIL BOX@"
+.Decoration db "DECORATION@"
+.TurnOff db "TURN OFF@"
+.LogOff db "LOG OFF@"
+
+WITHDRAW_ITEM EQU 0
+DEPOSIT_ITEM EQU 1
+TOSS_ITEM EQU 2
+MAIL_BOX EQU 3
+DECORATION EQU 4
+TURN_OFF EQU 5
+LOG_OFF EQU 6
+
+.KrissPCMenuList1
+ db 5
+ db WITHDRAW_ITEM
+ db DEPOSIT_ITEM
+ db TOSS_ITEM
+ db MAIL_BOX
+ db TURN_OFF
+ db -1
+
+.KrissPCMenuList2
+ db 6
+ db WITHDRAW_ITEM
+ db DEPOSIT_ITEM
+ db TOSS_ITEM
+ db MAIL_BOX
+ db DECORATION
+ db LOG_OFF
+ db -1
+
+PC_DisplayTextWaitMenu: ; 157bb
+ ld a, [Options]
+ push af
+ set NO_TEXT_SCROLL, a
+ ld [Options], a
+ call MenuTextBox
+ pop af
+ ld [Options], a
+ ret
+; 157cc
+
+UnknownText_0x157cc: ; 0x157cc
+ ; What do you want to do?
+ text_jump UnknownText_0x1c1368
+ db "@"
+; 0x157d1
+
+KrisWithdrawItemMenu: ; 0x157d1
+ call LoadStandardMenuDataHeader
+ callba ClearPCItemScreen
+.asm_157da
+ call Function15985
+ jr c, .asm_157e4
+ call Function157e9
+ jr .asm_157da
+
+.asm_157e4
+ call Function2b3c
+ xor a
+ ret
+; 0x157e9
+
+Function157e9: ; 0x157e9
+ ; check if the item has a quantity
+ callba _CheckTossableItem
+ ld a, [wItemAttributeParamBuffer]
+ and a
+ jr z, .askquantity
+
+ ; items without quantity are always ×1
+ ld a, 1
+ ld [wItemQuantityChangeBuffer], a
+ jr .withdraw
+
+.askquantity
+ ld hl, .HowManyText
+ call MenuTextBox
+ callba Function24fbf
+ call ExitMenu
+ call ExitMenu
+ jr c, .done
+
+.withdraw
+ ld a, [wItemQuantityChangeBuffer]
+ ld [Buffer1], a ; quantity
+ ld a, [wd107]
+ ld [Buffer2], a
+ ld hl, NumItems
+ call ReceiveItem
+ jr nc, .PackFull
+ ld a, [Buffer1]
+ ld [wItemQuantityChangeBuffer], a
+ ld a, [Buffer2]
+ ld [wd107], a
+ ld hl, PCItems
+ call TossItem
+ predef PartyMonItemName
+ ld hl, .WithdrewText
+ call MenuTextBox
+ xor a
+ ld [hBGMapMode], a
+ call ExitMenu
+ ret
+
+.PackFull
+ ld hl, .NoRoomText
+ call MenuTextBoxBackup
+ ret
+
+.done
+ ret
+; 0x15850
+
+.HowManyText ; 0x15850
+ text_jump _KrissPCHowManyWithdrawText
+ db "@"
+
+.WithdrewText ; 0x15855
+ text_jump _KrissPCWithdrewItemsText
+ db "@"
+
+.NoRoomText ; 0x1585a
+ text_jump _KrissPCNoRoomWithdrawText
+ db "@"
+
+
+KrisTossItemMenu: ; 0x1585f
+ call LoadStandardMenuDataHeader
+ callba ClearPCItemScreen
+.asm_15868
+ call Function15985
+ jr c, .asm_15878
+ ld de, PCItems
+ callba Function129f4
+ jr .asm_15868
+
+.asm_15878
+ call Function2b3c
+ xor a
+ ret
+; 0x1587d
+
+
+KrisDecorationMenu: ; 0x1587d
+ callba _KrisDecorationMenu
+ ld a, c
+ and a
+ ret z
+ scf
+ ret
+; 0x15888
+
+
+KrisLogOffMenu: ; 0x15888
+ xor a
+ scf
+ ret
+; 0x1588b
+
+
+KrisDepositItemMenu: ; 0x1588b
+ call Function158b8
+ jr c, .asm_158b6
+ call DisableSpriteUpdates
+ call LoadStandardMenuDataHeader
+ callba Function106a5
+.asm_1589c
+ callba Function106be
+ ld a, [wcf66]
+ and a
+ jr z, .asm_158b3
+ call Function158cc
+ callba CheckRegisteredItem
+ jr .asm_1589c
+
+.asm_158b3
+ call Function2b3c
+
+.asm_158b6
+ xor a
+ ret
+; 0x158b8
+
+Function158b8: ; 0x158b8
+ callba Function129d5
+ ret nc
+ ld hl, UnknownText_0x158c7
+ call MenuTextBoxBackup
+ scf
+ ret
+; 0x158c7
+
+UnknownText_0x158c7: ; 0x158c7
+ ; No items here!
+ text_jump UnknownText_0x1c13df
+ db "@"
+; 0x158cc
+
+
+Function158cc: ; 0x158cc
+ ld a, [wc2ce]
+ push af
+ ld a, $0
+ ld [wc2ce], a
+ callba CheckItemMenu
+ ld a, [wItemAttributeParamBuffer]
+ ld hl, .jumptable
+ rst JumpTable
+ pop af
+ ld [wc2ce], a
+ ret
+; 0x158e7
+
+.jumptable: ; 0x158e7
+ dw .tossable
+ dw .no_toss
+ dw .no_toss
+ dw .no_toss
+ dw .tossable
+ dw .tossable
+ dw .tossable
+
+.no_toss:
+ ret
+
+.tossable:
+ ld a, [Buffer1]
+ push af
+ ld a, [Buffer2]
+ push af
+ call Function1590a
+ pop af
+ ld [Buffer2], a
+ pop af
+ ld [Buffer1], a
+ ret
+; 0x1590a
+
+Function1590a: ; 0x1590a
+ callba _CheckTossableItem
+ ld a, [wItemAttributeParamBuffer]
+ and a
+ jr z, .asm_1591d
+ ld a, $1
+ ld [wItemQuantityChangeBuffer], a
+ jr .asm_15933
+
+.asm_1591d
+ ld hl, .HowManyText
+ call MenuTextBox
+ callba Function24fbf
+ push af
+ call ExitMenu
+ call ExitMenu
+ pop af
+ jr c, .asm_1596c
+
+.asm_15933
+ ld a, [wItemQuantityChangeBuffer]
+ ld [Buffer1], a
+ ld a, [wd107]
+ ld [Buffer2], a
+ ld hl, PCItems
+ call ReceiveItem
+ jr nc, .asm_15965
+ ld a, [Buffer1]
+ ld [wItemQuantityChangeBuffer], a
+ ld a, [Buffer2]
+ ld [wd107], a
+ ld hl, NumItems
+ call TossItem
+ predef PartyMonItemName
+ ld hl, .DepositText
+ call PrintText
+ ret
+
+.asm_15965
+ ld hl, .NoRoomText
+ call PrintText
+ ret
+
+.asm_1596c
+ and a
+ ret
+; 0x1596e
+
+
+.HowManyText ; 0x1596e
+ text_jump _KrissPCHowManyDepositText
+ db "@"
+
+.DepositText ; 0x15973
+ text_jump _KrissPCDepositItemsText
+ db "@"
+
+.NoRoomText ; 0x15978
+ text_jump _KrissPCNoRoomDepositText
+ db "@"
+
+
+KrisMailBoxMenu: ; 0x1597d
+ callba _KrisMailBoxMenu
+ xor a
+ ret
+; 0x15985
+
+
+Function15985: ; 0x15985
+ xor a
+ ld [wd0e3], a
+.asm_15989
+ ld a, [wc2ce]
+ push af
+ ld a, $0
+ ld [wc2ce], a
+ ld hl, MenuData15a08
+ call CopyMenuDataHeader
+ hlcoord 0, 0
+ ld b, $a
+ ld c, $12
+ call TextBox
+ ld a, [wd0d7]
+ ld [wMenuCursorBuffer], a
+ ld a, [wd0dd]
+ ld [wd0e4], a
+ call HandleScrollingMenu
+ ld a, [wd0e4]
+ ld [wd0dd], a
+ ld a, [MenuSelection2]
+ ld [wd0d7], a
+ pop af
+ ld [wc2ce], a
+ ld a, [wd0e3]
+ and a
+ jr nz, .asm_159d8
+ ld a, [wcf73]
+ cp $2
+ jr z, .asm_15a06
+ cp $1
+ jr z, .asm_159fb
+ cp $4
+ jr z, .asm_159f2
+ jr .asm_159f8
+
+.asm_159d8
+ ld a, [wcf73]
+ cp $2
+ jr z, .asm_159e9
+ cp $1
+ jr z, .asm_159ef
+ cp $4
+ jr z, .asm_159ef
+ jr .asm_159f8
+
+.asm_159e9
+ xor a
+ ld [wd0e3], a
+ jr .asm_159f8
+
+.asm_159ef
+ call Function156c7
+
+.asm_159f2
+ callba Function2490c
+
+.asm_159f8
+ jp .asm_15989
+
+.asm_159fb
+ callba Function24706
+ call Function1bee
+ and a
+ ret
+
+.asm_15a06
+ scf
+ ret
+; 0x15a08
+
+MenuData15a08: ; 0x15a08
+ db %01000000
+ db 1, 4 ; start coords
+ db 10, 18 ; end coords
+ dw .MenuData2
+ db 1 ; default option
+
+.MenuData2
+ db %10110000
+ db 4, 8 ; rows/cols?
+ db 2 ; horizontal spacing?
+ dbw 0, PCItems
+ dba PlaceMenuItemName
+ dba PlaceMenuItemQuantity
+ dba Function244c3
+
+PC_DisplayText: ; 15a20
+ call MenuTextBox
+ call ExitMenu
+ ret
+; 15a27
+
+
+UnknownText_0x15a27: ; 0x15a27
+ ; turned on the PC.
+ text_jump UnknownText_0x1c144d
+ db "@"
+; 0x15a2c
+
+UnknownText_0x15a2c: ; 0x15a2c
+ ; Access whose PC?
+ text_jump UnknownText_0x1c1462
+ db "@"
+; 0x15a31
+
+UnknownText_0x15a31: ; 0x15a31
+ ; BILL's PC accessed. #MON Storage System opened.
+ text_jump UnknownText_0x1c1474
+ db "@"
+; 0x15a36
+
+UnknownText_0x15a36: ; 0x15a36
+ ; Accessed own PC. Item Storage System opened.
+ text_jump UnknownText_0x1c14a4
+ db "@"
+; 0x15a3b
+
+UnknownText_0x15a3b: ; 0x15a3b
+ ; PROF.OAK's PC accessed. #DEX Rating System opened.
+ text_jump UnknownText_0x1c14d2
+ db "@"
+; 0x15a40
+
+UnknownText_0x15a40: ; 0x15a40
+ ; … Link closed…
+ text_jump UnknownText_0x1c1505
+ db "@"
+; 0x15a45
diff --git a/engine/timeset.asm b/engine/timeset.asm
new file mode 100755
index 000000000..00cdf9cac
--- /dev/null
+++ b/engine/timeset.asm
@@ -0,0 +1,771 @@
+InitClock: ; 90672 (24:4672)
+; Ask the player to set the time.
+ ld a, [hInMenu]
+ push af
+ ld a, $1
+ ld [hInMenu], a
+
+ ld a, $0
+ ld [wc2ce], a
+ ld a, $10
+ ld [MusicFade], a
+ ld a, MUSIC_NONE % $100
+ ld [MusicFadeIDLo], a
+ ld a, MUSIC_NONE / $100
+ ld [MusicFadeIDHi], a
+ ld c, 8
+ call DelayFrames
+ call Function4dd
+ call ClearTileMap
+ call ClearSprites
+ ld b, SCGB_08
+ call GetSGBLayout
+ xor a
+ ld [hBGMapMode], a
+ call LoadStandardFont
+ ld de, GFX_908fb
+ ld hl, VTiles2 tile $00
+ lb bc, BANK(GFX_908fb), 1
+ call Request1bpp
+ ld de, GFX_90903
+ ld hl, VTiles2 tile $01
+ lb bc, BANK(GFX_90903), 1
+ call Request1bpp
+ ld de, GFX_9090b
+ ld hl, VTiles2 tile $02
+ lb bc, BANK(GFX_9090b), 1
+ call Request1bpp
+ call .ClearScreen
+ call WaitBGMap
+ call Function4a3
+ ld hl, UnknownText_0x90874
+ call PrintText
+ ld hl, wc608
+ ld bc, 50
+ xor a
+ call ByteFill
+ ld a, $a
+ ld [wInitHourBuffer], a
+
+.loop
+ ld hl, UnknownText_0x90879
+ call PrintText
+ hlcoord 3, 7
+ ld b, 2
+ ld c, 15
+ call TextBox
+ hlcoord 11, 7
+ ld [hl], $1
+ hlcoord 11, 10
+ ld [hl], $2
+ hlcoord 4, 9
+ call DisplayHourOClock
+ ld c, 10
+ call DelayFrames
+
+.SetHourLoop
+ call JoyTextDelay
+ call SetHour
+ jr nc, .SetHourLoop
+
+ ld a, [wInitHourBuffer]
+ ld [StringBuffer2 + 1], a
+ call .ClearScreen
+ ld hl, UnknownText_0x90886
+ call PrintText
+ call YesNoBox
+ jr nc, .HourIsSet
+ call .ClearScreen
+ jr .loop
+
+.HourIsSet
+ ld hl, UnknownText_0x9089a
+ call PrintText
+ hlcoord 11, 7
+ lb bc, 2, 7
+ call TextBox
+ hlcoord 15, 7
+ ld [hl], $1
+ hlcoord 15, 10
+ ld [hl], $2
+ hlcoord 12, 9
+ call DisplayMinutesWithMinString
+ ld c, 10
+ call DelayFrames
+
+.SetMinutesLoop
+ call JoyTextDelay
+ call SetMinutes
+ jr nc, .SetMinutesLoop
+
+ ld a, [BattleMonNick + 5]
+ ld [StringBuffer2 + 2], a
+ call .ClearScreen
+ ld hl, UnknownText_0x908a4
+ call PrintText
+ call YesNoBox
+ jr nc, .MinutesAreSet
+ call .ClearScreen
+ jr .HourIsSet
+
+.MinutesAreSet
+ call Function658
+ ld hl, OakText_ResponseToSetTime
+ call PrintText
+ call WaitPressAorB_BlinkCursor
+ pop af
+ ld [hInMenu], a
+ ret
+
+.ClearScreen: ; 90783 (24:4783)
+ xor a
+ ld [hBGMapMode], a
+ hlcoord 0, 0
+ ld bc, SCREEN_HEIGHT * SCREEN_WIDTH
+ xor a
+ call ByteFill
+ ld a, $1
+ ld [hBGMapMode], a
+ ret
+
+SetHour: ; 90795 (24:4795)
+ ld a, [hJoyPressed]
+ and A_BUTTON
+ jr nz, .Confirm
+
+ ld hl, hJoyLast
+ ld a, [hl]
+ and D_UP
+ jr nz, .up
+ ld a, [hl]
+ and D_DOWN
+ jr nz, .down
+ call DelayFrame
+ and a
+ ret
+
+.down
+ ld hl, wInitHourBuffer
+ ld a, [hl]
+ and a
+ jr nz, .DecreaseThroughMidnight
+ ld a, 23 + 1
+.DecreaseThroughMidnight
+ dec a
+ ld [hl], a
+ jr .okay
+
+.up
+ ld hl, wInitHourBuffer
+ ld a, [hl]
+ cp 23
+ jr c, .AdvanceThroughMidnight
+ ld a, -1
+.AdvanceThroughMidnight
+ inc a
+ ld [hl], a
+
+.okay
+ hlcoord 4, 9
+ ld a, " "
+ ld bc, 15
+ call ByteFill
+ hlcoord 4, 9
+ call DisplayHourOClock
+ call WaitBGMap
+ and a
+ ret
+
+.Confirm
+ scf
+ ret
+
+DisplayHourOClock: ; 907de (24:47de)
+ push hl
+ ld a, [wInitHourBuffer]
+ ld c, a
+ ld e, l
+ ld d, h
+ call PrintHour
+ inc hl
+ ld de, String_oclock
+ call PlaceString
+ pop hl
+ ret
+; 907f1 (24:47f1)
+
+Function907f1: ; 907f1
+ ld h, d
+ ld l, e
+ push hl
+ call DisplayHourOClock
+ pop de
+rept 2
+ inc de
+endr
+ ld a, $9c
+ ld [de], a
+ inc de
+ push de
+ ld hl, $3
+ add hl, de
+ ld a, [de]
+ inc de
+ ld [hli], a
+ ld a, [de]
+ ld [hl], a
+ pop hl
+ call DisplayMinutesWithMinString
+rept 3
+ inc hl
+endr
+ ret
+; 90810
+
+SetMinutes: ; 90810 (24:4810)
+ ld a, [hJoyPressed]
+ and A_BUTTON
+ jr nz, .asm_90857
+ ld hl, hJoyLast
+ ld a, [hl]
+ and D_UP
+ jr nz, .asm_90835
+ ld a, [hl]
+ and D_DOWN
+ jr nz, .asm_90828
+ call DelayFrame
+ and a
+ ret
+.asm_90828
+ ld hl, BattleMonNick + 5
+ ld a, [hl]
+ and a
+ jr nz, .asm_90831
+ ld a, 59 + 1
+.asm_90831
+ dec a
+ ld [hl], a
+ jr .asm_90841
+.asm_90835
+ ld hl, BattleMonNick + 5
+ ld a, [hl]
+ cp 59
+ jr c, .asm_9083f
+ ld a, -1
+.asm_9083f
+ inc a
+ ld [hl], a
+.asm_90841
+ hlcoord 12, 9
+ ld a, " "
+ ld bc, 7
+ call ByteFill
+ hlcoord 12, 9
+ call DisplayMinutesWithMinString
+ call WaitBGMap
+ and a
+ ret
+.asm_90857
+ scf
+ ret
+
+DisplayMinutesWithMinString: ; 90859 (24:4859)
+ ld de, BattleMonNick + 5
+ call PrintTwoDigitNumberRightAlign
+ inc hl
+ ld de, String_min
+ call PlaceString
+ ret
+
+PrintTwoDigitNumberRightAlign: ; 90867 (24:4867)
+ push hl
+ ld a, " "
+ ld [hli], a
+ ld [hl], a
+ pop hl
+ lb bc, PRINTNUM_RIGHTALIGN | 1, 2
+ call PrintNum
+ ret
+; 90874 (24:4874)
+
+UnknownText_0x90874: ; 0x90874
+ ; Zzz… Hm? Wha…? You woke me up! Will you check the clock for me?
+ text_jump UnknownText_0x1bc29c
+ db "@"
+; 0x90879
+
+UnknownText_0x90879: ; 0x90879
+ ; What time is it?
+ text_jump UnknownText_0x1bc2eb
+ db "@"
+; 0x9087e
+
+String_oclock:
+ db "o'clock@"
+; 90886
+
+UnknownText_0x90886: ; 0x90886
+ ; What?@ @
+ text_jump UnknownText_0x1bc2fd
+ start_asm
+ hlcoord 1, 16
+ call DisplayHourOClock
+ ld hl, UnknownText_0x90895
+ ret
+; 90895 (24:4895)
+
+UnknownText_0x90895: ; 0x90895
+ ; ?
+ text_jump UnknownText_0x1bc305
+ db "@"
+; 0x9089a
+
+UnknownText_0x9089a: ; 0x9089a
+ ; How many minutes?
+ text_jump UnknownText_0x1bc308
+ db "@"
+; 0x9089f
+
+String_min:
+ db "min.@"
+; 908a4
+
+UnknownText_0x908a4: ; 0x908a4
+ ; Whoa!@ @
+ text_jump UnknownText_0x1bc31b
+ start_asm
+; 0x908a9
+ hlcoord 7, 14
+ call DisplayMinutesWithMinString
+ ld hl, UnknownText_0x908b3
+ ret
+; 908b3 (24:48b3)
+
+UnknownText_0x908b3: ; 0x908b3
+ ; ?
+ text_jump UnknownText_0x1bc323
+ db "@"
+; 0x908b8
+
+OakText_ResponseToSetTime: ; 0x908b8
+ start_asm
+ decoord 1, 14
+ ld a, [wInitHourBuffer]
+ ld c, a
+ call PrintHour
+ ld [hl], ":"
+ inc hl
+ ld de, BattleMonNick + 5
+ lb bc, PRINTNUM_LEADINGZEROS | 1, 2
+ call PrintNum
+ ld b, h
+ ld c, l
+ ld a, [wInitHourBuffer]
+ cp 4
+ jr c, .NITE
+ cp 11
+ jr c, .MORN
+ cp 18
+ jr c, .DAY
+.NITE
+ ld hl, .sodark
+ ret
+.MORN
+ ld hl, .overslept
+ ret
+.DAY
+ ld hl, .yikes
+ ret
+; 908ec (24:48ec)
+
+.overslept: ; 0x908ec
+ ; ! I overslept!
+ text_jump UnknownText_0x1bc326
+ db "@"
+; 0x908f1
+
+.yikes: ; 0x908f1
+ ; ! Yikes! I over- slept!
+ text_jump UnknownText_0x1bc336
+ db "@"
+; 0x908f6
+
+.sodark: ; 0x908f6
+ ; ! No wonder it's so dark!
+ text_jump UnknownText_0x1bc34f
+ db "@"
+; 0x908fb
+
+GFX_908fb: ; 908fb
+INCBIN "gfx/unknown/0908fb.2bpp"
+GFX_90903: ; 90903
+INCBIN "gfx/unknown/090903.2bpp"
+GFX_9090b: ; 9090b
+INCBIN "gfx/unknown/09090b.2bpp"
+; 90913
+
+Special_SetDayOfWeek: ; 90913
+ ld a, [hInMenu]
+ push af
+ ld a, $1
+ ld [hInMenu], a
+ ld de, GFX_90903
+ ld hl, VTiles1 tile $6f
+ lb bc, BANK(GFX_90903), 1
+ call Request1bpp
+ ld de, GFX_9090b
+ ld hl, VTiles1 tile $75
+ lb bc, BANK(GFX_9090b), 1
+ call Request1bpp
+ xor a
+ ld [wd002], a
+.asm_90936
+ hlcoord 0, 12
+ lb bc, 4, 18
+ call TextBox
+ call LoadStandardMenuDataHeader
+ ld hl, UnknownText_0x90a3f
+ call PrintText
+ hlcoord 9, 3
+ ld b, 2
+ ld c, 9
+ call TextBox
+ hlcoord 14, 3
+ ld [hl], $ef
+ hlcoord 14, 6
+ ld [hl], $f5
+ hlcoord 10, 5
+ call Function909de
+ call Function321c
+ ld c, 10
+ call DelayFrames
+.asm_9096a
+ call JoyTextDelay
+ call Function90993
+ jr nc, .asm_9096a
+ call ExitMenu
+ call UpdateSprites
+ ld hl, UnknownText_0x90a44
+ call PrintText
+ call YesNoBox
+ jr c, .asm_90936
+ ld a, [wd002]
+ ld [StringBuffer2], a
+ call Function663
+ call LoadStandardFont
+ pop af
+ ld [hInMenu], a
+ ret
+; 90993
+
+Function90993: ; 90993
+ ld a, [hJoyPressed]
+ and A_BUTTON
+ jr z, .asm_9099b
+ scf
+ ret
+
+.asm_9099b
+ ld hl, hJoyLast
+ ld a, [hl]
+ and D_UP
+ jr nz, .asm_909ba
+ ld a, [hl]
+ and D_DOWN
+ jr nz, .asm_909ad
+ call DelayFrame
+ and a
+ ret
+
+.asm_909ad
+ ld hl, wd002
+ ld a, [hl]
+ and a
+ jr nz, .asm_909b6
+ ld a, 6 + 1
+
+.asm_909b6
+ dec a
+ ld [hl], a
+ jr .asm_909c6
+
+.asm_909ba
+ ld hl, wd002
+ ld a, [hl]
+ cp 6
+ jr c, .asm_909c4
+ ld a, -1
+
+.asm_909c4
+ inc a
+ ld [hl], a
+
+.asm_909c6
+ xor a
+ ld [hBGMapMode], a
+ hlcoord 10, 4
+ ld b, $2
+ ld c, $9
+ call ClearBox
+ hlcoord 10, 5
+ call Function909de
+ call WaitBGMap
+ and a
+ ret
+; 909de
+
+Function909de: ; 909de
+ push hl
+ ld a, [wd002]
+ ld e, a
+ ld d, 0
+ ld hl, WeekdaysStrings
+rept 2
+ add hl, de
+endr
+ ld a, [hli]
+ ld d, [hl]
+ ld e, a
+ pop hl
+ call PlaceString
+ ret
+; 909f2
+
+WeekdaysStrings: ; 909f2
+ dw Sunday
+ dw Monday
+ dw Tuesday
+ dw Wednesday
+ dw Thursday
+ dw Friday
+ dw Saturday
+ dw Sunday
+
+Sunday: db " SUNDAY@"
+Monday: db " MONDAY@"
+Tuesday: db " TUESDAY@"
+Wednesday: db "WEDNESDAY@"
+Thursday: db "THURSDAY@"
+Friday: db " FRIDAY@"
+Saturday: db "SATURDAY@"
+
+
+UnknownText_0x90a3f: ; 0x90a3f
+ ; What day is it?
+ text_jump UnknownText_0x1bc369
+ db "@"
+; 0x90a44
+
+UnknownText_0x90a44: ; 0x90a44
+ start_asm
+ hlcoord 1, 14
+ call Function909de
+ ld hl, UnknownText_0x90a4f
+ ret
+; 90a4f (24:4a4f)
+
+UnknownText_0x90a4f: ; 0x90a4f
+ ; , is it?
+ text_jump UnknownText_0x1bc37a
+ db "@"
+; 0x90a54
+
+Special_InitialSetDSTFlag: ; 90a54
+ ld a, [wDST]
+ set 7, a
+ ld [wDST], a
+ hlcoord 1, 14
+ lb bc, 3, 18
+ call ClearBox
+ ld hl, UnknownText_0x90a6c
+ call PlaceWholeStringInBoxAtOnce
+ ret
+; 90a6c
+
+UnknownText_0x90a6c: ; 90a6c
+ start_asm
+ call UpdateTime
+ ld a, [hHours]
+ ld b, a
+ ld a, [hMinutes]
+ ld c, a
+ decoord 1, 14
+ callba PrintHoursMins
+ ld hl, TextJump_DSTIsThatOK
+ ret
+; 90a83 (24:4a83)
+
+TextJump_DSTIsThatOK: ; 0x90a83
+ ; DST, is that OK?
+ text_jump Text_DSTIsThatOK
+ db "@"
+; 0x90a88
+
+Special_InitialClearDSTFlag: ; 90a88
+ ld a, [wDST]
+ res 7, a
+ ld [wDST], a
+ hlcoord 1, 14
+ lb bc, 3, 18
+ call ClearBox
+ ld hl, UnknownText_0x90aa0
+ call PlaceWholeStringInBoxAtOnce
+ ret
+; 90aa0
+
+UnknownText_0x90aa0: ; 90aa0
+ start_asm
+ call UpdateTime
+ ld a, [hHours]
+ ld b, a
+ ld a, [hMinutes]
+ ld c, a
+ decoord 1, 14
+ callba PrintHoursMins
+ ld hl, UnknownText_0x90ab7
+ ret
+; 90ab7
+
+UnknownText_0x90ab7: ; 0x90ab7
+ ; , is that OK?
+ text_jump UnknownText_0x1c5ff1
+ db "@"
+; 0x90abc
+
+Function90abc: ; 90abc
+ hlcoord 1, 14
+ lb bc, 3, SCREEN_WIDTH - 2
+ call ClearBox
+ ld hl, UnknownText_0x90acc
+ call PlaceWholeStringInBoxAtOnce
+ ret
+; 90acc
+
+UnknownText_0x90acc: ; 0x90acc
+ start_asm
+
+ call UpdateTime
+
+ hlcoord 1, 14
+ ld [hl], "R"
+ inc hl
+ ld [hl], "T"
+ inc hl
+ ld [hl], " "
+ inc hl
+
+ ld de, hRTCDayLo
+ call Function90b23
+
+ hlcoord 1, 16
+ ld [hl], "D"
+ inc hl
+ ld [hl], "F"
+ inc hl
+ ld [hl], " "
+ inc hl
+
+ ld de, StartDay
+ call Function90b23
+
+ ld [hl], " "
+ inc hl
+
+ ld a, [wDST]
+ bit 7, a
+ jr z, .off
+
+ ld [hl], "O"
+ inc hl
+ ld [hl], "N"
+ inc hl
+ jr .done
+
+.off
+ ld [hl], "O"
+ inc hl
+ ld [hl], "F"
+ inc hl
+ ld [hl], "F"
+ inc hl
+
+.done
+ ld hl, UnknownText_0x90b13
+ ret
+; 90b13
+
+UnknownText_0x90b13: ; 0x90b13
+ text "<PARA>Now on DEBUG…"
+ prompt
+; 0x90b23
+
+Function90b23: ; 90b23
+ lb bc, 1, 3
+ call PrintNum
+ ld [hl], "."
+ inc hl
+ inc de
+ lb bc, PRINTNUM_LEADINGZEROS | 1, 2
+ call PrintNum
+ ld [hl], ":"
+ inc hl
+ inc de
+ lb bc, PRINTNUM_LEADINGZEROS | 1, 2
+ call PrintNum
+ ret
+; 90b3e
+
+PrintHour: ; 90b3e (24:4b3e)
+ ld l, e
+ ld h, d
+ push bc
+ call GetTimeOfDayString
+ call PlaceString
+ ld l, c
+ ld h, b
+ inc hl
+ pop bc
+ call AdjustHourForAMorPM
+ ld [wd265], a
+ ld de, wd265
+ call PrintTwoDigitNumberRightAlign
+ ret
+
+GetTimeOfDayString: ; 90b58 (24:4b58)
+ ld a, c
+ cp 4
+ jr c, .nite
+ cp 10
+ jr c, .morn
+ cp 18
+ jr c, .day
+.nite
+ ld de, .NITE
+ ret
+.morn
+ ld de, .MORN
+ ret
+.day
+ ld de, .DAY
+ ret
+; 90b71 (24:4b71)
+
+.NITE: db "NITE@"
+.MORN: db "MORN@"
+.DAY: db "DAY@"
+; 90b7f
+
+AdjustHourForAMorPM:
+; Convert the hour stored in c (0-23) to a 1-12 value
+ ld a, c
+ or a
+ jr z, .midnight
+ cp 12
+ ret c
+ ret z
+ sub 12
+ ret
+
+.midnight
+ ld a, 12
+ ret