Organize the engine/ directory, take 2

Renamed `game` to `games` and `menu` to `menus`.
Moved some functions from `engine/routines/` to their fitting subdirectories.

Made two new subdirectories:
* engine/rtc: Contains all RTC-related things. Menus, hardware, misc
functions.
* engine/items: Contains all item-related things. Pack, item effects,
other item handlers.
This commit is contained in:
mid-kid
2018-03-14 13:28:36 +01:00
parent baa0dc5a96
commit 97c511cd2f
37 changed files with 36 additions and 36 deletions

254
engine/rtc/clock_reset.asm Executable file
View File

@@ -0,0 +1,254 @@
ResetClock_GetWraparoundTime: ; 20000 (8:4000)
push hl
dec a
ld e, a
ld d, 0
ld hl, .WrapAroundTimes
rept 4
add hl, de
endr
ld e, [hl]
inc hl
ld d, [hl]
inc hl
ld b, [hl]
inc hl
ld c, [hl]
pop hl
ret
; 20015 (8:4015)
.WrapAroundTimes: ; 20015
dw wBuffer4
db 7, 4
dw wBuffer5
db 24, 12
dw wBuffer6
db 60, 15
; 20021
RestartClock: ; 20021 (8:4021)
; If we're here, we had an RTC overflow.
ld hl, .Text_ClockTimeMayBeWrong
call PrintText
ld hl, wOptions
ld a, [hl]
push af
set NO_TEXT_SCROLL, [hl]
call LoadStandardMenuHeader
call ClearTileMap
ld hl, .Text_SetWithControlPad
call PrintText
call .SetClock
call ExitMenu
pop bc
ld hl, wOptions
ld [hl], b
ld c, a
ret
; 20047 (8:4047)
.Text_ClockTimeMayBeWrong: ; 0x20047
; The clock's time may be wrong. Please reset the time.
text_jump UnknownText_0x1c40e6
db "@"
; 0x2004c
.Text_SetWithControlPad: ; 0x2004c
; Set with the Control Pad. Confirm: A Button Cancel: B Button
text_jump UnknownText_0x1c411c
db "@"
; 0x20051
.SetClock: ; 20051 (8:4051)
ld a, 1
ld [wBuffer1], a ; which digit
ld [wBuffer2], a
ld a, 8
ld [wBuffer3], a
call UpdateTime
call GetWeekday
ld [wBuffer4], a
ld a, [hHours]
ld [wBuffer5], a
ld a, [hMinutes]
ld [wBuffer6], a
.loop
call .joy_loop
jr nc, .loop
and a
ret nz
call .PrintTime
ld hl, .Text_IsThisOK
call PrintText
call YesNoBox
jr c, .cancel
ld a, [wBuffer4]
ld [wStringBuffer2], a
ld a, [wBuffer5]
ld [wStringBuffer2 + 1], a
ld a, [wBuffer6]
ld [wStringBuffer2 + 2], a
xor a
ld [wStringBuffer2 + 3], a
call InitTime
call .PrintTime
ld hl, .Text_ClockReset
call PrintText
call WaitPressAorB_BlinkCursor
xor a
ret
.cancel
ld a, $1
ret
; 200b0 (8:40b0)
.Text_IsThisOK: ; 0x200b0
; Is this OK?
text_jump UnknownText_0x1c415b
db "@"
; 0x200b5
.Text_ClockReset: ; 0x200b5
; The clock has been reset.
text_jump UnknownText_0x1c4168
db "@"
; 0x200ba
.joy_loop
call JoyTextDelay_ForcehJoyDown
ld c, a
push af
call .PrintTime
pop af
bit 0, a
jr nz, .press_A
bit 1, a
jr nz, .press_B
bit 6, a
jr nz, .pressed_up
bit 7, a
jr nz, .pressed_down
bit 5, a
jr nz, .pressed_left
bit 4, a
jr nz, .pressed_right
jr .joy_loop
.press_A
ld a, $0
scf
ret
.press_B
ld a, $1
scf
ret
.pressed_up
ld a, [wBuffer1]
call ResetClock_GetWraparoundTime
ld a, [de]
inc a
ld [de], a
cp b
jr c, .done_scroll
ld a, $0
ld [de], a
jr .done_scroll
.pressed_down
ld a, [wBuffer1]
call ResetClock_GetWraparoundTime
ld a, [de]
dec a
ld [de], a
cp -1
jr nz, .done_scroll
ld a, b
dec a
ld [de], a
jr .done_scroll
.pressed_left
ld hl, wBuffer1
dec [hl]
jr nz, .done_scroll
ld [hl], $3
jr .done_scroll
.pressed_right
ld hl, wBuffer1
inc [hl]
ld a, [hl]
cp $4
jr c, .done_scroll
ld [hl], $1
.done_scroll
xor a
ret
.PrintTime: ; 2011f (8:411f)
hlcoord 0, 5
ld b, 5
ld c, 18
call TextBox
decoord 1, 8
ld a, [wBuffer4]
ld b, a
farcall PrintDayOfWeek
ld a, [wBuffer5]
ld b, a
ld a, [wBuffer6]
ld c, a
decoord 11, 8
farcall PrintHoursMins
ld a, [wBuffer2]
lb de, " ", " "
call .PlaceChars
ld a, [wBuffer1]
lb de, "▲", "▼"
call .PlaceChars
ld a, [wBuffer1]
ld [wBuffer2], a
ret
; 20160 (8:4160)
.unreferenced ; 20160
; unused
ld a, [wBuffer3]
ld b, a
call Coord2Tile
ret
; 20168
.PlaceChars: ; 20168 (8:4168)
push de
call ResetClock_GetWraparoundTime
ld a, [wBuffer3]
dec a
ld b, a
call Coord2Tile
pop de
ld [hl], d
ld bc, 2 * SCREEN_WIDTH
add hl, bc
ld [hl], e
ret
; 2017c (8:417c)
UnreferencedString_HourJP: ; 2017c
; unused
db "じ@" ; HR
; 2017e
UnreferencedString_MinuteJP: ; 2017e
; unused
db "ふん@" ; MIN
; 20181

View File

@@ -0,0 +1,296 @@
_ResetClock: ; 4d3b1
farcall BlankScreen
ld b, SCGB_DIPLOMA
call GetSGBLayout
call LoadStandardFont
call LoadFontsExtra
ld de, MUSIC_MAIN_MENU
call PlayMusic
ld hl, .text_askreset
call PrintText
ld hl, .NoYes_MenuHeader
call CopyMenuHeader
call VerticalMenu
ret c
ld a, [wMenuCursorY]
cp $1
ret z
call ClockResetPassword
jr c, .wrongpassword
ld a, BANK(sRTCStatusFlags)
call GetSRAMBank
ld a, $80
ld [sRTCStatusFlags], a
call CloseSRAM
ld hl, .text_okay
call PrintText
ret
.wrongpassword
ld hl, .text_wrong
call PrintText
ret
.text_okay ; 0x4d3fe
; Password OK. Select CONTINUE & reset settings.
text_jump UnknownText_0x1c55db
db "@"
.text_wrong ; 0x4d403
; Wrong password!
text_jump UnknownText_0x1c560b
db "@"
.text_askreset ; 0x4d408
; Reset the clock?
text_jump UnknownText_0x1c561c
db "@"
.NoYes_MenuHeader: ; 0x4d40d
db 0 ; flags
menu_coords 14, 7, SCREEN_WIDTH - 1, TEXTBOX_Y - 1
dw .NoYes_MenuData
db 1 ; default option
.NoYes_MenuData: ; 0x4d415
db STATICMENU_CURSOR | STATICMENU_NO_TOP_SPACING ; flags
db 2 ; items
db "NO@"
db "YES@"
ClockResetPassword: ; 4d41e
call .CalculatePassword
push de
ld hl, wStringBuffer2
ld bc, 5
xor a
call ByteFill
ld a, $4
ld [wStringBuffer2 + 5], a
ld hl, .pleaseenterpasswordtext
call PrintText
.loop
call .updateIDdisplay
.loop2
call JoyTextDelay
ld a, [hJoyLast]
ld b, a
and A_BUTTON
jr nz, .confirm
ld a, b
and D_PAD
jr z, .loop2
call .dpadinput
ld c, 3
call DelayFrames
jr .loop
.confirm
call .ConvertDecIDToBytes
pop de
ld a, e
cp l
jr nz, .nope
ld a, d
cp h
jr nz, .nope
and a
ret
.nope
scf
ret
.pleaseenterpasswordtext ; 0x4d463
; Please enter the password.
text_jump UnknownText_0x1c562e
db "@"
.updateIDdisplay ; 4d468
hlcoord 14, 15
ld de, wStringBuffer2
ld c, 5
.loop3
ld a, [de]
add "0"
ld [hli], a
inc de
dec c
jr nz, .loop3
hlcoord 14, 16
ld bc, 5
ld a, " "
call ByteFill
hlcoord 14, 16
ld a, [wStringBuffer2 + 5]
ld e, a
ld d, $0
add hl, de
ld [hl], "▲"
ret
.dpadinput ; 4d490
ld a, b
and D_LEFT
jr nz, .left
ld a, b
and D_RIGHT
jr nz, .right
ld a, b
and D_UP
jr nz, .up
ld a, b
and D_DOWN
jr nz, .down
ret
.left
ld a, [wStringBuffer2 + 5]
and a
ret z
dec a
ld [wStringBuffer2 + 5], a
ret
.right
ld a, [wStringBuffer2 + 5]
cp $4
ret z
inc a
ld [wStringBuffer2 + 5], a
ret
.up
call .getcurrentdigit
ld a, [hl]
cp 9
jr z, .wraparound_up
inc a
ld [hl], a
ret
.wraparound_up
ld [hl], $0
ret
.down
call .getcurrentdigit
ld a, [hl]
and a
jr z, .wraparound_down
dec a
ld [hl], a
ret
.wraparound_down
ld [hl], 9
ret
.getcurrentdigit ; 4d4d5
ld a, [wStringBuffer2 + 5]
ld e, a
ld d, $0
ld hl, wStringBuffer2
add hl, de
ret
.ConvertDecIDToBytes: ; 4d4e0
ld hl, 0
ld de, wStringBuffer2 + 4
ld bc, 1
call .ConvertToBytes
ld bc, 10
call .ConvertToBytes
ld bc, 100
call .ConvertToBytes
ld bc, 1000
call .ConvertToBytes
ld bc, 10000
.ConvertToBytes: ; 4d501
ld a, [de]
dec de
push hl
ld hl, 0
call AddNTimes
ld c, l
ld b, h
pop hl
add hl, bc
ret
.CalculatePassword: ; 4d50f
ld a, BANK(sPlayerData)
call GetSRAMBank
ld de, 0
ld hl, sPlayerData + (wPlayerID - wPlayerData)
ld c, $2
call .ComponentFromNumber
ld hl, sPlayerData + (wPlayerName - wPlayerData)
ld c, NAME_LENGTH_JAPANESE - 1
call .ComponentFromString
ld hl, sPlayerData + (wMoney - wPlayerData)
ld c, $3
call .ComponentFromNumber
call CloseSRAM
ret
.ComponentFromNumber: ; 4d533
ld a, [hli]
add e
ld e, a
ld a, $0
adc d
ld d, a
dec c
jr nz, .ComponentFromNumber
ret
.ComponentFromString: ; 4d53e
ld a, [hli]
cp "@"
ret z
add e
ld e, a
ld a, $0
adc d
ld d, a
dec c
jr nz, .ComponentFromString
ret
_DeleteSaveData: ; 4d54c
farcall BlankScreen
ld b, SCGB_DIPLOMA
call GetSGBLayout
call LoadStandardFont
call LoadFontsExtra
ld de, MUSIC_MAIN_MENU
call PlayMusic
ld hl, .Text_ClearAllSaveData
call PrintText
ld hl, .NoYesMenuHeader
call CopyMenuHeader
call VerticalMenu
ret c
ld a, [wMenuCursorY]
cp $1
ret z
farcall EmptyAllSRAMBanks
ret
.Text_ClearAllSaveData: ; 0x4d580
; Clear all save data?
text_jump UnknownText_0x1c564a
db "@"
.NoYesMenuHeader: ; 0x4d585
db 0 ; flags
menu_coords 14, 7, SCREEN_WIDTH - 1, TEXTBOX_Y - 1
dw .MenuData
db 1 ; default option
.MenuData: ; 0x4d58d
db STATICMENU_CURSOR | STATICMENU_NO_TOP_SPACING ; flags
db 2 ; items
db "NO@"
db "YES@"

View File

@@ -0,0 +1,63 @@
Unreferenced_Function1dd6a9: ; 1dd6a9
ld a, b
ld b, c
ld c, a
push bc
push de
ld hl, sp+$2
ld d, h
ld e, l
pop hl
lb bc, PRINTNUM_LEADINGZEROS | 2, 5
call PrintNum
pop bc
ret
PrintHoursMins: ; 1dd6bb (77:56bb)
; Hours in b, minutes in c
ld a, b
cp 12
push af
jr c, .AM
jr z, .PM
sub 12
jr .PM
.AM:
or a
jr nz, .PM
ld a, 12
.PM:
ld b, a
; Crazy stuff happening with the stack
push bc
ld hl, sp+$1
push de
push hl
pop de
pop hl
ld [hl], " "
lb bc, 1, 2
call PrintNum
ld [hl], ":"
inc hl
ld d, h
ld e, l
ld hl, sp+$0
push de
push hl
pop de
pop hl
lb bc, PRINTNUM_LEADINGZEROS | 1, 2
call PrintNum
pop bc
ld de, String_AM
pop af
jr c, .place_am_pm
ld de, String_PM
.place_am_pm
inc hl
call PlaceString
ret
String_AM: db "AM@" ; 1dd6fc
String_PM: db "PM@" ; 1dd6ff

209
engine/rtc/rtc.asm Executable file
View File

@@ -0,0 +1,209 @@
Unreferenced_StopRTC:
ld a, SRAM_ENABLE
ld [MBC3SRamEnable], a
call LatchClock
ld a, RTC_DH
ld [MBC3SRamBank], a
ld a, [MBC3RTC]
set 6, a ; halt
ld [MBC3RTC], a
call CloseSRAM
ret
; 14019
StartRTC: ; 14019
ld a, SRAM_ENABLE
ld [MBC3SRamEnable], a
call LatchClock
ld a, RTC_DH
ld [MBC3SRamBank], a
ld a, [MBC3RTC]
res 6, a ; halt
ld [MBC3RTC], a
call CloseSRAM
ret
; 14032
GetTimeOfDay:: ; 14032
; get time of day based on the current hour
ld a, [hHours] ; hour
ld hl, TimesOfDay
.check
; if we're within the given time period,
; get the corresponding time of day
cp [hl]
jr c, .match
; else, get the next entry
inc hl
inc hl
; try again
jr .check
.match
; get time of day
inc hl
ld a, [hl]
ld [wTimeOfDay], a
ret
; 14044
TimesOfDay: ; 14044
; hours for the time of day
; 0400-0959 morn | 1000-1759 day | 1800-0359 nite
db MORN_HOUR, NITE_F
db DAY_HOUR, MORN_F
db NITE_HOUR, DAY_F
db MAX_HOUR, NITE_F
db -1, MORN_F
; 1404e
Unreferenced_1404e:
db 20, NITE_F
db 40, MORN_F
db 60, DAY_F
db -1, MORN_F
; 14056
StageRTCTimeForSave: ; 14056
call UpdateTime
ld hl, wRTC
ld a, [wCurDay]
ld [hli], a
ld a, [hHours]
ld [hli], a
ld a, [hMinutes]
ld [hli], a
ld a, [hSeconds]
ld [hli], a
ret
; 1406a
SaveRTC: ; 1406a
ld a, $a
ld [MBC3SRamEnable], a
call LatchClock
ld hl, MBC3RTC
ld a, $c
ld [MBC3SRamBank], a
res 7, [hl]
ld a, BANK(sRTCStatusFlags)
ld [MBC3SRamBank], a
xor a
ld [sRTCStatusFlags], a
call CloseSRAM
ret
; 14089
StartClock:: ; 14089
call GetClock
call Function1409b
call FixDays
jr nc, .skip_set
; bit 5: Day count exceeds 139
; bit 6: Day count exceeds 255
call RecordRTCStatus ; set flag on sRTCStatusFlags
.skip_set
call StartRTC
ret
; 1409b
Function1409b: ; 1409b
ld hl, hRTCDayHi
bit 7, [hl]
jr nz, .set_bit_7
bit 6, [hl]
jr nz, .set_bit_7
xor a
ret
.set_bit_7
; Day count exceeds 16383
ld a, %10000000
call RecordRTCStatus ; set bit 7 on sRTCStatusFlags
ret
; 140ae
Function140ae: ; 140ae
call CheckRTCStatus
ld c, a
and %11000000 ; Day count exceeded 255 or 16383
jr nz, .time_overflow
ld a, c
and %00100000 ; Day count exceeded 139
jr z, .dont_update
call UpdateTime
ld a, [wRTC + 0]
ld b, a
ld a, [wCurDay]
cp b
jr c, .dont_update
.time_overflow
farcall ClearDailyTimers
farcall Function170923
; mobile
ld a, 5 ; MBC30 bank used by JP Crystal; inaccessible by MBC3
call GetSRAMBank
ld a, [$aa8c] ; address of MBC30 bank
inc a
ld [$aa8c], a ; address of MBC30 bank
ld a, [$b2fa] ; address of MBC30 bank
inc a
ld [$b2fa], a ; address of MBC30 bank
call CloseSRAM
ret
.dont_update
xor a
ret
; 140ed
_InitTime:: ; 140ed
call GetClock
call FixDays
ld hl, hRTCSeconds
ld de, wStartSecond
ld a, [wStringBuffer2 + 3]
sub [hl]
dec hl
jr nc, .okay_secs
add 60
.okay_secs
ld [de], a
dec de
ld a, [wStringBuffer2 + 2]
sbc [hl]
dec hl
jr nc, .okay_mins
add 60
.okay_mins
ld [de], a
dec de
ld a, [wStringBuffer2 + 1]
sbc [hl]
dec hl
jr nc, .okay_hrs
add 24
.okay_hrs
ld [de], a
dec de
ld a, [wStringBuffer2]
sbc [hl]
dec hl
jr nc, .okay_days
add 140
ld c, 7
call SimpleDivide
.okay_days
ld [de], a
ret
; 1412a

773
engine/rtc/timeset.asm Executable file
View File

@@ -0,0 +1,773 @@
TIMESET_UP_ARROW EQUS "\"♂\"" ; $ef
TIMESET_DOWN_ARROW EQUS "\"♀\"" ; $f5
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 [wSpriteUpdatesEnabled], a
ld a, $10
ld [wMusicFade], a
ld a, LOW(MUSIC_NONE)
ld [wMusicFadeID], a
ld a, HIGH(MUSIC_NONE)
ld [wMusicFadeID + 1], a
ld c, 8
call DelayFrames
call RotateFourPalettesLeft
call ClearTileMap
call ClearSprites
ld b, SCGB_DIPLOMA
call GetSGBLayout
xor a
ld [hBGMapMode], a
call LoadStandardFont
ld de, TimeSetBackgroundGFX
ld hl, vTiles2 tile $00
lb bc, BANK(TimeSetBackgroundGFX), 1
call Request1bpp
ld de, TimeSetUpArrowGFX
ld hl, vTiles2 tile $01
lb bc, BANK(TimeSetUpArrowGFX), 1
call Request1bpp
ld de, TimeSetDownArrowGFX
ld hl, vTiles2 tile $02
lb bc, BANK(TimeSetDownArrowGFX), 1
call Request1bpp
call .ClearScreen
call WaitBGMap
call RotateFourPalettesRight
ld hl, Text_WokeUpOak
call PrintText
ld hl, wTimeSetBuffer
ld bc, 50
xor a
call ByteFill
ld a, 10 ; default hour = 10 AM
ld [wInitHourBuffer], a
.loop
ld hl, Text_WhatTimeIsIt
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 [wStringBuffer2 + 1], a
call .ClearScreen
ld hl, Text_WhatHrs
call PrintText
call YesNoBox
jr nc, .HourIsSet
call .ClearScreen
jr .loop
.HourIsSet:
ld hl, Text_HowManyMinutes
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, [wInitMinuteBuffer]
ld [wStringBuffer2 + 2], a
call .ClearScreen
ld hl, Text_WhoaMins
call PrintText
call YesNoBox
jr nc, .MinutesAreSet
call .ClearScreen
jr .HourIsSet
.MinutesAreSet:
call InitTimeOfDay
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)
UnreferencedFunction907f1: ; 907f1
ld h, d
ld l, e
push hl
call DisplayHourOClock
pop de
inc de
inc de
ld a, ":"
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
inc hl
inc hl
inc hl
ret
; 90810
SetMinutes: ; 90810 (24:4810)
ld a, [hJoyPressed]
and A_BUTTON
jr nz, .a_button
ld hl, hJoyLast
ld a, [hl]
and D_UP
jr nz, .d_up
ld a, [hl]
and D_DOWN
jr nz, .d_down
call DelayFrame
and a
ret
.d_down
ld hl, wInitMinuteBuffer
ld a, [hl]
and a
jr nz, .decrease
ld a, 59 + 1
.decrease
dec a
ld [hl], a
jr .finish_dpad
.d_up
ld hl, wInitMinuteBuffer
ld a, [hl]
cp 59
jr c, .increase
ld a, -1
.increase
inc a
ld [hl], a
.finish_dpad
hlcoord 12, 9
ld a, " "
ld bc, 7
call ByteFill
hlcoord 12, 9
call DisplayMinutesWithMinString
call WaitBGMap
and a
ret
.a_button
scf
ret
DisplayMinutesWithMinString: ; 90859 (24:4859)
ld de, wInitMinuteBuffer
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)
Text_WokeUpOak: ; 0x90874
; Zzz… Hm? Wha…? You woke me up! Will you check the clock for me?
text_jump UnknownText_0x1bc29c
db "@"
; 0x90879
Text_WhatTimeIsIt: ; 0x90879
; What time is it?
text_jump UnknownText_0x1bc2eb
db "@"
; 0x9087e
String_oclock:
db "o'clock@"
; 90886
Text_WhatHrs: ; 0x90886
; What?@ @
text_jump UnknownText_0x1bc2fd
start_asm
hlcoord 1, 16
call DisplayHourOClock
ld hl, .QuestionMark
ret
; 90895 (24:4895)
.QuestionMark: ; 0x90895
; ?
text_jump UnknownText_0x1bc305
db "@"
; 0x9089a
Text_HowManyMinutes: ; 0x9089a
; How many minutes?
text_jump UnknownText_0x1bc308
db "@"
; 0x9089f
String_min:
db "min.@"
; 908a4
Text_WhoaMins: ; 0x908a4
; Whoa!@ @
text_jump UnknownText_0x1bc31b
start_asm
hlcoord 7, 14
call DisplayMinutesWithMinString
ld hl, .QuestionMark
ret
; 908b3 (24:48b3)
.QuestionMark: ; 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, wInitMinuteBuffer
lb bc, PRINTNUM_LEADINGZEROS | 1, 2
call PrintNum
ld b, h
ld c, l
ld a, [wInitHourBuffer]
cp MORN_HOUR
jr c, .nite
cp DAY_HOUR + 1
jr c, .morn
cp NITE_HOUR
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
TimeSetBackgroundGFX: ; 908fb
INCBIN "gfx/new_game/timeset_bg.1bpp"
TimeSetUpArrowGFX: ; 90903
INCBIN "gfx/new_game/up_arrow.1bpp"
TimeSetDownArrowGFX: ; 9090b
INCBIN "gfx/new_game/down_arrow.1bpp"
; 90913
SetDayOfWeek: ; 90913
ld a, [hInMenu]
push af
ld a, $1
ld [hInMenu], a
ld de, TimeSetUpArrowGFX
ld hl, vTiles0 tile TIMESET_UP_ARROW
lb bc, BANK(TimeSetUpArrowGFX), 1
call Request1bpp
ld de, TimeSetDownArrowGFX
ld hl, vTiles0 tile TIMESET_DOWN_ARROW
lb bc, BANK(TimeSetDownArrowGFX), 1
call Request1bpp
xor a
ld [wTempDayOfWeek], a
.loop
hlcoord 0, 12
lb bc, 4, 18
call TextBox
call LoadStandardMenuHeader
ld hl, .WhatDayIsItText
call PrintText
hlcoord 9, 3
ld b, 2
ld c, 9
call TextBox
hlcoord 14, 3
ld [hl], TIMESET_UP_ARROW
hlcoord 14, 6
ld [hl], TIMESET_DOWN_ARROW
hlcoord 10, 5
call .PlaceWeekdayString
call ApplyTilemap
ld c, 10
call DelayFrames
.loop2
call JoyTextDelay
call .GetJoypadAction
jr nc, .loop2
call ExitMenu
call UpdateSprites
ld hl, .ConfirmWeekdayText
call PrintText
call YesNoBox
jr c, .loop
ld a, [wTempDayOfWeek]
ld [wStringBuffer2], a
call InitDayOfWeek
call LoadStandardFont
pop af
ld [hInMenu], a
ret
; 90993
.GetJoypadAction: ; 90993
ld a, [hJoyPressed]
and A_BUTTON
jr z, .not_A
scf
ret
.not_A
ld hl, hJoyLast
ld a, [hl]
and D_UP
jr nz, .d_up
ld a, [hl]
and D_DOWN
jr nz, .d_down
call DelayFrame
and a
ret
.d_down
ld hl, wTempDayOfWeek
ld a, [hl]
and a
jr nz, .decrease
ld a, SATURDAY + 1
.decrease
dec a
ld [hl], a
jr .finish_dpad
.d_up
ld hl, wTempDayOfWeek
ld a, [hl]
cp 6
jr c, .increase
ld a, SUNDAY - 1
.increase
inc a
ld [hl], a
.finish_dpad
xor a
ld [hBGMapMode], a
hlcoord 10, 4
ld b, 2
ld c, 9
call ClearBox
hlcoord 10, 5
call .PlaceWeekdayString
call WaitBGMap
and a
ret
; 909de
.PlaceWeekdayString: ; 909de
push hl
ld a, [wTempDayOfWeek]
ld e, a
ld d, 0
ld hl, .WeekdayStrings
add hl, de
add hl, de
ld a, [hli]
ld d, [hl]
ld e, a
pop hl
call PlaceString
ret
; 909f2
.WeekdayStrings: ; 909f2
; entries correspond to wCurDay constants (see constants/wram_constants.asm)
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@"
.WhatDayIsItText: ; 0x90a3f
; What day is it?
text_jump UnknownText_0x1bc369
db "@"
; 0x90a44
.ConfirmWeekdayText: ; 0x90a44
start_asm
hlcoord 1, 14
call .PlaceWeekdayString
ld hl, .IsIt
ret
; 90a4f (24:4a4f)
.IsIt: ; 0x90a4f
; , is it?
text_jump UnknownText_0x1bc37a
db "@"
; 0x90a54
InitialSetDSTFlag: ; 90a54
ld a, [wDST]
set 7, a
ld [wDST], a
hlcoord 1, 14
lb bc, 3, 18
call ClearBox
ld hl, .Text
call PlaceHLTextAtBC
ret
; 90a6c
.Text: ; 90a6c
start_asm
call UpdateTime
ld a, [hHours]
ld b, a
ld a, [hMinutes]
ld c, a
decoord 1, 14
farcall PrintHoursMins
ld hl, .DSTIsThatOK
ret
; 90a83 (24:4a83)
.DSTIsThatOK: ; 0x90a83
; DST, is that OK?
text_jump Text_DSTIsThatOK
db "@"
; 0x90a88
InitialClearDSTFlag: ; 90a88
ld a, [wDST]
res 7, a
ld [wDST], a
hlcoord 1, 14
lb bc, 3, 18
call ClearBox
ld hl, .Text
call PlaceHLTextAtBC
ret
; 90aa0
.Text: ; 90aa0
start_asm
call UpdateTime
ld a, [hHours]
ld b, a
ld a, [hMinutes]
ld c, a
decoord 1, 14
farcall PrintHoursMins
ld hl, .IsThatOK
ret
; 90ab7
.IsThatOK: ; 0x90ab7
; , is that OK?
text_jump UnknownText_0x1c5ff1
db "@"
; 0x90abc
DebugDisplayTime: ; 90abc
hlcoord 1, 14
lb bc, 3, SCREEN_WIDTH - 2
call ClearBox
ld hl, .Text
call PlaceHLTextAtBC
ret
; 90acc
.Text: ; 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 .PrintTime
hlcoord 1, 16
ld [hl], "D"
inc hl
ld [hl], "F"
inc hl
ld [hl], " "
inc hl
ld de, wStartDay
call .PrintTime
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, .NowOnDebug
ret
; 90b13
.NowOnDebug: ; 0x90b13
text "<PARA>Now on DEBUG…"
prompt
; 0x90b23
.PrintTime: ; 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 MORN_HOUR
jr c, .nite
cp DAY_HOUR
jr c, .morn
cp NITE_HOUR
jr c, .day
.nite
ld de, .nite_string
ret
.morn
ld de, .morn_string
ret
.day
ld de, .day_string
ret
; 90b71 (24:4b71)
.nite_string: db "NITE@"
.morn_string: db "MORN@"
.day_string: 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 NOON_HOUR
ret c
ret z
sub NOON_HOUR
ret
.midnight
ld a, NOON_HOUR
ret