Clear all

DCS custom export.lua and Simtools settings

New Member
Joined: 4 years ago
Posts: 4
Topic starter  

Hi all

Thought I'd share my export.lua, which I'm quite pleased with. I have added some functions that make especially heliopter flying more realistic and rich in feedback. I have a background in general aviation, mainly sailplanes. Therefore I really enjoy what Value1 and Dirty have done with the roll rate function, which is far more realistic than holding a steady tilt when banking / climbing. The AOA function is also great but I encountered serious problems with helicopters.

When flying slowly or hovering, the AOA shifts abruptly between positive and negative values. For example, climbing / descending at slow speeds gives a value of anything between -90° and +90° AOA. Again, flying backwards outputs values from -90° to -180° and +90° to +180°. Flying backwards and transitioning from descent to climbing results in -180° to +180° jerk. Highly annoying and distracting.

The export.lua I attached here outputs no AOA values at low airspeeds, but outputs pitch/bank rate values. While speed increases, the AOA values gradually increase and angle rates decrease. Works great on helos, and pulling high AOA manoeuvres in a MIG29 feel awesome.

I am flying in VR, in which this setup works great! Let me know what you guys think. You might want to dial up yaw, pitch an roll for helos and down for jets. Try an aileron roll in the F-15 and you know what I mean. 😉

Below is the code and pics of the settings are in the next post.



Code: (copy and replace your export.lua code, don't forget to backup the original)

-- Experimental Export plugin for SimTools V2.35 (created by Value1, modified by Dirty)
-- Version 0.05

-- Added AOA speed & attitude sensitivity for choppers by Mikko

Myfunction =
    package.path = package.path..";.LuaSocket?.lua"
    package.cpath = package.cpath..";.LuaSocket?.dll"
    socket = require("socket")

    my_init = socket.protect(function()
        -- export telemetry to SimTools
        host1 = host1 or ""
        port1 = port1 or 41230
        c = socket.udp ( )
        c:settimeout ( 0 )
        c:setpeername ( host1, port1 )

    --Euler Angles
    local mySelf = LoGetSelfData()
        local Yaw =     mySelf.Heading
        local Pitch =     mySelf.Pitch
        local Bank =     mySelf.Bank
    local accel = LoGetAccelerationUnits()
    local omega = LoGetAngularVelocity()
    --Air Data
    local IAS = LoGetIndicatedAirSpeed()
    local AOA = LoGetAngleOfAttack();

    --Weight On Wheels
    local LeftGear = LoGetAircraftDrawArgumentValue(6)
    local NoseGear = LoGetAircraftDrawArgumentValue(1)
    local RightGear = LoGetAircraftDrawArgumentValue(4)
    local OnGround = 0        --OnGround status is determined by the compression of ANY gear strut
    if (LeftGear > 0 or NoseGear > 0 or RightGear > 0)
            OnGround = 1
            OnGround = 0

--change exported values when on ground
    if (OnGround == 1) then
        accel.x = accel.x * 2.00
        accel.y = accel.y * 3.00
        accel.z = accel.z * 2.00
        omega.x = omega.x * 1.00
        omega.y = omega.y * 1.00
        omega.z = omega.z * 1.00

-- AOA AND PITCH FIX (For smooth chopper hover and natural pitch behaviour)

    --Pitch/AoA speed sensitivity
    local maxFXspd = 60.00
    local midFXspd = 30.00
    local minFXspd = 10.00
    local AOAspeedCoeff = math.min ( IAS - minFXspd , midFXspd ) / midFXspd

    if AOAspeedCoeff < 0
    then AOA = 0
AOA = AOA * AOAspeedCoeff


    local PitchCoeff = math.min ( IAS , maxFXspd ) / maxFXspd
        if IAS > minFXspd
        then Pitch = Pitch * PitchCoeff
    --Reverse flight & extreme AOA angle cancellation
    local AOApeak = 45
    local AOAfade = 80
    if AOA < -AOAfade then AOA = 0
    elseif AOA < -AOApeak then AOA=AOA+(2*AOApeak)
    elseif AOA < 0 then AOA = -AOA

    elseif AOA < AOApeak then AOA = AOA
    elseif AOA < AOAfade then AOA = 80 - AOA
    else AOA = 0
--send data via UDP my_send = socket.protect(function() if c then socket.try(c:send(string.format("%.4f; %.4f; %.4f; %.4f; %.4f; %.4f; %.4f; %.4f; %.4f;n", omega.x, omega.y, omega.z, accel.x, accel.y, accel.z, OnGround, IAS, AOA))) end end) my_send() end, Stop=function(self) my_close = socket.protect(function() if c then c:close() end end) my_close() end } -- ============= -- Overload -- ============= -- Works once just before mission start. do local PrevLuaExportStart=LuaExportStart LuaExportStart=function() Myfunction:Start() if PrevLuaExportStart then PrevLuaExportStart() end end end -- Works just after every simulation frame. do local PrevLuaExportAfterNextFrame=LuaExportAfterNextFrame LuaExportAfterNextFrame=function() Myfunction:AfterNextFrame() if PrevLuaExportAfterNextFrame then PrevLuaExportAfterNextFrame() end end end -- Works once just after mission stop. do local PrevLuaExportStop=LuaExportStop LuaExportStop=function() Myfunction:Stop() if PrevLuaExportStop then PrevLuaExportStop() end end end

New Member
Joined: 4 years ago
Posts: 4
Topic starter  

Wait for it...

New Member
Joined: 4 years ago
Posts: 4
Topic starter  

Ok, now I've posted more than one post and I'm able to attach files 🙂 Enjoy.

DCS tuning
DCS axes1
DCS axes2
This post was modified 2 years ago by Mikko

Estimable Member Customer
Joined: 5 years ago
Posts: 115

Hello Miko

Thank for sharing, i have not tried flight sims yet but may do in the future, thanks for sharing. 

ive just posted a video to help feel the Yaw movement, you may find it informative,  

My Rig - Fasetech Racing Cube Simulator V2 (4DOF)
HP Reverb V2, Asus ROG STRIX X299-E GAMING Motherboard, Intel Core i9-7900X CPU
Asus GeForce RTX 2080 Ti DUAL OC 11GB ,
Fanatec DD2, v1.5 Shifter, Fanatec Club-sport Formula SW, Hand brake, He Pro Pedals, Carbon fibre bucket seat, Wind Sim,