Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Home

Diwako’s STALKER-like Anomalies Rework

This is the knowledge hub for the Diwako’s STALKER-like Anomalies Rework mod for ARMA 3. The mod is fully open source and welcomes contributions.

Features and modules are documented on their respective pages.

Requirements

The latest version of CBA.

ACE3 is fully supported but not required.
ZEN is highly recommended if you are using Zeus, but it is not required when working exclusively in the 3DEN Editor. When using ZEN, anomalies can be spawned directly from the Zeus interface.

Releases

The latest official release is available on the Steam Workshop.

Anomalies

Burner

A static field of superheated air. When entered, scorching flames suddenly manifest, burning and igniting anyone who ventures inside.

Setup

The 3DEN module will spawn a burner anomaly at the placed location.

This anomaly is available in Zeus when the Zeus Enhanced mod is enabled.

Scripting

Must be executed on the server!

Function: diwako_anomalies_main_fnc_createBurner

Parameter:
    _pos - PositionASL where the anomaly should be (default: [0,0,0])

Returns:
    Anomaly Trigger

Clicker

Have you ever walked through a village with no visible anomaly and no detector warning, only for a sudden bright light to appear, explode in your face, blind you, and possibly set you on fire (if ACE fire is loaded)? That was a clicker anomaly.

The clicker is an anomaly that lies in wait for unsuspecting victims. It covers a larger area and is generally difficult to deal with. It is considered one of the most dangerous anomalies, as you must know it is there in advance or risk being surprised and potentially killed.

Setup

The 3DEN module will spawn a clicker anomaly area at the placed location. The area shown by the module represents the full activation zone of the anomaly, so careful placement is strongly advised.

This anomaly is available in Zeus when the Zeus Enhanced mod is enabled.

Scripting

Must be executed on the server!

Function: diwako_anomalies_main_fnc_createClicker

Parameter:
    _pos - PositionASL where the anomaly should be (default: [0,0,0])
    _radiusA - Radius A parameter of area anomaly (default: 10)
    _radiusB - Radius B parameter of area anomaly (default: 10)
    _isRectangle - Is this anomaly rectangular shaped (default: true)
    _angle - Angle the anomaly should have (default: 0)
    _height - Height of the area (default: 8)

Returns:
    Anomaly Trigger

Comet

The comet anomaly is a wandering anomaly that does not remain in a fixed location like many others. It burns, ignites, and kills anything it touches. True to its game counterpart, it moves along a fixed, looping path.

Setup

This anomaly is available only as a 3DEN Editor module. Due to its advanced setup, it cannot be used in Zeus alone unless scripting is used.

The comet follows a sequence of markers with an appended number. It is recommended to use “Empty” markers for this purpose. The anomaly follows all three axis of each marker, including height.

For example, setting the “Marker” field in the module to comet_path will cause the comet to follow markers named comet_path0, comet_path1, and so on.

With the following markers:

  • comet_path0
  • comet_path1
  • comet_path2
  • comet_path3
  • comet_path4
  • comet_path5
  • comet_path6

The comet will start at comet_path0, move through each marker in sequence, and continue until it reaches comet_path6. It will then return to comet_path0, completing the loop and starting a new cycle.

The path is smoothed using Bezier curves. If the comet clips through walls or terrain, you can adjust the marker positions or disable smoothing, which will cause it to move directly from marker to marker.

The first marker MUST end with 0!

Scripting

Must be executed on the server!

Function: diwako_anomalies_main_fnc_createComet

Parameter:
    _marker - Marker ID of path objects used to move the anomaly (default: "")
            - Alternatively, an array of objects, markers, or PositionASL entries used to create a path; order matters
    _speed - Movement speed in meters per second (default: 6)
    _smoothCurves - Interpolates path corners using Bezier curves (default: true)

Returns:
    Anomaly Trigger

Electra

A field of static electricity that crackles and buzzes, shocking anyone who dares to enter. This anomaly is also known for permanently disabling vehicle engines.

Setup

The 3DEN module will spawn an electra anomaly at the placed location.

This anomaly is available in Zeus when the Zeus Enhanced mod is enabled.

Scripting

Must be executed on the server!

Function: diwako_anomalies_main_fnc_createElectra

Parameter:
    _pos - PositionASL where the anomaly should be (default: [0,0,0])

Returns:
    Anomaly Trigger

Fog

A large area filled with dense white fog. It may appear harmless at first, but inhaling it corrodes the lungs. Make sure to wear a gas mask.

Setup

Place the module in 3DEN. An area indicator will appear around it; adjust this area to your liking.
Make sure the Size A and Size B attributes are the same, as the module only uses the Size A value.

This anomaly is available in Zeus when the Zeus Enhanced mod is enabled.

Scripting

Must be executed on the server!

Function: diwako_anomalies_main_fnc_createFog

Parameter:
    _pos - PositionASL where the anomaly should be (default: [0,0,0])
    _radius - Radius parameter of area anomaly (default: 10)
    _isRectangle - Is this anomaly rectangular shaped (default: true)

    Currently under construction and does not affect the area shape yet
    _angle - Angle the anomaly should have (default: 0)

    _color - Color of the fog as an RGB array (default: [249/255, 248/255, 242/255])
    _effectOnly - If true, the anomaly will only be harmless fog, no damage or blur (default: false)

Fruitpunch

A strange green substance covering a surface, bubbling and emitting a faint green glow. Anyone who steps into it suffers painful chemical burns to their feet. A single patch may seem harmless, but they often appear in groups and tend to block your path.

Setup

The 3DEN module will spawn a fruitpunch anomaly at the placed location.

This anomaly is available in Zeus when the Zeus Enhanced mod is enabled.

Scripting

Must be executed on the server!

Function: diwako_anomalies_main_fnc_createFruitPunch

Parameter:
    _pos - PositionASL where the anomaly should be (default: [0,0,0])

Returns:
    Anomaly Trigger

Meatgrinder

An anomaly that initially appears as swirling leaves, similar to a springboard. Once activated, it pulls everything inward and grinds it into fine dust, or into minced flesh if the victim is a living being.

Setup

The 3DEN module will spawn a meatgrinder anomaly at the placed location.

This anomaly is available in Zeus when the Zeus Enhanced mod is enabled.

Scripting

Must be executed on the server!

Function: diwako_anomalies_main_fnc_createMeatgrinder

Parameter:
    _pos - PositionASL where the anomaly should be (default: [0,0,0])

Returns:
    Anomaly Trigger

Psy Discharge

A spherical anomaly that suddenly appears in the sky. The sphere expands and eventually bursts, releasing psy energy that damages anyone standing beneath it.

Setup

The 3DEN module will activate on mission preview or mission start. This behavior can be prevented by using trigger logic. There are many tutorials available that explain how to delay module activation.

Once activated, the anomaly has a discharge time of 5 seconds. During this period, players can attempt to escape its range or seek shelter under an object to shield themselves from the psy blast.

This is a one-time anomaly. After activation, it will not trigger again. If you want a location with recurring discharges, scripting is recommended.

This anomaly is available in Zeus when the Zeus Enhanced mod is enabled.

Scripting

This function MUST be run on ALL machines!

Function: diwako_anomalies_main_fnc_createPsyDischarge

Parameter:
    _pos - PositionASL where the anomaly should be (default: [0,0,0])
    _psyEffect - Integer strength of the psy effect to apply to players affected by the discharge (0-3, default: 2)

Returns:
    Anomaly Trigger

Psy Field

Unlike the psy discharge, the psy field does not deal direct damage. Instead, it applies psy effects to any stalker who enters the anomaly. While it may appear harmless, it alters the stalker’s vision and causes auditory hallucinations. Most stalkers report feelings of paranoia while under its influence, likely because whatever causes the effect directly affects the mind and brain.

Setup

The 3DEN module will spawn a psy field anomaly at the placed location.

This anomaly is available in Zeus when the Zeus Enhanced mod is enabled.

Scripting

Must be executed on the server!

Function: diwako_anomalies_main_fnc_createPsyField

Parameter:
    _pos - PositionASL where the anomaly should be (default: [0,0,0])
    _strength - Strength of the anomaly, ranging from 1 to 3 (default: 1)
    _radiusA - Radius A parameter of area anomaly (default: 10)
    _radiusB - Radius B parameter of area anomaly (default: 10)
    _isRectangle - Is this anomaly rectangular shaped (default: true)
    _angle - Angle the anomaly should have (default: 0)
    _height - Height of the anomaly, -1 for infinite (default: -1)

Returns:
    Anomaly Trigger

Razor

An anomaly composed of multiple hovering glass shards. The shards are razor sharp, hence the name, and contact at sufficient speed causes severe bleeding.

It is said that if you make yourself small and move slowly, the anomaly does nothing, allowing safe passage through it.

Setup

The 3DEN module will spawn a razor anomaly at the placed location.

This anomaly is available in Zeus when the Zeus Enhanced mod is enabled.

Scripting

Must be executed on the server!

Function: diwako_anomalies_main_fnc_createRazor

Parameter:
    _pos - PositionASL where the anomaly should be (default: [0,0,0])

Returns:
    Anomaly Trigger

Springboard

Often appearing as swirling leaves, closer inspection reveals subtle refractions as objects are repelled from entering. If anyone touches the anomaly, they are violently flung away from it.

Setup

The 3DEN module will spawn a springboard anomaly at the placed location.

This anomaly is available in Zeus when the Zeus Enhanced mod is enabled.

Scripting

Must be executed on the server!

Function: diwako_anomalies_main_fnc_createSpringboard

Parameter:
    _pos - PositionASL where the anomaly should be (default: [0,0,0])

Returns:
    Anomaly Trigger

Teleport

A large disc of pulsing energy that emits a low hum when approached. Touching it forcibly relocates you to one of its sister anomalies, enabling faster travel, access to hidden locations, or, potentially, an untimely death.

Setup

The 3DEN module will spawn a teleport anomaly at the placed location.

You MUST assign a teleport ID in the module. Any other teleport anomaly using the same ID will function as a sister anomaly.

You CAN have more than two teleport anomalies sharing the same ID.

This anomaly is available in Zeus when the Zeus Enhanced mod is enabled.

Scripting

Must be executed on the server!

Function: diwako_anomalies_main_fnc_createTeleport

Parameter:
    _pos - PositionASL where the anomaly should be (default: [0,0,0])
    _id - ID that links teleporters together

Returns:
    Anomaly Trigger

Will-o’-wisp

Flickering, dancing lights that appear in the distance and are only visible at night. They vanish when approached. Campfire stories claim they lure stalkers into dangerous areas and traps, but in reality they are harmless, if somewhat eerie and beautiful.

Setup

The 3DEN module will spawn a Will-o’-wisp anomaly at the placed location.

This anomaly is available in Zeus when the Zeus Enhanced mod is enabled.

Scripting

Must be executed on the server!

Function: diwako_anomalies_main_fnc_createWillowisp

Parameter:
    _pos - PositionASL where the anomaly should be (default: [0,0,0])
    _color - Color of the lights as an RGB array, string "randomColor" for a random color, or a CfgMarker entry (default: "randomColor")
    _count - Number of lights (default: -1, random between 1 and 5)
    _spread - Maximum distance from the center point in meters (default: 15)

Returns:
    Anomaly Trigger

Editing Anomaly Detector

The detector is an item carried in the player’s inventory. By default, this item uses the class AnomalyDetector.

You can change which item is used as the detector in the mod’s CBA Settings menu, also known as Addon Options. This allows you to assign a more thematically fitting item if desired.

When enabled, the detector begins beeping whenever it detects an anomaly within range. The beeping frequency increases as you get closer to the anomaly. The detector always prioritizes the closest anomaly when determining the beep rate.

Depending on the mission settings, the detector may stop beeping entirely if there is no active anomaly within range.

Using the Detector

The detector can be activated in several ways, provided it is present in the player’s inventory.

Without ACE

You can enable or disable the detector using the action menu, also known as the “scroll wheel menu”.

With ACE

Using ACE’s interaction menu, self-interact, navigate to Equipment, and locate the detector. From there, you can enable or disable it.

With either

It is also possible to interact with the detector by double-clicking its icon directly in the inventory. This method provides additional options, including enabling or disabling the detector and adjusting its volume.

Blowout / Emission

A blowout, also known as an emission, is a map-wide event. All players experience it at the same time and it is almost fully synchronized across clients. A massive surge of psy energy is released, announced by harsh winds, thunderstorms, orange waves in the sky, and ultimately a wave-like energy burst that kills anyone not in shelter.

Blowout Stages

A blowout consists of five distinct stages.

Stage 0

This stage represents normal gameplay. Either no blowout is currently happening or one has just concluded. Nothing unusual is occurring, which is why this stage is referred to as stage zero.

Stage 1

This is the warm-up stage, marking the beginning of a blowout. Environmental sounds fade, the world becomes eerily quiet, and is eventually followed by a groan and what sounds like an explosion in the air.
This stage lasts 60 seconds.

Stage 2

This is the holding stage, intended to give players time to reach a safe location. The duration of this stage is defined by the mission maker, Zeus, or the script that initiated the blowout.

During this stage, strong winds shake the trees, lightning bolts strike frequently, psy lines form across the horizon, and a constant background rumble can be heard.

Stage 3

This stage lasts 30 seconds and is the final warning before the blowout fully strikes. Winds become extreme, lightning intensifies, and psy effects grow stronger. During this stage, the first psy wave appears. It does not kill or knock players unconscious, but serves as a clear warning that time is running out.

If you are not in a safe location by this point, you are in serious danger.

Stage 4

This is the lethal stage where the deadly psy wave arrives. If the player is not in cover, they will first be thrown to the ground shortly before the wave hits. When the wave strikes, it kills instantly with no way to survive unless the player is in shelter.

There are additional options available for mission makers, which are described below.

Starting a Blowout

Zeus

The most common way to start a blowout is through the Zeus interface. To use this method, the mod ZEN must be enabled for the blowout module to appear in the Zeus modules tab.

3DEN Module

A dedicated module is available in the 3DEN Editor for starting a blowout. Be aware that the blowout will activate immediately unless the module is synchronized to a trigger.

By syncing the module to a trigger, activation can be delayed until the trigger conditions are met.

Scripting

A coordinator function exists for controlling blowouts via script. This function is server-only and will not work if called on a non-server machine.

Function name:
diwako_anomalies_main_fnc_blowoutCoordinator

Parameters:

IndexNameDescriptionDefault
1_timeTime until the deadly psy wave hits. Must be at least 102 or it will abort400
2_directionDirection the wave approaches, in bearing degrees0
3_useSirensWhether sirens should be audibletrue
4_onlyPlayersIf false, AI are also affected. May impact performance with many AItrue
5_isLethalWhether the final wave is lethaltrue
6_environmentParticleEffectsEnables wind-blown leaves, dust, and similar effectstrue
6_psyWaveShow a wave of psy energy go over the whole terraintrue

There is also a CBA server event named diwako_anomalies_main_startBlowout. It forwards its parameters directly to the coordinator function, allowing you to avoid dealing with locality.

Example:

["diwako_anomalies_main_startBlowout", [_time, _direction, _useSirens, _onlyPlayers, _isLethal, _environmentParticleEffects, _psyWave]] call CBA_fnc_serverEvent;

How Is a Player Safe From a Blowout?

By default, when the psy wave hits, a check is performed to determine whether the affected unit is safe. There are two mechanisms used to determine safety.

The Automatic Way

A basic check determines whether a unit is indoors using Arma’s vanilla insideBuilding command, which was introduced in Arma 3 version 2.12.

This command can be unreliable, as it depends on buildings being properly configured. As a result, some modded buildings may not be recognized as indoor spaces by the engine.

In Arma terms, being indoors is determined using sound shaders. If you have played Arma for a while, you may have noticed that gunfire sounds more echo-like when fired inside buildings. Properly configured buildings apply an indoor sound shader to units inside them.

The insideBuilding command checks for this shader to determine whether a unit is indoors. This approach is fast and efficient, as the engine already applies these shaders internally.

Additional ray casts are used to verify that a roof is present above the unit, preventing edge cases such as standing in a doorway from being considered safe.

The downside of this method is that not all buildings are considered safe. Relying solely on ray casts would be expensive and error-prone. For example, standing under a tree might be considered safe, random props could interfere with checks, large warehouses might fail due to distant walls, or broken roof windows could expose the player.

The Mission Maker Way

The Functions and Variables section documents variables that mission makers can use to define custom safe areas.

The primary variable for this purpose is blowout_safe. When set on an object or unit, it marks that location as safe from blowouts.

This variable can be set using Zeus, triggers, or global events to designate safe zones anywhere on the map.

Example using a trigger:

Condition: this && (player in thisList)

Activation: player setVariable ["blowout_safe", true];

Deactivation: player setVariable ["blowout_safe", false];

Blowout system

The mod includes a system that can periodically trigger blowouts/emissions. This system is intended for long-running missions or scenarios where no Zeus is present.

After a blowout has concluded, the system enters a waiting phase before initiating the next event. Mission makers can configure both a minimum and a maximum delay for this waiting period. The next blowout will be triggered at a random time between these two values.

Usage

3DEN

In the 3DEN editor, a module named “Blowout System” is available. This module provides the same configuration options as the standard one-time blowout module, with the addition of two parameters that define the minimum and maximum delay (in minutes) between consecutive blowouts.

Scripting

The blowout system can also be started via script. This is useful for missions that do not want to rely on a hard dependency to the mod itself.

This function must be executed on the server. It will not run on clients.

Function name:
diwako_anomalies_main_fnc_blowoutCoordinator

Parameters:

IndexNameDescriptionDefault
1_minimalDelayMinimum delay before the next blowout, in minutes10
2_maximumDelayMaximum delay before the next blowout, in minutes60
3_conditionCode block or string. Return true to allow blowouts, false to prevent them{true}
4_blowoutTimeTime until the deadly psy wave hits. Must be at least 102 or it will abort400
5_directionDirection the wave approaches, in bearing degrees0
6_useSirensWhether sirens should be audibletrue
7_onlyPlayersIf false, AI are also affected. May impact performance with many AItrue
8_isLethalWhether the final wave is lethaltrue
9_environmentParticleEffectsEnables wind-blown leaves, dust, and similar effectstrue
10_psyWaveShow a wave of psy energy go over the whole terraintrue

Example:

if (isServer) then {
    private _minimalDelay = 10;
    private _maximumDelay = 60;
    private _condition = {true};
    private _blowoutTime = 400;
    private _direction = random 360;
    private _useSirens = true;
    private _onlyPlayers = true;
    private _isLethal = true;
    private _environmentParticleEffects = true;
    private _psyWave = true;
    [
        _minimalDelay,
        _maximumDelay,
        _condition,
        _blowoutTime,
        _direction,
        _useSirens,
        _onlyPlayers,
        _isLethal,
        _environmentParticleEffects,
        _psyWave
    ] call diwako_anomalies_main_fnc_blowoutCoordinator;
};

Bolts

Bolts are used to trigger anomalies by throwing them into the affected area, or, if you are feeling mischievous, at your friends for fun.

Make sure to aim at the ground where the anomaly is located. If the bolt passes through the anomaly at a higher altitude, it may not trigger, resulting in a wasted bolt. Once thrown, bolts cannot be picked up again.

There are two bolt-related items included in the mod: a bag of bolts and a single bolt.

While the bag of bolts is described as having an infinite supply, it actually contains a finite amount of 9999 bolts.

In Arma terms, bolts are implemented as grenades. However, they do not explode when used. When thrown, the mod attaches an invisible balloon to the grenade, which is what activates the anomaly. Contrary to popular belief, the grenade itself has no effect, which is why other grenade types cannot be used to trigger anomalies.

CBA Events for Mission Makers

Starting with version 2.1.0, the mod exposes several CBA events that mission makers can hook into for custom scripting.

All anomaly-related events are prefixed with:

diwako_anomalies_main_

Anomaly Events

These events are fired whenever an anomaly interacts with an object or unit.

burnerOnDamage

Triggered whenever an object or unit is damaged or killed by a Burner anomaly.

  • Locality: Server only
  • Event name: diwako_anomalies_main_burnerOnDamage

Parameters

  1. _obj - Object that was damaged or killed
  2. _trg - Burner anomaly trigger

clickerOnDamage

Triggered whenever an object or unit is flashbanged by a Clicker anomaly.

  • Locality: Server only
  • Event name: diwako_anomalies_main_clickerOnDamage

Parameters

  1. _obj - Object that was damaged or affected
  2. _trg - Clicker anomaly trigger

cometOnDamage

Triggered whenever a Comet anomaly burns an object or unit.

  • Locality: Where the affected object is local
  • Event name: diwako_anomalies_main_cometOnDamage

Parameters

  1. _obj - Object that was damaged or killed
  2. _trg - Comet anomaly trigger

electraOnDamage

Triggered whenever an object or unit is damaged or killed by an Electra anomaly.

  • Locality: Server only
  • Event name: diwako_anomalies_main_electraOnDamage

Parameters

  1. _obj - Object that was damaged or killed
  2. _trg - Electra anomaly trigger

fogOnDamage

Triggered whenever an object or unit takes suffocation damage from a Fog anomaly.

  • Locality: Where the affected object is local
  • Event name: diwako_anomalies_main_fogOnDamage

Parameters

  1. _obj - Object that was damaged or killed
  2. _trg - Fog anomaly trigger

fruitpunchOnDamage

Triggered whenever an object or unit is damaged or killed by a Fruit Punch anomaly.

  • Locality: Server only
  • Event name: diwako_anomalies_main_fruitpunchOnDamage

Parameters

  1. _obj - Object that was damaged or killed
  2. _trg - Fruit Punch anomaly trigger

meatgrinderOnDamage

Triggered whenever an object or unit is ripped apart (or damaged, in the case of vehicles) by a Meatgrinder anomaly.

  • Locality: Server only
  • Event name: diwako_anomalies_main_meatgrinderOnDamage

Parameters

  1. _obj - Object that was damaged or killed
  2. _trg - Meatgrinder anomaly trigger

psyFieldOnEnter

Triggered whenever a player controlled unit enters a Psy Field anomaly.

  • Locality: Where the affected unit is local
  • Event name: diwako_anomalies_main_psyFieldOnEnter

Parameters

  1. _trg - Psy field anomaly trigger
  2. _strength - Strength of the psy field
  3. _psyID - ID used in the psyIDMap

Note: If you want the current applied psy strength you can use this snippet to get the highest current value. This might be from a psy field, an emission, or scripted behaviour.

private _strength = selectMax values diwako_anomalies_main_psyIDMap;
if (isNil "_strength") then {
    _strength = 0;
};

psyFieldOnLeave

Triggered whenever a player controlled unit leaves a Psy Field anomaly.

  • Locality: Where the affected unit is local
  • Event name: diwako_anomalies_main_psyFieldOnLeave

Parameters

  1. _trg - Psy field anomaly trigger
  2. _strength - Strength of the psy field
  3. _psyID - ID used in the psyIDMap

razorOnDamage

Triggered whenever an object or unit is cut by a Razor anomaly.

  • Locality: Where the affected object is local
  • Event name: diwako_anomalies_main_razorOnDamage

Parameters

  1. _obj - Object that was cut
  2. _trg - Razor anomaly trigger

springboardOnDamage

Triggered whenever an object or unit is flung or killed by a Springboard anomaly.

  • Locality: Server only
  • Event name: diwako_anomalies_main_springboardOnDamage

Parameters

  1. _obj - Object that was damaged or killed
  2. _trg - Springboard anomaly trigger

teleportOnEnter

Triggered when an object or unit is about to be teleported.

  • Locality: Server only
  • Event name: diwako_anomalies_main_teleportOnEnter

Parameters

  1. _obj - Object that is about to be teleported
  2. _trg - Entrance teleport trigger
  3. _exit - Exit teleport trigger

teleportOnExit

Triggered after an object or unit has been teleported.

  • Locality: Server only
  • Event name: diwako_anomalies_main_teleportOnExit

Parameters

  1. _obj - Object that was teleported
  2. _trg - Entrance teleport trigger
  3. _exit - Exit teleport trigger

Blowout Events

Blowouts are map-wide events. The following CBA events allow mission makers to react to or extend blowout behavior.

blowOutStage

Fired whenever the blowout enters a new stage.
Mission makers can listen to this event to trigger additional effects or logic.

  • Locality: Global
  • Event name: diwako_anomalies_main_blowOutStage

Parameters

  1. _stage - Integer representing the newly entered stage
  2. _args - Additional arguments (used only by Stage 1)

Blowout Stages

Stage 0 - Idle

No blowout active. Normal gameplay.
This stage is also fired after a blowout concludes.

Stage 1 - Warm-up

Lasts 60 seconds.
Environmental sounds fade, effects begin, and preparation logic runs.

_args contains an array defining how long it takes to mute environment sounds before enableEnvironment false is applied.

Stage 2 - Holding Stage

Variable length.
Main warning phase where players must seek shelter.

Stage 3 - Pre-Impact

Lasts 30 seconds.
Strong psy effects, intense wind, frequent lightning, and the first non-lethal psy wave.

Stage 4 - Impact

Final stage.

  • Players outside cover are knocked down after ~7 seconds
  • Deadly psy wave hits after 10 seconds
  • Unsheltered players die instantly if the blowout is lethal

startBlowout

Event used by the server to initiate a blowout.
Mission makers may also raise or listen to this event.

  • Locality: Server only
  • Event name: diwako_anomalies_main_startBlowout

Parameters

  1. _time - Time (in seconds) until the deadly wave hits (minimum: 102)
  2. _direction - Bearing (in degrees) from which the wave approaches

Note:
Stages 1, 3, and 4 together take 100 seconds.
Stage 2 must be at least 2 seconds long, making 102 the absolute minimum.

Example

["diwako_anomalies_main_startBlowout", [400, random 360]] call CBA_fnc_serverEvent;

Functions and Variables

While most anomaly-related functions are documented on the anomaly page, there are additional functions and variables that mission makers and scripters can use.

Functions

blowoutWave

Displays an approaching wave of psy energy used during the blowout event. The wave is non-damaging and purely visual. It is only shown on machines where this function is executed.

Function: diwako_anomalies_main_fnc_blowoutWave

Parameter:
    _time - Time in seconds until the wave reaches the player (default: 10)
    _showPressure - Shows a wave of kicked up dust and dirt in front of the psy wave (default: true)

Returns:
    nothing

createAnomalyField

Helper function to create multiple anomalies within a specified area. Anomaly placement is randomized, but constrained to the area defined by the module.

Using this function, you can create four types of anomalies: springboards, burners, electras, and meatgrinders. If you need support for additional anomaly types, let me know.

This function is also available as a 3den editor module.

Must be executed on the server.

Function: diwako_anomalies_main_fnc_createAnomalyField

Parameter:
    _posParams - Array containing parameters for the function CBA_fnc_randPosArea. (default: [])
            See documentation here: http://cbateam.github.io/CBA_A3/docs/files/common/fnc_randPosArea-sqf.html
    _springboard - Number of springboard anomalies to create (default: 0)
    _burner - Number of burner anomalies to create (default: 0)
    _electra - Number of electra anomalies to create (default: 0)
    _meatgrinder - Number of meatgrinder anomalies to create (default: 0)

Returns:
    Array of all created anomalies

createLocalLightningBolt

Displays a non-destructive, local-only lightning bolt at the given position. The effect uses the map’s configured thunder sounds.
It is only visible on the machine where this function is executed.

Function: diwako_anomalies_main_fnc_createLocalLightningBolt

Parameters:
    _pos - PositionAGL. Can be left empty to display the effect randomly around the player (default: [])

Returns:
    nothing

deleteAnomalies

Deletes anomalies and removes their effects for players. Valid anomalies can be obtained from the holder array diwako_anomalies_main_holder, or by checking whether a trigger has the variable diwako_anomalies_main_anomalyType set.

Must be executed on the server.

Function: diwako_anomalies_main_fnc_deleteAnomalies

Parameter:
    _anomalies - Array containing anomaly triggers (default: [])

Returns:
    nothing

grenadeBolt

As mentioned on the bolt page, grenades have no effect on anomalies on their own when thrown. This function attaches the “balloon” object to the projectile to enable anomaly interaction.

The balloon object is automatically cleaned up after 10 seconds to prevent leftover objects.

Use this function if you want other projectiles to trigger anomalies as well.

Execute this function where the projectile is local. There is no locality check inside the function.

Function: diwako_anomalies_main_fnc_grenadeBolt

Parameters:
    _projectile - The thrown grenade, or any other projectile (no default value)

Returns:
    nothing

hasItem

Checks whether a specific item exists in a unit’s inventory.

Function: diwako_anomalies_main_fnc_hasItem

Parameters:
    _unit - Unit to check. Defaults to the player if objNull is passed and the function is called on a client machine (default: objNull)
    _itemClass - Item class name to search for (default: "")

Returns:
    true or false, depending on whether the item is present or an empty string is given

isInShelter

Checks whether the given unit is considered to be in shelter during a blowout.

Function: diwako_anomalies_main_fnc_isInShelter

Parameter:
    _unit - Unit to check for shelter status (default: objNull)

Returns:
    Boolean, true if the unit is considered safe

minceCorpse

Want to see large fleshy chunks fly around? This function turns any object, organic or otherwise, into red paste and hides the body.

Must be executed on all machines. There is also a CBA event named diwako_anomalies_main_minceCorpse that uses the same parameters. For convenience, you can trigger it using CBA_fnc_globalEvent.

Function: diwako_anomalies_main_fnc_minceCorpse

Parameter:
    _body - Object that will be minced (default: objNull)

Returns:
    nothing

psyEffect

Plays psy-related audio effects, applies a slight screen shake, and gradually tints the screen orange.

The function supports four strength levels ranging from 0 to 3. A strength of 0 disables the effect, while 3 represents the maximum intensity.

The ID passed to the function adds the psy effect to an internal pool. If the same ID is provided with a strength value of 0, the corresponding effect is removed. While multiple effects are active, the highest strength value in the pool is applied until the pool is empty.

Function: diwako_anomalies_main_fnc_psyEffect

Parameters:
    _strength - Integer representing the strength of the effect. 0 disables the effect, 3 is the maximum (default: 0)
    _id - String ID used to identify the source of the psy effect (default: "mission")

Returns:
    nothing

showPsyWavesInSky

Displays orange psy wave lines in the sky. The effect takes two minutes to fully appear and five minutes to fully fade out.

Function: diwako_anomalies_main_fnc_showPsyWavesInSky

Parameter:
    _show - Boolean indicating whether to show the sky waves (default: false)
    _useSkyLight - Boolean to brighten up the area around the player to simulate the psy wave's indirect light onto the ground (default: true)

Returns:
    nothing

Additional scripting support

It is possible to set mission namespace variables to change the effects of this function.

VariableDescriptionDefault value
diwako_anomalies_main_psySkyTextureThe texture appearing in the sky\z\diwako_anomalies\addons\main\data\textures\blowout_psy_sky_ca.paa
diwako_anomalies_main_psySkyLightColorThe color of the indirect lightAverage color calculated from sky texture (default unset)

bloodEffect

Displays a bloody screen effect, so real, ffor a specified duration. The function can be called multiple times, with the displayed time always updating to the highest value provided.
This function only has a local effect.

Function: diwako_anomalies_main_fnc_bloodEffect

Parameters:
    _time - Duration of the bleeding effect in seconds. Example, could be 5 or 90.
            Can be called multiple times, the on-screen duration will update accordingly.

Returns:
    nothing

Variables

anomaly_ignore

Object namespace variable!
anomaly_ignore

When using Zeus, teleporting into your own placed anomalies can be inconvenient. This variable can be set to make most anomalies ignore the affected unit.

Set it to true and the unit will be ignored by anomalies. Make sure the variable is synced if needed. This variable also disables the negative effects of the blowout event and excludes the player from checks in the procedural anomaly spawning system.

Examples:
initPlayerLocal.sqf - player setVariable ["anomaly_ignore", true, true];
3den init box - this setVariable ["anomaly_ignore", true];

blowout_safe

Object namespace variable!
blowout_safe

Additional object namespace variable specific to the blowout event. It prevents the unit from being knocked over or killed by the blowout. This can be used to create custom safe areas where players can take shelter if the automatic shelter check does not recognize the location as safe.

This variable does not need to be synced to other machines.

Examples:
initPlayerLocal.sqf - player setVariable ["blowout_safe", true];
3den init box - this setVariable ["blowout_safe", true];

detectorActive

Mission namespace variable!
diwako_anomalies_main_detectorActive

Variable used to check whether the anomaly detector is currently running. At the moment, there is no CBA event fired when the detector is turned on or off, which may or may not be necessary.

When this variable is set to true, the detector is active. When set to false, the detector is inactive.

If you want to mess with your players, you can disable the detector at random by setting this variable to false, which will immediately shut it down.

Enabling the detector via script is slightly more involved, but still straightforward. First, set the variable to true, then execute the function diwako_anomalies_main_fnc_detector without parameters on the target player’s machine.

Editing Medical System Support

This mod includes out-of-the-box support for several medical systems: Vanilla medical, ACE3 Medical, and the Armor Plates System.

If you want to add support for another medical system, or if you prefer to handle damage caused by most anomalies yourself, you can configure this as a mission maker or mod maker.

(Alternatively, you can submit a pull request to add support for your medical system.)

Custom Medical (DIY) System

To implement your own damage handling, you can configure the mod to use a predefined custom function.

First, set the variable diwako_anomalies_main_medicalSystem to the value custom at any point after pre-init. Whenever an anomaly is about to deal damage, the function anomaly_custom_fnc_addUnitDamage will then be called.

This function is undefined by default and must be implemented by you as a mission maker or mod maker.

The function receives the following parameters:

Param NameTypeDescription
_anomalyTypestringThe type of anomaly dealing the damage
_unitobjectThe unit that should receive the damage

The _anomalyType parameter will have one of the following values:

  • burner
  • comet
  • clicker
  • electra
  • fog
  • fruitpunch
  • razor
  • springboard
  • psydischarge

Procedural Anomaly Spawning System

Description

This system is designed to populate the entire map with anomalies. Because spawning thousands of anomalies at once would be a major performance burden, the system spawns and despawns them intelligently.

It operates by dividing the map into grid-based “cells”. When a player approaches a cell, anomalies are spawned within it. When no players are nearby, the cell is depopulated and the anomalies are removed.

Only anomalies spawned by this system are affected. Any anomalies placed manually by the mission maker or Zeus remain untouched.

Anomaly placements within each cell are generated once and then remembered. Leaving the area and returning will result in the same anomalies appearing in the same locations. After a blowout, this placement data is cleared and new anomalies, potentially of different types and positions, are generated. This behavior can be disabled via a setting.

Activation

To enable this system, open the in-game Addon Options menu. Select the anomaly mod from the dropdown list, then navigate to the section dedicated to the procedural anomaly system and enable it. Be sure to apply the setting in the correct context, either server or mission.

This system is intentionally not provided as a 3DEN module. Some players may want to populate maps in missions downloaded from the Workshop without editing the mission itself.

Performance

Several settings are available to fine-tune performance, including maximum anomaly count, grid size, activation range, and scan interval.

Mission makers should adjust these values carefully. Setting the maximum anomaly cap too high while players are spread across the map can result in thousands of active anomalies and significant performance degradation.

The same applies to grid size and activation range. Increasing these values causes more anomalies to spawn, as cells become larger or activate from greater distances. This may be desirable for fast-moving vehicles, large player counts, or to reduce noticeable pop-in, but performance considerations should always be kept in mind.

Mission Makers

This system ignores any player who has the anomaly_ignore variable set. It is recommended to apply this variable to Zeus players or any players intended to remain outside the playable area.

Additionally, a new 3DEN module is available to define exclusion zones. Within these zones, the system will not spawn anomalies. This is useful for safe areas such as hubs, bases, or hideouts.

Exclusion zones can also be defined via scripting. To do so, append an area definition or trigger object to the variable diwako_anomalies_main_proceduralExclusionZones at any point before postInit.

Warning: This variable exists on the server only.

Example:

// initServer.sqf
private _area = [[_xPos, _yPos], _a, _b, _angle, _isRectangle, -1];
diwako_anomalies_main_proceduralExclusionZones pushBack _area;