diff options
author | mid-kid <esteve.varela@gmail.com> | 2018-03-14 13:28:36 +0100 |
---|---|---|
committer | mid-kid <esteve.varela@gmail.com> | 2018-03-14 13:28:36 +0100 |
commit | 97c511cd2f271252cbc9e9746668081422231ca5 (patch) | |
tree | 35ef1cb72e871ef34e2b0011e514edae2b9cbcb7 /engine/rtc | |
parent | baa0dc5a963a79843b37888bcfe1d2dfe833ade9 (diff) |
Organize the engine/ directory, take 2
Renamed `game` to `games` and `menu` to `menus`.
Moved some functions from `engine/routines/` to their fitting subdirectories.
Made two new subdirectories:
* engine/rtc: Contains all RTC-related things. Menus, hardware, misc
functions.
* engine/items: Contains all item-related things. Pack, item effects,
other item handlers.
Diffstat (limited to 'engine/rtc')
-rwxr-xr-x | engine/rtc/clock_reset.asm | 254 | ||||
-rwxr-xr-x | engine/rtc/delete_save_change_clock.asm | 296 | ||||
-rw-r--r-- | engine/rtc/printhoursmins.asm | 63 | ||||
-rwxr-xr-x | engine/rtc/rtc.asm | 209 | ||||
-rwxr-xr-x | engine/rtc/timeset.asm | 773 |
5 files changed, 1595 insertions, 0 deletions
diff --git a/engine/rtc/clock_reset.asm b/engine/rtc/clock_reset.asm new file mode 100755 index 000000000..c05129349 --- /dev/null +++ b/engine/rtc/clock_reset.asm @@ -0,0 +1,254 @@ + +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 wBuffer4 + db 7, 4 + + dw wBuffer5 + db 24, 12 + + dw wBuffer6 + 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, wOptions + ld a, [hl] + push af + set NO_TEXT_SCROLL, [hl] + call LoadStandardMenuHeader + call ClearTileMap + ld hl, .Text_SetWithControlPad + call PrintText + call .SetClock + call ExitMenu + pop bc + ld hl, wOptions + 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 [wBuffer1], a ; which digit + ld [wBuffer2], a + ld a, 8 + ld [wBuffer3], a + call UpdateTime + call GetWeekday + ld [wBuffer4], a + ld a, [hHours] + ld [wBuffer5], a + ld a, [hMinutes] + ld [wBuffer6], 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, [wBuffer4] + ld [wStringBuffer2], a + ld a, [wBuffer5] + ld [wStringBuffer2 + 1], a + ld a, [wBuffer6] + ld [wStringBuffer2 + 2], a + xor a + ld [wStringBuffer2 + 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 JoyTextDelay_ForcehJoyDown + 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, [wBuffer1] + 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, [wBuffer1] + 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, wBuffer1 + dec [hl] + jr nz, .done_scroll + ld [hl], $3 + jr .done_scroll + +.pressed_right + ld hl, wBuffer1 + 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, [wBuffer4] + ld b, a + farcall PrintDayOfWeek + ld a, [wBuffer5] + ld b, a + ld a, [wBuffer6] + ld c, a + decoord 11, 8 + farcall PrintHoursMins + ld a, [wBuffer2] + lb de, " ", " " + call .PlaceChars + ld a, [wBuffer1] + lb de, "▲", "▼" + call .PlaceChars + ld a, [wBuffer1] + ld [wBuffer2], a + ret +; 20160 (8:4160) + +.unreferenced ; 20160 +; unused + ld a, [wBuffer3] + ld b, a + call Coord2Tile + ret +; 20168 + +.PlaceChars: ; 20168 (8:4168) + push de + call ResetClock_GetWraparoundTime + ld a, [wBuffer3] + 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) + +UnreferencedString_HourJP: ; 2017c +; unused + db "じ@" ; HR +; 2017e + +UnreferencedString_MinuteJP: ; 2017e +; unused + db "ふん@" ; MIN +; 20181 diff --git a/engine/rtc/delete_save_change_clock.asm b/engine/rtc/delete_save_change_clock.asm new file mode 100755 index 000000000..431dc6034 --- /dev/null +++ b/engine/rtc/delete_save_change_clock.asm @@ -0,0 +1,296 @@ +_ResetClock: ; 4d3b1 + farcall BlankScreen + ld b, SCGB_DIPLOMA + call GetSGBLayout + call LoadStandardFont + call LoadFontsExtra + ld de, MUSIC_MAIN_MENU + call PlayMusic + ld hl, .text_askreset + call PrintText + ld hl, .NoYes_MenuHeader + call CopyMenuHeader + call VerticalMenu + ret c + ld a, [wMenuCursorY] + cp $1 + ret z + call ClockResetPassword + jr c, .wrongpassword + ld a, BANK(sRTCStatusFlags) + call GetSRAMBank + ld a, $80 + ld [sRTCStatusFlags], a + call CloseSRAM + ld hl, .text_okay + call PrintText + ret + +.wrongpassword + ld hl, .text_wrong + call PrintText + ret + +.text_okay ; 0x4d3fe + ; Password OK. Select CONTINUE & reset settings. + text_jump UnknownText_0x1c55db + db "@" + +.text_wrong ; 0x4d403 + ; Wrong password! + text_jump UnknownText_0x1c560b + db "@" + +.text_askreset ; 0x4d408 + ; Reset the clock? + text_jump UnknownText_0x1c561c + db "@" + +.NoYes_MenuHeader: ; 0x4d40d + db 0 ; flags + menu_coords 14, 7, SCREEN_WIDTH - 1, TEXTBOX_Y - 1 + dw .NoYes_MenuData + db 1 ; default option + +.NoYes_MenuData: ; 0x4d415 + db STATICMENU_CURSOR | STATICMENU_NO_TOP_SPACING ; flags + db 2 ; items + db "NO@" + db "YES@" + +ClockResetPassword: ; 4d41e + call .CalculatePassword + push de + ld hl, wStringBuffer2 + ld bc, 5 + xor a + call ByteFill + ld a, $4 + ld [wStringBuffer2 + 5], a + ld hl, .pleaseenterpasswordtext + call PrintText +.loop + call .updateIDdisplay +.loop2 + call JoyTextDelay + ld a, [hJoyLast] + ld b, a + and A_BUTTON + jr nz, .confirm + ld a, b + and D_PAD + jr z, .loop2 + call .dpadinput + ld c, 3 + call DelayFrames + jr .loop + +.confirm + call .ConvertDecIDToBytes + pop de + ld a, e + cp l + jr nz, .nope + ld a, d + cp h + jr nz, .nope + and a + ret + +.nope + scf + ret + +.pleaseenterpasswordtext ; 0x4d463 + ; Please enter the password. + text_jump UnknownText_0x1c562e + db "@" + +.updateIDdisplay ; 4d468 + hlcoord 14, 15 + ld de, wStringBuffer2 + ld c, 5 +.loop3 + ld a, [de] + add "0" + ld [hli], a + inc de + dec c + jr nz, .loop3 + hlcoord 14, 16 + ld bc, 5 + ld a, " " + call ByteFill + hlcoord 14, 16 + ld a, [wStringBuffer2 + 5] + ld e, a + ld d, $0 + add hl, de + ld [hl], "▲" + ret + +.dpadinput ; 4d490 + ld a, b + and D_LEFT + jr nz, .left + ld a, b + and D_RIGHT + jr nz, .right + ld a, b + and D_UP + jr nz, .up + ld a, b + and D_DOWN + jr nz, .down + ret + +.left + ld a, [wStringBuffer2 + 5] + and a + ret z + dec a + ld [wStringBuffer2 + 5], a + ret + +.right + ld a, [wStringBuffer2 + 5] + cp $4 + ret z + inc a + ld [wStringBuffer2 + 5], a + ret + +.up + call .getcurrentdigit + ld a, [hl] + cp 9 + jr z, .wraparound_up + inc a + ld [hl], a + ret + +.wraparound_up + ld [hl], $0 + ret + +.down + call .getcurrentdigit + ld a, [hl] + and a + jr z, .wraparound_down + dec a + ld [hl], a + ret + +.wraparound_down + ld [hl], 9 + ret + +.getcurrentdigit ; 4d4d5 + ld a, [wStringBuffer2 + 5] + ld e, a + ld d, $0 + ld hl, wStringBuffer2 + add hl, de + ret + +.ConvertDecIDToBytes: ; 4d4e0 + ld hl, 0 + ld de, wStringBuffer2 + 4 + ld bc, 1 + call .ConvertToBytes + ld bc, 10 + call .ConvertToBytes + ld bc, 100 + call .ConvertToBytes + ld bc, 1000 + call .ConvertToBytes + ld bc, 10000 +.ConvertToBytes: ; 4d501 + ld a, [de] + dec de + push hl + ld hl, 0 + call AddNTimes + ld c, l + ld b, h + pop hl + add hl, bc + ret + +.CalculatePassword: ; 4d50f + ld a, BANK(sPlayerData) + call GetSRAMBank + ld de, 0 + ld hl, sPlayerData + (wPlayerID - wPlayerData) + ld c, $2 + call .ComponentFromNumber + ld hl, sPlayerData + (wPlayerName - wPlayerData) + ld c, NAME_LENGTH_JAPANESE - 1 + call .ComponentFromString + ld hl, sPlayerData + (wMoney - wPlayerData) + ld c, $3 + call .ComponentFromNumber + call CloseSRAM + ret + +.ComponentFromNumber: ; 4d533 + ld a, [hli] + add e + ld e, a + ld a, $0 + adc d + ld d, a + dec c + jr nz, .ComponentFromNumber + ret + +.ComponentFromString: ; 4d53e + ld a, [hli] + cp "@" + ret z + add e + ld e, a + ld a, $0 + adc d + ld d, a + dec c + jr nz, .ComponentFromString + ret + +_DeleteSaveData: ; 4d54c + farcall BlankScreen + ld b, SCGB_DIPLOMA + call GetSGBLayout + call LoadStandardFont + call LoadFontsExtra + ld de, MUSIC_MAIN_MENU + call PlayMusic + ld hl, .Text_ClearAllSaveData + call PrintText + ld hl, .NoYesMenuHeader + call CopyMenuHeader + call VerticalMenu + ret c + ld a, [wMenuCursorY] + cp $1 + ret z + farcall EmptyAllSRAMBanks + ret + +.Text_ClearAllSaveData: ; 0x4d580 + ; Clear all save data? + text_jump UnknownText_0x1c564a + db "@" + +.NoYesMenuHeader: ; 0x4d585 + db 0 ; flags + menu_coords 14, 7, SCREEN_WIDTH - 1, TEXTBOX_Y - 1 + dw .MenuData + db 1 ; default option + +.MenuData: ; 0x4d58d + db STATICMENU_CURSOR | STATICMENU_NO_TOP_SPACING ; flags + db 2 ; items + db "NO@" + db "YES@" diff --git a/engine/rtc/printhoursmins.asm b/engine/rtc/printhoursmins.asm new file mode 100644 index 000000000..eb7dc1619 --- /dev/null +++ b/engine/rtc/printhoursmins.asm @@ -0,0 +1,63 @@ +Unreferenced_Function1dd6a9: ; 1dd6a9 + ld a, b + ld b, c + ld c, a + push bc + push de + ld hl, sp+$2 + ld d, h + ld e, l + pop hl + lb bc, PRINTNUM_LEADINGZEROS | 2, 5 + call PrintNum + pop bc + ret + +PrintHoursMins: ; 1dd6bb (77:56bb) +; Hours in b, minutes in c + ld a, b + cp 12 + push af + jr c, .AM + jr z, .PM + sub 12 + jr .PM +.AM: + or a + jr nz, .PM + ld a, 12 +.PM: + ld b, a +; Crazy stuff happening with the stack + push bc + ld hl, sp+$1 + push de + push hl + pop de + pop hl + ld [hl], " " + lb bc, 1, 2 + call PrintNum + ld [hl], ":" + inc hl + ld d, h + ld e, l + ld hl, sp+$0 + push de + push hl + pop de + pop hl + lb bc, PRINTNUM_LEADINGZEROS | 1, 2 + call PrintNum + pop bc + ld de, String_AM + pop af + jr c, .place_am_pm + ld de, String_PM +.place_am_pm + inc hl + call PlaceString + ret + +String_AM: db "AM@" ; 1dd6fc +String_PM: db "PM@" ; 1dd6ff diff --git a/engine/rtc/rtc.asm b/engine/rtc/rtc.asm new file mode 100755 index 000000000..37e24c1ed --- /dev/null +++ b/engine/rtc/rtc.asm @@ -0,0 +1,209 @@ +Unreferenced_StopRTC: + ld a, SRAM_ENABLE + ld [MBC3SRamEnable], a + call LatchClock + ld a, RTC_DH + ld [MBC3SRamBank], a + ld a, [MBC3RTC] + set 6, a ; halt + ld [MBC3RTC], a + call CloseSRAM + ret +; 14019 + +StartRTC: ; 14019 + ld a, SRAM_ENABLE + ld [MBC3SRamEnable], a + call LatchClock + ld a, RTC_DH + ld [MBC3SRamBank], a + ld a, [MBC3RTC] + res 6, a ; halt + ld [MBC3RTC], a + call CloseSRAM + ret +; 14032 + +GetTimeOfDay:: ; 14032 +; get time of day based on the current hour + ld a, [hHours] ; hour + ld hl, TimesOfDay + +.check +; if we're within the given time period, +; get the corresponding time of day + cp [hl] + jr c, .match +; else, get the next entry + inc hl + inc hl +; try again + jr .check + +.match +; get time of day + inc hl + ld a, [hl] + ld [wTimeOfDay], a + ret +; 14044 + +TimesOfDay: ; 14044 +; hours for the time of day +; 0400-0959 morn | 1000-1759 day | 1800-0359 nite + db MORN_HOUR, NITE_F + db DAY_HOUR, MORN_F + db NITE_HOUR, DAY_F + db MAX_HOUR, NITE_F + db -1, MORN_F +; 1404e + +Unreferenced_1404e: + db 20, NITE_F + db 40, MORN_F + db 60, DAY_F + db -1, MORN_F +; 14056 + +StageRTCTimeForSave: ; 14056 + call UpdateTime + ld hl, wRTC + ld a, [wCurDay] + ld [hli], a + ld a, [hHours] + ld [hli], a + ld a, [hMinutes] + ld [hli], a + ld a, [hSeconds] + ld [hli], a + ret +; 1406a + +SaveRTC: ; 1406a + ld a, $a + ld [MBC3SRamEnable], a + call LatchClock + ld hl, MBC3RTC + ld a, $c + ld [MBC3SRamBank], a + res 7, [hl] + ld a, BANK(sRTCStatusFlags) + ld [MBC3SRamBank], a + xor a + ld [sRTCStatusFlags], a + call CloseSRAM + ret +; 14089 + +StartClock:: ; 14089 + call GetClock + call Function1409b + call FixDays + jr nc, .skip_set + ; bit 5: Day count exceeds 139 + ; bit 6: Day count exceeds 255 + call RecordRTCStatus ; set flag on sRTCStatusFlags + +.skip_set + call StartRTC + ret +; 1409b + +Function1409b: ; 1409b + ld hl, hRTCDayHi + bit 7, [hl] + jr nz, .set_bit_7 + bit 6, [hl] + jr nz, .set_bit_7 + xor a + ret + +.set_bit_7 + ; Day count exceeds 16383 + ld a, %10000000 + call RecordRTCStatus ; set bit 7 on sRTCStatusFlags + ret +; 140ae + +Function140ae: ; 140ae + call CheckRTCStatus + ld c, a + and %11000000 ; Day count exceeded 255 or 16383 + jr nz, .time_overflow + + ld a, c + and %00100000 ; Day count exceeded 139 + jr z, .dont_update + + call UpdateTime + ld a, [wRTC + 0] + ld b, a + ld a, [wCurDay] + cp b + jr c, .dont_update + +.time_overflow + farcall ClearDailyTimers + farcall Function170923 +; mobile + ld a, 5 ; MBC30 bank used by JP Crystal; inaccessible by MBC3 + call GetSRAMBank + ld a, [$aa8c] ; address of MBC30 bank + inc a + ld [$aa8c], a ; address of MBC30 bank + ld a, [$b2fa] ; address of MBC30 bank + inc a + ld [$b2fa], a ; address of MBC30 bank + call CloseSRAM + ret + +.dont_update + xor a + ret +; 140ed + +_InitTime:: ; 140ed + call GetClock + call FixDays + ld hl, hRTCSeconds + ld de, wStartSecond + + ld a, [wStringBuffer2 + 3] + sub [hl] + dec hl + jr nc, .okay_secs + add 60 +.okay_secs + ld [de], a + dec de + + ld a, [wStringBuffer2 + 2] + sbc [hl] + dec hl + jr nc, .okay_mins + add 60 +.okay_mins + ld [de], a + dec de + + ld a, [wStringBuffer2 + 1] + sbc [hl] + dec hl + jr nc, .okay_hrs + add 24 +.okay_hrs + ld [de], a + dec de + + ld a, [wStringBuffer2] + sbc [hl] + dec hl + jr nc, .okay_days + add 140 + ld c, 7 + call SimpleDivide + +.okay_days + ld [de], a + ret +; 1412a diff --git a/engine/rtc/timeset.asm b/engine/rtc/timeset.asm new file mode 100755 index 000000000..eda3094e1 --- /dev/null +++ b/engine/rtc/timeset.asm @@ -0,0 +1,773 @@ +TIMESET_UP_ARROW EQUS "\"♂\"" ; $ef +TIMESET_DOWN_ARROW EQUS "\"♀\"" ; $f5 + +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 [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 + ld b, SCGB_DIPLOMA + call GetSGBLayout + xor a + ld [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, Text_WokeUpOak + call PrintText + ld hl, wTimeSetBuffer + ld bc, 50 + xor a + call ByteFill + ld a, 10 ; default hour = 10 AM + ld [wInitHourBuffer], a + +.loop + ld hl, Text_WhatTimeIsIt + 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 [wStringBuffer2 + 1], a + call .ClearScreen + ld hl, Text_WhatHrs + call PrintText + call YesNoBox + jr nc, .HourIsSet + call .ClearScreen + jr .loop + +.HourIsSet: + ld hl, Text_HowManyMinutes + 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, Text_WhoaMins + 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 + 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) + +UnreferencedFunction907f1: ; 907f1 + 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 +; 90810 + +SetMinutes: ; 90810 (24:4810) + ld 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: ; 90859 (24:4859) + ld de, wInitMinuteBuffer + 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) + +Text_WokeUpOak: ; 0x90874 + ; Zzz… Hm? Wha…? You woke me up! Will you check the clock for me? + text_jump UnknownText_0x1bc29c + db "@" +; 0x90879 + +Text_WhatTimeIsIt: ; 0x90879 + ; What time is it? + text_jump UnknownText_0x1bc2eb + db "@" +; 0x9087e + +String_oclock: + db "o'clock@" +; 90886 + +Text_WhatHrs: ; 0x90886 + ; What?@ @ + text_jump UnknownText_0x1bc2fd + start_asm + hlcoord 1, 16 + call DisplayHourOClock + ld hl, .QuestionMark + ret +; 90895 (24:4895) + +.QuestionMark: ; 0x90895 + ; ? + text_jump UnknownText_0x1bc305 + db "@" +; 0x9089a + +Text_HowManyMinutes: ; 0x9089a + ; How many minutes? + text_jump UnknownText_0x1bc308 + db "@" +; 0x9089f + +String_min: + db "min.@" +; 908a4 + +Text_WhoaMins: ; 0x908a4 + ; Whoa!@ @ + text_jump UnknownText_0x1bc31b + start_asm + hlcoord 7, 14 + call DisplayMinutesWithMinString + ld hl, .QuestionMark + ret +; 908b3 (24:48b3) + +.QuestionMark: ; 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, 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, .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 + +TimeSetBackgroundGFX: ; 908fb +INCBIN "gfx/new_game/timeset_bg.1bpp" +TimeSetUpArrowGFX: ; 90903 +INCBIN "gfx/new_game/up_arrow.1bpp" +TimeSetDownArrowGFX: ; 9090b +INCBIN "gfx/new_game/down_arrow.1bpp" +; 90913 + +SetDayOfWeek: ; 90913 + ld a, [hInMenu] + push af + ld a, $1 + ld [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, .WhatDayIsItText + call PrintText + hlcoord 9, 3 + ld b, 2 + ld c, 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 + ld [hInMenu], a + ret +; 90993 + +.GetJoypadAction: ; 90993 + ld 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 + ld [hBGMapMode], a + hlcoord 10, 4 + ld b, 2 + ld c, 9 + call ClearBox + hlcoord 10, 5 + call .PlaceWeekdayString + call WaitBGMap + and a + ret +; 909de + +.PlaceWeekdayString: ; 909de + 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 +; 909f2 + +.WeekdayStrings: ; 909f2 +; 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@" + + +.WhatDayIsItText: ; 0x90a3f + ; What day is it? + text_jump UnknownText_0x1bc369 + db "@" +; 0x90a44 + +.ConfirmWeekdayText: ; 0x90a44 + start_asm + hlcoord 1, 14 + call .PlaceWeekdayString + ld hl, .IsIt + ret +; 90a4f (24:4a4f) + +.IsIt: ; 0x90a4f + ; , is it? + text_jump UnknownText_0x1bc37a + db "@" +; 0x90a54 + +InitialSetDSTFlag: ; 90a54 + ld a, [wDST] + set 7, a + ld [wDST], a + hlcoord 1, 14 + lb bc, 3, 18 + call ClearBox + ld hl, .Text + call PlaceHLTextAtBC + ret +; 90a6c + +.Text: ; 90a6c + start_asm + call UpdateTime + ld a, [hHours] + ld b, a + ld a, [hMinutes] + ld c, a + decoord 1, 14 + farcall PrintHoursMins + ld hl, .DSTIsThatOK + ret +; 90a83 (24:4a83) + +.DSTIsThatOK: ; 0x90a83 + ; DST, is that OK? + text_jump Text_DSTIsThatOK + db "@" +; 0x90a88 + +InitialClearDSTFlag: ; 90a88 + ld a, [wDST] + res 7, a + ld [wDST], a + hlcoord 1, 14 + lb bc, 3, 18 + call ClearBox + ld hl, .Text + call PlaceHLTextAtBC + ret +; 90aa0 + +.Text: ; 90aa0 + start_asm + call UpdateTime + ld a, [hHours] + ld b, a + ld a, [hMinutes] + ld c, a + decoord 1, 14 + farcall PrintHoursMins + ld hl, .IsThatOK + ret +; 90ab7 + +.IsThatOK: ; 0x90ab7 + ; , is that OK? + text_jump UnknownText_0x1c5ff1 + db "@" +; 0x90abc + +DebugDisplayTime: ; 90abc + hlcoord 1, 14 + lb bc, 3, SCREEN_WIDTH - 2 + call ClearBox + ld hl, .Text + call PlaceHLTextAtBC + ret +; 90acc + +.Text: ; 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 .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 +; 90b13 + +.NowOnDebug: ; 0x90b13 + text "<PARA>Now on DEBUG…" + prompt +; 0x90b23 + +.PrintTime: ; 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 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 +; 90b71 (24:4b71) + +.nite_string: db "NITE@" +.morn_string: db "MORN@" +.day_string: 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 NOON_HOUR + ret c + ret z + sub NOON_HOUR + ret + +.midnight + ld a, NOON_HOUR + ret |