mirror of
https://github.com/mostlikely4r/construction-mod.git
synced 2026-01-19 19:24:44 +00:00
285 lines
8.5 KiB
C#
285 lines
8.5 KiB
C#
// Deploy effects
|
|
|
|
datablock AudioProfile(DrillLinkSound)
|
|
{
|
|
filename = "fx/misc/mine.deploy.wav";
|
|
description = AudioClose3d;
|
|
preload = true;
|
|
};
|
|
|
|
datablock AudioProfile(SingeLinkSound)
|
|
{
|
|
filename = "fx/weapons/chaingun_off.wav"; // "fx/weapons/grenade_camera_activate.wav";
|
|
description = AudioClose3d;
|
|
preload = true;
|
|
};
|
|
|
|
|
|
datablock AudioProfile(BoltLinkSound)
|
|
{
|
|
filename = "fx/misc/health_patch.wav";
|
|
description = AudioClose3d;
|
|
preload = true;
|
|
};
|
|
|
|
datablock AudioProfile(ClickLinkSound)
|
|
{
|
|
filename = "fx/misc/health_patch.wav";
|
|
description = AudioClose3d;
|
|
preload = true;
|
|
};
|
|
|
|
datablock AudioProfile(SingeSound)
|
|
{
|
|
filename = "fx/weapons/ElF_hit.wav";
|
|
description = AudioClose3d;
|
|
preload = true;
|
|
};
|
|
|
|
datablock AudioProfile(LargeLinkeSound)
|
|
{
|
|
filename = "fx/weapons/grenade_explode_UW.wav";
|
|
description = AudioClose3d;
|
|
preload = true;
|
|
};
|
|
|
|
|
|
datablock LinearProjectileData(FastSingeProjectile) {
|
|
className = "LinearProjectileData";
|
|
projectileShapeName = "turret_muzzlepoint.dts";
|
|
emitterDelay = "-1";
|
|
velInheritFactor = "0";
|
|
directDamage = "0";
|
|
hasDamageRadius = "0";
|
|
indirectDamage = "0";
|
|
damageRadius = "0";
|
|
radiusDamageType = "0";
|
|
kickBackStrength = "0";
|
|
baseEmitter = "ELFSparksEmitter";
|
|
hasLight = "0";
|
|
lightRadius = "20";
|
|
lightColor = "1.000000 1.000000 1.000000 1.000000";
|
|
hasLightUnderwaterColor = "0";
|
|
underWaterLightColor = "1.000000 1.000000 1.000000 1.000000";
|
|
explodeOnWaterImpact = "0";
|
|
depthTolerance = "5";
|
|
bubbleEmitTime = "0.5";
|
|
faceViewer = "0";
|
|
scale = "1 1 1";
|
|
dryVelocity = "5";
|
|
wetVelocity = "5";
|
|
fizzleTimeMS = "60000";
|
|
lifetimeMS = "60000";
|
|
explodeOnDeath = "0";
|
|
reflectOnWaterImpactAngle = "0";
|
|
deflectionOnWaterImpact = "0";
|
|
fizzleUnderwaterMS = "-1";
|
|
activateDelayMS = "-1";
|
|
doDynamicClientHits = "0";
|
|
sound = "ELFHitTargetSound";
|
|
explosion = "BlasterExplosion";
|
|
};
|
|
|
|
datablock LinearProjectileData(SlowSingeProjectile) {
|
|
className = "LinearProjectileData";
|
|
projectileShapeName = "turret_muzzlepoint.dts";
|
|
emitterDelay = "-1";
|
|
velInheritFactor = "0";
|
|
directDamage = "0";
|
|
hasDamageRadius = "0";
|
|
indirectDamage = "0";
|
|
damageRadius = "0";
|
|
radiusDamageType = "0";
|
|
kickBackStrength = "0";
|
|
baseEmitter = "ElfSparksEmitter";
|
|
hasLight = "0";
|
|
lightRadius = "20";
|
|
lightColor = "1.000000 1.000000 1.000000 1.000000";
|
|
hasLightUnderwaterColor = "0";
|
|
underWaterLightColor = "1.000000 1.000000 1.000000 1.000000";
|
|
explodeOnWaterImpact = "0";
|
|
depthTolerance = "5";
|
|
bubbleEmitTime = "0.5";
|
|
faceViewer = "0";
|
|
scale = "1 1 1";
|
|
dryVelocity = "1";
|
|
wetVelocity = "1";
|
|
fizzleTimeMS = "60000";
|
|
lifetimeMS = "60000";
|
|
explodeOnDeath = "0";
|
|
reflectOnWaterImpactAngle = "0";
|
|
deflectionOnWaterImpact = "0";
|
|
fizzleUnderwaterMS = "-1";
|
|
activateDelayMS = "-1";
|
|
doDynamicClientHits = "0";
|
|
sound = "ELFHitTargetSound";
|
|
explosion = "BlasterExplosion";
|
|
};
|
|
|
|
|
|
function singe(%pos,%dir,%size,%type) {
|
|
%p = new LinearProjectile() {
|
|
dataBlock = %type @"SingeProjectile";
|
|
initialDirection = %dir;
|
|
initialPosition = %pos;
|
|
};
|
|
|
|
if (%type $= "fast")
|
|
%p.schedule((%size/5)*1000,"delete");
|
|
else
|
|
%p.schedule((%size)*1000,"delete");
|
|
}
|
|
|
|
function edgesinge(%obj)
|
|
{
|
|
%objsize = VectorSub(getWords(%obj.getObjectBox(),3,5),getWords(%obj.getObjectBox(),0,2));
|
|
%realsize = realSize(%obj);//VectorMultiply(VectorMultiply(%objsize,%obj.getScale()),"1 1 0");
|
|
|
|
%offset = VectorScale(Realvec(%obj,%realsize),0.49);
|
|
%offset2 = VectorScale(VectorCross(VectorNormalize(%offset),realvec(%obj,"0 0 1")),VectorLen(%offset));
|
|
%pos1 = VectorAdd(%obj.getWorldBoxCenter(),%offset);
|
|
%pos2 = VectorAdd(%obj.getWorldBoxCenter(),VectorScale(%offset,-1));
|
|
singe(%pos1,Realvec(%obj,"-1 0 0"),GetWord(%realsize,0),"fast");
|
|
singe(%pos1,Realvec(%obj,"0 -1 0"),GetWord(%realsize,1),"fast");
|
|
singe(%pos2,Realvec(%obj,"1 0 0"),GetWord(%realsize,0),"fast");
|
|
singe(%pos2,Realvec(%obj,"0 1 0"),GetWord(%realsize,1),"fast");
|
|
}
|
|
|
|
function linksinge(%obj,%pt,%nrm)
|
|
{
|
|
if (%nrm !$= "")
|
|
{
|
|
%nrm = VectorNormalize(%nrm);
|
|
%dir = VectorNormalize(VectorCross(%nrm,Realvec(%obj,"0 0 1")));
|
|
%objsize = VectorSub(getWords(%obj.getObjectBox(),3,5),getWords(%obj.getObjectBox(),0,2));
|
|
%realsize = VectorScale(VectorMultiply(%objsize,%obj.getScale()),0.49);
|
|
%side = VirVec(%obj,%nrm);
|
|
%oside = VectorCross("0 0 1",%side);
|
|
|
|
%forward = Realvec(%obj,VectorMultiply(%realsize,%side));
|
|
%left = Realvec(%obj,VectorMultiply(%realsize,%oside));
|
|
%len = Vectorlen(%left);
|
|
%pos1 = VectorAdd(%obj.getWorldBoxCenter(),VectorAdd(%forward,%left));
|
|
%pos2 = VectorAdd(%obj.getWorldBoxCenter(),VectorAdd(%forward,VectorScale(%left,-1)));
|
|
singe(%pos1,%dir,%len,"fast");
|
|
singe(%pos2,VectorScale(%dir,-1),%len,"fast");
|
|
}
|
|
}
|
|
|
|
function floordrill(%obj)
|
|
{
|
|
%objsize = VectorSub(getWords(%obj.getObjectBox(),3,5),getWords(%obj.getObjectBox(),0,2));
|
|
%realsize = VectorMultiply(VectorMultiply(%objsize,%obj.getScale()),"0.5 0.5 0.5");
|
|
%forward = VectorScale(realvec(%obj,"1 0 0"),GetWord(%realsize,0));
|
|
%left = VectorScale(realvec(%obj,"0 1 0"),GetWord(%realsize,1));
|
|
%up = VectorScale(realvec(%obj,"0 0 1"),GetWord(%realsize,2));
|
|
%p1 = VectorAdd(VectorAdd(%forward,%left),%up);
|
|
%p2 = VectorAdd(VectorAdd(VectorScale(%forward,-1),%left),%up);
|
|
%p3 = VectorAdd(VectorAdd(%forward,VectorScale(%left,-1)),%up);
|
|
%p4 = VectorAdd(VectorAdd(VectorScale(%forward,-1),VectorScale(%left,-1)),%up);
|
|
schedule(0,%obj,"llink",VectorAdd(%p1,%obj.getWorldBoxCenter()));
|
|
schedule(500,%obj,"llink",VectorAdd(%p2,%obj.getWorldBoxCenter()));
|
|
schedule(1000,%obj,"llink",VectorAdd(%p4,%obj.getWorldBoxCenter()));
|
|
schedule(1500,%obj,"llink",VectorAdd(%p3,%obj.getWorldBoxCenter()));
|
|
}
|
|
|
|
function MSinge(%obj)
|
|
{
|
|
%objsize = VectorSub(getWords(%obj.getObjectBox(),3,5),getWords(%obj.getObjectBox(),0,2));
|
|
%realsize = VectorMultiply(VectorMultiply(%objsize,%obj.getScale()),"0.5 0.5 0.5");
|
|
%forward = VectorScale(realvec(%obj,"1 0 0"),GetWord(%realsize,0));
|
|
%left = VectorScale(realvec(%obj,"0 1 0"),GetWord(%realsize,1));
|
|
%up = VectorScale(realvec(%obj,"0 0 -1"),GetWord(%realsize,2));
|
|
%p1 = VectorAdd(VectorAdd(%forward,%left),%up);
|
|
%p2 = VectorAdd(VectorAdd(VectorScale(%forward,-1),%left),%up);
|
|
%p3 = VectorAdd(VectorAdd(%forward,VectorScale(%left,-1)),%up);
|
|
%p4 = VectorAdd(VectorAdd(VectorScale(%forward,-1),VectorScale(%left,-1)),%up);
|
|
schedule(0,%obj,"mlink",VectorAdd(%p1,%obj.getWorldBoxCenter()));
|
|
schedule(250,%obj,"mlink",VectorAdd(%p2,%obj.getWorldBoxCenter()));
|
|
schedule(500,%obj,"mlink",VectorAdd(%p4,%obj.getWorldBoxCenter()));
|
|
schedule(750,%obj,"mlink",VectorAdd(%p3,%obj.getWorldBoxCenter()));
|
|
}
|
|
|
|
function MSinge2(%obj)
|
|
{
|
|
%objsize = VectorSub(getWords(%obj.getObjectBox(),3,5),getWords(%obj.getObjectBox(),0,2));
|
|
%realsize = VectorMultiply(VectorMultiply(%objsize,%obj.getScale()),"0.5 0.5 0.5");
|
|
%forward = VectorScale(realvec(%obj,"1 0 0"),GetWord(%realsize,0));
|
|
%left = VectorScale(realvec(%obj,"0 1 0"),GetWord(%realsize,1));
|
|
%up = VectorScale(realvec(%obj,"0 0 1"),GetWord(%realsize,2));
|
|
%p1 = VectorAdd(VectorAdd(%forward,%left),%up);
|
|
%p2 = VectorAdd(VectorAdd(VectorScale(%forward,-1),%left),%up);
|
|
%p3 = VectorAdd(VectorAdd(%forward,VectorScale(%left,-1)),%up);
|
|
%p4 = VectorAdd(VectorAdd(VectorScale(%forward,-1),VectorScale(%left,-1)),%up);
|
|
schedule(0,%obj,"mlink",VectorAdd(%p1,%obj.getWorldBoxCenter()));
|
|
schedule(250,%obj,"mlink",VectorAdd(%p2,%obj.getWorldBoxCenter()));
|
|
schedule(500,%obj,"mlink",VectorAdd(%p4,%obj.getWorldBoxCenter()));
|
|
schedule(750,%obj,"mlink",VectorAdd(%p3,%obj.getWorldBoxCenter()));
|
|
}
|
|
|
|
|
|
function floorlink(%obj,%pt,%nrm) {
|
|
%fstat = aboveground(%obj.getworldboxcenter(),1,%obj);
|
|
%stat = GetWord(%fstat,0);
|
|
//warn(%stat);
|
|
if(%stat $= "open" || %stat $= "roof" || %stat $= "shadow")
|
|
linksinge(%obj,%pt,%nrm);
|
|
else
|
|
floordrill(%obj);
|
|
}
|
|
|
|
function slink(%pt)
|
|
{
|
|
createLifeEmitter(%pt, ELFSparksEmitter, 200);
|
|
Serverplay3D(SingeLinkSound,%pt);
|
|
}
|
|
|
|
function mlink(%pt)
|
|
{
|
|
createLifeEmitter(%pt, ELFSparksEmitter, 200);
|
|
Serverplay3D(SingeLinkSound,%pt);
|
|
}
|
|
|
|
function llink(%pt)
|
|
{
|
|
createLifeEmitter(%pt, SmallLightDamageSmoke, 500);
|
|
Serverplay3D(LargeLinkeSound,%pt);
|
|
}
|
|
|
|
function deployEffect(%obj,%pt,%nrm,%type)
|
|
{
|
|
if ($Host::NoDeployEffects)
|
|
return "";
|
|
if (%type $= "pad")
|
|
{
|
|
edgesinge(%obj);
|
|
}
|
|
else if (%type $= "walk")
|
|
{
|
|
linksinge(%obj,%pt,%nrm);
|
|
}
|
|
else if (%type $= "spine")
|
|
{
|
|
slink(%pt);
|
|
}
|
|
else if (%type $= "spine1")
|
|
{
|
|
slink(%pt);
|
|
%p2 = VectorAdd( pos( %obj ),realvec( %obj,VectorMultiply("0 0 0.5",%obj.getScale()) ) );
|
|
schedule(500,%obj,"slink",%p2);
|
|
}
|
|
else if (%type $= "mspine")
|
|
{
|
|
msinge(%obj);
|
|
}
|
|
else if (%type $= "mspine1")
|
|
{
|
|
msinge(%obj);
|
|
schedule(1000,%obj,"msinge2",%obj);
|
|
}
|
|
else if (%type $= "floor")
|
|
{
|
|
floorlink(%obj,%pt,%nrm);
|
|
}
|
|
}
|