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, sint16 value) { rct_string_id stringId = 2733; if (gConfigGeneral.measurement_format == MEASUREMENT_FORMAT_IMPERIAL) { value = metres_to_feet(value); stringId--; } sint16 *argRef = &value; format_string_part(dest, stringId, (char**)&argRef); (*dest)--; }
void format_velocity(char **dest, uint16 value) { rct_string_id stringId = 2734; if (gConfigGeneral.measurement_format == MEASUREMENT_FORMAT_METRIC) { value = mph_to_kmph(value); stringId++; } uint16 *argRef = &value; format_string_part(dest, stringId, (char**)&argRef); (*dest)--; }
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); (*dest)--; }
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); (*dest)--; }
void format_velocity(char **dest, uint16 value) { rct_string_id stringId; switch (gConfigGeneral.measurement_format) { default: stringId = STR_UNIT_SUFFIX_MILES_PER_HOUR; break; case MEASUREMENT_FORMAT_METRIC: value = mph_to_kmph(value); stringId = STR_UNIT_SUFFIX_KILOMETRES_PER_HOUR; break; case MEASUREMENT_FORMAT_SI: value = mph_to_dmps(value); stringId = STR_UNIT_SUFFIX_METRES_PER_SECOND; break; } uint16 *argRef = &value; format_string_part(dest, stringId, (char**)&argRef); (*dest)--; }
void format_string_code(unsigned int format_code, char **dest, char **args) { int value; switch (format_code) { case FORMAT_COMMA32: // Pop argument value = *((sint32*)*args); *args += 4; format_comma_separated_integer(dest, value); break; case FORMAT_INT32: // Pop argument value = *((sint32*)*args); *args += 4; format_integer(dest, value); break; case FORMAT_COMMA2DP32: // Pop argument value = *((sint32*)*args); *args += 4; format_comma_separated_fixed_2dp(dest, value); break; case FORMAT_COMMA1DP16: // Pop argument value = *((sint16*)*args); *args += 2; format_comma_separated_fixed_1dp(dest, value); break; case FORMAT_COMMA16: // Pop argument value = *((sint16*)*args); *args += 2; format_comma_separated_integer(dest, value); break; case FORMAT_UINT16: // Pop argument value = *((uint16*)*args); *args += 2; format_integer(dest, value); break; case FORMAT_CURRENCY2DP: // Pop argument value = *((sint32*)*args); *args += 4; format_currency_2dp(dest, value); break; case FORMAT_CURRENCY: // Pop argument value = *((sint32*)*args); *args += 4; format_currency(dest, value); break; case FORMAT_STRINGID: case FORMAT_STRINGID2: // Pop argument value = *((uint16*)*args); *args += 2; format_string_part(dest, value, args); (*dest)--; break; case FORMAT_STRING: // Pop argument value = *((uint32*)*args); *args += 4; if (value != 0) { strcpy(*dest, (char*)value); *dest += strlen(*dest); } break; case FORMAT_MONTHYEAR: // Pop argument value = *((uint16*)*args); *args += 2; format_date(dest, value); break; case FORMAT_MONTH: // Pop argument value = *((uint16*)*args); *args += 2; strcpy(*dest, language_get_string(STR_MONTH_MARCH + date_get_month(value))); *dest += strlen(*dest); break; case FORMAT_VELOCITY: // Pop argument value = *((sint16*)*args); *args += 2; format_velocity(dest, value); break; case FORMAT_POP16: *args += 2; break; case FORMAT_PUSH16: *args -= 2; break; case FORMAT_DURATION: // Pop argument value = *((uint16*)*args); *args += 2; format_duration(dest, value); break; case FORMAT_REALTIME: // Pop argument value = *((uint16*)*args); *args += 2; format_realtime(dest, value); break; case FORMAT_LENGTH: // Pop argument value = *((sint16*)*args); *args += 2; format_length(dest, value); break; case FORMAT_SPRITE: // Pop argument value = *((uint32*)*args); *args += 4; *(*dest)++ = 23; *((uint32*)(*dest)) = value; *dest += 4; break; } }
void format_string_code(unsigned char format_code, char **dest, char **args) { int value; switch (format_code) { case FORMAT_COMMA32: // Pop argument value = *((sint32*)*args); *args += 4; format_comma_separated_integer(dest, value); break; case FORMAT_INT32: // Pop argument value = *((sint32*)*args); *args += 4; format_integer(dest, value); break; case FORMAT_COMMA2DP32: // Pop argument value = *((sint32*)*args); *args += 4; format_comma_separated_fixed_2dp(dest, value); break; case FORMAT_COMMA16: // Pop argument value = *((sint16*)*args); *args += 2; format_comma_separated_integer(dest, value); break; case FORMAT_UINT16: // Pop argument value = *((uint16*)*args); *args += 2; format_integer(dest, value); break; case FORMAT_CURRENCY2DP: // Pop argument value = *((sint32*)*args); *args += 4; format_currency_2dp(dest, value); break; case FORMAT_CURRENCY: // Pop argument value = *((sint32*)*args); *args += 4; format_currency(dest, value); break; case FORMAT_STRINGID: case FORMAT_STRINGID2: // Pop argument value = *((uint16*)*args); *args += 2; format_string_part(dest, value, args); (*dest)--; break; case FORMAT_STRING: // Pop argument value = *((uint32*)*args); *args += 4; strcpy(*dest, (char*)value); *dest += strlen(*dest); break; case FORMAT_MONTHYEAR: // Pop argument 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)--; break; case FORMAT_MONTH: // Pop argument value = *((uint16*)*args); *args += 2; strcpy(*dest, get_string(STR_MONTH_MARCH + date_get_month(value))); *dest += strlen(*dest); break; case FORMAT_VELOCITY: // Pop argument value = *((sint16*)*args); *args += 2; if (RCT2_GLOBAL(RCT2_ADDRESS_CONFIG_METRIC, uint8)) { format_comma_separated_integer(dest, mph_to_kmph(value)); strcat(*dest, "kmh"); *dest += strlen(*dest); } else { format_comma_separated_integer(dest, value); strcat(*dest, "mph"); *dest += strlen(*dest); } break; case FORMAT_POP16: *args += 2; break; case FORMAT_PUSH16: *args -= 2; break; case FORMAT_DURATION: // Pop argument 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); 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); 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); strcat(*dest, "m"); *dest += strlen(*dest); } else { format_comma_separated_integer(dest, metres_to_feet(value)); strcat(*dest, "ft"); *dest += strlen(*dest); } break; case FORMAT_SPRITE: // Pop argument value = *((uint32*)*args); *args += 4; *(*dest)++ = 23; *((uint32*)(*dest)) = value; *dest += 4; break; } }