pokecrystal/engine/timeset.asm

772 lines
11 KiB
NASM
Executable File

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, MUSIC_NONE % $100
ld [MusicFadeIDLo], a
ld a, MUSIC_NONE / $100
ld [MusicFadeIDHi], a
ld c, 8
call DelayFrames
call RotateFourPalettesLeft
call ClearTileMap
call ClearSprites
ld b, SCGB_08
call GetSGBLayout
xor a
ld [hBGMapMode], a
call LoadStandardFont
ld de, GFX_908fb
ld hl, VTiles2 tile $00
lb bc, BANK(GFX_908fb), 1
call Request1bpp
ld de, GFX_90903
ld hl, VTiles2 tile $01
lb bc, BANK(GFX_90903), 1
call Request1bpp
ld de, GFX_9090b
ld hl, VTiles2 tile $02
lb bc, BANK(GFX_9090b), 1
call Request1bpp
call .ClearScreen
call WaitBGMap
call RotateFourPalettesRight
ld hl, UnknownText_0x90874
call PrintText
ld hl, wc608
ld bc, 50
xor a
call ByteFill
ld a, $a
ld [wInitHourBuffer], a
.loop
ld hl, UnknownText_0x90879
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, UnknownText_0x90886
call PrintText
call YesNoBox
jr nc, .HourIsSet
call .ClearScreen
jr .loop
.HourIsSet
ld hl, UnknownText_0x9089a
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, [BattleMonNick + 5]
ld [StringBuffer2 + 2], a
call .ClearScreen
ld hl, UnknownText_0x908a4
call PrintText
call YesNoBox
jr nc, .MinutesAreSet
call .ClearScreen
jr .HourIsSet
.MinutesAreSet
call Function658
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)
Function907f1: ; 907f1
ld h, d
ld l, e
push hl
call DisplayHourOClock
pop de
rept 2
inc de
endr
ld a, $9c
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
rept 3
inc hl
endr
ret
; 90810
SetMinutes: ; 90810 (24:4810)
ld a, [hJoyPressed]
and A_BUTTON
jr nz, .asm_90857
ld hl, hJoyLast
ld a, [hl]
and D_UP
jr nz, .asm_90835
ld a, [hl]
and D_DOWN
jr nz, .asm_90828
call DelayFrame
and a
ret
.asm_90828
ld hl, BattleMonNick + 5
ld a, [hl]
and a
jr nz, .asm_90831
ld a, 59 + 1
.asm_90831
dec a
ld [hl], a
jr .asm_90841
.asm_90835
ld hl, BattleMonNick + 5
ld a, [hl]
cp 59
jr c, .asm_9083f
ld a, -1
.asm_9083f
inc a
ld [hl], a
.asm_90841
hlcoord 12, 9
ld a, " "
ld bc, 7
call ByteFill
hlcoord 12, 9
call DisplayMinutesWithMinString
call WaitBGMap
and a
ret
.asm_90857
scf
ret
DisplayMinutesWithMinString: ; 90859 (24:4859)
ld de, BattleMonNick + 5
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)
UnknownText_0x90874: ; 0x90874
; Zzz… Hm? Wha…? You woke me up! Will you check the clock for me?
text_jump UnknownText_0x1bc29c
db "@"
; 0x90879
UnknownText_0x90879: ; 0x90879
; What time is it?
text_jump UnknownText_0x1bc2eb
db "@"
; 0x9087e
String_oclock:
db "o'clock@"
; 90886
UnknownText_0x90886: ; 0x90886
; What?@ @
text_jump UnknownText_0x1bc2fd
start_asm
hlcoord 1, 16
call DisplayHourOClock
ld hl, UnknownText_0x90895
ret
; 90895 (24:4895)
UnknownText_0x90895: ; 0x90895
; ?
text_jump UnknownText_0x1bc305
db "@"
; 0x9089a
UnknownText_0x9089a: ; 0x9089a
; How many minutes?
text_jump UnknownText_0x1bc308
db "@"
; 0x9089f
String_min:
db "min.@"
; 908a4
UnknownText_0x908a4: ; 0x908a4
; Whoa!@ @
text_jump UnknownText_0x1bc31b
start_asm
; 0x908a9
hlcoord 7, 14
call DisplayMinutesWithMinString
ld hl, UnknownText_0x908b3
ret
; 908b3 (24:48b3)
UnknownText_0x908b3: ; 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, BattleMonNick + 5
lb bc, PRINTNUM_LEADINGZEROS | 1, 2
call PrintNum
ld b, h
ld c, l
ld a, [wInitHourBuffer]
cp 4
jr c, .NITE
cp 11
jr c, .MORN
cp 18
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
GFX_908fb: ; 908fb
INCBIN "gfx/unknown/0908fb.2bpp"
GFX_90903: ; 90903
INCBIN "gfx/unknown/090903.2bpp"
GFX_9090b: ; 9090b
INCBIN "gfx/unknown/09090b.2bpp"
; 90913
Special_SetDayOfWeek: ; 90913
ld a, [hInMenu]
push af
ld a, $1
ld [hInMenu], a
ld de, GFX_90903
ld hl, VTiles1 tile $6f
lb bc, BANK(GFX_90903), 1
call Request1bpp
ld de, GFX_9090b
ld hl, VTiles1 tile $75
lb bc, BANK(GFX_9090b), 1
call Request1bpp
xor a
ld [wd002], a
.asm_90936
hlcoord 0, 12
lb bc, 4, 18
call TextBox
call LoadStandardMenuDataHeader
ld hl, UnknownText_0x90a3f
call PrintText
hlcoord 9, 3
ld b, 2
ld c, 9
call TextBox
hlcoord 14, 3
ld [hl], $ef
hlcoord 14, 6
ld [hl], $f5
hlcoord 10, 5
call Function909de
call ApplyTilemap
ld c, 10
call DelayFrames
.asm_9096a
call JoyTextDelay
call Function90993
jr nc, .asm_9096a
call ExitMenu
call UpdateSprites
ld hl, UnknownText_0x90a44
call PrintText
call YesNoBox
jr c, .asm_90936
ld a, [wd002]
ld [StringBuffer2], a
call Function663
call LoadStandardFont
pop af
ld [hInMenu], a
ret
; 90993
Function90993: ; 90993
ld a, [hJoyPressed]
and A_BUTTON
jr z, .asm_9099b
scf
ret
.asm_9099b
ld hl, hJoyLast
ld a, [hl]
and D_UP
jr nz, .asm_909ba
ld a, [hl]
and D_DOWN
jr nz, .asm_909ad
call DelayFrame
and a
ret
.asm_909ad
ld hl, wd002
ld a, [hl]
and a
jr nz, .asm_909b6
ld a, 6 + 1
.asm_909b6
dec a
ld [hl], a
jr .asm_909c6
.asm_909ba
ld hl, wd002
ld a, [hl]
cp 6
jr c, .asm_909c4
ld a, -1
.asm_909c4
inc a
ld [hl], a
.asm_909c6
xor a
ld [hBGMapMode], a
hlcoord 10, 4
ld b, $2
ld c, $9
call ClearBox
hlcoord 10, 5
call Function909de
call WaitBGMap
and a
ret
; 909de
Function909de: ; 909de
push hl
ld a, [wd002]
ld e, a
ld d, 0
ld hl, WeekdaysStrings
rept 2
add hl, de
endr
ld a, [hli]
ld d, [hl]
ld e, a
pop hl
call PlaceString
ret
; 909f2
WeekdaysStrings: ; 909f2
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@"
UnknownText_0x90a3f: ; 0x90a3f
; What day is it?
text_jump UnknownText_0x1bc369
db "@"
; 0x90a44
UnknownText_0x90a44: ; 0x90a44
start_asm
hlcoord 1, 14
call Function909de
ld hl, UnknownText_0x90a4f
ret
; 90a4f (24:4a4f)
UnknownText_0x90a4f: ; 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, UnknownText_0x90a6c
call PlaceWholeStringInBoxAtOnce
ret
; 90a6c
UnknownText_0x90a6c: ; 90a6c
start_asm
call UpdateTime
ld a, [hHours]
ld b, a
ld a, [hMinutes]
ld c, a
decoord 1, 14
callba PrintHoursMins
ld hl, TextJump_DSTIsThatOK
ret
; 90a83 (24:4a83)
TextJump_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, UnknownText_0x90aa0
call PlaceWholeStringInBoxAtOnce
ret
; 90aa0
UnknownText_0x90aa0: ; 90aa0
start_asm
call UpdateTime
ld a, [hHours]
ld b, a
ld a, [hMinutes]
ld c, a
decoord 1, 14
callba PrintHoursMins
ld hl, UnknownText_0x90ab7
ret
; 90ab7
UnknownText_0x90ab7: ; 0x90ab7
; , is that OK?
text_jump UnknownText_0x1c5ff1
db "@"
; 0x90abc
Function90abc: ; 90abc
hlcoord 1, 14
lb bc, 3, SCREEN_WIDTH - 2
call ClearBox
ld hl, UnknownText_0x90acc
call PlaceWholeStringInBoxAtOnce
ret
; 90acc
UnknownText_0x90acc: ; 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 Function90b23
hlcoord 1, 16
ld [hl], "D"
inc hl
ld [hl], "F"
inc hl
ld [hl], " "
inc hl
ld de, StartDay
call Function90b23
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, UnknownText_0x90b13
ret
; 90b13
UnknownText_0x90b13: ; 0x90b13
text "<PARA>Now on DEBUG…"
prompt
; 0x90b23
Function90b23: ; 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 4
jr c, .nite
cp 10
jr c, .morn
cp 18
jr c, .day
.nite
ld de, .NITE
ret
.morn
ld de, .MORN
ret
.day
ld de, .DAY
ret
; 90b71 (24:4b71)
.NITE: db "NITE@"
.MORN: db "MORN@"
.DAY: 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 12
ret c
ret z
sub 12
ret
.midnight
ld a, 12
ret