diff options
author | entrpntr <entrpntr@gmail.com> | 2020-05-08 13:52:48 -0400 |
---|---|---|
committer | entrpntr <entrpntr@gmail.com> | 2020-05-08 13:52:48 -0400 |
commit | 566e2239d1544fbad2238e6d8550645b1b9d70c9 (patch) | |
tree | 5e2ce4dfd345b267cc527827da43103886b3f135 | |
parent | c4c838855a18dd928d49487e5f7fd02d65ce4766 (diff) |
Add engine/rtc/timeset.asm.
-rw-r--r-- | engine/rtc/timeset.asm | 722 | ||||
-rw-r--r-- | gfx/new_game/down_arrow.1bpp | bin | 0 -> 8 bytes | |||
-rw-r--r-- | gfx/new_game/timeset_bg.1bpp | 1 | ||||
-rw-r--r-- | gfx/new_game/up_arrow.1bpp | bin | 0 -> 8 bytes | |||
-rw-r--r-- | main.asm | 17 | ||||
-rw-r--r-- | wram.asm | 16 |
6 files changed, 742 insertions, 14 deletions
diff --git a/engine/rtc/timeset.asm b/engine/rtc/timeset.asm new file mode 100644 index 00000000..210c89a2 --- /dev/null +++ b/engine/rtc/timeset.asm @@ -0,0 +1,722 @@ +TIMESET_UP_ARROW EQU "♂" ; $ef +TIMESET_DOWN_ARROW EQU "♀" ; $f5 + +InitClock: +; Ask the player to set the time. + ldh a, [hInMenu] + push af + ld a, $1 + ldh [hInMenu], a + + ld a, $0 + ld [wSpriteUpdatesEnabled], a + ld a, $10 + ld [wMusicFade], a + ld a, LOW(MUSIC_NONE) + ld [wMusicFadeID], a + ld a, HIGH(MUSIC_NONE) + ld [wMusicFadeID + 1], a + ld c, 8 + call DelayFrames + call RotateFourPalettesLeft + call ClearTilemap + call ClearSprites + xor a + ldh [hBGMapMode], a + call LoadStandardFont + ld de, TimeSetBackgroundGFX + ld hl, vTiles2 tile $00 + lb bc, BANK(TimeSetBackgroundGFX), 1 + call Request1bpp + ld de, TimeSetUpArrowGFX + ld hl, vTiles2 tile $01 + lb bc, BANK(TimeSetUpArrowGFX), 1 + call Request1bpp + ld de, TimeSetDownArrowGFX + ld hl, vTiles2 tile $02 + lb bc, BANK(TimeSetDownArrowGFX), 1 + call Request1bpp + call .ClearScreen + call WaitBGMap + call RotateFourPalettesRight + ld hl, OakTimeWokeUpText + call PrintText + ld hl, wTimeSetBuffer + ld bc, wTimeSetBufferEnd - wTimeSetBuffer + xor a + call ByteFill + ld a, 10 ; default hour = 10 AM + ld [wInitHourBuffer], a + +.loop + ld hl, OakTimeWhatTimeIsItText + call PrintText + hlcoord 3, 7 + lb bc, 2, 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 [wStringBuffer2 + 1], a + call .ClearScreen + ld hl, OakTimeWhatHoursText + call PrintText + call YesNoBox + jr nc, .HourIsSet + call .ClearScreen + jr .loop + +.HourIsSet: + ld hl, OakTimeHowManyMinutesText + 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, [wInitMinuteBuffer] + ld [wStringBuffer2 + 2], a + call .ClearScreen + ld hl, OakTimeWhoaMinutesText + call PrintText + call YesNoBox + jr nc, .MinutesAreSet + call .ClearScreen + jr .HourIsSet + +.MinutesAreSet: + call InitTimeOfDay + ld hl, OakText_ResponseToSetTime + call PrintText + call WaitPressAorB_BlinkCursor + pop af + ldh [hInMenu], a + ret + +.ClearScreen: + xor a + ldh [hBGMapMode], a + hlcoord 0, 0 + ld bc, SCREEN_HEIGHT * SCREEN_WIDTH + xor a + call ByteFill + ld a, $1 + ldh [hBGMapMode], a + ret + +SetHour: + ldh 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: + 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 + +UnreferencedFunction907f1: + ld h, d + ld l, e + push hl + call DisplayHourOClock + pop de + inc de + inc de + ld a, ":" + 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 + inc hl + inc hl + inc hl + ret + +SetMinutes: + ldh a, [hJoyPressed] + and A_BUTTON + jr nz, .a_button + ld hl, hJoyLast + ld a, [hl] + and D_UP + jr nz, .d_up + ld a, [hl] + and D_DOWN + jr nz, .d_down + call DelayFrame + and a + ret + +.d_down + ld hl, wInitMinuteBuffer + ld a, [hl] + and a + jr nz, .decrease + ld a, 59 + 1 +.decrease + dec a + ld [hl], a + jr .finish_dpad + +.d_up + ld hl, wInitMinuteBuffer + ld a, [hl] + cp 59 + jr c, .increase + ld a, -1 +.increase + inc a + ld [hl], a +.finish_dpad + hlcoord 12, 9 + ld a, " " + ld bc, 7 + call ByteFill + hlcoord 12, 9 + call DisplayMinutesWithMinString + call WaitBGMap + and a + ret +.a_button + scf + ret + +DisplayMinutesWithMinString: + ld de, wInitMinuteBuffer + call PrintTwoDigitNumberLeftAlign + inc hl + ld de, String_min + call PlaceString + ret + +PrintTwoDigitNumberLeftAlign: + push hl + ld a, " " + ld [hli], a + ld [hl], a + pop hl + lb bc, PRINTNUM_LEFTALIGN | 1, 2 + call PrintNum + ret + +OakTimeWokeUpText: + text_far _OakTimeWokeUpText + text_end + +OakTimeWhatTimeIsItText: + text_far _OakTimeWhatTimeIsItText + text_end + +String_oclock: + db "o'clock@" + +OakTimeWhatHoursText: + ; What?@ @ + text_far _OakTimeWhatHoursText + text_asm + hlcoord 1, 16 + call DisplayHourOClock + ld hl, .OakTimeHoursQuestionMarkText + ret + +.OakTimeHoursQuestionMarkText: + text_far _OakTimeHoursQuestionMarkText + text_end + +OakTimeHowManyMinutesText: + text_far _OakTimeHowManyMinutesText + text_end + +String_min: + db "min.@" + +OakTimeWhoaMinutesText: + ; Whoa!@ @ + text_far _OakTimeWhoaMinutesText + text_asm + hlcoord 7, 14 + call DisplayMinutesWithMinString + ld hl, .OakTimeMinutesQuestionMarkText + ret + +.OakTimeMinutesQuestionMarkText: + text_far _OakTimeMinutesQuestionMarkText + text_end + +OakText_ResponseToSetTime: + text_asm + decoord 1, 14 + ld a, [wInitHourBuffer] + ld c, a + call PrintHour + ld [hl], ":" + inc hl + ld de, wInitMinuteBuffer + lb bc, PRINTNUM_LEADINGZEROS | 1, 2 + call PrintNum + ld b, h + ld c, l + ld a, [wInitHourBuffer] + cp MORN_HOUR + jr c, .nite + cp DAY_HOUR + 1 + jr c, .morn + cp NITE_HOUR + jr c, .day +.nite + ld hl, .OakTimeSoDarkText + ret +.morn + ld hl, .OakTimeOversleptText + ret +.day + ld hl, .OakTimeYikesText + ret + +.OakTimeOversleptText: + text_far _OakTimeOversleptText + text_end + +.OakTimeYikesText: + text_far _OakTimeYikesText + text_end + +.OakTimeSoDarkText: + text_far _OakTimeSoDarkText + text_end + +TimeSetBackgroundGFX: +INCBIN "gfx/new_game/timeset_bg.1bpp" +TimeSetUpArrowGFX: +INCBIN "gfx/new_game/up_arrow.1bpp" +TimeSetDownArrowGFX: +INCBIN "gfx/new_game/down_arrow.1bpp" + +SetDayOfWeek: + ldh a, [hInMenu] + push af + ld a, $1 + ldh [hInMenu], a + ld de, TimeSetUpArrowGFX + ld hl, vTiles0 tile TIMESET_UP_ARROW + lb bc, BANK(TimeSetUpArrowGFX), 1 + call Request1bpp + ld de, TimeSetDownArrowGFX + ld hl, vTiles0 tile TIMESET_DOWN_ARROW + lb bc, BANK(TimeSetDownArrowGFX), 1 + call Request1bpp + xor a + ld [wTempDayOfWeek], a +.loop + hlcoord 0, 12 + lb bc, 4, 18 + call Textbox + call LoadStandardMenuHeader + ld hl, .OakTimeWhatDayIsItText + call PrintText + hlcoord 9, 3 + lb bc, 2, 9 + call Textbox + hlcoord 14, 3 + ld [hl], TIMESET_UP_ARROW + hlcoord 14, 6 + ld [hl], TIMESET_DOWN_ARROW + hlcoord 10, 5 + call .PlaceWeekdayString + call ApplyTilemap + ld c, 10 + call DelayFrames +.loop2 + call JoyTextDelay + call .GetJoypadAction + jr nc, .loop2 + call ExitMenu + call UpdateSprites + ld hl, .ConfirmWeekdayText + call PrintText + call YesNoBox + jr c, .loop + ld a, [wTempDayOfWeek] + ld [wStringBuffer2], a + call InitDayOfWeek + call LoadStandardFont + pop af + ldh [hInMenu], a + ret + +.GetJoypadAction: + ldh a, [hJoyPressed] + and A_BUTTON + jr z, .not_A + scf + ret + +.not_A + ld hl, hJoyLast + ld a, [hl] + and D_UP + jr nz, .d_up + ld a, [hl] + and D_DOWN + jr nz, .d_down + call DelayFrame + and a + ret + +.d_down + ld hl, wTempDayOfWeek + ld a, [hl] + and a + jr nz, .decrease + ld a, SATURDAY + 1 + +.decrease + dec a + ld [hl], a + jr .finish_dpad + +.d_up + ld hl, wTempDayOfWeek + ld a, [hl] + cp 6 + jr c, .increase + ld a, SUNDAY - 1 + +.increase + inc a + ld [hl], a + +.finish_dpad + xor a + ldh [hBGMapMode], a + hlcoord 10, 4 + lb bc, 2, 9 + call ClearBox + hlcoord 10, 5 + call .PlaceWeekdayString + call WaitBGMap + and a + ret + +.PlaceWeekdayString: + push hl + ld a, [wTempDayOfWeek] + ld e, a + ld d, 0 + ld hl, .WeekdayStrings + add hl, de + add hl, de + ld a, [hli] + ld d, [hl] + ld e, a + pop hl + call PlaceString + ret + +.WeekdayStrings: +; entries correspond to wCurDay constants (see constants/wram_constants.asm) + 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@" + +.OakTimeWhatDayIsItText: + text_far _OakTimeWhatDayIsItText + text_end + +.ConfirmWeekdayText: + text_asm + hlcoord 1, 14 + call .PlaceWeekdayString + ld hl, .OakTimeIsItText + ret + +.OakTimeIsItText: + text_far _OakTimeIsItText + text_end + +InitialSetDSTFlag: + ld a, [wDST] + set 7, a + ld [wDST], a + predef UpdateTimePredef + hlcoord 1, 14 + lb bc, 3, 18 + call ClearBox + ld hl, .Text + call PlaceHLTextAtBC + ret + +.Text: + text_asm + call UpdateTime + ldh a, [hHours] + ld b, a + ldh a, [hMinutes] + ld c, a + decoord 1, 14 + farcall PrintHoursMins + ld hl, .DSTIsThatOKText + ret + +.DSTIsThatOKText: + text_far _DSTIsThatOKText + text_end + +InitialClearDSTFlag: + ld a, [wDST] + res 7, a + ld [wDST], a + predef UpdateTimePredef + hlcoord 1, 14 + lb bc, 3, 18 + call ClearBox + ld hl, .Text + call PlaceHLTextAtBC + ret + +.Text: + text_asm + call UpdateTime + ldh a, [hHours] + ld b, a + ldh a, [hMinutes] + ld c, a + decoord 1, 14 + farcall PrintHoursMins + ld hl, .TimeAskOkayText + ret + +.TimeAskOkayText: + text_far _TimeAskOkayText + text_end + +MrChrono: + hlcoord 1, 14 + lb bc, 3, SCREEN_WIDTH - 2 + call ClearBox + ld hl, .Text + call PlaceHLTextAtBC + ret + +.Text: + text_asm + call UpdateTime + + hlcoord 1, 14 + ld [hl], "R" + inc hl + ld [hl], "T" + inc hl + ld [hl], " " + inc hl + + ld de, hRTCDayLo + call .PrintTime + + hlcoord 1, 16 + ld [hl], "D" + inc hl + ld [hl], "F" + inc hl + ld [hl], " " + inc hl + + ld de, wStartDay + call .PrintTime + + 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, .NowOnDebug + ret + +.NowOnDebug: + text "<PARA>Now on DEBUG…" + prompt + +.PrintTime: + 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 + +PrintHour: + 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 [wDeciramBuffer], a + ld de, wDeciramBuffer + call PrintTwoDigitNumberLeftAlign + ret + +GetTimeOfDayString: + ld a, c + cp MORN_HOUR + jr c, .nite + cp DAY_HOUR + jr c, .morn + cp NITE_HOUR + jr c, .day +.nite + ld de, .nite_string + ret +.morn + ld de, .morn_string + ret +.day + ld de, .day_string + ret + +.nite_string: db "NITE@" +.morn_string: db "MORN@" +.day_string: db "DAY@" + +AdjustHourForAMorPM: +; Convert the hour stored in c (0-23) to a 1-12 value + ld a, c + or a + jr z, .midnight + cp NOON_HOUR + ret c + ret z + sub NOON_HOUR + ret + +.midnight + ld a, NOON_HOUR + ret diff --git a/gfx/new_game/down_arrow.1bpp b/gfx/new_game/down_arrow.1bpp Binary files differnew file mode 100644 index 00000000..c48668de --- /dev/null +++ b/gfx/new_game/down_arrow.1bpp diff --git a/gfx/new_game/timeset_bg.1bpp b/gfx/new_game/timeset_bg.1bpp new file mode 100644 index 00000000..8663f7de --- /dev/null +++ b/gfx/new_game/timeset_bg.1bpp @@ -0,0 +1 @@ +ÿÿÿÿÿÿÿÿ
\ No newline at end of file diff --git a/gfx/new_game/up_arrow.1bpp b/gfx/new_game/up_arrow.1bpp Binary files differnew file mode 100644 index 00000000..6b869ba8 --- /dev/null +++ b/gfx/new_game/up_arrow.1bpp @@ -587,18 +587,7 @@ ENDC SECTION "bank24", ROMX INCLUDE "engine/phone/phone.asm" -InitClock:: - dr $90641, $908dc -SetDayOfWeek:: - dr $908dc, $90a1b -InitialSetDSTFlag:: - dr $90a1b, $90a54 -InitialClearDSTFlag:: - dr $90a54, $90a8d -MrChrono:: - dr $90a8d, $90b0f -PrintHour:: - dr $90b0f, $90b5e +INCLUDE "engine/rtc/timeset.asm" PokeGear:: dr $90b5e, $917ca @@ -1079,7 +1068,9 @@ SECTION "bank70", ROMX dr $1c0000, $1c0407 TilesetKantoGFX:: - dr $1c0407, $1c0a66 + dr $1c0407, $1c0a1f +PrintHoursMins:: + dr $1c0a1f, $1c0a66 UpdateTimePredef:: dr $1c0a66, $1c0a7a StubbedGetFrontpic:: @@ -280,6 +280,16 @@ wBoxPartialData:: ds 480 wBoxPartialDataEnd:: NEXTU ; c508 +; timeset temp storage +wTimeSetBuffer:: + ds 20 +wInitHourBuffer:: db ; c51c + ds 9 +wInitMinuteBuffer:: db ; c526 + ds 19 +wTimeSetBufferEnd:: + +NEXTU ; c508 ; 20x18 grid of 8x8 tiles wTempTilemap:: ds SCREEN_WIDTH * SCREEN_HEIGHT ; $168 = 360 @@ -1291,11 +1301,15 @@ NEXTU ; ceed wPlaceBallsDirection:: db wTrainerHUDTiles:: ds 4 -NEXTU +NEXTU ; ceed ; earthquake data buffer wEarthquakeMovementDataBuffer:: ds 5 NEXTU ; ceed +; miscellaneous +wTempDayOfWeek:: db + +NEXTU ; ceed ; unidentified wceed:: db ; ceed wceee:: db ; ceee |