shithub: pokecrystal

ref: 6d1b7f28c8987be16b05e8c68f7f50eb357b7cc5
dir: /engine/clock_reset.asm/

View raw version

ResetClock_GetWraparoundTime: ; 20000 (8:4000)
	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
; 20015 (8:4015)

.WrapAroundTimes: ; 20015
	dw Buffer4
	db 7, 4

	dw Buffer5
	db 24, 12

	dw Buffer6
	db 60, 15
; 20021

RestartClock: ; 20021 (8:4021)
; If we're here, we had an RTC overflow.
	ld hl, .Text_ClockTimeMayBeWrong
	call PrintText
	ld hl, Options
	ld a, [hl]
	push af
	set NO_TEXT_SCROLL, [hl]
	call LoadStandardMenuDataHeader
	call ClearTileMap
	ld hl, .Text_SetWithControlPad
	call PrintText
	call .SetClock
	call ExitMenu
	pop bc
	ld hl, Options
	ld [hl], b
	ld c, a
	ret
; 20047 (8:4047)

.Text_ClockTimeMayBeWrong: ; 0x20047
	; The clock's time may be wrong. Please reset the time.
	text_jump UnknownText_0x1c40e6
	db "@"
; 0x2004c

.Text_SetWithControlPad: ; 0x2004c
	; Set with the Control Pad. Confirm: A Button Cancel:  B Button
	text_jump UnknownText_0x1c411c
	db "@"
; 0x20051

.SetClock: ; 20051 (8:4051)
	ld a, 1
	ld [Buffer1], a ; which digit
	ld [Buffer2], a ; wd1eb (aliases: MovementType)
	ld a, 8
	ld [Buffer3], a
	call UpdateTime
	call GetWeekday
	ld [Buffer4], a
	ld a, [hHours]
	ld [Buffer5], a
	ld a, [hMinutes]
	ld [Buffer6], a

.loop
	call .joy_loop
	jr nc, .loop
	and a
	ret nz
	call .PrintTime
	ld hl, .Text_IsThisOK
	call PrintText
	call YesNoBox
	jr c, .cancel
	ld a, [Buffer4]
	ld [StringBuffer2], a
	ld a, [Buffer5]
	ld [StringBuffer2 + 1], a
	ld a, [Buffer6]
	ld [StringBuffer2 + 2], a
	xor a
	ld [StringBuffer2 + 3], a
	call InitTime
	call .PrintTime
	ld hl, .Text_ClockReset
	call PrintText
	call WaitPressAorB_BlinkCursor
	xor a
	ret

.cancel
	ld a, $1
	ret
; 200b0 (8:40b0)

.Text_IsThisOK: ; 0x200b0
	; Is this OK?
	text_jump UnknownText_0x1c415b
	db "@"
; 0x200b5

.Text_ClockReset: ; 0x200b5
	; The clock has been reset.
	text_jump UnknownText_0x1c4168
	db "@"
; 0x200ba

.joy_loop
	call Function354b
	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, $0
	scf
	ret

.press_B
	ld a, $1
	scf
	ret

.pressed_up
	ld a, [Buffer1] ; wd1ea (aliases: MagikarpLength)
	call ResetClock_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, [Buffer1] ; wd1ea (aliases: MagikarpLength)
	call ResetClock_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, Buffer1 ; wd1ea (aliases: MagikarpLength)
	dec [hl]
	jr nz, .done_scroll
	ld [hl], $3
	jr .done_scroll

.pressed_right
	ld hl, Buffer1 ; wd1ea (aliases: MagikarpLength)
	inc [hl]
	ld a, [hl]
	cp $4
	jr c, .done_scroll
	ld [hl], $1

.done_scroll
	xor a
	ret

.PrintTime: ; 2011f (8:411f)
	hlcoord 0, 5
	ld b, 5
	ld c, 18
	call TextBox
	decoord 1, 8
	ld a, [Buffer4]
	ld b, a
	callba PrintDayOfWeek
	ld a, [Buffer5]
	ld b, a
	ld a, [Buffer6]
	ld c, a
	decoord 11, 8
	callba PrintHoursMins
	ld a, [Buffer2] ; wd1eb (aliases: MovementType)
	lb de, " ", " "
	call .PlaceChars
	ld a, [Buffer1] ; wd1ea (aliases: MagikarpLength)
	lb de, "▲", "▼"
	call .PlaceChars
	ld a, [Buffer1] ; wd1ea (aliases: MagikarpLength)
	ld [Buffer2], a ; wd1eb (aliases: MovementType)
	ret
; 20160 (8:4160)

.unreferenced: ; 20160
	ld a, [Buffer3]
	ld b, a
	call Coord2Tile
	ret
; 20168

.PlaceChars: ; 20168 (8:4168)
	push de
	call ResetClock_GetWraparoundTime
	ld a, [Buffer3]
	dec a
	ld b, a
	call Coord2Tile
	pop de
	ld [hl], d
	ld bc, 2 * SCREEN_WIDTH
	add hl, bc
	ld [hl], e
	ret
; 2017c (8:417c)

String_2017c: ; 2017c
	db "じ@" ; HR
; 2017e

String_2017e: ; 2017e
	db "ふん@" ; MIN
; 20181