THE RECIPE Stage 0: go into documents beamng drive folder, in mods create a folder and name it Unpacked, in that folder create a new folder called, Hatch_tutorial_Airride.zip, inside that folder create a new folder called vehicles and then inside that a new folder called hatch. Stage 1: Go into the steamapps folder and find the Beamng folder, from there you need to go into content-vehicles, then find the cannon.zip Stage 2: Go into the cannon.zip and find a file that says cannon-cannon.jbeam, and open it, also copy the input actions file, inputmaps, and lua and paste them into the mod folder Stage 3: scroll until you find a section named "Hydros" Code: ], "hydros": [ ["id1:","id2:"], {"beamPrecompression":1, "beamType":"|NORMAL", "beamLongBound":1.0, "beamShortBound":1.0}, {"beamSpring":1001000,"beamDamp":20000,"beamDeform":5600000,"beamStrength":8900000}, ["base_13","cannon_8",{"inputSource":"lifter","inLimit":0.75,"outLimit":0.0,"inRate":1,"outRate":1,"inputFactor":-1}], {"breakGroup":""}, ], copy this, and paste it somewhere, we will need that later. Stage 4: Go back into the beamng steamapps common folder and find a folder that says hatch.zip go into that zip and find a file that says hatch_suspension_F.jbeam. Stage 5: open that file and scroll until you find a section that says hatch_coilover_f Stage 6: Copy this and put it into a new noptepad/notepad ++ file Code: "hatch_coilover_F": { "information":{ "authors":"BeamNG", "name":"Front Struts", "value":200, }, "slotType" : "hatch_coilover_F", "flexbodies": [ ["mesh", "[group]:", "nonFlexMaterials"], ["hatch_coilover_F", ["hatch_shockbottom_F","hatch_shocktop_F"]], ], "beams": [ ["id1:", "id2:"], //front springs with soft initial bump stop {"beamPrecompression":1.205, "beamType":"|BOUNDED", "beamLongBound":0.0, "beamShortBound":0.19}, {"beamDeform":70000,"beamStrength":125000}, {"beamSpring":24000,"beamDamp":0}, {"beamLimitSpring":201000,"beamLimitDamp":2000}, ["fh1r","fs1r"{"soundFile":"art/sound/spring_creak.ogg","volumeFactor":5.5,"decayMode":0,"decayFactor":3,"pitchFactor":1,"maxStress":7000}], ["fh1l","fs1l"{"soundFile":"art/sound/spring_compress2.ogg","volumeFactor":0.8,"decayMode":1,"decayFactor":5,"pitchFactor":4,"maxStress":600}], //harder bump stop {"beamPrecompression":1, "beamType":"|BOUNDED", "beamLongBound":1.0, "beamShortBound":0.09}, {"beamSpring":0,"beamDamp":0}, {"beamLimitSpring":1501000,"beamLimitDamp":15000}, ["fh1r","fs1r"{"beamLimitDampRebound":0}], ["fh1l","fs1l"{"beamLimitDampRebound":0}], //shocks {"beamPrecompression":1, "beamType":"|BOUNDED", "beamLongBound":1.0, "beamShortBound":1.0}, {"beamSpring":0,"beamDamp":2500}, {"beamLimitSpring":0,"beamLimitDamp":0}, ["fh1r","fs1r"{"beamDampFast":1200,"beamDampRebound":3800,"beamDampReboundFast":1900,"beamDampVelocitySplit":0.09}], ["fh1l","fs1l"{"beamDampFast":1200,"beamDampRebound":3800,"beamDampReboundFast":1900,"beamDampVelocitySplit":0.09}], {"beamPrecompression":1, "beamType":"|NORMAL", "beamLongBound":1.0, "beamShortBound":1.0}, ], Stage 7: at the end of the file add 2 curley brackets, and one at the top, like so Code: { "hatch_coilover_F": { "information":{ "authors":"BeamNG", "name":"Front Struts", "value":200, }, "slotType" : "hatch_coilover_F", "flexbodies": [ ["mesh", "[group]:", "nonFlexMaterials"], ["hatch_coilover_F", ["hatch_shockbottom_F","hatch_shocktop_F"]], ], "beams": [ ["id1:", "id2:"], //front springs with soft initial bump stop {"beamPrecompression":1.205, "beamType":"|BOUNDED", "beamLongBound":0.0, "beamShortBound":0.19}, {"beamDeform":70000,"beamStrength":125000}, {"beamSpring":24000,"beamDamp":0}, {"beamLimitSpring":201000,"beamLimitDamp":2000}, ["fh1r","fs1r"{"soundFile":"art/sound/spring_creak.ogg","volumeFactor":5.5,"decayMode":0,"decayFactor":3,"pitchFactor":1,"maxStress":7000}], ["fh1l","fs1l"{"soundFile":"art/sound/spring_compress2.ogg","volumeFactor":0.8,"decayMode":1,"decayFactor":5,"pitchFactor":4,"maxStress":600}], //harder bump stop {"beamPrecompression":1, "beamType":"|BOUNDED", "beamLongBound":1.0, "beamShortBound":0.09}, {"beamSpring":0,"beamDamp":0}, {"beamLimitSpring":1501000,"beamLimitDamp":15000}, ["fh1r","fs1r"{"beamLimitDampRebound":0}], ["fh1l","fs1l"{"beamLimitDampRebound":0}], //shocks {"beamPrecompression":1, "beamType":"|BOUNDED", "beamLongBound":1.0, "beamShortBound":1.0}, {"beamSpring":0,"beamDamp":2500}, {"beamLimitSpring":0,"beamLimitDamp":0}, ["fh1r","fs1r"{"beamDampFast":1200,"beamDampRebound":3800,"beamDampReboundFast":1900,"beamDampVelocitySplit":0.09}], ["fh1l","fs1l"{"beamDampFast":1200,"beamDampRebound":3800,"beamDampReboundFast":1900,"beamDampVelocitySplit":0.09}], {"beamPrecompression":1, "beamType":"|NORMAL", "beamLongBound":1.0, "beamShortBound":1.0}, ], } } stage 8: rename the part to any name. Code: { "hatch_coilover_F_airride": { "information":{ "authors":"BeamNG, Daniel398767", "name":"Front Strutsairride", "value":200, }, "slotType" : "hatch_coilover_F", "flexbodies": [ ["mesh", "[group]:", "nonFlexMaterials"], ["hatch_coilover_F", ["hatch_shockbottom_F","hatch_shocktop_F"]], ], "beams": [ ["id1:", "id2:"], //front springs with soft initial bump stop {"beamPrecompression":1.205, "beamType":"|BOUNDED", "beamLongBound":0.0, "beamShortBound":0.19}, {"beamDeform":70000,"beamStrength":125000}, {"beamSpring":24000,"beamDamp":0}, {"beamLimitSpring":201000,"beamLimitDamp":2000}, ["fh1r","fs1r"{"soundFile":"art/sound/spring_creak.ogg","volumeFactor":5.5,"decayMode":0,"decayFactor":3,"pitchFactor":1,"maxStress":7000}], ["fh1l","fs1l"{"soundFile":"art/sound/spring_compress2.ogg","volumeFactor":0.8,"decayMode":1,"decayFactor":5,"pitchFactor":4,"maxStress":600}], //harder bump stop {"beamPrecompression":1, "beamType":"|BOUNDED", "beamLongBound":1.0, "beamShortBound":0.09}, {"beamSpring":0,"beamDamp":0}, {"beamLimitSpring":1501000,"beamLimitDamp":15000}, ["fh1r","fs1r"{"beamLimitDampRebound":0}], ["fh1l","fs1l"{"beamLimitDampRebound":0}], //shocks {"beamPrecompression":1, "beamType":"|BOUNDED", "beamLongBound":1.0, "beamShortBound":1.0}, {"beamSpring":0,"beamDamp":2500}, {"beamLimitSpring":0,"beamLimitDamp":0}, ["fh1r","fs1r"{"beamDampFast":1200,"beamDampRebound":3800,"beamDampReboundFast":1900,"beamDampVelocitySplit":0.09}], ["fh1l","fs1l"{"beamDampFast":1200,"beamDampRebound":3800,"beamDampReboundFast":1900,"beamDampVelocitySplit":0.09}], {"beamPrecompression":1, "beamType":"|NORMAL", "beamLongBound":1.0, "beamShortBound":1.0}, ], } } Stage 9: remember that hydros code from earlier?, at the end of the file add a new section like so Code: { "hatch_coilover_Fairride": { "information":{ "authors":"BeamNG, Daniel398767", "name":"Front Strutsairride", "value":200, }, "slotType" : "hatch_coilover_F", "flexbodies": [ ["mesh", "[group]:", "nonFlexMaterials"], ["hatch_coilover_F", ["hatch_shockbottom_F","hatch_shocktop_F"]], ], "beams": [ ["id1:", "id2:"], //front springs with soft initial bump stop {"beamPrecompression":1.205, "beamType":"|BOUNDED", "beamLongBound":0.0, "beamShortBound":0.19}, {"beamDeform":70000,"beamStrength":125000}, {"beamSpring":24000,"beamDamp":0}, {"beamLimitSpring":201000,"beamLimitDamp":2000}, ["fh1r","fs1r"{"soundFile":"art/sound/spring_creak.ogg","volumeFactor":5.5,"decayMode":0,"decayFactor":3,"pitchFactor":1,"maxStress":7000}], ["fh1l","fs1l"{"soundFile":"art/sound/spring_compress2.ogg","volumeFactor":0.8,"decayMode":1,"decayFactor":5,"pitchFactor":4,"maxStress":600}], //harder bump stop {"beamPrecompression":1, "beamType":"|BOUNDED", "beamLongBound":1.0, "beamShortBound":0.09}, {"beamSpring":0,"beamDamp":0}, {"beamLimitSpring":1501000,"beamLimitDamp":15000}, ["fh1r","fs1r"{"beamLimitDampRebound":0}], ["fh1l","fs1l"{"beamLimitDampRebound":0}], //shocks {"beamPrecompression":1, "beamType":"|BOUNDED", "beamLongBound":1.0, "beamShortBound":1.0}, {"beamSpring":0,"beamDamp":2500}, {"beamLimitSpring":0,"beamLimitDamp":0}, ["fh1r","fs1r"{"beamDampFast":1200,"beamDampRebound":3800,"beamDampReboundFast":1900,"beamDampVelocitySplit":0.09}], ["fh1l","fs1l"{"beamDampFast":1200,"beamDampRebound":3800,"beamDampReboundFast":1900,"beamDampVelocitySplit":0.09}], {"beamPrecompression":1, "beamType":"|NORMAL", "beamLongBound":1.0, "beamShortBound":1.0}, ], "hydros": [ ["id1:","id2:"], {"beamPrecompression":1, "beamType":"|NORMAL", "beamLongBound":1.0, "beamShortBound":1.0}, {"beamSpring":1001000,"beamDamp":20000,"beamDeform":5600000,"beamStrength":8900000}, ["base_13","cannon_8",{"inputSource":"lifter","inLimit":0.75,"outLimit":0.0,"inRate":1,"outRate":1,"inputFactor":-1}], {"breakGroup":""}, ], } } Stage 10: copy the first half of the hatch suspension struts code code and paste it to the top of the hydros code like so, and also copy and paste the end line of base 13, cannon_8 and paste it below, rename those to the spring beams fs1r,fh1r,fs1l,fh1l Code: { "hatch_coilover_Fairride": { "information":{ "authors":"BeamNG, Daniel398767", "name":"Front Strutsairride", "value":200, }, "slotType" : "hatch_coilover_F", "flexbodies": [ ["mesh", "[group]:", "nonFlexMaterials"], ["hatch_coilover_F", ["hatch_shockbottom_F","hatch_shocktop_F"]], ], "beams": [ ["id1:", "id2:"], //front springs with soft initial bump stop {"beamPrecompression":1.205, "beamType":"|BOUNDED", "beamLongBound":0.0, "beamShortBound":0.19}, {"beamDeform":70000,"beamStrength":125000}, {"beamSpring":24000,"beamDamp":0}, {"beamLimitSpring":201000,"beamLimitDamp":2000}, ["fh1r","fs1r"{"soundFile":"art/sound/spring_creak.ogg","volumeFactor":5.5,"decayMode":0,"decayFactor":3,"pitchFactor":1,"maxStress":7000}], ["fh1l","fs1l"{"soundFile":"art/sound/spring_compress2.ogg","volumeFactor":0.8,"decayMode":1,"decayFactor":5,"pitchFactor":4,"maxStress":600}], //harder bump stop {"beamPrecompression":1, "beamType":"|BOUNDED", "beamLongBound":1.0, "beamShortBound":0.09}, {"beamSpring":0,"beamDamp":0}, {"beamLimitSpring":1501000,"beamLimitDamp":15000}, ["fh1r","fs1r"{"beamLimitDampRebound":0}], ["fh1l","fs1l"{"beamLimitDampRebound":0}], //shocks {"beamPrecompression":1, "beamType":"|BOUNDED", "beamLongBound":1.0, "beamShortBound":1.0}, {"beamSpring":0,"beamDamp":2500}, {"beamLimitSpring":0,"beamLimitDamp":0}, ["fh1r","fs1r"{"beamDampFast":1200,"beamDampRebound":3800,"beamDampReboundFast":1900,"beamDampVelocitySplit":0.09}], ["fh1l","fs1l"{"beamDampFast":1200,"beamDampRebound":3800,"beamDampReboundFast":1900,"beamDampVelocitySplit":0.09}], {"beamPrecompression":1, "beamType":"|NORMAL", "beamLongBound":1.0, "beamShortBound":1.0}, ], "hydros": [ ["id1:", "id2:"], //front springs with soft initial bump stop {"beamPrecompression":1.205, "beamType":"|HYDRO", "beamLongBound":0.0, "beamShortBound":0.19}, {"beamDeform":70000,"beamStrength":125000}, {"beamSpring":24000,"beamDamp":0}, {"beamLimitSpring":201000,"beamLimitDamp":2000}, ["fh1r","fs1r",{"inputSource":"lifter","inLimit":0.75,"outLimit":0.0,"inRate":1,"outRate":1,"inputFactor":-1}], ["fh1l","fs1l",{"inputSource":"lifter","inLimit":0.75,"outLimit":0.0,"inRate":1,"outRate":1,"inputFactor":-1}], {"beamPrecompression":1}, ], } } nearly there we just need to touch up the hydros so it actually lowers the car. Code: { "hatch_coilover_Fairride": { "information":{ "authors":"BeamNG, Daniel398767", "name":"Front Strutsairride", "value":200, }, "slotType" : "hatch_coilover_F", "flexbodies": [ ["mesh", "[group]:", "nonFlexMaterials"], ["hatch_coilover_F", ["hatch_shockbottom_F","hatch_shocktop_F"]], ], "beams": [ ["id1:", "id2:"], //front springs with soft initial bump stop {"beamPrecompression":1.205, "beamType":"|BOUNDED", "beamLongBound":0.0, "beamShortBound":0.19}, {"beamDeform":70000,"beamStrength":125000}, {"beamSpring":24000,"beamDamp":0}, {"beamLimitSpring":201000,"beamLimitDamp":2000}, ["fh1r","fs1r"{"soundFile":"art/sound/spring_creak.ogg","volumeFactor":5.5,"decayMode":0,"decayFactor":3,"pitchFactor":1,"maxStress":7000}], ["fh1l","fs1l"{"soundFile":"art/sound/spring_compress2.ogg","volumeFactor":0.8,"decayMode":1,"decayFactor":5,"pitchFactor":4,"maxStress":600}], //harder bump stop {"beamPrecompression":1, "beamType":"|BOUNDED", "beamLongBound":1.0, "beamShortBound":0.09}, {"beamSpring":0,"beamDamp":0}, {"beamLimitSpring":1501000,"beamLimitDamp":15000}, ["fh1r","fs1r"{"beamLimitDampRebound":0}], ["fh1l","fs1l"{"beamLimitDampRebound":0}], //shocks {"beamPrecompression":1, "beamType":"|BOUNDED", "beamLongBound":1.0, "beamShortBound":1.0}, {"beamSpring":0,"beamDamp":2500}, {"beamLimitSpring":0,"beamLimitDamp":0}, ["fh1r","fs1r"{"beamDampFast":1200,"beamDampRebound":3800,"beamDampReboundFast":1900,"beamDampVelocitySplit":0.09}], ["fh1l","fs1l"{"beamDampFast":1200,"beamDampRebound":3800,"beamDampReboundFast":1900,"beamDampVelocitySplit":0.09}], {"beamPrecompression":1, "beamType":"|NORMAL", "beamLongBound":1.0, "beamShortBound":1.0}, ], "hydros": [ ["id1:", "id2:"], //front springs with soft initial bump stop {"beamPrecompression":1.205, "beamType":"|HYDRO", "beamLongBound":0.0, "beamShortBound":0.19}, {"beamDeform":70000,"beamStrength":125000}, {"beamSpring":24000,"beamDamp":0}, {"beamLimitSpring":201000,"beamLimitDamp":2000}, ["fh1r","fs1r",{"inputSource":"lifter","inLimit":-1.66,"outLimit":-1.66,"inRate":1,"outRate":1,"inputFactor":-1}], ["fh1l","fs1l",{"inputSource":"lifter","inLimit":-1.66,"outLimit":-1.66,"inRate":1,"outRate":1,"inputFactor":-1}], {"beamPrecompression":1}, ], } } then save the file to any name, hatch_airridestrut_f.jbeam, and put it in the mod folder Stage 11: go into the imput maps folder and into the keyboard.json file Code: { "bindings" : [ { "control" : "pageup" , "action" : "liftUp" }, { "control" : "space" , "action" : "shoot" }, { "control" : "pagedown" , "action" : "lowerDown" }, ], "name" : "Keyboard" , "version" : 1 , "devicetype" : "keyboard" , "vidpid" : "6F1D2B61" , "guid" : "{6F1D2B61-D5A0-11CF-BFC7-444553540000}" }, delete the "space section" Code: { "bindings" : [ { "control" : "pageup" , "action" : "liftUp" }, { "control" : "pagedown" , "action" : "lowerDown" }, ], "name" : "Keyboard" , "version" : 1 , "devicetype" : "keyboard" , "vidpid" : "6F1D2B61" , "guid" : "{6F1D2B61-D5A0-11CF-BFC7-444553540000}" }, then go into imput actions.json Code: { "shoot" :{"order": 1, "onChange":"custom_input.fire(VALUE)", "title": "Shoot ball", "desc": "Shoots the cannon ball. Cannon will need to be reset to fire again" }, "lift" :{"order": 2, "onChange":"custom_input.liftBarrel( VALUE)", "title": "Lift Up/Down", "desc": "Lifts the barrel up or down", "isCentered": true }, "liftUp" :{"order": 3, "onChange":"custom_input.liftBarrel( 0.5 * VALUE)", "title": "Lift Up", "desc": "Lifts the barrel up" }, "lowerDown":{"order": 4, "onChange":"custom_input.liftBarrel(-0.5 * VALUE)", "title": "Lower Down", "desc": "Lowers the barrel down" }, } and delete the lift and shoot section Code: { "liftUp" :{"order": 3, "onChange":"custom_input.liftBarrel( 0.5 * VALUE)", "title": "Lift Up", "desc": "Lifts the barrel up" }, "lowerDown":{"order": 4, "onChange":"custom_input.liftBarrel(-0.5 * VALUE)", "title": "Lower Down", "desc": "Lowers the barrel down" }, } and you are finished, have fun!
haven't tried --- Post updated --- i mean you could try. ive only done it on the covet,sbr,pessima x2, etc
Thank you so much! Very useful --- Post updated --- Sorry but how do I add separate bindings for front and rear suspension.
It works like a charm and didn't even take that long to put togheter... Note: i did it over the Sport RS struts, since it has different values, it may handle better (or worse) Thank you @daniel398767 !!! You sure deserve a place in heaven! My first ever mod for any game ever **feeling proud** Now I'll go and make it for every other car that uses struts and release it as a pack. If anyone that has already made one wants to contribute by donating theirs, I'll be forever thankful and worship you for the gentle, kind, unattached, giving, loving person you are. update: have you ever thought of going negative? 110% stanced? guess the Bollide can be super in more ways than i thought I'll keep on doing it... Also, i figured out how to do it on leaf spring suspensions Prepare for limitless stancing. Have you ever seen a miramar this low? 200BX Bruckell height adjustment system: Just beautiful: And the best part is it caused no alingment problem with this car just as the example exhaust touches the ground... I call this "Rally AirOvers" That's all the official cars that use struts + an experiment on leaf springs(miramar)... Now on to do ALL the leaf springs, even the T-Series lol
Could anybody help me do this for the ETK 6000 (specifically the rear suspension), I was lost at step 10 (Also, the etk's files look more confusing than the hatch's files).
Sure! other vehicles are indeed more complicated and have way more parts... but look into the files all the way and you can find the part you're looking for, usually towards the end of the file, after nodes and beams. the problem with trucks is that they use leaf-springs, and these won't do anything by expanding or contracting other than break the suspension... in these types of suspension, use the shocks to get the desired up and down control. e. g. copy rear_shocks into your new file instead of springs. also, I intend on adding all mod vehicles into my pack too, just asking creators for permission now...
Much appreciated. Used this guide to make air suspension for my Hot Pink Burnside. Made custom LUA for it instead of using the cannon code though. Thank you!