First Commit

Upload literally everything from the pokecrystal16 expand-move-ID branch
This commit is contained in:
Zeta_Null 2023-09-10 12:35:35 -04:00
commit 2f8a41f833
4618 changed files with 480386 additions and 0 deletions

View file

@ -0,0 +1,65 @@
PrintFiveDigitNumber: ; unreferenced
; Debug function?
; Input: bc = value, de = destination
ld a, b
ld b, c
ld c, a
push bc ; de points to this on the stack for PrintNum
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:
; 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@"
String_PM: db "PM@"

View file

@ -0,0 +1,255 @@
_ResetClock:
farcall BlankScreen
ld b, SCGB_DIPLOMA
call GetSGBLayout
call LoadStandardFont
call LoadFontsExtra
ld de, MUSIC_MAIN_MENU
call PlayMusic
ld hl, .PasswordAskResetClockText
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 OpenSRAM
ld a, $80
ld [sRTCStatusFlags], a
call CloseSRAM
ld hl, .PasswordAskResetText
call PrintText
ret
.wrongpassword
ld hl, .PasswordWrongText
call PrintText
ret
.PasswordAskResetText:
text_far _PasswordAskResetText
text_end
.PasswordWrongText:
text_far _PasswordWrongText
text_end
.PasswordAskResetClockText:
text_far _PasswordAskResetClockText
text_end
.NoYes_MenuHeader:
db 0 ; flags
menu_coords 14, 7, SCREEN_WIDTH - 1, TEXTBOX_Y - 1
dw .NoYes_MenuData
db 1 ; default option
.NoYes_MenuData:
db STATICMENU_CURSOR | STATICMENU_NO_TOP_SPACING ; flags
db 2 ; items
db "NO@"
db "YES@"
ClockResetPassword:
call .CalculatePassword
push de
ld hl, wStringBuffer2
ld bc, 5
xor a
call ByteFill
ld a, 4
ld [wStringBuffer2 + 5], a
ld hl, .PasswordAskEnterText
call PrintText
.loop
call .updateIDdisplay
.loop2
call JoyTextDelay
ldh 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
.PasswordAskEnterText:
text_far _PasswordAskEnterText
text_end
.updateIDdisplay
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
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
ld a, [wStringBuffer2 + 5]
ld e, a
ld d, 0
ld hl, wStringBuffer2
add hl, de
ret
.ConvertDecIDToBytes:
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:
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:
ld a, BANK(sPlayerData)
call OpenSRAM
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:
ld a, [hli]
add e
ld e, a
ld a, 0
adc d
ld d, a
dec c
jr nz, .ComponentFromNumber
ret
.ComponentFromString:
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

View file

@ -0,0 +1,241 @@
; RestartClock_GetWraparoundTime.WrapAroundTimes indexes
const_def 1
const RESTART_CLOCK_DAY
const RESTART_CLOCK_HOUR
const RESTART_CLOCK_MIN
DEF NUM_RESTART_CLOCK_DIVISIONS EQU const_value - 1
RestartClock_GetWraparoundTime:
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
.WrapAroundTimes:
; entries correspond to RESTART_CLOCK_* constants
MACRO wraparound_time
dw \1 ; value pointer
db \2 ; maximum value
db \3 ; up/down arrow x coord (pairs with wRestartClockUpArrowYCoord)
ENDM
wraparound_time wRestartClockDay, 7, 4
wraparound_time wRestartClockHour, 24, 12
wraparound_time wRestartClockMin, 60, 15
RestartClock:
; If we're here, we had an RTC overflow.
ld hl, .ClockTimeMayBeWrongText
call PrintText
ld hl, wOptions
ld a, [hl]
push af
set NO_TEXT_SCROLL, [hl]
call LoadStandardMenuHeader
call ClearTilemap
ld hl, .ClockSetWithControlPadText
call PrintText
call .SetClock
call ExitMenu
pop bc
ld hl, wOptions
ld [hl], b
ld c, a
ret
.ClockTimeMayBeWrongText:
text_far _ClockTimeMayBeWrongText
text_end
.ClockSetWithControlPadText:
text_far _ClockSetWithControlPadText
text_end
.SetClock:
ld a, RESTART_CLOCK_DAY
ld [wRestartClockCurDivision], a
ld [wRestartClockPrevDivision], a
ld a, 8
ld [wRestartClockUpArrowYCoord], a
call UpdateTime
call GetWeekday
ld [wRestartClockDay], a
ldh a, [hHours]
ld [wRestartClockHour], a
ldh a, [hMinutes]
ld [wRestartClockMin], a
.loop
call .joy_loop
jr nc, .loop
and a
ret nz
call .PrintTime
ld hl, .ClockIsThisOKText
call PrintText
call YesNoBox
jr c, .cancel
ld a, [wRestartClockDay]
ld [wStringBuffer2], a
ld a, [wRestartClockHour]
ld [wStringBuffer2 + 1], a
ld a, [wRestartClockMin]
ld [wStringBuffer2 + 2], a
xor a
ld [wStringBuffer2 + 3], a
call InitTime
call .PrintTime
ld hl, .ClockHasResetText
call PrintText
call WaitPressAorB_BlinkCursor
xor a ; FALSE
ret
.cancel
ld a, TRUE
ret
.ClockIsThisOKText:
text_far _ClockIsThisOKText
text_end
.ClockHasResetText:
text_far _ClockHasResetText
text_end
.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, FALSE
scf
ret
.press_B
ld a, TRUE
scf
ret
.pressed_up
ld a, [wRestartClockCurDivision]
call RestartClock_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, [wRestartClockCurDivision]
call RestartClock_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, wRestartClockCurDivision
dec [hl]
jr nz, .done_scroll
ld [hl], RESTART_CLOCK_MIN
jr .done_scroll
.pressed_right
ld hl, wRestartClockCurDivision
inc [hl]
ld a, [hl]
cp NUM_RESTART_CLOCK_DIVISIONS + 1
jr c, .done_scroll
ld [hl], RESTART_CLOCK_DAY
.done_scroll
xor a ; FALSE
ret
.PrintTime:
hlcoord 0, 5
ld b, 5
ld c, 18
call Textbox
decoord 1, 8
ld a, [wRestartClockDay]
ld b, a
farcall PrintDayOfWeek
ld a, [wRestartClockHour]
ld b, a
ld a, [wRestartClockMin]
ld c, a
decoord 11, 8
farcall PrintHoursMins
ld a, [wRestartClockPrevDivision]
lb de, " ", " "
call .PlaceChars
ld a, [wRestartClockCurDivision]
lb de, "▲", "▼"
call .PlaceChars
ld a, [wRestartClockCurDivision]
ld [wRestartClockPrevDivision], a
ret
.UnusedPlaceCharsFragment: ; unreferenced
ld a, [wRestartClockUpArrowYCoord]
ld b, a
call Coord2Tile
ret
.PlaceChars:
push de
call RestartClock_GetWraparoundTime
ld a, [wRestartClockUpArrowYCoord]
dec a
ld b, a
call Coord2Tile
pop de
ld [hl], d
ld bc, 2 * SCREEN_WIDTH
add hl, bc
ld [hl], e
ret
JPHourString: ; unreferenced
db "じ@" ; HR
JPMinuteString: ; unreferenced
db "ふん@" ; MIN

201
engine/rtc/rtc.asm Normal file
View file

@ -0,0 +1,201 @@
StopRTC: ; unreferenced
ld a, SRAM_ENABLE
ld [MBC3SRamEnable], a
call LatchClock
ld a, RTC_DH
ldh [hSRAMBank], a
ld [MBC3SRamBank], a
ld a, [MBC3RTC]
set 6, a ; halt
ld [MBC3RTC], a
call CloseSRAM
ret
StartRTC:
ld a, SRAM_ENABLE
ld [MBC3SRamEnable], a
call LatchClock
ld a, RTC_DH
ldh [hSRAMBank], a
ld [MBC3SRamBank], a
ld a, [MBC3RTC]
res 6, a ; halt
ld [MBC3RTC], a
call CloseSRAM
ret
GetTimeOfDay::
; get time of day based on the current hour
ldh 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
TimesOfDay:
; 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
BetaTimesOfDay: ; unreferenced
db 20, NITE_F
db 40, MORN_F
db 60, DAY_F
db -1, MORN_F
StageRTCTimeForSave:
call UpdateTime
ld hl, wRTC
ld a, [wCurDay]
ld [hli], a
ldh a, [hHours]
ld [hli], a
ldh a, [hMinutes]
ld [hli], a
ldh a, [hSeconds]
ld [hli], a
ret
SaveRTC:
ld a, SRAM_ENABLE
ld [MBC3SRamEnable], a
call LatchClock
ld hl, MBC3RTC
ld a, RTC_DH
ldh [hSRAMBank], a
ld [MBC3SRamBank], a
res 7, [hl]
ld a, BANK(sRTCStatusFlags)
ldh [hSRAMBank], a
ld [MBC3SRamBank], a
xor a
ld [sRTCStatusFlags], a
call CloseSRAM
ret
StartClock::
call GetClock
call _FixDays
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
_FixDays:
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
ClockContinue:
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
ld a, BANK(s5_aa8c) ; aka BANK(s5_b2fa)
call OpenSRAM
ld a, [s5_aa8c]
inc a
ld [s5_aa8c], a
ld a, [s5_b2fa]
inc a
ld [s5_b2fa], a
call CloseSRAM
ret
.dont_update
xor a
ret
_InitTime::
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

726
engine/rtc/timeset.asm Normal file
View file

@ -0,0 +1,726 @@
DEF TIMESET_UP_ARROW EQU "♂" ; $ef
DEF TIMESET_DOWN_ARROW EQU "♀" ; $f5
InitClock:
; Ask the player to set the time.
ldh a, [hInMenu]
push af
ld a, $1
ldh [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
ldh [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, OakTimeWokeUpText
call PrintText
ld hl, wTimeSetBuffer
ld bc, wTimeSetBufferEnd - wTimeSetBuffer
xor a
call ByteFill
ld a, 10 ; default hour = 10 AM
ld [wInitHourBuffer], a
.loop
ld hl, OakTimeWhatTimeIsItText
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, OakTimeWhatHoursText
call PrintText
call YesNoBox
jr nc, .HourIsSet
call .ClearScreen
jr .loop
.HourIsSet:
ld hl, OakTimeHowManyMinutesText
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, OakTimeWhoaMinutesText
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
ldh [hInMenu], a
ret
.ClearScreen:
xor a
ldh [hBGMapMode], a
hlcoord 0, 0
ld bc, SCREEN_HEIGHT * SCREEN_WIDTH
xor a
call ByteFill
ld a, $1
ldh [hBGMapMode], a
ret
SetHour:
ldh 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
DisplayHoursMinutesWithMinString: ; unreferenced
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:
ldh 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 PrintTwoDigitNumberLeftAlign
inc hl
ld de, String_min
call PlaceString
ret
PrintTwoDigitNumberLeftAlign:
push hl
ld a, " "
ld [hli], a
ld [hl], a
pop hl
lb bc, PRINTNUM_LEFTALIGN | 1, 2
call PrintNum
ret
OakTimeWokeUpText:
text_far _OakTimeWokeUpText
text_end
OakTimeWhatTimeIsItText:
text_far _OakTimeWhatTimeIsItText
text_end
String_oclock:
db "o'clock@"
OakTimeWhatHoursText:
; What?@ @
text_far _OakTimeWhatHoursText
text_asm
hlcoord 1, 16
call DisplayHourOClock
ld hl, .OakTimeHoursQuestionMarkText
ret
.OakTimeHoursQuestionMarkText:
text_far _OakTimeHoursQuestionMarkText
text_end
OakTimeHowManyMinutesText:
text_far _OakTimeHowManyMinutesText
text_end
String_min:
db "min.@"
OakTimeWhoaMinutesText:
; Whoa!@ @
text_far _OakTimeWhoaMinutesText
text_asm
hlcoord 7, 14
call DisplayMinutesWithMinString
ld hl, .OakTimeMinutesQuestionMarkText
ret
.OakTimeMinutesQuestionMarkText:
text_far _OakTimeMinutesQuestionMarkText
text_end
OakText_ResponseToSetTime:
text_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, .OakTimeSoDarkText
ret
.morn
ld hl, .OakTimeOversleptText
ret
.day
ld hl, .OakTimeYikesText
ret
.OakTimeOversleptText:
text_far _OakTimeOversleptText
text_end
.OakTimeYikesText:
text_far _OakTimeYikesText
text_end
.OakTimeSoDarkText:
text_far _OakTimeSoDarkText
text_end
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:
ldh a, [hInMenu]
push af
ld a, $1
ldh [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, .OakTimeWhatDayIsItText
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
ldh [hInMenu], a
ret
.GetJoypadAction:
ldh 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
ldh [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@"
.OakTimeWhatDayIsItText:
text_far _OakTimeWhatDayIsItText
text_end
.ConfirmWeekdayText:
text_asm
hlcoord 1, 14
call .PlaceWeekdayString
ld hl, .OakTimeIsItText
ret
.OakTimeIsItText:
text_far _OakTimeIsItText
text_end
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:
text_asm
call UpdateTime
ldh a, [hHours]
ld b, a
ldh a, [hMinutes]
ld c, a
decoord 1, 14
farcall PrintHoursMins
ld hl, .DSTIsThatOKText
ret
.DSTIsThatOKText:
text_far _DSTIsThatOKText
text_end
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:
text_asm
call UpdateTime
ldh a, [hHours]
ld b, a
ldh a, [hMinutes]
ld c, a
decoord 1, 14
farcall PrintHoursMins
ld hl, .TimeAskOkayText
ret
.TimeAskOkayText:
text_far _TimeAskOkayText
text_end
MrChrono: ; unreferenced
hlcoord 1, 14
lb bc, 3, SCREEN_WIDTH - 2
call ClearBox
ld hl, .Text
call PlaceHLTextAtBC
ret
.Text:
text_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_start
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 [wTextDecimalByte], a
ld de, wTextDecimalByte
call PrintTwoDigitNumberLeftAlign
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