t2-mapper/docs/base/@vl2/z_DMP2-V0.6.vl2/scripts/zAnomalyGame.cs
2025-11-26 00:00:11 -08:00

4154 lines
No EOL
118 KiB
C#

//Version 1.0
$DamageType::Dark = 201;
$DamageTypeText[$DamageType::Dark] = 'Dark';
$Anomaly::darkWeaponBonus = 200;//bonus points too the team that fires the dark weapon
$Anomaly::dkwUnlockTimeMin = 30;// how long untill the dark weapon is unlocked
$Anomaly::editMode = 0;// stops the main loop form starting to the map can be safely edited
if($Anomaly::editMode){
autoExec("scripts/zAnomalyGame.cs",0,0);
}
$DeathMessageSelfKill[$DamageType::Dark, 0] = '\c0%1 kills %2self with a dark weapon.';
$DeathMessageSelfKill[$DamageType::Dark, 1] = '\c0%1 kills %2self with a dark weapon.';
$DeathMessageSelfKill[$DamageType::Dark, 2] = '\c0%1 kills %2self with a dark weapon.';
$DeathMessageSelfKill[$DamageType::Dark, 3] = '\c0%1 kills %2self with a dark weapon.';
$DeathMessageSelfKill[$DamageType::Dark, 4] = '\c0%1 kills %2self with a dark weapon.';
$DeathMessageTeamKill[$DamageType::Dark, 0] = '\c0%4 kill TEAMMATE %1 with a dark weapon.';
$DeathMessage[$DamageType::Dark, 0] = '\c0%4 kills %1 with dark weapon';
$DeathMessage[$DamageType::Dark, 1] = '\c0%4 kills %1 with dark weapon';
$DeathMessage[$DamageType::Dark, 2] = '\c0%4 kills %1 with dark weapon';
$DeathMessage[$DamageType::Dark, 3] = '\c0%4 kills %1 with dark weapon';
$DeathMessage[$DamageType::Dark, 4] = '\c0%4 kills %1 with dark weapon';
function SimObject::setPosition(%obj, %pos){
%obj.setTransform(%pos SPC getWords(%obj.getTransform(), 3, 6));
}
function darkWpnDmg(){
// // note damage scale for armor is handeld in radius Explosion is why its 1
LightPlayerDamageProfile.damageScale[$DamageType::Dark] = 1;
MediumPlayerDamageProfile.damageScale[$DamageType::Dark] = 1;
HeavyPlayerDamageProfile.damageScale[$DamageType::Dark] = 1;
ShrikeDamageProfile.damageScale[$DamageType::Dark] = 1.25;
ShrikeDamageProfile.shieldDamageScale[$DamageType::Dark] = 1.5;
BomberDamageProfile.damageScale[$DamageType::Dark] = 1;
BomberDamageProfile.shieldDamageScale[$DamageType::Dark] = 1;
HavocDamageProfile.damageScale[$DamageType::Dark] = 1;
HavocDamageProfile.shieldDamageScale[$DamageType::Dark] = 1;
WildcatDamageProfile.damageScale[$DamageType::Dark] = 1.25;
WildcatDamageProfile.shieldDamageScale[$DamageType::Dark] = 2.5;
TankDamageProfile.damageScale[$DamageType::Dark] = 1;
TankDamageProfile.shieldDamageScale[$DamageType::Dark] = 0.8;
MPBDamageProfile.damageScale[$DamageType::Dark] = 1;
MPBDamageProfile.shieldDamageScale[$DamageType::Dark] = 0.8;
TurretDamageProfile.damageScale[$DamageType::Dark] = 1.1;
TurretDamageProfile.shieldDamageScale[$DamageType::Dark] = 1;
StaticShapeDamageProfile.damageScale[$DamageType::Dark] = 1.15;
StaticShapeDamageProfile.shieldDamageScale[$DamageType::Dark] = 1;
////////////////////////////////////////////////////////////////////////////////
}darkWpnDmg();
datablock ParticleData(RedChargedParticle){
windCoefficient = 0.0;
dragCoefficient = 0.0;
gravityCoefficient = 0.0;
inheritedVelFactor = 0.0;
constantAcceleration = 0.0;
lifetimeMS = 10000;
lifetimeVarianceMS = 000;
useInvAlpha = false;
spinRandomMin = -90.0;
spinRandomMax = 50.0;
textureName = "Special/crescent4";
colors[0] = "1.0 0.0 0.0 0.0"; // 0 0.3 0.9 1.0
colors[1] = "1.0 0.0 0.0 1.0"; // 0.0 0.3 0.9 0.2
colors[2] = "0.0 0.0 0.0 0.0"; // 0 0.3 0.9 0.0
sizes[0] = 30.0;
sizes[1] = 30.0;
sizes[2] = 30.0;
times[0] = 0.0;
times[1] = 0.2;
times[2] = 1.0;
};
datablock ParticleEmitterData(RedChargedEmitter){
ejectionPeriodMS = 15;
periodVarianceMS = 0;
ejectionVelocity = 1.01;
velocityVariance = 0.0;
ejectionOffset = 25.0;
thetaMin = 0;
thetaMax = 180;
phiReferenceVel = 0;
phiVariance = 360;
overrideAdvances = false;
orientParticles = true;
lifetimeMS = 1;
particles = "RedChargedParticle";
};
datablock ParticleData(BlueChargedParticle){
windCoefficient = 0.0;
dragCoefficient = 0.0;
gravityCoefficient = 0.0;
inheritedVelFactor = 0.0;
constantAcceleration = 0.0;
lifetimeMS = 10000;
lifetimeVarianceMS = 000;
useInvAlpha = false;
spinRandomMin = -90.0;
spinRandomMax = 50.0;
textureName = "Special/crescent4";
colors[0] = "0.0 0.0 1.0 0.0"; // 0 0.3 0.9 1.0
colors[1] = "0.0 0.0 1.0 1.0"; // 0.0 0.3 0.9 0.2
colors[2] = "0.0 0.0 0.0 0.0"; // 0 0.3 0.9 0.0
sizes[0] = 30.0;
sizes[1] = 30.0;
sizes[2] = 30.0;
times[0] = 0.0;
times[1] = 0.2;
times[2] = 1.0;
};
datablock ParticleEmitterData(BlueChargedEmitter){
ejectionPeriodMS = 15;
periodVarianceMS = 0;
ejectionVelocity = 1.01;
velocityVariance = 0.0;
ejectionOffset = 25.0;
thetaMin = 0;
thetaMax = 180;
phiReferenceVel = 0;
phiVariance = 360;
overrideAdvances = false;
orientParticles = true;
lifetimeMS = 1;
particles = "BlueChargedParticle";
};
datablock ParticleData(DarkParticle){
windCoefficient = 0.0;
dragCoefficient = 0.0;
gravityCoefficient = 0.0;
inheritedVelFactor = 0.0;
constantAcceleration = -3;
lifetimeMS = 5000;
lifetimeVarianceMS = 000;
useInvAlpha = true;
spinRandomMin = -90.0;
spinRandomMax = 50.0;
textureName = "particleTest";
colors[0] = "0.0 0.0 0.0 0.0"; // 0 0.3 0.9 1.0
colors[1] = "0.0 0.0 0.0 1.0"; // 0.0 0.3 0.9 0.2
colors[2] = "0.0 0.0 0.0 0.0"; // 0 0.3 0.9 0.0
sizes[0] = 10.0;
sizes[1] = 10.0;
sizes[2] = 4.0;
times[0] = 0.0;
times[1] = 0.2;
times[2] = 1.0;
};
datablock ParticleEmitterData(DarkEmitter){
ejectionPeriodMS = 6;
periodVarianceMS = 0;
ejectionVelocity = 1.01;
velocityVariance = 0.0;
ejectionOffset = 25.0;
thetaMin = 0;
thetaMax = 180;
phiReferenceVel = 0;
phiVariance = 360;
overrideAdvances = false;
orientParticles = true;
lifetimeMS = 1;
particles = "DarkParticle";
};
datablock AudioProfile(LightningZapSound){
filename = "fx/misc/lightning_impact.wav";
description = AudioExplosion3d;
};
datablock LightningData(zapStorm){
directDamageType = $DamageType::Lightning;
directDamage = 1;
strikeTextures[0] = "special/skyLightning";
strikeSound = LightningZapSound;
};
datablock ParticleData(SphereMistPart){
textureName = "particleTest";
dragCoefficient = "2";
gravityCoefficient = 0.0;
inheritedVelFactor = "0";
windCoefficient = "0";
constantAcceleration = -30;
lifetimeMS = "2500";
lifetimeVarianceMS = "0";
spinRandomMin = "-200";
spinRandomMax = "200";
useInvAlpha = "0";
colors[0] = "0.204724 0.204724 0.204724 0.199213";
colors[1] = "0.291339 0.291339 0.291339 0.199213";
colors[2] = "0.259843 0.259843 0.259843 0.188976";
colors[3] = "0.0787402 0.0787402 0.0787402 0.015748";
sizes[0] = "50";
sizes[1] = "50";
sizes[2] = "50";
sizes[3] = "50";
times[0] = "0.1";
times[1] = "0.8";
times[2] = "0.9";
times[3] = "1";
spinSpeed = "1";
};
datablock ParticleEmitterData(SphereMistEmitter){
ejectionPeriodMS = "5";
periodVarianceMS = "0";
ejectionVelocity = "10";
velocityVariance = "0";
ejectionOffset = "400";
thetaMin = "0";
thetaMax = "180";
phiReferenceVel = 0;
phiVariance = 360;
orientParticles = "0";
orientOnVelocity = true;
particles = "SphereMistPart";
lifetimeMS = "0";
blendStyle = "NORMAL";
alignDirection = "0 1 0";
};
datablock LinearFlareProjectileData(BlueSpawnProj){
projectileShapeName = "plasmabolt.dts";
scale = "2.3 2.3 2.3";
faceViewer = true;
directDamage = 0.0;
hasDamageRadius = false;
indirectDamage = 0;
damageRadius = 0;
kickBackStrength = 300.0;
directDamageType = $DamageType::Explosion;
radiusDamageType = $DamageType::Explosion;
Impulse = true;
explosion = "MissileExplosion";
//splash = PlasmaSplash;
dryVelocity = 0.1;
wetVelocity = -1;
velInheritFactor = 0.3;
fizzleTimeMS = 0;
lifetimeMS = 16320;
explodeOnDeath = true;
reflectOnWaterImpactAngle = 0.0;
explodeOnWaterImpact = true;
deflectionOnWaterImpact = 0.0;
fizzleUnderwaterMS = -1;
//activateDelayMS = 100;
activateDelayMS = -1;
size[0] = 30.2;
size[1] = 30.5;
size[2] = 50.1;
numFlares = 150;
flareColor = "0 0.3 1";
flareModTexture = "flaremod";
flareBaseTexture = "flarebase";
hasLight = true;
lightRadius = 3.0;
lightColor = "0 0.3 1";
ignoreExEffects = 1;
};
datablock LinearFlareProjectileData(RedSpawnProj){
projectileShapeName = "plasmabolt.dts";
scale = "2.3 2.3 2.3";
faceViewer = true;
directDamage = 0.0;
hasDamageRadius = false;
indirectDamage = 0;
damageRadius = 0;
kickBackStrength = 300.0;
directDamageType = $DamageType::Explosion;
radiusDamageType = $DamageType::Explosion;
Impulse = true;
explosion = "MissileExplosion";
//splash = PlasmaSplash;
dryVelocity = 0.1;
wetVelocity = -1;
velInheritFactor = 0.3;
fizzleTimeMS = 0;
lifetimeMS = 16320;
explodeOnDeath = true;
reflectOnWaterImpactAngle = 0.0;
explodeOnWaterImpact = true;
deflectionOnWaterImpact = 0.0;
fizzleUnderwaterMS = -1;
//activateDelayMS = 100;
activateDelayMS = -1;
size[0] = 30.2;
size[1] = 30.5;
size[2] = 50.1;
numFlares = 150;
flareColor = "1 0.3 0";
flareModTexture = "flaremod";
flareBaseTexture = "flarebase";
hasLight = true;
lightRadius = 3.0;
lightColor = "1 0.3 0";
ignoreExEffects = 1;
};
datablock StaticShapeData(AGameStart){
catagory = "misc";
shapeFile = "flag.dts";
};
function AGameStart::onAdd(%this, %obj){
Parent::onAdd(%this, %obj);
if(!isObject(StartScriptObj)){
%obj.setName("StartScriptObj");
}
if(!Game.aStart && !$Anomaly::editMode){
aGameLoop();
Game.aStart = 0;
}
}
function aGameEffects(%pos, %exitPos){
%exitPos = 1024*5 SPC 1024*5 SPC 450;
if(!isObject(aEffect)){
new SimGroup(aEffect);
MissionCleanup.add(aEffect);
aEffect.red = new LinearFlareProjectile() {
dataBlock = RedSpawnProj;
initialDirection = "0 0 1";
initialPosition = %pos;
sourceObject = -1;
sourceSlot = 0;
vehicleObject = 0;
};
aEffect.add(aEffect.red);
aEffect.blue = new LinearFlareProjectile() {
dataBlock = BlueSpawnProj;
initialDirection = "0 0 1";
initialPosition = %exitPos;
sourceObject = -1;
sourceSlot = 0;
vehicleObject = 0;
};
aEffect.add(aEffect.blue);
%a = new ParticleEmissionDummy() {
position = %pos;
rotation = "1 0 0 0";
scale = "1 1 1";
dataBlock = "defaultEmissionDummy";
lockCount = "0";
homingCount = "0";
emitter = "SphereMistEmitter";
velocity = "1";
};
aEffect.add(%a);
%a = new ParticleEmissionDummy() {
position = %pos;
rotation = "1 0 0 0";
scale = "1 1 1";
dataBlock = "defaultEmissionDummy";
lockCount = "0";
homingCount = "0";
emitter = "RedChargedEmitter";
velocity = "1";
};
aEffect.add(%a);
%a = new ParticleEmissionDummy() {
position = %pos;
rotation = "1 0 0 0";
scale = "1 1 1";
dataBlock = "defaultEmissionDummy";
lockCount = "0";
homingCount = "0";
emitter = "DarkEmitter";
velocity = "1";
};
aEffect.add(%a);
%a = new ParticleEmissionDummy() {
position = %exitPos;
rotation = "1 0 0 0";
scale = "1 1 1";
dataBlock = "defaultEmissionDummy";
lockCount = "0";
homingCount = "0";
emitter = "BlueChargedEmitter";
velocity = "1";
};
aEffect.add(%a);
%a = new ParticleEmissionDummy() {
position = %exitPos;
rotation = "1 0 0 0";
scale = "1 1 1";
dataBlock = "defaultEmissionDummy";
lockCount = "0";
homingCount = "0";
emitter = "DarkEmitter";
velocity = "1";
};
aEffect.add(%a);
%a = new Lightning(Lightning){
position = vectorAdd(%pos,"0 0 -110");
rotation = "1 0 0 0";
scale = "1 1 220";
dataBlock = "zapStorm";
lockCount = "0";
homingCount = "0";
strikesPerMinute = "12";
strikeWidth = "2.5";
chanceToHitTarget = "1";
strikeRadius = "1";
boltStartRadius = "1"; //altitude the lightning starts from
color = "1 0 0 1";
fadeColor = "0.9 0.3 0 1";
};
aEffect.add(%a);
}
else{
if(!isObject(aEffect.red)){
aEffect.red = new LinearFlareProjectile() {
dataBlock = RedSpawnProj;
initialDirection = "0 0 1";
initialPosition = %pos;
sourceObject = -1;
sourceSlot = 0;
vehicleObject = 0;
};
aEffect.add(aEffect.red);
}
if(!isObject(aEffect.blue)){
aEffect.blue = new LinearFlareProjectile() {
dataBlock = BlueSpawnProj;
initialDirection = "0 0 1";
initialPosition = %exitPos;
sourceObject = -1;
sourceSlot = 0;
vehicleObject = 0;
};
aEffect.add(aEffect.blue);
}
}
}
function aGameLoop(){
if(($MatchStarted + $missionRunning) == 2 && ($HostGamePlayerCount - $HostGameBotCount > 0)){
Game.loopTime += 128;
if(Game.loopTime > (60000 * $Anomaly::dkwUnlockTimeMin)){
Game.unlockDarkWep = 1;
}
if(getRandom(1,150) == 1){
randomSteamBlast();
}
if(cbase.team && cbase.isPowered()){
replaceTrees();
%pos = "-4.41736 -3.32352 432.785";
%exitPos = 1024*5 SPC 1024*5 SPC 250;
aGameEffects(%pos, %exitPos);
InitContainerRadiusSearch(%pos, 200, $TypeMasks::PlayerObjectType | $TypeMasks::VehicleObjectType | $TypeMasks::ProjectileObjectType | $TypeMasks::ItemObjectType);
while ((%targetObject = containerSearchNext()) != 0){
%tgtPos = %targetObject.getWorldBoxCenter();
%dist = vectorDist(%pos,%tgtPos);
%zDist = getWord(%pos,2) - getWord(%tgtPos,2);
%vec = VectorNormalize(VectorSub(%pos, %tgtPos));
if((%targetObject.getType() & $TypeMasks::ProjectileObjectType)){
if(%targetObject.getDatablock().getname() !$= "RedSpawnProj" && %targetObject.getDatablock().getname() !$= "BlueSpawnProj"){
if(%targetObject.getClassName() $= "LinearFlareProjectile" || %targetObject.getClassName() $= "LinearProjectile" || %targetObject.getClassName() $= "TracerProjectile" || %targetObject.getClassName() $= "GrenadeProjectile"){
%dis = vectorDist(%targetObject.initialPosition,%targetObject.getPosition());
//error(getSimTime() - %targetObject.lifeTimeMS);
if(%targetObject.lifeTimeMS && (getSimTime() - %targetObject.lifeTimeMS) > 60000){
continue;
}
if(%dis > 0.1 && %dist > 50){
%prec = 10;
%targetDir = vectorScale (%vec,%prec);
%projDir = vectorScale(%targetObject.initialDirection,100-%prec);
%vecAdd = vectorNormalize(vectorAdd(%targetDir,%projDir));
%p = new (%targetObject.getClassName())() {
dataBlock = %targetObject.getDatablock().getName();
initialDirection = %vecAdd;
initialPosition = %targetObject.getPosition();
sourceObject = -1;// needs to be -1 other wise rendering issues happen as it references source objects muzzle point
sourceSlot = 0;
vehicleObject = 0;
sobj = (!%targetObject.sourceObject) ? -1 : %targetObject.sourceObject;
lifeTimeMS = (!%targetObject.lifeTimeMS) ? getSimTime() : %targetObject.lifeTimeMS;
};
MissionCleanup.add(%p);
%targetObject.delete();
}
else{
%p = new (%targetObject.getClassName())() {
dataBlock = %targetObject.getDatablock().getName();
initialDirection = %targetObject.initialDirection;
initialPosition = vectorAdd(%exitPos,"0 0 198");
sourceObject = -1;
sourceSlot = 0;
vehicleObject = 0;
sobj = (!%targetObject.sourceObject) ? -1 : %targetObject.sourceObject;
};
MissionCleanup.add(%p);
%targetObject.delete();
}
}
}
}
else if((%targetObject.getType() & $TypeMasks::VehicleObjectType)){
if(%targetObject.getClassName() $= "WheeledVehicle"){
if(%dist < 60 && isEventPending(%targetObject.sch)){
cancel(%targetObject.sch);
%targetObject.delete();
}
else{
%impulseVec = VectorScale(%vec, 2000);
%targetObject.applyImpulse(vectorAdd(%targetObject.getPosition(),"0 0 0.01"), %impulseVec);
}
}
else{
%ray = ContainerRayCast(%pos, %tgtPos, $TypeMasks::StaticTSObjectType | $TypeMasks::StaticShapeObjectType | $TypeMasks::InteriorObjectType | $TypeMasks::TerrainObjectType, 0);
if(!%ray){
%impulseVec = VectorScale(%vec, 2000);
if(%dist < 60){
%targetObject.getDatablock().damageObject(%targetObject, 0, "0 0 0", 5, $DamageType::Impact);
}
else{
%targetObject.applyImpulse(%targetObject.getPosition(), %impulseVec);
}
}
}
}
else if((%targetObject.getType() & $TypeMasks::PlayerObjectType) && !%targetObject.isMounted()){
//error(%zDist);
%isSafe = %targetObject.lastBoostTime && ((getSimTime() - %targetObject.lastBoostTime) < 10000);
if(!%isSafe){
if(%targetObject.holdingFlag){
Game.dropFlag(%targetObject);
}
if(%dist < 40){
%targetObject.setPosition(vectorAdd(%exitPos,"0 0 198"));
%targetObject.setVelocity(vectorScale(%targetObject.getVelocity(),0.5));
}
else{
%timeDif = getSimTime() - %targetObject.lastPullTime;
if(!%targetObject.lastPullTime || %timeDif > 3000){
%targetObject.whcount = 0;
%targetObject.precAdd = 0;
}
%targetObject.lastPullTime = getSimTime();
%targetObject.whcount++;
if(%targetObject.whcount > 100){
%targetObject.precAdd += 0.05;
}
//error(%targetObject.whcount SPC %targetObject.precAdd);
%prec = 10 + %targetObject.precAdd;
%tvec = vectorNormalize(%targetObject.getVelocity());
%speed = VectorLen(%targetObject.getVelocity());
%speed = (%speed < 100) ? (%speed + 5) : %speed * 0.99;
//error(%speed);
%targetDir = vectorScale (%vec,%prec);
%projDir = vectorScale(%tvec ,100-%prec);
%vecAdd = vectorNormalize(vectorAdd(%targetDir,%projDir));
%targetObject.setVelocity(vectorScale(%vecAdd,%speed));
//%targetObject.applyImpulse(%tgtPos, VectorScale(%vec, 60));
}
}
}
else if((%targetObject.getType() & $TypeMasks::ItemObjectType) && !%targetObject.static){
%ray = ContainerRayCast(%pos, %tgtPos, $TypeMasks::StaticTSObjectType | $TypeMasks::StaticShapeObjectType | $TypeMasks::InteriorObjectType | $TypeMasks::TerrainObjectType, 0);
if(!%ray){
if(%dist < 50 && %targetObject.getDatablock().getName() !$= "Flag"){
%targetObject.setPosition(vectorAdd(%exitPos,"0 0 198"));
}
else if(%targetObject.getDatablock().getName() !$= "Flag"){
%prec = 10;
%tvec = vectorNormalize(%targetObject.getVelocity());
%speed = VectorLen(%targetObject.getVelocity());
%speed = (%speed < 100) ? (%speed + 10) : 100;
//error(%speed);
%targetDir = vectorScale (%vec,%prec);
%projDir = vectorScale(%tvec ,100-%prec);
%vecAdd = vectorNormalize(vectorAdd(%targetDir,%projDir));
%targetObject.setVelocity(vectorScale(%vecAdd,%speed));
//%targetObject.applyImpulse(%tgtPos, VectorScale(%vec, 60));
}
}
}
else if((%targetObject.getType() & $TypeMasks::VehicleObjectType)){
if(%targetObject.getClassName() $= "WheeledVehicle"){
if(%dist < 60 && isEventPending(%targetObject.sch)){
cancel(%targetObject.sch);
%targetObject.delete();
}
else{
%impulseVec = VectorScale(%vec, 2000);
%targetObject.applyImpulse(vectorAdd(%targetObject.getPosition(),"0 0 0.01"), %impulseVec);
}
}
}
}
}
else if(isObject(aEffect)){
aEffect.delete();
}
}
if(isObject(StartScriptObj)){
schedule(128, 0, "aGameLoop");
}
}
function steamKick(%pos,%time){
%uppos = vectorAdd(%pos, getRandom(-100,100) SPC getRandom(-100,100) SPC 150);
steamkick2(%pos,%time,%uppos);
}
function steamkick2(%pos,%time,%uppos){
InitContainerRadiusSearch(%pos, 50, $TypeMasks::PlayerObjectType | $TypeMasks::VehicleObjectType);
while ((%targetObject = containerSearchNext()) != 0){
if((%targetObject.getType() & $TypeMasks::PlayerObjectType)){
%force = 1800;
%tgtPos = %targetObject.getWorldBoxCenter();
%rot = getWords(MatrixMultiply("0 0 0 0 0 1" SPC mDegToRad(getRandom(1,360)), "0 0 0 0 1 0" SPC mDegToRad(getRandom(1,45))),3,6);
%vec = VectorNormalize(VectorSub(%uppos, %pos));
//error(%uppos SPC %vec);
%impulseVec = VectorScale(%vec, %force);
%targetObject.applyImpulse(%tgtPos, %impulseVec);
}
else if((%targetObject.getType() &$TypeMasks::VehicleObjectType) && %targetObject.getDataBlock().getName() $= "tree19"){
%targetObject.applyImpulse(%targetObject.getPosition(),"5000 0 1900");
}
}
if(%time > 0){
%time -= 64;
schedule(64,0,"steamKick2",%pos,%time,%uppos);
}
}
datablock ParticleData(SteamStackParticle) {
dragCoefficient = "0.5";
windCoefficient = "0";
gravityCoefficient = "10";
inheritedVelFactor = "0";
constantAcceleration = "0";
lifetimeMS = "5000";
lifetimeVarianceMS = "200";
spinSpeed = "1";
spinRandomMin = "-50";
spinRandomMax = "50";
useInvAlpha = "0";
animateTexture = "0";
framesPerSec = "1";
textureCoords[0] = "0 0";
textureCoords[1] = "0 1";
textureCoords[2] = "1 1";
textureCoords[3] = "1 0";
animTexTiling = "0 0";
textureName = "particleTest";
colors[0] = "0.204724 0.204724 0.204724 0.99213";
colors[1] = "0.291339 0.291339 0.291339 0.1";
colors[2] = "0.259843 0.259843 0.259843 0.1";
colors[3] = "0.0787402 0.0787402 0.0787402 0.015748";
sizes[0] = "50";
sizes[1] = "50";
sizes[2] = "50";
sizes[3] = "50";
times[0] = "0";
times[1] = "0.05";
times[2] = "0.65";
times[3] = "1";
};
datablock ParticleEmitterData(SteamStackEmitter) {
ejectionPeriodMS = "10";
periodVarianceMS = "0";
ejectionVelocity = "500";
velocityVariance = "100";
ejectionOffset = "0";
ejectionOffsetVariance = "0";
thetaMin = "0";
thetaMax = "5";
phiReferenceVel = "0";
phiVariance = "360";
softnessDistance = "1";
ambientFactor = "0";
overrideAdvance = "1";
orientParticles = "0";
orientOnVelocity = "1";
particles = "SteamStackParticle";
lifetimeMS = "0";
lifetimeVarianceMS = "0";
};
function randomSteamBlast(){
%time = getRandom(3000, 8000);
if(getRandom(1,2) == 1) %team = isObject(Team1SFX) ? 2 : 1;
else %team = isObject(Team2SFX) ? 1 : 2;
if(%team == 1 && !isObject(Team1SFX)){
if(isObject(TreeB) && getRandom(1,2) == 1){//lols
%pos = TreeB.position;
%rot = TreeB.rotation;
TreeB.delete();
%veh = new WheeledVehicle() {
position = %pos;
rotation = %rot;
scale = "1 1 1";
dataBlock = "tree19";
lockCount = "0";
homingCount = "0";
disableMove = "0";
Target = "126";
mountable = "1";
respawn = "0";
selfPower = "1";
lastDamagedBy = "0";
};
MissionCleanup.add(%veh);
%veh.schedule(5000,"delete");
}
steamKick("-287.25 -10.7926 197.165",%time);
camShake("-287.25 -10.7926 197.165");
%sfx = new AudioEmitter(Team1SFX) {
position = "-287.25 -10.7926 197.165";
rotation = "1 0 0 0";
scale = "1 1 1";
fileName = "fx/vehicles/htransport_boost.wav";
useProfileDescription = "0";
outsideAmbient = "1";
volume = "1";
isLooping = "1";
is3D = "1";
minDistance = "100";
maxDistance = "1024";
coneInsideAngle = "360";
coneOutsideAngle = "360";
coneOutsideVolume = "1";
coneVector = "0 0 1";
loopCount = "-1";
minLoopGap = 0;
maxLoopGap = 0;
type = "EffectAudioType";
locked = "true";
};
MissionCleanup.add(%sfx);
%sfx.schedule(%time,"delete");
%part = new ParticleEmissionDummy() {
position = "-325.361 10.2393 194.433";
rotation = "0 -1 0 13";
scale = "1 1 1";
dataBlock = "defaultEmissionDummy";
lockCount = "0";
homingCount = "0";
emitter = "SteamStackEmitter";
velocity = "1";
};
%part.schedule(%time, "delete");
MissionCleanup.add(%part);
%part = new ParticleEmissionDummy() {
position = "-325.361 -20.5607 194.433";
rotation = "0 -1 0 13";
scale = "1 1 1";
dataBlock = "defaultEmissionDummy";
lockCount = "0";
homingCount = "0";
emitter = "SteamStackEmitter";
velocity = "1";
};
%part.schedule(%time, "delete");
MissionCleanup.add(%part);
%part = new ParticleEmissionDummy() {
position = "-264.561 23.6393 182.433";
rotation = "0 1 0 17.7618";
scale = "1 1 1";
dataBlock = "defaultEmissionDummy";
lockCount = "0";
homingCount = "0";
emitter = "SteamStackEmitter";
velocity = "1";
};
%part.schedule(%time, "delete");
MissionCleanup.add(%part);
%part = new ParticleEmissionDummy() {
position = "-267.161 -30.9607 194.433";
rotation = "0 1 0 9.99997";
scale = "1 1 1";
dataBlock = "defaultEmissionDummy";
lockCount = "0";
homingCount = "0";
emitter = "SteamStackEmitter";
velocity = "1";
};
%part.schedule(%time, "delete");
MissionCleanup.add(%part);
}
else if(%team == 2 && !isObject(Team2SFX)){
if(isObject(TreeA) && getRandom(1,2) == 1){//lols
%pos = TreeA.position;
%rot = TreeA.rotation;
TreeA.delete();
%veh = new WheeledVehicle() {
position = %pos;
rotation = %rot;
scale = "1 1 1";
dataBlock = "tree19";
lockCount = "0";
homingCount = "0";
disableMove = "0";
Target = "126";
mountable = "1";
respawn = "0";
selfPower = "1";
lastDamagedBy = "0";
};
MissionCleanup.add(%veh);
%veh.schedule(5000,"delete");
}
steamKick("286.981 -1.84569 200",%time);
camShake("286.981 -1.84569 200");
%rot[0] = "0.062007 -0.825201 0.561425 15.2465";
%rot[1] = "-0.11061 -0.0026778 0.99386 194.328";
%rot[2] = "-0.0999666 -0.0720035 0.992382 126.016";
%rot[3] = "-0.115559 0.0308397 0.992822 226.772";
%rot[4] = "-0.0770999 -0.210176 0.974619 58.7289";
%rotation = %rot[getRandom(0,4)];
%sfx = new AudioEmitter(Team2SFX) {
position = "286.981 -1.84569 200";
rotation = "1 0 0 0";
scale = "1 1 1";
fileName = "fx/vehicles/htransport_boost.wav";
useProfileDescription = "0";
outsideAmbient = "1";
volume = "1";
isLooping = "1";
is3D = "1";
minDistance = "100";
maxDistance = "1024";
coneInsideAngle = "360";
coneOutsideAngle = "360";
coneOutsideVolume = "1";
coneVector = "0 0 1";
loopCount = "-1";
minLoopGap = 0;
maxLoopGap = 0;
type = "EffectAudioType";
locked = "true";
};
MissionCleanup.add(%sfx);
%sfx.schedule(%time,"delete");
%part = new ParticleEmissionDummy() {
position = "317.569 12.6078 187.632";
rotation = %rotation;
scale = "1 1 1";
dataBlock = "defaultEmissionDummy";
lockCount = "0";
homingCount = "0";
emitter = "SteamStackEmitter";
velocity = "1";
};
%part.schedule(%time, "delete");
MissionCleanup.add(%part);
%part = new ParticleEmissionDummy() {
position = "312.319 -22.988 188.805";
rotation = %rotation;
scale = "1 1 1";
dataBlock = "defaultEmissionDummy";
lockCount = "0";
homingCount = "0";
emitter = "SteamStackEmitter";
velocity = "1";
};
%part.schedule(%time, "delete");
MissionCleanup.add(%part);
%part = new ParticleEmissionDummy() {
position = "255.718 -21.3017 201.462";
rotation = %rotation;
scale = "1 1 1";
dataBlock = "defaultEmissionDummy";
lockCount = "0";
homingCount = "0";
emitter = "SteamStackEmitter";
velocity = "1";
};
%part.schedule(%time, "delete");
MissionCleanup.add(%part);
%part = new ParticleEmissionDummy() {
position = "264.561 25.2672 199.485";
rotation = %rotation;
scale = "1 1 1";
dataBlock = "defaultEmissionDummy";
lockCount = "0";
homingCount = "0";
emitter = "SteamStackEmitter";
velocity = "1";
};
%part.schedule(%time, "delete");
MissionCleanup.add(%part);
%part = new ParticleEmissionDummy() {
position = "277.355 -4.42543 196.623";
rotation = %rotation;
scale = "1 1 1";
dataBlock = "defaultEmissionDummy";
lockCount = "0";
homingCount = "0";
emitter = "SteamStackEmitter";
velocity = "1";
};
%part.schedule(%time, "delete");
MissionCleanup.add(%part);
}
}
datablock ExplosionData(camShake1){
lifeTimeMS = 10000;
offset = 0;
shakeCamera = true;
camShakeFreq = "10.0 6.0 9.0";
camShakeAmp = "20.0 20.0 20.0";
camShakeDuration = 2;
camShakeRadius = 200.0;
};
datablock LinearFlareProjectileData(CamProj){
projectileShapeName = "plasmabolt.dts";
scale = "0.01 0.01 0.01";
faceViewer = true;
directDamage = 0.0;
hasDamageRadius = false;
indirectDamage = 0;
damageRadius = 0;
kickBackStrength = 0.0;
directDamageType = $DamageType::Explosion;
radiusDamageType = $DamageType::Explosion;
Impulse = true;
explosion = "camShake1";
dryVelocity = 0.1;
wetVelocity = -1;
velInheritFactor = 0.3;
fizzleTimeMS = 0;
lifetimeMS = 128;
explodeOnDeath = true;
reflectOnWaterImpactAngle = 0.0;
explodeOnWaterImpact = true;
deflectionOnWaterImpact = 0.0;
fizzleUnderwaterMS = -1;
activateDelayMS = -1;
size[0] = 0.01;
size[1] = 0.01;
size[2] = 0.01;
numFlares = 3;
flareColor = "0 1 0";
flareModTexture = "flaremod";
flareBaseTexture = "flarebase";
hasLight = false;
lightRadius = 3.0;
lightColor = "0 1 0";
};
function camShake(%pos){
%p = new LinearFlareProjectile() {
dataBlock = CamProj;
initialDirection = "0 0 -1";
initialPosition = %pos;
sourceObject = -1;
sourceSlot = 0;
vehicleObject = 0;
};
MissionCleanup.add(%p);
}
function replaceTrees(){
if(!Game.rmvTrees){
if(isObject(RandomOrganics)){
RandomOrganics.delete();
}
for(%i = 0 ; %i < rmvTrees.getCount(); %i++){
%tree = rmvTrees.getObject(%i);
schedule(getRandom(1000,15000),0,"treeVeh",%tree);
}
Game.rmvTrees = 1;
}
}
function treeVeh(%tree){
%pos = %tree.position;
%rot = %tree.rotation;
%treeDB = %tree.DB;
%tree.delete();
%veh = new WheeledVehicle() {
position = %pos;
rotation = %rot;
scale = "1 1 1";
dataBlock = %treeDB;
lockCount = "0";
homingCount = "0";
disableMove = "0";
Target = "126";
mountable = "1";
respawn = "0";
selfPower = "1";
lastDamagedBy = "0";
};
MissionCleanup.add(%veh);
%veh.sch = %veh.schedule(8000,"delete");
}
datablock WheeledVehicleData(tree16) : ShrikeDamageProfile{
mountable = 0;
spawnOffset = "0 0 1.0";
renderWhenDestroyed = false;
catagory = "MISC";
shapeFile = "borg16.dts";
multipassenger = false;
computeCRC = false;
isShielded = false;
explosion = BlasterExplosion;
explosionDamage = 0.5;
explosionRadius = 5.0;
drag = 1.0;
maxDamage = 1;
destroyedLevel = 1.1;
mass = 150;
bodyFriction = 0.8;
bodyRestitution = 0.5;
minRollSpeed = 3;
gyroForce = 400;
gyroDamping = 0.3;
stabilizerForce = 10;
minDrag = 10;
softSplashSoundVelocity = 10.0;
mediumSplashSoundVelocity = 15.0;
hardSplashSoundVelocity = 20.0;
exitSplashSoundVelocity = 10.0;
softImpactSpeed = 114;
hardImpactSpeed = 220;
softImpactSound = SoftImpactSound;
hardImpactSound = HardImpactSound;
exitingWater = VehicleExitWaterMediumSound;
impactWaterEasy = VehicleImpactWaterSoftSound;
impactWaterMedium = VehicleImpactWaterMediumSound;
impactWaterHard = VehicleImpactWaterMediumSound;
waterWakeSound = VehicleWakeMediumSplashSound;
targetNameTag = 'Physics';
targetTypeTag = 'Object';
sensorData = VehiclePulseSensor;
sensorRadius = VehiclePulseSensor.detectRadius;
minImpactSpeed = 10;
speedDamageScale = 0.006;
damageScale[$DamageType::Water] = 0;
};
datablock WheeledVehicleData(tree17) : ShrikeDamageProfile{
mountable = 0;
spawnOffset = "0 0 1.0";
renderWhenDestroyed = false;
catagory = "MISC";
shapeFile = "borg17.dts";
multipassenger = false;
computeCRC = false;
isShielded = false;
explosion = BlasterExplosion;
explosionDamage = 0.5;
explosionRadius = 5.0;
drag = 1.0;
maxDamage = 1;
destroyedLevel = 1.1;
mass = 150;
bodyFriction = 0.8;
bodyRestitution = 0.5;
minRollSpeed = 3;
gyroForce = 400;
gyroDamping = 0.3;
stabilizerForce = 10;
minDrag = 10;
softSplashSoundVelocity = 10.0;
mediumSplashSoundVelocity = 15.0;
hardSplashSoundVelocity = 20.0;
exitSplashSoundVelocity = 10.0;
softImpactSpeed = 114;
hardImpactSpeed = 220;
softImpactSound = SoftImpactSound;
hardImpactSound = HardImpactSound;
exitingWater = VehicleExitWaterMediumSound;
impactWaterEasy = VehicleImpactWaterSoftSound;
impactWaterMedium = VehicleImpactWaterMediumSound;
impactWaterHard = VehicleImpactWaterMediumSound;
waterWakeSound = VehicleWakeMediumSplashSound;
targetNameTag = 'Physics';
targetTypeTag = 'Object';
sensorData = VehiclePulseSensor;
sensorRadius = VehiclePulseSensor.detectRadius;
minImpactSpeed = 10;
speedDamageScale = 0.006;
damageScale[$DamageType::Water] = 0;
};
datablock WheeledVehicleData(tree18) : ShrikeDamageProfile{
mountable = 0;
spawnOffset = "0 0 1.0";
renderWhenDestroyed = false;
catagory = "MISC";
shapeFile = "borg18.dts";
multipassenger = false;
computeCRC = false;
isShielded = false;
explosion = BlasterExplosion;
explosionDamage = 0.5;
explosionRadius = 5.0;
drag = 1.0;
maxDamage = 1;
destroyedLevel = 1.1;
mass = 150;
bodyFriction = 0.8;
bodyRestitution = 0.5;
minRollSpeed = 3;
gyroForce = 400;
gyroDamping = 0.3;
stabilizerForce = 10;
minDrag = 10;
softSplashSoundVelocity = 10.0;
mediumSplashSoundVelocity = 15.0;
hardSplashSoundVelocity = 20.0;
exitSplashSoundVelocity = 10.0;
softImpactSpeed = 114;
hardImpactSpeed = 220;
softImpactSound = SoftImpactSound;
hardImpactSound = HardImpactSound;
exitingWater = VehicleExitWaterMediumSound;
impactWaterEasy = VehicleImpactWaterSoftSound;
impactWaterMedium = VehicleImpactWaterMediumSound;
impactWaterHard = VehicleImpactWaterMediumSound;
waterWakeSound = VehicleWakeMediumSplashSound;
targetNameTag = 'Physics';
targetTypeTag = 'Object';
sensorData = VehiclePulseSensor;
sensorRadius = VehiclePulseSensor.detectRadius;
minImpactSpeed = 10;
speedDamageScale = 0.006;
damageScale[$DamageType::Water] = 0;
};
datablock WheeledVehicleData(tree19) : ShrikeDamageProfile{
mountable = 0;
spawnOffset = "0 0 1.0";
renderWhenDestroyed = false;
catagory = "MISC";
shapeFile = "borg19.dts";
multipassenger = false;
computeCRC = false;
isShielded = false;
explosion = BlasterExplosion;
explosionDamage = 0.5;
explosionRadius = 5.0;
drag = 1.0;
maxDamage = 1;
destroyedLevel = 1.1;
mass = 150;
bodyFriction = 0.8;
bodyRestitution = 0.5;
minRollSpeed = 3;
gyroForce = 400;
gyroDamping = 0.3;
stabilizerForce = 10;
minDrag = 10;
softSplashSoundVelocity = 10.0;
mediumSplashSoundVelocity = 15.0;
hardSplashSoundVelocity = 20.0;
exitSplashSoundVelocity = 10.0;
softImpactSpeed = 114;
hardImpactSpeed = 220;
softImpactSound = SoftImpactSound;
hardImpactSound = HardImpactSound;
exitingWater = VehicleExitWaterMediumSound;
impactWaterEasy = VehicleImpactWaterSoftSound;
impactWaterMedium = VehicleImpactWaterMediumSound;
impactWaterHard = VehicleImpactWaterMediumSound;
waterWakeSound = VehicleWakeMediumSplashSound;
targetNameTag = 'Physics';
targetTypeTag = 'Object';
sensorData = VehiclePulseSensor;
sensorRadius = VehiclePulseSensor.detectRadius;
minImpactSpeed = 10;
speedDamageScale = 0.006;
damageScale[$DamageType::Water] = 0;
};
datablock TriggerData(anomalyTrig){
tickPeriodMS = 32;
};
function SimObject::getUpVector(%obj){
%rot = getWords(%obj.getTransform(), 3, 6);
%tmat = VectorOrthoBasis(%rot);
return getWords(%tMat, 6, 8);
}
function anomalyTrig::onEnterTrigger(%data, %trigger, %player){
%mode = %trigger.mode;
if(isObject(PZones)){
PZones.delete();
}
switch(%mode){
case 1:
if(%trigger.ispowered()){
%player.setPosition(%trigger.getWorldBoxCenter());
%vel = VectorScale(VectorNormalize(%trigger.getForwardVector()), 90);
%player.setVelocity(%vel);
if(getSimTime() - %player.boostTrigTime > 2000){
serverPlay3D(forceTrig, %trigger.getTransform());
%player.client.play2D(aboostSound);
}
%player.boostTrigTime = getSimTime();
}
else{
if(getSimTime() - %player.boostTrigMsgTime > 5000){
messageClient(%player.client, 'MsgClient', '\c0Cannon is not powered.~wfx/powered/station_denied.wav');
}
%player.boostTrigMsgTime = getSimTime();
}
%player.lastBoostTime = getSimTime();
case 2:
if(%trigger.ispowered()){
%trigPos = %trigger.getWorldBoxCenter();
%player.setPosition(%trigPos);
%vel = VectorScale(VectorNormalize(%trigger.getForwardVector()), 160);
%player.setVelocity(%vel);
serverPlay3D(ACannonExpSound, %trigger.getTransform());
cannonEffect(%trigger);
}
else{
messageClient(%player.client, 'MsgClient', '\c0Cannon is not powered.~wfx/powered/station_denied.wav');
}
%player.lastBoostTime = getSimTime();
case 3:
if(Game.unlockDarkWep){
%player.setInventory(DarkWeaponX, 1, true);
%player.setInventory(DarkAmmo, 1, true);
%player.use(DarkWeaponX);
}
else{
%minLeft = $Anomaly::dkwUnlockTimeMin - mCeil((Game.loopTime / 1000) / 60);
%pos = 1024*5 SPC 1024*5 SPC 250;
%plrPos = %player.getPosition();
%p = new SniperProjectile() {
dataBlock = MOACShot;
initialDirection = vectorNormalize(vectorSub(%plrPos, %pos));
initialPosition = %pos;
sourceObject = -1;
damageFactor = 2;
sourceSlot = "";
sObj = %obj;
};
%p.setEnergyPercentage(1);
MissionCleanup.add(%p);
messageClient(%player.client, 'MsgClient', '\c0The dark weapon unlocks in %1 minutes.~wfx/powered/station_denied.wav', %minLeft);
}
default:
return;
}
}
function cannonEffect(%trigger){
%p = new LinearFlareProjectile() {
dataBlock = ACannonEffect;
initialDirection = vectorScale(%trigger.getForwardVector(),-1);
initialPosition = vectorAdd(%trigger.getWorldBoxCenter(),vectorScale(%trigger.getForwardVector(),8));
sourceObject = -1;
sourceSlot = 0;
vehicleObject = 0;
};
MissionCleanup.add(%p);
}
function testBeam(){
%pos = 1024*5 SPC 1024*5 SPC 450;
%plrPos = 1024*5 SPC 1024*5 SPC -200;
%p = new SniperProjectile() {
dataBlock = MOACShot;
initialDirection = "0 0 -1";
initialPosition = %pos;
sourceObject = -1;
damageFactor = 2;
sourceSlot = "";
sObj = %obj;
};
%p.setEnergyPercentage(1);
MissionCleanup.add(%p);
}
datablock ExplosionData(moacBeamExplosion)
{
explosionShape = "effect_plasma_explosion.dts";
soundProfile = ShapeExplosionSound;
faceViewer = true;
//emitter[0] = Weapon10ExplosionEmitter;
//emitter[1] = Weapon10RifleEmitter;
colors[0] = "0.0 0.0 1.0 0.0";
colors[1] = "0.0 0.0 1.0 1.0";
times[0] = 0.0;
times[1] = 1;
sizes[0] = "10.0 10.0 10.0";
sizes[1] = "1.0 1.0 1.0";
};
datablock SniperProjectileData(MOACShot){
directDamage = 30;
hasDamageRadius = true;
indirectDamage = 50;
damageRadius = 30.0;
velInheritFactor = 1.0;
//sound = Weapon10ProjectileSound;
explosion = "moacBeamExplosion";
splash = PlasmaSplash;
directDamageType = $DamageType::outOfBounds;
maxRifleRange = 1000;
rifleHeadMultiplier = 3.3; //may be added later
beamColor = "0 0 1";
fadeTime = 0.8;
startBeamWidth = 18.2;
endBeamWidth = 18.2;
pulseBeamWidth = 18.5;
beamFlareAngle = 3.0;
minFlareSize = 0.0;
maxFlareSize = 400.0;
pulseSpeed = 6.0;
pulseLength = 0.050;
lightRadius = 5.0;
lightColor = "0 0.0 1";
textureName[0] = "special/flare";
textureName[1] = "special/nonlingradient";
textureName[2] = "special/laserrip01";
textureName[3] = "special/laserrip02";
textureName[4] = "special/laserrip03";
textureName[5] = "special/laserrip04";
textureName[6] = "special/laserrip05";
textureName[7] = "special/laserrip06";
textureName[8] = "special/laserrip07";
textureName[9] = "special/laserrip08";
textureName[10] = "special/laserrip09";
textureName[11] = "special/sniper00";
};
function anomalyTrig::onTickTrigger(%this, %triggerId){
// anti spam
}
function anomalyTrig::onleaveTrigger(%data, %trigger, %player){
}
datablock ParticleData(ACannonSmokeParticle){
dragCoeffiecient = 0.0;
gravityCoefficient = 0.1;
inheritedVelFactor = 0.00;
lifetimeMS = 2000;
lifetimeVarianceMS = 150;
textureName = "bsmoke02";
useInvAlpha = 1;
spinRandomMin = -30.0;
spinRandomMax = 30.0;
colors[0] = "0.2 0.2 0.2 1.0";
colors[1] = "0.2 0.2 0.2 1.0";
colors[2] = "0.2 0.2 0.2 0.0";
sizes[0] = 0.25;
sizes[1] = 4.5;
sizes[2] = 4.5;
times[0] = 0.0;
times[1] = 0.2;
times[2] = 1.0;
};
datablock ParticleEmitterData(ACannonSmokeEmitter){
ejectionPeriodMS = 5;
periodVarianceMS = 1;
ejectionVelocity = 14.25;
velocityVariance = 0.50;
thetaMin = 0.0;
thetaMax = 90.0;
lifetimeMS = 1000;
particles = "ACannonSmokeParticle";
};
datablock ParticleData(ACannonExplosionSmoke){
dragCoeffiecient = 0.4;
gravityCoefficient = 1.0;
inheritedVelFactor = 0.025;
lifetimeMS = 100;
lifetimeVarianceMS = 0;
textureName = "particleTest";
useInvAlpha = 0;
spinRandomMin = -200.0;
spinRandomMax = 200.0;
colors[0] = "0.9 0.3 0.0 1.0";
colors[1] = "0.9 0.3 0.0 1";
colors[2] = "0.9 0.3 0.1 1";
sizes[0] = 16.0;
sizes[1] = 16.0;
sizes[2] = 12.0;
times[0] = 0.0;
times[1] = 0.5;
times[2] = 1.0;
};
datablock ParticleEmitterData(AHeavyExplosionSmokeEmitter){
ejectionPeriodMS = 2;
periodVarianceMS = 0;
ejectionVelocity = 520.25;
velocityVariance = 0.25;
thetaMin = 0.0;
thetaMax = 35.0;
lifetimeMS = 200;
particles = "ACannonExplosionSmoke";
};
datablock ShockwaveData(ACannonShockwave){
width = 30;
numSegments = 32;
numVertSegments = 7;
velocity = 200;
acceleration = 50.0;
lifetimeMS = 600;
height = 0.5;
verticalCurve = 0.375;
mapToTerrain = false;
renderBottom = true;
orientToNormal = true;
texture[0] = "special/shockwave4";
texture[1] = "special/gradient";
texWrap = 3.0;
times[0] = 1.0;
times[1] = 0.5;
times[2] = 1.0;
colors[0] = "0.5 0.5 0.0 1.0";
colors[1] = "0.7 0.5 0.0 1.0";
colors[2] = "0.9 0.3 0.0 1.0";
};
datablock AudioProfile(aboostSound){
filename = "fx/Bonuses/upward_straipass2_elevator.wav";
description = AudioExplosion3d;
preload = true;
};
datablock AudioDescription(AudioBIGXAExplosion3d){
volume = 1.0;
isLooping= false;
is3D = true;
minDistance= 50.0;
MaxDistance= 440.0;
type = $EffectAudioType;
environmentLevel = 1.0;
};
datablock AudioProfile(ACannonExpSound){
filename = "fx/powered/turret_mortar_explode.wav";
description = "AudioBIGXAExplosion3d";
preload = true;
};
datablock ExplosionData(ACannonExplosion){
explosionShape = "effect_plasma_explosion.dts";
faceViewer = true;
delayMS = 200;
offset = 0.0;
playSpeed = 1.5;
sizes[0] = "6.0 6.0 6.0";
sizes[1] = "6.0 6.0 6.0";
times[0] = 0.0;
times[1] = 1.0;
shockwave = ACannonShockwave;
emitter[0] = ACannonSmokeEmitter;
emitter[1] = AHeavyExplosionSmokeEmitter;
//emitter[2] = HeavyCrescentEmitter;
shakeCamera = true;
camShakeFreq = "10.0 6.0 9.0";
camShakeAmp = "20.0 20.0 20.0";
camShakeDuration = 1;
camShakeRadius = 150.0;
};
datablock LinearFlareProjectileData(ACannonEffect){
projectileShapeName = "plasmabolt.dts";
scale = "0.1 0.1 0.1";
faceViewer = true;
directDamage = 0.0;
hasDamageRadius = false;
indirectDamage = 0.0;
damageRadius = 0.0;
kickBackStrength = 0.0;
radiusDamageType = $DamageType::Plasma;
explosion = "ACannonExplosion";
dryVelocity = 1;
wetVelocity = 1;
velInheritFactor = 0.3;
fizzleTimeMS = 0;
lifetimeMS = 128;
explodeOnDeath = true;
reflectOnWaterImpactAngle = 0.0;
explodeOnWaterImpact = true;
deflectionOnWaterImpact = 0.0;
fizzleUnderwaterMS = -1;
//activateDelayMS = 100;
activateDelayMS = -1;
size[0] = 0.2;
size[1] = 0.5;
size[2] = 0.1;
numFlares = 35;
flareColor = "1 0.75 0.25";
flareModTexture = "flaremod";
flareBaseTexture = "flarebase";
sound = PlasmaProjectileSound;
fireSound = PlasmaFireSound;
wetFireSound = PlasmaFireWetSound;
hasLight = true;
lightRadius = 3.0;
lightColor = "1 0.75 0.25";
};
datablock ForceFieldBareData(APlrCannonBlocker)
{
fadeMS = 1000;
baseTranslucency = 0.01;
powerOffTranslucency = 0.0;
teamPermiable = true;
otherPermiable = false;
color = "0.28 0.89 0.31";
powerOffColor = "0.0 0.0 0.0";
targetTypeTag = 'ForceField';
texture[0] = "skins/forcef1";
texture[1] = "skins/forcef2";
texture[2] = "skins/forcef3";
texture[3] = "skins/forcef4";
texture[4] = "skins/forcef5";
framesPerSec = 10;
numFrames = 5;
scrollSpeed = 15;
umapping = 1.0;
vmapping = 0.15;
};
datablock AudioProfile(TeleporterAStart){
filename = "fx/misc/nexus_cap.wav";
description = AudioDefault3d;
preload = true;
};
datablock StaticShapeData(TeleporterA){
catagory = "Teleporters";
shapefile = "station_teleport.dts";
mass = 10;
elasticity = 0.2;
friction = 0.6;
pickupRadius = 2;
targetNameTag = '';
targetTypeTag = 'Teleporter';
//----------------------------------
maxDamage = 1.00;
destroyedLevel = 1.00;
disabledLevel = 0.70;
explosion = ShapeExplosion;
expDmgRadius = 8.0;
expDamage = 0.4;
expImpulse = 1500.0;
// don't allow this object to be damaged in non-team-based
// mission types (DM, Rabbit, Bounty, Hunters)
noIndividualDamage = true;
dynamicType = $TypeMasks::StationObjectType;
isShielded = true;
energyPerDamagePoint = 75;
maxEnergy = 50;
rechargeRate = 0.35;
doesRepair = true;
humSound = StationInventoryHumSound;
cmdCategory = "Support";
cmdIcon = CMDStationIcon;
cmdMiniIconName = "commander/MiniIcons/com_inventory_grey";
debrisShapeName = "debris_generic.dts";
debris = StationDebris;
};
//datablock Staticshapedata(teledestroyed) : teleporter
//{
//shapefile = "station_teleport.dts";
//};
$playerreject = 6;
function TeleporterA::onDestroyed(%data, %obj, %prevState){
//set the animations
%obj.playThread(1, "transition");
%obj.setThreadDir(1, true);
%obj.setDamageState(Destroyed);
//%obj.setDatablock(teledestroyed);
%obj.getDataBlock().onLosePowerDisabled(%obj);
}
function TeleporterA::damageObject(%data, %targetObject, %sourceObject, %position, %amount, %damageType){
if( %targetObject.invincible)
return;
parent::damageObject(%data, %targetObject, %sourceObject, %position, %amount, %damageType);
}
//---this is where I create the triggers and put them right over the nexus base's
function TeleporterA::onEnabled(%data, %obj, %prevState){
%level = %obj.getdamagelevel();
%obj.setdamagelevel(%level);
if(%obj.ispowered())
{
%obj.playthread(1, "transition");
%obj.setThreadDir(1, false);
%obj.playThread(0, "ambient");
%obj.setThreadDir(0, true);
}
else
{
%obj.playThread(0, "transition");
%obj.setThreadDir(0, false);
}
Parent::onEnabled(%data, %obj, %prevState);
}
function TeleporterA::gainPower(%data, %obj){
//%obj.setDatablock(teleporter);
Parent::gainPower(%data, %obj);
%obj.playthread(1, "transition");
%obj.setThreadDir(1, false);
%obj.playThread(0, "ambient");
%obj.setThreadDir(0, true);
}
function TeleporterA::losePower(%data, %obj){
%obj.playThread(0, "transition");
%obj.setThreadDir(0, false);
Parent::losePower(%data, %obj);
}
function TeleporterA::onAdd(%this, %tp){
Parent::onAdd(%this, %tp);
if(!isObject(tpSimSet)){
new simSet(tpSimSet);
MissionCleanup.add(tpSimSet);
}
tpSimSet.add(%tp);
%trigger = new Trigger()
{
dataBlock = NewTeleportATrigger;
polyhedron = "-0.75 0.75 0.1 1.5 0.0 0.0 0.0 -1.5 0.0 0.0 0.0 2.3";
};
MissionCleanup.add(%trigger);
if(%tp.noflag $= "")
%tp.noflag = "0";
if(%tp.oneway $= "")
%tp.oneway = "0";
if(%tp.linkID $= "")
%tp.linkID = "0";
if(%tp.linkTo $= "")
%tp.linkTo = "0";
if(%tp.invincible $= ""){
%tp.invincible = 1;
}
if(%tp.teamOnly $= ""){
%tp.teamOnly = 1;
}
%trigger.setTransform(%tp.getTransform());
%trigger.sourcebase = %tp;
%tp.trigger = %trigger;
//--------------do we need power?-----------------------
%tp.playThread(1, "ambient");
%tp.playThread(0, "transition");
%tp.playThread(0, "ambient");
%pos = %trigger.position;
}
datablock TriggerData(NewTeleportATrigger){
tickPeriodMS = 256;
};
function NewTeleportATrigger::onEnterTrigger(%data, %trigger, %player)
{
%colObj = %player;
%client = %player.client;
if(%player.transported $= "1") // if this player was just transported
{
%player.transported = "0";
%colObj.setMoveState(false);
%trigger.player = %player;
return; // then get out or it will never stop
}
//--------------do we have power?-----------------------
if(%trigger.sourcebase.ispowered() == 0){
messageClient(%player.client, 'MsgClient', '\c0Teleporter is not powered.~wfx/powered/station_denied.wav');
return;
}
//----------------------disabled?-----------------------
if(%trigger.sourcebase.isDisabled()){
messageClient(%colObj.client, 'msgStationDisabled', '\c2Teleporter is disabled.~wfx/powered/station_denied.wav');
return;
}
//--------------are we on the right team?-----------------------
if(%player.team != %trigger.sourcebase.team && %trigger.sourcebase.teamOnly){
messageClient(%player.client, 'MsgClient', '\c0Wrong team.~wfx/powered/station_denied.wav');
return;
}
//------------are we teleporting?-----------------------
if(isObject(%trigger.player)){
messageClient(%player.client, 'MsgClient', '\c0Teleporter in use.~wfx/powered/station_denied.wav');
return;
}
//-------------is this a oneway teleporter?------------------------
if(%trigger.sourcebase.oneway == "1"){
messageClient(%player.client, 'MsgLeaveMissionArea', '\c1This teleporter is oneway only.~wfx/powered/station_denied.wav');
return;
}
//-------------are we teleporting with flag?----------------------------------------
%flag = %player.holdingflag;
if(%player.holdingFlag > 0){
if(%trigger.sourcebase.noflag $= "1"){
if(%flag.team == 1)
%otherTeam = 2;
else
%otherTeam = 1;
//game.flagReset(%player.holdingflag);
Game.dropFlag(%player);
messageClient(%player.client, 'MsgClient', '\c0Cant teleport with flag');
//messageTeam(%flag.team, 'MsgCTFFlagReturned', '\c2Your flag was returned.~wfx/misc/flag_return.wav', 0, 0, %flag.team);
//messageTeam(0, 'MsgCTFFlagReturned', '\c2The %2 flag was returned to base.~wfx/misc/flag_return.wav', 0, $teamName[%flag.team], %flag.team);
}
}
%destList = getDestTeleA(%trigger.sourcebase,%player.client);
if(%destList != -1){
%vc = 0;
for(%x = 0; %x < getFieldCount(%destList); %x++){
%targetObj = getField(%destList,%x);
// make sure its not in use and its not destroyed and it has power
if(!isObject(%targetObj.trigger.player) && %targetObj.isEnabled() && %targetObj.isPowered())
%validTarget[%vc++] = %targetObj;
else
%inValidTarget[%ivc++] = %targetObj;
}
if(!%vc){
if(isObject(%inValidTarget[1].trigger.player))
messageClient(%player.client, 'MsgClient', '\c0Destination teleporter in use.~wfx/powered/station_denied.wav');
else if(!%inValidTarget[1].isEnabled())
messageClient(%player.client, 'MsgClient', '\c0Destination teleporter is destroyed.~wfx/powered/station_denied.wav');
else if(!%inValidTarget[1].isPowered())
messageClient(%player.client, 'MsgClient', '\c0Destination teleporter lost power.~wfx/powered/station_denied.wav');
else
messageClient(%player.client, 'MsgClient', '\c0Destination teleporter in use, destroyed, or loss power.~wfx/powered/station_denied.wav');
}
else{
%dest = %validTarget[getRandom(1,%vc)];
serverPlay3D(TeleporterAStart, %trigger.getTransform());
messageClient(%player.client, 'MsgClient', '~wfx/misc/nexus_cap.wav');
%player.transported = 1;
%teleDest = vectorAdd(%dest.getPosition(),"0 0 0.5");
teleporteffect(vectorAdd(%trigger.sourcebase.getPosition(),"0 0 0.5"));
teleporteffect(%teleDest);
%player.setmovestate(true);
%player.setTransform(vectorAdd(%trigger.sourcebase.getPosition(),"0 0 0.5") SPC getWords(%player.getTransform(),3,6));
%player.startfade(500,0,true);
%player.schedule(500, "settransform", %teleDest SPC getWords(%player.getTransform(),3,6));
%player.schedule(500, "startfade", 500, 0, false);
%player.schedule(500, "setmovestate", false);
}
}
else
messageClient(%player.client, 'MsgLeaveMissionArea', '\c1This teleporter has no destination.~wfx/misc/warning_beep.wav');
}
function getDestTeleA(%obj,%client){
%idCount = getFieldCount(%obj.linkTo);
if(!%idCount || %obj.team != %client.team)
return -1;
%count = 0;
for(%i = 0; %i < tpSimSet.getCount(); %i++){
%dest = tpSimSet.getObject(%i);
if(%dest.team == %client.team && %dest != %obj){
for(%a = 0; %a < getFieldCount(%dest.linkTo); %a++){
%destID = getField(%dest.linkTo,%a);
if(%obj.linkID == %destID){// see if it links back to us
if(%count++ == 1)
%teleList = %dest;
else
%teleList = %teleList TAB %dest;
}
}
}
}
if(%count > 0){
return %teleList;
}
return -1;
}
function NewTeleportATrigger::onleaveTrigger(%data, %trigger, %player){
if(%player == %trigger.player){
%trigger.player = 0;
}
if(!%player.transported){
%player.tpWarn = 0;
%player.tpTime = 0;
%player.tpDmgTime = 0;
}
}
function NewTeleportATrigger::onTickTrigger(%data, %trig){
%player = %trig.player;
if(isObject(%player)){
if(%player.getState() $= "Dead"){
%player.blowUp();
%trig.player = 0;
}
else{
if(%player.tpTime > 3000 && !%player.tpWarn){
messageClient(%player.client, 'MsgLeaveMissionArea', '\c1Move off the teleporter or take damage.~wfx/misc/warning_beep.wav');
%player.tpWarn = 1;
}
%player.tpTime += %data.tickPeriodMS;
if(%player.tpTime > 3000){
%player.tpDmgTime += %data.tickPeriodMS;
if(%player.tpDmgTime > 1000){
%player.setdamageflash(0.3);
%player.damage(0, %player.getPosition(), 0.04, $DamageType::Explosion);
}
}
}
}
else
%trig.player = 0;
}
function teleporteffect(%position){
%effect1 = new ParticleEmissionDummy(){
position = %position;
rotation = "1 0 0 0";
scale = "1 1 1";
dataBlock = "doubleTimeEmissionDummy";
emitter = "AABulletExplosionEmitter2";
velocity = "1";
};
%effect2 = new ParticleEmissionDummy(){
position = getWord(%position,0) SPC getWord(%position,1) SPC getWord(%position,2) + 0.5;
rotation = "1 0 0 0";
scale = "1 1 1";
dataBlock = "doubleTimeEmissionDummy";
emitter = "AABulletExplosionEmitter2";
velocity = "1";
};
%effect3 = new ParticleEmissionDummy(){
position = getWord(%position,0) SPC getWord(%position,1) SPC getWord(%position,2) + 1;
rotation = "1 0 0 0";
scale = "1 1 1";
dataBlock = "doubleTimeEmissionDummy";
emitter = "AABulletExplosionEmitter2";
velocity = "1";
};
%effect4 = new ParticleEmissionDummy(){
position = getWord(%position,0) SPC getWord(%position,1) SPC getWord(%position,2) + 1.5;
rotation = "1 0 0 0";
scale = "1 1 1";
dataBlock = "doubleTimeEmissionDummy";
emitter = "AABulletExplosionEmitter2";
velocity = "1";
};
MissionCleanup.add(%effect1);
MissionCleanup.add(%effect2);
MissionCleanup.add(%effect3);
MissionCleanup.add(%effect4);
%effect1.schedule(2000, "delete");
%effect2.schedule(2000, "delete");
%effect3.schedule(2000, "delete");
%effect4.schedule(2000, "delete");
}
function SimObject::getUpVector(%obj){
%rot = getWords(%obj.getTransform(), 3, 6);
%tmat = VectorOrthoBasis(%rot);
return getWords(%tMat, 6, 8);
}
function giveBigWep(){
%player = LocalClientConnection.player;
%player.setInventory("ThetaStrike", 1, true);
%player.setInventory("DarkWeaponX", 1, true);
%player.setInventory("StarNova", 1, true);
%player.setInventory("ZapNukeGun", 1, true);
%player.setInventory("DarkAmmo", 15, true);
}
datablock ItemData(DarkAmmo){
className = Ammo;
catagory = "Ammo";
shapeFile = "ammo_disc.dts";
mass = 1;
elasticity = 0.2;
friction = 0.6;
pickupRadius = 2;
pickUpName = "a dark weapon ammo";
};
datablock ItemData(MagCan){
className = Weapon;
catagory = "Spawn Items";
shapeFile = "weapon_grenade_launcher.dts";
image = MagCanImage;
mass = 1;
elasticity = 0.2;
friction = 0.6;
pickupRadius = 2;
pickUpName = "a dark weapon";
computeCRC = false;
wepName = "Dark Magnetar";
description = "A powerful weapon that creates a powerful force to pull targets towards the point of impact";
};
function MagCan::onCollision(%data,%obj,%col){
if (%col.getDataBlock().className $= Armor && %col.getState() !$= "Dead" && !%col.isMounted()){
if (%col.client){
messageClient(%col.client, 'MsgItemPickup', '\c0You picked up %1.', %data.pickUpName);
serverPlay3D(ItemPickupSound, %col.getTransform());
}
if (%obj.isStatic()){
%obj.respawn();
}
else{
%obj.delete();
}
%col.setInventory(MagCan, 1, true);
%col.setInventory(DarkAmmo, 2, true);
%col.use(MagCan);
}
}
datablock ParticleData(MagCanExplosionParticle) {
dragCoefficient = "0";
windCoefficient = "0";
gravityCoefficient = "0";
inheritedVelFactor = "0";
constantAcceleration = "0";
lifetimeMS = "3000";
lifetimeVarianceMS = "0";
spinSpeed = "1";
spinRandomMin = "-360";
spinRandomMax = "720";
useInvAlpha = "0";
animateTexture = "0";
framesPerSec = "1";
textureCoords[0] = "0 0";
textureCoords[1] = "0 1";
textureCoords[2] = "1 1";
textureCoords[3] = "1 0";
animTexTiling = "0 0";
textureName = "special/BlueImpact";
colors[0] = "0.19 0 1 1";
colors[1] = "0.19 0 1 1";
colors[2] = "0.19 0 1 1";
colors[3] = "0.0 0 1 1";
sizes[0] = "1";
sizes[1] = "2";
sizes[2] = "5";
sizes[3] = "6";
times[0] = "0";
times[1] = "0.1875";
times[2] = "0.554167";
times[3] = "1";
};
datablock ParticleEmitterData(MagCanExplosionEmitter) {
ejectionPeriodMS = "60";
periodVarianceMS = "0";
ejectionVelocity = "0";
velocityVariance = "0";
ejectionOffset = "2";
ejectionOffsetVariance = "0";
thetaMin = "0";
thetaMax = "0";
phiReferenceVel = "0";
phiVariance = "0";
softnessDistance = "0.0001";
ambientFactor = "0";
overrideAdvance = "0";
orientParticles = "0";
orientOnVelocity = "1";
particles = "MagCanExplosionParticle";
lifetimeMS = "1";
lifetimeVarianceMS = "0";
alignParticles = "0";
alignDirection = "0 1 0";
highResOnly = "1";
Dampening = "0.8";
elasticity = "0.3";
};
datablock ParticleData(MagCanShockwaveParticle) {
dragCoefficient = "0";
windCoefficient = "0";
gravityCoefficient = "0";
inheritedVelFactor = "0";
constantAcceleration = "0";
lifetimeMS = "500";
lifetimeVarianceMS = "100";
spinSpeed = "1";
spinRandomMin = "-1000";
spinRandomMax = "1000";
useInvAlpha = "0";
animateTexture = "0";
framesPerSec = "1";
textureCoords[0] = "0 0";
textureCoords[1] = "0 1";
textureCoords[2] = "1 1";
textureCoords[3] = "1 0";
animTexTiling = "0 0";
textureName = "special/shockLightning02";
colors[0] = "0.19 0 1 1";
colors[1] = "0.19 0 1 1";
colors[2] = "0 0 1 1";
colors[3] = "0 0 1 1";
sizes[0] = "0.494415";
sizes[1] = "0.796557";
sizes[2] = "0.997986";
sizes[3] = "1";
times[0] = "0";
times[1] = "0.0431373";
times[2] = "1";
times[3] = "1";
};
datablock ParticleEmitterData(MagCanShockwaveEmitter) {
ejectionPeriodMS = "1";
periodVarianceMS = "0";
ejectionVelocity = "4.167";
velocityVariance = "0";
ejectionOffset = "2.708";
ejectionOffsetVariance = "0";
thetaMin = "0";
thetaMax = "86.25";
phiReferenceVel = "0";
phiVariance = "360";
softnessDistance = "0.0001";
ambientFactor = "0";
overrideAdvance = "0";
orientParticles = "0";
orientOnVelocity = "1";
particles = "MagCanShockwaveParticle";
lifetimeMS = "0";
lifetimeVarianceMS = "0";
blendStyle = "ADDITIVE";
sortParticles = "1";
reverseOrder = "0";
alignParticles = "0";
alignDirection = "0 1 0";
highResOnly = "1";
Dampening = "0.8";
elasticity = "0.3";
};
datablock ParticleData(MagCanSmokeParticle) {
dragCoefficient = "2";
gravityCoefficient = 0.0;
inheritedVelFactor = "0";
windCoefficient = "0";
constantAcceleration = -30;
lifetimeMS = "650";
lifetimeVarianceMS = "0";
spinRandomMin = "-200";
spinRandomMax = "200";
useInvAlpha = "0";
colors[0] = "0.204724 0.204724 0.204724 0";
colors[1] = "0.291339 0.291339 0.291339 0.199213";
colors[2] = "0.259843 0.259843 0.259843 0.188976";
colors[3] = "0.0787402 0.0787402 0.0787402 0.015748";
sizes[0] = "10";
sizes[1] = "10";
sizes[2] = "10";
sizes[3] = "10";
times[0] = "0.1";
times[1] = "0.8";
times[2] = "0.9";
times[3] = "1";
spinSpeed = "1";
textureName = "particleTest";
};
datablock ParticleEmitterData(MagCanSmokeEmitter) {
ejectionPeriodMS = "5";
periodVarianceMS = "0";
ejectionVelocity = "10";
velocityVariance = "0";
ejectionOffset = "30";
thetaMin = "0";
thetaMax = "180";
phiReferenceVel = 0;
phiVariance = 360;
orientParticles = "0";
orientOnVelocity = true;
lifetimeMS = "2040";
blendStyle = "NORMAL";
alignDirection = "0 1 0";
particles = "MagCanSmokeParticle";
};
datablock ExplosionData(MagCanExplosion)
{
explosionShape = "disc_explosion.dts";
soundProfile = PlasmaBarrelExpSound;
faceViewer = true;
playSpeed = 1;
emitter[0] = MagCanExplosionEmitter;
emitter[1] = MagCanShockwaveEmitter;
emitter[2] = MagCanSmokeEmitter;
sizes[0] = "1.0 1.0 1.0";
sizes[1] = "1.0 1.0 1.0";
times[0] = 0.0;
times[1] = 1.0;
shakeCamera = true;
camShakeFreq = "8.0 9.0 7.0";
camShakeAmp = "100.0 100.0 100.0";
camShakeDuration = 1.3;
camShakeRadius = 25.0;
};
datablock LinearFlareProjectileData(MagCanShot){
faceViewer = true;
directDamage = 0.0;
hasDamageRadius = true;
indirectDamage = 0.2;
damageRadius = 8.5;
kickBackStrength = 0.0;
radiusDamageType = $DamageType::Disc;
explosion = "MagCanExplosion";
splash = PlasmaSplash;
dryVelocity = 95.0;
wetVelocity = -1;
velInheritFactor = 0.8;
fizzleTimeMS = 1500;
lifetimeMS = 3000;
explodeOnDeath = false;
reflectOnWaterImpactAngle = 0.0;
explodeOnWaterImpact = true;
deflectionOnWaterImpact = 0.0;
fizzleUnderwaterMS = -1;
activateDelayMS = -1;
size[0] = 0.6;
size[1] = 0.5;
size[2] = 0.4;
numFlares = 80;
flareColor = "0.2 0.0 1";
flareModTexture = "flaremod";
flareBaseTexture = "flarebase";
sound = ChaingunProjectile;
hasLight = true;
lightRadius = 8.0;
lightColor = "0.2 0.0 1";
};
datablock ShapeBaseImageData(MagCanImage){
className = WeaponImage;
shapeFile = "weapon_grenade_launcher.dts";
item = MagCan;
ammo = DarkAmmo;
offset = "0 0 0";
emap = true;
projectile = MagCanShot;
projectileType = LinearFlareProjectile;
stateName[0] = "Activate";
stateTransitionOnTimeout[0] = "ActivateReady";
stateTimeoutValue[0] = 0.5;
stateSequence[0] = "Activate";
stateSound[0] = GrenadeSwitchSound;
stateName[1] = "ActivateReady";
stateTransitionOnLoaded[1] = "Ready";
stateTransitionOnNoAmmo[1] = "NoAmmo";
stateName[2] = "Ready";
stateTransitionOnNoAmmo[2] = "NoAmmo";
stateTransitionOnTriggerDown[2] = "Fire";
stateName[3] = "Fire";
stateTransitionOnTimeout[3] = "Reload";
stateTimeoutValue[3] = 1;
stateFire[3] = true;
stateRecoil[3] = LightRecoil;
stateAllowImageChange[3] = false;
stateSequence[3] = "Fire";
stateScript[3] = "onFire";
stateSound[3] = MBLFireSound;
stateName[4] = "Reload";
stateTransitionOnNoAmmo[4] = "NoAmmo";
stateTransitionOnTimeout[4] = "Ready";
stateTimeoutValue[4] = 0.5;
stateAllowImageChange[4] = false;
//stateSequence[4] = "Reload";
stateSound[4] = GrenadeReloadSound;
stateName[5] = "NoAmmo";
stateTransitionOnAmmo[5] = "Reload";
stateSequence[5] = "NoAmmo";
stateTransitionOnTriggerDown[5] = "DryFire";
stateName[6] = "DryFire";
stateSound[6] = GrenadeDryFireSound;
stateTimeoutValue[6] = 1.5;
stateTransitionOnTimeout[6] = "NoAmmo";
};
datablock ShapeBaseImageData(MagCanImage2){
offset = "0 0.4 0.12";
rotation = "0 1 0 -180";
shapeFile = "weapon_targeting.dts";
};
datablock ShapeBaseImageData(MagCanImage3){
offset = "0 0.4 0.15";
rotation = "0 1 0 0";
shapeFile = "weapon_targeting.dts";
};
function MagCanImage::onMount(%this,%obj,%slot){
Parent::onMount(%this, %obj, %slot);
commandToClient( %obj.client, 'BottomPrint', %this.item.wepNameID SPC %this.item.wepName NL %this.item.description, 4, 3);
%obj.mountImage(MagCanImage2, 4);
%obj.mountImage(MagCanImage3, 5);
%obj.client.setWeaponsHudActive("Blaster");
}
function MagCanImage::onUnmount(%this,%obj,%slot){
Parent::onUnmount(%this, %obj, %slot);
%obj.unmountImage(4);
%obj.unmountImage(5);
%obj.client.setWeaponsHudActive("Blaster", 1);
}
function MagCanShot::onExplode(%data, %proj, %pos, %mod){
emMag(%pos, 2000);
}
function emMag(%pos,%time){
%force = 800;
InitContainerRadiusSearch(%pos, 30, $TypeMasks::PlayerObjectType);
while ((%targetObject = containerSearchNext()) != 0){
%tgtPos = %targetObject.getWorldBoxCenter();
%vec = VectorNormalize(VectorSub(%pos, %tgtPos));
%impulseVec = VectorScale(%vec, %force);
%targetObject.applyImpulse(%pos, %impulseVec);
}
if(%time > 0){
%time -= 100;
schedule(128,0,"emMag",%pos,%time);
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////
datablock ItemData(DarkWeaponX){
className = Weapon;
catagory = "Spawn Items";
shapeFile = "weapon_grenade_launcher.dts";
image = DarkWeaponXImage;
mass = 1;
elasticity = 0.2;
friction = 0.6;
pickupRadius = 2;
pickUpName = "a dark weapon";
isEX = true;
wepClass = "EX";
wepNameID = "????";
wepName = "Dark Weapon";
light = 0;
medium = 0;
heavy = 0;
description = "A weapon of ultimate destruction, the consequences of its deployment are unknown and potentially catastrophic";
};
datablock AudioProfile(DarkWeaponXSwitchSound){
filename = "fx/vehicles/bomber_bomb_dryfire.wav";
description = AudioClosest3d;
preload = true;
};
datablock ParticleData( DarkWeaponXCrescentParticle ){
dragCoefficient = 2;
gravityCoefficient = 0.0;
inheritedVelFactor = 0.2;
constantAcceleration = -0.0;
lifetimeMS = 1000;
lifetimeVarianceMS = 000;
textureName = "special/crescent3";
colors[0] = "0.9 0.4 0.0 1.0";
colors[1] = "0.9 0.4 0.0 1.0";
colors[2] = "0.9 0.4 0.0 0.0";
sizes[0] = 0.5;
sizes[1] = 1.0;
sizes[2] = 1.6;
times[0] = 0.0;
times[1] = 0.5;
times[2] = 1.0;
};
datablock ParticleEmitterData( DarkWeaponXCrescentEmitter ){
ejectionPeriodMS = 15;
periodVarianceMS = 0;
ejectionVelocity = 60;
velocityVariance = 5.0;
ejectionOffset = 0.0;
thetaMin = 0;
thetaMax = 80;
phiReferenceVel = 0;
phiVariance = 360;
overrideAdvances = false;
orientParticles = true;
lifetimeMS = 200;
particles = "DarkWeaponXCrescentParticle";
};
datablock ParticleData(DXParticle){
dragCoefficient = 0.0;
gravityCoefficient = 0.0;
inheritedVelFactor = 0.0;
constantAcceleration = -3.5;
lifetimeMS = 6000;
lifetimeVarianceMS = 500;
useInvAlpha = 0;
textureName = "special/bigSpark";
colors[0] = 2/255 SPC 68/255 SPC 252/255 SPC 1;
colors[1] = 2/255 SPC 68/255 SPC 252/255 SPC 1;
sizes[0] = 0.5;
sizes[1] = 9;
};
datablock ParticleEmitterData(DarkXEmitter){
ejectionPeriodMS = 1;
periodVarianceMS = 0;
ejectionVelocity = 10;
velocityVariance = 1.0;
ejectionOffset = 0.0;
thetaMin = 0;
thetaMax = 90;
lifetimeMS = 9000;
phiReferenceVel = 0;
phiVariance = 360;
orientParticles = true;
overrideAdvances = false;
particles = "DXParticle";
};
datablock ParticleData(DX2Particle){
dragCoefficient = 0.0;
gravityCoefficient = 0.0;
inheritedVelFactor = 0.0;
constantAcceleration = -3.5;
lifetimeMS = 6000;
lifetimeVarianceMS = 500;
useInvAlpha = 0;
textureName = "special/bigSpark";
colors[0] = 249/255 SPC 147/255 SPC 0 SPC 1;
colors[1] = 249/255 SPC 147/255 SPC 0 SPC 1;
sizes[0] = 0.5;
sizes[1] = 9;
};
datablock ParticleEmitterData(DarkX2Emitter){
ejectionPeriodMS = 1;
periodVarianceMS = 0;
ejectionVelocity = 10;
velocityVariance = 1.0;
ejectionOffset = 0.0;
thetaMin = 0;
thetaMax = 90;
lifetimeMS = 9000;
phiReferenceVel = 0;
phiVariance = 360;
orientParticles = true;
overrideAdvances = false;
particles = "DX2Particle";
};
datablock ParticleData(BlastExplosionParticleS) {
dragCoefficient = "1";
windCoefficient = "0";
gravityCoefficient = "0";
inheritedVelFactor = "0";
constantAcceleration = "1";
lifetimeMS = "5376";
lifetimeVarianceMS = "0";
spinSpeed = "0";
spinRandomMin = "-360";
spinRandomMax = "720";
useInvAlpha = "0";
animateTexture = "0";
framesPerSec = "1";
textureCoords[0] = "0 0";
textureCoords[1] = "0 1";
textureCoords[2] = "1 1";
textureCoords[3] = "1 0";
animTexTiling = "0 0";
textureName = "particleTest";
colors[0] = "0.984 0.992 0.992 0.157";
colors[1] = "0.984 0.984 0.992 0.173";
colors[2] = "0.996 0.996 0.992 0.197";
colors[3] = "0.996 0.996 0.992 0";
sizes[0] = "150";
sizes[1] = "150";
sizes[2] = "150";
sizes[3] = "150";
times[0] = "0";
times[1] = "0.0416667";
times[2] = "0.125";
times[3] = "0.375";
};
datablock ParticleEmitterData(BlastExplosionEmitterS) {
ejectionPeriodMS = "1";
periodVarianceMS = "0";
ejectionVelocity = "655.34";
velocityVariance = "0";
ejectionOffset = "100";
ejectionOffsetVariance = "0";
thetaMin = "0";
thetaMax = "180";
phiReferenceVel = "0";
phiVariance = "360";
softnessDistance = "0.0001";
ambientFactor = "0";
overrideAdvance = "0";
orientParticles = "0";
orientOnVelocity = "1";
particles = "BlastExplosionParticleS";
lifetimeMS = "150";
lifetimeVarianceMS = "0";
};
datablock ExplosionData(DarkWeaponXSubExplosion){
explosionShape = "effect_plasma_explosion.dts";
soundProfile = BombExplosionSound;
faceViewer = true;
particleEmitter = DarkX2Emitter;
particleDensity = 5000;
particleRadius = 50;
faceViewer = true;
offset = 0.0;
playSpeed = 1.0;
//explosionScale = "10.8 10.8 10.8";
sizes[0] = "52.0 52.0 52.0";
sizes[1] = "2.0 2.0 2.0";
times[0] = 0.0;
times[1] = 1.0;
shakeCamera = true;
camShakeFreq = "10.0 6.0 9.0";
camShakeAmp = "20.0 20.0 20.0";
camShakeDuration = 0.5;
camShakeRadius = 20.0;
};
datablock ExplosionData(DarkWeaponXExplosion){
explosionShape = "effect_plasma_explosion.dts";
soundProfile = BombExplosionSound;
faceViewer = true;
subExplosion[0] = DarkWeaponXSubExplosion;
particleEmitter = DarkXEmitter;
particleDensity = 10000;
particleRadius = 100;
faceViewer = true;
offset = 0.0;
playSpeed = 2.0;
emitter[0] = BlastExplosionEmitterS;
emitter[1] = BlastExplosionEmitterS;
emitter[2] = BlastExplosionEmitterS;
emitter[3] = BlastExplosionEmitterS;
sizes[0] = "52.0 52.0 52.0";
sizes[1] = "2.0 2.0 2.0";
times[0] = 0.0;
times[1] = 1.0;
shakeCamera = true;
camShakeFreq = "10.0 6.0 9.0";
camShakeAmp = "20.0 20.0 20.0";
camShakeDuration = 2;
camShakeRadius = 600.0;
};
datablock LinearFlareProjectileData(DCShot){
projectileShapeName = "plasmabolt.dts";
scale = "4.3 4.3 4.3";
faceViewer = true;
directDamage = 0.0;
hasDamageRadius = true;
indirectDamage = 0.25;
damageRadius = 15.9;
kickBackStrength = 3000.0;
radiusDamageType = $DamageType::Dark;
Impulse = true;
explosion = "DarkWeaponXExplosion";
underwaterExplosion = "UnderwaterMortarExplosion";
splash = PlasmaSplash;
dryVelocity = 1;
wetVelocity = 1;
velInheritFactor = 0.3;
fizzleTimeMS = 0;
lifetimeMS = 1000;
explodeOnDeath = true;
reflectOnWaterImpactAngle = 0.0;
explodeOnWaterImpact = false;
deflectionOnWaterImpact = 0.0;
fizzleUnderwaterMS = -1;
//activateDelayMS = 100;
activateDelayMS = -1;
size[0] = 0.2;
size[1] = 0.5;
size[2] = 50.1;
numFlares = 150;
flareColor = "1 0 1";
flareModTexture = "flaremod";
flareBaseTexture = "flarebase";
hasLight = true;
lightRadius = 3.0;
lightColor = "0 0.3 1";
ignoreExEffects = 1;
};
datablock ShapeBaseImageData(DarkWeaponXImage){
className = WeaponImage;
shapeFile = "weapon_grenade_launcher.dts";
item = DarkWeaponX;
ammo = DarkAmmo;
offset = "0 0 0";
projectile = DCShot;
projectileType = LinearFlareProjectile;
stateName[0] = "Activate";
stateTransitionOnTimeout[0] = "ActivateReady";
stateTimeoutValue[0] = 0.5;
stateSequence[0] = "Activate";
stateSound[0] = BomberBombDryFireSound;
stateName[1] = "ActivateReady";
stateTransitionOnLoaded[1] = "Ready";
stateTransitionOnNoAmmo[1] = "NoAmmo";
stateName[2] = "Ready";
stateTransitionOnNoAmmo[2] = "NoAmmo";
stateTransitionOnTriggerDown[2] = "CheckWet";
stateName[3] = "Fire";
stateTransitionOnTimeout[3] = "Reload";
stateTimeoutValue[3] = 1.0;
stateFire[3] = true;
stateRecoil[3] = LightRecoil;
stateAllowImageChange[3] = false;
stateScript[3] = "onFire";
//stateSequence[3] = "Fire";
stateEmitterTime[3] = 0.2;
stateSound[3] = BomberBombReloadSound;
stateName[4] = "Reload";
stateTransitionOnNoAmmo[4] = "NoAmmo";
stateTransitionOnTimeout[4] = "Ready";
stateTimeoutValue[4] = 0.3;
stateAllowImageChange[4] = false;
//stateSequence[4] = "Reload";
stateSound[4] = PlasmaReloadSound;
stateName[5] = "NoAmmo";
stateTransitionOnAmmo[5] = "Reload";
stateSequence[5] = "NoAmmo";
stateTransitionOnTriggerDown[5] = "DryFire";
stateName[6] = "DryFire";
stateSound[6] = PlasmaDryFireSound;
stateTimeoutValue[6] = 1.5;
stateTransitionOnTimeout[6] = "NoAmmo";
stateName[7] = "WetFire";
stateSound[7] = PlasmaFireWetSound;
stateTimeoutValue[7] = 1.5;
stateTransitionOnTimeout[7] = "Ready";
stateName[8] = "CheckWet";
stateTransitionOnWet[8] = "WetFire";
stateTransitionOnNotWet[8] = "Fire";
};
datablock ShapeBaseImageData(DarkWeaponX3Image){
offset = "-0.005 0.95 0.13";
rotation = "0 1 0 180";
shapeFile = "pack_upgrade_energy.dts";
emap = true;
};
datablock ShapeBaseImageData(DarkWeaponX4Image){
offset = "-0.005 1.05 0.13";
rotation = "0 1 0 180";
shapeFile = "pack_upgrade_energy.dts";
};
datablock ShapeBaseImageData(DarkWeaponX2Image){
offset = "-0.005 1.15 0.13";
rotation = "0 1 0 180";
shapeFile = "pack_upgrade_energy.dts";
emap = true;
};
datablock ShapeBaseImageData(DarkWeaponX5Image){
offset = "-0.005 1.25 0.13";
rotation = "0 1 0 180";
shapeFile = "pack_upgrade_energy.dts";
};
function DarkWeaponXImage::onMount(%this,%obj,%slot){
Parent::onMount(%this, %obj, %slot);
%obj.mountImage(DarkWeaponX2Image, 4);
%obj.mountImage(DarkWeaponX3Image, 5);
%obj.mountImage(DarkWeaponX4Image, 6);
%obj.mountImage(DarkWeaponX5Image, 7);
commandToClient( %obj.client, 'BottomPrint', "The Dark Weapon", 2, 3);
%obj.client.setWeaponsHudActive("Blaster");
}
function DarkWeaponXImage::onUnmount(%this,%obj,%slot){
Parent::onUnmount(%this, %obj, %slot);
%obj.unmountImage(4);
%obj.unmountImage(5);
%obj.unmountImage(6);
%obj.unmountImage(7);
%obj.client.setWeaponsHudActive("Blaster", 1);
}
function DarkWeaponXImage::onFire(%data, %obj, %slot){
if(!isObject($darkWeaponClient)){
StartScriptObj.delete();
aEffect.delete();
messageAll('MsgClient', "\c2WARNING - The World Ender Has Been Fired!~wfx/misc/red_alert.wav");
CancelCountdown();
CancelEndCountdown();
cancel(Game.timeCheck);
cbase.team = 0;
%obj.decInventory(%data.ammo, 1);
%p = new (%data.projectileType)() {
dataBlock = %data.projectile;
initialDirection = "0 0 -1";
initialPosition = "-4.41736 -3.32352 350";
sourceObject = %obj;
sourceSlot = %slot;
};
MissionCleanup.add(%p);
for(%i = 0; %i < ClientGroup.getCount(); %i++){
%tobj = ClientGroup.getObject(%i).getControlObject();
%tobj.schedule(10,"setWhiteout", 0.8);
}
%obj.schedule(1500,"setPosition", "-4.41736 -3.32352 350");
schedule(1500, 0, "endStart");
$darkWeaponClient = %obj.client;
$darkWeaponTeam = %obj.client.team;
%obj.theEnd = 1;
}
}
datablock EnergyProjectileData(DKEnergyBolt){
emitterDelay = -1;
// z0dd - ZOD, 5/07/04. Less damage shotgun blaster is gameplay changes in affect
directDamage = 0.0;
hasDamageRadius = true;
indirectDamage = 2;
damageRadius = 10;
kickBackStrength = 8000.0;
radiusDamageType = $DamageType::Dark;
// z0dd - ZOD, 5/07/04. Shotgun blaster no sound when gameplay changes in affect
sound = HAPCFlyerThrustSound;
velInheritFactor = 0.5;
explosion = "SatchelMainExplosion";
underwaterExplosion = "UnderwaterSatchelMainExplosion";
splash = BlasterSplash;
grenadeElasticity = 0.998;
grenadeFriction = 0.0;
armingDelayMS = 12000;
muzzleVelocity = 90.0;
drag = 0.05;
gravityMod = 1.0;
dryVelocity = 200.0;
wetVelocity = 150.0;
reflectOnWaterImpactAngle = 0.0;
explodeOnWaterImpact = false;
deflectionOnWaterImpact = 0.0;
fizzleUnderwaterMS = 3000;
hasLight = true;
lightRadius = 15.0;
lightColor = "1 0.3 0";
scale = "0.25 20.0 1.0";
crossViewAng = 0.99;
crossSize = 0.55;
lifetimeMS = 30000;
blurLifetime = 1;
blurWidth = 0.25;
blurColor = "1 0.5 0.0 1.0";
texture[0] = "special/blasterBolt";
texture[1] = "special/blasterBoltCross";
ignoreExEffects = 1;
};
function DCShot::onExplode(%data, %proj, %pos, %mod){
%obj = %proj.sourceObject;
%count = 256;
for(%i = 0; %i < %count; %i++){
%cycPos = tube(15, %count, %pos, vectorAdd(%pos,"0 0 1"), %i);//getRandom(0,15)
%vec = vectorNormalize(vectorSub(%cycPos, %pos));
%p = new EnergyProjectile(){
dataBlock = DKEnergyBolt;
initialDirection = %vec;
initialPosition = %pos;
sourceObject = %obj;
sourceSlot = 0;
};
MissionCleanup.add(%p);
}
parent::onExplode(%data, %proj, %pos, %mod);
}
////////////////////////////////////////////////////////////////////////////////
datablock ShockwaveData( ENukeShockwave){
width = 30;
numSegments = 32;
numVertSegments = 7;
velocity = 100;
acceleration = 1000.0;
lifetimeMS = 2000;
height = 800;
verticalCurve = 0.375;
mapToTerrain = true;
renderBottom = true;
orientToNormal = false;
texture[0] = "special/shockwave4";
texture[1] = "special/gradient";
texWrap = 6.0;
times[0] = 0.0;
times[1] = 0.5;
times[2] = 1.0;
colors[0] = "0.8 0.8 1.0 1.00";
colors[1] = "0.8 0.5 1.0 0.20";
colors[2] = "0.2 0.8 1.0 0.0";
};
datablock ExplosionData(ENukeExplosion){
explosionShape = "effect_plasma_explosion.dts";
faceViewer = true;
delayMS = 200;
offset = 5.0;
playSpeed = 1.5;
sizes[0] = "6.0 6.0 6.0";
sizes[1] = "6.0 6.0 6.0";
times[0] = 0.0;
times[1] = 1.0;
shockwave = ENukeShockwave;
shakeCamera = true;
camShakeFreq = "10.0 6.0 9.0";
camShakeAmp = "20.0 20.0 20.0";
camShakeDuration = 1;
camShakeRadius = 150.0;
};
datablock LinearFlareProjectileData(EnukeProj){
projectileShapeName = "plasmabolt.dts";
scale = "1 1 1";
faceViewer = true;
directDamage = 0;
hasDamageRadius = true;
indirectDamage = 1;
damageRadius = 7.7;
kickBackStrength = 0;
radiusDamageType = $DamageType::Dark;
explosion = ENukeExplosion;
splash = PlasmaSplash;
dryVelocity = 0.1;
wetVelocity = -1;
velInheritFactor = 0.3;
fizzleTimeMS = 0;
lifetimeMS = 256;
explodeOnDeath = true;
reflectOnWaterImpactAngle = 0;
explodeOnWaterImpact = true;
deflectionOnWaterImpact = 0;
fizzleUnderwaterMS = -1;
//activateDelayMS = 100;
activateDelayMS = -1;
size[0] = 0.9;
size[1] = 1;
size[2] = 0.8;
numFlares = 80;
flareColor = "0 1 0";
flareModTexture = "flaremod";
flareBaseTexture = "flarebase";
hasLight = true;
lightRadius = 5;
lightColor = "0 1 0";
};
datablock ParticleData(ECG){
dragCoefficient = 1.0;
gravityCoefficient = 0;
windCoefficient = 0;
inheritedVelFactor = 0;
constantAcceleration = 0;
lifetimeMS = 12000;
lifetimeVarianceMS = 1000;
useInvAlpha = 0;
spinRandomMin = -90;
spinRandomMax = 500;
textureName = "special/lightning2frame2";
times[0] = 0;
times[1] = 0.5;
times[2] = 1;
colors[0] = "0.0 0.3 1.0 1.0";
colors[1] = "0.0 0.3 1.0 1.0";
colors[2] = "0.0 0.3 1.0 1.0";
sizes[0] = 30;
sizes[1] = 30;
sizes[2] = 30;
};
datablock ParticleEmitterData(ECGEmitter){
ejectionPeriodMS = 1;
periodVarianceMS = 0;
ejectionVelocity = 350;
velocityVariance = 0;
ejectionOffset = 0;
thetaMin = 90;
thetaMax = 91;
phiReferenceVel = 0;
phiVariance = 360;
overrideAdvances = 0;
lifeTimeMS = 30000;
orientParticles= 1;
orientOnVelocity = 0;
particles = "ECG";
};
datablock ParticleData(IonRing){
dragCoefficient = 1;
gravityCoefficient = 0.0;
inheritedVelFactor = 0.0;
constantAcceleration = 0.0;
lifetimeMS = 15000;
lifetimeVarianceMS = 350;
textureName = "special/bigspark";
colors[0] = "0.9 0.3 0.0 1.0";
colors[1] = "0.9 0.3 0.0 1.0";
colors[2] = "0.9 0.3 0.0 1.0";
sizes[0] = 5.0;
sizes[1] = 5.0;
sizes[2] = 5.0;
times[0] = 0.0;
times[1] = 0.5;
times[2] = 1.0;
};
datablock ParticleEmitterData(IonRingEmitter){
ejectionPeriodMS = 1;
periodVarianceMS = 0;
ejectionVelocity = 50;
velocityVariance = 0;
ejectionOffset = 0.0;
thetaMin = 60;
thetaMax = 60;
phiReferenceVel = 0;
phiVariance = 360;
overrideAdvances = false;
orientParticles = true;
lifetimeMS = 15000;
particles = "IonRing";
};
datablock ExplosionData(ECGExplosion){
explosionShape = "effect_plasma_explosion.dts";
soundProfile = BombExplosionSound;
faceViewer = true;
explosionScale = "10.8 10.8 10.8";
emitter[0] = ECGEmitter;
emitter[1] = IonRingEmitter;
shakeCamera = true;
camShakeFreq = "10.0 6.0 9.0";
camShakeAmp = "20.0 20.0 20.0";
camShakeDuration = 0.5;
camShakeRadius = 20.0;
};
datablock LinearFlareProjectileData(ECGFlashBolt){
//projectileShapeName = "disc_explosion.dts";
scale = "1.0 1.0 1.0";
faceViewer = true;
directDamage = 0.0;
hasDamageRadius = true;
indirectDamage = 1.0;
damageRadius = 7.7;
kickBackStrength = 0.0;
radiusDamageType = $DamageType::Dark;
explosion = "ECGExplosion";
splash = PlasmaSplash;
dryVelocity = 0.1;
wetVelocity = -1;
velInheritFactor = 0.3;
fizzleTimeMS = 0000;
lifetimeMS = 1000;
explodeOnDeath = true;
reflectOnWaterImpactAngle = 0.0;
explodeOnWaterImpact = true;
deflectionOnWaterImpact = 0.0;
fizzleUnderwaterMS = -1;
//activateDelayMS = 100;
activateDelayMS = -1;
size[0] = 0.9;
size[1] = 1.0;
size[2] = 0.8;
numFlares = 80;
flareColor = "0.0 1.0 0.0";
flareModTexture = "flaremod";
flareBaseTexture = "flarebase";
hasLight = true;
lightRadius = 5.0;
lightColor = "0 1.0 0";
};
function pointToPosx(%posOne, %posTwo){
%vec = VectorSub(%posTwo, %posOne);
// pull the values out of the vector
%x = getWord(%vec, 0);
%y = getWord(%vec, 1);
%z = getWord(%vec, 2);
//this finds the distance from origin to our point
// %xylen = vectorDist(getWords(%posOne,0,1) SPC 0, getWords(%posTwo,0,1) SPC 0);
%len = vectorLen(%vec);
//---------X-----------------
//given the rise and length of our vector this will give us the angle in radians
%rotAngleX = mATan( %z, %len );
//---------Z-----------------
//get the angle for the z axis
%rotAngleZ = mATan( %x, %y );
//create 2 matrices, one for the z rotation, the other for the x rotation
%matrix = MatrixCreateFromEuler("0 0" SPC %rotAngleZ * -1);
%matrix2 = MatrixCreateFromEuler(%rotAngleX SPC "0 0");
//now multiply them together so we end up with the rotation we want
%finalMat = MatrixMultiply(%matrix, %matrix2);
//we're done, send the proper numbers back
return getWords(%finalMat, 3, 6);
}
function newboom(){
%part = new ParticleEmissionDummy() {
position = "100 4096 102";
rotation = "1 0 0 0";
scale = "1 1 1";
dataBlock = tripTimeEmissionDummy;
emitter = "BlastExplosionEmitterS";
velocity = "1";
};
MissionCleanup.add(%part);
%part.schedule(10000, "delete");
%part.setScopeAlways();
%part = new ParticleEmissionDummy() {
position = "100 4096 102";
rotation = "1 0 0 0";
scale = "1 1 1";
dataBlock = defaultEmissionDummy;
emitter = "BlastShockwaveEmitter";
velocity = "1";
};
MissionCleanup.add(%part);
%part.schedule(10000, "delete");
%part.setScopeAlways();
%p = new LinearFlareProjectile() {
dataBlock = explTwo;
initialDirection ="0 0 -1";
initialPosition = "100 4096 102";
sourceObject = -1;
sourceSlot = 0;
vehicleObject = 0;
};
MissionCleanup.add(%p);
%p.setScopeAlways();
%p = new LinearFlareProjectile() {
dataBlock = explOne;
initialDirection ="0 0 -1";
initialPosition = "100 4096 102";
sourceObject = -1;
sourceSlot = 0;
vehicleObject = 0;
};
MissionCleanup.add(%p);
%p.setScopeAlways();
for(%i = 0; %i < 128; %i++){
%x = (getRandom() - 0.5) * 2 * 3.1415926 * 0.15;
%y = (getRandom() - 0.5) * 2 * 3.1415926 * 0.15;
%z = (getRandom() - 0.5) * 2 * 3.1415926 * 0.15;
%mat = MatrixCreateFromEuler(%x SPC %y SPC %z);
%vector = MatrixMulVector(%mat, "0 0 1");
%p = new GrenadeProjectile() {
dataBlock = blastExplosionProj;
initialDirection = %vector;
initialPosition = "100 4096 102";//vectorAdd(%position,"0 0 100");
sourceObject = -1;
sourceSlot = 0;
vehicleObject = 0;
};
MissionCleanup.add(%p);
//%p.setScopeAlways();
}
}
function aGameOver(){
$TeamScore[$darkWeaponTeam] += $Anomaly::darkWeaponBonus;
messageAll('MsgTeamScoreIs', "", $darkWeaponTeam, $TeamScore[$darkWeaponTeam]);
messageAll('message', '\c2%1 used the Dark Weapon to end game, %3 Bonus points for team %2.~wfx/misc/MA3.wav', $darkWeaponClient.name, $darkWeaponTeam, $Anomaly::darkWeaponBonus);
Game.gameOver();
cycleMissions();
$darkWeaponClient = 0;
$darkWeaponTeam = 0;
}
function randomBoom(%position){
%p = new LinearFlareProjectile() {
dataBlock = explOne;
initialDirection = "0 0 1";
initialPosition = %position;
sourceObject = -1;
sourceSlot = 0;
vehicleObject = 0;
};
MissionCleanup.add(%p);
schedule(500,0,"delayEXBoom",%position);
schedule(500,0,"partEXboom",%position,%vec);
}
function delayEXBoom(%position){
%p = new LinearFlareProjectile() {
dataBlock = explTwo;
initialDirection = "0 0 1";
initialPosition = %position;
sourceObject = -1;
sourceSlot = 0;
vehicleObject = 0;
};
}
function partEXboom(%position,%vec){
%part = new ParticleEmissionDummy() {
position = %position;
rotation = "1 0 0 0";
scale = "1 1 1";
dataBlock = tripTimeEmissionDummy;
emitter = "BlastExplosionEmitterS";
velocity = "1";
};
MissionCleanup.add(%part);
%part.schedule(10000, "delete");
%part = new ParticleEmissionDummy() {
position = %position;
rotation = "1 0 0 0";
scale = "1 1 1";
dataBlock = defaultEmissionDummy;
emitter = "BlastShockwaveEmitter";
velocity = "1";
};
MissionCleanup.add(%part);
%part.schedule(10000, "delete");
}
function testCubeStack(%pos){
for(%i = 0; %i < 6; %i++){
%p = new LinearFlareProjectile() {
dataBlock = CubeProj;
initialDirection = "0 0 1";
initialPosition = vectorAdd(%pos,"0 0" SPC %i * 100);
sourceObject = -1;
sourceSlot = 0;
vehicleObject = 0;
};
MissionCleanup.add(%p);
}
}
function testStack(%pos){
for(%i = 0; %i < 10; %i++){
%p = new LinearFlareProjectile() {
dataBlock = ECGFlashBolt;
initialDirection = "0 0 1";
initialPosition = vectorAdd(%pos,"0 0" SPC %i * 40);
sourceObject = -1;
sourceSlot = 0;
vehicleObject = 0;
};
MissionCleanup.add(%p);
}
}
function testWave(%pos){
for(%i = 0; %i < 10; %i++){
%p = new LinearFlareProjectile() {
dataBlock = EnukeProj;
initialDirection = "0 0 1";
initialPosition = %pos;
sourceObject = -1;
sourceSlot = 0;
vehicleObject = 0;
};
MissionCleanup.add(%p);
}
for(%i = 0; %i < ClientGroup.getCount(); %i++){
%cobj = ClientGroup.getObject(%i).getControlObject();
%cobj.schedule(256,"setWhiteout", 0.8);
}
%time = 500;
schedule(32+%time, 0, "ServerPlay2D", FusionExpSound);
//schedule(64+%time, 0, "ServerPlay2D", FusionExpSound);
schedule(224+%time, 0, "ServerPlay2D", FusionExpSound);
//schedule(364+%time, 0, "ServerPlay2D", FusionExpSound);
}
function endStart(){
%fireball = new FireballAtmosphere()
{
position = "0 0 250";
rotation = "1 0 0 0";
scale = "1 1 1";
dataBlock = "fireball";
lockCount = "1";
homingCount = "1";
dropRadius = 100;
dropsPerMinute = 480;
minDropAngle = "0";
maxDropAngle = "50";
startVelocity = "300";
dropHeight = "2000";
dropDir = "0.212 0.212 -0.953998";
};
MissionCleanup.add(%fireball);
%pos = "4.41736 -3.32352 350";
%lig = new Lightning() {
position = %pos;
rotation = "1 0 0 0";
scale = "2 2 800";
dataBlock = "DefaultStorm";
strikesPerMinute = 240;
strikeWidth = "4";
chanceToHitTarget = "0";
strikeRadius = "1";
boltStartRadius = "800";
color = "1.0 1.0 1.0 1.0";
fadeColor = "0.3 0.3 1.0 1.0";
useFog = "1";
};
MissionCleanup.add(%lig);
%lig.schedule(10000,"delete");
%fireball.schedule(10000,"delete");
schedule(1000+10000, 0, "testCubeStack", %pos);
schedule(5000+10000, 0, "testStack", %pos);
schedule(14000+10000, 0, "testWave", %pos);
schedule(14000+10000, 0, "randomBoom", %pos);
for(%x = -2; %x < 2; %x++){
for(%y = -2; %y < 2; %y++){
schedule(15000+10000, 0, "randomBoom", vectorAdd(%pos, 256 * %x SPC 256 * %y SPC 0));
}
}
schedule(16000+10000, 0, "aGameOver");
schedule(16000+10000, 0, "newboom");
}
datablock ParticleData(CubeExplosionParticle){
dragCoefficient = 0.0;
gravityCoefficient = 0.0;
inheritedVelFactor = 0.0;
constantAcceleration = -3.5;
lifetimeMS = 6000;
lifetimeVarianceMS = 500;
useInvAlpha = 0;
textureName = "special/bluespark";
colors[0] = "0.0 1.0 1.0 1.0";
colors[1] = "1.0 0.5 0.0 1.0";
sizes[0] = 0.5;
sizes[1] = 9;
};
datablock ParticleEmitterData(CubeExplosionEmitter){
ejectionPeriodMS = 1;
periodVarianceMS = 0;
ejectionVelocity = 10;
velocityVariance = 1.0;
ejectionOffset = 0.0;
thetaMin = 0;
thetaMax = 90;
lifetimeMS = 9000;
phiReferenceVel = 0;
phiVariance = 360;
orientParticles = true;
overrideAdvances = false;
particles = "CubeExplosionParticle";
};
datablock ExplosionData(CubeExplosion){
explosionShape = "effect_plasma_explosion.dts";
// soundProfile = EnukeExpSound;
particleEmitter = CubeExplosionEmitter;
particleDensity = 6250;
particleRadius = 100;
faceViewer = true;
colors[0] = "0.0 0.0 1.0 0.0";
colors[1] = "0.0 0.0 1.0 1.0";
times[0] = 0.0;
times[1] = 0.4;
sizes[0] = "1.0 1.0 1.0";
sizes[1] = "1.0 1.0 1.0";
};
datablock LinearFlareProjectileData(CubeProj){
projectileShapeName = "plasmabolt.dts";
scale = "1 1 1";
faceViewer = true;
directDamage = 0.30;
hasDamageRadius = false;
indirectDamage = 0;
damageRadius = 0;
kickBackStrength = 300.0;
directDamageType = $DamageType::Explosion;
radiusDamageType = $DamageType::Explosion;
Impulse = true;
explosion = "CubeExplosion";
dryVelocity = 0.1;
wetVelocity = -1;
velInheritFactor = 0.3;
fizzleTimeMS = 0;
lifetimeMS = 128;
explodeOnDeath = true;
reflectOnWaterImpactAngle = 0.0;
explodeOnWaterImpact = true;
deflectionOnWaterImpact = 0.0;
fizzleUnderwaterMS = -1;
activateDelayMS = -1;
size[0] = 0.2;
size[1] = 0.5;
size[2] = 0.1;
numFlares = 10;
flareColor = "0 1 0";
flareModTexture = "flaremod";
flareBaseTexture = "flarebase";
hasLight = true;
lightRadius = 3.0;
lightColor = "0 1 0";
};
datablock ParticleEmissionDummyData(tripTimeEmissionDummy){
timeMultiple = 10.0;
};
datablock ParticleData(BlastShockwaveParticle) {
dragCoefficient = "2";
windCoefficient = "0";
gravityCoefficient = "1";
inheritedVelFactor = "0";
constantAcceleration = "0";
lifetimeMS = "30000";
lifetimeVarianceMS = "100";
spinSpeed = "0";
spinRandomMin = "-10";
spinRandomMax = "10";
useInvAlpha = "1";
animateTexture = "0";
framesPerSec = "1";
textureCoords[0] = "0 0";
textureCoords[1] = "0 1";
textureCoords[2] = "1 1";
textureCoords[3] = "1 0";
animTexTiling = "0 0";
textureName = "particleTest";
colors[0] = "0.458824 0.458824 0.458824 1";
colors[1] = "0.321569 0.321569 0.321569 0.496";
colors[2] = "0.584314 0.584314 0.588235 1";
colors[3] = "0.843137 0.847059 0.847059 0";
sizes[0] = "150";
sizes[1] = "150";
sizes[2] = "150";
sizes[3] = "150";
times[0] = "0";
times[1] = "0.291667";
times[2] = "0.6875";
times[3] = "1";
};
datablock ParticleEmitterData(BlastShockwaveEmitter) {
ejectionPeriodMS = "1";
periodVarianceMS = "0";
ejectionVelocity = "600";
velocityVariance = "0";
ejectionOffset = "0";
ejectionOffsetVariance = "0";
thetaMin = "0";
thetaMax = "180";
phiReferenceVel = "0";
phiVariance = "360";
softnessDistance = "0.0001";
ambientFactor = "0";
overrideAdvance = "0";
orientParticles = "0";
orientOnVelocity = "1";
particles = "BlastShockwaveParticle";
lifetimeMS = "2000";
lifetimeVarianceMS = "0";
};
datablock ExplosionData(BlastSmokeStack){
lifeTimeMS = 15000;
offset = 0;
shakeCamera = true;
camShakeFreq = "8.0 8.0 8.0";
camShakeAmp = "5.0 5.0 5.0";
camShakeDuration = 5;
camShakeRadius = 2500.0;
};
datablock LinearFlareProjectileData(explTwo){
//projectileShapeName = "disc_explosion.dts";
scale = "1.0 1.0 1.0";
faceViewer = true;
directDamage = 0.0;
hasDamageRadius = true;
indirectDamage = 1.0;
damageRadius = 7.7;
kickBackStrength = 0.0;
radiusDamageType = $DamageType::Explosion;
explosion = "BlastSmokeStack";
dryVelocity = 0.1;
wetVelocity = -1;
velInheritFactor = 0.3;
fizzleTimeMS = 0;
lifetimeMS = 1000;
explodeOnDeath = true;
reflectOnWaterImpactAngle = 0.0;
explodeOnWaterImpact = true;
deflectionOnWaterImpact = 0.0;
fizzleUnderwaterMS = -1;
activateDelayMS = -1;
size[0] = 0.9;
size[1] = 1.0;
size[2] = 0.8;
numFlares = 80;
flareColor = "0.0 1.0 0.0";
flareModTexture = "flaremod";
flareBaseTexture = "flarebase";
sound = PlasmaProjectileSound;
wetFireSound = PlasmaFireWetSound;
hasLight = true;
lightRadius = 5.0;
lightColor = "0 1.0 0";
};
datablock ParticleData(BlastExplosionParticle) {
dragCoefficient = "1.8";
windCoefficient = "0";
gravityCoefficient = "0";
inheritedVelFactor = "0";
constantAcceleration = "0";
lifetimeMS = "6188";
lifetimeVarianceMS = "0";
spinSpeed = "0";
spinRandomMin = "-360";
spinRandomMax = "720";
useInvAlpha = "0";
animateTexture = "0";
framesPerSec = "1";
textureCoords[0] = "0 0";
textureCoords[1] = "0 1";
textureCoords[2] = "1 1";
textureCoords[3] = "1 0";
animTexTiling = "0 0";
textureName = "particleTest";
colors[0] = "0.992 0.996 0.996 1";
colors[1] = "0.992 0.992 0.996 1";
colors[2] = "0.996078 0.301961 0.00784314 1";
colors[3] = "0.980392 0.301961 0.0156863 0";
sizes[0] = "100";
sizes[1] = "100";
sizes[2] = "100";
sizes[3] = "100";
times[0] = "0";
times[1] = "0.104167";
times[2] = "0.208333";
times[3] = "0.354167";
};
datablock ParticleEmitterData(BlastExplosionEmitter) {
ejectionPeriodMS = "1";
periodVarianceMS = "0";
ejectionVelocity = "655.35";
velocityVariance = "0";
ejectionOffset = "0";
ejectionOffsetVariance = "0";
thetaMin = "0";
thetaMax = "180";
phiReferenceVel = "0";
phiVariance = "360";
softnessDistance = "0.0001";
ambientFactor = "0";
overrideAdvance = "0";
orientParticles = "0";
orientOnVelocity = "1";
particles = "BlastExplosionParticle";
lifetimeMS = "1000";
lifetimeVarianceMS = "0";
useInvAlpha = false;
sortParticles = "1";
reverseOrder = "0";
alignParticles = "0";
alignDirection = "0 1 0";
highResOnly = "1";
glow = "1";
Dampening = "0.8";
elasticity = "0.3";
};
datablock ParticleData(BlastRingParticle) {
dragCoefficient = "0.8";
windCoefficient = "0";
gravityCoefficient = "0";
inheritedVelFactor = "0";
constantAcceleration = "0";
lifetimeMS = "9000";
lifetimeVarianceMS = "1000";
spinSpeed = "0.167";
spinRandomMin = "-90";
spinRandomMax = "500";
useInvAlpha = "1";
animateTexture = "0";
framesPerSec = "1";
textureCoords[0] = "0 0";
textureCoords[1] = "0 1";
textureCoords[2] = "1 1";
textureCoords[3] = "1 0";
animTexTiling = "0 0";
textureName = "particleTest";
colors[0] = "0.494118 0.494118 0.494118 0.559";
colors[1] = "0.388235 0.388235 0.388235 0.568";
colors[2] = "0.403922 0.403922 0.403922 0.556";
colors[3] = "0.462745 0.462745 0.462745 0";
sizes[0] = "50";
sizes[1] = "50";
sizes[2] = "50";
sizes[3] = "50";
times[0] = "0";
times[1] = "0.375";
times[2] = "0.854167";
times[3] = "1";
};
datablock ParticleEmitterData(BlastRingEmitter) {
ejectionPeriodMS = "1";
periodVarianceMS = "0";
ejectionVelocity = "600";
velocityVariance = "50";
ejectionOffset = "0";
ejectionOffsetVariance = "0";
thetaMin = "90";
thetaMax = "90";
phiReferenceVel = "0";
phiVariance = "360";
softnessDistance = "1";
ambientFactor = "0";
overrideAdvance = "1";
orientParticles = "0";
orientOnVelocity = "0";
particles = "BlastRingParticle";
lifetimeMS = "0";
lifetimeVarianceMS = "0";
blendStyle = "NORMAL";
sortParticles = "0";
reverseOrder = "0";
alignParticles = "0";
alignDirection = "0 1 0";
highResOnly = "1";
Dampening = "0.8";
elasticity = "0.3";
};
datablock ParticleData(BlastExplosionParticle2) {
dragCoefficient = "1.2";
windCoefficient = "0";
gravityCoefficient = "0";
inheritedVelFactor = "0";
constantAcceleration = "0";
lifetimeMS = "15000";
lifetimeVarianceMS = "0";
spinSpeed = "0.083";
spinRandomMin = "-10";
spinRandomMax = "10";
useInvAlpha = "1";
animateTexture = "0";
framesPerSec = "1";
textureCoords[0] = "0 0";
textureCoords[1] = "0 1";
textureCoords[2] = "1 1";
textureCoords[3] = "1 0";
animTexTiling = "0 0";
textureName = "particleTest";
animTexName = "particleTest";
colors[0] = "0.529412 0.533333 0.533333 0.495";
colors[1] = "0.537 0.537 0.541 0.538";
colors[2] = "0.568627 0.568627 0.564706 0.492";
colors[3] = "0.502 0.502 0.498 0";
sizes[0] = "150";
sizes[1] = "150";
sizes[2] = "150";
sizes[3] = "150";
times[0] = "0";
times[1] = "0.229167";
times[2] = "0.6875";
times[3] = "1";
};
datablock ParticleEmitterData(BlastExplosionEmitter2) {
ejectionPeriodMS = "1";
periodVarianceMS = "0";
ejectionVelocity = "150";
velocityVariance = "100.83";
ejectionOffset = "0";
ejectionOffsetVariance = "0";
thetaMin = "0";
thetaMax = "180";
phiReferenceVel = "0";
phiVariance = "360";
softnessDistance = "0.0001";
ambientFactor = "0";
overrideAdvance = "0";
orientParticles = "0";
orientOnVelocity = "1";
particles = "BlastExplosionParticle2";
lifetimeMS = "1000";
lifetimeVarianceMS = "0";
};
datablock ParticleData(BlastFireParticle) {
dragCoefficient = "1";
windCoefficient = "0";
gravityCoefficient = "0";
inheritedVelFactor = "0";
constantAcceleration = "0";
lifetimeMS = "100";
lifetimeVarianceMS = "0";
spinSpeed = "0";
spinRandomMin = "-90";
spinRandomMax = "500";
useInvAlpha = "0";
animateTexture = "0";
framesPerSec = "1";
textureCoords[0] = "0 0";
textureCoords[1] = "0 1";
textureCoords[2] = "1 1";
textureCoords[3] = "1 0";
animTexTiling = "0 0";
textureName = "particleTest";
colors[0] = "0.996078 0.301961 0.00784314 1";
colors[1] = "0.996078 0.301961 0.00784314 0.77";
colors[2] = "0.996078 0.301961 0.00784314 0.761";
colors[3] = "0.996078 0.301961 0.00784314 1";
sizes[0] = "3";
sizes[1] = "3";
sizes[2] = "3";
sizes[3] = "3";
times[0] = "0";
times[1] = "0.270833";
times[2] = "0.625";
times[3] = "1";
};
datablock ParticleEmitterData(BlastFireEmitter) {
ejectionPeriodMS = "2";
periodVarianceMS = "0";
ejectionVelocity = "0";
velocityVariance = "0";
ejectionOffset = "0";
ejectionOffsetVariance = "0";
thetaMin = "0";
thetaMax = "15";
phiReferenceVel = "0";
phiVariance = "360";
softnessDistance = "1";
ambientFactor = "0";
overrideAdvance = "1";
orientParticles = "0";
orientOnVelocity = "0";
particles = "BlastFireParticle";
lifetimeMS = "0";
lifetimeVarianceMS = "0";
useInvAlpha = false;
sortParticles = "0";
reverseOrder = "0";
alignParticles = "0";
alignDirection = "0 1 0";
highResOnly = "1";
Dampening = "0.8";
elasticity = "0.3";
};
datablock ParticleData(BlastFireParticle2) {
dragCoefficient = "0.0";
windCoefficient = "0";
gravityCoefficient = "0";
inheritedVelFactor = "0";
constantAcceleration = "0";
lifetimeMS = "3000";//was 9000
lifetimeVarianceMS = "1000";
spinSpeed = "1";
spinRandomMin = "-90";
spinRandomMax = "500";
useInvAlpha = "1";
animateTexture = "0";
framesPerSec = "1";
textureCoords[0] = "0 0";
textureCoords[1] = "0 1";
textureCoords[2] = "1 1";
textureCoords[3] = "1 0";
animTexTiling = "0 0";
textureName = "particleTest";
colors[0] = "0.458824 0.458824 0.458824 1";
colors[1] = "0.321569 0.321569 0.321569 0.496";
colors[2] = "0.584314 0.584314 0.588235 1";
colors[3] = "0.843137 0.847059 0.847059 0";
sizes[0] = "5";
sizes[1] = "5";
sizes[2] = "5";
sizes[3] = "5";
times[0] = "0";
times[1] = "0.329412";
times[2] = "0.666667";
times[3] = "1";
};
datablock ParticleEmitterData(BlastFireEmitter2) {
ejectionPeriodMS = "15";
periodVarianceMS = "0";
ejectionVelocity = "0";
velocityVariance = "0";
ejectionOffset = "4.583";
ejectionOffsetVariance = "0";
thetaMin = "0";
thetaMax = "5";
phiReferenceVel = "0";
phiVariance = "360";
softnessDistance = "1";
ambientFactor = "0";
overrideAdvance = "1";
orientParticles = "0";
orientOnVelocity = "0";
particles = "BlastFireParticle2";
lifetimeMS = "0";
lifetimeVarianceMS = "0";
};
datablock GrenadeProjectileData(blastExplosionProj)
{
projectileShapeName = "grenade_projectile.dts";
emitterDelay = -1;
directDamage = 0.0;
hasDamageRadius = true;
indirectDamage = 0.40;
damageRadius = 15.0;
radiusDamageType = $DamageType::Explosion;
kickBackStrength = 1500;
bubbleEmitTime = 1.0;
//sound = "";
explosion = VehicleBombExplosion;
underwaterExplosion = UnderwaterMortarExplosion;
velInheritFactor = 0.85;
baseEmitter = BlastFireEmitter2;
delayEmitter = BlastFireEmitter;
emitterDelay = 32;
bubbleEmitter = MortarBubbleEmitter;
grenadeElasticity = 0.30;
grenadeFriction = 0.2;
armingDelayMS = 250;
muzzleVelocity = 200.00;
gravityMod = 3.9;
};
datablock ExplosionData(BlastExplosion)
{
emitter[0] = BlastExplosionEmitter;
emitter[1] = BlastExplosionEmitter2;
emitter[2] = BlastRingEmitter;
lifeTimeMS = 6000;
shakeCamera = true;
camShakeFreq = "8.0 8.0 8.0";
camShakeAmp = "1.0 1.0 1.0";
camShakeDuration = 5;
camShakeRadius = 2500.0;
//debris = blastCannonDebris;
//debrisThetaMin = 20;
//debrisThetaMax = 90;
//debrisNum = 150;
//debrisNumVariance = "3";
//debrisVelocity = "155";
//debrisVelocityVariance = "55";
};
datablock LinearFlareProjectileData(explOne){
scale = "1.0 1.0 1.0";
faceViewer = true;
directDamage = 0.0;
hasDamageRadius = true;
indirectDamage = 1.0;
damageRadius = 7.7;
kickBackStrength = 0.0;
radiusDamageType = $DamageType::Explosion;
explosion = "BlastExplosion";
dryVelocity = 0.1;
wetVelocity = -1;
velInheritFactor = 0.3;
fizzleTimeMS = 0;
lifetimeMS = 256;
explodeOnDeath = true;
reflectOnWaterImpactAngle = 0.0;
explodeOnWaterImpact = true;
deflectionOnWaterImpact = 0.0;
fizzleUnderwaterMS = -1;
activateDelayMS = -1;
size[0] = 0.9;
size[1] = 1.0;
size[2] = 0.8;
numFlares = 80;
flareColor = "0.0 1.0 0.0";
flareModTexture = "flaremod";
flareBaseTexture = "flarebase";
sound = PlasmaProjectileSound;
wetFireSound = PlasmaFireWetSound;
hasLight = true;
lightRadius = 5.0;
lightColor = "0 1.0 0";
};
function bigEBoom(%position){
%p = new LinearFlareProjectile() {
dataBlock = CubeProj;
initialDirection = "0 0 -1";
initialPosition = %position;
sourceObject = -1;
sourceSlot = 0;
vehicleObject = 0;
};
MissionCleanup.add(%p);
}
function bigBoom(%position, %sb, %vec){
%p = new LinearFlareProjectile() {
dataBlock = explOne;
initialDirection = VectorScale(%vec, -1);
initialPosition = VectorAdd(%position, VectorScale(%vec, 5));
sourceObject = -1;
sourceSlot = 0;
vehicleObject = 0;
};
MissionCleanup.add(%p);
%p.setScopeAlways();
schedule(500,0,"delayBoom",%position);
schedule(500,0,"partboom",%position,%vec);
for(%i = 0; %i < ClientGroup.getCount(); %i++){
%cobj = ClientGroup.getObject(%i).getControlObject();
%cobj.schedule(100,"setWhiteout",1);
%player = ClientGroup.getObject(%i).player;
if(isObject(%player)){
%playerPos = %player.getWorldBoxCenter();
%ray = ContainerRayCast(%position, %playerPos, $TypeMasks::InteriorObjectType | $TypeMasks::TerrainObjectType, 0);
if(!%ray){
//%player.scriptKill($DamageType::OutOfBounds);
%data = %player.getDatablock();
%data.damageObject(%player, %sb, %playerPos, 20, $DamageType::Dark, "0 0 1", %sb.client);
}
}
}
}
function delayBoom(%position){
%p = new LinearFlareProjectile() {
dataBlock = explTwo;
initialDirection = "0 0 -1";
initialPosition = %position;
sourceObject = -1;
sourceSlot = 0;
vehicleObject = 0;
};
%p.setScopeAlways();
}
function partboom(%position,%vec){
for(%i = 0; %i < 150; %i++){
%x = (getRandom() - 0.5) * 2 * 3.1415926 * 0.15;
%y = (getRandom() - 0.5) * 2 * 3.1415926 * 0.15;
%z = (getRandom() - 0.5) * 2 * 3.1415926 * 0.15;
%mat = MatrixCreateFromEuler(%x SPC %y SPC %z);
%vector = MatrixMulVector(%mat, %vec);
%p = new GrenadeProjectile() {
dataBlock = blastExplosionProj;
initialDirection = %vector;
initialPosition = VectorAdd(%position, VectorScale(%vec, 5));//vectorAdd(%position,"0 0 100");
sourceObject = -1;
sourceSlot = 0;
vehicleObject = 0;
};
MissionCleanup.add(%p);
%p.setScopeAlways();
}
%part = new ParticleEmissionDummy() {
position = %position;
rotation = "1 0 0 0";
scale = "1 1 1";
dataBlock = tripTimeEmissionDummy;
emitter = "BlastExplosionEmitterS";
velocity = "1";
};
MissionCleanup.add(%part);
%part.setScopeAlways();
%part.schedule(10000, "delete");
%part = new ParticleEmissionDummy() {
position = %position;
rotation = "1 0 0 0";
scale = "1 1 1";
dataBlock = defaultEmissionDummy;
emitter = "BlastShockwaveEmitter";
velocity = "1";
};
MissionCleanup.add(%part);
%part.setScopeAlways();
%part.schedule(10000, "delete");
}