Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @name Tank Movement Chip
- @inputs Pod:wirelink Engine:entity
- @outputs EngineActive Throttle GearOut LeftTCGear RightTCGear LeftGearOut RightGearOut LeftBrakeClutch RightBrakeClutch LeftWeldBrake RightWeldBrake
- @persist Gear Lgear Rgear GEARTIME Speed Active DualClutch DualGearbox Rev
- @persist GearboxAndTransfer BrakePower TurnBrakePower TwoSpeed FourSpeed SixSpeed EightSpeed
- @persist Seat:entity WheelCount WheelModel:string Wheels:array TreadSound:string ShiftTime TransferCase
- @persist [EngineStartTime EngineStartTimeOffset]:number EngineStartSound:string
- @trigger
- @persist W A S D Space
- if(first()|duped()|dupefinished())
- {
- ### Originally created by Dakota ###
- ### Edited by DatAmazingCheese to make it more friendly to use and neater ###
- ################################## HOW TO USE ##################################
- #[
- To use this chip first define your setup in the variables below. Spawn your chip
- on the world and place it on your chassis so the arrow is facing forward, then
- weld it to your chassis.
- For wiring,
- Wire "Pod" to your pod controller, then wire "Engine" to your engine.
- Wire gear from your gearbox to "GearOut" on the chip and wire throttle from your
- engine to "Throttle" on the chip.
- If you are using a dual clutch, create two weld gates from your sprocket to your
- chassis. Then wire active from them to their respective side's "WeldBrake" output.
- Then wire the respective side's clutch and brake to their respective "BrakeClutch"
- output.
- For sounds you require these addons,
- http://steamcommunity.com/sharedfiles/filedetails/?id=757675124
- Change your tread sound to something you like.
- Change your idle sound to an engine idle sound you like.
- If you want sounds for reving your engine, goto "acf_wtenginestanks" in your sound
- browser and find "engine_load" sounds, copy paste them into the "Rev Sound Func"
- so that they are in order.
- For an engine start sound, find one you like. Listen to it and time how long it takes for
- the engine to turn on and make it so it's in 1000s. For example, 2 seconds is 2000.
- Then listen how long the sound goes after the engine turns on and set the offset to that.
- Enjoy!
- ]#
- ############################## MOVEMENT VARIABLES ##############################
- # Transmission Configuration
- DualClutch = 1
- DualGearbox = 0
- GearboxAndTransfer = 0
- # Gearbox Configuration
- TwoSpeed = 0
- FourSpeed = 0
- SixSpeed = 1
- EightSpeed = 0
- # Brake Forces
- TurnBrakePower = 50
- BrakePower = 20
- # Engine Reving on idle
- Rev = 0
- # Shifting speed
- ShiftTime = 3.5
- # Sounds
- TreadSound = "acf_wttracks/tracks_speed_66_3.wav"
- IdleSound = "acf_wtenginestanks/su 100/su_100_engine_rpm_00.wav"
- EngineStartSound = "acf_wtenginestanks/su 100/su_100_engine_start.wav"
- EngineStartTime = 2500
- EngineStartTimeOffset = 2.5
- # Wheel Stuff
- WheelModel = "models/sprops/trans/miscwheels/tank30.mdl"
- ### Rev Sound Func ###
- function void playRevSound()
- {
- local TypeRandomNum2 = randint(4)
- local StringBase2 = ""
- if(TypeRandomNum2 == 1)
- {
- StringBase2 = "acf_wtenginestanks/su 100/su_100_engine_load_01.wav"
- }
- elseif(TypeRandomNum2 == 2)
- {
- StringBase2 = "acf_wtenginestanks/su 100/su_100_engine_load_02.wav"
- }
- elseif(TypeRandomNum2 == 3)
- {
- StringBase2 = "acf_wtenginestanks/su 100/su_100_engine_load_03.wav"
- }
- elseif(TypeRandomNum2 == 4)
- {
- StringBase2 = "acf_wtenginestanks/su 100/su_100_engine_load_04.wav"
- }
- Engine:soundPlay(1,0,StringBase2)
- soundVolume(1,1)
- timer("revtimer",4000)
- }
- ################################################################################
- ### Declaring ###
- Tank = entity():getConstraints()
- Wheels = array()
- WheelCount = 1
- for(I=1,Tank:count()){if(Tank[I,entity]:model() == WheelModel){Wheels[WheelCount,entity]=Tank[I,entity],WheelCount+=1}}
- ### Sounds ###
- entity():isWeldedTo():soundPlay(2,0,IdleSound)
- soundVolume(2,0)
- entity():isWeldedTo():soundPlay(3,0,TreadSound)
- soundVolume(3,0)
- soundPitch(3,0)
- ### Lever Sound Func ###
- function void playLeverSound()
- {
- local TypeRandomNum = randint(4)
- local StringBase = ""
- local StringEnd = ".wav"
- if(TypeRandomNum == 1)
- {
- StringBase = "acf_wtsfx/misc/transmission_lever_01"
- }
- elseif(TypeRandomNum == 2)
- {
- StringBase = "acf_wtsfx/misc/transmission_lever_02"
- }
- elseif(TypeRandomNum == 3)
- {
- StringBase = "acf_wtsfx/misc/transmission_lever_03"
- }
- elseif(TypeRandomNum == 4)
- {
- StringBase = "acf_wtsfx/misc/transmission_lever_04"
- }
- soundPlay(4,0,StringBase+StringEnd)
- soundVolume(4,0.7)
- }
- }
- interval(100)
- ### Declaring ###
- ChangeRPM = Engine:acfRedline()*90/100
- DownChangeRPM = Engine:acfPowerbandMin()
- IdleRPM = Engine:acfIdleRPM()
- ### Initializing ###
- Throttle=0
- RightBrakeClutch=0
- LeftBrakeClutch=0
- ### Declaring ###
- Seat = Pod["Entity",entity]
- W = Pod["W",number]
- A = Pod["A",number]
- S = Pod["S",number]
- D = Pod["D",number]
- Space = Pod["Space",number]
- Alt = Pod["Alt",number]
- Active = Pod["Active",number]
- ### Engine Start ###
- if(EngineStartTime>0)
- {
- if(changed(Alt) & Alt & Active & EngineActive == 0)
- {
- timer("start",EngineStartTime)
- entity():soundPlay(5,EngineStartTime*0.001+EngineStartTimeOffset,EngineStartSound)
- }
- if(EngineActive == 1 & changed(Alt)&Alt){EngineActive = 0}
- if(changed(Active)&!Active){EngineActive = 0}
- if(clk("start"))
- {
- EngineActive = !EngineActive
- }
- }
- elseif(Active)
- {
- EngineActive = 1
- }
- else
- {
- EngineActive = 0
- }
- #if(changed(Active)){reset()}
- if(Active==1)
- {
- if(!W&!S&!A&!D&!Space){Gear=0,Lgear=0,Rgear=0}
- if(Space){Gear=0,Lgear=0,Rgear=0}
- if(Gear==0){GearOut=1}else{GearOut=Gear}
- if(Lgear==0){LeftGearOut=1}else{LeftGearOut=Lgear}
- if(Rgear==0){RightGearOut=1}else{RightGearOut=Rgear}
- if(Engine:acfRPM()<ChangeRPM/4){Gear=0,Lgear=0,Rgear=0}
- if(DualClutch==1)
- {
- ### Gearing ###
- GEARTIME = GEARTIME - 1
- if(S&!W&TwoSpeed){Gear = 2}
- if(!S&W&TwoSpeed){Gear = 1}
- if(FourSpeed){
- if(S&!W){Gear=4}else{
- if(W&!S&Gear==4){Gear=1}else{
- if(Engine:acfRPM()>ChangeRPM&Gear<=2&!S&W&GEARTIME<=0){GEARTIME=ShiftTime,Gear=Gear+1}
- elseif(Engine:acfRPM()<DownChangeRPM&Gear<=3&!S&W&Gear>1&GEARTIME<=0){GEARTIME=ShiftTime,Gear=Gear-1}}}}
- elseif(SixSpeed){
- if(S&!W){Gear=6}else{
- if(W&!S&Gear==6){Gear=1}else{
- if(Engine:acfRPM()>ChangeRPM&Gear<=4&!S&W&GEARTIME<=0){GEARTIME=ShiftTime,Gear=Gear+1}
- elseif(Engine:acfRPM()<DownChangeRPM&Gear<=5&!S&W&Gear>1&GEARTIME<=0){GEARTIME=ShiftTime,Gear=Gear-1}}}}
- elseif(EightSpeed){
- if(S&!W){Gear=8}else{
- if(W&!S&Gear==8){Gear=1}else{
- if(Engine:acfRPM()>ChangeRPM&Gear<=6&!S&W&GEARTIME<=0){GEARTIME=ShiftTime,Gear=Gear+1}
- elseif(Engine:acfRPM()<DownChangeRPM&Gear<=7&!S&W&Gear>1&GEARTIME<=0){GEARTIME=ShiftTime,Gear=Gear-1}}}}
- ### Throttle ###
- if(W|A|S|D){Throttle=100}
- ### Turning ###
- if(A&!Space){RightBrakeClutch = TurnBrakePower}else{RightBrakeClutch = 0}
- if(D&!Space){LeftBrakeClutch = TurnBrakePower}else{LeftBrakeClutch = 0}
- if(A&!Space){RightWeldBrake = TurnBrakePower}else{RightWeldBrake = 0}
- if(D&!Space){LeftWeldBrake = TurnBrakePower}else{LeftWeldBrake = 0}
- if(Space){RightBrakeClutch = BrakePower}
- if(Space){LeftBrakeClutch = BrakePower}
- if(!W&!S&!A&!D&!Space){RightBrakeClutch = BrakePower}
- if(!W&!S&!A&!D&!Space){LeftBrakeClutch = BrakePower}
- if(!W&!S&!A&!D&!Space&Rev){Throttle = 100}
- }
- ################################################################################
- if(DualGearbox==1)
- {
- ### Gearing ###
- GEARTIME = GEARTIME - 1
- if(A&TwoSpeed&!W&!S){Lgear=2,Rgear=1}
- elseif(D&TwoSpeed&!W&!S){Lgear=1,Rgear=2}
- elseif(A&FourSpeed&!W&!S){Lgear=4,Rgear=1}
- elseif(D&FourSpeed&!W&!S){Lgear=1,Rgear=4}
- elseif(A&SixSpeed&!W&!S){Lgear=6,Rgear=1}
- elseif(D&SixSpeed&!W&!S){Lgear=1,Rgear=6}
- elseif(A&EightSpeed&!W&!S){Lgear=8,Rgear=1}
- elseif(D&EightSpeed&!W&!S){Lgear=1,Rgear=8}
- if(!S&W&TwoSpeed){Lgear = 1,Rgear = 1}
- if(S&!W&TwoSpeed){Lgear = 2,Rgear = 2}
- if(FourSpeed){
- if(S&!W){Lgear=4,Rgear=4}else{
- if(W&!S&(Lgear==4|Rgear==4)){Rgear=1,Lgear=1}else{
- if(Engine:acfRPM()>ChangeRPM&Lgear<=2&Rgear<=2&!S&W&GEARTIME<=0){GEARTIME=ShiftTime,Rgear=Rgear+1,Lgear=Lgear+1}
- elseif(Engine:acfRPM()<DownChangeRPM&Lgear<=3&Rgear<=3&!S&W&Gear>1&GEARTIME<=0){GEARTIME=ShiftTime,Rgear=Rgear-1,Lgear=Lgear-1}}}}
- if(SixSpeed){
- if(S&!W){Lgear=6,Rgear=6}else{
- if(W&!S&(Lgear==6|Rgear==6)){Rgear=1,Lgear=1}else{
- if(Engine:acfRPM()>ChangeRPM&Lgear<=4&Rgear<=4&!S&W&GEARTIME<=0){GEARTIME=ShiftTime,Rgear=Rgear+1,Lgear=Lgear+1}
- elseif(Engine:acfRPM()<DownChangeRPM&Lgear<=5&Rgear<=5&!S&W&Gear>1&GEARTIME<=0){GEARTIME=ShiftTime,Rgear=Rgear-1,Lgear=Lgear-1}}}}
- if(EightSpeed){
- if(S&!W){Lgear=8,Rgear=8}else{
- if(W&!S&(Lgear==8|Rgear==8)){Rgear=1,Lgear=1}else{
- if(Engine:acfRPM()>ChangeRPM&Lgear<=6&Rgear<=6&!S&W&GEARTIME<=0){GEARTIME=ShiftTime,Rgear=Rgear+1,Lgear=Lgear+1}
- elseif(Engine:acfRPM()<DownChangeRPM&Lgear<=7&Rgear<=7&!S&W&Gear>1&GEARTIME<=0){GEARTIME=ShiftTime,Rgear=Rgear-1,Lgear=Lgear-1}}}}
- ### Throttle ###
- if(W|A|S|D){Throttle=100}
- ### Turning ###
- if(D&W|D&S){RightBrakeClutch = TurnBrakePower}
- if(A&W|A&S){LeftBrakeClutch = TurnBrakePower}
- if(Space){RightBrakeClutch = BrakePower}
- if(Space){LeftBrakeClutch = BrakePower}
- if(!W&!S&!A&!D&!Space){RightBrakeClutch = BrakePower}
- if(!W&!S&!A&!D&!Space){LeftBrakeClutch = BrakePower}
- if(!W&!S&!A&!D&!Space&Rev){Throttle = 100}
- }
- ################################################################################
- if(GearboxAndTransfer==1)
- {
- ### Gearing ###
- GEARTIME = GEARTIME - 1
- if(S&!W){LeftTCGear=2,RightTCGear=2}else{RightTCGear=1,LeftTCGear=1}
- if(A&TwoSpeed&!W&!S){LeftTCGear=2,RightTCGear=1,Gear=1}
- elseif(D&TwoSpeed&!W&!S){LeftTCGear=1,RightTCGear=2,Gear=1}
- elseif(A&FourSpeed&!W&!S){LeftTCGear=2,RightTCGear=1,Gear=1}
- elseif(D&FourSpeed&!W&!S){LeftTCGear=1,RightTCGear=2,Gear=1}
- elseif(A&SixSpeed&!W&!S){LeftTCGear=2,RightTCGear=1,Gear=1}
- elseif(D&SixSpeed&!W&!S){LeftTCGear=1,RightTCGear=2,Gear=1}
- elseif(A&EightSpeed&!W&!S){LeftTCGear=2,RightTCGear=1,Gear=1}
- elseif(D&EightSpeed&!W&!S){LeftTCGear=1,RightTCGear=2,Gear=1}
- if(TwoSpeed){
- if(Engine:acfRPM()>ChangeRPM&Gear<=1&GEARTIME<=0){GEARTIME=ShiftTime,Gear=Gear+1}
- elseif(Engine:acfRPM()<DownChangeRPM&Gear<=2&Gear>1&GEARTIME<=0){GEARTIME=ShiftTime,Gear=Gear-1}}
- if(FourSpeed){
- if(Engine:acfRPM()>ChangeRPM&Gear<=3&GEARTIME<=0){GEARTIME=ShiftTime,Gear=Gear+1}
- elseif(Engine:acfRPM()<DownChangeRPM&Gear<=4&Gear>1&GEARTIME<=0){GEARTIME=ShiftTime,Gear=Gear-1}}
- if(SixSpeed){
- if(Engine:acfRPM()>ChangeRPM&Gear<=5&GEARTIME<=0){GEARTIME=ShiftTime,Gear=Gear+1}
- elseif(Engine:acfRPM()<DownChangeRPM&Gear<=6&Gear>1&GEARTIME<=0){GEARTIME=ShiftTime,Gear=Gear-1}}
- if(EightSpeed){
- if(Engine:acfRPM()>ChangeRPM&Gear<=7&GEARTIME<=0){GEARTIME=ShiftTime,Gear=Gear+1}
- elseif(Engine:acfRPM()<DownChangeRPM&Gear<=8&Gear>1&GEARTIME<=0){GEARTIME=ShiftTime,Gear=Gear-1}}
- ### Throttle ###
- if(W|A|S|D){Throttle=100}
- ### Turning ###
- if(D&W|D&S){RightBrakeClutch = TurnBrakePower}
- if(A&W|A&S){LeftBrakeClutch = TurnBrakePower}
- if(Space){RightBrakeClutch = BrakePower}
- if(Space){LeftBrakeClutch = BrakePower}
- if(!W&!S&!A&!D&!Space){RightBrakeClutch = BrakePower}
- if(!W&!S&!A&!D&!Space){LeftBrakeClutch = BrakePower}
- if(!W&!S&!A&!D&!Space&Rev){Throttle = 100}
- }
- }
- else
- {
- RightBrakeClutch = BrakePower
- LeftBrakeClutch = BrakePower
- }
- ################################################################################
- if(Active==1)
- {
- ### Track Sounds ###
- Vel = entity():isWeldedTo():vel()
- Speed = abs(Vel:x())+abs(Vel:y())
- if(Speed>30)
- {
- soundVolume(3,Active*clamp(Speed/250,0,0.5))
- soundPitch(3,Active*clamp(Speed/2,25,100))
- }
- ### Dynamic Grip ###
- if(Speed<=150){Climb=1}
- if(Speed>150){Climb=0}
- if(changed(Climb)&Climb){for(I=1,Wheels:count()){if(Wheels[I,entity]){Wheels[I,entity]:propPhysicalMaterial("phx_tire_normal")}}}
- if(changed(Climb)&!Climb){for(I=1,Wheels:count()){if(Wheels[I,entity]){Wheels[I,entity]:propPhysicalMaterial("rubber")}}}
- ################################################################################
- ### Gear Sounds ###
- if(changed(GearOut))
- {
- playLeverSound()
- }
- ### Rev Sounds ###
- if(EngineActive & Active)
- {
- if(changed(W)&W)
- {
- playRevSound()
- }
- if(clk("revtimer"))
- {
- soundStop(1)
- }
- }
- else
- {
- soundStop(1)
- }
- ### Idle Sounds ###
- if(EngineActive & Active)
- {
- if(Engine:acfRPM() < IdleRPM*1.2)
- {
- soundVolume(2,100)
- }
- else
- {
- soundVolume(2,0)
- }
- }
- else
- {
- soundVolume(2,0)
- }
- }
- else
- {
- soundVolume(1,0)
- soundVolume(2,0)
- soundVolume(3,0)
- soundVolume(4,0)
- soundVolume(5,0)
- }
- ################################################################################
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement