summaryrefslogtreecommitdiff
path: root/engine/menu/timeset.asm
diff options
context:
space:
mode:
Diffstat (limited to 'engine/menu/timeset.asm')
-rwxr-xr-xengine/menu/timeset.asm773
1 files changed, 773 insertions, 0 deletions
diff --git a/engine/menu/timeset.asm b/engine/menu/timeset.asm
new file mode 100755
index 000000000..eda3094e1
--- /dev/null
+++ b/engine/menu/timeset.asm
@@ -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