Documentation

Complete guide to installing, configuring, and using IASER

Quick Start Guide

Prerequisites

Make sure you have DCS World 2.7+ installed and Windows 10/11 (64-bit)

1. Download IASER

Download the latest release from our GitHub repository:

# Clone the repository
git clone https://github.com/dark0venom/IASER.git
cd IASER

# Or download the pre-built release
# https://github.com/dark0venom/IASER/releases

2. Build the Project

Run the automated build script:

# Run the build script
.\build.ps1

# Or build manually with CMake
mkdir build
cmake -B build -S . -DCMAKE_BUILD_TYPE=Release
cmake --build build --config Release

3. Setup DCS Integration

Copy the export script to your DCS Scripts folder:

# Copy export script
copy "lua_scripts\Export.lua" "%USERPROFILE%\Saved Games\DCS\Scripts\Export.lua"

4. Run IASER

Start the IASER engine:

# Run IASER
.\build\Release\iaser.exe

5. Start DCS World

Launch DCS World and start any mission. IASER will automatically connect and display telemetry data.

Installation

System Requirements

Component Minimum Recommended
Operating System Windows 10 (64-bit) Windows 11 (64-bit)
Memory 4 GB RAM 8 GB RAM
Storage 50 MB 100 MB
DCS World 2.7.0 Latest OpenBeta
Network Localhost Localhost

Development Requirements

If building from source:

  • Visual Studio 2022 with C++20 support
  • CMake 3.20 or later
  • vcpkg package manager (optional but recommended)
  • Git for source control

Configuration

IASER can be configured through command-line arguments or a configuration file.

Command Line Options

# Basic usage
iaser.exe [options]

# Available options:
--telemetry-port PORT    # UDP port for telemetry (default: 45100)
--command-port PORT      # TCP port for commands (default: 45101)
--dcs-host HOST         # DCS host address (default: 127.0.0.1)
--update-rate RATE      # Update frequency in Hz (default: 30)
--log-level LEVEL       # Logging level: debug, info, warn, error
--config FILE           # Load configuration from file

Configuration File

Create a config.json file:

{
  "network": {
    "telemetry_port": 45100,
    "command_port": 45101,
    "dcs_host": "127.0.0.1"
  },
  "engine": {
    "update_rate_hz": 30.0,
    "max_units": 1000,
    "enable_logging": true
  },
  "ai": {
    "tactical_update_rate": 10.0,
    "strategic_update_interval": 60.0,
    "enable_advanced_behaviors": true
  }
}

DCS World Setup

Important

The export script must be properly installed for IASER to receive telemetry data from DCS.

Export Script Installation

  1. Navigate to your DCS Saved Games folder:
    %USERPROFILE%\Saved Games\DCS\Scripts\
  2. If an Export.lua file already exists, backup it first
  3. Copy the IASER export script:
    copy "IASER\lua_scripts\Export.lua" "%USERPROFILE%\Saved Games\DCS\Scripts\Export.lua"

Chaining with Existing Scripts

If you have existing export scripts, you can chain them:

-- At the top of your existing Export.lua
dofile(lfs.writedir().."Scripts\\IASER\\iaser_export.lua")

-- Your existing export code continues below...

Firewall Configuration

Ensure Windows Firewall allows DCS to communicate on the configured ports:

  • UDP port 45100 (telemetry export)
  • TCP port 45101 (command reception)

Running IASER

Starting the Engine

Launch IASER before starting DCS World:

# Start with default settings
iaser.exe

# Start with custom configuration
iaser.exe --config my_config.json

# Start with specific ports
iaser.exe --telemetry-port 45200 --command-port 45201

Console Output

IASER provides real-time status information:

IASER - Intelligent Air & Surface External Runtime
Version 1.0.0 - Phase 1: Core Infrastructure

Configuration:
  Telemetry Port: 45100
  Command Port: 45101
  DCS Host: 127.0.0.1
  Update Rate: 30.0 Hz

IASER engine started successfully
Waiting for DCS World connection...
UDP receiver started on port 45100
Connected to DCS at 127.0.0.1:45101

Statistics:
  Frames Received: 1250
  Commands Sent: 15
  Parse Errors: 0
  Active Aircraft: 2
  Last Update Time: 485.234s

DCS Integration

  1. Start IASER first
  2. Launch DCS World
  3. Load any mission or training scenario
  4. IASER will automatically detect and connect
  5. Watch the console for telemetry statistics

Troubleshooting

Symptoms: IASER shows "Frames Received: 0"
Solutions:
  • Verify export script is in correct location
  • Check Windows Firewall settings
  • Ensure DCS mission is running (not in menu)
  • Restart both IASER and DCS

Symptoms: "Failed to connect to DCS" messages
Solutions:
  • Check if port 45101 is in use by another application
  • Try different ports using command line options
  • Verify DCS is running and script is loaded
  • Disable antivirus temporarily for testing

Symptoms: Delayed responses, frame drops
Solutions:
  • Reduce update rate: --update-rate 20
  • Close unnecessary applications
  • Check system resource usage
  • Use wired network connection if applicable

API Reference

IASER provides both C++ APIs for engine integration and network protocols for external tools.

Core Engine API

// Basic engine usage
#include "iaser/engine.hpp"

iaser::EngineConfig config;
config.telemetry_port = 45100;
config.command_port = 45101;

iaser::Engine engine(config);
engine.start();

// Get aircraft information
auto aircraft = engine.getAllAircraft();
for (const auto& ac : aircraft) {
    std::cout << "Aircraft: " << ac.getTypeName() 
              << " at " << ac.getPosition().x << ", " 
              << ac.getPosition().y << std::endl;
}

// Send commands
engine.sendTextMessage("Hello from IASER!");
engine.sendWaypoint(1, iaser::Vector3(123456, 567890, 8000));

engine.stop();

Network Protocol

Telemetry format (UDP):

SEQ:123;TIME:456.789;COUNT:2;
AC1:ID=1,TYPE=F-16C,X=123.45,Y=678.90,Z=8000.0,HDG=1.57,FUEL=0.75;
AC2:ID=2,TYPE=F-18C,X=124.45,Y=679.90,Z=8100.0,HDG=1.60,FUEL=0.80;

Command format (TCP):

TEXT:Hello DCS World!
WAYPOINT:1,123456,567890,8000
SPAWN:F-16C,123000,567000,5000

Examples

Basic Monitoring Application

#include "iaser/engine.hpp"
#include 
#include 
#include 

int main() {
    iaser::EngineConfig config;
    iaser::Engine engine(config);
    
    if (!engine.start()) {
        std::cerr << "Failed to start engine\n";
        return 1;
    }
    
    std::cout << "Monitoring DCS World...\n";
    
    while (true) {
        auto stats = engine.getStatistics();
        std::cout << "Active Aircraft: " << stats.active_aircraft
                  << ", Frames: " << stats.frames_received << "\n";
        
        std::this_thread::sleep_for(std::chrono::seconds(5));
    }
    
    return 0;
}

Simple AI Behavior

// Basic threat response
auto aircraft_list = engine.getAllAircraft();

for (const auto& aircraft : aircraft_list) {
    // Check fuel level
    if (aircraft.getFuelLevel() < 0.2) {
        engine.sendTextMessage("Aircraft " + 
            std::to_string(aircraft.getId()) + 
            " low on fuel - RTB recommended");
    }
    
    // Simple proximity alert
    for (const auto& other : aircraft_list) {
        if (other.getId() != aircraft.getId()) {
            double distance = aircraft.getDistanceTo(other);
            if (distance < 1000.0) { // 1km
                engine.sendTextMessage("Proximity alert!");
            }
        }
    }
}

Advanced Usage

Custom Export Scripts

You can modify the Lua export script to send additional data:

-- Add custom data fields
local function exportCustomData()
    local customData = {
        weather = LoGetWeatherAtPoint(pos),
        time_of_day = LoGetMissionOptions().start_time,
        mission_name = LoGetMissionDescription()
    }
    return customData
end

Performance Optimization

  • Reduce Update Rate: Lower frequencies for less critical applications
  • Selective Data Export: Only export needed aircraft types
  • Compression: Enable data compression for large scenarios
  • Filtering: Filter out inactive or distant units

Integration with Other Tools

IASER can work alongside other DCS tools:

  • SRS (SimpleRadio): Chain export scripts
  • DCS-BIOS: Coordinate data export
  • Tacview: Parallel telemetry recording
  • Custom Dashboards: Use network protocol for external displays