Wyatt Derp's Dynamic AI (WDDA)

WDDA provides standalone, Scenario Framework-style dynamic AI encounters for Arma Reforger. It uses Area / Layer / Slot-style World Editor authoring without requiring Scenario Framework or GameModeSF.

Hostable single-file documentation is included at Docs/README.html.

Features

Requirements and compatibility

Normal mission-maker workflow

Normal mission makers should drag the provided WDDA prefabs into the world and configure placed instances. Creating custom prefab variants is an advanced reuse workflow only.

A typical setup is:

Minimum working encounter:


WDDA_Area
  Spawn Distance = distance where eligible players activate nested encounters
  Despawn Distance = distance where surviving defenders suspend after players leave

  WDDA_Layer
    WDDA_AISlot
      AI Prefab = a valid AI-capable group or editable character prefab

Waypoint slots, vehicles, QRF, Last Stand, repeated batches, and ClearArea task bridging are optional.

Provided prefabs

Current prefab folder standard:


Prefabs/WDDA/

Required provided prefabs:


Prefabs/WDDA/WDDA_Area.et
  GenericEntity + Hierarchy + WDDA_AreaComponent
  Owns dynamic spawn/despawn and structural encounter state

Prefabs/WDDA/WDDA_Layer.et
  GenericEntity + Hierarchy + WDDA_LayerComponent
  Organizational marker only

Prefabs/WDDA/WDDA_AISlot.et
  GenericEntity + Hierarchy + WDDA_AISlotComponent
  Original encounter AI spawn slot/source

Prefabs/WDDA/WDDA_QRFSpawn.et
  GenericEntity + Hierarchy + WDDA_QRFSpawnComponent
  Reinforcement spawn/source location

Prefabs/WDDA/WDDA_LastStandSpawn.et
  GenericEntity + Hierarchy + WDDA_LastStandSpawnComponent
  Terminal final-response spawn/source location

Prefabs/WDDA/WDDA_WaypointSlot.et
  GenericEntity + Hierarchy + WDDA_WaypointSlotComponent
  Route holder with a picked base AIWaypoint_* prefab

Prefabs/WDDA/WDDA_VehicleSpawn.et
  GenericEntity + Hierarchy + WDDA_VehicleSpawnComponent

Prefabs/WDDA/WDDA_AiSettings.et
  GenericEntity + WDDA_SettingsComponent

WDDA_AiSettings.et is optional for missions. If placed once in the world, it overrides shared live-server tolerance settings: dead/empty AI cleanup time and spawned AI group initialization timeout.

Typical World Editor layout


Area_Town_01
  WDDA_Layer_Encounter
    WDDA_AISlot_Patrol
      WDDA_WaypointSlot_01_Move
      WDDA_WaypointSlot_02_Defend
      WDDA_WaypointSlot_03_Cycle
      WDDA_VehicleSpawn_TruckLine
    WDDA_QRFSpawn_Roadblock
      WDDA_VehicleSpawn_Truck
    WDDA_LastStandSpawn_Hill
      WDDA_VehicleSpawn_Jeep

Vehicle sources are structural: place WDDA_VehicleSpawn entities under the AI/QRF/Last Stand source that owns that vehicle staging.

Debug shape previews

WDDA components include optional debug shape previews to make mission layout easier to read in Workbench:

Each component type uses a distinct color so nested slot markers are not obscured by the Area sphere:

| Component | Shape | Color | |---|---|---| | WDDA_Area spawn radius | sphere | white | | WDDA_Area despawn radius | sphere (dim) | white | | WDDA_AISlot | cylinder | cyan | | WDDA_QRFSpawn | cylinder | orange | | WDDA_LastStandSpawn | cylinder | red | | WDDA_VehicleSpawn | cylinder per vehicle | green | | WDDA_WaypointSlot | cylinder | yellow |

Each marker-owning WDDA component follows the base-game / Scenario Framework-style Debug section with Show Debug Shapes In Workbench and Show Debug Shapes During Runtime. To hide vehicle markers, select the placed WDDA_VehicleSpawn instance(s) and uncheck Show Debug Shapes In Workbench on WDDA_VehicleSpawnComponent. Use the same field on AI slots, QRF/Last Stand sources, waypoint slots, or Areas to hide those markers. To change a whole marker type, edit the WDDA prefab default or multi-select placed instances of that type in Workbench and change the field together.

Waypoint workflow

WDDA route discovery is structural. With Assign Waypoints checked on an AI slot, QRF source, or Last Stand source, place WDDA_WaypointSlot route holders under that source. For AI slots, a route may be direct children or inside any nested WDDA_Layer. For QRF and Last Stand sources, placed waypoints are assigned before the internal incident move waypoint, so they run first — use this for vehicle boarding or other staging steps that must happen before the force moves to the fight.

Waypoint behavior:

Use names such as:


WP_01_Move
WP_02_Defend
WP_03_Cycle

What each WDDA component does

WDDA_AreaComponent owns the Scenario Framework-style dynamic spawn/despawn enclosure. It checks eligible player presence at a low frequency, asks nested AI slots to start/suspend/resume, makes one structural QRF request when total original-force strength reaches the configured remaining-percent threshold, and marks the Area encounter clear only after original AI plus pending/active QRF or Last Stand state are eliminated.

WDDA_AISlotComponent owns one original encounter AI spawn location: AI prefab, repeated-spawn count/timer, spawn radius, child waypoint slots, child vehicle staging, spawned batch cleanup, and logical suspension/resume.

WDDA_QRFSpawnComponent owns a reinforcement source: response prefab, repeated-spawn style batches, batch spawn radius, response delay, max waves per accepted call, optional child waypoint route, structurally owned vehicle staging, optional External Addon Support mode, and optional one-level structural Last Stand escalation.

WDDA_LastStandSpawnComponent owns the terminal Last Stand response source. It shares the same spawn/batch/wave/waypoint/vehicle behavior as QRF sources, but intentionally does not expose another Last Stand escalation option.

WDDA_WaypointSlotComponent is the route holder for original AI slots. Place one waypoint slot per route point under the owning AI slot or nested route layer, then pick the desired base AIWaypoint_* prefab on each slot.

WDDA_VehicleSpawnComponent owns a staged vehicle/support source: vehicle prefab, count, spacing, and cleanup choice. It does not command AI or assign seats.

WDDA_ExternalSupportTrackerComponent is an optional adapter contract for self-contained support prefabs. Attach it, or a derived component in an optional integration addon, when WDDA needs to know whether external support is still active.

WDDA_ClearAreaTaskBridgeComponent is an optional Area-owned bridge to a placed ClearArea-style SCR_Task. Disabled bridges do no runtime work.

WDDA_LayerComponent is a lightweight structural organization marker.

WDDA does not duplicate the Editor's built-in component Enabled checkbox with separate addon-level enabled fields. Runtime components respect the component enabled state so disabled components stay inert.

QRF and Last Stand

Repeat cycles

WDDA batches map closest to Scenario Framework repeated-spawn behavior: repeated spawn count/timer inside one Area activation. Repeat timing starts only after the full encounter force is eliminated. If the encounter called QRF or Last Stand, original AI plus the called QRF/Last Stand chain must be gone before repeat timing begins.

Vehicle notes

Suspension / resume model

WDDA persists encounters logically, not physically. When players leave while defenders remain, WDDA remembers remaining force strength and deletes spawned AI entities for performance. When players return, WDDA respawns roughly that remaining force strength.

WDDA does not serialize individual soldier health, ammo, exact position, vehicle seat, suppression, current target, or exact combat state.

Task System integration

WDDA currently supports ClearArea-style task completion through WDDA_ClearAreaTaskBridgeComponent.

ClearArea-style completion means:


original WDDA AI eliminated
AND any called QRF / Last Stand eliminated

Update Task Progress can show approximate ClearArea progress on tasks that support SCR_ExtendedTask progress. Progress is based on the original encounter force and remains below completion while called QRF or Last Stand is pending or active.

Destroy, Defend, Hold, and Deliver tasks should remain native workflows unless a future dedicated adapter is designed.

Server AI limit handling

WDDA does **not** define its own global AI cap. Server admins should use the base-game/server AI limit.

If the server AI limit is reached, WDDA defers spawning when possible and warns in the server log. Spawn failure is treated as setup/runtime failure, not as an encounter clear.

What WDDA does not do

Troubleshooting