mirror of
https://github.com/PhantomGamesDevelopment/TWM2.git
synced 2026-01-19 19:44:47 +00:00
168 lines
5.3 KiB
C#
168 lines
5.3 KiB
C#
datablock LinearFlareProjectileData(ShadowRifleBolt) {
|
|
projectileShapeName = "turret_muzzlepoint.dts";
|
|
scale = "1.0 1.0 1.0";
|
|
faceViewer = true;
|
|
directDamage = 0.02;
|
|
hasDamageRadius = true;
|
|
indirectDamage = 0.1;
|
|
damageRadius = 4.0;
|
|
kickBackStrength = 0.0;
|
|
radiusDamageType = $DamageType::Shadow;
|
|
|
|
explosion = "BlasterExplosion";
|
|
splash = PlasmaSplash;
|
|
|
|
baseEmitter = NMMissileBaseEmitter;
|
|
|
|
ImageSource = "ShadowRifleImage";
|
|
|
|
dryVelocity = 120.0; // z0dd - ZOD, 7/20/02. Faster plasma projectile. was 55
|
|
wetVelocity = -1;
|
|
velInheritFactor = 0.3;
|
|
fizzleTimeMS = 250;
|
|
lifetimeMS = 8000;
|
|
explodeOnDeath = false;
|
|
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.18 0.03";
|
|
flareModTexture = "flaremod";
|
|
flareBaseTexture = "flarebase";
|
|
|
|
sound = PlasmaProjectileSound;
|
|
fireSound = FlamethrowerFireSound;
|
|
wetFireSound = PlasmaFireWetSound;
|
|
|
|
hasLight = true;
|
|
lightRadius = 10.0;
|
|
lightColor = "0.94 0.03 0.12";
|
|
};
|
|
|
|
datablock ItemData(ShadowRifle) {
|
|
className = Weapon;
|
|
catagory = "Spawn Items";
|
|
shapeFile = "weapon_sniper.dts";
|
|
image = ShadowRifleImage;
|
|
mass = 1;
|
|
elasticity = 0.2;
|
|
friction = 0.6;
|
|
pickupRadius = 2;
|
|
pickUpName = "a shadow rifle";
|
|
|
|
computeCRC = true;
|
|
|
|
};
|
|
|
|
datablock ShapeBaseImageData(ShadowRifleImage) {
|
|
className = WeaponImage;
|
|
shapeFile = "weapon_sniper.dts";
|
|
item = ShadowRifle;
|
|
projectile = ShadowRifleBolt;
|
|
projectileType = LinearFlareProjectile;
|
|
|
|
MedalRequire = 1;
|
|
|
|
usesEnergy = true;
|
|
minEnergy = 6;
|
|
|
|
stateName[0] = "Activate";
|
|
stateTransitionOnTimeout[0] = "ActivateReady";
|
|
stateSound[0] = SniperRifleSwitchSound;
|
|
stateTimeoutValue[0] = 0.5;
|
|
stateSequence[0] = "Activate";
|
|
|
|
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] = 0.5;
|
|
stateFire[3] = true;
|
|
stateAllowImageChange[3] = false;
|
|
stateSequence[3] = "Fire";
|
|
stateScript[3] = "onFire";
|
|
|
|
stateName[4] = "Reload";
|
|
stateTransitionOnTimeout[4] = "Ready";
|
|
stateTimeoutValue[4] = 2.5;
|
|
stateAllowImageChange[4] = false;
|
|
|
|
stateName[5] = "CheckWet";
|
|
stateTransitionOnWet[5] = "DryFire";
|
|
stateTransitionOnNotWet[5] = "Fire";
|
|
|
|
stateName[6] = "NoAmmo";
|
|
stateTransitionOnAmmo[6] = "Reload";
|
|
stateTransitionOnTriggerDown[6] = "DryFire";
|
|
stateSequence[6] = "NoAmmo";
|
|
|
|
stateName[7] = "DryFire";
|
|
stateSound[7] = SniperRifleDryFireSound;
|
|
stateTimeoutValue[7] = 0.5;
|
|
stateTransitionOnTimeout[7] = "Ready";
|
|
};
|
|
|
|
function ShadowRifleBolt::onCollision(%data,%projectile,%targetObject,%modifier,%position,%normal) {
|
|
Parent::OnCollision(%data,%projectile,%targetObject,%modifier,%position,%normal);
|
|
%cn = %targetObject.getClassName();
|
|
if(%cn $= "Player") {
|
|
if($Host::TeamDamageOn == 0) {
|
|
if(%targetObject.team == %projectile.sourceObject.team) {
|
|
return;
|
|
}
|
|
}
|
|
if(%targetObject.beingSapped) {
|
|
return;
|
|
}
|
|
if(%targetObject.isBoss) {
|
|
%targetObject.playShieldEffect("1 1 1");
|
|
%vec = vectorsub(%projectile.sourceObject.getworldboxcenter(),vectorAdd(%targetObject.getPosition(), "0 0 1"));
|
|
%vec = vectoradd(%vec, vectorscale(%projectile.sourceObject.getvelocity(),vectorlen(%vec)/100));
|
|
%p = new LinearFlareProjectile() {
|
|
dataBlock = ShadowRifleBolt; //burn :)
|
|
initialDirection = %vec;
|
|
initialPosition = vectorAdd(%targetObject.getPosition(), "0 0 1");
|
|
sourceObject = %targetObject;
|
|
sourceSlot = 0;
|
|
};
|
|
messageClient(%projectile.sourceObject.client, 'MsgWarn', "WARNING: The boss deflects the pulse back at you!");
|
|
return;
|
|
}
|
|
else {
|
|
%targetObject.beingSapped = 1;
|
|
SapLoop(%projectile.sourceObject, %targetObject);
|
|
}
|
|
}
|
|
}
|
|
|
|
function SapLoop(%source, %target) {
|
|
if(!%source.isAlive()) {
|
|
return;
|
|
}
|
|
if(!%target.isAlive()) {
|
|
createBlood(%target);
|
|
return;
|
|
}
|
|
%target.zapObject();
|
|
%target.getDatablock().damageObject(%target, %source, %source.getPosition, 0.05, $DamageType::Shadow);
|
|
%target.lastDamagedImage = "ShadowRifleImage";
|
|
%source.applyRepair(0.05);
|
|
schedule(500, 0, "SapLoop", %source, %target);
|
|
}
|