Wiki
This wiki contains the documentation of the features of Crows Electronic Warfare mod for Arma3. Use the list on the left to find the information you need. It can also contain information for mission makers or scripters that wish to call certain functions directly from other mods, or disable certain features.
As documentation takes time to write, not everything will be documented immediately, but feel free to make pull-requests if you wish to expand or fix missing or lacking documentation!
For now ACRE is only supported for radio jamming and SATCOM. Radio tracking and listening to enemy radio transmissions are only available with TFAR.
Radio Chatter Module
The Radio Chatter module is used to "emulate" enemy radio communication for the AI. Put it on an AI and it will randomly within your defined parameters broadcast signal sources for the players to track. If a player listens to the signal a random voice line will be played to simulate you listening in to their comms.
Voicepacks are limited for now due to a lack of languages. Thanks to everyone that has contributed to the voice-packs or will do in the future!
Adding own voicepack to Radio Chatter module
Its possible to add your own pack of voicelines to the radio-chatter module. The easiest is to do it by adding it to a template of a particular mission. An example of a template with added sounds can be downloaded here.
Besides adding the .ogg
soundfiles to the template you need to do the following:
- Make an config file to include the sound in, in this example I call it:
CfgSoundsRadioChatter.hpp
.
Make sure to test and find a volume value for the sound that fits to not deafen people ingame! Its the db+12
parameter you can change to db+5
or db+16
to lower or raise the default volume of the sound
class CfgSounds
{
/// Voice lines
class tiger_growl // classname of the sound, needed for later
{
name = "tiger_growl";
sound[] = {"sounds\tiger_growl.ogg", db+12, 1};
titles[] = {};
};
class tiger_roar
{
name = "tiger_roar";
sound[] = {"sounds\tiger_roar.ogg", db+12, 1};
titles[] = {};
};
};
-
Add
#include "CfgSoundsRadioChatter.hpp"
(Or what you called the include file.) to thedescription.ext
file. -
Add the following to your
initPlayerLocal.sqf
file to register the new voicepack so the ingame module picks it up and lists it.
// registering custom radio chatter sounds
// [cfgSound class-name, length in secounds]
crowsEW_spectrum_voiceLinesAnimalList = [
["tiger_roar", 1.7],
["tiger_growl", 5.2]
];
// weighted array, so if you wanted some lines to be more rare than others you can change the weight per sound
crowsEW_spectrum_voiceLinesAnimalWeights = [
1,
1
];
// "tiger" is the internal name of the pack, use lowercase only, then array of the list and weights of the new pack, and at the end the the Display name for the pack, this one you can beautify as you want.
crowsEW_spectrum_voiceLinePacks set ["tiger", [crowsEW_spectrum_voiceLinesAnimalList, crowsEW_spectrum_voiceLinesAnimalWeights, "Tigers"]];
Spectrum device usage
The spectrum device is capable of tracking, listening and jamming depending on antenna and source. It can be used for various cases for tracking objects, jammers or units. It can also be used as a "detector" by setting the signal source range to like 0.5 meters.
Antennas
The spectrum device has three different antennas which covers different frequency ranges:
- Military Antenna: Frequencies from: 30-513 MHz. Used for detecting/listening to radio communication with TFAR or with the RadioChatter module put on AI. Also covers the 443-445 MHz frequency span that is emitted from jammable drones.
- Experimental Antenna: Frequencies from: 520-1090 MHz. Used to track signals set by zeus or trackers like C-Track.
- Jamming Antenna: Frequencies from: 433-445 MHz. Used to detect, track or jam drones/UGV. Jammers will also show up as a sweeping signal in this frequency.
Controls
left-mouse: Holding it down will activate either listening to a signal or the jammer depending on antenna type
scroll-wheel: Will move the selected frequencies around. Used to listen/jam the right signal.
middle-mouse: Clicking will zoom in and show the selected frequencies. Makes it easier to see if multiple signals are overlapping or right next to each other.
shift + middle-mouse: Resets the zoom to the frequencies visible to the equipped antenna.
CBA Settings
There is two CBA settings that influence what signals you can see. By default you will not see TFAR signals from same side as you, nor your own radio signals. However if you enable the Self-Tracking
setting, you will be able to see your own signals, however you need to also enable Track Friendly with Radio Tracking
setting to be able to see your own TFAR radio signal.
Enabling Track Friendly with Radio Tracking
will also make radio signals from your side show up. If they are shown you can also listen into them and hear their communication.
Listening
Using the experimental or military antenna on frequencies that belongs to drones or the RadioChatter module makes it play voice lines or sounds to simulate you listening to the radio/signal. If the strength is not enough you will hear garbled sound instead.
C-track
The C-track is a item players can carry in their backpacks and use to attach to an vehicle or themselfs and it will provide a spectrum tracking signal that can be followed with the Spectrum Device on the selected frequency. It makes it possible for players to set trackers without zeus using modules.
If ACE is loaded it will use the ACE Attach system to attach to vehicles or self, otherwise it will use base-game scroll-menu options.
TFAR Tracking
If TFAR is loaded and used by the players, Zeus can enable "Toggle Radio Tracking" by placing the module down and selecting enable or disable. When enabled whenever a player uses their short range or long-range radio, it will broadcast a spectrum signal on the frequency their radio use, with the range of that particular radio. By default the option to hide friendly radio signals are enabled. But that can be enabled in CBA settings on a per player basis, or per-server/mission basis.
Only tested with TFAR 1.0.0+ (aka. TFAR Beta). I would recommend using that version anyway as that is the current supported version and have been out for years. Also the version Dedman recommends.
Listening in
If the player using the Spectrum device also have the ICOM item in their backpack, then it will work as a second TFAR radio controlled by the spectrum antenna. So if they are tracking another players TFAR signal with enough signal-strength, then they can hold own left-mouse button and listen to the enemy transmission.
TFAR Tracking activated by script
If you want to enable/disable TFAR tracking by script, you can do it with the following code:
["crowsEW_spectrum_toggleRadioTracking", [true]] call CBA_fnc_globalEventJIP;
And changing true
to false
will disable it again.
["crowsEW_spectrum_toggleRadioTracking", [false]] call CBA_fnc_globalEventJIP;
Notes for Zeus & Mission Makers
- Frequencies will keep showing until either removed by zeus, object is deleted, or object is dead.
- Each frequency is unique, so if you use the same frequency twice, only the last entry will be shown.
- Remember you can hide/show the helping text for what units or objects have signals/sounds/jamming activated, with the keybind of
ctrl+shift+i
. (Keybind can be changed in controls). - The EMP will remove the active antenna on the spectrum device, but the spectrum device is "hardened" and will thus not be removed.
Disable spectrum code for mission makers
If you wish to disable the code controlling the Spectrum Device to use your own, then it can be disabled in addon settings or by setting crowsEW_spectrum_spectrumEnable = false;
Jammers
The jammer has the ability to jam drones or jam radio communication. The individual features are described in the subsections, while settings or features they have in common is described in this section.
The jammer can be placed on any object or unit. If placed on a position, it will spawn a data-terminal with base-game animation. Any object set as a jammer that is currently active will emit a 3D sound when players come close. Zeus can remove the sound with the remove sound
module if wanted. It has the limitation that only the closest jammer to a player will play the 3D sound for that player. So if 2 jammers are within hearing of a player only one will play the sound
The jammer stops automatically if the object is deleted or destroyed.
Players have the option to disable/enable the jammer with scroll-wheel action menu.
How to set the effect radius
Both the radio and drone jammer have the same way they calculate and apply the jamming effect. The area jammer has two settings that describes two different radii: The falloff
and effective
radius. The effective
radius describes the radius from the jammer object that radios or drones will be 100% jammed and completely unusuable. For drones any player operators will get disconnected, while for AI they will be halted.
The falloff
radius determines a radius describing the area from the edge of the effective
radius and outwards. In this area the jamming effect will be applied linear with 0% jamming at the outer border, 50% jamming effect halfway towards the edge of effectove
radius, and 100% jamming when reaching the effective
radius.
Due to difference in radio power, range and antenna gains, some radios like short-range might get fully jammed before reaching the effective
radius, while stronger long-range radios won't be jammed until getting all the way there
This should make it more clear and easier to apply for mission makers to get the behaviour they want. A screenshot showing it visually can be seen here:
Zeus Immunity and Map Markers
Zeus will not be radio jammed, but might not be able to hear TFAR players transmitting inside jamming area, if that player is totally jammed.
Zeus has two mapmarkers for each jammer. Outer one shows the falloff
radius, and the inner one shows the effective
radius. Thus zeus can see the position of all jammers and their area of effect. The markers will update if jammer is moved. If the jammer is active the falloff
marker will be yellow and the effective
radius will be red.
Zeus' immunity and the ability to see the map-markers of jammers can be disabled through CBA settings. By default zeus will see all jammers map-markers and be immune.
Zeus Context Actions - Toggle Jammer on/off
Zeus can toggle the jammer on and off with the ZEN right-click menu. If done on a jammer you will se a jammer
option and in that a Toggle On/Off
option. This makes it easy and quick for zeus to enable or disable jammers.
How to place such a jammer
Putting a jammer on an object already having a jammer will override the previous jammer. Each object can only have a single jammer.
A lot of antenna objects are not destructable and as such you cannot blow them up to destroy the jammer. If you want to be able to blow up the jammer with explosives or rockets make sure to use a destructable object or the default dataterminal the module can spawn.
Zeus interface
- Go to Modules in the right panel of the Zeus interface and search for "jam"
- Drag the
Set Jammer
module onto the map - Select the checkboxes for what you want to jam
3den
- Go to Modules in the right panel of the 3den interface and search for "jam"
- Drag the
Set Jammer
module onto the map - Select the checkboxes for what you want to jam
- Sync the object (3D model) you have chosen as the area denial jammer to the object you just placed on the map.
- Once done you should see a blue line between the 3D model and the jammer module.
Script
You can add jammers with the following scripts executed on a single client. (It updates for all clients automatically)
// _unit: object to set as jammer
// _radFalloff: radius for the falloff effect
// _radEffective: radius for the effective effect
// _isActiveAtMissionStart: should the jammer be enabled straight away
// _capabilities: Array of strings that sets if jammer works against radio and/or drones. Example: ["VoiceCommsJammer","DroneJammer"] for both.
["crowsEW_main_addJammer", [_unit, _radFalloff, _radEffective, _isActiveAtMissionStart, _capabilities]] call CBA_fnc_serverEvent;
Be advised that this does not handle adding the sound effect to the jammer. This has to be done manually if wanted same effect as when using the zeus/editor module:
// _unit: jammer object
// _isActiveAtMissionStart: bool that decides if sound effect is active from start
[getPosATL _unit, 50, "crowsEW_jam_start", 3] call EFUNC(sounds,playSoundPos);
["crowsEW_sounds_addSound", [_unit, 0.5, 50, true, true, "crowsEW_jam_loop", 3, 3]] call CBA_fnc_serverEvent;
["crowsEW_sounds_setSoundEnable", [_unit, _isActiveAtMissionStart]] call CBA_fnc_serverEvent;
Radio jamming
The mod currently supports jamming radios for TFAR and ACRE2.
Spectral behaviour
To jam the radios the area denial jammer is working an all possible radio frequencies. In the Spectrum Device this is visible as a very distinct spectral behaviour. Such a jammer will show a spectral peak that is "sweeping" from left to right.
Multiple Jammer Effect
The jamming is only calculated for the closest jammer, so being within range of multiple jammers will not compound the jamming effect. It will always apply the strongest (closest) jamming effect you are within range of.
Videos
ACRE Jamming
In acre the jammer will lower the signal strength dBm for received signals the further into the falloff
area you are. It is a more simple method and real life calculations. Improvements are welcome.
Jamming Drones
Jamming of drones comes in 2 different forms.
- using the Spectrum Device - against individual drones
- using an area denial jammer - against all drones in a specific radius
Spectrum Device
UGV drones can be jammed with a jammer antenna. By default, all UGV vehicles will broadcast a signal between 434MHz and 440MHz. By activating the antenna on the signal with left-mouse button when there is enough signal strength the drones AI will be disabled. The signal has to be higher than -40 for jamming to be possible. As long as you keep having the jammer activated the drone will just stand still where it is and do nothing. So if you jam it and move past it, and stop the jam, the drone will continue with what it was doing before. However, if the drone already spotted you and went into combat, when you stop jamming it will still be in combat.
When a drone is firing the machine gun it happens in bursts. When you apply the jamming and the AI is halted, it will still finish the round of burst fire before stopping.
Video:
Area denial jammer
Player controlled and autonomous drones can not operate within the effective range of the area denial jammer.
- Autonomous drones will lose their autonomous capabilities (in technical terms disableAI "all" is called)
- and if being jammed for long enough will attempt to land.
- Any player that is currently controlling either the Driver or Gunner position of the drone is getting disconnected from it.
The screenshot below shows
- the default 3D model of the area denial jammer on the left
- and the message a drone pilot will see when getting disconnected on the upper right.
Any object can be made an area denial jammer, not just the one shown above. This can be done in both Zeus and 3den.
Camera effect
When approaching the effective radius of an active area denial drone jammer the controlling player's camera will be incrisingly distorted (see screenshots).
The intensity of this video deterioration is dependent on the distance between drone and jammer.
Spectral behaviour
To jam the drones the area denial jammer is working an all possible drone frequencies. In the Spectrum Device this is visible as a very distinct spectral behaviour. Such a jammer will show a spectral peak that is "sweeping" from left to right.
SatCom
The satcom module can be set to make an object or vehicle a radio booster. It will show a blue circle for Zeus indicating the area of effect. Any units within this area will have their radio range boosted. The thought behind it is that you use satellite equipment to have up to 4 times the range on your radio comms. That does mean that if you are within the SATCOM area of effect, even if you are inside a effective jammer radius, you comms will still be boosted, as the satellite equipment is not being jammed.
I know this is not really how it works irl, but for simplicity sake this is how it is implemented for now. It might change to better be influenced by jammers in the future.
AddSound Module
Allows Zeus to select a object and play a selected sound with options such as: initial delay, on repeat, delay between repeat, removal if unit dies. Sound follows the unit around. (Be aware if using the long sounds, they can't stop mid-playing, only when played to end)
Video example:
PlaySound Module
Allows Zeus to play a sound at selected position. Sound follows the unit around. (Be aware if using the long sounds, they can't stop mid-playing, only when played to end)
Video example:
General
Module fires an EMP on the selected spot. If no object is chosen an object symbolizing the EMP bomb is spawned and the EMP is fired outwards from that. Its fired with a radius selected by zeus. Players will hear the EMP effect up to twice the distance of the range. However, the effect and shockwave are only felt for players inside the range of the EMP.
Units or vehicles can be set as immune against the EMP with the zeus module. If a vehicle is set to immune any unit inside when the EMP goes off will also be immune.
The EMP will knock out lights, vehicle engines/turrets and other electrical equipment. TFAR SR and LR will still be in inventory, but that specific LR or SL will be unusable from then on. However, picking up another SW or LR that was not affected by EMP will work for the player. (Vehicle radios caught in the blast is also destroyed).
Equipment like GPS, microdagr, minedetector etc. is removed. Any watch other than analog will be replaced with analog watch.
Zeus can decide if any primary or pistol scope with "intergrated NV/Thermal" should be kept, removed or replaced with an aim-point scope. Any other scope is not touched.
Any binoculars that are not the standard binoculars or variants that have no electronics will be either removed or replaced with standard binoculars, depending on the setting set by Zeus. This was the only way to remove the NV/Thermal capabilities while still providing the base magnifying effect.
Some binoculars added by extra mods which are not electrical might still be replaced or removed as I can not cover every single modded item.
Video of the EMP:
Scripting
You can manually trigger a EMP by script by throwing an CBA serverEvent as shown below. Gets the same setting options as when using the zeus module.
// _pos: position asl
// _unit: the object/unit its placed on, objNull if using position instead of unit
// _range: The range the EMP is effective in meters. It can be seen further away, but this is the range of the "growing half-dome effect" and the radius where units will loose electric equipment
// _spawnDevice: spawning a "device" at position of EMP, or fire the EMP without spawning a device
// _scopeMode: How should it handle scope with built-in NV or Thermal. 0: Do not remove, 1: replace with basegame 1x scope, 2: remove without giving a replacement
// _binoMode: How should it handle binoculars with built-in NV or Thermal. 0: Do not remove, 1: replace with basegame binocular, 2: remove without giving a replacement
["crowsEW_emp_eventFireEMP", [_pos, _unit, _range, _spawnDevice, _scopeMode, _binoMode]] call CBA_fnc_serverEvent;
//example: Fire EMP at position with 500m radius without spawning a "device" object and remove any scopes or binos with NV or thermal built-in.
["crowsEW_emp_eventFireEMP", [[2508.64,5681.47,171.718], objNull, 500, false, 2, 2]] call CBA_fnc_serverEvent;
Helping Text
A keybind has been added to show or hide the helping text for Zeus. The text shows if sound/signal/jamming/radiochatter is applied to the unit or object and helps make it easier to see what units have what. The helping text is only visible for zeus in zeus-view, and only when the zeus-camera is within 500m of the object/unit.
The default keybind is ctrl+shift+i
but it can be changed in keybind options.
If you have entered a different view like ACE arsenal and goes back into zeus-view the text might not show up. If that happens just go out of zeus-view and back into it again and it should work.
Eden Editor
While this mod is primarily aimed at Zeus' certain features are also availabe to use directly from Eden Editor.
TODO: list of available modules and potentially options they have
Get Started
If you are interested in helping contribute to this addon here is a small rundown of how to use hemtt and get started
Structure
The mod is structured where each folder under addons
is a "component". When building the mod it means that each folder will be its own .pbo
. I have tried to structure the mod so it logically is split between functionalty like so:
- editormodules => all the modules available in the eden editor
- emp => handles the EMP and its functionality
- main => is the jammers (radio/drone) and satcom boosters
- sounds => has the functionality for the
playSound
andaddSound
modules, that allow to play sound effects - spectrum => has all the spectrum device handling
- zeus => Has all the zeus modules. Just like the editormodules it acts as an interface for zeus, to use the functionality of the other pbos.
For features like the radio/drone jammers and spectrum devices it runs with a "server authority" archetecture. So the server will always have the latest truth of data, and all clients will ask or get updates pushed from the server. That means that if a zeus is adding a new jammer, the communication would be: Zeus module -> ask server to make new jammer -> server creates jammer and pushes updates out to all clients -> zeus and everyone receives the update from the server. So the Zeus client actually does not know the new jammer they asked to make, until they receive the update from the server containing the new jammer.
Building
The addon uses hemtt to build. (<3 to Brett for making hemtt!)
So start off by downloading hemtt, either downloading the binary for you platform here: https://github.com/BrettMayson/HEMTT/releases, or if on windows, you can use win-get to install it globally.
Binary
If you downloaded the binary place it in your path, or simply just copy paste it into the root of this github repo and run ./hemtt.exe build
winget
Install with winget install hemtt
and run: hemtt build
Launching game with filepatching
Launching the mod with filepatching means that you do not need to close the game, then rebuild the mod and launch it again for changes to appear. But you can just simply restart the mission ingame, and the changes will appear.
Some changes like config changes, or new files require a game-restart to be registered. But changes in known sqf files will work.
Hemtt (<3) makes it easy to launch the game with filepatching. It is actually just a single command. HOWEVER due to using CBA caching, a few things are needed in the mod before it will work.
- To enable filepatching to work in a addon, you need to uncomment a line in the
script_component.hpp
to disable the caching mode
As an example, if I wanted to work on the spectrum
part, then I would change addons/spectrum/script_component.hpp
from:
// #define DISABLE_COMPILE_CACHE
to
#define DISABLE_COMPILE_CACHE
That means that it will not cache anything under the spectrum
folder. As it stands right now you need to make this change on each "pbo" folder you wish to work in.
When commiting a pull-request, make sure it is commited out again, so the caching is applied for the released version.
- To then launch the game with filepatching we use the
hemtt launch
command. This mod have a few launch options available depending on the need:
- "default" => default debug launch with TFAR, Advanced Developer Tools and intercept and arma-debug-engine. (Might not always work). Handy if you want to debug or profile stuff
- "nodebug" => What i typically use, same as default, just without debug engine and intercept.
- "acre" => For testing features with ACRE, same as nodebug, just with ACRE instead of TFAR
The launch command will launch your game directly into the test-mission that is setup to easily and quick be able to test multiple features in this mod.
Macros
This mod uses the CBA/ACE3 macros, which can be confusing if you are not used to it. The most used macros are likely GVAR
, EGVAR
, QGVAR
, FUNC
, EFUNC
. They make it easy to ensure correct naming are used for public/global variables and they all contain both the tag and component.
So using GVAR(myvar)
in the spectrum
component would get translated to crowsew_spectrum_myvar
. Where crowsew
is this mods tag, and spectrum
is the component you are in.
There is then the versions EGVAR(component,myvar)
, which takes 2 arguments. So if I am in the spectrum
component, but need to reference a global variable from the main
component, I could do: EGVAR(main,myvar)
which would be translated to: crowsew_main_myvar
.
QGVAR()
is used if you need to get the variable in quotes, so as a string instead of a variable. Typically used for setVariable
/getVariable
or CBA Events naming.
QGVAR(myvar)
inside the spectrum
component would translate to "crowsew_spectrum_myvar"
.
FUNC
is the same as GVAR
just for functions. So FUNC(helloworld)
in the spectrum
component would translate to crowsew_spectrum_fnc_helloworld
.
There is a bunch of other macros available. You can read about them on ACEs wiki here: https://ace3.acemod.org/wiki/development/coding-guidelines#2-macro-usage
Adding new functions
To add a new function in a component, you make the new file in the component choices functions
folder. Each function requires to have this start:
#include "script_component.hpp"
/*/////////////////////////////////////////////////
Author: <insert author>
File: fnc_<filename>.sqf
Parameters:
Return:
<short description>
*///////////////////////////////////////////////
Make sure to fill out author, filename, and a short description
Before the function will work ingame, you need to add it to the XEH_PREP.hpp
file under the component you added it. If I added a file called fnc_halloworld.sqf
under spectrum
component then I would need to add this to the XEH_PREP.hpp
file:
PREP(halloworld);
Then ingame or from another script, you could call your function with:
// calling from same component
[] call FUNC(halloworld);
// from another component
[] call EFUNC(spectrum,halloworld);
XEH Eventhandlers
Each component have a bunch of XEH eventhandler files, that is used for various purposes. You can read a bit more about the XEH eventhandlers here: https://github.com/CBATeam/CBA_A3/wiki/Advanced-XEH and https://community.bistudio.com/wiki/Initialisation_Order
But in general its used as this:
XEH_postInit Will run after init has been called on the individual player/unit. Typically used for:
- Starting Per-Frame-Handlers
- Adding eventhandlers
- Call any events required on initialization
XEH_preInit This is called before init on player/unit/object. Typically used for:
- CBA addon settings
- CBA Keybind settings
- Initializing gvars needed during execution
By having CBA settings and keybinds here, they will also be available for players to change from the main-menu. If you had them in postInit
instead, it would require to in a server or playing in editor for the settings to appear.
XEH_PreStart To my understanding this would be run while players are still in the lobby, and before they actually spawn in the game. I am not really using this.
CBA Functions/Events
The mod uses a bunch of CBA functions and events. You can check what they do at: https://cbateam.github.io/CBA_A3/docs/index/Functions.html
The CBA Events is a great way to do communication across clients and server. It is easier to work with than remoteExec
and should perform better. You need to register eventhandlers on the clients you want to handle events, and then you can raise events for everyone, the server, or a specific player as required.
Git flow
This mod uses a fairly standard gitflow. New branches for features or bugfixes with PR's against main
. Main will always have the latest develop version, with the latest released version being a tag on main
.
Before making a PR make sure you have done a git pull --rebase origin main
to ensure you are working off the latest changes on main.