diff --git a/src/subsidy.cpp b/src/subsidy.cpp --- a/src/subsidy.cpp +++ b/src/subsidy.cpp @@ -47,8 +47,7 @@ void Subsidy::AwardTo(CompanyID company) NewsStringData *company_name = new NewsStringData(GetString(STR_COMPANY_NAME)); /* Add a news item */ - std::pair reftype = SetupSubsidyDecodeParam(this, SubsidyDecodeParamType::NewsAwarded); - InjectDParam(1); + std::pair reftype = SetupSubsidyDecodeParam(this, SubsidyDecodeParamType::NewsAwarded, 1); SetDParamStr(0, company_name->string); AddNewsItem( @@ -67,9 +66,10 @@ void Subsidy::AwardTo(CompanyID company) * Setup the string parameters for printing the subsidy at the screen, and compute the news reference for the subsidy. * @param s %Subsidy being printed. * @param mode Type of subsidy news message to decide on parameter format. + * @param parameter_offset The location/index in the String DParams to start decoding the subsidy's parameters. Defaults to 0. * @return Reference of the subsidy in the news system. */ -std::pair SetupSubsidyDecodeParam(const Subsidy *s, SubsidyDecodeParamType mode) +std::pair SetupSubsidyDecodeParam(const Subsidy *s, SubsidyDecodeParamType mode, uint parameter_offset) { NewsReferenceType reftype1 = NR_NONE; NewsReferenceType reftype2 = NR_NONE; @@ -77,40 +77,40 @@ std::paircargo_type); if (mode == SubsidyDecodeParamType::Gui || mode == SubsidyDecodeParamType::NewsWithdrawn) { - SetDParam(0, cs->name); + SetDParam(parameter_offset, cs->name); } else { - SetDParam(0, cs->name_single); + SetDParam(parameter_offset, cs->name_single); } switch (s->src_type) { case ST_INDUSTRY: reftype1 = NR_INDUSTRY; - SetDParam(1, STR_INDUSTRY_NAME); + SetDParam(parameter_offset + 1, STR_INDUSTRY_NAME); break; case ST_TOWN: reftype1 = NR_TOWN; - SetDParam(1, STR_TOWN_NAME); + SetDParam(parameter_offset + 1, STR_TOWN_NAME); break; default: NOT_REACHED(); } - SetDParam(2, s->src); + SetDParam(parameter_offset + 2, s->src); switch (s->dst_type) { case ST_INDUSTRY: reftype2 = NR_INDUSTRY; - SetDParam(4, STR_INDUSTRY_NAME); + SetDParam(parameter_offset + 4, STR_INDUSTRY_NAME); break; case ST_TOWN: reftype2 = NR_TOWN; - SetDParam(4, STR_TOWN_NAME); + SetDParam(parameter_offset + 4, STR_TOWN_NAME); break; default: NOT_REACHED(); } - SetDParam(5, s->dst); + SetDParam(parameter_offset + 5, s->dst); /* If the subsidy is being offered or awarded, the news item mentions the subsidy duration. */ if (mode == SubsidyDecodeParamType::NewsOffered || mode == SubsidyDecodeParamType::NewsAwarded) { - SetDParam(7, _settings_game.difficulty.subsidy_duration); + SetDParam(parameter_offset + 7, _settings_game.difficulty.subsidy_duration); } return std::pair(reftype1, reftype2);