Intelligent. Autonomous. Lethal.
A multi-layered AI system operating at 3 decision frequencies — from strategic campaign management down to individual missile shots at 60 Hz — fully synchronized with DCS World in real-time.
Inspired by real military command structures — IASER mirrors the strategic, operational, and tactical decision levels of modern armed forces, each running at its own dedicated frequency.
Campaign-level decision making. Manages objectives, resource allocation and threat assessment across the entire battlefield.
StrategicDirector — campaign brainResourceAllocator — aircraft, armor, shipsThreatAssessment — global threat scoringVictoryConditionEvaluatorMission planning and package composition. Coordinates air, ground, and naval forces across operational zones.
OperationalPlannerPackageBuilder — air package composerGroundOffensivePlannerNavalPlanner + AirDefensePlannerReal-time engagement decisions — BVR/WVR combat, SAM fire control, electronic warfare, unit maneuvering at 60 frames per second.
TacticalController — master engagementBVREngagement + WVREngagementSAMController — SAM fire controlEWController — electronic warfareT_IPC_ReadDCS data ingestion10 ms pollT_TacticalTactical AI controller30–60 HzT_OperationalMission planner5 HzT_StrategicCampaign director1 HzT_LogisticsSupply & resupply0.5 HzT_PersistCampaign save0.1 HzIASER manages the full spectrum of modern and legacy military assets across air, ground, and naval domains.
IASER's campaign engine transitions through six distinct phases, automatically adapting strategy based on battlefield outcomes.
State loading, unit validation, AI warm-up
Initial phase — balanced engagements
Reinforcements, expanded zones, new weapons
Decisive engagements or fallback to DEFENSIVE
Tactical pause — negotiations
Campaign conclusion, results saved
IASER extends seamlessly into the WWII era. Switch coalition, swap SAM networks for Flak batteries, and deploy the full Eagle Dynamics WWII asset catalog.
Air Superiority Fighter
Long-Range Escort Fighter
Fighter-Bomber
Air Superiority Fighter
High-Altitude Fighter
Fighter-Bomber
Channel / Southern England
Summer 1940 — Luftwaffe offensive against RAF airfields and radar stations. Spitfire Mk IX and Hurricane vs Bf 109 / Bf 110.
Normandy, France
June–August 1944 — D-Day landings through the Falaise pocket. Full combined-arms AI including naval fire support.
Ardennes, Belgium
December 1944 — German winter offensive. Difficult weather conditions with limited ISR and degraded air operations.
IASER exposes clean C++ interfaces and Lua export hooks for full integration with DCS World scripting and external tools.
// include/ipc/IIpcChannel.h
namespace iaser::ipc {
class IIpcChannel {
public:
virtual ~IIpcChannel() = default;
virtual bool connect() = 0;
virtual void disconnect() = 0;
virtual bool isConnected() const = 0;
virtual void sendCommand(const IpcCommand& cmd) = 0;
virtual std::optional<IpcEvent> pollEvent() = 0;
virtual ChannelType type() const = 0;
virtual ChannelStats getStats() const = 0;
};
} // namespace iaser::ipc
// include/units/IUnit.h
namespace iaser::units {
class IUnit {
public:
virtual ~IUnit() = default;
virtual uint32_t id() const = 0;
virtual std::string_view typeName() const = 0;
virtual Coalition coalition() const = 0;
virtual UnitCategory category() const = 0;
virtual Position3D position() const = 0;
virtual Velocity3D velocity() const = 0;
virtual float heading() const = 0;
virtual float health() const = 0;
virtual bool isAlive() const = 0;
};
} // namespace iaser::units
-- DCS Export Hook — IASER bridge
local iaser = {}
function iaser.onSimulationStart()
log.write("IASER", log.INFO, "Simulation started")
iaser_shm.connect()
end
function iaser.onPlayerTryChangeSlot(playerID, side, slotID)
return iaser_rpc.isSlotAllowed(playerID, slotID)
end
function Export.LuaExportActivityNextEvent(t)
local objects = LoGetWorldObjects("all")
iaser_shm.writeFrame(objects, t)
return t + 0.01 -- 100 Hz update loop
end
All public headers are in include/ — interfaces prefixed with I
All entity IDs are uint32_t — matching DCS World unit IDs directly
All geographic coordinates in decimal degrees WGS84
All timestamps in seconds since mission start (DCS mission time)
All public interfaces are thread-safe. Internal state protected by std::shared_mutex