Custom piston engine: Combustion stays at 0.0% despite all prerequisites confirmed correct

Environment

  • MSFS 2024, Project Editor / EX1 SDK
  • Custom aircraft: WWI biplane, single Mercedes D.IIIa-style inline 6-cylinder piston engine (fictional recreation), fully custom [FUEL_SYSTEM], magneto ignition, manual hand-crank starter

Symptom

A:GENERAL ENG COMBUSTION:1 stays at 0.0% in every test, across dozens of attempts, despite the engine physically turning (RPM climbs to 400-470 via starter torque) and every prerequisite I can find documented appearing satisfied. The engine only ever “starts” via the generic Ctrl+E autostart routine, and even then I cannot confirm real combustion vs. starter torque alone.

What’s confirmed working (verified with debug spies reading the actual A:/L: values, not just assuming the code ran)

[Attach: forum_img1_fuel_system_pressure_no_flow.png — Debug Aircraft Engines + Fuel System side by side: positive pressure (2-5 PSI) all the way up to JunctionPumpsToEngine, but Flow: 0.0 Gal/H on that specific line, Combustion: 0.0%]

  • Magnetos: K:MAGNETO1_SET wired to a cabin switch, confirmed toggling (0/3)
  • Mixture: forced to 16384 via K:MIXTURE1_SET every frame, confirmed stable at 100% in Debug Aircraft Engines
  • Throttle: wired to K:THROTTLE1_SET (0-16384 range), confirmed tracking the lever position in the debug window
  • Fuel pressure/plumbing: [FUEL_SYSTEM] with tanks, manual pump, engine-driven pump (#Index:1#PressureCurve:1), valves — Fuel System Debug shows correct topology, positive pressure (2-5 PSI) all the way to the JunctionPumpsToEngine line
  • Legacy engine fuel valve: found A:GENERAL ENG FUEL VALVE:1 was closed by default; wired K:TOGGLE_FUEL_VALVE_ENG1 to force it open every frame — confirmed open via spy, no change in Combustion
  • Priming: requires_priming = 1. Wired K:TOGGLE_PRIMER1 (per ASOBO_ENGINE_Primer_SubTemplate) to fire once per full hand-crank rotation. Confirmed via spy that A:RECIP ENG PRIMER:1 climbs to 85-90%+ with repeated cranking — no change in Combustion
  • Starter: custom logic firing K:STARTER1_SET when 5 conditions are met (priming ≥7 turns, spark retard lever at position, magnetos on, on ground, hand-crank spinning fast). Confirmed engaging via spy (XMLVAR_Starter_Engaged=1)
  • min_required_rpm = 350 (not left at default 700) — RPM does exceed this during starter engagement

What’s been ruled out with direct evidence (not just “should be fine”)

Hypothesis Test Result
starter_type Manual vs Electric Swapped 1→0 No change
DisablePropellerControls Swapped 1→0 No change
requires_priming itself Swapped 1→0 (bypass) No change — still 0% even with priming requirement disabled entirely
Legacy A:GENERAL ENG FUEL VALVE Forced open via K:TOGGLE_FUEL_VALVE_ENG1 No change
min_required_rpm at default 700 Already explicitly set to 350 N/A, ruled out by config
min_fuel_press_for_combustion_psf Default (0.01 psf) vs. our measured pressure (hundreds of mbar) Default is far below what we have, ruled out
master_ignition_switch = 0 blocking ignition Compared against a working reference aircraft (Sikorsky S-16 addon, confirmed to combust) which also has master_ignition_switch = 0 Ruled out — matching value on a working aircraft
Electrical circuit dependency (#Circuit:N on FUEL_SYSTEM valves + proper bus/battery/circuit.N declaration in systems.cfg, matching the working reference aircraft’s syntax exactly) Implemented, confirmed via Instance/Bus debug window that the circuit was declared and “Connected: True”, but Bus Voltage read 0.0V and circuit showed Missing(-1.00W) despite the battery showing 12.5V Voltage never actually propagated from battery to bus — inconclusive, but tying valves to this half-broken circuit also broke basic valve responsiveness (Toggle button in Fuel System Debug stopped doing anything), so this was reverted rather than debugged further

[Attach: forum_img2_electrical_bus_0V.png — Instance/Components Overview: Main_Battery shows 12.5V but Fuel_System_Circuit shows Voltage: 0.0V, Missing(-1.00W)]

[Attach: forum_img3_bus_connections_detail.png — Bus Connections tab: Main_BUS shows Voltage: 0.0V, MISSING(-1.00W), SUPPLIED(-1.00W) despite both the battery and circuit showing “Connected: True”]

Fields I can’t find documentation for

  • InletCover: 1 in the Debug Aircraft Engines panel — appears fixed at 1 in every single reading regardless of engine state. Could not find this documented anywhere. Is this relevant to piston engines at all, or a leftover field from another engine type’s debug template?

Specific question

Given fuel pressure, mixture, magnetos, throttle, priming level, and starter engagement are all individually confirmed correct via debug spies (not assumptions), what else does MSFS 2024’s piston engine combustion calculation require before GENERAL ENG COMBUSTION can go non-zero? Is there a definitive, ordered checklist of every precondition (beyond what’s in the Piston Engines tuning tutorial page) that’s known to gate this specifically?

Any pointer — a config parameter, a required SimVar write we’re missing, or a known interaction between [FUEL_SYSTEM] and the piston combustion calc — would be hugely appreciated after a full day of systematic elimination.

Hello @EstratoLab

Here’s what’s checked for combustion:

  • RPM: must be above 400 or 16% of your max RPM
  • Fuel:
    • Shutoff valve in correct position
    • Pressure must be above what’s configured with min_fuel_press_for_combustion_psf
    • mixture lever > 5%
  • Magnetos activated
  • Enough cooland in the reservoir is cooling_type set to liquid (RECIP ENG COOLANT RESERVOIR PCT simvar)
  • No damage from WEP / emergency boost system
  • Correct temperatures: if not diesel, glow plug must be active (RECIP ENG GLOW PLUG ACTIVE simvar)
  • Engine covers are removed
  • No engine failure: check the Wear&Tear debug to ensure engine is in good condition

Maybe you have engine covers defined and the corresponding parameter is set to 1 in the FLT that corresponds to your flight?
Covers, Chocks, And Pins |
FLT File Properties |

Let me know if this helps.

Regards,
Sylvain

Thank you very much for answering, the solution was easier than expected, the solution was the covers.

:face_with_hand_over_mouth: