Reference: Formulas
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 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 penalty.
| Component | Range | Formula |
|---|---|---|
| (state) | 0 to 25 | `max(0, 25 − ( |
| Alignment (party) | 0 to 15 | `max(0, 15 − ( |
| 0 to 35 | (favorability / 100) × 35 | |
| 0 to 25 | normalizeNPI(politicalInfluence) × 25 (*) |
- Alignment splits into two: 25 pts on the state's cached economic/social , 15 pts on party platform.
- When the state has no cached lean, scoring falls back to a single 40-pt party-only alignment:
max(0, 40 − (|econDiff_party| + |socialDiff_party|) × 2.0). - Final score = raw ×
(1 − 0.05 × min(100, max(0, infamy))/100), a 5% reduction at infamy=100.
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 |
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:
- No state-position alignment: presidential primaries are national, only the party platform matters.
- Alignment stays dominant at 40 pts, so parties still favor candidates who agree with them.
- Favorability is worth 25 points, high enough to matter but never enough on its own to outweigh alignment.
- Party influence and national reach split the rest (20 and 15 pts), with party influence still outranking raw reach.
- NPI normalization curve is different: uses a diminishing-returns curve
1 − exp(−NPI/45)(normalizeNationalReachPresidentialPrimary), not the sqrt curve that state PI uses. The diminishing shape keeps favorability and reach meaningful against a moderate NPI gap.
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)
- Campaign season = election active with
endTimewithin 4 hours (4 turns) - Cap: ±20 percentage points turnout modifier
- Decay: 2% of current value per turn toward zero
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, seeded registration baseline, candidate Support, campaign presence, NPP and regime multipliers, and race-specific coattails where configured.
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
(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 | Modifier remaining |
|---|---|
| 0 | 100% |
| 4 | ~92% |
| 10 | ~82% |
| 20 | ~67% |
Related
- Reference: Turn Order: phase execution order.
- Election Mechanics: full election structure and vote accumulation.
- Primaries: declaration rules and NPP dynamics.
- Canvassing: turnout boost formula in detail.
- Campaign Strategy: upgrade tables and action allocation.