From 97c511cd2f271252cbc9e9746668081422231ca5 Mon Sep 17 00:00:00 2001 From: mid-kid Date: Wed, 14 Mar 2018 13:28:36 +0100 Subject: 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. --- engine/rtc/clock_reset.asm | 254 +++++++++++ engine/rtc/delete_save_change_clock.asm | 296 ++++++++++++ engine/rtc/printhoursmins.asm | 63 +++ engine/rtc/rtc.asm | 209 +++++++++ engine/rtc/timeset.asm | 773 ++++++++++++++++++++++++++++++++ 5 files changed, 1595 insertions(+) create mode 100755 engine/rtc/clock_reset.asm create mode 100755 engine/rtc/delete_save_change_clock.asm create mode 100644 engine/rtc/printhoursmins.asm create mode 100755 engine/rtc/rtc.asm create mode 100755 engine/rtc/timeset.asm (limited to 'engine/rtc') 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 "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 -- cgit v1.2.3 From be76ee56a89e72c0b87a605321bb1670e86f8220 Mon Sep 17 00:00:00 2001 From: mid-kid Date: Sun, 25 Mar 2018 18:24:14 +0200 Subject: Organize the engine/ directory, director's cut Cleaned up `engine/routines`, in favor of moving files into more appropriate directories. predef-related routines are now in top-level `engine`. `rtc/delete_save_change_clock.asm` has been split into both `menus/delete_save.asm` and `rtc/reset_password.asm`. Made a new subdirectory: * engine/math: Contains all generic math-related routines. --- engine/rtc/clock_reset.asm | 254 --------------------------- engine/rtc/delete_save_change_clock.asm | 296 -------------------------------- engine/rtc/reset_password.asm | 259 ++++++++++++++++++++++++++++ engine/rtc/restart_clock.asm | 253 +++++++++++++++++++++++++++ 4 files changed, 512 insertions(+), 550 deletions(-) delete mode 100755 engine/rtc/clock_reset.asm delete mode 100755 engine/rtc/delete_save_change_clock.asm create mode 100755 engine/rtc/reset_password.asm create mode 100755 engine/rtc/restart_clock.asm (limited to 'engine/rtc') diff --git a/engine/rtc/clock_reset.asm b/engine/rtc/clock_reset.asm deleted file mode 100755 index c05129349..000000000 --- a/engine/rtc/clock_reset.asm +++ /dev/null @@ -1,254 +0,0 @@ - -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 deleted file mode 100755 index 431dc6034..000000000 --- a/engine/rtc/delete_save_change_clock.asm +++ /dev/null @@ -1,296 +0,0 @@ -_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/reset_password.asm b/engine/rtc/reset_password.asm new file mode 100755 index 000000000..fd5007ba7 --- /dev/null +++ b/engine/rtc/reset_password.asm @@ -0,0 +1,259 @@ +_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 diff --git a/engine/rtc/restart_clock.asm b/engine/rtc/restart_clock.asm new file mode 100755 index 000000000..5fbac80dd --- /dev/null +++ b/engine/rtc/restart_clock.asm @@ -0,0 +1,253 @@ +RestartClock_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 RestartClock_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 RestartClock_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 RestartClock_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 -- cgit v1.2.3 From 81fff9bb80af3db0ee381c824261b8963e1cc221 Mon Sep 17 00:00:00 2001 From: mid-kid Date: Sun, 1 Apr 2018 17:03:11 +0200 Subject: Fix file permissions I have no idea why this was a thing (do people store this repo on FAT32 flash drives or something?), but quite a bit of files had a permission of 755. This isn't really a problem, but it's inconsistent and weird. --- engine/rtc/reset_password.asm | 0 engine/rtc/restart_clock.asm | 0 engine/rtc/rtc.asm | 0 engine/rtc/timeset.asm | 0 4 files changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 engine/rtc/reset_password.asm mode change 100755 => 100644 engine/rtc/restart_clock.asm mode change 100755 => 100644 engine/rtc/rtc.asm mode change 100755 => 100644 engine/rtc/timeset.asm (limited to 'engine/rtc') diff --git a/engine/rtc/reset_password.asm b/engine/rtc/reset_password.asm old mode 100755 new mode 100644 diff --git a/engine/rtc/restart_clock.asm b/engine/rtc/restart_clock.asm old mode 100755 new mode 100644 diff --git a/engine/rtc/rtc.asm b/engine/rtc/rtc.asm old mode 100755 new mode 100644 diff --git a/engine/rtc/timeset.asm b/engine/rtc/timeset.asm old mode 100755 new mode 100644 -- cgit v1.2.3 From d3cc861d334c8b773c1b6c662ed9924c43cef009 Mon Sep 17 00:00:00 2001 From: mid-kid Date: Wed, 4 Apr 2018 22:26:07 +0200 Subject: Fix snake_case filenames Renamed a bunch of files, most of them one-off functions, to better fit the general snake_case naming scheme. Also renamed some awfully long filenames. --- engine/rtc/print_hours_mins.asm | 63 +++++++++++++++++++++++++++++++++++++++++ engine/rtc/printhoursmins.asm | 63 ----------------------------------------- 2 files changed, 63 insertions(+), 63 deletions(-) create mode 100644 engine/rtc/print_hours_mins.asm delete mode 100644 engine/rtc/printhoursmins.asm (limited to 'engine/rtc') diff --git a/engine/rtc/print_hours_mins.asm b/engine/rtc/print_hours_mins.asm new file mode 100644 index 000000000..eb7dc1619 --- /dev/null +++ b/engine/rtc/print_hours_mins.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/printhoursmins.asm b/engine/rtc/printhoursmins.asm deleted file mode 100644 index eb7dc1619..000000000 --- a/engine/rtc/printhoursmins.asm +++ /dev/null @@ -1,63 +0,0 @@ -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 -- cgit v1.2.3