Skip to content

Goodwill (Reputation)

Deep dive on the reputation system. Goodwill is the soft-power axis of the game — it gates and modifies what the construction and business-dealings systems can achieve.

→ Parent: GDD.md


Reputation Tracks

Reputation is tracked per entity, per stakeholder. Every named entity that acts in the world has its own reputation, scored independently across each relevant stakeholder. The player character and the main company are the two most prominent reputation-bearers for the player's day-to-day interaction, but they are not the only ones — subsidiaries and named individuals each carry their own reputations as well, computed and tracked the same way.

Entities with their own reputation tracks:

  • The player character — the person running the show. Personal reputation; travels with them across scenarios under the carryover rules described later.
  • Companies — each railroad is an institution with its own reputation, distinct from any one person. The player's primary company is the most prominent, but every company the player leads, sits on the board of, or holds (per Multiple Companies) carries its own track; the player's personal reputation spans them all.
  • Subsidiaries — businesses owned by the company (construction firms, manufacturers, refineries, producers). Each carries its own reputation in the regions where it operates.
  • Named individuals — key staff hired by the company, each arriving with their own history and continuing to build their own record (see Construction — Reputation of Named Individuals).

Each (entity, stakeholder) pair has its own goodwill score, built from the same itemized modifiers used everywhere else in the system. There is no aggregate top-line summary number for any entity; each track is read on its own terms, similar to how Victoria 3 surfaces interest groups.

Player Goodwill

The reputation of the player character as an individual operator and businessperson. It travels with the player. It reflects:

  • How the player is personally regarded by other industrialists, politicians, regulators, and the public.
  • The player's perceived integrity, ruthlessness, competence, and trustworthiness.
  • Personal alliances and personal enmities.

Company Goodwill

The reputation of the railroad company as an institution, distinct from any one person. It reflects:

  • The company's perceived reliability and operational quality.
  • Its track record of finishing projects, honoring contracts, and treating workers and partners.
  • Its standing in financial markets and with government bodies.
  • Its brand among shippers and passengers.

Track Divergence and Interaction

Reputation tracks can — and should — diverge. A player who personally bullies suppliers and bribes officials may build company goodwill (trains run, contracts are won) while their personal goodwill collapses. A figurehead with sterling personal reputation can preside over a company that wrecks itself on cost overruns. A construction subsidiary can earn a sterling reputation in Pennsylvania while its parent company is reviled in California. A star Chief Engineer may carry their own pristine name through a series of struggling employers.

Tracks are independent but interact. A tarnished parent company can drag down the reputation of its subsidiaries (guilt by association). A respected executive can lift the company that employs them (positive halo). These interactions are themselves modifier effects subject to the same rules as everything else in the system.

The interplay across all these tracks is the point — the railroad business is a constellation of named entities, each with its own standing, jointly painting the picture of how the operation is regarded.


What Moves Goodwill

Goodwill is moved by actions and outcomes, not by direct expenditure. Some categories:

Project Outcomes (Construction → Goodwill)

  • Projects delivered on time and at or under projected cost: company goodwill ↑, often player goodwill ↑.
  • Cost overruns, delays, accidents, or worker incidents: company goodwill ↓, possibly player goodwill ↓.
  • Methods used during construction (eminent domain, displacement, environmental damage) can dent player goodwill specifically with affected groups while leaving company goodwill intact.

Business Conduct (Business Dealings → Goodwill)

  • Honoring contracts, paying dividends, servicing bond coupons cleanly: company goodwill ↑.
  • Defaulting, restructuring, or aggressively renegotiating: company goodwill ↓.
  • Hostile equity acquisitions vs. friendly ones: differential effect on player goodwill with the target's previous owners and peers.
  • Sweetheart deals to a politically sensitive customer can lift one stakeholder's goodwill while denting another's.

Operational Reputation

  • On-time service, accident rates, labor relations: company goodwill drift over time.
  • Public-facing decisions (rate hikes, route closures, service quality) move both axes.

Scripted and Emergent Events

  • Strikes, disasters, scandals, regulatory hearings, press coverage. Many of these surface in the inbox as events that present the player with explicit choices, each option carrying labeled goodwill consequences.

What Goodwill Modifies

Goodwill is not vanity — it is leverage. It modifies the costs, options, and outcomes of construction and business dealings.

Effects on Construction

  • Permits and right-of-way depend on player goodwill with the relevant regional or government stakeholders. Low player goodwill increases the cost or time required to acquire land, or blocks projects outright.
  • Labor and supplier costs reflect company goodwill. A respected company gets favorable terms; a notorious one pays a premium or faces work stoppages.
  • Project risk — incidents, labor disputes, sabotage — is more likely against a company with poor goodwill.

Effects on Business Dealings

  • Bond pricing. A company with high goodwill issues bonds at a low coupon. A tarnished company pays more or cannot place bonds at all.
  • Equity acquisitions. Friendly buyouts and partial stakes are easier with high player goodwill toward the target's owners; hostile takes are gated by company financial muscle but cost goodwill on both axes.
  • Contract terms. Sweetheart deals are typically conditional on player goodwill thresholds with the customer. Government contracts (mail, guaranteed-volume freight) require company goodwill above some bar.
  • Counterparty trust. Whether a competing line accepts trackage rights, whether a bank extends emergency credit, whether a government regulator looks the other way — all of these key off goodwill.

Cross-System Soft Effects

  • High goodwill on either axis surfaces more opportunities (events that simply don't fire for a disreputable company).
  • Low goodwill surfaces different opportunities (e.g., desperate distressed-asset offers that a respected company would never see).

Representation

Granular Stakeholder Standings

Goodwill is tracked per stakeholder rather than as a single global score. Stakeholders fall into two categories:

Population-driven stakeholders are tied to regional populations and emerge from each region's interest-group composition. They are tracked per region — Labor in Chicago is a separate stakeholder from Labor in St. Louis, each with its own goodwill score, modifier list, and Clout. The UI groups them by category to keep the panel readable, but every entry stands on its own. Stakeholder categories:

  • Labor — the union-supporting fraction of each region's population.
  • The Public — the uninvolved plus locally relevant active interests in each region.
  • Company Men — populations personally loyal to a specific company (your company, a rival's, etc.) within a region.
  • Local Government — region-level political bodies, often shaped by who carries Clout in their constituency.

The full population/interest model lives in Populations.md. For the goodwill system's purposes, what matters is that the size of an interest faction in a region drives that stakeholder's local importance, and that compositions shift over time. The county-scoped instantiation of these categories — plus two new county-only types (Farmers & Landowners, Local Business) and the roll-up rule — is specified in Geographic Goodwill (County Scope).

Cross-regional abstract stakeholders are scenario-wide entities not tied to any one region's population. They are authored, not emergent:

  • National Government (and possibly state/province-level government layers).
  • Major industrial barons (named individuals).
  • Financial markets.
  • Competing railroads.

Scenarios can introduce additional stakeholders in either category as needed.

Stakeholder Clout

Each stakeholder carries a Clout value indicating how much they matter at this moment. Clout is shown as a categorical tier badge for at-a-glance reading — five tiers parallel to the goodwill score ladder:

  • Negligible
  • Minor
  • Notable
  • Major
  • Dominant

Tier labels and breakpoints are starting playtest defaults; final values come from real play.

Clout comes from a baseline plus shifts during play. The baseline depends on stakeholder type:

  • Population-driven stakeholders have an emergent baseline: the size of the relevant interest fraction in the regions where the player operates. Starting breakpoints: ≤5% Minor, 5–15% Notable, 15–30% Major, 30%+ Dominant (below 1% Negligible). Cross-region Clout rolls up from regional presence.
  • Cross-regional abstract stakeholders have an authored baseline set per scenario by the scenario script. A Civil War-era scenario weights the federal Government heavily; a Penn Central-style collapse weights Financial Markets above almost everything else.

In both cases, Clout is dynamic — it shifts during play through three mechanisms:

  1. Population shifts (population-driven stakeholders). Population composition changes in response to events and player decisions, and Clout follows directly. Supporting local unions grows the union-supporter fraction; firing on strikers radicalizes the uninvolved into union supporters; both push Labor Clout up. See Populations.md.
  2. Scripted events (primarily abstract stakeholders). Scenario events explicitly mutate Clout. "Onset of war: Government Clout → Dominant for the duration." "Financial Panic of 1893 fires: Financial Markets Clout → Dominant for 18 months."
  3. Natural gameplay shifts (primarily abstract stakeholders). Player actions carry Clout-shift consequences the same way they carry goodwill-modifier consequences. Issuing major bonds raises Financial Markets Clout (the company is now entangled with capital markets). Signing a government mail contract raises Government Clout. Hostile equity moves against an industrial baron raise Industrial Barons Clout. These shifts are itemized, stackable, scale with the magnitude of the action (a $5M bond moves Clout more than a $100k one), and decay using the same buckets as goodwill modifiers — typically remaining in force while the underlying entanglement (outstanding bonds, active contracts, current stakes) is in force, and fading once it ends.

Clout-shift magnitudes are authored as a hybrid: global defaults plus per-scenario overrides. A default table covers most scenarios; era-specific or unusual scenarios override individual entries. For example, an 1830s scenario would override the default "bond issuance shifts Financial Markets Clout" entry, because in that era bonds were sold directly to local populations rather than through capital markets — the shift would land on regional Public Clout instead (see Business Dealings — Bonds).

The principle: Clout reflects who actually matters to your specific game. A bond-financed empire has high Financial Markets Clout because that is the truth of its situation; a cash-only operator's Financial Markets Clout sits low. Scenario authors set the baseline; player choices and scripted events move it from there.

Clout, in any form, does not scale modifier magnitudes or goodwill scores. A −10 hit to a high-Clout stakeholder is the same −10 it would be against a low-Clout one; what differs is how loudly the consequence reverberates through the player's experience. High-Clout stakeholder events appear more prominently in the inbox, get richer tooltip detail, and shape AI behaviors of competitors and counterparties. Whether an event stops the sim is a player setting, not a Clout effect — see Events.md.

This pattern echoes Victoria 3's interest-group model, where each interest group's Clout signals importance and Approval signals current relationship.

The Score: 0–100

Each per-stakeholder relationship is shown as a score from 0 to 100, with 0 being maximum hostility and 100 being maximum favor. The internal representation can be whatever is most efficient (modifier sum, clamped accumulator, etc.) — what the player sees is simply 0–100, displayed identically across cultures and scenarios.

The score maps to a categorical tier for at-a-glance reading:

  • 0–19: Reviled
  • 20–39: Distrusted
  • 40–59: Neutral
  • 60–79: Respected
  • 80–100: Revered

Tier labels and breakpoints are starting playtest defaults; final tuning will come from real play.

Each stakeholder carries two of these scores — one for the player track and one for the company track. These per-stakeholder, per-track scores are the only goodwill numbers in the system; there are no aggregates. Mechanical gating, contract pricing, procurement terms, and event triggers all key off the relevant per-stakeholder, per-track score directly.

Itemized Modifiers

Each per-stakeholder score is the sum of itemized modifiers — discrete entries with a magnitude, a label, and a decay declaration. Modifiers declare decay using one of a small standardized set of buckets:

  • Minor — fades quickly. Starting rate: 5 points per in-game year. Used for everyday operational events that should not haunt the company long-term.
  • Moderate — fades steadily. Starting rate: 2 points per year. The middle bucket for routine reputational events.
  • Major — fades slowly. Starting rate: 1 point per year. For consequential events that shape the next several years of play.
  • Sticky / permanent — does not decay. Used for the most consequential outcomes. Whether a sticky modifier can later be cleared by a repair action depends on the modifier's repair affordance — a sticky modifier may be repair-clearable, or it may be flagged permanent and never clearable.

The bucket count and names are stable; the specific rate numbers are starting playtest defaults and are tunable in one place.

Examples:

  • Cost overrun on local depot: −3 with Public (this region), minor (5/yr).
  • Mail Contract Honored: +10 with National Government, moderate (2/yr).
  • Bond Issue Repaid in Full: +15 with Financial Markets, major (1/yr).
  • Pullman Strike, 1894: −25 with Labor, major (1/yr).
  • Default of 1873: −40 with Financial Markets, sticky/permanent, flagged permanent.

Some modifiers fade naturally; others are sticky and only clear through specific repair actions (construction projects targeted at the cause, settlements, public works, scenario-scripted resolutions).

What the Player Sees

The reputation panel is a list of stakeholders, each row showing:

  • The stakeholder's name and Clout tier badge (Negligible / Minor / Notable / Major / Dominant).
  • Their player goodwill score (0–100) and tier.
  • Their company goodwill score (0–100) and tier.

There is no aggregate top-line number. The player reads the list directly, and each stakeholder is a first-class entry — not summed away into an average that hides the bad ones.

The interaction model follows the Victoria 3 pattern: at-a-glance from the row itself, deeper detail on hover, full causal legibility on click.

  • Mouseover a Clout badge — tooltip showing the source of that Clout. For population-driven stakeholders: the relevant interest fraction (e.g., "Labor: 18% of population — Notable") plus the regional breakdown summary. For abstract stakeholders: the scenario-set Clout and any active triggers that could shift it.
  • Mouseover a goodwill score — tooltip showing the score (0–100), its tier, and the top contributing modifiers ("+10 Mail Contract Honored, decays in 4 years; −25 Pullman Strike, decays in 11 years; +15 Bond Issue Repaid in Full, decays in 8 years; …"), with a "see all" affordance.
  • Click into a stakeholder's row — opens the full stakeholder panel. The full goodwill score is shown with all itemized modifiers for both player and company tracks, listed with magnitudes, decay buckets, and remaining duration. Population-driven stakeholders also expose their full population breakdown chart. Available repair affordances and decision options are listed for each modifier where applicable.

Before any decision that triggers goodwill effects, the consequences are labeled up-front on the decision prompt itself ("Approving this: −10 Labor for 5 years, +5 Industrialists permanently"). No hidden gotchas.

Information Lag

Visibility into goodwill standings is itself filtered by the information-and-communication system. A score the player reads for a distant region or stakeholder may be weeks out of date in the postal era and only minutes-to-hours fresh in the telegraph era. Once information is in hand, it is fully transparent — every line item visible — but the as-of date on that information matters, especially before acting on it.


Geographic Goodwill (County Scope)

The Representation model establishes that population-driven stakeholders are tracked per region. This section makes that concrete at the county level — the lowest geographic scope at which a goodwill standing is stored — and wires it into the feasibility verdict. It is an extension of the existing stakeholder model, not a replacement: the four global stakeholders the live engine ships with (Public, Labor, Government, Financial Markets) stay; two of them gain a county-scoped instantiation, and two new county-scoped types are added.

County Is the Goodwill Anchor

Geographic goodwill is held at the county node, per stakeholder type. Settlements do not each carry their own standing score. A settlement-scoped action (a depot sited in a town, a town bypassed) applies its modifier up to the parent county's standing — that is the "settlement → county" direction. The county is the atomic store; there is nothing below it to sum.

This is deliberate and structural. Geographic goodwill does not ride the population roll-up path (RegionHierarchy.RollUp, which sums leaves only and migrates a metric off a county once it gains a settlement child). Goodwill is a bounded standing score (0–100), not an additive metric — a county keeps its standing regardless of how many settlement nodes it has, so there is no leaf-migration and no double-count risk. County → region → state aggregation is a separate, weighted read (below), not a leaf-sum.

County Stakeholder Set

Per county, four stakeholder types are tracked (each carrying the standard player and company tracks and itemized modifiers):

County stakeholder Relationship to the global four Period grounding (1920s Michigan)
County Board County-scoped instantiation of the Local Government category; rolls up to the global Government node County Board of Supervisors — the era's county governing body. Local-consent layer: road-crossing consent, franchises, bridge/drain cooperation, tax treatment.
Farmers & Landowners New county-scoped population-driven category The people whose land the right-of-way crosses and who ship farm produce. Their organized voice (Grange / Farm Bureau) is the state-level body they roll up to. Sets the price and smoothness of land acquisition.
Local Business New county-scoped population-driven category (a commercial refinement distinct from the general Public) Board of Trade / Chamber of Commerce, merchants, mill and elevator operators, dominant employers. Boosters when served, blockers when bypassed.
County Public County-scoped instantiation of the global Public; the local press is folded in as an amplifier on this track, not a separate stakeholder General county sentiment plus the county-seat/town newspapers that amplify whatever they cover.

Out of scope for the verdict, but riding the same county machinery for consistency: the global Labor stakeholder is also slated to instantiate per county under this model, but its primary effect is on labor sourcing and project execution, not on the feasibility approval path. The global Financial Markets stakeholder stays cross-regional (it does not decompose to county). The global Government node represents the higher regulatory authority (state MPUC / federal ICC); a scenario may split it into separate state and federal nodes, but the model only requires that county standings roll up to feed it.

Roll-Up Rule (County → Region → State)

County standings aggregate upward by a population-weighted mean, computed per stakeholder type, never an additive sum:

region_standing(type)  =  Σ_counties( county_population × county_standing(type) )
                          ─────────────────────────────────────────────────────
                                   Σ_counties( county_population )

State standing is the same weighted mean across all counties in the state — and is the value the state-level globals (Government, and the agrarian Grange/Farm Bureau body that Farmers & Landowners roll up to) read for their influence. Because each input is a bounded 0–100 score, the weighted mean stays in 0–100. A hostile populous county drags the regional/state read further than a hostile sparse one (a big county's opposition carries more weight at the higher hearing — the historical channel). The weight (county population) is the area-layer county population field; Clout-weighting is an equivalent authoring option, but population-weighting is the default.

Player Personal Standing as a Weighted Input

The player character's personal standing is weighted into county goodwill — it is one of the inputs to the county standing, not a separate gate bolted on top. Who the player is personally moves how a county receives them, alongside how the company is regarded. This keeps Pillar 2 — reputation always matters honest at the local scale.

This rides the bounded weighted-mean mechanism (the Roll-Up Rule above), not the additive leaf RollUp. County goodwill stays a bounded standing (Neutral = 50, 0–100, per County Is the Goodwill Anchor); the player's personal standing enters as a weighted input term and the result stays in 0–100. It does not sum into the county like an additive modifier, and it does not pass through RegionHierarchy.RollUp (reserved for additive leaf metrics). The two mechanisms stay separate — this is a blend, not a sum.

Concretely, the standing the verdict consumes is a second-stage blend that folds the player personal-standing term in alongside the four-stakeholder company-track blend (G_county). Call it G_verdict. It is a bounded convex combination:

G_verdict = (1 − w_player) · G_county  +  w_player · PlayerStanding
  • G_county is the four-stakeholder company-track blend defined in Gating the Feasibility Path (0–100).
  • PlayerStanding is the player character's personal standing (0–100), read through the seam below.
  • w_player is the player term's relative weight, a scenario-tunable default of 0.20 authored to JSON (per Seed Defaults, key county.playerWeight).

Because both inputs are bounded 0–100 and 0 ≤ w_player ≤ 1, G_verdict stays in 0–100 — it is a blend, never an additive sum, and never passes through RegionHierarchy.RollUp. At the default w_player = 0.20 the company-track blend remains the dominant local signal (the institution is what builds the railroad; Pillar 3), while the player's personal reputation is a real, minority input that always moves the result (Pillar 2). G_verdict — not bare G_county — is the standing the verdict, approval odds, and permitting cost read (see ProjectManagement — The Verdict and Approval Model); land cost is the one exception — it stays keyed to the raw Farmers & Landowners standing, because the right-of-way price is a property-owner negotiation, not the civic-approval channel the player term rides.

Deferred dependency — M14_C C-6 fills the seam. The full player-character personal-goodwill entity does not land until M14_C C-6. Phase F reads PlayerStanding through a single input slot — the seam — and that slot is an explicit constant Neutral = 50 until C-6 lands. There is no real player-character entity to read today, so the interim proxy is not an existing stakeholder score (it is deliberately not wired to the global Public track or any other live value, which would couple the verdict to an unrelated standing); it is the bare scale-midpoint constant. The weighting logic reads the slot; it never reaches past it. When C-6 lands the real player-character entity, it slots into that input without re-architecting Phase F's weighting: the formula, w_player, and the 0–100 bounds are unchanged — only the source feeding the slot changes from the constant-50 proxy to the real entity. (Consequence game-dev must account for in the seed: with the proxy pinned at 50, G_verdict is compressed toward 50 — its achievable range over G_county ∈ [0,100] is [10, 90] at w_player = 0.20. The test seeds below are authored so the hostile and friendly counties clear their thresholds after this compression, not before it.)

What Moves County Goodwill

County standings move through the same three channels as every other goodwill track — project outcomes, business conduct, and scripted/emergent events — and through repair actions. The movers below are grounded in the period research; magnitudes are starting playtest defaults, scenario-tunable, authored to JSON:

Lever County stakeholder(s) moved Dir. Suggested bucket Channel
Depot/station sited in the county Local Business ↑↑, County Public ↑, County Board ↑ up Major Project outcome
Serving previously unserved (rural-feeder) territory County Board ↑, Local Business ↑ up Major Project outcome
Honest land acquisition (fair price, crossings, drainage) Farmers & Landowners ↑ up Moderate Project outcome
Grade-crossing safety (gates/flashers) County Board ↑, County Public ↑ up Moderate Operational / event
Local employment (depot, section gang, yard) County Public ↑, County Board ↑ up Minor–Moderate Operational
Fair, non-discriminatory freight rates Farmers & Landowners ↑, Local Business ↑ up Moderate Business conduct
Reliable car supply at harvest Farmers & Landowners ↑ up Minor Business conduct
Bypassing the county seat / a booster town Local Business ↓↓, County Board ↓, County Public ↓ down Major Project outcome
Service abandonment / depot downgrade County Public ↓, Local Business ↓, County Board ↓ down Major (abandonment may be Sticky) Event / business conduct
Grade-crossing accident (fatality) County Public ↓ (press flashpoint), County Board ↓ down Major Event
Eminent-domain / right-of-way abuse Farmers & Landowners ↓ down Major Project outcome
Rate discrimination (favoring big shippers / a rival town) Farmers & Landowners ↓, Local Business ↓ down Moderate–Major Business conduct
Watering / over-capitalization scandal Farmers & Landowners ↓, County Public ↓, + global Financial Markets ↓ down Major (may be Sticky) Event
Crossing / right-of-way disputes County Board ↓ down Moderate Project outcome / event

The local press is not its own stakeholder — it is a multiplier folded into County Public events: a press-amplified incident (a crossing death, a scandal) lands a larger County Public modifier than the same event uncovered. (Per the period research, the press "effectively a modifier on other stakeholders.")

Gating the Feasibility Path

County goodwill drives the feasibility verdict. The full verdict/permitting/approval-odds specification lives in ProjectManagement; the goodwill-side contract is:

The verdict reads the company track of the target county's four stakeholders, blended into a single county standing the verdict consumes:

G_county = 0.40·CountyBoard + 0.25·LocalBusiness + 0.20·FarmersLandowners + 0.15·CountyPublic

The County Board carries the most weight because it is the local-consent layer and the body that championed or obstructed a project before the higher (state/federal) authority. Land cost is keyed specifically to the Farmers & Landowners standing (they set the right-of-way price), not the blended G_county. Weights are scenario-tunable defaults.

Design call — where approval legally sits (labeled abstraction). Historically the build/extend certificate was federal (ICC, Transportation Act of 1920), with the state (MPUC) over intrastate rates/service/grade-crossings and local boards holding consent/land/tax leverage but not issuing the construction permit. This model takes the period-honest influence path, not a literal county permit: county goodwill gates (a) land-acquisition cost and permitting/civic cost through the local-consent layer the county genuinely controlled, and (b) the weight of community support/opposition the higher authority hears — which the model lets rise to a binding "no" when opposition is organized enough (a hostile county defeats the certificate at the hearing). The verdict is presented county-first (the player reads the target county's feasibility) for legibility; that presentation — treating the county standing as the effective gate — is the deliberate, labeled abstraction. The binding certificate remains a higher-authority node the county standing rolls up to; the game does not pretend a county issues a construction permit.

Why this call (pillars): Pillar 3 — the world is a constellation of named entities is the tie-breaker between the two period-honest options. A pure "it all funnels to one opaque federal verdict" would aggregate the player's local standing into a single faceless gate — exactly the opaque-mass red flag Pillar 3 forbids. Keeping the county and its named stakeholder types as the legible, first-class entities the player reads and acts on honors Pillar 3, while the influence-not-permit mechanism keeps it period-honest. Pillar 2 — reputation always matters is satisfied by making the verdict goodwill-gated, not money-gated. Pillar 7 is honored by tracking standing at county granularity. The rejected option (a county literally issuing the construction certificate) is both an anachronism and less legible than the named-stakeholder read, so it loses on both grounds.

Seed Defaults: JSON Shape and Location

All goodwill seed values are authored to JSON, never hardcoded in C# (per the project's data-architecture rule). This is the home for both the cross-regional global stakeholders and the county seeds, lifted into one file so game-dev authors them in a single consistent pass.

File: data/scenarios/<scenarioId>/goodwill.json (for the full-state seed, scenarioId = michigan_1920s); game-dev owns the load wiring. This supersedes the earlier countyGoodwill.json name — the file now carries the globals too, so it is named goodwill.json. Shape:

{
  "globalStakeholders": [
    { "id": "Public",           "displayName": "Public" },
    { "id": "Labor",            "displayName": "Labor" },
    { "id": "Government",       "displayName": "Government" },
    { "id": "FinancialMarkets", "displayName": "Financial Markets" }
  ],
  "county": {
    "playerWeight": 0.20,
    "defaults": {
      "countyBoard": 50,
      "farmersLandowners": 50,
      "localBusiness": 50,
      "countyPublic": 50
    },
    "counties": {
      "lenawee": { "countyBoard": 15, "farmersLandowners": 8,  "localBusiness": 14, "countyPublic": 20 },
      "huron":   { "countyBoard": 70, "farmersLandowners": 78, "localBusiness": 72, "countyPublic": 65 }
    }
  }
}

globalStakeholders (lifts the hardcoded globals). The four global stakeholders the live engine constructs as a C# literal at GameSession's GoodwillService wiring — ("Public","Public"), ("Labor","Labor"), ("Government","Government"), ("FinancialMarkets","Financial Markets") — move here verbatim, closing the no-baked-data violation flagged in Phase C. Each entry is an { id, displayName } pair; an optional seed (starting score, default 50) supports scenario divergence without code change. This is an extension, not a replacement (Geographic Goodwill): the global set is unchanged in content; only its authoring home moves from C# to JSON. The global stakeholders stay cross-regional and do not decompose to county — the county block is the separate county-scoped layer, so the two never collide.

county.playerWeight is w_player from Player Personal Standing as a Weighted Input (default 0.20). The verdict thresholds it pairs with (HostileThreshold, the odds band breakpoints, the permit-multiplier band) are feasibility tunables and live with the rest of the study economics (economy.json feasibilityStudy block); game-dev owns that exact placement.

Defaulting rule (so the county block stays sparse — author only what diverges from neutral):

  1. A county absent from counties → all four stakeholders take the defaults value.
  2. A stakeholder omitted within a listed county → that stakeholder takes the defaults value.
  3. A type omitted from defaults, or the whole file absent → Neutral = 50 (the midpoint of the score ladder; a scale property, the only permissible code constant).

Seed scores are authored per track if the scenario needs player/company divergence at start; the default seed sets both tracks equal.

Authored test counties (Phase F end-to-end assertion targets)

Two counties are authored away from neutral to give Phase F a concrete hostile → not-feasible and friendly → feasible target. Per-stakeholder values are the historian's period archetypes turned into numbers; G_county and G_verdict are computed below so game-dev asserts exact targets. Both are real LP counties in the seed (lenawee, huron).

HOSTILE — lenawee (historian archetype H1: rail-saturated southern-LP farm county; a new entrant offers little and threatens much):

Stakeholder Value Period rationale
Farmers & Landowners 8 Lowest — Granger/Farm-Bureau anti-corporate teeth, discriminatory short-haul-rate memory, eminent-domain and grade-crossing hostility.
Local Business 14 Merchants/elevators aligned with the incumbent road; a competitor is disruption, not opportunity.
County Board 15 No upside (county already has rail); wary of franchise/tax concessions and of antagonizing the incumbent.
County Public 20 Weakly motivated; nuisance concerns but not the driver.
G_county  = 0.40·15 + 0.25·14 + 0.20·8 + 0.15·20  =  6.00 + 3.50 + 1.60 + 3.00  =  14.10
G_verdict = 0.80·14.10 + 0.20·50               =  11.28 + 10.00              =  21.28  (≈ 21.3)

G_verdict 21.3 < HostileThreshold 25Not feasible. Resolves the historian's open flag: Farmers alone cannot drive the county under the threshold — at 0.20 weight, even Farmers = 0 with the other three at neutral 50 yields G_county = 40, far above hostile. The roll-up is a weighted mean, so a sub-25 verdict requires multiple depressed stakeholders, which the H1 archetype already supplies (Board, Local Business, and Public all low alongside the lowest Farmers).

FRIENDLY — huron (historian archetype F1: isolated thumb agricultural county wanting market access — potatoes, dry beans, sugar beets, dairy wagon-hauled to a distant railhead):

Stakeholder Value Period rationale
Farmers & Landowners 78 Highest driver — direct market access, higher farmgate prices, perishables shipped before spoilage, right-of-way land that appreciates.
Local Business 72 A depot makes the town a shipping point; merchants want freight both directions.
County Board 70 Tax base and town growth; happy to grant the franchise.
County Public 65 Jobs, mobility, mail, connection to the outside world.
G_county  = 0.40·70 + 0.25·72 + 0.20·78 + 0.15·65  =  28.00 + 18.00 + 15.60 + 9.75  =  71.35
G_verdict = 0.80·71.35 + 0.20·50                 =  57.08 + 10.00               =  67.08  (≈ 67.1)

G_verdict 67.1 ≥ 25Feasible; approval odds clamp01((67.1−25)/35) = 1.0 → band Clear (≥60).

Neutral baseline (every unlisted county): G_county = 50, G_verdict = 0.80·50 + 0.20·50 = 50.0 → Feasible; odds clamp01((50−25)/35) = 0.714 → band Likely (40–60). A neutral county builds, but not as a clean lock.

Acceptance Criteria (Phase F asserts)

  • Extension, not replacement: the four global stakeholders still exist after the county model loads (now authored in goodwill.jsonglobalStakeholders, not a C# literal); County Board / Farmers & Landowners / Local Business / County Public exist per county (83) in addition.
  • County is the anchor: a settlement-scoped goodwill event mutates its parent county's standing; no settlement carries an independent score; geographic goodwill does not pass through RegionHierarchy.RollUp.
  • Roll-up: region_standing(type) equals the population-weighted mean of member-county standings; a hostile populous county moves the state read more than a hostile sparse one; the result stays in 0–100.
  • Defaulting: an unlisted county loads all four at the defaults value; a partially-listed county loads listed types as authored and the rest at defaults; an absent file loads every county at Neutral (50).
  • Verdict linkage: G_county is the documented weighted blend of the target county's company-track standings; G_verdict is the player-blended standing the verdict actually consumes; the feasibility verdict criteria hold against G_verdict.
  • Player standing weighted in: the standing the verdict consumes is G_verdict = (1 − w_player)·G_county + w_player·PlayerStanding with default w_player = 0.20 (authored as county.playerWeight) — a bounded convex blend (not an additive sum, not via RollUp); the result stays in 0–100. Phase F reads PlayerStanding through a single input slot that is a constant 50 until the M14_C C-6 player-character entity lands; swapping the proxy for C-6 changes only the slot's source, not the formula, w_player, or the bounds. Asserted concretely: lenaweeG_county 14.1, G_verdict 21.3 → Not feasible; huronG_county 71.35, G_verdict 67.1 → Feasible/Clear; a neutral county → G_verdict 50 → Feasible/Likely.
  • No hardcoded seeds: all seed values resolve from JSON — both the globalStakeholders definitions and the county seeds load from goodwill.json; the only code constant is the Neutral=50 fallback (and the C-6-seam player-standing proxy, which is that same scale midpoint).

Repair Actions

Goodwill modifiers don't only fade through decay. The player can take deliberate action to repair specific damage. Repair flows through two channels.

Channel 1: Event-Driven Choices

When a discrete incident affects the company (a strike, an accident, a scandal, a regulatory hearing, a pending settlement offer), the game surfaces it in the inbox as an event with a small choice set — typically 1 to 4 named options. Each option's consequences are modeled into the game systems and labeled up-front:

  • Cash costs — settlement payouts, fines, legal fees.
  • Goodwill changes — one option may restore Labor goodwill at the cost of Industrialist goodwill; another may avoid the cash hit but leave a sticky modifier in place.
  • Operational consequences — loss of revenue from a closure, boycott, or service suspension.
  • Direct modifier mutations — clearing or attenuating a specific named modifier; adding a new sticky one.

The player picks one. The chosen consequences land. This channel covers ad-hoc repair (settlements, public apologies, executive replacements), scripted-event branches (responding to a strike, choosing a stance in a regulatory hearing), and crisis decisions where the player is reacting rather than planning.

Channel 2: Ongoing Maintenance Levers

Some things are not one-time repairs — they are ongoing operating items that the company keeps doing because of its size and infrastructure footprint. Track maintenance, equipment maintenance, safety inspections, customer-service operations, labor relations spend, and similar overheads fall here.

Each maintenance item is a lever the player can adjust:

  • Default funded: pays the recurring operating cost; no penalty accrues.
  • Suspended or underfunded: saves cash now, but accumulates a stacking debuff for as long as the lever is off. The debuff grows over time the longer the neglect persists.
  • Reinstated: stops the debuff from growing, and the existing debuff begins gradual self-healing — fading on its own as the maintenance regime catches the network back up.

Example: suspending track maintenance produces a stacking debuff to throughput on the affected corridor. The longer it's off, the worse throughput gets and the more incidents (accidents, derailments) become likely — which themselves are events that trigger Channel 1 choices, and which damage goodwill. Reinstating maintenance halts the bleeding and the corridor gradually returns to full health.

Maintenance levers are primarily operational — they affect throughput, accident rates, breakdown frequency — but they feed back into goodwill indirectly. A neglected railroad accumulating accidents and service failures will see goodwill drift downward across multiple stakeholder groups regardless of any single discrete event.

The operational mechanics of maintenance levers (categories, debuff stacking, self-heal rates) live in Operations and Maintenance.

Modifier-Level Repair Affordances

Each modifier in the system declares its repair affordances at authoring time:

  • Auto-decay only — the modifier fades on its own at its declared rate; no explicit repair available.
  • Repair-clearable — the modifier names specific repair triggers (event choices, completed projects, sustained maintenance) that clear it or accelerate its decay.
  • Permanent — the modifier never decays and cannot be repaired. Reserved for the most consequential outcomes (a bond default, a fatal disaster covered up).

This per-modifier authoring keeps repair affordances flexible without requiring a new global rule for every category.


Carryover Across Scenarios

How goodwill persists across scenario boundaries depends on the game mode the scenario is being played in (see GDD — Setting and Scenarios):

  • Campaign mode — a scripted storyline of multiple scenarios played in sequence. Buffs and penalties carry from one scenario to the next based on whether the player succeeded or failed at specific goals in prior scenarios. The carry is fully scripted by the campaign author: each downstream scenario declares which prior-scenario goal outcomes apply which modifiers at its start. (E.g., "Won the Erie War as the aggressor → start the next scenario with +20 with Industrialists, −15 with Labor.")
  • Standalone mode — a single self-contained scenario played in isolation. Starting goodwill is scripted by the scenario itself; no state carries in from anywhere because there is nowhere to carry from.
  • Free Scenario mode — open-ended single-scenario play with player-chosen starting parameters. Starting goodwill is set by the player's trait selections at setup, with scenario-defined ranges or defaults; no carryover, since it is just the one scenario.

The defining principle: carryover is always explicit and authored, never automatic. Campaign authors get full control over the narrative shape of progression, and we avoid the failure mode where a downstream scenario starts under a wall of decade-old, no-longer-relevant modifiers from upstream play.

Carryover modifiers themselves are normal goodwill modifiers. They appear in the relevant stakeholder's modifier list at scenario start alongside any seed modifiers the new scenario adds, and they follow the same decay/repair rules as any other modifier — sticky if authored sticky, decaying if authored decaying, repair-clearable if authored that way.


Open Questions

All major goodwill design questions are currently resolved. Remaining tuning and authoring details are scattered across other docs (Events, Populations, Business Dealings) where they more naturally live.