mirror of https://github.com/pret/pokecrystal.git
774 lines
11 KiB
NASM
Executable File
774 lines
11 KiB
NASM
Executable File
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 [MusicFade], a
|
|
ld a, LOW(MUSIC_NONE)
|
|
ld [MusicFadeID], a
|
|
ld a, HIGH(MUSIC_NONE)
|
|
ld [MusicFadeID + 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 [StringBuffer2 + 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 [StringBuffer2 + 2], a
|
|
call .ClearScreen
|
|
ld hl, Text_WhoaMins
|
|
call PrintText
|
|
call YesNoBox
|
|
jr nc, .MinutesAreSet
|
|
call .ClearScreen
|
|
jr .HourIsSet
|
|
|
|
.MinutesAreSet:
|
|
call SetTimeOfDay
|
|
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/timeset/background.1bpp"
|
|
TimeSetUpArrowGFX: ; 90903
|
|
INCBIN "gfx/timeset/up_arrow.1bpp"
|
|
TimeSetDownArrowGFX: ; 9090b
|
|
INCBIN "gfx/timeset/down_arrow.1bpp"
|
|
; 90913
|
|
|
|
Special_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 LoadStandardMenuDataHeader
|
|
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 [StringBuffer2], a
|
|
call SetDayOfWeek
|
|
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 CurDay 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
|
|
|
|
Special_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
|
|
|
|
Special_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, StartDay
|
|
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
|