mirror of https://github.com/OpenTTD/OpenTTD
Codechange: Allow encoded strings to use as many parameters as necessary.
parent
37b276b4b5
commit
e818fcbf19
|
@ -1119,7 +1119,7 @@ uint ConvertDisplaySpeedToKmhishSpeed(uint speed, VehicleType type)
|
||||||
*/
|
*/
|
||||||
static const char *DecodeEncodedString(const char *str, bool game_script, StringBuilder &builder)
|
static const char *DecodeEncodedString(const char *str, bool game_script, StringBuilder &builder)
|
||||||
{
|
{
|
||||||
ArrayStringParameters<20> sub_args;
|
std::vector<StringParameter> sub_args;
|
||||||
|
|
||||||
char *p;
|
char *p;
|
||||||
StringIndexInTab id(std::strtoul(str, &p, 16));
|
StringIndexInTab id(std::strtoul(str, &p, 16));
|
||||||
|
@ -1134,8 +1134,7 @@ static const char *DecodeEncodedString(const char *str, bool game_script, String
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
int i = 0;
|
while (*p != '\0') {
|
||||||
while (*p != '\0' && i < 20) {
|
|
||||||
/* The start of parameter. */
|
/* The start of parameter. */
|
||||||
const char *s = ++p;
|
const char *s = ++p;
|
||||||
|
|
||||||
|
@ -1144,7 +1143,7 @@ static const char *DecodeEncodedString(const char *str, bool game_script, String
|
||||||
|
|
||||||
if (s == p) {
|
if (s == p) {
|
||||||
/* This is an empty parameter. */
|
/* This is an empty parameter. */
|
||||||
sub_args.SetParam(i++, std::monostate{});
|
sub_args.emplace_back(std::monostate{});
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1162,24 +1161,24 @@ static const char *DecodeEncodedString(const char *str, bool game_script, String
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
param = MakeStringID(TEXT_TAB_GAMESCRIPT_START, StringIndexInTab(param));
|
param = MakeStringID(TEXT_TAB_GAMESCRIPT_START, StringIndexInTab(param));
|
||||||
sub_args.SetParam(i++, param);
|
sub_args.emplace_back(param);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case SCC_ENCODED_NUMERIC: {
|
case SCC_ENCODED_NUMERIC: {
|
||||||
uint64_t param = std::strtoull(s, &p, 16);
|
uint64_t param = std::strtoull(s, &p, 16);
|
||||||
sub_args.SetParam(i++, param);
|
sub_args.emplace_back(param);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case SCC_ENCODED_STRING: {
|
case SCC_ENCODED_STRING: {
|
||||||
sub_args.SetParam(i++, std::string(s, p - s));
|
sub_args.emplace_back(std::string(s, p - s));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
/* Unknown parameter, make it blank. */
|
/* Unknown parameter, make it blank. */
|
||||||
sub_args.SetParam(i++, std::monostate{});
|
sub_args.emplace_back(std::monostate{});
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue