TWM2/scripts/weapons/Other/ConcussionGun.cs
2014-02-26 13:54:04 -06:00

203 lines
5.5 KiB
C#

//IDEA By Signal360
datablock ParticleData(ConcGunSmokeParticle) {
dragCoeffiecient = 0.0;
gravityCoefficient = -0.2; // rises slowly
inheritedVelFactor = 0.00;
lifetimeMS = 700; // lasts 2 second
lifetimeVarianceMS = 150; // ...more or less
textureName = "special/Lightning2Frame2";
useInvAlpha = false;
spinRandomMin = -30.0;
spinRandomMax = 30.0;
colors[0] = "0 0 1 1.0";
colors[1] = "0 1 1 1.0";
colors[2] = "0 1 1 0.0";
sizes[0] = 0.25;
sizes[1] = 1.0;
sizes[2] = 3.0;
times[0] = 0.0;
times[1] = 0.2;
times[2] = 1.0;
};
datablock ParticleEmitterData(ConcGunSmokeEmitter) {
ejectionPeriodMS = 15;
periodVarianceMS = 5;
ejectionVelocity = 1.25;
velocityVariance = 0.50;
thetaMin = 0.0;
thetaMax = 90.0;
particles = "ConcGunSmokeParticle";
};
datablock GrenadeProjectileData(ConcGunGrenade) {
projectileShapeName = "grenade_projectile.dts";
emitterDelay = -1;
directDamage = 0.0;
hasDamageRadius = true;
indirectDamage = 0.1;
damageRadius = 10.0;
radiusDamageType = $DamageType::Grenade;
kickBackStrength = 1500;
bubbleEmitTime = 1.0;
ImageSource = "ConcussionGunImage";
sound = GrenadeProjectileSound;
explosion = "ConcussionGrenadeExplosion";
underwaterExplosion = "ConcussionGrenadeExplosion";
velInheritFactor = 0.5;
splash = GrenadeSplash;
baseEmitter = ConcGunSmokeEmitter;
bubbleEmitter = ConcGunSmokeEmitter;
grenadeElasticity = 0.35;
grenadeFriction = 0.2;
armingDelayMS = 1000;
muzzleVelocity = 47.00;
drag = 0.1;
};
//--------------------------------------------------------------------------
// Ammo
//--------------------------------------
datablock ItemData(ConcussionGunAmmo) {
className = Ammo;
catagory = "Ammo";
shapeFile = "ammo_grenade.dts";
mass = 1;
elasticity = 0.2;
friction = 0.6;
pickupRadius = 2;
pickUpName = "some grenade launcher ammo";
computeCRC = true;
emap = true;
};
//--------------------------------------------------------------------------
// Weapon
//--------------------------------------
datablock ItemData(ConcussionGun) {
className = Weapon;
catagory = "Spawn Items";
shapeFile = "weapon_mortar.dts";
image = ConcussionGunImage;
mass = 1;
elasticity = 0.2;
friction = 0.6;
pickupRadius = 2;
pickUpName = "a concussion gun";
computeCRC = true;
};
datablock ShapeBaseImageData(ConcussionGunImage) {
className = WeaponImage;
shapeFile = "weapon_mortar.dts";
item = ConcussionGun;
ammo = ConcussionGunAmmo;
offset = "0 0 0";
emap = true;
projectile = ConcGunGrenade;
projectileType = GrenadeProjectile;
//ClipStuff
ClipName = "ConcussionGunClip";
ClipPickupName["ConcussionGunClip"] = "some Concussion Shells";
ShowsClipInHud = 1;
ClipReloadTime = 8;
ClipReturn = 1;
InitialClips = 4;
GunName = "Concussion Gun";
//
RankRequire = $TWM2::RankRequire["ConcussionGun"];
stateName[0] = "Activate";
stateTransitionOnTimeout[0] = "ActivateReady";
stateTimeoutValue[0] = 0.5;
stateSequence[0] = "Activate";
stateSound[0] = MortarSwitchSound;
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] = 0.4;
stateFire[3] = true;
stateRecoil[3] = LightRecoil;
stateAllowImageChange[3] = false;
stateSequence[3] = "Fire";
stateScript[3] = "onFire";
stateSound[3] = MortarFireSound;
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";
};
function ConcGunGrenade::onExplode(%data, %proj, %pos, %mod) {
Parent::OnExplode(%data, %proj, %pos, %mod);
%TargetSearchMask = $TypeMasks::PlayerObjectType;
InitContainerRadiusSearch(%pos, %data.damageRadius, %TargetSearchMask);
while ((%potentialTarget = ContainerSearchNext()) != 0) {
if(%potentialTarget.isAlive()) {
if(((%potentialTarget.client.team == %proj.sourceObject.client.team) && $TeamDamage) || %potentialTarget.client.team != %proj.sourceObject.client.team) {
%potentialTarget.throwWeapon(1);
%potentialTarget.throwWeapon(0);
%potentialTarget.setWhiteout(4.0);
%potentialTarget.setMoveState(true);
%potentialTarget.schedule(4000, "SetMoveState", false);
%potentialTarget.setActionThread("death4",true);
ZappyLoop(%potentialTarget, 0, 7);
}
}
}
}
function ZappyLoop(%potentialTarget, %time, %maxTime) {
if(%time > %maxTime) {
return;
}
if(%potentialTarget.isAlive()) {
%time++;
%potentialTarget.zapObject();
schedule(750, 0, "ZappyLoop", %potentialTarget, %time, %maxTime);
}
}