mirror of
https://github.com/PhantomGamesDevelopment/TWM2.git
synced 2026-01-22 13:04:55 +00:00
Added more name change capabilities to serverControl.cs, adjusted the Acid Cannon to the new behavior, prep work for sniper zombies and the new mini boss coming in 3.9.2.
172 lines
4.6 KiB
C#
172 lines
4.6 KiB
C#
// Acid Cannon
|
|
|
|
datablock TracerProjectileData(AcidCannonPulse) {
|
|
doDynamicClientHits = true;
|
|
|
|
projectileShapeName = "";
|
|
directDamage = 0.3;
|
|
directDamageType = $DamageType::AcidCannon;
|
|
hasDamageRadius = true;
|
|
indirectDamage = 0.35;
|
|
damageRadius = 10.0;
|
|
kickBackStrength = 0.0;
|
|
radiusDamageType = $DamageType::AcidCannon;
|
|
sound = BlasterProjectileSound;
|
|
explosion = ZAcidBallExplosion;
|
|
|
|
ImageSource = "AcidCannonImage";
|
|
|
|
dryVelocity = 150.0;
|
|
wetVelocity = 150.0;
|
|
velInheritFactor = 1.0;
|
|
fizzleTimeMS = 1200;
|
|
lifetimeMS = 1500;
|
|
explodeOnDeath = false;
|
|
reflectOnWaterImpactAngle = 0.0;
|
|
explodeOnWaterImpact = true;
|
|
deflectionOnWaterImpact = 0.0;
|
|
fizzleUnderwaterMS = -1;
|
|
|
|
activateDelayMS = 100;
|
|
|
|
tracerLength = 5;
|
|
tracerAlpha = false;
|
|
tracerMinPixels = 3;
|
|
tracerColor = "0 1 0 1";
|
|
tracerTex[0] = "special/landSpikeBolt";
|
|
tracerTex[1] = "special/landSpikeBoltCross";
|
|
tracerWidth = 0.5;
|
|
crossSize = 0.79;
|
|
crossViewAng = 0.990;
|
|
renderCross = true;
|
|
emap = true;
|
|
};
|
|
|
|
function AcidCannonPulse::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.setWhiteout(1.0);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
datablock ShapeBaseImageData(AcidCannonImage) {
|
|
className = WeaponImage;
|
|
shapeFile = "weapon_energy.dts";
|
|
item = AcidCannon;
|
|
projectile = AcidCannonPulse;
|
|
projectileType = TracerProjectile;
|
|
|
|
HasChallenges = 0;
|
|
//RankRequire = $TWM2::RankRequire["PulsePhaser"];
|
|
//No rank required, this weapon is picked up from killed zombies
|
|
|
|
usesEnergy = true;
|
|
fireEnergy = 4;
|
|
minEnergy = 4;
|
|
|
|
stateName[0] = "Activate";
|
|
stateTransitionOnTimeout[0] = "ActivateReady";
|
|
stateTimeoutValue[0] = 0.5;
|
|
stateSequence[0] = "Activate";
|
|
stateSound[0] = BlasterSwitchSound;
|
|
|
|
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.3;
|
|
stateFire[3] = true;
|
|
stateRecoil[3] = NoRecoil;
|
|
stateAllowImageChange[3] = false;
|
|
stateSequence[3] = "Fire";
|
|
//stateSound[3] = PPWFireSound;
|
|
stateScript[3] = "onFire";
|
|
|
|
stateName[4] = "Reload";
|
|
stateTransitionOnNoAmmo[4] = "NoAmmo";
|
|
stateTransitionOnTimeout[4] = "Ready";
|
|
stateTimeoutValue[4] = 4.2;
|
|
stateAllowImageChange[4] = false;
|
|
stateSequence[4] = "Reload";
|
|
|
|
stateName[5] = "NoAmmo";
|
|
stateTransitionOnAmmo[5] = "Reload";
|
|
stateSequence[5] = "NoAmmo";
|
|
stateTransitionOnTriggerDown[5] = "DryFire";
|
|
|
|
stateName[6] = "DryFire";
|
|
stateTimeoutValue[6] = 0.3;
|
|
stateSound[6] = BlasterDryFireSound;
|
|
stateTransitionOnTimeout[6] = "Ready";
|
|
};
|
|
|
|
datablock ItemData(AcidCannon) {
|
|
className = Weapon;
|
|
catagory = "Spawn Items";
|
|
shapeFile = "weapon_energy.dts";
|
|
image = AcidCannonImage;
|
|
mass = 1;
|
|
alwaysAllowPickup = 1;
|
|
elasticity = 0.2;
|
|
friction = 0.6;
|
|
pickupRadius = 2;
|
|
pickUpName = "an Acid Cannon";
|
|
};
|
|
|
|
function AcidCannonImage::onMount(%this, %obj, %slot) {
|
|
Parent::onMount(%this, %obj, %slot);
|
|
}
|
|
|
|
function AcidCannonImage::onUnmount(%this,%obj,%slot) {
|
|
Parent::onUnmount(%this, %obj, %slot);
|
|
}
|
|
|
|
function AcidCannonImage::onFire(%data,%obj,%slot) {
|
|
AcidCannonAttack(%obj, %slot, 0);
|
|
}
|
|
|
|
function AcidCannonAttack(%object, %slot, %chargecount) {
|
|
%muzzleVec = %object.getMuzzleVector(%slot);
|
|
%muzzlePt = %object.getMuzzlePoint(%slot);
|
|
if(%chargecount <= 5) {
|
|
if(%chargecount == 1) {
|
|
serverPlay3D(AcidCannonPreFireSound, %muzzlePt);
|
|
}
|
|
%charge = new ParticleEmissionDummy() {
|
|
position = %muzzlePt;
|
|
dataBlock = "defaultEmissionDummy";
|
|
emitter = "BurnEmitter";
|
|
};
|
|
MissionCleanup.add(%charge);
|
|
%charge.schedule(100, "delete");
|
|
}
|
|
if(%chargecount == 7 || %chargecount == 9) {
|
|
%p = new TracerProjectile() {
|
|
dataBlock = AcidCannonPulse;
|
|
initialDirection = %muzzleVec;
|
|
initialPosition = %muzzlePt;
|
|
sourceObject = %object;
|
|
sourceSlot = 0;
|
|
};
|
|
MissionCleanup.add(%p);
|
|
serverPlay3D(CentaurArtilleryFireSound, %muzzlePt);
|
|
}
|
|
//
|
|
if(%chargecount <= 9) {
|
|
%chargecount++;
|
|
schedule(100, 0, "AcidCannonAttack", %object, %slot, %chargecount);
|
|
}
|
|
}
|