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.