mirror of
https://github.com/exogen/t2-mapper.git
synced 2026-07-11 14:34:51 +00:00
Initial commit
This commit is contained in:
parent
2211ed7650
commit
ebb3dc9cdd
10121 changed files with 801 additions and 4 deletions
152
docs/base/@vl2/scripts.vl2/scripts/vehicles/clientVehicleHud.cs
Normal file
152
docs/base/@vl2/scripts.vl2/scripts/vehicles/clientVehicleHud.cs
Normal file
|
|
@ -0,0 +1,152 @@
|
|||
//------------------------------------------------------------------------------
|
||||
function VehicleHud::onWake( %this )
|
||||
{
|
||||
VIN_RemainingText.setText( "" );
|
||||
VIN_BuyBtn.setActive( false );
|
||||
|
||||
if ( isObject( hudMap ) )
|
||||
{
|
||||
hudMap.pop();
|
||||
hudMap.delete();
|
||||
}
|
||||
new ActionMap( hudMap );
|
||||
hudMap.blockBind( moveMap, toggleInventoryHud );
|
||||
hudMap.blockBind( moveMap, toggleScoreScreen );
|
||||
hudMap.blockBind( moveMap, toggleCommanderMap );
|
||||
hudMap.bindCmd( keyboard, escape, "", "VehicleHud.onCancel();" );
|
||||
hudMap.bindCmd( keyboard, "1", "", "VehicleHud.quickBuy( 0 );" );
|
||||
hudMap.bindCmd( keyboard, "2", "", "VehicleHud.quickBuy( 1 );" );
|
||||
hudMap.bindCmd( keyboard, "3", "", "VehicleHud.quickBuy( 2 );" );
|
||||
hudMap.bindCmd( keyboard, "4", "", "VehicleHud.quickBuy( 3 );" );
|
||||
hudMap.bindCmd( keyboard, "5", "", "VehicleHud.quickBuy( 4 );" );
|
||||
hudMap.bindCmd( keyboard, "6", "", "VehicleHud.quickBuy( 5 );" );
|
||||
hudMap.push();
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
function VehicleHud::onSleep( %this )
|
||||
{
|
||||
VIN_Picture.setBitmap( "" );
|
||||
|
||||
%this.selId = "";
|
||||
%this.selected = "";
|
||||
|
||||
// Don't rely on the server to tell us to clear the hud - do it now!
|
||||
for ( %line = 0; %line < $Hud['vehicleHud'].count; %line++ )
|
||||
{
|
||||
if ( $Hud['vehicleHud'].data[%line, 0] !$= "" )
|
||||
{
|
||||
$Hud['vehicleHud'].childGui.remove( $Hud['vehicleHud'].data[%line, 0] );
|
||||
$Hud['vehicleHud'].data[%line, 0] = "";
|
||||
}
|
||||
}
|
||||
$Hud['vehicleHud'].count = 0;
|
||||
|
||||
hudMap.pop();
|
||||
hudMap.delete();
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
function VehicleHud::setupHud( %obj, %tag )
|
||||
{
|
||||
// Nothing to do...
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
function VehicleHud::loadHud( %obj, %tag )
|
||||
{
|
||||
$Hud[%tag] = VehicleHud;
|
||||
$Hud[%tag].childGui = VIN_Root;
|
||||
$Hud[%tag].parent = VIN_Root;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
function VehicleHud::quickBuy( %this, %id )
|
||||
{
|
||||
if ( isObject( $Hud['vehicleHud'].data[%id, 0] ) )
|
||||
{
|
||||
if ( %this.selId != %id )
|
||||
VehicleHud.onTabSelect( %id, $Hud['vehicleHud'].data[%id, 0].vName, $Hud['vehicleHud'].data[%id, 0].vCount );
|
||||
%this.onBuy();
|
||||
}
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
function VehicleHud::onBuy( %this )
|
||||
{
|
||||
toggleCursorHuds( 'vehicleHud' );
|
||||
commandToServer( 'buyVehicle', %this.selected );
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
function VehicleHud::onCancel( %this )
|
||||
{
|
||||
toggleCursorHuds('vehicleHud');
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
function VehicleHud::onTabSelect( %this, %id, %name, %count )
|
||||
{
|
||||
if ( %this.selId !$= "" )
|
||||
$Hud['vehicleHud'].data[%this.selId, 0].setValue( false );
|
||||
|
||||
%this.selId = %id;
|
||||
%this.selected = %name;
|
||||
|
||||
VIN_Picture.setBitmap( "gui/vin_" @ %name );
|
||||
VIN_RemainingText.setText( %count SPC "Remaining" );
|
||||
VIN_BuyBtn.setActive( %count > 0 );
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
function VehicleHud::addLine( %this, %tag, %lineNum, %name, %count )
|
||||
{
|
||||
%yOffset = ( %lineNum * 30 ) + 11;
|
||||
$Hud[%tag].count++;
|
||||
|
||||
$Hud[%tag].data[%lineNum, 0] = new ShellTabButton() {
|
||||
profile = "ShellTabProfile";
|
||||
horizSizing = "right";
|
||||
vertSizing = "bottom";
|
||||
position = "3 " @ %yOffset;
|
||||
extent = "206 38";
|
||||
minExtent = "8 8";
|
||||
visible = "1";
|
||||
helpTag = "0";
|
||||
command = "VehicleHud.onTabSelect(" @ %lineNum @ "," @ %name @ "," @ %count @ ");";
|
||||
text = "";
|
||||
vName = %name;
|
||||
vCount = %count;
|
||||
};
|
||||
|
||||
// If nothing is selected, select something:
|
||||
if ( %this.selId $= "" )
|
||||
{
|
||||
$Hud[%tag].data[%lineNum, 0].setValue( true );
|
||||
VehicleHud.onTabSelect( %lineNum, %name, %count );
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
function clientCmdStationVehicleShowHud()
|
||||
{
|
||||
if ( Canvas.getContent() != PlayGui.getId() )
|
||||
return;
|
||||
|
||||
showHud( 'vehicleHud' );
|
||||
clientCmdTogglePlayHuds(false);
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
function clientCmdStationVehicleHideHud()
|
||||
{
|
||||
hideHud( 'vehicleHud' );
|
||||
clientCmdTogglePlayHuds(true);
|
||||
}
|
||||
|
||||
function clientCmdStationVehicleHideJustHud()
|
||||
{
|
||||
hideHud( 'vehicleHud' );
|
||||
}
|
||||
306
docs/base/@vl2/scripts.vl2/scripts/vehicles/serverVehicleHud.cs
Normal file
306
docs/base/@vl2/scripts.vl2/scripts/vehicles/serverVehicleHud.cs
Normal file
|
|
@ -0,0 +1,306 @@
|
|||
//------------------------------------------------------------------------------
|
||||
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.');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function createVehicle(%client, %station, %blockName, %team , %pos, %rot, %angle)
|
||||
{
|
||||
%obj = %blockName.create(%team);
|
||||
if(%obj)
|
||||
{
|
||||
%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)
|
||||
{
|
||||
if(isObject(%obj) && %obj.getDamageState() !$= "Destroyed")
|
||||
%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;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
function VehicleHud::updateHud( %obj, %client, %tag )
|
||||
{
|
||||
%station = %client.player.station;
|
||||
// Not sure if we need to clear the huds... They'll always have the same num rows...
|
||||
//if ( %station.lastCount !$= "" )
|
||||
// VehicleHud::clearHud( %client, %tag, %station.lastCount );
|
||||
|
||||
%team = %client.getSensorGroup();
|
||||
%count = 0;
|
||||
if ( %station.vehicle[scoutVehicle] )
|
||||
{
|
||||
messageClient( %client, 'SetLineHud', "", %tag, %count, "GRAV CYCLE", "", ScoutVehicle, $VehicleMax[ScoutVehicle] - $VehicleTotalCount[%team, ScoutVehicle] );
|
||||
//new messageClient( %client, 'SetLineHud', "", %tag, %count, 'ScoutVehicle', $VehicleMax[ScoutVehicle] - $VehicleTotalCount[%team, ScoutVehicle], '', "GRAV CYCLE" );
|
||||
%count++;
|
||||
}
|
||||
if ( %station.vehicle[AssaultVehicle] )
|
||||
{
|
||||
messageClient( %client, 'SetLineHud', "", %tag, %count, "ASSAULT TANK", "", AssaultVehicle, $VehicleMax[AssaultVehicle] - $VehicleTotalCount[%team, AssaultVehicle] );
|
||||
//new messageClient( %client, 'SetLineHud', "", %tag, %count, 'AssaultVehicle', $VehicleMax[AssaultVehicle] - $VehicleTotalCount[%team, AssaultVehicle], '', "ASSAULT TANK");
|
||||
%count++;
|
||||
}
|
||||
if ( %station.vehicle[mobileBaseVehicle] )
|
||||
{
|
||||
messageClient( %client, 'SetLineHud', "", %tag, %count, "MOBILE POINT BASE", "", MobileBaseVehicle, $VehicleMax[MobileBaseVehicle] - $VehicleTotalCount[%team, MobileBaseVehicle] );
|
||||
//new messageClient( %client, 'SetLineHud', "", %tag, %count, 'MobileBaseVehicle', $VehicleMax[MobileBaseVehicle] - $VehicleTotalCount[%team, MobileBaseVehicle], '', "MOBILE POINT BASE" );
|
||||
%count++;
|
||||
}
|
||||
if ( %station.vehicle[scoutFlyer] )
|
||||
{
|
||||
messageClient( %client, 'SetLineHud', "", %tag, %count, "SCOUT FLIER", "", ScoutFlyer, $VehicleMax[ScoutFlyer] - $VehicleTotalCount[%team, ScoutFlyer] );
|
||||
//new messageClient( %client, 'SetLineHud', "", %tag, %count, 'ScoutFlyer', $VehicleMax[ScoutFlyer] - $VehicleTotalCount[%team, ScoutFlyer], '', "SCOUT FLIER");
|
||||
%count++;
|
||||
}
|
||||
if ( %station.vehicle[bomberFlyer] )
|
||||
{
|
||||
messageClient( %client, 'SetLineHud', "", %tag, %count, "BOMBER", "", BomberFlyer, $VehicleMax[BomberFlyer] - $VehicleTotalCount[%team, BomberFlyer] );
|
||||
//new messageClient( %client, 'SetLineHud', "", %tag, %count, 'BomberFlyer', $VehicleMax[BomberFlyer] - $VehicleTotalCount[%team, BomberFlyer], '', "BOMBER");
|
||||
%count++;
|
||||
}
|
||||
if ( %station.vehicle[hapcFlyer] )
|
||||
{
|
||||
messageClient( %client, 'SetLineHud', "", %tag, %count, "TRANSPORT", "", HAPCFlyer, $VehicleMax[HAPCFlyer] - $VehicleTotalCount[%team, HAPCFlyer] );
|
||||
//new messageClient( %client, 'SetLineHud', "", %tag, %count, 'HAPCFlyer', $VehicleMax[HAPCFlyer] - $VehicleTotalCount[%team, HAPCFlyer], '', "TRANSPORT");
|
||||
%count++;
|
||||
}
|
||||
%station.lastCount = %count;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
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 );
|
||||
}
|
||||
1569
docs/base/@vl2/scripts.vl2/scripts/vehicles/vehicle.cs
Normal file
1569
docs/base/@vl2/scripts.vl2/scripts/vehicles/vehicle.cs
Normal file
File diff suppressed because it is too large
Load diff
991
docs/base/@vl2/scripts.vl2/scripts/vehicles/vehicle_bomber.cs
Normal file
991
docs/base/@vl2/scripts.vl2/scripts/vehicles/vehicle_bomber.cs
Normal file
|
|
@ -0,0 +1,991 @@
|
|||
//**************************************************************
|
||||
// THUNDERSWORD BOMBER
|
||||
//**************************************************************
|
||||
//**************************************************************
|
||||
// SOUNDS
|
||||
//**************************************************************
|
||||
datablock EffectProfile(BomberFlyerEngineEffect)
|
||||
{
|
||||
effectname = "vehicles/bomber_engine";
|
||||
minDistance = 5.0;
|
||||
maxDistance = 10.0;
|
||||
};
|
||||
|
||||
datablock EffectProfile(BomberFlyerThrustEffect)
|
||||
{
|
||||
effectname = "vehicles/bomber_boost";
|
||||
minDistance = 5.0;
|
||||
maxDistance = 10.0;
|
||||
};
|
||||
|
||||
datablock EffectProfile(BomberTurretFireEffect)
|
||||
{
|
||||
effectname = "vehicles/bomber_turret_fire";
|
||||
minDistance = 5.0;
|
||||
maxDistance = 10.0;
|
||||
};
|
||||
|
||||
datablock EffectProfile(BomberTurretActivateEffect)
|
||||
{
|
||||
effectname = "vehicles/bomber_turret_activate";
|
||||
minDistance = 5.0;
|
||||
maxDistance = 10.0;
|
||||
};
|
||||
|
||||
datablock EffectProfile(BomberTurretReloadEffect)
|
||||
{
|
||||
effectname = "vehicles/bomber_turret_reload";
|
||||
minDistance = 5.0;
|
||||
maxDistance = 10.0;
|
||||
};
|
||||
|
||||
datablock EffectProfile(BomberTurretDryFireEffect)
|
||||
{
|
||||
effectname = "vehicles/bomber_turret_dryfire";
|
||||
minDistance = 5.0;
|
||||
maxDistance = 10.0;
|
||||
};
|
||||
|
||||
datablock EffectProfile(BomberBombReloadEffect)
|
||||
{
|
||||
effectname = "vehicles/bomber_bomb_reload";
|
||||
minDistance = 5.0;
|
||||
maxDistance = 10.0;
|
||||
};
|
||||
|
||||
datablock EffectProfile(BomberBombDryFireEffect)
|
||||
{
|
||||
effectname = "vehicles/bomber_bomb_dryfire";
|
||||
minDistance = 5.0;
|
||||
maxDistance = 10.0;
|
||||
};
|
||||
|
||||
datablock EffectProfile(BomberBombFireEffect)
|
||||
{
|
||||
effectname = "weapons/generic_throw";
|
||||
minDistance = 10.0;
|
||||
maxDistance = 20.0;
|
||||
};
|
||||
|
||||
datablock AudioProfile(BomberFlyerEngineSound)
|
||||
{
|
||||
filename = "fx/vehicles/bomber_engine.wav";
|
||||
description = AudioDefaultLooping3d;
|
||||
preload = true;
|
||||
effect = BomberFlyerEngineEffect;
|
||||
};
|
||||
|
||||
datablock AudioProfile(BomberFlyerThrustSound)
|
||||
{
|
||||
filename = "fx/vehicles/bomber_boost.wav";
|
||||
description = AudioDefaultLooping3d;
|
||||
preload = true;
|
||||
effect = BomberFlyerThrustEffect;
|
||||
};
|
||||
|
||||
datablock AudioProfile(FusionExpSound)
|
||||
// Sound played when mortar impacts on target
|
||||
{
|
||||
filename = "fx/powered/turret_mortar_explode.wav";
|
||||
description = "AudioBIGExplosion3d";
|
||||
preload = true;
|
||||
};
|
||||
|
||||
datablock AudioProfile(BomberTurretFireSound)
|
||||
{
|
||||
filename = "fx/vehicles/bomber_turret_fire.wav";
|
||||
description = AudioClose3d;
|
||||
preload = true;
|
||||
effect = BomberTurretFireEffect;
|
||||
};
|
||||
|
||||
datablock AudioProfile(BomberTurretActivateSound)
|
||||
{
|
||||
filename = "fx/vehicles/bomber_turret_activate.wav";
|
||||
description = AudioClose3d;
|
||||
preload = true;
|
||||
effect = BomberTurretActivateEffect;
|
||||
};
|
||||
|
||||
datablock AudioProfile(BomberTurretReloadSound)
|
||||
{
|
||||
filename = "fx/vehicles/bomber_turret_reload.wav";
|
||||
description = AudioClose3d;
|
||||
preload = true;
|
||||
effect = BomberTurretReloadEffect;
|
||||
};
|
||||
|
||||
datablock AudioProfile(BomberTurretIdleSound)
|
||||
{
|
||||
filename = "fx/misc/diagnostic_on.wav";
|
||||
description = ClosestLooping3d;
|
||||
preload = true;
|
||||
};
|
||||
|
||||
datablock AudioProfile(BomberTurretDryFireSound)
|
||||
{
|
||||
filename = "fx/vehicles/bomber_turret_dryfire.wav";
|
||||
description = AudioClose3d;
|
||||
preload = true;
|
||||
effect = BomberTurretDryFireEffect;
|
||||
};
|
||||
|
||||
datablock AudioProfile(BomberBombReloadSound)
|
||||
{
|
||||
filename = "fx/vehicles/bomber_bomb_reload.wav";
|
||||
description = AudioClose3d;
|
||||
preload = true;
|
||||
effect = BomberBombReloadEffect;
|
||||
};
|
||||
|
||||
datablock AudioProfile(BomberBombProjectileSound)
|
||||
{
|
||||
filename = "fx/vehicles/bomber_bomb_projectile.wav";
|
||||
description = AudioDefaultLooping3d;
|
||||
preload = true;
|
||||
effect = BomberBombFireEffect;
|
||||
};
|
||||
|
||||
datablock AudioProfile(BomberBombDryFireSound)
|
||||
{
|
||||
filename = "fx/vehicles/bomber_bomb_dryfire.wav";
|
||||
description = AudioClose3d;
|
||||
preload = true;
|
||||
effect = BomberBombDryFireEffect;
|
||||
};
|
||||
|
||||
datablock AudioProfile(BomberBombFireSound)
|
||||
{
|
||||
filename = "fx/vehicles/bomber_bomb_reload.wav";
|
||||
description = AudioClose3d;
|
||||
preload = true;
|
||||
effect = BomberBombFireEffect;
|
||||
};
|
||||
|
||||
datablock AudioProfile(BomberBombIdleSound)
|
||||
{
|
||||
filename = "fx/misc/diagnostic_on.wav";
|
||||
description = ClosestLooping3d;
|
||||
preload = true;
|
||||
};
|
||||
|
||||
//**************************************************************
|
||||
// VEHICLE CHARACTERISTICS
|
||||
//**************************************************************
|
||||
|
||||
datablock FlyingVehicleData(BomberFlyer) : BomberDamageProfile
|
||||
{
|
||||
spawnOffset = "0 0 2";
|
||||
|
||||
catagory = "Vehicles";
|
||||
shapeFile = "vehicle_air_bomber.dts";
|
||||
multipassenger = true;
|
||||
computeCRC = true;
|
||||
|
||||
weaponNode = 1;
|
||||
|
||||
debrisShapeName = "vehicle_air_bomber_debris.dts";
|
||||
debris = ShapeDebris;
|
||||
renderWhenDestroyed = false;
|
||||
|
||||
drag = 0.2;
|
||||
density = 1.0;
|
||||
|
||||
mountPose[0] = sitting;
|
||||
mountPose[1] = sitting;
|
||||
numMountPoints = 3;
|
||||
isProtectedMountPoint[0] = true;
|
||||
isProtectedMountPoint[1] = true;
|
||||
isProtectedMountPoint[2] = true;
|
||||
|
||||
cameraDefaultFov = 90.0;
|
||||
cameraMinFov = 5.0;
|
||||
cameraMaxFov = 120.0;
|
||||
|
||||
cameraMaxDist = 22;
|
||||
cameraOffset = 5;
|
||||
cameraLag = 1.0;
|
||||
explosion = LargeAirVehicleExplosion;
|
||||
explosionDamage = 0.5;
|
||||
explosionRadius = 5.0;
|
||||
|
||||
maxDamage = 2.80; // Total health
|
||||
destroyedLevel = 2.80; // Damage textures show up at this health level
|
||||
|
||||
isShielded = true;
|
||||
energyPerDamagePoint = 150;
|
||||
maxEnergy = 400; // Afterburner and any energy weapon pool
|
||||
minDrag = 60; // Linear Drag (eventually slows you down when not thrusting...constant drag)
|
||||
rotationalDrag = 1800; // Angular Drag (dampens the drift after you stop moving the mouse...also tumble drag)
|
||||
rechargeRate = 0.8;
|
||||
|
||||
// Auto stabilize speed
|
||||
maxAutoSpeed = 15; // Autostabilizer kicks in when less than this speed. (meters/second)
|
||||
autoAngularForce = 1500; // 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 = 5; // Horizontal center "wing" (provides "bite" into the wind for climbing/diving and turning)
|
||||
verticalSurfaceForce = 8; // Vertical center "wing" (controls side slip. lower numbers make MORE slide.)
|
||||
maneuveringForce = 4700; // Horizontal jets (W,S,D,A key thrust)
|
||||
steeringForce = 1100; // Steering jets (force applied when you move the mouse)
|
||||
steeringRollForce = 300; // Steering jets (how much you heel over when you turn)
|
||||
rollForce = 8; // 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 = 85; // speed in which forward thrust force is no longer applied (meters/second)
|
||||
|
||||
// Turbo Jet
|
||||
jetForce = 3000; // Afterburner thrust (this is in addition to normal thrust)
|
||||
minJetEnergy = 40.0; // Afterburner can't be used if below this threshhold.
|
||||
jetEnergyDrain = 3.0; // Energy use of the afterburners (low number is less drain...can be fractional)
|
||||
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 = 350; // 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 = 20; // Sound hooks. This is the soft hit.
|
||||
hardImpactSpeed = 25; // Sound hooks. This is the hard hit.
|
||||
|
||||
// Ground Impact Damage (uses DamageType::Ground)
|
||||
minImpactSpeed = 20; // If hit ground at speed above this then it's an impact. Meters/second
|
||||
speedDamageScale = 0.060;
|
||||
|
||||
// Object Impact Damage (uses DamageType::Impact)
|
||||
collDamageThresholdVel = 25;
|
||||
collDamageMultiplier = 0.020;
|
||||
|
||||
//
|
||||
minTrailSpeed = 15; // The speed your contrail shows up at.
|
||||
trailEmitter = ContrailEmitter;
|
||||
forwardJetEmitter = FlyerJetEmitter;
|
||||
downJetEmitter = FlyerJetEmitter;
|
||||
|
||||
//
|
||||
jetSound = BomberFlyerThrustSound;
|
||||
engineSound = BomberFlyerEngineSound;
|
||||
softImpactSound = SoftImpactSound;
|
||||
hardImpactSound = HardImpactSound;
|
||||
//wheelImpactSound = WheelImpactSound;
|
||||
|
||||
//
|
||||
softSplashSoundVelocity = 15.0;
|
||||
mediumSplashSoundVelocity = 20.0;
|
||||
hardSplashSoundVelocity = 30.0;
|
||||
exitSplashSoundVelocity = 10.0;
|
||||
|
||||
exitingWater = VehicleExitWaterHardSound;
|
||||
impactWaterEasy = VehicleImpactWaterSoftSound;
|
||||
impactWaterMedium = VehicleImpactWaterMediumSound;
|
||||
impactWaterHard = VehicleImpactWaterHardSound;
|
||||
waterWakeSound = VehicleWakeHardSplashSound;
|
||||
|
||||
minMountDist = 4;
|
||||
|
||||
splashEmitter[0] = VehicleFoamDropletsEmitter;
|
||||
splashEmitter[1] = VehicleFoamEmitter;
|
||||
|
||||
shieldImpact = VehicleShieldImpact;
|
||||
|
||||
cmdCategory = "Tactical";
|
||||
cmdIcon = CMDFlyingBomberIcon;
|
||||
cmdMiniIconName = "commander/MiniIcons/com_bomber_grey";
|
||||
targetNameTag = 'Thundersword';
|
||||
targetTypeTag = 'Bomber';
|
||||
sensorData = VehiclePulseSensor;
|
||||
|
||||
checkRadius = 7.1895;
|
||||
observeParameters = "1 10 10";
|
||||
shieldEffectScale = "0.75 0.975 0.375";
|
||||
showPilotInfo = 1;
|
||||
};
|
||||
|
||||
//**************************************************************
|
||||
// WEAPONS
|
||||
//**************************************************************
|
||||
|
||||
//-------------------------------------
|
||||
// BOMBER BELLY TURRET GUN (projectile)
|
||||
//-------------------------------------
|
||||
|
||||
datablock ShockwaveData(BomberFusionShockwave)
|
||||
{
|
||||
width = 0.5;
|
||||
numSegments = 13;
|
||||
numVertSegments = 1;
|
||||
velocity = 0.5;
|
||||
acceleration = 2.0;
|
||||
lifetimeMS = 900;
|
||||
height = 0.1;
|
||||
verticalCurve = 0.5;
|
||||
|
||||
mapToTerrain = false;
|
||||
renderBottom = false;
|
||||
orientToNormal = true;
|
||||
|
||||
texture[0] = "special/shockwave5";
|
||||
texture[1] = "special/gradient";
|
||||
texWrap = 3.0;
|
||||
|
||||
times[0] = 0.0;
|
||||
times[1] = 0.5;
|
||||
times[2] = 1.0;
|
||||
|
||||
colors[0] = "0.6 0.6 1.0 1.0";
|
||||
colors[1] = "0.6 0.3 1.0 0.5";
|
||||
colors[2] = "0.0 0.0 1.0 0.0";
|
||||
};
|
||||
|
||||
datablock ParticleData(BomberFusionExplosionParticle1)
|
||||
{
|
||||
dragCoefficient = 2;
|
||||
gravityCoefficient = 0.0;
|
||||
inheritedVelFactor = 0.2;
|
||||
constantAcceleration = -0.0;
|
||||
lifetimeMS = 600;
|
||||
lifetimeVarianceMS = 000;
|
||||
textureName = "special/crescent4";
|
||||
colors[0] = "0.6 0.6 1.0 1.0";
|
||||
colors[1] = "0.6 0.3 1.0 1.0";
|
||||
colors[2] = "0.0 0.0 1.0 0.0";
|
||||
sizes[0] = 0.25;
|
||||
sizes[1] = 0.5;
|
||||
sizes[2] = 1.0;
|
||||
times[0] = 0.0;
|
||||
times[1] = 0.5;
|
||||
times[2] = 1.0;
|
||||
};
|
||||
|
||||
datablock ParticleEmitterData(BomberFusionExplosionEmitter)
|
||||
{
|
||||
ejectionPeriodMS = 7;
|
||||
periodVarianceMS = 0;
|
||||
ejectionVelocity = 2;
|
||||
velocityVariance = 1.5;
|
||||
ejectionOffset = 0.0;
|
||||
thetaMin = 80;
|
||||
thetaMax = 90;
|
||||
phiReferenceVel = 0;
|
||||
phiVariance = 360;
|
||||
overrideAdvances = false;
|
||||
orientParticles = true;
|
||||
lifetimeMS = 200;
|
||||
particles = "BomberFusionExplosionParticle1";
|
||||
};
|
||||
|
||||
datablock ExplosionData(BomberFusionBoltExplosion)
|
||||
{
|
||||
soundProfile = blasterExpSound;
|
||||
shockwave = BomberFusionShockwave;
|
||||
emitter[0] = BomberFusionExplosionEmitter;
|
||||
};
|
||||
|
||||
|
||||
datablock LinearFlareProjectileData(BomberFusionBolt)
|
||||
{
|
||||
projectileShapeName = "";
|
||||
directDamage = 0.35;
|
||||
directDamageType = $DamageType::BellyTurret;
|
||||
hasDamageRadius = false;
|
||||
explosion = BomberFusionBoltExplosion;
|
||||
sound = BlasterProjectileSound;
|
||||
|
||||
dryVelocity = 200.0;
|
||||
wetVelocity = 200.0;
|
||||
velInheritFactor = 1.0;
|
||||
fizzleTimeMS = 2000;
|
||||
lifetimeMS = 3000;
|
||||
explodeOnDeath = false;
|
||||
reflectOnWaterImpactAngle = 0.0;
|
||||
explodeOnWaterImpact = true;
|
||||
deflectionOnWaterImpact = 0.0;
|
||||
fizzleUnderwaterMS = -1;
|
||||
|
||||
activateDelayMS = 100;
|
||||
|
||||
numFlares = 0;
|
||||
size = 0.15;
|
||||
flareColor = "0.7 0.3 1.0";
|
||||
flareModTexture = "flaremod";
|
||||
flareBaseTexture = "flarebase";
|
||||
};
|
||||
|
||||
//-------------------------------------
|
||||
// BOMBER BELLY TURRET CHARACTERISTICS
|
||||
//-------------------------------------
|
||||
|
||||
datablock TurretData(BomberTurret) : TurretDamageProfile
|
||||
{
|
||||
className = VehicleTurret;
|
||||
catagory = "Turrets";
|
||||
shapeFile = "turret_belly_base.dts";
|
||||
preload = true;
|
||||
|
||||
mass = 1.0; // Not really relevant
|
||||
repairRate = 0;
|
||||
maxDamage = BomberFlyer.maxDamage;
|
||||
destroyedLevel = BomberFlyer.destroyedLevel;
|
||||
|
||||
thetaMin = 90;
|
||||
thetaMax = 180;
|
||||
|
||||
// capacitor
|
||||
maxCapacitorEnergy = 250;
|
||||
capacitorRechargeRate = 0.8;
|
||||
|
||||
inheritEnergyFromMount = true;
|
||||
firstPersonOnly = true;
|
||||
useEyePoint = true;
|
||||
numWeapons = 3;
|
||||
|
||||
targetNameTag = 'Thundersword Belly';
|
||||
targetTypeTag = 'Turret';
|
||||
};
|
||||
|
||||
datablock TurretImageData(BomberTurretBarrel)
|
||||
{
|
||||
shapeFile = "turret_belly_barrell.dts";
|
||||
mountPoint = 0;
|
||||
|
||||
projectile = BomberFusionBolt;
|
||||
projectileType = LinearFlareProjectile;
|
||||
|
||||
usesEnergy = true;
|
||||
useCapacitor = true;
|
||||
useMountEnergy = true;
|
||||
fireEnergy = 16.0;
|
||||
minEnergy = 16.0;
|
||||
|
||||
// Turret parameters
|
||||
activationMS = 1000;
|
||||
deactivateDelayMS = 1500;
|
||||
thinkTimeMS = 200;
|
||||
degPerSecTheta = 360;
|
||||
degPerSecPhi = 360;
|
||||
|
||||
attackRadius = 75;
|
||||
|
||||
// State transitions
|
||||
stateName[0] = "Activate";
|
||||
stateTransitionOnTimeout[0] = "WaitFire1";
|
||||
stateTimeoutValue[0] = 0.5;
|
||||
stateSequence[0] = "Activate";
|
||||
stateSound[0] = BomberTurretActivateSound;
|
||||
|
||||
stateName[1] = "WaitFire1";
|
||||
stateTransitionOnTriggerDown[1] = "Fire1";
|
||||
stateTransitionOnNoAmmo[1] = "NoAmmo1";
|
||||
|
||||
stateName[2] = "Fire1";
|
||||
stateTransitionOnTimeout[2] = "Reload1";
|
||||
stateTimeoutValue[2] = 0.13;
|
||||
stateFire[2] = true;
|
||||
stateRecoil[2] = LightRecoil;
|
||||
stateAllowImageChange[2] = false;
|
||||
stateSequence[2] = "Fire";
|
||||
stateScript[2] = "onFire";
|
||||
stateSound[2] = BomberTurretFireSound;
|
||||
|
||||
stateName[3] = "Reload1";
|
||||
stateSequence[3] = "Reload";
|
||||
stateTimeoutValue[3] = 0.1;
|
||||
stateAllowImageChange[3] = false;
|
||||
stateTransitionOnTimeout[3] = "WaitFire2";
|
||||
stateTransitionOnNoAmmo[3] = "NoAmmo1";
|
||||
|
||||
stateName[4] = "NoAmmo1";
|
||||
stateTransitionOnAmmo[4] = "Reload1";
|
||||
// ---------------------------------------------
|
||||
// z0dd - ZOD, 5/8/02. Incorrect parameter value
|
||||
//stateSequence[4] = "NoAmmo";
|
||||
stateSequence[4] = "NoAmmo1";
|
||||
|
||||
stateTransitionOnTriggerDown[4] = "DryFire1";
|
||||
|
||||
stateName[5] = "DryFire1";
|
||||
stateSound[5] = BomberTurretDryFireSound;
|
||||
stateTimeoutValue[5] = 0.5;
|
||||
stateTransitionOnTimeout[5] = "NoAmmo1";
|
||||
|
||||
stateName[6] = "WaitFire2";
|
||||
stateTransitionOnTriggerDown[6] = "Fire2";
|
||||
// ---------------------------------------------
|
||||
// z0dd - ZOD, 5/8/02. Incorrect parameter value
|
||||
//stateTransitionOnNoAmmo[6] = "NoAmmo";
|
||||
stateTransitionOnNoAmmo[6] = "NoAmmo2";
|
||||
|
||||
stateName[7] = "Fire2";
|
||||
stateTransitionOnTimeout[7] = "Reload2";
|
||||
stateTimeoutValue[7] = 0.13;
|
||||
stateScript[7] = "FirePair";
|
||||
|
||||
stateName[8] = "Reload2";
|
||||
stateSequence[8] = "Reload";
|
||||
stateTimeoutValue[8] = 0.1;
|
||||
stateAllowImageChange[8] = false;
|
||||
stateTransitionOnTimeout[8] = "WaitFire1";
|
||||
stateTransitionOnNoAmmo[8] = "NoAmmo2";
|
||||
|
||||
stateName[9] = "NoAmmo2";
|
||||
stateTransitionOnAmmo[9] = "Reload2";
|
||||
// ---------------------------------------------
|
||||
// z0dd - ZOD, 5/8/02. Incorrect parameter value
|
||||
//stateSequence[9] = "NoAmmo";
|
||||
stateSequence[9] = "NoAmmo2";
|
||||
|
||||
stateTransitionOnTriggerDown[9] = "DryFire2";
|
||||
|
||||
stateName[10] = "DryFire2";
|
||||
stateSound[10] = BomberTurretDryFireSound;
|
||||
stateTimeoutValue[10] = 0.5;
|
||||
stateTransitionOnTimeout[10] = "NoAmmo2";
|
||||
|
||||
};
|
||||
|
||||
datablock TurretImageData(BomberTurretBarrelPair)
|
||||
{
|
||||
shapeFile = "turret_belly_barrelr.dts";
|
||||
mountPoint = 1;
|
||||
|
||||
projectile = BomberFusionBolt;
|
||||
projectileType = LinearFlareProjectile;
|
||||
|
||||
usesEnergy = true;
|
||||
useCapacitor = true;
|
||||
useMountEnergy = true;
|
||||
fireEnergy = 16.0;
|
||||
minEnergy = 16.0;
|
||||
|
||||
// Turret parameters
|
||||
activationMS = 1000;
|
||||
deactivateDelayMS = 1500;
|
||||
thinkTimeMS = 200;
|
||||
degPerSecTheta = 360;
|
||||
degPerSecPhi = 360;
|
||||
|
||||
attackRadius = 75;
|
||||
|
||||
stateName[0] = "WaitFire";
|
||||
stateTransitionOnTriggerDown[0] = "Fire";
|
||||
|
||||
stateName[1] = "Fire";
|
||||
stateTransitionOnTimeout[1] = "StopFire";
|
||||
stateTimeoutValue[1] = 0.13;
|
||||
stateFire[1] = true;
|
||||
stateRecoil[1] = LightRecoil;
|
||||
stateAllowImageChange[1] = false;
|
||||
stateSequence[1] = "Fire";
|
||||
stateScript[1] = "onFire";
|
||||
stateSound[1] = BomberTurretFireSound;
|
||||
|
||||
stateName[2] = "StopFire";
|
||||
stateTimeoutValue[2] = 0.1;
|
||||
stateTransitionOnTimeout[2] = "WaitFire";
|
||||
stateScript[2] = "stopFire";
|
||||
};
|
||||
|
||||
datablock TurretImageData(AIAimingTurretBarrel)
|
||||
{
|
||||
shapeFile = "turret_muzzlepoint.dts";
|
||||
mountPoint = 3;
|
||||
|
||||
projectile = BomberFusionBolt;
|
||||
|
||||
// Turret parameters
|
||||
activationMS = 1000;
|
||||
deactivateDelayMS = 1500;
|
||||
thinkTimeMS = 200;
|
||||
degPerSecTheta = 500;
|
||||
degPerSecPhi = 800;
|
||||
|
||||
attackRadius = 75;
|
||||
};
|
||||
|
||||
//-------------------------------------
|
||||
// BOMBER BOMB PROJECTILE
|
||||
//-------------------------------------
|
||||
|
||||
datablock BombProjectileData(BomberBomb)
|
||||
{
|
||||
projectileShapeName = "bomb.dts";
|
||||
emitterDelay = -1;
|
||||
directDamage = 0.0;
|
||||
hasDamageRadius = true;
|
||||
indirectDamage = 1.1;
|
||||
damageRadius = 30;
|
||||
radiusDamageType = $DamageType::BomberBombs;
|
||||
kickBackStrength = 2500;
|
||||
|
||||
explosion = "VehicleBombExplosion";
|
||||
velInheritFactor = 1.0;
|
||||
|
||||
grenadeElasticity = 0.25;
|
||||
grenadeFriction = 0.4;
|
||||
armingDelayMS = 2000;
|
||||
muzzleVelocity = 0.1;
|
||||
drag = 0.3;
|
||||
|
||||
minRotSpeed = "60.0 0.0 0.0";
|
||||
maxRotSpeed = "80.0 0.0 0.0";
|
||||
scale = "1.0 1.0 1.0";
|
||||
|
||||
sound = BomberBombProjectileSound;
|
||||
};
|
||||
|
||||
//-------------------------------------
|
||||
// BOMBER BOMB CHARACTERISTICS
|
||||
//-------------------------------------
|
||||
|
||||
datablock ItemData(BombAmmo)
|
||||
{
|
||||
className = Ammo;
|
||||
catagory = "Ammo";
|
||||
shapeFile = "repair_kit.dts";
|
||||
mass = 1;
|
||||
elasticity = 0.2;
|
||||
friction = 0.6;
|
||||
pickupRadius = 1;
|
||||
computeCRC = true;
|
||||
};
|
||||
|
||||
datablock StaticShapeData(DropBombs)
|
||||
{
|
||||
catagory = "Turrets";
|
||||
shapeFile = "bombers_eye.dts";
|
||||
maxDamage = 1.0;
|
||||
disabledLevel = 0.6;
|
||||
destroyedLevel = 0.8;
|
||||
};
|
||||
|
||||
datablock TurretImageData(BomberBombImage)
|
||||
{
|
||||
shapeFile = "turret_muzzlepoint.dts";
|
||||
offset = "2 -4 -0.5";
|
||||
mountPoint = 10;
|
||||
|
||||
projectile = BomberBomb;
|
||||
projectileType = BombProjectile;
|
||||
usesEnergy = true;
|
||||
useMountEnergy = true;
|
||||
useCapacitor = true;
|
||||
|
||||
fireEnergy = 53.0;
|
||||
minEnergy = 53.0;
|
||||
|
||||
|
||||
stateName[0] = "Activate";
|
||||
stateTransitionOnTimeout[0] = "WaitFire1";
|
||||
stateTimeoutValue[0] = 0.5;
|
||||
stateSequence[0] = "Activate";
|
||||
|
||||
stateName[1] = "WaitFire1";
|
||||
stateTransitionOnTriggerDown[1] = "Fire1";
|
||||
stateTransitionOnNoAmmo[1] = "NoAmmo1";
|
||||
|
||||
stateName[2] = "Fire1";
|
||||
stateTransitionOnTimeout[2] = "Reload1";
|
||||
stateTimeoutValue[2] = 0.32;
|
||||
stateFire[2] = true;
|
||||
stateAllowImageChange[2] = false;
|
||||
stateSequence[2] = "Fire";
|
||||
stateScript[2] = "onFire";
|
||||
stateSound[2] = BomberBombFireSound;
|
||||
|
||||
stateName[3] = "Reload1";
|
||||
stateSequence[3] = "Reload";
|
||||
stateTimeoutValue[3] = 0.1;
|
||||
stateAllowImageChange[3] = false;
|
||||
stateTransitionOnTimeout[3] = "WaitFire2";
|
||||
stateTransitionOnNoAmmo[3] = "NoAmmo1";
|
||||
|
||||
stateName[4] = "NoAmmo1";
|
||||
stateTransitionOnAmmo[4] = "Reload1";
|
||||
// ---------------------------------------------
|
||||
// z0dd - ZOD, 5/8/02. Incorrect parameter value
|
||||
//stateSequence[4] = "NoAmmo";
|
||||
stateSequence[4] = "NoAmmo1";
|
||||
|
||||
stateTransitionOnTriggerDown[4] = "DryFire1";
|
||||
|
||||
stateName[5] = "DryFire1";
|
||||
stateSound[5] = BomberBombDryFireSound;
|
||||
stateTimeoutValue[5] = 0.5;
|
||||
stateTransitionOnTimeout[5] = "NoAmmo1";
|
||||
|
||||
stateName[6] = "WaitFire2";
|
||||
stateTransitionOnTriggerDown[6] = "Fire2";
|
||||
// ---------------------------------------------
|
||||
// z0dd - ZOD, 5/8/02. Incorrect parameter value
|
||||
//stateTransitionOnNoAmmo[6] = "NoAmmo";
|
||||
stateTransitionOnNoAmmo[6] = "NoAmmo2";
|
||||
|
||||
stateName[7] = "Fire2";
|
||||
stateTransitionOnTimeout[7] = "Reload2";
|
||||
stateTimeoutValue[7] = 0.32;
|
||||
stateScript[7] = "FirePair";
|
||||
|
||||
stateName[8] = "Reload2";
|
||||
stateSequence[8] = "Reload";
|
||||
stateTimeoutValue[8] = 0.1;
|
||||
stateAllowImageChange[8] = false;
|
||||
stateTransitionOnTimeout[8] = "WaitFire1";
|
||||
stateTransitionOnNoAmmo[8] = "NoAmmo2";
|
||||
|
||||
stateName[9] = "NoAmmo2";
|
||||
stateTransitionOnAmmo[9] = "Reload2";
|
||||
// ---------------------------------------------
|
||||
// z0dd - ZOD, 5/8/02. Incorrect parameter value
|
||||
//stateSequence[9] = "NoAmmo";
|
||||
stateSequence[9] = "NoAmmo2";
|
||||
|
||||
stateTransitionOnTriggerDown[9] = "DryFire2";
|
||||
|
||||
stateName[10] = "DryFire2";
|
||||
stateSound[10] = BomberBombDryFireSound;
|
||||
stateTimeoutValue[10] = 0.5;
|
||||
stateTransitionOnTimeout[10] = "NoAmmo2";
|
||||
};
|
||||
|
||||
datablock TurretImageData(BomberBombPairImage)
|
||||
{
|
||||
shapeFile = "turret_muzzlepoint.dts";
|
||||
offset = "-2 -4 -0.5";
|
||||
mountPoint = 10;
|
||||
|
||||
projectile = BomberBomb;
|
||||
projectileType = BombProjectile;
|
||||
usesEnergy = true;
|
||||
useMountEnergy = true;
|
||||
useCapacitor = true;
|
||||
fireEnergy = 53.0;
|
||||
minEnergy = 53.0;
|
||||
|
||||
stateName[0] = "WaitFire";
|
||||
stateTransitionOnTriggerDown[0] = "Fire";
|
||||
|
||||
stateName[1] = "Fire";
|
||||
stateTransitionOnTimeout[1] = "StopFire";
|
||||
stateTimeoutValue[1] = 0.13;
|
||||
stateFire[1] = true;
|
||||
stateAllowImageChange[1] = false;
|
||||
stateSequence[1] = "Fire";
|
||||
stateScript[1] = "onFire";
|
||||
stateSound[1] = BomberBombFireSound;
|
||||
|
||||
stateName[2] = "StopFire";
|
||||
stateTimeoutValue[2] = 0.1;
|
||||
stateTransitionOnTimeout[2] = "WaitFire";
|
||||
stateScript[2] = "stopFire";
|
||||
|
||||
};
|
||||
|
||||
//**************************************************************
|
||||
// WEAPONS SPECIAL EFFECTS
|
||||
//**************************************************************
|
||||
|
||||
//-------------------------------------
|
||||
// BOMBER BELLY TURRET GUN (explosion)
|
||||
//-------------------------------------
|
||||
|
||||
datablock ParticleData(FusionExplosionParticle)
|
||||
{
|
||||
dragCoefficient = 2;
|
||||
gravityCoefficient = 0.2;
|
||||
inheritedVelFactor = 0.2;
|
||||
constantAcceleration = 0.0;
|
||||
lifetimeMS = 750;
|
||||
lifetimeVarianceMS = 150;
|
||||
textureName = "particleTest";
|
||||
colors[0] = "0.56 0.36 0.26 1.0";
|
||||
colors[1] = "0.56 0.36 0.26 0.0";
|
||||
sizes[0] = 1;
|
||||
sizes[1] = 2;
|
||||
};
|
||||
|
||||
datablock ParticleEmitterData(FusionExplosionEmitter)
|
||||
{
|
||||
ejectionPeriodMS = 7;
|
||||
periodVarianceMS = 0;
|
||||
ejectionVelocity = 12;
|
||||
velocityVariance = 1.75;
|
||||
ejectionOffset = 0.0;
|
||||
thetaMin = 0;
|
||||
thetaMax = 60;
|
||||
phiReferenceVel = 0;
|
||||
phiVariance = 360;
|
||||
overrideAdvances = false;
|
||||
particles = "FusionExplosionParticle";
|
||||
};
|
||||
|
||||
datablock ExplosionData(FusionBoltExplosion)
|
||||
{
|
||||
explosionShape = "effect_plasma_explosion.dts";
|
||||
soundProfile = FusionExpSound;
|
||||
particleEmitter = FusionExplosionEmitter;
|
||||
particleDensity = 250;
|
||||
particleRadius = 1.25;
|
||||
faceViewer = true;
|
||||
};
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
// BOMBER TARGETING LASER
|
||||
//--------------------------------------------------------------------------
|
||||
|
||||
datablock AudioProfile(BomberTargetingSwitchSound)
|
||||
{
|
||||
filename = "fx/weapons/generic_switch.wav";
|
||||
description = AudioClosest3d;
|
||||
preload = true;
|
||||
};
|
||||
|
||||
datablock AudioProfile(BomberTargetingPaintSound)
|
||||
{
|
||||
filename = "fx/weapons/targetinglaser_paint.wav";
|
||||
description = CloseLooping3d;
|
||||
preload = true;
|
||||
};
|
||||
|
||||
//--------------------------------------
|
||||
// BOMBER TARGETING PROJECTILE
|
||||
//--------------------------------------
|
||||
datablock TargetProjectileData(BomberTargeter)
|
||||
{
|
||||
directDamage = 0.0;
|
||||
hasDamageRadius = false;
|
||||
indirectDamage = 0.0;
|
||||
damageRadius = 0.0;
|
||||
velInheritFactor = 1.0;
|
||||
|
||||
maxRifleRange = 1000;
|
||||
beamColor = "0.1 1.0 0.1";
|
||||
|
||||
startBeamWidth = 0.20;
|
||||
pulseBeamWidth = 0.15;
|
||||
beamFlareAngle = 3.0;
|
||||
minFlareSize = 0.0;
|
||||
maxFlareSize = 400.0;
|
||||
pulseSpeed = 6.0;
|
||||
pulseLength = 0.150;
|
||||
|
||||
textureName[0] = "special/nonlingradient";
|
||||
textureName[1] = "special/flare";
|
||||
textureName[2] = "special/pulse";
|
||||
textureName[3] = "special/expFlare";
|
||||
};
|
||||
|
||||
//-------------------------------------
|
||||
// BOMBER TARGETING CHARACTERISTICS
|
||||
//-------------------------------------
|
||||
datablock ShapeBaseImageData(BomberTargetingImage)
|
||||
{
|
||||
className = WeaponImage;
|
||||
|
||||
shapeFile = "turret_muzzlepoint.dts";
|
||||
offset = "0 -0.04 -0.01";
|
||||
mountPoint = 2;
|
||||
|
||||
projectile = BomberTargeter;
|
||||
projectileType = TargetProjectile;
|
||||
deleteLastProjectile = true;
|
||||
|
||||
usesEnergy = true;
|
||||
minEnergy = 3;
|
||||
|
||||
stateName[0] = "Activate";
|
||||
stateSequence[0] = "Activate";
|
||||
stateSound[0] = BomberTargetingSwitchSound;
|
||||
stateTimeoutValue[0] = 0.5;
|
||||
stateTransitionOnTimeout[0] = "ActivateReady";
|
||||
|
||||
stateName[1] = "ActivateReady";
|
||||
stateTransitionOnAmmo[1] = "Ready";
|
||||
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
||||
|
||||
stateName[2] = "Ready";
|
||||
stateTransitionOnNoAmmo[2] = "NoAmmo";
|
||||
stateTransitionOnTriggerDown[2] = "Fire";
|
||||
|
||||
stateName[3] = "Fire";
|
||||
stateEnergyDrain[3] = 3;
|
||||
stateFire[3] = true;
|
||||
stateAllowImageChange[3] = false;
|
||||
stateScript[3] = "onFire";
|
||||
stateTransitionOnTriggerUp[3] = "Deconstruction";
|
||||
stateTransitionOnNoAmmo[3] = "Deconstruction";
|
||||
stateSound[3] = BomberTargetingPaintSound;
|
||||
|
||||
stateName[4] = "NoAmmo";
|
||||
stateTransitionOnAmmo[4] = "Ready";
|
||||
|
||||
stateName[5] = "Deconstruction";
|
||||
stateTransitionOnTimeout[5] = "ActivateReady";
|
||||
stateTimeoutValue[5] = 0.05;
|
||||
};
|
||||
|
||||
function BomberTargetingImage::onFire(%data,%obj,%slot)
|
||||
{
|
||||
%bomber = %obj.getObjectMount();
|
||||
if(%bomber.beacon)
|
||||
{
|
||||
%bomber.beacon.delete();
|
||||
%bomber.beacon = "";
|
||||
}
|
||||
%p = Parent::onFire(%data, %obj, %slot);
|
||||
%p.setTarget(%obj.team);
|
||||
}
|
||||
|
||||
function BomberTargetingImage::deconstruct(%data, %obj, %slot)
|
||||
{
|
||||
%pos = %obj.lastProjectile.getTargetPoint();
|
||||
%bomber = %obj.getObjectMount();
|
||||
|
||||
if(%bomber.beacon)
|
||||
{
|
||||
%bomber.beacon.delete();
|
||||
%bomber.beacon = "";
|
||||
}
|
||||
%bomber.beacon = new BeaconObject() {
|
||||
dataBlock = "BomberBeacon";
|
||||
beaconType = "vehicle";
|
||||
position = %pos;
|
||||
};
|
||||
|
||||
%bomber.beacon.playThread($AmbientThread, "ambient");
|
||||
%bomber.beacon.team = %bomber.team;
|
||||
%bomber.beacon.sourceObject = %bomber;
|
||||
|
||||
// give it a team target
|
||||
%bomber.beacon.setTarget(%bomber.team);
|
||||
MissionCleanup.add(%bomber.beacon);
|
||||
|
||||
Parent::deconstruct(%data, %obj, %slot);
|
||||
}
|
||||
|
||||
//-------------------------------------
|
||||
// BOMBER BEACON
|
||||
//-------------------------------------
|
||||
datablock StaticShapeData(BomberBeacon)
|
||||
{
|
||||
shapeFile = "turret_muzzlepoint.dts";
|
||||
targetNameTag = 'beacon';
|
||||
isInvincible = true;
|
||||
|
||||
dynamicType = $TypeMasks::SensorObjectType;
|
||||
};
|
||||
226
docs/base/@vl2/scripts.vl2/scripts/vehicles/vehicle_havoc.cs
Normal file
226
docs/base/@vl2/scripts.vl2/scripts/vehicles/vehicle_havoc.cs
Normal file
|
|
@ -0,0 +1,226 @@
|
|||
//**************************************************************
|
||||
// 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 = 0.8;
|
||||
energyPerDamagePoint = 200;
|
||||
maxEnergy = 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 = 6000; // Horizontal jets
|
||||
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 = 71; // speed in which forward thrust force is no longer applied (meters/second)
|
||||
|
||||
// Turbo Jet
|
||||
jetForce = 5000;
|
||||
minJetEnergy = 55;
|
||||
jetEnergyDrain = 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;
|
||||
|
||||
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
|
||||
//**************************************************************
|
||||
|
||||
|
||||
|
||||
304
docs/base/@vl2/scripts.vl2/scripts/vehicles/vehicle_mpb.cs
Normal file
304
docs/base/@vl2/scripts.vl2/scripts/vehicles/vehicle_mpb.cs
Normal file
|
|
@ -0,0 +1,304 @@
|
|||
//**************************************************************
|
||||
// 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.0";
|
||||
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 = 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;
|
||||
|
||||
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;
|
||||
};
|
||||
|
||||
|
||||
|
||||
341
docs/base/@vl2/scripts.vl2/scripts/vehicles/vehicle_shrike.cs
Normal file
341
docs/base/@vl2/scripts.vl2/scripts/vehicles/vehicle_shrike.cs
Normal file
|
|
@ -0,0 +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 = 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;
|
||||
};
|
||||
1340
docs/base/@vl2/scripts.vl2/scripts/vehicles/vehicle_spec_fx.cs
Normal file
1340
docs/base/@vl2/scripts.vl2/scripts/vehicles/vehicle_spec_fx.cs
Normal file
File diff suppressed because it is too large
Load diff
681
docs/base/@vl2/scripts.vl2/scripts/vehicles/vehicle_tank.cs
Normal file
681
docs/base/@vl2/scripts.vl2/scripts/vehicles/vehicle_tank.cs
Normal file
|
|
@ -0,0 +1,681 @@
|
|||
//**************************************************************
|
||||
// BEOWULF ASSAULT VEHICLE
|
||||
//**************************************************************
|
||||
//**************************************************************
|
||||
// SOUNDS
|
||||
//**************************************************************
|
||||
datablock EffectProfile(AssaultVehicleEngineEffect)
|
||||
{
|
||||
effectname = "vehicles/tank_engine";
|
||||
minDistance = 5.0;
|
||||
maxDistance = 10.0;
|
||||
};
|
||||
|
||||
datablock EffectProfile(AssaultVehicleThrustEffect)
|
||||
{
|
||||
effectname = "vehicles/tank_boost";
|
||||
minDistance = 5.0;
|
||||
maxDistance = 10.0;
|
||||
};
|
||||
|
||||
datablock EffectProfile(AssaultTurretActivateEffect)
|
||||
{
|
||||
effectname = "vehicles/tank_activate";
|
||||
minDistance = 5.0;
|
||||
maxDistance = 10.0;
|
||||
};
|
||||
|
||||
datablock EffectProfile(AssaultMortarDryFireEffect)
|
||||
{
|
||||
effectname = "weapons/mortar_dryfire";
|
||||
minDistance = 5.0;
|
||||
maxDistance = 10.0;
|
||||
};
|
||||
|
||||
datablock EffectProfile(AssaultMortarFireEffect)
|
||||
{
|
||||
effectname = "vehicles/tank_mortar_fire";
|
||||
minDistance = 5.0;
|
||||
maxDistance = 10.0;
|
||||
};
|
||||
|
||||
datablock EffectProfile(AssaultMortarReloadEffect)
|
||||
{
|
||||
effectname = "weapons/mortar_reload";
|
||||
minDistance = 5.0;
|
||||
maxDistance = 10.0;
|
||||
};
|
||||
|
||||
datablock EffectProfile(AssaultChaingunFireEffect)
|
||||
{
|
||||
effectname = "weapons/chaingun_fire";
|
||||
minDistance = 5.0;
|
||||
maxDistance = 10.0;
|
||||
};
|
||||
|
||||
datablock AudioProfile(AssaultVehicleSkid)
|
||||
{
|
||||
filename = "fx/vehicles/tank_skid.wav";
|
||||
description = ClosestLooping3d;
|
||||
preload = true;
|
||||
};
|
||||
|
||||
datablock AudioProfile(AssaultVehicleEngineSound)
|
||||
{
|
||||
filename = "fx/vehicles/tank_engine.wav";
|
||||
description = AudioDefaultLooping3d;
|
||||
preload = true;
|
||||
effect = AssaultVehicleEngineEffect;
|
||||
};
|
||||
|
||||
datablock AudioProfile(AssaultVehicleThrustSound)
|
||||
{
|
||||
filename = "fx/vehicles/tank_boost.wav";
|
||||
description = AudioDefaultLooping3d;
|
||||
preload = true;
|
||||
effect = AssaultVehicleThrustEffect;
|
||||
};
|
||||
|
||||
datablock AudioProfile(AssaultChaingunFireSound)
|
||||
{
|
||||
filename = "fx/vehicles/tank_chaingun.wav";
|
||||
description = AudioDefaultLooping3d;
|
||||
preload = true;
|
||||
effect = AssaultChaingunFireEffect;
|
||||
};
|
||||
|
||||
datablock AudioProfile(AssaultChaingunReloadSound)
|
||||
{
|
||||
filename = "fx/weapons/chaingun_dryfire.wav";
|
||||
description = AudioClose3d;
|
||||
preload = true;
|
||||
};
|
||||
|
||||
datablock AudioProfile(TankChaingunProjectile)
|
||||
{
|
||||
filename = "fx/weapons/chaingun_projectile.wav";
|
||||
description = ProjectileLooping3d;
|
||||
preload = true;
|
||||
};
|
||||
|
||||
datablock AudioProfile(AssaultTurretActivateSound)
|
||||
{
|
||||
filename = "fx/vehicles/tank_activate.wav";
|
||||
description = AudioClose3d;
|
||||
preload = true;
|
||||
effect = AssaultTurretActivateEffect;
|
||||
};
|
||||
|
||||
datablock AudioProfile(AssaultChaingunDryFireSound)
|
||||
{
|
||||
filename = "fx/weapons/chaingun_dryfire.wav";
|
||||
description = AudioClose3d;
|
||||
preload = true;
|
||||
};
|
||||
|
||||
datablock AudioProfile(AssaultChaingunIdleSound)
|
||||
{
|
||||
filename = "fx/misc/diagnostic_on.wav";
|
||||
description = ClosestLooping3d;
|
||||
preload = true;
|
||||
};
|
||||
|
||||
datablock AudioProfile(AssaultMortarDryFireSound)
|
||||
{
|
||||
filename = "fx/weapons/mortar_dryfire.wav";
|
||||
description = AudioClose3d;
|
||||
preload = true;
|
||||
effect = AssaultMortarDryFireEffect;
|
||||
};
|
||||
|
||||
datablock AudioProfile(AssaultMortarFireSound)
|
||||
{
|
||||
filename = "fx/vehicles/tank_mortar_fire.wav";
|
||||
description = AudioClose3d;
|
||||
preload = true;
|
||||
effect = AssaultMortarFireEffect;
|
||||
};
|
||||
|
||||
datablock AudioProfile(AssaultMortarReloadSound)
|
||||
{
|
||||
filename = "fx/weapons/mortar_reload.wav";
|
||||
description = AudioClose3d;
|
||||
preload = true;
|
||||
effect = AssaultMortarReloadEffect;
|
||||
};
|
||||
|
||||
datablock AudioProfile(AssaultMortarIdleSound)
|
||||
{
|
||||
filename = "fx/misc/diagnostic_on.wav";
|
||||
description = ClosestLooping3d;
|
||||
preload = true;
|
||||
};
|
||||
|
||||
//**************************************************************
|
||||
// LIGHTS
|
||||
//**************************************************************
|
||||
datablock RunningLightData(TankLight1)
|
||||
{
|
||||
radius = 1.5;
|
||||
color = "1.0 1.0 1.0 0.2";
|
||||
nodeName = "Headlight_node01";
|
||||
direction = "0.0 1.0 0.0";
|
||||
texture = "special/headlight4";
|
||||
};
|
||||
|
||||
datablock RunningLightData(TankLight2)
|
||||
{
|
||||
radius = 1.5;
|
||||
color = "1.0 1.0 1.0 0.2";
|
||||
nodeName = "Headlight_node02";
|
||||
direction = "0.0 1.0 0.0";
|
||||
texture = "special/headlight4";
|
||||
};
|
||||
|
||||
datablock RunningLightData(TankLight3)
|
||||
{
|
||||
radius = 1.5;
|
||||
color = "1.0 1.0 1.0 0.2";
|
||||
nodeName = "Headlight_node03";
|
||||
direction = "0.0 1.0 0.0";
|
||||
texture = "special/headlight4";
|
||||
};
|
||||
|
||||
datablock RunningLightData(TankLight4)
|
||||
{
|
||||
radius = 1.5;
|
||||
color = "1.0 1.0 1.0 0.2";
|
||||
nodeName = "Headlight_node04";
|
||||
direction = "0.0 1.0 0.0";
|
||||
texture = "special/headlight4";
|
||||
};
|
||||
|
||||
//**************************************************************
|
||||
// VEHICLE CHARACTERISTICS
|
||||
//**************************************************************
|
||||
|
||||
datablock HoverVehicleData(AssaultVehicle) : TankDamageProfile
|
||||
{
|
||||
spawnOffset = "0 0 4";
|
||||
|
||||
floatingGravMag = 4.5;
|
||||
|
||||
catagory = "Vehicles";
|
||||
shapeFile = "vehicle_grav_tank.dts";
|
||||
multipassenger = true;
|
||||
computeCRC = true;
|
||||
renderWhenDestroyed = false;
|
||||
|
||||
weaponNode = 1;
|
||||
|
||||
debrisShapeName = "vehicle_land_assault_debris.dts";
|
||||
debris = ShapeDebris;
|
||||
|
||||
drag = 0.0;
|
||||
density = 0.9;
|
||||
|
||||
mountPose[0] = sitting;
|
||||
mountPose[1] = sitting;
|
||||
numMountPoints = 2;
|
||||
isProtectedMountPoint[0] = true;
|
||||
isProtectedMountPoint[1] = true;
|
||||
|
||||
cameraMaxDist = 20;
|
||||
cameraOffset = 3;
|
||||
cameraLag = 1.5;
|
||||
explosion = LargeGroundVehicleExplosion;
|
||||
explosionDamage = 0.5;
|
||||
explosionRadius = 5.0;
|
||||
|
||||
maxSteeringAngle = 0.5; // 20 deg.
|
||||
|
||||
maxDamage = 3.15;
|
||||
destroyedLevel = 3.15;
|
||||
|
||||
isShielded = true;
|
||||
rechargeRate = 1.0;
|
||||
energyPerDamagePoint = 135;
|
||||
maxEnergy = 400;
|
||||
minJetEnergy = 15;
|
||||
jetEnergyDrain = 2.0;
|
||||
|
||||
// Rigid Body
|
||||
mass = 1500;
|
||||
bodyFriction = 0.8;
|
||||
bodyRestitution = 0.5;
|
||||
minRollSpeed = 3;
|
||||
gyroForce = 400;
|
||||
gyroDamping = 0.3;
|
||||
stabilizerForce = 20;
|
||||
minDrag = 10;
|
||||
softImpactSpeed = 15; // Play SoftImpact Sound
|
||||
hardImpactSpeed = 18; // Play HardImpact Sound
|
||||
|
||||
// Ground Impact Damage (uses DamageType::Ground)
|
||||
minImpactSpeed = 17;
|
||||
speedDamageScale = 0.060;
|
||||
|
||||
// Object Impact Damage (uses DamageType::Impact)
|
||||
collDamageThresholdVel = 18;
|
||||
collDamageMultiplier = 0.045;
|
||||
|
||||
dragForce = 40 / 20;
|
||||
vertFactor = 0.0;
|
||||
floatingThrustFactor = 0.15;
|
||||
|
||||
mainThrustForce = 50;
|
||||
reverseThrustForce = 40;
|
||||
strafeThrustForce = 40;
|
||||
turboFactor = 1.7;
|
||||
|
||||
brakingForce = 25;
|
||||
brakingActivationSpeed = 4;
|
||||
|
||||
stabLenMin = 3.25;
|
||||
stabLenMax = 4;
|
||||
stabSpringConstant = 50;
|
||||
stabDampingConstant = 20;
|
||||
|
||||
gyroDrag = 20;
|
||||
normalForce = 20;
|
||||
restorativeForce = 10;
|
||||
steeringForce = 15;
|
||||
rollForce = 5;
|
||||
pitchForce = 3;
|
||||
|
||||
dustEmitter = TankDustEmitter;
|
||||
triggerDustHeight = 3.5;
|
||||
dustHeight = 1.0;
|
||||
dustTrailEmitter = TireEmitter;
|
||||
dustTrailOffset = "0.0 -1.0 0.5";
|
||||
triggerTrailHeight = 3.6;
|
||||
dustTrailFreqMod = 15.0;
|
||||
|
||||
jetSound = AssaultVehicleThrustSound;
|
||||
engineSound = AssaultVehicleEngineSound;
|
||||
floatSound = AssaultVehicleSkid;
|
||||
softImpactSound = GravSoftImpactSound;
|
||||
hardImpactSound = HardImpactSound;
|
||||
wheelImpactSound = WheelImpactSound;
|
||||
|
||||
forwardJetEmitter = TankJetEmitter;
|
||||
|
||||
//
|
||||
softSplashSoundVelocity = 5.0;
|
||||
mediumSplashSoundVelocity = 10.0;
|
||||
hardSplashSoundVelocity = 15.0;
|
||||
exitSplashSoundVelocity = 10.0;
|
||||
|
||||
exitingWater = VehicleExitWaterMediumSound;
|
||||
impactWaterEasy = VehicleImpactWaterSoftSound;
|
||||
impactWaterMedium = VehicleImpactWaterMediumSound;
|
||||
impactWaterHard = VehicleImpactWaterMediumSound;
|
||||
waterWakeSound = VehicleWakeMediumSplashSound;
|
||||
|
||||
minMountDist = 4;
|
||||
|
||||
damageEmitter[0] = SmallLightDamageSmoke;
|
||||
damageEmitter[1] = SmallHeavyDamageSmoke;
|
||||
damageEmitter[2] = DamageBubbles;
|
||||
damageEmitterOffset[0] = "0.0 -1.5 3.5 ";
|
||||
damageLevelTolerance[0] = 0.3;
|
||||
damageLevelTolerance[1] = 0.7;
|
||||
numDmgEmitterAreas = 1;
|
||||
|
||||
splashEmitter[0] = VehicleFoamDropletsEmitter;
|
||||
splashEmitter[1] = VehicleFoamEmitter;
|
||||
|
||||
shieldImpact = VehicleShieldImpact;
|
||||
|
||||
cmdCategory = "Tactical";
|
||||
cmdIcon = CMDGroundTankIcon;
|
||||
cmdMiniIconName = "commander/MiniIcons/com_tank_grey";
|
||||
targetNameTag = 'Beowulf';
|
||||
targetTypeTag = 'Assault Tank';
|
||||
sensorData = VehiclePulseSensor;
|
||||
|
||||
checkRadius = 5.5535;
|
||||
observeParameters = "1 10 10";
|
||||
runningLight[0] = TankLight1;
|
||||
runningLight[1] = TankLight2;
|
||||
runningLight[2] = TankLight3;
|
||||
runningLight[3] = TankLight4;
|
||||
shieldEffectScale = "0.9 1.0 0.6";
|
||||
showPilotInfo = 1;
|
||||
};
|
||||
|
||||
//**************************************************************
|
||||
// WEAPONS
|
||||
//**************************************************************
|
||||
|
||||
//-------------------------------------
|
||||
// ASSAULT CHAINGUN (projectile)
|
||||
//-------------------------------------
|
||||
|
||||
datablock TracerProjectileData(AssaultChaingunBullet)
|
||||
{
|
||||
doDynamicClientHits = true;
|
||||
|
||||
projectileShapeName = "";
|
||||
directDamage = 0.16;
|
||||
directDamageType = $DamageType::TankChaingun;
|
||||
hasDamageRadius = false;
|
||||
splash = ChaingunSplash;
|
||||
|
||||
kickbackstrength = 0.0;
|
||||
sound = TankChaingunProjectile;
|
||||
|
||||
dryVelocity = 425.0;
|
||||
wetVelocity = 100.0;
|
||||
velInheritFactor = 1.0;
|
||||
fizzleTimeMS = 3000;
|
||||
lifetimeMS = 3000;
|
||||
explodeOnDeath = false;
|
||||
reflectOnWaterImpactAngle = 0.0;
|
||||
explodeOnWaterImpact = false;
|
||||
deflectionOnWaterImpact = 0.0;
|
||||
fizzleUnderwaterMS = 3000;
|
||||
|
||||
tracerLength = 15.0;
|
||||
tracerAlpha = false;
|
||||
tracerMinPixels = 6;
|
||||
tracerColor = 211.0/255.0 @ " " @ 215.0/255.0 @ " " @ 120.0/255.0 @ " 0.75";
|
||||
tracerTex[0] = "special/tracer00";
|
||||
tracerTex[1] = "special/tracercross";
|
||||
tracerWidth = 0.10;
|
||||
crossSize = 0.20;
|
||||
crossViewAng = 0.990;
|
||||
renderCross = true;
|
||||
|
||||
decalData[0] = ChaingunDecal1;
|
||||
decalData[1] = ChaingunDecal2;
|
||||
decalData[2] = ChaingunDecal3;
|
||||
decalData[3] = ChaingunDecal4;
|
||||
decalData[4] = ChaingunDecal5;
|
||||
decalData[5] = ChaingunDecal6;
|
||||
|
||||
activateDelayMS = 100;
|
||||
|
||||
explosion = ChaingunExplosion;
|
||||
};
|
||||
|
||||
//-------------------------------------
|
||||
// ASSAULT CHAINGUN CHARACTERISTICS
|
||||
//-------------------------------------
|
||||
|
||||
datablock TurretData(AssaultPlasmaTurret) : TurretDamageProfile
|
||||
{
|
||||
className = VehicleTurret;
|
||||
catagory = "Turrets";
|
||||
shapeFile = "Turret_tank_base.dts";
|
||||
preload = true;
|
||||
|
||||
mass = 1.0; // Not really relevant
|
||||
|
||||
maxEnergy = 1;
|
||||
maxDamage = AssaultVehicle.maxDamage;
|
||||
destroyedLevel = AssaultVehicle.destroyedLevel;
|
||||
repairRate = 0;
|
||||
|
||||
// capacitor
|
||||
maxCapacitorEnergy = 250;
|
||||
capacitorRechargeRate = 1.0;
|
||||
|
||||
thetaMin = 0;
|
||||
thetaMax = 100;
|
||||
|
||||
inheritEnergyFromMount = true;
|
||||
firstPersonOnly = true;
|
||||
useEyePoint = true;
|
||||
numWeapons = 2;
|
||||
|
||||
cameraDefaultFov = 90.0;
|
||||
cameraMinFov = 5.0;
|
||||
cameraMaxFov = 120.0;
|
||||
|
||||
targetNameTag = 'Beowulf Chaingun';
|
||||
targetTypeTag = 'Turret';
|
||||
};
|
||||
|
||||
datablock TurretImageData(AssaultPlasmaTurretBarrel)
|
||||
{
|
||||
shapeFile = "turret_tank_barrelchain.dts";
|
||||
mountPoint = 1;
|
||||
|
||||
projectile = AssaultChaingunBullet;
|
||||
projectileType = TracerProjectile;
|
||||
|
||||
casing = ShellDebris;
|
||||
shellExitDir = "1.0 0.3 1.0";
|
||||
shellExitOffset = "0.15 -0.56 -0.1";
|
||||
shellExitVariance = 15.0;
|
||||
shellVelocity = 3.0;
|
||||
|
||||
projectileSpread = 12.0 / 1000.0;
|
||||
|
||||
useCapacitor = true;
|
||||
usesEnergy = true;
|
||||
useMountEnergy = true;
|
||||
fireEnergy = 7.5;
|
||||
minEnergy = 15.0;
|
||||
|
||||
// Turret parameters
|
||||
activationMS = 4000;
|
||||
deactivateDelayMS = 500;
|
||||
thinkTimeMS = 200;
|
||||
degPerSecTheta = 360;
|
||||
degPerSecPhi = 360;
|
||||
attackRadius = 75;
|
||||
|
||||
// State transitions
|
||||
stateName[0] = "Activate";
|
||||
stateTransitionOnNotLoaded[0] = "Dead";
|
||||
stateTransitionOnLoaded[0] = "ActivateReady";
|
||||
stateSound[0] = AssaultTurretActivateSound;
|
||||
|
||||
stateName[1] = "ActivateReady";
|
||||
stateSequence[1] = "Activate";
|
||||
stateSound[1] = AssaultTurretActivateSound;
|
||||
stateTimeoutValue[1] = 1;
|
||||
stateTransitionOnTimeout[1] = "Ready";
|
||||
stateTransitionOnNotLoaded[1] = "Deactivate";
|
||||
|
||||
stateName[2] = "Ready";
|
||||
stateTransitionOnNotLoaded[2] = "Deactivate";
|
||||
stateTransitionOnTriggerDown[2] = "Fire";
|
||||
stateTransitionOnNoAmmo[2] = "NoAmmo";
|
||||
|
||||
stateName[3] = "Fire";
|
||||
stateSequence[3] = "Fire";
|
||||
stateSequenceRandomFlash[3] = true;
|
||||
stateFire[3] = true;
|
||||
stateAllowImageChange[3] = false;
|
||||
stateSound[3] = AssaultChaingunFireSound;
|
||||
stateScript[3] = "onFire";
|
||||
stateTimeoutValue[3] = 0.1;
|
||||
stateTransitionOnTimeout[3] = "Fire";
|
||||
stateTransitionOnTriggerUp[3] = "Reload";
|
||||
stateTransitionOnNoAmmo[3] = "noAmmo";
|
||||
|
||||
stateName[4] = "Reload";
|
||||
stateSequence[4] = "Reload";
|
||||
stateTimeoutValue[4] = 0.1;
|
||||
stateAllowImageChange[4] = false;
|
||||
stateTransitionOnTimeout[4] = "Ready";
|
||||
stateTransitionOnNoAmmo[4] = "NoAmmo";
|
||||
stateWaitForTimeout[4] = true;
|
||||
|
||||
stateName[5] = "Deactivate";
|
||||
stateSequence[5] = "Activate";
|
||||
stateDirection[5] = false;
|
||||
stateTimeoutValue[5] = 30;
|
||||
stateTransitionOnTimeout[5] = "ActivateReady";
|
||||
|
||||
stateName[6] = "Dead";
|
||||
stateTransitionOnLoaded[6] = "ActivateReady";
|
||||
stateTransitionOnTriggerDown[6] = "DryFire";
|
||||
|
||||
stateName[7] = "DryFire";
|
||||
stateSound[7] = AssaultChaingunDryFireSound;
|
||||
stateTimeoutValue[7] = 0.5;
|
||||
stateTransitionOnTimeout[7] = "NoAmmo";
|
||||
|
||||
stateName[8] = "NoAmmo";
|
||||
stateTransitionOnAmmo[8] = "Reload";
|
||||
stateSequence[8] = "NoAmmo";
|
||||
stateTransitionOnTriggerDown[8] = "DryFire";
|
||||
|
||||
};
|
||||
|
||||
//-------------------------------------
|
||||
// ASSAULT MORTAR (projectile)
|
||||
//-------------------------------------
|
||||
|
||||
datablock ItemData(AssaultMortarAmmo)
|
||||
{
|
||||
className = Ammo;
|
||||
catagory = "Ammo";
|
||||
shapeFile = "repair_kit.dts";
|
||||
mass = 1;
|
||||
elasticity = 0.5;
|
||||
friction = 0.6;
|
||||
pickupRadius = 1;
|
||||
|
||||
computeCRC = true;
|
||||
};
|
||||
|
||||
datablock GrenadeProjectileData(AssaultMortar)
|
||||
{
|
||||
projectileShapeName = "mortar_projectile.dts";
|
||||
emitterDelay = -1;
|
||||
directDamage = 0.0;
|
||||
hasDamageRadius = true;
|
||||
indirectDamage = 1.0;
|
||||
damageRadius = 25.0;
|
||||
radiusDamageType = $DamageType::TankMortar;
|
||||
kickBackStrength = 2500;
|
||||
|
||||
sound = MortarProjectileSound;
|
||||
explosion = "MortarExplosion";
|
||||
velInheritFactor = 1.0;
|
||||
|
||||
baseEmitter = MortarSmokeEmitter;
|
||||
|
||||
grenadeElasticity = 0.0;
|
||||
grenadeFriction = 0.4;
|
||||
armingDelayMS = 250;
|
||||
muzzleVelocity = 65;
|
||||
drag = 0.1;
|
||||
|
||||
hasLight = true;
|
||||
lightRadius = 4;
|
||||
lightColor = "0.1 0.4 0.1";
|
||||
};
|
||||
|
||||
//-------------------------------------
|
||||
// ASSAULT MORTAR CHARACTERISTICS
|
||||
//-------------------------------------
|
||||
|
||||
datablock TurretImageData(AssaultMortarTurretBarrel)
|
||||
{
|
||||
shapeFile = "turret_tank_barrelmortar.dts";
|
||||
mountPoint = 0;
|
||||
|
||||
// ammo = AssaultMortarAmmo;
|
||||
projectile = AssaultMortar;
|
||||
projectileType = GrenadeProjectile;
|
||||
|
||||
usesEnergy = true;
|
||||
useMountEnergy = true;
|
||||
fireEnergy = 77.00;
|
||||
minEnergy = 77.00;
|
||||
useCapacitor = true;
|
||||
|
||||
// Turret parameters
|
||||
activationMS = 4000;
|
||||
deactivateDelayMS = 1500;
|
||||
thinkTimeMS = 200;
|
||||
degPerSecTheta = 360;
|
||||
degPerSecPhi = 360;
|
||||
attackRadius = 75;
|
||||
|
||||
// State transitions
|
||||
stateName[0] = "Activate";
|
||||
stateTransitionOnNotLoaded[0] = "Dead";
|
||||
stateTransitionOnLoaded[0] = "ActivateReady";
|
||||
|
||||
stateName[1] = "ActivateReady";
|
||||
stateSequence[1] = "Activate";
|
||||
stateSound[1] = AssaultTurretActivateSound;
|
||||
stateTimeoutValue[1] = 1.0;
|
||||
stateTransitionOnTimeout[1] = "Ready";
|
||||
stateTransitionOnNotLoaded[1] = "Deactivate";
|
||||
|
||||
stateName[2] = "Ready";
|
||||
stateTransitionOnNotLoaded[2] = "Deactivate";
|
||||
stateTransitionOnNoAmmo[2] = "NoAmmo";
|
||||
stateTransitionOnTriggerDown[2] = "Fire";
|
||||
|
||||
stateName[3] = "Fire";
|
||||
stateSequence[3] = "Fire";
|
||||
stateTransitionOnTimeout[3] = "Reload";
|
||||
stateTimeoutValue[3] = 1.0;
|
||||
stateFire[3] = true;
|
||||
stateRecoil[3] = LightRecoil;
|
||||
stateAllowImageChange[3] = false;
|
||||
stateSound[3] = AssaultMortarFireSound;
|
||||
stateScript[3] = "onFire";
|
||||
|
||||
stateName[4] = "Reload";
|
||||
stateSequence[4] = "Reload";
|
||||
stateTimeoutValue[4] = 1.0;
|
||||
stateAllowImageChange[4] = false;
|
||||
stateTransitionOnTimeout[4] = "Ready";
|
||||
//stateTransitionOnNoAmmo[4] = "NoAmmo";
|
||||
stateWaitForTimeout[4] = true;
|
||||
|
||||
stateName[5] = "Deactivate";
|
||||
stateDirection[5] = false;
|
||||
stateSequence[5] = "Activate";
|
||||
stateTimeoutValue[5] = 1.0;
|
||||
stateTransitionOnLoaded[5] = "ActivateReady";
|
||||
stateTransitionOnTimeout[5] = "Dead";
|
||||
|
||||
stateName[6] = "Dead";
|
||||
stateTransitionOnLoaded[6] = "ActivateReady";
|
||||
stateTransitionOnTriggerDown[6] = "DryFire";
|
||||
|
||||
stateName[7] = "DryFire";
|
||||
stateSound[7] = AssaultMortarDryFireSound;
|
||||
stateTimeoutValue[7] = 1.0;
|
||||
stateTransitionOnTimeout[7] = "NoAmmo";
|
||||
|
||||
stateName[8] = "NoAmmo";
|
||||
stateSequence[8] = "NoAmmo";
|
||||
stateTransitionOnAmmo[8] = "Reload";
|
||||
stateTransitionOnTriggerDown[8] = "DryFire";
|
||||
};
|
||||
|
||||
datablock TurretImageData(AssaultTurretParam)
|
||||
{
|
||||
mountPoint = 2;
|
||||
shapeFile = "turret_muzzlepoint.dts";
|
||||
|
||||
projectile = AssaultChaingunBullet;
|
||||
projectileType = TracerProjectile;
|
||||
|
||||
useCapacitor = true;
|
||||
usesEnergy = true;
|
||||
|
||||
// Turret parameters
|
||||
activationMS = 1000;
|
||||
deactivateDelayMS = 1500;
|
||||
thinkTimeMS = 200;
|
||||
degPerSecTheta = 500;
|
||||
degPerSecPhi = 500;
|
||||
|
||||
attackRadius = 75;
|
||||
};
|
||||
|
||||
|
||||
|
||||
222
docs/base/@vl2/scripts.vl2/scripts/vehicles/vehicle_wildcat.cs
Normal file
222
docs/base/@vl2/scripts.vl2/scripts/vehicles/vehicle_wildcat.cs
Normal file
|
|
@ -0,0 +1,222 @@
|
|||
//**************************************************************
|
||||
// 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 = 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 = 30;
|
||||
reverseThrustForce = 10;
|
||||
strafeThrustForce = 8;
|
||||
turboFactor = 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;
|
||||
|
||||
checkRadius = 1.7785;
|
||||
observeParameters = "1 10 10";
|
||||
|
||||
runningLight[0] = WildcatLight1;
|
||||
runningLight[1] = WildcatLight2;
|
||||
runningLight[2] = WildcatLight3;
|
||||
|
||||
shieldEffectScale = "0.9375 1.125 0.6";
|
||||
};
|
||||
|
||||
//**************************************************************
|
||||
// WEAPONS
|
||||
//**************************************************************
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue