summaryrefslogtreecommitdiff
path: root/engine/menu/set_clock_dialog.asm
diff options
context:
space:
mode:
authorZumi <13794376+ZoomTen@users.noreply.github.com>2021-01-26 10:29:07 +0700
committerGitHub <noreply@github.com>2021-01-25 22:29:07 -0500
commitd9f52a57a604cc1204f6077e21d75e04cb954672 (patch)
treed1cfa2e3003c1bac1b74a3a289e01421dfcc387d /engine/menu/set_clock_dialog.asm
parent735e9f09a2bfc6c32ed596906c07ec501fb05070 (diff)
Disassemble RTC setup dialog and slot machine minigame (bank $24) (#87)
Also identify SFX and cry pointers
Diffstat (limited to 'engine/menu/set_clock_dialog.asm')
-rw-r--r--engine/menu/set_clock_dialog.asm348
1 files changed, 348 insertions, 0 deletions
diff --git a/engine/menu/set_clock_dialog.asm b/engine/menu/set_clock_dialog.asm
new file mode 100644
index 0000000..22f3ad1
--- /dev/null
+++ b/engine/menu/set_clock_dialog.asm
@@ -0,0 +1,348 @@
+INCLUDE "constants.asm"
+
+SECTION "engine/menu/set_clock_dialog.asm", ROMX
+
+UP_ARROW EQU $f0
+DOWN_ARROW EQU $ee
+
+SetClockDialog:
+ call SetClockDialog_Init
+
+.loop
+ call SetClockDialog_Run
+ jr nc, .loop
+
+ ld hl, SetClockDialog_ConfirmTimeDate
+ call PrintText
+
+ hlcoord 3, 13
+ call SetClockDialog_PrintDayOfWeek
+ ld de, wHourBuffer
+
+ hlcoord 8, 14
+ call SetClockDialog_PrintNumber
+ ld de, wMinuteBuffer
+
+ hlcoord 12, 14
+ call SetClockDialog_PrintNumber
+
+ call YesNoBox
+ jr c, SetClockDialog
+ call LoadFont
+ ret
+
+SetClockDialog_Init:
+ xor a
+ ld [wJumptableIndex], a
+ ld hl, wc408
+ ld bc, 50
+ call ByteFill
+
+; load days of week
+ ld de, HUD_GFX
+ ld hl, vChars2 tile $40
+ lb bc, BANK(HUD_GFX), $20
+ call Request1bpp
+
+ ld de, UpArrowGFX
+ ld hl, vFont tile $70
+ lb bc, BANK(UpArrowGFX), 1
+ call Request1bpp
+ ret
+
+UpArrowGFX:
+INCBIN "gfx/font/up_arrow.1bpp"
+
+SetClockDialog_Run:
+ ld a, [wJumptableIndex]
+ bit 7, a
+ jr nz, .done
+
+ call SetClockDialog_RunFunction
+ call SetClockDialog_PrintUpDownArrows
+ call DelayFrame
+ and a
+ ret
+
+.done
+ scf
+ ret
+
+SetClockDialog_PrintUpDownArrows:
+ ld hl, wClockDialogArrowBlinkCounter
+ ld a, [hl]
+ inc [hl]
+ and 8
+ jr nz, .clear_arrows
+
+; Print up arrow
+ hlcoord 18, 14
+ ld [hl], UP_ARROW
+
+; Print down arrow
+ hlcoord 18, 16
+ ld [hl], DOWN_ARROW
+ ret
+
+.clear_arrows
+ ld a, " "
+ hlcoord 18, 14
+ ld [hl], a
+ hlcoord 18, 16
+ ld [hl], a
+ ret
+
+SetClockDialog_RunFunction:
+ jumptable .Jumptable, wJumptableIndex
+
+.Jumptable:
+ dw SetClockDialog_AskDay
+ dw SetClockDialog_ChooseDayOfWeek
+ dw SetClockDialog_AskHour
+ dw SetClockDialog_ChooseHour
+ dw SetClockDialog_AskMinutes
+ dw SetClockDialog_ChooseMinutes
+
+SetClockDialog_AskDay:
+ ld hl, SetClockDialog_WhatDayIsIt
+ call PrintText
+ hlcoord 10, 16
+ ld de, .DayString
+ call PlaceString
+
+ ld hl, wJumptableIndex
+ inc [hl]
+ ret
+
+.DayString:
+ db "ようび@"
+
+SetClockDialog_ChooseDayOfWeek:
+ hlcoord 9, 15
+ call SetClockDialog_PrintDayOfWeek
+ call GetJoypadDebounced
+ ld hl, hJoySum
+ ld a, [hl]
+ and A_BUTTON
+ jr nz, .a_pressed
+ ld a, [hl]
+ and D_UP
+ jr nz, .up_pressed
+ ld a, [hl]
+ and D_DOWN
+ jr nz, .down_pressed
+ ret
+
+.up_pressed
+ ld hl, wDayOfWeekBuffer
+ ld a, [hl]
+ and a
+ jr nz, .decrease
+ ld a, 7
+
+.decrease
+ dec a
+ ld [hl], a
+ ret
+
+.down_pressed
+ ld hl, wDayOfWeekBuffer
+ ld a, [hl]
+ cp 6
+ jr c, .increase
+ ld a, $ff
+
+.increase
+ inc a
+ ld [hl], a
+ ret
+
+.a_pressed
+ ld a, [wDayOfWeekBuffer]
+ ld [wStartDay], a
+ ld hl, wJumptableIndex
+ inc [hl]
+ ret
+
+SetClockDialog_AskHour:
+ ld hl, SetClockDialog_HowManyHours
+ call PrintText
+
+ hlcoord 10, 16
+ ld de, .HoursString
+ call PlaceString
+ ld hl, wJumptableIndex
+ inc [hl]
+ ret
+
+.HoursString:
+ db "じ@"
+
+SetClockDialog_ChooseHour:
+ ld de, wHourBuffer
+ hlcoord 8, 16
+ call SetClockDialog_PrintNumber
+ call GetJoypadDebounced
+ ld hl, hJoySum
+ ld a, [hl]
+ and A_BUTTON
+ jr nz, .a_pressed
+ ld a, [hl]
+ and B_BUTTON
+ jr nz, .b_pressed
+ ld a, [hl]
+ and D_UP
+ jr nz, .up_pressed
+ ld a, [hl]
+ and D_DOWN
+ jr nz, .down_pressed
+ ret
+
+.up_pressed
+ ld hl, wHourBuffer
+ ld a, [hl]
+ and a
+ jr nz, .decrease
+ ld a, 24
+
+.decrease
+ dec a
+ ld [hl], a
+ ret
+
+.down_pressed
+ ld hl, wHourBuffer
+ ld a, [hl]
+ cp 23
+ jr c, .increase
+ ld a, $ff
+
+.increase
+ inc a
+ ld [hl], a
+ ret
+
+.a_pressed
+ ld a, [wHourBuffer]
+ ld [wStartHour], a
+ ld hl, wJumptableIndex
+ inc [hl]
+ ret
+
+.b_pressed
+ ld hl, wJumptableIndex
+ ld [hl], 0
+ ret
+
+SetClockDialog_AskMinutes:
+ ld hl, SetClockDialog_HowManyMinutes
+ call PrintText
+ hlcoord 10, 16
+ ld de, .MinutesString
+ call PlaceString
+ ld hl, wJumptableIndex
+ inc [hl]
+ ret
+
+.MinutesString:
+ db "ふん@"
+
+SetClockDialog_ChooseMinutes:
+ ld de, wMinuteBuffer
+ hlcoord 8, 16
+ call SetClockDialog_PrintNumber
+ call GetJoypadDebounced
+ ld hl, hJoySum
+ ld a, [hl]
+ and A_BUTTON
+ jr nz, .a_pressed
+ ld a, [hl]
+ and B_BUTTON
+ jr nz, .b_pressed
+ ld a, [hl]
+ and D_UP
+ jr nz, .up_pressed
+ ld a, [hl]
+ and D_DOWN
+ jr nz, .down_pressed
+ ret
+
+.up_pressed
+ ld hl, wMinuteBuffer
+ ld a, [hl]
+ and a
+ jr nz, .decrease
+ ld a, 60
+
+.decrease
+ dec a
+ ld [hl], a
+ ret
+
+.down_pressed
+ ld hl, wMinuteBuffer
+ ld a, [hl]
+ cp 59
+ jr c, .increase
+ ld a, $ff
+
+.increase
+ inc a
+ ld [hl], a
+ ret
+
+.a_pressed
+ ld a, [wMinuteBuffer]
+ ld [wStartMinute], a
+ ld hl, wJumptableIndex
+
+; Display confirmation dialog
+ set 7, [hl]
+ ret
+
+.b_pressed
+ ld hl, wJumptableIndex
+ ld [hl], 2
+ ret
+
+SetClockDialog_PrintDayOfWeek:
+; Print top half
+ ld a, [wDayOfWeekBuffer]
+ sla a
+ add $40
+ ld [hl], a
+ inc a
+
+; Move down one row and print the bottom half
+ ld de, SCREEN_WIDTH
+ add hl, de
+ ld [hl], a
+ ret
+
+SetClockDialog_PrintNumber:
+ push hl
+ ld a, $7f
+ ld [hli], a
+ ld [hl], a
+ pop hl
+ lb bc, 1, 2
+ call PrintNumber
+ ret
+
+SetClockDialog_WhatDayIsIt:
+ text "きょうは なんようび だったかの?"
+ done
+
+SetClockDialog_HowManyHours:
+ text "いまは なんじ じゃ?"
+ done
+
+SetClockDialog_HowManyMinutes:
+ deciram wStartHour, 1, 2
+ text "じ なんふん かな?"
+ done
+
+SetClockDialog_ConfirmTimeDate:
+ text "   ようび   じ   ふん"
+ line "ほんとうに あっているかの?"
+ done