_ResetClock: 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 ; Password OK. Select CONTINUE & reset settings. text_far UnknownText_0x1c55db text_end .text_wrong ; Wrong password! text_far UnknownText_0x1c560b text_end .text_askreset ; Reset the clock? text_far UnknownText_0x1c561c text_end .NoYes_MenuHeader: db 0 ; flags menu_coords 14, 7, SCREEN_WIDTH - 1, TEXTBOX_Y - 1 dw .NoYes_MenuData db 1 ; default option .NoYes_MenuData: db STATICMENU_CURSOR | STATICMENU_NO_TOP_SPACING ; flags db 2 ; items db "NO@" db "YES@" ClockResetPassword: 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 ldh 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 ; Please enter the password. text_far UnknownText_0x1c562e text_end .updateIDdisplay 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 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 ld a, [wStringBuffer2 + 5] ld e, a ld d, $0 ld hl, wStringBuffer2 add hl, de ret .ConvertDecIDToBytes: 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: 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: 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: ld a, [hli] add e ld e, a ld a, $0 adc d ld d, a dec c jr nz, .ComponentFromNumber ret .ComponentFromString: 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