Index: src/newgrf_text.cpp =================================================================== --- src/newgrf_text.cpp (revision 27688) +++ src/newgrf_text.cpp (working copy) @@ -815,13 +815,15 @@ byte position; const GRFFile *grffile; bool used; + int paused; - TextRefStack() : position(0), grffile(NULL), used(false) {} + TextRefStack() : position(0), grffile(NULL), used(false), paused(0) {} TextRefStack(const TextRefStack &stack) : position(stack.position), grffile(stack.grffile), - used(stack.used) + used(stack.used), + paused(stack.paused) { memcpy(this->stack, stack.stack, sizeof(this->stack)); } @@ -948,6 +950,23 @@ } } +void PauseTextRefStackUsage() +{ + if (_newgrf_textrefstack.used || _newgrf_textrefstack.paused > 0) + { + _newgrf_textrefstack.used = false; + _newgrf_textrefstack.paused++; + } +} + +void ResumeTextRefStackUsage() +{ + if (_newgrf_textrefstack.paused > 0) { + _newgrf_textrefstack.paused--; + if (_newgrf_textrefstack.paused == 0) _newgrf_textrefstack.used = true; + } +} + /** Stop using the TTDP compatible string code parsing */ void StopTextRefStackUsage() { Index: src/newgrf_text.h =================================================================== --- src/newgrf_text.h (revision 27688) +++ src/newgrf_text.h (working copy) @@ -37,6 +37,8 @@ void StartTextRefStackUsage(const GRFFile *grffile, byte numEntries, const uint32 *values = NULL); void StopTextRefStackUsage(); +void PauseTextRefStackUsage(); +void ResumeTextRefStackUsage(); void RewindTextRefStack(); bool UsingNewGRFTextStack(); struct TextRefStack *CreateTextRefStackBackup(); Index: src/strings.cpp =================================================================== --- src/strings.cpp (revision 27688) +++ src/strings.cpp (working copy) @@ -1132,7 +1132,9 @@ default: { StringParameters tmp_params(*args, 1); + PauseTextRefStackUsage(); buff = GetStringWithArgs(buff, cargo_str, &tmp_params, last); + ResumeTextRefStackUsage(); break; } } @@ -1146,7 +1148,9 @@ StringID cargo_str = (cargo == CT_INVALID) ? STR_QUANTITY_N_A : CargoSpec::Get(cargo)->quantifier; StringParameters tmp_args(*args, 1); + PauseTextRefStackUsage(); buff = GetStringWithArgs(buff, cargo_str, &tmp_args, last); + ResumeTextRefStackUsage(); break; }