This guide explains how to build and tune Arma 3 PlaneX/basic flight model config values with the RKSL Flight Model Graph Tool.
The tool is designed for addon makers who need to see how envelope[], thrustCoef[], control authority arrays, drag coefficients, altitude limits, and landing values work together before exporting a config snippet.
The tool is a tuning assistant. It does not replace in-game testing, resolved inheritance checks, Geometry LOD mass checks, or final config validation.
Keep these three things separate while tuning:
Follow this process for each aircraft type. Do not tune duplicate editor variants separately unless they use genuinely different physics values.
Open the tool and choose one of the BIS aircraft presets that most closely matches the aircraft role, mass, speed range, and engine type.
Good starting comparisons:
| Aircraft type | Useful BIS starting point |
|---|---|
| Light jet / trainer | A-143 Buzzard or A-149 Gryphon |
| CAS jet | A-164 Wipeout or To-199 Neophron |
| Modern fighter | F/A-181 Black Wasp II, To-201 Shikra, or A-149 Gryphon |
| UAV / UCAV | MQ-4A Greyhawk or UCAV Sentinel |
| Prop aircraft | Caesar BTT |
| VTOL / heavy transport | V-44 X Blackfish or Y-32 Xi'an |
Use the preset as a known-good baseline, not as the final answer.
Find the aircraft class you are tuning in CfgVehicles.
Record:
If the aircraft inherits from another class, resolve inheritance before changing values. Many editor-facing variants reuse the same physics class.
Enter these values before editing curves:
| Tool field | Source priority |
|---|---|
maxSpeed km/h | Real data if known, otherwise existing config, otherwise similar BIS class |
landingSpeed km/h | Real landing reference, existing config, or 1.20 to 1.35 times landing-configuration stall speed |
stallSpeedForced km/h | Use only when you have a sourced or tested stall value to force |
mass kg | Geometry LOD mass or sourced aircraft mass |
base thrust N | Engine thrust estimate or calibrated graph-assist value |
structural limit +g | Published aircraft limit, design target, or conservative class target |
structural limit -g | Published aircraft limit, design target, or conservative class target |
mass kg, base thrust N, and the structural limits are tool calculation inputs. They are not exported as PlaneX config fields by the current tool.
Paste the existing config values into the matching fields:
envelope[]thrustCoef[]aileronCoef[]elevatorCoef[]rudderCoef[]The tool resamples editable curves to 14 points. Before resampling a real config array, keep the original values in the source note or version control.
Each numbered point is a speed station.
envelope[] covers 0% to 125% of maxSpeed.thrustCoef[], aileronCoef[], elevatorCoef[], and rudderCoef[] cover 0% to 150% of maxSpeed.Drag points vertically to change the value at that speed. Use the point table to see the exact speed and coefficient being edited.
Use the Lift Envelope view.
If stallSpeedForced is 0, the tool estimates clean stall from the envelope[] 1 g crossing.
Use the Thrust, Drag, and Climb Estimate views.
thrustCoef[] so low-speed acceleration, cruise acceleration, and high-speed falloff are plausible.airFrictionCoefs2[] for most high-speed drag tuning.airFrictionCoefs1[] for broader speed-range drag adjustment.altNoForce higher than altFullForce.The goal is for available thrust and drag to balance close to the intended level-flight top speed, then degrade plausibly with altitude.
Use the Control Authority view.
aileronCoef[] controls roll authority by speed.elevatorCoef[] controls pitch authority by speed.rudderCoef[] controls yaw authority by speed.aileronSensitivity, elevatorSensitivity, and rudderInfluence are broad scalars.Use the arrays for speed-specific behaviour and the scalar fields for whole-aircraft heaviness.
Use the Stall / Landing view and test with flaps, gear, and airbrake options.
flapsFrictionCoef until approach and descent behaviour are useful without becoming a brake parachute.gearsUpFrictionCoef against gear-down speed loss and approach drag.airBrakeFrictionCoef against dive recovery and combat-speed deceleration.landingSpeed above the landing-configuration stall speed with a practical margin.
Use Copy snippet or Download config.
Paste the exported values into the aircraft class or into a controlled child test class. Test in-game before replacing production values.
After each meaningful change, record:
Use the best available source for each value. Prefer extracted config and measured model data over guesswork, then use real-world data where the game needs a credible target.
The bundled presets were extracted from a local Q:\a3 config tree. If your Arma 3 source tree is mounted elsewhere, search the equivalent unpacked PBO folders.
| Aircraft | Typical extracted config path |
|---|---|
| A-143 Buzzard | P:\a3\air_f_gamma\Plane_Fighter_03\config.cpp |
| A-149 Gryphon | P:\a3\air_f_jets\Plane_Fighter_04\config.cpp |
| A-164 Wipeout | P:\a3\air_f_epc\Plane_CAS_01\config.cpp |
| Caesar BTT | P:\a3\air_f_exp\Plane_Civil_01\config.cpp |
| F/A-181 Black Wasp II | P:\a3\air_f_jets\Plane_Fighter_01\config.cpp |
| KH-3A Fenghuang | P:\a3\air_f_exp\UAV_04\config.cpp |
| MQ-4A Greyhawk | P:\a3\drones_f\Air_F_Gamma\UAV_02\config.cpp |
| To-199 Neophron | P:\a3\air_f_epc\Plane_CAS_02\config.cpp |
| To-201 Shikra | P:\a3\air_f_jets\Plane_Fighter_02\config.cpp |
| UCAV Sentinel | P:\a3\air_f_jets\UAV_05\config.cpp |
| V-44 X Blackfish | P:\a3\air_f_exp\VTOL_01\config.cpp |
| Y-32 Xi'an | P:\a3\air_f_exp\VTOL_02\config.cpp |
Check these files first:
config.cppconfig.hppFind the final aircraft class, then follow parent classes until the flight model fields are declared.
Record whether each value is:
If you only have PBOs, unpack the relevant Arma 3 PBO and convert config.bin to readable config text with your normal Arma tooling.
Common source areas:
Arma 3\Addons\air_f*.pboArma 3\Addons\drones_f*.pboDo not edit extracted BIS files. Copy the values into your own addon class or test class.
Use Object Builder or your modelling workflow to inspect:
The tool uses mass kg for estimates. The final in-game aircraft behaviour still depends on the model and config together.
Useful real-world or design-target values:
Use real data as a target, then adapt it to Arma gameplay and AI behaviour.
Build a small test mission with clear weather, no wind, repeatable fuel/loadout, and a known starting altitude.
Record:
Run the same test after each change. If the test method changes, do not compare the numbers as if they came from the same run.
This page maps the tool fields to Arma 3 config values and explains how to source or calculate each value.
| Tool field | Config field | Meaning | How to fill it |
|---|---|---|---|
| Class name | class MyPlane_F | Exact CfgVehicles class being tuned. | Copy from the addon config. Keep stable because inheritance, pylons, factions, scripts, and editor entries may reference it. |
| Display name | displayName | Editor-facing label. | Use only as a readable label. Do not use display names as identifiers. |
| Simulation | simulation | PlaneX aircraft should use airplaneX or inherited equivalent. | Verify the parent class. This tool is not for RotorLib Advanced Flight Model XML. |
| Source note | Tool note | Evidence trail for the current values. | Record source class, source file, inherited parent, measured data, and in-game test notes. |
| Tool field | Exported? | Meaning | How to calculate or source it |
|---|---|---|---|
maxSpeed km/h | Yes, maxSpeed | Main speed reference used by PlaneX graph arrays and AI behaviour. | Use real level-flight max speed, existing config, or close BIS class. Tune thrust and drag until in-game level speed converges near this value. |
mass kg | No | Tool-side mass for drag, climb, and power-to-weight estimates. | Use Geometry LOD mass or sourced aircraft mass. If unknown, start from a similar BIS aircraft and update after model mass is known. |
base thrust N | No | Tool-side base thrust used with thrustCoef[] to estimate available thrust. | Use known engine thrust if available. If only power is known, estimate from thrust_N = power_W / speed_mps. Otherwise calibrate until thrust and drag balance near top speed. |
structural limit +g | No | Positive G reference used for graph warnings and envelope overlays. | Use published aircraft data or a conservative design target. Validate sustained turns and pull-ups in game. |
structural limit -g | No | Negative G reference used for graph warnings. | Use published aircraft data or a conservative target lower than positive G for most aircraft. |
stallSpeedForced km/h | Yes, if above 0 | Explicit stall reference where supported. | Leave 0 if the tool should estimate stall from envelope[]. Set only if you have a sourced or tested stall speed. |
landingSpeed km/h | Yes, landingSpeed | AI/autopilot landing reference speed. | Start at 1.20 to 1.35 times landing-configuration stall speed, then validate approach, flare, and runway behaviour. |
| Tool field | Exported config field | Speed range | Meaning | Tuning rule |
|---|---|---|---|---|
envelope[] | envelope[] | 0% to 125% of maxSpeed | Lift/load-factor curve in G. | Put the 1 g crossing near clean stall, peak around maneuvering speed, then taper high-speed lift. |
thrustCoef[] | thrustCoef[] | 0% to 150% of maxSpeed | Speed-based multiplier for available thrust. | Shape acceleration and high-speed falloff so thrust and drag balance near intended top speed. |
aileronCoef[] | aileronCoef[] | 0% to 150% of maxSpeed | Roll authority by speed. | Preserve low-speed control, avoid excessive high-speed roll response. |
elevatorCoef[] | elevatorCoef[] | 0% to 150% of maxSpeed | Pitch authority by speed. | Tune rotation, flare, stall recovery, and high-speed G control alongside envelope[]. |
rudderCoef[] | rudderCoef[] | 0% to 150% of maxSpeed | Yaw authority by speed. | Keep enough low-speed runway authority, taper high-speed yaw to avoid abrupt lateral response. |
The current editor uses 14 draggable points for each graph array. Imported arrays with a different count are resampled for editing.
| Tool field | Config field | Meaning | How to tune |
|---|---|---|---|
airFrictionCoefs0[] | airFrictionCoefs0[] | Constant term of the PlaneX axis drag formula. | Use three model-space X/Y/Z values. Start from a similar BIS aircraft. |
airFrictionCoefs1[] | airFrictionCoefs1[] | Linear term of the PlaneX axis drag formula. | Adjust broad drag behaviour across the speed range. |
airFrictionCoefs2[] | airFrictionCoefs2[] | Quadratic term of the PlaneX axis drag formula. | Tune high-speed drag and level-flight top speed. |
flapsFrictionCoef | flapsFrictionCoef | Additional drag when flaps are deployed. | Raise until approach speed and descent angle are useful without excessive braking. |
gearsUpFrictionCoef | gearsUpFrictionCoef | Landing gear drag coefficient. | Tune gear-down speed loss and approach drag. Keep fixed-gear aircraft conservative. |
airBrakeFrictionCoef | airBrakeFrictionCoef | Airbrake drag coefficient. | Tune dive recovery and combat-speed deceleration. Use 0 or omit if the aircraft has no airbrake. |
altFullForce m | altFullForce | Altitude where thrust starts degrading. | Use engine type and target service profile. Below this, thrust remains at full force in the tool model. |
altNoForce m | altNoForce | Altitude where thrust influence reaches zero. | Keep above altFullForce. Validate climb and level speed at altitude. |
| Tool field | Config field | Meaning | How to tune |
|---|---|---|---|
aileronSensitivity | aileronSensitivity | Broad scalar for roll response. | Use for whole-aircraft roll heaviness after the speed curve is shaped. |
elevatorSensitivity | elevatorSensitivity | Broad scalar for pitch response. | Use for whole-aircraft pitch heaviness after elevatorCoef[] and envelope[] are plausible. |
rudderInfluence | rudderInfluence | Broad yaw/rudder influence. | Tune with rudderCoef[] and runway handling. Very high values can make yaw feel arcade-like. |
The tool exports:
displayNamesimulationmaxSpeedlandingSpeedstallSpeedForced when above 0envelope[]thrustCoef[]airFrictionCoefs0[]airFrictionCoefs1[]airFrictionCoefs2[]aileronCoef[]elevatorCoef[]rudderCoef[]aileronSensitivityelevatorSensitivityrudderInfluenceflapsFrictionCoefgearsUpFrictionCoefairBrakeFrictionCoefaltFullForcealtNoForceThese formulas explain how the tool places graph points and how to calculate useful starting values.
| Convert | Formula |
|---|---|
| km/h to m/s | speed_mps = speed_kmh / 3.6 |
| m/s to km/h | speed_kmh = speed_mps * 3.6 |
| horsepower to watts | power_W = hp * 745.7 |
| kilowatts to watts | power_W = kW * 1000 |
| kilograms force to newtons | force_N = kgf * 9.80665 |
For a graph array with N editable points and zero-based point index i:
station_speed_kmh = maxSpeed_kmh * range * i / (N - 1)
The current tool uses N = 14.
| Array | Range multiplier | Last point |
|---|---|---|
envelope[] | 1.25 | 125% of maxSpeed |
thrustCoef[] | 1.50 | 150% of maxSpeed |
aileronCoef[] | 1.50 | 150% of maxSpeed |
elevatorCoef[] | 1.50 | 150% of maxSpeed |
rudderCoef[] | 1.50 | 150% of maxSpeed |
Example for maxSpeed = 800 and envelope[] point 6:
station_speed_kmh = 800 * 1.25 * 6 / 13 station_speed_kmh = 461.5
When stallSpeedForced is 0, use the speed where envelope[] crosses 1 g as the clean stall estimate.
If two adjacent points surround 1 g, interpolate between them:
t = (1 - lower_g) / (upper_g - lower_g) stall_speed = lower_speed + t * (upper_speed - lower_speed)
If no two points cross 1 g, the curve does not provide a useful clean stall estimate.
Use landing-configuration stall speed if known:
landingSpeed = landing_stall_speed * 1.20 to 1.35
Use the lower end for light aircraft with forgiving handling and the upper end for heavy, fast, or AI-sensitive aircraft.
A practical initial shape:
Use this relationship as a rough check:
approx_maneuver_speed = stall_speed * sqrt(positive_limit_g)
This is only a tuning guide; Arma behaviour still needs in-game validation.
Bohemia documents PlaneX air friction as a per-axis model-space calculation using airFrictionCoefs2[], airFrictionCoefs1[], and airFrictionCoefs0[].
In simplified form for each axis:
friction_force = v * abs(v) * coef2 + v * coef1 + sign(v) * coef0
The arrays contain three values:
airFrictionCoefs0[] = { X, Y, Z };
airFrictionCoefs1[] = { X, Y, Z };
airFrictionCoefs2[] = { X, Y, Z };
Use the same axis ordering as the source config. Preserve signs and decimal precision when copying values.
base thrust N is a tool-side graph input, not an exported PlaneX config value.
If static thrust is known:
baseThrustN = known_static_thrust_N
If engine power is known instead:
baseThrustN = power_W / target_speed_mps
For prop aircraft, choose a low to medium target speed near best climb or cruise. For jets, start with known static thrust if possible.
If no thrust or power data exists, copy a similar BIS preset and calibrate until the Thrust and Drag views balance near the intended top speed.
The tool estimates climb from excess power:
excess_thrust_N = thrust_N - drag_N excess_power_W = excess_thrust_N * speed_mps climb_mps = excess_power_W / (mass_kg * 9.80665)
Use this only for comparison between tuning passes. Final climb rate must be checked in game because Arma control response, AI behaviour, payload, altitude, and model setup all affect the result.
A useful tuning assumption:
altFullForce, thrust remains fully available.altFullForce and altNoForce, thrust progressively reduces.altNoForce, thrust influence reaches zero.
Keep altNoForce higher than altFullForce. If the values are too close, aircraft performance can collapse abruptly with altitude.
Use this checklist after every meaningful curve or drag change.
| Check | Pass condition |
|---|---|
| Class and parent | Correct aircraft class inherits from the intended parent. |
simulation | Aircraft uses airplaneX or inherits it from the parent class. |
| Arrays | Graph arrays contain numeric values and no missing commas. |
| Drag arrays | airFrictionCoefs0/1/2[] each contain three numeric values. |
| Altitude limits | altNoForce is higher than altFullForce. |
| Landing speed | landingSpeed is above the selected stall estimate. |
Run level flight tests at:
altFullForce.altFullForce but below altNoForce.Record:
| Test | Record |
|---|---|
| Acceleration | Time from low speed to cruise speed. |
| Cruise | Stable speed at normal throttle and altitude. |
| Maximum level speed | Stable top speed at full throttle. |
| Altitude performance | Speed and climb degradation with altitude. |
If top speed is too high, increase high-speed drag or reduce high-speed thrustCoef[]. If acceleration is too weak but top speed is right, raise low/mid-speed thrustCoef[] and compensate high-speed drag if needed.
Test clean, flaps, and landing configuration.
| Test | Expected behaviour |
|---|---|
| Clean stall | Stall begins near the target clean stall speed. |
| Flaps stall | Stall speed is lower or landing behaviour improves without becoming unstable. |
| Stall warning | Warning is useful before loss of control if configured. |
| Recovery | Nose-down recovery is possible without excessive altitude loss for the aircraft type. |
If the clean stall is too fast, raise low-speed envelope[] around the 1 g crossing. If it is too slow, lower the same region.
Record:
If the aircraft will not rotate, adjust low-speed elevatorCoef[] or elevatorSensitivity. If it rotates but will not lift, adjust low-speed envelope[].
Record:
If approach is too fast, check landingSpeed, flap drag, and low-speed lift. If the aircraft floats excessively, reduce low-speed lift or flap effect.
| Axis | What to check | Main fields |
|---|---|---|
| Roll | Roll rate at takeoff, cruise, and high speed. | aileronCoef[], aileronSensitivity |
| Pitch | Rotation, flare, pull-up, and stall recovery. | elevatorCoef[], elevatorSensitivity, envelope[] |
| Yaw | Runway tracking, slips, and high-speed yaw stability. | rudderCoef[], rudderInfluence |
Use arrays for speed-specific problems. Use scalar fields when the whole aircraft feels too light or too heavy.
| Device | Test |
|---|---|
| Flaps | Approach descent rate, speed loss, landing stability. |
| Gear | Gear-down speed loss and approach drag. |
| Airbrake | Dive recovery, combat deceleration, and high-speed braking. |
Tune one device at a time. Do not change flap, gear, and airbrake drag together unless you are deliberately doing a broad reset.
| Field | Value |
|---|---|
| Aircraft class | |
| Config version | |
| Baseline preset/class | |
| Payload/fuel | |
| Altitude | |
| Weather/wind | |
| Changed fields | |
| Result | |
| Next action |
A tuning pass is ready to move forward when: