mm/tools/schedule_timeconv.py
Anghelo Carvajal ec86f10b0f
SCHEDULE_TIME (#1438)
* SCHEDULE_CALC_TIME_ALT

* add s32 cast to avoid f32 -> u16 direct cast

* SCHEDULE_TIME

* remove the alts

* Update explanation about the script
2023-10-22 16:52:40 +11:00

37 lines
1.0 KiB
Python
Executable File

#!/usr/bin/env python3
# SPDX-FileCopyrightText: © 2023 ZeldaRET
# SPDX-License-Identifier: MIT
# Convert time values such as 0x1AA9 to their schedule clock time, i.e. 8,30
from __future__ import annotations
import sys
def u16(x: int|float) -> int:
return int(x) & 0xFFFF
def SCHEDULE_CONVERT_TIME(time: int|float) -> int:
return u16(time - 0x10000 // 360 * 90)
def SCHEDULE_UNCONVERT_TIME(time: int) -> int:
return time + 0x10000 // 360 * 90
time = sys.argv[1]
time = int(time, 0)
minutes = round(((24 * 60) / 0x10000) * SCHEDULE_UNCONVERT_TIME(time))
hours = int(minutes // 60)
minutes = round(minutes - 60 * hours)
# Since multiple values are mapped to the same clock time, check that it
# still matches once converted. If it doesn't match as it is, print a warning.
macro_val = SCHEDULE_CONVERT_TIME((hours * 60.0 + minutes) * ((0x10000 // 60) / 24.0))
print(f"{hours},{minutes:02} -> 0x{macro_val:04X}")
print(f"SCHEDULE_TIME({hours}, {minutes})")
if time != macro_val:
print("Warning: Result does not match as-is")