1
0
mirror of https://github.com/OpenTTD/OpenTTD synced 2026-01-19 18:32:35 +01:00

Codechange: Allow encoded strings to use as many parameters as necessary.

This commit is contained in:
Peter Nelson
2024-12-16 19:58:46 +00:00
committed by Peter Nelson
parent 37b276b4b5
commit e818fcbf19

View File

@@ -1119,7 +1119,7 @@ uint ConvertDisplaySpeedToKmhishSpeed(uint speed, VehicleType type)
*/
static const char *DecodeEncodedString(const char *str, bool game_script, StringBuilder &builder)
{
ArrayStringParameters<20> sub_args;
std::vector<StringParameter> sub_args;
char *p;
StringIndexInTab id(std::strtoul(str, &p, 16));
@@ -1134,8 +1134,7 @@ static const char *DecodeEncodedString(const char *str, bool game_script, String
return p;
}
int i = 0;
while (*p != '\0' && i < 20) {
while (*p != '\0') {
/* The start of parameter. */
const char *s = ++p;
@@ -1144,7 +1143,7 @@ static const char *DecodeEncodedString(const char *str, bool game_script, String
if (s == p) {
/* This is an empty parameter. */
sub_args.SetParam(i++, std::monostate{});
sub_args.emplace_back(std::monostate{});
continue;
}
@@ -1162,24 +1161,24 @@ static const char *DecodeEncodedString(const char *str, bool game_script, String
return p;
}
param = MakeStringID(TEXT_TAB_GAMESCRIPT_START, StringIndexInTab(param));
sub_args.SetParam(i++, param);
sub_args.emplace_back(param);
break;
}
case SCC_ENCODED_NUMERIC: {
uint64_t param = std::strtoull(s, &p, 16);
sub_args.SetParam(i++, param);
sub_args.emplace_back(param);
break;
}
case SCC_ENCODED_STRING: {
sub_args.SetParam(i++, std::string(s, p - s));
sub_args.emplace_back(std::string(s, p - s));
break;
}
default:
/* Unknown parameter, make it blank. */
sub_args.SetParam(i++, std::monostate{});
sub_args.emplace_back(std::monostate{});
break;
}
}