Using the magic of Lua scripting, MBot has crafted a dynamic campaign experience for DCS World MiG-21bis fliers in Guardians of the Caucasus. That’s right, a dynamic campaign has finally come to DCS World. Using his 1337 HAX0R skillz, MBot has crafted a concoction of scripts that attempts to deliver a persistent experience to both the single player and multiplayer environments. Per pakfront’s request in our forums, I decided to give it a shot.
Guardians of the Caucasus
The DCS World MiG-21bis module by Leatherneck Simulations is an amazing module by just about any standard: their product is visually beautiful, rich in system details, sports a satisfying learning curve, and is a pure joy to fly. Hamstrung by the limited range and field of view of the MiG-21bis’ Сапфнр radar and the frustratingly ineffective GCI tools available to the DCS World player, the MiG-21bis finds itself frequently placed in air-to-ground roles in DCS World where it does surprisingly well, even considering its limited payload and endurance.
Missions like MBot’s put the MiG-21bis back into its rightful place as an interceptor, filling a much-needed niche in air combat. Although I’m excited to see missions focused around the base nature of this aircraft, it only takes a few minutes in the air to remind myself of how frustrating the experience can be without the proper support: the lack of decent wingmen and effective AWACS or GCI really kills situational awareness. I’m embarrassed to admit I had to resort to taking snapshot glances at the F10 map to understand the true picture out there, and considered (only temporarily!) installing one of the various label mods floating around the forums. This lack of situational awareness greatly hampered my initial experiences in this mission, but reflects on my own skills and the tools available in DCS, rather than any fault with the mission design.
Some users reported playing the mission in multiplayer with a human player acting as a GCI. This would be a much more ideal experience than playing the single-player, as I did, so keep that in mind as you read my impressions.
Way of the Genius
The concept behind this approach to a dynamic campaign is that all the elements in a mission file (units, triggers, etc.) are represented by lines of code. If, after the conclusion of a mission, the file’s code is updated to reflect losses incurred during the mission and altered to model resupply/redeployment, the effect is to maintain a persistent battlefield between missions, aka a dynamic campaign. All these functions and script-goodness are packed into the single mission file which you can get from the DCS Forums.
The experience is almost mod-free, but it could be forgiven if the minor tweak required is overlooked. To serve the mission, or to play in single-player, MBot’s scripts do require a tiny little modification that essentially is a workaround to the default DCS World script handlers. These handlers deliberately block the kind of tomfoolery that MBot’s scripts are trying, to prevent malicious coders from causing damage to our systems through evilly designed scripts embedded in mission files. The modification is über simple: comment two lines in MissionScripting.lua and you’re done. This is clearly described in the included readme and on the forums, and is quite easily performed by any plain text editor. My gran could probably do it.
The system uses the radio F10 menu items for toggling a dynamically updated briefing and for saving off mission results at the end of the mission which has one interesting implication: if your pilot dies or ejects from your aircraft, you lose access to the F10 menu and essentially scrub the entire mission. Without having spent much (i.e., any) time looking at his code, I wonder whether mission code updates could be triggered on “Pilot Crash” or “Pilot Ejected” events, but this would also force players to accept the impact of a death or ejection, no matter the circumstances,. Mulligan-worthy errors like the ol’ cat-on-keyboard would tarnish your campaign and seriously strain your relationship with your cat. Maybe the current implementation is for the better.
The Back Story
Saying the scenario is well-described and well thought-out is a complete understatement, but it’s difficult to appreciate the amount of work that goes into crafting a detailed picture like what was accomplished here without actually trying to do one yourself. Rich details are found at every level of the mission design.
It’s April of 1980 – the same month and year that Iron Maiden debuted with their self-titled album, Iron Maiden – Georgia is still Russia and Russia is still best enemies with NATO. Russia started an offensive in western Europe and now NATO is fighting back, which includes a plan to invade Soviet-held Georgia. With 13 days to go to their big day, NATO is beginning airstrikes on the region to soften it up for the advance of their ground troops. As a member of the 982nd Fighter Aviation Regiment, it’s your job to fly and fight your MiG-21bis against the imperialistic scum invading your homeland. За Родину!
Whether or not you decide to play this mission, please take a moment to read carefully through the briefing screens at least once. While it doesn’t contain any critical information that you simply can’t fly without, the attention to detail at the global level really shows the amount of sweat, blood, tears, and love that was poured into this project. It’s hard to fail at a project when you care about it this much.
Let’s DO THIS!
My first hop into the mission gives me a selection of six different MiG-21bis aircraft. The aircraft are each named by serial number and callsign and it’s a pity that the scripts can’t take into account single-player aircraft losses. It would be a nice touch to crash in 704 and see that serial number vanish from the list in future missions.
A few seconds after taking to the cold cockpit (Yay for cold starts!), a big text box pops up with a current status of the campaign and a brief briefing. Given the scripts are limited to a text box, the amount of information is impressive, but still short of the fully detailed brief that would really be appreciated. Items like my current loadout, friendly flights, support assets, etc. are sorely missed, while information like the friendly and enemy orders of battle really help soak in the bigger picture. The current picture isn’t good – 90 F-4s and F-5s against 36 MiG-21s of our beloved 982nd IAP – but I’m hoping the home field advantage coupled with Russian spirit (the enthusiasm, not the vodka) will give us the upper hand.
Today’s mission is a scramble intercept against an incoming strike package that is 18 minutes out and consists of 16 aircraft. I contemplate the fact that in a real situation, the estimate of the number of target may not even be correct – could MBot have modeled this intelligence uncertainty into the briefing?
After soaking in the briefing details, jotting down some notes, and taking a swig of enthusiasm, I cold start my MiG-21bis (did I say I love cold starts? I love cold starts.) and taxi to the active runway.
Vaziani is a battle-hardened combat airfield and I weave around hardened hangars and 3 meter revetments as I work my way to the active runway. The thunder of afterburners filters through my cockpit, letting me know that other aircraft are on their way to intercept the invaders. Holding at the active for my takeoff clearance, I spot a pair of contrails high in the sky, and hope those are our aircraft heading outbound and not early guests.
Takeoffs in the MiG-21bis are always thrilling – I smoothly lift off, clean up my configuration, and then switch to the AWACS frequency (READ YOUR BRIEFING) for the current picture.
This is where the DCS implementation of AI fails. The tactical radio channel is dual-use for both AI MiG-21bis flights and AWACS, so it is simply saturated with status calls. Although the AI pilots use decent brevity codes, the amount of time it takes to transmit each trivial status updates swamps the airwaves, and it’s impossible to get a decent report from AWACS.
When the report finally breaks out of the logjam of bullseye reports, it’s not immediately helpful – just a long list of groups, bearings, altitudes, and relative bearings – and I get frustrated with my inability to understand the situation. Are these the current statuses, or the status when I asked for it five minutes ago? Which groups are the strike aircraft? Which are the fighters? Where should I go in all this? Parsing all this data on the fly in a combat situation takes some practice, and I just don’t have it yet!
Chalking it up to just a poorly organized party, I pick one of the hot threats at high altitude and zoom climb to intercept it, head on. This is just one of many mistakes I make in the execution of this mission.
Spotting the contrails of my prey, I dump my external tank and, exactly 8 seconds later, explode into a ball of flame and debris.
An inspection of the F10 map (the track turned out to be useless – deviates from actual before I even lift off the runway) reveals a gaggle of F4s had intercepted my interception and had rammed an AIM-7 Sparrow down my throat while I blindly marched off towards the other flight. How did I miss them? A review of my screenshots/track shows that I had muted the RWR and forgot to turn it back up, but terrible situational awareness was the real culprit here. The posthumous debriefing included lots of pointers and research into how to better maintain SA. The DCS forums are a decent resource for these kinds of tips, although you have to dig for them. If only somebody would concatenate them all into one nice convenient summary, like an article…
My second attempt (still registers as Mission 1, since the mission where I died wasn’t recorded) was thwarted by a UAZ that decided to park on the taxiway in front of my hangar. After waiting a few minutes for him to move (no radio F10 option for “GET OUT DA WAY“), I decide to taxi around him and get my nosewheel mired in that infamous Russian muck, aka Sergei’s Superglue. Not even full afterburner will move me. I thought this bug was fixed in an earlier version of DCS World, but looks like patches of the supernatural goo are still lurking around the terrain.
Off to attempt #3 (“Mission 1, Take 3” has a nice ring to it). The good news is I get to practice my cold start three times! Did I mention I’m crazy about cold starts? Interestingly, my tasking changes from the previous two (are the missions truly randomly generated, and I just got lucky the first two times?): still an incoming strike package, but the heading is slightly different and now there are 18 inbound enemy aircraft.
This time during my taxi I spot several groups of infantrymen marching double-time along the taxiways. It’s 10:00, hardly time for PT, what in the world could these guys be doing? Whatever their reason for taking a quick jaunt around the airbase during an incoming strike, I appreciate the attempt by the mission designer to liven up the environment with some AI activity – even more so that this ambiance was more than likely RANDOMLY GENERATED. Somebody had to think up that code, implement it, and then test it. Hats off to you, sir/madam.
On that topic, it’s important to note that these missions are chock full of background details like the marching infantry. In addition to the fighter jets preparing to sortie with you, there are parked jets, transport aircraft, and ground vehicles moving around the usually sterile world. I buzzed an early warning radar site and wondered how its location was affected by MBot’s scripts. Would it relocate mission to mission? If destroyed, would another respawn, but in another location? It was great to see these details in the mission (except for that one dang UAZ).
Just as before, other AI MiG-21bis are busy converting jet fuel to raw noise on the runway as I taxi out.
Just before the runway threshold, an AI MiG-21bis pulls out right in front of me. Had he pulled out a few seconds later there would have been an accident. Another risk of DCS World AI and the AI ATC – taxi instructions mean nothing.
I follow the MiG to the runway, takeoff behind him with the intent to follow him into the fray, but I lose him in the clouds and am once again on my own. This time I hold back near the airfield (and SAM defenses!) until I spot an opportunity. An enemy flight of 4 takes a few SAM hits, vaporizing one plane and letting the smoke out of another. The entire formation turns tail, but the one wounded scoundrel capitalistic dog limps home. (If you’re wondering how I know this, at this point I got sick and tired of the AWACS and wingman chatter and started taking quick glances at the F10 map to give myself my own AWACS/GCI. I have no shame.). I leap after the easy kill.
By the time I can close with the wounded bird, he’s taken out by a friendly MiG, but I’m closing on the other two F4s. My IR missiles won’t lock (switch issues are a common failure mode for me in my MiG-21bis) so I switch to guns and send tracers over the head of tail-end Charlie. He goes vertical with me hot on his heels and we start our little dance – up, down, and around and back again.
As I’m locked in battle with my foe, fireballs in the sky around me remind me I’m just a part of much bigger air battle.
During the maneuvering, I correct my switch error, lag turn outside my prey to set up the missile shot, and stuff an R-13 up his tailpipes. Kill for Einstein! I try to chase down the other F4 but he’s long gone. With 2000 L of fuel left, I probably have the legs to chase him down, but why ruin the chance to land with a kill?
My return to base is mostly uneventful – the hulk of a MiG-21bis is burning just outside the approach of runway 32, and I’m distracted long enough to make a heavy landing that damages my main gear. I bring the aircraft to a safe enough stop and exit the mission via the Radio>F10 key to save my results.
My first mission results in a kill and only non-lethal self-inflicted damage! Not bad for a noob, eh? Ура!
A review of the debrief shows I didn’t get credit for that kill. Was it damaged by another MiG? Did I not really kill it? I’m confused by the results, but still very happy with the experience.
But What Happens Next?
After I exit the mission, I exit back to the DCS main menu, go right back to Mission, and select the same mission file. It loads the same way, I pick my plane, and then I see the updated mission brief. This mission is labeled “Mission 2, Day 1” as it takes place later in the same day: 1903h (7:03 PM for us Yanks, or just after dinner and right at the start of Adventure Time), but you can see that the order of battle has been updated with the results of the previous mission. Very cool.
During start-up for this mission, another UAZ rolls across my bunker and I gesture obscenely at him to ensure he doesn’t park in front of me. He must have called his bigger brother because during my taxi to the active a fuel truck turns on the taxiway ahead of me and turns into me. With no turnouts between us, I try to squeeze to one side of the taxiway, but my wing catches his cab, flinging me around. My external screenshots didn’t survive the non-fatal incident, but I caught the perpetrator high-tailing it with a screen grab from my dash cam. The investigation is pending.
I’m only a few missions into the experience but I already have two conclusions:
1) MBot has done an excellent job in both campaign design, and creating a system that captured details of missions to affect future missions. The depth of details and continuity of the missions shows an amazing focus and commitment to excellence. While I think there’s still some tweaking that can be done, this mission is an excellent demonstration that there is real promise in the technology MBot has chosen to implement his vision.
2) Limitations inherent in the DCS World engine and interface will be a massive obstacle for any third-party developed dynamic campaign tools. Unfortunately, not only are current limitations affecting developers like MBot, but the Eagle team is still busy UPDATING the DCS World product to incorporate new features. Maybe it’s a cynical view, but it’s only a matter of time before these changes unintentionally breaks a deployed version of the dynamic campaign tools and players will either be forced to roll-back their DCS World installation or patiently wait while folks like MBot scramble to make changes in their free time. We’ve seen this time and time again in this community – it’s an inevitability, not an “off-chance”.
I am excited to see a real attempt at a persistent DCS World campaign where your performance affects future missions in a more palatable way than the current DCS World campaign system allows, but I’m skeptical that we’ll see a system flourish without much more involved participation with the developers at ED.
Folks in our good community might be quick to point fingers at Eagle Dynamics for the continual breaks in progress – others might blame the third-party developers for not reacting to changes thoroughly or quickly enough, but the truth is that both sides are managing a moving target. Without serious and dedicated cooperation, neither side will stay synchronized for long. I want new and exciting mission designs that don’t break with every update, but I want a frequently updated simulation engine as well. It’s an incredibly delicate balance.
As for me, I’m going to do my best to enjoy this dynamic campaign while I can, but I won’t be completely surprised when an update breaks it – I’ll just be looking for the next amazing thing to come out of this community.