Land Movement
This is my current knowledge about the formulas. 1 mile = 1.609 km
MOVETIME = DISTANCE / [SPEED] * INFRA_F * CONTROL_F * RIVER_F * OIL_F
MOVETIME = DISTANCE / [SPEED_MAX / TERRAIN_F / MODIFIER_F / ESE_F / ORG_F * MINISTER_F] * INFRA_F * CONTROL_F * RIVER_F * OIL_F
SPEED = SPEED_MAX / TERRAIN_F / MODIFIER_F / ESE_F / ORG_F * MINISTER_F >= 1 km/h (capped) equal to the speed shown in game
The minimum speed is:
Non-oil consuming: 1.0 km/h shown = 0.376 km/h effective
Oil consuming: 1.0 km/h shown = 0.125 km/h effective
For all units with a max. speed >=1.0, regardless of their max. speed
DISTANCE (Air) = (Army-X,Army-Y)-difference between start and destination province (in pixel) * 0.66 (in km)
DISTANCE (Land) = (Army-X,Army-Y)-difference between start and destination province (in pixel) * 1.24 (in km)
(Army-X,Army-Y)-difference² = (Army-X-difference)² + (Army-Y-difference)²
MOVETIME = time (hours)
SPEED_MAX = Maximum Speed (km/hour) [range: 1.5 - 20]
when Maximum Speed + Brigade Speed Bonus > speed_cap_xxx
then speed_cap_art, speed_cap_eng, speed_cap_at, speed_cap_aa are used as SPEED_MAX
INFRA_F = 1 + (100 - infra_dest) / 10 * 0.07 [range: 1.00 - 1.70]
infra_dest = current infrastructure at destination [range: 0 - 100]
TERRAIN_F = factor from "terrain types.csv" [range: 1.0 - 2.0]
MODIFIER_F = 100 / (100 + weather_dest) * 100 / (100 + terrain_dest) [range: >= 0.91]
weather_dest = MOV_BLIZZARD;SNOW;RAIN;STORM;FROZEN;MUDDY [range: -70 to -10]
terrain_dest = MOV_DESERT;MOUNTAIN;HILL;FOREST... [range: -47 to +10]
ESE_F = 100 / ESE = 100 / ((100 + infra_start) / 2 + HQ_bonus) [range: 0.926 - 2.0]
ESE = (100 + infra_start) / 2 + HQ_bonus [range: 50 - 108]
HQ_bonus = [range: 0 - 8]
ORG_F = 1.0 [org >=1] or 2.0 [org <1]
MINISTER_F = 1.0 or 1.1 [CoS - Manoeuvre]
CONTROL_F = 1.0 [controlled] or 1.25 [not controlled dest] is not shown as speed reduction in game
RIVER_F = 1.0 [no river] or 1.25 [river] or 1.33 [sea] Lübeck-Copenhagen is an example for [sea], is not shown as speed reduction in game
OIL_F = 1.0 [oil] or 3.0 [no oil] non oil consuming units don't care about a shortage
Distance in HOI2:
The map is based on a coordinate system, starting in the upper left West of the Aleutes Islands with 0,0 and ending with about 30000,11600. So moving from North to South means raising the y-values, from West to East, raising the x-value. All symbols and units are placed at certain coordinates. The computer then calculates the distance between two provinces by taking the appropriate coordinates of both and calculating their distance to each other. For LAND and AIR distance calculation the Army-X and Army-Y coordinates from ..\db\"province.csv" are used. Their distance in pixel is then multiplied by about 0.66 to get the number the tooltip shows, when you select an air unit at an air base and move the mouse over a neighbouring province. I am assuming, that land distances are not in miles, but kilometers. Also the unit speeds would then be km/hour.
Calculting the pixel distance:
You need for land and air, the ArmyX and ArmyY coordinates from province.csv.
E.g. Berlin - Newcastle(AST)
Berlin (15913,2350) - Newcastle(AST) (27774,9781) ->9249 km says the tooltip
x difference = 11861 pixel
y difference = 7431 pixel
distance² = 11861² + 7431²
distance = 13996.54 pixel
distance (km) = 13996.54 pixel * 0.66 km/pixel = 9238 km
HOI2 distance test 1:
From airbase Berlin the tooltip(t) shows
(t) - tooltip
(c) - stands for calculated via the formulas
(r) - in reality
pixel are calculated as Army-X,Army-Y-difference
Hammerfest 1325 km(t) - IRL(r) about 2000 km
Moscow 1138 km(t) - IRL(r) about 1650 km (1841 km road)
Tokio 7139 km(t) - 8930 km (r)
Cottbus 90 km(t), 163.2(c), 125 km (r), 136.780 pixel
Küstrin 104 km(t), 190.4(c) 175 km (r), 158.146 pixel
Stralsund 71 km(t), 128(c), 100 km (r), 107.201 pixel
Potsdam 47 km(t), 81.6(c), 60 km (r), 71.021 pixel
DISTANCE = MOVETIME * [SPEED] / INFRA_F / CONTROL_F / RIVER_F / OIL_F
Distance test 3:
From airbase Kuching the tooltip(t) shows
Kuching - Miri:
DISTANCE = 160 (hours) * 2.9 (km/hour) / 1.42 / 1.0 / 1.0 / 1.0 = 326.8 km
Kuching - Mahakam:
DISTANCE = 189 (hours) * 2.6 (km/hour) / 1.56 / 1.25 / 1.0 / 1.0 = 252 km
Kuching - Semitau:
DISTANCE = 200 (hours) * 2.6 (km/hour) / 1.56 / 1.25 / 1.0 / 1.0 = 266.7 km
Kuching - Pontianak:
DISTANCE = 316 (hours) * 2.9 (km/hour) / 1.42 / 1.25 / 1.0 / 1.0 = 516.3 km
Miri 176 km(t), 326.8(c), 267.152 pixel
Mahakam 133 km(t), 252(c), 202.072 pixel
Semitau 141 km(t), 266.7(c), 213.588 pixel
Pontianak 278 km(t), 516.3(c), 420.954 pixel
Dividing the pixel distance by the tooltip number gives about 1.5098 - 1.5219 for Berlin and Moscow. What is equal to 0.657 - 0.6622 as multiplicator.
Dividing the calculated distance number by the pixel number gives about 1.1975 - 1.2229 for Berlin and 1.2280 - 1.2723 for Moscow as multiplicator. For Kuching it is 1.2232 - 1.2487. For Washington 1.2277 - 1.2541. Berlin seems to be off, while Moscow, Kuching and Washington are close to each other. It can not be Infra, that makes the difference, maybe the fact that movetimes for Berlin are all very short compared to the other examples. There might be some numbers rounded downward.
Some practical examples:
Crossing a river -> Time +25%
Entering enemy territory -> Time +25%
Infra at destination is 100% -> Time +0%
Infra at destination is 90% -> Time +7%
Infra at destination is 80% -> Time +14%
Infra at destination is 70% -> Time +21%
Infra at destination is 60% -> Time +28%
Infra at destination is 50% -> Time +35%
Infra at destination is 40% -> Time +42%
Infra at destination is 30% -> Time +49%
Infra at destination is 20% -> Time +56%
Infra at destination is 10% -> Time +63%
Infra at destination is 0% -> Time +70%
Unit is out of oil -> Time +200%
The above ones can appear in combination and ALWAYS get multiplied on each other
Blizzard in the destination province -> Time +233%
Rain in the destination province -> Time +11%
Org is 0 -> Time +100%
ESE is only 50% -> Time +100%
You have a Chief of Staff with Shool of Manoeuvre trait -> Time -9%
The above ones can appear in combination, but do NOT get multiplied on each other in all cases
Historical movement rates:
1) From pmanlig: ..walk (Inf) 40 km/day, and there's an event in Nijmegen (Holland) where people keep that pace for 4 days and it's said to be quite a chore.
2) Hoth with his Pz Corps in 1941 from June 22 to June 25 made about 250 km to Molodetschno. So more than 80km/day into enemy territory.
3) Guderian on Sept 3rd 1941 made under slighly muddy conditions 75km in 5 hours.
4) 1. and 10. Pz Div had almost reached Sedan on May 13, 1940 at 1600 CET, about 100km in 3 days ->33 km/day
5) Guderians 2nd Pz div had a screening range of 420 miles in 48 hours ->338 km/day
6) 132. ID had to march from Yugoslavia (after Apr 11, 1941) to 6. Army (AG South) 800 km and arrived in July ->at least 10 km/day
I am currently using those values (exclusive below described factors):
in addition there can be
- a CoS effect of SPEED_MAX * 1.1
- ESE effect of SPEED_MAX * 1.08
- Inf in urban terrain of SPEED_MAX * 1.1
- total SPEED_MAX * 1.3068 ->under perfect conditions Inf can be 30.7% faster
Example:
Moving from 60% infra to X % infra, enemy controlled, CoS-Manoeuvre, perfect weather, plains, HQ_bonus = 4
Unit speed:
1) max. speed 5 equals 5.0 km/h [minister effect excluded]
2) When a unit is standing the mph number tells you at which speed the unit would move into a target province of the same terrain with the same infra level.
3) A leader with engineer trait does not increase unit speed.
4) A leader with panzer leader trait does not increase unit speed.
5) An engineer brigade does not help to cross a river in terms of time. It usually gives a speed bonus and so increases max. speed only for the division it is attached to everywhere.
6) My experience is: trust the ETA shown, but don't trust speed shown, when it is at 1.0 km/h.
7) The RIVER_F penalty also applies on national territory, meaning everywhere.
weather = xxx in the save game file can be:
blizzard (MOV_BLIZZARD)
raining (MOV_RAIN)
snowing (MOV_SNOW)
winter (MOV_FROZEN)
muddy (MOV_MUDDY)
storm (MOV_STORM)
So there can be a penalty on movement from:
1) Terrain of the target province from "..\db\units\modifiers.csv" and "..\map\terrain types.csv"
2) Weather in the target province
3) Infrastructure of the target province
4) ESE - infuenced by infra in the starting province
5) When current ORG of one unit in corps is <1
6) Rivers
7) When the target province is enemy controlled
8) When a unit is out of oil
Notes:
1) The discussion started here
http://www.europa-universalis.com/forum/showthread.php?t=186391&page=1&pp=25
2) The values for weather_dest and terrain_dest tells you how much slower a unit is (its speed), when moving into this kind of weather/terrain compared to plains.
3) "Muddy" instead of "temperate" in the province.csv has no direct influence on speed, it might raise the likelyhood for rain or muddy.
4) Retreat seems to be treated like movement.
Questions/BUGS:
1) I have not seen MOV_NIGHT do anything.
2) MOV_RAIN is NOT additive to MOV_MUDDY, so rain + muddy is much better than only muddy, because the MOV_RAIN value applies! Also in game there is only Muddy + Rain and never Muddy alone. But when you load a saved game, you can have muddy without rain for some time. So the bug is, that muddy only exists after a reload.
3) The air distance calculation via tooltip seems to have a far too low multiplicator to get realistic distances.
4) Apply the RIVER_F factor for rivers and sea zones ONLY on enemy territory.
Suggestions for Paradox:
1) Create the weather = muddy_raining using (MOV_MUDDY + MOV_RAIN), this condition should be the second worst state after blizzard.
2) Turn MOV_NIGHT into MOV_LANDING to adjust the speed with which naval landings are conducted.
updated with v1.2, but just a few quick tests done
This is my current knowledge about the formulas. 1 mile = 1.609 km
MOVETIME = DISTANCE / [SPEED] * INFRA_F * CONTROL_F * RIVER_F * OIL_F
MOVETIME = DISTANCE / [SPEED_MAX / TERRAIN_F / MODIFIER_F / ESE_F / ORG_F * MINISTER_F] * INFRA_F * CONTROL_F * RIVER_F * OIL_F
SPEED = SPEED_MAX / TERRAIN_F / MODIFIER_F / ESE_F / ORG_F * MINISTER_F >= 1 km/h (capped) equal to the speed shown in game
The minimum speed is:
Non-oil consuming: 1.0 km/h shown = 0.376 km/h effective
Oil consuming: 1.0 km/h shown = 0.125 km/h effective
For all units with a max. speed >=1.0, regardless of their max. speed
DISTANCE (Air) = (Army-X,Army-Y)-difference between start and destination province (in pixel) * 0.66 (in km)
DISTANCE (Land) = (Army-X,Army-Y)-difference between start and destination province (in pixel) * 1.24 (in km)
(Army-X,Army-Y)-difference² = (Army-X-difference)² + (Army-Y-difference)²
MOVETIME = time (hours)
SPEED_MAX = Maximum Speed (km/hour) [range: 1.5 - 20]
when Maximum Speed + Brigade Speed Bonus > speed_cap_xxx
then speed_cap_art, speed_cap_eng, speed_cap_at, speed_cap_aa are used as SPEED_MAX
INFRA_F = 1 + (100 - infra_dest) / 10 * 0.07 [range: 1.00 - 1.70]
infra_dest = current infrastructure at destination [range: 0 - 100]
TERRAIN_F = factor from "terrain types.csv" [range: 1.0 - 2.0]
MODIFIER_F = 100 / (100 + weather_dest) * 100 / (100 + terrain_dest) [range: >= 0.91]
weather_dest = MOV_BLIZZARD;SNOW;RAIN;STORM;FROZEN;MUDDY [range: -70 to -10]
terrain_dest = MOV_DESERT;MOUNTAIN;HILL;FOREST... [range: -47 to +10]
ESE_F = 100 / ESE = 100 / ((100 + infra_start) / 2 + HQ_bonus) [range: 0.926 - 2.0]
ESE = (100 + infra_start) / 2 + HQ_bonus [range: 50 - 108]
HQ_bonus = [range: 0 - 8]
ORG_F = 1.0 [org >=1] or 2.0 [org <1]
MINISTER_F = 1.0 or 1.1 [CoS - Manoeuvre]
CONTROL_F = 1.0 [controlled] or 1.25 [not controlled dest] is not shown as speed reduction in game
RIVER_F = 1.0 [no river] or 1.25 [river] or 1.33 [sea] Lübeck-Copenhagen is an example for [sea], is not shown as speed reduction in game
OIL_F = 1.0 [oil] or 3.0 [no oil] non oil consuming units don't care about a shortage
Distance in HOI2:
The map is based on a coordinate system, starting in the upper left West of the Aleutes Islands with 0,0 and ending with about 30000,11600. So moving from North to South means raising the y-values, from West to East, raising the x-value. All symbols and units are placed at certain coordinates. The computer then calculates the distance between two provinces by taking the appropriate coordinates of both and calculating their distance to each other. For LAND and AIR distance calculation the Army-X and Army-Y coordinates from ..\db\"province.csv" are used. Their distance in pixel is then multiplied by about 0.66 to get the number the tooltip shows, when you select an air unit at an air base and move the mouse over a neighbouring province. I am assuming, that land distances are not in miles, but kilometers. Also the unit speeds would then be km/hour.
Calculting the pixel distance:
You need for land and air, the ArmyX and ArmyY coordinates from province.csv.
E.g. Berlin - Newcastle(AST)
Berlin (15913,2350) - Newcastle(AST) (27774,9781) ->9249 km says the tooltip
x difference = 11861 pixel
y difference = 7431 pixel
distance² = 11861² + 7431²
distance = 13996.54 pixel
distance (km) = 13996.54 pixel * 0.66 km/pixel = 9238 km
HOI2 distance test 1:
From airbase Berlin the tooltip(t) shows
(t) - tooltip
(c) - stands for calculated via the formulas
(r) - in reality
pixel are calculated as Army-X,Army-Y-difference
Hammerfest 1325 km(t) - IRL(r) about 2000 km
Moscow 1138 km(t) - IRL(r) about 1650 km (1841 km road)
Tokio 7139 km(t) - 8930 km (r)
Cottbus 90 km(t), 163.2(c), 125 km (r), 136.780 pixel
Küstrin 104 km(t), 190.4(c) 175 km (r), 158.146 pixel
Stralsund 71 km(t), 128(c), 100 km (r), 107.201 pixel
Potsdam 47 km(t), 81.6(c), 60 km (r), 71.021 pixel
DISTANCE = MOVETIME * [SPEED] / INFRA_F / CONTROL_F / RIVER_F / OIL_F
Distance test 3:
From airbase Kuching the tooltip(t) shows
Kuching - Miri:
DISTANCE = 160 (hours) * 2.9 (km/hour) / 1.42 / 1.0 / 1.0 / 1.0 = 326.8 km
Kuching - Mahakam:
DISTANCE = 189 (hours) * 2.6 (km/hour) / 1.56 / 1.25 / 1.0 / 1.0 = 252 km
Kuching - Semitau:
DISTANCE = 200 (hours) * 2.6 (km/hour) / 1.56 / 1.25 / 1.0 / 1.0 = 266.7 km
Kuching - Pontianak:
DISTANCE = 316 (hours) * 2.9 (km/hour) / 1.42 / 1.25 / 1.0 / 1.0 = 516.3 km
Miri 176 km(t), 326.8(c), 267.152 pixel
Mahakam 133 km(t), 252(c), 202.072 pixel
Semitau 141 km(t), 266.7(c), 213.588 pixel
Pontianak 278 km(t), 516.3(c), 420.954 pixel
Dividing the pixel distance by the tooltip number gives about 1.5098 - 1.5219 for Berlin and Moscow. What is equal to 0.657 - 0.6622 as multiplicator.
Dividing the calculated distance number by the pixel number gives about 1.1975 - 1.2229 for Berlin and 1.2280 - 1.2723 for Moscow as multiplicator. For Kuching it is 1.2232 - 1.2487. For Washington 1.2277 - 1.2541. Berlin seems to be off, while Moscow, Kuching and Washington are close to each other. It can not be Infra, that makes the difference, maybe the fact that movetimes for Berlin are all very short compared to the other examples. There might be some numbers rounded downward.
Some practical examples:
Crossing a river -> Time +25%
Entering enemy territory -> Time +25%
Infra at destination is 100% -> Time +0%
Infra at destination is 90% -> Time +7%
Infra at destination is 80% -> Time +14%
Infra at destination is 70% -> Time +21%
Infra at destination is 60% -> Time +28%
Infra at destination is 50% -> Time +35%
Infra at destination is 40% -> Time +42%
Infra at destination is 30% -> Time +49%
Infra at destination is 20% -> Time +56%
Infra at destination is 10% -> Time +63%
Infra at destination is 0% -> Time +70%
Unit is out of oil -> Time +200%
The above ones can appear in combination and ALWAYS get multiplied on each other
Blizzard in the destination province -> Time +233%
Rain in the destination province -> Time +11%
Org is 0 -> Time +100%
ESE is only 50% -> Time +100%
You have a Chief of Staff with Shool of Manoeuvre trait -> Time -9%
The above ones can appear in combination, but do NOT get multiplied on each other in all cases
Historical movement rates:
1) From pmanlig: ..walk (Inf) 40 km/day, and there's an event in Nijmegen (Holland) where people keep that pace for 4 days and it's said to be quite a chore.
2) Hoth with his Pz Corps in 1941 from June 22 to June 25 made about 250 km to Molodetschno. So more than 80km/day into enemy territory.
3) Guderian on Sept 3rd 1941 made under slighly muddy conditions 75km in 5 hours.
4) 1. and 10. Pz Div had almost reached Sedan on May 13, 1940 at 1600 CET, about 100km in 3 days ->33 km/day
5) Guderians 2nd Pz div had a screening range of 420 miles in 48 hours ->338 km/day
6) 132. ID had to march from Yugoslavia (after Apr 11, 1941) to 6. Army (AG South) 800 km and arrived in July ->at least 10 km/day
I am currently using those values (exclusive below described factors):
Code:
Model Speed km/h km/day
Max. Min. Max. Min.
MIL-0 1.5 0.376 36.0 9.0
INF-1 1.4 0.376 33.6 9.0
MOT-2 6.0 0.125 144.0 3.0
MEC-1 7.5 0.125 180.0 3.0
ARM-3 6.5 0.125 156.0 3.0
- a CoS effect of SPEED_MAX * 1.1
- ESE effect of SPEED_MAX * 1.08
- Inf in urban terrain of SPEED_MAX * 1.1
- total SPEED_MAX * 1.3068 ->under perfect conditions Inf can be 30.7% faster
Example:
Moving from 60% infra to X % infra, enemy controlled, CoS-Manoeuvre, perfect weather, plains, HQ_bonus = 4
Code:
Speed eff.Sp. km/day infra_dest
ARM-2 13.00 (max. Speed)
12.01 9.61 230.6 100
12.01 8.98 215.5 90
12.01 8.43 202.3 80
12.01 7.94 190.6 70
12.01 7.51 180.2 60
12.01 7.12 170.8 50
12.01 6.77 162.4 40
12.01 6.45 154.8 30
12.01 6.16 147.8 20
12.01 5.90 141.5 10
12.01 5.65 135.7 0
Speed eff.Sp. km/day infra_dest
INF-1 1.60 (max. Speed)
1.48 1.18 28.4 100
1.48 1.10 26.5 90
1.48 1.04 24.9 80
1.48 0.98 23.5 70
1.48 0.92 22.2 60
1.48 0.88 21.0 50
1.48 0.83 20.0 40
1.48 0.79 19.1 30
1.48 0.76 18.2 20
1.48 0.73 17.4 10
1.48 0.70 16.7 0
Unit speed:
1) max. speed 5 equals 5.0 km/h [minister effect excluded]
2) When a unit is standing the mph number tells you at which speed the unit would move into a target province of the same terrain with the same infra level.
3) A leader with engineer trait does not increase unit speed.
4) A leader with panzer leader trait does not increase unit speed.
5) An engineer brigade does not help to cross a river in terms of time. It usually gives a speed bonus and so increases max. speed only for the division it is attached to everywhere.
6) My experience is: trust the ETA shown, but don't trust speed shown, when it is at 1.0 km/h.
7) The RIVER_F penalty also applies on national territory, meaning everywhere.
weather = xxx in the save game file can be:
blizzard (MOV_BLIZZARD)
raining (MOV_RAIN)
snowing (MOV_SNOW)
winter (MOV_FROZEN)
muddy (MOV_MUDDY)
storm (MOV_STORM)
So there can be a penalty on movement from:
1) Terrain of the target province from "..\db\units\modifiers.csv" and "..\map\terrain types.csv"
2) Weather in the target province
3) Infrastructure of the target province
4) ESE - infuenced by infra in the starting province
5) When current ORG of one unit in corps is <1
6) Rivers
7) When the target province is enemy controlled
8) When a unit is out of oil
Notes:
1) The discussion started here
http://www.europa-universalis.com/forum/showthread.php?t=186391&page=1&pp=25
2) The values for weather_dest and terrain_dest tells you how much slower a unit is (its speed), when moving into this kind of weather/terrain compared to plains.
3) "Muddy" instead of "temperate" in the province.csv has no direct influence on speed, it might raise the likelyhood for rain or muddy.
4) Retreat seems to be treated like movement.
Questions/BUGS:
1) I have not seen MOV_NIGHT do anything.
2) MOV_RAIN is NOT additive to MOV_MUDDY, so rain + muddy is much better than only muddy, because the MOV_RAIN value applies! Also in game there is only Muddy + Rain and never Muddy alone. But when you load a saved game, you can have muddy without rain for some time. So the bug is, that muddy only exists after a reload.
3) The air distance calculation via tooltip seems to have a far too low multiplicator to get realistic distances.
4) Apply the RIVER_F factor for rivers and sea zones ONLY on enemy territory.
Suggestions for Paradox:
1) Create the weather = muddy_raining using (MOV_MUDDY + MOV_RAIN), this condition should be the second worst state after blizzard.
2) Turn MOV_NIGHT into MOV_LANDING to adjust the speed with which naval landings are conducted.
updated with v1.2, but just a few quick tests done
Last edited: