Système TeamSpeak du Réseau Jeux-Strategie.com Abonnez-vous à nos flux RSS Mur du Réseau Jeux-Strategie.com
 

      

Tutoriel pour modder l'IA

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. :)

Réseau Gamers et Stratégie. Association Loi 1901 à capacité juridique.
©1998-2017 Réseau Gamers et Stratégie - Tous droits réservés - Mentions légales