ref: 54d507cf617a0251b074de9f58b6999203ddb52a
dir: /engine/rtc/timeset.asm/
TIMESET_UP_ARROW EQUS "\"♂\"" ; $ef TIMESET_DOWN_ARROW EQUS "\"♀\"" ; $f5 InitClock: ; 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: 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: 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: 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 UnreferencedFunction907f1: 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 SetMinutes: 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: ld de, wInitMinuteBuffer call PrintTwoDigitNumberRightAlign inc hl ld de, String_min call PlaceString ret PrintTwoDigitNumberRightAlign: push hl ld a, " " ld [hli], a ld [hl], a pop hl lb bc, PRINTNUM_RIGHTALIGN | 1, 2 call PrintNum ret Text_WokeUpOak: ; Zzz… Hm? Wha…? You woke me up! Will you check the clock for me? text_jump UnknownText_0x1bc29c db "@" Text_WhatTimeIsIt: ; What time is it? text_jump UnknownText_0x1bc2eb db "@" String_oclock: db "o'clock@" Text_WhatHrs: ; What?@ @ text_jump UnknownText_0x1bc2fd start_asm hlcoord 1, 16 call DisplayHourOClock ld hl, .QuestionMark ret .QuestionMark: ; ? text_jump UnknownText_0x1bc305 db "@" Text_HowManyMinutes: ; How many minutes? text_jump UnknownText_0x1bc308 db "@" String_min: db "min.@" Text_WhoaMins: ; Whoa!@ @ text_jump UnknownText_0x1bc31b start_asm hlcoord 7, 14 call DisplayMinutesWithMinString ld hl, .QuestionMark ret .QuestionMark: ; ? text_jump UnknownText_0x1bc323 db "@" OakText_ResponseToSetTime: 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 .overslept ; ! I overslept! text_jump UnknownText_0x1bc326 db "@" .yikes ; ! Yikes! I over- slept! text_jump UnknownText_0x1bc336 db "@" .sodark ; ! No wonder it's so dark! text_jump UnknownText_0x1bc34f db "@" TimeSetBackgroundGFX: INCBIN "gfx/new_game/timeset_bg.1bpp" TimeSetUpArrowGFX: INCBIN "gfx/new_game/up_arrow.1bpp" TimeSetDownArrowGFX: INCBIN "gfx/new_game/down_arrow.1bpp" SetDayOfWeek: 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 .GetJoypadAction: 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 .PlaceWeekdayString: 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 .WeekdayStrings: ; 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: ; What day is it? text_jump UnknownText_0x1bc369 db "@" .ConfirmWeekdayText: start_asm hlcoord 1, 14 call .PlaceWeekdayString ld hl, .IsIt ret .IsIt: ; , is it? text_jump UnknownText_0x1bc37a db "@" InitialSetDSTFlag: ld a, [wDST] set 7, a ld [wDST], a hlcoord 1, 14 lb bc, 3, 18 call ClearBox ld hl, .Text call PlaceHLTextAtBC ret .Text: 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 .DSTIsThatOK: ; DST, is that OK? text_jump Text_DSTIsThatOK db "@" InitialClearDSTFlag: ld a, [wDST] res 7, a ld [wDST], a hlcoord 1, 14 lb bc, 3, 18 call ClearBox ld hl, .Text call PlaceHLTextAtBC ret .Text: 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 .IsThatOK: ; , is that OK? text_jump UnknownText_0x1c5ff1 db "@" DebugDisplayTime: hlcoord 1, 14 lb bc, 3, SCREEN_WIDTH - 2 call ClearBox ld hl, .Text call PlaceHLTextAtBC ret .Text: 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 .NowOnDebug: text "<PARA>Now on DEBUG…" prompt .PrintTime: 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 PrintHour: 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: 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 .nite_string: db "NITE@" .morn_string: db "MORN@" .day_string: db "DAY@" 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