Old World Reference
Menu

Hurry Production Calculator

5 channels101 builds

What Hurry Production costs, replaying the engine's own integer maths. Only four things move the number: the production still missing, how many times you have already hurried that same channel in that city (+10% each, and it never resets), whether the build is under 50% done (up to +50%), and whether it is produced with Growth rather than Training or Civics (+50%). The unit's identity never enters the formula — only its production cost and production type — so the picker is a convenience over a plain cost number. See Hurrying Production for which channels you can actually unlock.

Building
Progress
Previously done
this channel, this city
Multiplier Civics always Training Zealot leader Money Holy War law Orders Orthodoxy law Citizens Volunteers law Discontent never escalates

What the code says

The escalation per city, per channel

  • Every hurry does iCost *= (10 + count); iCost /= 10 — so the nth repeat costs (10+n)/10 of base. Ten prior Civics hurries in a city means the eleventh costs double.
  • The counters are per city and per channel (miHurryCivicsCount, miHurryTrainingCount, …). Hurrying with Money never raises your Civics price.
  • Nothing in the code resets them — they are set to 0 when the city is created and only ever incremented (City.cs:283, incrementHurry*Count).

Base cost per channel

  • Civics / Training1.5 × missing + 100, rounded up to a multiple of 10.
  • Money5 × missing + 10, rounded up to 10.
  • Ordersmissing/10 + 2, not rounded.
  • Citizens — the escalation hits the missing production first, then missing/80 + 1. That base citizen is the one thing the repeat penalty never touches — and because the division is integer, the escalation is usually swallowed whole: Citizens is often the same price at nine prior hurries as at none.

The two multipliers on top

  • Under 50% donegetModifiedHurryCost adds (50 − percent)%. At 0% progress that is +50%; at 25% it is +25%; from 50% up it is nothing. Hurrying something barely started is the expensive case.
  • Growth buildsYIELD_GROWTH is the only yield carrying iHurryModifier (+50). Workers, Settlers, Scouts and Disciples all hurry half again dearer than a soldier of identical cost.
  • Both are applied after the repeat escalation, in that order.

Discontent, and the gates

  • Every hurry adds missing/100 + 10 Discontent regardless of channel, and it does not escalate with the hurry count — but it does take both multipliers above. Monetary Reform zeroes it (iHurryDiscontentModifier −100). In practice that is a near-flat 10–18, not something that scales with the build.
  • Because it does not escalate, a city that has already hurried nine times pays the same Discontent as one that never has — only the yield price climbs.
  • The community Rush Buy Rules Summary Table in the official manual (p.220) gives this one as 10 + mp/10. That converts the base to displayed Discontent but not the mp term: the engine holds Discontent in tenths and the UI divides by 10 (HelpText.cs:1316), so the missing-production term is mp/100. The same table's note that “Discontent … increases by 10% base too” is also wrong — getHurryDiscontent has no count term, and all five hurry*Build functions call it identically. Every other row matches the code.
  • canHurry refuses outright when the city is Damaged, when the build would finish next turn anyway (getBuildTurnsLeft == 1), or below Developing culture (HURRY_CULTURE).
  • Three city effects switch hurrying off entirely: a Furious family (EFFECTCITY_OPINIONFAMILY_FURIOUS), Autonomous Rule and Shared Power. Anger your family and the whole lever disappears.
  • Workers, Settlers and Disciples also cost +10 production per copy already built in that city (iProductionCity) — a second, separate escalation that feeds the missing-production figure above.

Formulas from City.cs getHurryCivicsCost, getHurryTrainingCost, getHurryMoneyCost, getHurryOrdersCost, getHurryPopulationCost and getModifiedHurryCost; constants from globalsInt.xml. Costs are charged with changeYieldStockpileWhole, so every figure here is in whole displayed yield. Integer truncation is reproduced exactly — the numbers should match the in-game tooltip.