diff --git a/data/language/english_uk.txt b/data/language/english_uk.txt index a75f158672..3f031494f6 100644 --- a/data/language/english_uk.txt +++ b/data/language/english_uk.txt @@ -2722,24 +2722,24 @@ STR_2716 :/ STR_2717 :' STR_2718 :??? STR_2719 :??? -STR_2720 :??? -STR_2721 :??? -STR_2722 :??? -STR_2723 :??? -STR_2724 :??? -STR_2725 :??? -STR_2726 :??? -STR_2727 :??? -STR_2728 :??? -STR_2729 :??? -STR_2730 :??? -STR_2731 :??? -STR_2732 :??? -STR_2733 :??? -STR_2734 :??? -STR_2735 :??? -STR_2736 :??? -STR_2737 :??? +STR_2720 :{UINT16}sec +STR_2721 :{UINT16}secs +STR_2722 :{UINT16}min:{UINT16}sec +STR_2723 :{UINT16}min:{UINT16}secs +STR_2724 :{UINT16}mins:{UINT16}sec +STR_2725 :{UINT16}mins:{UINT16}secs +STR_2726 :{UINT16}min +STR_2727 :{UINT16}mins +STR_2728 :{UINT16}hour:{UINT16}min +STR_2729 :{UINT16}hour:{UINT16}mins +STR_2730 :{UINT16}hours:{UINT16}min +STR_2731 :{UINT16}hours:{UINT16}mins +STR_2732 :{COMMA16}ft +STR_2733 :{COMMA16}m +STR_2734 :{COMMA16}mph +STR_2735 :{COMMA16}km/h +STR_2736 :{MONTH}, Year {COMMA16} +STR_2737 :{STRINGID} {MONTH}, Year {COMMA16} STR_2738 :Title screen music STR_2739 :None STR_2740 :RollerCoaster Tycoon 1 diff --git a/data/language/english_us.txt b/data/language/english_us.txt index dfc7990996..feb888bde1 100644 --- a/data/language/english_us.txt +++ b/data/language/english_us.txt @@ -2722,24 +2722,24 @@ STR_2716 :/ STR_2717 :' STR_2718 :??? STR_2719 :??? -STR_2720 :??? -STR_2721 :??? -STR_2722 :??? -STR_2723 :??? -STR_2724 :??? -STR_2725 :??? -STR_2726 :??? -STR_2727 :??? -STR_2728 :??? -STR_2729 :??? -STR_2730 :??? -STR_2731 :??? -STR_2732 :??? -STR_2733 :??? -STR_2734 :??? -STR_2735 :??? -STR_2736 :??? -STR_2737 :??? +STR_2720 :{UINT16}sec +STR_2721 :{UINT16}secs +STR_2722 :{UINT16}min:{UINT16}sec +STR_2723 :{UINT16}min:{UINT16}secs +STR_2724 :{UINT16}mins:{UINT16}sec +STR_2725 :{UINT16}mins:{UINT16}secs +STR_2726 :{UINT16}min +STR_2727 :{UINT16}mins +STR_2728 :{UINT16}hour:{UINT16}min +STR_2729 :{UINT16}hour:{UINT16}mins +STR_2730 :{UINT16}hours:{UINT16}min +STR_2731 :{UINT16}hours:{UINT16}mins +STR_2732 :{COMMA16}ft +STR_2733 :{COMMA16}m +STR_2734 :{COMMA16}mph +STR_2735 :{COMMA16}km/h +STR_2736 :{MONTH}, Year {COMMA16} +STR_2737 :{STRINGID} {MONTH}, Year {COMMA16} STR_2738 :Title screen music STR_2739 :None STR_2740 :RollerCoaster Tycoon 1 diff --git a/src/localisation/localisation.c b/src/localisation/localisation.c index 07021c6dff..a0ae867d76 100644 --- a/src/localisation/localisation.c +++ b/src/localisation/localisation.c @@ -343,6 +343,84 @@ void format_currency_2dp(char **dest, long long value) } } +void format_date(char **dest, uint16 value) +{ + uint16 args[] = { date_get_month(value), date_get_year(value) + 1 }; + uint16 *argsRef = args; + format_string_part(dest, 2736, (char**)&argsRef); + (*dest)--; +} + +void format_length(char **dest, uint16 value) +{ + rct_string_id stringId = 2733; + + if (gGeneral_config.measurement_format == MEASUREMENT_FORMAT_IMPERIAL) { + value = metres_to_feet(value); + stringId--; + } + + uint16 *argRef = &value; + format_string_part(dest, stringId, (char**)&argRef); +} + +void format_velocity(char **dest, uint16 value) +{ + rct_string_id stringId = 2734; + + if (gGeneral_config.measurement_format == MEASUREMENT_FORMAT_METRIC) { + value = mph_to_kmph(value); + stringId++; + } + + uint16 *argRef = &value; + format_string_part(dest, stringId, (char**)&argRef); +} + +void format_duration(char **dest, uint16 value) +{ + uint16 minutes = value / 60; + uint16 seconds = value % 60; + uint16 args[] = { minutes, seconds }; + uint16 *argsRef = &args[1]; + rct_string_id stringId = 2720; + + if (minutes > 0) { + stringId += 2; + if (minutes != 1) + stringId += 2; + + argsRef--; + } + + if (seconds != 1) + stringId++; + + format_string_part(dest, stringId, (char**)&argsRef); +} + +void format_realtime(char **dest, uint16 value) +{ + uint16 hours = value / 60; + uint16 minutes = value % 60; + uint16 args[] = { hours, minutes }; + uint16 *argsRef = &args[1]; + rct_string_id stringId = 2726; + + if (hours > 0) { + stringId += 2; + if (hours != 1) + stringId += 2; + + argsRef--; + } + + if (minutes != 1) + stringId++; + + format_string_part(dest, stringId, (char**)&argsRef); +} + void format_string_code(unsigned char format_code, char **dest, char **args) { int value; @@ -419,13 +497,7 @@ void format_string_code(unsigned char format_code, char **dest, char **args) value = *((uint16*)*args); *args += 2; - uint16 dateArgs[] = { date_get_month(value), date_get_year(value) + 1 }; - uint16 *dateArgs2 = dateArgs; - char formatString[] = "?, Year ?"; - formatString[0] = FORMAT_MONTH; - formatString[8] = FORMAT_COMMA16; - format_string_part_from_raw(dest, formatString, (char**)&dateArgs2); - (*dest)--; + format_date(dest, value); break; case FORMAT_MONTH: // Pop argument @@ -440,15 +512,7 @@ void format_string_code(unsigned char format_code, char **dest, char **args) value = *((sint16*)*args); *args += 2; - if (RCT2_GLOBAL(RCT2_ADDRESS_CONFIG_METRIC, uint8)) { - format_comma_separated_integer(dest, mph_to_kmph(value)); - strcpy(*dest, "kmh"); - *dest += strlen(*dest); - } else { - format_comma_separated_integer(dest, value); - strcpy(*dest, "mph"); - *dest += strlen(*dest); - } + format_velocity(dest, value); break; case FORMAT_POP16: *args += 2; @@ -461,45 +525,21 @@ void format_string_code(unsigned char format_code, char **dest, char **args) value = *((uint16*)*args); *args += 2; - if (value / 60 > 0) { - format_integer(dest, value / 60); - strcpy(*dest, value / 60 == 1 ? "min:" : "mins:"); - *dest += strlen(*dest); - } - - format_integer(dest, value % 60); - strcpy(*dest, value % 60 == 1 ? "sec" : "secs"); - *dest += strlen(*dest); + format_duration(dest, value); break; case FORMAT_REALTIME: // Pop argument value = *((uint16*)*args); *args += 2; - if (value / 60 > 0) { - format_integer(dest, value / 60); - strcpy(*dest, value / 60 == 1 ? "hour:" : "hours:"); - *dest += strlen(*dest); - } - - format_integer(dest, value % 60); - strcpy(*dest, value % 60 == 1 ? "min" : "mins"); - *dest += strlen(*dest); + format_realtime(dest, value); break; case FORMAT_LENGTH: // Pop argument value = *((sint16*)*args); *args += 2; - if (RCT2_GLOBAL(RCT2_ADDRESS_CONFIG_METRIC, uint8)) { - format_comma_separated_integer(dest, value); - strcpy(*dest, "m"); - *dest += strlen(*dest); - } else { - format_comma_separated_integer(dest, metres_to_feet(value)); - strcpy(*dest, "ft"); - *dest += strlen(*dest); - } + format_length(dest, value); break; case FORMAT_SPRITE: // Pop argument diff --git a/src/windows/game_bottom_toolbar.c b/src/windows/game_bottom_toolbar.c index 27cec5ebfb..0f40dec405 100644 --- a/src/windows/game_bottom_toolbar.c +++ b/src/windows/game_bottom_toolbar.c @@ -477,20 +477,16 @@ static void window_game_bottom_toolbar_draw_right_panel(rct_drawpixelinfo *dpi, y = window_game_bottom_toolbar_widgets[WIDX_RIGHT_OUTSET].top + w->y + 2; // Date - char *freeStr = (char*)0x009BC677; - freeStr[0] = FORMAT_STRINGID; - freeStr[1] = ' '; - freeStr[2] = FORMAT_MONTHYEAR; - freeStr[3] = 0; - - int month = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_MONTH_YEAR, sint16) & 7; + int year = date_get_year(RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_MONTH_YEAR, sint16)) + 1; + int month = date_get_month(RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_MONTH_YEAR, sint16) & 7); int day = ((RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_MONTH_TICKS, uint16) * days_in_month[month]) >> 16) & 0xFF; RCT2_GLOBAL(0x013CE952, short) = STR_DATE_DAY_1 + day; - RCT2_GLOBAL(0x013CE954, short) = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_MONTH_YEAR, sint16); + RCT2_GLOBAL(0x013CE954, short) = month; + RCT2_GLOBAL(0x013CE956, short) = year; gfx_draw_string_centred( dpi, - 3165, + 2737, x, y, (RCT2_GLOBAL(RCT2_ADDRESS_CURSOR_OVER_WINDOWCLASS, rct_windowclass) == 2 && RCT2_GLOBAL(RCT2_ADDRESS_CURSOR_OVER_WIDGETINDEX, sint32) == WIDX_DATE ? 2 : w->colours[0] & 0x7F),