Load engines from TOML and improve scenario audio and carb tuning

Migrate 32 engine definitions into validated startup-loaded TOML files and separate configuration and snapshots from scenario assembly. Add camera-based stereo propagation from shared pipe geometry, preserve exhaust character, tune carburetor mixtures and idle, use ignition cuts for carb engines, and support returning to the scenario menu.

Validation: full Windows build and all 14 CTest checks passed.
This commit is contained in:
max
2026-10-24 03:24:35 +02:00
parent 5607dcf2b5
commit bf8621ad39
82 changed files with 24084 additions and 648 deletions

136
engines/single-450.toml Normal file
View File

@@ -0,0 +1,136 @@
# Engine definition. Dimensional keys state their units.
schema_version = 1
id = "single-450"
name = "450 cc / carbureted four-stroke thumper"
category = "Singles / four-stroke"
description = "40 mm carb / mild valve timing / fixed idle stop"
order = 17
cycle = "four_stroke"
[engine]
bank_angle_deg = 60.0
collector_volume_litres = 0.25
cylinders = 1
initial_rpm = 1960.0
initialize_phased_charge = true
layout = "inline"
maximum_load_torque_nm = 30.0
minimum_substeps = 1
phase_degrees = [0.0]
pipe_damping = 1.0
plenum_volume_litres = 1.0
starter_torque_nm = 11.21926
throttle_diameter_mm = 40.0
topology = "collector"
[cylinder]
afr = 14.7
ambient_temperature_k = 300.0
bore_mm = 96.0
burn_duration_deg = 60.0
burn_start_deg = 5.0
compression = 10.0
energy_variation = 0.05
exhaust_close_deg = 370.0
exhaust_open_deg = 145.0
exhaust_valve_count = 1
exhaust_valve_diameter_mm = 30.72
exhaust_valve_lift_mm = 8.640001
fuel_lhv_j_per_kg = 4.4e+07
heat_transfer = 100.0
intake_close_deg = 565.0
intake_open_deg = 355.0
intake_valve_count = 1
intake_valve_diameter_mm = 36.48
intake_valve_lift_mm = 9.6
misfire_probability = 0.0
rod_mm = 111.6
stroke_mm = 62.0
wall_area = 0.02
wiebe_a = 5.0
wiebe_m = 2.0
[crankshaft]
friction_constant_nm = 1.795081
friction_quadratic_nm_s2 = 0.0
friction_viscous_nm_s = 0.001795081
inertia_kg_m2 = 0.05385243
[ecu]
idle_base_opening = 0.045
idle_control = "fixed"
idle_ki = 4e-05
idle_kp = 0.0001
idle_max_opening = 0.25
idle_minimum_advance_deg = -5.0
idle_rpm = 1400.0
idle_spark_gain = 0.02
ignition_map = [[0.0, 10.0], [15000.0, 40.0]]
overrun_cut_rpm = 3500.0
overrun_fuel_cut_enabled = false
overrun_ignition_cut_enabled = true
overrun_resume_rpm = 2400.0
power_afr = 12.8
rev_limit_enabled = true
rev_limit_fuel_cut_enabled = false
rev_limit_rpm = 7000.0
rev_resume_rpm = 6750.0
stoichiometric_afr = 14.7
throttle_closing_rate = 0.0
throttle_closing_time_constant_s = 0.0
throttle_rate = 1000.0
throttle_time_constant_s = 0.001
[vehicle]
air_density = 1.225
clutch_capacity = 98.72945
clutch_engagement_rate = 8.0
drag_coefficient = 0.7
final_drive_ratio = 2.7
frontal_area = 0.65
gear_ratios = [4.1, 2.7, 2.0, 1.55, 1.25, 0.98]
gravity = 9.80665
mass_kg = 240.0
primary_reduction = 1.8
rolling_resistance = 0.015
rotational_inertia_kg_m2 = 1.2
wheel_radius_mm = 320.0
[fuel]
system = "carburetor"
pilot_jet_diameter_mm = 0.09349564
main_jet_diameter_mm = 2.091829
needle_jet_diameter_mm = 2.15284
needle_low_scale = 0.944
needle_mid_scale = 0.564
needle_off_idle_scale = 0.995
needle_quarter_scale = 0.835
needle_tip_scale = 0.97
needle_transition_scale = 1.6
needle_upper_scale = 0.65
bowl_capacity_kg = 0.1
bowl_refill_kg_per_s = 0.1
[[pipes]]
id = "intake"
cells = 4
diameter_mm = 75.0
length_mm = 200.0
[[pipes]]
id = "runners"
cells = 5
diameter_mm = 35.0
length_mm = 250.0
[[pipes]]
id = "primaries"
cells = 13
diameter_mm = 38.0
length_mm = 650.0
[[pipes]]
id = "tailpipe"
cells = 30
diameter_mm = 60.0
length_mm = 1500.0