mirror of
https://github.com/Ragora/T2-BoL.git
synced 2026-07-13 14:24:33 +00:00
Brought up to date with the newest T2BoL I've located
This commit is contained in:
parent
8c96cba3e1
commit
accd31895e
287 changed files with 108557 additions and 107608 deletions
|
|
@ -1,324 +1,324 @@
|
|||
//------------------------------------------------------------------------------
|
||||
datablock EffectProfile(VehicleAppearEffect)
|
||||
{
|
||||
effectname = "vehicles/inventory_pad_appear";
|
||||
minDistance = 5;
|
||||
maxDistance = 10;
|
||||
};
|
||||
|
||||
datablock EffectProfile(ActivateVehiclePadEffect)
|
||||
{
|
||||
effectname = "powered/vehicle_pad_on";
|
||||
minDistance = 20;
|
||||
maxDistance = 30;
|
||||
};
|
||||
|
||||
datablock AudioProfile(VehicleAppearSound)
|
||||
{
|
||||
filename = "fx/vehicles/inventory_pad_appear.wav";
|
||||
description = AudioClosest3d;
|
||||
preload = true;
|
||||
effect = VehicleAppearEffect;
|
||||
};
|
||||
|
||||
datablock AudioProfile(ActivateVehiclePadSound)
|
||||
{
|
||||
filename = "fx/powered/vehicle_pad_on.wav";
|
||||
description = AudioClose3d;
|
||||
preload = true;
|
||||
effect = ActivateVehiclePadEffect;
|
||||
};
|
||||
|
||||
datablock StationFXVehicleData( VehicleInvFX )
|
||||
{
|
||||
lifetime = 6.0;
|
||||
|
||||
glowTopHeight = 1.5;
|
||||
glowBottomHeight = 0.1;
|
||||
glowTopRadius = 12.5;
|
||||
glowBottomRadius = 12.0;
|
||||
numGlowSegments = 26;
|
||||
glowFadeTime = 3.25;
|
||||
|
||||
armLightDelay = 2.3;
|
||||
armLightLifetime = 3.0;
|
||||
armLightFadeTime = 1.5;
|
||||
numArcSegments = 10.0;
|
||||
|
||||
sphereColor = "0.1 0.1 0.5";
|
||||
spherePhiSegments = 13;
|
||||
sphereThetaSegments = 8;
|
||||
sphereRadius = 12.0;
|
||||
sphereScale = "1.05 1.05 0.85";
|
||||
|
||||
glowNodeName = "GLOWFX";
|
||||
|
||||
leftNodeName[0] = "LFX1";
|
||||
leftNodeName[1] = "LFX2";
|
||||
leftNodeName[2] = "LFX3";
|
||||
leftNodeName[3] = "LFX4";
|
||||
|
||||
rightNodeName[0] = "RFX1";
|
||||
rightNodeName[1] = "RFX2";
|
||||
rightNodeName[2] = "RFX3";
|
||||
rightNodeName[3] = "RFX4";
|
||||
|
||||
|
||||
texture[0] = "special/stationGlow";
|
||||
texture[1] = "special/stationLight2";
|
||||
};
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
//------------------------------------------------------------------------------
|
||||
function serverCmdBuyVehicle(%client, %blockName)
|
||||
{
|
||||
%team = %client.getSensorGroup();
|
||||
if(vehicleCheck(%blockName, %team))
|
||||
{
|
||||
%station = %client.player.station.pad;
|
||||
if( (%station.ready) && (%station.station.vehicle[%blockName]) )
|
||||
{
|
||||
%trans = %station.getTransform();
|
||||
%pos = getWords(%trans, 0, 2);
|
||||
%matrix = VectorOrthoBasis(getWords(%trans, 3, 6));
|
||||
%yrot = getWords(%matrix, 3, 5);
|
||||
%p = vectorAdd(%pos,vectorScale(%yrot, -3));
|
||||
%p = getWords(%p,0, 1) @ " " @ getWord(%p,2) + 4;
|
||||
|
||||
// error(%blockName);
|
||||
// error(%blockName.spawnOffset);
|
||||
|
||||
%p = vectorAdd(%p, %blockName.spawnOffset);
|
||||
%rot = getWords(%trans, 3, 5);
|
||||
%angle = getWord(%trans, 6) + 3.14;
|
||||
%mask = $TypeMasks::VehicleObjectType | $TypeMasks::PlayerObjectType |
|
||||
$TypeMasks::StationObjectType | $TypeMasks::TurretObjectType;
|
||||
InitContainerRadiusSearch(%p, %blockName.checkRadius, %mask);
|
||||
|
||||
%clear = 1;
|
||||
for (%x = 0; (%obj = containerSearchNext()) != 0; %x++)
|
||||
{
|
||||
if((%obj.getType() & $TypeMasks::VehicleObjectType) && (%obj.getDataBlock().checkIfPlayersMounted(%obj)))
|
||||
{
|
||||
%clear = 0;
|
||||
break;
|
||||
}
|
||||
else
|
||||
%removeObjects[%x] = %obj;
|
||||
}
|
||||
if(%clear)
|
||||
{
|
||||
%fadeTime = 0;
|
||||
for(%i = 0; %i < %x; %i++)
|
||||
{
|
||||
if(%removeObjects[%i].getType() & $TypeMasks::PlayerObjectType)
|
||||
{
|
||||
%pData = %removeObjects[%i].getDataBlock();
|
||||
%pData.damageObject(%removeObjects[%i], 0, "0 0 0", 1000, $DamageType::VehicleSpawn);
|
||||
}
|
||||
else
|
||||
{
|
||||
%removeObjects[%i].mountable = 0;
|
||||
%removeObjects[%i].startFade( 1000, 0, true );
|
||||
%removeObjects[%i].schedule(1001, "delete");
|
||||
%fadeTime = 1500;
|
||||
}
|
||||
}
|
||||
schedule(%fadeTime, 0, "createVehicle", %client, %station, %blockName, %team , %p, %rot, %angle);
|
||||
}
|
||||
else
|
||||
MessageClient(%client, "", 'Can\'t create vehicle. A player is on the creation pad.');
|
||||
}
|
||||
//--------------------------------------------------------------------------------------
|
||||
// z0dd - ZOD, 4/25/02. client tried to quick purchase a vehicle that isn't on this map
|
||||
else
|
||||
{
|
||||
messageClient(%client, "", "~wfx/misc/misc.error.wav");
|
||||
}
|
||||
//--------------------------------------------------------------------------------------
|
||||
}
|
||||
//--------------------------------------------------------------------------------------------------------------
|
||||
// z0dd - ZOD, 4/25/02. client tried to quick purchase vehicle when max vehicles of this type are already in use
|
||||
else
|
||||
{
|
||||
messageClient(%client, "", "~wfx/misc/misc.error.wav");
|
||||
}
|
||||
//--------------------------------------------------------------------------------------------------------------
|
||||
}
|
||||
|
||||
function createVehicle(%client, %station, %blockName, %team , %pos, %rot, %angle)
|
||||
{
|
||||
%obj = %blockName.create(%team);
|
||||
if(%obj)
|
||||
{
|
||||
//-----------------------------------------------
|
||||
// z0dd - ZOD, 4/25/02. MPB Teleporter.
|
||||
if ( %blockName $= "MobileBaseVehicle" )
|
||||
{
|
||||
%station.station.teleporter.MPB = %obj;
|
||||
%obj.teleporter = %station.station.teleporter;
|
||||
}
|
||||
//-----------------------------------------------
|
||||
%station.ready = false;
|
||||
%obj.team = %team;
|
||||
%obj.useCreateHeight(true);
|
||||
%obj.schedule(5500, "useCreateHeight", false);
|
||||
%obj.getDataBlock().isMountable(%obj, false);
|
||||
%obj.getDataBlock().schedule(6500, "isMountable", %obj, true);
|
||||
|
||||
%station.playThread($ActivateThread,"activate2");
|
||||
%station.playAudio($ActivateSound, ActivateVehiclePadSound);
|
||||
|
||||
vehicleListAdd(%blockName, %obj);
|
||||
MissionCleanup.add(%obj);
|
||||
|
||||
%turret = %obj.getMountNodeObject(10);
|
||||
if(%turret > 0)
|
||||
{
|
||||
%turret.setCloaked(true);
|
||||
%turret.schedule(4800, "setCloaked", false);
|
||||
}
|
||||
|
||||
%obj.setCloaked(true);
|
||||
%obj.setTransform(%pos @ " " @ %rot @ " " @ %angle);
|
||||
|
||||
%obj.schedule(3700, "playAudio", 0, VehicleAppearSound);
|
||||
%obj.schedule(4800, "setCloaked", false);
|
||||
|
||||
if(%client.player.lastVehicle)
|
||||
{
|
||||
%client.player.lastVehicle.lastPilot = "";
|
||||
vehicleAbandonTimeOut(%client.player.lastVehicle);
|
||||
%client.player.lastVehicle = "";
|
||||
}
|
||||
%client.player.lastVehicle = %obj;
|
||||
%obj.lastPilot = %client.player;
|
||||
|
||||
// play the FX
|
||||
%fx = new StationFXVehicle()
|
||||
{
|
||||
dataBlock = VehicleInvFX;
|
||||
stationObject = %station;
|
||||
};
|
||||
|
||||
if ( %client.isVehicleTeleportEnabled() )
|
||||
%obj.getDataBlock().schedule(5000, "mountDriver", %obj, %client.player);
|
||||
}
|
||||
if(%obj.getTarget() != -1)
|
||||
setTargetSensorGroup(%obj.getTarget(), %client.getSensorGroup());
|
||||
// We are now closing the vehicle hud when you buy a vehicle, making the following call
|
||||
// unnecessary (and it breaks stuff, too!)
|
||||
//VehicleHud.updateHud(%client, 'vehicleHud');
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
function VehicleData::mountDriver(%data, %obj, %player)
|
||||
{
|
||||
if(isObject(%obj) && %obj.getDamageState() !$= "Destroyed")
|
||||
{
|
||||
%player.startFade(1000, 0, true);
|
||||
schedule(1000, 0, "testVehicleForMount", %player, %obj);
|
||||
%player.schedule(1500,"startFade",1000, 0, false);
|
||||
}
|
||||
}
|
||||
|
||||
function testVehicleForMount(%player, %obj)
|
||||
{
|
||||
// z0dd - ZOD, 4/25/02. Do not auto mount players who are teleporting, bug fix.
|
||||
// z0dd - ZOD, 7/10/02. Added check to see if player is in inv. Prevents switching
|
||||
// to illegal armor for a vehicle by purchasing a vehicle and buying a illegal
|
||||
// armor durig the tele phase period.
|
||||
if(isObject(%obj) && %obj.getDamageState() !$= "Destroyed" && !%player.teleporting && !%player.client.inInv)
|
||||
%player.getDataBlock().onCollision(%player, %obj, 0);
|
||||
}
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
function VehicleData::checkIfPlayersMounted(%data, %obj)
|
||||
{
|
||||
for(%i = 0; %i < %obj.getDatablock().numMountPoints; %i++)
|
||||
if (%obj.getMountNodeObject(%i))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
function VehicleData::isMountable(%data, %obj, %val)
|
||||
{
|
||||
%obj.mountable = %val;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
function vehicleCheck(%blockName, %team)
|
||||
{
|
||||
if(($VehicleMax[%blockName] - $VehicleTotalCount[%team, %blockName]) > 0)
|
||||
return true;
|
||||
// else
|
||||
// {
|
||||
// for(%i = 0; %i < $VehicleMax[%blockName]; %i++)
|
||||
// {
|
||||
// %obj = $VehicleInField[%blockName, %i];
|
||||
// if(%obj.abandon)
|
||||
// {
|
||||
// vehicleListRemove(%blockName, %obj);
|
||||
// %obj.delete();
|
||||
// return true;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------------------------------------
|
||||
// z0dd - ZOD, 4/24/02. rewrote this function
|
||||
function VehicleHud::updateHud( %obj, %client, %tag )
|
||||
{
|
||||
%station = %client.player.station;
|
||||
%team = %client.getSensorGroup();
|
||||
%count = 0;
|
||||
%none = "-";
|
||||
|
||||
%vehmsg = %station.vehicle[ScoutVehicle] ? "( 1 ) GRAV CYCLE " : %none;
|
||||
%numleft = %station.vehicle[ScoutVehicle] ? ($VehicleMax[ScoutVehicle] - $VehicleTotalCount[%team, ScoutVehicle]) : 0;
|
||||
messageClient( %client, 'SetLineHud', "", %tag, %count, %vehmsg, "", ScoutVehicle, %numleft );
|
||||
%count++;
|
||||
|
||||
%vehmsg = %station.vehicle[AssaultVehicle] ? "( 2 ) ASSAULT TANK " : %none;
|
||||
%numleft = %station.vehicle[AssaultVehicle] ? ($VehicleMax[AssaultVehicle] - $VehicleTotalCount[%team, AssaultVehicle]) : 0;
|
||||
messageClient( %client, 'SetLineHud', "", %tag, %count, %vehmsg, "", AssaultVehicle, %numleft );
|
||||
%count++;
|
||||
|
||||
%vehmsg = %station.vehicle[mobileBaseVehicle] ? "( 3 ) MOBILE POINT BASE " : %none;
|
||||
%numleft = %station.vehicle[MobileBaseVehicle] ? ($VehicleMax[MobileBaseVehicle] - $VehicleTotalCount[%team, MobileBaseVehicle]) : 0;
|
||||
messageClient( %client, 'SetLineHud', "", %tag, %count, %vehmsg, "", MobileBaseVehicle, %numleft );
|
||||
%count++;
|
||||
|
||||
%vehmsg = %station.vehicle[scoutFlyer] ? "( 4 ) SCOUT FLIER " : %none;
|
||||
%numleft = %station.vehicle[ScoutFlyer] ? ($VehicleMax[ScoutFlyer] - $VehicleTotalCount[%team, ScoutFlyer]) : 0;
|
||||
messageClient( %client, 'SetLineHud', "", %tag, %count, %vehmsg, "", ScoutFlyer, %numleft );
|
||||
%count++;
|
||||
|
||||
%vehmsg = %station.vehicle[bomberFlyer] ? "( 5 ) BOMBER " : %none;
|
||||
%numleft = %station.vehicle[BomberFlyer] ? ($VehicleMax[BomberFlyer] - $VehicleTotalCount[%team, BomberFlyer]) : 0;
|
||||
messageClient( %client, 'SetLineHud', "", %tag, %count, %vehmsg, "", BomberFlyer, %numleft );
|
||||
%count++;
|
||||
|
||||
%vehmsg = %station.vehicle[hapcFlyer] ? "( 6 ) TRANSPORT " : %none;
|
||||
%numleft = %station.vehicle[HAPCFlyer] ? ($VehicleMax[HAPCFlyer] - $VehicleTotalCount[%team, HAPCFlyer]) : 0;
|
||||
messageClient( %client, 'SetLineHud', "", %tag, %count, %vehmsg, "", HAPCFlyer, %numleft );
|
||||
}
|
||||
//--------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
function VehicleHud::clearHud( %obj, %client, %tag, %count )
|
||||
{
|
||||
for ( %i = 0; %i < %count; %i++ )
|
||||
messageClient( %client, 'RemoveLineHud', "", %tag, %i );
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
function serverCmdEnableVehicleTeleport( %client, %enabled )
|
||||
{
|
||||
%client.setVehicleTeleportEnabled( %enabled );
|
||||
}
|
||||
//------------------------------------------------------------------------------
|
||||
datablock EffectProfile(VehicleAppearEffect)
|
||||
{
|
||||
effectname = "vehicles/inventory_pad_appear";
|
||||
minDistance = 5;
|
||||
maxDistance = 10;
|
||||
};
|
||||
|
||||
datablock EffectProfile(ActivateVehiclePadEffect)
|
||||
{
|
||||
effectname = "powered/vehicle_pad_on";
|
||||
minDistance = 20;
|
||||
maxDistance = 30;
|
||||
};
|
||||
|
||||
datablock AudioProfile(VehicleAppearSound)
|
||||
{
|
||||
filename = "fx/vehicles/inventory_pad_appear.wav";
|
||||
description = AudioClosest3d;
|
||||
preload = true;
|
||||
effect = VehicleAppearEffect;
|
||||
};
|
||||
|
||||
datablock AudioProfile(ActivateVehiclePadSound)
|
||||
{
|
||||
filename = "fx/powered/vehicle_pad_on.wav";
|
||||
description = AudioClose3d;
|
||||
preload = true;
|
||||
effect = ActivateVehiclePadEffect;
|
||||
};
|
||||
|
||||
datablock StationFXVehicleData( VehicleInvFX )
|
||||
{
|
||||
lifetime = 6.0;
|
||||
|
||||
glowTopHeight = 1.5;
|
||||
glowBottomHeight = 0.1;
|
||||
glowTopRadius = 12.5;
|
||||
glowBottomRadius = 12.0;
|
||||
numGlowSegments = 26;
|
||||
glowFadeTime = 3.25;
|
||||
|
||||
armLightDelay = 2.3;
|
||||
armLightLifetime = 3.0;
|
||||
armLightFadeTime = 1.5;
|
||||
numArcSegments = 10.0;
|
||||
|
||||
sphereColor = "0.1 0.1 0.5";
|
||||
spherePhiSegments = 13;
|
||||
sphereThetaSegments = 8;
|
||||
sphereRadius = 12.0;
|
||||
sphereScale = "1.05 1.05 0.85";
|
||||
|
||||
glowNodeName = "GLOWFX";
|
||||
|
||||
leftNodeName[0] = "LFX1";
|
||||
leftNodeName[1] = "LFX2";
|
||||
leftNodeName[2] = "LFX3";
|
||||
leftNodeName[3] = "LFX4";
|
||||
|
||||
rightNodeName[0] = "RFX1";
|
||||
rightNodeName[1] = "RFX2";
|
||||
rightNodeName[2] = "RFX3";
|
||||
rightNodeName[3] = "RFX4";
|
||||
|
||||
|
||||
texture[0] = "special/stationGlow";
|
||||
texture[1] = "special/stationLight2";
|
||||
};
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
//------------------------------------------------------------------------------
|
||||
function serverCmdBuyVehicle(%client, %blockName)
|
||||
{
|
||||
%team = %client.getSensorGroup();
|
||||
if(vehicleCheck(%blockName, %team))
|
||||
{
|
||||
%station = %client.player.station.pad;
|
||||
if( (%station.ready) && (%station.station.vehicle[%blockName]) )
|
||||
{
|
||||
%trans = %station.getTransform();
|
||||
%pos = getWords(%trans, 0, 2);
|
||||
%matrix = VectorOrthoBasis(getWords(%trans, 3, 6));
|
||||
%yrot = getWords(%matrix, 3, 5);
|
||||
%p = vectorAdd(%pos,vectorScale(%yrot, -3));
|
||||
%p = getWords(%p,0, 1) @ " " @ getWord(%p,2) + 4;
|
||||
|
||||
// error(%blockName);
|
||||
// error(%blockName.spawnOffset);
|
||||
|
||||
%p = vectorAdd(%p, %blockName.spawnOffset);
|
||||
%rot = getWords(%trans, 3, 5);
|
||||
%angle = getWord(%trans, 6) + 3.14;
|
||||
%mask = $TypeMasks::VehicleObjectType | $TypeMasks::PlayerObjectType |
|
||||
$TypeMasks::StationObjectType | $TypeMasks::TurretObjectType;
|
||||
InitContainerRadiusSearch(%p, %blockName.checkRadius, %mask);
|
||||
|
||||
%clear = 1;
|
||||
for (%x = 0; (%obj = containerSearchNext()) != 0; %x++)
|
||||
{
|
||||
if((%obj.getType() & $TypeMasks::VehicleObjectType) && (%obj.getDataBlock().checkIfPlayersMounted(%obj)))
|
||||
{
|
||||
%clear = 0;
|
||||
break;
|
||||
}
|
||||
else
|
||||
%removeObjects[%x] = %obj;
|
||||
}
|
||||
if(%clear)
|
||||
{
|
||||
%fadeTime = 0;
|
||||
for(%i = 0; %i < %x; %i++)
|
||||
{
|
||||
if(%removeObjects[%i].getType() & $TypeMasks::PlayerObjectType)
|
||||
{
|
||||
%pData = %removeObjects[%i].getDataBlock();
|
||||
%pData.damageObject(%removeObjects[%i], 0, "0 0 0", 1000, $DamageType::VehicleSpawn);
|
||||
}
|
||||
else
|
||||
{
|
||||
%removeObjects[%i].mountable = 0;
|
||||
%removeObjects[%i].startFade( 1000, 0, true );
|
||||
%removeObjects[%i].schedule(1001, "delete");
|
||||
%fadeTime = 1500;
|
||||
}
|
||||
}
|
||||
schedule(%fadeTime, 0, "createVehicle", %client, %station, %blockName, %team , %p, %rot, %angle);
|
||||
}
|
||||
else
|
||||
MessageClient(%client, "", 'Can\'t create vehicle. A player is on the creation pad.');
|
||||
}
|
||||
//--------------------------------------------------------------------------------------
|
||||
// z0dd - ZOD, 4/25/02. client tried to quick purchase a vehicle that isn't on this map
|
||||
else
|
||||
{
|
||||
messageClient(%client, "", "~wfx/misc/misc.error.wav");
|
||||
}
|
||||
//--------------------------------------------------------------------------------------
|
||||
}
|
||||
//--------------------------------------------------------------------------------------------------------------
|
||||
// z0dd - ZOD, 4/25/02. client tried to quick purchase vehicle when max vehicles of this type are already in use
|
||||
else
|
||||
{
|
||||
messageClient(%client, "", "~wfx/misc/misc.error.wav");
|
||||
}
|
||||
//--------------------------------------------------------------------------------------------------------------
|
||||
}
|
||||
|
||||
function createVehicle(%client, %station, %blockName, %team , %pos, %rot, %angle)
|
||||
{
|
||||
%obj = %blockName.create(%team);
|
||||
if(%obj)
|
||||
{
|
||||
//-----------------------------------------------
|
||||
// z0dd - ZOD, 4/25/02. MPB Teleporter.
|
||||
if ( %blockName $= "MobileBaseVehicle" )
|
||||
{
|
||||
%station.station.teleporter.MPB = %obj;
|
||||
%obj.teleporter = %station.station.teleporter;
|
||||
}
|
||||
//-----------------------------------------------
|
||||
%station.ready = false;
|
||||
%obj.team = %team;
|
||||
%obj.useCreateHeight(true);
|
||||
%obj.schedule(5500, "useCreateHeight", false);
|
||||
%obj.getDataBlock().isMountable(%obj, false);
|
||||
%obj.getDataBlock().schedule(6500, "isMountable", %obj, true);
|
||||
|
||||
%station.playThread($ActivateThread,"activate2");
|
||||
%station.playAudio($ActivateSound, ActivateVehiclePadSound);
|
||||
|
||||
vehicleListAdd(%blockName, %obj);
|
||||
MissionCleanup.add(%obj);
|
||||
|
||||
%turret = %obj.getMountNodeObject(10);
|
||||
if(%turret > 0)
|
||||
{
|
||||
%turret.setCloaked(true);
|
||||
%turret.schedule(4800, "setCloaked", false);
|
||||
}
|
||||
|
||||
%obj.setCloaked(true);
|
||||
%obj.setTransform(%pos @ " " @ %rot @ " " @ %angle);
|
||||
|
||||
%obj.schedule(3700, "playAudio", 0, VehicleAppearSound);
|
||||
%obj.schedule(4800, "setCloaked", false);
|
||||
|
||||
if(%client.player.lastVehicle)
|
||||
{
|
||||
%client.player.lastVehicle.lastPilot = "";
|
||||
vehicleAbandonTimeOut(%client.player.lastVehicle);
|
||||
%client.player.lastVehicle = "";
|
||||
}
|
||||
%client.player.lastVehicle = %obj;
|
||||
%obj.lastPilot = %client.player;
|
||||
|
||||
// play the FX
|
||||
%fx = new StationFXVehicle()
|
||||
{
|
||||
dataBlock = VehicleInvFX;
|
||||
stationObject = %station;
|
||||
};
|
||||
|
||||
if ( %client.isVehicleTeleportEnabled() )
|
||||
%obj.getDataBlock().schedule(5000, "mountDriver", %obj, %client.player);
|
||||
}
|
||||
if(%obj.getTarget() != -1)
|
||||
setTargetSensorGroup(%obj.getTarget(), %client.getSensorGroup());
|
||||
// We are now closing the vehicle hud when you buy a vehicle, making the following call
|
||||
// unnecessary (and it breaks stuff, too!)
|
||||
//VehicleHud.updateHud(%client, 'vehicleHud');
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
function VehicleData::mountDriver(%data, %obj, %player)
|
||||
{
|
||||
if(isObject(%obj) && %obj.getDamageState() !$= "Destroyed")
|
||||
{
|
||||
%player.startFade(1000, 0, true);
|
||||
schedule(1000, 0, "testVehicleForMount", %player, %obj);
|
||||
%player.schedule(1500,"startFade",1000, 0, false);
|
||||
}
|
||||
}
|
||||
|
||||
function testVehicleForMount(%player, %obj)
|
||||
{
|
||||
// z0dd - ZOD, 4/25/02. Do not auto mount players who are teleporting, bug fix.
|
||||
// z0dd - ZOD, 7/10/02. Added check to see if player is in inv. Prevents switching
|
||||
// to illegal armor for a vehicle by purchasing a vehicle and buying a illegal
|
||||
// armor durig the tele phase period.
|
||||
if(isObject(%obj) && %obj.getDamageState() !$= "Destroyed" && !%player.teleporting && !%player.client.inInv)
|
||||
%player.getDataBlock().onCollision(%player, %obj, 0);
|
||||
}
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
function VehicleData::checkIfPlayersMounted(%data, %obj)
|
||||
{
|
||||
for(%i = 0; %i < %obj.getDatablock().numMountPoints; %i++)
|
||||
if (%obj.getMountNodeObject(%i))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
function VehicleData::isMountable(%data, %obj, %val)
|
||||
{
|
||||
%obj.mountable = %val;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
function vehicleCheck(%blockName, %team)
|
||||
{
|
||||
if(($VehicleMax[%blockName] - $VehicleTotalCount[%team, %blockName]) > 0)
|
||||
return true;
|
||||
// else
|
||||
// {
|
||||
// for(%i = 0; %i < $VehicleMax[%blockName]; %i++)
|
||||
// {
|
||||
// %obj = $VehicleInField[%blockName, %i];
|
||||
// if(%obj.abandon)
|
||||
// {
|
||||
// vehicleListRemove(%blockName, %obj);
|
||||
// %obj.delete();
|
||||
// return true;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------------------------------------
|
||||
// z0dd - ZOD, 4/24/02. rewrote this function
|
||||
function VehicleHud::updateHud( %obj, %client, %tag )
|
||||
{
|
||||
%station = %client.player.station;
|
||||
%team = %client.getSensorGroup();
|
||||
%count = 0;
|
||||
%none = "-";
|
||||
|
||||
%vehmsg = %station.vehicle[ScoutVehicle] ? "( 1 ) GRAV CYCLE " : %none;
|
||||
%numleft = %station.vehicle[ScoutVehicle] ? ($VehicleMax[ScoutVehicle] - $VehicleTotalCount[%team, ScoutVehicle]) : 0;
|
||||
messageClient( %client, 'SetLineHud', "", %tag, %count, %vehmsg, "", ScoutVehicle, %numleft );
|
||||
%count++;
|
||||
|
||||
%vehmsg = %station.vehicle[AssaultVehicle] ? "( 2 ) ASSAULT TANK " : %none;
|
||||
%numleft = %station.vehicle[AssaultVehicle] ? ($VehicleMax[AssaultVehicle] - $VehicleTotalCount[%team, AssaultVehicle]) : 0;
|
||||
messageClient( %client, 'SetLineHud', "", %tag, %count, %vehmsg, "", AssaultVehicle, %numleft );
|
||||
%count++;
|
||||
|
||||
%vehmsg = %station.vehicle[mobileBaseVehicle] ? "( 3 ) MOBILE POINT BASE " : %none;
|
||||
%numleft = %station.vehicle[MobileBaseVehicle] ? ($VehicleMax[MobileBaseVehicle] - $VehicleTotalCount[%team, MobileBaseVehicle]) : 0;
|
||||
messageClient( %client, 'SetLineHud', "", %tag, %count, %vehmsg, "", MobileBaseVehicle, %numleft );
|
||||
%count++;
|
||||
|
||||
%vehmsg = %station.vehicle[scoutFlyer] ? "( 4 ) SCOUT FLIER " : %none;
|
||||
%numleft = %station.vehicle[ScoutFlyer] ? ($VehicleMax[ScoutFlyer] - $VehicleTotalCount[%team, ScoutFlyer]) : 0;
|
||||
messageClient( %client, 'SetLineHud', "", %tag, %count, %vehmsg, "", ScoutFlyer, %numleft );
|
||||
%count++;
|
||||
|
||||
%vehmsg = %station.vehicle[bomberFlyer] ? "( 5 ) BOMBER " : %none;
|
||||
%numleft = %station.vehicle[BomberFlyer] ? ($VehicleMax[BomberFlyer] - $VehicleTotalCount[%team, BomberFlyer]) : 0;
|
||||
messageClient( %client, 'SetLineHud', "", %tag, %count, %vehmsg, "", BomberFlyer, %numleft );
|
||||
%count++;
|
||||
|
||||
%vehmsg = %station.vehicle[hapcFlyer] ? "( 6 ) TRANSPORT " : %none;
|
||||
%numleft = %station.vehicle[HAPCFlyer] ? ($VehicleMax[HAPCFlyer] - $VehicleTotalCount[%team, HAPCFlyer]) : 0;
|
||||
messageClient( %client, 'SetLineHud', "", %tag, %count, %vehmsg, "", HAPCFlyer, %numleft );
|
||||
}
|
||||
//--------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
function VehicleHud::clearHud( %obj, %client, %tag, %count )
|
||||
{
|
||||
for ( %i = 0; %i < %count; %i++ )
|
||||
messageClient( %client, 'RemoveLineHud', "", %tag, %i );
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
function serverCmdEnableVehicleTeleport( %client, %enabled )
|
||||
{
|
||||
%client.setVehicleTeleportEnabled( %enabled );
|
||||
}
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
|
@ -1,227 +1,227 @@
|
|||
//**************************************************************
|
||||
// HAVOC HEAVY TRANSPORT FLIER
|
||||
//**************************************************************
|
||||
//**************************************************************
|
||||
// SOUNDS
|
||||
//**************************************************************
|
||||
datablock EffectProfile(HAPCFlyerEngineEffect)
|
||||
{
|
||||
effectname = "vehicles/htransport_thrust";
|
||||
minDistance = 5.0;
|
||||
maxDistance = 10.0;
|
||||
};
|
||||
|
||||
datablock EffectProfile(HAPCFlyerThrustEffect)
|
||||
{
|
||||
effectname = "vehicles/htransport_boost";
|
||||
minDistance = 5.0;
|
||||
maxDistance = 10.0;
|
||||
};
|
||||
|
||||
datablock AudioProfile(HAPCFlyerEngineSound)
|
||||
{
|
||||
filename = "fx/vehicles/htransport_thrust.wav";
|
||||
description = AudioDefaultLooping3d;
|
||||
effect = HAPCFlyerEngineEffect;
|
||||
};
|
||||
|
||||
datablock AudioProfile(HAPCFlyerThrustSound)
|
||||
{
|
||||
filename = "fx/vehicles/htransport_boost.wav";
|
||||
description = AudioDefaultLooping3d;
|
||||
effect = HAPCFlyerThrustEffect;
|
||||
};
|
||||
|
||||
//**************************************************************
|
||||
// VEHICLE CHARACTERISTICS
|
||||
//**************************************************************
|
||||
|
||||
datablock FlyingVehicleData(HAPCFlyer) : HavocDamageProfile
|
||||
{
|
||||
spawnOffset = "0 0 6";
|
||||
renderWhenDestroyed = false;
|
||||
|
||||
catagory = "Vehicles";
|
||||
shapeFile = "vehicle_air_hapc.dts";
|
||||
multipassenger = true;
|
||||
computeCRC = true;
|
||||
|
||||
|
||||
debrisShapeName = "vehicle_air_hapc_debris.dts";
|
||||
debris = ShapeDebris;
|
||||
|
||||
drag = 0.2;
|
||||
density = 1.0;
|
||||
|
||||
mountPose[0] = sitting;
|
||||
// mountPose[1] = sitting;
|
||||
numMountPoints = 6;
|
||||
isProtectedMountPoint[0] = true;
|
||||
isProtectedMountPoint[1] = true;
|
||||
isProtectedMountPoint[2] = true;
|
||||
isProtectedMountPoint[3] = true;
|
||||
isProtectedMountPoint[4] = true;
|
||||
isProtectedMountPoint[5] = true;
|
||||
|
||||
cameraMaxDist = 17;
|
||||
cameraOffset = 2;
|
||||
cameraLag = 8.5;
|
||||
explosion = LargeAirVehicleExplosion;
|
||||
explosionDamage = 0.5;
|
||||
explosionRadius = 5.0;
|
||||
|
||||
maxDamage = 3.50;
|
||||
destroyedLevel = 3.50;
|
||||
|
||||
isShielded = true;
|
||||
rechargeRate = 1.45; // z0dd - ZOD, 4/16/02. Was 0.8
|
||||
energyPerDamagePoint = 150; // z0dd - ZOD, 4/16/02. Was 200
|
||||
maxEnergy = 800; // z0dd - ZOD, 4/16/02. Was 550
|
||||
minDrag = 100; // Linear Drag
|
||||
rotationalDrag = 2700; // Anguler Drag
|
||||
|
||||
// Auto stabilize speed
|
||||
maxAutoSpeed = 10;
|
||||
autoAngularForce = 3000; // Angular stabilizer force
|
||||
autoLinearForce = 450; // Linear stabilzer force
|
||||
autoInputDamping = 0.95; //
|
||||
|
||||
// Maneuvering
|
||||
maxSteeringAngle = 8;
|
||||
horizontalSurfaceForce = 10; // Horizontal center "wing"
|
||||
verticalSurfaceForce = 10; // Vertical center "wing"
|
||||
maneuveringForce = 6250; // Horizontal jets // z0dd - ZOD, 4/25/02. Was 6000
|
||||
steeringForce = 1000; // Steering jets
|
||||
steeringRollForce = 400; // Steering jets
|
||||
rollForce = 12; // Auto-roll
|
||||
hoverHeight = 8; // Height off the ground at rest
|
||||
createHoverHeight = 6; // Height off the ground when created
|
||||
maxForwardSpeed = 75; // speed in which forward thrust force is no longer applied (meters/second) z0dd - ZOD, 4/25/02. Was 71
|
||||
|
||||
// Turbo Jet
|
||||
jetForce = 5750; // z0dd - ZOD, 4/25/02. Was 5000
|
||||
minJetEnergy = 55;
|
||||
jetEnergyDrain = 4.5; // z0dd - ZOD, 4/16/02. Was 3.6
|
||||
vertThrustMultiple = 3.0;
|
||||
|
||||
|
||||
dustEmitter = LargeVehicleLiftoffDustEmitter;
|
||||
triggerDustHeight = 4.0;
|
||||
dustHeight = 2.0;
|
||||
|
||||
damageEmitter[0] = LightDamageSmoke;
|
||||
damageEmitter[1] = HeavyDamageSmoke;
|
||||
damageEmitter[2] = DamageBubbles;
|
||||
damageEmitterOffset[0] = "3.0 -3.0 0.0 ";
|
||||
damageEmitterOffset[1] = "-3.0 -3.0 0.0 ";
|
||||
damageLevelTolerance[0] = 0.3;
|
||||
damageLevelTolerance[1] = 0.7;
|
||||
numDmgEmitterAreas = 2;
|
||||
|
||||
// Rigid body
|
||||
mass = 550;
|
||||
bodyFriction = 0;
|
||||
bodyRestitution = 0.3;
|
||||
minRollSpeed = 0;
|
||||
softImpactSpeed = 12; // Sound hooks. This is the soft hit.
|
||||
hardImpactSpeed = 15; // Sound hooks. This is the hard hit.
|
||||
|
||||
// Ground Impact Damage (uses DamageType::Ground)
|
||||
minImpactSpeed = 25; // If hit ground at speed above this then it's an impact. Meters/second
|
||||
speedDamageScale = 0.060;
|
||||
|
||||
// Object Impact Damage (uses DamageType::Impact)
|
||||
collDamageThresholdVel = 28;
|
||||
collDamageMultiplier = 0.020;
|
||||
|
||||
//
|
||||
minTrailSpeed = 15;
|
||||
trailEmitter = ContrailEmitter;
|
||||
forwardJetEmitter = FlyerJetEmitter;
|
||||
downJetEmitter = FlyerJetEmitter;
|
||||
|
||||
//
|
||||
jetSound = HAPCFlyerThrustSound;
|
||||
engineSound = HAPCFlyerEngineSound;
|
||||
softImpactSound = SoftImpactSound;
|
||||
hardImpactSound = HardImpactSound;
|
||||
//wheelImpactSound = WheelImpactSound;
|
||||
|
||||
//
|
||||
softSplashSoundVelocity = 5.0;
|
||||
mediumSplashSoundVelocity = 8.0;
|
||||
hardSplashSoundVelocity = 12.0;
|
||||
exitSplashSoundVelocity = 8.0;
|
||||
|
||||
exitingWater = VehicleExitWaterHardSound;
|
||||
impactWaterEasy = VehicleImpactWaterSoftSound;
|
||||
impactWaterMedium = VehicleImpactWaterMediumSound;
|
||||
impactWaterHard = VehicleImpactWaterHardSound;
|
||||
waterWakeSound = VehicleWakeHardSplashSound;
|
||||
|
||||
minMountDist = 4;
|
||||
|
||||
splashEmitter[0] = VehicleFoamDropletsEmitter;
|
||||
splashEmitter[1] = VehicleFoamEmitter;
|
||||
|
||||
shieldImpact = VehicleShieldImpact;
|
||||
|
||||
cmdCategory = "Tactical";
|
||||
cmdIcon = CMDFlyingHAPCIcon;
|
||||
cmdMiniIconName = "commander/MiniIcons/com_hapc_grey";
|
||||
targetNameTag = 'Havoc';
|
||||
targetTypeTag = 'Heavy Transport';
|
||||
sensorData = VehiclePulseSensor;
|
||||
sensorRadius = VehiclePulseSensor.detectRadius; // z0dd - ZOD, 4/25/02. Allows sensor to be shown on CC
|
||||
|
||||
checkRadius = 7.8115;
|
||||
observeParameters = "1 15 15";
|
||||
|
||||
stuckTimerTicks = 32; // If the hapc spends more than 1 sec in contact with something
|
||||
stuckTimerAngle = 80; // with a > 80 deg. pitch, BOOM!
|
||||
|
||||
shieldEffectScale = "1.0 0.9375 0.45";
|
||||
};
|
||||
|
||||
function HAPCFlyer::hasDismountOverrides(%data, %obj)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
function HAPCFlyer::getDismountOverride(%data, %obj, %mounted)
|
||||
{
|
||||
%node = -1;
|
||||
for (%i = 0; %i < %data.numMountPoints; %i++)
|
||||
{
|
||||
if (%obj.getMountNodeObject(%i) == %mounted)
|
||||
{
|
||||
%node = %i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (%node == -1)
|
||||
{
|
||||
warning("Couldn't find object mount point");
|
||||
return "0 0 1";
|
||||
}
|
||||
|
||||
if (%node == 3 || %node == 2)
|
||||
{
|
||||
return "-1 0 1";
|
||||
}
|
||||
else if (%node == 5 || %node == 4)
|
||||
{
|
||||
return "1 0 1";
|
||||
}
|
||||
else
|
||||
{
|
||||
return "0 0 1";
|
||||
}
|
||||
}
|
||||
|
||||
//**************************************************************
|
||||
// WEAPONS
|
||||
//**************************************************************
|
||||
|
||||
|
||||
|
||||
//**************************************************************
|
||||
// HAVOC HEAVY TRANSPORT FLIER
|
||||
//**************************************************************
|
||||
//**************************************************************
|
||||
// SOUNDS
|
||||
//**************************************************************
|
||||
datablock EffectProfile(HAPCFlyerEngineEffect)
|
||||
{
|
||||
effectname = "vehicles/htransport_thrust";
|
||||
minDistance = 5.0;
|
||||
maxDistance = 10.0;
|
||||
};
|
||||
|
||||
datablock EffectProfile(HAPCFlyerThrustEffect)
|
||||
{
|
||||
effectname = "vehicles/htransport_boost";
|
||||
minDistance = 5.0;
|
||||
maxDistance = 10.0;
|
||||
};
|
||||
|
||||
datablock AudioProfile(HAPCFlyerEngineSound)
|
||||
{
|
||||
filename = "fx/vehicles/htransport_thrust.wav";
|
||||
description = AudioDefaultLooping3d;
|
||||
effect = HAPCFlyerEngineEffect;
|
||||
};
|
||||
|
||||
datablock AudioProfile(HAPCFlyerThrustSound)
|
||||
{
|
||||
filename = "fx/vehicles/htransport_boost.wav";
|
||||
description = AudioDefaultLooping3d;
|
||||
effect = HAPCFlyerThrustEffect;
|
||||
};
|
||||
|
||||
//**************************************************************
|
||||
// VEHICLE CHARACTERISTICS
|
||||
//**************************************************************
|
||||
|
||||
datablock FlyingVehicleData(HAPCFlyer) : HavocDamageProfile
|
||||
{
|
||||
spawnOffset = "0 0 6";
|
||||
renderWhenDestroyed = false;
|
||||
|
||||
catagory = "Vehicles";
|
||||
shapeFile = "vehicle_air_hapc.dts";
|
||||
multipassenger = true;
|
||||
computeCRC = true;
|
||||
|
||||
|
||||
debrisShapeName = "vehicle_air_hapc_debris.dts";
|
||||
debris = ShapeDebris;
|
||||
|
||||
drag = 0.2;
|
||||
density = 1.0;
|
||||
|
||||
mountPose[0] = sitting;
|
||||
// mountPose[1] = sitting;
|
||||
numMountPoints = 6;
|
||||
isProtectedMountPoint[0] = true;
|
||||
isProtectedMountPoint[1] = true;
|
||||
isProtectedMountPoint[2] = true;
|
||||
isProtectedMountPoint[3] = true;
|
||||
isProtectedMountPoint[4] = true;
|
||||
isProtectedMountPoint[5] = true;
|
||||
|
||||
cameraMaxDist = 17;
|
||||
cameraOffset = 2;
|
||||
cameraLag = 8.5;
|
||||
explosion = LargeAirVehicleExplosion;
|
||||
explosionDamage = 0.5;
|
||||
explosionRadius = 5.0;
|
||||
|
||||
maxDamage = 3.50;
|
||||
destroyedLevel = 3.50;
|
||||
|
||||
isShielded = true;
|
||||
rechargeRate = 1.45; // z0dd - ZOD, 4/16/02. Was 0.8
|
||||
energyPerDamagePoint = 150; // z0dd - ZOD, 4/16/02. Was 200
|
||||
maxEnergy = 800; // z0dd - ZOD, 4/16/02. Was 550
|
||||
minDrag = 100; // Linear Drag
|
||||
rotationalDrag = 2700; // Anguler Drag
|
||||
|
||||
// Auto stabilize speed
|
||||
maxAutoSpeed = 10;
|
||||
autoAngularForce = 3000; // Angular stabilizer force
|
||||
autoLinearForce = 450; // Linear stabilzer force
|
||||
autoInputDamping = 0.95; //
|
||||
|
||||
// Maneuvering
|
||||
maxSteeringAngle = 8;
|
||||
horizontalSurfaceForce = 10; // Horizontal center "wing"
|
||||
verticalSurfaceForce = 10; // Vertical center "wing"
|
||||
maneuveringForce = 6250; // Horizontal jets // z0dd - ZOD, 4/25/02. Was 6000
|
||||
steeringForce = 1000; // Steering jets
|
||||
steeringRollForce = 400; // Steering jets
|
||||
rollForce = 12; // Auto-roll
|
||||
hoverHeight = 8; // Height off the ground at rest
|
||||
createHoverHeight = 6; // Height off the ground when created
|
||||
maxForwardSpeed = 75; // speed in which forward thrust force is no longer applied (meters/second) z0dd - ZOD, 4/25/02. Was 71
|
||||
|
||||
// Turbo Jet
|
||||
jetForce = 5750; // z0dd - ZOD, 4/25/02. Was 5000
|
||||
minJetEnergy = 55;
|
||||
jetEnergyDrain = 4.5; // z0dd - ZOD, 4/16/02. Was 3.6
|
||||
vertThrustMultiple = 3.0;
|
||||
|
||||
|
||||
dustEmitter = LargeVehicleLiftoffDustEmitter;
|
||||
triggerDustHeight = 4.0;
|
||||
dustHeight = 2.0;
|
||||
|
||||
damageEmitter[0] = LightDamageSmoke;
|
||||
damageEmitter[1] = HeavyDamageSmoke;
|
||||
damageEmitter[2] = DamageBubbles;
|
||||
damageEmitterOffset[0] = "3.0 -3.0 0.0 ";
|
||||
damageEmitterOffset[1] = "-3.0 -3.0 0.0 ";
|
||||
damageLevelTolerance[0] = 0.3;
|
||||
damageLevelTolerance[1] = 0.7;
|
||||
numDmgEmitterAreas = 2;
|
||||
|
||||
// Rigid body
|
||||
mass = 550;
|
||||
bodyFriction = 0;
|
||||
bodyRestitution = 0.3;
|
||||
minRollSpeed = 0;
|
||||
softImpactSpeed = 12; // Sound hooks. This is the soft hit.
|
||||
hardImpactSpeed = 15; // Sound hooks. This is the hard hit.
|
||||
|
||||
// Ground Impact Damage (uses DamageType::Ground)
|
||||
minImpactSpeed = 25; // If hit ground at speed above this then it's an impact. Meters/second
|
||||
speedDamageScale = 0.060;
|
||||
|
||||
// Object Impact Damage (uses DamageType::Impact)
|
||||
collDamageThresholdVel = 28;
|
||||
collDamageMultiplier = 0.020;
|
||||
|
||||
//
|
||||
minTrailSpeed = 15;
|
||||
trailEmitter = ContrailEmitter;
|
||||
forwardJetEmitter = FlyerJetEmitter;
|
||||
downJetEmitter = FlyerJetEmitter;
|
||||
|
||||
//
|
||||
jetSound = HAPCFlyerThrustSound;
|
||||
engineSound = HAPCFlyerEngineSound;
|
||||
softImpactSound = SoftImpactSound;
|
||||
hardImpactSound = HardImpactSound;
|
||||
//wheelImpactSound = WheelImpactSound;
|
||||
|
||||
//
|
||||
softSplashSoundVelocity = 5.0;
|
||||
mediumSplashSoundVelocity = 8.0;
|
||||
hardSplashSoundVelocity = 12.0;
|
||||
exitSplashSoundVelocity = 8.0;
|
||||
|
||||
exitingWater = VehicleExitWaterHardSound;
|
||||
impactWaterEasy = VehicleImpactWaterSoftSound;
|
||||
impactWaterMedium = VehicleImpactWaterMediumSound;
|
||||
impactWaterHard = VehicleImpactWaterHardSound;
|
||||
waterWakeSound = VehicleWakeHardSplashSound;
|
||||
|
||||
minMountDist = 4;
|
||||
|
||||
splashEmitter[0] = VehicleFoamDropletsEmitter;
|
||||
splashEmitter[1] = VehicleFoamEmitter;
|
||||
|
||||
shieldImpact = VehicleShieldImpact;
|
||||
|
||||
cmdCategory = "Tactical";
|
||||
cmdIcon = CMDFlyingHAPCIcon;
|
||||
cmdMiniIconName = "commander/MiniIcons/com_hapc_grey";
|
||||
targetNameTag = 'Havoc';
|
||||
targetTypeTag = 'Heavy Transport';
|
||||
sensorData = VehiclePulseSensor;
|
||||
sensorRadius = VehiclePulseSensor.detectRadius; // z0dd - ZOD, 4/25/02. Allows sensor to be shown on CC
|
||||
|
||||
checkRadius = 7.8115;
|
||||
observeParameters = "1 15 15";
|
||||
|
||||
stuckTimerTicks = 32; // If the hapc spends more than 1 sec in contact with something
|
||||
stuckTimerAngle = 80; // with a > 80 deg. pitch, BOOM!
|
||||
|
||||
shieldEffectScale = "1.0 0.9375 0.45";
|
||||
};
|
||||
|
||||
function HAPCFlyer::hasDismountOverrides(%data, %obj)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
function HAPCFlyer::getDismountOverride(%data, %obj, %mounted)
|
||||
{
|
||||
%node = -1;
|
||||
for (%i = 0; %i < %data.numMountPoints; %i++)
|
||||
{
|
||||
if (%obj.getMountNodeObject(%i) == %mounted)
|
||||
{
|
||||
%node = %i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (%node == -1)
|
||||
{
|
||||
warning("Couldn't find object mount point");
|
||||
return "0 0 1";
|
||||
}
|
||||
|
||||
if (%node == 3 || %node == 2)
|
||||
{
|
||||
return "-1 0 1";
|
||||
}
|
||||
else if (%node == 5 || %node == 4)
|
||||
{
|
||||
return "1 0 1";
|
||||
}
|
||||
else
|
||||
{
|
||||
return "0 0 1";
|
||||
}
|
||||
}
|
||||
|
||||
//**************************************************************
|
||||
// WEAPONS
|
||||
//**************************************************************
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,305 +1,305 @@
|
|||
//**************************************************************
|
||||
// JERICHO FORWARD BASE (Mobile Point Base)
|
||||
//**************************************************************
|
||||
//**************************************************************
|
||||
// SOUNDS
|
||||
//**************************************************************
|
||||
datablock EffectProfile(MPBEngineEffect)
|
||||
{
|
||||
effectname = "vehicles/mpb_thrust";
|
||||
minDistance = 5.0;
|
||||
maxDistance = 10.0;
|
||||
};
|
||||
|
||||
datablock EffectProfile(MPBThrustEffect)
|
||||
{
|
||||
effectname = "vehicles/mpb_boost";
|
||||
minDistance = 5.0;
|
||||
maxDistance = 10.0;
|
||||
};
|
||||
|
||||
datablock AudioProfile(MPBEngineSound)
|
||||
{
|
||||
filename = "fx/vehicles/mpb_thrust.wav";
|
||||
description = AudioDefaultLooping3d;
|
||||
preload = true;
|
||||
effect = MPBEngineEffect;
|
||||
};
|
||||
|
||||
datablock AudioProfile(MPBThrustSound)
|
||||
{
|
||||
filename = "fx/vehicles/mpb_boost.wav";
|
||||
description = AudioDefaultLooping3d;
|
||||
preload = true;
|
||||
effect = MPBThrustEffect;
|
||||
};
|
||||
|
||||
datablock AudioProfile(MobileBaseDeploySound)
|
||||
{
|
||||
filename = "fx/vehicles/MPB_deploy.wav";
|
||||
description = AudioClose3d;
|
||||
preload = true;
|
||||
};
|
||||
|
||||
datablock AudioProfile(MobileBaseUndeploySound)
|
||||
{
|
||||
filename = "fx/vehicles/MPB_undeploy_turret.wav";
|
||||
description = AudioClose3d;
|
||||
preload = true;
|
||||
};
|
||||
|
||||
datablock AudioProfile(MobileBaseTurretDeploySound)
|
||||
{
|
||||
filename = "fx/vehicles/MPB_deploy_turret.wav";
|
||||
description = AudioClose3d;
|
||||
preload = true;
|
||||
};
|
||||
|
||||
datablock AudioProfile(MobileBaseTurretUndeploySound)
|
||||
{
|
||||
filename = "fx/vehicles/MPB_undeploy_turret.wav";
|
||||
description = AudioClose3d;
|
||||
preload = true;
|
||||
};
|
||||
|
||||
datablock AudioProfile(MobileBaseStationDeploySound)
|
||||
{
|
||||
filename = "fx/vehicles/MPB_deploy_station.wav";
|
||||
description = AudioClose3d;
|
||||
preload = true;
|
||||
};
|
||||
|
||||
datablock AudioProfile(MobileBaseStationUndeploySound)
|
||||
{
|
||||
filename = "fx/vehicles/MPB_close_lid.wav";
|
||||
description = AudioClose3d;
|
||||
preload = true;
|
||||
};
|
||||
|
||||
|
||||
//**************************************************************
|
||||
// LIGHTS
|
||||
//**************************************************************
|
||||
datablock RunningLightData(MPBLight1)
|
||||
{
|
||||
pointSize = 3.0;
|
||||
pointColor = "1.0 1.0 1.0 0.3";
|
||||
pointNodeName = "Headlight_node01";
|
||||
texture = "special/expFlare";
|
||||
};
|
||||
|
||||
datablock RunningLightData(MPBLight2)
|
||||
{
|
||||
pointSize = 3.0;
|
||||
pointColor = "1.0 1.0 1.0 0.3";
|
||||
pointNodeName = "Headlight_node02";
|
||||
texture = "special/expFlare";
|
||||
};
|
||||
|
||||
|
||||
//**************************************************************
|
||||
// VEHICLE CHARACTERISTICS
|
||||
//**************************************************************
|
||||
datablock SensorData(MPBDeployedSensor) : VehiclePulseSensor
|
||||
{
|
||||
jams = true;
|
||||
jamsOnlyGroup = true;
|
||||
jamsUsingLOS = false;
|
||||
jamRadius = 50;
|
||||
};
|
||||
|
||||
datablock WheeledVehicleData(MobileBaseVehicle) : MPBDamageProfile
|
||||
{
|
||||
spawnOffset = "0 0 1.5"; // z0dd - ZOD, 7/10/02. Change height, 3rd value, from 1.0 to 1.5 to prevent it from being dry docked
|
||||
renderWhenDestroyed = false;
|
||||
|
||||
catagory = "Vehicles";
|
||||
shapeFile = "vehicle_land_mpbase.dts";
|
||||
multipassenger = false;
|
||||
computeCRC = true;
|
||||
|
||||
debrisShapeName = "vehicle_land_mpbase_debris.dts";
|
||||
debris = ShapeDebris;
|
||||
|
||||
drag = 0.0;
|
||||
density = 20.0;
|
||||
|
||||
mountPose[0] = sitting;
|
||||
numMountPoints = 1;
|
||||
isProtectedMountPoint[0] = true;
|
||||
|
||||
cantAbandon = 1;
|
||||
cantTeamSwitch = 1;
|
||||
|
||||
cameraMaxDist = 20;
|
||||
cameraOffset = 6;
|
||||
cameraLag = 1.5;
|
||||
explosion = LargeGroundVehicleExplosion;
|
||||
explosionDamage = 0.5;
|
||||
explosionRadius = 5.0;
|
||||
|
||||
maxSteeringAngle = 0.3; // 20 deg.
|
||||
|
||||
// Used to test if the station can deploy
|
||||
stationPoints[1] = "-2.3 -7.38703 -0.65";
|
||||
stationPoints[2] = "-2.3 -11.8 -0.65";
|
||||
stationPoints[3] = "0 -7.38703 -0.65";
|
||||
stationPoints[4] = "0 -11.8 -0.65";
|
||||
stationPoints[5] = "2.3 -7.38703 -0.65";
|
||||
stationPoints[6] = "2.3 -11.8 -0.65";
|
||||
|
||||
// Rigid Body
|
||||
mass = 2000;
|
||||
bodyFriction = 0.8;
|
||||
bodyRestitution = 0.5;
|
||||
minRollSpeed = 3;
|
||||
gyroForce = 400;
|
||||
gyroDamping = 0.3;
|
||||
stabilizerForce = 10;
|
||||
minDrag = 10;
|
||||
softImpactSpeed = 15; // Play SoftImpact Sound
|
||||
hardImpactSpeed = 25; // Play HardImpact Sound
|
||||
|
||||
// Ground Impact Damage (uses DamageType::Ground)
|
||||
minImpactSpeed = 12;
|
||||
speedDamageScale = 0.060;
|
||||
|
||||
// Object Impact Damage (uses DamageType::Impact)
|
||||
collDamageThresholdVel = 18;
|
||||
collDamageMultiplier = 0.070;
|
||||
|
||||
// Engine
|
||||
engineTorque = 7.0 * 745;
|
||||
breakTorque = 7.0 * 745;
|
||||
maxWheelSpeed = 20;
|
||||
|
||||
// Springs
|
||||
springForce = 8000;
|
||||
springDamping = 1300;
|
||||
antiSwayForce = 6000;
|
||||
staticLoadScale = 2;
|
||||
|
||||
// Tires
|
||||
tireRadius = 1.6;
|
||||
tireFriction = 10.0;
|
||||
tireRestitution = 0.5;
|
||||
tireLateralForce = 3000;
|
||||
tireLateralDamping = 400;
|
||||
tireLateralRelaxation = 1;
|
||||
tireLongitudinalForce = 12000;
|
||||
tireLongitudinalDamping = 600;
|
||||
tireLongitudinalRelaxation = 1;
|
||||
tireEmitter = TireEmitter;
|
||||
|
||||
//
|
||||
maxDamage = 3.85;
|
||||
destroyedLevel = 3.85;
|
||||
|
||||
isShielded = true;
|
||||
energyPerDamagePoint = 125;
|
||||
maxEnergy = 600;
|
||||
jetForce = 4000; // z0dd - ZOD, 4/25/02. Was 2800
|
||||
minJetEnergy = 60;
|
||||
jetEnergyDrain = 2.75;
|
||||
rechargeRate = 1.0;
|
||||
|
||||
jetSound = MPBThrustSound;
|
||||
engineSound = MPBEngineSound;
|
||||
squeelSound = AssaultVehicleSkid;
|
||||
softImpactSound = GravSoftImpactSound;
|
||||
hardImpactSound = HardImpactSound;
|
||||
//wheelImpactSound = WheelImpactSound;
|
||||
|
||||
//
|
||||
softSplashSoundVelocity = 5.0;
|
||||
mediumSplashSoundVelocity = 8.0;
|
||||
hardSplashSoundVelocity = 12.0;
|
||||
exitSplashSoundVelocity = 8.0;
|
||||
|
||||
exitingWater = VehicleExitWaterSoftSound;
|
||||
impactWaterEasy = VehicleImpactWaterSoftSound;
|
||||
impactWaterMedium = VehicleImpactWaterMediumSound;
|
||||
impactWaterHard = VehicleImpactWaterHardSound;
|
||||
waterWakeSound = VehicleWakeMediumSplashSound;
|
||||
|
||||
minMountDist = 3;
|
||||
|
||||
damageEmitter[0] = LightDamageSmoke;
|
||||
damageEmitter[1] = HeavyDamageSmoke;
|
||||
damageEmitter[2] = DamageBubbles;
|
||||
damageEmitterOffset[0] = "3.0 0.5 0.0 ";
|
||||
damageEmitterOffset[1] = "-3.0 0.5 0.0 ";
|
||||
damageLevelTolerance[0] = 0.3;
|
||||
damageLevelTolerance[1] = 0.7;
|
||||
numDmgEmitterAreas = 2;
|
||||
|
||||
splashEmitter[0] = VehicleFoamDropletsEmitter;
|
||||
splashEmitter[1] = VehicleFoamEmitter;
|
||||
|
||||
shieldImpact = VehicleShieldImpact;
|
||||
|
||||
cmdCategory = "Tactical";
|
||||
cmdIcon = CMDGroundMPBIcon;
|
||||
cmdMiniIconName = "commander/MiniIcons/com_mpb_grey";
|
||||
targetNameTag = 'Jericho';
|
||||
targetTypeTag = 'MPB';
|
||||
sensorData = VehiclePulseSensor;
|
||||
sensorRadius = VehiclePulseSensor.detectRadius; // z0dd - ZOD, 4/25/02. Allows sensor to be shown on CC
|
||||
|
||||
checkRadius = 7.5225;
|
||||
|
||||
observeParameters = "1 12 12";
|
||||
|
||||
runningLight[0] = MPBLight1;
|
||||
runningLight[1] = MPBLight2;
|
||||
|
||||
shieldEffectScale = "0.85 1.2 0.7";
|
||||
};
|
||||
|
||||
//**************************************************************
|
||||
// WEAPONS
|
||||
//**************************************************************
|
||||
|
||||
datablock SensorData(MPBTurretMissileSensor)
|
||||
{
|
||||
detects = true;
|
||||
detectsUsingLOS = true;
|
||||
detectsPassiveJammed = false;
|
||||
detectsActiveJammed = false;
|
||||
detectsCloaked = false;
|
||||
detectionPings = true;
|
||||
detectRadius = 200;
|
||||
};
|
||||
|
||||
datablock TurretData(MobileTurretBase)
|
||||
{
|
||||
className = VehicleTurret;
|
||||
catagory = "Turrets";
|
||||
shapeFile = "turret_base_mpb.dts";
|
||||
preload = true;
|
||||
|
||||
mass = 1.0; // Not really relevant
|
||||
|
||||
maxDamage = MobileBaseVehicle.maxDamage;
|
||||
destroyedLevel = MobileBaseVehicle.destroyedLevel;
|
||||
|
||||
thetaMin = 15;
|
||||
thetaMax = 140;
|
||||
|
||||
energyPerDamagePoint = 33;
|
||||
inheritEnergyFromMount = true;
|
||||
firstPersonOnly = true;
|
||||
|
||||
sensorColor = "0 212 45";
|
||||
sensorData = MPBTurretMissileSensor;
|
||||
sensorRadius = MPBTurretMissileSensor.detectRadius;
|
||||
cmdCategory = "Tactical";
|
||||
cmdMiniIconName = "commander/MiniIcons/com_turret_grey";
|
||||
targetNameTag = 'Jericho';
|
||||
targetTypeTag = 'Turret';
|
||||
|
||||
canControl = true;
|
||||
};
|
||||
|
||||
|
||||
|
||||
//**************************************************************
|
||||
// JERICHO FORWARD BASE (Mobile Point Base)
|
||||
//**************************************************************
|
||||
//**************************************************************
|
||||
// SOUNDS
|
||||
//**************************************************************
|
||||
datablock EffectProfile(MPBEngineEffect)
|
||||
{
|
||||
effectname = "vehicles/mpb_thrust";
|
||||
minDistance = 5.0;
|
||||
maxDistance = 10.0;
|
||||
};
|
||||
|
||||
datablock EffectProfile(MPBThrustEffect)
|
||||
{
|
||||
effectname = "vehicles/mpb_boost";
|
||||
minDistance = 5.0;
|
||||
maxDistance = 10.0;
|
||||
};
|
||||
|
||||
datablock AudioProfile(MPBEngineSound)
|
||||
{
|
||||
filename = "fx/vehicles/mpb_thrust.wav";
|
||||
description = AudioDefaultLooping3d;
|
||||
preload = true;
|
||||
effect = MPBEngineEffect;
|
||||
};
|
||||
|
||||
datablock AudioProfile(MPBThrustSound)
|
||||
{
|
||||
filename = "fx/vehicles/mpb_boost.wav";
|
||||
description = AudioDefaultLooping3d;
|
||||
preload = true;
|
||||
effect = MPBThrustEffect;
|
||||
};
|
||||
|
||||
datablock AudioProfile(MobileBaseDeploySound)
|
||||
{
|
||||
filename = "fx/vehicles/MPB_deploy.wav";
|
||||
description = AudioClose3d;
|
||||
preload = true;
|
||||
};
|
||||
|
||||
datablock AudioProfile(MobileBaseUndeploySound)
|
||||
{
|
||||
filename = "fx/vehicles/MPB_undeploy_turret.wav";
|
||||
description = AudioClose3d;
|
||||
preload = true;
|
||||
};
|
||||
|
||||
datablock AudioProfile(MobileBaseTurretDeploySound)
|
||||
{
|
||||
filename = "fx/vehicles/MPB_deploy_turret.wav";
|
||||
description = AudioClose3d;
|
||||
preload = true;
|
||||
};
|
||||
|
||||
datablock AudioProfile(MobileBaseTurretUndeploySound)
|
||||
{
|
||||
filename = "fx/vehicles/MPB_undeploy_turret.wav";
|
||||
description = AudioClose3d;
|
||||
preload = true;
|
||||
};
|
||||
|
||||
datablock AudioProfile(MobileBaseStationDeploySound)
|
||||
{
|
||||
filename = "fx/vehicles/MPB_deploy_station.wav";
|
||||
description = AudioClose3d;
|
||||
preload = true;
|
||||
};
|
||||
|
||||
datablock AudioProfile(MobileBaseStationUndeploySound)
|
||||
{
|
||||
filename = "fx/vehicles/MPB_close_lid.wav";
|
||||
description = AudioClose3d;
|
||||
preload = true;
|
||||
};
|
||||
|
||||
|
||||
//**************************************************************
|
||||
// LIGHTS
|
||||
//**************************************************************
|
||||
datablock RunningLightData(MPBLight1)
|
||||
{
|
||||
pointSize = 3.0;
|
||||
pointColor = "1.0 1.0 1.0 0.3";
|
||||
pointNodeName = "Headlight_node01";
|
||||
texture = "special/expFlare";
|
||||
};
|
||||
|
||||
datablock RunningLightData(MPBLight2)
|
||||
{
|
||||
pointSize = 3.0;
|
||||
pointColor = "1.0 1.0 1.0 0.3";
|
||||
pointNodeName = "Headlight_node02";
|
||||
texture = "special/expFlare";
|
||||
};
|
||||
|
||||
|
||||
//**************************************************************
|
||||
// VEHICLE CHARACTERISTICS
|
||||
//**************************************************************
|
||||
datablock SensorData(MPBDeployedSensor) : VehiclePulseSensor
|
||||
{
|
||||
jams = true;
|
||||
jamsOnlyGroup = true;
|
||||
jamsUsingLOS = false;
|
||||
jamRadius = 50;
|
||||
};
|
||||
|
||||
datablock WheeledVehicleData(MobileBaseVehicle) : MPBDamageProfile
|
||||
{
|
||||
spawnOffset = "0 0 1.5"; // z0dd - ZOD, 7/10/02. Change height, 3rd value, from 1.0 to 1.5 to prevent it from being dry docked
|
||||
renderWhenDestroyed = false;
|
||||
|
||||
catagory = "Vehicles";
|
||||
shapeFile = "vehicle_land_mpbase.dts";
|
||||
multipassenger = false;
|
||||
computeCRC = true;
|
||||
|
||||
debrisShapeName = "vehicle_land_mpbase_debris.dts";
|
||||
debris = ShapeDebris;
|
||||
|
||||
drag = 0.0;
|
||||
density = 20.0;
|
||||
|
||||
mountPose[0] = sitting;
|
||||
numMountPoints = 1;
|
||||
isProtectedMountPoint[0] = true;
|
||||
|
||||
cantAbandon = 1;
|
||||
cantTeamSwitch = 1;
|
||||
|
||||
cameraMaxDist = 20;
|
||||
cameraOffset = 6;
|
||||
cameraLag = 1.5;
|
||||
explosion = LargeGroundVehicleExplosion;
|
||||
explosionDamage = 0.5;
|
||||
explosionRadius = 5.0;
|
||||
|
||||
maxSteeringAngle = 0.3; // 20 deg.
|
||||
|
||||
// Used to test if the station can deploy
|
||||
stationPoints[1] = "-2.3 -7.38703 -0.65";
|
||||
stationPoints[2] = "-2.3 -11.8 -0.65";
|
||||
stationPoints[3] = "0 -7.38703 -0.65";
|
||||
stationPoints[4] = "0 -11.8 -0.65";
|
||||
stationPoints[5] = "2.3 -7.38703 -0.65";
|
||||
stationPoints[6] = "2.3 -11.8 -0.65";
|
||||
|
||||
// Rigid Body
|
||||
mass = 2000;
|
||||
bodyFriction = 0.8;
|
||||
bodyRestitution = 0.5;
|
||||
minRollSpeed = 3;
|
||||
gyroForce = 400;
|
||||
gyroDamping = 0.3;
|
||||
stabilizerForce = 10;
|
||||
minDrag = 10;
|
||||
softImpactSpeed = 15; // Play SoftImpact Sound
|
||||
hardImpactSpeed = 25; // Play HardImpact Sound
|
||||
|
||||
// Ground Impact Damage (uses DamageType::Ground)
|
||||
minImpactSpeed = 12;
|
||||
speedDamageScale = 0.060;
|
||||
|
||||
// Object Impact Damage (uses DamageType::Impact)
|
||||
collDamageThresholdVel = 18;
|
||||
collDamageMultiplier = 0.070;
|
||||
|
||||
// Engine
|
||||
engineTorque = 7.0 * 745;
|
||||
breakTorque = 7.0 * 745;
|
||||
maxWheelSpeed = 20;
|
||||
|
||||
// Springs
|
||||
springForce = 8000;
|
||||
springDamping = 1300;
|
||||
antiSwayForce = 6000;
|
||||
staticLoadScale = 2;
|
||||
|
||||
// Tires
|
||||
tireRadius = 1.6;
|
||||
tireFriction = 10.0;
|
||||
tireRestitution = 0.5;
|
||||
tireLateralForce = 3000;
|
||||
tireLateralDamping = 400;
|
||||
tireLateralRelaxation = 1;
|
||||
tireLongitudinalForce = 12000;
|
||||
tireLongitudinalDamping = 600;
|
||||
tireLongitudinalRelaxation = 1;
|
||||
tireEmitter = TireEmitter;
|
||||
|
||||
//
|
||||
maxDamage = 3.85;
|
||||
destroyedLevel = 3.85;
|
||||
|
||||
isShielded = true;
|
||||
energyPerDamagePoint = 125;
|
||||
maxEnergy = 600;
|
||||
jetForce = 4000; // z0dd - ZOD, 4/25/02. Was 2800
|
||||
minJetEnergy = 60;
|
||||
jetEnergyDrain = 2.75;
|
||||
rechargeRate = 1.0;
|
||||
|
||||
jetSound = MPBThrustSound;
|
||||
engineSound = MPBEngineSound;
|
||||
squeelSound = AssaultVehicleSkid;
|
||||
softImpactSound = GravSoftImpactSound;
|
||||
hardImpactSound = HardImpactSound;
|
||||
//wheelImpactSound = WheelImpactSound;
|
||||
|
||||
//
|
||||
softSplashSoundVelocity = 5.0;
|
||||
mediumSplashSoundVelocity = 8.0;
|
||||
hardSplashSoundVelocity = 12.0;
|
||||
exitSplashSoundVelocity = 8.0;
|
||||
|
||||
exitingWater = VehicleExitWaterSoftSound;
|
||||
impactWaterEasy = VehicleImpactWaterSoftSound;
|
||||
impactWaterMedium = VehicleImpactWaterMediumSound;
|
||||
impactWaterHard = VehicleImpactWaterHardSound;
|
||||
waterWakeSound = VehicleWakeMediumSplashSound;
|
||||
|
||||
minMountDist = 3;
|
||||
|
||||
damageEmitter[0] = LightDamageSmoke;
|
||||
damageEmitter[1] = HeavyDamageSmoke;
|
||||
damageEmitter[2] = DamageBubbles;
|
||||
damageEmitterOffset[0] = "3.0 0.5 0.0 ";
|
||||
damageEmitterOffset[1] = "-3.0 0.5 0.0 ";
|
||||
damageLevelTolerance[0] = 0.3;
|
||||
damageLevelTolerance[1] = 0.7;
|
||||
numDmgEmitterAreas = 2;
|
||||
|
||||
splashEmitter[0] = VehicleFoamDropletsEmitter;
|
||||
splashEmitter[1] = VehicleFoamEmitter;
|
||||
|
||||
shieldImpact = VehicleShieldImpact;
|
||||
|
||||
cmdCategory = "Tactical";
|
||||
cmdIcon = CMDGroundMPBIcon;
|
||||
cmdMiniIconName = "commander/MiniIcons/com_mpb_grey";
|
||||
targetNameTag = 'Jericho';
|
||||
targetTypeTag = 'MPB';
|
||||
sensorData = VehiclePulseSensor;
|
||||
sensorRadius = VehiclePulseSensor.detectRadius; // z0dd - ZOD, 4/25/02. Allows sensor to be shown on CC
|
||||
|
||||
checkRadius = 7.5225;
|
||||
|
||||
observeParameters = "1 12 12";
|
||||
|
||||
runningLight[0] = MPBLight1;
|
||||
runningLight[1] = MPBLight2;
|
||||
|
||||
shieldEffectScale = "0.85 1.2 0.7";
|
||||
};
|
||||
|
||||
//**************************************************************
|
||||
// WEAPONS
|
||||
//**************************************************************
|
||||
|
||||
datablock SensorData(MPBTurretMissileSensor)
|
||||
{
|
||||
detects = true;
|
||||
detectsUsingLOS = true;
|
||||
detectsPassiveJammed = false;
|
||||
detectsActiveJammed = false;
|
||||
detectsCloaked = false;
|
||||
detectionPings = true;
|
||||
detectRadius = 200;
|
||||
};
|
||||
|
||||
datablock TurretData(MobileTurretBase)
|
||||
{
|
||||
className = VehicleTurret;
|
||||
catagory = "Turrets";
|
||||
shapeFile = "turret_base_mpb.dts";
|
||||
preload = true;
|
||||
|
||||
mass = 1.0; // Not really relevant
|
||||
|
||||
maxDamage = MobileBaseVehicle.maxDamage;
|
||||
destroyedLevel = MobileBaseVehicle.destroyedLevel;
|
||||
|
||||
thetaMin = 15;
|
||||
thetaMax = 140;
|
||||
|
||||
energyPerDamagePoint = 33;
|
||||
inheritEnergyFromMount = true;
|
||||
firstPersonOnly = true;
|
||||
|
||||
sensorColor = "0 212 45";
|
||||
sensorData = MPBTurretMissileSensor;
|
||||
sensorRadius = MPBTurretMissileSensor.detectRadius;
|
||||
cmdCategory = "Tactical";
|
||||
cmdMiniIconName = "commander/MiniIcons/com_turret_grey";
|
||||
targetNameTag = 'Jericho';
|
||||
targetTypeTag = 'Turret';
|
||||
|
||||
canControl = true;
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,341 +1,341 @@
|
|||
//**************************************************************
|
||||
// SHRIKE SCOUT FLIER
|
||||
//**************************************************************
|
||||
//**************************************************************
|
||||
// SOUNDS
|
||||
//**************************************************************
|
||||
datablock EffectProfile(ScoutFlyerThrustEffect)
|
||||
{
|
||||
effectname = "vehicles/shrike_boost";
|
||||
minDistance = 5.0;
|
||||
maxDistance = 10.0;
|
||||
};
|
||||
|
||||
datablock EffectProfile(ScoutFlyerEngineEffect)
|
||||
{
|
||||
effectname = "vehicles/shrike_engine";
|
||||
minDistance = 5.0;
|
||||
maxDistance = 10.0;
|
||||
};
|
||||
|
||||
datablock EffectProfile(ShrikeBlasterFireEffect)
|
||||
{
|
||||
effectname = "vehicles/shrike_blaster";
|
||||
minDistance = 5.0;
|
||||
maxDistance = 10.0;
|
||||
};
|
||||
|
||||
datablock AudioProfile(ScoutFlyerThrustSound)
|
||||
{
|
||||
filename = "fx/vehicles/shrike_boost.wav";
|
||||
description = AudioDefaultLooping3d;
|
||||
preload = true;
|
||||
effect = ScoutFlyerThrustEffect;
|
||||
};
|
||||
|
||||
datablock AudioProfile(ScoutFlyerEngineSound)
|
||||
{
|
||||
filename = "fx/vehicles/shrike_engine.wav";
|
||||
description = AudioDefaultLooping3d;
|
||||
preload = true;
|
||||
};
|
||||
|
||||
datablock AudioProfile(ShrikeBlasterFire)
|
||||
{
|
||||
filename = "fx/vehicles/shrike_blaster.wav";
|
||||
description = AudioDefault3d;
|
||||
preload = true;
|
||||
effect = ScoutFlyerEngineEffect;
|
||||
};
|
||||
|
||||
datablock AudioProfile(ShrikeBlasterProjectile)
|
||||
{
|
||||
filename = "fx/weapons/shrike_blaster_projectile.wav";
|
||||
description = ProjectileLooping3d;
|
||||
preload = true;
|
||||
effect = ShrikeBlasterFireEffect;
|
||||
};
|
||||
|
||||
datablock AudioProfile(ShrikeBlasterDryFireSound)
|
||||
{
|
||||
filename = "fx/weapons/chaingun_dryfire.wav";
|
||||
description = AudioClose3d;
|
||||
preload = true;
|
||||
};
|
||||
|
||||
//**************************************************************
|
||||
// LIGHTS
|
||||
//**************************************************************
|
||||
datablock RunningLightData(ShrikeLight1)
|
||||
{
|
||||
type = 1;
|
||||
radius = 2.0;
|
||||
length = 3.0;
|
||||
color = "1.0 1.0 1.0 1.0";
|
||||
direction = "0.0 1.0 -1.0 ";
|
||||
offset = "0.0 0.0 -0.5";
|
||||
texture = "special/lightcone04";
|
||||
};
|
||||
|
||||
datablock RunningLightData(ShrikeLight2)
|
||||
{
|
||||
radius = 1.5;
|
||||
color = "1.0 1.0 1.0 0.3";
|
||||
direction = "0.0 0.0 -1.0";
|
||||
offset = "0.0 0.8 -1.2";
|
||||
texture = "special/headlight4";
|
||||
};
|
||||
|
||||
//**************************************************************
|
||||
// VEHICLE CHARACTERISTICS
|
||||
//**************************************************************
|
||||
|
||||
datablock FlyingVehicleData(ScoutFlyer) : ShrikeDamageProfile
|
||||
{
|
||||
spawnOffset = "0 0 2";
|
||||
|
||||
catagory = "Vehicles";
|
||||
shapeFile = "vehicle_air_scout.dts";
|
||||
multipassenger = false;
|
||||
computeCRC = true;
|
||||
|
||||
debrisShapeName = "vehicle_air_scout_debris.dts";
|
||||
debris = ShapeDebris;
|
||||
renderWhenDestroyed = false;
|
||||
|
||||
drag = 0.15;
|
||||
density = 1.0;
|
||||
|
||||
mountPose[0] = sitting;
|
||||
numMountPoints = 1;
|
||||
isProtectedMountPoint[0] = true;
|
||||
cameraMaxDist = 15;
|
||||
cameraOffset = 2.5;
|
||||
cameraLag = 0.9;
|
||||
explosion = VehicleExplosion;
|
||||
explosionDamage = 0.5;
|
||||
explosionRadius = 5.0;
|
||||
|
||||
maxDamage = 1.40;
|
||||
destroyedLevel = 1.40;
|
||||
|
||||
isShielded = true;
|
||||
energyPerDamagePoint = 160;
|
||||
maxEnergy = 280; // Afterburner and any energy weapon pool
|
||||
rechargeRate = 0.8;
|
||||
|
||||
minDrag = 30; // Linear Drag (eventually slows you down when not thrusting...constant drag)
|
||||
rotationalDrag = 900; // Anguler Drag (dampens the drift after you stop moving the mouse...also tumble drag)
|
||||
|
||||
maxAutoSpeed = 15; // Autostabilizer kicks in when less than this speed. (meters/second)
|
||||
autoAngularForce = 400; // Angular stabilizer force (this force levels you out when autostabilizer kicks in)
|
||||
autoLinearForce = 300; // Linear stabilzer force (this slows you down when autostabilizer kicks in)
|
||||
autoInputDamping = 0.95; // Dampen control input so you don't` whack out at very slow speeds
|
||||
|
||||
// Maneuvering
|
||||
maxSteeringAngle = 5; // Max radiens you can rotate the wheel. Smaller number is more maneuverable.
|
||||
horizontalSurfaceForce = 6; // Horizontal center "wing" (provides "bite" into the wind for climbing/diving and turning)
|
||||
verticalSurfaceForce = 4; // Vertical center "wing" (controls side slip. lower numbers make MORE slide.)
|
||||
maneuveringForce = 3000; // Horizontal jets (W,S,D,A key thrust)
|
||||
steeringForce = 1200; // Steering jets (force applied when you move the mouse)
|
||||
steeringRollForce = 400; // Steering jets (how much you heel over when you turn)
|
||||
rollForce = 4; // Auto-roll (self-correction to right you after you roll/invert)
|
||||
hoverHeight = 5; // Height off the ground at rest
|
||||
createHoverHeight = 3; // Height off the ground when created
|
||||
maxForwardSpeed = 100; // speed in which forward thrust force is no longer applied (meters/second)
|
||||
|
||||
// Turbo Jet
|
||||
jetForce = 2000; // Afterburner thrust (this is in addition to normal thrust)
|
||||
minJetEnergy = 28; // Afterburner can't be used if below this threshhold.
|
||||
jetEnergyDrain = 2.8; // Energy use of the afterburners (low number is less drain...can be fractional) // Auto stabilize speed
|
||||
vertThrustMultiple = 4.0; // z0dd - ZOD, 9/8/02. Was 3.0
|
||||
|
||||
// Rigid body
|
||||
mass = 150; // Mass of the vehicle
|
||||
bodyFriction = 0; // Don't mess with this.
|
||||
bodyRestitution = 0.5; // When you hit the ground, how much you rebound. (between 0 and 1)
|
||||
minRollSpeed = 0; // Don't mess with this.
|
||||
softImpactSpeed = 14; // Sound hooks. This is the soft hit.
|
||||
hardImpactSpeed = 25; // Sound hooks. This is the hard hit.
|
||||
|
||||
// Ground Impact Damage (uses DamageType::Ground)
|
||||
minImpactSpeed = 10; // If hit ground at speed above this then it's an impact. Meters/second
|
||||
speedDamageScale = 0.06;
|
||||
|
||||
// Object Impact Damage (uses DamageType::Impact)
|
||||
collDamageThresholdVel = 23.0;
|
||||
collDamageMultiplier = 0.02;
|
||||
|
||||
//
|
||||
minTrailSpeed = 15; // The speed your contrail shows up at.
|
||||
trailEmitter = ContrailEmitter;
|
||||
forwardJetEmitter = FlyerJetEmitter;
|
||||
downJetEmitter = FlyerJetEmitter;
|
||||
|
||||
//
|
||||
jetSound = ScoutFlyerThrustSound;
|
||||
engineSound = ScoutFlyerEngineSound;
|
||||
softImpactSound = SoftImpactSound;
|
||||
hardImpactSound = HardImpactSound;
|
||||
//wheelImpactSound = WheelImpactSound;
|
||||
|
||||
//
|
||||
softSplashSoundVelocity = 10.0;
|
||||
mediumSplashSoundVelocity = 15.0;
|
||||
hardSplashSoundVelocity = 20.0;
|
||||
exitSplashSoundVelocity = 10.0;
|
||||
|
||||
exitingWater = VehicleExitWaterMediumSound;
|
||||
impactWaterEasy = VehicleImpactWaterSoftSound;
|
||||
impactWaterMedium = VehicleImpactWaterMediumSound;
|
||||
impactWaterHard = VehicleImpactWaterMediumSound;
|
||||
waterWakeSound = VehicleWakeMediumSplashSound;
|
||||
|
||||
dustEmitter = VehicleLiftoffDustEmitter;
|
||||
triggerDustHeight = 4.0;
|
||||
dustHeight = 1.0;
|
||||
|
||||
damageEmitter[0] = LightDamageSmoke;
|
||||
damageEmitter[1] = HeavyDamageSmoke;
|
||||
damageEmitter[2] = DamageBubbles;
|
||||
damageEmitterOffset[0] = "0.0 -3.0 0.0 ";
|
||||
damageLevelTolerance[0] = 0.3;
|
||||
damageLevelTolerance[1] = 0.7;
|
||||
numDmgEmitterAreas = 1;
|
||||
|
||||
//
|
||||
max[chaingunAmmo] = 1000;
|
||||
|
||||
minMountDist = 4;
|
||||
|
||||
splashEmitter[0] = VehicleFoamDropletsEmitter;
|
||||
splashEmitter[1] = VehicleFoamEmitter;
|
||||
|
||||
shieldImpact = VehicleShieldImpact;
|
||||
|
||||
cmdCategory = "Tactical";
|
||||
cmdIcon = CMDFlyingScoutIcon;
|
||||
cmdMiniIconName = "commander/MiniIcons/com_scout_grey";
|
||||
targetNameTag = 'Shrike';
|
||||
targetTypeTag = 'Turbograv';
|
||||
sensorData = AWACPulseSensor;
|
||||
sensorRadius = AWACPulseSensor.detectRadius;
|
||||
sensorColor = "255 194 9";
|
||||
|
||||
checkRadius = 5.5;
|
||||
observeParameters = "1 10 10";
|
||||
|
||||
runningLight[0] = ShrikeLight1;
|
||||
// runningLight[1] = ShrikeLight2;
|
||||
|
||||
shieldEffectScale = "0.937 1.125 0.60";
|
||||
|
||||
};
|
||||
|
||||
//**************************************************************
|
||||
// WEAPONS
|
||||
//**************************************************************
|
||||
|
||||
datablock ShapeBaseImageData(ScoutChaingunPairImage)
|
||||
{
|
||||
className = WeaponImage;
|
||||
shapeFile = "weapon_energy_vehicle.dts";
|
||||
item = Chaingun;
|
||||
ammo = ChaingunAmmo;
|
||||
projectile = ScoutChaingunBullet;
|
||||
projectileType = TracerProjectile;
|
||||
mountPoint = 10;
|
||||
//**original** offset = ".73 0 0";
|
||||
offset = "1.93 -0.52 0.044";
|
||||
|
||||
projectileSpread = 1.0 / 1000.0;
|
||||
|
||||
usesEnergy = true;
|
||||
useMountEnergy = true;
|
||||
// DAVEG -- balancing numbers below!
|
||||
minEnergy = 5;
|
||||
fireEnergy = 5;
|
||||
fireTimeout = 125;
|
||||
|
||||
|
||||
//--------------------------------------
|
||||
stateName[0] = "Activate";
|
||||
stateSequence[0] = "Activate";
|
||||
stateAllowImageChange[0] = false;
|
||||
stateTimeoutValue[0] = 0.05;
|
||||
stateTransitionOnTimeout[0] = "Ready";
|
||||
stateTransitionOnNoAmmo[0] = "NoAmmo";
|
||||
//--------------------------------------
|
||||
stateName[1] = "Ready";
|
||||
stateSpinThread[1] = Stop;
|
||||
stateTransitionOnTriggerDown[1] = "Spinup";
|
||||
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
||||
//--------------------------------------
|
||||
stateName[2] = "NoAmmo";
|
||||
stateTransitionOnAmmo[2] = "Ready";
|
||||
stateSpinThread[2] = Stop;
|
||||
stateTransitionOnTriggerDown[2] = "DryFire";
|
||||
//--------------------------------------
|
||||
stateName[3] = "Spinup";
|
||||
stateSpinThread[3] = SpinUp;
|
||||
stateTimeoutValue[3] = 0.01;
|
||||
stateWaitForTimeout[3] = false;
|
||||
stateTransitionOnTimeout[3] = "Fire";
|
||||
stateTransitionOnTriggerUp[3] = "Spindown";
|
||||
//--------------------------------------
|
||||
stateName[4] = "Fire";
|
||||
stateSpinThread[4] = FullSpeed;
|
||||
stateRecoil[4] = LightRecoil;
|
||||
stateAllowImageChange[4] = false;
|
||||
stateScript[4] = "onFire";
|
||||
stateFire[4] = true;
|
||||
stateSound[4] = ShrikeBlasterFire;
|
||||
// IMPORTANT! The stateTimeoutValue below has been replaced by fireTimeOut
|
||||
// above.
|
||||
stateTimeoutValue[4] = 0.25;
|
||||
stateTransitionOnTimeout[4] = "checkState";
|
||||
//--------------------------------------
|
||||
stateName[5] = "Spindown";
|
||||
stateSpinThread[5] = SpinDown;
|
||||
stateTimeoutValue[5] = 0.01;
|
||||
stateWaitForTimeout[5] = false;
|
||||
stateTransitionOnTimeout[5] = "Ready";
|
||||
stateTransitionOnTriggerDown[5] = "Spinup";
|
||||
//--------------------------------------
|
||||
stateName[6] = "EmptySpindown";
|
||||
// stateSound[6] = ChaingunSpindownSound;
|
||||
stateSpinThread[6] = SpinDown;
|
||||
stateTransitionOnAmmo[6] = "Ready";
|
||||
stateTimeoutValue[6] = 0.01;
|
||||
stateTransitionOnTimeout[6] = "NoAmmo";
|
||||
//--------------------------------------
|
||||
stateName[7] = "DryFire";
|
||||
stateSound[7] = ShrikeBlasterDryFireSound;
|
||||
stateTransitionOnTriggerUp[7] = "NoAmmo";
|
||||
stateTimeoutValue[7] = 0.25;
|
||||
stateTransitionOnTimeout[7] = "NoAmmo";
|
||||
|
||||
stateName[8] = "checkState";
|
||||
stateTransitionOnTriggerUp[8] = "Spindown";
|
||||
stateTransitionOnNoAmmo[8] = "EmptySpindown";
|
||||
stateTimeoutValue[8] = 0.01;
|
||||
stateTransitionOnTimeout[8] = "ready";
|
||||
};
|
||||
|
||||
datablock ShapeBaseImageData(ScoutChaingunImage) : ScoutChaingunPairImage
|
||||
{
|
||||
//**original** offset = "-.73 0 0";
|
||||
offset = "-1.93 -0.52 0.044";
|
||||
stateScript[3] = "onTriggerDown";
|
||||
stateScript[5] = "onTriggerUp";
|
||||
stateScript[6] = "onTriggerUp";
|
||||
};
|
||||
|
||||
datablock ShapeBaseImageData(ScoutChaingunParam)
|
||||
{
|
||||
mountPoint = 2;
|
||||
shapeFile = "turret_muzzlepoint.dts";
|
||||
|
||||
projectile = ScoutChaingunBullet;
|
||||
projectileType = TracerProjectile;
|
||||
//**************************************************************
|
||||
// SHRIKE SCOUT FLIER
|
||||
//**************************************************************
|
||||
//**************************************************************
|
||||
// SOUNDS
|
||||
//**************************************************************
|
||||
datablock EffectProfile(ScoutFlyerThrustEffect)
|
||||
{
|
||||
effectname = "vehicles/shrike_boost";
|
||||
minDistance = 5.0;
|
||||
maxDistance = 10.0;
|
||||
};
|
||||
|
||||
datablock EffectProfile(ScoutFlyerEngineEffect)
|
||||
{
|
||||
effectname = "vehicles/shrike_engine";
|
||||
minDistance = 5.0;
|
||||
maxDistance = 10.0;
|
||||
};
|
||||
|
||||
datablock EffectProfile(ShrikeBlasterFireEffect)
|
||||
{
|
||||
effectname = "vehicles/shrike_blaster";
|
||||
minDistance = 5.0;
|
||||
maxDistance = 10.0;
|
||||
};
|
||||
|
||||
datablock AudioProfile(ScoutFlyerThrustSound)
|
||||
{
|
||||
filename = "fx/vehicles/shrike_boost.wav";
|
||||
description = AudioDefaultLooping3d;
|
||||
preload = true;
|
||||
effect = ScoutFlyerThrustEffect;
|
||||
};
|
||||
|
||||
datablock AudioProfile(ScoutFlyerEngineSound)
|
||||
{
|
||||
filename = "fx/vehicles/shrike_engine.wav";
|
||||
description = AudioDefaultLooping3d;
|
||||
preload = true;
|
||||
};
|
||||
|
||||
datablock AudioProfile(ShrikeBlasterFire)
|
||||
{
|
||||
filename = "fx/vehicles/shrike_blaster.wav";
|
||||
description = AudioDefault3d;
|
||||
preload = true;
|
||||
effect = ScoutFlyerEngineEffect;
|
||||
};
|
||||
|
||||
datablock AudioProfile(ShrikeBlasterProjectile)
|
||||
{
|
||||
filename = "fx/weapons/shrike_blaster_projectile.wav";
|
||||
description = ProjectileLooping3d;
|
||||
preload = true;
|
||||
effect = ShrikeBlasterFireEffect;
|
||||
};
|
||||
|
||||
datablock AudioProfile(ShrikeBlasterDryFireSound)
|
||||
{
|
||||
filename = "fx/weapons/chaingun_dryfire.wav";
|
||||
description = AudioClose3d;
|
||||
preload = true;
|
||||
};
|
||||
|
||||
//**************************************************************
|
||||
// LIGHTS
|
||||
//**************************************************************
|
||||
datablock RunningLightData(ShrikeLight1)
|
||||
{
|
||||
type = 1;
|
||||
radius = 2.0;
|
||||
length = 3.0;
|
||||
color = "1.0 1.0 1.0 1.0";
|
||||
direction = "0.0 1.0 -1.0 ";
|
||||
offset = "0.0 0.0 -0.5";
|
||||
texture = "special/lightcone04";
|
||||
};
|
||||
|
||||
datablock RunningLightData(ShrikeLight2)
|
||||
{
|
||||
radius = 1.5;
|
||||
color = "1.0 1.0 1.0 0.3";
|
||||
direction = "0.0 0.0 -1.0";
|
||||
offset = "0.0 0.8 -1.2";
|
||||
texture = "special/headlight4";
|
||||
};
|
||||
|
||||
//**************************************************************
|
||||
// VEHICLE CHARACTERISTICS
|
||||
//**************************************************************
|
||||
|
||||
datablock FlyingVehicleData(ScoutFlyer) : ShrikeDamageProfile
|
||||
{
|
||||
spawnOffset = "0 0 2";
|
||||
|
||||
catagory = "Vehicles";
|
||||
shapeFile = "vehicle_air_scout.dts";
|
||||
multipassenger = false;
|
||||
computeCRC = true;
|
||||
|
||||
debrisShapeName = "vehicle_air_scout_debris.dts";
|
||||
debris = ShapeDebris;
|
||||
renderWhenDestroyed = false;
|
||||
|
||||
drag = 0.15;
|
||||
density = 1.0;
|
||||
|
||||
mountPose[0] = sitting;
|
||||
numMountPoints = 1;
|
||||
isProtectedMountPoint[0] = true;
|
||||
cameraMaxDist = 15;
|
||||
cameraOffset = 2.5;
|
||||
cameraLag = 0.9;
|
||||
explosion = VehicleExplosion;
|
||||
explosionDamage = 0.5;
|
||||
explosionRadius = 5.0;
|
||||
|
||||
maxDamage = 1.40;
|
||||
destroyedLevel = 1.40;
|
||||
|
||||
isShielded = true;
|
||||
energyPerDamagePoint = 160;
|
||||
maxEnergy = 280; // Afterburner and any energy weapon pool
|
||||
rechargeRate = 0.8;
|
||||
|
||||
minDrag = 30; // Linear Drag (eventually slows you down when not thrusting...constant drag)
|
||||
rotationalDrag = 900; // Anguler Drag (dampens the drift after you stop moving the mouse...also tumble drag)
|
||||
|
||||
maxAutoSpeed = 15; // Autostabilizer kicks in when less than this speed. (meters/second)
|
||||
autoAngularForce = 400; // Angular stabilizer force (this force levels you out when autostabilizer kicks in)
|
||||
autoLinearForce = 300; // Linear stabilzer force (this slows you down when autostabilizer kicks in)
|
||||
autoInputDamping = 0.95; // Dampen control input so you don't` whack out at very slow speeds
|
||||
|
||||
// Maneuvering
|
||||
maxSteeringAngle = 5; // Max radiens you can rotate the wheel. Smaller number is more maneuverable.
|
||||
horizontalSurfaceForce = 6; // Horizontal center "wing" (provides "bite" into the wind for climbing/diving and turning)
|
||||
verticalSurfaceForce = 4; // Vertical center "wing" (controls side slip. lower numbers make MORE slide.)
|
||||
maneuveringForce = 3000; // Horizontal jets (W,S,D,A key thrust)
|
||||
steeringForce = 1200; // Steering jets (force applied when you move the mouse)
|
||||
steeringRollForce = 400; // Steering jets (how much you heel over when you turn)
|
||||
rollForce = 4; // Auto-roll (self-correction to right you after you roll/invert)
|
||||
hoverHeight = 5; // Height off the ground at rest
|
||||
createHoverHeight = 3; // Height off the ground when created
|
||||
maxForwardSpeed = 100; // speed in which forward thrust force is no longer applied (meters/second)
|
||||
|
||||
// Turbo Jet
|
||||
jetForce = 2000; // Afterburner thrust (this is in addition to normal thrust)
|
||||
minJetEnergy = 28; // Afterburner can't be used if below this threshhold.
|
||||
jetEnergyDrain = 2.8; // Energy use of the afterburners (low number is less drain...can be fractional) // Auto stabilize speed
|
||||
vertThrustMultiple = 4.0; // z0dd - ZOD, 9/8/02. Was 3.0
|
||||
|
||||
// Rigid body
|
||||
mass = 150; // Mass of the vehicle
|
||||
bodyFriction = 0; // Don't mess with this.
|
||||
bodyRestitution = 0.5; // When you hit the ground, how much you rebound. (between 0 and 1)
|
||||
minRollSpeed = 0; // Don't mess with this.
|
||||
softImpactSpeed = 14; // Sound hooks. This is the soft hit.
|
||||
hardImpactSpeed = 25; // Sound hooks. This is the hard hit.
|
||||
|
||||
// Ground Impact Damage (uses DamageType::Ground)
|
||||
minImpactSpeed = 10; // If hit ground at speed above this then it's an impact. Meters/second
|
||||
speedDamageScale = 0.06;
|
||||
|
||||
// Object Impact Damage (uses DamageType::Impact)
|
||||
collDamageThresholdVel = 23.0;
|
||||
collDamageMultiplier = 0.02;
|
||||
|
||||
//
|
||||
minTrailSpeed = 15; // The speed your contrail shows up at.
|
||||
trailEmitter = ContrailEmitter;
|
||||
forwardJetEmitter = FlyerJetEmitter;
|
||||
downJetEmitter = FlyerJetEmitter;
|
||||
|
||||
//
|
||||
jetSound = ScoutFlyerThrustSound;
|
||||
engineSound = ScoutFlyerEngineSound;
|
||||
softImpactSound = SoftImpactSound;
|
||||
hardImpactSound = HardImpactSound;
|
||||
//wheelImpactSound = WheelImpactSound;
|
||||
|
||||
//
|
||||
softSplashSoundVelocity = 10.0;
|
||||
mediumSplashSoundVelocity = 15.0;
|
||||
hardSplashSoundVelocity = 20.0;
|
||||
exitSplashSoundVelocity = 10.0;
|
||||
|
||||
exitingWater = VehicleExitWaterMediumSound;
|
||||
impactWaterEasy = VehicleImpactWaterSoftSound;
|
||||
impactWaterMedium = VehicleImpactWaterMediumSound;
|
||||
impactWaterHard = VehicleImpactWaterMediumSound;
|
||||
waterWakeSound = VehicleWakeMediumSplashSound;
|
||||
|
||||
dustEmitter = VehicleLiftoffDustEmitter;
|
||||
triggerDustHeight = 4.0;
|
||||
dustHeight = 1.0;
|
||||
|
||||
damageEmitter[0] = LightDamageSmoke;
|
||||
damageEmitter[1] = HeavyDamageSmoke;
|
||||
damageEmitter[2] = DamageBubbles;
|
||||
damageEmitterOffset[0] = "0.0 -3.0 0.0 ";
|
||||
damageLevelTolerance[0] = 0.3;
|
||||
damageLevelTolerance[1] = 0.7;
|
||||
numDmgEmitterAreas = 1;
|
||||
|
||||
//
|
||||
max[chaingunAmmo] = 1000;
|
||||
|
||||
minMountDist = 4;
|
||||
|
||||
splashEmitter[0] = VehicleFoamDropletsEmitter;
|
||||
splashEmitter[1] = VehicleFoamEmitter;
|
||||
|
||||
shieldImpact = VehicleShieldImpact;
|
||||
|
||||
cmdCategory = "Tactical";
|
||||
cmdIcon = CMDFlyingScoutIcon;
|
||||
cmdMiniIconName = "commander/MiniIcons/com_scout_grey";
|
||||
targetNameTag = 'Shrike';
|
||||
targetTypeTag = 'Turbograv';
|
||||
sensorData = AWACPulseSensor;
|
||||
sensorRadius = AWACPulseSensor.detectRadius;
|
||||
sensorColor = "255 194 9";
|
||||
|
||||
checkRadius = 5.5;
|
||||
observeParameters = "1 10 10";
|
||||
|
||||
runningLight[0] = ShrikeLight1;
|
||||
// runningLight[1] = ShrikeLight2;
|
||||
|
||||
shieldEffectScale = "0.937 1.125 0.60";
|
||||
|
||||
};
|
||||
|
||||
//**************************************************************
|
||||
// WEAPONS
|
||||
//**************************************************************
|
||||
|
||||
datablock ShapeBaseImageData(ScoutChaingunPairImage)
|
||||
{
|
||||
className = WeaponImage;
|
||||
shapeFile = "weapon_energy_vehicle.dts";
|
||||
item = Chaingun;
|
||||
ammo = ChaingunAmmo;
|
||||
projectile = ScoutChaingunBullet;
|
||||
projectileType = TracerProjectile;
|
||||
mountPoint = 10;
|
||||
//**original** offset = ".73 0 0";
|
||||
offset = "1.93 -0.52 0.044";
|
||||
|
||||
projectileSpread = 1.0 / 1000.0;
|
||||
|
||||
usesEnergy = true;
|
||||
useMountEnergy = true;
|
||||
// DAVEG -- balancing numbers below!
|
||||
minEnergy = 5;
|
||||
fireEnergy = 5;
|
||||
fireTimeout = 125;
|
||||
|
||||
|
||||
//--------------------------------------
|
||||
stateName[0] = "Activate";
|
||||
stateSequence[0] = "Activate";
|
||||
stateAllowImageChange[0] = false;
|
||||
stateTimeoutValue[0] = 0.05;
|
||||
stateTransitionOnTimeout[0] = "Ready";
|
||||
stateTransitionOnNoAmmo[0] = "NoAmmo";
|
||||
//--------------------------------------
|
||||
stateName[1] = "Ready";
|
||||
stateSpinThread[1] = Stop;
|
||||
stateTransitionOnTriggerDown[1] = "Spinup";
|
||||
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
||||
//--------------------------------------
|
||||
stateName[2] = "NoAmmo";
|
||||
stateTransitionOnAmmo[2] = "Ready";
|
||||
stateSpinThread[2] = Stop;
|
||||
stateTransitionOnTriggerDown[2] = "DryFire";
|
||||
//--------------------------------------
|
||||
stateName[3] = "Spinup";
|
||||
stateSpinThread[3] = SpinUp;
|
||||
stateTimeoutValue[3] = 0.01;
|
||||
stateWaitForTimeout[3] = false;
|
||||
stateTransitionOnTimeout[3] = "Fire";
|
||||
stateTransitionOnTriggerUp[3] = "Spindown";
|
||||
//--------------------------------------
|
||||
stateName[4] = "Fire";
|
||||
stateSpinThread[4] = FullSpeed;
|
||||
stateRecoil[4] = LightRecoil;
|
||||
stateAllowImageChange[4] = false;
|
||||
stateScript[4] = "onFire";
|
||||
stateFire[4] = true;
|
||||
stateSound[4] = ShrikeBlasterFire;
|
||||
// IMPORTANT! The stateTimeoutValue below has been replaced by fireTimeOut
|
||||
// above.
|
||||
stateTimeoutValue[4] = 0.25;
|
||||
stateTransitionOnTimeout[4] = "checkState";
|
||||
//--------------------------------------
|
||||
stateName[5] = "Spindown";
|
||||
stateSpinThread[5] = SpinDown;
|
||||
stateTimeoutValue[5] = 0.01;
|
||||
stateWaitForTimeout[5] = false;
|
||||
stateTransitionOnTimeout[5] = "Ready";
|
||||
stateTransitionOnTriggerDown[5] = "Spinup";
|
||||
//--------------------------------------
|
||||
stateName[6] = "EmptySpindown";
|
||||
// stateSound[6] = ChaingunSpindownSound;
|
||||
stateSpinThread[6] = SpinDown;
|
||||
stateTransitionOnAmmo[6] = "Ready";
|
||||
stateTimeoutValue[6] = 0.01;
|
||||
stateTransitionOnTimeout[6] = "NoAmmo";
|
||||
//--------------------------------------
|
||||
stateName[7] = "DryFire";
|
||||
stateSound[7] = ShrikeBlasterDryFireSound;
|
||||
stateTransitionOnTriggerUp[7] = "NoAmmo";
|
||||
stateTimeoutValue[7] = 0.25;
|
||||
stateTransitionOnTimeout[7] = "NoAmmo";
|
||||
|
||||
stateName[8] = "checkState";
|
||||
stateTransitionOnTriggerUp[8] = "Spindown";
|
||||
stateTransitionOnNoAmmo[8] = "EmptySpindown";
|
||||
stateTimeoutValue[8] = 0.01;
|
||||
stateTransitionOnTimeout[8] = "ready";
|
||||
};
|
||||
|
||||
datablock ShapeBaseImageData(ScoutChaingunImage) : ScoutChaingunPairImage
|
||||
{
|
||||
//**original** offset = "-.73 0 0";
|
||||
offset = "-1.93 -0.52 0.044";
|
||||
stateScript[3] = "onTriggerDown";
|
||||
stateScript[5] = "onTriggerUp";
|
||||
stateScript[6] = "onTriggerUp";
|
||||
};
|
||||
|
||||
datablock ShapeBaseImageData(ScoutChaingunParam)
|
||||
{
|
||||
mountPoint = 2;
|
||||
shapeFile = "turret_muzzlepoint.dts";
|
||||
|
||||
projectile = ScoutChaingunBullet;
|
||||
projectileType = TracerProjectile;
|
||||
};
|
||||
File diff suppressed because it is too large
Load diff
|
|
@ -1,377 +1,377 @@
|
|||
//**************************************************************
|
||||
// WILDCAT GRAV CYCLE
|
||||
//**************************************************************
|
||||
//**************************************************************
|
||||
// SOUNDS
|
||||
//**************************************************************
|
||||
datablock EffectProfile(ScoutEngineEffect)
|
||||
{
|
||||
effectname = "vehicles/outrider_engine";
|
||||
minDistance = 5.0;
|
||||
maxDistance = 10.0;
|
||||
};
|
||||
|
||||
datablock EffectProfile(ScoutThrustEffect)
|
||||
{
|
||||
effectname = "vehicles/outrider_boost";
|
||||
minDistance = 5.0;
|
||||
maxDistance = 10.0;
|
||||
};
|
||||
|
||||
datablock AudioProfile(ScoutSqueelSound)
|
||||
{
|
||||
filename = "fx/vehicles/outrider_skid.wav";
|
||||
description = ClosestLooping3d;
|
||||
preload = true;
|
||||
};
|
||||
|
||||
// Scout
|
||||
datablock AudioProfile(ScoutEngineSound)
|
||||
{
|
||||
filename = "fx/vehicles/outrider_engine.wav";
|
||||
description = AudioDefaultLooping3d;
|
||||
preload = true;
|
||||
effect = ScoutEngineEffect;
|
||||
};
|
||||
|
||||
datablock AudioProfile(ScoutThrustSound)
|
||||
{
|
||||
filename = "fx/vehicles/outrider_boost.wav";
|
||||
description = AudioDefaultLooping3d;
|
||||
preload = true;
|
||||
effect = ScoutThrustEffect;
|
||||
};
|
||||
|
||||
//**************************************************************
|
||||
// LIGHTS
|
||||
//**************************************************************
|
||||
datablock RunningLightData(WildcatLight1)
|
||||
{
|
||||
radius = 1.0;
|
||||
color = "1.0 1.0 1.0 0.3";
|
||||
nodeName = "Headlight_node01";
|
||||
direction = "-1.0 1.0 0.0";
|
||||
texture = "special/headlight4";
|
||||
};
|
||||
|
||||
datablock RunningLightData(WildcatLight2)
|
||||
{
|
||||
radius = 1.0;
|
||||
color = "1.0 1.0 1.0 0.3";
|
||||
nodeName = "Headlight_node02";
|
||||
direction = "1.0 1.0 0.0";
|
||||
texture = "special/headlight4";
|
||||
};
|
||||
|
||||
datablock RunningLightData(WildcatLight3)
|
||||
{
|
||||
type = 2;
|
||||
radius = 100.0;
|
||||
color = "1.0 1.0 1.0 1.0";
|
||||
offset = "0.0 0.0 0.0";
|
||||
direction = "0.0 1.0 0.0";
|
||||
texture = "special/projheadlight";
|
||||
};
|
||||
|
||||
//**************************************************************
|
||||
// VEHICLE CHARACTERISTICS
|
||||
//**************************************************************
|
||||
|
||||
datablock HoverVehicleData(ScoutVehicle) : WildcatDamageProfile
|
||||
{
|
||||
spawnOffset = "0 0 1";
|
||||
|
||||
floatingGravMag = 3.5;
|
||||
|
||||
catagory = "Vehicles";
|
||||
shapeFile = "vehicle_grav_scout.dts";
|
||||
computeCRC = true;
|
||||
|
||||
debrisShapeName = "vehicle_grav_scout_debris.dts";
|
||||
debris = ShapeDebris;
|
||||
renderWhenDestroyed = false;
|
||||
|
||||
drag = 0.0;
|
||||
density = 0.9;
|
||||
|
||||
mountPose[0] = scoutRoot;
|
||||
cameraMaxDist = 5.0;
|
||||
cameraOffset = 0.7;
|
||||
cameraLag = 0.5;
|
||||
numMountPoints = 1;
|
||||
isProtectedMountPoint[0] = true;
|
||||
explosion = VehicleExplosion;
|
||||
explosionDamage = 0.5;
|
||||
explosionRadius = 5.0;
|
||||
|
||||
lightOnly = 1;
|
||||
|
||||
maxDamage = 0.60;
|
||||
destroyedLevel = 0.60;
|
||||
|
||||
isShielded = true;
|
||||
rechargeRate = 0.7;
|
||||
energyPerDamagePoint = 95; // z0dd - ZOD, 3/30/02. Bike shield is less protective. was 75
|
||||
maxEnergy = 150;
|
||||
minJetEnergy = 15;
|
||||
jetEnergyDrain = 1.3;
|
||||
|
||||
// Rigid Body
|
||||
mass = 400;
|
||||
bodyFriction = 0.1;
|
||||
bodyRestitution = 0.5;
|
||||
softImpactSpeed = 20; // Play SoftImpact Sound
|
||||
hardImpactSpeed = 28; // Play HardImpact Sound
|
||||
|
||||
// Ground Impact Damage (uses DamageType::Ground)
|
||||
minImpactSpeed = 29;
|
||||
speedDamageScale = 0.010;
|
||||
|
||||
// Object Impact Damage (uses DamageType::Impact)
|
||||
collDamageThresholdVel = 23;
|
||||
collDamageMultiplier = 0.030;
|
||||
|
||||
dragForce = 25 / 45.0;
|
||||
vertFactor = 0.0;
|
||||
floatingThrustFactor = 0.35;
|
||||
|
||||
mainThrustForce = 35; // z0dd - ZOD, 3/30/02. Bike main thruster more powerful. was 30
|
||||
reverseThrustForce = 10;
|
||||
strafeThrustForce = 8;
|
||||
turboFactor = 1.80; // z0dd - ZOD, 3/30/02. Bike turbo thruster more powerful. was 1.5
|
||||
|
||||
brakingForce = 25;
|
||||
brakingActivationSpeed = 4;
|
||||
|
||||
stabLenMin = 2.25;
|
||||
stabLenMax = 3.75;
|
||||
stabSpringConstant = 30;
|
||||
stabDampingConstant = 16;
|
||||
|
||||
gyroDrag = 16;
|
||||
normalForce = 30;
|
||||
restorativeForce = 20;
|
||||
steeringForce = 30;
|
||||
rollForce = 15;
|
||||
pitchForce = 7;
|
||||
|
||||
dustEmitter = VehicleLiftoffDustEmitter;
|
||||
triggerDustHeight = 2.5;
|
||||
dustHeight = 1.0;
|
||||
dustTrailEmitter = TireEmitter;
|
||||
dustTrailOffset = "0.0 -1.0 0.5";
|
||||
triggerTrailHeight = 3.6;
|
||||
dustTrailFreqMod = 15.0;
|
||||
|
||||
jetSound = ScoutSqueelSound;
|
||||
engineSound = ScoutEngineSound;
|
||||
floatSound = ScoutThrustSound;
|
||||
softImpactSound = GravSoftImpactSound;
|
||||
hardImpactSound = HardImpactSound;
|
||||
//wheelImpactSound = WheelImpactSound;
|
||||
|
||||
//
|
||||
softSplashSoundVelocity = 10.0;
|
||||
mediumSplashSoundVelocity = 20.0;
|
||||
hardSplashSoundVelocity = 30.0;
|
||||
exitSplashSoundVelocity = 10.0;
|
||||
|
||||
exitingWater = VehicleExitWaterSoftSound;
|
||||
impactWaterEasy = VehicleImpactWaterSoftSound;
|
||||
impactWaterMedium = VehicleImpactWaterSoftSound;
|
||||
impactWaterHard = VehicleImpactWaterMediumSound;
|
||||
waterWakeSound = VehicleWakeSoftSplashSound;
|
||||
|
||||
minMountDist = 4;
|
||||
|
||||
damageEmitter[0] = SmallLightDamageSmoke;
|
||||
damageEmitter[1] = SmallHeavyDamageSmoke;
|
||||
damageEmitter[2] = DamageBubbles;
|
||||
damageEmitterOffset[0] = "0.0 -1.5 0.5 ";
|
||||
damageLevelTolerance[0] = 0.3;
|
||||
damageLevelTolerance[1] = 0.7;
|
||||
numDmgEmitterAreas = 1;
|
||||
|
||||
splashEmitter[0] = VehicleFoamDropletsEmitter;
|
||||
splashEmitter[1] = VehicleFoamEmitter;
|
||||
|
||||
shieldImpact = VehicleShieldImpact;
|
||||
|
||||
forwardJetEmitter = WildcatJetEmitter;
|
||||
|
||||
cmdCategory = Tactical;
|
||||
cmdIcon = CMDHoverScoutIcon;
|
||||
cmdMiniIconName = "commander/MiniIcons/com_landscout_grey";
|
||||
targetNameTag = 'WildCat';
|
||||
targetTypeTag = 'Grav Cycle';
|
||||
sensorData = VehiclePulseSensor;
|
||||
sensorRadius = VehiclePulseSensor.detectRadius; // z0dd - ZOD, 3/30/02. Allows sensor to be shown on CC
|
||||
|
||||
checkRadius = 1.7785;
|
||||
observeParameters = "1 10 10";
|
||||
|
||||
runningLight[0] = WildcatLight1;
|
||||
runningLight[1] = WildcatLight2;
|
||||
runningLight[2] = WildcatLight3;
|
||||
|
||||
shieldEffectScale = "0.9375 1.125 0.6";
|
||||
};
|
||||
|
||||
//**************************************************************
|
||||
// WEAPONS: z0dd - ZOD, 5/14/02
|
||||
//**************************************************************
|
||||
|
||||
$DeathMessageCTurretTeamKill[$DamageType::Bullet, 0] = '\c0%4 TEAMKILLED %1 by strafing from a Wildcat.';
|
||||
|
||||
$DeathMessageCTurretKill[$DamageType::Bullet, 0] = '\c0%4 turns %1 into swiss cheese with %6 Wildcat.';
|
||||
$DeathMessageCTurretKill[$DamageType::Bullet, 1] = '\c0The lead from %4\'s Wildcat turns %1 into finely shredded meat.';
|
||||
$DeathMessageCTurretKill[$DamageType::Bullet, 2] = '\c0%4 drills %1 full of holes with %6 Wildcat.';
|
||||
|
||||
datablock EffectProfile(GravChaingunFireEffect)
|
||||
{
|
||||
effectname = "weapons/chaingun_fire";
|
||||
minDistance = 5.0;
|
||||
maxDistance = 10.0;
|
||||
};
|
||||
|
||||
datablock AudioProfile(GravChaingunFireSound)
|
||||
{
|
||||
filename = "fx/vehicles/tank_chaingun.wav";
|
||||
description = AudioDefaultLooping3d;
|
||||
preload = true;
|
||||
effect = GravChaingunFireEffect;
|
||||
};
|
||||
|
||||
datablock AudioProfile(GravChaingunDryFireSound)
|
||||
{
|
||||
filename = "fx/weapons/chaingun_off.wav";
|
||||
description = AudioClose3d;
|
||||
preload = true;
|
||||
};
|
||||
|
||||
datablock AudioProfile(GravChaingunIdleSound)
|
||||
{
|
||||
filename = "fx/misc/diagnostic_on.wav";
|
||||
description = ClosestLooping3d;
|
||||
preload = true;
|
||||
};
|
||||
|
||||
datablock TracerProjectileData(GravBullet) : ChaingunBullet
|
||||
{
|
||||
projectileShapeName = "chaingun_shot.dts";
|
||||
directDamage = 0.135;
|
||||
};
|
||||
|
||||
datablock ShapeBaseImageData(GravChaingunImage)
|
||||
{
|
||||
className = WeaponImage;
|
||||
shapeFile = "weapon_chaingun.dts";
|
||||
item = Chaingun;
|
||||
offset = "-0.1 0.68 +0.26";
|
||||
//rotation = "0 0 0 90";
|
||||
projectile = GravBullet; //ChaingunBullet;
|
||||
projectileType = TracerProjectile;
|
||||
projectileSpread = 18.0 / 1000.0; // 10
|
||||
emap = true;
|
||||
mountPoint = 10;
|
||||
usesEnergy = true;
|
||||
useMountEnergy = true;
|
||||
// DAVEG -- balancing numbers below!
|
||||
minEnergy = 8;
|
||||
fireEnergy = 1.55;
|
||||
|
||||
stateName[0] = "Activate";
|
||||
stateSequence[0] = "Activate";
|
||||
stateSound[0] = GravChaingunIdleSound;
|
||||
stateAllowImageChange[0] = false;
|
||||
stateTimeoutValue[0] = 0.1;
|
||||
stateTransitionOnTimeout[0] = "Ready";
|
||||
stateTransitionOnNoAmmo[0] = "NoAmmo";
|
||||
|
||||
stateName[1] = "Ready";
|
||||
stateSpinThread[1] = Stop;
|
||||
stateTransitionOnTriggerDown[1] = "Spinup";
|
||||
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
||||
|
||||
stateName[2] = "NoAmmo";
|
||||
stateTransitionOnAmmo[2] = "Ready";
|
||||
stateSpinThread[2] = Stop;
|
||||
stateTransitionOnTriggerDown[2] = "DryFire";
|
||||
|
||||
stateName[3] = "Spinup";
|
||||
stateSpinThread[3] = SpinUp;
|
||||
//stateSound[3] = ChaingunSpinupSound;
|
||||
stateTimeoutValue[3] = 0.05;
|
||||
stateWaitForTimeout[3] = false;
|
||||
stateTransitionOnTimeout[3] = "Fire";
|
||||
stateTransitionOnTriggerUp[3] = "Spindown";
|
||||
|
||||
stateName[4] = "Fire";
|
||||
stateSequence[4] = "Fire";
|
||||
stateSequenceRandomFlash[4] = true;
|
||||
stateSpinThread[4] = FullSpeed;
|
||||
stateSound[4] = GravChaingunFireSound;
|
||||
//stateRecoil[4] = LightRecoil;
|
||||
stateAllowImageChange[4] = false;
|
||||
stateScript[4] = "onFire";
|
||||
stateFire[4] = true;
|
||||
stateEjectShell[4] = true;
|
||||
stateTimeoutValue[4] = 0.1;
|
||||
stateTransitionOnTimeout[4] = "Fire";
|
||||
stateTransitionOnTriggerUp[4] = "Spindown";
|
||||
stateTransitionOnNoAmmo[4] = "EmptySpindown";
|
||||
|
||||
stateName[5] = "Spindown";
|
||||
//stateSound[5] = ChaingunSpinDownSound;
|
||||
stateSpinThread[5] = SpinDown;
|
||||
stateTimeoutValue[5] = 0.05;
|
||||
stateWaitForTimeout[5] = true;
|
||||
stateTransitionOnTimeout[5] = "Ready";
|
||||
stateTransitionOnTriggerDown[5] = "Spinup";
|
||||
|
||||
stateName[6] = "EmptySpindown";
|
||||
//stateSound[6] = ChaingunSpinDownSound;
|
||||
stateSpinThread[6] = SpinDown;
|
||||
stateTimeoutValue[6] = 0.5;
|
||||
stateTransitionOnTimeout[6] = "NoAmmo";
|
||||
|
||||
stateName[7] = "DryFire";
|
||||
stateSound[7] = GravChaingunDryFireSound;
|
||||
stateTimeoutValue[7] = 1.0;
|
||||
stateTransitionOnTimeout[7] = "NoAmmo";
|
||||
};
|
||||
|
||||
package wildcat
|
||||
{
|
||||
function ScoutVehicle::onAdd(%this, %obj)
|
||||
{
|
||||
Parent::onAdd(%this, %obj);
|
||||
%obj.mountImage(GravChaingunImage, 0);
|
||||
%obj.setImageTrigger(0, false);
|
||||
%obj.schedule(5500, "playThread", $ActivateThread, "activate");
|
||||
}
|
||||
|
||||
function ScoutVehicle::playerMounted(%data, %obj, %player, %node)
|
||||
{
|
||||
// scout vehicle == SUV (single-user vehicle)
|
||||
commandToClient(%player.client, 'setHudMode', 'Pilot', "Hoverbike", %node);
|
||||
|
||||
// z0dd - ZOD, 5/14/02. Create a weapon hud and reticle
|
||||
commandToClient(%player.client, 'ShowVehicleWeapons', "Hoverbike");
|
||||
|
||||
// update observers who are following this guy...
|
||||
if( %player.client.observeCount > 0 )
|
||||
resetObserveFollow( %player.client, false );
|
||||
}
|
||||
|
||||
function ScoutVehicle::playerDismounted(%data, %obj, %player)
|
||||
{
|
||||
%obj.setImageTrigger(0, false);
|
||||
setTargetSensorGroup(%obj.getTarget(), %obj.team);
|
||||
if( %player.client.observeCount > 0 )
|
||||
resetObserveFollow( %player.client, true );
|
||||
}
|
||||
};
|
||||
|
||||
activatePackage(wildcat);
|
||||
|
||||
//**************************************************************
|
||||
// WILDCAT GRAV CYCLE
|
||||
//**************************************************************
|
||||
//**************************************************************
|
||||
// SOUNDS
|
||||
//**************************************************************
|
||||
datablock EffectProfile(ScoutEngineEffect)
|
||||
{
|
||||
effectname = "vehicles/outrider_engine";
|
||||
minDistance = 5.0;
|
||||
maxDistance = 10.0;
|
||||
};
|
||||
|
||||
datablock EffectProfile(ScoutThrustEffect)
|
||||
{
|
||||
effectname = "vehicles/outrider_boost";
|
||||
minDistance = 5.0;
|
||||
maxDistance = 10.0;
|
||||
};
|
||||
|
||||
datablock AudioProfile(ScoutSqueelSound)
|
||||
{
|
||||
filename = "fx/vehicles/outrider_skid.wav";
|
||||
description = ClosestLooping3d;
|
||||
preload = true;
|
||||
};
|
||||
|
||||
// Scout
|
||||
datablock AudioProfile(ScoutEngineSound)
|
||||
{
|
||||
filename = "fx/vehicles/outrider_engine.wav";
|
||||
description = AudioDefaultLooping3d;
|
||||
preload = true;
|
||||
effect = ScoutEngineEffect;
|
||||
};
|
||||
|
||||
datablock AudioProfile(ScoutThrustSound)
|
||||
{
|
||||
filename = "fx/vehicles/outrider_boost.wav";
|
||||
description = AudioDefaultLooping3d;
|
||||
preload = true;
|
||||
effect = ScoutThrustEffect;
|
||||
};
|
||||
|
||||
//**************************************************************
|
||||
// LIGHTS
|
||||
//**************************************************************
|
||||
datablock RunningLightData(WildcatLight1)
|
||||
{
|
||||
radius = 1.0;
|
||||
color = "1.0 1.0 1.0 0.3";
|
||||
nodeName = "Headlight_node01";
|
||||
direction = "-1.0 1.0 0.0";
|
||||
texture = "special/headlight4";
|
||||
};
|
||||
|
||||
datablock RunningLightData(WildcatLight2)
|
||||
{
|
||||
radius = 1.0;
|
||||
color = "1.0 1.0 1.0 0.3";
|
||||
nodeName = "Headlight_node02";
|
||||
direction = "1.0 1.0 0.0";
|
||||
texture = "special/headlight4";
|
||||
};
|
||||
|
||||
datablock RunningLightData(WildcatLight3)
|
||||
{
|
||||
type = 2;
|
||||
radius = 100.0;
|
||||
color = "1.0 1.0 1.0 1.0";
|
||||
offset = "0.0 0.0 0.0";
|
||||
direction = "0.0 1.0 0.0";
|
||||
texture = "special/projheadlight";
|
||||
};
|
||||
|
||||
//**************************************************************
|
||||
// VEHICLE CHARACTERISTICS
|
||||
//**************************************************************
|
||||
|
||||
datablock HoverVehicleData(ScoutVehicle) : WildcatDamageProfile
|
||||
{
|
||||
spawnOffset = "0 0 1";
|
||||
|
||||
floatingGravMag = 3.5;
|
||||
|
||||
catagory = "Vehicles";
|
||||
shapeFile = "vehicle_grav_scout.dts";
|
||||
computeCRC = true;
|
||||
|
||||
debrisShapeName = "vehicle_grav_scout_debris.dts";
|
||||
debris = ShapeDebris;
|
||||
renderWhenDestroyed = false;
|
||||
|
||||
drag = 0.0;
|
||||
density = 0.9;
|
||||
|
||||
mountPose[0] = scoutRoot;
|
||||
cameraMaxDist = 5.0;
|
||||
cameraOffset = 0.7;
|
||||
cameraLag = 0.5;
|
||||
numMountPoints = 1;
|
||||
isProtectedMountPoint[0] = true;
|
||||
explosion = VehicleExplosion;
|
||||
explosionDamage = 0.5;
|
||||
explosionRadius = 5.0;
|
||||
|
||||
lightOnly = 1;
|
||||
|
||||
maxDamage = 0.60;
|
||||
destroyedLevel = 0.60;
|
||||
|
||||
isShielded = true;
|
||||
rechargeRate = 0.7;
|
||||
energyPerDamagePoint = 95; // z0dd - ZOD, 3/30/02. Bike shield is less protective. was 75
|
||||
maxEnergy = 150;
|
||||
minJetEnergy = 15;
|
||||
jetEnergyDrain = 1.3;
|
||||
|
||||
// Rigid Body
|
||||
mass = 400;
|
||||
bodyFriction = 0.1;
|
||||
bodyRestitution = 0.5;
|
||||
softImpactSpeed = 20; // Play SoftImpact Sound
|
||||
hardImpactSpeed = 28; // Play HardImpact Sound
|
||||
|
||||
// Ground Impact Damage (uses DamageType::Ground)
|
||||
minImpactSpeed = 29;
|
||||
speedDamageScale = 0.010;
|
||||
|
||||
// Object Impact Damage (uses DamageType::Impact)
|
||||
collDamageThresholdVel = 23;
|
||||
collDamageMultiplier = 0.030;
|
||||
|
||||
dragForce = 25 / 45.0;
|
||||
vertFactor = 0.0;
|
||||
floatingThrustFactor = 0.35;
|
||||
|
||||
mainThrustForce = 35; // z0dd - ZOD, 3/30/02. Bike main thruster more powerful. was 30
|
||||
reverseThrustForce = 10;
|
||||
strafeThrustForce = 8;
|
||||
turboFactor = 1.80; // z0dd - ZOD, 3/30/02. Bike turbo thruster more powerful. was 1.5
|
||||
|
||||
brakingForce = 25;
|
||||
brakingActivationSpeed = 4;
|
||||
|
||||
stabLenMin = 2.25;
|
||||
stabLenMax = 3.75;
|
||||
stabSpringConstant = 30;
|
||||
stabDampingConstant = 16;
|
||||
|
||||
gyroDrag = 16;
|
||||
normalForce = 30;
|
||||
restorativeForce = 20;
|
||||
steeringForce = 30;
|
||||
rollForce = 15;
|
||||
pitchForce = 7;
|
||||
|
||||
dustEmitter = VehicleLiftoffDustEmitter;
|
||||
triggerDustHeight = 2.5;
|
||||
dustHeight = 1.0;
|
||||
dustTrailEmitter = TireEmitter;
|
||||
dustTrailOffset = "0.0 -1.0 0.5";
|
||||
triggerTrailHeight = 3.6;
|
||||
dustTrailFreqMod = 15.0;
|
||||
|
||||
jetSound = ScoutSqueelSound;
|
||||
engineSound = ScoutEngineSound;
|
||||
floatSound = ScoutThrustSound;
|
||||
softImpactSound = GravSoftImpactSound;
|
||||
hardImpactSound = HardImpactSound;
|
||||
//wheelImpactSound = WheelImpactSound;
|
||||
|
||||
//
|
||||
softSplashSoundVelocity = 10.0;
|
||||
mediumSplashSoundVelocity = 20.0;
|
||||
hardSplashSoundVelocity = 30.0;
|
||||
exitSplashSoundVelocity = 10.0;
|
||||
|
||||
exitingWater = VehicleExitWaterSoftSound;
|
||||
impactWaterEasy = VehicleImpactWaterSoftSound;
|
||||
impactWaterMedium = VehicleImpactWaterSoftSound;
|
||||
impactWaterHard = VehicleImpactWaterMediumSound;
|
||||
waterWakeSound = VehicleWakeSoftSplashSound;
|
||||
|
||||
minMountDist = 4;
|
||||
|
||||
damageEmitter[0] = SmallLightDamageSmoke;
|
||||
damageEmitter[1] = SmallHeavyDamageSmoke;
|
||||
damageEmitter[2] = DamageBubbles;
|
||||
damageEmitterOffset[0] = "0.0 -1.5 0.5 ";
|
||||
damageLevelTolerance[0] = 0.3;
|
||||
damageLevelTolerance[1] = 0.7;
|
||||
numDmgEmitterAreas = 1;
|
||||
|
||||
splashEmitter[0] = VehicleFoamDropletsEmitter;
|
||||
splashEmitter[1] = VehicleFoamEmitter;
|
||||
|
||||
shieldImpact = VehicleShieldImpact;
|
||||
|
||||
forwardJetEmitter = WildcatJetEmitter;
|
||||
|
||||
cmdCategory = Tactical;
|
||||
cmdIcon = CMDHoverScoutIcon;
|
||||
cmdMiniIconName = "commander/MiniIcons/com_landscout_grey";
|
||||
targetNameTag = 'WildCat';
|
||||
targetTypeTag = 'Grav Cycle';
|
||||
sensorData = VehiclePulseSensor;
|
||||
sensorRadius = VehiclePulseSensor.detectRadius; // z0dd - ZOD, 3/30/02. Allows sensor to be shown on CC
|
||||
|
||||
checkRadius = 1.7785;
|
||||
observeParameters = "1 10 10";
|
||||
|
||||
runningLight[0] = WildcatLight1;
|
||||
runningLight[1] = WildcatLight2;
|
||||
runningLight[2] = WildcatLight3;
|
||||
|
||||
shieldEffectScale = "0.9375 1.125 0.6";
|
||||
};
|
||||
|
||||
//**************************************************************
|
||||
// WEAPONS: z0dd - ZOD, 5/14/02
|
||||
//**************************************************************
|
||||
|
||||
$DeathMessageCTurretTeamKill[$DamageType::Bullet, 0] = '\c0%4 TEAMKILLED %1 by strafing from a Wildcat.';
|
||||
|
||||
$DeathMessageCTurretKill[$DamageType::Bullet, 0] = '\c0%4 turns %1 into swiss cheese with %6 Wildcat.';
|
||||
$DeathMessageCTurretKill[$DamageType::Bullet, 1] = '\c0The lead from %4\'s Wildcat turns %1 into finely shredded meat.';
|
||||
$DeathMessageCTurretKill[$DamageType::Bullet, 2] = '\c0%4 drills %1 full of holes with %6 Wildcat.';
|
||||
|
||||
datablock EffectProfile(GravChaingunFireEffect)
|
||||
{
|
||||
effectname = "weapons/chaingun_fire";
|
||||
minDistance = 5.0;
|
||||
maxDistance = 10.0;
|
||||
};
|
||||
|
||||
datablock AudioProfile(GravChaingunFireSound)
|
||||
{
|
||||
filename = "fx/vehicles/tank_chaingun.wav";
|
||||
description = AudioDefaultLooping3d;
|
||||
preload = true;
|
||||
effect = GravChaingunFireEffect;
|
||||
};
|
||||
|
||||
datablock AudioProfile(GravChaingunDryFireSound)
|
||||
{
|
||||
filename = "fx/weapons/chaingun_off.wav";
|
||||
description = AudioClose3d;
|
||||
preload = true;
|
||||
};
|
||||
|
||||
datablock AudioProfile(GravChaingunIdleSound)
|
||||
{
|
||||
filename = "fx/misc/diagnostic_on.wav";
|
||||
description = ClosestLooping3d;
|
||||
preload = true;
|
||||
};
|
||||
|
||||
datablock TracerProjectileData(GravBullet) : ChaingunBullet
|
||||
{
|
||||
projectileShapeName = "chaingun_shot.dts";
|
||||
directDamage = 0.135;
|
||||
};
|
||||
|
||||
datablock ShapeBaseImageData(GravChaingunImage)
|
||||
{
|
||||
className = WeaponImage;
|
||||
shapeFile = "weapon_chaingun.dts";
|
||||
item = Chaingun;
|
||||
offset = "-0.1 0.68 +0.26";
|
||||
//rotation = "0 0 0 90";
|
||||
projectile = GravBullet; //ChaingunBullet;
|
||||
projectileType = TracerProjectile;
|
||||
projectileSpread = 18.0 / 1000.0; // 10
|
||||
emap = true;
|
||||
mountPoint = 10;
|
||||
usesEnergy = true;
|
||||
useMountEnergy = true;
|
||||
// DAVEG -- balancing numbers below!
|
||||
minEnergy = 8;
|
||||
fireEnergy = 1.55;
|
||||
|
||||
stateName[0] = "Activate";
|
||||
stateSequence[0] = "Activate";
|
||||
stateSound[0] = GravChaingunIdleSound;
|
||||
stateAllowImageChange[0] = false;
|
||||
stateTimeoutValue[0] = 0.1;
|
||||
stateTransitionOnTimeout[0] = "Ready";
|
||||
stateTransitionOnNoAmmo[0] = "NoAmmo";
|
||||
|
||||
stateName[1] = "Ready";
|
||||
stateSpinThread[1] = Stop;
|
||||
stateTransitionOnTriggerDown[1] = "Spinup";
|
||||
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
||||
|
||||
stateName[2] = "NoAmmo";
|
||||
stateTransitionOnAmmo[2] = "Ready";
|
||||
stateSpinThread[2] = Stop;
|
||||
stateTransitionOnTriggerDown[2] = "DryFire";
|
||||
|
||||
stateName[3] = "Spinup";
|
||||
stateSpinThread[3] = SpinUp;
|
||||
//stateSound[3] = ChaingunSpinupSound;
|
||||
stateTimeoutValue[3] = 0.05;
|
||||
stateWaitForTimeout[3] = false;
|
||||
stateTransitionOnTimeout[3] = "Fire";
|
||||
stateTransitionOnTriggerUp[3] = "Spindown";
|
||||
|
||||
stateName[4] = "Fire";
|
||||
stateSequence[4] = "Fire";
|
||||
stateSequenceRandomFlash[4] = true;
|
||||
stateSpinThread[4] = FullSpeed;
|
||||
stateSound[4] = GravChaingunFireSound;
|
||||
//stateRecoil[4] = LightRecoil;
|
||||
stateAllowImageChange[4] = false;
|
||||
stateScript[4] = "onFire";
|
||||
stateFire[4] = true;
|
||||
stateEjectShell[4] = true;
|
||||
stateTimeoutValue[4] = 0.1;
|
||||
stateTransitionOnTimeout[4] = "Fire";
|
||||
stateTransitionOnTriggerUp[4] = "Spindown";
|
||||
stateTransitionOnNoAmmo[4] = "EmptySpindown";
|
||||
|
||||
stateName[5] = "Spindown";
|
||||
//stateSound[5] = ChaingunSpinDownSound;
|
||||
stateSpinThread[5] = SpinDown;
|
||||
stateTimeoutValue[5] = 0.05;
|
||||
stateWaitForTimeout[5] = true;
|
||||
stateTransitionOnTimeout[5] = "Ready";
|
||||
stateTransitionOnTriggerDown[5] = "Spinup";
|
||||
|
||||
stateName[6] = "EmptySpindown";
|
||||
//stateSound[6] = ChaingunSpinDownSound;
|
||||
stateSpinThread[6] = SpinDown;
|
||||
stateTimeoutValue[6] = 0.5;
|
||||
stateTransitionOnTimeout[6] = "NoAmmo";
|
||||
|
||||
stateName[7] = "DryFire";
|
||||
stateSound[7] = GravChaingunDryFireSound;
|
||||
stateTimeoutValue[7] = 1.0;
|
||||
stateTransitionOnTimeout[7] = "NoAmmo";
|
||||
};
|
||||
|
||||
package wildcat
|
||||
{
|
||||
function ScoutVehicle::onAdd(%this, %obj)
|
||||
{
|
||||
Parent::onAdd(%this, %obj);
|
||||
%obj.mountImage(GravChaingunImage, 0);
|
||||
%obj.setImageTrigger(0, false);
|
||||
%obj.schedule(5500, "playThread", $ActivateThread, "activate");
|
||||
}
|
||||
|
||||
function ScoutVehicle::playerMounted(%data, %obj, %player, %node)
|
||||
{
|
||||
// scout vehicle == SUV (single-user vehicle)
|
||||
commandToClient(%player.client, 'setHudMode', 'Pilot', "Hoverbike", %node);
|
||||
|
||||
// z0dd - ZOD, 5/14/02. Create a weapon hud and reticle
|
||||
commandToClient(%player.client, 'ShowVehicleWeapons', "Hoverbike");
|
||||
|
||||
// update observers who are following this guy...
|
||||
if( %player.client.observeCount > 0 )
|
||||
resetObserveFollow( %player.client, false );
|
||||
}
|
||||
|
||||
function ScoutVehicle::playerDismounted(%data, %obj, %player)
|
||||
{
|
||||
%obj.setImageTrigger(0, false);
|
||||
setTargetSensorGroup(%obj.getTarget(), %obj.team);
|
||||
if( %player.client.observeCount > 0 )
|
||||
resetObserveFollow( %player.client, true );
|
||||
}
|
||||
};
|
||||
|
||||
activatePackage(wildcat);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue