A House Divided A House DividedDocumentation
↵
Changelog
Player Wiki/Advanced

Reference: Formulas

Last updated 2026-09-24

Complete formula reference for A House Divided. All values are sourced directly from game code. Formulas marked with (*) use diminishing-return normalization curves: see the NPI normalization section below.


Primary score formulas#

State-level primary score#

Used for: US House, US Senate, US Governor, US State Senate, UK Commons, UK Regional Council, DE Bundestag, JP Shūgiin, JP Sangiin.

Maximum: 100 points (raw), then multiplied by an infamy penalty. The score is a candidate's standing: each turn of the primary's closing window it sets their share of the ballots the party's registered voters cast, and the cumulative ballot count decides the nominee. Only where a party has no registered voters on file does the raw score decide directly.

Component Range Formula
Alignment (state) 0 to 25 `max(0, 25 − (
Alignment (party) 0 to 15 `max(0, 15 − (
Favorability 0 to 35 (favorability / 100) × 35
Political Influence 0 to 25 normalizeNPI(politicalInfluence) × 25 (*)

Quick alignment reference (state-vs-state-lean OR state-vs-party):

Manhattan distance State alignment (0 to 25) Party alignment (0 to 15) Fallback (0 to 40)
0 25 15 40
2 22.5 13.5 36
5 18.75 11.25 30
10 12.5 7.5 20
20 0 0 0

NPP primary score penalty: When at least one player is in the same party's primary, all NPP candidates in that primary receive a ×0.5 multiplier on their total score. An NPP with a raw score of 70 competes at an effective 35 against you. NPPs aren't subject to the infamy penalty.


Presidential primary score#

Used for: US President only.

Maximum: 100 points

Component Range Formula
Alignment (party only) 0 to 40 `max(0, 40 − (
Party Influence 0 to 20 normalizePartyInfluencePresidentialPrimary(partyInfluence) × 20 (reference scale: partyInfluence 150)
National Reach 0 to 15 normalizeNationalReachPresidentialPrimary(NPI) × 15 (*)
Favorability 0 to 25 (favorability / 100) × 25

Same infamy penalty applies on the final score. Key differences from the state formula:


Canvassing formula#

Cost: ₳100 + 1 action. Home state / region only.

baseBoost        = 0.05 (percentage points)
distance         = |charEcon − demoEcon| + |charSocial − demoSocial|
alignmentMult    = max(0.1, 1.0 − distance × 0.15)
seasonMult       = isCampaignSeason ? 2.0 : 1.0
rawBoost         = baseBoost × alignmentMult × seasonMult
adjustedBoost    = rawBoost × (1 − |currentModifier| / 20)   // diminishing returns
newModifier      = clamp(currentModifier + adjustedBoost, −20, +20)

Alignment multiplier table:

Manhattan distance Alignment multiplier
0 1.0 ×
3 0.55 ×
5 0.25 ×
6.6+ 0.1 × (floor)

Campaign ops trees#

Fundraising, Ground Game, Media Spending, and Opposition Research are each a branch tree on the campaign page (/campaign/[id]), not a flat level ladder. Each tree unlocks a starter node, then up to three further branches (for example Media Spending's Broadcast and Television branches, Opposition Research's Dossier, Scandal Leak, and Counter-Intel). Branch magnitudes stack with the starter and with each other. Maintenance is deducted from campaign funds each turn; branches that can't be covered auto-downgrade rather than collapsing the whole tree, with no refund.

Full per-tree cost and effect tables, current to the live constants: Campaign Strategy and Campaign Manager.

Campaign season multiplier: All campaign passive effects (Media Spending, Opposition Research, Travel Presence, Primary Campaign bonus) double during the final 4 turns of an election.


Vote accumulation (general elections)#

Per-turn vote pool weighting#

Early band:
  turnPool = 0.50 × totalPool / earlyTurnCount

Ramp band (up to 8 turns before the final band):
  turnPool = 0.20 × totalPool / rampTurnCount

Final 4 turns:
  turnPool = 0.30 × totalPool / 4

The final 4 turns collectively deliver 30% of all votes cast in an election. Races of 4 turns or fewer split the pool evenly.

Total appeal pipeline (per demographic group, per candidate, per turn)#

reach         = normalizeNPI(influence)         // sqrt curve, capped at 1.0 when PI/NPI reaches 100
positionRaw   = max(0, 50 − |econDiff|×5 − |socialDiff|×5)
positionScore = 25 × (positionRaw / 50)^1.5 + 0.5
direction     = up to 5 per aligned ideological axis
influenceAppeal = includeInfluence ? normalizeNPI(influence) × 12.5 : 0
appeal        = positionScore + direction + influenceAppeal
effectiveFav  = clamp(favorability + groupApproval × 0.5, 0, 100)
approval      = (effectiveFav / 100)^0.8
orgShare      = statePartyOrg / sum(all party Org in the state)
partyOrg      = orgShare^0.2
personalFloor = 0.1 × reach × approval
effectiveOrg  = max(partyOrg, personalFloor)
infamyMult    = 1 − 0.05 × (min(100, max(0, infamy))/100)
weight        = appeal × reach × approval × effectiveOrg × infamyMult × other configured general-election factors

State races use influence for reach but not influenceAppeal; presidential generals include it. Directional bonuses are continuous around the center and may be suppressed when a leaning candidate points against their party on that axis. General-election factors also include registration resistance, the UK current-registration baseline, candidate Support, campaign presence, NPP and regime multipliers, and race-specific coattails where configured.

Tenure erosion. Both influence and favorability are scaled down before they enter the lines above, once the seat has been held for more than one consecutive term. Each term beyond the first costs 3% of both, stopping at 15%, so a long-serving officeholder still carries 85% of their reach and approval into the race at worst. A first-term holder, an open seat and a fresh nominee are all untouched. This is separate from party-tenure fatigue in the National Mood channel: that one prices how a party wears a bad economy, this one prices the standing that accumulates from holding office.

Which run is counted depends on the office. Senate seats and each returning House nominee count that person's own unbroken run in the seat. The presidency counts the party's run, so the erosion follows the incumbent party's nominee whether or not they personally held the office before.

Office strength multipliers#

Office Strength weight
Governor 1.0
President 1.0
House / State Senate 0.9 / 0.85
Senate 0.8

NPI normalization (*)#

Political Influence (PI) and National Political Influence (NPI) pass through normalizing curves before use in formulas. normalizeNPI is a sqrt curve clamped to [0, 100]: meaningful spread at the high end, hard-capped at 1.0:

PI value normalizeNPI output
0 0.00
25 0.50
50 ~0.71
85 ~0.92
99 ~0.995
100 1.00 (cap)
200+ 1.00 (clamped)

normalizeNPI is used by state-level primary scoring AND by general-election reach (state and presidential).

Presidential primaries use a separate curve (normalizeNationalReachPresidentialPrimary): diminishing returns via 1 − exp(−NPI/45). NPI=25 → 0.426, NPI=55 → 0.706, NPI=80 → 0.831, NPI=100 → 0.892, NPI=200 → 0.988. Above the high end the curve continues to creep toward 1.0 but never reaches it, so the celebrity-bonus regime is naturally bounded.


Party organization scalars#

Party org (0 to 100) affects:

Effect Formula
General election vote weight (ownOrg / totalStateOrg) ^ 0.2
Personal floor max(orgWeight, 0.1 × reach × approval)
Presidential primary score Party Org does not enter; party influence and national reach are separate components

An empty state Org map gives every party a neutral 1× fallback. In a populated map, a party with 0 Org has 0 Org weight before the personal floor. A 3:1 Org lead produces about a 1.25:1 Org-weight advantage because of the 0.2 exponent.


Turnout modifier decay#

Each turn: newModifier = currentModifier × 0.98

Effect accumulates over turns:

Turns since canvassing Modifier remaining
0 100%
4 ~92%
10 ~82%
20 ~67%

Ask