######################################################
#
# Wheel type ingame settings recommendations:
#
# DD wheel bases:
# LFB 5-10
# FX 50
#
# Belt wheels
# LFB ??
# FX 50
#
# Gear
# LFB ??
# FX 50
##MTUV_START
# Min Force - Set to higher values for belt and gear driven wheels
# Typical values 0.06 - 0.12
(min_force 0.00)
# Scaling settings ----------------------------------------
# Rack - amplification of rack forces
(micro_details 0.9)
(macro_details 0.6)
(rack_load 1.4)
(brake_load 0.5)
(load_scale 0.2)
(adhesion_scale 0.3)
(overall_damping 0.2)
(tightness 0.6)
# FX - generated effects (affected by FX slider)
(scrub_scale 0.5)
(kerb_scale 0.2)
(gyro_scale 1.0)
(engine_scale_slow 0.6)
(engine_scale_fast 0.03)
# Rack smoothing - removes some of the harsher details
(output_smoothing 0.0)
# Scrub settings ------------------------------------------
# Overall scrub scale - used to scale both front and back
(scrub_scale_master (* scrub_scale 30.0))
# Scrub scale (0.0 - 2.0)
# Set to 0.0 to disable
(scrub_scale_front 1.2)
(scrub_scale_rear 0.7)
# Scrub lambda (inversely proportional to frequency of effect)
# Higher values give lower freq. Best range 1.1 - 1.8
(scrub_lambda_front 1.6)
(scrub_lambda_rear 1.2)
# Scrub spring settings
(scrub_spring_stiffness 40000.0)
(scrub_spring_damping 0.1)
(scrub_spring_effect 1.0)
##MTUV_END
# Constrain to range
(tightness (- tightness (* min_force 3)))
(tightness (min 3.0 (max 0.15 tightness)))
# Reiza variables -----------------------------------------
(lever_mode 0)
(smooth_level 0)
(max_change 1.0)
(scrub_rack 0.0)
(scrub_rear 0.0)
(scrub_vibe 0.0)
(rack_damping_scale 0.0)
# Reiza code ----------------------------------------------
# general multipliers (from ams1)
(max_overall_force 11500.0)
(recip_force ( / 1.0 max_overall_force))
#mfasr scaler
(rack_scaled ( * arm_force ( / max_overall_force M_max_force_at_rack)))
(rack_scaled ( * rack_scaled recip_force))
(rack rack_scaled)
(rack_smooth (smooth rack M_force_smoothing))
(rack (if M_force_smoothing rack_smooth rack))
# PARKING LOT FORCE
(parkingForce (* parkingForceMult rack))
(parkingForce (* parkingForce (crossover et 0.0 5.0)))
(parkingForce (* parkingForce (- 1.0 (crossover vel_mag 0.0 7.0))))
(rack (* rack (crossover vel_mag 0.0 5.0)))
(rack (+ rack parkingForce))
# Kerb enhancement ----------------------------------------
(prd 1.0)
(FL_bump_period (* 0.15 FL_bump_kerb))
(FL_bump_amplitude (* 0.1 FL_bump_kerb))
(FL_bump_sharpness 0.9)
(inv_period (/ 1.0 (+ FL_bump_period 0.001)))
(dphase (* FL_vel_x dt inv_period))
(sin1 (oscillator (* prd 1.0 dphase)))
(sin2 (oscillator (* prd 2.0 dphase)))
(sin3 (oscillator (* prd 3.0 dphase)))
(term1 (* (/ -2.0 prd) sin1))
(term2 (* (/ -1.0 prd) sin2))
(term3 (* (/ -0.6667 prd) sin3))
(sawtooth (+ term1 term2 term3))
(FL_bump (* sawtooth (* FL_load 1.0) FL_bump_amplitude FL_angvel))
(FR_bump_period (* 0.15 FR_bump_kerb))
(FR_bump_amplitude (* 0.1 FR_bump_kerb))
(FR_bump_sharpness 0.9)
(inv_period (/ 1.0 (+ FR_bump_period 0.001)))
(dphase (* FR_vel_x dt inv_period))
(sin1 (oscillator (* prd 1.0 dphase)))
(sin2 (oscillator (* prd 2.0 dphase)))
(sin3 (oscillator (* prd 3.0 dphase)))
(term1 (* (/ -2.0 prd) sin1))
(term2 (* (/ -1.0 prd) sin2))
(term3 (* (/ -0.6667 prd) sin3))
(sawtooth (+ term1 term2 term3))
(FR_bump (* sawtooth (* FR_load -1.0) FR_bump_amplitude FR_angvel))
(kerb_tex (* (+ FL_bump FR_bump) 0.0012 kerb_scale))
# Scrub FX ------------------------------------------------
# Scrub Front
(sf_s 0.55)
(FL_scrub (soft_clip FL_scrub 2.0 0.0))
(FL_scrub (* (/ 1 (- 1.0 sf_s)) (max 0.0 (- FL_scrub sf_s))))
(FL_scrub (power FL_scrub 2.0))
(FL_scrub (* FL_scrub (oscillator scrub_lambda_front)))
(FR_scrub (soft_clip FR_scrub 2.0 0.0))
(FR_scrub (* (/ 1 (- 1.0 sf_s)) (max 0.0 (- FR_scrub sf_s))))
(FR_scrub (power FR_scrub 2.0))
(FR_scrub (* FR_scrub (oscillator scrub_lambda_front)))
(scrub_scale_factor (* scrub_scale_master scrub_scale_front))
(FL_scrub (* scrub_scale_factor FL_scrub))
(FL_scrub (spring FL_scrub scrub_spring_stiffness scrub_spring_damping scrub_spring_effect))
(FR_scrub (* scrub_scale_factor FR_scrub))
(FR_scrub (spring FR_scrub scrub_spring_stiffness scrub_spring_damping scrub_spring_effect))
# Scrub Rear
(sr_s 0.52)
(RL_scrub (soft_clip RL_scrub 2.0 0.0))
(RL_scrub (* (/ 1 (- 1.0 sr_s)) (max 0.0 (- RL_scrub sr_s))))
(RL_scrub (power RL_scrub 2.0))
(RL_scrub (* RL_scrub (oscillator scrub_lambda_rear)))
(RR_scrub (soft_clip RR_scrub 2.0 0.0))
(RR_scrub (* (/ 1 (- 1.0 sr_s)) (max 0.0 (- RR_scrub sr_s))))
(RR_scrub (power RR_scrub 2.0))
(RR_scrub (* RR_scrub (oscillator scrub_lambda_rear)))
(scrub_scale_factor (* scrub_scale_master scrub_scale_rear))
(RL_scrub (* scrub_scale_factor RL_scrub))
(RL_scrub (spring RL_scrub scrub_spring_stiffness scrub_spring_damping scrub_spring_effect))
(RR_scrub (* scrub_scale_factor RR_scrub))
(RR_scrub (spring RR_scrub scrub_spring_stiffness scrub_spring_damping scrub_spring_effect))
# Texture -------------------------------------------------
# Combining road effects
(FL_tex (+ FL_scrub RL_scrub))
(FR_tex (+ FR_scrub RR_scrub))
(tex (+ FL_tex FR_tex kerb_tex))
(tex (soft_clip tex 1.0 0.0))
# Smooth texture at standstill / very low speeds
(slow_tex (smooth tex 0.1))
(slow_tex (drag slow_tex 0.0001 0.0))
(speed_bias (max 0.0 (min 1.0 (/ vel_mag 10.0))))
(tex (blend speed_bias slow_tex tex))
# Engine
(max_rps 8000.0)
(rps_scale ( / crankshaft max_rps))
(rps_scale ( power rps_scale 0.8))
(rps_scale (min rps_scale 0.02))
(rps_scale (max rps_scale 0.14))
(load_mult (+ 0.8 throttle))
(load_mult (max load_mult 1.0))
(engine_scale (blend (min 1.0 (/ vel_mag 50.0)) engine_scale_slow engine_scale_fast))
(engine_vibe (sin crankPos))
(engine_vibe ( * load_mult engine_vibe rps_scale engine_scale))
(feel ( + tex engine_vibe))
# Pseudo Gyro forces --------------------------------------
(ratio_scale ( / 10.0 (max 10 steer_ratio)))
(ac (power (min 1.0 (/ vel_mag 100)) 0.8))
(mx (blend (max 0.0 (- (/ vel_mag 77) 0.3)) 0.0 ac))
(ms (power (* 0.1 (smooth steering_vel 0.05)) 1.0))
(pseudo_gyro_force (* 20.0 ms mx ratio_scale fx gyro_scale))
# Rack ----------------------------------------------------
# Gamma values
(micro_gamma (- 2.0 (* 2.0 micro_details)))
(macro_gamma (- 2.0 (* 2.0 macro_details)))
(rack_gamma (- 2.0 rack_load))
# Detail gamma using fx
(ug (+ 1.0 (* (power (* fx 0.5) micro_gamma))))
(mg (+ 1.0 (* (power (* fx 0.5) macro_gamma))))
# Dynamic Load gamma - increases rack force under high loads e.g. downforce or braking
(f_load_avg (/ (+ FL_load FR_load) 2.0))
(counter (+ counter 1.0))
(counter (if (max 0 (- et 0.2)) (counter) (1.0) ))
(counter (if (max 0 (- counter 10000)) 10000 counter))
(moving_avg (+ moving_avg 0.0))
(moving_avg (if moving_avg moving_avg f_load_avg))
(moving_avg (+ (* moving_avg (/ (- counter 1.0) counter)) (* f_load_avg (/ 1.0 counter))))
(static_load moving_avg)
(smooth_load_scaled (/ (- (smooth f_load_avg 0.1) (* 1.0 static_load)) static_load))
(smooth_load (max 0.0 (+ 0.5 (blend load_scale 0.0 smooth_load_scaled))))
(adhesion_front (- 1.0 (/ (+ FL_slide FR_slide) 2.0)))
(adhesion_front_scaled (blend adhesion_scale 1.0 adhesion_front))
(brake_load_scaled (+ 1.0 (blend brake_load 0.0 brake)))
# Sigmoid coefficients
(sf (* adhesion_front_scaled brake_load_scaled))
(sp 0.8)
# Sigmoid load calculation
(sig_load (* 1.0 (/ sf (+ 1.0 (power 2.718 (* -4.0 (- smooth_load sp))))) ))
(rg (+ 1.2 (power sig_load rack_gamma)))
# Split out detail levels
(rack_fine_detail (- rack (smooth rack 0.002)))
(rack_coarse_detail (smooth rack 0.02))
(rack_medium_detail (- (- rack rack_fine_detail) rack_coarse_detail))
# Apply gamma to details
(rack_fine_detail (power rack_fine_detail (/ 1.0 ug)))
(rack_medium_detail (power rack_medium_detail (/ 1.0 mg)))
# Apply LFB and dynamic load gamma to rack
# LFB 0 fix
(rack_coarse_nolfb (* rack_coarse_detail adhesion_front_scaled))
(rack_coarse_lfb (lfb (* rack_coarse_detail adhesion_front_scaled) 0.15))
(rack_coarse_lfb (if (smooth (max 0.0 (- 0.99 (abs (lfb 1.0 0.1)))) 0.5) rack_coarse_nolfb rack_coarse_lfb))
# Rack gamma
(blend_factor (power (* 2.0 (- (/ 1.0 (+ 1.0 (power 2.718 (* (* -100.0 tightness) rack_coarse_detail)))) 0.5)) 9.0))
(rack_coarse_lfb (blend (abs blend_factor) rack_coarse_detail (power rack_coarse_lfb (/ 1.0 rg))))
# Sigmoid clipping
# Coarse Details
(sg_g (max 0.2 gain))
(sg_p (/ 0.75 sg_g))
(sg_s (/ 0.5 sg_g))
(sg_f (+ (/ sg_s (+ 1.0 (power 2.718 (* -1.0 (* (/ 4 sg_s) (- rack_coarse_lfb sg_p)))))) (- sg_p (/ sg_s 2.0)) ))
(rack_coarse_lfb (if (max 0.0 (- rack_coarse_lfb sg_p)) sg_f rack_coarse_lfb))
(sg_f (+ (/ sg_s (+ 1.0 (power 2.718 (* -1.0 (* (/ 4 sg_s) (- (* -1.0 rack_coarse_lfb) sg_p)))))) (- sg_p (/ sg_s 2.0)) ))
(rack_coarse_lfb (if (min 0.0 (+ rack_coarse_lfb sg_p)) (* -1.0 sg_f) (rack_coarse_lfb)))
# Bump Details
(sg_p 0.1)
(sg_s 0.5)
(sg_f (+ (/ sg_s (+ 1.0 (power 2.718 (* -1.0 (* (/ 4 sg_s) (- rack_medium_detail sg_p)))))) (- sg_p (/ sg_s 2.0)) ))
(rack_medium_detail (if (max 0.0 (- rack_medium_detail sg_p)) sg_f rack_medium_detail))
(sg_f (+ (/ sg_s (+ 1.0 (power 2.718 (* -1.0 (* (/ 4 sg_s) (- (* -1.0 rack_medium_detail) sg_p)))))) (- sg_p (/ sg_s 2.0)) ))
(rack_medium_detail (if (min 0.0 (+ rack_medium_detail sg_p)) (* -1.0 sg_f) (rack_medium_detail)))
# Fine Details
(sg_p 0.1)
(sg_s 0.3)
(sg_f (+ (/ sg_s (+ 1.0 (power 2.718 (* -1.0 (* (/ 4 sg_s) (- rack_fine_detail sg_p)))))) (- sg_p (/ sg_s 2.0)) ))
(rack_fine_detail (if (max 0.0 (- rack_fine_detail sg_p)) sg_f rack_fine_detail))
(sg_f (+ (/ sg_s (+ 1.0 (power 2.718 (* -1.0 (* (/ 4 sg_s) (- (* -1.0 rack_fine_detail) sg_p)))))) (- sg_p (/ sg_s 2.0)) ))
(rack_fine_detail (if (min 0.0 (+ rack_fine_detail sg_p)) (* -1.0 sg_f) (rack_fine_detail)))
# Combine rack and details
(rack (+ rack_coarse_lfb rack_fine_detail rack_medium_detail))
# Construct Output ----------------------------------------
# Rack damping
(sv (smooth (- steering_pos lsp) 0.05))
(lsp steering_pos)
(ssv (+ (* 0.7 (/ sv dt)) (* 0.3 ssv)))
(rack (+ rack (* 0.1 overall_damping ssv) pseudo_gyro_force))
# Smooth rack at standstill / very low speeds
(slow_rack (drag rack 0.0001 0.0))
(slow_rack (smooth slow_rack 0.1))
(ms (* 0.25 (smooth steering_vel 0.005)))
(speed_bias (max 0.1 (min 1.0 (/ vel_mag 3.0))))
(rack (blend speed_bias (+ slow_rack ms) rack))
# FX LFB
(feel ( lfb feel 0.15))
# Combine rack and FX forces
(output ( + rack ( * feel fx 0.8)))
(output (blend output_smoothing output (smooth output (* output_smoothing 0.01))))
# Scaler for info, no affect on output --------------------
(scale_window_init 10.0)
(scale_window_nominal 2.0)
(scale_soft_clear_t 10.0)
(scale_min 0.2)
(scale_max 2.0)
(scale_blend_t 2.0)
(signal_scale output
1.0 1.0 1.0 1.0 1.0
0.0
0.0 0.0)
# Clipping ------------------------------------------------
(output (* output gain))
(sg_p 0.75)
(sg_s 0.5)
(sg_f (+ (/ sg_s (+ 1.0 (power 2.718 (* -1.0 (* (/ 4 sg_s) (- output sg_p)))))) (- sg_p (/ sg_s 2.0)) ))
(output (if (max 0.0 (- output sg_p)) sg_f output))
(sg_f (+ (/ sg_s (+ 1.0 (power 2.718 (* -1.0 (* (/ 4 sg_s) (- (* -1.0 output) sg_p)))))) (- sg_p (/ sg_s 2.0)) ))
(output (if (min 0.0 (+ output sg_p)) (* -1.0 sg_f) (output)))
# Lock stops ----------------------------------------------
(custom_lock_stop 2.0)
(stops (bumpstop output 0.15 0.5 0.15 1.0))
(output (+ output (* stops custom_lock_stop)))
# Statistics output ---------------------------------------
(histogram (* output 1.01))
(info2 output)