shithub: pokecrystal

ref: e83a5bae87d565eae14716470397df211a1fee94
dir: /engine/timeset.asm/

View raw version
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