Numbers
Every player-facing number in Europa Neo, exactly as shipped. When this table and the game disagree, the manual is wrong — report it as a bug. Each row names the constant it ships from.
Simulation
| Value | Shipped value | Constant |
|---|
| Tick cadence | 250 ms (4 ticks/second) | DEFAULT_TICK_INTERVAL_MS |
| City production | 1 troop/tick until saturated | ENGINE_CONSTANTS.productionRate |
| City saturation cap | 30 troops | ENGINE_CONSTANTS.cityCapacity |
| Open-cell troop cap | 30 troops | ENGINE_CONSTANTS.cellCapacity |
| Unfed decay | −1 troop/tick | ENGINE_CONSTANTS.decayPerTick |
| Pipe flow, downhill | 8–12 troops/tick per pipe (Δ=1 → 8 … Δ≥5 → 12) | ENGINE_CONSTANTS.flowBase + flowSlopeStep × min(│Δ│, flowSlopeDeltaCap) |
| Pipe flow, flat | 7 troops/tick per pipe | ENGINE_CONSTANTS.flowBase |
| Pipe flow, uphill | 6→1 troops/tick per pipe (Δ=1 → 6 … Δ=6 → 1) | max(0, ENGINE_CONSTANTS.flowBase − flowSlopeStep × │Δ│) |
| Pipe flow, stalled | 0 troops/tick (Δ≥7) | ENGINE_CONSTANTS.flowBase / flowSlopeStep (stall threshold) |
Terrain
| Value | Shipped value | Constant |
|---|
| Terrain smoothing | 4 smoothing passes (range 0–8; 0 = no smoothing) | DEFAULT_GENERATION_SETTINGS.terrainSmoothing |
Pipe slope intensity
These values control the visual triangle size on pipe slopes, not gameplay.
| Value | Shipped value | Constant |
|---|
| Intensity formula (downhill) | min(│Δ│, flowSlopeDeltaCap) / flowSlopeDeltaCap → 0–1 | PIPE_SLOPE_CONSTANTS.flowSlopeDeltaCap (5) |
| Intensity formula (uphill) | min(Δ, flowBase / flowSlopeStep) / (flowBase / flowSlopeStep) → 0–1 | PIPE_SLOPE_CONSTANTS.flowBase (7) / flowSlopeStep (1) |
| Intensity (flat / stalled / fog) | 0 (no visual intensity) | — |
| Triangle min size | max(2.4px, zoom × 0.064) at intensity=0 (40% of base) | cell-view.tsx intensity scaling |
| Triangle max size | zoom × 0.16 at intensity=1 (100% of base) | cell-view.tsx intensity scaling |
| Canvas intensity scale | (0.4 + intensity × 0.6) × base size | canvas.ts drawPipes |
Special weapons
| Value | Shipped value | Constant |
|---|
| Paratroop order cost | 20 troops removed at source | ENGINE_CONSTANTS.paratroopCost (10) × 2 |
| Paratroops landed | 10 troops at target | ENGINE_CONSTANTS.paratroopCost |
| Gun shot cost | 5 troops per shot | ENGINE_CONSTANTS.gunCost |
| Gun damage | 2 troops, everything in the target cell | ENGINE_CONSTANTS.gunDamage |
| Weapon range (both) | 2 cells max (diagonals count as 1) | SUBCELL_RANGE |
Vision
| Value | Shipped value | Constant |
|---|
| Sensor radius per stack | 4 cells (diagonals count as 1) | ENGINE_CONSTANTS.visibilityRadiusDefault |
Match lifecycle
| Value | Shipped value | Constant |
|---|
| Reconnect grace window | 60 seconds | NETWORK_CONSTANTS.defaultReconnectGraceMs |
| Board size (default by player count) | 2 players → 32×32, 3 players → 48×48, 4 players → 48×48; override to 32×32 or 48×48 (64×64 temporarily disabled — terrain issue #26) | BOARD_SIZE_DEFAULTS (2→32, 3→48, 4→48); DEFAULT_MATCH_SETTINGS.boardSize = 32 (2p backward-compat default) |
| Unstarted-match lifetime | ~5 minutes before cleanup | MATCHMAKING_CONSTANTS.emptyMatchTtlMs |
Interface
| Value | Shipped value | Constant |
|---|
| Reserves steps | 0%–90% in 10% steps (digits 0–9) | Reserve key mapping (resolveReservePercent) |
| Camera zoom bounds | 12–96 pixels per cell | DEFAULT_CAMERA.minZoom / .maxZoom |
| Default zoom | 32 pixels per cell | DEFAULT_CAMERA.zoom |
| Player 1 color | P1 Red #dc2626 | TOKENS.color.playerColor1 (@europa/design) |
| Player 2 color | P2 Blue #2563eb | TOKENS.color.playerColor2 (@europa/design) |
| Player 3 color | P3 Green #059669 | TOKENS.color.playerColor3 (@europa/design) |
| Player 4 color | P4 Orange-gold #d97706 | TOKENS.color.playerColor4 (@europa/design) |
The v1 palette is fixed — these four colors are what ships. Owner identity is never conveyed by color alone: the interface also labels players by name (falling back to their identity).
Back to contents