• E2 Engine
    0 replies, posted
Hey guys, I dedicated a bit of my time to create an E2 engine for cars, it turned out to consume only around 400cpu and I was so glad about it, I decided I should share it. It uses applyAngForce, so you must use wheels. The engine is a simulated V8, has a dynamic torque curve, built in gearbox and brakes, engine brake, and all of that is adjustable in the preset in start of code. Soo, have a try: @name S82 5.0 V8 E2 @inputs FL:entity FR:entity RL:entity RR:entity M1 M2 Shift W R S Space A D @outputs RPM Gear Ratio Act HBrake @persist Torque Mul L G1 G2 G3 G4 G5 G6 GR FD TRPM RVel FVel FBForce RBForce EBForce @trigger @model models/engines/v8s.mdl interval(10) if(first()|dupefinished()) {     ##EVEN IF YOU DONT WANT AWD, WIRE ALL WHEELS TO HAVE ALL BRAKES     ###GEAR RATIOS----     FD = 4.5    #FINAL DRIVE     G1 = 4.32*FD      G2 = 2.54*FD     G3 = 1.62*FD     G4 = 1.23*FD     G5 = 1.00*FD     G6 = 0.83*FD     GR = -3.75*FD     #MISC------------     Mul = 10    #HIGHER VALUE IS MORE TORQUE     FBForce = 90    #HIGHER VALUE IS MORE FRONT BRAKE FORCE     RBForce = 80    #HIGHER VALUE IS MORE REAR BRAKE FORCE     EBForce = 0.125   #HIGHER VALUE IS MORE ENGINE BRAKE      } ##DO NOT CHANGE ANYTHING BELOW HERE IF YOU DO NOT KNOW EXACTLY WHAT YOU ARE DOING ## ## ## if(~R&R) { #TICKS ONCE IF R IS PRESSED     Act=!Act      entity():soundPlay(1,0,"acf_extra/vehiclefx/engines/v8/htgts_onlow.wav") #ENGINE SOUND     RPM=2000 #INITIAL START RPM } soundPitch(1,250*RPM/7000) #ENGINE SOUND PITCH soundVolume(1,0.3+RPM/5700*W) #ENGINE SOUND VOLUME if(L) { #L TURNS ON WHEN REV LIMITER WORKS (CUTS OFF THROTTLE)     entity():soundPlay(2,0,"weapons/pistol/pistol_fire3.wav") #REV LIMITER SOUND     soundVolume(2,0.4) #REV LIMITER VOLUME     soundPitch(2,35) #REV LIMITER PITCH } if(~M1&M1&Gear<6&Shift) {Gear++} #MOUSE1+SHIFT GEAR SWITCH UP if(~M2&M2&Gear>-1&Shift) {Gear--} #MOUSE2+SHIFT GEAR SWITCH DOWN if(Act) {     if(RPM<3800) { #DYNAMIC TORQUE LINE FUNCTION, SERIOUSLY, DONT PLAY WITH THIS UNLESS YOU UNDERSTAND         Torque = (RPM/15.2+100)*Mul*Ratio     }     elseif(RPM>=3800&RPM<6600) {         Torque = (-RPM/56+417.857)*Mul*Ratio     }     else {         Torque = clamp(-RPM*1.5+10200,0,450)*Mul*Ratio     }       if(Gear==-1) {Ratio = GR} #GEAR RATIOS IN EACH GEAR     elseif(Gear==0) {Ratio = 0}     elseif(Gear==1) {Ratio = G1}     elseif(Gear==2) {Ratio = G2}     elseif(Gear==3) {Ratio = G3}     elseif(Gear==4) {Ratio = G4}     elseif(Gear==5) {Ratio = G5}     elseif(Gear==6) {Ratio = G6}          RVel = (RL:angVel():pitch()-RR:angVel():pitch())/2 #BOTH REAR WHEEL AVERAGE ANGVEL     FVel = (FL:angVel():pitch()-FR:angVel():pitch())/2 #BOTH FRONT WHEEL AVERAGE ANGVEL          if(!Shift&Gear!=0) { #IF CLUTCH IS RELEASED AND IS IN GEAR         RPM += (abs(RVel)/6*abs(Ratio)-RPM)/clamp(200-RPM/70,2,50) #RPM BASED ON WHEELS ANGVEL AND RATIOS         L=0         if(W) { #GIVING GAS IN GEAR             RL:applyAngForce(ang(Torque,0,0)) ## PUT # INFRONT OF THIS LINE THIS WHEELS DRIVE             RR:applyAngForce(ang(-Torque,0,0)) ## PUT # INFRONT OF THIS LINE THIS WHEELS DRIVE             #FL:applyAngForce(ang(Torque,0,0)) ## PUT # INFRONT OF THIS LINE TO REMOVE THIS WHEELS DRIVE             #FR:applyAngForce(ang(-Torque,0,0)) ## PUT # INFRONT OF THIS LINE TO REMOVE THIS WHEELS DRIVE         }         elseif(RVel>50&Gear>-1|RVel<-50&Gear==-1) { #ENGINE BRAKE FUNCTION, NOT GIVING GAS             RL:applyAngForce(ang(-RPM*Ratio*EBForce,0,0)) ## PUT # INFRONT OF THIS LINE THIS WHEELS DRIVE             RR:applyAngForce(ang(RPM*Ratio*EBForce,0,0)) ## PUT # INFRONT OF THIS LINE THIS WHEELS DRIVE             #FL:applyAngForce(ang(-RPM*Ratio*EBForce,0,0)) ## PUT # INFRONT OF THIS LINE THIS WHEELS DRIVE             #FR:applyAngForce(ang(RPM*Ratio*EBForce,0,0)) ## PUT # INFRONT OF THIS LINE THIS WHEELS DRIVE         }     }     else { #CLUTCH IS PRESSED OR GEAR IS NEUTRAL         if(RPM>7000) {L=1} #REV LIMITER FUNCTION         elseif(RPM<6700) {L=0}         if(L) {TRPM=900}         elseif(W) {TRPM=9000}         else {TRPM=900}         RPM += (TRPM-RPM)/50 #RPM SMOOTHER     } } else { #ENGINE TURNED OFF     RPM=0     soundStop(1)     L=0 } if(~Space&Space) {HBrake=!HBrake} #HANDBRAKE TOGGLE FUNCTION if(HBrake) {}  elseif(A&S|D&S) {     RL:applyAngForce(ang(-RVel*6,0,0))     RR:applyAngForce(ang(RVel*6,0,0)) } elseif(S) {     RL:applyAngForce(ang(-RVel*RBForce,0,0))     RR:applyAngForce(ang(RVel*RBForce,0,0))     FL:applyAngForce(ang(-FVel*FBForce,0,0))      FR:applyAngForce(ang(FVel*FBForce,0,0)) } ## IF HANDBRAKE IS PULLED, BRAKES DONT WORK. IF YOU TURN WHILE BRAKING, ONLY REAR WHEELS BRA- ## -KE A LITTLE TO HELP FIGHT UNDERSTEER. IF YOU DONT TURN, BRAKING WORKS NORMALLY ON ALL 4 WHEELS
Sorry, you need to Log In to post a reply to this thread.