This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| tools:a3flightmodeltool [2026/07/19 15:36] – rock | tools:a3flightmodeltool [2026/07/20 12:28] (current) – rock | ||
|---|---|---|---|
| Line 7: | Line 7: | ||
| ===== Pages ===== | ===== Pages ===== | ||
| - | * [[tools:arma3_flight_graph_tool: | + | * [[/tools:a3flightmodeltool# |
| - | * [[tools:arma3_flight_graph_tool: | + | * [[tools:a3flightmodeltool# |
| - | * [[tools:arma3_flight_graph_tool: | + | * [[tools:a3flightmodeltool# |
| - | * [[tools:arma3_flight_graph_tool: | + | * [[tools:a3flightmodeltool# |
| - | * [[tools:arma3_flight_graph_tool: | + | * [[tools:a3flightmodeltool# |
| ===== What the tool does ===== | ===== What the tool does ===== | ||
| Line 36: | Line 36: | ||
| * [[https:// | * [[https:// | ||
| - | ====== | + | ====== Flight Model Graph Tool Workflow ====== |
| Follow this process for each aircraft type. Do not tune duplicate editor variants separately unless they use genuinely different physics values. | Follow this process for each aircraft type. Do not tune duplicate editor variants separately unless they use genuinely different physics values. | ||
| Line 172: | Line 172: | ||
| ^ Aircraft ^ Typical extracted config path ^ | ^ Aircraft ^ Typical extracted config path ^ | ||
| - | | A-143 Buzzard | '' | + | | A-143 Buzzard | '' |
| - | | A-149 Gryphon | '' | + | | A-149 Gryphon | '' |
| - | | A-164 Wipeout | '' | + | | A-164 Wipeout | '' |
| - | | Caesar BTT | '' | + | | Caesar BTT | '' |
| - | | F/A-181 Black Wasp II | '' | + | | F/A-181 Black Wasp II | '' |
| - | | KH-3A Fenghuang | '' | + | | KH-3A Fenghuang | '' |
| - | | MQ-4A Greyhawk | '' | + | | MQ-4A Greyhawk | '' |
| - | | To-199 Neophron | '' | + | | To-199 Neophron | '' |
| - | | To-201 Shikra | '' | + | | To-201 Shikra | '' |
| - | | UCAV Sentinel | '' | + | | UCAV Sentinel | '' |
| - | | V-44 X Blackfish | '' | + | | V-44 X Blackfish | '' |
| - | | Y-32 Xi'an | '' | + | | Y-32 Xi'an | '' |
| - | + | ||
| - | Search examples: | + | |
| - | + | ||
| - | <code -> | + | |
| - | rtk rg -n -i 'class .*Plane|simulation *= *" | + | |
| - | rtk rg -n 'class I_Plane_Fighter_04_F|class Plane_Fighter_04_Base_F' | + | |
| - | </ | + | |
| ===== Your addon config ===== | ===== Your addon config ===== | ||
| Line 363: | Line 356: | ||
| For a graph array with '' | For a graph array with '' | ||
| - | < | + | < |
| station_speed_kmh = maxSpeed_kmh * range * i / (N - 1) | station_speed_kmh = maxSpeed_kmh * range * i / (N - 1) | ||
| </ | </ | ||
| Line 378: | Line 371: | ||
| Example for '' | Example for '' | ||
| - | < | + | < |
| station_speed_kmh = 800 * 1.25 * 6 / 13 | station_speed_kmh = 800 * 1.25 * 6 / 13 | ||
| station_speed_kmh = 461.5 | station_speed_kmh = 461.5 | ||
| Line 389: | Line 382: | ||
| If two adjacent points surround 1 g, interpolate between them: | If two adjacent points surround 1 g, interpolate between them: | ||
| - | < | + | < |
| t = (1 - lower_g) / (upper_g - lower_g) | t = (1 - lower_g) / (upper_g - lower_g) | ||
| stall_speed = lower_speed + t * (upper_speed - lower_speed) | stall_speed = lower_speed + t * (upper_speed - lower_speed) | ||
| Line 400: | Line 393: | ||
| Use landing-configuration stall speed if known: | Use landing-configuration stall speed if known: | ||
| - | < | + | < |
| landingSpeed = landing_stall_speed * 1.20 to 1.35 | landingSpeed = landing_stall_speed * 1.20 to 1.35 | ||
| </ | </ | ||
| Line 417: | Line 410: | ||
| Use this relationship as a rough check: | Use this relationship as a rough check: | ||
| - | < | + | < |
| approx_maneuver_speed = stall_speed * sqrt(positive_limit_g) | approx_maneuver_speed = stall_speed * sqrt(positive_limit_g) | ||
| </ | </ | ||
| Line 429: | Line 422: | ||
| In simplified form for each axis: | In simplified form for each axis: | ||
| - | < | + | < |
| friction_force = v * abs(v) * coef2 + v * coef1 + sign(v) * coef0 | friction_force = v * abs(v) * coef2 + v * coef1 + sign(v) * coef0 | ||
| </ | </ | ||
| Line 435: | Line 428: | ||
| The arrays contain three values: | The arrays contain three values: | ||
| - | < | + | < |
| airFrictionCoefs0[] = { X, Y, Z }; | airFrictionCoefs0[] = { X, Y, Z }; | ||
| airFrictionCoefs1[] = { X, Y, Z }; | airFrictionCoefs1[] = { X, Y, Z }; | ||
| Line 449: | Line 442: | ||
| If static thrust is known: | If static thrust is known: | ||
| - | < | + | < |
| baseThrustN = known_static_thrust_N | baseThrustN = known_static_thrust_N | ||
| </ | </ | ||
| Line 455: | Line 448: | ||
| If engine power is known instead: | If engine power is known instead: | ||
| - | < | + | < |
| baseThrustN = power_W / target_speed_mps | baseThrustN = power_W / target_speed_mps | ||
| </ | </ | ||
| Line 467: | Line 460: | ||
| The tool estimates climb from excess power: | The tool estimates climb from excess power: | ||
| - | < | + | < |
| excess_thrust_N = thrust_N - drag_N | excess_thrust_N = thrust_N - drag_N | ||
| excess_power_W = excess_thrust_N * speed_mps | excess_power_W = excess_thrust_N * speed_mps | ||
| Line 484: | Line 477: | ||
| Keep '' | Keep '' | ||
| + | |||
| + | ====== In-game Flight Model Tuning Checklist ====== | ||
| + | |||
| + | Use this checklist after every meaningful curve or drag change. | ||
| + | |||
| + | ===== Preflight setup ===== | ||
| + | |||
| + | * Build a temporary test class or keep the tuned class isolated in a test addon. | ||
| + | * Use a fixed fuel and payload state. | ||
| + | * Use clear weather and no wind. | ||
| + | * Test at known altitude bands. | ||
| + | * Record the config version or commit. | ||
| + | * Record which preset or aircraft class was used as the baseline. | ||
| + | |||
| + | ===== Import sanity checks ===== | ||
| + | |||
| + | ^ Check ^ Pass condition ^ | ||
| + | | Class and parent | Correct aircraft class inherits from the intended parent. | | ||
| + | | '' | ||
| + | | Arrays | Graph arrays contain numeric values and no missing commas. | | ||
| + | | Drag arrays | '' | ||
| + | | Altitude limits | '' | ||
| + | | Landing speed | '' | ||
| + | |||
| + | ===== Level flight tests ===== | ||
| + | |||
| + | Run level flight tests at: | ||
| + | |||
| + | * Sea level or low altitude. | ||
| + | * Typical combat altitude. | ||
| + | * Near '' | ||
| + | * Above '' | ||
| + | |||
| + | 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 '' | ||
| + | |||
| + | ===== Stall tests ===== | ||
| + | |||
| + | 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 '' | ||
| + | |||
| + | ===== Takeoff tests ===== | ||
| + | |||
| + | Record: | ||
| + | |||
| + | * Rotation speed. | ||
| + | * Lift-off speed. | ||
| + | * Runway distance. | ||
| + | * Pitch authority at rotation. | ||
| + | * Gear-up acceleration. | ||
| + | |||
| + | If the aircraft will not rotate, adjust low-speed '' | ||
| + | |||
| + | ===== Landing tests ===== | ||
| + | |||
| + | Record: | ||
| + | |||
| + | * Stable approach speed. | ||
| + | * Sink rate. | ||
| + | * Flare authority. | ||
| + | * Touchdown speed. | ||
| + | * Runway stopping distance. | ||
| + | * AI approach behaviour if AI use matters. | ||
| + | |||
| + | If approach is too fast, check '' | ||
| + | |||
| + | ===== Control tests ===== | ||
| + | |||
| + | ^ Axis ^ What to check ^ Main fields ^ | ||
| + | | Roll | Roll rate at takeoff, cruise, and high speed. | '' | ||
| + | | Pitch | Rotation, flare, pull-up, and stall recovery. | '' | ||
| + | | Yaw | Runway tracking, slips, and high-speed yaw stability. | '' | ||
| + | |||
| + | Use arrays for speed-specific problems. Use scalar fields when the whole aircraft feels too light or too heavy. | ||
| + | |||
| + | ===== Drag device tests ===== | ||
| + | |||
| + | ^ Device ^ Test ^ | ||
| + | | Flaps | Approach descent rate, speed loss, landing stability. | | ||
| + | | Gear | Gear-down speed loss and approach drag. | | ||
| + | | Airbrake | Dive recovery, combat deceleration, | ||
| + | |||
| + | Tune one device at a time. Do not change flap, gear, and airbrake drag together unless you are deliberately doing a broad reset. | ||
| + | |||
| + | ===== Test record template ===== | ||
| + | |||
| + | ^ Field ^ Value ^ | ||
| + | | Aircraft class | | | ||
| + | | Config version | | | ||
| + | | Baseline preset/ | ||
| + | | Payload/ | ||
| + | | Altitude | | | ||
| + | | Weather/ | ||
| + | | Changed fields | | | ||
| + | | Result | | | ||
| + | | Next action | | | ||
| + | |||
| + | ===== Acceptance criteria ===== | ||
| + | |||
| + | A tuning pass is ready to move forward when: | ||
| + | |||
| + | * The exported config loads without errors. | ||
| + | * The aircraft can take off, climb, cruise, land, and recover from stalls. | ||
| + | * The aircraft reaches a plausible level-flight maximum speed. | ||
| + | * Altitude performance degrades smoothly. | ||
| + | * Controls are useful at low speed and not excessive at high speed. | ||
| + | * AI behaviour is acceptable for the intended role. | ||
| + | * Source notes identify which values are extracted, estimated, or calibrated. | ||