diff options
author | Zumi <13794376+ZoomTen@users.noreply.github.com> | 2021-01-26 10:29:07 +0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-01-25 22:29:07 -0500 |
commit | d9f52a57a604cc1204f6077e21d75e04cb954672 (patch) | |
tree | d1cfa2e3003c1bac1b74a3a289e01421dfcc387d /engine/menu/set_clock_dialog.asm | |
parent | 735e9f09a2bfc6c32ed596906c07ec501fb05070 (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.asm | 348 |
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 |