Voici un tutorial qui je l’espère vous permettra de comprendre les principaux mécanismes de modding de l’IA.
Le logiciel notepad est nécessaire.
Je prendrai pour référence le fichier ai/ger_1936.ai que j’ai rédigé pour le mod WIF :
Mais avant toute chose, quelques remarques générales : un fichier ai n’a pas besoin d’inclure toutes les variables existantes. La plupart ont des valeurs « par défaut ». Au chargement d’un scénario X, le jeu chargera le fichier ai TAG_X.ai à moins qu’un autre fichier soit indiqué dans les fichiers scenarios/TAG.inc.
Ex :
Au chargement du scénario 1936, le jeu charge pour l’IA allemande le fichier ai/ger_1936.ai. Mais si j’indique dans le fichier scenarios/1936/ger.inc la ligne suivante :
ai = ai/Allemagne_Spéciale.ai
alors le jeu chargera ce fichier à la place du fichier habituel.
Chaque IA majeure a donc un fichier à part entière dans le dossier ai. Les valeurs indiquées dans ce fichier sont par la suite modifiées par des « switches » activés par events. J’y reviendrai par la suite.
Commençons par le fichier ger_1936.ai :
# German 1936 AI File par FT (basé sur les valeurs de Lothos)
switch = no # [yes/no]
max_front_ratio = 1.2
max_garrison_prop = 0.30
min_garrison_prop = 0.20
neutrality = 90.000
war = 0
upgrading = 0.2 #max % of ic used on this slider.
reinforcement = 0.05 #max % of ic used on this slider.
desperation = 0.8
strat_redeploy_threshold = 20
max_redeploying = 0.05
exp_force_ratio = 0.0
exp_force_ratios = { }
no_exp_forces_to = { JAP SIA MAN VIC }
use_offensive_supply = yes
###################################
# Diplomacy
###################################
combat = {
ENG = 70
FRA = 80
SOV = 65
USA = 10
}
demand_claims = {
POL
AUS
CZE
}
befriend = {
SLO = 50
SPA = 20
ITA = 100
SWE = 10
FIN = 20
JAP = 30
POR = 10
TUR = 30
DEN = 40
HUN = 50
ROM = 50
BUL = 50
}
protect = {
ROM = 80
BUL = 80
SWE = 80
SCH = 80
AUS = 300
POL = 80
SLO = 80
NOR = 80
ITA = 80
TUR = 80
}
target = {
#Austria
373 = 80 # Lech
377 = 80 # Innsbruck
462 = 80 # Salzburg
461 = 80 # Klagenfurt
465 = 80 # Linz
464 = 80 # Hollabrunn
463 = 80 # Vienna
460 = 80 # Graz
#Czech
472 = 60 # Liberec
471 = 60 # Usti
466 = 60 # Strakonice
467 = 60 # Tabor
#Poland
303 = 50 # Danzig
#Baltic States
206 = 50 # Memel
}
trade = {
cancel_deal_threshold = 2
energy = -1
rare_materials = 9
metal = -1
oil = 8
supplies = -1
money = -1
favored = {
SWE = 150
FIN = 100
ROM = 150
ITA = 100
HUN = 100
YUG = 100
SPA = 80
BUL = 100
JAP = 50
CHI = 50
}
embargo = { }
}
tech_sharing = {
favored = {
AUS = 150
ROM = 120
SLO = 80
BUL = 100
HUN = 100
SPA = 120
YUG = 50
ITA = 150
SWE = 50
FIN = 120
JAP = 150
TUR = 100
}
embargo = {
ENG FRA AST CAN NZL
}
not = { }
prioritized = {
# Arcriculture
5020 = 100
5030 = 100
5040 = 100
# Inf support
1310 = 100
1320 = 100
1330 = 100
1340 = 100
1350 = 100
1360 = 100
# Production
5050 = 100
5060 = 100
5070 = 100
5080 = 100
5090 = 100
5100 = 100
5110 = 100
5120 = 100
5130 = 100
5150 = 100
5180 = 100
# Motorized
1230 = 100
1240 = 100
1250 = 100
# CAS
4170 = 100
4280 = 100
4180 = 100
# Medium tanks
2070 = 100
2080 = 100
2090 = 100
# Light tanks
2020 = 100
2030 = 100
2040 = 100
2050 = 100
2060 = 100
# Submarines
3400 = 100
3410 = 100
3420 = 100
3430 = 100
3440 = 100
3450 = 100
# Mechanized
1260 = 100
1270 = 100
1280 = 100
1290 = 100
}
}
###################################
# Spying
###################################
spyprefs =
{
percentage_on_spies = 0.2
percentage_foreign_mission = 0.7
# Used for Homeland Defense Spying
spyprefsdata =
{
NumberOfSpies = 10
counter_espionage = 10
country = GER
}
# Defaul Spy parms used for countries the AI is atwar with but has no specific entry
spyprefsdata = {
country_priorities = 3
NumberOfSpies = 3
min_number_of_spies = 1
steal_blueprint = 10
minister_assassination = 1
smear_campaign = 3
coup = 4
sabotage_industry = 5
nuclear_sabotage = 0
found_partisans = 0
massmedia = 3
counter_espionage = 5
disrupt_techteam = 5
country = NONE
}
spyprefsdata = {
country_priorities = 10
NumberOfSpies = 10
min_number_of_spies = 2
steal_blueprint = 10
minister_assassination = 2
smear_campaign = 4
coup = 1
sabotage_industry = 10
nuclear_sabotage = 0
found_partisans = 0
massmedia = 4
counter_espionage = 5
disrupt_techteam = 4
country = SOV
}
spyprefsdata = {
country_priorities = 10
NumberOfSpies = 10
min_number_of_spies = 2
steal_blueprint = 10
minister_assassination = 2
smear_campaign = 4
coup = 1
sabotage_industry = 10
nuclear_sabotage = 0
found_partisans = 0
massmedia = 4
counter_espionage = 5
disrupt_techteam = 4
country = ENG
}
spyprefsdata = {
country_priorities = 5
NumberOfSpies = 10
min_number_of_spies = 2
steal_blueprint = 10
minister_assassination = 1
smear_campaign = 2
coup = 1
sabotage_industry = 10
nuclear_sabotage = 0
found_partisans = 0
massmedia = 2
counter_espionage = 5
disrupt_techteam = 4
country = USA
}
spyprefsdata = {
country_priorities = 6
NumberOfSpies = 10
min_number_of_spies = 1
steal_blueprint = 10
minister_assassination = 0
smear_campaign = 0
coup = 0
sabotage_industry = 0
nuclear_sabotage = 0
found_partisans = 0
massmedia = 0
counter_espionage = 5
disrupt_techteam = 0
country = FRA
}
spyprefsdata = {
country_priorities = 4
NumberOfSpies = 4
min_number_of_spies = 1
steal_blueprint = 10
minister_assassination = 1
smear_campaign = 3
coup = 4
sabotage_industry = 5
nuclear_sabotage = 0
found_partisans = 0
massmedia = 3
counter_espionage = 5
disrupt_techteam = 5
country = SPR
}
spyprefsdata = {
country_priorities = 4
NumberOfSpies = 4
min_number_of_spies = 1
steal_blueprint = 10
minister_assassination = 1
smear_campaign = 3
coup = 4
sabotage_industry = 5
nuclear_sabotage = 0
found_partisans = 0
massmedia = 3
counter_espionage = 5
disrupt_techteam = 5
country = YUG
}
}
###################################
# Construction and Tech Research
###################################
construction = {
max_factor = 1.0 # 0.15
AA_batteries = no
max_AA_level = 7
AA_provs = {
76 # Dortmund
67 # Essen
75 # Cologne
74 # Saarbrucken
82 # Kassel
313 # Frankfurt
314 # Suttgart
376 # Munich
311 # Dresden
310 # Leipzig
300 # Berlin
90 # Kiel
296 # Rostock
86 # Hannover
80 # Wilhelmshafen
81 # Munster
66 # Aachen
315 #Fribourg
86 #Breme
87 #Hannovre
}
coastal_fort = atwar
max_coastal_level = 3
coastal_fort_provs = {
90 # Kiel
}
radar_station = no
max_radar = 2
radar_provs = {
67 # Essen
#82 # Kassel
#80 # Wilhemshafen
300 # Berlin
314 # Stuttgart
51 # Brussels
47 # Amsterdam
44 # Lille
56 # Paris
#310 #Leipzig
90 #Kiel
}
air_base = atwar
max_air_base = 3
air_base_provs = {
67 # Essen
}
naval_base = not_atwar
max_naval_base = 2
naval_base_provs = { }
land_fort = no
max_land_level = 2
fort_borders = { }
fort_provs = {
74 # Saarburken
314 # Stuttgart
315 # Freiburg
}
ic_at_war = no
force_ic_until = 1937
ic_end_year = 1937
IC_provs = {
74 # Saarburken
376 # Munchen
300 # Berlin
75 # Cologne
314 # Stuttgart
86 # Hannover
311 # Dresden
473 # Breslau
302 # Stettin
312 # Nuremberg
81 # Munster
76 # Dortmund
67 # Essen
88 # Hambourg
}
rocket_test = no
rocket_test_prov = {
296 # Rostock
}
max_rocket = 1
}
military = {
relative_build_scheme = no
max_batch_peace = 720
max_batch_war = 360
max_batch_home_front = 360
#### Divisions etc...
infantry = 38
cavalry = 0
motorized = 3
mechanized = 4
light_armor = 0
armor = 10
paratrooper = 1
marine = 0
bergsjaeger = 0
garrison = 1
hq = 2
militia = 0
# 59 %
interceptor = 3
multi_role = 10
cas = 4
strategic_bomber = 0
tactical_bomber = 5
naval_bomber = 1
transport_plane = 1
flying_bomb = 0
flying_rocket = 0
# 24 %
battleship = 2
carrier = 0
escort_carrier = 0
destroyer = 4
light_cruiser = 2
heavy_cruiser = 1
battlecruiser = 0
submarine = 4
nuclear_submarine = 0
transports = 4
# 17 %
#### Brigades
artillery = 33
sp_artillery = 36
rocket_artillery = 0
sp_rct_artillery = 0
anti_tank = 0
tank_destroyer = 0
light_armor_brigade = 0
heavy_armor = 6
super_heavy_armor = 0
armored_car = 0
anti_air = 10
police = 0
engineer = 15
cag = 100.000
}
technology = {
endgoal = { }
preference = {
# Tools
5050 5060 5070
# Engineering
5080 5090 5100
# Production Control
5110 5120
# Assembly Line
5130 5140 5150 5160 5180
# Cryptography
5310 5320 5330 5340
# Special Weapons
7140 7150 7160
#Infantry
1010 1020 1030 1040 1050 1060
# Inf support
1310 1320 1330 1340 1350 1360
# Motorized
1230 1240 1250
# CAS
4170 4280 4180
# Medium tanks
2070 2080 2090
# Light tanks
2020 2030 2040 2050 2060
# SM
3400 3410 3420 3430 3440
# Mechanized
1260 1270 1280 1290
# Naval Doctrines
8210 8280 8290 8300
# Air Doctrines
9060 9080 9100 9110 9120 9130 9190 9200 9210 9220 9230 9240 9250 9260 9270 9280 9290 9300 9310 9320 9330 9340 9350 9360 9370 9380 9390 9400 9410 9420
#Doctrines terrestres
6000 6001 6002 6003 6004 6005 6006 6007 6008 6009 6010
#Petrole
5190 5200 5210 5220 5230 5240 13020 13040 13050
#Radars (1 et 2)
5410 5420
#CAS
4040 4070 4100 15030 15040 15050
#Escortes
4050 4080 4110 15060 15070 15080
#Intercepteurs
4030 4060 4090 15000
#Tactics
4130 4140 4150 4160 15100
#
2100 2110 2120 2130
#
2170 2180 2190 2200 2210 11020
#SP_Artillery
2220 2230 2240 2250 11030 11040
#Artillerie
2290 2300 2310 2320 2330 2340 2350 2360
#Antitank
2400 2410 2420 2430 2440 11070
#AA_flak
2450 2460 2470 2480 2490 2500 11080
# Paras 1070
1080 1090 1100
# Air Transports 4250
4260 4270
}
ignore = {
# Destroyers
3010 3020 3030 3040 3050 3060
# CL
3070 3080 3090 3100 3110
# CA
3130 3140 3150 3160
# CC
3190 3200 3210 3220
# BB
3250 3260 3270 3280 3290 3300 3310
# CV/CVL
3320 3330 3340 3350 3360 3370 3380 3390 12060 12100
# Marines
1150 1160 1170 1180
# SP Rocket Artillery
2260 2270 2280
# Rocket Artillery
2370 2380 2390
# Armoured Cars
2150 2160
# Strategic Air Doctrines 9140
9150 9160 9170 9180 9430 9440 9450 9460
#Radars
5430 5440 5450 5460 13030
#Energie Nuke
5470 5480 5490 5500 5510 5520 5530 5540
#Doctr Navales
4190 4200 4210 15140 15150
#DCA
2510 2520 2530 2540 11090
}
armor = 5
infantry = 6
industry = 5
aircraft = 5
naval = 1
land_doctrines = 5
secret_weapons = 1
air_doctrines = 5
naval_doctrines = 1
}
###################################
# Ground Combat, Leaders and Garrisons
###################################
leader_ratio = {
land_field_marshal =0.03
land_general =0.041
land_lt_general =0.51
sea_grand_admiral =0.02
sea_admiral =0.061
sea_vice_admiral =0.401
air_marshal =0.02
air_general =0.091
air_lt_General =0.11
}
garrison = {
defend_overseas_beaches = yes
home_multiplier = 1.0
overseas_multiplier = 1.0
home_peace_cap = 20
war_zone_odds = 2.0
key_point_prio_mult = 0.5
revolt_risk_mult = 0.1
# PRIORITIES:
beach = 20 # Beach level 2
capital = 40 # Our capital
human_border = 210 # Ignored for allied human players
war_target = 70 # The next country targeted for attack by this AI
opposing_alliance = 50 # For neutrals, all alliances are "opposing"
claim_threat = 0 # If we are neutral, countries with claims on us get this
unstable_border = 0 # Bordering countries at war with someone else get this
# Borders with specific countries
country_priorities = {
VIC = -1
FIN = -1
ITA = -1
SCH = -1
AUS = -1
CZE = 75
POL = 100
YUG = 25
HOL = 5
BEL = 25
DEN = 25
SOV = 25
}
ignore = {
#Rhine
75 #Cologne
74 #Saarburken
66 #Aachen
}
province_priorities = {
#Rhine border
313 = 30 #Frankfurt
82 = 30 #Kassel
76 = 30 #Dortmund
67 = 30 #Essen
}
area_multiplier = {
304 = 3.5 # Elbing
510 = 3.5 # Königsberg in order to get a decent build-up before Fall Weiss.
}
}
front = {
recklessness = 2 # 0-3
distrib_vs_ai = offensive
distrib_vs_human = offensive
enemy_reinf_days = 6
reserve_prop = 0.1
panic_ratio_vs_ai = 2.5
panic_ratio_vs_human = 2.5
base_attack_odds = 1.3
min_attack_odds = 1.1
max_attack_odds = 3.0
reinforce_odds = 1.2
withdraw_odds = 4.0
strength = 1.0
organisation = 1.0
soft_attack = 1.0
hard_attack = 1.0
ground_defense = 1.0
dig_in = 1.0 # Against defender
frozen_attack = 1.0
snow_attack = 1.0
blizzard_attack = 1.0
storm_attack = 1.0
muddy_attack = 1.0
occupied = 0.7
owned = 0.7
jungle_attack = 1.0
mountain_attack = 1.0
swamp_attack = 1.0
forest_attack = 1.0
hill_attack = 1.0
urban_attack = 1.0
river = 1.0
enemy_handicap = {
FRA = 200
BEL = 300
HOL = 300
LUX = 300
}
passivity = {
FRA = 30
BEL = 50
HOL = 50
LUX = 50
}
}
###################################
# Air bombardment and defense
###################################
# Air AI File For Ground Bombings as priority
# bomber is now obsolete and NOT USED AT ALL replace and use Air Marshal instead
air_marshal = {
min_mission_strength_org = 0.5
icxdayscostfactor = 8.0 # How to value true industrial cost when calculating expect causalties
manpowercostfactor = 80.0 # How to value manpower cost when calculating expect causalties
destructionriskthreashold = 0.2 # when to fear a divisiopn might be destroyed
# desirability is a multiplier used when calcualting the mission desirability
airsuperioritydesirability = 60.0
groundattackdesirability = 20.0
inderdictiondesirability = 40.0
logisticalstrikedesirability = 2.0
runwaycrateringdesirability = 1.0
strategicstrikedesirability = 1.0
installationstrikedesirability = 5.0
navalstrikedesirability = 15.0
portstrikedesirability = 30.0
convoyraiddesirability = 9.0
#airborneassaultdesirability = 10.0
#airsupplydesirability = 10.0
# tolerance is the required kill:loss ration expected to do
# mission, 2.0 accept twice the losses of your enemy, 0.5 accept half
airsuperioritylosstolerance = 1.5
groundattacklosstolerance = 2.5
interdictionlosstolerance = 2.5
logisticalstrikelosstolerance = 0.5
runwaycrateringlosstolerance = 0.5
strategicstriketolerance = 0.5
installationstriketolerance = 0.5
navalstriketolerance = 2.0
portstriketolerance = 3.0
convoyraidtolerance = 1.0
# efficency is a tweakable param to adjust according to how
# much actual damage comes from doing this mission (not to be confused with desirability)
logisticalstrikeefficency = 0.01
runwaycrateringefficency = 0.01
strategicstrikeefficency = 0.01
installationstrikeefficency = 0.01
taskforcetype = { name = "Air Superiority" desiredratio = 0.380 rangeweight = 10.000 airkillpowerweight = 2000.000 hardkillpowerweight = 0.000 softkillpowerweight = 0.000 navalkillpowerweight = 0.000 strategickillpowerweight = 0.000 transportcapacityweight = -1000000.000 airvulnurabilityweight = -1.000 surfacevulnurabilityweight = 0.000 idle = yes reorganize = yes air_superiority = yes }
taskforcetype = { name = "Soft Bombing" desiredratio = 0.230 rangeweight = 10.000 airkillpowerweight = 0.000 hardkillpowerweight = 0.000 softkillpowerweight = 2000.000 navalkillpowerweight = 0.000 strategickillpowerweight = 0.000 transportcapacityweight = -1000000.000 airvulnurabilityweight = 0.000 surfacevulnurabilityweight = -1.000 idle = yes reorganize = yes interdiction = yes ground_attack = yes naval_strike = yes port_strike = yes }
taskforcetype = { name = "Hard Bombing" desiredratio = 0.080 rangeweight = 10.000 airkillpowerweight = 0.000 hardkillpowerweight = 2000.000 softkillpowerweight = 0.000 navalkillpowerweight = 0.000 strategickillpowerweight = 0.000 transportcapacityweight = -1000000.000 airvulnurabilityweight = 0.000 surfacevulnurabilityweight = -1.000 idle = yes reorganize = yes interdiction = yes ground_attack = yes naval_strike = yes port_strike = yes }
taskforcetype = { name = "Strategic Bombing" desiredratio = 0.080 rangeweight = 10.000 airkillpowerweight = 0.000 hardkillpowerweight = 0.000 softkillpowerweight = 0.000 navalkillpowerweight = 0.000 strategickillpowerweight = 2000.000 transportcapacityweight = -1000000.000 airvulnurabilityweight = -0.500 surfacevulnurabilityweight = -0.500 idle = yes reorganize = yes logistical_strike = yes runway_cratering = yes strategic_bombardment = yes installation_strike = yes }
taskforcetype = { name = "Naval Bombing" desiredratio = 0.030 rangeweight = 10.000 airkillpowerweight = 0.000 hardkillpowerweight = 0.000 softkillpowerweight = 0.000 navalkillpowerweight = 2000.000 strategickillpowerweight = 0.000 transportcapacityweight = -1000000.000 airvulnurabilityweight = 0.000 surfacevulnurabilityweight = -1.000 idle = yes reorganize = yes naval_strike = yes port_strike = yes convoy_air_raiding = yes }
taskforcetype = { name = "Airlift" desiredratio = 0.200 rangeweight = 10.000 airkillpowerweight = 0.000 hardkillpowerweight = -2000.000 softkillpowerweight = -2000.000 navalkillpowerweight = 0.000 strategickillpowerweight = -2000.000 transportcapacityweight = 1000000.000 airvulnurabilityweight = -1.000 surfacevulnurabilityweight = 0.000 idle = yes reorganize = yes airborne_assault = yes air_supply = yes }
}
###################################
# Invasions and Naval
###################################
invasion = {
base = 0.1 #Relative modifier. (lower = specific targets much more important.)
random = 8.0 #How big a random range. (1.0 = 1%)
coastal = 0.1 #increase to avoid coastal forts more.
beach = 0.1 #higher, avoid worst beaches.
distance = 3.0 #higher = avoid long distance.
max_distance = 150.0 #About the distance from Islande to NY
pocket = 20.0 #prioritise pockets, ie provinces with no adjacent controlled by same.
max_staging_distance = 25 # How far should the staging area be from the target invasion point
island = 0.1 #prioritise taking pure islands.
enemy = 2.0 #higher = much more vary of troops in province.
adjacentenemy = 2.0 #higher = much more vary of troops nearby
air_base = 1.5
naval_base = 0.1
air_support = 3.0
redirect = priority
ignore = no
help_allies = no
target = {
#Norway
107 = 4000 # Oslo
108 = 4000 # Kristiansan
109 = 4000 # Stavanger
110 = 4000 # Bergen
125 = 4000 # Narvik
117 = 3750 # Alesund
118 = 3750 # Trondheim
124 = 3750 # Mo I Ran
#Sweden
106 = 4000 # Amal
98 = 4000 # Goterborg
93 = 4000 # Malmo
97 = 4000 # Jonkoping
100 = 3750 # Norrkoping
101 = 3750 # Stockholm
102 = 3750 # Uppsala
114 = 3750 # Gavle
120 = 4000 # Sundsuall
122 = 4000 # Umea
127 = 4000 # Lulea
#Finland
142 = 2000 # Helsinki
141 = 2000 # Turku
140 = 2000 # Pori
138 = 2000 # Vaasa
137 = 1750 # Oulu
131 = 1750 # Tornio
#Angleterre
17 = 1000
20 = 1000
21 = 1000
22 = 1000
23 = 1000
28 = 1000 # Belfast
13 = 1000
1 = 1000 # Reykjavik
579 = 1000 # Halifax
606 = 1000 # Washington
602 = 1000 # New York
538 = 1000 #Bermudes
800 = 1000 # Groenland
1867 = 1000 # Açores
332 = 1000 # oviedo
}
}
admiral = {
min_org = 100 # NEW: Percent of org gained back before the unit can leave port
min_dmg = 98 # NEW: Percent of dmg gained back before the unit can leave port
return_org = 60 # NEW: PERCENT OF ORG LOST BEFORE RETURNING TO PORT applies to all fleets/ships
return_dmg = 80 # NEW: PERCENT OF DMG LOST BEFORE RETURNING TO PORT for repairs applies to all fleets/ships
ignore = {
#Murmansk/Archangel
"Barents Sea"
"Arctic Ocean"
#Spanish Coase (Atlantic Side)
"Portugese Coast"
"Cap St Vincent"
#Western Mediterranean
"Costa del Sol"
"Gulf of Lyon"
"Algerian Coast"
#Central Mediterranean
"Tyrrhenian Sea"
"Adriatic Sea"
#Eastern Mediterranean
"Black Sea"
"Aegean Sea"
"Egyptian Coast"
#South Atlantic
"Pernambuco Plain"
"Ascension Fracture Zone"
"Argentine Plain"
"Angola Plain"
#Caribbean Sea and Guilf of Mexico
"West Gulf of Mexico"
"East Gulf of Mexico"
"Florida Strait"
"Yucatan Strait"
"Windward Islands"
"Central Carribean"
#Brazil and Argentina Coast
"Coast of Guyana"
"Coast of Recife"
"Coast of Uruguay"
"Coast of Brazil"
"Coast of Argentina"
# West Africa
"Coast of Africa"
"Coast of Bissao"
#Equitorial Africa
"Gulf of Guinea"
"Coast of Angola-Namibia"
#South Africa
"Coast of South Africa"
"Atlantic-Indian Ridge"
#East Africa
"Red Sea"
"Horn of Africa"
#Madagascar Coast
"South Mozambique Channel"
"North Mozambique Channel"
"Northeast Coast of Madagascar"
"Southeast Coast of Madagascar"
#North Indian Ocean (Persian Gulf)
"Persian Gulf"
"North Arabian Sea"
"South Arabian Sea"
"Coast of Ceylon"
#Central/South Indian Ocean
"Mascarene Plateau"
"Mid-Indian Ridge"
"Ninetyeast Ridge"
"Southeast Indian Ocean"
"Southwest Indian Ocean"
#Bay of Bengal & West Indonesia
"East Bay of Bengal"
"West Bay of Bengal"
"Malacca Strait"
"Java Ridge"
"Java Trench"
#Indo-China, Borneo, Phillipenes
"Gulf of Siam"
"Coast of Indochina"
"Spratly Sea"
"Coast of Brunei"
"Flores Sea"
"Sulu Sea"
"Celebes Sea"
"Luzon Strait"
#China Coast
"Taiwan Strait"
"Orange Sea"
#Japanese Coast
"Sea of Japan"
"Ryukyus"
"Coast of Japan"
"South Sea of Okhotsk"
"West Sea of Okhotsk"
"East Sea of Okhotsk"
#Mariana Basin, Phillipenes
"Philipine Trench"
"Central Philippine Sea"
"Mariana Trench"
"East Mariana Basin"
"Mid-Pacific Mountains"
"North Bismarck Sea"
#New Guinea, East/North Australia and New Zealan
"Coast of New Guinea"
"Molucca Sea"
"Banda Sea"
"Arafura Sea"
"South Bismarck Sea"
"Solomon Sea"
"West Coral Sea"
"East Coral Sea"
"North Tasman Sea"
"South Tasman Sea"
"East Cost of New Zealand"
# South and West Australia
"Timor Sea"
"West Coast of Australia"
"East Great Australian Bight"
"West Great Australian Bight"
#North Pacific
"Coast of Kamchatka"
"East Bering Sea"
"West Bering Sea"
"Aleutians"
"Northwest Pacific Basin"
"North Northeast Pacific Basin"
#Central Pacific
"Hawaiian Rise"
"North East Pacific Ocean"
"Marshalls Sea"
"South East Pacific Ocean"
"Marianas"
"Western Solomons"
"Eastern Solomons"
"US Maritimes"
"Carolines"
#South Pacific
"Gilberts"
"Line Islands"
"Fiji Basin"
"Southwest Pacific Basin"
# South American West Coast
"Southeast Pacific Basin"
"West Coast of Chile"
"West Coast of Peru"
"South Southeast Pacific Ocean"
"North Southeast Pacific Ocean"
# USA West Coast
"Gulf of Alaska"
"West Coast of the United States"
#West Coast of Mexico
"West Coast of Mexico"
"West Coast of Central America"
}
#Which provinces to use as bases..
base = {
90 # Kiel
900 # Groenland
32 # Brest
88 # Hambourg
1 # Islande
538 # Bermudes
1867 # Açores
38 # Cherbourg
47 # Amsterdam
}
target = { 2394 2395 2396 2397 2398 2399 2402 2403 2404 2405 2406 2410 2411 2412 2413 2414 2471 2472 2473 2474 2475 2476 2477 2478
}
core = {
2494
2493
2489
2483
2481
2491
2492
2484
2482
2480
2479
2478
2477
2476
290
}
}
[SIZE=3][color=Orange][b]Paramètres généraux[/b][/SIZE][/color]
L’entrée « switch » spécifie si l’ia allemande doit activer automatiquement le fichier ger_1941.ai le 1er janvier 1941. Pour toutes les IA majeures (hormis la France), l’entrée est fixée à « no ». Quoiqu’il arrive, les switches entrant en fonction par event fonctionneront toujours.
« Max_front_ratio » définit le ratio de troupes (ici 1.2 pour 1) dont essayera disposer l’IA sur l’ensemble de ses fronts. Cette valeur peut être ajustée par des ratios nationaux :
Ex :
max_front_ratios = {
SOV = 5.0
ENG = 2.0
USA = 2.0
}
Le switch ai/switch/GER_Russia.ai activé lors de Barbarossa définit le ratio sur le front russe à 5 pour 1. L’IA allemande aura ainsi tendance à masser ses troupes à l’est.
« max_garrison_prop » « min_garrison_prop » définissent la proportion (entre 0 et 1) de troupes étant considérées comme « en garnison ». Sont considérées « en garnison » les troupes qui chassent les partisans ou qui gardent des fronts ‘calmes’ (ex Mur de l’Atlantique).
« neutrality » définit la neutralité du pays de 0 à 150. A 150, le pays refusera toute alliance.
« war » définit la propension du pays à déclarer la guerre à ses ennemis. Au-dessus de 100, l’IA aura tendance à attaquer tout ce qui bouge.
« upgrading » et « renforcement » définissent respectivement la proportion de PPs alloués à l’amélioration des unités et à leur renforcement.
« desperation » définit la proportion du territoire national perdu au-delà de laquelle l’ia ne construira que des milices. (ici, au-delà de 80% du territoire national perdu)
« strat_redeploy_threshold » définit le nombre de jours nécessaires pour un mouvement de troupes au-delà duquel l’ia préférera le redéploiement stratégique au mouvement classique.
« max_redeploying » fait référence à la proportion maximale de troupes en redéploiement stratégique.
« exp_force_ratio » est la proportion de troupes données en corps expéditionnaire aux alliés.
« exp_force_ratios = { } » définit les proportions pays par pays.
Ex :
exp_force_ratios = {
USA = 0.6 # 0.85
ENG = 0.4
}
Ici, l’IA enverra 60% de ses corps expéditionnaire aux EUA et 40% au R-U. Pour obtenir la proportion de troupes envoyées aux EUA il faudra multiplier 0.6 par la valeur du exp_force_ratio.
Dans l’entrée « no_exp_forces_to » sont placés les TAGs des nations à qui l’ia ne doit pas envoyer de corps expéditionnaire.
« use_offensive_supply » définit si l’ia doit ou non utiliser la fonction supply offensive.
[color=Orange][SIZE=3][b]Section Diplomacy[/b][/SIZE][/color]
L'entrée "combat" définit le "taux d'inimitié" avec certains pays.
Ex :
combat = {
ENG = 70
FRA = 80
SOV = 65
}
Ici, l'IA n'aime pas du tout la France. Elle n'aime pas non plus l'URSS ni le R-U mais un poil moins que la France. :D
L'entrée "demand_claims" contient les pays sur lesquels l'ia doit faire pression (fonction "revendications territoriales").
L'entrée "befriend" définit le degré d'amitié envers certains pays. L'ia essayera de les influencer voire de s'allier avec.
"Protect" correspond aux pays que l'ia considère comme faisant partie de sa sphère d'influence. Elle essayera de garantir leur indépendance.
"Target" contient les provinces que l'ia essayera d'obtenir de manière diplomatique (revendications, traités de paix...)
Ensuite l'entrée "trade" :
Ex :
trade = {
cancel_deal_threshold = 2
energy = -1
rare_materials = 9
metal = -1
oil = 8
supplies = -1
money = -1
favored = {
SWE = 150
FIN = 100
ROM = 150
ITA = 100
HUN = 100
YUG = 100
SPA = 80
BUL = 100
JAP = 50
CHI = 50
}
embargo = { }
}
Plus "cancel_deal_threshold" est basse plus l'ia aura tendance à annuler ses trades.
Viennent ensuite des entrées correspondantes à chaque ressource avec une valeur qui fait référence à l'importance d'importer/exporter cette ressource. Ici, l'ia vendra son énergie contre du rare par ex. "Favored" liste les partenaires commerciaux favoris et "embargo" les pays avec lesquels l'ia ne commercera pas.
L'entrée "tech_sharing" définit les pays avec lesquels l'ia échangera ou pas des techs. "Not" et "favored" recensent les ids des techs à partager ou non.
[color=Orange][SIZE=3][b]Section Spying[/b][/SIZE][/color]
Avertissement : cette section est très bugguée. :D Mais je vais exposer ce à quoi les entrées font "en théorie" référence.
"percentage_on_spies" et "percentage_foreign_mission" désignent la proportion du gain journalier de monnaie que l'ia assignera respectivement à l'envoi de spies et aux missions d'espionnage.
Les entrées "spyprefsdata" font référence à des pays en particulier.
Ex :
{
NumberOfSpies = 10
counter_espionage = 10
country = GER
}
Ici, l'IA (allemande) essayera d'avoir 10 spies en Allemagne et les utilisera en contre-espionnage.
Ex :
spyprefsdata = {
country_priorities = 10
NumberOfSpies = 10
min_number_of_spies = 2
steal_blueprint = 10
minister_assassination = 2
smear_campaign = 4
coup = 1
sabotage_industry = 10
nuclear_sabotage = 0
found_partisans = 0
massmedia = 4
counter_espionage = 5
disrupt_techteam = 4
country = SOV
}
"min_number_of_spies" et "country_priority" font référence au nombre minimum de spies souhaité dans ce pays ainsi qu'à l'importance de mener des opérations de renseignement dans ce pays.
Les entrées "massmedia", "found_partisans" etc font en théorie référence à chaque mission en particulier et assigne un coefficient préférentiel. En réalité, cette partie est bugguée.
[color=Orange][SIZE=3][b]Section Construction and Tech Research[/b][/SIZE][/color]
La sous-section "construction" regroupe les variables ayant trait aux infrastructures.
"max_factor" est la proportion maximale de la production allouée à la construction d'infrastructures.
"AA_batteries", "max_AA_level" et "AA_provs" déterminent respectivement si l'ia doit construire de la DCA (yes/no/atwar/not_atwar), le niveau maximal de DCA à construire ainsi que les provinces où en construire. C'est le même schéma pour les fortifications terrestres/côtières, les radars, les sites d'essai de rockets et les bases navales/aériennes. Concernant les usines, nous disposons de deux entrées supplémentaires : "force_ic_until" qui détermine la date jusqu'à laquelle l'ia construira des usines même si elles manquent de ressources et "ic_end_year" qui précise la date à laquelle l'ia arrêtera de construire des usines.
La sous-section "military" regroupe les variables relatives à la production d'unités. Ici, on a "relative_build_scheme = no", ce qui signifie que l'ia suivra scrupuleusement le plan de production du fichier ia. "Yes" fait en sorte que l'ia tente de conserver un certain équilibré entre les différentes armes.
"max_batch_peace" et "max_batch_war" sont le nombre de jours maximum autorisé pour les productions en série en temps de paix et de guerre.
"max_batch_home_front" s'applique lorsque l'ia a un front domestique.
On a ensuite le schéma de production d'unités en pourcents. Le total doit être de 100.
Puis nous avons le schéma de production des brigades. Ici ce ne sont pas des pourcentages mais des coefficients à comparer les uns aux autres (le total peut être inférieur à 100 mais pas supérieur).
Passons maintenant à la sous-section technology.
"preference" liste les ids des techs à rechercher préférentiellement, "ignore" celles à ne pas rechercher. Suivent des coefficients correspondant aux différents arbres.
Ex :
armor = 5
infantry = 6
industry = 5
aircraft = 5
naval = 1
land_doctrines = 5
secret_weapons = 1
air_doctrines = 5
naval_doctrines = 1
[color=Orange][SIZE=3][b]Section Ground Combat, Leaders and Garrisons[/b][/SIZE][/color]
"leader_ratio" définit la gestion des officiers par l'ia.
Ex :
land_field_marshal =0.03
land_general =0.041
land_lt_general =0.51
sea_grand_admiral =0.02
sea_admiral =0.061
sea_vice_admiral =0.401
air_marshal =0.02
air_general =0.091
air_lt_General =0.11
Ici, le coefficient de maréchaux de l'armée de terre est à 0.03, ce qui signifie que si l'ia dispose de 100 divisions, elle essayera d'avoir 100x0.03 = 3 maréchaux.
Dans la sous-section garrison :
Tout d'abord, nous avons des coefficients multiplicateurs (à comparer à 1.0).
L'entrée "defend_overseas_beaches" décide si l'ia défend ou non ses plages hors métropole. "home_multiplier" et "overseas_multiplier" sont des coefficients qui déterminent la priorité globale des fronts domestique et outre-mer. "home_peace_cap" fait référence au nombre minimum de divisions à conserver autour de la capitale en temps de paix. "war_zone_odds" détermine le ratio de divisions que l'ia essayera d'avoir dans les zones de conflit. "key_point_prio_mult" est un coefficient relatifs aux provinces avec VPs. "revolt_risk_mult" indique la priorité (coefficient encore) des zones avec des partisans.
Suivent des coefficients bruts (sont supérieurs à 1).
"beach", "capital", "human_border", "war_target", "opposing_alliance", "claim_threat" et "unstable_border" font respectivement référence à la priorité affectée aux provinces avec une plage, à la capitale, aux frontières avec les pays humains, aux frontières avec des pays que l'ia devra bientôt envahir, aux frontières avec des pays d'une alliance opposée, aux frontières avec un pays sur lequel l'ia a des revendications et enfin aux frontières avec les pays en guerre.
Dans l'entrée "country_priorities" sont listés des priorités pays par pays. (-1 équivaut à ignorer la frontière). Sous "ignore" sont listées les provinces à ne pas occuper. "province_priorities" détermine les priorités de provinces précises à occuper. "area_multiplier" est buggué.
Sous section "front" :
Cette sous-section détermine le comportement des unités terrestres de l'ia au front.
"recklessness" détermine la prise de risque générale de 0 à 3. "distrib_vs_ai/human" détermine la manière dont l'ia doit disposer ses unités. Avec "even", l'ia dispose ses troupes de manière égale tout le long du front, "reactive" lui indique de disposer plus de troupes face aux concentrations ennemies, "defensive" lui indique de renforcer prioritairement les provinces importantes, "offensive" indique de concentrer ses unités là où l'ennemi est le plus faible et enfin "op_defensive" lui indique de disposer moins de troupes dans les provinces qui peuvent être facilement encerclées.
"enemy_reinf_days" est très importante : elle est à la base des calculs d'ordres d'attaque de l'ia et détermine le nombre de jours nécessaire aux unités ennemies pour arriver dans une province donnée. Je m'explique, lorsque l'ia calculera le nombre de divisions ennemies dans une province donnée, elle prendra également en compte les unités qui peuvent renforcer la province en moins de enemy_reinf_days = X jours.
"reserve_prop" est la proportion d'unités à placer en réserve (que ce soit dans le cadre d'une défense en profondeur ou pour laisser souffler certaines unités).
"panic_ratio_vs_ai/human" est la ratio d'unités à partir duquel l'ia tentera de renforcer en urgence son front.
Ex :
panic_ratio_vs_ai = 2.5
Ici, si l'ia est à 1 contre 2.5 sur un front, elle le renforcera en urgence.
"base_attack_odds" détermine le ratio à partir duquel l'ia attaquera une province. "min_attack_odds" est le ratio à partir duquel l'ia attaquera dans le cas d'une guerre de position. "max_attack_odds" est le ratio maximum à employer.
"reinforce_odds" est le ratio à partir duquel l'ia renforcera un front (mais cette fois-ci, elle ne prendra pas de risque sur d'autres fronts pour renforcer celui-ci). "withdraw_odds" est le ratio à partir duquel l'ia retraite.
Suivent des ordres d'attaque dans des conditions spécifique (jungle, hiver etc). Réglé à 1.0, cela n'a aucun effet, réglé en dessous, cela réduit la propension de l'ia à attaquer dans ces conditions.
"enemy_handicap" et "passivity" contiennent les tags des pays (avec des coefficients bruts) contre lesquels l'ia "se retient" ou doit être passive.
[color=Orange][SIZE=3][b]Air bombardment and defense[/b][/SIZE][/color]
Les trois premières entrées "icxdayscostfactor", "manpowercostfactor" et "destructionriskthreashold" sont utilisées pour calculer les ordres d'attaque...la formule n'est pas fournie. Bref, à ne pas modifier.
"min_mission_strength_org" détermine la proportion d'organisation en dessous de laquelle l'ia n'utilisera pas ses avions.
Ex :
min_mission_strength_org = 0.5
A moins de 50% d'orga, les avions IA ne sortiront pas des aérodromes.
La série de "desirability" désigne des facteurs utilisés pour calculer les ordres d'attaque. Plus le facteur est élevé plus l'IA sera encline à ordonner la mission en question.
La "tolerance" est le ratio dégâts infligés/pertes reçues qu'est prête à accepter l'ia pour une mission donnée.
Ex :
logisticalstrikelosstolerance = 2.0
Dans ce cas, dans le cadre d'une campagne de bombardement logistique, l'ia sera prête à accepter deux fois plus de pertes qu'elle n'infligera de dégâts.
"efficency" permet d'indiquer à l'IA quelle est l'influence "stratégique" de telle ou telle mission. Par défaut à 0.01, si on l'augmente pour une mission donnée, dans ses calculs d'ordre d'attaque, l'ia comprendra que la mission en question est plus efficace (qu'elle fait "plus mal" à l'adversaire).
Enfin les "taskforcetype" sont des template de compositions de forces aériennes pour l'IA. Elles prennent en compte "Air Superiority", "rangeweight", "airkillpowerweight", "hardkillpowerweight", "softkillpowerweight", "navalkillpowerweight", "strategickillpowerweight", "transportcapacityweight", "airvulnurabilityweight", "surfacevulnurabilityweight" avec des valeurs attribuées pour chacune de ces entrées. Plus la valeur est élevée plus l'importance de l'entrée est grande.
Le "desiredratio" est la proportion désirée du type de force aérienne en question.
Enfin, l'on peut indiquer pour quelles missions chaque template de force aérienne est faite (missionX = yes).
Ex :
[QUOTE]taskforcetype = { name = "Air Superiority" desiredratio = 0.380 rangeweight = 10.000 airkillpowerweight = 2000.000 hardkillpowerweight = 0.000 softkillpowerweight = 0.000 navalkillpowerweight = 0.000 strategickillpowerweight = 0.000 transportcapacityweight = -1000000.000 airvulnurabilityweight = -1.000 surfacevulnurabilityweight = 0.000 idle = yes reorganize = yes air_superiority = yes } [/QUOTE]
Ici il s'agit d'une template de force aérienne dédiée à la supériorité aérienne (airkillpower très important). L'IA essayera d'avoir 38% de ce type de force aérienne.
[color=Orange][SIZE=3][b]Invasions and Naval[/b][/SIZE][/color]
Et enfin la dernière section, néanmoins très importante, traitant des opérations et amphibies et de la guerre navale.
Premièrement, la sous-section "Invasion" fait référence aux opérations amphibies.
Elle contient tout d'abord plusieurs entrées permettant d'évaluer les priorités globales. Ce sont tous des facteurs relatifs à 1.0.
"base" désigne l'importance d'avoir une base à proximité de la zone de débarquement. Plus "coastal" est élevée plus l'IA évite les fortifications côtières. Une "distance" élevée indique à l'IA d'éviter les longues distances. L'IA ignore les distances supérieures à "max_distance" (1 unité de max_distance = 100km IG). "pocket" permet de donner une priorité aux provinces facilement encerclables, "island" aux îles "pures". Plus "enemy" est élevé plus l'IA ciblera des provinces défendue par de nombreuses unités. "adjacentenemy" fait référence à la présence de troupes ennemies autour de la province cible (même principe que "enemy"). "air_base" et "naval_base" déterminent la priorité des provinces avec des bases aérienne et navale à proximité. "air_support" détermine la priorité des cibles à portée de base aérienne. "ignore" (= yes/no) détermine si l'IA doit organiser des débarquements même si elle a un front domestique. "redirect" (= priority/nearest/home) fait référence aux cibles choisies. Si redirect = priority, l'IA ciblera d'abord les provinces dans l'entrée "target" (voir plus bas). Si "nearest", elle choisira les cibles les plus proches, si "home", elle ne débarquera pas tant qu'elle n'a pas des ordres d'attaque très favorables.
Dans l'entrée "target" sont entrées les ids des provinces à cibler (si redirect = priority).
Ensuite la sous-section "admiral" relative à la guerre navale :
"min_org" et "min_dmg" ainsi que "return_org" et "return_dmg" déterminent respectivement l'orga et la force minimum avant qu'une flotte ne quitte le port ainsi que l'orga et la force en dessous de laquelle une flotte retourne au port.
"min_core_attack_fleets" détermine le nombre minimum de flottes assignées à la défense des provinces de l'entrée "core" (voir plus bas).
"num_attack_fleets" détermine le nombre de flottes opérationnelles l'ia doit former.
"ignore" contient la liste des provinces navales où l'ia ne doit pas patrouiller (cette entrée est un peu bugguée, c'est pourquoi vous voyez souvent des flottes japonaises ou chinoises en Méditerranée).
"base" contient les ids des provinces à utiliser comme bases.
"target" contient les provinces où patrouiller.
Et enfin, "core" contient les provinces à défendre.
Voilà, j'espère que ce tutorial saura vous éclairer quant aux mécanismes de base de l'IA. Il n'y a rien de bien compliquer à comprendre. La difficulté du modding de l'IA est d'adapter l'IA à chaque situation possible via des switches (le mod WIF contient 291 nouveaux switches par exemple) et d'établir un équilibre global en relation avec le moteur de combat et la balance industrielle,
Votre serviteur. :)