Making Missions
Making Missions for FPArma
WORK IN PROGRESS
Overview
Quick Links:
Foreword
The reason why this mission making tutorial exists is two fold.
The first reason lies in the fact that with the changes of the rules that we’ve imposed over the community, particularly the somewhat stringent testing requirements and commentaries, as well as the paradoxical relaxing of standards for sundays, we’ve effectively caused some degree of confusion on what we consider “sunday-appropriate” and what we consider viable to play at all.
The second reason is that I feel like I’ve personally failed with the original mission making seminar. At its heart the advice given was in good faith, but in the long term I feel like it has given poor directions and not explained enough of mission making in depth to rookie mission makers, relying too much on a rudimentary framework and rudimentary practices, some of which are generally frowned upon nowadays. A particularly big problem was the lack of optimization and an overreliance on zeusing, instead of relying on tougher automation of enemies.
By learning the chapters outlined on this wiki page you will master the skills required to craft a mission that can by all accounts be vetted for the Sunday prime-time slot, or really for any other time slot that you find appropriate or your heart desires. Not only will you create one through these guidelines, but in doing so we will add another mission to the lineup for future play.
Development environment setup
For the purposes of optimal mission making you will need to install a code editor or two. I personally recommend installing: Visual Studio Code w/ SQF Language & SQF Wiki extensions https://code.visualstudio.com/ Further recommended addons for VSCode are: https://marketplace.visualstudio.com/items?itemName=Armitxes.sqf
If you are scared by Visual Studio Code you can opt in to use the far more rudimentary Notepad++
After this, you should set this as your launch parameters in Swifty or launcher of choice: -noSplash -skipIntro -noPause -showScriptErrors
The ShowScriptErrors flag is essential for any work on mission making. More on that later.
Ensure that you are running in a way that you can easily access the code editors, e.g. windowed or fullscreen windowed. You may also want to turn your settings down to save on performance.
For the power user, you may also download Arma 3 Tools from Steam for tools like Texview, which let you generate .paa images that can be put in the game.
Finally, disable optional / client side mods. This is so we don’t need to mess with removing dependencies our mission file may have assigned further down the line.
With that being said, if all the software is installed, you’re good to go.
Eden Editor Basics
Click on the editor and load up a map of your choice. It can be any map you’d wish, really. And then AHHH! It’s so scary, my camera is hovering and what is going on?
Don’t worry, let's go through this really quickly. First of all, WASD moves you around. Shift makes you go fast. Right click pans the camera.
Top left covers everything you’ll need. You’ve got:
- Scenario tab which you use to save load and export the mission.
- Edit tab, which consolidates the transformation widgets, grid options, object snapping, and asset categories
- View tab, which toggles UI, map textures, night vision, foliage, labels, and night lamp
- Tools, which is scary and has the debug console, func viewer, config viewer, and camera
- Settings, which is just the settings menu really
- Play, which starts your mission, and
- Help, which has useful links to the BI wiki.
On the right side, you have the context panel listing a bunch of units. These can be shifted with the function keys or by clicking on them.
Now, pick a side, pick a soldier, and plop him down. Great, you can see him and his collision box, but more importantly… You see his class name. Every object in the game has a class name. You use these while programming. Case sensitive, so don’t mess that up. You can also copy the object's position and even class name in the following menu.
Right click on our guy and you get the pop up menu. Quite a lot of buttons, but you should only focus on a couple.
- Connect links a guy to a trigger, module, or group.
- Find in Config directs you to his config class.
- Edit loadout opens the ACE / vanilla arsenals.
- Attributes opens the attribute menu.
- Log is for copying location or class name directly to clipboard.
Open the attribute menu, and hey, you’ve got some pretty good stuff there. You’re going to be staring at this bad boy for the better part of a day.
Let’s cover some of its contents: Variable name is the unique name it has assigned Init field runs code when object is loaded at start Role assigns the unit status and name Special states set its dynsim status, as well as if it is simulated or visible, or damage enabled. ACE options determine special values, like if the unit is an engineer, a medic, wears handcuffs, etc. You should research these values before putting them to use.
The other properties you do not need to particularly pay attention to.
Select our guy, set his variable as gameMaster and name him “Zeus”. Add a game master module from the F5 (module) menu, set owner as gameMaster. Select “All addons (including unofficial ones)” else you will not see any ZEN or mod modules. Repeat this with #adminLogged and #adminVoted.
Bohemia Wiki
As stated earlier, the Bohemia Wiki ( https://community.bistudio.com/wiki/Main_Page ) is the most important resource that you will have to utilize throughout all your time spent mission making, modding, and developing content for Arma 3. There is nothing else that gives you such an expansive array of understanding as this wiki. Besides the useful links accessible via homepage, you can also use the search bar to navigate everything you need. One warning tho, this wiki sometimes has bogus information in it, its content populated by mostly players which do not have access to Arma’s engine.
Some useful BI Wiki URLs: https://community.bistudio.com/wiki/Category:Scripting_Commands_by_Functionality https://community.bistudio.com/wiki/Description.ext https://community.bistudio.com/wiki/Multiplayer_Scripting https://community.bistudio.com/wiki/Event_Scripts https://community.bistudio.com/wiki/Code_Optimisation
Mission Configuration
With your Zeus unit now placed down in the mission, you can freely press ctrl + S to save and thus generate a new mission folder in your working directory. In most cases, the mission directory will be in your other profiles folder, something like this:
C:\Users\User\Documents\Arma 3\missions
Or if you have created a new profile in the main menu:
C:\Users\User\Documents\Arma 3 - Other Profiles\Name\missions
Open that sucker up and open your mission folder. Inside, you’ll find a lone file, mission.sqm.
Now, mission.sqm contains all the data you generate in the editor, but we do not want to put all data inside the editor. Things like loadouts, objective logic, spawners, and most important of all, mission configuration, should be tweaked and set inside mission files instead. Why don’t we want the mission configuration in the sqm? That one is simple, if you intend to make another mission, you can copy paste those configuration files just easily over, no need to go through the whole configuration part in the editor again.
The core vanilla configuration parameters are set inside description.ext. Create a new file called that in the same location as mission.sqm.
While you can see the full list of things you can set in description.ext on the BI wiki, let’s focus on the most rudimentary settings instead:
//heading class Header { gameType = Coop; minPlayers = 1; maxPlayers = 99; }; disabledAI = 1; //title params onLoadName = "Mission loading name"; onLoadMission= "Mission loading description"; briefingName = "Briefing"; author = "Croguy";
The header (which is optional but is OK to put in there because the server will complain otherwise) sets your game type and player count permitted. disabledAI is a flag which forces AI playable slots to disappear during multiplayer. 0 is disabled and default, 1 is enabled.
Title parameters are used to set your mission name and loading screen information, as well as your authorship.
While these settings are really the most basic values you need, there’s also some others that you should set in as default values in description.ext. They are listed below, add them to your description.ext.
//MISSION SETTINGS respawnTemplates[] = {"Base"}; respawnDelay = 2; respawnDialog = 0; respawnOnStart = 0; respawn = "BASE"; joinUnassigned = 1; //DEBUG enableDebugConsole = 1; enableTargetDebug = 1; allowFunctionsLog = 0; //CLEANUP corpseManagerMode = 1; corpseLimit = 20; corpseRemovalMinTime = 300; corpseRemovalMaxTime = 600; wreckManagerMode = 1; wreckLimit = 10; wreckRemovalMinTime = 300; wreckRemovalMaxTime = 1200;
You can read more about them and their importance on the description.ext page. Another important thing that description.ext allows is the possibility to add new classes. More on that later.
Keep description.ext in your mind throughout this tutorial, as crucial data will be added to it later.
Finally, open up your systems tab and add a Headless Client. Give it a unique variable name HC, and make it playable. This will allow our server’s Headless Client to get into the slot and manage any AI behavior it is required to do. More on that also later.
Mission Making Basics for 100% Beginners
-Figuring out your idea, Fleshing out the details -overview of the file structure -links to good sqf resources -opening other missions to see -caching units & Optimization -setting up briefing -using pictures in briefing and marker triggers -Making Loadouts (Picture guide?) -Making objectives (Multiple Ways) -Respawn systems and how to set them up (Time Based, Objective Based, Rolling Respawn) -Difficulty balancing
Using the Template
* FPArma Template -how to build off of the template
Advanced Mission Making
-Using HC Effectively & Server AI