I'm going to try and be as simple as possible with this to make it nice and easy. I will be teaching the new way to make sounds, not sBeam. The new way is actually quite simple, especially when you've done it before. Also, this is not quite finished yet, I will be updating it as I get better at writing tutorials. Lets get started! --Pre-Requisites-- Some jBeam knowledge Sound samples A bit of patience --Setup-- 1. Gather up your samples As a general rule of thumb, the more samples the better. The default engines use 31 for on-load and 31 for off-load. How you get these samples is up to you. Rip them from other games, buy them online, or record them yourself. If you don't have the luxury of many samples, I've gotten by with 2. 2. Set up your folder directory In Documents\BeamNG.drive\mods, create a folder named "unpacked". In that folder, create another folder named anything you want it to be. Inside that folder create another one named "art". In that make another named "sound". In that, make two folders named "blends" and engine". Your paths should look something like this so far: and In the "engine" folder, create a folder named what your engine is, with your name at the end. Ex. "V6-93_YOURNAME". This is where your samples go. Paste them here now. 3. Setup another folder directory Go back to the Documents\BeamNG.drive\mods\unpacked\BB4_Engine_Pack folder and create yet another folder named "vehicles". Inside that folder create the folder of your car, ex. Sunburst. Inside that folder create a folder named "engines_YOURNAME". In that folder, create a final folder named what your engine is (note: does not have to be the same name as in the art/sound/engine folder). 4. Getting a custom engine ready for import Open up another explorer window with Ctrl+N (or Shift+Click the icon in the taskbar) and navigate to your BeamNG.drive directory, then to the car you want, ex. content/vehicles/sunburst.zip/vehicles/sunburst and copy the car_engine.jbeam file into your Documents\BeamNG.drive\mods\unpacked\MODNAME\vehicles\CARNAME\engines_YOURNAME\ENGINENAME folder. Go ahead and close the explorer window you recently created now. --jBeam Work-- 5. Getting a custom engine ready for sounds Code: { "sunburst_engine_1.8_test": { "information":{ "authors":"BeamNG, NAME", "name":"1.8L I4 Test Engine", "value":0, }, "slotType" : "sunburst_engine", "slots": [ ["type", "default", "description"], ["sunburst_exhaust_I4","sunburst_exhaust_I4", "Exhaust"], ["sunburst_transmission","sunburst_transmission_CVT", "Transmission"], ["sunburst_radiator","sunburst_radiator", "Radiator"], ["n2o_system","", "Nitrous Oxide System"], ], "powertrain": [ ["type", "name", "inputName", "inputIndex"], ["combustionEngine", "mainEngine", "dummy", 0], ], "mainEngine":{ "torque":[ ["rpm", "torque"], [0, 0], [500, 90], [1000, 121], [2000, 155], [3000, 179], [4000, 191], [4500, 195], [5000, 198], [6000, 192], [6500, 179], [7000, 158], [7500, 131], [8000, 99], ], "idleRPM":950, "maxRPM":6700, "revLimiterType":"timeBased", "revLimiterCutTime":0.18, "inertia":0.08, "friction":11, "dynamicFriction":0.023, //"burnEfficiency":0.39, "burnEfficiency":[ [0, 0.12], [0.05, 0.27], [0.4, 0.46], [0.7, 0.48], [1, 0.37], ], "torqueReactionNodes:":["e1l","e2l","e4r"] "energyStorage": "mainTank", "requiredEnergyType":"gasoline", //exhaust "particulates":0.015, "instantAfterFireCoef": 0.5, "sustainedAfterFireCoef": 0.5, //cooling and oil system "thermalsEnabled":true, "engineBlockMaterial":"aluminum", "oilVolume":4, //engine durability "cylinderWallTemperatureDamageThreshold":130, "headGasketDamageThreshold":1500000, "pistonRingDamageThreshold":1500000, "connectingRodDamageThreshold":2000000, "maxTorqueRating": 230, "maxOverTorqueDamage": 350, //node beam interface "waterDamage": {"[engineGroup]:":["engine_intake"]}, "radiator": {"[engineGroup]:":["radiator"]}, "engineBlock": {"[engineGroup]:":["engine_block"]}, "breakTriggerBeam":"engine", "uiName":"Engine", "soundConfig": "soundConfig", }, "soundConfig": { "sampleName": "I4", "mainGain": -18, "maxLoadMix": 0.65, "minLoadMix": 0, "onLoadGain":1, "offLoadGain":0.7, "eqLowGain": 10, "eqLowFreq": 400, //"eqLowWidth": 0, "eqHighGain": -5, "eqHighFreq": 6000, //"eqHighWidth": 0.5, "lowCutFreq":80, "fundamentalFrequencyCylinderCount":4 "eqFundamentalGain": 10 }, "vehicleController": { "clutchLaunchStartRPM":2000, "clutchLaunchTargetRPM":2800, //**highShiftDown can be overwritten by automatic transmissions** "highShiftDownRPM":[0,0,0,3300,3800,4000,4200,4200] //**highShiftUp can be overwritten by intake modifications** "highShiftUpRPM":6400 }, "flexbodies": [ ["mesh", "[group]:", "nonFlexMaterials"], ["sunburst_engine", ["sunburst_engine","sunburst_transmission"]], ["sunburst_intake_NA", ["sunburst_engine"]], ], "nodes": [ ["id", "posX", "posY", "posZ"], //--1.8L I4 Engine-- {"selfCollision":false}, {"collision":true}, {"nodeMaterial":"|NM_METAL"}, {"frictionCoef":0.5}, {"group":"sunburst_engine"}, {"nodeWeight":16}, {"engineGroup":"engine_block"} ["e1r", -0.34, -1.62, 0.36,{"chemEnergy":1000,"burnRate":0.39,"flashPoint":800,"specHeat": 0.2,"selfIgnitionCoef":false,"smokePoint":650,"baseTemp":"thermals","conductionRadius":0.15}], ["e1l", -0.34, -1.31, 0.36], ["e2r", 0.17, -1.62, 0.36,{"chemEnergy":1000,"burnRate":0.39,"flashPoint":800,"specHeat": 0.2,"selfIgnitionCoef":false,"smokePoint":650,"baseTemp":"thermals","conductionRadius":0.15}], ["e2l", 0.17, -1.31, 0.36], {"engineGroup":["engine_block","engine_intake"]} ["e3r", -0.34, -1.62, 0.74,{"chemEnergy":1000,"burnRate":0.39,"flashPoint":800,"specHeat": 0.2,"selfIgnitionCoef":false,"smokePoint":650,"baseTemp":"thermals","conductionRadius":0.15}], ["e3l", -0.34, -1.31, 0.74], ["e4r", 0.17, -1.62, 0.74,{"isExhaust":"mainEngine","chemEnergy":1000,"burnRate":0.39,"flashPoint":800,"specHeat": 0.2,"selfIgnitionCoef":false,"smokePoint":650,"baseTemp":"thermals","conductionRadius":0.15}], ["e4l", 0.17, -1.31, 0.74], {"engineGroup":""}, {"group":""}, {"chemEnergy":200,"burnRate":0.3,"flashPoint":600,"specHeat":0.1,"smokePoint":580,"selfIgnitionCoef":false}, ["tc1", 0.0, -1.6, 0.45], {"chemEnergy":false,"burnRate":false,"flashPoint":false,"specHeat":false,"smokePoint":false,"selfIgnitionCoef":false}, {"group":""}, ], "beams": [ ["id1:", "id2:"], {"beamType":"|NORMAL", "beamLongBound":1.0, "beamShortBound":1.0}, {"beamSpring":15001000,"beamDamp":500}, {"beamDeform":250000,"beamStrength":"FLT_MAX"}, //engine ["e1r","e1l"], ["e2r","e2l"], ["e3r","e3l"], ["e4r","e4l"], ["e1r","e2r"], ["e1l","e2l"], ["e3r","e4r"], ["e3l","e4l"], ["e1r","e3r"], ["e1l","e3l"], ["e2r","e4r"{"isExhaust":"mainEngine"}], ["e2l","e4l"], ["e2r","e3r"], ["e2l","e3l"], ["e2r","e3l"], ["e2l","e3r"], ["e1r","e4r"], ["e1l","e4l"], ["e1r","e4l"], ["e1l","e4r"], ["e1r","e2l"], ["e1l","e2r"], ["e3r","e4l"], ["e3l","e4r"], ["e1r","e3l"], ["e1l","e3r"], ["e2r","e4l"], ["e2l","e4r"], ["tc1","e3l"], ["tc1","e3r"], ["tc1","e4l"], ["tc1","e4r"], ["tc1","e1l"], ["tc1","e1r"], ["tc1","e2l"], ["tc1","e2r"], {"beamPrecompression":1, "beamType":"|NORMAL", "beamLongBound":1.0, "beamShortBound":1.0}, ], }, Add a curly brace at the end to make sure the console wont throw errors. 6. Finishing up the jBeam work Change the name, authors, jBeam name, torque curve, etc. You're creating a new engine here as you would a config pack. Afterwards, find the soundConfig section. Where it says "sampleName": "I4" replace the I4 with the name of the folder you created in the art/sound/engine folder. Code: "soundConfig": { "sampleName": "ENGINENAME_YOURNAME", "mainGain": -18, "maxLoadMix": 0.65, "minLoadMix": 0, "onLoadGain":1, "offLoadGain":0.7, "eqLowGain": 10, "eqLowFreq": 400, //"eqLowWidth": 0, "eqHighGain": -5, "eqHighFreq": 6000, //"eqHighWidth": 0.5, "lowCutFreq":80, "fundamentalFrequencyCylinderCount":4 "eqFundamentalGain": 10 }, --JSON Work-- 7. Template copy Create a file in Documents\BeamNG.drive\mods\unpacked\BB4_Engine_Pack\art\sound\blends named "ENGINENAME_YOURNAME.sfxBlend2D.json" and paste the following code into it: Code: { "header" : { "version" : 1 }, "eventName" : "event:>Engine>default", "samples" : [ [ ["art/sound/engine/ENGINENAME_YOURNAME/859.wav", 859], ["art/sound/engine/ENGINENAME_YOURNAME/919.wav", 919], ["art/sound/engine/ENGINENAME_YOURNAME/984.wav", 984], ["art/sound/engine/ENGINENAME_YOURNAME/1052.wav", 1052], ["art/sound/engine/ENGINENAME_YOURNAME/1126.wav", 1126], ["art/sound/engine/ENGINENAME_YOURNAME/1205.wav", 1205], ["art/sound/engine/ENGINENAME_YOURNAME/1289.wav", 1289], ["art/sound/engine/ENGINENAME_YOURNAME/1380.wav", 1380], ["art/sound/engine/ENGINENAME_YOURNAME/1476.wav", 1476], ["art/sound/engine/ENGINENAME_YOURNAME/1579.wav", 1579], ["art/sound/engine/ENGINENAME_YOURNAME/1690.wav", 1690], ["art/sound/engine/ENGINENAME_YOURNAME/1808.wav", 1808], ["art/sound/engine/ENGINENAME_YOURNAME/1935.wav", 1935], ["art/sound/engine/ENGINENAME_YOURNAME/2070.wav", 2070], ["art/sound/engine/ENGINENAME_YOURNAME/2215.wav", 2215], ["art/sound/engine/ENGINENAME_YOURNAME/2370.wav", 2370], ["art/sound/engine/ENGINENAME_YOURNAME/2536.wav", 2536], ["art/sound/engine/ENGINENAME_YOURNAME/2714.wav", 2714], ["art/sound/engine/ENGINENAME_YOURNAME/2904.wav", 2904], ["art/sound/engine/ENGINENAME_YOURNAME/3107.wav", 3107], ["art/sound/engine/ENGINENAME_YOURNAME/3324.wav", 3324], ["art/sound/engine/ENGINENAME_YOURNAME/3557.wav", 3557], ["art/sound/engine/ENGINENAME_YOURNAME/3806.wav", 3806], ["art/sound/engine/ENGINENAME_YOURNAME/4073.wav", 4073], ["art/sound/engine/ENGINENAME_YOURNAME/4358.wav", 4358], ["art/sound/engine/ENGINENAME_YOURNAME/4663.wav", 4663], ["art/sound/engine/ENGINENAME_YOURNAME/4989.wav", 4989], ["art/sound/engine/ENGINENAME_YOURNAME/5338.wav", 5338], ["art/sound/engine/ENGINENAME_YOURNAME/5712.wav", 5712], ["art/sound/engine/ENGINENAME_YOURNAME/6112.wav", 6112], ["art/sound/engine/ENGINENAME_YOURNAME/6540.wav", 6540] ], [ ["art/sound/engine/ENGINENAME_YOURNAME/859_P.wav", 859], ["art/sound/engine/ENGINENAME_YOURNAME/919_P.wav", 919], ["art/sound/engine/ENGINENAME_YOURNAME/984_P.wav", 984], ["art/sound/engine/ENGINENAME_YOURNAME/1052_P.wav", 1052], ["art/sound/engine/ENGINENAME_YOURNAME/1126_P.wav", 1126], ["art/sound/engine/ENGINENAME_YOURNAME/1205_P.wav", 1205], ["art/sound/engine/ENGINENAME_YOURNAME/1289_P.wav", 1289], ["art/sound/engine/ENGINENAME_YOURNAME/1380_P.wav", 1380], ["art/sound/engine/ENGINENAME_YOURNAME/1476_P.wav", 1476], ["art/sound/engine/ENGINENAME_YOURNAME/1579_P.wav", 1579], ["art/sound/engine/ENGINENAME_YOURNAME/1690_P.wav", 1690], ["art/sound/engine/ENGINENAME_YOURNAME/1808_P.wav", 1808], ["art/sound/engine/ENGINENAME_YOURNAME/1935_P.wav", 1935], ["art/sound/engine/ENGINENAME_YOURNAME/2070_P.wav", 2070], ["art/sound/engine/ENGINENAME_YOURNAME/2215_P.wav", 2215], ["art/sound/engine/ENGINENAME_YOURNAME/2370_P.wav", 2370], ["art/sound/engine/ENGINENAME_YOURNAME/2536_P.wav", 2536], ["art/sound/engine/ENGINENAME_YOURNAME/2714_P.wav", 2714], ["art/sound/engine/ENGINENAME_YOURNAME/2904_P.wav", 2904], ["art/sound/engine/ENGINENAME_YOURNAME/3107_P.wav", 3107], ["art/sound/engine/ENGINENAME_YOURNAME/3324_P.wav", 3324], ["art/sound/engine/ENGINENAME_YOURNAME/3557_P.wav", 3557], ["art/sound/engine/ENGINENAME_YOURNAME/3806_P.wav", 3806], ["art/sound/engine/ENGINENAME_YOURNAME/4073_P.wav", 4073], ["art/sound/engine/ENGINENAME_YOURNAME/4358_P.wav", 4358], ["art/sound/engine/ENGINENAME_YOURNAME/4663_P.wav", 4663], ["art/sound/engine/ENGINENAME_YOURNAME/4989_P.wav", 4989], ["art/sound/engine/ENGINENAME_YOURNAME/5338_P.wav", 5338], ["art/sound/engine/ENGINENAME_YOURNAME/5712_P.wav", 5712], ["art/sound/engine/ENGINENAME_YOURNAME/6112_P.wav", 6112], ["art/sound/engine/ENGINENAME_YOURNAME/6540_P.wav", 6540] ] ] } Rename ENGINENAME_YOURNAME to what it should be. 8. Changing numbers and letters Change the name of the samples to what the name of your samples are, and change the RPM (last integer in each line ex. 3107) to match. I think that's everything, but if something doesn't work tell me and I'll see. Once you do it once though, experiment. The only way to get better is to screw up, I learn most of what I do that way Here is a wiki entry explaining the effects of the things in jBeam. Attached is a template, so you can ignore most of the steps here. If you have any questions at all feel free to ask
Nice tutorial, it sheds some light on the various possibilities of the new sound engine. I hope this encourages others to explore the world of sound modding.
Am I being really dumb but how do you make a new engine for the ETK-K series? I've managed to get every other vehicle working with custom sounds but for some reason, no luck with this vehicle. I have vehicles>common>myengine>myenginename>enginename.jbeam (common being where the ETK-K engine data is) but for some reason it never shows up in game...i know it shares parts from the other series but how do i get the engine to appear in the ETK-K series engine list?
Some games only have samples like this: engine_idle engine_low engine_mid engine_high Can the RPM numbers here be replaced with these names, or do I need specific RPM samples?
It doesn't matter what the name of the sound files are, as long as they are properly referenced in the json file. You can keep them named like that or give them a pseudo RPM value to name, your choice
Code: ["art/sound/engine/ENGINENAME_YOURNAME/859.wav", 859], I'm referring to the 859 at the end. That defines the RPM that the sample is for, right? So what would I put if I had only those 4 samples?
Ah yes, at the end you must define an RPM the sample is at, but you can estimate (I did that for a few of my sounds, it works fine).
Got it, thanks dude. . Edit: My sounds aren't working. In the console I am getting: Code: Failed to load json art/sound/blends/VX_4A-GE.sfxBlerd2D.json. Line 13, Column 9 Syntax error: Value, object or array expected. My Json looks like this: Spoiler: Json Code Code: { "header" : { "version" : 1 }, "eventName" : "event:>Engine>default", "samples" : [ ["art/sound/engine/ENGINENAME_YOURNAME/4A-GE_idle.wav", 1000], ["art/sound/engine/ENGINENAME_YOURNAME/4A-GE_low.wav", 1800], ["art/sound/engine/ENGINENAME_YOURNAME/4A-GE_mid.wav", 3000], ["art/sound/engine/ENGINENAME_YOURNAME/4A-GE_high.wav", 5500], ], } My directories are: Code: BeamNG.drive\mods\unpacked\VX Engines\art\sound\blends\VX_4A-GE.sfxBlend2D.json And Code: BeamNG.drive\mods\unpacked\VX Engines\art\sound\engine\VX_4A-GE Which contains 4A-GE_idle 4A-GE_low 4A-GE_mid 4A-GE_high
You must define on-load and off-load samples (the two sections, where one ends with "_P" and the other doesn't). They can be the exact same, as long as you duplicate the file and put a "_P" at the end. Take this as an example: Code: "samples" : [ [ ["art/sound/engine/Diesel_bep/859.wav", 859], ["art/sound/engine/Diesel_bep/2070.wav", 2070], ["art/sound/engine/Diesel_bep/3557.wav", 3557] ], [ ["art/sound/engine/Diesel_bep/859_P.wav", 859], ["art/sound/engine/Diesel_bep/2070_P.wav", 2070], ["art/sound/engine/Diesel_bep/3557_P.wav", 3557] ] ] They are just the same file duplicated, renamed, and put into another section of the json file. Also, unlike jBeams, commas really matter in json, so it would look more like this at the end: Code: ["art/sound/engine/ENGINENAME_YOURNAME/4A-GE_high.wav", 5500] ] (Notice the commas at the end of the first example too)
Ah, sorted. Thanks a bunch mate. I also noted I forgot to change the section for "ENGINENAME_YOURNAME". Great guide, thanks mate.
Hi thank you so much for this tutorial it works perfectly. Im just having a small problem which i dont know how to solve. I cant create a new folder in the "mods" folder. When you right click and click new the option to create a new folder is not there. So i created the unpacked folder on my desktop but when i copy it to my mods folder it just dumps EVERYTHING in the mods folder without organization or tidiness or anything. Somehow it just works fine.
I cant. Maybe its a windows thing? I can however create folders inside any other folders i want but not "mods".
I checked. I have full control. Every box onthe left is checked. EDIT: I tried on my laptop (Windows 10) it worked fine. So the issue is probably a windows issue.