Author Topic: Very basic vehicle sounds [Coding help]  (Read 1159 times)

Hey I'm a fresh fresh noob when it comes to anything to do with Torque script

Basically I'm making a jeep edit with a few minor adjustments. I'm not looking for anything too crazy, I just want the jeep to play two sounds based on what it is doing. If it's sitting around doing nothing, it plays an idle sound, and if it is accelerating or driving, it plays a different sound. I feel like this may be relatively simple but it's still way over my head and I can't find any good example vehicles to reference from. Any help you could give me on this I would really appreciate appreciate.

Use speedkarts as a reference.

Can anyone tell me why this doesn't work? Because I feel like it should work.

Code: [Select]
// support stuff for the JeepWasteland vehicle

datablock AudioProfile(JeepWastelandGoSound)
{
   filename    = "./SpeedKart_go.wav";
   description = AudioCloseLooping3d;
   preload = true;
};

datablock AudioProfile(JeepWastelandIdleSound)
{
   filename    = "./SpeedKart_idle.wav";
   description = AudioCloseLooping3d;
   preload = true;
};

datablock AudioProfile(JeepWastelandHornSound)
{
   filename    = "./SpeedKart_horn.wav";
   description = AudioClose3d;
   preload = true;
};

datablock AudioProfile(JeepWastelandDriveSound)
{
   filename    = "./SpeedKart_Go.wav";
   description = AudioCloseLooping3d;
   preload = true;
};

// Vehicle //
/////////////
datablock WheeledVehicleData(JeepWastelandVehicle)
{
category = "Vehicles";
displayName = " ";
shapeFile = "./Jeep.dts"; //"~/data/shapes/skivehicle.dts"; //
emap = true;
minMountDist = 3;
   
   numMountPoints = 7;
   mountThread[0] = "sit";
   mountThread[1] = "sit";
   mountThread[2] = "sit";
   mountThread[3] = "sit";
   mountThread[4] = "sit";
   mountThread[5] = "root";
   mountThread[6] = "root";
   mountThread[7] = "sit";

maxDamage = 200.00;
destroyedLevel = 200.00;
speedDamageScale = 1.04;
collDamageThresholdVel = 20.0;
collDamageMultiplier   = 0.02;

massCenter = "0 0 0";
   //massBox = "2 5 1";

maxSteeringAngle = 0.9785;  // Maximum steering angle, should match animation
integration = 4;           // Force integration time: TickSec/Rate
tireEmitter = VehicleTireEmitter; // All the tires use the same dust emitter

// 3rd person camera settings
cameraRoll = false;         // Roll the camera with the vehicle
cameraMaxDist = 13;         // Far distance from vehicle
cameraOffset = 7.5;        // Vertical offset from camera mount point
cameraLag = 0.0;           // Velocity lag of camera
cameraDecay = 0.75;        // Decay per sec. rate of velocity lag
cameraTilt = 0.4;
   collisionTol = 0.1;        // Collision distance tolerance
   contactTol = 0.1;

useEyePoint = false;

defaultTire = JeepTire;
defaultSpring = JeepSpring;
//flatTire = JeepWastelandFlatTire;
//flatSpring = JeepWastelandFlatSpring;

   numWheels = 4;

// Rigid Body
mass = 300;
density = 5.0;
drag = 1.6;
bodyFriction = 0.6;
bodyRestitution = 0.6;
minImpactSpeed = 10;        // Impacts over this invoke the script callback
softImpactSpeed = 10;       // Play SoftImpact Sound
hardImpactSpeed = 15;      // Play HardImpact Sound
groundImpactMinSpeed    = 10.0;

// Engine
engineTorque = 12000; //4000;       // Engine power
engineBrake = 2000;         // Braking when throttle is 0
brakeTorque = 50000;        // When brakes are applied
maxWheelSpeed = 30;        // Engine scale by current speed / max speed

rollForce = 900;
yawForce = 600;
pitchForce = 1000;
rotationalDrag = 0.2;

   // Advanced Steering
   steeringAutoReturn = true;
   steeringAutoReturnRate = 0.9;
   steeringAutoReturnMaxSpeed = 10;
   steeringUseStrafeSteering = true;
   steeringStrafeSteeringRate = 0.1;

// Energy
maxEnergy = 100;
jetForce = 3000;
minJetEnergy = 30;
jetEnergyDrain = 2;

splash = vehicleSplash;
splashVelocity = 4.0;
splashAngle = 67.0;
splashFreqMod = 300.0;
splashVelEpsilon = 0.60;
bubbleEmitTime = 1.4;
splashEmitter[0] = vehicleFoamDropletsEmitter;
splashEmitter[1] = vehicleFoamEmitter;
splashEmitter[2] = vehicleBubbleEmitter;
mediumSplashSoundVelocity = 10.0;   
hardSplashSoundVelocity = 20.0;   
exitSplashSoundVelocity = 5.0;

//mediumSplashSound = "";
//hardSplashSound = "";
//exitSplashSound = "";

// Sounds

// IMPACT SOUND
softImpactSound = slowImpactSound;
hardImpactSound = fastImpactSound;

//IDLE SOUND
speedCartIdleSound = JeepWastelandIdleSound;

//DRIVING SOUND
speedCartDriveSound = JeepWastelandDriveSound;

//   explosion = VehicleExplosion;
justcollided = 0;

   uiName = "Jeep Wasteland ";
rideable = true;
lookUpLimit = 0.65;
lookDownLimit = 0.45;

paintable = true;
   
   damageEmitter[0] = VehicleBurnEmitter;
damageEmitterOffset[0] = "0.0 0.0 0.0 ";
damageLevelTolerance[0] = 0.99;

   damageEmitter[1] = VehicleBurnEmitter;
damageEmitterOffset[1] = "0.0 0.0 0.0 ";
damageLevelTolerance[1] = 1.0;

   numDmgEmitterAreas = 1;

   initialExplosionProjectile = JeepWastelandExplosionProjectile;
   initialExplosionOffset = 0;         //offset only uses a z value for now

   burnTime = 4000;

   finalExplosionProjectile = JeepWastelandFinalExplosionProjectile;
   finalExplosionOffset = 0.5;          //offset only uses a z value for now

   minRunOverSpeed    = 4;   //how fast you need to be going to run someone over (do damage)
   runOverDamageScale = 8;   //when you run over someone, speed * runoverdamagescale = damage amt
   runOverPushScale   = 1.2; //how hard a person you're running over gets pushed

   //protection for passengers
   protectPassengersBurn   = false;  //protect passengers from the burning effect of explosions?
   protectPassengersRadius = true;  //protect passengers from radius damage (explosions) ?
   protectPassengersDirect = false; //protect passengers from direct damage (bullets) ?
};

function SpeedKartVehicle::onadd(%this,%obj)
{
SpeedKartSpeedCheck(%this, %obj);
}

function SpeedKartSpeedCheck(%this, %obj)
{
if(!isObject(%obj))
return;

%vehicle = %obj;
%datablock = %vehicle.getDatablock();
%slot = 0; //Play the sound in the driver's spot
%speed = vectorLen(%obj.getVelocity());

if(%speed < 0) //Keeps throwing random negative numbers when train is at dead stop
    %speed = 0;

if(%speed < 10)
{
    if(%datablock.speedCartIdleSound !$= "")
{
%vehicle.playAudio(%slot, %datablock.speedCartIdleSound);
}
else{
if(isObject(SpeedKartIdleSound))
{
%vehicle.playAudio(%slot, JeepWastelandIdleSound);
}

}
else{
if(%datablock.speedCartIdleSound !$= "")
{
%vehicle.playAudio(%slot, %datablock.speedCartDriveSound);
}
else{
if(isObject(SpeedKartGoSound))
{
%vehicle.playAudio(%slot, JeepWastelandGoSound);
}
}
}


schedule(500,0,"SpeedKartSpeedCheck",%this,%obj);
}


That's because you didn't change enough of the other datablocks referenced in the code to match your own datablocks, try this
Code: [Select]
function JeepWastelandVehicle::onadd(%this,%obj)
{
VehicleSpeedCheck(%this, %obj);
}

function VehicleSpeedCheck(%this, %obj)
{
if(!isObject(%obj))
return;

%vehicle = %obj;
%datablock = %vehicle.getDatablock();
%slot = 0; //Play the sound in the driver's spot
%speed = vectorLen(%obj.getVelocity());

if(%speed < 0) //Keeps throwing random negative numbers when train is at dead stop
    %speed = 0;

if(%speed < 10)
{
    if(%datablock.JeepWastelandIdleSound !$= "")
{
%vehicle.playAudio(%slot, %datablock.JeepWastelandIdleSound);
}
else{
if(isObject(JeepWastelandIdleSound))
{
%vehicle.playAudio(%slot, JeepWastelandIdleSound);
}

}
else{
if(%datablock.JeepWastelandIdleSound !$= "")
{
%vehicle.playAudio(%slot, %datablock.JeepWastelandDriveSound);
}
else{
if(isObject(JeepWastelandGoSound))
{
%vehicle.playAudio(%slot, JeepWastelandGoSound);
}
}
}


schedule(500,0,"VehicleSpeedCheck",%this,%obj);
}

Cool, thank you. The sounds are definitely working (just swapped the code in the previous post with yours), but now I have another issue: the wheels disappeared.
« Last Edit: November 03, 2015, 05:30:31 AM by Rally »

That might be because i forgot that you need to parent the onAdd function, so replace it with this
Code: [Select]
function JeepWastelandVehicle::onadd(%this,%obj)
{
VehicleSpeedCheck(%this, %obj);
parent::onadd(%this,%obj);
}

Whoops. That fixed it, thanks a ton man, great help.

I'm going to post the working code below in-case somebody stumbles across this thread in the future:
Code: [Select]
// support stuff for the JeepWasteland vehicle

datablock AudioProfile(JeepWastelandGoSound)
{
   filename    = "./SpeedKartBuggy_go.wav";
   description = AudioCloseLooping3d;
   preload = true;
};

datablock AudioProfile(JeepWastelandIdleSound)
{
   filename    = "./SpeedKartBuggy_idle.wav";
   description = AudioCloseLooping3d;
   preload = true;
};

datablock AudioProfile(JeepWastelandHornSound)
{
   filename    = "./SpeedKartBuggy_horn.wav";
   description = AudioClose3d;
   preload = true;
};

datablock AudioProfile(JeepWastelandDriveSound)
{
   filename    = "./SpeedKart_Go.wav";
   description = AudioCloseLooping3d;
   preload = true;
};

// Vehicle //
/////////////
datablock WheeledVehicleData(JeepWastelandVehicle)
{
category = "Vehicles";
displayName = " ";
shapeFile = "./Jeep.dts"; //"~/data/shapes/skivehicle.dts"; //
emap = true;
minMountDist = 3;
   
   numMountPoints = 7;
   mountThread[0] = "sit";
   mountThread[1] = "sit";
   mountThread[2] = "sit";
   mountThread[3] = "sit";
   mountThread[4] = "sit";
   mountThread[5] = "root";
   mountThread[6] = "root";
   mountThread[7] = "sit";

maxDamage = 200.00;
destroyedLevel = 200.00;
speedDamageScale = 1.04;
collDamageThresholdVel = 20.0;
collDamageMultiplier   = 0.02;

massCenter = "0 0 0";
   //massBox = "2 5 1";

maxSteeringAngle = 0.9785;  // Maximum steering angle, should match animation
integration = 4;           // Force integration time: TickSec/Rate
tireEmitter = VehicleTireEmitter; // All the tires use the same dust emitter

// 3rd person camera settings
cameraRoll = false;         // Roll the camera with the vehicle
cameraMaxDist = 13;         // Far distance from vehicle
cameraOffset = 7.5;        // Vertical offset from camera mount point
cameraLag = 0.0;           // Velocity lag of camera
cameraDecay = 0.75;        // Decay per sec. rate of velocity lag
cameraTilt = 0.4;
   collisionTol = 0.1;        // Collision distance tolerance
   contactTol = 0.1;

useEyePoint = false;

defaultTire = JeepTire;
defaultSpring = JeepSpring;
//flatTire = JeepWastelandFlatTire;
//flatSpring = JeepWastelandFlatSpring;

   numWheels = 4;

// Rigid Body
mass = 300;
density = 5.0;
drag = 1.6;
bodyFriction = 0.6;
bodyRestitution = 0.6;
minImpactSpeed = 10;        // Impacts over this invoke the script callback
softImpactSpeed = 10;       // Play SoftImpact Sound
hardImpactSpeed = 15;      // Play HardImpact Sound
groundImpactMinSpeed    = 10.0;

// Engine
engineTorque = 12000; //4000;       // Engine power
engineBrake = 2000;         // Braking when throttle is 0
brakeTorque = 50000;        // When brakes are applied
maxWheelSpeed = 30;        // Engine scale by current speed / max speed

rollForce = 900;
yawForce = 600;
pitchForce = 1000;
rotationalDrag = 0.2;

   // Advanced Steering
   steeringAutoReturn = true;
   steeringAutoReturnRate = 0.9;
   steeringAutoReturnMaxSpeed = 10;
   steeringUseStrafeSteering = true;
   steeringStrafeSteeringRate = 0.1;

// Energy
maxEnergy = 100;
jetForce = 3000;
minJetEnergy = 30;
jetEnergyDrain = 2;

splash = vehicleSplash;
splashVelocity = 4.0;
splashAngle = 67.0;
splashFreqMod = 300.0;
splashVelEpsilon = 0.60;
bubbleEmitTime = 1.4;
splashEmitter[0] = vehicleFoamDropletsEmitter;
splashEmitter[1] = vehicleFoamEmitter;
splashEmitter[2] = vehicleBubbleEmitter;
mediumSplashSoundVelocity = 10.0;   
hardSplashSoundVelocity = 20.0;   
exitSplashSoundVelocity = 5.0;

//mediumSplashSound = "";
//hardSplashSound = "";
//exitSplashSound = "";

// Sounds

// IMPACT SOUND
softImpactSound = slowImpactSound;
hardImpactSound = fastImpactSound;

//IDLE SOUND
speedCartIdleSound = JeepWastelandIdleSound;

//DRIVING SOUND
speedCartDriveSound = JeepWastelandDriveSound;

//   explosion = VehicleExplosion;
justcollided = 0;

   uiName = "Jeep Wasteland ";
rideable = true;
lookUpLimit = 0.65;
lookDownLimit = 0.45;

paintable = true;
   
   damageEmitter[0] = VehicleBurnEmitter;
damageEmitterOffset[0] = "0.0 0.0 0.0 ";
damageLevelTolerance[0] = 0.99;

   damageEmitter[1] = VehicleBurnEmitter;
damageEmitterOffset[1] = "0.0 0.0 0.0 ";
damageLevelTolerance[1] = 1.0;

   numDmgEmitterAreas = 1;

   initialExplosionProjectile = JeepWastelandExplosionProjectile;
   initialExplosionOffset = 0;         //offset only uses a z value for now

   burnTime = 4000;

   finalExplosionProjectile = JeepWastelandFinalExplosionProjectile;
   finalExplosionOffset = 0.5;          //offset only uses a z value for now

   minRunOverSpeed    = 4;   //how fast you need to be going to run someone over (do damage)
   runOverDamageScale = 8;   //when you run over someone, speed * runoverdamagescale = damage amt
   runOverPushScale   = 1.2; //how hard a person you're running over gets pushed

   //protection for passengers
   protectPassengersBurn   = false;  //protect passengers from the burning effect of explosions?
   protectPassengersRadius = true;  //protect passengers from radius damage (explosions) ?
   protectPassengersDirect = false; //protect passengers from direct damage (bullets) ?
};


function JeepWastelandVehicle::onadd(%this,%obj)
{
VehicleSpeedCheck(%this, %obj);
parent::onadd(%this,%obj);
}

function VehicleSpeedCheck(%this, %obj)
{
if(!isObject(%obj))
return;

%vehicle = %obj;
%datablock = %vehicle.getDatablock();
%slot = 0; //Play the sound in the driver's spot
%speed = vectorLen(%obj.getVelocity());

if(%speed < 0) //Keeps throwing random negative numbers when train is at dead stop
    %speed = 0;

if(%speed < 10)
{
    if(%datablock.JeepWastelandIdleSound !$= "")
{
%vehicle.playAudio(%slot, %datablock.JeepWastelandIdleSound);
}
else{
if(isObject(JeepWastelandIdleSound))
{
%vehicle.playAudio(%slot, JeepWastelandIdleSound);
}

}
else{
if(%datablock.JeepWastelandIdleSound !$= "")
{
%vehicle.playAudio(%slot, %datablock.JeepWastelandDriveSound);
}
else{
if(isObject(JeepWastelandGoSound))
{
%vehicle.playAudio(%slot, JeepWastelandGoSound);
}
}
}


schedule(500,0,"VehicleSpeedCheck",%this,%obj);
}

Oh, i just noticed this in your vehicle's main datablock
Code: [Select]
//IDLE SOUND
speedCartIdleSound = JeepWastelandIdleSound;

//DRIVING SOUND
speedCartDriveSound = JeepWastelandDriveSound;

These aren't necessary, and if anything, would overwrite the Speed Kart sounds with your own

The .wavs of the original SpeedKart file are in there, towards the top half of your code.You probably don't have the right files attatched to them.
Oh wait this was already resolved my bad

What's the difference between the go and driving sound? Is the go just startup of the engine or the transition from driving to idle?

What's the difference between the go and driving sound? Is the go just startup of the engine or the transition from driving to idle?

SpeedKart_Go.wav was the default sound for vehicles that weren't assigned a sound
SpeedKartBuggy_go.wav was the sound I assigned for the vehicles

It's really a bit messy, it was just sorta ripped from the speedkart vehicle code.