Firing Drills – Arma 3
Jump to navigation
Jump to search
m (Added CfgFiringDrills section) |
Lou Montana (talk | contribs) m (Add magazinesCompetitor[] = { "16Rnd_9x21_Mag" } on "OPSEC" Discord user request) |
||
Line 1: | Line 1: | ||
{{SideTOC}} | |||
{{Cfg ref|abc}} | {{Cfg ref|abc}} | ||
This guide will describe how to design and implement a custom Firing Drill Challenge as available in the vanilla game. | This guide will describe how to design and implement a custom Firing Drill Challenge as available in the vanilla game. | ||
Line 9: | Line 7: | ||
{{wip}} | {{wip}} | ||
= Terminology = | |||
* '''Firing Drill (FD)''' - a live-fire exercise in which a competitor is graded for tactically moving through a course while engaging a set of targets | * '''Firing Drill (FD)''' - a live-fire exercise in which a competitor is graded for tactically moving through a course while engaging a set of targets | ||
* '''Competitor''' - the actor performing the drill | * '''Competitor''' - the actor performing the drill | ||
Line 36: | Line 33: | ||
= Setup = | |||
{{Important|At time of writing it is not possible to add new Firing Drills as independent (Workshop) scenarios; they need to be added as 'mods' with configuration.}} | {{Important|At time of writing it is not possible to add new Firing Drills as independent (Workshop) scenarios; they need to be added as 'mods' with configuration.}} | ||
# Insert a player character named {{Inline code|BIS_FD_Competitor}} {{cc|Fixed system name}} | # Insert a player character named {{Inline code|BIS_FD_Competitor}} {{cc|Fixed system name}} | ||
Line 74: | Line 70: | ||
== Moving Targets == | == Moving Targets == | ||
== Randomized Targets == | == Randomized Targets == | ||
== Common Additions == | == Common Additions == | ||
* CP marking objects | * CP marking objects | ||
** Recolored objects | ** Recolored objects | ||
Line 81: | Line 81: | ||
* Ammunition containers | * Ammunition containers | ||
* Decorative props / sponsoring | * Decorative props / sponsoring | ||
= Configuration = | = Configuration = | ||
== CfgFiringDrills == | == CfgFiringDrills == | ||
=== Drill === | === Drill === | ||
<syntaxhighlight lang="cpp"> | <syntaxhighlight lang="cpp"> | ||
class MyFirstFiringDrill //This class name must correspond to the missionName (also CfgMissions class) | class MyFirstFiringDrill // This class name must correspond to the missionName (also CfgMissions class) | ||
{ | { | ||
displayName = "CoF: My First Drill"; //Vanilla drills use a format like this, but it's not enforced | displayName = "CoF: My First Drill"; // Vanilla drills use a format like this, but it's not enforced | ||
//This color is used in many places | // This color is used in many places | ||
//It can be any color, but for best results pick a fully supported color (see section below) | // It can be any color, but for best results pick a fully supported color (see section below) | ||
color[] = {__EVAL(177/255), __EVAL(51/255), __EVAL(57/255), 1}; | color[] = { __EVAL(177/255), __EVAL(51/255), __EVAL(57/255), 1 }; | ||
colorName = "red"; //This version of the color is more restrictive and can only use specific supported colors (see section below) | colorName = "red"; // This version of the color is more restrictive and can only use specific supported colors (see section below) | ||
objectCOF = "BIS_FD_COF"; //The CoF trigger referenced in the setup guide | objectCOF = "BIS_FD_COF"; // The CoF trigger referenced in the setup guide | ||
//statistic = ""; //Steam stats are not supported for user-generated drills (used for Achievements) | // statistic = ""; // Steam stats are not supported for user-generated drills (used for Achievements) | ||
onReset = "reset.sqf"; //This script is executed each time the drill resets (restarts) | onReset = "reset.sqf"; // This script is executed each time the drill resets (restarts) | ||
//leaderboard = ""; //Steam Leaderboards are not supported for user-generated drills | // leaderboard = ""; // Steam Leaderboards are not supported for user-generated drills | ||
//List any number of objects that you want to be re-colored to the drill color above (f.e. road cones, small flags, etc.) | // List any number of objects that you want to be re-colored to the drill color above (f.e. road cones, small flags, etc.) | ||
recolor[] = | recolor[] = | ||
{ | { | ||
Line 105: | Line 110: | ||
}; | }; | ||
//Set up objects that should have special decal textures applied (this was more useful before Eden Editor - see vanilla decals below) | // Set up objects that should have special decal textures applied (this was more useful before Eden Editor - see vanilla decals below) | ||
//In vanilla drills these are often graffiti on wooden shoot house walls | // In vanilla drills these are often graffiti on wooden shoot house walls | ||
decals[] = | decals[] = | ||
{ | { | ||
{"BIS_FD_decal1", "A3\Missions_F_Beta\data\img\decals\decal_sidearm1_ca", 5} //Object reference, texture path, hidden selection index | { "BIS_FD_decal1", "A3\Missions_F_Beta\data\img\decals\decal_sidearm1_ca", 5 } // Object reference, texture path, hidden selection index | ||
}; | }; | ||
//Object references to the 4 special targets for drill mechanics, as defined in the setup guide | // Object references to the 4 special targets for drill mechanics, as defined in the setup guide | ||
ruleSelectors[] = | ruleSelectors[] = | ||
{ | { | ||
Line 118: | Line 123: | ||
"BIS_FD_ruleSelector2" | "BIS_FD_ruleSelector2" | ||
}; | }; | ||
restartSelectors[] = {"BIS_FD_restartSelector1"}; | restartSelectors[] = { "BIS_FD_restartSelector1" }; | ||
quitSelectors[] = {"BIS_FD_quitSelector1"}; | quitSelectors[] = { "BIS_FD_quitSelector1" }; | ||
containersWeapons[] = {"BIS_weaponsFD1"}; //All containers that should be filled with the drill weapons | containersWeapons[] = { "BIS_weaponsFD1" }; // All containers that should be filled with the drill weapons | ||
containersMagazines[] = {"BIS_ammoFD1_1", "BIS_ammoFD1_2", "BIS_ammoFD1_3", "BIS_ammoFD1_4"}; //All containers that should be filled with the drill ammunition | containersMagazines[] = { "BIS_ammoFD1_1", "BIS_ammoFD1_2", "BIS_ammoFD1_3", "BIS_ammoFD1_4" }; // All containers that should be filled with the drill ammunition | ||
containersMagazinesCount[] = {10, 10}; //The count of magazines of each type in the containers | containersMagazinesCount[] = { 10, 10 }; // The count of magazines of each type in the containers | ||
weapons[] = {"SMG_02_ACO_F", "hgun_Rook40_F"}; //The legal weapons for this drill | weapons[] = { "SMG_02_ACO_F", "hgun_Rook40_F" }; // The legal weapons for this drill | ||
magazines[] = {"30Rnd_9x21_Mag", "16Rnd_9x21_Mag"}; //The legal magazines for this drill | magazines[] = { "30Rnd_9x21_Mag", "16Rnd_9x21_Mag" }; // The legal magazines for this drill | ||
weaponsCompetitor[] = {"SMG_02_ACO_F", "hgun_Rook40_F"}; //The starting weapons for the competitor | weaponsCompetitor[] = { "SMG_02_ACO_F", "hgun_Rook40_F" }; // The starting weapons for the competitor | ||
magazinesCompetitorCount = 6; //The starting magazine count per weapon for the competitor | magazinesCompetitor[] = { "16Rnd_9x21_Mag" }; // starting magazines | ||
magazinesCompetitorCount = 6; // The starting magazine count per weapon for the competitor | |||
timesMedals[] = {60, 45, 30}; //Bronze, silver, gold medal times (be sure to follow this order or results may glitch) | timesMedals[] = { 60, 45, 30 }; // Bronze, silver, gold medal times (be sure to follow this order or results may glitch) | ||
timeSpecial = 15; //Optional special time that is faster than gold (when defining this, you do need to also provide the data below) | timeSpecial = 15; // Optional special time that is faster than gold (when defining this, you do need to also provide the data below) | ||
nameSpecial = "Nemisis"; //Optional special time label for the HUD | nameSpecial = "Nemisis"; // Optional special time label for the HUD | ||
colorSpecial = "#ffa500"; //Optional special time color for the HUD | colorSpecial = "#ffa500"; // Optional special time color for the HUD | ||
iconSpecial = "\A3\Ui_f\data\GUI\Cfg\Ranks\colonel_gs"; //Optional special time icon for the HUD | iconSpecial = "\A3\Ui_f\data\GUI\Cfg\Ranks\colonel_gs"; // Optional special time icon for the HUD | ||
//Rule-set parameters for competitive and training | // Rule-set parameters for competitive and training | ||
//All vanilla drills use these same settings | // All vanilla drills use these same settings | ||
//It is possible to tweak these values, but that will likely create confusion for players! | // It is possible to tweak these values, but that will likely create confusion for players! | ||
class RuleSets | class RuleSets | ||
{ | { | ||
//CP mode: 1 - CPs on but targets don't need shooting / 2 - CPs on and all non-optional targets need shooting | // CP mode: 1 - CPs on but targets don't need shooting / 2 - CPs on and all non-optional targets need shooting | ||
//Target randomization: rule not used - ignored | // Target randomization: rule not used - ignored | ||
//Weapons used: 1 - any weapon can be used everywhere / 2 - CPs may define a required weapon (or incur a time penalty) | // Weapons used: 1 - any weapon can be used everywhere / 2 - CPs may define a required weapon (or incur a time penalty) | ||
//Shooting boxes: 1 - shooting boxes in CPs are ignored / 2 - shooting boxes in CPs are forced (shooting outside of them incurs a time penalty) | // Shooting boxes: 1 - shooting boxes in CPs are ignored / 2 - shooting boxes in CPs are forced (shooting outside of them incurs a time penalty) | ||
//Stances used: 1 - any stance can be used everywhere / 2 - CPs may define a required stance (or incur a time penalty) | // Stances used: 1 - any stance can be used everywhere / 2 - CPs may define a required stance (or incur a time penalty) | ||
//Medals: 0 - medal times are not tracked / 1 - medal times are tracked and feedback is given | // Medals: 0 - medal times are not tracked / 1 - medal times are tracked and feedback is given | ||
competitive[] = {2, 0, 2, 2, 2, 1}; | competitive[] = { 2, 0, 2, 2, 2, 1 }; | ||
training[] = {1, 2, 1, 1, 1, 0}; | training[] = { 1, 2, 1, 1, 1, 0 }; | ||
}; | }; | ||
class DynOs {}; //Legacy class used before Eden Editor to load precise object compositions (should not be needed anymore) | class DynOs {}; // Legacy class used before Eden Editor to load precise object compositions (should not be needed anymore) | ||
//All of the drill's CPs | // All of the drill's CPs | ||
class CheckPoints | class CheckPoints | ||
{ | { | ||
class CP1 //Start | class CP1 // Start | ||
{ | { | ||
object = "BIS_FD_CP1"; //The CP trigger referenced in the setup guide | object = "BIS_FD_CP1"; // The CP trigger referenced in the setup guide | ||
}; | }; | ||
class CP2 //CP #1 | class CP2 // CP #1 | ||
{ | { | ||
object = "BIS_FD_CP2"; | object = "BIS_FD_CP2"; | ||
}; | }; | ||
class CP3 //Finish | class CP3 // Finish | ||
{ | { | ||
object = "BIS_FD_CP3"; | object = "BIS_FD_CP3"; | ||
Line 173: | Line 179: | ||
=== System === | === System === | ||
== CfgMissions == | == CfgMissions == | ||
Line 180: | Line 187: | ||
= Run-Time Overrides = | |||
* TODO: Competitor weapons / magazines | * TODO: Competitor weapons / magazines | ||
= Colors = | |||
TODO | TODO | ||
= Decals = | = Decals = | ||
* TODO | |||
= Tips = | = Tips = | ||
* Vanilla CoFs are designed to be somewhat realistic and safe as a non-lethal competitive shooting training / sport. Try to imagine and implement range safety concerns in your target and prop placement. For example, don't place targets in a line of sight of the start, Range Officer, or other spectators. Generally try to solidly block off areas behind targets where possible. | * Vanilla CoFs are designed to be somewhat realistic and safe as a non-lethal competitive shooting training / sport. Try to imagine and implement range safety concerns in your target and prop placement. For example, don't place targets in a line of sight of the start, Range Officer, or other spectators. Generally try to solidly block off areas behind targets where possible. | ||
[[Category:Arma 3: Editing|Firing Drills]] |
Revision as of 23:09, 20 October 2020
Template:SideTOC Template:Cfg ref
This guide will describe how to design and implement a custom Firing Drill Challenge as available in the vanilla game.
See also: Arma 3 Field Manual - Firing Drills (for players) Template:wip
Terminology
- Firing Drill (FD) - a live-fire exercise in which a competitor is graded for tactically moving through a course while engaging a set of targets
- Competitor - the actor performing the drill
- Range Officer (RO) - the actor observing the drill and providing feedback / guidance
- Course of Fire (CoF) - the physical space and layout in which the drill is performed
- Checkpoint (CP) - a navigation point within a course which a competitor must follow in a fixed sequence (if so defined as a rule - see below)
- The first CP is the start.
- The last CP is the finish.
- A strict CP contains a shooting box (marked area) from which to fire.
- Target - an artificial object shot to complete a drill or to receive time bonuses
- Appearing targets appear and disappear based on activation triggers (see below).
- Accuracy targets contain zones corresponding to extra time bonuses.
- Moving targets travel on rails between positions.
- No-shoot targets are not allowed be hit (adding a time penalty).
- Bonus targets are optional (rewarding a time bonus).
- Rule - these help to determine the completion and scoring conditions for a drill
- Training rules - a rule-set allowing familiarization of the CoF (targets at CPs do not need to be shot to move on)
- Competitive rules - a rule-set used for Achievements / Leaderboards (targets at CPs need to be shot to move on)
- Time - the time from the start it takes to complete a drill (raw)
- Time bonuses / penalties are substracted / added to arrive at the final time.
- The fastest / lowest time is the best and wins.
- There are bronze, silver and gold medal times to beat.
- There may be one special time to beat (typically faster than gold).
Setup
- Insert a player character named
BIS_FD_Competitor
// Fixed system name - Insert a NPC Range Master character of type B_RangeMaster_F named
BIS_rangeOfficer
// Fixed system name - Insert a Firing Drill module
- It's not exposed in Eden Editor, so place any other module. We may change this after this documentation is completed.
- Save the scenario.
- Close Eden Editor to avoid auto-saves.
- Open the scenario SQM file in a text editor.
- Replace the module's class by ModuleFiringDrill_F.
- Save the SQM.
- Re-open the scenario in Eden Editor.
- Insert an ellipse trigger with default properties named f.e.
BIS_FD_COF
// Referenced later- Re-size the trigger to encompass your entire CoF and a little extra buffer area (you'll likely re-size it later as you progress).
- For each CP (including start and finish), insert a trigger with default properties named f.e.
BIS_FD_CP1
// Referenced later- Re-size the trigger to meet your CP activation expectations.
- Insert a Target - Oval (Ground) prop named
BIS_FD_ruleSelector1
// Referenced later- Using a similar workflow as above, manually change its class name to Land_Target_Oval_NoPop_F (all targets need their hidden NoPop variant).
- Position this target in comfortable shooting range / direction from the start CP (a few meters at most, oriented to be clearly visible and safe).
- In the target's Texture #0 field, enter:
A3\modules_f_beta\data\FiringDrills\training_gray_ca
// Other colors have corresponding textures - see below
- Copy and paste the first rule target and name it
BIS_FD_ruleSelector2
// Referenced later- Position it near the first rule target, typically right from it.
- In the target's Texture #0 field, enter:
A3\modules_f_beta\data\FiringDrills\competitive_gray_ca
// Other colors have corresponding textures - see below
- Copy and paste a rule target and name it
BIS_FD_restartSelector1
// Referenced later- Position it near the finish CP (a few meters from it, oriented to be clearly visible and safe).
- In the target's Texture #0 field, enter:
A3\modules_f_beta\data\FiringDrills\restart_gray_ca
// Other colors have corresponding textures - see below
- Copy and paste a rule target and name it
BIS_FD_quitSelector1
// Referenced later- Position it near the restart target, typically right from it.
- In the target's Texture #0 field, enter:
A3\modules_f_beta\data\FiringDrills\quit_ca
// Fixed texture no matter the drill color
- For each target at each CP, generally do the following (more specifics detailed below):
- Insert the desired target object named f.e.
BIS_FD_target2_1
// Referenced later (apply a logical naming pattern, such as numbering based on CP index and target index) - Using a similar workflow as above, manually replace its class name with the corresponding NoPop variant (see the look-up table below).
- Insert the desired target object named f.e.
- TODO: description.ext
- Configure your drill via CfgFiringDrills and CfgMissions (see below).
Moving Targets
Randomized Targets
Common Additions
- CP marking objects
- Recolored objects
- Start whiteboard
- Ammunition containers
- Decorative props / sponsoring
Configuration
CfgFiringDrills
Drill
class MyFirstFiringDrill // This class name must correspond to the missionName (also CfgMissions class)
{
displayName = "CoF: My First Drill"; // Vanilla drills use a format like this, but it's not enforced
// This color is used in many places
// It can be any color, but for best results pick a fully supported color (see section below)
color[] = { __EVAL(177/255), __EVAL(51/255), __EVAL(57/255), 1 };
colorName = "red"; // This version of the color is more restrictive and can only use specific supported colors (see section below)
objectCOF = "BIS_FD_COF"; // The CoF trigger referenced in the setup guide
// statistic = ""; // Steam stats are not supported for user-generated drills (used for Achievements)
onReset = "reset.sqf"; // This script is executed each time the drill resets (restarts)
// leaderboard = ""; // Steam Leaderboards are not supported for user-generated drills
// List any number of objects that you want to be re-colored to the drill color above (f.e. road cones, small flags, etc.)
recolor[] =
{
"BIS_FD_recolor1",
"BIS_FD_recolor2"
};
// Set up objects that should have special decal textures applied (this was more useful before Eden Editor - see vanilla decals below)
// In vanilla drills these are often graffiti on wooden shoot house walls
decals[] =
{
{ "BIS_FD_decal1", "A3\Missions_F_Beta\data\img\decals\decal_sidearm1_ca", 5 } // Object reference, texture path, hidden selection index
};
// Object references to the 4 special targets for drill mechanics, as defined in the setup guide
ruleSelectors[] =
{
"BIS_FD_ruleSelector1",
"BIS_FD_ruleSelector2"
};
restartSelectors[] = { "BIS_FD_restartSelector1" };
quitSelectors[] = { "BIS_FD_quitSelector1" };
containersWeapons[] = { "BIS_weaponsFD1" }; // All containers that should be filled with the drill weapons
containersMagazines[] = { "BIS_ammoFD1_1", "BIS_ammoFD1_2", "BIS_ammoFD1_3", "BIS_ammoFD1_4" }; // All containers that should be filled with the drill ammunition
containersMagazinesCount[] = { 10, 10 }; // The count of magazines of each type in the containers
weapons[] = { "SMG_02_ACO_F", "hgun_Rook40_F" }; // The legal weapons for this drill
magazines[] = { "30Rnd_9x21_Mag", "16Rnd_9x21_Mag" }; // The legal magazines for this drill
weaponsCompetitor[] = { "SMG_02_ACO_F", "hgun_Rook40_F" }; // The starting weapons for the competitor
magazinesCompetitor[] = { "16Rnd_9x21_Mag" }; // starting magazines
magazinesCompetitorCount = 6; // The starting magazine count per weapon for the competitor
timesMedals[] = { 60, 45, 30 }; // Bronze, silver, gold medal times (be sure to follow this order or results may glitch)
timeSpecial = 15; // Optional special time that is faster than gold (when defining this, you do need to also provide the data below)
nameSpecial = "Nemisis"; // Optional special time label for the HUD
colorSpecial = "#ffa500"; // Optional special time color for the HUD
iconSpecial = "\A3\Ui_f\data\GUI\Cfg\Ranks\colonel_gs"; // Optional special time icon for the HUD
// Rule-set parameters for competitive and training
// All vanilla drills use these same settings
// It is possible to tweak these values, but that will likely create confusion for players!
class RuleSets
{
// CP mode: 1 - CPs on but targets don't need shooting / 2 - CPs on and all non-optional targets need shooting
// Target randomization: rule not used - ignored
// Weapons used: 1 - any weapon can be used everywhere / 2 - CPs may define a required weapon (or incur a time penalty)
// Shooting boxes: 1 - shooting boxes in CPs are ignored / 2 - shooting boxes in CPs are forced (shooting outside of them incurs a time penalty)
// Stances used: 1 - any stance can be used everywhere / 2 - CPs may define a required stance (or incur a time penalty)
// Medals: 0 - medal times are not tracked / 1 - medal times are tracked and feedback is given
competitive[] = { 2, 0, 2, 2, 2, 1 };
training[] = { 1, 2, 1, 1, 1, 0 };
};
class DynOs {}; // Legacy class used before Eden Editor to load precise object compositions (should not be needed anymore)
// All of the drill's CPs
class CheckPoints
{
class CP1 // Start
{
object = "BIS_FD_CP1"; // The CP trigger referenced in the setup guide
};
class CP2 // CP #1
{
object = "BIS_FD_CP2";
};
class CP3 // Finish
{
object = "BIS_FD_CP3";
};
};
};
System
CfgMissions
Targets
Run-Time Overrides
- TODO: Competitor weapons / magazines
Colors
TODO
Decals
- TODO
Tips
- Vanilla CoFs are designed to be somewhat realistic and safe as a non-lethal competitive shooting training / sport. Try to imagine and implement range safety concerns in your target and prop placement. For example, don't place targets in a line of sight of the start, Range Officer, or other spectators. Generally try to solidly block off areas behind targets where possible.