[Guide] How to rationalize the Dynamic Campaign engine
-
As we all know, the Dynamic Campaign (DC) in BMS is one of the core aspects of this sim. Also, we are all familiar with the fact that in DC, the ATO generates lots of suicidal missions, which do not make sense. Other times, it generates missions which are not rational. The good news is that this can be changed. The bad news is that this cumbersome situation was never properly addressed in years. Finally, I managed to alter this situation during the campaigns I made for EMF theater. Below, I will describe the necessary steps campaign creators should follow to force the ATO to generate rational missions according to modern air force doctrines.
Two crucial files that affect directly the way DC operates are: a)falcon4.aii and b)mission.dat. Both are located in the campaign folder. In the former file, there are lots of variables which affect the DC engine. During the various BMS updates, some variables were tweaked and others were added or deleted. It is, beyond the scope of this thread to discuss the proper values for all those variables. What is important is that none of those updates addressed the following crucial values:
MaxFlymissionThreat=85
MaxFlymissionHighThreat=100
MaxFlymissionNoThreat=10
MinSeadescortThreat=20
MinAvoidThreat=40For some reason, all BMS updates and even SP, FF or OF versions left those aforementioned variables in their default values. By googling around these variables, all the results regarding their meaning are rather vague. By playing around with these values and making correct changes in mission.dat, we can erase once and for all the DC suicidal missions.
So, what these values mean? These are thresholds, which represent the risk level of missions. In other words, it is a measurement of the GBAD (SAM) threat in an area. The higher the value, the higher the risk level of mission and vice versa. How the threat level is measured? It is measured by the maxalt of mission types. For example the MaxFlymissionNoThreat=10 means that the ATO will generate low risk missions. In other words, missions will be generated if and only if the SAM threat is minimal or absent. Now, the main problem is that the MaxFlymissionThreat=85 and MaxFlymissionHighThreat=100 are way too high. These values alone are responsible for the suicidal missions ATO generates all the time. In plain English, the values of 85 and 100 mean that the ATO will generate missions regardless of the SAM type in an area. So, you will find an OCA Strike or a SWEEP mission generated in the MEZ of a SA-10 or Patriot battery. Clearly, insane. Bottom line, is that if you increase these values, the ATO will generate more missions, simply because it doesn’t care about the threats, as if they don’t exist. Why these values were left too high? I assume that in the days of MicroProse the goal was to flood the skies with as many a/c as possible, regardless of the realism factor. Afterwards, who knows? Maybe they didn’t get the proper attention.
Having this in mind, we now move forward to the mission.dat file to check out which missions fall under which threat category. In order to find out this valuable info, we need a tool named missiondatutil (http://www.mediafire.com/file/rcdcd7dmeak8473/MissionDatUtil.rar/file). The tool is accompanied with a word, which explains all the mission.dat variables. It is beyond the scope of this threat to address all those values. For now, we care only to find out the Risk Level we have to assign to each mission type.
Follow the steps and convert your mission.dat file to mission.csv one. Open the latter file and scroll to the flags column for each mission. Each mission type will have one of the following variables: a)AMIS_Nothreat, or b)AMIS_Highthreat or c) none variable regarding threat. To save you time, this is the result below.You can see that in the AMIS_Nothreat category fall missions which make sense to be generated in areas where SAM presence is either minimal or absent. It makes sense that HVA like AWACS and Tankers orbit in safe areas, far away from A2/AD bubbles.
You can also see that in the AMIS_Highthreat category fall missions which, rationally, do not belong there. You can’t generate and OCA Strike in area covered in full with A2/AD SAMs like SA-10. First, these SAM must be targeted with dedicated DEAD/SEAD missions. Once the area is clear of high threat GBADs, other strike packages can follow.
All the other missions which do not have any type of threat variable in the flags column, fall under the MaxFlymissionThreat=85 category, which is a risk level between the Nothreat and HighThreat values. Let’s say missions of medium risk.
So, what should we do to eliminate the suicidal missions and force the ATO to generate rational missions? We should do the following steps:
-
Leave the variable AMIS_HighThreat only in two missions. These are SEAD Strike and STSTRIKE (Stealth Strike). Perhaps, leave it in dedicated ECM missions too. But it is obligatory to include it in SEADSTRIKE & STSTRIKE. Remove the AMIS_HighThreat variable from all other missions, which have it by default. This way we tell the DC engine that only dedicated DEAD/SEAD packages will enter areas covered by A2/AD GBADs (high threat areas). Also, only stealth a/c will penetrate these areas for purposes other than DEAD. This rationale is on par with modern air force doctrines as well. You will observe that once SAMs are eliminated by DEAD / SEAD, packages, then the ATO will generate missions which fall under the MaxFlymissionThreat category. Once you done that, save your mission.csv file and by using the missiondatutil tool, convert your .csv back to mission.dat
-
Go to falcon4.aii, and use the following values:
MaxFlymissionThreat=20
MaxFlymissionHighThreat=85
MaxFlymissionNoThreat=10
MinSeadescortThreat=15
MinAvoidThreat=12By having a MaxFlymissionThreat=20, all the missions in mission.dat which fall under this category (i.e. SWEEP missions) will have a low to medium ALR (Acceptable Risk Level). Thus, no more SWEEP flights in the MEZ of SAMs. It doesn’t make sense.
By changing the variable MinAvoidThreat from the default value of 40 to 12, the AI a/c will try to avoid more SAMs. Previously, they pretty much didn’t avoid any threat at all. By how far away the AI a/c will try to avoid the SAM, depends on the value Airpathmax. Currently, I am playing around with this variable to check if there is any tangible effect.
All the aforementioned values work perfectly in my EMF campaigns, given the EMF database. Play around with these values, but bare in mind that they should be close to the ones I provided.
EDIT #1
To elaborate a bit more on the threat values, the default code states the following:
ls = ScoreThreatFast (mis->tx, mis->ty, GetAltitudeLevel(MissionData[mis->mission].minalt*100), mis->who); hs = ScoreThreatFast (mis->tx, mis->ty, GetAltitudeLevel(MissionData[mis->mission].maxalt*100), mis->who); if (ls > MIN_SEADESCORT_THREAT || hs > MIN_SEADESCORT_THREAT) targetd |= NEED_SEAD; if (mis->priority > ATM_HIGH_PRIORITY && ls && hs) targetd |= NEED_SEAD; if (package_flags & AMIS_HIGHTHREAT) tar = MAX_FLYMISSION_HIGHTHREAT; else if (package_flags & AMIS_NOTHREAT) tar = MAX_FLYMISSION_NOTHREAT; else tar = MAX_FLYMISSION_THREAT; if (ls > tar && hs > tar) { if (ls > MAX_FLYMISSION_HIGHTHREAT && hs > MAX_FLYMISSION_HIGHTHREAT) return PRET_CANCELED;
The general idea here is that we must assign a TR value which lower than the minalt & maxalt of the mission types we want.
Nonetheless, as Mav-Jp and Dee-Jay stated, this kind of tweaking is for campaign & theater creators who know their stuff and want to introduce a more realistic risk factor into their campaigns.
-
-
Very, very good and interesting information. Wow.
-
Is there a way to set it different values for each side? Lets say, I want to model differently the way USAF fragged missions and the way the USSR. Or these values apply always to both sides equally?
-
Both sides.
-
Thanks for sharing Mystic.
If I ever edit another cam I hope I can remember where your info is. :thumb:
-
I feel I’ll immensely enjoy reading this. I kind of managed with what we had so far, but working on that is certainly of the biggest interest.
EDIT : hoping relevance survives to .34
-
Nevertheless very interesting.
Perhaps a dev gets interested on it and makes these entries specific for each side in the campaign. That would be a huge jump towards simulation of real operational doctrines in campaigns, I think. -
Interesting topic, even though I never work with campaigns myself.
Out of curiousity, and a bit of devil’s advocating:
-
Changing the values the way you did now, does that mean that the ATO will always ONLY task SEAD / Stealth Strike inside active GBADs areas? If so, how vulnerable are SEAD flights to enemy air threats if they don’t have an OCA to clear the airspace in front of them? (assuming the OCA will stop short of, and won’t enter the GBAD area, as per risk management)
-
Do SAMs have different threat values (i.e. SA-3 is a lower threat than an SA-10) or is that a fixed number? In case of the latter, how much does this impact the campaign flow if strike packages can only be tasked after SEAD has destroyed a GBAD in the area, while some aircraft should be more than capable to defend against the AD threat on their own, and still complete their strike objective?
-
-
+1 Eagle-Eye.
Altering as you say will create “also” suicide missions.
U will send SEAD and SSTritke undefended. The red side will not have threat on their territory so they will be up and waiting for u in the skies. -
From what I have heard / read, this is often the case for the SEAD missions who are leading the whole package.
The SEAD escort might be behind IRL, but even then, the SEAD takes the main risk.As for Stealth strikes, of course they are undefended, like the F-117 were above Bagdad.
-
Gold post of the year.
-
Wow, precious information shared here, thank you so much, Mystic!!
I’m messing around with new campaigns for POH Theater and this info comes in the perfect timing.Thumbs up, thank you Sir!
-
From what I have heard / read, this is often the case for the SEAD missions who are leading the whole package.
The SEAD escort might be behind IRL, but even then, the SEAD takes the main risk.As for Stealth strikes, of course they are undefended, like the F-117 were above Bagdad.
Least risk. Different readings of the situation, also. 2D, sweep goes through like a charm, even SA10. 3D, slaughter. Real life, I don’t know, not relevant. Escort jammers? Not sure it follows very sophisticated tactics as default.
The ATO frags regardless of 2D or 3D, of course. I prefer the idea of fragging stuff that is relevant to 3D, they usually work in 2D too. That’s what Mystic proposes IMHO. Sweep in SAM dies or is useless, SEAD ahead of escort can survive and still operate.
-
Thx Mystic, in my name and Dado. This is very , very usefull information for camp building.
-
Very cool info, thanks!
-
Honestly, sticky for campaign creators…
Many thanks as I was just starting working on a Baltic campaign update!
Cheers
-
Make it sticky please, a pdf version to download.
-
Hi!
Be extremely carefully when “playing” with this. IIRC, some Flags behaviors has been modified. Some options has critical consequences … could be much more than what you can witness once in game.
If you like to play with it, try do modify as less as possible, especially the flags. -
Is there any chance that composition of package will alter threat calculation? For example package without SEAD or jamming escort will consider threat too high but package with will not?
Or maybe have package types that will accept high risk environment absolutely requires SEAD/JAM in composition?
-
Deejay,
Science progressed thanks to experiments and taken risks.
Maybe BMS can actually benefit from trials of the community.
I am willing to push the boundaries a bit further on an online server to check how stable it is…Cheers
PS: there are pieces of c code for FF that actually explain the flags and help on the understanding…