mirror of
https://github.com/PhantomGamesDevelopment/TWM2.git
synced 2026-07-15 00:14:38 +00:00
November Changes
3.9.2 Balancing Pass, Armor System Adjustments, More Zombie Types Added
This commit is contained in:
parent
19be242dfd
commit
0954efcdc4
58 changed files with 7602 additions and 7354 deletions
131
README.md
131
README.md
|
|
@ -83,6 +83,10 @@ PLEASE NOTE: I've moved all old changelogs into the version_history folder. This
|
||||||
* Replaced the acid cannon with an anti-tank photon cannon
|
* Replaced the acid cannon with an anti-tank photon cannon
|
||||||
* Zombie lords will now preferential target enemy ground armor before infantry, and engage their photon cannon on targets
|
* Zombie lords will now preferential target enemy ground armor before infantry, and engage their photon cannon on targets
|
||||||
* Zombie lords can now activate a defensive barrier to protect themselves and allies from damage temporarily... enjoy this new rage inducing mechanic :)
|
* Zombie lords can now activate a defensive barrier to protect themselves and allies from damage temporarily... enjoy this new rage inducing mechanic :)
|
||||||
|
* Demon
|
||||||
|
* Increased resistance to fire damage to 1000% from 3%
|
||||||
|
* Demon Zombies now light players on fire instead of infecting them on collision
|
||||||
|
* Players will be knocked back with a higher force when hit by demon zombies
|
||||||
* Air Rapier
|
* Air Rapier
|
||||||
* Modified the damage scalar of missiles to be a OHK on rapier zombies
|
* Modified the damage scalar of missiles to be a OHK on rapier zombies
|
||||||
* Added Boss Proficiency
|
* Added Boss Proficiency
|
||||||
|
|
@ -112,7 +116,132 @@ PLEASE NOTE: I've moved all old changelogs into the version_history folder. This
|
||||||
* Re-did his ground detection script to "hopefully" eradicate those funny moments when he suicide bombs the ground, ending the fight
|
* Re-did his ground detection script to "hopefully" eradicate those funny moments when he suicide bombs the ground, ending the fight
|
||||||
* Lord Vardison
|
* Lord Vardison
|
||||||
* Fixed an erraneous text prompt that would appear when the shadow rift detonated outside of WTF difficulty stating vardison had healed when in fact he did not
|
* Fixed an erraneous text prompt that would appear when the shadow rift detonated outside of WTF difficulty stating vardison had healed when in fact he did not
|
||||||
|
* General Enhancements
|
||||||
|
* Modified the vote logic in admin.cs to clean up a ton of redundant if/else paths
|
||||||
|
* Re-did the player collision logic in player.cs to make things a whole lot easier to modify in the future
|
||||||
|
* Did a pass through all of the weapon files, cleaning the code up and making each unique weapon have its own damage type.
|
||||||
|
* Some projectiles are still tied to bosses and killstreaks, these were not altered.
|
||||||
|
* For the updated damage types, death messages were added to the system such that PvP kills will be more easily tracked now.
|
||||||
* Gameplay Changes
|
* Gameplay Changes
|
||||||
* The Helljump 'Oh Lordy' modifier has been changed to 'Reduces the cooldown time of the Zombie Lord's Photon Cannon by 50%'.
|
* The Helljump 'Oh Lordy' modifier has been changed to 'Reduces the cooldown time of the Zombie Lord's Photon Cannon by 50%'.
|
||||||
|
* The RSA Laser Rifle has been renamed to the 'UR-22 Laser Rifle'
|
||||||
* General Bug Fixes
|
* General Bug Fixes
|
||||||
* Addressed the issue when gaining more than 1 million EXP that would result in your total EXP being reset by the difference between 1 million exp and your current exp.
|
* Addressed the issue when gaining more than 1 million EXP that would result in your total EXP being reset by the difference between 1 million exp and your current exp.
|
||||||
|
* Fixed the bug in which picking up weapon clips with an empty weapon would not automatically trigger weapon reload on that weapon.
|
||||||
|
* Fixed a typo in the damage types for the M1700 shotgun
|
||||||
|
* Weapon Balancing Pass (3.9.2)
|
||||||
|
* The 3.9.2 content update is bringing with it a full balance pass on the entire mod's arsenal, targeting for the most part weapons that have been underused in my personal opinion.
|
||||||
|
* Most of the changes are power up changes (As is my prefered choice of balancing), but a few high end outliers have been tuned down just a bit.
|
||||||
|
* Melee Weapons
|
||||||
|
* This weapon class is one that needed a pass the most, as soon as players get the blade of vengenace, they drop every other choice and only use the BoV, this is unintended
|
||||||
|
* The balance pass here should help to make the other two choices a little more enticing without ruining the power of the BoV for the players loyal to it.
|
||||||
|
* Blade of Vengenace
|
||||||
|
* Reduced damage from 100.0 to 0.9 (No longer OHKs in PvP)
|
||||||
|
* Assassination is still a OHK
|
||||||
|
* Added a 100.0 damage modifier to all zombie types for Blade of Vengeance
|
||||||
|
* This includes player zombies.
|
||||||
|
* Removed the clause that bosses could not be damaged by the Blade of Vengeance
|
||||||
|
* Bosses now take 65HP damage from the blade.
|
||||||
|
* Plasmasaber
|
||||||
|
* Removed the damage flag on player type
|
||||||
|
* Now deals a flat damage of 5.0 to all targets (OHK to all players, low tier zombies), 500HP damage to bosses.
|
||||||
|
* Sidearms
|
||||||
|
* At the moment, the two statistical outliers in the pool (Crimson Hawk and Pulse Phaser) feel close to being perfect, some minor tuning will help get them there.
|
||||||
|
* Crimson Hawk Pistol
|
||||||
|
* Trevor Haliade's personal sidearm is still pretty high on the lethality end of the spectrum.
|
||||||
|
* Reduced pulse damage from 0.23 to 0.17
|
||||||
|
* I also tweaked with the weapon's range a bit.
|
||||||
|
* Reduced the projectile life from 1 second to 0.7 seconds
|
||||||
|
* Added a 1.9 damage modifier to all zombie types
|
||||||
|
* This works out to ~0.32 damage per shot which is about a 40% damage increase against zombies
|
||||||
|
* ES-77 Pulse Phaser
|
||||||
|
* Last time I touched this weapon, I nearly started I riot amongst the entire Tribes 2 community, lol.
|
||||||
|
* After looking at how this weapon has performed between 3.3 and 3.9.1, I feel it needs a slight bump.
|
||||||
|
* Increased the base damage of the pulse phaser from 0.2 to 0.26
|
||||||
|
* Increased the damage of the phaser blade pulse from 0.21 to 0.3
|
||||||
|
* The strength of this weapon was it's incredible reach and long lasting projectile life time, this has been toned down a little
|
||||||
|
* Reduced the projectile lifetime from 3 seconds to 1.5 seconds
|
||||||
|
* Increased the projectile base speed from 120 to 160.
|
||||||
|
* The end result with be a stronger pulse phaser at the close range that loses out on the far reach aspect.
|
||||||
|
* Sniper Rifles
|
||||||
|
* The sniper rifle class has always been one of the stronger ones in TWM2, and I feel no reason to neuter it now.
|
||||||
|
* The goal of this update is to tweak the other sniper options to add more viable choices instead of just dropping the R700 as soon as you get it.
|
||||||
|
* G17 Sniper Rifle
|
||||||
|
* This heavy marksman rifle for the longest time has stood in the shadow of the almighty R700, I figured it's time to power it up a bit
|
||||||
|
* Increased the direct impact damage of the bullet from 0.25 to 0.55
|
||||||
|
* Reduced the round rechamber time from 1.1 seconds to 0.7 seconds
|
||||||
|
* M1 Sniper Rifle
|
||||||
|
* As with the G17, the M1 typically goes into the bin once players unlock the R700, this should still be a viable choice in the arsenal
|
||||||
|
* Increased the direct impact damage from 0.3 to 0.65
|
||||||
|
* Reduced the clip reload time from 5 seconds to 4 seconds
|
||||||
|
* Reduced the round rechamber time from 1.1 seconds to 0.9 seconds
|
||||||
|
* R700
|
||||||
|
* The monstrous R700 sniper rifle has for the most part, gone completely unchallenged since the release of the mod
|
||||||
|
* This weapon is about to get a lesson in Newton's Law of Gravity.
|
||||||
|
* Changed the projectile type from Tracer to Grenade
|
||||||
|
* Bullets will now drop as they travel, reducing the effective range with the same look angle.
|
||||||
|
* Players will now need to aim their shots based on distance too.
|
||||||
|
* Assault Rifles
|
||||||
|
* Assault Rifles have always felt good in TWM2, the strong jack of all trade weapons good for most ranges, while being outperformed in the range of other tools
|
||||||
|
* Only minor tweaking is needed here to help some of the unused tools get up to speed
|
||||||
|
* G-41
|
||||||
|
* For the most part, this rifle has been collecting dust in the bin of unused weapons due to other tools such as the S3 and R700 in the pool
|
||||||
|
* This weapon has been in need of a long coming tweak of power to make it a more viable choice
|
||||||
|
* Increased the bullet impact damage from 0.3 to 0.44
|
||||||
|
* Reduced the round rechamber time from 0.3 seconds to 0.15 seconds
|
||||||
|
* Reduced the spread factor of the weapon from 3:1000 to 2:1000
|
||||||
|
* M4A1
|
||||||
|
* This jack of all trades weapon currently sits as a power outlier in the assault rifle bin due to the various attachments it has
|
||||||
|
* Coupled with a high base round damage, this weapon would have turned into the go-to gun without adjustments
|
||||||
|
* Reduced the damage of the rounds from 0.09 to 0.085
|
||||||
|
* Increased the clip reload time from 4 seconds to 6 seconds
|
||||||
|
* Pulse Rifle
|
||||||
|
* As it stands right now, the pulse rifle is one of the weakest weapons in the mod, with the only advantage being the fastest and most accurate semi-auto in the pool
|
||||||
|
* With the enhancements to the G-41, the pulse rifle will also follow suit, which should make it a more viable choice in mid to long range fights
|
||||||
|
* Increased the shot damage from 0.2 to 0.38
|
||||||
|
* Reduced the round rechamber time from 0.3 seconds to 0.1 seconds
|
||||||
|
* S3 Rifle
|
||||||
|
* The weapon every player starts with in the mod has remained untouched since the first release of the mod.
|
||||||
|
* However, after a long hard thought on this one, I feel as if this weapon has actually been acting more like a sniper rifle than a semi-auto.
|
||||||
|
* With the changes to the G-41 and the Pulse Rifle however, the S3 still needs to be a viable tool, otherwise it will fall flat in the endgame
|
||||||
|
* The following adjustments have been made
|
||||||
|
* Reduced the direct impact damage from 0.7 to 0.5
|
||||||
|
* Reduced the round rechamber time from 0.9 seconds to 0.4 seconds
|
||||||
|
* Removed the delay between round fire and round rechambering (Shaving another 0.2 seconds off the rechamber time)
|
||||||
|
* Reduced the spread factor from 3:1000 to 2.5:1000
|
||||||
|
* Shotguns
|
||||||
|
* The buckshot tools of TWM2 have always been in a good place in terms of PvP, however I've noticed a sad trend of these being tossed aside in PvE aspects
|
||||||
|
* This update will mainly focus on tuning the damage up a bit in PvE, but balancing the range and spread for PvP.
|
||||||
|
* M1700
|
||||||
|
* The mod's first shotgun is a powerhouse in close range, with a heavy hitting OHK lurking for anyone foolish enough to come close.
|
||||||
|
* It's a bit strong in PvP right now, but it doesn't do quite enough in PvE
|
||||||
|
* Increased the pellet damage from 0.1125 to 0.13
|
||||||
|
* Increased the clip reload time from 2 seconds to 3 seconds
|
||||||
|
* Increased the damage modifier against zombies from 2.0/3.0 (Depending on the type) to a flat 4.5 across all types
|
||||||
|
* Cut the projectile lifetime from 1 second to 0.15 seconds
|
||||||
|
* Wp-400
|
||||||
|
* The semi-auto powerhouse shotgun is also getting some tuning done on it.
|
||||||
|
* Reduced the projectile lifetime from 1 second to 0.1 seconds (Slightly less range than the M1700)
|
||||||
|
* Increased the spread factor from 10:1000 to 15:1000
|
||||||
|
* Reduced the round rechamber time from 0.9 to 0.5
|
||||||
|
* Added a damage factor of 4.0 to all zombie types
|
||||||
|
* Increased the clip reload time from 4 seconds to 7 seconds
|
||||||
|
* SCD-343
|
||||||
|
* This monstrous one-shot machine has been the bane of my close quarters players since I unveiled this weapon.
|
||||||
|
* I have no plans to change this aspect, but to line it up with the other shotguns, I've made some tuning adjustments
|
||||||
|
* Increased the pellet damage from 0.1125 to 0.17
|
||||||
|
* Reduced the projectile lifetime from 1 second to 0.1 seconds
|
||||||
|
* Increased the spread factor from 6:1000 to 10:1000
|
||||||
|
* Added a damage factor of 4.0 to all zombie types
|
||||||
|
* SA-2400
|
||||||
|
* The SA-2400 is the wildcard of the shotgun class, firing slugs at a rapid speed versus standard spreads
|
||||||
|
* This weapon has been highly ineffective against zombie combatants, but no longer
|
||||||
|
* Reduced the time between slug shots from 0.2 seconds to 0.14 seconds
|
||||||
|
* Added a damage factor of 5.0 to all zombie types
|
||||||
|
* Reduced the projectile lifetime from 3 seconds (wtf?) to 0.2 seconds
|
||||||
|
* Model-1887
|
||||||
|
* The high end of the shotgun spectrum is the 1887, although a statisical look at the weapon really revealed that it was the weakest numerically
|
||||||
|
* Increased the pellet damage from 0.096 to 0.11
|
||||||
|
* Increased the number of pellets from 14 to 18
|
||||||
|
* Reduced the projectile lifetime from 0.5 s to 0.15 seconds
|
||||||
|
* Added a damage factor of 4.0 to all zombie types
|
||||||
|
|
@ -1,386 +1,376 @@
|
||||||
//DBs
|
//DBs
|
||||||
datablock ParticleData(GhostflameParticle)
|
datablock ParticleData(GhostflameParticle) {
|
||||||
{
|
dragCoeffiecient = 0.0;
|
||||||
dragCoeffiecient = 0.0;
|
gravityCoefficient = -0.1;
|
||||||
gravityCoefficient = -0.1;
|
inheritedVelFactor = 0.1;
|
||||||
inheritedVelFactor = 0.1;
|
|
||||||
|
|
||||||
lifetimeMS = 500;
|
lifetimeMS = 500;
|
||||||
lifetimeVarianceMS = 50;
|
lifetimeVarianceMS = 50;
|
||||||
|
|
||||||
textureName = "particleTest";
|
textureName = "particleTest";
|
||||||
|
|
||||||
spinRandomMin = -10.0;
|
spinRandomMin = -10.0;
|
||||||
spinRandomMax = 10.0;
|
spinRandomMax = 10.0;
|
||||||
|
|
||||||
colors[0] = "0 1 0 0.4";
|
colors[0] = "0 1 0 0.4";
|
||||||
colors[1] = "0 1 0 0.3";
|
colors[1] = "0 1 0 0.3";
|
||||||
colors[2] = "0 1 0 0.0";
|
colors[2] = "0 1 0 0.0";
|
||||||
sizes[0] = 2.0;
|
sizes[0] = 2.0;
|
||||||
sizes[1] = 1.0;
|
sizes[1] = 1.0;
|
||||||
sizes[2] = 0.8;
|
sizes[2] = 0.8;
|
||||||
times[0] = 0.0;
|
times[0] = 0.0;
|
||||||
times[1] = 0.6;
|
times[1] = 0.6;
|
||||||
times[2] = 1.0;
|
times[2] = 1.0;
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ParticleEmitterData(GhostflameEmitter)
|
datablock ParticleEmitterData(GhostflameEmitter) {
|
||||||
{
|
ejectionPeriodMS = 3;
|
||||||
ejectionPeriodMS = 3;
|
periodVarianceMS = 0;
|
||||||
periodVarianceMS = 0;
|
|
||||||
|
|
||||||
ejectionOffset = 0.2;
|
ejectionOffset = 0.2;
|
||||||
ejectionVelocity = 10.0;
|
ejectionVelocity = 10.0;
|
||||||
velocityVariance = 0.0;
|
velocityVariance = 0.0;
|
||||||
|
|
||||||
thetaMin = 0.0;
|
thetaMin = 0.0;
|
||||||
thetaMax = 10.0;
|
thetaMax = 10.0;
|
||||||
|
|
||||||
particles = "GhostflameParticle";
|
particles = "GhostflameParticle";
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock LinearFlareProjectileData(GhostFlameboltMain)
|
datablock LinearFlareProjectileData(GhostFlameboltMain) {
|
||||||
{
|
projectileShapeName = "turret_muzzlepoint.dts";
|
||||||
projectileShapeName = "turret_muzzlepoint.dts";
|
scale = "1.0 1.0 1.0";
|
||||||
scale = "1.0 1.0 1.0";
|
faceViewer = true;
|
||||||
faceViewer = true;
|
directDamage = 0.05;
|
||||||
directDamage = 0.05;
|
hasDamageRadius = true;
|
||||||
hasDamageRadius = true;
|
indirectDamage = 0.1;
|
||||||
indirectDamage = 0.1;
|
damageRadius = 4.0;
|
||||||
damageRadius = 4.0;
|
kickBackStrength = 0.0;
|
||||||
kickBackStrength = 0.0;
|
radiusDamageType = $DamageType::Plasma;
|
||||||
radiusDamageType = $DamageType::Plasma;
|
|
||||||
|
|
||||||
explosion = "ThrowerExplosion";
|
explosion = "ThrowerExplosion";
|
||||||
splash = PlasmaSplash;
|
splash = PlasmaSplash;
|
||||||
|
|
||||||
baseEmitter = GhostflameEmitter;
|
baseEmitter = GhostflameEmitter;
|
||||||
|
|
||||||
dryVelocity = 50.0; // z0dd - ZOD, 7/20/02. Faster plasma projectile. was 55
|
dryVelocity = 50.0; // z0dd - ZOD, 7/20/02. Faster plasma projectile. was 55
|
||||||
wetVelocity = -1;
|
wetVelocity = -1;
|
||||||
velInheritFactor = 0.3;
|
velInheritFactor = 0.3;
|
||||||
fizzleTimeMS = 250;
|
fizzleTimeMS = 250;
|
||||||
lifetimeMS = 30000;
|
lifetimeMS = 30000;
|
||||||
explodeOnDeath = false;
|
explodeOnDeath = false;
|
||||||
reflectOnWaterImpactAngle = 0.0;
|
reflectOnWaterImpactAngle = 0.0;
|
||||||
explodeOnWaterImpact = true;
|
explodeOnWaterImpact = true;
|
||||||
deflectionOnWaterImpact = 0.0;
|
deflectionOnWaterImpact = 0.0;
|
||||||
fizzleUnderwaterMS = -1;
|
fizzleUnderwaterMS = -1;
|
||||||
|
|
||||||
//activateDelayMS = 100;
|
//activateDelayMS = 100;
|
||||||
activateDelayMS = -1;
|
activateDelayMS = -1;
|
||||||
|
|
||||||
size[0] = 0.2;
|
size[0] = 0.2;
|
||||||
size[1] = 0.5;
|
size[1] = 0.5;
|
||||||
size[2] = 0.1;
|
size[2] = 0.1;
|
||||||
|
|
||||||
|
numFlares = 35;
|
||||||
numFlares = 35;
|
flareColor = "1 0.18 0.03";
|
||||||
flareColor = "1 0.18 0.03";
|
flareModTexture = "flaremod";
|
||||||
flareModTexture = "flaremod";
|
flareBaseTexture = "flarebase";
|
||||||
flareBaseTexture = "flarebase";
|
|
||||||
|
|
||||||
sound = PlasmaProjectileSound;
|
sound = PlasmaProjectileSound;
|
||||||
fireSound = FlamethrowerFireSound;
|
fireSound = FlamethrowerFireSound;
|
||||||
wetFireSound = PlasmaFireWetSound;
|
wetFireSound = PlasmaFireWetSound;
|
||||||
|
|
||||||
hasLight = true;
|
hasLight = true;
|
||||||
lightRadius = 10.0;
|
lightRadius = 10.0;
|
||||||
lightColor = "0.94 0.03 0.12";
|
lightColor = "0.94 0.03 0.12";
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ParticleData(NapalmExplosionParticle)
|
datablock ParticleData(NapalmExplosionParticle) {
|
||||||
{
|
dragCoefficient = 2;
|
||||||
dragCoefficient = 2;
|
gravityCoefficient = 0.2;
|
||||||
gravityCoefficient = 0.2;
|
inheritedVelFactor = 0.2;
|
||||||
inheritedVelFactor = 0.2;
|
constantAcceleration = 0.0;
|
||||||
constantAcceleration = 0.0;
|
lifetimeMS = 450;
|
||||||
lifetimeMS = 450;
|
lifetimeVarianceMS = 150;
|
||||||
lifetimeVarianceMS = 150;
|
textureName = "particleTest";
|
||||||
textureName = "particleTest";
|
colors[0] = "1 0 0";
|
||||||
colors[0] = "1 0 0";
|
colors[1] = "1 0 0";
|
||||||
colors[1] = "1 0 0";
|
sizes[0] = 0.5;
|
||||||
sizes[0] = 0.5;
|
sizes[1] = 2;
|
||||||
sizes[1] = 2;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ParticleEmitterData(NapalmExplosionEmitter)
|
datablock ParticleEmitterData(NapalmExplosionEmitter) {
|
||||||
{
|
ejectionPeriodMS = 7;
|
||||||
ejectionPeriodMS = 7;
|
periodVarianceMS = 0;
|
||||||
periodVarianceMS = 0;
|
ejectionVelocity = 5;
|
||||||
ejectionVelocity = 5;
|
velocityVariance = 1.0;
|
||||||
velocityVariance = 1.0;
|
ejectionOffset = 0.0;
|
||||||
ejectionOffset = 0.0;
|
thetaMin = 0;
|
||||||
thetaMin = 0;
|
thetaMax = 60;
|
||||||
thetaMax = 60;
|
phiReferenceVel = 0;
|
||||||
phiReferenceVel = 0;
|
phiVariance = 360;
|
||||||
phiVariance = 360;
|
overrideAdvances = false;
|
||||||
overrideAdvances = false;
|
particles = "NapalmExplosionParticle";
|
||||||
particles = "NapalmExplosionParticle";
|
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ExplosionData(NapalmExplosion)
|
datablock ExplosionData(NapalmExplosion) {
|
||||||
{
|
explosionShape = "effect_plasma_explosion.dts";
|
||||||
explosionShape = "effect_plasma_explosion.dts";
|
soundProfile = plasmaExpSound;
|
||||||
soundProfile = plasmaExpSound;
|
particleEmitter = NapalmExplosionEmitter;
|
||||||
particleEmitter = NapalmExplosionEmitter;
|
particleDensity = 150;
|
||||||
particleDensity = 150;
|
particleRadius = 1.25;
|
||||||
particleRadius = 1.25;
|
faceViewer = true;
|
||||||
faceViewer = true;
|
|
||||||
|
|
||||||
sizes[0] = "3.0 3.0 3.0";
|
sizes[0] = "3.0 3.0 3.0";
|
||||||
sizes[1] = "3.0 3.0 3.0";
|
sizes[1] = "3.0 3.0 3.0";
|
||||||
times[0] = 0.0;
|
times[0] = 0.0;
|
||||||
times[1] = 1.5;
|
times[1] = 1.5;
|
||||||
};
|
};
|
||||||
|
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
//Napalm projectile
|
//Napalm projectile
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
datablock LinearProjectileData(NapalmShot)
|
datablock LinearProjectileData(NapalmShot) {
|
||||||
{
|
projectileShapeName = "mortar_projectile.dts";
|
||||||
projectileShapeName = "mortar_projectile.dts";
|
emitterDelay = -1;
|
||||||
emitterDelay = -1;
|
directDamage = 0.0;
|
||||||
directDamage = 0.0;
|
hasDamageRadius = true;
|
||||||
hasDamageRadius = true;
|
indirectDamage = 0.5;
|
||||||
indirectDamage = 0.5;
|
damageRadius = 20.0;
|
||||||
damageRadius = 20.0;
|
radiusDamageType = $DamageType::Plasma;
|
||||||
radiusDamageType = $DamageType::Plasma;
|
kickBackStrength = 3000;
|
||||||
kickBackStrength = 3000;
|
|
||||||
|
|
||||||
explosion = "NapalmExplosion";
|
explosion = "NapalmExplosion";
|
||||||
// underwaterExplosion = "UnderwaterNapalmExplosion";
|
// underwaterExplosion = "UnderwaterNapalmExplosion";
|
||||||
velInheritFactor = 0.5;
|
velInheritFactor = 0.5;
|
||||||
// splash = NapalmSplash;
|
// splash = NapalmSplash;
|
||||||
depthTolerance = 10.0; // depth at which it uses underwater explosion
|
depthTolerance = 10.0; // depth at which it uses underwater explosion
|
||||||
|
|
||||||
baseEmitter = MissileFireEmitter;
|
baseEmitter = MissileFireEmitter;
|
||||||
bubbleEmitter = GrenadeBubbleEmitter;
|
bubbleEmitter = GrenadeBubbleEmitter;
|
||||||
|
|
||||||
grenadeElasticity = 0.15;
|
grenadeElasticity = 0.15;
|
||||||
grenadeFriction = 0.4;
|
grenadeFriction = 0.4;
|
||||||
armingDelayMS = 2000;
|
armingDelayMS = 2000;
|
||||||
muzzleVelocity = 63.7;
|
muzzleVelocity = 63.7;
|
||||||
drag = 0.1;
|
drag = 0.1;
|
||||||
|
|
||||||
sound = MortarProjectileSound;
|
sound = MortarProjectileSound;
|
||||||
|
|
||||||
hasLight = true;
|
hasLight = true;
|
||||||
lightRadius = 4;
|
lightRadius = 4;
|
||||||
lightColor = "1.00 0.9 1.00";
|
lightColor = "1.00 0.9 1.00";
|
||||||
|
|
||||||
hasLightUnderwaterColor = true;
|
hasLightUnderwaterColor = true;
|
||||||
underWaterLightColor = "0.05 0.075 0.2";
|
underWaterLightColor = "0.05 0.075 0.2";
|
||||||
|
|
||||||
dryVelocity = 90;
|
|
||||||
wetVelocity = 50;
|
|
||||||
velInheritFactor = 0.5;
|
|
||||||
fizzleTimeMS = 5000;
|
|
||||||
lifetimeMS = 2700;
|
|
||||||
explodeOnDeath = true;
|
|
||||||
reflectOnWaterImpactAngle = 15.0;
|
|
||||||
explodeOnWaterImpact = true;
|
|
||||||
deflectionOnWaterImpact = 0.0;
|
|
||||||
fizzleUnderwaterMS = 5000;
|
|
||||||
|
|
||||||
|
dryVelocity = 90;
|
||||||
|
wetVelocity = 50;
|
||||||
|
velInheritFactor = 0.5;
|
||||||
|
fizzleTimeMS = 5000;
|
||||||
|
lifetimeMS = 2700;
|
||||||
|
explodeOnDeath = true;
|
||||||
|
reflectOnWaterImpactAngle = 15.0;
|
||||||
|
explodeOnWaterImpact = true;
|
||||||
|
deflectionOnWaterImpact = 0.0;
|
||||||
|
fizzleUnderwaterMS = 5000;
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock PlayerData(GhostFireArmor) : MediumPlayerDamageProfile
|
datablock PlayerData(GhostFireArmor) : MediumPlayerDamageProfile {
|
||||||
{
|
emap = true;
|
||||||
emap = true;
|
|
||||||
|
|
||||||
className = Armor;
|
className = Armor;
|
||||||
shapeFile = "medium_male.dts";
|
shapeFile = "medium_male.dts";
|
||||||
cameraMaxDist = 3;
|
cameraMaxDist = 3;
|
||||||
computeCRC = true;
|
computeCRC = true;
|
||||||
|
|
||||||
debrisShapeName = "debris_player.dts";
|
debrisShapeName = "debris_player.dts";
|
||||||
debris = HumanRedPlayerDebris;
|
debris = HumanRedPlayerDebris;
|
||||||
|
|
||||||
canObserve = true;
|
canObserve = true;
|
||||||
cmdCategory = "Clients";
|
cmdCategory = "Clients";
|
||||||
cmdIcon = CMDPlayerIcon;
|
cmdIcon = CMDPlayerIcon;
|
||||||
cmdMiniIconName = "commander/MiniIcons/com_player_grey";
|
cmdMiniIconName = "commander/MiniIcons/com_player_grey";
|
||||||
|
|
||||||
hudImageNameFriendly[0] = "gui/hud_playertriangle";
|
hudImageNameFriendly[0] = "gui/hud_playertriangle";
|
||||||
hudImageNameEnemy[0] = "gui/hud_playertriangle_enemy";
|
hudImageNameEnemy[0] = "gui/hud_playertriangle_enemy";
|
||||||
hudRenderModulated[0] = true;
|
hudRenderModulated[0] = true;
|
||||||
|
|
||||||
hudImageNameFriendly[1] = "commander/MiniIcons/com_flag_grey";
|
hudImageNameFriendly[1] = "commander/MiniIcons/com_flag_grey";
|
||||||
hudImageNameEnemy[1] = "commander/MiniIcons/com_flag_grey";
|
hudImageNameEnemy[1] = "commander/MiniIcons/com_flag_grey";
|
||||||
hudRenderModulated[1] = true;
|
hudRenderModulated[1] = true;
|
||||||
hudRenderAlways[1] = true;
|
hudRenderAlways[1] = true;
|
||||||
hudRenderCenter[1] = true;
|
hudRenderCenter[1] = true;
|
||||||
hudRenderDistance[1] = true;
|
hudRenderDistance[1] = true;
|
||||||
|
|
||||||
hudImageNameFriendly[2] = "commander/MiniIcons/com_flag_grey";
|
hudImageNameFriendly[2] = "commander/MiniIcons/com_flag_grey";
|
||||||
hudImageNameEnemy[2] = "commander/MiniIcons/com_flag_grey";
|
hudImageNameEnemy[2] = "commander/MiniIcons/com_flag_grey";
|
||||||
hudRenderModulated[2] = true;
|
hudRenderModulated[2] = true;
|
||||||
hudRenderAlways[2] = true;
|
hudRenderAlways[2] = true;
|
||||||
hudRenderCenter[2] = true;
|
hudRenderCenter[2] = true;
|
||||||
hudRenderDistance[2] = true;
|
hudRenderDistance[2] = true;
|
||||||
|
|
||||||
aiAvoidThis = true;
|
aiAvoidThis = true;
|
||||||
|
|
||||||
minLookAngle = -1.5;
|
minLookAngle = -1.5;
|
||||||
maxLookAngle = 1.5;
|
maxLookAngle = 1.5;
|
||||||
maxFreelookAngle = 3.0;
|
maxFreelookAngle = 3.0;
|
||||||
|
|
||||||
mass = 70;
|
mass = 70;
|
||||||
drag = 0.3;
|
drag = 0.3;
|
||||||
maxdrag = 0.5;
|
maxdrag = 0.5;
|
||||||
density = 10;
|
density = 10;
|
||||||
maxDamage = 500.0;
|
maxDamage = 500.0;
|
||||||
maxEnergy = 400;
|
maxEnergy = 400;
|
||||||
repairRate = 0.0053;
|
repairRate = 0.0053;
|
||||||
energyPerDamagePoint = 75.0; // shield energy required to block one point of damage
|
energyPerDamagePoint = 75.0; // shield energy required to block one point of damage
|
||||||
|
|
||||||
rechargeRate = 0.456;
|
rechargeRate = 0.456;
|
||||||
jetForce = 21.22 * 230;
|
jetForce = 21.22 * 230;
|
||||||
underwaterJetForce = 25.22 * 130 * 1.5;
|
underwaterJetForce = 25.22 * 130 * 1.5;
|
||||||
underwaterVertJetFactor = 1.5;
|
underwaterVertJetFactor = 1.5;
|
||||||
jetEnergyDrain = 4.0;
|
jetEnergyDrain = 4.0;
|
||||||
underwaterJetEnergyDrain = 1.0;
|
underwaterJetEnergyDrain = 1.0;
|
||||||
minJetEnergy = 10;
|
minJetEnergy = 10;
|
||||||
maxJetHorizontalPercentage = 0.8;
|
maxJetHorizontalPercentage = 0.8;
|
||||||
|
|
||||||
runForce = 60 * 150;
|
runForce = 60 * 150;
|
||||||
runEnergyDrain = 0;
|
runEnergyDrain = 0;
|
||||||
minRunEnergy = 0;
|
minRunEnergy = 0;
|
||||||
maxForwardSpeed = 18;
|
maxForwardSpeed = 18;
|
||||||
maxBackwardSpeed = 18;
|
maxBackwardSpeed = 18;
|
||||||
maxSideSpeed = 18;
|
maxSideSpeed = 18;
|
||||||
|
|
||||||
maxUnderwaterForwardSpeed = 10.5;
|
maxUnderwaterForwardSpeed = 10.5;
|
||||||
maxUnderwaterBackwardSpeed = 9.5;
|
maxUnderwaterBackwardSpeed = 9.5;
|
||||||
maxUnderwaterSideSpeed = 9.5;
|
maxUnderwaterSideSpeed = 9.5;
|
||||||
|
|
||||||
recoverDelay = 4;
|
recoverDelay = 4;
|
||||||
recoverRunForceScale = 0.7;
|
recoverRunForceScale = 0.7;
|
||||||
|
|
||||||
// heat inc'ers and dec'ers
|
// heat inc'ers and dec'ers
|
||||||
heatDecayPerSec = 1.0 / 5.0; // takes 4 seconds to clear heat sig.
|
heatDecayPerSec = 1.0 / 5.0; // takes 4 seconds to clear heat sig.
|
||||||
heatIncreasePerSec = 1.0 / 2.0; // takes 3.0 seconds of constant jet to get full heat sig.
|
heatIncreasePerSec = 1.0 / 2.0; // takes 3.0 seconds of constant jet to get full heat sig.
|
||||||
|
|
||||||
jumpForce = 8.3 * 130;
|
jumpForce = 8.3 * 130;
|
||||||
jumpEnergyDrain = 0;
|
jumpEnergyDrain = 0;
|
||||||
minJumpEnergy = 0;
|
minJumpEnergy = 0;
|
||||||
jumpSurfaceAngle = 75;
|
jumpSurfaceAngle = 75;
|
||||||
jumpDelay = 0;
|
jumpDelay = 0;
|
||||||
|
|
||||||
// Controls over slope of runnable/jumpable surfaces
|
// Controls over slope of runnable/jumpable surfaces
|
||||||
runSurfaceAngle = 85;
|
runSurfaceAngle = 85;
|
||||||
jumpSurfaceAngle = 85;
|
jumpSurfaceAngle = 85;
|
||||||
|
|
||||||
minJumpSpeed = 25;
|
minJumpSpeed = 25;
|
||||||
maxJumpSpeed = 35;
|
maxJumpSpeed = 35;
|
||||||
|
|
||||||
horizMaxSpeed = 70;
|
horizMaxSpeed = 70;
|
||||||
horizResistSpeed = 28;
|
horizResistSpeed = 28;
|
||||||
horizResistFactor = 0.32;
|
horizResistFactor = 0.32;
|
||||||
maxJetForwardSpeed = 18;
|
maxJetForwardSpeed = 18;
|
||||||
|
|
||||||
upMaxSpeed = 80;
|
upMaxSpeed = 80;
|
||||||
upResistSpeed = 30;
|
upResistSpeed = 30;
|
||||||
upResistFactor = 0.23;
|
upResistFactor = 0.23;
|
||||||
|
|
||||||
minImpactSpeed = 45;
|
minImpactSpeed = 45;
|
||||||
speedDamageScale = 0.006;
|
speedDamageScale = 0.006;
|
||||||
|
|
||||||
jetSound = ArmorJetSound;
|
jetSound = ArmorJetSound;
|
||||||
wetJetSound = ArmorWetJetSound;
|
wetJetSound = ArmorWetJetSound;
|
||||||
|
|
||||||
jetEmitter = FlammerArmorJetEmitter; //Pyro jets
|
jetEmitter = FlammerArmorJetEmitter; //Pyro jets
|
||||||
jetEffect = HumanMediumArmorJetEffect;
|
jetEffect = HumanMediumArmorJetEffect;
|
||||||
|
|
||||||
boundingBox = "1.45 1.45 2.4";
|
boundingBox = "1.45 1.45 2.4";
|
||||||
pickupRadius = 0.75;
|
pickupRadius = 0.75;
|
||||||
|
|
||||||
// damage location details
|
// damage location details
|
||||||
boxNormalHeadPercentage = 0.83;
|
boxNormalHeadPercentage = 0.83;
|
||||||
boxNormalTorsoPercentage = 0.49;
|
boxNormalTorsoPercentage = 0.49;
|
||||||
boxHeadLeftPercentage = 0;
|
boxHeadLeftPercentage = 0;
|
||||||
boxHeadRightPercentage = 1;
|
boxHeadRightPercentage = 1;
|
||||||
boxHeadBackPercentage = 0;
|
boxHeadBackPercentage = 0;
|
||||||
boxHeadFrontPercentage = 1;
|
boxHeadFrontPercentage = 1;
|
||||||
|
|
||||||
//Foot Prints
|
//Foot Prints
|
||||||
decalData = MediumMaleFootprint;
|
decalData = MediumMaleFootprint;
|
||||||
decalOffset = 0.35;
|
decalOffset = 0.35;
|
||||||
|
|
||||||
footPuffEmitter = LightPuffEmitter;
|
footPuffEmitter = LightPuffEmitter;
|
||||||
footPuffNumParts = 15;
|
footPuffNumParts = 15;
|
||||||
footPuffRadius = 0.25;
|
footPuffRadius = 0.25;
|
||||||
|
|
||||||
dustEmitter = LiftoffDustEmitter;
|
dustEmitter = LiftoffDustEmitter;
|
||||||
|
|
||||||
splash = PlayerSplash;
|
splash = PlayerSplash;
|
||||||
splashVelocity = 4.0;
|
splashVelocity = 4.0;
|
||||||
splashAngle = 67.0;
|
splashAngle = 67.0;
|
||||||
splashFreqMod = 300.0;
|
splashFreqMod = 300.0;
|
||||||
splashVelEpsilon = 0.60;
|
splashVelEpsilon = 0.60;
|
||||||
bubbleEmitTime = 0.4;
|
bubbleEmitTime = 0.4;
|
||||||
splashEmitter[0] = PlayerFoamDropletsEmitter;
|
splashEmitter[0] = PlayerFoamDropletsEmitter;
|
||||||
splashEmitter[1] = PlayerFoamEmitter;
|
splashEmitter[1] = PlayerFoamEmitter;
|
||||||
splashEmitter[2] = PlayerBubbleEmitter;
|
splashEmitter[2] = PlayerBubbleEmitter;
|
||||||
mediumSplashSoundVelocity = 10.0;
|
mediumSplashSoundVelocity = 10.0;
|
||||||
hardSplashSoundVelocity = 20.0;
|
hardSplashSoundVelocity = 20.0;
|
||||||
exitSplashSoundVelocity = 5.0;
|
exitSplashSoundVelocity = 5.0;
|
||||||
|
|
||||||
footstepSplashHeight = 0.35;
|
footstepSplashHeight = 0.35;
|
||||||
//Footstep Sounds
|
//Footstep Sounds
|
||||||
LFootSoftSound = LFootMediumSoftSound;
|
LFootSoftSound = LFootMediumSoftSound;
|
||||||
RFootSoftSound = RFootMediumSoftSound;
|
RFootSoftSound = RFootMediumSoftSound;
|
||||||
LFootHardSound = LFootMediumHardSound;
|
LFootHardSound = LFootMediumHardSound;
|
||||||
RFootHardSound = RFootMediumHardSound;
|
RFootHardSound = RFootMediumHardSound;
|
||||||
LFootMetalSound = LFootMediumMetalSound;
|
LFootMetalSound = LFootMediumMetalSound;
|
||||||
RFootMetalSound = RFootMediumMetalSound;
|
RFootMetalSound = RFootMediumMetalSound;
|
||||||
LFootSnowSound = LFootMediumSnowSound;
|
LFootSnowSound = LFootMediumSnowSound;
|
||||||
RFootSnowSound = RFootMediumSnowSound;
|
RFootSnowSound = RFootMediumSnowSound;
|
||||||
LFootShallowSound = LFootMediumShallowSplashSound;
|
LFootShallowSound = LFootMediumShallowSplashSound;
|
||||||
RFootShallowSound = RFootMediumShallowSplashSound;
|
RFootShallowSound = RFootMediumShallowSplashSound;
|
||||||
LFootWadingSound = LFootMediumWadingSound;
|
LFootWadingSound = LFootMediumWadingSound;
|
||||||
RFootWadingSound = RFootMediumWadingSound;
|
RFootWadingSound = RFootMediumWadingSound;
|
||||||
LFootUnderwaterSound = LFootMediumUnderwaterSound;
|
LFootUnderwaterSound = LFootMediumUnderwaterSound;
|
||||||
RFootUnderwaterSound = RFootMediumUnderwaterSound;
|
RFootUnderwaterSound = RFootMediumUnderwaterSound;
|
||||||
LFootBubblesSound = LFootMediumBubblesSound;
|
LFootBubblesSound = LFootMediumBubblesSound;
|
||||||
RFootBubblesSound = RFootMediumBubblesSound;
|
RFootBubblesSound = RFootMediumBubblesSound;
|
||||||
movingBubblesSound = ArmorMoveBubblesSound;
|
movingBubblesSound = ArmorMoveBubblesSound;
|
||||||
waterBreathSound = WaterBreathMaleSound;
|
waterBreathSound = WaterBreathMaleSound;
|
||||||
|
|
||||||
impactSoftSound = ImpactMediumSoftSound;
|
impactSoftSound = ImpactMediumSoftSound;
|
||||||
impactHardSound = ImpactMediumHardSound;
|
impactHardSound = ImpactMediumHardSound;
|
||||||
impactMetalSound = ImpactMediumMetalSound;
|
impactMetalSound = ImpactMediumMetalSound;
|
||||||
impactSnowSound = ImpactMediumSnowSound;
|
impactSnowSound = ImpactMediumSnowSound;
|
||||||
|
|
||||||
skiSoftSound = SkiAllSoftSound;
|
skiSoftSound = SkiAllSoftSound;
|
||||||
skiHardSound = SkiAllHardSound;
|
skiHardSound = SkiAllHardSound;
|
||||||
skiMetalSound = SkiAllMetalSound;
|
skiMetalSound = SkiAllMetalSound;
|
||||||
skiSnowSound = SkiAllSnowSound;
|
skiSnowSound = SkiAllSnowSound;
|
||||||
|
|
||||||
impactWaterEasy = ImpactMediumWaterEasySound;
|
impactWaterEasy = ImpactMediumWaterEasySound;
|
||||||
impactWaterMedium = ImpactMediumWaterMediumSound;
|
impactWaterMedium = ImpactMediumWaterMediumSound;
|
||||||
impactWaterHard = ImpactMediumWaterHardSound;
|
impactWaterHard = ImpactMediumWaterHardSound;
|
||||||
|
|
||||||
groundImpactMinSpeed = 10.0;
|
groundImpactMinSpeed = 10.0;
|
||||||
groundImpactShakeFreq = "4.0 4.0 4.0";
|
groundImpactShakeFreq = "4.0 4.0 4.0";
|
||||||
groundImpactShakeAmp = "1.0 1.0 1.0";
|
groundImpactShakeAmp = "1.0 1.0 1.0";
|
||||||
groundImpactShakeDuration = 0.8;
|
groundImpactShakeDuration = 0.8;
|
||||||
groundImpactShakeFalloff = 10.0;
|
groundImpactShakeFalloff = 10.0;
|
||||||
|
|
||||||
exitingWater = ExitingWaterMediumSound;
|
exitingWater = ExitingWaterMediumSound;
|
||||||
|
|
||||||
maxWeapons = 2; // Max number of different weapons the player can have
|
maxWeapons = 2; // Max number of different weapons the player can have
|
||||||
maxGrenades = 1; // Max number of different grenades the player can have
|
maxGrenades = 1; // Max number of different grenades the player can have
|
||||||
maxMines = 1; // Max number of different mines the player can have
|
maxMines = 1; // Max number of different mines the player can have
|
||||||
|
|
||||||
damageScale[$DamageType::plasma] = 0.001;
|
damageScale[$DamageType::plasma] = 0.001;
|
||||||
damageScale[$DamageType::Burn] = 0.001;
|
damageScale[$DamageType::Burn] = 0.001;
|
||||||
damageScale[$DamageType::Fire] = 0.001;
|
damageScale[$DamageType::Fire] = 0.001;
|
||||||
damageScale[$DamageType::Bullet] = 0.10; //I deny you shrike n0bs
|
damageScale[$DamageType::Bullet] = 0.10; //I deny you shrike n0bs
|
||||||
|
|
||||||
// Inventory restrictions
|
// Inventory restrictions
|
||||||
max[RepairKit] = 4;
|
max[RepairKit] = 4;
|
||||||
max[Mine] = 0;
|
max[Mine] = 0;
|
||||||
max[ZapMine] = 0;
|
max[ZapMine] = 0;
|
||||||
max[CrispMine] = 5;
|
max[CrispMine] = 5;
|
||||||
|
|
@ -390,7 +380,7 @@ datablock PlayerData(GhostFireArmor) : MediumPlayerDamageProfile
|
||||||
max[Pistol] = 1;
|
max[Pistol] = 1;
|
||||||
max[PistolAmmo] = 10;
|
max[PistolAmmo] = 10;
|
||||||
max[Pistolclip] = 8;
|
max[Pistolclip] = 8;
|
||||||
max[PulsePhaser] = 1;
|
max[PulsePhaser] = 1;
|
||||||
max[flamer] = 1;
|
max[flamer] = 1;
|
||||||
max[flamerAmmo] = 0;
|
max[flamerAmmo] = 0;
|
||||||
max[Napalm] = 1;
|
max[Napalm] = 1;
|
||||||
|
|
@ -399,111 +389,113 @@ datablock PlayerData(GhostFireArmor) : MediumPlayerDamageProfile
|
||||||
max[BOV] = 1;
|
max[BOV] = 1;
|
||||||
max[SOmelee] = 1;
|
max[SOmelee] = 1;
|
||||||
max[IncindinaryGrenade] = 7;
|
max[IncindinaryGrenade] = 7;
|
||||||
max[Beacon] = 3;
|
max[Beacon] = 3;
|
||||||
// -END
|
// -END
|
||||||
|
|
||||||
observeParameters = "0.5 4.5 4.5";
|
observeParameters = "0.5 4.5 4.5";
|
||||||
|
|
||||||
shieldEffectScale = "0.7 0.7 1.0";
|
shieldEffectScale = "0.7 0.7 1.0";
|
||||||
};
|
};
|
||||||
//
|
//
|
||||||
|
|
||||||
function StartGhostFire(%pos) {
|
function StartGhostFire(%pos) {
|
||||||
%Ghost = new player(){
|
%Ghost = new player(){
|
||||||
Datablock = "GhostFireArmor";
|
Datablock = "GhostFireArmor";
|
||||||
};
|
};
|
||||||
%Ghost.setTransform(%pos);
|
%Ghost.setTransform(%pos);
|
||||||
%Ghost.team = 30;
|
%Ghost.team = 30;
|
||||||
%Ghost.hastarget = 1;
|
%Ghost.hastarget = 1;
|
||||||
%Ghost.isGOF = 1;
|
%Ghost.isGOF = 1;
|
||||||
%Ghost.isBoss = 1;
|
%Ghost.isBoss = 1;
|
||||||
MissionCleanup.add(%Ghost);
|
MissionCleanup.add(%Ghost);
|
||||||
%Ghost.target = createTarget(%Ghost, ""@$TWM2::BossName["GoF"]@"", "", "Male3", '', %Ghost.team, PlayerSensor);
|
%Ghost.target = createTarget(%Ghost, ""@$TWM2::BossName["GoF"]@"", "", "Male3", '', %Ghost.team, PlayerSensor);
|
||||||
setTargetSensorData(%Ghost.target, PlayerSensor);
|
setTargetSensorData(%Ghost.target, PlayerSensor);
|
||||||
setTargetSensorGroup(%Ghost.target, 30);
|
setTargetSensorGroup(%Ghost.target, 30);
|
||||||
setTargetName(%Ghost.target, addtaggedstring($TWM2::BossName["GoF"]));
|
setTargetName(%Ghost.target, addtaggedstring($TWM2::BossName["GoF"]));
|
||||||
|
|
||||||
GOFAttack_FUNC("ConsiderFlamethrower", %Ghost);
|
|
||||||
GOFDoRandomAttacks(%ghost);
|
|
||||||
|
|
||||||
InitiateBoss(%ghost, "GhostOfFire");
|
|
||||||
|
|
||||||
schedule(500, 0, "GOFLookforTarget", %Ghost);
|
GOFAttack_FUNC("ConsiderFlamethrower", %Ghost);
|
||||||
|
GOFDoRandomAttacks(%ghost);
|
||||||
|
|
||||||
|
InitiateBoss(%ghost, "GhostOfFire");
|
||||||
|
|
||||||
|
schedule(500, 0, "GOFLookforTarget", %Ghost);
|
||||||
}
|
}
|
||||||
|
|
||||||
function GOFLookforTarget(%Ghost) {
|
function GOFLookforTarget(%Ghost) {
|
||||||
if(!isObject(%Ghost))
|
if(!isObject(%Ghost)) {
|
||||||
return;
|
return;
|
||||||
if(%Ghost.getState() $= "dead")
|
|
||||||
return;
|
|
||||||
%pos = %Ghost.getposition();
|
|
||||||
%wbpos = %Ghost.getworldboxcenter();
|
|
||||||
%count = ClientGroup.getCount();
|
|
||||||
%closestClient = -1;
|
|
||||||
%closestDistance = 32767;
|
|
||||||
for(%i = 0; %i < %count; %i++) {
|
|
||||||
%cl = ClientGroup.getObject(%i);
|
|
||||||
if(isObject(%cl.player)){
|
|
||||||
%testPos = %cl.player.getWorldBoxCenter();
|
|
||||||
%distance = vectorDist(%wbpos, %testPos);
|
|
||||||
if (%distance > 0 && %distance < %closestDistance) {
|
|
||||||
%closestClient = %cl;
|
|
||||||
%closestDistance = %distance;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
if(%Ghost.getState() $= "dead") {
|
||||||
if(%closestClient) {
|
return;
|
||||||
GOFPerformMove(%Ghost,%closestClient,%closestDistance);
|
}
|
||||||
}
|
%pos = %Ghost.getposition();
|
||||||
%Ghost.Targeting = schedule(500, %Ghost, "GOFLookforTarget", %Ghost);
|
%wbpos = %Ghost.getworldboxcenter();
|
||||||
|
%count = ClientGroup.getCount();
|
||||||
|
%closestClient = -1;
|
||||||
|
%closestDistance = 32767;
|
||||||
|
for(%i = 0; %i < %count; %i++) {
|
||||||
|
%cl = ClientGroup.getObject(%i);
|
||||||
|
if(isObject(%cl.player)){
|
||||||
|
%testPos = %cl.player.getWorldBoxCenter();
|
||||||
|
%distance = vectorDist(%wbpos, %testPos);
|
||||||
|
if (%distance > 0 && %distance < %closestDistance) {
|
||||||
|
%closestClient = %cl;
|
||||||
|
%closestDistance = %distance;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(%closestClient) {
|
||||||
|
GOFPerformMove(%Ghost,%closestClient,%closestDistance);
|
||||||
|
}
|
||||||
|
%Ghost.Targeting = schedule(500, %Ghost, "GOFLookforTarget", %Ghost);
|
||||||
}
|
}
|
||||||
|
|
||||||
function GOFPerformMove(%ghost,%closestClient,%closestDistance) {
|
function GOFPerformMove(%ghost,%closestClient,%closestDistance) {
|
||||||
%ghost.TargetCL = %closestClient;
|
%ghost.TargetCL = %closestClient;
|
||||||
%ghost.DistToTarg = %closestDistance;
|
%ghost.DistToTarg = %closestDistance;
|
||||||
%zposition = %ghost.getPosition();
|
%zposition = %ghost.getPosition();
|
||||||
%z = getWord(%zposition, 2);
|
%z = getWord(%zposition, 2);
|
||||||
if(%z < -300) {
|
if(%z < -300) {
|
||||||
%ghost.startFade(400, 0, true);
|
%ghost.startFade(400, 0, true);
|
||||||
%ghost.startFade(1000, 0, false);
|
%ghost.startFade(1000, 0, false);
|
||||||
%ghost.setPosition(vectorAdd(vectoradd(%closestclient.player.getPosition(), "0 0 20"), TWM2Lib_MainControl("getRandomPosition", 25 TAB 1)));
|
%ghost.setPosition(vectorAdd(vectoradd(%closestclient.player.getPosition(), "0 0 20"), TWM2Lib_MainControl("getRandomPosition", 25 TAB 1)));
|
||||||
%ghost.setVelocity("0 0 0");
|
%ghost.setVelocity("0 0 0");
|
||||||
MessageAll('msgBossAlertAttack', "\c4"@$TWM2::BossName["GoF"]@": My ghostly powers allow me to laugh aside your hopes of me falling to my death...");
|
MessageAll('msgBossAlertAttack', "\c4"@$TWM2::BossName["GoF"]@": My ghostly powers allow me to laugh aside your hopes of me falling to my death...");
|
||||||
}
|
|
||||||
%pos = %ghost.getworldboxcenter();
|
|
||||||
%closestClient = %closestClient.Player;
|
|
||||||
if(%closestDistance <= $zombie::detectDist){
|
|
||||||
if(%ghost.hastarget != 1){
|
|
||||||
%ghost.hastarget = 1;
|
|
||||||
}
|
}
|
||||||
|
%pos = %ghost.getworldboxcenter();
|
||||||
//target is coming in for an easy kill, lets tele
|
%closestClient = %closestClient.Player;
|
||||||
if(%closestDistance < 15) {
|
if(%closestDistance <= $zombie::detectDist){
|
||||||
GOFAttack_FUNC("BurnTeleport", %ghost);
|
if(%ghost.hastarget != 1){
|
||||||
}
|
%ghost.hastarget = 1;
|
||||||
|
}
|
||||||
|
//target is coming in for an easy kill, lets tele
|
||||||
|
if(%closestDistance < 15) {
|
||||||
|
GOFAttack_FUNC("BurnTeleport", %ghost);
|
||||||
|
}
|
||||||
|
|
||||||
%clpos = %closestClient.getPosition();
|
%clpos = %closestClient.getPosition();
|
||||||
%vector = vectorNormalize(vectorSub(%clpos, %pos));
|
%vector = vectorNormalize(vectorSub(%clpos, %pos));
|
||||||
%v1 = getword(%vector, 0);
|
%v1 = getword(%vector, 0);
|
||||||
%v2 = getword(%vector, 1);
|
%v2 = getword(%vector, 1);
|
||||||
%nv1 = %v2;
|
%nv1 = %v2;
|
||||||
%nv2 = (%v1 * -1);
|
%nv2 = (%v1 * -1);
|
||||||
%none = 0;
|
%none = 0;
|
||||||
%vector2 = %nv1@" "@%nv2@" "@%none;
|
%vector2 = %nv1@" "@%nv2@" "@%none;
|
||||||
%ghost.setRotation(fullrot("0 0 0",%vector2));
|
%ghost.setRotation(fullrot("0 0 0",%vector2));
|
||||||
|
|
||||||
%fmultiplier = $Zombie::ForwardSpeed;
|
%fmultiplier = $Zombie::ForwardSpeed;
|
||||||
%vector = vectorscale(%vector, %Fmultiplier);
|
%vector = vectorscale(%vector, %Fmultiplier);
|
||||||
%upvec = "150";
|
%upvec = "150";
|
||||||
|
|
||||||
%x = Getword(%vector,0);
|
%x = Getword(%vector,0);
|
||||||
%y = Getword(%vector,1);
|
%y = Getword(%vector,1);
|
||||||
%z = Getword(%vector,2);
|
%z = Getword(%vector,2);
|
||||||
if(%z >= 600)
|
if(%z >= 600) {
|
||||||
%upvec = (%upvec * 5);
|
%upvec = (%upvec * 5);
|
||||||
%vector = %x@" "@%y@" "@%upvec;
|
}
|
||||||
%ghost.applyImpulse(%pos, %vector);
|
%vector = %x@" "@%y@" "@%upvec;
|
||||||
}
|
%ghost.applyImpulse(%pos, %vector);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -683,25 +675,25 @@ function GOFAttack_FUNC(%att, %args) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function GOFDoFlameCano(%g, %target) {
|
function GOFDoFlameCano(%g, %target) {
|
||||||
if(!isObject(%g) || %g.getState() $= "dead") {
|
if(!isObject(%g) || %g.getState() $= "dead") {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
%g.setPosition(VectorAdd(%target.player.getPosition(), "0 0 70"));
|
%g.setPosition(VectorAdd(%target.player.getPosition(), "0 0 70"));
|
||||||
%Pad = new StaticShape() {
|
%Pad = new StaticShape() {
|
||||||
dataBlock = DeployedSpine;
|
dataBlock = DeployedSpine;
|
||||||
scale = ".1 .1 1";
|
scale = ".1 .1 1";
|
||||||
position = VectorAdd(%target.player.getPosition(), "0 0 69");
|
position = VectorAdd(%target.player.getPosition(), "0 0 69");
|
||||||
};
|
};
|
||||||
%g.setMoveState(true);
|
%g.setMoveState(true);
|
||||||
%Pad.setCloaked(true);
|
%Pad.setCloaked(true);
|
||||||
%Pad.schedule(3000, "setPosition", vectorSub(%Pad.getPosition(), "0 0 10"));
|
%Pad.schedule(3000, "setPosition", vectorSub(%Pad.getPosition(), "0 0 10"));
|
||||||
%Pad.schedule(4000, "setPosition", vectorSub(%Pad.getPosition(), "0 0 20"));
|
%Pad.schedule(4000, "setPosition", vectorSub(%Pad.getPosition(), "0 0 20"));
|
||||||
%Pad.schedule(5000, "setPosition", vectorSub(%Pad.getPosition(), "0 0 30"));
|
%Pad.schedule(5000, "setPosition", vectorSub(%Pad.getPosition(), "0 0 30"));
|
||||||
%Pad.schedule(6000, "setPosition", vectorSub(%Pad.getPosition(), "0 0 40"));
|
%Pad.schedule(6000, "setPosition", vectorSub(%Pad.getPosition(), "0 0 40"));
|
||||||
%g.schedule(6500, "SetMoveState", false);
|
%g.schedule(6500, "SetMoveState", false);
|
||||||
%pad.schedule(6500, "Delete");
|
%pad.schedule(6500, "Delete");
|
||||||
//The Vector Crap
|
//The Vector Crap
|
||||||
schedule(2500, 0, "GOFAttack_FUNC", "Flamecano", %g);
|
schedule(2500, 0, "GOFAttack_FUNC", "Flamecano", %g);
|
||||||
}
|
}
|
||||||
|
|
||||||
function GOFDoRandomAttacks(%g) {
|
function GOFDoRandomAttacks(%g) {
|
||||||
|
|
|
||||||
|
|
@ -10,45 +10,53 @@ function GenerateChallengesMenu(%client, %tag, %index) {
|
||||||
messageClient( %client, 'SetLineHud', "", %tag, %index, "<font:arial:16>Select a category to view challenges:");
|
messageClient( %client, 'SetLineHud', "", %tag, %index, "<font:arial:16>Select a category to view challenges:");
|
||||||
%index++;
|
%index++;
|
||||||
//
|
//
|
||||||
messageClient( %client, 'SetLineHud', "", %tag, %index, "<font:arial:14><a:gamelink\tOtherTasksSub\t6>PGD Challenges (Daily/Weekly/Monthly)</a>");
|
messageClient( %client, 'SetLineHud', "", %tag, %index, "<font:arial:14><a:gamelink\tOtherTasksSub\t1>PGD Challenges (Daily/Weekly/Monthly)</a>");
|
||||||
%index++;
|
%index++;
|
||||||
for(%i = 1; $Challenge::Category[%i] !$= ""; %i++) {
|
for(%i = 2; $Challenge::Category[%i] !$= ""; %i++) {
|
||||||
if(%i != 6) {
|
%categoryReq = getField($Challenge::Category[%i], 2);
|
||||||
%categoryReq = getField($Challenge::Category[%i], 2);
|
if(getWord(%categoryReq, 0) $= "Officer") {
|
||||||
if(getWord(%categoryReq, 0) $= "Officer") {
|
%offLevel = getWord(%categoryReq, 1);
|
||||||
%offLevel = getWord(%categoryReq, 1);
|
if(%scriptController.officer >= %offLevel) {
|
||||||
if(%scriptController.officer >= %offLevel) {
|
messageClient( %client, 'SetLineHud', "", %tag, %index, "<font:arial:14><a:gamelink\tOtherTasksSub\t"@%i@">"@getField($Challenge::Category[%i], 0)@"</a>: "@getField($Challenge::Category[%i], 1));
|
||||||
messageClient( %client, 'SetLineHud', "", %tag, %index, "<font:arial:14><a:gamelink\tOtherTasksSub\t"@%i@">"@getField($Challenge::Category[%i], 0)@"</a>: "@getField($Challenge::Category[%i], 1));
|
%index++;
|
||||||
%index++;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
messageClient( %client, 'SetLineHud', "", %tag, %index, "<font:arial:14>"@getField($Challenge::Category[%i], 0)@": Locked, Requires officer level "@%offLevel@" ("@strReplace($Prestige::Name[%offLevel], " ", "")@")");
|
|
||||||
%index++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if(%categoryReq == -1) {
|
messageClient( %client, 'SetLineHud', "", %tag, %index, "<font:arial:14>"@getField($Challenge::Category[%i], 0)@": Locked, Requires officer level "@%offLevel@" ("@strReplace($Prestige::Name[%offLevel], " ", "")@")");
|
||||||
|
%index++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(getWord(%categoryReq, 0) $= "MaxRank") {
|
||||||
|
if(%scriptController.officer >= 15 && %scriptController.millionxp >= 3) {
|
||||||
|
messageClient( %client, 'SetLineHud', "", %tag, %index, "<font:arial:14><a:gamelink\tOtherTasksSub\t"@%i@">"@getField($Challenge::Category[%i], 0)@"</a>: "@getField($Challenge::Category[%i], 1));
|
||||||
|
%index++;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
messageClient( %client, 'SetLineHud', "", %tag, %index, "<font:arial:14><color:BB0000>=== CLASSIFIED: CONTINUE PLAYING TWM2 TO UNLOCK ===");
|
||||||
|
%index++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if(%categoryReq == -1) {
|
||||||
|
messageClient( %client, 'SetLineHud', "", %tag, %index, "<font:arial:14><a:gamelink\tOtherTasksSub\t"@%i@">"@getField($Challenge::Category[%i], 0)@"</a>: "@getField($Challenge::Category[%i], 1));
|
||||||
|
%index++;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if(%xp >= $Rank::MinPoints[%categoryReq]) {
|
||||||
messageClient( %client, 'SetLineHud', "", %tag, %index, "<font:arial:14><a:gamelink\tOtherTasksSub\t"@%i@">"@getField($Challenge::Category[%i], 0)@"</a>: "@getField($Challenge::Category[%i], 1));
|
messageClient( %client, 'SetLineHud', "", %tag, %index, "<font:arial:14><a:gamelink\tOtherTasksSub\t"@%i@">"@getField($Challenge::Category[%i], 0)@"</a>: "@getField($Challenge::Category[%i], 1));
|
||||||
%index++;
|
%index++;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if(%xp >= $Rank::MinPoints[%categoryReq]) {
|
messageClient( %client, 'SetLineHud', "", %tag, %index, "<font:arial:14>"@getField($Challenge::Category[%i], 0)@": Locked, Requires Rank of "@$Ranks::NewRank[%categoryReq]@".");
|
||||||
messageClient( %client, 'SetLineHud', "", %tag, %index, "<font:arial:14><a:gamelink\tOtherTasksSub\t"@%i@">"@getField($Challenge::Category[%i], 0)@"</a>: "@getField($Challenge::Category[%i], 1));
|
%index++;
|
||||||
%index++;
|
}
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
messageClient( %client, 'SetLineHud', "", %tag, %index, "<font:arial:14>"@getField($Challenge::Category[%i], 0)@": Locked, Requires Rank of "@$Ranks::NewRank[%categoryReq]@".");
|
|
||||||
%index++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return %index;
|
return %index;
|
||||||
}
|
}
|
||||||
|
|
||||||
function GenerateChallengeSubMenu(%client, %subMenu, %tag, %index) {
|
function GenerateChallengeSubMenu(%client, %subMenu, %tag, %index) {
|
||||||
if(%subMenu == 6) {
|
if(%subMenu == 1) {
|
||||||
return GenerateDWMChallengeMenu(%client, %tag, %index);
|
return GenerateDWMChallengeMenu(%client, %tag, %index);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load diff
|
|
@ -17,6 +17,23 @@ $Zombie::detectDist = 9999;
|
||||||
//$Zombie::FallDieHeight: The minimum altitude a zombie may be before being script killed
|
//$Zombie::FallDieHeight: The minimum altitude a zombie may be before being script killed
|
||||||
$Zombie::FallDieHeight = -500;
|
$Zombie::FallDieHeight = -500;
|
||||||
|
|
||||||
|
//$Zombie::BaseDamage: The default damage taken when touching a zombie.
|
||||||
|
$Zombie::BaseDamage = 0.2;
|
||||||
|
//$Zombie::TypeDamage[#]: Overrides the BaseDamage with this value
|
||||||
|
$Zombie::TypeDamage[4] = 0.4;
|
||||||
|
$Zombie::TypeDamage[5] = 0.4;
|
||||||
|
$Zombie::TypeDamage[6] = 0.5;
|
||||||
|
$Zombie::TypeDamage[9] = 0.3;
|
||||||
|
$Zombie::TypeDamage[10] = 0.3;
|
||||||
|
$Zombie::TypeDamage[12] = 0.5;
|
||||||
|
$Zombie::TypeDamage[15] = 0.6;
|
||||||
|
|
||||||
|
//$Zombie::InfectOnCollide[#]: Special flag to determine if infection is applied upon contact, by default, this is true
|
||||||
|
|
||||||
|
//$Zombie::TypeInfectedMultiplier[#]: A damage multiplier to apply to infected targets, ie: Total Damage = $Zombie::TypeDamage[#] * $Zombie::TypeInfectedMultiplier[#]
|
||||||
|
// when the player taking damage is already infected.
|
||||||
|
$Zombie::TypeInfectedMultiplier[1] = 1.5;
|
||||||
|
|
||||||
//$Zombie::BaseSpeed: The default speed setting on zombies, any zombie that does not have a TypeSpeed var. set will default to the BaseSpeed
|
//$Zombie::BaseSpeed: The default speed setting on zombies, any zombie that does not have a TypeSpeed var. set will default to the BaseSpeed
|
||||||
$Zombie::BaseSpeed = 150;
|
$Zombie::BaseSpeed = 150;
|
||||||
//$Zombie::TypeSpeed[#]: The speed of a specific zombie type instance, overrides BaseSpeed for that specific type
|
//$Zombie::TypeSpeed[#]: The speed of a specific zombie type instance, overrides BaseSpeed for that specific type
|
||||||
|
|
@ -127,9 +144,7 @@ function TWM2Lib_Zombie_Core(%functionName, %arg1, %arg2, %arg3, %arg4) {
|
||||||
%y = getWord(%arg1.direction, 0) * -1;
|
%y = getWord(%arg1.direction, 0) * -1;
|
||||||
%vec = %x @ SPC @ %y @ SPC @ 0;
|
%vec = %x @ SPC @ %y @ SPC @ 0;
|
||||||
%arg1.setRotation(fullrot("0 0 0", %vec));
|
%arg1.setRotation(fullrot("0 0 0", %vec));
|
||||||
//Check for speed enhancement
|
%speed = %arg1.speed;
|
||||||
%multiplier = $Zombie::SpeedMultiplier[%arg1.type] $= "" ? 1 : $Zombie::SpeedMultiplier[%arg1.type];
|
|
||||||
%speed = %arg1.speed * %multiplier;
|
|
||||||
%vector = vectorScale(%vec, %speed);
|
%vector = vectorScale(%vec, %speed);
|
||||||
%arg1.applyImpulse(%arg1.direction, %vector);
|
%arg1.applyImpulse(%arg1.direction, %vector);
|
||||||
%arg1.Mnum -= 1;
|
%arg1.Mnum -= 1;
|
||||||
|
|
@ -456,9 +471,17 @@ function TWM2Lib_Zombie_Core(%functionName, %arg1, %arg2, %arg3, %arg4) {
|
||||||
%zombie.mountImage(ZWingImage2, 4);
|
%zombie.mountImage(ZWingImage2, 4);
|
||||||
%zombie.setActionThread("scoutRoot",true);
|
%zombie.setActionThread("scoutRoot",true);
|
||||||
|
|
||||||
//Demon Mother Zombie
|
//Demon Mother (Lord) Zombie
|
||||||
case 6:
|
case 6:
|
||||||
return DemonMotherCreate(%spawnPos);
|
%zombie = new player() {
|
||||||
|
Datablock = "DemonMotherZombieArmor";
|
||||||
|
};
|
||||||
|
%zombie.mountImage(ZdummyslotImg, 4);
|
||||||
|
%zombie.setInventory(AcidCannon, 1, true);
|
||||||
|
%zombie.use(AcidCannon);
|
||||||
|
%zombie.justshot = 0;
|
||||||
|
%zombie.justmelee = 0;
|
||||||
|
%zombie.noHS = 1;
|
||||||
|
|
||||||
//Shifter Zombie
|
//Shifter Zombie
|
||||||
case 9:
|
case 9:
|
||||||
|
|
@ -581,55 +604,39 @@ function TWM2Lib_Zombie_Core(%functionName, %arg1, %arg2, %arg3, %arg4) {
|
||||||
%zombie.zapObject();
|
%zombie.zapObject();
|
||||||
revivestand(%zombie, 0);
|
revivestand(%zombie, 0);
|
||||||
}
|
}
|
||||||
|
//Define Speed Parameters
|
||||||
%zombie.speed = TWM2Lib_Zombie_Core("defineZSpeed", %spawnType);
|
%zombie.speed = TWM2Lib_Zombie_Core("defineZSpeed", %spawnType);
|
||||||
|
|
||||||
if(!isSet($Zombie::SpeedUpdateTime[%spawnType])) {
|
if(!isSet($Zombie::SpeedUpdateTime[%spawnType])) {
|
||||||
%zombie.updateTimeFrequency = $Zombie::BaseSpeedUpdateTime;
|
%zombie.updateTimeFrequency = $Zombie::BaseSpeedUpdateTime;
|
||||||
}
|
}
|
||||||
%zombie.updateTimeFrequency = $Zombie::SpeedUpdateTime[%spawnType];
|
%zombie.updateTimeFrequency = $Zombie::SpeedUpdateTime[%spawnType];
|
||||||
|
//Define Damage Parameters
|
||||||
|
if(!isSet($Zombie::InfectOnCollide[%spawnType])) {
|
||||||
|
%zombie.damage_infectOnTouch = true;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
%zombie.damage_infectOnTouch = $Zombie::InfectOnCollide[%spawnType];
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!isSet($Zombie::TypeDamage[%spawnType])) {
|
||||||
|
%zombie.damage_amountOnTouch = $Zombie::BaseDamage;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
%zombie.damage_amountOnTouch = $Zombie::TypeDamage[%spawnType];
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!isSet($Zombie::TypeInfectedMultiplier[%spawnType])) {
|
||||||
|
%zombie.damage_alreadyInfectedMultiplier = 1;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
%zombie.damage_alreadyInfectedMultiplier = $Zombie::TypeInfectedMultiplier[%spawnType];
|
||||||
|
}
|
||||||
|
//Begin the AI
|
||||||
%zombie.getDatablock().AI(%zombie);
|
%zombie.getDatablock().AI(%zombie);
|
||||||
return %zombie;
|
return %zombie;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//************************************************************
|
|
||||||
//*****************Zomb Attack Stuff**************************
|
|
||||||
//************************************************************
|
|
||||||
|
|
||||||
function ChargeEmitter(%zombie){
|
|
||||||
if(!isobject(%zombie))
|
|
||||||
return;
|
|
||||||
if(%zombie.chargecount >= 2){
|
|
||||||
%charge2 = new ParticleEmissionDummy()
|
|
||||||
{
|
|
||||||
position = %zombie.getMuzzlePoint(6);
|
|
||||||
dataBlock = "defaultEmissionDummy";
|
|
||||||
emitter = "burnEmitter";
|
|
||||||
};
|
|
||||||
MissionCleanup.add(%charge2);
|
|
||||||
%charge2.schedule(100, "delete");
|
|
||||||
}
|
|
||||||
if(%zombie.chargecount <= 7){
|
|
||||||
%charge = new ParticleEmissionDummy()
|
|
||||||
{
|
|
||||||
position = %zombie.getMuzzlePoint(5);
|
|
||||||
dataBlock = "defaultEmissionDummy";
|
|
||||||
emitter = "burnEmitter";
|
|
||||||
};
|
|
||||||
MissionCleanup.add(%charge);
|
|
||||||
%charge.schedule(100, "delete");
|
|
||||||
}
|
|
||||||
if(%zombie.chargecount <= 9){
|
|
||||||
%zombie.Fire = schedule(100, %zombie, "ChargeEmitter", %zombie);
|
|
||||||
%zombie.chargecount++;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
%zombie.chargecount = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//-----------------------------------------------------------
|
//-----------------------------------------------------------
|
||||||
//DEATH
|
//DEATH
|
||||||
datablock AudioProfile(ZombieDeathSound1)
|
datablock AudioProfile(ZombieDeathSound1)
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
$TWM2::ArmorHasCollisionFunction[DemonZombieArmor] = true;
|
||||||
|
|
||||||
datablock PlayerData(DemonZombieArmor) : LightMaleHumanArmor {
|
datablock PlayerData(DemonZombieArmor) : LightMaleHumanArmor {
|
||||||
boundingBox = "1.63 1.63 2.6";
|
boundingBox = "1.63 1.63 2.6";
|
||||||
maxDamage = 4.0;
|
maxDamage = 4.0;
|
||||||
|
|
@ -12,13 +14,55 @@ datablock PlayerData(DemonZombieArmor) : LightMaleHumanArmor {
|
||||||
|
|
||||||
waterBreathSound = WaterBreathBiodermSound;
|
waterBreathSound = WaterBreathBiodermSound;
|
||||||
|
|
||||||
damageScale[$DamageType::M1700] = 2.0;
|
damageScale[$DamageType::M1700] = 4.5;
|
||||||
|
damageScale[$DamageType::Wp400] = 4.0;
|
||||||
|
damageScale[$DamageType::SCD343] = 4.0;
|
||||||
|
damageScale[$DamageType::SA2400] = 5.0;
|
||||||
|
damageScale[$DamageType::Model1887] = 4.0;
|
||||||
|
damageScale[$DamageType::plasma] = 0.001;
|
||||||
|
damageScale[$DamageType::Burn] = 0.001;
|
||||||
|
damageScale[$DamageType::Fire] = 0.001;
|
||||||
|
damageScale[$DamageType::CrimsonHawk] = 1.9;
|
||||||
|
|
||||||
max[RepairKit] = 0;
|
max[RepairKit] = 0;
|
||||||
max[Mine] = 0;
|
max[Mine] = 0;
|
||||||
max[Grenade] = 0;
|
max[Grenade] = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
function DemonZombieArmor::armorCollisionFunction(%datablock, %zombie, %colPlayer) {
|
||||||
|
if(!isObject(%zombie) || %zombie.getState() $= "dead") {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(!isObject(%colPlayer) || %colPlayer.getState() $= "dead") {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
//Check to make sure we're not hitting another zombie / boss
|
||||||
|
if(%colPlayer.isBoss || %colPlayer.isZombie || %colPlayer.rapierShield) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
//Damage.
|
||||||
|
%causeInfect = %zombie.damage_infectOnTouch;
|
||||||
|
%baseDamage = %zombie.damage_amountOnTouch;
|
||||||
|
%multiplier = %zombie.damage_alreadyInfectedMultiplier;
|
||||||
|
|
||||||
|
//Phantom139 (11/20): Demons light players on fire, need to check for .onfire instead of the .infected flag.
|
||||||
|
%total = %colPlayer.onfire ? (%baseDamage * %multiplier) : %baseDamage;
|
||||||
|
|
||||||
|
%pushVector = vectorscale(%colPlayer.getvelocity(), 1000);
|
||||||
|
%colPlayer.applyimpulse(%colPlayer.getposition(), %pushVector);
|
||||||
|
if(%causeInfect) {
|
||||||
|
//Phantom139: Demon Zombies now cause burns instead of infects
|
||||||
|
//%colPlayer.Infected = 1;
|
||||||
|
//%colPlayer.InfectedLoop = schedule(10, %colPlayer, "TWM2Lib_Zombie_Core", "InfectLoop", %colPlayer);
|
||||||
|
%colPlayer.maxfirecount += (75 * (%total / 0.5));
|
||||||
|
if(%colPlayer.onfire == 0 || %colPlayer.onfire $= ""){
|
||||||
|
%colPlayer.onfire = 1;
|
||||||
|
schedule(10, %colPlayer, "burnloop", %colPlayer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
%colPlayer.damage(0, %colPlayer.getPosition(), %total, $DamageType::Zombie);
|
||||||
|
}
|
||||||
|
|
||||||
function DemonZombieArmor::AI(%datablock, %zombie) {
|
function DemonZombieArmor::AI(%datablock, %zombie) {
|
||||||
if(!isObject(%zombie) || %zombie.getState() $= "dead") {
|
if(!isObject(%zombie) || %zombie.getState() $= "dead") {
|
||||||
return;
|
return;
|
||||||
|
|
|
||||||
|
|
@ -1,308 +1,302 @@
|
||||||
datablock PlayerData(DemonMotherZombieArmor) : LightMaleHumanArmor
|
$TWM2::ArmorHasCollisionFunction[DemonMotherZombieArmor] = true;
|
||||||
{
|
|
||||||
boundingBox = "1.5 1.5 2.6";
|
|
||||||
maxDamage = 9.0;
|
|
||||||
minImpactSpeed = 35;
|
|
||||||
shapeFile = "medium_female.dts";
|
|
||||||
|
|
||||||
debrisShapeName = "bio_player_debris.dts";
|
datablock PlayerData(DemonMotherZombieArmor) : LightMaleHumanArmor {
|
||||||
|
boundingBox = "1.5 1.5 2.6";
|
||||||
|
maxDamage = 9.0;
|
||||||
|
minImpactSpeed = 35;
|
||||||
|
shapeFile = "medium_female.dts";
|
||||||
|
|
||||||
//Foot Prints
|
debrisShapeName = "bio_player_debris.dts";
|
||||||
decalData = HeavyBiodermFootprint;
|
|
||||||
decalOffset = 0.4;
|
|
||||||
|
|
||||||
waterBreathSound = WaterBreathBiodermSound;
|
//Foot Prints
|
||||||
|
decalData = HeavyBiodermFootprint;
|
||||||
|
decalOffset = 0.4;
|
||||||
|
|
||||||
damageScale[$DamageType::M1700] = 2.0;
|
waterBreathSound = WaterBreathBiodermSound;
|
||||||
|
|
||||||
|
damageScale[$DamageType::M1700] = 4.5;
|
||||||
|
damageScale[$DamageType::Wp400] = 4.0;
|
||||||
|
damageScale[$DamageType::SCD343] = 4.0;
|
||||||
|
damageScale[$DamageType::SA2400] = 5.0;
|
||||||
|
damageScale[$DamageType::Model1887] = 4.0;
|
||||||
|
damageScale[$DamageType::CrimsonHawk] = 1.9;
|
||||||
|
|
||||||
max[RepairKit] = 0;
|
max[RepairKit] = 0;
|
||||||
max[Mine] = 0;
|
max[Mine] = 0;
|
||||||
max[Grenade] = 0;
|
max[Grenade] = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock StaticShapeData(SubBeacon)
|
datablock StaticShapeData(SubBeacon) {
|
||||||
{
|
shapeFile = "turret_muzzlepoint.dts";
|
||||||
shapeFile = "turret_muzzlepoint.dts";
|
targetNameTag = 'beacon';
|
||||||
targetNameTag = 'beacon';
|
isInvincible = true;
|
||||||
isInvincible = true;
|
|
||||||
|
|
||||||
dynamicType = $TypeMasks::SensorObjectType;
|
dynamicType = $TypeMasks::SensorObjectType;
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock SeekerProjectileData(DMMissile)
|
datablock SeekerProjectileData(DMMissile) {
|
||||||
{
|
casingShapeName = "weapon_missile_casement.dts";
|
||||||
casingShapeName = "weapon_missile_casement.dts";
|
projectileShapeName = "weapon_missile_projectile.dts";
|
||||||
projectileShapeName = "weapon_missile_projectile.dts";
|
hasDamageRadius = true;
|
||||||
hasDamageRadius = true;
|
indirectDamage = 0.5;
|
||||||
indirectDamage = 0.5;
|
damageRadius = 5.0;
|
||||||
damageRadius = 5.0;
|
radiusDamageType = $DamageType::Zombie;
|
||||||
radiusDamageType = $DamageType::Zombie;
|
kickBackStrength = 2000;
|
||||||
kickBackStrength = 2000;
|
|
||||||
|
|
||||||
explosion = "MissileExplosion";
|
explosion = "MissileExplosion";
|
||||||
splash = MissileSplash;
|
splash = MissileSplash;
|
||||||
velInheritFactor = 1.0; // to compensate for slow starting velocity, this value
|
velInheritFactor = 1.0; // to compensate for slow starting velocity, this value
|
||||||
// is cranked up to full so the missile doesn't start
|
// is cranked up to full so the missile doesn't start
|
||||||
// out behind the player when the player is moving
|
// out behind the player when the player is moving
|
||||||
// very quickly - bramage
|
// very quickly - bramage
|
||||||
|
|
||||||
baseEmitter = MortarSmokeEmitter;
|
baseEmitter = MortarSmokeEmitter;
|
||||||
delayEmitter = MissileFireEmitter;
|
delayEmitter = MissileFireEmitter;
|
||||||
puffEmitter = MissilePuffEmitter;
|
puffEmitter = MissilePuffEmitter;
|
||||||
bubbleEmitter = GrenadeBubbleEmitter;
|
bubbleEmitter = GrenadeBubbleEmitter;
|
||||||
bubbleEmitTime = 1.0;
|
bubbleEmitTime = 1.0;
|
||||||
|
|
||||||
exhaustEmitter = MissileLauncherExhaustEmitter;
|
exhaustEmitter = MissileLauncherExhaustEmitter;
|
||||||
exhaustTimeMs = 300;
|
exhaustTimeMs = 300;
|
||||||
exhaustNodeName = "muzzlePoint1";
|
exhaustNodeName = "muzzlePoint1";
|
||||||
|
|
||||||
lifetimeMS = 10000; // z0dd - ZOD, 4/14/02. Was 6000
|
lifetimeMS = 10000; // z0dd - ZOD, 4/14/02. Was 6000
|
||||||
muzzleVelocity = 10.0;
|
muzzleVelocity = 10.0;
|
||||||
maxVelocity = 35.0; // z0dd - ZOD, 4/14/02. Was 80.0
|
maxVelocity = 35.0; // z0dd - ZOD, 4/14/02. Was 80.0
|
||||||
turningSpeed = 23.0;
|
turningSpeed = 23.0;
|
||||||
acceleration = 15.0;
|
acceleration = 15.0;
|
||||||
|
|
||||||
proximityRadius = 2.5;
|
proximityRadius = 2.5;
|
||||||
|
|
||||||
terrainAvoidanceSpeed = 10;
|
terrainAvoidanceSpeed = 10;
|
||||||
terrainScanAhead = 7;
|
terrainScanAhead = 7;
|
||||||
terrainHeightFail = 1;
|
terrainHeightFail = 1;
|
||||||
terrainAvoidanceRadius = 3;
|
terrainAvoidanceRadius = 3;
|
||||||
|
|
||||||
flareDistance = 40;
|
flareDistance = 40;
|
||||||
flareAngle = 20;
|
flareAngle = 20;
|
||||||
minSeekHeat = 0.0;
|
minSeekHeat = 0.0;
|
||||||
|
|
||||||
sound = MissileProjectileSound;
|
sound = MissileProjectileSound;
|
||||||
|
|
||||||
hasLight = true;
|
hasLight = true;
|
||||||
lightRadius = 5.0;
|
lightRadius = 5.0;
|
||||||
lightColor = "0.2 0.05 0";
|
lightColor = "0.2 0.05 0";
|
||||||
|
|
||||||
useFlechette = true;
|
useFlechette = true;
|
||||||
flechetteDelayMs = 250;
|
flechetteDelayMs = 250;
|
||||||
casingDeb = FlechetteDebris;
|
casingDeb = FlechetteDebris;
|
||||||
|
|
||||||
explodeOnWaterImpact = false;
|
explodeOnWaterImpact = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock LinearFlareProjectileData(DMPlasma)
|
datablock LinearFlareProjectileData(DMPlasma) {
|
||||||
{
|
doDynamicClientHits = true;
|
||||||
doDynamicClientHits = true;
|
|
||||||
|
|
||||||
directDamage = 0;
|
directDamage = 0;
|
||||||
directDamageType = $DamageType::Zombie;
|
directDamageType = $DamageType::Zombie;
|
||||||
hasDamageRadius = true;
|
hasDamageRadius = true;
|
||||||
indirectDamage = 0.8; // z0dd - ZOD, 4/25/02. Was 0.5
|
indirectDamage = 0.8; // z0dd - ZOD, 4/25/02. Was 0.5
|
||||||
damageRadius = 15.0;
|
damageRadius = 15.0;
|
||||||
kickBackStrength = 1500;
|
kickBackStrength = 1500;
|
||||||
radiusDamageType = $DamageType::Zombie;
|
radiusDamageType = $DamageType::Zombie;
|
||||||
explosion = MortarExplosion;
|
explosion = MortarExplosion;
|
||||||
splash = PlasmaSplash;
|
splash = PlasmaSplash;
|
||||||
|
|
||||||
dryVelocity = 85.0; // z0dd - ZOD, 4/25/02. Was 50. Velocity of projectile out of water
|
dryVelocity = 85.0; // z0dd - ZOD, 4/25/02. Was 50. Velocity of projectile out of water
|
||||||
wetVelocity = -1;
|
wetVelocity = -1;
|
||||||
velInheritFactor = 1.0;
|
velInheritFactor = 1.0;
|
||||||
fizzleTimeMS = 4000;
|
fizzleTimeMS = 4000;
|
||||||
lifetimeMS = 2500; // z0dd - ZOD, 4/25/02. Was 6000
|
lifetimeMS = 2500; // z0dd - ZOD, 4/25/02. Was 6000
|
||||||
explodeOnDeath = true;
|
explodeOnDeath = true;
|
||||||
reflectOnWaterImpactAngle = 0.0;
|
reflectOnWaterImpactAngle = 0.0;
|
||||||
explodeOnWaterImpact = true;
|
explodeOnWaterImpact = true;
|
||||||
deflectionOnWaterImpact = 0.0;
|
deflectionOnWaterImpact = 0.0;
|
||||||
fizzleUnderwaterMS = -1;
|
fizzleUnderwaterMS = -1;
|
||||||
|
|
||||||
activateDelayMS = 100;
|
activateDelayMS = 100;
|
||||||
|
|
||||||
scale = "3.0 3.0 3.0";
|
scale = "3.0 3.0 3.0";
|
||||||
numFlares = 30;
|
numFlares = 30;
|
||||||
flareColor = "0.1 0.3 1.0";
|
flareColor = "0.1 0.3 1.0";
|
||||||
flareModTexture = "flaremod";
|
flareModTexture = "flaremod";
|
||||||
flareBaseTexture = "flarebase";
|
flareBaseTexture = "flarebase";
|
||||||
};
|
};
|
||||||
|
|
||||||
function DemonMotherCreate(%pos){
|
function DemonMotherZombieArmor::AI(%datablock, %zombie) {
|
||||||
%obj = new player(){
|
//Fork off to both of the AI functions
|
||||||
Datablock = "DemonMotherZombieArmor";
|
%zombie.defenseLoop = %datablock.defenseLoop(%zombie);
|
||||||
};
|
%zombie.aiRoutine = %datablock.AIRoutine(%zombie);
|
||||||
%obj.setTransform(%pos);
|
|
||||||
%obj.team = 30;
|
|
||||||
MissionCleanup.add(%obj);
|
|
||||||
schedule(1000, 0, "DemonMotherInitiate", %obj);
|
|
||||||
|
|
||||||
%obj.isZombie = 1;
|
|
||||||
%obj.type = 6;
|
|
||||||
|
|
||||||
%obj.setInventory(AcidCannon, 1, true);
|
|
||||||
%obj.use(AcidCannon);
|
|
||||||
|
|
||||||
%zname = $TWM2::ZombieName[%obj.type]; // <- To Hosts, Enjoy, You can
|
|
||||||
//Change the Zombie Names now!!!
|
|
||||||
%obj.target = createTarget(%obj, %zname, "", "Derm3", '', %obj.team, PlayerSensor);
|
|
||||||
setTargetSensorData(%obj.target, PlayerSensor);
|
|
||||||
setTargetSensorGroup(%obj.target, 30);
|
|
||||||
setTargetName(%obj.target, addtaggedstring(%zname));
|
|
||||||
setTargetSkin(%obj.target, 'Horde');
|
|
||||||
|
|
||||||
return %obj;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function DemonMotherInitiate(%obj){
|
function DemonMotherZombieArmor::defenseLoop(%datablock, %zombie) {
|
||||||
if(!isObject(%obj))
|
if(!isObject(%zombie) || %zombie.getState() $= "dead") {
|
||||||
return;
|
return;
|
||||||
DemonMotherDefense(%obj);
|
|
||||||
DemonMotherThink(%obj);
|
|
||||||
%obj.mountImage(ZdummyslotImg, 4);
|
|
||||||
%obj.justshot = 0;
|
|
||||||
%obj.justmelee = 0;
|
|
||||||
%obj.noHS = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
function DemonMotherThink(%obj){
|
|
||||||
if(!isObject(%obj))
|
|
||||||
return;
|
|
||||||
if(%obj.getState() $= "dead") {
|
|
||||||
//I've been killed, throw my weapon
|
|
||||||
%obj.throwweapon(1);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
%pos = %obj.getposition();
|
|
||||||
%closestClient = ZombieLookForTarget(%zombie);
|
|
||||||
%closestDistance = getWord(%closestClient,1);
|
|
||||||
%closestClient = getWord(%closestClient,0).Player;
|
|
||||||
|
|
||||||
if(%closestClient != -1){
|
|
||||||
%searchobject = %closestclient;
|
|
||||||
%dist = vectorDist(%pos,%searchobject.getPosition());
|
|
||||||
if(%dist <= 100){
|
|
||||||
if(%dist <= 50){ //ok were now in combat mode, lets decide on what we should do, move attack, or shoot.
|
|
||||||
if(%obj.justmelee == 1){ //if we just used a melee attack, maybe we should follow it up with a shot attack.
|
|
||||||
if(%dist >= 10){ //good were far enough away, lets shoot em.
|
|
||||||
%rand = getrandom(1,3);
|
|
||||||
if(%rand <= 2)
|
|
||||||
DemonMotherSpermAttack(%obj,%searchobject);
|
|
||||||
else
|
|
||||||
DemonMotherFireRainAttack(%obj,%searchobject);
|
|
||||||
}
|
|
||||||
else //damn, to close, ok lung at him
|
|
||||||
DemonMotherLungAttack(%obj,%searchobject);
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
%rand = getRandom(1,5); //ok so theres 3 good possible attacks here, so lets get a random variable and decide what to do.
|
|
||||||
if(%rand == 1)
|
|
||||||
DemonMotherPlasmaAttack(%obj,%searchobject);
|
|
||||||
else if(%rand <= 3)
|
|
||||||
DemonMotherStrafeAttack(%obj,%searchobject);
|
|
||||||
else
|
|
||||||
DemonMotherFlyAttack(%obj,%searchobject);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else{ //ok, were to far away, maybe we should shoot at them.
|
|
||||||
if(%obj.justshot == 1) //humm we just attacked, ok, let charge him, get in close
|
|
||||||
DemonMotherChargeIn(%obj,%searchobject);
|
|
||||||
else{ //were good to fire, FIRE AWAY!
|
|
||||||
%rand = getRandom(1,5); //ok so theres 3 good possible attacks here, so lets get a random variable and decide what to do.
|
|
||||||
if(%rand == 1)
|
|
||||||
DemonMotherFireRainAttack(%obj,%searchobject);
|
|
||||||
else if(%rand <= 3)
|
|
||||||
DemonMotherMissileAttack(%obj,%searchobject);
|
|
||||||
else
|
|
||||||
DemonMotherSpermAttack(%obj,%searchobject);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else if(%dist > 100){
|
%pos = %zombie.getposition();
|
||||||
%rand = getrandom(1,120);
|
InitContainerRadiusSearch(%pos, 250, $TypeMasks::ProjectileObjectType);
|
||||||
if(%rand == 94) //please, dont ask why i choose this number, it just poped in my head
|
while ((%searchObject = containerSearchNext()) != 0) {
|
||||||
DemonMotherDemonSpawn(%obj);
|
%projpos = %searchobject.getPosition();
|
||||||
else
|
%dist = vectorDist(%pos, %projpos);
|
||||||
DemonMotherMoveToTarget(%obj,%searchobject);
|
if(%dist <= 100) {
|
||||||
|
if(%searchobject.lastpos) {
|
||||||
|
%zombie.playShieldEffect("1 1 1");
|
||||||
|
%searchobject.delete();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
%searchobject.lastpos = %projpos;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
%zombie.defenseLoop = %datablock.schedule(50, "defenseLoop", %zombie);
|
||||||
DemonMotherMoveToTarget(%obj,%searchobject);
|
|
||||||
|
|
||||||
%obj.justshot = 0;
|
|
||||||
%obj.justmelee = 0;
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
schedule(500, 0, "DemonMotherThink", %obj);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function DemonMotherDefense(%obj){
|
function DemonMotherZombieArmor::AIRoutine(%datablock, %zombie) {
|
||||||
if(!isObject(%obj))
|
if(!isObject(%zombie) || %zombie.getState() $= "dead") {
|
||||||
return;
|
%zombie.throwWeapon(1);
|
||||||
if(%obj.getState() $= "dead")
|
return;
|
||||||
return;
|
|
||||||
%pos = %obj.getposition();
|
|
||||||
InitContainerRadiusSearch(%pos, 250, $TypeMasks::ProjectileObjectType);
|
|
||||||
while ((%searchObject = containerSearchNext()) != 0){
|
|
||||||
%projpos = %searchobject.getPosition();
|
|
||||||
%dist = vectorDist(%pos,%projpos);
|
|
||||||
if(%dist <= 100){
|
|
||||||
if(%searchobject.lastpos)
|
|
||||||
%searchobject.delete();
|
|
||||||
}
|
}
|
||||||
else
|
%pos = %zombie.getWorldBoxCenter();
|
||||||
%searchobject.lastpos = %projpos;
|
%closestClient = TWM2Lib_Zombie_Core("lookForTarget", %zombie);
|
||||||
}
|
%closestDistance = getWord(%closestClient, 1);
|
||||||
schedule(50, "DemonMotherDefense", %obj);
|
%closestClient = getWord(%closestClient, 0).Player;
|
||||||
|
if(%closestClient != -1){
|
||||||
|
%searchobject = %closestclient;
|
||||||
|
%dist = vectorDist(%pos, %searchobject.getPosition());
|
||||||
|
if(%dist <= 100) {
|
||||||
|
//ok were now in combat mode, lets decide on what we should do, move attack, or shoot.
|
||||||
|
if(%dist <= 50) {
|
||||||
|
//if we just used a melee attack, maybe we should follow it up with a shot attack.
|
||||||
|
if(%zombie.justmelee == 1) {
|
||||||
|
//good were far enough away, lets shoot em.
|
||||||
|
if(%dist >= 10) {
|
||||||
|
%rand = getrandom(1,3);
|
||||||
|
if(%rand <= 2) {
|
||||||
|
%zombie.attackFunction = %datablock.AttackFunction(%zombie, "AcidStrike", %searchObject);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
DemonMotherFireRainAttack(%zombie, %searchobject);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//damn, to close, ok lung at him
|
||||||
|
else {
|
||||||
|
DemonMotherLungAttack(%zombie, %searchobject);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
//ok so theres 3 good possible attacks here, so lets get a random variable and decide what to do.
|
||||||
|
%rand = getRandom(1, 5);
|
||||||
|
if(%rand == 1) {
|
||||||
|
DemonMotherPlasmaAttack(%zombie, %searchobject);
|
||||||
|
}
|
||||||
|
else if(%rand <= 3) {
|
||||||
|
DemonMotherStrafeAttack(%zombie, %searchobject);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
DemonMotherFlyAttack(%zombie, %searchobject);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//ok, were to far away, maybe we should shoot at them.
|
||||||
|
else {
|
||||||
|
//humm we just attacked, ok, let charge him, get in close
|
||||||
|
if(%zombie.justshot == 1) {
|
||||||
|
DemonMotherChargeIn(%zombie, %searchobject);
|
||||||
|
}
|
||||||
|
//were good to fire, FIRE AWAY!
|
||||||
|
else {
|
||||||
|
//ok so theres 3 good possible attacks here, so lets get a random variable and decide what to do.
|
||||||
|
%rand = getRandom(1, 5);
|
||||||
|
if(%rand == 1) {
|
||||||
|
DemonMotherFireRainAttack(%zombie, %searchobject);
|
||||||
|
}
|
||||||
|
else if(%rand <= 3) {
|
||||||
|
DemonMotherMissileAttack(%zombie, %searchobject);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
%zombie.attackFunction = %datablock.AttackFunction(%zombie, "AcidStrike", %searchObject);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(%dist > 100) {
|
||||||
|
%rand = getrandom(1,120);
|
||||||
|
//please, dont ask why i choose this number, it just popped in my head
|
||||||
|
if(%rand == 94) {
|
||||||
|
DemonMotherDemonSpawn(%zombie);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
DemonMotherMoveToTarget(%zombie,%searchobject);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
DemonMotherMoveToTarget(%zombie,%searchobject);
|
||||||
|
}
|
||||||
|
%zombie.justshot = 0;
|
||||||
|
%zombie.justmelee = 0;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
%zombie.aiRoutine = %datablock.schedule(500, 0, "AIRoutine", %zombie);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function DemonMotherSpermAttack(%obj,%target){
|
function DemonMotherZombieArmor::AttackFunction(%datablock, %zombie, %attackFunction, %target) {
|
||||||
if(!isObject(%obj))
|
if(!isObject(%zombie) || %zombie.getState() $= "dead") {
|
||||||
return;
|
return;
|
||||||
if(%obj.getState() $= "dead")
|
}
|
||||||
return;
|
switch$(%attackFunction) {
|
||||||
if(!isObject(%target)){
|
case "AcidStrike":
|
||||||
DemonMotherThink(%obj);
|
if(!isObject(%target) || %target.getState() $= "dead") {
|
||||||
return;
|
%zombie.aiRoutine = %datablock.AIRoutine(%zombie);
|
||||||
}
|
return;
|
||||||
FaceTarget(%obj,%target);
|
}
|
||||||
if(%obj.chargecount $= "")
|
%vector = TWM2Lib_Zombie_Core("zombieGetFacingDirection", %zombie, %target.getPosition());
|
||||||
%obj.chargecount = 0;
|
if(%zombie.chargeCount $= "") {
|
||||||
%charge = new ParticleEmissionDummy()
|
%zombie.chargeCount = 0;
|
||||||
{
|
}
|
||||||
position = %obj.getMuzzlePoint(4);
|
%chargeEmitter = new ParticleEmissionDummy() {
|
||||||
dataBlock = "defaultEmissionDummy";
|
datablock = "defaultEmissionDummy";
|
||||||
emitter = "BurnEmitter";
|
emitter = "BurnEmitter";
|
||||||
};
|
position = %zombie.getMuzzlePoint(4);
|
||||||
MissionCleanup.add(%charge);
|
};
|
||||||
%charge.schedule(100, "delete");
|
MissionCleanup.add(%chargeEmitter);
|
||||||
|
%chargeEmitter.schedule(100, "delete");
|
||||||
if(%obj.chargecount == 7){
|
//
|
||||||
%vec = vectorsub(%target.getworldboxcenter(),%obj.getMuzzlePoint(4));
|
if(%zombie.chargeCount == 7 || %zombie.chargeCount == 9) {
|
||||||
%vec = vectoradd(%vec, vectorscale(%target.getvelocity(),vectorlen(%vec)/100));
|
%vec = vectorSub(%target.getWorldBoxCenter(), %zombie.getMuzzlePoint(4));
|
||||||
%p = new TracerProjectile()
|
%vec = vectorAdd(%vec, vectorScale(%target.getVelocity(), vectorLen(%vec) / 100));
|
||||||
{
|
%p = new TracerProjectile() {
|
||||||
dataBlock = LZombieAcidBall;
|
dataBlock = LZombieAcidBall;
|
||||||
initialDirection = %vec;
|
initialDirection = %vec;
|
||||||
initialPosition = %obj.getMuzzlePoint(4);
|
initialPosition = %zombie.getMuzzlePoint(4);
|
||||||
sourceObject = %obj;
|
sourceObject = %zombie;
|
||||||
sourceSlot = 6;
|
sourceSlot = 6;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
if(%obj.chargecount == 9){
|
if(%obj.chargecount <= 9) {
|
||||||
%vec = vectorsub(%target.getworldboxcenter(),%obj.getMuzzlePoint(4));
|
%zombie.attackFunction = %datablock.schedule(100, 0, "AttackFunction", %zombie, %attackFunction, %target);
|
||||||
%vec = vectoradd(%vec, vectorscale(%target.getvelocity(),vectorlen(%vec)/100));
|
%zombie.chargeCount++;
|
||||||
%p = new TracerProjectile()
|
}
|
||||||
{
|
else {
|
||||||
dataBlock = LZombieAcidBall;
|
%zombie.chargecount = 0;
|
||||||
initialDirection = %vec;
|
%zombie.justshot = 1;
|
||||||
initialPosition = %obj.getMuzzlePoint(4);
|
%zombie.aiRoutine = %datablock.AIRoutine(%zombie);
|
||||||
sourceObject = %obj;
|
}
|
||||||
sourceSlot = 6;
|
|
||||||
};
|
case "FireLunge":
|
||||||
}
|
|
||||||
|
case "StrafeMove":
|
||||||
if(%obj.chargecount <= 9){
|
|
||||||
schedule(100, 0, "DemonMotherSpermAttack", %obj, %target);
|
case "FlyAttack":
|
||||||
%obj.chargecount++;
|
|
||||||
}
|
case "Firestorm":
|
||||||
else{
|
|
||||||
%obj.chargecount = 0;
|
case "MissileStrike":
|
||||||
%obj.justshot = 1;
|
|
||||||
DemonMotherThink(%obj);
|
case "PlasmaStrike":
|
||||||
}
|
|
||||||
|
case "ChargeAttack":
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function DemonMotherLungAttack(%obj,%target){
|
function DemonMotherLungAttack(%obj,%target){
|
||||||
|
|
@ -588,13 +582,3 @@ function DemonMotherDemonSpawn(%obj){
|
||||||
}
|
}
|
||||||
schedule(1500, 0, "DemonMotherThink", %obj);
|
schedule(1500, 0, "DemonMotherThink", %obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
function FaceTarget(%obj,%target){
|
|
||||||
%vector = vectorNormalize(vectorSub(%target.getPosition(), %obj.getPosition()));
|
|
||||||
%v1 = getword(%vector, 0);
|
|
||||||
%v2 = getword(%vector, 1);
|
|
||||||
%nv1 = %v2;
|
|
||||||
%nv2 = (%v1 * -1);
|
|
||||||
%vector2 = %nv1@" "@%nv2@" 0";
|
|
||||||
%obj.setRotation(fullrot("0 0 0",%vector2));
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -1,29 +1,33 @@
|
||||||
datablock PlayerData(DemonUltraZombieArmor) : LightMaleHumanArmor
|
datablock PlayerData(DemonUltraZombieArmor) : LightMaleHumanArmor {
|
||||||
{
|
runForce = 60.20 * 90;
|
||||||
runForce = 60.20 * 90;
|
runEnergyDrain = 0.0;
|
||||||
runEnergyDrain = 0.0;
|
minRunEnergy = 10;
|
||||||
minRunEnergy = 10;
|
maxForwardSpeed = 9;
|
||||||
maxForwardSpeed = 9;
|
maxBackwardSpeed = 7;
|
||||||
maxBackwardSpeed = 7;
|
maxSideSpeed = 7;
|
||||||
maxSideSpeed = 7;
|
|
||||||
|
|
||||||
jumpForce = 14.0 * 90;
|
jumpForce = 14.0 * 90;
|
||||||
|
|
||||||
maxDamage = 2.8;
|
maxDamage = 2.8;
|
||||||
minImpactSpeed = 35;
|
minImpactSpeed = 35;
|
||||||
shapeFile = "heavy_male.dts";
|
shapeFile = "heavy_male.dts";
|
||||||
jetEmitter = BiodermArmorJetEmitter;
|
jetEmitter = BiodermArmorJetEmitter;
|
||||||
jetEffect = BiodermArmorJetEffect;
|
jetEffect = BiodermArmorJetEffect;
|
||||||
|
|
||||||
debrisShapeName = "bio_player_debris.dts";
|
debrisShapeName = "bio_player_debris.dts";
|
||||||
|
|
||||||
//Foot Prints
|
//Foot Prints
|
||||||
decalData = LightBiodermFootprint;
|
decalData = LightBiodermFootprint;
|
||||||
decalOffset = 0.3;
|
decalOffset = 0.3;
|
||||||
|
|
||||||
waterBreathSound = WaterBreathBiodermSound;
|
waterBreathSound = WaterBreathBiodermSound;
|
||||||
|
|
||||||
damageScale[$DamageType::M1700] = 3.0;
|
damageScale[$DamageType::M1700] = 4.5;
|
||||||
|
damageScale[$DamageType::Wp400] = 4.0;
|
||||||
|
damageScale[$DamageType::SCD343] = 4.0;
|
||||||
|
damageScale[$DamageType::SA2400] = 5.0;
|
||||||
|
damageScale[$DamageType::Model1887] = 4.0;
|
||||||
|
damageScale[$DamageType::CrimsonHawk] = 1.9;
|
||||||
|
|
||||||
max[RepairKit] = 0;
|
max[RepairKit] = 0;
|
||||||
max[Mine] = 0;
|
max[Mine] = 0;
|
||||||
|
|
|
||||||
|
|
@ -1,23 +1,26 @@
|
||||||
datablock PlayerData(EliteDemonZombieArmor) : LightMaleHumanArmor
|
datablock PlayerData(EliteDemonZombieArmor) : LightMaleHumanArmor {
|
||||||
{
|
boundingBox = "1.63 1.63 2.6";
|
||||||
boundingBox = "1.63 1.63 2.6";
|
maxDamage = 5.0;
|
||||||
maxDamage = 5.0;
|
minImpactSpeed = 35;
|
||||||
minImpactSpeed = 35;
|
shapeFile = "bioderm_heavy.dts";
|
||||||
shapeFile = "bioderm_heavy.dts";
|
|
||||||
|
|
||||||
debrisShapeName = "bio_player_debris.dts";
|
debrisShapeName = "bio_player_debris.dts";
|
||||||
|
|
||||||
//Foot Prints
|
//Foot Prints
|
||||||
decalData = HeavyBiodermFootprint;
|
decalData = HeavyBiodermFootprint;
|
||||||
decalOffset = 0.4;
|
decalOffset = 0.4;
|
||||||
|
|
||||||
waterBreathSound = WaterBreathBiodermSound;
|
waterBreathSound = WaterBreathBiodermSound;
|
||||||
|
|
||||||
damageScale[$DamageType::M1700] = 2.0;
|
damageScale[$DamageType::M1700] = 4.5;
|
||||||
damageScale[$DamageType::Burn] = 0.1;
|
damageScale[$DamageType::Wp400] = 4.0;
|
||||||
damageScale[$DamageType::Fire] = 0.1;
|
damageScale[$DamageType::SCD343] = 4.0;
|
||||||
damageScale[$DamageType::Napalm] = 0.1;
|
damageScale[$DamageType::SA2400] = 5.0;
|
||||||
damageScale[$DamageType::Plasma] = 0.1;
|
damageScale[$DamageType::Model1887] = 4.0;
|
||||||
|
damageScale[$DamageType::Burn] = 0.1;
|
||||||
|
damageScale[$DamageType::Fire] = 0.1;
|
||||||
|
damageScale[$DamageType::Napalm] = 0.1;
|
||||||
|
damageScale[$DamageType::Plasma] = 0.1;
|
||||||
|
|
||||||
max[RepairKit] = 0;
|
max[RepairKit] = 0;
|
||||||
max[Mine] = 0;
|
max[Mine] = 0;
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
$TWM2::ArmorHasCollisionFunction[LordZombieArmor] = false;
|
||||||
|
|
||||||
datablock AudioProfile(ZLordFootSound) {
|
datablock AudioProfile(ZLordFootSound) {
|
||||||
filename = "fx/weapons/grenade_explode_UW.wav";
|
filename = "fx/weapons/grenade_explode_UW.wav";
|
||||||
description = AudioBomb3d;
|
description = AudioBomb3d;
|
||||||
|
|
@ -29,7 +31,16 @@ datablock PlayerData(LordZombieArmor) : HeavyMaleBiodermArmor {
|
||||||
LFootSnowSound = ZLordFootSound;
|
LFootSnowSound = ZLordFootSound;
|
||||||
RFootSnowSound = ZLordFootSound;
|
RFootSnowSound = ZLordFootSound;
|
||||||
|
|
||||||
damageScale[$DamageType::M1700] = 1.5;
|
damageScale[$DamageType::RP432] = 3.5;
|
||||||
|
damageScale[$DamageType::MG42] = 4.0;
|
||||||
|
damageScale[$DamageType::MRXX] = 4.5;
|
||||||
|
damageScale[$DamageType::PTorpedo] = 10.0;
|
||||||
|
damageScale[$DamageType::CrimsonHawk] = 1.9;
|
||||||
|
damageScale[$DamageType::M1700] = 4.5;
|
||||||
|
damageScale[$DamageType::Wp400] = 4.0;
|
||||||
|
damageScale[$DamageType::SCD343] = 4.0;
|
||||||
|
damageScale[$DamageType::SA2400] = 5.0;
|
||||||
|
damageScale[$DamageType::Model1887] = 4.0;
|
||||||
|
|
||||||
max[RepairKit] = 0;
|
max[RepairKit] = 0;
|
||||||
max[Mine] = 0;
|
max[Mine] = 0;
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
$TWM2::ArmorHasCollisionFunction[ZombieArmor] = true;
|
||||||
|
|
||||||
datablock PlayerData(ZombieArmor) : LightMaleHumanArmor {
|
datablock PlayerData(ZombieArmor) : LightMaleHumanArmor {
|
||||||
runForce = 60.20 * 90;
|
runForce = 60.20 * 90;
|
||||||
runEnergyDrain = 0.0;
|
runEnergyDrain = 0.0;
|
||||||
|
|
@ -22,13 +24,45 @@ datablock PlayerData(ZombieArmor) : LightMaleHumanArmor {
|
||||||
|
|
||||||
waterBreathSound = WaterBreathBiodermSound;
|
waterBreathSound = WaterBreathBiodermSound;
|
||||||
|
|
||||||
damageScale[$DamageType::M1700] = 3.0;
|
damageScale[$DamageType::M1700] = 4.5;
|
||||||
|
damageScale[$DamageType::Wp400] = 4.0;
|
||||||
|
damageScale[$DamageType::SCD343] = 4.0;
|
||||||
|
damageScale[$DamageType::SA2400] = 5.0;
|
||||||
|
damageScale[$DamageType::Model1887] = 4.0;
|
||||||
|
damageScale[$DamageType::CrimsonHawk] = 1.9;
|
||||||
|
|
||||||
max[RepairKit] = 0;
|
max[RepairKit] = 0;
|
||||||
max[Mine] = 0;
|
max[Mine] = 0;
|
||||||
max[Grenade] = 0;
|
max[Grenade] = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
function ZombieArmor::armorCollisionFunction(%datablock, %zombie, %colPlayer) {
|
||||||
|
if(!isObject(%zombie) || %zombie.getState() $= "dead") {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(!isObject(%colPlayer) || %colPlayer.getState() $= "dead") {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
//Check to make sure we're not hitting another zombie / boss
|
||||||
|
if(%colPlayer.isBoss || %colPlayer.isZombie || %colPlayer.rapierShield) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
//Damage.
|
||||||
|
%causeInfect = %zombie.damage_infectOnTouch;
|
||||||
|
%baseDamage = %zombie.damage_amountOnTouch;
|
||||||
|
%multiplier = %zombie.damage_alreadyInfectedMultiplier;
|
||||||
|
|
||||||
|
%total = %colPlayer.infected ? (%baseDamage * %multiplier) : %baseDamage;
|
||||||
|
|
||||||
|
%pushVector = vectorscale(%colPlayer.getvelocity(), 100);
|
||||||
|
%colPlayer.applyimpulse(%colPlayer.getposition(), %pushVector);
|
||||||
|
if(%causeInfect) {
|
||||||
|
%colPlayer.Infected = 1;
|
||||||
|
%colPlayer.InfectedLoop = schedule(10, %colPlayer, "TWM2Lib_Zombie_Core", "InfectLoop", %colPlayer);
|
||||||
|
}
|
||||||
|
%colPlayer.damage(0, %colPlayer.getPosition(), %total, $DamageType::Zombie);
|
||||||
|
}
|
||||||
|
|
||||||
function ZombieArmor::AI(%datablock, %zombie) {
|
function ZombieArmor::AI(%datablock, %zombie) {
|
||||||
//Normal zombies do not employ any "AI" other than target and move, fork off to main move function
|
//Normal zombies do not employ any "AI" other than target and move, fork off to main move function
|
||||||
%datablock.Move(%zombie);
|
%datablock.Move(%zombie);
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
$TWM2::ArmorHasCollisionFunction[RapierZombieArmor] = true;
|
||||||
|
|
||||||
datablock PlayerData(RapierZombieArmor) : LightMaleBiodermArmor {
|
datablock PlayerData(RapierZombieArmor) : LightMaleBiodermArmor {
|
||||||
maxDamage = 1.0;
|
maxDamage = 1.0;
|
||||||
minImpactSpeed = 50;
|
minImpactSpeed = 50;
|
||||||
|
|
@ -17,8 +19,13 @@ datablock PlayerData(RapierZombieArmor) : LightMaleBiodermArmor {
|
||||||
|
|
||||||
boundingBox = "2.0 2.0 1.2";
|
boundingBox = "2.0 2.0 1.2";
|
||||||
|
|
||||||
damageScale[$DamageType::M1700] = 2.0;
|
damageScale[$DamageType::M1700] = 4.5;
|
||||||
|
damageScale[$DamageType::Wp400] = 4.0;
|
||||||
|
damageScale[$DamageType::SCD343] = 4.0;
|
||||||
|
damageScale[$DamageType::SA2400] = 5.0;
|
||||||
|
damageScale[$DamageType::Model1887] = 4.0;
|
||||||
damageScale[$DamageType::Missile] = 100.0;
|
damageScale[$DamageType::Missile] = 100.0;
|
||||||
|
damageScale[$DamageType::CrimsonHawk] = 1.9;
|
||||||
|
|
||||||
max[RepairKit] = 0;
|
max[RepairKit] = 0;
|
||||||
max[Mine] = 0;
|
max[Mine] = 0;
|
||||||
|
|
@ -57,6 +64,41 @@ datablock ShapeBaseImageData(ZWingAltImage2) {
|
||||||
rotation = "-0.5 -2 0 35"; // L/R - F/B - T/B
|
rotation = "-0.5 -2 0 35"; // L/R - F/B - T/B
|
||||||
};
|
};
|
||||||
|
|
||||||
|
function RapierZombieArmor::armorCollisionFunction(%datablock, %zombie, %colPlayer) {
|
||||||
|
if(!isObject(%zombie) || %zombie.getState() $= "dead") {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(!isObject(%colPlayer) || %colPlayer.getState() $= "dead") {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
//Check to make sure we're not hitting another zombie / boss
|
||||||
|
if(%colPlayer.isBoss || %colPlayer.isZombie || %colPlayer.rapierShield) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Damage.
|
||||||
|
%causeInfect = %zombie.damage_infectOnTouch;
|
||||||
|
%baseDamage = %zombie.damage_amountOnTouch;
|
||||||
|
%multiplier = %zombie.damage_alreadyInfectedMultiplier;
|
||||||
|
|
||||||
|
%total = %colPlayer.infected ? (%baseDamage * %multiplier) : %baseDamage;
|
||||||
|
|
||||||
|
%chance = getRandom(1, 3);
|
||||||
|
if(%chance != 3) {
|
||||||
|
%zombie.iscarrying = true;
|
||||||
|
%colPlayer.grabbed = true;
|
||||||
|
%colPlayer.damage(0, %colPlayer.getPosition(), %baseDamage, $DamageType::Zombie);
|
||||||
|
%zombie.killingPlayer = %datablock.zCarryLoop(%zombie, %colPlayer, 0);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
%colPlayer.damage(0, %colPlayer.getPosition(), %total, $DamageType::Zombie);
|
||||||
|
if(%causeInfect) {
|
||||||
|
%colPlayer.Infected = 1;
|
||||||
|
%colPlayer.InfectedLoop = schedule(10, %colPlayer, "TWM2Lib_Zombie_Core", "InfectLoop", %colPlayer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function RapierZombieArmor::AI(%datablock, %zombie) {
|
function RapierZombieArmor::AI(%datablock, %zombie) {
|
||||||
//No special AI here, we'll let %block.move() handle it...
|
//No special AI here, we'll let %block.move() handle it...
|
||||||
if(!isObject(%zombie) || %zombie.getState() $= "dead") {
|
if(!isObject(%zombie) || %zombie.getState() $= "dead") {
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,49 @@
|
||||||
|
$TWM2::ArmorHasCollisionFunction[RavagerZombieArmor] = true;
|
||||||
|
|
||||||
datablock PlayerData(RavagerZombieArmor) : LightMaleBiodermArmor {
|
datablock PlayerData(RavagerZombieArmor) : LightMaleBiodermArmor {
|
||||||
maxDamage = 1.0;
|
maxDamage = 1.0;
|
||||||
minImpactSpeed = 50;
|
minImpactSpeed = 50;
|
||||||
speedDamageScale = 0.015;
|
speedDamageScale = 0.015;
|
||||||
|
|
||||||
damageScale[$DamageType::M1700] = 2.0;
|
damageScale[$DamageType::M1700] = 4.5;
|
||||||
|
damageScale[$DamageType::Wp400] = 4.0;
|
||||||
|
damageScale[$DamageType::SCD343] = 4.0;
|
||||||
|
damageScale[$DamageType::SA2400] = 5.0;
|
||||||
|
damageScale[$DamageType::Model1887] = 4.0;
|
||||||
|
damageScale[$DamageType::CrimsonHawk] = 1.9;
|
||||||
|
|
||||||
max[RepairKit] = 0;
|
max[RepairKit] = 0;
|
||||||
max[Mine] = 0;
|
max[Mine] = 0;
|
||||||
max[Grenade] = 0;
|
max[Grenade] = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
function RavagerZombieArmor::armorCollisionFunction(%datablock, %zombie, %colPlayer) {
|
||||||
|
if(!isObject(%zombie) || %zombie.getState() $= "dead") {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(!isObject(%colPlayer) || %colPlayer.getState() $= "dead") {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
//Check to make sure we're not hitting another zombie / boss
|
||||||
|
if(%colPlayer.isBoss || %colPlayer.isZombie || %colPlayer.rapierShield) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
//Damage.
|
||||||
|
%causeInfect = %zombie.damage_infectOnTouch;
|
||||||
|
%baseDamage = %zombie.damage_amountOnTouch;
|
||||||
|
%multiplier = %zombie.damage_alreadyInfectedMultiplier;
|
||||||
|
|
||||||
|
%total = %colPlayer.infected ? (%baseDamage * %multiplier) : %baseDamage;
|
||||||
|
|
||||||
|
%pushVector = vectorscale(%colPlayer.getvelocity(), 100);
|
||||||
|
%colPlayer.applyimpulse(%colPlayer.getposition(), %pushVector);
|
||||||
|
if(%causeInfect) {
|
||||||
|
%colPlayer.Infected = 1;
|
||||||
|
%colPlayer.InfectedLoop = schedule(10, %colPlayer, "TWM2Lib_Zombie_Core", "InfectLoop", %colPlayer);
|
||||||
|
}
|
||||||
|
%colPlayer.damage(0, %colPlayer.getPosition(), %total, $DamageType::Zombie);
|
||||||
|
}
|
||||||
|
|
||||||
//Ravager Zombies
|
//Ravager Zombies
|
||||||
// TWM2 3.9.2
|
// TWM2 3.9.2
|
||||||
// - Old Behavior: Ground crawling zombie with fast speed that would ram into targets
|
// - Old Behavior: Ground crawling zombie with fast speed that would ram into targets
|
||||||
|
|
|
||||||
|
|
@ -1,34 +1,37 @@
|
||||||
datablock PlayerData(ShifterZombieArmor) : LightMaleHumanArmor
|
datablock PlayerData(ShifterZombieArmor) : LightMaleHumanArmor {
|
||||||
{
|
runForce = 60.20 * 90;
|
||||||
runForce = 60.20 * 90;
|
runEnergyDrain = 0.0;
|
||||||
runEnergyDrain = 0.0;
|
minRunEnergy = 10;
|
||||||
minRunEnergy = 10;
|
maxForwardSpeed = 9;
|
||||||
maxForwardSpeed = 9;
|
maxBackwardSpeed = 7;
|
||||||
maxBackwardSpeed = 7;
|
maxSideSpeed = 7;
|
||||||
maxSideSpeed = 7;
|
|
||||||
|
|
||||||
jumpForce = 14.0 * 90;
|
jumpForce = 14.0 * 90;
|
||||||
|
|
||||||
maxDamage = 2.8;
|
maxDamage = 2.8;
|
||||||
minImpactSpeed = 35;
|
minImpactSpeed = 35;
|
||||||
shapeFile = "bioderm_light.dts";
|
shapeFile = "bioderm_light.dts";
|
||||||
jetEmitter = BiodermArmorJetEmitter;
|
jetEmitter = BiodermArmorJetEmitter;
|
||||||
jetEffect = BiodermArmorJetEffect;
|
jetEffect = BiodermArmorJetEffect;
|
||||||
|
|
||||||
debrisShapeName = "bio_player_debris.dts";
|
debrisShapeName = "bio_player_debris.dts";
|
||||||
|
|
||||||
//Foot Prints
|
//Foot Prints
|
||||||
decalData = LightBiodermFootprint;
|
decalData = LightBiodermFootprint;
|
||||||
decalOffset = 0.3;
|
decalOffset = 0.3;
|
||||||
|
|
||||||
waterBreathSound = WaterBreathBiodermSound;
|
waterBreathSound = WaterBreathBiodermSound;
|
||||||
|
|
||||||
damageScale[$DamageType::M1700] = 3.0;
|
damageScale[$DamageType::M1700] = 4.5;
|
||||||
|
damageScale[$DamageType::Wp400] = 4.0;
|
||||||
|
damageScale[$DamageType::SCD343] = 4.0;
|
||||||
|
damageScale[$DamageType::SA2400] = 5.0;
|
||||||
|
damageScale[$DamageType::Model1887] = 4.0;
|
||||||
|
damageScale[$DamageType::CrimsonHawk] = 1.9;
|
||||||
|
|
||||||
max[RepairKit] = 0;
|
max[RepairKit] = 0;
|
||||||
max[Mine] = 0;
|
max[Mine] = 0;
|
||||||
max[Grenade] = 0;
|
max[Grenade] = 0;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
function ShifterZombiemovetotarget(%zombie){
|
function ShifterZombiemovetotarget(%zombie){
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,14 @@
|
||||||
datablock PlayerData(SSZombieArmor) : LightMaleBiodermArmor
|
datablock PlayerData(SSZombieArmor) : LightMaleBiodermArmor {
|
||||||
{
|
maxDamage = 1.0;
|
||||||
maxDamage = 1.0;
|
minImpactSpeed = 50;
|
||||||
minImpactSpeed = 50;
|
speedDamageScale = 0.015;
|
||||||
speedDamageScale = 0.015;
|
|
||||||
|
|
||||||
damageScale[$DamageType::M1700] = 2.0;
|
damageScale[$DamageType::M1700] = 4.5;
|
||||||
|
damageScale[$DamageType::Wp400] = 4.0;
|
||||||
|
damageScale[$DamageType::SCD343] = 4.0;
|
||||||
|
damageScale[$DamageType::SA2400] = 5.0;
|
||||||
|
damageScale[$DamageType::Model1887] = 4.0;
|
||||||
|
damageScale[$DamageType::CrimsonHawk] = 1.9;
|
||||||
|
|
||||||
max[RepairKit] = 0;
|
max[RepairKit] = 0;
|
||||||
max[Mine] = 0;
|
max[Mine] = 0;
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,23 @@
|
||||||
datablock PlayerData(SniperZombieArmor) : LightMaleHumanArmor {
|
datablock PlayerData(SniperZombieArmor) : LightMaleHumanArmor {
|
||||||
boundingBox = "1.63 1.63 2.6";
|
boundingBox = "1.63 1.63 2.6";
|
||||||
maxDamage = 2.5;
|
maxDamage = 2.5;
|
||||||
minImpactSpeed = 35;
|
minImpactSpeed = 35;
|
||||||
shapeFile = "bioderm_heavy.dts";
|
shapeFile = "bioderm_heavy.dts";
|
||||||
|
|
||||||
debrisShapeName = "bio_player_debris.dts";
|
debrisShapeName = "bio_player_debris.dts";
|
||||||
|
|
||||||
//Foot Prints
|
//Foot Prints
|
||||||
decalData = HeavyBiodermFootprint;
|
decalData = HeavyBiodermFootprint;
|
||||||
decalOffset = 0.4;
|
decalOffset = 0.4;
|
||||||
|
|
||||||
waterBreathSound = WaterBreathBiodermSound;
|
waterBreathSound = WaterBreathBiodermSound;
|
||||||
|
|
||||||
damageScale[$DamageType::M1700] = 2.0;
|
damageScale[$DamageType::M1700] = 4.5;
|
||||||
|
damageScale[$DamageType::Wp400] = 4.0;
|
||||||
|
damageScale[$DamageType::SCD343] = 4.0;
|
||||||
|
damageScale[$DamageType::SA2400] = 5.0;
|
||||||
|
damageScale[$DamageType::Model1887] = 4.0;
|
||||||
|
damageScale[$DamageType::CrimsonHawk] = 1.9;
|
||||||
|
|
||||||
max[RepairKit] = 0;
|
max[RepairKit] = 0;
|
||||||
max[Mine] = 0;
|
max[Mine] = 0;
|
||||||
|
|
@ -20,17 +25,17 @@ datablock PlayerData(SniperZombieArmor) : LightMaleHumanArmor {
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ShapeBaseImageData(ZSniperImage1) {
|
datablock ShapeBaseImageData(ZSniperImage1) {
|
||||||
shapeFile = "weapon_sniper.dts";
|
shapeFile = "weapon_sniper.dts";
|
||||||
emap = true;
|
emap = true;
|
||||||
armThread = looksn;
|
armThread = looksn;
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ShapeBaseImageData(ZSniperImage2) {
|
datablock ShapeBaseImageData(ZSniperImage2) {
|
||||||
shapeFile = "weapon_targeting.dts";
|
shapeFile = "weapon_targeting.dts";
|
||||||
offset = "0.0 1.0 0.41";
|
offset = "0.0 1.0 0.41";
|
||||||
rotation = "90 0 0 90";
|
rotation = "90 0 0 90";
|
||||||
armThread = looksn;
|
armThread = looksn;
|
||||||
emap = true;
|
emap = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
function SniperZombiemovetotarget(%zombie){
|
function SniperZombiemovetotarget(%zombie){
|
||||||
|
|
|
||||||
|
|
@ -1,29 +1,33 @@
|
||||||
datablock PlayerData(SummonerZombieArmor) : LightMaleHumanArmor
|
datablock PlayerData(SummonerZombieArmor) : LightMaleHumanArmor {
|
||||||
{
|
runForce = 60.20 * 90;
|
||||||
runForce = 60.20 * 90;
|
runEnergyDrain = 0.0;
|
||||||
runEnergyDrain = 0.0;
|
minRunEnergy = 10;
|
||||||
minRunEnergy = 10;
|
maxForwardSpeed = 9;
|
||||||
maxForwardSpeed = 9;
|
maxBackwardSpeed = 7;
|
||||||
maxBackwardSpeed = 7;
|
maxSideSpeed = 7;
|
||||||
maxSideSpeed = 7;
|
|
||||||
|
|
||||||
jumpForce = 14.0 * 90;
|
jumpForce = 14.0 * 90;
|
||||||
|
|
||||||
maxDamage = 2.8;
|
maxDamage = 2.8;
|
||||||
minImpactSpeed = 35;
|
minImpactSpeed = 35;
|
||||||
shapeFile = "light_male.dts";
|
shapeFile = "light_male.dts";
|
||||||
jetEmitter = BiodermArmorJetEmitter;
|
jetEmitter = BiodermArmorJetEmitter;
|
||||||
jetEffect = BiodermArmorJetEffect;
|
jetEffect = BiodermArmorJetEffect;
|
||||||
|
|
||||||
debrisShapeName = "bio_player_debris.dts";
|
debrisShapeName = "bio_player_debris.dts";
|
||||||
|
|
||||||
//Foot Prints
|
//Foot Prints
|
||||||
decalData = LightBiodermFootprint;
|
decalData = LightBiodermFootprint;
|
||||||
decalOffset = 0.3;
|
decalOffset = 0.3;
|
||||||
|
|
||||||
waterBreathSound = WaterBreathBiodermSound;
|
waterBreathSound = WaterBreathBiodermSound;
|
||||||
|
|
||||||
damageScale[$DamageType::M1700] = 3.0;
|
damageScale[$DamageType::M1700] = 4.5;
|
||||||
|
damageScale[$DamageType::Wp400] = 4.0;
|
||||||
|
damageScale[$DamageType::SCD343] = 4.0;
|
||||||
|
damageScale[$DamageType::SA2400] = 5.0;
|
||||||
|
damageScale[$DamageType::Model1887] = 4.0;
|
||||||
|
damageScale[$DamageType::CrimsonHawk] = 1.9;
|
||||||
|
|
||||||
max[RepairKit] = 0;
|
max[RepairKit] = 0;
|
||||||
max[Mine] = 0;
|
max[Mine] = 0;
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,14 @@
|
||||||
datablock PlayerData(VolatileRavagerZombieArmor) : LightMaleBiodermArmor {
|
datablock PlayerData(VolatileRavagerZombieArmor) : LightMaleBiodermArmor {
|
||||||
maxDamage = 1.0;
|
maxDamage = 1.0;
|
||||||
minImpactSpeed = 50;
|
minImpactSpeed = 50;
|
||||||
speedDamageScale = 0.015;
|
speedDamageScale = 0.015;
|
||||||
|
|
||||||
damageScale[$DamageType::M1700] = 2.0;
|
damageScale[$DamageType::M1700] = 4.5;
|
||||||
|
damageScale[$DamageType::Wp400] = 4.0;
|
||||||
|
damageScale[$DamageType::SCD343] = 4.0;
|
||||||
|
damageScale[$DamageType::SA2400] = 5.0;
|
||||||
|
damageScale[$DamageType::Model1887] = 4.0;
|
||||||
|
damageScale[$DamageType::CrimsonHawk] = 1.9;
|
||||||
|
|
||||||
max[RepairKit] = 0;
|
max[RepairKit] = 0;
|
||||||
max[Mine] = 0;
|
max[Mine] = 0;
|
||||||
|
|
@ -11,8 +16,8 @@ datablock PlayerData(VolatileRavagerZombieArmor) : LightMaleBiodermArmor {
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ShapeBaseImageData(ZExplosivePack) {
|
datablock ShapeBaseImageData(ZExplosivePack) {
|
||||||
shapeFile = "pack_upgrade_satchel.dts";
|
shapeFile = "pack_upgrade_satchel.dts";
|
||||||
emap = false;
|
emap = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
function VRavZombiemovetotarget(%zombie){
|
function VRavZombiemovetotarget(%zombie){
|
||||||
|
|
|
||||||
|
|
@ -1,23 +1,27 @@
|
||||||
datablock PlayerData(WraithZombieArmor) : LightMaleHumanArmor
|
datablock PlayerData(WraithZombieArmor) : LightMaleHumanArmor {
|
||||||
{
|
boundingBox = "1.63 1.63 2.6";
|
||||||
boundingBox = "1.63 1.63 2.6";
|
maxDamage = 4.0;
|
||||||
maxDamage = 4.0;
|
minImpactSpeed = 35;
|
||||||
minImpactSpeed = 35;
|
shapeFile = "bioderm_heavy.dts";
|
||||||
shapeFile = "bioderm_heavy.dts";
|
|
||||||
|
|
||||||
//shields mo-fo's
|
//shields mo-fo's
|
||||||
shieldHealthCharge = 0.05;
|
shieldHealthCharge = 0.05;
|
||||||
maxShieldLevel = 4.0;
|
maxShieldLevel = 4.0;
|
||||||
|
|
||||||
debrisShapeName = "bio_player_debris.dts";
|
debrisShapeName = "bio_player_debris.dts";
|
||||||
|
|
||||||
//Foot Prints
|
//Foot Prints
|
||||||
decalData = HeavyBiodermFootprint;
|
decalData = HeavyBiodermFootprint;
|
||||||
decalOffset = 0.4;
|
decalOffset = 0.4;
|
||||||
|
|
||||||
waterBreathSound = WaterBreathBiodermSound;
|
waterBreathSound = WaterBreathBiodermSound;
|
||||||
|
|
||||||
damageScale[$DamageType::M1700] = 2.0;
|
damageScale[$DamageType::M1700] = 4.5;
|
||||||
|
damageScale[$DamageType::Wp400] = 4.0;
|
||||||
|
damageScale[$DamageType::SCD343] = 4.0;
|
||||||
|
damageScale[$DamageType::SA2400] = 5.0;
|
||||||
|
damageScale[$DamageType::Model1887] = 4.0;
|
||||||
|
damageScale[$DamageType::CrimsonHawk] = 1.9;
|
||||||
|
|
||||||
max[RepairKit] = 0;
|
max[RepairKit] = 0;
|
||||||
max[Mine] = 0;
|
max[Mine] = 0;
|
||||||
|
|
|
||||||
|
|
@ -57,7 +57,7 @@ $DamageType::ZombieL = 58;
|
||||||
$DamageType::Pistol = 59;
|
$DamageType::Pistol = 59;
|
||||||
$DamageType::Melee = 60;
|
$DamageType::Melee = 60;
|
||||||
$DamageType::S3 = 61;
|
$DamageType::S3 = 61;
|
||||||
$DamageType::W1700 = 62;
|
$DamageType::M1700 = 62;
|
||||||
$DamageType::G41 = 63;
|
$DamageType::G41 = 63;
|
||||||
$DamageType::R700 = 64;
|
$DamageType::R700 = 64;
|
||||||
$DamageType::MP26 = 65;
|
$DamageType::MP26 = 65;
|
||||||
|
|
@ -75,14 +75,30 @@ $DamageType::deserteagle = 76;
|
||||||
$DamageType::FissionBomb = 77;
|
$DamageType::FissionBomb = 77;
|
||||||
$DamageType::RapierShield = 78;
|
$DamageType::RapierShield = 78;
|
||||||
|
|
||||||
|
//Phantom139: TWM2 3.9.2: Added in damage types for every weapon, attack, etc for balancing individually
|
||||||
|
$DamageType::Javelin = 79;
|
||||||
|
$DamageType::Stinger = 80;
|
||||||
|
$DamageType::StaticGrenade = 81;
|
||||||
|
$DamageType::Plasmasaber = 82;
|
||||||
|
$DamageType::BladeOfVengance_Assassination = 83;
|
||||||
|
$DamageType::MG42 = 84;
|
||||||
|
$DamageType::MRXX = 85;
|
||||||
|
$DamageType::PTorpedo = 86;
|
||||||
|
$DamageType::CrimsonHawk = 87;
|
||||||
|
$DamageType::M93 = 88;
|
||||||
|
$DamageType::ES77PulsePhaser = 89;
|
||||||
|
$DamageType::Wp400 = 90;
|
||||||
|
$DamageType::SCD343 = 91;
|
||||||
|
$DamageType::Model1887 = 92;
|
||||||
|
|
||||||
|
|
||||||
|
//Phantom139: TWM2 3.9.2: Updated these "special" damage types to have much higher index values
|
||||||
// DMM -- added so MPBs that blow up under water get a message
|
// DMM -- added so MPBs that blow up under water get a message
|
||||||
$DamageType::Water = 97;
|
$DamageType::Water = 997;
|
||||||
|
|
||||||
//Tinman - used in Hunters for cheap bastards ;)
|
//Tinman - used in Hunters for cheap bastards ;)
|
||||||
$DamageType::NexusCamping = 98;
|
$DamageType::NexusCamping = 998;
|
||||||
|
|
||||||
// MES -- added so CTRL-K can get a distinctive message
|
// MES -- added so CTRL-K can get a distinctive message
|
||||||
$DamageType::Suicide = 99;
|
$DamageType::Suicide = 999;
|
||||||
|
|
||||||
// Etc, etc.
|
// Etc, etc.
|
||||||
|
|
||||||
|
|
@ -120,14 +136,14 @@ $DamageTypeText[30] = 'tank mortar';
|
||||||
$DamageTypeText[31] = 'satchel charge';
|
$DamageTypeText[31] = 'satchel charge';
|
||||||
$DamageTypeText[32] = 'MPB missile';
|
$DamageTypeText[32] = 'MPB missile';
|
||||||
$DamageTypeText[33] = 'lighting';
|
$DamageTypeText[33] = 'lighting';
|
||||||
$DamageTypeText[35] = 'ForceField';
|
$DamageTypeText[35] = 'Force Field';
|
||||||
$DamageTypeText[36] = 'Crash';
|
$DamageTypeText[36] = 'Crash';
|
||||||
|
|
||||||
$DamageTypeText[50] = 'Meteor';
|
$DamageTypeText[50] = 'Meteor';
|
||||||
$DamageTypeText[51] = 'Cursing';
|
$DamageTypeText[51] = 'Cursing';
|
||||||
$DamageTypeText[52] = 'Idiocy';
|
$DamageTypeText[52] = 'Idiocy';
|
||||||
$DamageTypeText[53] = 'SuperChaingun';
|
$DamageTypeText[53] = 'Super Chaingun';
|
||||||
$DamageTypeText[54] = 'KillerFog';
|
$DamageTypeText[54] = 'Killer Fog';
|
||||||
|
|
||||||
$DamageTypeText[55] = 'Zombie';
|
$DamageTypeText[55] = 'Zombie';
|
||||||
$DamageTypeText[56] = 'ZAcid';
|
$DamageTypeText[56] = 'ZAcid';
|
||||||
|
|
@ -144,18 +160,24 @@ $DamageTypeText[66] = 'Pg700';
|
||||||
$DamageTypeText[67] = 'FellOff';
|
$DamageTypeText[67] = 'FellOff';
|
||||||
$DamageTypeText[68] = 'M1';
|
$DamageTypeText[68] = 'M1';
|
||||||
$DamageTypeText[69] = 'RP432';
|
$DamageTypeText[69] = 'RP432';
|
||||||
$DamageTypeText[70] = 'BladeOfVengance';
|
$DamageTypeText[70] = 'Blade Of Vengance';
|
||||||
$DamageTypeText[71] = 'RPG';
|
$DamageTypeText[71] = 'RPG';
|
||||||
$DamageTypeText[72] = 'GravBolt';
|
$DamageTypeText[72] = 'Grav Bolt';
|
||||||
$DamageTypeText[73] = 'LaserRifle';
|
$DamageTypeText[73] = 'Laser Rifle';
|
||||||
$DamageTypeText[74] = 'Burn';
|
$DamageTypeText[74] = 'Burn';
|
||||||
$DamageTypeText[75] = 'SA2400';
|
$DamageTypeText[75] = 'SA2400';
|
||||||
$DamageTypeText[76] = 'deserteagle';
|
$DamageTypeText[76] = 'desert eagle';
|
||||||
$DamageTypeText[77] = 'FissionBomb';
|
$DamageTypeText[77] = 'Fission Bomb';
|
||||||
$DamageTypeText[78] = 'RapierShield';
|
$DamageTypeText[78] = 'Rapier Shield';
|
||||||
|
|
||||||
$DamageTypeText[98] = 'nexus camping';
|
$DamageTypeText[79] = 'Javelin';
|
||||||
$DamageTypeText[99] = 'suicide';
|
$DamageTypeText[80] = 'Stinger';
|
||||||
|
$DamageTypeText[81] = 'Static Grenade';
|
||||||
|
$DamageTypeText[82] = 'Plasmasaber';
|
||||||
|
|
||||||
|
$DamageTypeText[998] = 'water';
|
||||||
|
$DamageTypeText[998] = 'nexus camping';
|
||||||
|
$DamageTypeText[999] = 'suicide';
|
||||||
|
|
||||||
|
|
||||||
// ##### PLEASE DO NOT REORDER THE DAMAGE PROFILE TABLES BELOW #####
|
// ##### PLEASE DO NOT REORDER THE DAMAGE PROFILE TABLES BELOW #####
|
||||||
|
|
|
||||||
|
|
@ -115,11 +115,55 @@ $DeathMessageSelfKill[$DamageType::Fire, 2] = '\c0%1 burns %2self with %3 flamet
|
||||||
$DeathMessageSelfKill[$DamageType::Fire, 3] = '\c0%1 burns %2self down to cinders.';
|
$DeathMessageSelfKill[$DamageType::Fire, 3] = '\c0%1 burns %2self down to cinders.';
|
||||||
$DeathMessageSelfKill[$DamageType::Fire, 4] = '\c0%1 engulfs %2self in flames.';
|
$DeathMessageSelfKill[$DamageType::Fire, 4] = '\c0%1 engulfs %2self in flames.';
|
||||||
|
|
||||||
$DeathMessageSelfKill[$DamageType::FissionBomb, 0] = '\c0%1 Unleashed a fission bomb.';
|
$DeathMessageSelfKill[$DamageType::FissionBomb, 0] = '\c0%1\'s super powered fission bomb turned on it\'s owner with lethal ferocity.';
|
||||||
$DeathMessageSelfKill[$DamageType::FissionBomb, 1] = '\c0%1 Unleashed a fission bomb.';
|
$DeathMessageSelfKill[$DamageType::FissionBomb, 1] = '\c0%1 stared a bit too long at the bright fission bomb flash.';
|
||||||
$DeathMessageSelfKill[$DamageType::FissionBomb, 2] = '\c0%1 Unleashed a fission bomb.';
|
$DeathMessageSelfKill[$DamageType::FissionBomb, 2] = '\c0%1 pushed the big red button, and then didn\'t run.';
|
||||||
$DeathMessageSelfKill[$DamageType::FissionBomb, 3] = '\c0%1 Unleashed a fission bomb.';
|
$DeathMessageSelfKill[$DamageType::FissionBomb, 3] = '\c0%1 forgot to execute the third step of fission bomb operation, running.';
|
||||||
$DeathMessageSelfKill[$DamageType::FissionBomb, 4] = '\c0%1 Unleashed a fission bomb.';
|
$DeathMessageSelfKill[$DamageType::FissionBomb, 4] = '\c0%1 sets off a bright reaction of decimation, upon %2self.';
|
||||||
|
|
||||||
|
$DeathMessageSelfKill[$DamageType::Javelin, 0] = '\c0%1 obtained long range missile locking upon %2self.';
|
||||||
|
$DeathMessageSelfKill[$DamageType::Javelin, 1] = '\c0%1 pointed the javelin launching tube in the wrong direction.';
|
||||||
|
$DeathMessageSelfKill[$DamageType::Javelin, 2] = '\c0%1 obliterates %2self with %3 javelin.';
|
||||||
|
$DeathMessageSelfKill[$DamageType::Javelin, 3] = '\c0%1 looks up in the sky at %3 javelin rocket as it goes up... and then back down.';
|
||||||
|
$DeathMessageSelfKill[$DamageType::Javelin, 4] = '\c0%1 took self-artillery javelin practice too literally...';
|
||||||
|
|
||||||
|
$DeathMessageSelfKill[$DamageType::Stinger, 0] = '\c0%1 performed the ritual of anti-anti-aircraft upon %2self.';
|
||||||
|
$DeathMessageSelfKill[$DamageType::Stinger, 1] = '\c0%1 obtains missile locking upon %2self.';
|
||||||
|
$DeathMessageSelfKill[$DamageType::Stinger, 2] = '\c0%1 punts the stinger missile out of the park, along with %3 life.';
|
||||||
|
$DeathMessageSelfKill[$DamageType::Stinger, 3] = '\c0%1\'s missile launching skills have been increased to explosively spectacular levels.';
|
||||||
|
$DeathMessageSelfKill[$DamageType::Stinger, 4] = '\c0%1 blows %2self away with a stinger rocket';
|
||||||
|
|
||||||
|
$DeathMessageSelfKill[$DamageType::StaticGrenade, 0] = '\c0%1 took electrically induced explosives to a whole new meaning.';
|
||||||
|
$DeathMessageSelfKill[$DamageType::StaticGrenade, 1] = '\c0%1 pulled the pin on a static grenade, and then walked into it.';
|
||||||
|
$DeathMessageSelfKill[$DamageType::StaticGrenade, 2] = '\c0%1 tossed a static grenade and then performed boomerang logic on it.';
|
||||||
|
$DeathMessageSelfKill[$DamageType::StaticGrenade, 3] = '\c0%1\'s static grenade tossing skills have exploded into new proportions.';
|
||||||
|
$DeathMessageSelfKill[$DamageType::StaticGrenade, 4] = '\c0%1 blows %2self away with a static grenade';
|
||||||
|
|
||||||
|
//These three are impossible deaths, but w/e
|
||||||
|
$DeathMessageSelfKill[$DamageType::Plasmasaber, 0] = '\c0%1 turned %3 plasma energy sword upon %2self.';
|
||||||
|
$DeathMessageSelfKill[$DamageType::Plasmasaber, 1] = '\c0%1 turned %3 plasma energy sword upon %2self.';
|
||||||
|
$DeathMessageSelfKill[$DamageType::Plasmasaber, 2] = '\c0%1 turned %3 plasma energy sword upon %2self.';
|
||||||
|
$DeathMessageSelfKill[$DamageType::Plasmasaber, 3] = '\c0%1 turned %3 plasma energy sword upon %2self.';
|
||||||
|
$DeathMessageSelfKill[$DamageType::Plasmasaber, 4] = '\c0%1 turned %3 plasma energy sword upon %2self.';
|
||||||
|
|
||||||
|
$DeathMessageSelfKill[$DamageType::BladeOfVengance, 0] = '\c0%1 turned %3 blade of vengeance upon %2self.';
|
||||||
|
$DeathMessageSelfKill[$DamageType::BladeOfVengance, 1] = '\c0%1 turned %3 blade of vengeance upon %2self.';
|
||||||
|
$DeathMessageSelfKill[$DamageType::BladeOfVengance, 2] = '\c0%1 turned %3 blade of vengeance upon %2self.';
|
||||||
|
$DeathMessageSelfKill[$DamageType::BladeOfVengance, 3] = '\c0%1 turned %3 blade of vengeance upon %2self.';
|
||||||
|
$DeathMessageSelfKill[$DamageType::BladeOfVengance, 4] = '\c0%1 turned %3 blade of vengeance upon %2self.';
|
||||||
|
|
||||||
|
$DeathMessageSelfKill[$DamageType::BladeOfVengance_Assassination, 0] = '\c0%1 turned %3 blade of vengeance upon %2self.';
|
||||||
|
$DeathMessageSelfKill[$DamageType::BladeOfVengance_Assassination, 1] = '\c0%1 turned %3 blade of vengeance upon %2self.';
|
||||||
|
$DeathMessageSelfKill[$DamageType::BladeOfVengance_Assassination, 2] = '\c0%1 turned %3 blade of vengeance upon %2self.';
|
||||||
|
$DeathMessageSelfKill[$DamageType::BladeOfVengance_Assassination, 3] = '\c0%1 turned %3 blade of vengeance upon %2self.';
|
||||||
|
$DeathMessageSelfKill[$DamageType::BladeOfVengance_Assassination, 4] = '\c0%1 turned %3 blade of vengeance upon %2self.';
|
||||||
|
|
||||||
|
$DeathMessageSelfKill[$DamageType::PTorpedo, 0] = '\c0%1 pointed %3 proton torpedo cannon in the wrong direction.';
|
||||||
|
$DeathMessageSelfKill[$DamageType::PTorpedo, 1] = '\c0%1 decimates %3 local area with a proton torpedo cannon.';
|
||||||
|
$DeathMessageSelfKill[$DamageType::PTorpedo, 2] = '\c0%1 took proton detonation to a whole new level.';
|
||||||
|
$DeathMessageSelfKill[$DamageType::PTorpedo, 3] = '\c0%1\'s proton torpedo aiming skills are self-evident.';
|
||||||
|
$DeathMessageSelfKill[$DamageType::PTorpedo, 4] = '\c0%1 annihilates %2self into dust with a proton torpedo';
|
||||||
|
|
||||||
|
|
||||||
//used when a player is killed by a teammate
|
//used when a player is killed by a teammate
|
||||||
$DeathMessageTeamKillCount = 1;
|
$DeathMessageTeamKillCount = 1;
|
||||||
|
|
@ -138,7 +182,7 @@ $DeathMessageTeamKill[$DamageType::SatchelCharge, 0] = '\c0%4 blew up TEAMMATE %
|
||||||
$DeathMessageTeamKill[$DamageType::Impact, 0] = '\c0%4 runs down TEAMMATE %1!';
|
$DeathMessageTeamKill[$DamageType::Impact, 0] = '\c0%4 runs down TEAMMATE %1!';
|
||||||
$DeathMessageTeamKill[$DamageType::SuperChaingun, 0] = '\c0%4 TEAMKILLED %1 with a super chaingun!';
|
$DeathMessageTeamKill[$DamageType::SuperChaingun, 0] = '\c0%4 TEAMKILLED %1 with a super chaingun!';
|
||||||
$DeathMessageTeamKill[$DamageType::Pistol, 0] = '\c0%4 TEAMKILLED %1 with a colt pistol!';
|
$DeathMessageTeamKill[$DamageType::Pistol, 0] = '\c0%4 TEAMKILLED %1 with a colt pistol!';
|
||||||
$DeathMessageTeamKill[$DamageType::Melee, 0] = '\c0%4 Swings at TEAMMATE %1, and doesn\'t stop in time!';
|
$DeathMessageTeamKill[$DamageType::Melee, 0] = '\c0%4 swings for the fences in the general direction of TEAMMATE %1.';
|
||||||
$DeathMessageTeamKill[$DamageType::S3, 0] = '\c0%4 Nailed TEAMMATE %1 with an S3 Combat Rifle!';
|
$DeathMessageTeamKill[$DamageType::S3, 0] = '\c0%4 Nailed TEAMMATE %1 with an S3 Combat Rifle!';
|
||||||
$DeathMessageTeamKill[$DamageType::W1700, 0] = '\c0%4 Blasts TEAMMATE %1 with a W1700 Shotgun!';
|
$DeathMessageTeamKill[$DamageType::W1700, 0] = '\c0%4 Blasts TEAMMATE %1 with a W1700 Shotgun!';
|
||||||
$DeathMessageTeamKill[$DamageType::G41, 0] = '\c0%4 Kills TEAMMATE %1 with Semi-Automatic G41 Fire!';
|
$DeathMessageTeamKill[$DamageType::G41, 0] = '\c0%4 Kills TEAMMATE %1 with Semi-Automatic G41 Fire!';
|
||||||
|
|
@ -149,12 +193,23 @@ $DeathMessageTeamKill[$DamageType::M1, 0] = '\c0%4 Nails TEAMMATE %1 with an M1
|
||||||
$DeathMessageTeamKill[$DamageType::RP432, 0] = '\c0%4 Shreds up TEAMMATE %1 with %6 RP432 MG!';
|
$DeathMessageTeamKill[$DamageType::RP432, 0] = '\c0%4 Shreds up TEAMMATE %1 with %6 RP432 MG!';
|
||||||
$DeathMessageTeamKill[$DamageType::RPG, 0] = '\c0%4 Blows TEAMMATE %1 away with an RPG!';
|
$DeathMessageTeamKill[$DamageType::RPG, 0] = '\c0%4 Blows TEAMMATE %1 away with an RPG!';
|
||||||
$DeathMessageTeamKill[$DamageType::GravBolt, 0] = '\c0%4 ships TEAMMATE %1 to the upper atmosphere with a grav cannon!';
|
$DeathMessageTeamKill[$DamageType::GravBolt, 0] = '\c0%4 ships TEAMMATE %1 to the upper atmosphere with a grav cannon!';
|
||||||
$DeathMessageTeamKill[$DamageType::LaserRifle, 0] = '\c0%4 burns TEAMMATE %1 with %6 RSA Laser Rifle';
|
$DeathMessageTeamKill[$DamageType::LaserRifle, 0] = '\c0%4 burns TEAMMATE %1 with %6 UR-22 Laser Rifle';
|
||||||
$DeathMessageTeamKill[$DamageType::Fire, 0] = '\c0%4 burns TEAMMATE %1 with a flamethrower';
|
$DeathMessageTeamKill[$DamageType::Fire, 0] = '\c0%4 burns TEAMMATE %1 with a flamethrower';
|
||||||
$DeathMessageTeamKill[$DamageType::SA2400, 0] = '\c0%4 Nails TEAMMATE %1 with a SA2400';
|
$DeathMessageTeamKill[$DamageType::SA2400, 0] = '\c0%4 Nails TEAMMATE %1 with a SA2400';
|
||||||
$DeathMessageTeamKill[$DamageType::DesertEagle, 0] = '\c0%4 blasts TEAMMATE %1 with a desert eagle pistol';
|
$DeathMessageTeamKill[$DamageType::DesertEagle, 0] = '\c0%4 blasts TEAMMATE %1 with a desert eagle pistol';
|
||||||
$DeathMessageTeamKill[$DamageType::FissionBomb, 0] = '\c0%4 kills %1 with a Fission Bomb.';
|
$DeathMessageTeamKill[$DamageType::FissionBomb, 0] = '\c0%4 annihilates TEAMMATE %1 with a Fission Bomb.';
|
||||||
|
$DeathMessageTeamKill[$DamageType::Javelin, 0] = '\c0%4 nails TEAMMATE %1 with a javelin rocket.';
|
||||||
|
$DeathMessageTeamKill[$DamageType::Stinger, 0] = '\c0%4 ends TEAMMATE %1\'s vehicle experience with a stinger missile.';
|
||||||
|
$DeathMessageTeamKill[$DamageType::StaticGrenade, 0] = '\c0%4 TEAMKILLED %1 with a static grenade.';
|
||||||
|
$DeathMessageTeamKill[$DamageType::Plasmasaber, 0] = '\c0%4 strikes down TEAMMATE %1 with a plasmasaber.';
|
||||||
|
$DeathMessageTeamKill[$DamageType::BladeOfVengance, 0] = '\c0%4 strikes down TEAMMATE %1 with %6 blade of vengeance.';
|
||||||
|
$DeathMessageTeamKill[$DamageType::BladeOfVengance_Assassination, 0] = '\c0%4 assassinated TEAMMATE %1 with %6 blade of vengeance, oops.';
|
||||||
|
$DeathMessageTeamKill[$DamageType::MG42, 0] = '\c0%4 guns down TEAMMATE %1 with %6 MG42!';
|
||||||
|
$DeathMessageTeamKill[$DamageType::MRXX, 0] = '\c0%4 perforates TEAMMATE %1 with %6 MRXX ZC4 machine gun!';
|
||||||
|
$DeathMessageTeamKill[$DamageType::PTorpedo, 0] = '\c0%4 vaporized TEAMMATE %1 with a proton torpedo cannon!';
|
||||||
|
$DeathMessageTeamKill[$DamageType::CrimsonHawk, 0] = '\c0%4 eliminates TEAMMATE %1 with %6 crimson hawk pistol!';
|
||||||
|
$DeathMessageTeamKill[$DamageType::M93, 0] = '\c0%4 nails TEAMMATE %1 with a burst fired M93 pistol!';
|
||||||
|
$DeathMessageTeamKill[$DamageType::ES77PulsePhaser, 0] = '\c0%4 eliminates TEAMMATE %1 with %6 ES-77 Pulse Phaser!';
|
||||||
|
|
||||||
//these used when a player is killed by an enemy
|
//these used when a player is killed by an enemy
|
||||||
$DeathMessageCount = 5;
|
$DeathMessageCount = 5;
|
||||||
|
|
@ -526,7 +581,7 @@ $DeathMessage[$DamageType::Pg700, 4] = '\c0%1 is rapidly gunned down from %4\'s
|
||||||
|
|
||||||
$DeathMessage[$DamageType::FellOff, 0] = '\c0%1 began %3 high flying sky diving career a little too close to the ground.';//
|
$DeathMessage[$DamageType::FellOff, 0] = '\c0%1 began %3 high flying sky diving career a little too close to the ground.';//
|
||||||
$DeathMessage[$DamageType::FellOff, 1] = '\c0%1 must have thougt staying close to the edge was a great idea.';//
|
$DeathMessage[$DamageType::FellOff, 1] = '\c0%1 must have thougt staying close to the edge was a great idea.';//
|
||||||
$DeathMessage[$DamageType::FellOff, 2] = '\c0%1 now realizes that gravity is the law, and everyone must obey it.';//
|
$DeathMessage[$DamageType::FellOff, 2] = '\c0%1 learned about Newton\'s Law of Gravity a bit too late.';//
|
||||||
$DeathMessage[$DamageType::FellOff, 3] = '\c0%1 couldn\'t handle the gravity of the situation.';//
|
$DeathMessage[$DamageType::FellOff, 3] = '\c0%1 couldn\'t handle the gravity of the situation.';//
|
||||||
$DeathMessage[$DamageType::FellOff, 4] = '\c0%1 takes a nice long trip down the edge.';//
|
$DeathMessage[$DamageType::FellOff, 4] = '\c0%1 takes a nice long trip down the edge.';//
|
||||||
|
|
||||||
|
|
@ -548,10 +603,10 @@ $DeathMessage[$DamageType::RPG, 2] = '\c0%4 blasted %1 with %6 RPG';
|
||||||
$DeathMessage[$DamageType::RPG, 3] = '\c0%4 blows %1 into epic explosive proportions.';
|
$DeathMessage[$DamageType::RPG, 3] = '\c0%4 blows %1 into epic explosive proportions.';
|
||||||
$DeathMessage[$DamageType::RPG, 4] = '\c0%1 died after taking a RPG to the face from %4.';
|
$DeathMessage[$DamageType::RPG, 4] = '\c0%1 died after taking a RPG to the face from %4.';
|
||||||
|
|
||||||
$DeathMessage[$DamageType::LaserRifle, 0] = '\c0%4 beamed down %1 with an RSA Laser Rifle.';
|
$DeathMessage[$DamageType::LaserRifle, 0] = '\c0%4 beamed down %1 with a Laser Rifle.';
|
||||||
$DeathMessage[$DamageType::LaserRifle, 1] = '\c0%4 blasts ultimate laser beams into %1.';
|
$DeathMessage[$DamageType::LaserRifle, 1] = '\c0%4 blasts ultimate laser beams into %1.';
|
||||||
$DeathMessage[$DamageType::LaserRifle, 2] = '\c0%4 utilizes advanced RSA Laser Technology on %1';
|
$DeathMessage[$DamageType::LaserRifle, 2] = '\c0%4 utilizes advanced Laser Technology on %1';
|
||||||
$DeathMessage[$DamageType::LaserRifle, 3] = '\c0%4 burns holes into %1 from %6 RSA laser rifle.';
|
$DeathMessage[$DamageType::LaserRifle, 3] = '\c0%4 burns holes into %1 from %6 laser rifle.';
|
||||||
$DeathMessage[$DamageType::LaserRifle, 4] = '\c0%4 gives %1 some laser therapy, too bad it was lethal.';
|
$DeathMessage[$DamageType::LaserRifle, 4] = '\c0%4 gives %1 some laser therapy, too bad it was lethal.';
|
||||||
|
|
||||||
$DeathMessage[$DamageType::Burn, 0] = '\c0%1 screams fire, nobody comes to aid %2.';
|
$DeathMessage[$DamageType::Burn, 0] = '\c0%1 screams fire, nobody comes to aid %2.';
|
||||||
|
|
@ -573,10 +628,10 @@ $DeathMessage[$DamageType::SA2400, 3] = '\c0%4 unloads a full clip of buckshot u
|
||||||
$DeathMessage[$DamageType::SA2400, 4] = '\c0%1 has many tiny buckshot holes from %4 in %2.';
|
$DeathMessage[$DamageType::SA2400, 4] = '\c0%1 has many tiny buckshot holes from %4 in %2.';
|
||||||
|
|
||||||
$DeathMessage[$DamageType::deserteagle, 0] = '\c0%4 blows %1 away with a desert eagle pistol.';
|
$DeathMessage[$DamageType::deserteagle, 0] = '\c0%4 blows %1 away with a desert eagle pistol.';
|
||||||
$DeathMessage[$DamageType::deserteagle, 1] = '\c0%4 blasts a pistol shot that %1 will never forger.';
|
$DeathMessage[$DamageType::deserteagle, 1] = '\c0%4 blasts a pistol shot that %1 will never forget.';
|
||||||
$DeathMessage[$DamageType::deserteagle, 2] = '\c0%4 uses the most powerful pistol on %1';
|
$DeathMessage[$DamageType::deserteagle, 2] = '\c0%4 unleashes the most powerful pistol on %1';
|
||||||
$DeathMessage[$DamageType::deserteagle, 3] = '\c0%4 shows %1 some desert eagle skillz.';
|
$DeathMessage[$DamageType::deserteagle, 3] = '\c0%4 shows %1 some desert eagle skillz.';
|
||||||
$DeathMessage[$DamageType::deserteagle, 4] = '\c0%4 gives %1 some D.Eagle bullets, they are murderous.';
|
$DeathMessage[$DamageType::deserteagle, 4] = '\c0%4 gives %1 a rocking wonderful time with a desert eagle barrage.';
|
||||||
|
|
||||||
$DeathMessage[$DamageType::FissionBomb, 0] = '\c0%4 kills %1 with a Fission Bomb..';
|
$DeathMessage[$DamageType::FissionBomb, 0] = '\c0%4 kills %1 with a Fission Bomb..';
|
||||||
$DeathMessage[$DamageType::FissionBomb, 1] = '\c0%4 kills %1 with a Fission Bomb..';
|
$DeathMessage[$DamageType::FissionBomb, 1] = '\c0%4 kills %1 with a Fission Bomb..';
|
||||||
|
|
@ -584,3 +639,74 @@ $DeathMessage[$DamageType::FissionBomb, 2] = '\c0%4 kills %1 with a Fission Bomb
|
||||||
$DeathMessage[$DamageType::FissionBomb, 3] = '\c0%4 kills %1 with a Fission Bomb..';
|
$DeathMessage[$DamageType::FissionBomb, 3] = '\c0%4 kills %1 with a Fission Bomb..';
|
||||||
$DeathMessage[$DamageType::FissionBomb, 4] = '\c0%4 kills %1 with a Fission Bomb..';
|
$DeathMessage[$DamageType::FissionBomb, 4] = '\c0%4 kills %1 with a Fission Bomb..';
|
||||||
|
|
||||||
|
$DeathMessage[$DamageType::Javelin, 0] = '\c0%4 fires a rocket which goes up.. %1 stares in astonishment as it comes back down.';
|
||||||
|
$DeathMessage[$DamageType::Javelin, 1] = '\c0%1 was blasted out of existence by %4\'s javelin rocket.';
|
||||||
|
$DeathMessage[$DamageType::Javelin, 2] = '\c0%1 has been scattered across the battlefield thanks to %4\'s javelin.';
|
||||||
|
$DeathMessage[$DamageType::Javelin, 3] = '\c0%4 strikes down %1 with a javelin rocket from afar.';
|
||||||
|
$DeathMessage[$DamageType::Javelin, 4] = '\c0%1 experiences explosive javelin decomposition from %4.';
|
||||||
|
|
||||||
|
$DeathMessage[$DamageType::Stinger, 0] = '\c0%4 ends %1\'s vehicular journey with a stinger missile.';
|
||||||
|
$DeathMessage[$DamageType::Stinger, 1] = '\c0%1 is knocked out of the sky by %4\'s stinger missile.';
|
||||||
|
$DeathMessage[$DamageType::Stinger, 2] = '\c0%1\'s floating bits and remains rain down from %4\'s stinger missile.';
|
||||||
|
$DeathMessage[$DamageType::Stinger, 3] = '\c0%4 shoots %1 out of the sky with a stinger missile.';
|
||||||
|
$DeathMessage[$DamageType::Stinger, 4] = '\c0%1 gets that seeking feeling from %4\'s stinger missile.';
|
||||||
|
|
||||||
|
$DeathMessage[$DamageType::StaticGrenade, 0] = '\c0%4 ends %1 with an electrical explosive charge.';
|
||||||
|
$DeathMessage[$DamageType::StaticGrenade, 1] = '\c0%1 experiences violent electrical fury thanks to %4.';
|
||||||
|
$DeathMessage[$DamageType::StaticGrenade, 2] = '\c0%4 tosses the static grenade of life ending power at %1.';
|
||||||
|
$DeathMessage[$DamageType::StaticGrenade, 3] = '\c0%4 nails %1 with a static grenade.';
|
||||||
|
$DeathMessage[$DamageType::StaticGrenade, 4] = '\c0%1\'s life ends with violent electrical blasts, curtosey of %4.';
|
||||||
|
|
||||||
|
$DeathMessage[$DamageType::Plasmasaber, 0] = '\c0%4 strikes down %1 with %6 plasmasaber.';
|
||||||
|
$DeathMessage[$DamageType::Plasmasaber, 1] = '\c0%1 endures lethal heated stab wounds courtesy of %4\'s plasmasaber.';
|
||||||
|
$DeathMessage[$DamageType::Plasmasaber, 2] = '\c0%4 swings to the fences with a plasmasaber in %1\'s general direction.';
|
||||||
|
$DeathMessage[$DamageType::Plasmasaber, 3] = '\c0%4 nails %1 with a plasmasaber.';
|
||||||
|
$DeathMessage[$DamageType::Plasmasaber, 4] = '\c0%1\'s death was swift and vengeful, thanks to %4\'s saber skills.';
|
||||||
|
|
||||||
|
$DeathMessage[$DamageType::BladeOfVengance, 0] = '\c0%4 strikes down %1 with %6 blade of vengeance.';
|
||||||
|
$DeathMessage[$DamageType::BladeOfVengance, 1] = '\c0%1 endures lethal sword wounds from %4.';
|
||||||
|
$DeathMessage[$DamageType::BladeOfVengance, 2] = '\c0%4 stabs %1 lethaly with the blade of vengeance.';
|
||||||
|
$DeathMessage[$DamageType::BladeOfVengance, 3] = '\c0%4 hacks and slashes at %1 with a blade of vengeance.';
|
||||||
|
$DeathMessage[$DamageType::BladeOfVengance, 4] = '\c0%1\'s swordmanship skills were outmatched by %4 and %6 blade of vengeance.';
|
||||||
|
|
||||||
|
$DeathMessage[$DamageType::BladeOfVengance_Assassination, 0] = '\c0%4 holds %1 in that close, rear, and stabtastic aspect.';
|
||||||
|
$DeathMessage[$DamageType::BladeOfVengance_Assassination, 1] = '\c0%1 takes a sword to the back courtesy of %4.';
|
||||||
|
$DeathMessage[$DamageType::BladeOfVengance_Assassination, 2] = '\c0%4 assassinated %1 with %6 blade of vengeance.';
|
||||||
|
$DeathMessage[$DamageType::BladeOfVengance_Assassination, 3] = '\c0%4 strikes down %1 in that lethal backstabbing fashion.';
|
||||||
|
$DeathMessage[$DamageType::BladeOfVengance_Assassination, 4] = '\c0%1\'s unexpected blade of vengeance death came quickly from %4.';
|
||||||
|
|
||||||
|
$DeathMessage[$DamageType::MG42, 0] = '\c0%4 unleashes the full power of %6 MG42 upon %1.';
|
||||||
|
$DeathMessage[$DamageType::MG42, 1] = '\c0%4 tears apart %1 with an MG42 machine gun.';
|
||||||
|
$DeathMessage[$DamageType::MG42, 2] = '\c0%4 shows %1 the full power of an MG42 machine gun';
|
||||||
|
$DeathMessage[$DamageType::MG42, 3] = '\c0%4 blows numerous holes into %1, MG42 sized holes.';
|
||||||
|
$DeathMessage[$DamageType::MG42, 4] = '\c0%1 is rapidly perforated by %4\'s MG42.';
|
||||||
|
|
||||||
|
$DeathMessage[$DamageType::MRXX, 0] = '\c0%4 turns %6 trusted harbinger machine gun in %1\'s general direction.';
|
||||||
|
$DeathMessage[$DamageType::MRXX, 1] = '\c0%4 annihilates %1 with %6 MRXX ZC4 machine gun.';
|
||||||
|
$DeathMessage[$DamageType::MRXX, 2] = '\c0%4 shreds %1 with an MRXX ZC4 machine gun.';
|
||||||
|
$DeathMessage[$DamageType::MRXX, 3] = '\c0%4 rips apart %1 with an MRXX ZC4.';
|
||||||
|
$DeathMessage[$DamageType::MRXX, 4] = '\c0%1 is shown the power of harbinger machine gun weaponry by %4.';
|
||||||
|
|
||||||
|
$DeathMessage[$DamageType::PTorpedo, 0] = '\c0%4 aims down the scope on %6 proton torpedo cannon, %1 ceased to exist.';
|
||||||
|
$DeathMessage[$DamageType::PTorpedo, 1] = '\c0%4 vaporizes %1 with %6 proton torpedo cannon.';
|
||||||
|
$DeathMessage[$DamageType::PTorpedo, 2] = '\c0%4 turns %1 to dust with a single proton torpedo strike.';
|
||||||
|
$DeathMessage[$DamageType::PTorpedo, 3] = '\c0%4 ended the existence of %1 with a proton torpedo cannon.';
|
||||||
|
$DeathMessage[$DamageType::PTorpedo, 4] = '\c0%1 gets one sight of a flash, followed by the destructive end thanks to %4.';
|
||||||
|
|
||||||
|
$DeathMessage[$DamageType::CrimsonHawk, 0] = '\c0%4 strikes down %1 with %6 crimson hawk pulse pistol.';
|
||||||
|
$DeathMessage[$DamageType::CrimsonHawk, 1] = '\c0%4 takes down %1 with rapid energy pulses from a crimson hawk.';
|
||||||
|
$DeathMessage[$DamageType::CrimsonHawk, 2] = '\c0%4 shows %1 what happens when you face down Trevor Haliade\'s pistol.';
|
||||||
|
$DeathMessage[$DamageType::CrimsonHawk, 3] = '\c0%4 unloads rapid pulse bursts upon %1 with a crimson hawk pistol.';
|
||||||
|
$DeathMessage[$DamageType::CrimsonHawk, 4] = '\c0%1 has nowhere to run or hide once %4\'s rapid fire pulses engage.';
|
||||||
|
|
||||||
|
$DeathMessage[$DamageType::M93, 0] = '\c0%4 unleashes burst fired pistol rounds upon %1.';
|
||||||
|
$DeathMessage[$DamageType::M93, 1] = '\c0%4 eliminates %1 with %6 M93 pistol.';
|
||||||
|
$DeathMessage[$DamageType::M93, 2] = '\c0%4 hits %1 with burst fired precision small arms fire.';
|
||||||
|
$DeathMessage[$DamageType::M93, 3] = '\c0%4 overpowers %1 with %6 M93 burst fire pistol.';
|
||||||
|
$DeathMessage[$DamageType::M93, 4] = '\c0%1 is put down by %4\'s M93 bursts.';
|
||||||
|
|
||||||
|
$DeathMessage[$DamageType::ES77PulsePhaser, 0] = '\c0%4 nails %1 with repeated heated energy pulses.';
|
||||||
|
$DeathMessage[$DamageType::ES77PulsePhaser, 1] = '\c0%4 eliminates %1 with %6 ES-77 Pulse Phaser.';
|
||||||
|
$DeathMessage[$DamageType::ES77PulsePhaser, 2] = '\c0%4 shows %1 the power of the pulse phaser.';
|
||||||
|
$DeathMessage[$DamageType::ES77PulsePhaser, 3] = '\c0%4 fires off superheated pulse shots in %1\'s direction.';
|
||||||
|
$DeathMessage[$DamageType::ES77PulsePhaser, 4] = '\c0%4 makes short work of %1 with a pulse phaser.';
|
||||||
|
|
@ -38,7 +38,7 @@ $NameToInv["Tech"] = "Tech";
|
||||||
$InvWeapon[0] = "S3 Combat Rifle";
|
$InvWeapon[0] = "S3 Combat Rifle";
|
||||||
$InvWeapon[1] = "G41 S.A. Rifle";
|
$InvWeapon[1] = "G41 S.A. Rifle";
|
||||||
$InvWeapon[2] = "M4A1";
|
$InvWeapon[2] = "M4A1";
|
||||||
$InvWeapon[3] = "RSA Laser Rifle";
|
$InvWeapon[3] = "UR-22 Laser Rifle";
|
||||||
$InvWeapon[4] = "Sh4d3 Rifle";
|
$InvWeapon[4] = "Sh4d3 Rifle";
|
||||||
$InvWeapon[5] = "LUST Ion Rifle";
|
$InvWeapon[5] = "LUST Ion Rifle";
|
||||||
$InvWeapon[6] = "Pulse Rifle";
|
$InvWeapon[6] = "Pulse Rifle";
|
||||||
|
|
@ -95,7 +95,7 @@ $NameToInv["LX53 AV Launcher"] = "MissileLauncher";
|
||||||
$NameToInv["RP-432 MG"] = "RP432";
|
$NameToInv["RP-432 MG"] = "RP432";
|
||||||
$NameToInv["Mini-Chaingun"] = "MiniChaingun";
|
$NameToInv["Mini-Chaingun"] = "MiniChaingun";
|
||||||
$NameToInv["Wp400 Shotgun"] = "Wp400";
|
$NameToInv["Wp400 Shotgun"] = "Wp400";
|
||||||
$NameToInv["RSA Laser Rifle"] = "lasergun";
|
$NameToInv["UR-22 Laser Rifle"] = "lasergun";
|
||||||
$NameToInv["RPG-7"] = "RPG";
|
$NameToInv["RPG-7"] = "RPG";
|
||||||
$NameToInv["Manipulator Tool"] = "EditTool";
|
$NameToInv["Manipulator Tool"] = "EditTool";
|
||||||
$NameToInv["LUX-4 Ion Launcher"] = "IonLauncher";
|
$NameToInv["LUX-4 Ion Launcher"] = "IonLauncher";
|
||||||
|
|
|
||||||
|
|
@ -2691,462 +2691,366 @@ $ammoType[47] = "Model1887Ammo";
|
||||||
$ammoType[48] = "NapalmAmmo";
|
$ammoType[48] = "NapalmAmmo";
|
||||||
|
|
||||||
|
|
||||||
function Armor::onCollision(%this,%obj,%col,%forceVehicleNode)
|
function Armor::onCollision(%this, %obj, %col, %forceVehicleNode) {
|
||||||
{
|
if (%obj.getState() $= "Dead") {
|
||||||
if (%obj.getState() $= "Dead")
|
return;
|
||||||
return;
|
|
||||||
|
|
||||||
%dataBlock = %col.getDataBlock();
|
|
||||||
%colarmortype = %Datablock.getname();
|
|
||||||
%className = %dataBlock.className;
|
|
||||||
%objarmortype = %obj.getdatablock().getname();
|
|
||||||
%client = %obj.client;
|
|
||||||
// player collided with a vehicle
|
|
||||||
%node = -1;
|
|
||||||
if (%forceVehicleNode !$= "" || (%className $= WheeledVehicleData || %className $= FlyingVehicleData || %className $= HoverVehicleData) &&
|
|
||||||
%obj.mountVehicle && %obj.getState() $= "Move" && %col.mountable && !%obj.inStation && %col.getDamageState() !$= "Destroyed") {
|
|
||||||
|
|
||||||
// Escape pod
|
|
||||||
if (%dataBlock == EscapePodVehicle.getID()) {
|
|
||||||
if (%dataBlock.isBlocked(%col,%obj)) {
|
|
||||||
if (%col.blockedTime + 1000 < getSimTime()) {
|
|
||||||
%col.blockedTime = getSimTime();
|
|
||||||
%col.play3D(TelePadAccessDeniedSound);
|
|
||||||
messageClient(%obj.client,'msgClient','\c2Unable to launch, escape pod is blocked!');
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//if the player is an AI, he should snap to the mount points in node order,
|
%dataBlock = %col.getDataBlock();
|
||||||
//to ensure they mount the turret before the passenger seat, regardless of where they collide...
|
%colarmortype = %Datablock.getname();
|
||||||
if (!%obj.isZombie && %obj.client.isAIControlled())
|
%className = %dataBlock.className;
|
||||||
{
|
%objarmortype = %obj.getdatablock().getname();
|
||||||
%transform = %col.getTransform();
|
%client = %obj.client;
|
||||||
|
// player collided with a vehicle
|
||||||
|
%node = -1;
|
||||||
|
if (%forceVehicleNode !$= "" || (%className $= WheeledVehicleData || %className $= FlyingVehicleData || %className $= HoverVehicleData)
|
||||||
|
&& %obj.mountVehicle && %obj.getState() $= "Move" && %col.mountable && !%obj.inStation && %col.getDamageState() !$= "Destroyed") {
|
||||||
|
|
||||||
//either the AI is *required* to pilot, or they'll pick the first available passenger seat
|
// Escape pod
|
||||||
if (%client.pilotVehicle)
|
if (%dataBlock == EscapePodVehicle.getID()) {
|
||||||
{
|
if (%dataBlock.isBlocked(%col,%obj)) {
|
||||||
//make sure the bot is in light armor
|
if (%col.blockedTime + 1000 < getSimTime()) {
|
||||||
if (%client.player.getArmorSize() $= "Light")
|
%col.blockedTime = getSimTime();
|
||||||
{
|
%col.play3D(TelePadAccessDeniedSound);
|
||||||
//make sure the pilot seat is empty
|
messageClient(%obj.client,'msgClient','\c2Unable to launch, escape pod is blocked!');
|
||||||
if (!%col.getMountNodeObject(0))
|
}
|
||||||
%node = 0;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
%node = findAIEmptySeat(%col, %obj);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
%node = findEmptySeat(%col, %obj, %forceVehicleNode);
|
|
||||||
|
|
||||||
//now mount the player in the vehicle
|
//if the player is an AI, he should snap to the mount points in node order,
|
||||||
if(%node >= 0)
|
//to ensure they mount the turret before the passenger seat, regardless of where they collide...
|
||||||
{
|
if (!%obj.isZombie && %obj.client.isAIControlled()) {
|
||||||
// players can't be pilots, bombardiers or turreteers if they have
|
%transform = %col.getTransform();
|
||||||
// "large" packs -- stations, turrets, turret barrels
|
//either the AI is *required* to pilot, or they'll pick the first available passenger seat
|
||||||
if(hasLargePack(%obj)) {
|
if (%client.pilotVehicle) {
|
||||||
// check to see if attempting to enter a "sitting" node
|
//make sure the bot is in light armor
|
||||||
if(nodeIsSitting(%datablock, %node)) {
|
if (%client.player.getArmorSize() $= "Light") {
|
||||||
// send the player a message -- can't sit here with large pack
|
//make sure the pilot seat is empty
|
||||||
if(!%obj.noSitMessage)
|
if (!%col.getMountNodeObject(0)) {
|
||||||
{
|
%node = 0;
|
||||||
%obj.noSitMessage = true;
|
}
|
||||||
%obj.schedule(2000, "resetSitMessage");
|
}
|
||||||
messageClient(%obj.client, 'MsgCantSitHere', '\c2Pack too large, can\'t occupy this seat.~wfx/misc/misc.error.wav');
|
}
|
||||||
}
|
else {
|
||||||
return;
|
%node = findAIEmptySeat(%col, %obj);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(%col.noEnemyControl && %obj.team != %col.team)
|
else {
|
||||||
return;
|
%node = findEmptySeat(%col, %obj, %forceVehicleNode);
|
||||||
|
}
|
||||||
|
|
||||||
commandToClient(%obj.client,'SetDefaultVehicleKeys', true);
|
//now mount the player in the vehicle
|
||||||
//If pilot or passenger then bind a few extra keys
|
if(%node >= 0) {
|
||||||
if(%node == 0)
|
// players can't be pilots, bombardiers or turreteers if they have
|
||||||
commandToClient(%obj.client,'SetPilotVehicleKeys', true);
|
// "large" packs -- stations, turrets, turret barrels
|
||||||
else
|
if(hasLargePack(%obj)) {
|
||||||
commandToClient(%obj.client,'SetPassengerVehicleKeys', true);
|
// check to see if attempting to enter a "sitting" node
|
||||||
|
if(nodeIsSitting(%datablock, %node)) {
|
||||||
|
// send the player a message -- can't sit here with large pack
|
||||||
|
if(!%obj.noSitMessage) {
|
||||||
|
%obj.noSitMessage = true;
|
||||||
|
%obj.schedule(2000, "resetSitMessage");
|
||||||
|
messageClient(%obj.client, 'MsgCantSitHere', '\c2Pack too large, can\'t occupy this seat.~wfx/misc/misc.error.wav');
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(%col.noEnemyControl && %obj.team != %col.team) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if(!%obj.inStation)
|
commandToClient(%obj.client,'SetDefaultVehicleKeys', true);
|
||||||
%col.lastWeapon = ( %col.getMountedImage($WeaponSlot) == 0 ) ? "" : %col.getMountedImage($WeaponSlot).getName().item;
|
//If pilot or passenger then bind a few extra keys
|
||||||
else
|
if(%node == 0) {
|
||||||
%col.lastWeapon = %obj.lastWeapon;
|
commandToClient(%obj.client,'SetPilotVehicleKeys', true);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
commandToClient(%obj.client,'SetPassengerVehicleKeys', true);
|
||||||
|
}
|
||||||
|
|
||||||
%obj.preVehicleMountPos = %obj.getPosition();
|
if(!%obj.inStation) {
|
||||||
|
%col.lastWeapon = ( %col.getMountedImage($WeaponSlot) == 0 ) ? "" : %col.getMountedImage($WeaponSlot).getName().item;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
%col.lastWeapon = %obj.lastWeapon;
|
||||||
|
}
|
||||||
|
%obj.preVehicleMountPos = %obj.getPosition();
|
||||||
|
|
||||||
%col.mountObject(%obj,%node);
|
%col.mountObject(%obj,%node);
|
||||||
%col.playAudio(0, MountVehicleSound);
|
%col.playAudio(0, MountVehicleSound);
|
||||||
%obj.mVehicle = %col;
|
%obj.mVehicle = %col;
|
||||||
|
|
||||||
// if player is repairing something, stop it
|
// if player is repairing something, stop it
|
||||||
if(%obj.repairing)
|
if(%obj.repairing) {
|
||||||
stopRepairing(%obj);
|
stopRepairing(%obj);
|
||||||
|
}
|
||||||
//this will setup the huds as well...
|
//this will setup the huds as well...
|
||||||
%dataBlock.playerMounted(%col,%obj, %node);
|
%dataBlock.playerMounted(%col, %obj, %node);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// TODO - keep these up to date
|
// TODO - keep these up to date
|
||||||
else if (%className $= "wall" || %className $= "wwall" || %className $= "spine" || %className $= "mspine" || %className $= "floor") {
|
else if (%className $= "wall" || %className $= "wwall" || %className $= "spine" || %className $= "mspine" || %className $= "floor") {
|
||||||
%obj.playAudio(0,(GetRandom()*2 >1) ? LFootMediumMetalSound : RFootMediumMetalSound);
|
%obj.playAudio(0,(GetRandom()*2 >1) ? LFootMediumMetalSound : RFootMediumMetalSound);
|
||||||
%obj.lastDepCol = %col;
|
%obj.lastDepCol = %col;
|
||||||
%obj.lastDepColPos = %obj.getPosition();
|
%obj.lastDepColPos = %obj.getPosition();
|
||||||
if (%className $= "wall")
|
if (%className $= "wall") {
|
||||||
doorfunction(%obj,%col);
|
doorfunction(%obj, %col);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (%className $= "Armor") {
|
else if (%className $= "Armor") {
|
||||||
// player has collided with another player
|
// player has collided with another player
|
||||||
if(%obj.isZombie) {
|
if(%col.onfire == 1 && %obj.onfire != 1 && !%obj.rapierShield){
|
||||||
%objiszomb = 1;
|
%obj.maxfirecount = (%col.maxfirecount - %col.firecount);
|
||||||
}
|
%obj.onfire = 1;
|
||||||
else {
|
schedule(10, %obj, "burnloop", %obj);
|
||||||
%objiszomb = 0;
|
}
|
||||||
}
|
if(%col.getState() $= "Dead" && (!%obj.isZombie && !%col.isZombie)) {
|
||||||
if(%col.onfire == 1 && %obj.onfire != 1 && !%obj.rapierShield){
|
%obj.lasttouchedcorpse = %col;
|
||||||
%obj.maxfirecount = (%col.maxfirecount - %col.firecount);
|
%gotSomething = false;
|
||||||
%obj.onfire = 1;
|
// it's corpse-looting time!
|
||||||
schedule(10, %obj, "burnloop", %obj);
|
// weapons -- don't pick up more than you are allowed to carry!
|
||||||
}
|
for(%i = 0; ( %obj.weaponCount < %obj.getDatablock().maxWeapons ) && $InvWeapon[%i] !$= ""; %i++) {
|
||||||
if(%col.getState() $= "Dead" && !%objiszomb) {
|
%weap = $NameToInv[$InvWeapon[%i]];
|
||||||
%obj.lasttouchedcorpse = %col;
|
if ( %col.hasInventory( %weap ) ) {
|
||||||
%gotSomething = false;
|
if ( %obj.incInventory(%weap, 1) > 0 ) {
|
||||||
// it's corpse-looting time!
|
%col.decInventory(%weap, 1);
|
||||||
// weapons -- don't pick up more than you are allowed to carry!
|
%gotSomething = true;
|
||||||
for(%i = 0; ( %obj.weaponCount < %obj.getDatablock().maxWeapons ) && $InvWeapon[%i] !$= ""; %i++)
|
messageClient(%obj.client, 'MsgItemPickup', '\c0You picked up %1.', %weap.pickUpName);
|
||||||
{
|
}
|
||||||
%weap = $NameToInv[$InvWeapon[%i]];
|
//New Clip Stuff
|
||||||
if ( %col.hasInventory( %weap ) )
|
%WImg = %weap @ "Image"; //I love how there are so many ways
|
||||||
{
|
//To get The WeaponImage with only
|
||||||
if ( %obj.incInventory(%weap, 1) > 0 )
|
//Ammo or NameToInv :p -Phantom
|
||||||
{
|
%ClipsLeft = %obj.ClipCount[%WImg.ClipName];
|
||||||
%col.decInventory(%weap, 1);
|
%MaxClips = %WImg.InitialClips; //Initial == Max?
|
||||||
%gotSomething = true;
|
%ColClipsLeft = %col.ClipCount[%WImg.ClipName];
|
||||||
messageClient(%obj.client, 'MsgItemPickup', '\c0You picked up %1.', %weap.pickUpName);
|
//AHA! Pickup time
|
||||||
}
|
if(%ClipsLeft < %MaxClips) {
|
||||||
//New Clip Stuff
|
%clipsToAdd = %MaxClips - %ClipsLeft;
|
||||||
%WImg = %weap @ "Image"; //I love how there are so many ways
|
//this if checks the dead player's remaining clips
|
||||||
//To get The WeaponImage with only
|
//If needed is more than what we have, we go to the
|
||||||
//Ammo or NameToInv :p -Phantom
|
//else, otherwise, we add it.
|
||||||
%ClipsLeft = %obj.ClipCount[%WImg.ClipName];
|
if(%ColClipsLeft > 1 && (%ColClipsLeft - %clipsToAdd >= 0)) {
|
||||||
%MaxClips = %WImg.InitialClips; //Initial == Max?
|
%ClipPickUpName = %WImg.ClipPickupName[%WImg.ClipName];
|
||||||
%ColClipsLeft = %col.ClipCount[%WImg.ClipName];
|
%col.ClipCount[%WImg.ClipName] -= %clipsToAdd;
|
||||||
//AHA! Pickup time
|
%obj.ClipCount[%WImg.ClipName] += %clipsToAdd;
|
||||||
if(%ClipsLeft < %MaxClips) {
|
%GotSomething = true;
|
||||||
%clipsToAdd = %MaxClips - %ClipsLeft;
|
messageClient(%obj.client, 'MsgItemPickup', "\c0You picked up "@%ClipPickUpName@".");
|
||||||
//this if checks the dead player's remaining clips
|
//check if reload needs to be done?
|
||||||
//If needed is more than what we have, we go to the
|
if(%col.inv[%WImg.ammo] == 0) {
|
||||||
//else, otherwise, we add it.
|
AttemptReload(%WImg, %obj, $WeaponSlot);
|
||||||
if(%ColClipsLeft > 1 && (%ColClipsLeft - %clipsToAdd >= 0)) {
|
}
|
||||||
%ClipPickUpName = %WImg.ClipPickupName[%WImg.ClipName];
|
}
|
||||||
%col.ClipCount[%WImg.ClipName] -= %clipsToAdd;
|
else {
|
||||||
%obj.ClipCount[%WImg.ClipName] += %clipsToAdd;
|
%clipsToAdd = %ColClipsLeft;
|
||||||
%GotSomething = true;
|
%ClipPickUpName = %WImg.ClipPickupName[%WImg.ClipName];
|
||||||
messageClient(%obj.client, 'MsgItemPickup', "\c0You picked up "@%ClipPickUpName@".");
|
%col.ClipCount[%WImg.ClipName] -= %clipsToAdd;
|
||||||
//check if reload needs to be done?
|
%obj.ClipCount[%WImg.ClipName] += %clipsToAdd;
|
||||||
|
%GotSomething = true;
|
||||||
}
|
messageClient(%obj.client, 'MsgItemPickup', "\c0You picked up "@%ClipPickUpName@".");
|
||||||
else {
|
}
|
||||||
%clipsToAdd = %ColClipsLeft;
|
}
|
||||||
%ClipPickUpName = %WImg.ClipPickupName[%WImg.ClipName];
|
}
|
||||||
%col.ClipCount[%WImg.ClipName] -= %clipsToAdd;
|
}
|
||||||
%obj.ClipCount[%WImg.ClipName] += %clipsToAdd;
|
// targeting laser:
|
||||||
%GotSomething = true;
|
if ( %col.hasInventory( "TargetingLaser" ) ) {
|
||||||
messageClient(%obj.client, 'MsgItemPickup', "\c0You picked up "@%ClipPickUpName@".");
|
if ( %obj.incInventory( "TargetingLaser", 1 ) > 0 ) {
|
||||||
}
|
%col.decInventory( "TargetingLaser", 1 );
|
||||||
}
|
%gotSomething = true;
|
||||||
}
|
messageClient( %obj.client, 'MsgItemPickup', '\c0You picked up a targeting laser.' );
|
||||||
}
|
}
|
||||||
// targeting laser:
|
}
|
||||||
if ( %col.hasInventory( "TargetingLaser" ) )
|
// ammo
|
||||||
{
|
for(%j = 0; $ammoType[%j] !$= ""; %j++) {
|
||||||
if ( %obj.incInventory( "TargetingLaser", 1 ) > 0 )
|
%ammoAmt = %col.inv[$ammoType[%j]];
|
||||||
{
|
if(%ammoAmt) {
|
||||||
%col.decInventory( "TargetingLaser", 1 );
|
// incInventory returns the amount of stuff successfully grabbed
|
||||||
%gotSomething = true;
|
%grabAmt = %obj.incInventory($ammoType[%j], %ammoAmt);
|
||||||
messageClient( %obj.client, 'MsgItemPickup', '\c0You picked up a targeting laser.' );
|
if(%grabAmt > 0) {
|
||||||
}
|
%col.decInventory($ammoType[%j], %grabAmt);
|
||||||
}
|
%gotSomething = true;
|
||||||
// ammo
|
messageClient(%obj.client, 'MsgItemPickup', '\c0You picked up %1.', $ammoType[%j].pickUpName);
|
||||||
for(%j = 0; $ammoType[%j] !$= ""; %j++)
|
%obj.client.setWeaponsHudAmmo($ammoType[%j], %obj.getInventory($ammoType[%j]));
|
||||||
{
|
}
|
||||||
%ammoAmt = %col.inv[$ammoType[%j]];
|
}
|
||||||
if(%ammoAmt)
|
}
|
||||||
{
|
// figure out what type, if any, grenades the (live) player has
|
||||||
// incInventory returns the amount of stuff successfully grabbed
|
%playerGrenType = "None";
|
||||||
%grabAmt = %obj.incInventory($ammoType[%j], %ammoAmt);
|
for(%x = 0; $InvGrenade[%x] !$= ""; %x++) {
|
||||||
if(%grabAmt > 0)
|
%gren = $NameToInv[$InvGrenade[%x]];
|
||||||
{
|
%playerGrenAmt = %obj.inv[%gren];
|
||||||
%col.decInventory($ammoType[%j], %grabAmt);
|
if(%playerGrenAmt > 0) {
|
||||||
%gotSomething = true;
|
%playerGrenType = %gren;
|
||||||
messageClient(%obj.client, 'MsgItemPickup', '\c0You picked up %1.', $ammoType[%j].pickUpName);
|
break;
|
||||||
%obj.client.setWeaponsHudAmmo($ammoType[%j], %obj.getInventory($ammoType[%j]));
|
}
|
||||||
}
|
}
|
||||||
}
|
// grenades
|
||||||
}
|
for(%k = 0; $InvGrenade[%k] !$= ""; %k++) {
|
||||||
// figure out what type, if any, grenades the (live) player has
|
%gren = $NameToInv[$InvGrenade[%k]];
|
||||||
%playerGrenType = "None";
|
%corpseGrenAmt = %col.inv[%gren];
|
||||||
for(%x = 0; $InvGrenade[%x] !$= ""; %x++) {
|
// does the corpse hold any of this grenade type?
|
||||||
%gren = $NameToInv[$InvGrenade[%x]];
|
if(%corpseGrenAmt) {
|
||||||
%playerGrenAmt = %obj.inv[%gren];
|
// can the player pick up this grenade type?
|
||||||
if(%playerGrenAmt > 0)
|
if((%playerGrenType $= "None") || (%playerGrenType $= %gren)) {
|
||||||
{
|
%taken = %obj.incInventory(%gren, %corpseGrenAmt);
|
||||||
%playerGrenType = %gren;
|
if(%taken > 0) {
|
||||||
break;
|
%col.decInventory(%gren, %taken);
|
||||||
}
|
%gotSomething = true;
|
||||||
}
|
messageClient(%obj.client, 'MsgItemPickup', '\c0You picked up %1.', %gren.pickUpName);
|
||||||
// grenades
|
%obj.client.setInventoryHudAmount(%gren, %obj.getInventory(%gren));
|
||||||
for(%k = 0; $InvGrenade[%k] !$= ""; %k++)
|
}
|
||||||
{
|
}
|
||||||
%gren = $NameToInv[$InvGrenade[%k]];
|
break;
|
||||||
%corpseGrenAmt = %col.inv[%gren];
|
}
|
||||||
// does the corpse hold any of this grenade type?
|
}
|
||||||
if(%corpseGrenAmt)
|
// figure out what type, if any, mines the (live) player has
|
||||||
{
|
%playerMineType = "None";
|
||||||
// can the player pick up this grenade type?
|
for(%y = 0; $InvMine[%y] !$= ""; %y++) {
|
||||||
if((%playerGrenType $= "None") || (%playerGrenType $= %gren))
|
%mType = $NameToInv[$InvMine[%y]];
|
||||||
{
|
%playerMineAmt = %obj.inv[%mType];
|
||||||
%taken = %obj.incInventory(%gren, %corpseGrenAmt);
|
if(%playerMineAmt > 0) {
|
||||||
if(%taken > 0)
|
%playerMineType = %mType;
|
||||||
{
|
break;
|
||||||
%col.decInventory(%gren, %taken);
|
}
|
||||||
%gotSomething = true;
|
}
|
||||||
messageClient(%obj.client, 'MsgItemPickup', '\c0You picked up %1.', %gren.pickUpName);
|
// mines
|
||||||
%obj.client.setInventoryHudAmount(%gren, %obj.getInventory(%gren));
|
for(%l = 0; $InvMine[%l] !$= ""; %l++) {
|
||||||
}
|
%mine = $NameToInv[$InvMine[%l]];
|
||||||
}
|
%mineAmt = %col.inv[%mine];
|
||||||
break;
|
if(%mineAmt) {
|
||||||
}
|
if((%playerMineType $= "None") || (%playerMineType $= %mine)) {
|
||||||
}
|
%grabbed = %obj.incInventory(%mine, %mineAmt);
|
||||||
// figure out what type, if any, mines the (live) player has
|
if(%grabbed > 0) {
|
||||||
%playerMineType = "None";
|
%col.decInventory(%mine, %grabbed);
|
||||||
for(%y = 0; $InvMine[%y] !$= ""; %y++)
|
%gotSomething = true;
|
||||||
{
|
messageClient(%obj.client, 'MsgItemPickup', '\c0You picked up %1.', %mine.pickUpName);
|
||||||
%mType = $NameToInv[$InvMine[%y]];
|
%obj.client.setInventoryHudAmount(%mine, %obj.getInventory(%mine));
|
||||||
%playerMineAmt = %obj.inv[%mType];
|
}
|
||||||
if(%playerMineAmt > 0)
|
}
|
||||||
{
|
break;
|
||||||
%playerMineType = %mType;
|
}
|
||||||
break;
|
}
|
||||||
}
|
// beacons
|
||||||
}
|
%beacAmt = %col.inv[Beacon];
|
||||||
// mines
|
if(%beacAmt) {
|
||||||
for(%l = 0; $InvMine[%l] !$= ""; %l++)
|
%bTaken = %obj.incInventory(Beacon, %beacAmt);
|
||||||
{
|
if(%bTaken > 0) {
|
||||||
%mine = $NameToInv[$InvMine[%l]];
|
%col.decInventory(Beacon, %bTaken);
|
||||||
%mineAmt = %col.inv[%mine];
|
%gotSomething = true;
|
||||||
if(%mineAmt) {
|
messageClient(%obj.client, 'MsgItemPickup', '\c0You picked up %1.', Beacon.pickUpName);
|
||||||
if((%playerMineType $= "None") || (%playerMineType $= %mine))
|
%obj.client.setInventoryHudAmount(Beacon, %obj.getInventory(Beacon));
|
||||||
{
|
}
|
||||||
%grabbed = %obj.incInventory(%mine, %mineAmt);
|
}
|
||||||
if(%grabbed > 0)
|
// repair kit
|
||||||
{
|
%rkAmt = %col.inv[RepairKit];
|
||||||
%col.decInventory(%mine, %grabbed);
|
if(%rkAmt) {
|
||||||
%gotSomething = true;
|
%rkTaken = %obj.incInventory(RepairKit, %rkAmt);
|
||||||
messageClient(%obj.client, 'MsgItemPickup', '\c0You picked up %1.', %mine.pickUpName);
|
if(%rkTaken > 0) {
|
||||||
%obj.client.setInventoryHudAmount(%mine, %obj.getInventory(%mine));
|
%col.decInventory(RepairKit, %rkTaken);
|
||||||
}
|
%gotSomething = true;
|
||||||
}
|
messageClient(%obj.client, 'MsgItemPickup', '\c0You picked up %1.', RepairKit.pickUpName);
|
||||||
break;
|
%obj.client.setInventoryHudAmount(RepairKit, %obj.getInventory(RepairKit));
|
||||||
}
|
}
|
||||||
}
|
|
||||||
// beacons
|
|
||||||
%beacAmt = %col.inv[Beacon];
|
|
||||||
if(%beacAmt)
|
|
||||||
{
|
|
||||||
%bTaken = %obj.incInventory(Beacon, %beacAmt);
|
|
||||||
if(%bTaken > 0)
|
|
||||||
{
|
|
||||||
%col.decInventory(Beacon, %bTaken);
|
|
||||||
%gotSomething = true;
|
|
||||||
messageClient(%obj.client, 'MsgItemPickup', '\c0You picked up %1.', Beacon.pickUpName);
|
|
||||||
%obj.client.setInventoryHudAmount(Beacon, %obj.getInventory(Beacon));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// repair kit
|
|
||||||
%rkAmt = %col.inv[RepairKit];
|
|
||||||
if(%rkAmt)
|
|
||||||
{
|
|
||||||
%rkTaken = %obj.incInventory(RepairKit, %rkAmt);
|
|
||||||
if(%rkTaken > 0)
|
|
||||||
{
|
|
||||||
%col.decInventory(RepairKit, %rkTaken);
|
|
||||||
%gotSomething = true;
|
|
||||||
messageClient(%obj.client, 'MsgItemPickup', '\c0You picked up %1.', RepairKit.pickUpName);
|
|
||||||
%obj.client.setInventoryHudAmount(RepairKit, %obj.getInventory(RepairKit));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if((%colarmortype $= "ZombieArmor" || %col.canZkill == 1) && %obj.Infected != 1 && %objiszomb != 1 && !%obj.rapierShield){
|
|
||||||
%Vector = vectorscale(%col.getvelocity(), 100);
|
|
||||||
%obj.applyimpulse(%obj.getposition(), %Vector);
|
|
||||||
%obj.Infected = 1;
|
|
||||||
%obj.InfectedLoop = schedule(10, %obj, "TWM2Lib_Zombie_Core", "InfectLoop", %obj);
|
|
||||||
%obj.damage(0, %obj.position, 0.2, $DamageType::Zombie);
|
|
||||||
}
|
|
||||||
else if(%colarmortype $= "RavagerZombieArmor" && %obj.Infected != 1 && %objiszomb != 1 && !%obj.rapierShield){
|
|
||||||
if(%obj.hit $= ""){
|
|
||||||
%obj.hit = 1;
|
|
||||||
%obj.setWhiteOut("0.5");
|
|
||||||
playPain(%obj);
|
|
||||||
}
|
|
||||||
else if(%obj.hit == 1){
|
|
||||||
%obj.Infected = 1;
|
|
||||||
%obj.InfectedLoop = schedule(10, %obj, "TWM2Lib_Zombie_Core", "InfectLoop", %obj);
|
|
||||||
}
|
|
||||||
%Vector = vectorscale(%col.getvelocity(), 100);
|
|
||||||
%obj.applyimpulse(%obj.getposition(), %Vector);
|
|
||||||
%obj.damage(0, %obj.position, 0.2, $DamageType::Zombie);
|
|
||||||
}
|
|
||||||
else if(%colarmortype $= "DemonZombieArmor" && %obj.Infected != 1 && %objiszomb != 1 && !%obj.rapierShield){
|
|
||||||
%Vector = vectorscale(%col.getvelocity(), 100);
|
|
||||||
%obj.applyimpulse(%obj.getposition(), %Vector);
|
|
||||||
%obj.Infected = 1;
|
|
||||||
%obj.InfectedLoop = schedule(10, %obj, "TWM2Lib_Zombie_Core", "InfectLoop", %obj);
|
|
||||||
%obj.damage(0, %obj.position, 0.4, $DamageType::Zombie);
|
|
||||||
}
|
|
||||||
else if(%colarmortype $= "RapierZombieArmor" && %obj.grabbed != 1 && %objiszomb != 1 && !%obj.rapierShield){
|
|
||||||
%chance = getRandom(1,3);
|
|
||||||
if(%chance == 3 && %obj.Infected != 1){
|
|
||||||
%obj.damage(0, %obj.position, 0.4, $DamageType::Zombie);
|
|
||||||
%obj.Infected = 1;
|
|
||||||
%obj.InfectedLoop = schedule(10, %obj, "TWM2Lib_Zombie_Core", "InfectLoop", %obj);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
%col.iscarrying = 1;
|
|
||||||
%obj.grabbed = 1;
|
|
||||||
%obj.damage(0, %obj.position, 0.2, $DamageType::Zombie);
|
|
||||||
%col.killingPlayer = %col.getDatablock().zCarryLoop(%col, %obj, 0); // schedule(10, 0, "RkillLoop", %col, %obj, 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if(%colarmortype $= "ShifterZombieArmor" && %obj.Infected != 1 && %objiszomb != 1 && !%obj.rapierShield){
|
|
||||||
%Vector = vectorscale(%col.getvelocity(), 100);
|
|
||||||
%obj.applyimpulse(%obj.getposition(), %Vector);
|
|
||||||
%obj.Infected = 1;
|
|
||||||
%obj.InfectedLoop = schedule(10, %obj, "TWM2Lib_Zombie_Core", "InfectLoop", %obj);
|
|
||||||
%obj.damage(0, %obj.position, 0.3, $DamageType::Zombie);
|
|
||||||
}
|
|
||||||
else if(%colarmortype $= "SummonerZombieArmor" && %obj.Infected != 1 && %objiszomb != 1 && !%obj.rapierShield){
|
|
||||||
%Vector = vectorscale(%col.getvelocity(), 100);
|
|
||||||
%obj.applyimpulse(%obj.getposition(), %Vector);
|
|
||||||
%obj.Infected = 1;
|
|
||||||
%obj.InfectedLoop = schedule(10, %obj, "TWM2Lib_Zombie_Core", "InfectLoop", %obj);
|
|
||||||
%obj.damage(0, %obj.position, 0.3, $DamageType::Zombie);
|
|
||||||
}
|
|
||||||
else if(%colarmortype $= "DemonUltraZombieArmor" && %obj.Infected != 1 && %objiszomb != 1 && !%obj.rapierShield){
|
|
||||||
%Vector = vectorscale(%col.getvelocity(), 100);
|
|
||||||
%obj.applyimpulse(%obj.getposition(), %Vector);
|
|
||||||
%obj.Infected = 1;
|
|
||||||
%obj.InfectedLoop = schedule(10, %obj, "TWM2Lib_Zombie_Core", "InfectLoop", %obj);
|
|
||||||
%obj.damage(0, %obj.position, 0.5, $DamageType::Zombie);
|
|
||||||
}
|
|
||||||
else if((%colarmortype $= "LordRogZombieArmor" && %objiszomb != 1 && !%obj.rapierShield)) {
|
|
||||||
if(%col.isAllyBot && !%col.isAttacking) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
%obj.scriptkill($DamageType::Admin);
|
|
||||||
%col.setDamageLevel(%col.getDamageLevel() - 10.0);
|
|
||||||
%col.setVelocity("0 0 0");
|
|
||||||
if(!%obj.iszombie) {
|
|
||||||
ServerPlay3d(BOVHitSound, %obj.getPosition());
|
|
||||||
%randMessage = getrandom(3)+1;
|
|
||||||
switch(%randMessage) {
|
|
||||||
case 1:
|
|
||||||
MessageAll('MessageAll', "\c4"@$TWM2::ZombieName[8]@": Slice And Dice "@%obj.client.namebase@"!");
|
|
||||||
case 2:
|
|
||||||
MessageAll('MessageAll', "\c4"@$TWM2::ZombieName[8]@": Die... "@%obj.client.namebase@" Painfully.");
|
|
||||||
case 3:
|
|
||||||
MessageAll('MessageAll', "\c4"@$TWM2::ZombieName[8]@": Your life "@%obj.client.namebase@", is now mine!");
|
|
||||||
default:
|
|
||||||
MessageAll('MessageAll', "\c4"@$TWM2::ZombieName[8]@": Slice And Dice "@%obj.client.namebase@"!");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if((%colarmortype $= "ROGZombieArmor" && %objiszomb != 1 && !%obj.rapierShield && !%col.isPlayerRog)) {
|
|
||||||
if(%col.isAllyBot && !%col.isAttacking) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
%obj.scriptkill($DamageType::Admin);
|
|
||||||
%col.setDamageLevel(%col.getDamageLevel() - 10.0);
|
|
||||||
%col.setVelocity("0 0 0");
|
|
||||||
if(!%obj.iszombie) {
|
|
||||||
ServerPlay3d(BOVHitSound, %obj.getPosition());
|
|
||||||
%randMessage = getrandom(3)+1;
|
|
||||||
switch(%randMessage) {
|
|
||||||
case 1:
|
|
||||||
MessageAll('MessageAll', "\c4"@$TWM2::ZombieName[16]@": Slice And Dice "@%obj.client.namebase@"!");
|
|
||||||
case 2:
|
|
||||||
MessageAll('MessageAll', "\c4"@$TWM2::ZombieName[16]@": Die... "@%obj.client.namebase@" Painfully.");
|
|
||||||
case 3:
|
|
||||||
MessageAll('MessageAll', "\c4"@$TWM2::ZombieName[16]@": Your life "@%obj.client.namebase@", is now mine!");
|
|
||||||
default:
|
|
||||||
MessageAll('MessageAll', "\c4"@$TWM2::ZombieName[16]@": Slice And Dice "@%obj.client.namebase@"!");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if((%colarmortype $= "ZombieArmor" || %col.canZkill == 1) && %objiszomb != 1 && !%obj.rapierShield) {
|
|
||||||
%obj.damage(0, %obj.position, 0.2, $DamageType::Zombie);
|
|
||||||
}
|
|
||||||
else if(%colarmortype $= "FZombieArmor" && %objiszomb != 1 && !%obj.rapierShield) {
|
|
||||||
%obj.damage(0, %obj.position, 0.4, $DamageType::Zombie);
|
|
||||||
}
|
|
||||||
else if((%colarmortype $= "DemonZombieArmor" || %colarmortype $= "WraithZombieArmor") && %objiszomb != 1 && !%obj.rapierShield) {
|
|
||||||
%obj.damage(0, %obj.position, 0.4, $DamageType::Zombie);
|
|
||||||
}
|
|
||||||
else if(%colarmortype $= "DemonMotherZombieArmor" && %objiszomb != 1 && !%obj.rapierShield) {
|
|
||||||
if(%obj.Infected != 1) {
|
|
||||||
%obj.Infected = 1;
|
|
||||||
%obj.damage(0, %obj.position, 0.8, $DamageType::Zombie);
|
|
||||||
%obj.InfectedLoop = schedule(10, %obj, "TWM2Lib_Zombie_Core", "InfectLoop", %obj);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
%obj.damage(0, %obj.position, 1.2, $DamageType::Zombie);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if ($PlayerSnapTo == true) {
|
|
||||||
if (!isObject(%col.getMountedObject(0))) {
|
|
||||||
if (!isObject(%obj.getMountedObject(0)) || %obj.getMountedObject(0) != %col) {
|
|
||||||
%col.mountObject(%obj,$BackPackSlot);
|
|
||||||
%gotSomething = true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
// Phantom139:
|
||||||
else if ($NaughtyMode == true) {
|
// TWM2 3.9.2: Major cleaning of zombie logic
|
||||||
playPain(%obj);
|
// All zombie damage on collision is now handled by the individual datablocks in the zombieTypes/*.cs files.
|
||||||
playPain(%col);
|
// These #'s can be tweaked via the ZombieCore.cs file in the globals list at the top.
|
||||||
}
|
else if($TWM2::ArmorHasCollisionFunction[%colarmortype]) {
|
||||||
else if ($AngstMode == true) {
|
%datablock.armorCollisionFunction(%col, %obj);
|
||||||
playDeathCry(%obj);
|
|
||||||
playDeathCry(%col);
|
|
||||||
}
|
|
||||||
if ($JumpyMode == true) {
|
|
||||||
%obj.applyImpulse(%obj.getPosition(),"0 0 500");
|
|
||||||
%col.applyImpulse(%col.getPosition(),"0 0 500");
|
|
||||||
}
|
|
||||||
if (%obj.client.race $= "Human" && $SexChangeMode == true) {
|
|
||||||
if (%obj.client.oldSex $= "")
|
|
||||||
%obj.client.oldSex = %obj.client.sex;
|
|
||||||
if (%obj.client.oldVoice $= "")
|
|
||||||
%obj.client.oldVoice = %obj.client.voice;
|
|
||||||
%voice = getTaggedString(getTargetVoice(%obj.client.target));
|
|
||||||
%voiceNum = getSubStr(%voice,strLen(%voice)-1,1);
|
|
||||||
if (%obj.client.sex $= "Male") {
|
|
||||||
%obj.client.sex = "Female";
|
|
||||||
%obj.client.voiceTag = addTaggedString("Fem" @ %voiceNum);
|
|
||||||
setTargetVoice(%obj.client.target,%obj.client.voiceTag);
|
|
||||||
}
|
}
|
||||||
else {
|
else if ($PlayerSnapTo == true) {
|
||||||
%obj.client.sex = "Male";
|
if (!isObject(%col.getMountedObject(0))) {
|
||||||
%obj.client.voiceTag = addTaggedString("Male" @ %voiceNum);
|
if (!isObject(%obj.getMountedObject(0)) || %obj.getMountedObject(0) != %col) {
|
||||||
setTargetVoice(%obj.client.target,%obj.client.voiceTag);
|
%col.mountObject(%obj,$BackPackSlot);
|
||||||
|
%gotSomething = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if ($NaughtyMode == true) {
|
||||||
|
playPain(%obj);
|
||||||
|
playPain(%col);
|
||||||
|
}
|
||||||
|
else if ($AngstMode == true) {
|
||||||
|
playDeathCry(%obj);
|
||||||
|
playDeathCry(%col);
|
||||||
|
}
|
||||||
|
if ($JumpyMode == true) {
|
||||||
|
%obj.applyImpulse(%obj.getPosition(),"0 0 500");
|
||||||
|
%col.applyImpulse(%col.getPosition(),"0 0 500");
|
||||||
|
}
|
||||||
|
if (%obj.client.race $= "Human" && $SexChangeMode == true) {
|
||||||
|
if (%obj.client.oldSex $= "") {
|
||||||
|
%obj.client.oldSex = %obj.client.sex;
|
||||||
|
}
|
||||||
|
if (%obj.client.oldVoice $= "") {
|
||||||
|
%obj.client.oldVoice = %obj.client.voice;
|
||||||
|
}
|
||||||
|
%voice = getTaggedString(getTargetVoice(%obj.client.target));
|
||||||
|
%voiceNum = getSubStr(%voice,strLen(%voice)-1,1);
|
||||||
|
if (%obj.client.sex $= "Male") {
|
||||||
|
%obj.client.sex = "Female";
|
||||||
|
%obj.client.voiceTag = addTaggedString("Fem" @ %voiceNum);
|
||||||
|
setTargetVoice(%obj.client.target,%obj.client.voiceTag);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
%obj.client.sex = "Male";
|
||||||
|
%obj.client.voiceTag = addTaggedString("Male" @ %voiceNum);
|
||||||
|
setTargetVoice(%obj.client.target,%obj.client.voiceTag);
|
||||||
|
}
|
||||||
|
%obj.setArmor(%client.armor);
|
||||||
|
}
|
||||||
|
if(%gotSomething) {
|
||||||
|
%col.playAudio(0, CorpseLootingSound);
|
||||||
}
|
}
|
||||||
%obj.setArmor(%client.armor);
|
|
||||||
}
|
}
|
||||||
if(%gotSomething)
|
|
||||||
%col.playAudio(0, CorpseLootingSound);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
//else if((%colarmortype $= "LordRogZombieArmor" && %objiszomb != 1 && !%obj.rapierShield)) {
|
||||||
|
// if(%col.isAllyBot && !%col.isAttacking) {
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
// %obj.scriptkill($DamageType::Admin);
|
||||||
|
// %col.setDamageLevel(%col.getDamageLevel() - 10.0);
|
||||||
|
// %col.setVelocity("0 0 0");
|
||||||
|
// if(!%obj.iszombie) {
|
||||||
|
// ServerPlay3d(BOVHitSound, %obj.getPosition());
|
||||||
|
// %randMessage = getrandom(3)+1;
|
||||||
|
// switch(%randMessage) {
|
||||||
|
// case 1:
|
||||||
|
// MessageAll('MessageAll', "\c4"@$TWM2::ZombieName[8]@": Slice And Dice "@%obj.client.namebase@"!");
|
||||||
|
// case 2:
|
||||||
|
// MessageAll('MessageAll', "\c4"@$TWM2::ZombieName[8]@": Die... "@%obj.client.namebase@" Painfully.");
|
||||||
|
// case 3:
|
||||||
|
// MessageAll('MessageAll', "\c4"@$TWM2::ZombieName[8]@": Your life "@%obj.client.namebase@", is now mine!");
|
||||||
|
// default:
|
||||||
|
// MessageAll('MessageAll', "\c4"@$TWM2::ZombieName[8]@": Slice And Dice "@%obj.client.namebase@"!");
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
//else if((%colarmortype $= "ROGZombieArmor" && %objiszomb != 1 && !%obj.rapierShield && !%col.isPlayerRog)) {
|
||||||
|
// if(%col.isAllyBot && !%col.isAttacking) {
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
// %obj.scriptkill($DamageType::Admin);
|
||||||
|
// %col.setDamageLevel(%col.getDamageLevel() - 10.0);
|
||||||
|
// %col.setVelocity("0 0 0");
|
||||||
|
// if(!%obj.iszombie) {
|
||||||
|
// ServerPlay3d(BOVHitSound, %obj.getPosition());
|
||||||
|
// %randMessage = getrandom(3)+1;
|
||||||
|
// switch(%randMessage) {
|
||||||
|
// case 1:
|
||||||
|
// MessageAll('MessageAll', "\c4"@$TWM2::ZombieName[16]@": Slice And Dice "@%obj.client.namebase@"!");
|
||||||
|
// case 2:
|
||||||
|
// MessageAll('MessageAll', "\c4"@$TWM2::ZombieName[16]@": Die... "@%obj.client.namebase@" Painfully.");
|
||||||
|
// case 3:
|
||||||
|
// MessageAll('MessageAll', "\c4"@$TWM2::ZombieName[16]@": Your life "@%obj.client.namebase@", is now mine!");
|
||||||
|
// default:
|
||||||
|
// MessageAll('MessageAll', "\c4"@$TWM2::ZombieName[16]@": Slice And Dice "@%obj.client.namebase@"!");
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
|
||||||
function Player::resetSitMessage(%obj)
|
function Player::resetSitMessage(%obj)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,58 +1,58 @@
|
||||||
datablock SeekerProjectileData(JavelinMissile) {
|
datablock SeekerProjectileData(JavelinMissile) {
|
||||||
casingShapeName = "weapon_missile_casement.dts";
|
casingShapeName = "weapon_missile_casement.dts";
|
||||||
projectileShapeName = "weapon_missile_projectile.dts";
|
projectileShapeName = "weapon_missile_projectile.dts";
|
||||||
hasDamageRadius = true;
|
hasDamageRadius = true;
|
||||||
indirectDamage = 1.8; //Requires Lock
|
indirectDamage = 1.8; //Requires Lock
|
||||||
damageRadius = 18.0;
|
damageRadius = 18.0;
|
||||||
radiusDamageType = $DamageType::Missile;
|
radiusDamageType = $DamageType::Javelin;
|
||||||
kickBackStrength = 2000;
|
kickBackStrength = 2000;
|
||||||
|
|
||||||
ImageSource = "JavelinImage";
|
|
||||||
|
|
||||||
explosion = "SatchelMainExplosion";
|
ImageSource = "JavelinImage";
|
||||||
splash = MissileSplash;
|
|
||||||
velInheritFactor = 1.0; // to compensate for slow starting velocity, this value
|
|
||||||
// is cranked up to full so the missile doesn't start
|
|
||||||
// out behind the player when the player is moving
|
|
||||||
// very quickly - bramage
|
|
||||||
|
|
||||||
baseEmitter = MissileSmokeEmitter;
|
explosion = "SatchelMainExplosion";
|
||||||
delayEmitter = MissileFireEmitter;
|
splash = MissileSplash;
|
||||||
puffEmitter = MissilePuffEmitter;
|
velInheritFactor = 1.0; // to compensate for slow starting velocity, this value
|
||||||
bubbleEmitter = GrenadeBubbleEmitter;
|
// is cranked up to full so the missile doesn't start
|
||||||
bubbleEmitTime = 1.0;
|
// out behind the player when the player is moving
|
||||||
|
// very quickly - bramage
|
||||||
|
|
||||||
exhaustEmitter = MissileLauncherExhaustEmitter;
|
baseEmitter = MissileSmokeEmitter;
|
||||||
exhaustTimeMs = 300;
|
delayEmitter = MissileFireEmitter;
|
||||||
exhaustNodeName = "muzzlePoint1";
|
puffEmitter = MissilePuffEmitter;
|
||||||
|
bubbleEmitter = GrenadeBubbleEmitter;
|
||||||
|
bubbleEmitTime = 1.0;
|
||||||
|
|
||||||
lifetimeMS = 30000;
|
exhaustEmitter = MissileLauncherExhaustEmitter;
|
||||||
muzzleVelocity = 10.0;
|
exhaustTimeMs = 300;
|
||||||
maxVelocity = 150.0;
|
exhaustNodeName = "muzzlePoint1";
|
||||||
turningSpeed = 110.0;
|
|
||||||
acceleration = 350.0;
|
|
||||||
|
|
||||||
proximityRadius = 3;
|
lifetimeMS = 30000;
|
||||||
|
muzzleVelocity = 10.0;
|
||||||
|
maxVelocity = 150.0;
|
||||||
|
turningSpeed = 110.0;
|
||||||
|
acceleration = 350.0;
|
||||||
|
|
||||||
terrainAvoidanceSpeed = 180;
|
proximityRadius = 3;
|
||||||
terrainScanAhead = 25;
|
|
||||||
terrainHeightFail = 12;
|
|
||||||
terrainAvoidanceRadius = 100;
|
|
||||||
|
|
||||||
flareDistance = 200;
|
terrainAvoidanceSpeed = 180;
|
||||||
flareAngle = 30;
|
terrainScanAhead = 25;
|
||||||
|
terrainHeightFail = 12;
|
||||||
|
terrainAvoidanceRadius = 100;
|
||||||
|
|
||||||
sound = MissileProjectileSound;
|
flareDistance = 200;
|
||||||
|
flareAngle = 30;
|
||||||
|
|
||||||
hasLight = true;
|
sound = MissileProjectileSound;
|
||||||
lightRadius = 5.0;
|
|
||||||
lightColor = "0.2 0.05 0";
|
|
||||||
|
|
||||||
useFlechette = true;
|
hasLight = true;
|
||||||
flechetteDelayMs = 550;
|
lightRadius = 5.0;
|
||||||
casingDeb = FlechetteDebris;
|
lightColor = "0.2 0.05 0";
|
||||||
|
|
||||||
explodeOnWaterImpact = false;
|
useFlechette = true;
|
||||||
|
flechetteDelayMs = 550;
|
||||||
|
casingDeb = FlechetteDebris;
|
||||||
|
|
||||||
|
explodeOnWaterImpact = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -61,183 +61,180 @@ datablock SeekerProjectileData(JavelinMissile) {
|
||||||
// Ammo
|
// Ammo
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
|
|
||||||
datablock ItemData(JavelinAmmo)
|
datablock ItemData(JavelinAmmo) {
|
||||||
{
|
className = Ammo;
|
||||||
className = Ammo;
|
catagory = "Ammo";
|
||||||
catagory = "Ammo";
|
shapeFile = "ammo_missile.dts";
|
||||||
shapeFile = "ammo_missile.dts";
|
mass = 1;
|
||||||
mass = 1;
|
elasticity = 0.2;
|
||||||
elasticity = 0.2;
|
friction = 0.6;
|
||||||
friction = 0.6;
|
pickupRadius = 2;
|
||||||
pickupRadius = 2;
|
|
||||||
pickUpName = "some javelin rockets";
|
pickUpName = "some javelin rockets";
|
||||||
|
|
||||||
computeCRC = true;
|
computeCRC = true;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
//--------------------------------------------------------------------------
|
//--------------------------------------------------------------------------
|
||||||
// Weapon
|
// Weapon
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
datablock ItemData(Javelin)
|
datablock ItemData(Javelin) {
|
||||||
{
|
className = Weapon;
|
||||||
className = Weapon;
|
catagory = "Spawn Items";
|
||||||
catagory = "Spawn Items";
|
shapeFile = "weapon_mortar.dts";
|
||||||
shapeFile = "weapon_mortar.dts";
|
image = JavelinImage;
|
||||||
image = JavelinImage;
|
mass = 1;
|
||||||
mass = 1;
|
elasticity = 0.2;
|
||||||
elasticity = 0.2;
|
friction = 0.6;
|
||||||
friction = 0.6;
|
pickupRadius = 2;
|
||||||
pickupRadius = 2;
|
|
||||||
pickUpName = "a javelin launcher";
|
pickUpName = "a javelin launcher";
|
||||||
|
|
||||||
computeCRC = true;
|
computeCRC = true;
|
||||||
emap = true;
|
emap = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ShapeBaseImageData(JavelinImage) {
|
datablock ShapeBaseImageData(JavelinImage) {
|
||||||
className = WeaponImage;
|
className = WeaponImage;
|
||||||
shapeFile = "weapon_mortar.dts";
|
shapeFile = "weapon_mortar.dts";
|
||||||
item = Javelin;
|
item = Javelin;
|
||||||
ammo = JavelinAmmo;
|
ammo = JavelinAmmo;
|
||||||
offset = "0 0 0";
|
offset = "0 0 0";
|
||||||
armThread = lookms;
|
armThread = lookms;
|
||||||
emap = true;
|
emap = true;
|
||||||
|
|
||||||
projectile = JavelinMissile;
|
projectile = JavelinMissile;
|
||||||
projectileType = SeekerProjectile;
|
projectileType = SeekerProjectile;
|
||||||
|
|
||||||
isSeeker = true;
|
isSeeker = true;
|
||||||
seekRadius = 700;
|
seekRadius = 700;
|
||||||
maxSeekAngle = 8;
|
maxSeekAngle = 8;
|
||||||
seekTime = 0.5;
|
seekTime = 0.5;
|
||||||
minSeekHeat = 0.01; // the heat that must be present on a target to lock it.
|
minSeekHeat = 0.01; // the heat that must be present on a target to lock it.
|
||||||
|
|
||||||
//ClipStuff
|
|
||||||
ClipName = "JavelinClip";
|
|
||||||
ClipPickupName["JavelinClip"] = "A Few Javelin Missiles";
|
|
||||||
ShowsClipInHud = 1;
|
|
||||||
ClipReloadTime = 6;
|
|
||||||
ClipReturn = 1;
|
|
||||||
InitialClips = 2;
|
|
||||||
//
|
|
||||||
HasChallenges = 1;
|
|
||||||
ChallengeCt = 7;
|
|
||||||
Challenge[1] = "Javelin Hunter\t100\t500\tLaser";
|
|
||||||
Challenge[2] = "Javelin Expert\t250\t1000\tNone";
|
|
||||||
Challenge[3] = "Javelin Mastery\t500\t2500\tNone";
|
|
||||||
Challenge[4] = "Javelin Bronze Commendation\t1000\t10000\tNone";
|
|
||||||
Challenge[5] = "Javelin Silver Commendation\t2500\t25000\tNone";
|
|
||||||
Challenge[6] = "Javelin Gold Commendation\t5000\t50000\tNone";
|
|
||||||
Challenge[7] = "Javelin Titan Commendation\t10000\t75000\tNone";
|
|
||||||
Upgrade[1] = "Laser";
|
|
||||||
GunName = "Javelin";
|
|
||||||
|
|
||||||
RankRequire = $TWM2::RankRequire["Javelin"];
|
//ClipStuff
|
||||||
|
ClipName = "JavelinClip";
|
||||||
|
ClipPickupName["JavelinClip"] = "A Few Javelin Missiles";
|
||||||
|
ShowsClipInHud = 1;
|
||||||
|
ClipReloadTime = 6;
|
||||||
|
ClipReturn = 1;
|
||||||
|
InitialClips = 2;
|
||||||
|
//
|
||||||
|
HasChallenges = 1;
|
||||||
|
ChallengeCt = 7;
|
||||||
|
Challenge[1] = "Javelin Hunter\t100\t500\tLaser";
|
||||||
|
Challenge[2] = "Javelin Expert\t250\t1000\tNone";
|
||||||
|
Challenge[3] = "Javelin Mastery\t500\t2500\tNone";
|
||||||
|
Challenge[4] = "Javelin Bronze Commendation\t1000\t10000\tNone";
|
||||||
|
Challenge[5] = "Javelin Silver Commendation\t2500\t25000\tNone";
|
||||||
|
Challenge[6] = "Javelin Gold Commendation\t5000\t50000\tNone";
|
||||||
|
Challenge[7] = "Javelin Titan Commendation\t10000\t75000\tNone";
|
||||||
|
Upgrade[1] = "Laser";
|
||||||
|
GunName = "Javelin";
|
||||||
|
|
||||||
// only target objects outside this range
|
RankRequire = $TWM2::RankRequire["Javelin"];
|
||||||
minTargetingDistance = 80;
|
|
||||||
|
|
||||||
stateName[0] = "Activate";
|
// only target objects outside this range
|
||||||
stateTransitionOnTimeout[0] = "ActivateReady";
|
minTargetingDistance = 80;
|
||||||
stateTimeoutValue[0] = 0.5;
|
|
||||||
stateSequence[0] = "Activate";
|
|
||||||
stateSound[0] = MissileSwitchSound;
|
|
||||||
|
|
||||||
stateName[1] = "ActivateReady";
|
stateName[0] = "Activate";
|
||||||
stateTransitionOnLoaded[1] = "Ready";
|
stateTransitionOnTimeout[0] = "ActivateReady";
|
||||||
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
stateTimeoutValue[0] = 0.5;
|
||||||
|
stateSequence[0] = "Activate";
|
||||||
|
stateSound[0] = MissileSwitchSound;
|
||||||
|
|
||||||
stateName[2] = "Ready";
|
stateName[1] = "ActivateReady";
|
||||||
stateTransitionOnNoAmmo[2] = "NoAmmo";
|
stateTransitionOnLoaded[1] = "Ready";
|
||||||
stateTransitionOnTriggerDown[2] = "CheckWet";
|
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
||||||
|
|
||||||
stateName[3] = "Fire";
|
stateName[2] = "Ready";
|
||||||
stateTransitionOnTimeout[3] = "Reload";
|
stateTransitionOnNoAmmo[2] = "NoAmmo";
|
||||||
stateTimeoutValue[3] = 0.4;
|
stateTransitionOnTriggerDown[2] = "CheckWet";
|
||||||
stateFire[3] = true;
|
|
||||||
stateRecoil[3] = LightRecoil;
|
|
||||||
stateAllowImageChange[3] = false;
|
|
||||||
stateSequence[3] = "Fire";
|
|
||||||
stateScript[3] = "onFire";
|
|
||||||
stateSound[3] = MissileFireSound;
|
|
||||||
|
|
||||||
stateName[4] = "Reload";
|
stateName[3] = "Fire";
|
||||||
stateTransitionOnNoAmmo[4] = "NoAmmo";
|
stateTransitionOnTimeout[3] = "Reload";
|
||||||
stateTransitionOnTimeout[4] = "Ready";
|
stateTimeoutValue[3] = 0.4;
|
||||||
stateTimeoutValue[4] = 2.5;
|
stateFire[3] = true;
|
||||||
stateAllowImageChange[4] = false;
|
stateRecoil[3] = LightRecoil;
|
||||||
stateSequence[4] = "Reload";
|
stateAllowImageChange[3] = false;
|
||||||
stateSound[4] = MissileReloadSound;
|
stateSequence[3] = "Fire";
|
||||||
|
stateScript[3] = "onFire";
|
||||||
|
stateSound[3] = MissileFireSound;
|
||||||
|
|
||||||
stateName[5] = "NoAmmo";
|
stateName[4] = "Reload";
|
||||||
stateTransitionOnAmmo[5] = "Reload";
|
stateTransitionOnNoAmmo[4] = "NoAmmo";
|
||||||
stateSequence[5] = "NoAmmo";
|
stateTransitionOnTimeout[4] = "Ready";
|
||||||
stateTransitionOnTriggerDown[5] = "DryFire";
|
stateTimeoutValue[4] = 2.5;
|
||||||
|
stateAllowImageChange[4] = false;
|
||||||
|
stateSequence[4] = "Reload";
|
||||||
|
stateSound[4] = MissileReloadSound;
|
||||||
|
|
||||||
stateName[6] = "DryFire";
|
stateName[5] = "NoAmmo";
|
||||||
stateSound[6] = MissileDryFireSound;
|
stateTransitionOnAmmo[5] = "Reload";
|
||||||
stateTimeoutValue[6] = 1.0;
|
stateSequence[5] = "NoAmmo";
|
||||||
stateTransitionOnTimeout[6] = "ActivateReady";
|
stateTransitionOnTriggerDown[5] = "DryFire";
|
||||||
|
|
||||||
stateName[7] = "CheckTarget";
|
stateName[6] = "DryFire";
|
||||||
stateTransitionOnNoTarget[7] = "DryFire";
|
stateSound[6] = MissileDryFireSound;
|
||||||
stateTransitionOnTarget[7] = "Fire";
|
stateTimeoutValue[6] = 1.0;
|
||||||
|
stateTransitionOnTimeout[6] = "ActivateReady";
|
||||||
|
|
||||||
stateName[8] = "CheckWet";
|
stateName[7] = "CheckTarget";
|
||||||
stateTransitionOnWet[8] = "WetFire";
|
stateTransitionOnNoTarget[7] = "DryFire";
|
||||||
stateTransitionOnNotWet[8] = "CheckTarget";
|
stateTransitionOnTarget[7] = "Fire";
|
||||||
|
|
||||||
stateName[9] = "WetFire";
|
stateName[8] = "CheckWet";
|
||||||
stateTransitionOnNoAmmo[9] = "NoAmmo";
|
stateTransitionOnWet[8] = "WetFire";
|
||||||
stateTransitionOnTimeout[9] = "Reload";
|
stateTransitionOnNotWet[8] = "CheckTarget";
|
||||||
stateSound[9] = MissileFireSound;
|
|
||||||
stateRecoil[3] = LightRecoil;
|
stateName[9] = "WetFire";
|
||||||
stateTimeoutValue[9] = 0.4;
|
stateTransitionOnNoAmmo[9] = "NoAmmo";
|
||||||
stateScript[9] = "onWetFire";
|
stateTransitionOnTimeout[9] = "Reload";
|
||||||
stateAllowImageChange[9] = false;
|
stateSound[9] = MissileFireSound;
|
||||||
|
stateRecoil[3] = LightRecoil;
|
||||||
|
stateTimeoutValue[9] = 0.4;
|
||||||
|
stateScript[9] = "onWetFire";
|
||||||
|
stateAllowImageChange[9] = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
function JavelinImage::onFire(%data,%obj,%slot) {
|
function JavelinImage::onFire(%data,%obj,%slot) {
|
||||||
%obj.decInventory(%data.ammo,1);
|
%obj.decInventory(%data.ammo,1);
|
||||||
if(%obj.inv[%data.ammo] == 0) { //Added Phantom139, TWM2
|
if(%obj.inv[%data.ammo] == 0) { //Added Phantom139, TWM2
|
||||||
AttemptReload(%data, %obj, %slot);
|
AttemptReload(%data, %obj, %slot);
|
||||||
}
|
}
|
||||||
|
|
||||||
%p = new (SeekerProjectile)() {
|
%p = new (SeekerProjectile)() {
|
||||||
dataBlock = JavelinMissile;
|
dataBlock = JavelinMissile;
|
||||||
initialDirection = "0 0 10";
|
initialDirection = "0 0 10";
|
||||||
initialPosition = %obj.getPosition();
|
initialPosition = %obj.getPosition();
|
||||||
damageFactor = 1;
|
damageFactor = 1;
|
||||||
sourceObject = %obj;
|
sourceObject = %obj;
|
||||||
};
|
};
|
||||||
%p.WeaponImageSource = %data.getName();
|
%p.WeaponImageSource = %data.getName();
|
||||||
|
|
||||||
MissileSet.add(%p);
|
|
||||||
|
|
||||||
%target = %obj.getLockedTarget();
|
MissileSet.add(%p);
|
||||||
if(%target) {
|
|
||||||
//go up first!!!
|
%target = %obj.getLockedTarget();
|
||||||
//%p.setPositionTarget(vectorAdd(%obj.getPosition(), "0 0 200"));
|
if(%target) {
|
||||||
%p.schedule(3500, "setObjectTarget", %target);
|
//go up first!!!
|
||||||
schedule(3501, 0, "SetMissileTargeted", %target, %p);
|
//%p.setPositionTarget(vectorAdd(%obj.getPosition(), "0 0 200"));
|
||||||
}
|
%p.schedule(3500, "setObjectTarget", %target);
|
||||||
else if(%obj.isLocked()) {
|
schedule(3501, 0, "SetMissileTargeted", %target, %p);
|
||||||
//%p.setPositionTarget(vectorAdd(%obj.getPosition(), "0 0 200"));
|
}
|
||||||
//echo("Javelin Lock: "@%obj.getLockedPosition()@"");
|
else if(%obj.isLocked()) {
|
||||||
%p.JavBeac = new BeaconObject() {
|
//%p.setPositionTarget(vectorAdd(%obj.getPosition(), "0 0 200"));
|
||||||
dataBlock = "BomberBeacon";
|
//echo("Javelin Lock: "@%obj.getLockedPosition()@"");
|
||||||
beaconType = "vehicle";
|
%p.JavBeac = new BeaconObject() {
|
||||||
position = %obj.getLockedPosition();
|
dataBlock = "BomberBeacon";
|
||||||
};
|
beaconType = "vehicle";
|
||||||
%p.schedule(3500, "setObjectTarget", %p.JavBeac);
|
position = %obj.getLockedPosition();
|
||||||
schedule(3500, 0, "SetMissileTargeted", %p.JavBeac, %p);
|
};
|
||||||
%p.JavBeac.schedule(10000, "Delete");
|
%p.schedule(3500, "setObjectTarget", %p.JavBeac);
|
||||||
}
|
schedule(3500, 0, "SetMissileTargeted", %p.JavBeac, %p);
|
||||||
else {
|
%p.JavBeac.schedule(10000, "Delete");
|
||||||
//no lock, this missile must self destruct...
|
}
|
||||||
%p.setNoTarget();
|
else {
|
||||||
%p.getDatablock().onExplode(%p, %p.getPosition(), 1);
|
//no lock, this missile must self destruct...
|
||||||
}
|
%p.setNoTarget();
|
||||||
|
%p.getDatablock().onExplode(%p, %p.getPosition(), 1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,236 +1,229 @@
|
||||||
datablock SeekerProjectileData(RPGMissile) {
|
datablock SeekerProjectileData(RPGMissile) {
|
||||||
casingShapeName = "weapon_missile_casement.dts";
|
casingShapeName = "weapon_missile_casement.dts";
|
||||||
projectileShapeName = "grenade.dts";
|
projectileShapeName = "grenade.dts";
|
||||||
hasDamageRadius = true;
|
hasDamageRadius = true;
|
||||||
indirectDamage = 1.3; //TWM2 2.1, Increased to 1.3 from 0.8
|
indirectDamage = 1.3; //TWM2 2.1, Increased to 1.3 from 0.8
|
||||||
damageRadius = 8.0;
|
damageRadius = 8.0;
|
||||||
radiusDamageType = $DamageType::RPG;
|
radiusDamageType = $DamageType::RPG;
|
||||||
kickBackStrength = 3500;
|
kickBackStrength = 3500;
|
||||||
|
|
||||||
ImageSource = "RPGImage";
|
ImageSource = "RPGImage";
|
||||||
|
|
||||||
explosion = "HandGrenadeExplosion";
|
explosion = "HandGrenadeExplosion";
|
||||||
splash = MissileSplash;
|
splash = MissileSplash;
|
||||||
velInheritFactor = 1.0; // to compensate for slow starting velocity, this value
|
velInheritFactor = 1.0; // to compensate for slow starting velocity, this value
|
||||||
// is cranked up to full so the missile doesn't start
|
// is cranked up to full so the missile doesn't start
|
||||||
// out behind the player when the player is moving
|
// out behind the player when the player is moving
|
||||||
// very quickly - bramage
|
// very quickly - bramage
|
||||||
|
|
||||||
baseEmitter = MissileSmokeEmitter;
|
baseEmitter = MissileSmokeEmitter;
|
||||||
delayEmitter = MissileFireEmitter;
|
delayEmitter = MissileFireEmitter;
|
||||||
puffEmitter = MissilePuffEmitter;
|
puffEmitter = MissilePuffEmitter;
|
||||||
bubbleEmitter = GrenadeBubbleEmitter;
|
bubbleEmitter = GrenadeBubbleEmitter;
|
||||||
bubbleEmitTime = 1.0;
|
bubbleEmitTime = 1.0;
|
||||||
|
|
||||||
exhaustEmitter = MissileLauncherExhaustEmitter;
|
exhaustEmitter = MissileLauncherExhaustEmitter;
|
||||||
exhaustTimeMs = 300;
|
exhaustTimeMs = 300;
|
||||||
exhaustNodeName = "muzzlePoint1";
|
exhaustNodeName = "muzzlePoint1";
|
||||||
|
|
||||||
lifetimeMS = 5000; // z0dd - ZOD, 4/14/02. Was 6000
|
lifetimeMS = 5000; // z0dd - ZOD, 4/14/02. Was 6000
|
||||||
muzzleVelocity = 100.0;
|
muzzleVelocity = 100.0;
|
||||||
maxVelocity = 350.0; // z0dd - ZOD, 4/14/02. Was 80.0
|
maxVelocity = 350.0; // z0dd - ZOD, 4/14/02. Was 80.0
|
||||||
turningSpeed = 54.0;
|
turningSpeed = 54.0;
|
||||||
acceleration = 50.0;
|
acceleration = 50.0;
|
||||||
|
|
||||||
explodeOnDeath = true;
|
explodeOnDeath = true;
|
||||||
|
|
||||||
proximityRadius = 3;
|
proximityRadius = 3;
|
||||||
|
|
||||||
sound = MissileProjectileSound;
|
sound = MissileProjectileSound;
|
||||||
|
|
||||||
hasLight = true;
|
hasLight = true;
|
||||||
lightRadius = 3.0;
|
lightRadius = 3.0;
|
||||||
lightColor = "0.2 0.05 0";
|
lightColor = "0.2 0.05 0";
|
||||||
|
|
||||||
useFlechette = true;
|
useFlechette = true;
|
||||||
flechetteDelayMs = 10;
|
flechetteDelayMs = 10;
|
||||||
casingDeb = FlechetteDebris;
|
casingDeb = FlechetteDebris;
|
||||||
|
|
||||||
explodeOnWaterImpact = true;
|
explodeOnWaterImpact = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
//--------------------------------------------------------------------------
|
//--------------------------------------------------------------------------
|
||||||
// Ammo
|
// Ammo
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
|
|
||||||
datablock ItemData(RPGAmmo)
|
datablock ItemData(RPGAmmo) {
|
||||||
{
|
className = Ammo;
|
||||||
className = Ammo;
|
catagory = "Ammo";
|
||||||
catagory = "Ammo";
|
shapeFile = "ammo_missile.dts";
|
||||||
shapeFile = "ammo_missile.dts";
|
mass = 1;
|
||||||
mass = 1;
|
elasticity = 0.2;
|
||||||
elasticity = 0.2;
|
friction = 0.6;
|
||||||
friction = 0.6;
|
pickupRadius = 2;
|
||||||
pickupRadius = 2;
|
|
||||||
pickUpName = "Some RPGs";
|
pickUpName = "Some RPGs";
|
||||||
|
|
||||||
computeCRC = true;
|
computeCRC = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
//--------------------------------------------------------------------------
|
//--------------------------------------------------------------------------
|
||||||
// Weapon
|
// Weapon
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
datablock ItemData(RPG)
|
datablock ItemData(RPG) {
|
||||||
{
|
className = Weapon;
|
||||||
className = Weapon;
|
catagory = "Spawn Items";
|
||||||
catagory = "Spawn Items";
|
shapeFile = "weapon_grenade_launcher.dts";
|
||||||
shapeFile = "weapon_grenade_launcher.dts";
|
image = RPGImage;
|
||||||
image = RPGImage;
|
mass = 1;
|
||||||
mass = 1;
|
elasticity = 0.2;
|
||||||
elasticity = 0.2;
|
friction = 0.6;
|
||||||
friction = 0.6;
|
pickupRadius = 2;
|
||||||
pickupRadius = 2;
|
pickUpName = "an RPG";
|
||||||
pickUpName = "an RPG";
|
|
||||||
|
|
||||||
computeCRC = true;
|
computeCRC = true;
|
||||||
emap = true;
|
emap = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ShapeBaseImageData(RPGImage)
|
datablock ShapeBaseImageData(RPGImage) {
|
||||||
{
|
className = WeaponImage;
|
||||||
className = WeaponImage;
|
shapeFile = "weapon_grenade_launcher.dts";
|
||||||
shapeFile = "weapon_grenade_launcher.dts";
|
item = RPG;
|
||||||
item = RPG;
|
ammo = RPGAmmo;
|
||||||
ammo = RPGAmmo;
|
offset = "0 -1 0";
|
||||||
offset = "0 -1 0";
|
armThread = lookms;
|
||||||
armThread = lookms;
|
emap = true;
|
||||||
emap = true;
|
|
||||||
|
|
||||||
projectile = RPGMissile;
|
projectile = RPGMissile;
|
||||||
projectileType = seekerprojectile;
|
projectileType = seekerprojectile;
|
||||||
projectileSpread = 1.0 / 1000.0;
|
projectileSpread = 1.0 / 1000.0;
|
||||||
|
|
||||||
//ClipStuff
|
|
||||||
ClipName = "RPGClip";
|
|
||||||
ClipPickupName["RPGClip"] = "A Few RPGs";
|
|
||||||
ShowsClipInHud = 1;
|
|
||||||
ClipReloadTime = 5;
|
|
||||||
ClipReturn = 1;
|
|
||||||
InitialClips = 7;
|
|
||||||
//
|
|
||||||
HasChallenges = 1;
|
|
||||||
ChallengeCt = 9;
|
|
||||||
Challenge[1] = "RPG Killer\t50\t100\tNone";
|
|
||||||
Challenge[2] = "RPG Extremist\t100\t150\tNone";
|
|
||||||
Challenge[3] = "RPG Expert\t250\t250\tNone";
|
|
||||||
Challenge[4] = "RPG Master\t500\t500\tEnhanced Explosives";
|
|
||||||
Challenge[5] = "RPG Legend\t1000\t1000\tSpread Neutralizer";
|
|
||||||
Challenge[6] = "RPG Bronze Commendation\t2500\t10000\tNone";
|
|
||||||
Challenge[7] = "RPG Silver Commendation\t5000\t25000\tNone";
|
|
||||||
Challenge[8] = "RPG Gold Commendation\t10000\t50000\tNone";
|
|
||||||
Challenge[9] = "RPG Titan Commendation\t25000\t75000\tNone";
|
|
||||||
Upgrade[1] = "RPG Explosives";
|
|
||||||
Upgrade[2] = "Spread Neutralizer";
|
|
||||||
GunName = "RPG-7";
|
|
||||||
|
|
||||||
RankRequire = $TWM2::RankRequire["RPG7"];
|
|
||||||
|
|
||||||
stateName[0] = "Activate";
|
//ClipStuff
|
||||||
stateTransitionOnTimeout[0] = "ActivateReady";
|
ClipName = "RPGClip";
|
||||||
stateTimeoutValue[0] = 2.0;
|
ClipPickupName["RPGClip"] = "A Few RPGs";
|
||||||
stateSequence[0] = "Activate";
|
ShowsClipInHud = 1;
|
||||||
stateSound[0] = MissileSwitchSound;
|
ClipReloadTime = 5;
|
||||||
|
ClipReturn = 1;
|
||||||
|
InitialClips = 7;
|
||||||
|
//
|
||||||
|
HasChallenges = 1;
|
||||||
|
ChallengeCt = 9;
|
||||||
|
Challenge[1] = "RPG Killer\t50\t100\tNone";
|
||||||
|
Challenge[2] = "RPG Extremist\t100\t150\tNone";
|
||||||
|
Challenge[3] = "RPG Expert\t250\t250\tNone";
|
||||||
|
Challenge[4] = "RPG Master\t500\t500\tEnhanced Explosives";
|
||||||
|
Challenge[5] = "RPG Legend\t1000\t1000\tSpread Neutralizer";
|
||||||
|
Challenge[6] = "RPG Bronze Commendation\t2500\t10000\tNone";
|
||||||
|
Challenge[7] = "RPG Silver Commendation\t5000\t25000\tNone";
|
||||||
|
Challenge[8] = "RPG Gold Commendation\t10000\t50000\tNone";
|
||||||
|
Challenge[9] = "RPG Titan Commendation\t25000\t75000\tNone";
|
||||||
|
Upgrade[1] = "RPG Explosives";
|
||||||
|
Upgrade[2] = "Spread Neutralizer";
|
||||||
|
GunName = "RPG-7";
|
||||||
|
|
||||||
stateName[1] = "ActivateReady";
|
RankRequire = $TWM2::RankRequire["RPG7"];
|
||||||
stateTransitionOnLoaded[1] = "Ready";
|
|
||||||
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
|
||||||
|
|
||||||
stateName[2] = "Ready";
|
stateName[0] = "Activate";
|
||||||
stateTransitionOnNoAmmo[2] = "NoAmmo";
|
stateTransitionOnTimeout[0] = "ActivateReady";
|
||||||
stateTransitionOnTriggerDown[2] = "CheckWet";
|
stateTimeoutValue[0] = 2.0;
|
||||||
|
stateSequence[0] = "Activate";
|
||||||
|
stateSound[0] = MissileSwitchSound;
|
||||||
|
|
||||||
stateName[3] = "Fire";
|
stateName[1] = "ActivateReady";
|
||||||
stateTransitionOnTimeout[3] = "Reload";
|
stateTransitionOnLoaded[1] = "Ready";
|
||||||
stateTimeoutValue[3] = 0.4;
|
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
||||||
stateFire[3] = true;
|
|
||||||
stateRecoil[3] = LightRecoil;
|
|
||||||
stateAllowImageChange[3] = false;
|
|
||||||
stateSequence[3] = "Fire";
|
|
||||||
stateScript[3] = "onFire";
|
|
||||||
stateSound[3] = MissileFireSound;
|
|
||||||
|
|
||||||
stateName[4] = "Reload";
|
stateName[2] = "Ready";
|
||||||
stateTransitionOnNoAmmo[4] = "NoAmmo";
|
stateTransitionOnNoAmmo[2] = "NoAmmo";
|
||||||
stateTransitionOnTimeout[4] = "Ready";
|
stateTransitionOnTriggerDown[2] = "CheckWet";
|
||||||
stateTimeoutValue[4] = 0.1;
|
|
||||||
stateAllowImageChange[4] = false;
|
|
||||||
stateSequence[4] = "Reload";
|
|
||||||
stateSound[4] = MissileReloadSound;
|
|
||||||
|
|
||||||
stateName[5] = "NoAmmo";
|
stateName[3] = "Fire";
|
||||||
stateTransitionOnAmmo[5] = "Reload";
|
stateTransitionOnTimeout[3] = "Reload";
|
||||||
stateSequence[5] = "NoAmmo";
|
stateTimeoutValue[3] = 0.4;
|
||||||
stateTransitionOnTriggerDown[5] = "DryFire";
|
stateFire[3] = true;
|
||||||
|
stateRecoil[3] = LightRecoil;
|
||||||
|
stateAllowImageChange[3] = false;
|
||||||
|
stateSequence[3] = "Fire";
|
||||||
|
stateScript[3] = "onFire";
|
||||||
|
stateSound[3] = MissileFireSound;
|
||||||
|
|
||||||
stateName[6] = "DryFire";
|
stateName[4] = "Reload";
|
||||||
stateSound[6] = MissileDryFireSound;
|
stateTransitionOnNoAmmo[4] = "NoAmmo";
|
||||||
stateTimeoutValue[6] = 1.0;
|
stateTransitionOnTimeout[4] = "Ready";
|
||||||
stateTransitionOnTimeout[6] = "ActivateReady";
|
stateTimeoutValue[4] = 0.1;
|
||||||
|
stateAllowImageChange[4] = false;
|
||||||
|
stateSequence[4] = "Reload";
|
||||||
|
stateSound[4] = MissileReloadSound;
|
||||||
|
|
||||||
stateName[7] = "CheckTarget";
|
stateName[5] = "NoAmmo";
|
||||||
stateTransitionOnNoTarget[7] = "Fire";
|
stateTransitionOnAmmo[5] = "Reload";
|
||||||
stateTransitionOnTarget[7] = "Fire";
|
stateSequence[5] = "NoAmmo";
|
||||||
|
stateTransitionOnTriggerDown[5] = "DryFire";
|
||||||
|
|
||||||
stateName[8] = "CheckWet";
|
stateName[6] = "DryFire";
|
||||||
stateTransitionOnWet[8] = "DryFire";
|
stateSound[6] = MissileDryFireSound;
|
||||||
stateTransitionOnNotWet[8] = "CheckTarget";
|
stateTimeoutValue[6] = 1.0;
|
||||||
|
stateTransitionOnTimeout[6] = "ActivateReady";
|
||||||
|
|
||||||
stateName[9] = "WetFire";
|
stateName[7] = "CheckTarget";
|
||||||
stateTransitionOnNoAmmo[9] = "NoAmmo";
|
stateTransitionOnNoTarget[7] = "Fire";
|
||||||
stateTransitionOnTimeout[9] = "Reload";
|
stateTransitionOnTarget[7] = "Fire";
|
||||||
stateTimeoutValue[9] = 0.4;
|
|
||||||
stateScript[9] = "onWetFire";
|
stateName[8] = "CheckWet";
|
||||||
stateAllowImageChange[9] = false;
|
stateTransitionOnWet[8] = "DryFire";
|
||||||
|
stateTransitionOnNotWet[8] = "CheckTarget";
|
||||||
|
|
||||||
|
stateName[9] = "WetFire";
|
||||||
|
stateTransitionOnNoAmmo[9] = "NoAmmo";
|
||||||
|
stateTransitionOnTimeout[9] = "Reload";
|
||||||
|
stateTimeoutValue[9] = 0.4;
|
||||||
|
stateScript[9] = "onWetFire";
|
||||||
|
stateAllowImageChange[9] = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
function RPGImage::OnFire(%data, %obj, %slot) {
|
function RPGImage::OnFire(%data, %obj, %slot) {
|
||||||
// if($TWM2::PlayingSabo) { Inv. Ban lifted TWM2 1.8
|
// if($TWM2::PlayingSabo) { Inv. Ban lifted TWM2 1.8
|
||||||
// MessageClient(%thrower.client, 'MsgC4IsBanned', "\c5RPGs are banned in this game mode");
|
// MessageClient(%thrower.client, 'MsgC4IsBanned', "\c5RPGs are banned in this game mode");
|
||||||
// return;
|
// return;
|
||||||
// }
|
// }
|
||||||
%p = Parent::OnFire(%data, %obj, %slot);
|
%p = Parent::OnFire(%data, %obj, %slot);
|
||||||
if(!%obj.client.UpgradeOn("Spread Neutralizer", %data.getName())) {
|
if(!%obj.client.UpgradeOn("Spread Neutralizer", %data.getName())) {
|
||||||
schedule(500, 0, "RPGRandomMovement", %p);
|
schedule(500, 0, "RPGRandomMovement", %p);
|
||||||
}
|
}
|
||||||
if(%obj.client.UpgradeOn("Enhanced Explosives", %data.getName())) {
|
if(%obj.client.UpgradeOn("Enhanced Explosives", %data.getName())) {
|
||||||
%p.damageFactor = 5; //heh
|
%p.damageFactor = 5; //heh
|
||||||
}
|
}
|
||||||
%p.ticksleft = 10;
|
%p.ticksleft = 10;
|
||||||
}
|
}
|
||||||
|
|
||||||
function RPGRandomMovement(%p) {
|
function RPGRandomMovement(%p) {
|
||||||
if(!isObject(%p)) {
|
if(!isObject(%p)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
%fw = %p.initialDirection; //current direction
|
if(%p.ticksleft <= 0) { //time up!
|
||||||
%x = (getRandom() - 0.5) * 2 * 3.1415926 * (25/1000);
|
%p.getDatablock().onExplode(%p, %p.getPosition(), 1);
|
||||||
%y = (getRandom() - 0.5) * 2 * 3.1415926 * (25/1000);
|
%p.delete();
|
||||||
%z = (getRandom() - 0.5) * 2 * 3.1415926 * (10/1000);
|
return;
|
||||||
%mat = MatrixCreateFromEuler(%x @ " " @ %y @ " " @ %z);
|
}
|
||||||
%newvector = MatrixMulVector(%mat, %fw);
|
%fw = %p.initialDirection; //current direction
|
||||||
//now lets use basic torque operations to spawn a new RPG missile going the new direction
|
%x = (getRandom() - 0.5) * 2 * 3.1415926 * (25/1000);
|
||||||
%pnew = new (SeekerProjectile)() {
|
%y = (getRandom() - 0.5) * 2 * 3.1415926 * (25/1000);
|
||||||
dataBlock = RPGMissile;
|
%z = (getRandom() - 0.5) * 2 * 3.1415926 * (10/1000);
|
||||||
initialDirection = %newvector;
|
%mat = MatrixCreateFromEuler(%x @ " " @ %y @ " " @ %z);
|
||||||
initialPosition = %p.getPosition();
|
%newvector = MatrixMulVector(%mat, %fw);
|
||||||
damageFactor = %p.damageFactor;
|
//now lets use basic torque operations to spawn a new RPG missile going the new direction
|
||||||
//sourceObject = %p.sourceObject; // <-- done below to prevent spawning suicidal missiles
|
%pnew = new (SeekerProjectile)() {
|
||||||
};
|
dataBlock = RPGMissile;
|
||||||
MissionCleanup.add(%pnew);
|
initialDirection = %newvector;
|
||||||
%pnew.sourceObject = %p.sourceObject;
|
initialPosition = %p.getPosition();
|
||||||
%pnew.WeaponImageSource = %p.WeaponImageSource;
|
damageFactor = %p.damageFactor;
|
||||||
%pnew.ticksleft = %p.ticksleft - 1;
|
//sourceObject = %p.sourceObject; // <-- done below to prevent spawning suicidal missiles
|
||||||
%pnew.ImageSource = "RPGImage";
|
};
|
||||||
//echo(%pnew.ticksleft);
|
MissionCleanup.add(%pnew);
|
||||||
if(%pnew.ticksleft <= 0) { //time up!
|
%pnew.sourceObject = %p.sourceObject;
|
||||||
%pnew.getDatablock().onExplode(%pnew, %pnew.getPosition(), 1);
|
%pnew.WeaponImageSource = %p.WeaponImageSource;
|
||||||
%p.delete();
|
%pnew.ticksleft = %p.ticksleft - 1;
|
||||||
%pnew.delete();
|
%pnew.ImageSource = "RPGImage";
|
||||||
//echo("end");
|
//echo(%pnew.ticksleft);
|
||||||
return;
|
%p.delete();
|
||||||
}
|
schedule(500, 0, "RPGRandomMovement", %pnew);
|
||||||
else {
|
|
||||||
%p.delete();
|
|
||||||
schedule(500, 0, "RPGRandomMovement", %pnew);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,58 +1,58 @@
|
||||||
datablock SeekerProjectileData(StingerMissile) {
|
datablock SeekerProjectileData(StingerMissile) {
|
||||||
casingShapeName = "weapon_missile_casement.dts";
|
casingShapeName = "weapon_missile_casement.dts";
|
||||||
projectileShapeName = "weapon_missile_projectile.dts";
|
projectileShapeName = "weapon_missile_projectile.dts";
|
||||||
hasDamageRadius = true;
|
hasDamageRadius = true;
|
||||||
indirectDamage = 1.4; //Requires Lock
|
indirectDamage = 1.4; //Requires Lock
|
||||||
damageRadius = 18.0;
|
damageRadius = 18.0;
|
||||||
radiusDamageType = $DamageType::Missile;
|
radiusDamageType = $DamageType::Stinger;
|
||||||
kickBackStrength = 1000;
|
kickBackStrength = 1000;
|
||||||
|
|
||||||
ImageSource = "StingerImage";
|
|
||||||
|
|
||||||
explosion = "SatchelMainExplosion";
|
ImageSource = "StingerImage";
|
||||||
splash = MissileSplash;
|
|
||||||
velInheritFactor = 1.0; // to compensate for slow starting velocity, this value
|
|
||||||
// is cranked up to full so the missile doesn't start
|
|
||||||
// out behind the player when the player is moving
|
|
||||||
// very quickly - bramage
|
|
||||||
|
|
||||||
baseEmitter = MissileSmokeEmitter;
|
explosion = "SatchelMainExplosion";
|
||||||
delayEmitter = MissileFireEmitter;
|
splash = MissileSplash;
|
||||||
puffEmitter = MissilePuffEmitter;
|
velInheritFactor = 1.0; // to compensate for slow starting velocity, this value
|
||||||
bubbleEmitter = GrenadeBubbleEmitter;
|
// is cranked up to full so the missile doesn't start
|
||||||
bubbleEmitTime = 1.0;
|
// out behind the player when the player is moving
|
||||||
|
// very quickly - bramage
|
||||||
|
|
||||||
exhaustEmitter = MissileLauncherExhaustEmitter;
|
baseEmitter = MissileSmokeEmitter;
|
||||||
exhaustTimeMs = 300;
|
delayEmitter = MissileFireEmitter;
|
||||||
exhaustNodeName = "muzzlePoint1";
|
puffEmitter = MissilePuffEmitter;
|
||||||
|
bubbleEmitter = GrenadeBubbleEmitter;
|
||||||
|
bubbleEmitTime = 1.0;
|
||||||
|
|
||||||
lifetimeMS = 30000;
|
exhaustEmitter = MissileLauncherExhaustEmitter;
|
||||||
muzzleVelocity = 10.0;
|
exhaustTimeMs = 300;
|
||||||
maxVelocity = 150.0;
|
exhaustNodeName = "muzzlePoint1";
|
||||||
turningSpeed = 110.0;
|
|
||||||
acceleration = 350.0;
|
|
||||||
|
|
||||||
proximityRadius = 3;
|
lifetimeMS = 30000;
|
||||||
|
muzzleVelocity = 10.0;
|
||||||
|
maxVelocity = 150.0;
|
||||||
|
turningSpeed = 110.0;
|
||||||
|
acceleration = 350.0;
|
||||||
|
|
||||||
terrainAvoidanceSpeed = 180;
|
proximityRadius = 3;
|
||||||
terrainScanAhead = 25;
|
|
||||||
terrainHeightFail = 12;
|
|
||||||
terrainAvoidanceRadius = 100;
|
|
||||||
|
|
||||||
flareDistance = 200;
|
terrainAvoidanceSpeed = 180;
|
||||||
flareAngle = 30;
|
terrainScanAhead = 25;
|
||||||
|
terrainHeightFail = 12;
|
||||||
|
terrainAvoidanceRadius = 100;
|
||||||
|
|
||||||
sound = MissileProjectileSound;
|
flareDistance = 200;
|
||||||
|
flareAngle = 30;
|
||||||
|
|
||||||
hasLight = true;
|
sound = MissileProjectileSound;
|
||||||
lightRadius = 5.0;
|
|
||||||
lightColor = "0.2 0.05 0";
|
|
||||||
|
|
||||||
useFlechette = true;
|
hasLight = true;
|
||||||
flechetteDelayMs = 550;
|
lightRadius = 5.0;
|
||||||
casingDeb = FlechetteDebris;
|
lightColor = "0.2 0.05 0";
|
||||||
|
|
||||||
explodeOnWaterImpact = false;
|
useFlechette = true;
|
||||||
|
flechetteDelayMs = 550;
|
||||||
|
casingDeb = FlechetteDebris;
|
||||||
|
|
||||||
|
explodeOnWaterImpact = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -61,170 +61,165 @@ datablock SeekerProjectileData(StingerMissile) {
|
||||||
// Ammo
|
// Ammo
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
|
|
||||||
datablock ItemData(StingerAmmo)
|
datablock ItemData(StingerAmmo) {
|
||||||
{
|
className = Ammo;
|
||||||
className = Ammo;
|
catagory = "Ammo";
|
||||||
catagory = "Ammo";
|
shapeFile = "ammo_missile.dts";
|
||||||
shapeFile = "ammo_missile.dts";
|
mass = 1;
|
||||||
mass = 1;
|
elasticity = 0.2;
|
||||||
elasticity = 0.2;
|
friction = 0.6;
|
||||||
friction = 0.6;
|
pickupRadius = 2;
|
||||||
pickupRadius = 2;
|
|
||||||
pickUpName = "some Stinger rockets";
|
pickUpName = "some Stinger rockets";
|
||||||
|
|
||||||
computeCRC = true;
|
computeCRC = true;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
//--------------------------------------------------------------------------
|
//--------------------------------------------------------------------------
|
||||||
// Weapon
|
// Weapon
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
datablock ItemData(Stinger)
|
datablock ItemData(Stinger) {
|
||||||
{
|
className = Weapon;
|
||||||
className = Weapon;
|
catagory = "Spawn Items";
|
||||||
catagory = "Spawn Items";
|
shapeFile = "weapon_mortar.dts";
|
||||||
shapeFile = "weapon_mortar.dts";
|
image = StingerImage;
|
||||||
image = StingerImage;
|
mass = 1;
|
||||||
mass = 1;
|
elasticity = 0.2;
|
||||||
elasticity = 0.2;
|
friction = 0.6;
|
||||||
friction = 0.6;
|
pickupRadius = 2;
|
||||||
pickupRadius = 2;
|
|
||||||
pickUpName = "a Stinger launcher";
|
pickUpName = "a Stinger launcher";
|
||||||
|
|
||||||
computeCRC = true;
|
computeCRC = true;
|
||||||
emap = true;
|
emap = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ShapeBaseImageData(StingerImage) {
|
datablock ShapeBaseImageData(StingerImage) {
|
||||||
className = WeaponImage;
|
className = WeaponImage;
|
||||||
shapeFile = "weapon_grenade_launcher.dts";
|
shapeFile = "weapon_grenade_launcher.dts";
|
||||||
item = Stinger;
|
item = Stinger;
|
||||||
ammo = StingerAmmo;
|
ammo = StingerAmmo;
|
||||||
offset = "0 0 0";
|
offset = "0 0 0";
|
||||||
armThread = lookms;
|
armThread = lookms;
|
||||||
emap = true;
|
emap = true;
|
||||||
|
|
||||||
projectile = StingerMissile;
|
projectile = StingerMissile;
|
||||||
projectileType = SeekerProjectile;
|
projectileType = SeekerProjectile;
|
||||||
|
|
||||||
isSeeker = true;
|
isSeeker = true;
|
||||||
seekRadius = 700;
|
seekRadius = 700;
|
||||||
maxSeekAngle = 8;
|
maxSeekAngle = 8;
|
||||||
seekTime = 0.5;
|
seekTime = 0.5;
|
||||||
minSeekHeat = 0.01; // the heat that must be present on a target to lock it.
|
minSeekHeat = 0.01; // the heat that must be present on a target to lock it.
|
||||||
|
|
||||||
//ClipStuff
|
|
||||||
ClipName = "StingerClip";
|
|
||||||
ClipPickupName["StingerClip"] = "A Few Stinger Missiles";
|
|
||||||
ShowsClipInHud = 1;
|
|
||||||
ClipReloadTime = 4;
|
|
||||||
ClipReturn = 1;
|
|
||||||
InitialClips = 4;
|
|
||||||
//
|
|
||||||
HasChallenges = 1;
|
|
||||||
ChallengeCt = 7;
|
|
||||||
Challenge[1] = "Stinger Hunter\t100\t500\tNone";
|
|
||||||
Challenge[2] = "Stinger Expert\t250\t1000\tNone";
|
|
||||||
Challenge[3] = "Stinger Mastery\t500\t2500\tNone";
|
|
||||||
Challenge[4] = "Stinger Bronze Commendation\t1000\t10000\tNone";
|
|
||||||
Challenge[5] = "Stinger Silver Commendation\t2500\t25000\tNone";
|
|
||||||
Challenge[6] = "Stinger Gold Commendation\t5000\t50000\tNone";
|
|
||||||
Challenge[7] = "Stinger Titan Commendation\t10000\t75000\tNone";
|
|
||||||
GunName = "Stinger";
|
|
||||||
|
|
||||||
RankRequire = $TWM2::RankRequire["Stinger"];
|
//ClipStuff
|
||||||
|
ClipName = "StingerClip";
|
||||||
|
ClipPickupName["StingerClip"] = "A Few Stinger Missiles";
|
||||||
|
ShowsClipInHud = 1;
|
||||||
|
ClipReloadTime = 4;
|
||||||
|
ClipReturn = 1;
|
||||||
|
InitialClips = 4;
|
||||||
|
//
|
||||||
|
HasChallenges = 1;
|
||||||
|
ChallengeCt = 7;
|
||||||
|
Challenge[1] = "Stinger Hunter\t100\t500\tNone";
|
||||||
|
Challenge[2] = "Stinger Expert\t250\t1000\tNone";
|
||||||
|
Challenge[3] = "Stinger Mastery\t500\t2500\tNone";
|
||||||
|
Challenge[4] = "Stinger Bronze Commendation\t1000\t10000\tNone";
|
||||||
|
Challenge[5] = "Stinger Silver Commendation\t2500\t25000\tNone";
|
||||||
|
Challenge[6] = "Stinger Gold Commendation\t5000\t50000\tNone";
|
||||||
|
Challenge[7] = "Stinger Titan Commendation\t10000\t75000\tNone";
|
||||||
|
GunName = "Stinger";
|
||||||
|
|
||||||
// only target objects outside this range
|
RankRequire = $TWM2::RankRequire["Stinger"];
|
||||||
minTargetingDistance = 80;
|
|
||||||
|
|
||||||
stateName[0] = "Activate";
|
// only target objects outside this range
|
||||||
stateTransitionOnTimeout[0] = "ActivateReady";
|
minTargetingDistance = 80;
|
||||||
stateTimeoutValue[0] = 0.5;
|
|
||||||
stateSequence[0] = "Activate";
|
|
||||||
stateSound[0] = MissileSwitchSound;
|
|
||||||
|
|
||||||
stateName[1] = "ActivateReady";
|
stateName[0] = "Activate";
|
||||||
stateTransitionOnLoaded[1] = "Ready";
|
stateTransitionOnTimeout[0] = "ActivateReady";
|
||||||
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
stateTimeoutValue[0] = 0.5;
|
||||||
|
stateSequence[0] = "Activate";
|
||||||
|
stateSound[0] = MissileSwitchSound;
|
||||||
|
|
||||||
stateName[2] = "Ready";
|
stateName[1] = "ActivateReady";
|
||||||
stateTransitionOnNoAmmo[2] = "NoAmmo";
|
stateTransitionOnLoaded[1] = "Ready";
|
||||||
stateTransitionOnTriggerDown[2] = "CheckWet";
|
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
||||||
|
|
||||||
stateName[3] = "Fire";
|
stateName[2] = "Ready";
|
||||||
stateTransitionOnTimeout[3] = "Reload";
|
stateTransitionOnNoAmmo[2] = "NoAmmo";
|
||||||
stateTimeoutValue[3] = 0.4;
|
stateTransitionOnTriggerDown[2] = "CheckWet";
|
||||||
stateFire[3] = true;
|
|
||||||
stateRecoil[3] = LightRecoil;
|
|
||||||
stateAllowImageChange[3] = false;
|
|
||||||
stateSequence[3] = "Fire";
|
|
||||||
stateScript[3] = "onFire";
|
|
||||||
stateSound[3] = MissileFireSound;
|
|
||||||
|
|
||||||
stateName[4] = "Reload";
|
stateName[3] = "Fire";
|
||||||
stateTransitionOnNoAmmo[4] = "NoAmmo";
|
stateTransitionOnTimeout[3] = "Reload";
|
||||||
stateTransitionOnTimeout[4] = "Ready";
|
stateTimeoutValue[3] = 0.4;
|
||||||
stateTimeoutValue[4] = 2.5;
|
stateFire[3] = true;
|
||||||
stateAllowImageChange[4] = false;
|
stateRecoil[3] = LightRecoil;
|
||||||
stateSequence[4] = "Reload";
|
stateAllowImageChange[3] = false;
|
||||||
stateSound[4] = MissileReloadSound;
|
stateSequence[3] = "Fire";
|
||||||
|
stateScript[3] = "onFire";
|
||||||
|
stateSound[3] = MissileFireSound;
|
||||||
|
|
||||||
stateName[5] = "NoAmmo";
|
stateName[4] = "Reload";
|
||||||
stateTransitionOnAmmo[5] = "Reload";
|
stateTransitionOnNoAmmo[4] = "NoAmmo";
|
||||||
stateSequence[5] = "NoAmmo";
|
stateTransitionOnTimeout[4] = "Ready";
|
||||||
stateTransitionOnTriggerDown[5] = "DryFire";
|
stateTimeoutValue[4] = 2.5;
|
||||||
|
stateAllowImageChange[4] = false;
|
||||||
|
stateSequence[4] = "Reload";
|
||||||
|
stateSound[4] = MissileReloadSound;
|
||||||
|
|
||||||
stateName[6] = "DryFire";
|
stateName[5] = "NoAmmo";
|
||||||
stateSound[6] = MissileDryFireSound;
|
stateTransitionOnAmmo[5] = "Reload";
|
||||||
stateTimeoutValue[6] = 1.0;
|
stateSequence[5] = "NoAmmo";
|
||||||
stateTransitionOnTimeout[6] = "ActivateReady";
|
stateTransitionOnTriggerDown[5] = "DryFire";
|
||||||
|
|
||||||
stateName[7] = "CheckTarget";
|
stateName[6] = "DryFire";
|
||||||
stateTransitionOnNoTarget[7] = "DryFire";
|
stateSound[6] = MissileDryFireSound;
|
||||||
stateTransitionOnTarget[7] = "Fire";
|
stateTimeoutValue[6] = 1.0;
|
||||||
|
stateTransitionOnTimeout[6] = "ActivateReady";
|
||||||
|
|
||||||
stateName[8] = "CheckWet";
|
stateName[7] = "CheckTarget";
|
||||||
stateTransitionOnWet[8] = "WetFire";
|
stateTransitionOnNoTarget[7] = "DryFire";
|
||||||
stateTransitionOnNotWet[8] = "CheckTarget";
|
stateTransitionOnTarget[7] = "Fire";
|
||||||
|
|
||||||
stateName[9] = "WetFire";
|
stateName[8] = "CheckWet";
|
||||||
stateTransitionOnNoAmmo[9] = "NoAmmo";
|
stateTransitionOnWet[8] = "WetFire";
|
||||||
stateTransitionOnTimeout[9] = "Reload";
|
stateTransitionOnNotWet[8] = "CheckTarget";
|
||||||
stateSound[9] = MissileFireSound;
|
|
||||||
stateRecoil[3] = LightRecoil;
|
stateName[9] = "WetFire";
|
||||||
stateTimeoutValue[9] = 0.4;
|
stateTransitionOnNoAmmo[9] = "NoAmmo";
|
||||||
stateScript[9] = "onWetFire";
|
stateTransitionOnTimeout[9] = "Reload";
|
||||||
stateAllowImageChange[9] = false;
|
stateSound[9] = MissileFireSound;
|
||||||
|
stateRecoil[3] = LightRecoil;
|
||||||
|
stateTimeoutValue[9] = 0.4;
|
||||||
|
stateScript[9] = "onWetFire";
|
||||||
|
stateAllowImageChange[9] = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
function StingerImage::onFire(%data,%obj,%slot) {
|
function StingerImage::onFire(%data, %obj, %slot) {
|
||||||
%obj.decInventory(%data.ammo,1);
|
if(%obj.inv[%data.ammo] == 0) { //Added Phantom139, TWM2
|
||||||
if(%obj.inv[%data.ammo] == 0) { //Added Phantom139, TWM2
|
AttemptReload(%data, %obj, %slot);
|
||||||
AttemptReload(%data, %obj, %slot);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
%target = %obj.getLockedTarget();
|
%target = %obj.getLockedTarget();
|
||||||
//requires lock
|
//requires lock
|
||||||
if(%target) {
|
if(%target) {
|
||||||
%p = new (SeekerProjectile)() {
|
%p = new (SeekerProjectile)() {
|
||||||
dataBlock = StingerMissile;
|
dataBlock = StingerMissile;
|
||||||
initialDirection = "0 0 10";
|
initialDirection = "0 0 10";
|
||||||
initialPosition = %obj.getPosition();
|
initialPosition = %obj.getPosition();
|
||||||
damageFactor = 1;
|
damageFactor = 1;
|
||||||
sourceObject = %obj;
|
sourceObject = %obj;
|
||||||
};
|
};
|
||||||
%p.WeaponImageSource = %data.getName();
|
%p.WeaponImageSource = %data.getName();
|
||||||
|
|
||||||
MissileSet.add(%p);
|
MissileSet.add(%p);
|
||||||
|
|
||||||
%p.schedule(500, "setObjectTarget", %target);
|
%p.schedule(500, "setObjectTarget", %target);
|
||||||
schedule(501, 0, "SetMissileTargeted", %target, %p);
|
schedule(501, 0, "SetMissileTargeted", %target, %p);
|
||||||
}
|
|
||||||
else if(%obj.isLocked()) {
|
%obj.decInventory(%data.ammo,1);
|
||||||
return;
|
}
|
||||||
}
|
else if(%obj.isLocked()) {
|
||||||
else {
|
return;
|
||||||
return;
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,54 +1,49 @@
|
||||||
datablock ItemData(StaticGrenadeThrown)
|
datablock ItemData(StaticGrenadeThrown) {
|
||||||
{
|
|
||||||
className = Weapon;
|
className = Weapon;
|
||||||
shapeFile = "ammo_plasma.dts";
|
shapeFile = "ammo_plasma.dts";
|
||||||
mass = 0.4;
|
mass = 0.4;
|
||||||
elasticity = 0.2;
|
elasticity = 0.2;
|
||||||
friction = 1;
|
friction = 1;
|
||||||
pickupRadius = 2;
|
pickupRadius = 2;
|
||||||
maxDamage = 0.5;
|
maxDamage = 0.5;
|
||||||
explosion = PlasmaBarrelBoltExplosion;
|
explosion = PlasmaBarrelBoltExplosion;
|
||||||
underwaterExplosion = PlasmaBarrelBoltExplosion;
|
underwaterExplosion = PlasmaBarrelBoltExplosion;
|
||||||
indirectDamage = 0.4;
|
indirectDamage = 0.4;
|
||||||
damageRadius = 10.0;
|
damageRadius = 10.0;
|
||||||
radiusDamageType = $DamageType::Grenade;
|
radiusDamageType = $DamageType::StaticGrenade;
|
||||||
kickBackStrength = 2000;
|
kickBackStrength = 2000;
|
||||||
|
|
||||||
computeCRC = true;
|
|
||||||
|
|
||||||
|
computeCRC = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ItemData(StaticGrenade)
|
datablock ItemData(StaticGrenade) {
|
||||||
{
|
|
||||||
className = HandInventory;
|
className = HandInventory;
|
||||||
catagory = "Handheld";
|
catagory = "Handheld";
|
||||||
shapeFile = "ammo_plasma.dts";
|
shapeFile = "ammo_plasma.dts";
|
||||||
mass = 0.4;
|
mass = 0.4;
|
||||||
elasticity = 0.2;
|
elasticity = 0.2;
|
||||||
friction = 1;
|
friction = 1;
|
||||||
pickupRadius = 2;
|
pickupRadius = 2;
|
||||||
thrownItem = StaticGrenadeThrown;
|
thrownItem = StaticGrenadeThrown;
|
||||||
pickUpName = "some static grenades";
|
pickUpName = "some static grenades";
|
||||||
isGrenade = true;
|
isGrenade = true;
|
||||||
|
|
||||||
computeCRC = true;
|
computeCRC = true;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
function StaticGrenadeThrown::onThrow(%this, %gren) {
|
function StaticGrenadeThrown::onThrow(%this, %gren) {
|
||||||
AIGrenadeThrown(%gren);
|
AIGrenadeThrown(%gren);
|
||||||
%gren.detThread = schedule(3000, %gren, "detonateGrenade", %gren);
|
%gren.detThread = schedule(3000, %gren, "detonateGrenade", %gren);
|
||||||
}
|
}
|
||||||
|
|
||||||
function StaticGrenadeThrown::onCollision(%data, %obj, %col) {
|
function StaticGrenadeThrown::onCollision(%data, %obj, %col) {
|
||||||
%cn = %col.getDatablock().getClassName();
|
%cn = %col.getDatablock().getClassName();
|
||||||
if(%cn $= "PlayerData" || strstr(%cn, "Vehicle") != -1) {
|
if(%cn $= "PlayerData" || strstr(%cn, "Vehicle") != -1) {
|
||||||
//BOOM!
|
//BOOM!
|
||||||
detonateGrenade(%obj);
|
detonateGrenade(%obj);
|
||||||
//Die now...
|
//Die now...
|
||||||
if(!%col.isBoss && !%col.isGOF) {
|
if(!%col.isBoss && !%col.isGOF) {
|
||||||
RadiusExplosion( %obj, %obj.getPosition(), 1, 100, 1000,
|
RadiusExplosion( %obj, %obj.getPosition(), 1, 100, 1000, %obj.sourceObject, $DamageType::StaticGrenade);
|
||||||
%obj.sourceObject, $DamageType::Grenade);
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,229 +1,226 @@
|
||||||
datablock TracerProjectileData(MG42Bullet) {
|
datablock TracerProjectileData(MG42Bullet) {
|
||||||
doDynamicClientHits = true;
|
doDynamicClientHits = true;
|
||||||
|
|
||||||
directDamage = 0.063;
|
directDamage = 0.063;
|
||||||
directDamageType = $DamageType::MG42;
|
directDamageType = $DamageType::MG42;
|
||||||
explosion = "ChaingunExplosion";
|
explosion = "ChaingunExplosion";
|
||||||
splash = ChaingunSplash;
|
splash = ChaingunSplash;
|
||||||
HeadMultiplier = 1.5;
|
HeadMultiplier = 1.5;
|
||||||
LegsMultiplier = 0.5;
|
LegsMultiplier = 0.5;
|
||||||
|
|
||||||
ImageSource = "MG42Image";
|
|
||||||
|
|
||||||
kickBackStrength = 50.0;
|
ImageSource = "MG42Image";
|
||||||
sound = ChaingunProjectile;
|
|
||||||
|
|
||||||
dryVelocity = 3000.0;
|
kickBackStrength = 50.0;
|
||||||
wetVelocity = 1000.0;
|
sound = ChaingunProjectile;
|
||||||
velInheritFactor = 1.0;
|
|
||||||
fizzleTimeMS = 3000;
|
|
||||||
lifetimeMS = 3000;
|
|
||||||
explodeOnDeath = false;
|
|
||||||
reflectOnWaterImpactAngle = 0.0;
|
|
||||||
explodeOnWaterImpact = false;
|
|
||||||
deflectionOnWaterImpact = 0.0;
|
|
||||||
fizzleUnderwaterMS = 3000;
|
|
||||||
|
|
||||||
tracerLength = 40.0;
|
dryVelocity = 3000.0;
|
||||||
tracerAlpha = false;
|
wetVelocity = 1000.0;
|
||||||
tracerMinPixels = 6;
|
velInheritFactor = 1.0;
|
||||||
tracerColor = 10.0/255.0 @ " " @ 30.0/255.0 @ " " @ 240.0/255.0 @ " 0.75";
|
fizzleTimeMS = 3000;
|
||||||
|
lifetimeMS = 3000;
|
||||||
|
explodeOnDeath = false;
|
||||||
|
reflectOnWaterImpactAngle = 0.0;
|
||||||
|
explodeOnWaterImpact = false;
|
||||||
|
deflectionOnWaterImpact = 0.0;
|
||||||
|
fizzleUnderwaterMS = 3000;
|
||||||
|
|
||||||
|
tracerLength = 40.0;
|
||||||
|
tracerAlpha = false;
|
||||||
|
tracerMinPixels = 6;
|
||||||
|
tracerColor = 10.0/255.0 @ " " @ 30.0/255.0 @ " " @ 240.0/255.0 @ " 0.75";
|
||||||
tracerTex[0] = "special/tracer00";
|
tracerTex[0] = "special/tracer00";
|
||||||
tracerTex[1] = "special/tracercross";
|
tracerTex[1] = "special/tracercross";
|
||||||
tracerWidth = 0.2;
|
tracerWidth = 0.2;
|
||||||
crossSize = 0.20;
|
crossSize = 0.20;
|
||||||
crossViewAng = 0.990;
|
crossViewAng = 0.990;
|
||||||
renderCross = true;
|
renderCross = true;
|
||||||
|
|
||||||
decalData[0] = ChaingunDecal1;
|
decalData[0] = ChaingunDecal1;
|
||||||
decalData[1] = ChaingunDecal2;
|
decalData[1] = ChaingunDecal2;
|
||||||
decalData[2] = ChaingunDecal3;
|
decalData[2] = ChaingunDecal3;
|
||||||
decalData[3] = ChaingunDecal4;
|
decalData[3] = ChaingunDecal4;
|
||||||
decalData[4] = ChaingunDecal5;
|
decalData[4] = ChaingunDecal5;
|
||||||
decalData[5] = ChaingunDecal6;
|
decalData[5] = ChaingunDecal6;
|
||||||
};
|
};
|
||||||
|
|
||||||
//--------------------------------------------------------------------------
|
//--------------------------------------------------------------------------
|
||||||
// Ammo
|
// Ammo
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
datablock ItemData(MG42Ammo) {
|
datablock ItemData(MG42Ammo) {
|
||||||
className = Ammo;
|
className = Ammo;
|
||||||
catagory = "Ammo";
|
catagory = "Ammo";
|
||||||
shapeFile = "ammo_chaingun.dts";
|
shapeFile = "ammo_chaingun.dts";
|
||||||
mass = 3;
|
mass = 3;
|
||||||
elasticity = 0.2;
|
elasticity = 0.2;
|
||||||
friction = 0.6;
|
friction = 0.6;
|
||||||
pickupRadius = 2;
|
pickupRadius = 2;
|
||||||
pickUpName = "some PCT ammo";
|
pickUpName = "some mg42 rounds";
|
||||||
|
|
||||||
computeCRC = true;
|
|
||||||
|
|
||||||
|
computeCRC = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
//--------------------------------------------------------------------------
|
//--------------------------------------------------------------------------
|
||||||
// Weapon
|
// Weapon
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
datablock ShapeBaseImageData(MG42Image) {
|
datablock ShapeBaseImageData(MG42Image) {
|
||||||
className = WeaponImage;
|
className = WeaponImage;
|
||||||
shapeFile = "weapon_sniper.dts";
|
shapeFile = "weapon_sniper.dts";
|
||||||
item = MG42;
|
item = MG42;
|
||||||
ammo = MG42Ammo;
|
ammo = MG42Ammo;
|
||||||
projectile = MG42Bullet;
|
projectile = MG42Bullet;
|
||||||
projectileType = TracerProjectile;
|
projectileType = TracerProjectile;
|
||||||
emap = true;
|
emap = true;
|
||||||
mass = 26;
|
mass = 26;
|
||||||
|
|
||||||
offset = "0.08 0.22 0.15"; // L/R - F/B - T/B
|
offset = "0.08 0.22 0.15"; // L/R - F/B - T/B
|
||||||
|
|
||||||
casing = ShellDebris;
|
casing = ShellDebris;
|
||||||
shellExitDir = "0.5 0 1";
|
shellExitDir = "0.5 0 1";
|
||||||
shellExitOffset = "0.0 0.75 0.0";
|
shellExitOffset = "0.0 0.75 0.0";
|
||||||
shellExitVariance = 5.0;
|
shellExitVariance = 5.0;
|
||||||
shellVelocity = 4.5;
|
shellVelocity = 4.5;
|
||||||
|
|
||||||
|
|
||||||
//ClipStuff
|
|
||||||
ClipName = "MG42Clip";
|
|
||||||
ClipPickupName["MG42Clip"] = "Some MG42 Clip Boxes";
|
|
||||||
ShowsClipInHud = 1;
|
|
||||||
ClipReloadTime = 7;
|
|
||||||
ClipReturn = 200;
|
|
||||||
InitialClips = 4;
|
|
||||||
//
|
|
||||||
//Challenges
|
|
||||||
HasChallenges = 1;
|
|
||||||
ChallengeCt = 8;
|
|
||||||
Challenge[1] = "MG42 Hunter\t100\t250\tNone";
|
|
||||||
Challenge[2] = "MG42 Expert\t250\t500\tGrip";
|
|
||||||
Challenge[3] = "MG42 Master\t750\t1000\tNone";
|
|
||||||
Challenge[4] = "MG42 God\t1500\t2000\tSilencer";
|
|
||||||
Challenge[5] = "MG42 Bronze Commendation\t3000\t10000\tNone";
|
|
||||||
Challenge[6] = "MG42 Silver Commendation\t6000\t25000\tNone";
|
|
||||||
Challenge[7] = "MG42 Gold Commendation\t12500\t50000\tNone";
|
|
||||||
Challenge[8] = "MG42 Titan Commendation\t35000\t75000\tNone";
|
|
||||||
Upgrade[1] = "Grip";
|
|
||||||
Upgrade[2] = "Silencer";
|
|
||||||
GunName = "MG42 Machine Gun";
|
|
||||||
//
|
|
||||||
|
|
||||||
RankRequire = $TWM2::RankRequire["MG42"];
|
|
||||||
|
|
||||||
projectileSpread = 12.5 / 1000.0;
|
//ClipStuff
|
||||||
|
ClipName = "MG42Clip";
|
||||||
|
ClipPickupName["MG42Clip"] = "Some MG42 Clip Boxes";
|
||||||
|
ShowsClipInHud = 1;
|
||||||
|
ClipReloadTime = 7;
|
||||||
|
ClipReturn = 200;
|
||||||
|
InitialClips = 4;
|
||||||
|
//
|
||||||
|
//Challenges
|
||||||
|
HasChallenges = 1;
|
||||||
|
ChallengeCt = 8;
|
||||||
|
Challenge[1] = "MG42 Hunter\t100\t250\tNone";
|
||||||
|
Challenge[2] = "MG42 Expert\t250\t500\tGrip";
|
||||||
|
Challenge[3] = "MG42 Master\t750\t1000\tNone";
|
||||||
|
Challenge[4] = "MG42 God\t1500\t2000\tSilencer";
|
||||||
|
Challenge[5] = "MG42 Bronze Commendation\t3000\t10000\tNone";
|
||||||
|
Challenge[6] = "MG42 Silver Commendation\t6000\t25000\tNone";
|
||||||
|
Challenge[7] = "MG42 Gold Commendation\t12500\t50000\tNone";
|
||||||
|
Challenge[8] = "MG42 Titan Commendation\t35000\t75000\tNone";
|
||||||
|
Upgrade[1] = "Grip";
|
||||||
|
Upgrade[2] = "Silencer";
|
||||||
|
GunName = "MG42 Machine Gun";
|
||||||
|
//
|
||||||
|
|
||||||
//--------------------------------------
|
RankRequire = $TWM2::RankRequire["MG42"];
|
||||||
stateName[0] = "Activate";
|
|
||||||
stateSequence[0] = "Activate";
|
|
||||||
stateSound[0] = ChaingunSwitchSound;
|
|
||||||
stateAllowImageChange[0] = false;
|
|
||||||
//
|
|
||||||
stateTimeoutValue[0] = 0.5;
|
|
||||||
stateTransitionOnTimeout[0] = "Ready";
|
|
||||||
stateTransitionOnNoAmmo[0] = "NoAmmo";
|
|
||||||
|
|
||||||
//--------------------------------------
|
projectileSpread = 12.5 / 1000.0;
|
||||||
stateName[1] = "Ready";
|
|
||||||
stateSpinThread[1] = Stop;
|
|
||||||
//
|
|
||||||
stateTransitionOnTriggerDown[1] = "Spinup";
|
|
||||||
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
|
||||||
|
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
stateName[2] = "NoAmmo";
|
stateName[0] = "Activate";
|
||||||
stateTransitionOnAmmo[2] = "Ready";
|
stateSequence[0] = "Activate";
|
||||||
stateSpinThread[2] = Stop;
|
stateSound[0] = ChaingunSwitchSound;
|
||||||
stateTransitionOnTriggerDown[2] = "DryFire";
|
stateAllowImageChange[0] = false;
|
||||||
|
//
|
||||||
|
stateTimeoutValue[0] = 0.5;
|
||||||
|
stateTransitionOnTimeout[0] = "Ready";
|
||||||
|
stateTransitionOnNoAmmo[0] = "NoAmmo";
|
||||||
|
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
stateName[3] = "Spinup";
|
stateName[1] = "Ready";
|
||||||
stateSpinThread[3] = SpinUp;
|
stateSpinThread[1] = Stop;
|
||||||
stateSound[3] = ChaingunSpinupSound;
|
//
|
||||||
//
|
stateTransitionOnTriggerDown[1] = "Spinup";
|
||||||
stateTimeoutValue[3] = 0.1;
|
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
||||||
stateWaitForTimeout[3] = false;
|
|
||||||
stateTransitionOnTimeout[3] = "Fire";
|
|
||||||
stateTransitionOnTriggerUp[3] = "Spindown";
|
|
||||||
|
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
stateName[4] = "Fire";
|
stateName[2] = "NoAmmo";
|
||||||
stateSequence[4] = "Fire";
|
stateTransitionOnAmmo[2] = "Ready";
|
||||||
stateSequenceRandomFlash[4] = true;
|
stateSpinThread[2] = Stop;
|
||||||
stateSpinThread[4] = FullSpeed;
|
stateTransitionOnTriggerDown[2] = "DryFire";
|
||||||
//stateSound[4] = ChaingunFireSound;
|
|
||||||
stateAllowImageChange[4] = false;
|
|
||||||
stateScript[4] = "onFire";
|
|
||||||
stateFire[4] = true;
|
|
||||||
stateEjectShell[4] = true;
|
|
||||||
stateTimeoutValue[4] = 0.02;
|
|
||||||
stateTransitionOnTimeout[4] = "Fire";
|
|
||||||
stateTransitionOnTriggerUp[4] = "Spindown";
|
|
||||||
stateTransitionOnNoAmmo[4] = "EmptySpindown";
|
|
||||||
|
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
stateName[5] = "Spindown";
|
stateName[3] = "Spinup";
|
||||||
stateSound[5] = ChaingunSpinDownSound;
|
stateSpinThread[3] = SpinUp;
|
||||||
stateSpinThread[5] = SpinDown;
|
stateSound[3] = ChaingunSpinupSound;
|
||||||
//
|
//
|
||||||
stateTimeoutValue[5] = 0.1;
|
stateTimeoutValue[3] = 0.1;
|
||||||
stateWaitForTimeout[5] = true;
|
stateWaitForTimeout[3] = false;
|
||||||
stateTransitionOnTimeout[5] = "Ready";
|
stateTransitionOnTimeout[3] = "Fire";
|
||||||
stateTransitionOnTriggerDown[5] = "Spinup";
|
stateTransitionOnTriggerUp[3] = "Spindown";
|
||||||
|
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
stateName[6] = "EmptySpindown";
|
stateName[4] = "Fire";
|
||||||
stateSound[6] = ChaingunSpinDownSound;
|
stateSequence[4] = "Fire";
|
||||||
stateSpinThread[6] = SpinDown;
|
stateSequenceRandomFlash[4] = true;
|
||||||
//
|
stateSpinThread[4] = FullSpeed;
|
||||||
stateTimeoutValue[6] = 1.0;
|
//stateSound[4] = ChaingunFireSound;
|
||||||
stateTransitionOnTimeout[6] = "NoAmmo";
|
stateAllowImageChange[4] = false;
|
||||||
|
stateScript[4] = "onFire";
|
||||||
|
stateFire[4] = true;
|
||||||
|
stateEjectShell[4] = true;
|
||||||
|
stateTimeoutValue[4] = 0.02;
|
||||||
|
stateTransitionOnTimeout[4] = "Fire";
|
||||||
|
stateTransitionOnTriggerUp[4] = "Spindown";
|
||||||
|
stateTransitionOnNoAmmo[4] = "EmptySpindown";
|
||||||
|
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
stateName[7] = "DryFire";
|
stateName[5] = "Spindown";
|
||||||
stateSound[7] = ChaingunDryFireSound;
|
stateSound[5] = ChaingunSpinDownSound;
|
||||||
stateTimeoutValue[7] = 0.5;
|
stateSpinThread[5] = SpinDown;
|
||||||
stateTransitionOnTimeout[7] = "NoAmmo";
|
//
|
||||||
|
stateTimeoutValue[5] = 0.1;
|
||||||
|
stateWaitForTimeout[5] = true;
|
||||||
|
stateTransitionOnTimeout[5] = "Ready";
|
||||||
|
stateTransitionOnTriggerDown[5] = "Spinup";
|
||||||
|
|
||||||
|
//--------------------------------------
|
||||||
|
stateName[6] = "EmptySpindown";
|
||||||
|
stateSound[6] = ChaingunSpinDownSound;
|
||||||
|
stateSpinThread[6] = SpinDown;
|
||||||
|
//
|
||||||
|
stateTimeoutValue[6] = 1.0;
|
||||||
|
stateTransitionOnTimeout[6] = "NoAmmo";
|
||||||
|
|
||||||
|
//--------------------------------------
|
||||||
|
stateName[7] = "DryFire";
|
||||||
|
stateSound[7] = ChaingunDryFireSound;
|
||||||
|
stateTimeoutValue[7] = 0.5;
|
||||||
|
stateTransitionOnTimeout[7] = "NoAmmo";
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ItemData(MG42) {
|
datablock ItemData(MG42) {
|
||||||
className = Weapon;
|
className = Weapon;
|
||||||
catagory = "Spawn Items";
|
catagory = "Spawn Items";
|
||||||
shapeFile = "turret_tank_barrelchain.dts";
|
shapeFile = "turret_tank_barrelchain.dts";
|
||||||
image = MG42Image;
|
image = MG42Image;
|
||||||
mass = 1.0;
|
mass = 1.0;
|
||||||
elasticity = 0.2;
|
elasticity = 0.2;
|
||||||
friction = 0.6;
|
friction = 0.6;
|
||||||
pickupRadius = 2;
|
pickupRadius = 2;
|
||||||
pickUpName = "a Portible Chaingun Turret";
|
pickUpName = "a MG42 machine gun";
|
||||||
|
|
||||||
computeCRC = true;
|
computeCRC = true;
|
||||||
emap = true;
|
emap = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ShapeBaseImageData(MG42Image1) : MG42Image {
|
datablock ShapeBaseImageData(MG42Image1) : MG42Image {
|
||||||
className = WeaponImage;
|
className = WeaponImage;
|
||||||
|
|
||||||
shapeFile = "weapon_missile.dts";
|
shapeFile = "weapon_missile.dts";
|
||||||
rotation = "0 0 1 180";
|
rotation = "0 0 1 180";
|
||||||
offset = "0.01 0.04 0.0"; // L/R - F/B - T/B
|
offset = "0.01 0.04 0.0"; // L/R - F/B - T/B
|
||||||
};
|
};
|
||||||
|
|
||||||
function MG42Image::onMount(%this,%obj,%slot) {
|
function MG42Image::onMount(%this,%obj,%slot) {
|
||||||
Parent::onMount(%this, %obj, %slot);
|
Parent::onMount(%this, %obj, %slot);
|
||||||
%obj.mountImage(MG42Image1, 3);
|
%obj.mountImage(MG42Image1, 3);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function MG42Image::onUnmount(%this,%obj,%slot) {
|
function MG42Image::onUnmount(%this,%obj,%slot) {
|
||||||
Parent::onUnmount(%this, %obj, %slot);
|
Parent::onUnmount(%this, %obj, %slot);
|
||||||
%obj.unmountImage(3);
|
%obj.unmountImage(3);
|
||||||
}
|
}
|
||||||
|
|
||||||
function MG42Image::onFire(%data, %obj, %slot) {
|
function MG42Image::onFire(%data, %obj, %slot) {
|
||||||
%p = Parent::onFire(%data, %obj, %slot);
|
%p = Parent::onFire(%data, %obj, %slot);
|
||||||
if(%obj.client.UpgradeOn("Silencer", %data.getName())) {
|
if(%obj.client.UpgradeOn("Silencer", %data.getName())) {
|
||||||
//zero sound :p
|
//zero sound :p
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
ServerPlay3d(ChaingunFireSound, %obj.getPosition());
|
ServerPlay3d(ChaingunFireSound, %obj.getPosition());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1,204 +1,202 @@
|
||||||
datablock TracerProjectileData(MRXXBullet) {
|
datablock TracerProjectileData(MRXXBullet) {
|
||||||
doDynamicClientHits = true;
|
doDynamicClientHits = true;
|
||||||
|
|
||||||
directDamage = 0.043;
|
directDamage = 0.043;
|
||||||
directDamageType = $DamageType::MRXX;
|
directDamageType = $DamageType::MRXX;
|
||||||
explosion = "ChaingunExplosion";
|
explosion = "ChaingunExplosion";
|
||||||
splash = ChaingunSplash;
|
splash = ChaingunSplash;
|
||||||
HeadMultiplier = 1.25;
|
HeadMultiplier = 1.25;
|
||||||
LegsMultiplier = 0.75;
|
LegsMultiplier = 0.75;
|
||||||
|
|
||||||
ImageSource = "MRXXImage";
|
|
||||||
|
|
||||||
kickBackStrength = 15.0;
|
ImageSource = "MRXXImage";
|
||||||
sound = ChaingunProjectile;
|
|
||||||
|
|
||||||
dryVelocity = 1750.0;
|
kickBackStrength = 15.0;
|
||||||
wetVelocity = 1500.0;
|
sound = ChaingunProjectile;
|
||||||
velInheritFactor = 0.0;
|
|
||||||
fizzleTimeMS = 3000;
|
|
||||||
lifetimeMS = 3000;
|
|
||||||
explodeOnDeath = false;
|
|
||||||
reflectOnWaterImpactAngle = 0.0;
|
|
||||||
explodeOnWaterImpact = false;
|
|
||||||
deflectionOnWaterImpact = 0.0;
|
|
||||||
fizzleUnderwaterMS = 3000;
|
|
||||||
|
|
||||||
tracerLength = 9.0;
|
dryVelocity = 1750.0;
|
||||||
tracerAlpha = false;
|
wetVelocity = 1500.0;
|
||||||
tracerMinPixels = 6;
|
velInheritFactor = 0.0;
|
||||||
tracerColor = 211.0/255.0 @ " " @ 215.0/255.0 @ " " @ 120.0/255.0 @ " 0.75";
|
fizzleTimeMS = 3000;
|
||||||
|
lifetimeMS = 3000;
|
||||||
|
explodeOnDeath = false;
|
||||||
|
reflectOnWaterImpactAngle = 0.0;
|
||||||
|
explodeOnWaterImpact = false;
|
||||||
|
deflectionOnWaterImpact = 0.0;
|
||||||
|
fizzleUnderwaterMS = 3000;
|
||||||
|
|
||||||
|
tracerLength = 9.0;
|
||||||
|
tracerAlpha = false;
|
||||||
|
tracerMinPixels = 6;
|
||||||
|
tracerColor = 211.0/255.0 @ " " @ 215.0/255.0 @ " " @ 120.0/255.0 @ " 0.75";
|
||||||
tracerTex[0] = "special/tracer00";
|
tracerTex[0] = "special/tracer00";
|
||||||
tracerTex[1] = "special/tracercross";
|
tracerTex[1] = "special/tracercross";
|
||||||
tracerWidth = 0.09;
|
tracerWidth = 0.09;
|
||||||
crossSize = 0.20;
|
crossSize = 0.20;
|
||||||
crossViewAng = 0.990;
|
crossViewAng = 0.990;
|
||||||
renderCross = true;
|
renderCross = true;
|
||||||
|
|
||||||
decalData[0] = ChaingunDecal1;
|
decalData[0] = ChaingunDecal1;
|
||||||
decalData[1] = ChaingunDecal2;
|
decalData[1] = ChaingunDecal2;
|
||||||
decalData[2] = ChaingunDecal3;
|
decalData[2] = ChaingunDecal3;
|
||||||
decalData[3] = ChaingunDecal4;
|
decalData[3] = ChaingunDecal4;
|
||||||
decalData[4] = ChaingunDecal5;
|
decalData[4] = ChaingunDecal5;
|
||||||
decalData[5] = ChaingunDecal6;
|
decalData[5] = ChaingunDecal6;
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ItemData(MRXXAmmo)
|
datablock ItemData(MRXXAmmo) {
|
||||||
{
|
className = Ammo;
|
||||||
className = Ammo;
|
catagory = "Ammo";
|
||||||
catagory = "Ammo";
|
shapeFile = "ammo_chaingun.dts";
|
||||||
shapeFile = "ammo_chaingun.dts";
|
mass = 3;
|
||||||
mass = 3;
|
elasticity = 0.2;
|
||||||
elasticity = 0.2;
|
friction = 0.6;
|
||||||
friction = 0.6;
|
pickupRadius = 2;
|
||||||
pickupRadius = 2;
|
|
||||||
pickUpName = "some MRXX ammo";
|
pickUpName = "some MRXX ammo";
|
||||||
|
|
||||||
computeCRC = true;
|
computeCRC = true;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
//--------------------------------------------------------------------------
|
//--------------------------------------------------------------------------
|
||||||
// Weapon
|
// Weapon
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
datablock ShapeBaseImageData(MRXXImage) {
|
datablock ShapeBaseImageData(MRXXImage) {
|
||||||
className = WeaponImage;
|
className = WeaponImage;
|
||||||
shapeFile = "weapon_mortar.dts";
|
shapeFile = "weapon_mortar.dts";
|
||||||
item = MRXX;
|
item = MRXX;
|
||||||
ammo = MRXXAmmo;
|
ammo = MRXXAmmo;
|
||||||
projectile = MRXXBullet;
|
projectile = MRXXBullet;
|
||||||
projectileType = TracerProjectile;
|
projectileType = TracerProjectile;
|
||||||
emap = true;
|
emap = true;
|
||||||
mass = 26;
|
mass = 26;
|
||||||
|
|
||||||
//ClipStuff
|
//ClipStuff
|
||||||
ClipName = "MRXXClip";
|
ClipName = "MRXXClip";
|
||||||
ClipPickupName["MRXXClip"] = "some MRXX Clip Boxes";
|
ClipPickupName["MRXXClip"] = "some MRXX Clip Boxes";
|
||||||
ShowsClipInHud = 1;
|
ShowsClipInHud = 1;
|
||||||
ClipReloadTime = 9;
|
ClipReloadTime = 9;
|
||||||
ClipReturn = 150;
|
ClipReturn = 150;
|
||||||
InitialClips = 5;
|
InitialClips = 5;
|
||||||
//
|
//
|
||||||
HasChallenges = 1;
|
HasChallenges = 1;
|
||||||
ChallengeCt = 8;
|
ChallengeCt = 8;
|
||||||
Challenge[1] = "MRXX ZC4 Killer\t50\t100\tNone";
|
Challenge[1] = "MRXX ZC4 Killer\t50\t100\tNone";
|
||||||
Challenge[2] = "MRXX ZC4 Expert\t100\t250\tNone";
|
Challenge[2] = "MRXX ZC4 Expert\t100\t250\tNone";
|
||||||
Challenge[3] = "MRXX ZC4 Master\t250\t500\tGrip";
|
Challenge[3] = "MRXX ZC4 Master\t250\t500\tGrip";
|
||||||
Challenge[4] = "MRXX ZC4 God\t500\t1000\tSilencer";
|
Challenge[4] = "MRXX ZC4 God\t500\t1000\tSilencer";
|
||||||
Challenge[5] = "MRXX ZC4 Bronze Commendation\t1500\t10000\tNone";
|
Challenge[5] = "MRXX ZC4 Bronze Commendation\t1500\t10000\tNone";
|
||||||
Challenge[6] = "MRXX ZC4 Silver Commendation\t5000\t25000\tNone";
|
Challenge[6] = "MRXX ZC4 Silver Commendation\t5000\t25000\tNone";
|
||||||
Challenge[7] = "MRXX ZC4 Gold Commendation\t10000\t50000\tNone";
|
Challenge[7] = "MRXX ZC4 Gold Commendation\t10000\t50000\tNone";
|
||||||
Challenge[8] = "MRXX ZC4 Titan Commendation\t25000\t75000\tNone";
|
Challenge[8] = "MRXX ZC4 Titan Commendation\t25000\t75000\tNone";
|
||||||
Upgrade[1] = "Grip";
|
Upgrade[1] = "Grip";
|
||||||
Upgrade[2] = "Silencer";
|
Upgrade[2] = "Silencer";
|
||||||
GunName = "MRXX ZC4 Machine Gun";
|
GunName = "MRXX ZC4 Machine Gun";
|
||||||
|
|
||||||
RankRequire = $TWM2::RankRequire["MRXX"];
|
RankRequire = $TWM2::RankRequire["MRXX"];
|
||||||
|
|
||||||
casing = ShellDebris;
|
casing = ShellDebris;
|
||||||
shellExitDir = "0.5 0 1";
|
shellExitDir = "0.5 0 1";
|
||||||
shellExitOffset = "0.0 0.75 0.0";
|
shellExitOffset = "0.0 0.75 0.0";
|
||||||
shellExitVariance = 5.0;
|
shellExitVariance = 5.0;
|
||||||
shellVelocity = 4.5;
|
shellVelocity = 4.5;
|
||||||
|
|
||||||
projectileSpread = 10.0 / 1000.0;
|
projectileSpread = 10.0 / 1000.0;
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
stateName[0] = "Activate";
|
stateName[0] = "Activate";
|
||||||
stateSequence[0] = "Activate";
|
stateSequence[0] = "Activate";
|
||||||
stateSound[0] = ChaingunSwitchSound;
|
stateSound[0] = ChaingunSwitchSound;
|
||||||
stateAllowImageChange[0] = false;
|
stateAllowImageChange[0] = false;
|
||||||
//
|
//
|
||||||
stateTimeoutValue[0] = 0.5;
|
stateTimeoutValue[0] = 0.5;
|
||||||
stateTransitionOnTimeout[0] = "Ready";
|
stateTransitionOnTimeout[0] = "Ready";
|
||||||
stateTransitionOnNoAmmo[0] = "NoAmmo";
|
stateTransitionOnNoAmmo[0] = "NoAmmo";
|
||||||
|
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
stateName[1] = "Ready";
|
stateName[1] = "Ready";
|
||||||
stateSpinThread[1] = Stop;
|
stateSpinThread[1] = Stop;
|
||||||
//
|
//
|
||||||
stateTransitionOnTriggerDown[1] = "Spinup";
|
stateTransitionOnTriggerDown[1] = "Spinup";
|
||||||
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
||||||
|
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
stateName[2] = "NoAmmo";
|
stateName[2] = "NoAmmo";
|
||||||
stateTransitionOnAmmo[2] = "Ready";
|
stateTransitionOnAmmo[2] = "Ready";
|
||||||
stateSpinThread[2] = Stop;
|
stateSpinThread[2] = Stop;
|
||||||
stateTransitionOnTriggerDown[2] = "DryFire";
|
stateTransitionOnTriggerDown[2] = "DryFire";
|
||||||
|
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
stateName[3] = "Spinup";
|
stateName[3] = "Spinup";
|
||||||
stateSpinThread[3] = SpinUp;
|
stateSpinThread[3] = SpinUp;
|
||||||
stateSound[3] = ChaingunSpinupSound;
|
stateSound[3] = ChaingunSpinupSound;
|
||||||
//
|
//
|
||||||
stateTimeoutValue[3] = 0.1;
|
stateTimeoutValue[3] = 0.1;
|
||||||
stateWaitForTimeout[3] = false;
|
stateWaitForTimeout[3] = false;
|
||||||
stateTransitionOnTimeout[3] = "Fire";
|
stateTransitionOnTimeout[3] = "Fire";
|
||||||
stateTransitionOnTriggerUp[3] = "Spindown";
|
stateTransitionOnTriggerUp[3] = "Spindown";
|
||||||
|
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
stateName[4] = "Fire";
|
stateName[4] = "Fire";
|
||||||
stateSequence[4] = "Fire";
|
stateSequence[4] = "Fire";
|
||||||
stateSequenceRandomFlash[4] = true;
|
stateSequenceRandomFlash[4] = true;
|
||||||
stateSpinThread[4] = FullSpeed;
|
stateSpinThread[4] = FullSpeed;
|
||||||
//stateSound[4] = MRXXFireSound;
|
//stateSound[4] = MRXXFireSound;
|
||||||
|
|
||||||
stateAllowImageChange[4] = false;
|
stateAllowImageChange[4] = false;
|
||||||
stateScript[4] = "onFire";
|
stateScript[4] = "onFire";
|
||||||
stateFire[4] = true;
|
stateFire[4] = true;
|
||||||
stateEjectShell[4] = true;
|
stateEjectShell[4] = true;
|
||||||
stateTimeoutValue[4] = 0.02;
|
stateTimeoutValue[4] = 0.02;
|
||||||
stateTransitionOnTimeout[4] = "Fire";
|
stateTransitionOnTimeout[4] = "Fire";
|
||||||
stateTransitionOnTriggerUp[4] = "Spindown";
|
stateTransitionOnTriggerUp[4] = "Spindown";
|
||||||
stateTransitionOnNoAmmo[4] = "EmptySpindown";
|
stateTransitionOnNoAmmo[4] = "EmptySpindown";
|
||||||
|
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
stateName[5] = "Spindown";
|
stateName[5] = "Spindown";
|
||||||
stateSound[5] = ChaingunSpinDownSound;
|
stateSound[5] = ChaingunSpinDownSound;
|
||||||
stateSpinThread[5] = SpinDown;
|
stateSpinThread[5] = SpinDown;
|
||||||
//
|
//
|
||||||
stateTimeoutValue[5] = 0.1;
|
stateTimeoutValue[5] = 0.1;
|
||||||
stateWaitForTimeout[5] = true;
|
stateWaitForTimeout[5] = true;
|
||||||
stateTransitionOnTimeout[5] = "Ready";
|
stateTransitionOnTimeout[5] = "Ready";
|
||||||
stateTransitionOnTriggerDown[5] = "Spinup";
|
stateTransitionOnTriggerDown[5] = "Spinup";
|
||||||
|
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
stateName[6] = "EmptySpindown";
|
stateName[6] = "EmptySpindown";
|
||||||
stateSound[6] = ChaingunSpinDownSound;
|
stateSound[6] = ChaingunSpinDownSound;
|
||||||
stateSpinThread[6] = SpinDown;
|
stateSpinThread[6] = SpinDown;
|
||||||
//
|
//
|
||||||
stateTimeoutValue[6] = 1.0;
|
stateTimeoutValue[6] = 1.0;
|
||||||
stateTransitionOnTimeout[6] = "NoAmmo";
|
stateTransitionOnTimeout[6] = "NoAmmo";
|
||||||
|
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
stateName[7] = "DryFire";
|
stateName[7] = "DryFire";
|
||||||
stateSound[7] = ChaingunDryFireSound;
|
stateSound[7] = ChaingunDryFireSound;
|
||||||
stateTimeoutValue[7] = 0.5;
|
stateTimeoutValue[7] = 0.5;
|
||||||
stateTransitionOnTimeout[7] = "NoAmmo";
|
stateTransitionOnTimeout[7] = "NoAmmo";
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ItemData(MRXX) {
|
datablock ItemData(MRXX) {
|
||||||
className = Weapon;
|
className = Weapon;
|
||||||
catagory = "Spawn Items";
|
catagory = "Spawn Items";
|
||||||
shapeFile = "turret_tank_barrelchain.dts";
|
shapeFile = "turret_tank_barrelchain.dts";
|
||||||
image = MRXXImage;
|
image = MRXXImage;
|
||||||
mass = 1.0;
|
mass = 1.0;
|
||||||
elasticity = 0.2;
|
elasticity = 0.2;
|
||||||
friction = 0.6;
|
friction = 0.6;
|
||||||
pickupRadius = 2;
|
pickupRadius = 2;
|
||||||
pickUpName = "a MRXX ZC4 MG";
|
pickUpName = "a MRXX ZC4 MG";
|
||||||
|
|
||||||
computeCRC = true;
|
computeCRC = true;
|
||||||
emap = true;
|
emap = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
function MRXXImage::onFire(%data, %obj, %slot) {
|
function MRXXImage::onFire(%data, %obj, %slot) {
|
||||||
%p = Parent::onFire(%data, %obj, %slot);
|
%p = Parent::onFire(%data, %obj, %slot);
|
||||||
if(%obj.client.UpgradeOn("Silencer", %data.getName())) {
|
if(%obj.client.UpgradeOn("Silencer", %data.getName())) {
|
||||||
//zero sound :p
|
//zero sound :p
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
ServerPlay3d(ChaingunFireSound, %obj.getPosition());
|
ServerPlay3d(ChaingunFireSound, %obj.getPosition());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,304 +1,273 @@
|
||||||
datablock AudioProfile(BOVHitSound) {
|
datablock AudioProfile(BOVHitSound) {
|
||||||
filename = "fx/misc/flag_snatch.wav";
|
filename = "fx/misc/flag_snatch.wav";
|
||||||
description = AudioClose3d;
|
description = AudioClose3d;
|
||||||
preload = true;
|
preload = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ShapeBaseImageData(BOVButt)
|
datablock ShapeBaseImageData(BOVButt) {
|
||||||
{
|
shapeFile = "weapon_disc.dts";
|
||||||
shapeFile = "weapon_disc.dts";
|
mountPoint = 1;
|
||||||
mountPoint = 1;
|
|
||||||
|
|
||||||
offset = "0.0 0.8 0.55"; // L/R - F/B - T/B
|
offset = "0.0 0.8 0.55"; // L/R - F/B - T/B
|
||||||
rotation = "2.0 -2.0 3.0 45"; // L/R - F/B - T/B
|
rotation = "2.0 -2.0 3.0 45"; // L/R - F/B - T/B
|
||||||
|
};
|
||||||
|
|
||||||
|
datablock ShapeBaseImageData(BoVSwing) {
|
||||||
|
shapeFile = "weapon_disc.dts";
|
||||||
|
mountPoint = 1;
|
||||||
|
|
||||||
|
offset = "0.0 1.45 -0.4"; // L/R - F/B - T/B
|
||||||
|
rotation = "0 0 1 180"; // L/R - F/B - T/B
|
||||||
};
|
};
|
||||||
|
|
||||||
function swingbackbov(%obj) {
|
function swingbackbov(%obj) {
|
||||||
%obj.unmountImage(6);
|
%obj.unmountImage(6);
|
||||||
%obj.mountImage(BOVButt, 5);
|
%obj.mountImage(BOVButt, 5);
|
||||||
}
|
}
|
||||||
|
|
||||||
datablock LinearProjectileData(BOVhit) {
|
datablock LinearProjectileData(BOVhit) {
|
||||||
projectileShapeName = "disc.dts";
|
projectileShapeName = "disc.dts";
|
||||||
emitterDelay = -1;
|
emitterDelay = -1;
|
||||||
directDamage = 100.0;
|
directDamage = 0.9;
|
||||||
radiusDamageType = $DamageType::Admin;
|
radiusDamageType = $DamageType::BladeOfVengance;
|
||||||
kickBackStrength = 1750;
|
kickBackStrength = 1750;
|
||||||
|
|
||||||
ImageSource = "BOVImage";
|
|
||||||
|
|
||||||
sound = discProjectileSound;
|
ImageSource = "BOVImage";
|
||||||
explosion = "ChaingunExplosion";
|
|
||||||
underwaterExplosion = "ChaingunExplosion";
|
|
||||||
splash = DiscSplash;
|
|
||||||
|
|
||||||
dryVelocity = 50;
|
sound = discProjectileSound;
|
||||||
wetVelocity = 30;
|
explosion = "ChaingunExplosion";
|
||||||
velInheritFactor = 0.5;
|
underwaterExplosion = "ChaingunExplosion";
|
||||||
fizzleTimeMS = 100;
|
splash = DiscSplash;
|
||||||
lifetimeMS = 100;
|
|
||||||
explodeOnDeath = true;
|
|
||||||
reflectOnWaterImpactAngle = 15.0;
|
|
||||||
explodeOnWaterImpact = true;
|
|
||||||
deflectionOnWaterImpact = 0.0;
|
|
||||||
fizzleUnderwaterMS = 5000;
|
|
||||||
|
|
||||||
activateDelayMS = 200;
|
dryVelocity = 200;
|
||||||
|
wetVelocity = 200;
|
||||||
|
velInheritFactor = 0.5;
|
||||||
|
fizzleTimeMS = 25;
|
||||||
|
lifetimeMS = 25;
|
||||||
|
explodeOnDeath = true;
|
||||||
|
reflectOnWaterImpactAngle = 15.0;
|
||||||
|
explodeOnWaterImpact = true;
|
||||||
|
deflectionOnWaterImpact = 0.0;
|
||||||
|
fizzleUnderwaterMS = 5000;
|
||||||
|
|
||||||
hasLight = true;
|
activateDelayMS = 200;
|
||||||
lightRadius = 6.0;
|
|
||||||
lightColor = "0.175 0.175 0.5";
|
hasLight = true;
|
||||||
|
lightRadius = 6.0;
|
||||||
|
lightColor = "0.175 0.175 0.5";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------------
|
//--------------------------------------------------------------------------
|
||||||
// Weapon
|
// Weapon
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
datablock ShapeBaseImageData(BOVImage)
|
datablock ShapeBaseImageData(BOVImage) {
|
||||||
{
|
className = WeaponImage;
|
||||||
className = WeaponImage;
|
shapeFile = "turret_muzzlepoint.dts";
|
||||||
shapeFile = "turret_muzzlepoint.dts";
|
item = BOV;
|
||||||
item = BOV;
|
projectile = BOVhit;
|
||||||
projectile = BOVhit;
|
projectileType = LinearProjectile;
|
||||||
projectileType = LinearProjectile;
|
|
||||||
|
|
||||||
usesEnergy = true;
|
usesEnergy = true;
|
||||||
fireEnergy = 20;
|
fireEnergy = 20;
|
||||||
minEnergy = 30;
|
minEnergy = 30;
|
||||||
|
|
||||||
MedalRequire = 1;
|
|
||||||
|
|
||||||
stateName[0] = "Activate";
|
MedalRequire = 1;
|
||||||
stateTransitionOnTimeout[0] = "ActivateReady";
|
|
||||||
stateTimeoutValue[0] = 1.0;
|
|
||||||
stateSequence[0] = "Activate";
|
|
||||||
stateSound[0] = BlasterSwitchSound;
|
|
||||||
|
|
||||||
stateName[1] = "ActivateReady";
|
stateName[0] = "Activate";
|
||||||
stateTransitionOnLoaded[1] = "Ready";
|
stateTransitionOnTimeout[0] = "ActivateReady";
|
||||||
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
stateTimeoutValue[0] = 1.0;
|
||||||
|
stateSequence[0] = "Activate";
|
||||||
|
stateSound[0] = BlasterSwitchSound;
|
||||||
|
|
||||||
stateName[2] = "Ready";
|
stateName[1] = "ActivateReady";
|
||||||
stateTransitionOnNoAmmo[2] = "NoAmmo";
|
stateTransitionOnLoaded[1] = "Ready";
|
||||||
stateTransitionOnTriggerDown[2] = "Fire";
|
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
||||||
|
|
||||||
stateName[3] = "Fire";
|
stateName[2] = "Ready";
|
||||||
stateTransitionOnTimeout[3] = "Reload";
|
stateTransitionOnNoAmmo[2] = "NoAmmo";
|
||||||
stateTimeoutValue[3] = 0.5;
|
stateTransitionOnTriggerDown[2] = "Fire";
|
||||||
stateFire[3] = true;
|
|
||||||
stateRecoil[3] = NoRecoil;
|
|
||||||
stateAllowImageChange[3] = false;
|
|
||||||
stateSequence[3] = "Fire";
|
|
||||||
stateScript[3] = "onFire";
|
|
||||||
|
|
||||||
stateName[4] = "Reload";
|
stateName[3] = "Fire";
|
||||||
stateTransitionOnNoAmmo[4] = "NoAmmo";
|
stateTransitionOnTimeout[3] = "Reload";
|
||||||
stateTransitionOnTimeout[4] = "Ready";
|
stateTimeoutValue[3] = 0.5;
|
||||||
stateAllowImageChange[4] = false;
|
stateFire[3] = true;
|
||||||
stateSequence[4] = "Reload";
|
stateRecoil[3] = NoRecoil;
|
||||||
|
stateAllowImageChange[3] = false;
|
||||||
|
stateSequence[3] = "Fire";
|
||||||
|
stateScript[3] = "onFire";
|
||||||
|
|
||||||
stateName[5] = "NoAmmo";
|
stateName[4] = "Reload";
|
||||||
stateTransitionOnAmmo[5] = "Reload";
|
stateTransitionOnNoAmmo[4] = "NoAmmo";
|
||||||
stateSequence[5] = "NoAmmo";
|
stateTransitionOnTimeout[4] = "Ready";
|
||||||
stateTransitionOnTriggerDown[5] = "DryFire";
|
stateAllowImageChange[4] = false;
|
||||||
|
stateSequence[4] = "Reload";
|
||||||
|
|
||||||
stateName[6] = "DryFire";
|
stateName[5] = "NoAmmo";
|
||||||
stateTimeoutValue[6] = 1.0;
|
stateTransitionOnAmmo[5] = "Reload";
|
||||||
stateSound[6] = BlasterDryFireSound;
|
stateSequence[5] = "NoAmmo";
|
||||||
stateTransitionOnTimeout[6] = "Ready";
|
stateTransitionOnTriggerDown[5] = "DryFire";
|
||||||
|
|
||||||
|
stateName[6] = "DryFire";
|
||||||
|
stateTimeoutValue[6] = 1.0;
|
||||||
|
stateSound[6] = BlasterDryFireSound;
|
||||||
|
stateTransitionOnTimeout[6] = "Ready";
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ItemData(BOV)
|
datablock ItemData(BOV) {
|
||||||
{
|
className = Weapon;
|
||||||
className = Weapon;
|
catagory = "Spawn Items";
|
||||||
catagory = "Spawn Items";
|
shapeFile = "weapon_disc.dts";
|
||||||
shapeFile = "weapon_disc.dts";
|
image = BOVImage;
|
||||||
image = BOVImage;
|
mass = 1;
|
||||||
mass = 1;
|
elasticity = 0.2;
|
||||||
elasticity = 0.2;
|
friction = 0.6;
|
||||||
friction = 0.6;
|
pickupRadius = 2;
|
||||||
pickupRadius = 2;
|
|
||||||
pickUpName = "a blade of vengance";
|
pickUpName = "a blade of vengance";
|
||||||
};
|
};
|
||||||
|
|
||||||
function BOVImage::onMount(%data, %obj, %node)
|
function BOVImage::onMount(%data, %obj, %node) {
|
||||||
{
|
if(!%obj.client.hasMedal(11) && !%obj.client.isAiControlled()) {
|
||||||
%obj.meleeIMG = %obj.mountImage(BOVButt, 5);
|
%obj.throwweapon(1);
|
||||||
|
%obj.throwweapon(0);
|
||||||
|
messageClient(%obj.client, 'MsgClient', "\c3You must aquire the 'Revenge Avoided Again' Medal to use this.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
%obj.meleeIMG = %obj.mountImage(BOVButt, 5);
|
||||||
}
|
}
|
||||||
|
|
||||||
function BOVImage::onUnMount(%data, %obj, %node)
|
function BOVImage::onUnMount(%data, %obj, %node) {
|
||||||
{
|
%obj.unmountImage(5);
|
||||||
%obj.unmountImage(5);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
datablock ShapeBaseImageData(BoVSwing)
|
|
||||||
{
|
|
||||||
shapeFile = "weapon_disc.dts";
|
|
||||||
mountPoint = 1;
|
|
||||||
|
|
||||||
offset = "0.0 1.45 -0.4"; // L/R - F/B - T/B
|
|
||||||
rotation = "0 0 1 180"; // L/R - F/B - T/B
|
|
||||||
};
|
|
||||||
|
|
||||||
function BOVImage::onFire(%data, %obj, %node) {
|
function BOVImage::onFire(%data, %obj, %node) {
|
||||||
//dumbass use
|
if(!%obj.client.hasMedal(11) && !%obj.client.isAiControlled()) {
|
||||||
//Person without the medal
|
messageClient(%obj.client, 'MsgClient', "\c3You must aquire the 'Revenge Avoided Again' Medal to use this.");
|
||||||
if(!%obj.client.hasMedal(11) && !%obj.client.isAiControlled()) {
|
return;
|
||||||
messageClient(%obj.client, 'MsgClient', "\c3You must aquire the 'Revenge Avoided Again' Medal to use this.");
|
}
|
||||||
messageall('MsgDummy', "\c0In an effort to use the blade of vengance, "@ %obj.client.namebase@" stabbed himself!");
|
if(%obj.cannotuseBOV) { //in the kill anim?
|
||||||
%obj.scriptKill($DamageType::Admin);
|
return;
|
||||||
return;
|
}
|
||||||
}
|
//
|
||||||
if(%obj.cannotuseBOV) { //in the kill anim?
|
%obj.unmountImage(5);
|
||||||
return;
|
%obj.meleeIMG = %obj.mountImage(BoVSwing, 6);
|
||||||
}
|
%obj.backswing = schedule(300, 0, "swingbackbov", %obj);
|
||||||
//
|
|
||||||
%obj.unmountImage(5);
|
|
||||||
%obj.meleeIMG = %obj.mountImage(BoVSwing, 6);
|
|
||||||
%obj.backswing = schedule(300, 0, "swingbackbov", %obj);
|
|
||||||
|
|
||||||
if(!%obj.client.IsActivePerk("Blade Sweep")) {
|
%p = new (LinearProjectile)() {
|
||||||
%p = new (LinearProjectile)() {
|
dataBlock = BOVhit;
|
||||||
dataBlock = BOVhit;
|
initialDirection = %obj.getMuzzleVector(%slot);
|
||||||
initialDirection = %obj.getMuzzleVector(%slot);
|
initialPosition = %obj.getMuzzlePoint(%slot);
|
||||||
initialPosition = %obj.getMuzzlePoint(%slot);
|
sourceObject = %obj;
|
||||||
sourceObject = %obj;
|
sourceSlot = %slot;
|
||||||
sourceSlot = %slot;
|
};
|
||||||
};
|
MissionCleanup.add(%p);
|
||||||
MissionCleanup.add(%p);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
for (%i = 0; %i < 7; %i++) {
|
|
||||||
%x = (getRandom() - 0.5) * 2 * 3.1415926 * (6/1000);
|
|
||||||
%y = (getRandom() - 0.5) * 2 * 3.1415926 * (6/1000);
|
|
||||||
%z = 0;
|
|
||||||
%mat = MatrixCreateFromEuler(%x @ " " @ %y @ " " @ %z);
|
|
||||||
%newvector = MatrixMulVector(%mat, %vector);
|
|
||||||
|
|
||||||
%p = new (LinearProjectile)() {
|
|
||||||
dataBlock = BOVhit;
|
|
||||||
initialDirection = %newvector;
|
|
||||||
initialPosition = %obj.getMuzzlePoint(%slot);
|
|
||||||
sourceObject = %obj;
|
|
||||||
damageFactor = 1;
|
|
||||||
sourceSlot = %slot;
|
|
||||||
};
|
|
||||||
%p.WeaponImageSource = %data.getName();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function BOVhit::onCollision(%data, %projectile, %targetObject, %modifier, %position, %normal) {
|
function BOVhit::onCollision(%data, %projectile, %targetObject, %modifier, %position, %normal) {
|
||||||
if(%targetObject.isBoss) {
|
%dMod = 1;
|
||||||
%targetObject.playShieldEffect("1 1 1");
|
//
|
||||||
MessageClient(%projectile.sourceObject.client, 'MsgDeflect', "The Boss Deflects The Swipe");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if(%targetObject.rapierShield) {
|
if(%targetObject.rapierShield) {
|
||||||
MessageClient(%projectile.sourceObject.client, 'MsgDeflect', "The Target Is Immortal.");
|
MessageClient(%projectile.sourceObject.client, 'MsgDeflect', "The Target Is Immortal.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
%source = %projectile.SourceObject;
|
//
|
||||||
%hitObj = %targetObject;
|
if(%targetObject.isBoss) {
|
||||||
|
%dMod += 7;
|
||||||
|
}
|
||||||
|
if(%targetObject.isZombie) {
|
||||||
|
%dMod += 100;
|
||||||
|
}
|
||||||
|
%source = %projectile.SourceObject;
|
||||||
|
%hitObj = %targetObject;
|
||||||
|
|
||||||
%muzzlePos = %source.getMuzzlePoint(0);
|
%muzzlePos = %source.getMuzzlePoint(0);
|
||||||
%muzzleVec = %source.getMuzzleVector(0);
|
%muzzleVec = %source.getMuzzleVector(0);
|
||||||
|
|
||||||
// extra damage for head shot or less for close range shots
|
// extra damage for head shot or less for close range shots
|
||||||
if(!(%hitObj.getType() & ($TypeMasks::InteriorObjectType | $TypeMasks::TerrainObjectType)) &&
|
if(!(%hitObj.getType() & ($TypeMasks::InteriorObjectType | $TypeMasks::TerrainObjectType)) && (%hitObj.getDataBlock().getClassName() $= "PlayerData")) {
|
||||||
(%hitObj.getDataBlock().getClassName() $= "PlayerData")) {
|
if(%hitObj.getDataBlock().getClassName() $= "PlayerData") {
|
||||||
|
// Now we see if we hit from behind...
|
||||||
if(%hitObj.getDataBlock().getClassName() $= "PlayerData") {
|
%forwardVec = %hitobj.getForwardVector();
|
||||||
// Now we see if we hit from behind...
|
%objDir2D = getWord(%forwardVec, 0) @ " " @ getWord(%forwardVec,1) @ " " @ "0.0";
|
||||||
%forwardVec = %hitobj.getForwardVector();
|
%objPos = %hitObj.getPosition();
|
||||||
%objDir2D = getWord(%forwardVec, 0) @ " " @ getWord(%forwardVec,1) @ " " @ "0.0";
|
%dif = VectorSub(%objPos, %muzzlePos);
|
||||||
%objPos = %hitObj.getPosition();
|
%dif = getWord(%dif, 0) @ " " @ getWord(%dif, 1) @ " 0";
|
||||||
%dif = VectorSub(%objPos, %muzzlePos);
|
%dif = VectorNormalize(%dif);
|
||||||
%dif = getWord(%dif, 0) @ " " @ getWord(%dif, 1) @ " 0";
|
%dot = VectorDot(%dif, %objDir2D);
|
||||||
%dif = VectorNormalize(%dif);
|
// 120 Deg angle test...
|
||||||
%dot = VectorDot(%dif, %objDir2D);
|
// 1.05 == 60 degrees in radians
|
||||||
|
if (%dot >= mCos(1.05)) {
|
||||||
// 120 Deg angle test...
|
// Rear hit
|
||||||
// 1.05 == 60 degrees in radians
|
%source.applyRepair("0.45"); //we get a bonus repair for rear
|
||||||
if (%dot >= mCos(1.05)) {
|
if(%source.team == %hitObj.team && !$TeamDamage) {
|
||||||
// Rear hit
|
ServerPlay3d(BOVHitSound, %targetObject.getPosition());
|
||||||
%source.applyRepair("0.45"); //we get a bonus repair for rear
|
return;
|
||||||
if(%source.team == %hitObj.team && !$TeamDamage) {
|
}
|
||||||
ServerPlay3d(BOVHitSound, %targetObject.getPosition());
|
%source.cannotuseBOV = 1;
|
||||||
return; //stops shredding
|
if(!%hitObj.IsinvincibleC) {
|
||||||
}
|
DoBOVRearKill(%source, %hitObj, 0);
|
||||||
%source.cannotuseBOV = 1;
|
}
|
||||||
if(!%hitObj.IsinvincibleC) {
|
return;
|
||||||
DoBOVRearKill(%source, %hitObj, 0);
|
}
|
||||||
}
|
}
|
||||||
return;
|
ServerPlay3d(BOVHitSound, %targetObject.getPosition());
|
||||||
}
|
//The Blade Only Works On Players
|
||||||
}
|
%totalDamage = %data.directDamage * dMod;
|
||||||
|
%targetObject.damage(%projectile.sourceObject, %position, %totalDamage, %data.directDamageType);
|
||||||
ServerPlay3d(BOVHitSound, %targetObject.getPosition());
|
if(isObject(%source) || %source.getState() !$= "dead") {
|
||||||
//The Blade Only Works On Players
|
%source.applyRepair("0.15"); //15%
|
||||||
%targetObject.damage(%projectile.sourceObject, %position, %data.directDamage, %data.directDamageType);
|
}
|
||||||
if(isObject(%source) || %source.getState() !$= "dead") {
|
}
|
||||||
%source.applyRepair("0.15"); //15%
|
|
||||||
}
|
|
||||||
if(%targetObject.client !$= "") { //a Player.. goodie
|
|
||||||
if(%targetObject.getState() $= "dead") {
|
|
||||||
MessageAll('MessageAll', "\c0"@%targetObject.client.namebase@" was stabbed by "@%source.client.namebase@"'s Sword.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function DoBOVRearKill(%source, %target, %count) {
|
function DoBOVRearKill(%source, %target, %count) {
|
||||||
%count++;
|
%count++;
|
||||||
if(!isObject(%source) || %source.getState() $= "dead") {
|
if(!isObject(%source) || %source.getState() $= "dead") {
|
||||||
%target.setMoveState(false);
|
%target.setMoveState(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
%source.setMoveState(true);
|
%source.setMoveState(true);
|
||||||
%target.setMoveState(true);
|
%target.setMoveState(true);
|
||||||
%target.clearInventory(); //ha, no guns for You!
|
%target.clearInventory(); //ha, no guns for You!
|
||||||
//lift
|
//lift
|
||||||
if(%count <= 15) {
|
if(%count <= 15) {
|
||||||
%ZPos = %count * 0.025;
|
%ZPos = %count * 0.025;
|
||||||
%newpos = vectoradd(%target.getPosition(),"0 0 "@%ZPos@"");
|
%newpos = vectoradd(%target.getPosition(),"0 0 "@%ZPos@"");
|
||||||
%target.setTransform(%newpos);
|
%target.setTransform(%newpos);
|
||||||
%target.setvelocity("0 0 0");
|
%target.setvelocity("0 0 0");
|
||||||
}
|
}
|
||||||
else if(%count == 16) {
|
else if(%count == 16) {
|
||||||
//MessageAll('MsgDIE', "\c4"@%source.client.namebase@": You're so.... weak...");
|
%newpos = vectoradd(%target.getPosition(),"0 0 "@%ZPos * -1@"");
|
||||||
%newpos = vectoradd(%target.getPosition(),"0 0 "@%ZPos * -1@"");
|
%target.setTransform(%newpos);
|
||||||
%target.setTransform(%newpos);
|
%target.setvelocity("0 0 0");
|
||||||
%target.setvelocity("0 0 0");
|
}
|
||||||
}
|
else if(%count == 17) {
|
||||||
else if(%count == 17) {
|
if(%target.isZombie) {
|
||||||
if(%target.isZombie) {
|
recordAction(%source.client, "BACK", "zombie");
|
||||||
recordAction(%source.client, "BACK", "zombie");
|
if(%target.isPlayerRog && %target.getControllingClient() !$= "") {
|
||||||
if(%target.isPlayerRog && %target.getControllingClient() !$= "") {
|
if(!%source.client.CheckNWChallengeCompletion("CompletelyUnexpected")) {
|
||||||
if(!%source.client.CheckNWChallengeCompletion("CompletelyUnexpected")) {
|
CompleteNWChallenge(%source.client, "CompletelyUnexpected");
|
||||||
CompleteNWChallenge(%source.client, "CompletelyUnexpected");
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
else {
|
||||||
else {
|
recordAction(%source.client, "BACK", "player");
|
||||||
recordAction(%source.client, "BACK", "player");
|
if(!%source.client.CheckNWChallengeCompletion("Assassin")) {
|
||||||
if(!%source.client.CheckNWChallengeCompletion("Assassin")) {
|
CompleteNWChallenge(%source.client, "Assassin");
|
||||||
CompleteNWChallenge(%source.client, "Assassin");
|
}
|
||||||
}
|
}
|
||||||
}
|
ServerPlay3d(BOVHitSound, %target.getPosition());
|
||||||
//%target.blowup();//BAM!
|
ServerPlay3d(BOVHitSound, %target.getPosition());
|
||||||
ServerPlay3d(BOVHitSound, %target.getPosition());
|
ServerPlay3d(BOVHitSound, %target.getPosition());
|
||||||
ServerPlay3d(BOVHitSound, %target.getPosition());
|
%target.damage(%source, %target.getposition(), 9999, $DamageType::BladeOfVengance_Assassination);
|
||||||
ServerPlay3d(BOVHitSound, %target.getPosition());
|
//
|
||||||
%target.damage(%source, %target.getposition(), 9999, $DamageType::BladeOfVengance);
|
if(%target.client !$= "") { //a Player.. goodie
|
||||||
//
|
MessageAll('MessageAll', "\c0"@%target.client.namebase@" was assassinated by "@%source.client.namebase@".");
|
||||||
if(%target.client !$= "") { //a Player.. goodie
|
}
|
||||||
MessageAll('MessageAll', "\c0"@%target.client.namebase@" was assassinated by "@%source.client.namebase@".");
|
//Challenges...
|
||||||
}
|
%source.cannotuseBOV = 0;
|
||||||
//Challenges...
|
%source.setMoveState(false);
|
||||||
%source.cannotuseBOV = 0;
|
return;
|
||||||
%source.setMoveState(false);
|
}
|
||||||
return;
|
schedule(100,0,"DoBOVRearKill", %source, %target, %count);
|
||||||
}
|
|
||||||
schedule(100,0,"DoBOVRearKill", %source, %target, %count);
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,31 +1,28 @@
|
||||||
//ALL CREDIT TO THE HALO MOD
|
//ALL CREDIT TO THE HALO MOD
|
||||||
// ORIGINALLY CODED BY: SoldierOfLight
|
// ORIGINALLY CODED BY: SoldierOfLight
|
||||||
|
|
||||||
datablock AudioProfile(BeamExpSound)
|
datablock AudioProfile(BeamExpSound) {
|
||||||
{
|
filename = "fx/vehicles/shrike_blaster_projectile_impact.wav";
|
||||||
filename = "fx/vehicles/shrike_blaster_projectile_impact.wav";
|
description = AudioClosest3d;
|
||||||
description = AudioClosest3d;
|
preload = true;
|
||||||
preload = true;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ExplosionData(PlasmasaberExplosion)
|
datablock ExplosionData(PlasmasaberExplosion) {
|
||||||
{
|
explosionShape = "disc_explosion.dts";
|
||||||
explosionShape = "disc_explosion.dts";
|
faceViewer = true;
|
||||||
faceViewer = true;
|
explosionscale = 0.1;
|
||||||
explosionscale = 0.1;
|
scale = 0.1;
|
||||||
scale = 0.1;
|
soundProfile = BeamExpSound;
|
||||||
soundProfile = BeamExpSound;
|
|
||||||
|
|
||||||
playSpeed = 2;
|
playSpeed = 2;
|
||||||
|
|
||||||
sizes[0] = 0.1;
|
sizes[0] = 0.1;
|
||||||
sizes[1] = 0.1;
|
sizes[1] = 0.1;
|
||||||
times[0] = 0.0;
|
times[0] = 0.0;
|
||||||
times[1] = 1.0;
|
times[1] = 1.0;
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock TracerProjectileData(PlasmasaberExpCreater)
|
datablock TracerProjectileData(PlasmasaberExpCreater) {
|
||||||
{
|
|
||||||
className = "TracerProjectileData";
|
className = "TracerProjectileData";
|
||||||
Explosion = "PlasmasaberExplosion";
|
Explosion = "PlasmasaberExplosion";
|
||||||
dryVelocity = "0.1";
|
dryVelocity = "0.1";
|
||||||
|
|
@ -35,211 +32,192 @@ datablock TracerProjectileData(PlasmasaberExpCreater)
|
||||||
explodeOnDeath = "1";
|
explodeOnDeath = "1";
|
||||||
crossSize = "0.1";
|
crossSize = "0.1";
|
||||||
renderCross = "0";
|
renderCross = "0";
|
||||||
isFXUnit = "1";
|
isFXUnit = "1";
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock TargetProjectileData(PlasmasaberBeam)
|
datablock TargetProjectileData(PlasmasaberBeam) {
|
||||||
{
|
directDamage = 0.0;
|
||||||
directDamage = 0.0;
|
hasDamageRadius = false;
|
||||||
hasDamageRadius = false;
|
indirectDamage = 0.0;
|
||||||
indirectDamage = 0.0;
|
damageRadius = 0.0;
|
||||||
damageRadius = 0.0;
|
velInheritFactor = 1.0;
|
||||||
velInheritFactor = 1.0;
|
|
||||||
|
|
||||||
maxRifleRange = 1.5;
|
maxRifleRange = 1.5;
|
||||||
beamColor = "0 1 1";
|
beamColor = "1 1 0";
|
||||||
|
|
||||||
startBeamWidth = 0.1;
|
startBeamWidth = 0.1;
|
||||||
pulseBeamWidth = 0.1;
|
pulseBeamWidth = 0.1;
|
||||||
beamFlareAngle = 3.0;
|
beamFlareAngle = 3.0;
|
||||||
minFlareSize = 0.0;
|
minFlareSize = 0.0;
|
||||||
maxFlareSize = 0.0;
|
maxFlareSize = 0.0;
|
||||||
pulseSpeed = 0.0;
|
pulseSpeed = 0.0;
|
||||||
pulseLength = 0.0;
|
pulseLength = 0.0;
|
||||||
|
|
||||||
textureName[0] = "special/nonlingradient";
|
textureName[0] = "special/nonlingradient";
|
||||||
textureName[1] = "special/flare";
|
textureName[1] = "special/flare";
|
||||||
textureName[2] = "special/pulse";
|
textureName[2] = "special/pulse";
|
||||||
textureName[3] = "skins/glow_Red";
|
textureName[3] = "skins/glow_Red";
|
||||||
};
|
};
|
||||||
|
|
||||||
PlasmasaberBeam.maxRifleRange = 1.5;
|
datablock ItemData(Plasmasaber) {
|
||||||
|
className = Weapon;
|
||||||
datablock ItemData(Plasmasaber)
|
catagory = "Spawn Items";
|
||||||
{
|
//$$ TODO - real shape file
|
||||||
className = Weapon;
|
shapeFile = "stackable4m.dts";
|
||||||
catagory = "Spawn Items";
|
image = PlasmasaberImage;
|
||||||
//$$ TODO - real shape file
|
mass = 1;
|
||||||
shapeFile = "stackable4m.dts";
|
elasticity = 0.2;
|
||||||
image = PlasmasaberImage;
|
friction = 0.6;
|
||||||
mass = 1;
|
pickupRadius = 2;
|
||||||
elasticity = 0.2;
|
|
||||||
friction = 0.6;
|
|
||||||
pickupRadius = 2;
|
|
||||||
pickUpName = "a beam sword";
|
pickUpName = "a beam sword";
|
||||||
|
|
||||||
computeCRC = true;
|
computeCRC = true;
|
||||||
emap=true;
|
emap = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ShapeBaseImageData(PlasmasaberImage)
|
datablock ShapeBaseImageData(PlasmasaberImage) {
|
||||||
{
|
className = WeaponImage;
|
||||||
className = WeaponImage;
|
shapeFile = "turret_muzzlepoint.dts";
|
||||||
shapeFile = "turret_muzzlepoint.dts";
|
offset = "0.1 0.7 0.2";
|
||||||
offset = "0.1 0.7 0.2";
|
item = Plasmasaber;
|
||||||
item = Plasmasaber;
|
emap = true;
|
||||||
emap = true;
|
projectile = EnergyBolt;
|
||||||
projectile = EnergyBolt;
|
projectileType = EnergyProjectile;
|
||||||
projectileType = EnergyProjectile;
|
|
||||||
|
|
||||||
MedalRequire = 1;
|
|
||||||
|
|
||||||
// State Data
|
MedalRequire = 1;
|
||||||
stateName[0] = "Activate";
|
|
||||||
stateTransitionOnTimeout[0] = "ActivateReady";
|
|
||||||
stateTimeoutValue[0] = 0.2;
|
|
||||||
stateSequence[0] = "Activate";
|
|
||||||
stateSound[0] = ChaingunSwitchSound;
|
|
||||||
|
|
||||||
stateName[1] = "ActivateReady";
|
// State Data
|
||||||
stateTimeoutValue[1] = 0.01;
|
stateName[0] = "Activate";
|
||||||
stateScript[1] = "onActivateReady";
|
stateTransitionOnTimeout[0] = "ActivateReady";
|
||||||
stateTransitionOnTimeout[1] = "Ready";
|
stateTimeoutValue[0] = 0.2;
|
||||||
|
stateSequence[0] = "Activate";
|
||||||
|
stateSound[0] = ChaingunSwitchSound;
|
||||||
|
|
||||||
stateName[2] = "Ready";
|
stateName[1] = "ActivateReady";
|
||||||
stateScript[2] = "onReady";
|
stateTimeoutValue[1] = 0.01;
|
||||||
stateTransitionOnTriggerDown[2] = "Fire";
|
stateScript[1] = "onActivateReady";
|
||||||
|
stateTransitionOnTimeout[1] = "Ready";
|
||||||
|
|
||||||
stateName[3] = "Fire";
|
stateName[2] = "Ready";
|
||||||
stateTransitionOnTimeout[3] = "Reload";
|
stateScript[2] = "onReady";
|
||||||
stateFire[3] = true;
|
stateTransitionOnTriggerDown[2] = "Fire";
|
||||||
stateAllowImageChange[3] = false;
|
|
||||||
stateScript[3] = "onFire";
|
|
||||||
|
|
||||||
stateName[4] = "Reload";
|
stateName[3] = "Fire";
|
||||||
stateTransitionOnTimeout[4] = "Ready";
|
stateTransitionOnTimeout[3] = "Reload";
|
||||||
stateTimeoutValue[4] = 1.5;
|
stateFire[3] = true;
|
||||||
stateAllowImageChange[4] = false;
|
stateAllowImageChange[3] = false;
|
||||||
|
stateScript[3] = "onFire";
|
||||||
|
|
||||||
|
stateName[4] = "Reload";
|
||||||
|
stateTransitionOnTimeout[4] = "Ready";
|
||||||
|
stateTimeoutValue[4] = 1.5;
|
||||||
|
stateAllowImageChange[4] = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ShapeBaseImageData(PlasmasaberImage2)
|
datablock ShapeBaseImageData(PlasmasaberImage2) {
|
||||||
{
|
shapeFile = "weapon_energy_vehicle.dts";
|
||||||
shapeFile = "weapon_energy_vehicle.dts";
|
offset = "0.1 0.2 0";
|
||||||
offset = "0.1 0.2 0";
|
rotation = "1 0 0 -10";
|
||||||
rotation = "1 0 0 -10";
|
|
||||||
};
|
};
|
||||||
|
|
||||||
function PlasmasaberImage::onMount(%data,%obj,%slot)
|
function PlasmasaberImage::onMount(%data, %obj, %slot) {
|
||||||
{
|
if(%obj.isZombie || %obj.isBoss) {
|
||||||
if(%obj.isZombie || %obj.isBoss) {
|
%obj.setInventory(Plasmasaber, 0, true);
|
||||||
%obj.setInventory(Plasmasaber, 0, true);
|
}
|
||||||
}
|
Parent::onMount(%data,%obj,%slot);
|
||||||
Parent::onMount(%data,%obj,%slot);
|
%obj.mountImage(PlasmasaberImage2, 4);
|
||||||
%obj.mountImage(PlasmasaberImage2,4);
|
%obj.usingPlasmasaber = 1;
|
||||||
%obj.usingPlasmasaber = 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function PlasmasaberImage::onUnmount(%data,%obj,%slot)
|
function PlasmasaberImage::onUnmount(%data, %obj, %slot) {
|
||||||
{
|
Parent::onUnmount(%data,%obj,%slot);
|
||||||
Parent::onUnmount(%data,%obj,%slot);
|
%obj.unMountImage(4);
|
||||||
%obj.unMountImage(4);
|
%obj.usingPlasmasaber = 0;
|
||||||
%obj.usingPlasmasaber = 0;
|
cancel(%obj.Plasmasaberloop);
|
||||||
cancel(%obj.Plasmasaberloop);
|
if(isObject(%obj.beam1)) {
|
||||||
if(isObject(%obj.beam1))
|
%obj.beam1.delete();
|
||||||
{
|
%obj.beam1 = "";
|
||||||
%obj.beam1.delete();
|
}
|
||||||
%obj.beam1 = "";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function PlasmasaberImage::onActivateReady(%data,%obj,%slot) //small explosion
|
function PlasmasaberImage::onActivateReady(%data, %obj, %slot) { //small explosion
|
||||||
{
|
%p = new TracerProjectile() {
|
||||||
%p = new TracerProjectile()
|
datablock = "PlasmasaberExpCreater";
|
||||||
{
|
initialPosition = %obj.getMuzzlePoint(%slot);
|
||||||
datablock = "PlasmasaberExpCreater";
|
initialDirection = %obj.getMuzzleVector(%slot);
|
||||||
initialPosition = %obj.getMuzzlePoint(%slot);
|
sourceObject = %obj;
|
||||||
initialDirection = %obj.getMuzzleVector(%slot);
|
};
|
||||||
sourceObject = %obj;
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function PlasmasaberImage::onReady(%data,%obj,%slot) //create beams
|
function PlasmasaberImage::onReady(%data, %obj, %slot) { //create beams
|
||||||
{
|
Plasmasaberloop(%obj);
|
||||||
Plasmasaberloop(%obj);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function PlasmasaberLoop(%obj)
|
function PlasmasaberLoop(%obj) {
|
||||||
{
|
if(!isObject(%obj) || %obj.getState() $= "dead") {
|
||||||
if(!isObject(%obj) || %obj.getState() $= "dead") {
|
return;
|
||||||
return;
|
}
|
||||||
}
|
if(%obj.usingPlasmasaber == 0) {
|
||||||
if(%obj.usingPlasmasaber == 0)
|
if(isObject(%obj.beam1)) {
|
||||||
{
|
%obj.beam1.delete();
|
||||||
if(isObject(%obj.beam1))
|
}
|
||||||
%obj.beam1.delete();
|
return;
|
||||||
return;
|
}
|
||||||
}
|
%vec1 = %obj.getMuzzleVector(4);
|
||||||
%vec1 = %obj.getMuzzleVector(4);
|
%vec = %obj.getMuzzleVector(0);
|
||||||
%vec = %obj.getMuzzleVector(0);
|
%vec2d = getWords(%vec,0,1) SPC "0";
|
||||||
%vec2d = getWords(%vec,0,1) SPC "0";
|
%left = vectorCross(%vec2d,"0 0 1");
|
||||||
%left = vectorCross(%vec2d,"0 0 1");
|
%up = vectorCross(%vec,%left);
|
||||||
%up = vectorCross(%vec,%left);
|
%up = vectorScale(%up,0.2);
|
||||||
%up = vectorScale(%up,0.2);
|
%down = vectorScale(%up,-1);
|
||||||
%down = vectorScale(%up,-1);
|
%pos1 = %obj.getMuzzlePoint(5);
|
||||||
%pos1 = %obj.getMuzzlePoint(5);
|
%dir1 = vectorAdd(%vec1,%down);
|
||||||
%dir1 = vectorAdd(%vec1,%down);
|
if(!isObject(%obj.beam1) && !%obj.isCloaked()) {
|
||||||
if(!isObject(%obj.beam1) && !%obj.isCloaked())
|
%obj.beam1 = new TargetProjectile() {
|
||||||
{
|
datablock = "PlasmasaberBeam";
|
||||||
%obj.beam1 = new TargetProjectile()
|
initialPosition = %pos1;
|
||||||
{
|
initialDirection = %dir1;
|
||||||
datablock = "PlasmasaberBeam";
|
sourceSlot = 4;
|
||||||
initialPosition = %pos1;
|
sourceObject = %obj;
|
||||||
initialDirection = %dir1;
|
};
|
||||||
sourceSlot = 4;
|
}
|
||||||
sourceObject = %obj;
|
%obj.Plasmasaberloop = schedule(25, 0, Plasmasaberloop, %obj);
|
||||||
};
|
|
||||||
}
|
|
||||||
%obj.Plasmasaberloop = schedule(25,0,Plasmasaberloop,%obj);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function PlasmasaberImage::onFire(%data,%obj,%slot) //apply damage
|
function PlasmasaberImage::onFire(%data, %obj, %slot) { //apply damage
|
||||||
{
|
%vec = %obj.getMuzzleVector(%slot);
|
||||||
%vec = %obj.getMuzzleVector(%slot);
|
%pos = %obj.getMuzzlePoint(%slot);
|
||||||
%pos = %obj.getMuzzlePoint(%slot);
|
%vec = vectorScale(%vec, 1.5);
|
||||||
%vec = vectorScale(%vec,1.5);
|
%end = vectorAdd(%pos, %vec);
|
||||||
%end = vectorAdd(%pos,%vec);
|
%mask = $TypeMasks::VehicleObjectType | $TypeMasks::PlayerObjectType | $TypeMasks::StaticShapeObjectType;
|
||||||
%mask = $TypeMasks::VehicleObjectType | $TypeMasks::PlayerObjectType | $TypeMasks::StaticShapeObjectType;
|
initContainerRadiusSearch(%end, 1.0, %mask);
|
||||||
initContainerRadiusSearch(%end,1.0,%mask);
|
while((%target = containerSearchNext()) != 0) {
|
||||||
while((%target = containerSearchNext()) != 0) {
|
if(%target == %obj) {
|
||||||
if(%target == %obj) //you can never be too careful
|
return;
|
||||||
return;
|
}
|
||||||
if(!%target.isBoss) {
|
//if(!%target.isBoss) {
|
||||||
%target.damage(%obj,%target.getWorldBoxCenter(), 10.4, $DamageType::Plasmasaber);
|
// %target.damage(%obj, %target.getWorldBoxCenter(), 10.4, $DamageType::Plasmasaber);
|
||||||
}
|
//}
|
||||||
else {
|
//else {
|
||||||
%target.damage(%obj,%target.getWorldBoxCenter(), 0.4, $DamageType::Plasmasaber);
|
// %target.damage(%obj, %target.getWorldBoxCenter(), 0.4, $DamageType::Plasmasaber);
|
||||||
}
|
//}
|
||||||
%p = new TracerProjectile()
|
//TWM2 3.9.2: Balance Update, Bump Up Plasmasaber damage for all enemies
|
||||||
{
|
%target.damage(%obj, %target.getWorldBoxCenter(), 5.0, $DamageType::Plasmasaber);
|
||||||
datablock = "PlasmasaberExpCreater";
|
%p = new TracerProjectile() {
|
||||||
initialPosition = %target.getPosition();
|
datablock = "PlasmasaberExpCreater";
|
||||||
initialDirection = %obj.getMuzzleVector(%slot); //who cares?
|
initialPosition = %target.getPosition();
|
||||||
sourceObject = %obj;
|
initialDirection = %obj.getMuzzleVector(%slot); //who cares?
|
||||||
};
|
sourceObject = %obj;
|
||||||
}
|
};
|
||||||
//play anim
|
}
|
||||||
// %obj.disableMove(true); //don't screw up the kewl animation ;)
|
|
||||||
// %obj.schedule(500,disableMove,false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function Plasmasaber::onThrow(%data,%obj,%plyr)
|
function Plasmasaber::onThrow(%data, %obj, %plyr) {
|
||||||
{
|
%pos = %obj.getPosition();
|
||||||
%pos = %obj.getPosition();
|
%p = new TracerProjectile() {
|
||||||
%p = new TracerProjectile()
|
datablock = "PlasmasaberExpCreater";
|
||||||
{
|
initialPosition = %pos;
|
||||||
datablock = "PlasmasaberExpCreater";
|
initialDirection = "0 0 1";
|
||||||
initialPosition = %pos;
|
sourceObject = %obj;
|
||||||
initialDirection = "0 0 1";
|
};
|
||||||
sourceObject = %obj;
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -155,49 +155,6 @@ datablock TracerProjectileData(LZombieAcidBall) {
|
||||||
emap = true;
|
emap = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock TracerProjectileData(EliteRapierAcidBomb) {
|
|
||||||
doDynamicClientHits = true;
|
|
||||||
|
|
||||||
projectileShapeName = "";
|
|
||||||
directDamage = 0.0;
|
|
||||||
directDamageType = $DamageType::ZAcid;
|
|
||||||
hasDamageRadius = true;
|
|
||||||
indirectDamage = 0.6;
|
|
||||||
damageRadius = 7.5;
|
|
||||||
kickBackStrength = 0.0;
|
|
||||||
radiusDamageType = $DamageType::ZAcid;
|
|
||||||
sound = BlasterProjectileSound;
|
|
||||||
explosion = ZAcidBombExplosion;
|
|
||||||
|
|
||||||
ImageSource = "AcidCannonImage";
|
|
||||||
|
|
||||||
dryVelocity = 100.0;
|
|
||||||
wetVelocity = 100.0;
|
|
||||||
velInheritFactor = 1.0;
|
|
||||||
fizzleTimeMS = 4000;
|
|
||||||
lifetimeMS = 1000;
|
|
||||||
explodeOnDeath = false;
|
|
||||||
reflectOnWaterImpactAngle = 0.0;
|
|
||||||
explodeOnWaterImpact = true;
|
|
||||||
deflectionOnWaterImpact = 0.0;
|
|
||||||
fizzleUnderwaterMS = -1;
|
|
||||||
|
|
||||||
activateDelayMS = 100;
|
|
||||||
|
|
||||||
tracerLength = 10;
|
|
||||||
tracerAlpha = false;
|
|
||||||
tracerMinPixels = 6;
|
|
||||||
tracerColor = "0 1 0 1";
|
|
||||||
tracerTex[0] = "special/landSpikeBolt";
|
|
||||||
tracerTex[1] = "special/landSpikeBoltCross";
|
|
||||||
tracerWidth = 0.8;
|
|
||||||
crossSize = 0.79;
|
|
||||||
crossViewAng = 0.990;
|
|
||||||
renderCross = true;
|
|
||||||
emap = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
datablock TracerProjectileData(SSZombieAcidBall) {
|
datablock TracerProjectileData(SSZombieAcidBall) {
|
||||||
doDynamicClientHits = true;
|
doDynamicClientHits = true;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,146 +1,146 @@
|
||||||
datablock ItemData(IonLauncherAmmo)
|
datablock ItemData(IonLauncherAmmo) {
|
||||||
{
|
className = Ammo;
|
||||||
className = Ammo;
|
catagory = "Ammo";
|
||||||
catagory = "Ammo";
|
shapeFile = "ammo_missile.dts";
|
||||||
shapeFile = "ammo_missile.dts";
|
mass = 1;
|
||||||
mass = 1;
|
elasticity = 0.2;
|
||||||
elasticity = 0.2;
|
friction = 0.6;
|
||||||
friction = 0.6;
|
pickupRadius = 2;
|
||||||
pickupRadius = 2;
|
|
||||||
pickUpName = "Some Ion Launcher Missiles";
|
pickUpName = "Some Ion Launcher Missiles";
|
||||||
|
|
||||||
computeCRC = true;
|
computeCRC = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
//--------------------------------------------------------------------------
|
//--------------------------------------------------------------------------
|
||||||
// Weapon
|
// Weapon
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
datablock ItemData(IonLauncher)
|
datablock ItemData(IonLauncher) {
|
||||||
{
|
className = Weapon;
|
||||||
className = Weapon;
|
catagory = "Spawn Items";
|
||||||
catagory = "Spawn Items";
|
shapeFile = "weapon_grenade_launcher.dts";
|
||||||
shapeFile = "weapon_grenade_launcher.dts";
|
image = IonLauncherImage;
|
||||||
image = IonLauncherImage;
|
mass = 1;
|
||||||
mass = 1;
|
elasticity = 0.2;
|
||||||
elasticity = 0.2;
|
friction = 0.6;
|
||||||
friction = 0.6;
|
pickupRadius = 2;
|
||||||
pickupRadius = 2;
|
pickUpName = "an Ion Launcher";
|
||||||
pickUpName = "an Ion Launcher";
|
|
||||||
|
|
||||||
computeCRC = true;
|
computeCRC = true;
|
||||||
emap = true;
|
emap = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ShapeBaseImageData(IonLauncherImage)
|
datablock ShapeBaseImageData(IonLauncherImage) {
|
||||||
{
|
className = WeaponImage;
|
||||||
className = WeaponImage;
|
shapeFile = "weapon_grenade_launcher.dts";
|
||||||
shapeFile = "weapon_grenade_launcher.dts";
|
item = IonLauncher;
|
||||||
item = IonLauncher;
|
ammo = IonLauncherAmmo;
|
||||||
ammo = IonLauncherAmmo;
|
offset = "0 -1 0";
|
||||||
offset = "0 -1 0";
|
armThread = lookms;
|
||||||
armThread = lookms;
|
emap = true;
|
||||||
emap = true;
|
|
||||||
|
|
||||||
projectile = IonMissile;
|
projectile = IonMissile;
|
||||||
projectileType = seekerprojectile;
|
projectileType = seekerprojectile;
|
||||||
projectileSpread = 1.0 / 1000.0;
|
projectileSpread = 1.0 / 1000.0;
|
||||||
|
|
||||||
//ClipStuff
|
//ClipStuff
|
||||||
ClipName = "IonLauncherClip";
|
ClipName = "IonLauncherClip";
|
||||||
ClipPickupName["IonLauncherClip"] = "A Few Ion Missile boxes";
|
ClipPickupName["IonLauncherClip"] = "A Few Ion Missile boxes";
|
||||||
ShowsClipInHud = 1;
|
ShowsClipInHud = 1;
|
||||||
ClipReloadTime = 6;
|
ClipReloadTime = 6;
|
||||||
ClipReturn = 2;
|
ClipReturn = 2;
|
||||||
InitialClips = 7;
|
InitialClips = 7;
|
||||||
|
|
||||||
GunName = "LUX-4 Ion Launcher";
|
|
||||||
//
|
|
||||||
|
|
||||||
MedalRequire = 1;
|
|
||||||
|
|
||||||
isSeeker = true;
|
|
||||||
seekRadius = 1000;
|
|
||||||
maxSeekAngle = 8;
|
|
||||||
seekTime = 0.5;
|
|
||||||
minSeekHeat = 0.1; // the heat that must be present on a target to lock it.
|
|
||||||
|
|
||||||
// only target objects outside this range
|
GunName = "LUX-4 Ion Launcher";
|
||||||
minTargetingDistance = 40;
|
//
|
||||||
|
|
||||||
stateName[0] = "Activate";
|
MedalRequire = 1;
|
||||||
stateTransitionOnTimeout[0] = "ActivateReady";
|
|
||||||
stateTimeoutValue[0] = 2.0;
|
|
||||||
stateSequence[0] = "Activate";
|
|
||||||
stateSound[0] = MissileSwitchSound;
|
|
||||||
|
|
||||||
stateName[1] = "ActivateReady";
|
isSeeker = true;
|
||||||
stateTransitionOnLoaded[1] = "Ready";
|
seekRadius = 1000;
|
||||||
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
maxSeekAngle = 8;
|
||||||
|
seekTime = 0.5;
|
||||||
|
minSeekHeat = 0.1; // the heat that must be present on a target to lock it.
|
||||||
|
|
||||||
stateName[2] = "Ready";
|
// only target objects outside this range
|
||||||
stateTransitionOnNoAmmo[2] = "NoAmmo";
|
minTargetingDistance = 40;
|
||||||
stateTransitionOnTriggerDown[2] = "CheckWet";
|
|
||||||
|
|
||||||
stateName[3] = "Fire";
|
stateName[0] = "Activate";
|
||||||
stateTransitionOnTimeout[3] = "Reload";
|
stateTransitionOnTimeout[0] = "ActivateReady";
|
||||||
stateTimeoutValue[3] = 0.4;
|
stateTimeoutValue[0] = 2.0;
|
||||||
stateFire[3] = true;
|
stateSequence[0] = "Activate";
|
||||||
stateRecoil[3] = LightRecoil;
|
stateSound[0] = MissileSwitchSound;
|
||||||
stateAllowImageChange[3] = false;
|
|
||||||
stateSequence[3] = "Fire";
|
|
||||||
stateScript[3] = "onFire";
|
|
||||||
stateSound[3] = MissileFireSound;
|
|
||||||
|
|
||||||
stateName[4] = "Reload";
|
stateName[1] = "ActivateReady";
|
||||||
stateTransitionOnNoAmmo[4] = "NoAmmo";
|
stateTransitionOnLoaded[1] = "Ready";
|
||||||
stateTransitionOnTimeout[4] = "Ready";
|
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
||||||
stateTimeoutValue[4] = 4.5;
|
|
||||||
stateAllowImageChange[4] = false;
|
|
||||||
stateSequence[4] = "Reload";
|
|
||||||
stateSound[4] = MissileReloadSound;
|
|
||||||
|
|
||||||
stateName[5] = "NoAmmo";
|
stateName[2] = "Ready";
|
||||||
stateTransitionOnAmmo[5] = "Reload";
|
stateTransitionOnNoAmmo[2] = "NoAmmo";
|
||||||
stateSequence[5] = "NoAmmo";
|
stateTransitionOnTriggerDown[2] = "CheckWet";
|
||||||
stateTransitionOnTriggerDown[5] = "DryFire";
|
|
||||||
|
|
||||||
stateName[6] = "DryFire";
|
stateName[3] = "Fire";
|
||||||
stateSound[6] = MissileDryFireSound;
|
stateTransitionOnTimeout[3] = "Reload";
|
||||||
stateTimeoutValue[6] = 1.0;
|
stateTimeoutValue[3] = 0.4;
|
||||||
stateTransitionOnTimeout[6] = "ActivateReady";
|
stateFire[3] = true;
|
||||||
|
stateRecoil[3] = LightRecoil;
|
||||||
|
stateAllowImageChange[3] = false;
|
||||||
|
stateSequence[3] = "Fire";
|
||||||
|
stateScript[3] = "onFire";
|
||||||
|
stateSound[3] = MissileFireSound;
|
||||||
|
|
||||||
stateName[7] = "CheckTarget";
|
stateName[4] = "Reload";
|
||||||
stateTransitionOnNoTarget[7] = "Fire";
|
stateTransitionOnNoAmmo[4] = "NoAmmo";
|
||||||
stateTransitionOnTarget[7] = "Fire";
|
stateTransitionOnTimeout[4] = "Ready";
|
||||||
|
stateTimeoutValue[4] = 4.5;
|
||||||
|
stateAllowImageChange[4] = false;
|
||||||
|
stateSequence[4] = "Reload";
|
||||||
|
stateSound[4] = MissileReloadSound;
|
||||||
|
|
||||||
stateName[8] = "CheckWet";
|
stateName[5] = "NoAmmo";
|
||||||
stateTransitionOnWet[8] = "DryFire";
|
stateTransitionOnAmmo[5] = "Reload";
|
||||||
stateTransitionOnNotWet[8] = "CheckTarget";
|
stateSequence[5] = "NoAmmo";
|
||||||
|
stateTransitionOnTriggerDown[5] = "DryFire";
|
||||||
|
|
||||||
stateName[9] = "WetFire";
|
stateName[6] = "DryFire";
|
||||||
stateTransitionOnNoAmmo[9] = "NoAmmo";
|
stateSound[6] = MissileDryFireSound;
|
||||||
stateTransitionOnTimeout[9] = "Reload";
|
stateTimeoutValue[6] = 1.0;
|
||||||
stateTimeoutValue[9] = 0.4;
|
stateTransitionOnTimeout[6] = "ActivateReady";
|
||||||
stateScript[9] = "onWetFire";
|
|
||||||
stateAllowImageChange[9] = false;
|
stateName[7] = "CheckTarget";
|
||||||
|
stateTransitionOnNoTarget[7] = "Fire";
|
||||||
|
stateTransitionOnTarget[7] = "Fire";
|
||||||
|
|
||||||
|
stateName[8] = "CheckWet";
|
||||||
|
stateTransitionOnWet[8] = "DryFire";
|
||||||
|
stateTransitionOnNotWet[8] = "CheckTarget";
|
||||||
|
|
||||||
|
stateName[9] = "WetFire";
|
||||||
|
stateTransitionOnNoAmmo[9] = "NoAmmo";
|
||||||
|
stateTransitionOnTimeout[9] = "Reload";
|
||||||
|
stateTimeoutValue[9] = 0.4;
|
||||||
|
stateScript[9] = "onWetFire";
|
||||||
|
stateAllowImageChange[9] = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
function IonLauncherImage::onFire(%data,%obj,%slot) {
|
function IonLauncherImage::onFire(%data,%obj,%slot) {
|
||||||
%p = Parent::onFire(%data, %obj, %slot);
|
%p = Parent::onFire(%data, %obj, %slot);
|
||||||
MissileSet.add(%p);
|
MissileSet.add(%p);
|
||||||
|
|
||||||
%target = %obj.getLockedTarget();
|
%target = %obj.getLockedTarget();
|
||||||
if(%target)
|
if(%target) {
|
||||||
%p.setObjectTarget(%target);
|
%p.setObjectTarget(%target);
|
||||||
else if(%obj.isLocked())
|
}
|
||||||
%p.setPositionTarget(%obj.getLockedPosition());
|
else if(%obj.isLocked()) {
|
||||||
else
|
%p.setPositionTarget(%obj.getLockedPosition());
|
||||||
%p.setNoTarget();
|
}
|
||||||
|
else {
|
||||||
|
%p.setNoTarget();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function IonLauncherImage::onWetFire(%data, %obj, %slot) {
|
function IonLauncherImage::onWetFire(%data, %obj, %slot) {
|
||||||
%p = Parent::onFire(%data, %obj, %slot);
|
%p = Parent::onFire(%data, %obj, %slot);
|
||||||
MissileSet.add(%p);
|
MissileSet.add(%p);
|
||||||
|
|
||||||
%p.setObjectTarget(0);
|
%p.setObjectTarget(0);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,96 +1,97 @@
|
||||||
datablock ItemData(IonRifle) {
|
datablock ItemData(IonRifle) {
|
||||||
className = Weapon;
|
className = Weapon;
|
||||||
catagory = "Spawn Items";
|
catagory = "Spawn Items";
|
||||||
shapeFile = "weapon_sniper.dts";
|
shapeFile = "weapon_sniper.dts";
|
||||||
image = IonRifleImage;
|
image = IonRifleImage;
|
||||||
mass = 1;
|
mass = 1;
|
||||||
elasticity = 0.2;
|
elasticity = 0.2;
|
||||||
friction = 0.6;
|
friction = 0.6;
|
||||||
pickupRadius = 2;
|
pickupRadius = 2;
|
||||||
pickUpName = "a sniper rifle";
|
pickUpName = "a LUX Ion Rifle";
|
||||||
|
|
||||||
computeCRC = true;
|
|
||||||
|
|
||||||
|
computeCRC = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ShapeBaseImageData(IonRifleImage) {
|
datablock ShapeBaseImageData(IonRifleImage) {
|
||||||
className = WeaponImage;
|
className = WeaponImage;
|
||||||
shapeFile = "weapon_sniper.dts";
|
shapeFile = "weapon_sniper.dts";
|
||||||
item = IonRifle;
|
item = IonRifle;
|
||||||
projectile = ShockBeam;
|
projectile = ShockBeam;
|
||||||
projectileType = SniperProjectile;
|
projectileType = SniperProjectile;
|
||||||
armThread = looksn;
|
armThread = looksn;
|
||||||
|
|
||||||
MedalRequire = 1;
|
MedalRequire = 1;
|
||||||
|
|
||||||
usesEnergy = true;
|
usesEnergy = true;
|
||||||
minEnergy = 6;
|
minEnergy = 6;
|
||||||
|
|
||||||
stateName[0] = "Activate";
|
stateName[0] = "Activate";
|
||||||
stateTransitionOnTimeout[0] = "ActivateReady";
|
stateTransitionOnTimeout[0] = "ActivateReady";
|
||||||
stateSound[0] = SniperRifleSwitchSound;
|
stateSound[0] = SniperRifleSwitchSound;
|
||||||
stateTimeoutValue[0] = 0.5;
|
stateTimeoutValue[0] = 0.5;
|
||||||
stateSequence[0] = "Activate";
|
stateSequence[0] = "Activate";
|
||||||
|
|
||||||
stateName[1] = "ActivateReady";
|
stateName[1] = "ActivateReady";
|
||||||
stateTransitionOnLoaded[1] = "Ready";
|
stateTransitionOnLoaded[1] = "Ready";
|
||||||
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
||||||
|
|
||||||
stateName[2] = "Ready";
|
stateName[2] = "Ready";
|
||||||
stateTransitionOnNoAmmo[2] = "NoAmmo";
|
stateTransitionOnNoAmmo[2] = "NoAmmo";
|
||||||
stateTransitionOnTriggerDown[2] = "CheckWet";
|
stateTransitionOnTriggerDown[2] = "CheckWet";
|
||||||
|
|
||||||
stateName[3] = "Fire";
|
stateName[3] = "Fire";
|
||||||
stateTransitionOnTimeout[3] = "Reload";
|
stateTransitionOnTimeout[3] = "Reload";
|
||||||
stateTimeoutValue[3] = 0.5;
|
stateTimeoutValue[3] = 0.5;
|
||||||
stateFire[3] = true;
|
stateFire[3] = true;
|
||||||
stateAllowImageChange[3] = false;
|
stateAllowImageChange[3] = false;
|
||||||
stateSequence[3] = "Fire";
|
stateSequence[3] = "Fire";
|
||||||
stateScript[3] = "onFire";
|
stateScript[3] = "onFire";
|
||||||
|
|
||||||
stateName[4] = "Reload";
|
stateName[4] = "Reload";
|
||||||
stateTransitionOnTimeout[4] = "Ready";
|
stateTransitionOnTimeout[4] = "Ready";
|
||||||
stateTimeoutValue[4] = 0.5;
|
stateTimeoutValue[4] = 0.5;
|
||||||
stateAllowImageChange[4] = false;
|
stateAllowImageChange[4] = false;
|
||||||
|
|
||||||
stateName[5] = "CheckWet";
|
stateName[5] = "CheckWet";
|
||||||
stateTransitionOnWet[5] = "DryFire";
|
stateTransitionOnWet[5] = "DryFire";
|
||||||
stateTransitionOnNotWet[5] = "Fire";
|
stateTransitionOnNotWet[5] = "Fire";
|
||||||
|
|
||||||
stateName[6] = "NoAmmo";
|
stateName[6] = "NoAmmo";
|
||||||
stateTransitionOnAmmo[6] = "Reload";
|
stateTransitionOnAmmo[6] = "Reload";
|
||||||
stateTransitionOnTriggerDown[6] = "DryFire";
|
stateTransitionOnTriggerDown[6] = "DryFire";
|
||||||
stateSequence[6] = "NoAmmo";
|
stateSequence[6] = "NoAmmo";
|
||||||
|
|
||||||
stateName[7] = "DryFire";
|
stateName[7] = "DryFire";
|
||||||
stateSound[7] = SniperRifleDryFireSound;
|
stateSound[7] = SniperRifleDryFireSound;
|
||||||
stateTimeoutValue[7] = 0.5;
|
stateTimeoutValue[7] = 0.5;
|
||||||
stateTransitionOnTimeout[7] = "Ready";
|
stateTransitionOnTimeout[7] = "Ready";
|
||||||
};
|
};
|
||||||
|
|
||||||
function IonRifleImage::OnFire(%data, %obj, %slot) {
|
function IonRifleImage::OnFire(%data, %obj, %slot) {
|
||||||
ServerPlay3D(thunderCrash2, %obj.getPosition());
|
ServerPlay3D(thunderCrash2, %obj.getPosition());
|
||||||
%pos = %obj.getMuzzlePoint(%slot);
|
%pos = %obj.getMuzzlePoint(%slot);
|
||||||
%vec = %obj.getMuzzleVector(%slot);
|
%vec = %obj.getMuzzleVector(%slot);
|
||||||
%res = containerRayCast(%pos,vectorAdd(%pos,vectorScale(%vec,2000)), $TypeMasks::PlayerObjectType | $TypeMasks::TerrainObjectType | $TypeMasks::InteriorObjectType | $TypeMasks::StaticObjectType,%obj);
|
%res = containerRayCast(%pos,vectorAdd(%pos,vectorScale(%vec,2000)), $TypeMasks::PlayerObjectType | $TypeMasks::TerrainObjectType | $TypeMasks::InteriorObjectType | $TypeMasks::StaticObjectType,%obj);
|
||||||
%HObj = getWord(%res, 0);
|
%HObj = getWord(%res, 0);
|
||||||
if(%HObj !$= "" && %HObj != 0) {
|
if(%HObj !$= "" && %HObj != 0) {
|
||||||
if(!(%HObj.getType() & ($TypeMasks::InteriorObjectType | $TypeMasks::TerrainObjectType))) {
|
if(!(%HObj.getType() & ($TypeMasks::InteriorObjectType | $TypeMasks::TerrainObjectType))) {
|
||||||
%cn = %HObj.getDatablock().getClassName();
|
%cn = %HObj.getDatablock().getClassName();
|
||||||
if(%cn $= "PlayerData" || strstr(%cn, "Vehicle") != -1) {
|
if(%cn $= "PlayerData" || strstr(%cn, "Vehicle") != -1) {
|
||||||
%HObj.getDataBlock().damageObject(%HObj, %obj, %HObj.getPosition(), 0.45, $DamageType::Lightning);
|
%HObj.getDataBlock().damageObject(%HObj, %obj, %HObj.getPosition(), 0.45, $DamageType::Lightning);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (%res)
|
if (%res) {
|
||||||
%hitLoc = getWords(%res,1,3);
|
%hitLoc = getWords(%res,1,3);
|
||||||
else
|
}
|
||||||
%hitLoc = vectorAdd(%pos,vectorScale(%vec,2000));
|
else {
|
||||||
%p = discharge(%pos,%vec);
|
%hitLoc = vectorAdd(%pos,vectorScale(%vec,2000));
|
||||||
%p.setEnergyPercentage(1);
|
}
|
||||||
createLifeLight(%hitLoc,1,1000);
|
%p = discharge(%pos,%vec);
|
||||||
addToShock(%p);
|
%p.setEnergyPercentage(1);
|
||||||
%p.schedule(1000,"delete");
|
createLifeLight(%hitLoc,1,1000);
|
||||||
zap(0,25,%hitLoc);
|
addToShock(%p);
|
||||||
ServerPlay3D(thunderCrash2, %hitLoc);
|
%p.schedule(1000,"delete");
|
||||||
|
zap(0,25,%hitLoc);
|
||||||
|
ServerPlay3D(thunderCrash2, %hitLoc);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,111 +1,111 @@
|
||||||
datablock ShapeBaseImageData(MiniColliderCannonImage) {
|
datablock ShapeBaseImageData(MiniColliderCannonImage) {
|
||||||
className = WeaponImage;
|
className = WeaponImage;
|
||||||
shapeFile = "turret_mortar_large.dts";
|
shapeFile = "turret_mortar_large.dts";
|
||||||
item = MiniColliderCannon;
|
item = MiniColliderCannon;
|
||||||
usesenergy = true;
|
usesenergy = true;
|
||||||
|
|
||||||
projectile = MiniColliderShell;
|
projectile = MiniColliderShell;
|
||||||
projectileType = GrenadeProjectile;
|
projectileType = GrenadeProjectile;
|
||||||
|
|
||||||
emap = true;
|
emap = true;
|
||||||
|
|
||||||
MedalRequire = 1;
|
MedalRequire = 1;
|
||||||
|
|
||||||
HasChallenges = 1;
|
|
||||||
ChallengeCt = 8;
|
|
||||||
Challenge[1] = "Collider Hunter\t100\t100\tNone";
|
|
||||||
Challenge[2] = "Collider Expert\t250\t500\tNone";
|
|
||||||
Challenge[3] = "Collider Master\t500\t1000\tDouble Burst";
|
|
||||||
Challenge[4] = "Collider God\t1000\t2000\tTriple Burst";
|
|
||||||
Challenge[5] = "Collider Bronze Commendation\t2500\t10000\tNone";
|
|
||||||
Challenge[6] = "Collider Silver Commendation\t5000\t25000\tNone";
|
|
||||||
Challenge[7] = "Collider Gold Commendation\t10000\t50000\tNone";
|
|
||||||
Challenge[8] = "Collider Titan Commendation\t25000\t75000\tNone";
|
|
||||||
Upgrade[1] = "Double Burst";
|
|
||||||
Upgrade[2] = "Triple Burst";
|
|
||||||
GunName = "PRTCL-995 MCC";
|
|
||||||
|
|
||||||
stateName[0] = "Activate";
|
HasChallenges = 1;
|
||||||
stateTransitionOnTimeout[0] = "ActivateReady";
|
ChallengeCt = 8;
|
||||||
stateTimeoutValue[0] = 0.5;
|
Challenge[1] = "Collider Hunter\t100\t100\tNone";
|
||||||
stateSequence[0] = "Activate";
|
Challenge[2] = "Collider Expert\t250\t500\tNone";
|
||||||
stateSound[0] = MortarReloadSound;
|
Challenge[3] = "Collider Master\t500\t1000\tDouble Burst";
|
||||||
|
Challenge[4] = "Collider God\t1000\t2000\tTriple Burst";
|
||||||
|
Challenge[5] = "Collider Bronze Commendation\t2500\t10000\tNone";
|
||||||
|
Challenge[6] = "Collider Silver Commendation\t5000\t25000\tNone";
|
||||||
|
Challenge[7] = "Collider Gold Commendation\t10000\t50000\tNone";
|
||||||
|
Challenge[8] = "Collider Titan Commendation\t25000\t75000\tNone";
|
||||||
|
Upgrade[1] = "Double Burst";
|
||||||
|
Upgrade[2] = "Triple Burst";
|
||||||
|
GunName = "PRTCL-995 MCC";
|
||||||
|
|
||||||
stateName[1] = "ActivateReady";
|
stateName[0] = "Activate";
|
||||||
stateTransitionOnLoaded[1] = "Ready";
|
stateTransitionOnTimeout[0] = "ActivateReady";
|
||||||
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
stateTimeoutValue[0] = 0.5;
|
||||||
|
stateSequence[0] = "Activate";
|
||||||
|
stateSound[0] = MortarReloadSound;
|
||||||
|
|
||||||
stateName[2] = "Ready";
|
stateName[1] = "ActivateReady";
|
||||||
stateTransitionOnNoAmmo[2] = "NoAmmo";
|
stateTransitionOnLoaded[1] = "Ready";
|
||||||
stateTransitionOnTriggerDown[2] = "Fire";
|
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
||||||
|
|
||||||
stateName[3] = "Fire";
|
stateName[2] = "Ready";
|
||||||
stateTransitionOnTimeout[3] = "Reload";
|
stateTransitionOnNoAmmo[2] = "NoAmmo";
|
||||||
stateTimeoutValue[3] = 4.6;
|
stateTransitionOnTriggerDown[2] = "Fire";
|
||||||
stateFire[3] = true;
|
|
||||||
stateRecoil[3] = LightRecoil;
|
|
||||||
stateAllowImageChange[3] = false;
|
|
||||||
stateSequence[3] = "Fire";
|
|
||||||
stateSound[3] = CentaurArtilleryFireSound;
|
|
||||||
stateScript[3] = "onFire";
|
|
||||||
|
|
||||||
stateName[4] = "Reload";
|
stateName[3] = "Fire";
|
||||||
stateTransitionOnNoAmmo[4] = "NoAmmo";
|
stateTransitionOnTimeout[3] = "Reload";
|
||||||
stateTransitionOnTimeout[4] = "Ready";
|
stateTimeoutValue[3] = 4.6;
|
||||||
stateSound[4] = MortarSwitchSound;
|
stateFire[3] = true;
|
||||||
stateEjectShell[4] = true;
|
stateRecoil[3] = LightRecoil;
|
||||||
stateAllowImageChange[4] = false;
|
stateAllowImageChange[3] = false;
|
||||||
stateSequence[4] = "Reload";
|
stateSequence[3] = "Fire";
|
||||||
|
stateSound[3] = CentaurArtilleryFireSound;
|
||||||
|
stateScript[3] = "onFire";
|
||||||
|
|
||||||
stateName[5] = "NoAmmo";
|
stateName[4] = "Reload";
|
||||||
stateTransitionOnAmmo[5] = "Reload";
|
stateTransitionOnNoAmmo[4] = "NoAmmo";
|
||||||
stateSequence[5] = "NoAmmo";
|
stateTransitionOnTimeout[4] = "Ready";
|
||||||
stateTransitionOnTriggerDown[5] = "DryFire";
|
stateSound[4] = MortarSwitchSound;
|
||||||
|
stateEjectShell[4] = true;
|
||||||
|
stateAllowImageChange[4] = false;
|
||||||
|
stateSequence[4] = "Reload";
|
||||||
|
|
||||||
stateName[6] = "DryFire";
|
stateName[5] = "NoAmmo";
|
||||||
stateTimeoutValue[6] = 0.3;
|
stateTransitionOnAmmo[5] = "Reload";
|
||||||
stateSound[6] = ChaingunDryFireSound;
|
stateSequence[5] = "NoAmmo";
|
||||||
stateTransitionOnTimeout[6] = "Ready";
|
stateTransitionOnTriggerDown[5] = "DryFire";
|
||||||
|
|
||||||
|
stateName[6] = "DryFire";
|
||||||
|
stateTimeoutValue[6] = 0.3;
|
||||||
|
stateSound[6] = ChaingunDryFireSound;
|
||||||
|
stateTransitionOnTimeout[6] = "Ready";
|
||||||
};
|
};
|
||||||
|
|
||||||
//item//
|
//item//
|
||||||
datablock ItemData(MiniColliderCannon) {
|
datablock ItemData(MiniColliderCannon) {
|
||||||
className = Weapon;
|
className = Weapon;
|
||||||
catagory = "Spawn Items";
|
catagory = "Spawn Items";
|
||||||
shapeFile = "turret_mortar_large.dts";
|
shapeFile = "turret_mortar_large.dts";
|
||||||
image = MiniColliderCannonImage;
|
image = MiniColliderCannonImage;
|
||||||
mass = 1;
|
mass = 1;
|
||||||
elasticity = 0.2;
|
elasticity = 0.2;
|
||||||
friction = 0.6;
|
friction = 0.6;
|
||||||
pickupRadius = 2;
|
pickupRadius = 2;
|
||||||
pickUpName = "a PRTCL-995 Mini Collider Cannon";
|
pickUpName = "a PRTCL-995 Mini Collider Cannon";
|
||||||
|
|
||||||
computeCRC = true;
|
computeCRC = true;
|
||||||
emap = true;
|
emap = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
function MiniColliderCannonImage::onFire(%data, %obj, %slot) {
|
function MiniColliderCannonImage::onFire(%data, %obj, %slot) {
|
||||||
%vector = %obj.getMuzzleVector(%slot);
|
%vector = %obj.getMuzzleVector(%slot);
|
||||||
%mp = %obj.getMuzzlePoint(%slot);
|
%mp = %obj.getMuzzlePoint(%slot);
|
||||||
if(%obj.client.UpgradeOn("Double Burst", %data.getName())) {
|
if(%obj.client.UpgradeOn("Double Burst", %data.getName())) {
|
||||||
%p1 = Parent::OnFire(%data, %obj, %slot);
|
%p1 = Parent::OnFire(%data, %obj, %slot);
|
||||||
%p2 = Schedule(100, 0, "spawnprojectile", %data.Projectile, %data.ProjectileType,
|
%p2 = Schedule(100, 0, "spawnprojectile", %data.Projectile, %data.ProjectileType,
|
||||||
%obj.getMuzzlePoint(%slot), %vector, %obj);
|
%obj.getMuzzlePoint(%slot), %vector, %obj);
|
||||||
%p2.WeaponImageSource = "MiniColliderCannonImage";
|
%p2.WeaponImageSource = "MiniColliderCannonImage";
|
||||||
schedule(100, 0, "ServerPlay3D", "CentaurArtilleryFireSound", %obj.getPosition());
|
schedule(100, 0, "ServerPlay3D", "CentaurArtilleryFireSound", %obj.getPosition());
|
||||||
}
|
}
|
||||||
else if(%obj.client.UpgradeOn("Triple Burst", %data.getName())) {
|
else if(%obj.client.UpgradeOn("Triple Burst", %data.getName())) {
|
||||||
%p1 = Parent::OnFire(%data, %obj, %slot);
|
%p1 = Parent::OnFire(%data, %obj, %slot);
|
||||||
%p2 = Schedule(100, 0, "spawnprojectile", %data.Projectile, %data.ProjectileType,
|
%p2 = Schedule(100, 0, "spawnprojectile", %data.Projectile, %data.ProjectileType,
|
||||||
%obj.getMuzzlePoint(%slot), %vector, %obj);
|
%obj.getMuzzlePoint(%slot), %vector, %obj);
|
||||||
%p2.WeaponImageSource = "MiniColliderCannonImage";
|
%p2.WeaponImageSource = "MiniColliderCannonImage";
|
||||||
schedule(100, 0, "ServerPlay3D", "CentaurArtilleryFireSound", %obj.getPosition());
|
schedule(100, 0, "ServerPlay3D", "CentaurArtilleryFireSound", %obj.getPosition());
|
||||||
%p3 = Schedule(200, 0, "spawnprojectile", %data.Projectile, %data.ProjectileType,
|
%p3 = Schedule(200, 0, "spawnprojectile", %data.Projectile, %data.ProjectileType,
|
||||||
%obj.getMuzzlePoint(%slot), %vector, %obj);
|
%obj.getMuzzlePoint(%slot), %vector, %obj);
|
||||||
%p3.WeaponImageSource = "MiniColliderCannonImage";
|
%p3.WeaponImageSource = "MiniColliderCannonImage";
|
||||||
schedule(100, 0, "ServerPlay3D", "CentaurArtilleryFireSound", %obj.getPosition());
|
schedule(200, 0, "ServerPlay3D", "CentaurArtilleryFireSound", %obj.getPosition());
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
%p = Parent::OnFire(%data, %obj, %slot);
|
%p = Parent::OnFire(%data, %obj, %slot);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,117 +1,113 @@
|
||||||
datablock ItemData(NapalmAmmo)
|
datablock ItemData(NapalmAmmo) {
|
||||||
{
|
className = Ammo;
|
||||||
className = Ammo;
|
catagory = "Ammo";
|
||||||
catagory = "Ammo";
|
shapeFile = "ammo_grenade.dts";
|
||||||
shapeFile = "ammo_grenade.dts";
|
mass = 1;
|
||||||
mass = 1;
|
elasticity = 0.2;
|
||||||
elasticity = 0.2;
|
friction = 0.6;
|
||||||
friction = 0.6;
|
pickupRadius = 2;
|
||||||
pickupRadius = 2;
|
pickUpName = "some Napalm";
|
||||||
pickUpName = "some Napalm";
|
|
||||||
};
|
};
|
||||||
|
|
||||||
//--------------------------------------------------------------------------
|
//--------------------------------------------------------------------------
|
||||||
// Weapon
|
// Weapon
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
|
|
||||||
datablock ShapeBaseImageData(NapalmImage)
|
datablock ShapeBaseImageData(NapalmImage) {
|
||||||
{
|
className = WeaponImage;
|
||||||
className = WeaponImage;
|
shapeFile = "ammo_grenade.dts";
|
||||||
shapeFile = "ammo_grenade.dts";
|
item = Napalm;
|
||||||
item = Napalm;
|
ammo = NapalmAmmo;
|
||||||
ammo = NapalmAmmo;
|
offset = "0 0 0";
|
||||||
offset = "0 0 0";
|
armThread = lookms;
|
||||||
armThread = lookms;
|
emap = true;
|
||||||
emap = true;
|
|
||||||
|
|
||||||
projectileSpread = 0;
|
projectileSpread = 0;
|
||||||
|
|
||||||
projectile = NapalmShot;
|
projectile = NapalmShot;
|
||||||
projectileType = LinearProjectile;
|
projectileType = LinearProjectile;
|
||||||
|
|
||||||
RankRequire = $TWM2::RankRequire["NapalmLauncher"];
|
|
||||||
MedalRequire = 1;
|
|
||||||
|
|
||||||
//ClipStuff
|
|
||||||
ClipName = "NapalmClip";
|
|
||||||
ClipPickupName["NapalmClip"] = "some napalm fuel clusters";
|
|
||||||
ShowsClipInHud = 1;
|
|
||||||
ClipReloadTime = 5;
|
|
||||||
ClipReturn = 1;
|
|
||||||
InitialClips = 6;
|
|
||||||
|
|
||||||
//Challenges
|
RankRequire = $TWM2::RankRequire["NapalmLauncher"];
|
||||||
HasChallenges = 1;
|
MedalRequire = 1;
|
||||||
ChallengeCt = 9;
|
|
||||||
Challenge[1] = "Napalm Novice\t25\t100\tNone";
|
|
||||||
Challenge[2] = "Napalm Hunter\t50\t150\tNone";
|
|
||||||
Challenge[3] = "Napalm Expert\t100\t250\tNone";
|
|
||||||
Challenge[4] = "Napalm Master\t250\t500\tNone";
|
|
||||||
Challenge[5] = "Napalm God\t500\t1000\tNone";
|
|
||||||
Challenge[6] = "Napalm Bronze Commendation\t2500\t10000\tNone";
|
|
||||||
Challenge[7] = "Napalm Silver Commendation\t5000\t25000\tNone";
|
|
||||||
Challenge[8] = "Napalm Gold Commendation\t10000\t50000\tNone";
|
|
||||||
Challenge[9] = "Napalm Titan Commendation\t25000\t75000\tNone";
|
|
||||||
GunName = "ZH7C8 Napalm Launcher";
|
|
||||||
//
|
|
||||||
|
|
||||||
// State Data
|
//ClipStuff
|
||||||
stateName[0] = "ActivateReady";
|
ClipName = "NapalmClip";
|
||||||
stateTransitionOnLoaded[0] = "Activate";
|
ClipPickupName["NapalmClip"] = "some napalm fuel clusters";
|
||||||
stateTransitionOnNoAmmo[0] = "NoAmmo";
|
ShowsClipInHud = 1;
|
||||||
|
ClipReloadTime = 5;
|
||||||
|
ClipReturn = 1;
|
||||||
|
InitialClips = 6;
|
||||||
|
|
||||||
stateName[1] = "Activate";
|
//Challenges
|
||||||
stateTransitionOnTimeout[1] = "Ready";
|
HasChallenges = 1;
|
||||||
stateTimeoutValue[1] = 0.5;
|
ChallengeCt = 9;
|
||||||
stateSequence[1] = "Activated";
|
Challenge[1] = "Napalm Novice\t25\t100\tNone";
|
||||||
stateSound[1] = PlasmaSwitchSound;
|
Challenge[2] = "Napalm Hunter\t50\t150\tNone";
|
||||||
|
Challenge[3] = "Napalm Expert\t100\t250\tNone";
|
||||||
|
Challenge[4] = "Napalm Master\t250\t500\tNone";
|
||||||
|
Challenge[5] = "Napalm God\t500\t1000\tNone";
|
||||||
|
Challenge[6] = "Napalm Bronze Commendation\t2500\t10000\tNone";
|
||||||
|
Challenge[7] = "Napalm Silver Commendation\t5000\t25000\tNone";
|
||||||
|
Challenge[8] = "Napalm Gold Commendation\t10000\t50000\tNone";
|
||||||
|
Challenge[9] = "Napalm Titan Commendation\t25000\t75000\tNone";
|
||||||
|
GunName = "ZH7C8 Napalm Launcher";
|
||||||
|
//
|
||||||
|
|
||||||
stateName[2] = "Ready";
|
// State Data
|
||||||
stateTransitionOnNoAmmo[2] = "NoAmmo";
|
stateName[0] = "ActivateReady";
|
||||||
stateTransitionOnTriggerDown[2] = "Fire";
|
stateTransitionOnLoaded[0] = "Activate";
|
||||||
stateSequence[2] = "DiscSpin";
|
stateTransitionOnNoAmmo[0] = "NoAmmo";
|
||||||
// stateSound[2] = DiscLoopSound;
|
|
||||||
|
|
||||||
stateName[3] = "Fire";
|
stateName[1] = "Activate";
|
||||||
stateTransitionOnTimeout[3] = "Reload";
|
stateTransitionOnTimeout[1] = "Ready";
|
||||||
stateTimeoutValue[3] = 0.3;
|
stateTimeoutValue[1] = 0.5;
|
||||||
stateFire[3] = true;
|
stateSequence[1] = "Activated";
|
||||||
stateRecoil[3] = LightRecoil;
|
stateSound[1] = PlasmaSwitchSound;
|
||||||
stateAllowImageChange[3] = false;
|
|
||||||
stateSequence[3] = "Fire";
|
|
||||||
stateScript[3] = "onFire";
|
|
||||||
stateSound[3] = MortarFireSound;
|
|
||||||
|
|
||||||
stateName[4] = "Reload";
|
stateName[2] = "Ready";
|
||||||
stateTransitionOnNoAmmo[4] = "NoAmmo";
|
stateTransitionOnNoAmmo[2] = "NoAmmo";
|
||||||
stateTransitionOnTimeout[4] = "Ready";
|
stateTransitionOnTriggerDown[2] = "Fire";
|
||||||
stateTimeoutValue[4] = 2.2; // 0.25 load, 0.25 spinup
|
stateSequence[2] = "DiscSpin";
|
||||||
stateAllowImageChange[4] = false;
|
// stateSound[2] = DiscLoopSound;
|
||||||
stateSequence[4] = "Reload";
|
|
||||||
// stateSound[4] = DiscReloadSound;
|
|
||||||
|
|
||||||
stateName[5] = "NoAmmo";
|
stateName[3] = "Fire";
|
||||||
stateTransitionOnAmmo[5] = "Reload";
|
stateTransitionOnTimeout[3] = "Reload";
|
||||||
stateSequence[5] = "NoAmmo";
|
stateTimeoutValue[3] = 0.3;
|
||||||
stateTransitionOnTriggerDown[5] = "DryFire";
|
stateFire[3] = true;
|
||||||
|
stateRecoil[3] = LightRecoil;
|
||||||
|
stateAllowImageChange[3] = false;
|
||||||
|
stateSequence[3] = "Fire";
|
||||||
|
stateScript[3] = "onFire";
|
||||||
|
stateSound[3] = MortarFireSound;
|
||||||
|
|
||||||
stateName[6] = "DryFire";
|
stateName[4] = "Reload";
|
||||||
stateSound[6] = GrenadeDryFireSound;
|
stateTransitionOnNoAmmo[4] = "NoAmmo";
|
||||||
stateTimeoutValue[6] = 0.3;
|
stateTransitionOnTimeout[4] = "Ready";
|
||||||
stateTransitionOnTimeout[6] = "NoAmmo";
|
stateTimeoutValue[4] = 2.2; // 0.25 load, 0.25 spinup
|
||||||
|
stateAllowImageChange[4] = false;
|
||||||
|
stateSequence[4] = "Reload";
|
||||||
|
// stateSound[4] = DiscReloadSound;
|
||||||
|
|
||||||
|
stateName[5] = "NoAmmo";
|
||||||
|
stateTransitionOnAmmo[5] = "Reload";
|
||||||
|
stateSequence[5] = "NoAmmo";
|
||||||
|
stateTransitionOnTriggerDown[5] = "DryFire";
|
||||||
|
|
||||||
|
stateName[6] = "DryFire";
|
||||||
|
stateSound[6] = GrenadeDryFireSound;
|
||||||
|
stateTimeoutValue[6] = 0.3;
|
||||||
|
stateTransitionOnTimeout[6] = "NoAmmo";
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ItemData(Napalm)
|
datablock ItemData(Napalm) {
|
||||||
{
|
className = Weapon;
|
||||||
className = Weapon;
|
catagory = "Spawn Items";
|
||||||
catagory = "Spawn Items";
|
shapeFile = "ammo_grenade.dts";
|
||||||
shapeFile = "ammo_grenade.dts";
|
image = NapalmImage;
|
||||||
image = NapalmImage;
|
mass = 1;
|
||||||
mass = 1;
|
elasticity = 0.2;
|
||||||
elasticity = 0.2;
|
friction = 0.6;
|
||||||
friction = 0.6;
|
pickupRadius = 2;
|
||||||
pickupRadius = 2;
|
pickUpName = "a Napalm Gun";
|
||||||
pickUpName = "a Napalm Gun";
|
emap = true;
|
||||||
emap = true;
|
};
|
||||||
};
|
|
||||||
|
|
@ -1,126 +1,123 @@
|
||||||
datablock TracerProjectileData(PlasmaTorpedoProjectile) {
|
datablock TracerProjectileData(PlasmaTorpedoProjectile) {
|
||||||
doDynamicClientHits = true;
|
doDynamicClientHits = true;
|
||||||
|
|
||||||
directDamage = 0.0;
|
directDamage = 0.0;
|
||||||
hasDamageRadius = true;
|
hasDamageRadius = true;
|
||||||
indirectDamage = 1.5;
|
indirectDamage = 1.5;
|
||||||
damageRadius = 25.0;
|
damageRadius = 25.0;
|
||||||
kickBackStrength = 4000;
|
kickBackStrength = 4000;
|
||||||
radiusDamageType = $DamageType::PTorpdeo; //obviously change this
|
radiusDamageType = $DamageType::PTorpdeo;
|
||||||
|
|
||||||
ImageSource = "PlasmaTorpedoImage";
|
|
||||||
|
|
||||||
explosion = "SatchelMainExplosion";
|
|
||||||
splash = ChaingunSplash;
|
|
||||||
|
|
||||||
sound = ShrikeBlasterProjectileSound;
|
ImageSource = "PlasmaTorpedoImage";
|
||||||
|
|
||||||
dryVelocity = 425.0;
|
explosion = "SatchelMainExplosion";
|
||||||
wetVelocity = 100.0;
|
splash = ChaingunSplash;
|
||||||
velInheritFactor = 1.0;
|
|
||||||
fizzleTimeMS = 1000;
|
|
||||||
lifetimeMS = 1000;
|
|
||||||
explodeOnDeath = false;
|
|
||||||
reflectOnWaterImpactAngle = 0.0;
|
|
||||||
explodeOnWaterImpact = false;
|
|
||||||
deflectionOnWaterImpact = 0.0;
|
|
||||||
fizzleUnderwaterMS = 3000;
|
|
||||||
|
|
||||||
tracerLength = 45.0;
|
sound = ShrikeBlasterProjectileSound;
|
||||||
tracerAlpha = false;
|
|
||||||
tracerMinPixels = 6;
|
dryVelocity = 425.0;
|
||||||
tracerColor = "1.0 0.0 0.0 0.0";
|
wetVelocity = 100.0;
|
||||||
|
velInheritFactor = 1.0;
|
||||||
|
fizzleTimeMS = 1000;
|
||||||
|
lifetimeMS = 1000;
|
||||||
|
explodeOnDeath = false;
|
||||||
|
reflectOnWaterImpactAngle = 0.0;
|
||||||
|
explodeOnWaterImpact = false;
|
||||||
|
deflectionOnWaterImpact = 0.0;
|
||||||
|
fizzleUnderwaterMS = 3000;
|
||||||
|
|
||||||
|
tracerLength = 45.0;
|
||||||
|
tracerAlpha = false;
|
||||||
|
tracerMinPixels = 6;
|
||||||
|
tracerColor = "1.0 0.0 0.0 0.0";
|
||||||
tracerTex[0] = "special/shrikeBolt";
|
tracerTex[0] = "special/shrikeBolt";
|
||||||
tracerTex[1] = "special/shrikeBoltCross";
|
tracerTex[1] = "special/shrikeBoltCross";
|
||||||
tracerWidth = 0.55;
|
tracerWidth = 0.55;
|
||||||
crossSize = 0.99;
|
crossSize = 0.99;
|
||||||
crossViewAng = 0.990;
|
crossViewAng = 0.990;
|
||||||
renderCross = true;
|
renderCross = true;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ShapeBaseImageData(PlasmaTorpedoImage) {
|
datablock ShapeBaseImageData(PlasmaTorpedoImage) {
|
||||||
className = WeaponImage;
|
className = WeaponImage;
|
||||||
shapeFile = "turret_fusion_large.dts";
|
shapeFile = "turret_fusion_large.dts";
|
||||||
item = PlasmaTorpedo;
|
item = PlasmaTorpedo;
|
||||||
usesenergy = true;
|
usesenergy = true;
|
||||||
|
|
||||||
projectile = PlasmaTorpedoProjectile;
|
projectile = PlasmaTorpedoProjectile;
|
||||||
projectileType = TracerProjectile;
|
projectileType = TracerProjectile;
|
||||||
|
|
||||||
emap = true;
|
emap = true;
|
||||||
|
|
||||||
//RankRequire = $TWM2::RankRequire["SCD343"];
|
//RankRequire = $TWM2::RankRequire["SCD343"];
|
||||||
PrestigeRequire = 9;
|
PrestigeRequire = 9;
|
||||||
|
|
||||||
HasChallenges = 1;
|
|
||||||
ChallengeCt = 8;
|
|
||||||
Challenge[1] = "PTC Hunter\t100\t100\tNone";
|
|
||||||
Challenge[2] = "PTC Expert\t250\t500\tNone";
|
|
||||||
Challenge[3] = "PTC Master\t500\t1000\tNone";
|
|
||||||
Challenge[4] = "PTC God\t1000\t2000\tNone";
|
|
||||||
Challenge[5] = "PTC Bronze Commendation\t2500\t10000\tNone";
|
|
||||||
Challenge[6] = "PTC Silver Commendation\t5000\t25000\tNone";
|
|
||||||
Challenge[7] = "PTC Gold Commendation\t10000\t50000\tNone";
|
|
||||||
Challenge[8] = "PTC Titan Commendation\t25000\t75000\tNone";
|
|
||||||
GunName = "Plasma Torpedo Cannon";
|
|
||||||
|
|
||||||
stateName[0] = "Activate";
|
HasChallenges = 1;
|
||||||
stateTransitionOnTimeout[0] = "ActivateReady";
|
ChallengeCt = 8;
|
||||||
stateTimeoutValue[0] = 0.5;
|
Challenge[1] = "PTC Hunter\t100\t100\tNone";
|
||||||
stateSequence[0] = "Activate";
|
Challenge[2] = "PTC Expert\t250\t500\tNone";
|
||||||
stateSound[0] = MortarReloadSound;
|
Challenge[3] = "PTC Master\t500\t1000\tNone";
|
||||||
|
Challenge[4] = "PTC God\t1000\t2000\tNone";
|
||||||
|
Challenge[5] = "PTC Bronze Commendation\t2500\t10000\tNone";
|
||||||
|
Challenge[6] = "PTC Silver Commendation\t5000\t25000\tNone";
|
||||||
|
Challenge[7] = "PTC Gold Commendation\t10000\t50000\tNone";
|
||||||
|
Challenge[8] = "PTC Titan Commendation\t25000\t75000\tNone";
|
||||||
|
GunName = "Plasma Torpedo Cannon";
|
||||||
|
|
||||||
stateName[1] = "ActivateReady";
|
stateName[0] = "Activate";
|
||||||
stateTransitionOnLoaded[1] = "Ready";
|
stateTransitionOnTimeout[0] = "ActivateReady";
|
||||||
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
stateTimeoutValue[0] = 0.5;
|
||||||
|
stateSequence[0] = "Activate";
|
||||||
|
stateSound[0] = MortarReloadSound;
|
||||||
|
|
||||||
stateName[2] = "Ready";
|
stateName[1] = "ActivateReady";
|
||||||
stateTransitionOnNoAmmo[2] = "NoAmmo";
|
stateTransitionOnLoaded[1] = "Ready";
|
||||||
stateTransitionOnTriggerDown[2] = "Fire";
|
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
||||||
|
|
||||||
stateName[3] = "Fire";
|
stateName[2] = "Ready";
|
||||||
stateTransitionOnTimeout[3] = "Reload";
|
stateTransitionOnNoAmmo[2] = "NoAmmo";
|
||||||
stateTimeoutValue[3] = 7.6;
|
stateTransitionOnTriggerDown[2] = "Fire";
|
||||||
stateFire[3] = true;
|
|
||||||
stateRecoil[3] = LightRecoil;
|
|
||||||
stateAllowImageChange[3] = false;
|
|
||||||
stateSequence[3] = "Fire";
|
|
||||||
stateSound[3] = CentaurArtilleryFireSound;
|
|
||||||
stateScript[3] = "onFire";
|
|
||||||
|
|
||||||
stateName[4] = "Reload";
|
stateName[3] = "Fire";
|
||||||
stateTransitionOnNoAmmo[4] = "NoAmmo";
|
stateTransitionOnTimeout[3] = "Reload";
|
||||||
stateTransitionOnTimeout[4] = "Ready";
|
stateTimeoutValue[3] = 7.6;
|
||||||
stateSound[4] = MortarSwitchSound;
|
stateFire[3] = true;
|
||||||
stateEjectShell[4] = true;
|
stateRecoil[3] = LightRecoil;
|
||||||
stateAllowImageChange[4] = false;
|
stateAllowImageChange[3] = false;
|
||||||
stateSequence[4] = "Reload";
|
stateSequence[3] = "Fire";
|
||||||
|
stateSound[3] = CentaurArtilleryFireSound;
|
||||||
|
stateScript[3] = "onFire";
|
||||||
|
|
||||||
stateName[5] = "NoAmmo";
|
stateName[4] = "Reload";
|
||||||
stateTransitionOnAmmo[5] = "Reload";
|
stateTransitionOnNoAmmo[4] = "NoAmmo";
|
||||||
stateSequence[5] = "NoAmmo";
|
stateTransitionOnTimeout[4] = "Ready";
|
||||||
stateTransitionOnTriggerDown[5] = "DryFire";
|
stateSound[4] = MortarSwitchSound;
|
||||||
|
stateEjectShell[4] = true;
|
||||||
|
stateAllowImageChange[4] = false;
|
||||||
|
stateSequence[4] = "Reload";
|
||||||
|
|
||||||
stateName[6] = "DryFire";
|
stateName[5] = "NoAmmo";
|
||||||
stateTimeoutValue[6] = 0.3;
|
stateTransitionOnAmmo[5] = "Reload";
|
||||||
stateSound[6] = ChaingunDryFireSound;
|
stateSequence[5] = "NoAmmo";
|
||||||
stateTransitionOnTimeout[6] = "Ready";
|
stateTransitionOnTriggerDown[5] = "DryFire";
|
||||||
|
|
||||||
|
stateName[6] = "DryFire";
|
||||||
|
stateTimeoutValue[6] = 0.3;
|
||||||
|
stateSound[6] = ChaingunDryFireSound;
|
||||||
|
stateTransitionOnTimeout[6] = "Ready";
|
||||||
};
|
};
|
||||||
|
|
||||||
//item//
|
|
||||||
datablock ItemData(PlasmaTorpedo) {
|
datablock ItemData(PlasmaTorpedo) {
|
||||||
className = Weapon;
|
className = Weapon;
|
||||||
catagory = "Spawn Items";
|
catagory = "Spawn Items";
|
||||||
shapeFile = "turret_mortar_large.dts";
|
shapeFile = "turret_mortar_large.dts";
|
||||||
image = PlasmaTorpedoImage;
|
image = PlasmaTorpedoImage;
|
||||||
mass = 1;
|
mass = 1;
|
||||||
elasticity = 0.2;
|
elasticity = 0.2;
|
||||||
friction = 0.6;
|
friction = 0.6;
|
||||||
pickupRadius = 2;
|
pickupRadius = 2;
|
||||||
pickUpName = "a Plasma Torpedo Cannon";
|
pickUpName = "a Plasma Torpedo Cannon";
|
||||||
|
|
||||||
computeCRC = true;
|
|
||||||
emap = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
computeCRC = true;
|
||||||
|
emap = true;
|
||||||
|
};
|
||||||
|
|
@ -1,167 +1,166 @@
|
||||||
datablock LinearFlareProjectileData(ShadowRifleBolt) {
|
datablock LinearFlareProjectileData(ShadowRifleBolt) {
|
||||||
projectileShapeName = "turret_muzzlepoint.dts";
|
projectileShapeName = "turret_muzzlepoint.dts";
|
||||||
scale = "1.0 1.0 1.0";
|
scale = "1.0 1.0 1.0";
|
||||||
faceViewer = true;
|
faceViewer = true;
|
||||||
directDamage = 0.02;
|
directDamage = 0.02;
|
||||||
hasDamageRadius = true;
|
hasDamageRadius = true;
|
||||||
indirectDamage = 0.1;
|
indirectDamage = 0.1;
|
||||||
damageRadius = 4.0;
|
damageRadius = 4.0;
|
||||||
kickBackStrength = 0.0;
|
kickBackStrength = 0.0;
|
||||||
radiusDamageType = $DamageType::Shadow;
|
radiusDamageType = $DamageType::Shadow;
|
||||||
|
|
||||||
explosion = "BlasterExplosion";
|
explosion = "BlasterExplosion";
|
||||||
splash = PlasmaSplash;
|
splash = PlasmaSplash;
|
||||||
|
|
||||||
baseEmitter = NMMissileBaseEmitter;
|
baseEmitter = NMMissileBaseEmitter;
|
||||||
|
|
||||||
ImageSource = "ShadowRifleImage";
|
|
||||||
|
|
||||||
dryVelocity = 120.0; // z0dd - ZOD, 7/20/02. Faster plasma projectile. was 55
|
ImageSource = "ShadowRifleImage";
|
||||||
wetVelocity = -1;
|
|
||||||
velInheritFactor = 0.3;
|
|
||||||
fizzleTimeMS = 250;
|
|
||||||
lifetimeMS = 8000;
|
|
||||||
explodeOnDeath = false;
|
|
||||||
reflectOnWaterImpactAngle = 0.0;
|
|
||||||
explodeOnWaterImpact = true;
|
|
||||||
deflectionOnWaterImpact = 0.0;
|
|
||||||
fizzleUnderwaterMS = -1;
|
|
||||||
|
|
||||||
//activateDelayMS = 100;
|
dryVelocity = 120.0; // z0dd - ZOD, 7/20/02. Faster plasma projectile. was 55
|
||||||
activateDelayMS = -1;
|
wetVelocity = -1;
|
||||||
|
velInheritFactor = 0.3;
|
||||||
|
fizzleTimeMS = 250;
|
||||||
|
lifetimeMS = 8000;
|
||||||
|
explodeOnDeath = false;
|
||||||
|
reflectOnWaterImpactAngle = 0.0;
|
||||||
|
explodeOnWaterImpact = true;
|
||||||
|
deflectionOnWaterImpact = 0.0;
|
||||||
|
fizzleUnderwaterMS = -1;
|
||||||
|
|
||||||
size[0] = 0.2;
|
//activateDelayMS = 100;
|
||||||
size[1] = 0.5;
|
activateDelayMS = -1;
|
||||||
size[2] = 0.1;
|
|
||||||
|
size[0] = 0.2;
|
||||||
|
size[1] = 0.5;
|
||||||
|
size[2] = 0.1;
|
||||||
|
|
||||||
|
|
||||||
numFlares = 35;
|
numFlares = 35;
|
||||||
flareColor = "1 0.18 0.03";
|
flareColor = "1 0.18 0.03";
|
||||||
flareModTexture = "flaremod";
|
flareModTexture = "flaremod";
|
||||||
flareBaseTexture = "flarebase";
|
flareBaseTexture = "flarebase";
|
||||||
|
|
||||||
sound = PlasmaProjectileSound;
|
sound = PlasmaProjectileSound;
|
||||||
fireSound = FlamethrowerFireSound;
|
fireSound = FlamethrowerFireSound;
|
||||||
wetFireSound = PlasmaFireWetSound;
|
wetFireSound = PlasmaFireWetSound;
|
||||||
|
|
||||||
hasLight = true;
|
hasLight = true;
|
||||||
lightRadius = 10.0;
|
lightRadius = 10.0;
|
||||||
lightColor = "0.94 0.03 0.12";
|
lightColor = "0.94 0.03 0.12";
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ItemData(ShadowRifle) {
|
datablock ItemData(ShadowRifle) {
|
||||||
className = Weapon;
|
className = Weapon;
|
||||||
catagory = "Spawn Items";
|
catagory = "Spawn Items";
|
||||||
shapeFile = "weapon_sniper.dts";
|
shapeFile = "weapon_sniper.dts";
|
||||||
image = ShadowRifleImage;
|
image = ShadowRifleImage;
|
||||||
mass = 1;
|
mass = 1;
|
||||||
elasticity = 0.2;
|
elasticity = 0.2;
|
||||||
friction = 0.6;
|
friction = 0.6;
|
||||||
pickupRadius = 2;
|
pickupRadius = 2;
|
||||||
pickUpName = "a shadow rifle";
|
pickUpName = "a shadow rifle";
|
||||||
|
|
||||||
computeCRC = true;
|
computeCRC = true;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ShapeBaseImageData(ShadowRifleImage) {
|
datablock ShapeBaseImageData(ShadowRifleImage) {
|
||||||
className = WeaponImage;
|
className = WeaponImage;
|
||||||
shapeFile = "weapon_sniper.dts";
|
shapeFile = "weapon_sniper.dts";
|
||||||
item = ShadowRifle;
|
item = ShadowRifle;
|
||||||
projectile = ShadowRifleBolt;
|
projectile = ShadowRifleBolt;
|
||||||
projectileType = LinearFlareProjectile;
|
projectileType = LinearFlareProjectile;
|
||||||
|
|
||||||
MedalRequire = 1;
|
MedalRequire = 1;
|
||||||
|
|
||||||
usesEnergy = true;
|
usesEnergy = true;
|
||||||
minEnergy = 6;
|
minEnergy = 6;
|
||||||
|
|
||||||
stateName[0] = "Activate";
|
stateName[0] = "Activate";
|
||||||
stateTransitionOnTimeout[0] = "ActivateReady";
|
stateTransitionOnTimeout[0] = "ActivateReady";
|
||||||
stateSound[0] = SniperRifleSwitchSound;
|
stateSound[0] = SniperRifleSwitchSound;
|
||||||
stateTimeoutValue[0] = 0.5;
|
stateTimeoutValue[0] = 0.5;
|
||||||
stateSequence[0] = "Activate";
|
stateSequence[0] = "Activate";
|
||||||
|
|
||||||
stateName[1] = "ActivateReady";
|
stateName[1] = "ActivateReady";
|
||||||
stateTransitionOnLoaded[1] = "Ready";
|
stateTransitionOnLoaded[1] = "Ready";
|
||||||
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
||||||
|
|
||||||
stateName[2] = "Ready";
|
stateName[2] = "Ready";
|
||||||
stateTransitionOnNoAmmo[2] = "NoAmmo";
|
stateTransitionOnNoAmmo[2] = "NoAmmo";
|
||||||
stateTransitionOnTriggerDown[2] = "CheckWet";
|
stateTransitionOnTriggerDown[2] = "CheckWet";
|
||||||
|
|
||||||
stateName[3] = "Fire";
|
stateName[3] = "Fire";
|
||||||
stateTransitionOnTimeout[3] = "Reload";
|
stateTransitionOnTimeout[3] = "Reload";
|
||||||
stateTimeoutValue[3] = 0.5;
|
stateTimeoutValue[3] = 0.5;
|
||||||
stateFire[3] = true;
|
stateFire[3] = true;
|
||||||
stateAllowImageChange[3] = false;
|
stateAllowImageChange[3] = false;
|
||||||
stateSequence[3] = "Fire";
|
stateSequence[3] = "Fire";
|
||||||
stateScript[3] = "onFire";
|
stateScript[3] = "onFire";
|
||||||
|
|
||||||
stateName[4] = "Reload";
|
stateName[4] = "Reload";
|
||||||
stateTransitionOnTimeout[4] = "Ready";
|
stateTransitionOnTimeout[4] = "Ready";
|
||||||
stateTimeoutValue[4] = 2.5;
|
stateTimeoutValue[4] = 2.5;
|
||||||
stateAllowImageChange[4] = false;
|
stateAllowImageChange[4] = false;
|
||||||
|
|
||||||
stateName[5] = "CheckWet";
|
stateName[5] = "CheckWet";
|
||||||
stateTransitionOnWet[5] = "DryFire";
|
stateTransitionOnWet[5] = "DryFire";
|
||||||
stateTransitionOnNotWet[5] = "Fire";
|
stateTransitionOnNotWet[5] = "Fire";
|
||||||
|
|
||||||
stateName[6] = "NoAmmo";
|
stateName[6] = "NoAmmo";
|
||||||
stateTransitionOnAmmo[6] = "Reload";
|
stateTransitionOnAmmo[6] = "Reload";
|
||||||
stateTransitionOnTriggerDown[6] = "DryFire";
|
stateTransitionOnTriggerDown[6] = "DryFire";
|
||||||
stateSequence[6] = "NoAmmo";
|
stateSequence[6] = "NoAmmo";
|
||||||
|
|
||||||
stateName[7] = "DryFire";
|
stateName[7] = "DryFire";
|
||||||
stateSound[7] = SniperRifleDryFireSound;
|
stateSound[7] = SniperRifleDryFireSound;
|
||||||
stateTimeoutValue[7] = 0.5;
|
stateTimeoutValue[7] = 0.5;
|
||||||
stateTransitionOnTimeout[7] = "Ready";
|
stateTransitionOnTimeout[7] = "Ready";
|
||||||
};
|
};
|
||||||
|
|
||||||
function ShadowRifleBolt::onCollision(%data,%projectile,%targetObject,%modifier,%position,%normal) {
|
function ShadowRifleBolt::onCollision(%data,%projectile,%targetObject,%modifier,%position,%normal) {
|
||||||
Parent::OnCollision(%data,%projectile,%targetObject,%modifier,%position,%normal);
|
Parent::OnCollision(%data,%projectile,%targetObject,%modifier,%position,%normal);
|
||||||
%cn = %targetObject.getClassName();
|
%cn = %targetObject.getClassName();
|
||||||
if(%cn $= "Player") {
|
if(%cn $= "Player") {
|
||||||
if($Host::TeamDamageOn == 0) {
|
if($Host::TeamDamageOn == 0) {
|
||||||
if(%targetObject.team == %projectile.sourceObject.team) {
|
if(%targetObject.team == %projectile.sourceObject.team) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(%targetObject.beingSapped) {
|
if(%targetObject.beingSapped) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(%targetObject.isBoss) {
|
if(%targetObject.isBoss) {
|
||||||
%targetObject.playShieldEffect("1 1 1");
|
%targetObject.playShieldEffect("1 1 1");
|
||||||
%vec = vectorsub(%projectile.sourceObject.getworldboxcenter(),vectorAdd(%targetObject.getPosition(), "0 0 1"));
|
%vec = vectorsub(%projectile.sourceObject.getworldboxcenter(),vectorAdd(%targetObject.getPosition(), "0 0 1"));
|
||||||
%vec = vectoradd(%vec, vectorscale(%projectile.sourceObject.getvelocity(),vectorlen(%vec)/100));
|
%vec = vectoradd(%vec, vectorscale(%projectile.sourceObject.getvelocity(),vectorlen(%vec)/100));
|
||||||
%p = new LinearFlareProjectile() {
|
%p = new LinearFlareProjectile() {
|
||||||
dataBlock = ShadowRifleBolt; //burn :)
|
dataBlock = ShadowRifleBolt; //burn :)
|
||||||
initialDirection = %vec;
|
initialDirection = %vec;
|
||||||
initialPosition = vectorAdd(%targetObject.getPosition(), "0 0 1");
|
initialPosition = vectorAdd(%targetObject.getPosition(), "0 0 1");
|
||||||
sourceObject = %targetObject;
|
sourceObject = %targetObject;
|
||||||
sourceSlot = 0;
|
sourceSlot = 0;
|
||||||
};
|
};
|
||||||
messageClient(%projectile.sourceObject.client, 'MsgWarn', "WARNING: The boss deflects the pulse back at you!");
|
messageClient(%projectile.sourceObject.client, 'MsgWarn', "WARNING: The boss deflects the pulse back at you!");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
%targetObject.beingSapped = 1;
|
%targetObject.beingSapped = 1;
|
||||||
SapLoop(%projectile.sourceObject, %targetObject);
|
SapLoop(%projectile.sourceObject, %targetObject);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function SapLoop(%source, %target) {
|
function SapLoop(%source, %target) {
|
||||||
if(!%source.isAlive()) {
|
if(!%source.isAlive()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(!%target.isAlive()) {
|
if(!%target.isAlive()) {
|
||||||
createBlood(%target);
|
createBlood(%target);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
%target.zapObject();
|
%target.zapObject();
|
||||||
%target.getDatablock().damageObject(%target, %source, %source.getPosition, 0.05, $DamageType::Shadow);
|
%target.getDatablock().damageObject(%target, %source, %source.getPosition, 0.05, $DamageType::Shadow);
|
||||||
%target.lastDamagedImage = "ShadowRifleImage";
|
%target.lastDamagedImage = "ShadowRifleImage";
|
||||||
%source.applyRepair(0.05);
|
%source.applyRepair(0.05);
|
||||||
schedule(500, 0, "SapLoop", %source, %target);
|
schedule(500, 0, "SapLoop", %source, %target);
|
||||||
}
|
}
|
||||||
|
|
@ -1,8 +1,7 @@
|
||||||
datablock AudioProfile(PistolFireSound)
|
datablock AudioProfile(PistolFireSound) {
|
||||||
{
|
filename = "fx/vehicles/tank_chaingun.wav";
|
||||||
filename = "fx/vehicles/tank_chaingun.wav";
|
description = AudioDefault3d;
|
||||||
description = AudioDefault3d;
|
preload = true;
|
||||||
preload = true;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
//--------------------------------------------------------------------------
|
//--------------------------------------------------------------------------
|
||||||
|
|
@ -10,217 +9,214 @@ datablock AudioProfile(PistolFireSound)
|
||||||
//--------------------------------------------------------------------------
|
//--------------------------------------------------------------------------
|
||||||
|
|
||||||
datablock TracerProjectileData(coltBullet) {
|
datablock TracerProjectileData(coltBullet) {
|
||||||
doDynamicClientHits = true;
|
doDynamicClientHits = true;
|
||||||
|
|
||||||
directDamage = 0.15; // z0dd - ZOD, 9-27-02. Was 0.0825
|
directDamage = 0.15; // z0dd - ZOD, 9-27-02. Was 0.0825
|
||||||
directDamageType = $DamageType::pistol;
|
directDamageType = $DamageType::pistol;
|
||||||
explosion = "ChaingunExplosion";
|
explosion = "ChaingunExplosion";
|
||||||
splash = ChaingunSplash;
|
splash = ChaingunSplash;
|
||||||
HeadMultiplier = 1.5;
|
HeadMultiplier = 1.5;
|
||||||
LegsMultiplier = 0.5;
|
LegsMultiplier = 0.5;
|
||||||
|
|
||||||
ImageSource = "PistolImage";
|
|
||||||
|
|
||||||
kickBackStrength = 5.0;
|
ImageSource = "PistolImage";
|
||||||
sound = ChaingunProjectile;
|
|
||||||
|
|
||||||
//dryVelocity = 425.0;
|
kickBackStrength = 5.0;
|
||||||
dryVelocity = 2000.0; // z0dd - ZOD, 8-12-02. Was 425.0
|
sound = ChaingunProjectile;
|
||||||
wetVelocity = 1750.0;
|
|
||||||
velInheritFactor = 0.0;
|
|
||||||
fizzleTimeMS = 3000;
|
|
||||||
lifetimeMS = 3000;
|
|
||||||
explodeOnDeath = false;
|
|
||||||
reflectOnWaterImpactAngle = 0.0;
|
|
||||||
explodeOnWaterImpact = false;
|
|
||||||
deflectionOnWaterImpact = 0.0;
|
|
||||||
fizzleUnderwaterMS = 3000;
|
|
||||||
|
|
||||||
tracerLength = 25.0;
|
//dryVelocity = 425.0;
|
||||||
tracerAlpha = false;
|
dryVelocity = 2000.0; // z0dd - ZOD, 8-12-02. Was 425.0
|
||||||
tracerMinPixels = 6;
|
wetVelocity = 1750.0;
|
||||||
tracerColor = 211.0/255.0 @ " " @ 215.0/255.0 @ " " @ 120.0/255.0 @ " 0.75";
|
velInheritFactor = 0.0;
|
||||||
|
fizzleTimeMS = 3000;
|
||||||
|
lifetimeMS = 3000;
|
||||||
|
explodeOnDeath = false;
|
||||||
|
reflectOnWaterImpactAngle = 0.0;
|
||||||
|
explodeOnWaterImpact = false;
|
||||||
|
deflectionOnWaterImpact = 0.0;
|
||||||
|
fizzleUnderwaterMS = 3000;
|
||||||
|
|
||||||
|
tracerLength = 25.0;
|
||||||
|
tracerAlpha = false;
|
||||||
|
tracerMinPixels = 6;
|
||||||
|
tracerColor = 211.0/255.0 @ " " @ 215.0/255.0 @ " " @ 120.0/255.0 @ " 0.75";
|
||||||
tracerTex[0] = "special/tracer00";
|
tracerTex[0] = "special/tracer00";
|
||||||
tracerTex[1] = "special/tracercross";
|
tracerTex[1] = "special/tracercross";
|
||||||
tracerWidth = 0.09;
|
tracerWidth = 0.09;
|
||||||
crossSize = 0.20;
|
crossSize = 0.20;
|
||||||
crossViewAng = 0.990;
|
crossViewAng = 0.990;
|
||||||
renderCross = true;
|
renderCross = true;
|
||||||
|
|
||||||
decalData[0] = ChaingunDecal1;
|
decalData[0] = ChaingunDecal1;
|
||||||
decalData[1] = ChaingunDecal2;
|
decalData[1] = ChaingunDecal2;
|
||||||
decalData[2] = ChaingunDecal3;
|
decalData[2] = ChaingunDecal3;
|
||||||
decalData[3] = ChaingunDecal4;
|
decalData[3] = ChaingunDecal4;
|
||||||
decalData[4] = ChaingunDecal5;
|
decalData[4] = ChaingunDecal5;
|
||||||
decalData[5] = ChaingunDecal6;
|
decalData[5] = ChaingunDecal6;
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ItemData(pistolAmmo)
|
datablock ItemData(pistolAmmo) {
|
||||||
{
|
className = Ammo;
|
||||||
className = Ammo;
|
catagory = "Ammo";
|
||||||
catagory = "Ammo";
|
shapeFile = "ammo_chaingun.dts";
|
||||||
shapeFile = "ammo_chaingun.dts";
|
mass = 1;
|
||||||
mass = 1;
|
elasticity = 0.2;
|
||||||
elasticity = 0.2;
|
friction = 0.6;
|
||||||
friction = 0.6;
|
pickupRadius = 2;
|
||||||
pickupRadius = 2;
|
|
||||||
pickUpName = "some .77mm bullets";
|
pickUpName = "some .77mm bullets";
|
||||||
|
|
||||||
computeCRC = true;
|
computeCRC = true;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ItemData(pistol) {
|
datablock ItemData(pistol) {
|
||||||
className = Weapon;
|
className = Weapon;
|
||||||
catagory = "Spawn Items";
|
catagory = "Spawn Items";
|
||||||
shapeFile = "weapon_energy_vehicle.dts";
|
shapeFile = "weapon_energy_vehicle.dts";
|
||||||
image = pistolImage;
|
image = pistolImage;
|
||||||
mass = 2;
|
mass = 2;
|
||||||
elasticity = 0.2;
|
elasticity = 0.2;
|
||||||
friction = 0.6;
|
friction = 0.6;
|
||||||
pickupRadius = 2;
|
pickupRadius = 2;
|
||||||
pickUpName = "a Colt Pistol";
|
pickUpName = "a Colt Pistol";
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ShapeBaseImageData(PistolImage)
|
datablock ShapeBaseImageData(PistolImage) {
|
||||||
{
|
className = WeaponImage;
|
||||||
className = WeaponImage;
|
shapeFile = "weapon_energy_vehicle.dts";
|
||||||
shapeFile = "weapon_energy_vehicle.dts";
|
item = pistol;
|
||||||
item = pistol;
|
offset = "0 0 0";
|
||||||
offset = "0 0 0";
|
rotation = "0 1 0 180";
|
||||||
rotation = "0 1 0 180";
|
mass = 4;
|
||||||
mass = 4;
|
|
||||||
|
|
||||||
ammo = pistolAmmo;
|
ammo = pistolAmmo;
|
||||||
|
|
||||||
projectile = coltbullet;
|
projectile = coltbullet;
|
||||||
projectileType = tracerProjectile;
|
projectileType = tracerProjectile;
|
||||||
projectileSpread = 10.0 / 1000.0;
|
projectileSpread = 10.0 / 1000.0;
|
||||||
|
|
||||||
//ClipStuff
|
|
||||||
ClipName = "ColtClip";
|
|
||||||
ClipPickupName["ColtClip"] = "Some .77MM Clips";
|
|
||||||
ShowsClipInHud = 0;
|
|
||||||
ClipReloadTime = 2;
|
|
||||||
ClipReturn = 10;
|
|
||||||
InitialClips = 950;
|
|
||||||
HellClipCount = 10;
|
|
||||||
//
|
|
||||||
//Challenges
|
|
||||||
HasChallenges = 1;
|
|
||||||
ChallengeCt = 9;
|
|
||||||
Challenge[1] = "Coltee\t25\t100\tGrip";
|
|
||||||
Challenge[2] = "Coltist\t50\t150\tLaser";
|
|
||||||
Challenge[3] = "Colt Expert\t100\t250\tSilencer";
|
|
||||||
Challenge[4] = "Colt Master\t250\t500\tExcessive Duality";
|
|
||||||
Challenge[5] = "Colt God\t500\t1000\tHSBullets";
|
|
||||||
Challenge[6] = "Colt Bronze Commendation\t1000\t10000\tNone";
|
|
||||||
Challenge[7] = "Colt Silver Commendation\t2500\t25000\tNone";
|
|
||||||
Challenge[8] = "Colt Gold Commendation\t5000\t50000\tNone";
|
|
||||||
Challenge[9] = "Colt Titan Commendation\t15000\t75000\tNone";
|
|
||||||
Upgrade[1] = "Grip";
|
|
||||||
Upgrade[2] = "Laser";
|
|
||||||
Upgrade[3] = "Silencer";
|
|
||||||
Upgrade[4] = "Excessive Duality";
|
|
||||||
Upgrade[5] = "HSBullets";
|
|
||||||
GunName = "Colt Pistol";
|
|
||||||
//
|
|
||||||
|
|
||||||
stateName[0] = "Activate";
|
//ClipStuff
|
||||||
stateTransitionOnTimeout[0] = "ActivateReady";
|
ClipName = "ColtClip";
|
||||||
stateTimeoutValue[0] = 0.5;
|
ClipPickupName["ColtClip"] = "Some .77MM Clips";
|
||||||
stateSequence[0] = "Activate";
|
ShowsClipInHud = 0;
|
||||||
stateSound[0] = PlasmaSwitchSound;
|
ClipReloadTime = 2;
|
||||||
|
ClipReturn = 10;
|
||||||
|
InitialClips = 950;
|
||||||
|
HellClipCount = 10;
|
||||||
|
//
|
||||||
|
//Challenges
|
||||||
|
HasChallenges = 1;
|
||||||
|
ChallengeCt = 9;
|
||||||
|
Challenge[1] = "Coltee\t25\t100\tGrip";
|
||||||
|
Challenge[2] = "Coltist\t50\t150\tLaser";
|
||||||
|
Challenge[3] = "Colt Expert\t100\t250\tSilencer";
|
||||||
|
Challenge[4] = "Colt Master\t250\t500\tExcessive Duality";
|
||||||
|
Challenge[5] = "Colt God\t500\t1000\tHSBullets";
|
||||||
|
Challenge[6] = "Colt Bronze Commendation\t1000\t10000\tNone";
|
||||||
|
Challenge[7] = "Colt Silver Commendation\t2500\t25000\tNone";
|
||||||
|
Challenge[8] = "Colt Gold Commendation\t5000\t50000\tNone";
|
||||||
|
Challenge[9] = "Colt Titan Commendation\t15000\t75000\tNone";
|
||||||
|
Upgrade[1] = "Grip";
|
||||||
|
Upgrade[2] = "Laser";
|
||||||
|
Upgrade[3] = "Silencer";
|
||||||
|
Upgrade[4] = "Excessive Duality";
|
||||||
|
Upgrade[5] = "HSBullets";
|
||||||
|
GunName = "Colt Pistol";
|
||||||
|
//
|
||||||
|
|
||||||
stateName[1] = "ActivateReady";
|
stateName[0] = "Activate";
|
||||||
stateTransitionOnLoaded[1] = "Ready";
|
stateTransitionOnTimeout[0] = "ActivateReady";
|
||||||
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
stateTimeoutValue[0] = 0.5;
|
||||||
|
stateSequence[0] = "Activate";
|
||||||
|
stateSound[0] = PlasmaSwitchSound;
|
||||||
|
|
||||||
stateName[2] = "Ready";
|
stateName[1] = "ActivateReady";
|
||||||
stateTransitionOnNoAmmo[2] = "NoAmmo";
|
stateTransitionOnLoaded[1] = "Ready";
|
||||||
stateTransitionOnTriggerDown[2] = "Fire";
|
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
||||||
|
|
||||||
stateName[3] = "Fire";
|
stateName[2] = "Ready";
|
||||||
stateTransitionOnTimeout[3] = "Reload";
|
stateTransitionOnNoAmmo[2] = "NoAmmo";
|
||||||
stateTimeoutValue[3] = 0.1;
|
stateTransitionOnTriggerDown[2] = "Fire";
|
||||||
stateFire[3] = true;
|
|
||||||
stateEmitter[3] = "GunFireEffectEmitter";
|
|
||||||
stateEmitterNode[3] = "muzzlepoint1";
|
|
||||||
stateEmitterTime[3] = 1;
|
|
||||||
stateRecoil[3] = LightRecoil;
|
|
||||||
stateAllowImageChange[3] = false;
|
|
||||||
stateScript[3] = "onFire";
|
|
||||||
stateEmitterTime[3] = 0.2;
|
|
||||||
//stateSound[3] = PistolFireSound;
|
|
||||||
|
|
||||||
stateName[4] = "Reload";
|
stateName[3] = "Fire";
|
||||||
stateTransitionOnNoAmmo[4] = "NoAmmo";
|
stateTransitionOnTimeout[3] = "Reload";
|
||||||
stateTransitionOnTimeout[4] = "Ready";
|
stateTimeoutValue[3] = 0.1;
|
||||||
stateTimeoutValue[4] = 0.1;
|
stateFire[3] = true;
|
||||||
stateAllowImageChange[4] = false;
|
stateEmitter[3] = "GunFireEffectEmitter";
|
||||||
stateSequence[4] = "Reload";
|
stateEmitterNode[3] = "muzzlepoint1";
|
||||||
|
stateEmitterTime[3] = 1;
|
||||||
|
stateRecoil[3] = LightRecoil;
|
||||||
|
stateAllowImageChange[3] = false;
|
||||||
|
stateScript[3] = "onFire";
|
||||||
|
stateEmitterTime[3] = 0.2;
|
||||||
|
//stateSound[3] = PistolFireSound;
|
||||||
|
|
||||||
stateName[5] = "NoAmmo";
|
stateName[4] = "Reload";
|
||||||
stateTransitionOnAmmo[5] = "Reload";
|
stateTransitionOnNoAmmo[4] = "NoAmmo";
|
||||||
stateSequence[5] = "NoAmmo";
|
stateTransitionOnTimeout[4] = "Ready";
|
||||||
stateTransitionOnTriggerDown[5] = "DryFire";
|
stateTimeoutValue[4] = 0.1;
|
||||||
|
stateAllowImageChange[4] = false;
|
||||||
|
stateSequence[4] = "Reload";
|
||||||
|
|
||||||
stateName[6] = "DryFire";
|
stateName[5] = "NoAmmo";
|
||||||
stateSound[6] = ChaingunDryFireSound;
|
stateTransitionOnAmmo[5] = "Reload";
|
||||||
stateTimeoutValue[6] = 1.5;
|
stateSequence[5] = "NoAmmo";
|
||||||
stateTransitionOnTimeout[6] = "NoAmmo";
|
stateTransitionOnTriggerDown[5] = "DryFire";
|
||||||
|
|
||||||
|
stateName[6] = "DryFire";
|
||||||
|
stateSound[6] = ChaingunDryFireSound;
|
||||||
|
stateTimeoutValue[6] = 1.5;
|
||||||
|
stateTransitionOnTimeout[6] = "NoAmmo";
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ShapeBaseImageData(PistolImage2) : PistolImage {
|
datablock ShapeBaseImageData(PistolImage2) : PistolImage {
|
||||||
offset = "-0.5 0 0";
|
offset = "-0.5 0 0";
|
||||||
};
|
};
|
||||||
|
|
||||||
function PistolImage::onMount(%this,%obj,%slot) {
|
function PistolImage::onMount(%this, %obj, %slot) {
|
||||||
Parent::onMount(%this, %obj, %slot);
|
Parent::onMount(%this, %obj, %slot);
|
||||||
if(%obj.client.UpgradeOn("Excessive Duality", %this.getName())) {
|
if(%obj.client.UpgradeOn("Excessive Duality", %this.getName())) {
|
||||||
%obj.mountImage(PistolImage2, 5);
|
%obj.mountImage(PistolImage2, 5);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function PistolImage::onUnmount(%this,%obj,%slot) {
|
function PistolImage::onUnmount(%this,%obj,%slot) {
|
||||||
%obj.unmountImage(5);
|
%obj.unmountImage(5);
|
||||||
Parent::onUnmount(%this, %obj, %slot);
|
Parent::onUnmount(%this, %obj, %slot);
|
||||||
}
|
}
|
||||||
|
|
||||||
function PistolImage::onFire(%data, %obj, %slot) {
|
function PistolImage::onFire(%data, %obj, %slot) {
|
||||||
%p = Parent::onFire(%data, %obj, %slot);
|
%p = Parent::onFire(%data, %obj, %slot);
|
||||||
if(%obj.client.UpgradeOn("Silencer", %data.getName())) {
|
if(%obj.client.UpgradeOn("Silencer", %data.getName())) {
|
||||||
//zero sound :p
|
//zero sound :p
|
||||||
}
|
}
|
||||||
else if(%obj.client.UpgradeOn("Excessive Duality", %data.getName())) {
|
else if(%obj.client.UpgradeOn("Excessive Duality", %data.getName())) {
|
||||||
schedule(200, 0, "FirePistolShot", %data, %obj, %slot);
|
schedule(200, 0, "FirePistolShot", %data, %obj, %slot);
|
||||||
ServerPlay3d(PistolFireSound, %obj.getPosition());
|
ServerPlay3d(PistolFireSound, %obj.getPosition());
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
ServerPlay3d(PistolFireSound, %obj.getPosition());
|
ServerPlay3d(PistolFireSound, %obj.getPosition());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function FirePistolShot(%data, %obj, %slot) {
|
function FirePistolShot(%data, %obj, %slot) {
|
||||||
serverPlay3d("PistolFireSound", %obj.getPosition());
|
serverPlay3d("PistolFireSound", %obj.getPosition());
|
||||||
|
|
||||||
%vector = %obj.getMuzzleVector(%slot);
|
%vector = %obj.getMuzzleVector(%slot);
|
||||||
%mp = %obj.getMuzzlePoint(%slot);
|
%mp = %obj.getMuzzlePoint(%slot);
|
||||||
|
|
||||||
%x = (getRandom() - 0.5) * 2 * 3.1415926 * %data.projectileSpread;
|
%x = (getRandom() - 0.5) * 2 * 3.1415926 * %data.projectileSpread;
|
||||||
%y = (getRandom() - 0.5) * 2 * 3.1415926 * %data.projectileSpread;
|
%y = (getRandom() - 0.5) * 2 * 3.1415926 * %data.projectileSpread;
|
||||||
%z = (getRandom() - 0.5) * 2 * 3.1415926 * %data.projectileSpread;
|
%z = (getRandom() - 0.5) * 2 * 3.1415926 * %data.projectileSpread;
|
||||||
%mat = MatrixCreateFromEuler(%x @ " " @ %y @ " " @ %z);
|
%mat = MatrixCreateFromEuler(%x @ " " @ %y @ " " @ %z);
|
||||||
%newvector = MatrixMulVector(%mat, %vector);
|
%newvector = MatrixMulVector(%mat, %vector);
|
||||||
|
|
||||||
%p = new (%data.projectileType)() {
|
%p = new (%data.projectileType)() {
|
||||||
dataBlock = %data.projectile;
|
dataBlock = %data.projectile;
|
||||||
initialDirection = %newvector;
|
initialDirection = %newvector;
|
||||||
initialPosition = %mp;
|
initialPosition = %mp;
|
||||||
sourceObject = %obj;
|
sourceObject = %obj;
|
||||||
damageFactor = 1;
|
damageFactor = 1;
|
||||||
sourceSlot = %slot;
|
sourceSlot = %slot;
|
||||||
};
|
};
|
||||||
%p.ImageSource = "PistolImage";
|
%p.ImageSource = "PistolImage";
|
||||||
%p.WeaponImageSource = "PistolImage";
|
%p.WeaponImageSource = "PistolImage";
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,203 +2,199 @@
|
||||||
// Projectile
|
// Projectile
|
||||||
//--------------------------------------------------------------------------
|
//--------------------------------------------------------------------------
|
||||||
datablock TracerProjectileData(CHawkBullet) {
|
datablock TracerProjectileData(CHawkBullet) {
|
||||||
doDynamicClientHits = true;
|
doDynamicClientHits = true;
|
||||||
|
|
||||||
directDamage = 0.23; //reduced 0.5
|
directDamage = 0.17;
|
||||||
directDamageType = $DamageType::Hawk; //obviously change this
|
directDamageType = $DamageType::CrimsonHawk; //obviously change this
|
||||||
|
|
||||||
explosion = "BlasterExplosion";
|
explosion = "BlasterExplosion";
|
||||||
splash = ChaingunSplash;
|
splash = ChaingunSplash;
|
||||||
|
|
||||||
sound = ShrikeBlasterProjectileSound;
|
sound = ShrikeBlasterProjectileSound;
|
||||||
|
|
||||||
dryVelocity = 425.0;
|
dryVelocity = 425.0;
|
||||||
wetVelocity = 100.0;
|
wetVelocity = 100.0;
|
||||||
velInheritFactor = 1.0;
|
velInheritFactor = 1.0;
|
||||||
fizzleTimeMS = 1000;
|
fizzleTimeMS = 500;
|
||||||
lifetimeMS = 1000;
|
lifetimeMS = 700;
|
||||||
explodeOnDeath = false;
|
explodeOnDeath = false;
|
||||||
reflectOnWaterImpactAngle = 0.0;
|
reflectOnWaterImpactAngle = 0.0;
|
||||||
explodeOnWaterImpact = false;
|
explodeOnWaterImpact = false;
|
||||||
deflectionOnWaterImpact = 0.0;
|
deflectionOnWaterImpact = 0.0;
|
||||||
fizzleUnderwaterMS = 3000;
|
fizzleUnderwaterMS = 3000;
|
||||||
|
|
||||||
ImageSource = "CrimsonHawkImage";
|
|
||||||
|
|
||||||
tracerLength = 45.0;
|
ImageSource = "CrimsonHawkImage";
|
||||||
tracerAlpha = false;
|
|
||||||
tracerMinPixels = 6;
|
tracerLength = 45.0;
|
||||||
tracerColor = "1.0 0.0 0.0 1.0";
|
tracerAlpha = false;
|
||||||
|
tracerMinPixels = 6;
|
||||||
|
tracerColor = "1.0 0.0 0.0 1.0";
|
||||||
tracerTex[0] = "special/shrikeBolt";
|
tracerTex[0] = "special/shrikeBolt";
|
||||||
tracerTex[1] = "special/shrikeBoltCross";
|
tracerTex[1] = "special/shrikeBoltCross";
|
||||||
tracerWidth = 0.55;
|
tracerWidth = 0.55;
|
||||||
crossSize = 0.99;
|
crossSize = 0.99;
|
||||||
crossViewAng = 0.990;
|
crossViewAng = 0.990;
|
||||||
renderCross = true;
|
renderCross = true;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ItemData(CrimsonHawkAmmo)
|
datablock ItemData(CrimsonHawkAmmo) {
|
||||||
{
|
className = Ammo;
|
||||||
className = Ammo;
|
catagory = "Ammo";
|
||||||
catagory = "Ammo";
|
shapeFile = "ammo_chaingun.dts";
|
||||||
shapeFile = "ammo_chaingun.dts";
|
mass = 1;
|
||||||
mass = 1;
|
elasticity = 0.2;
|
||||||
elasticity = 0.2;
|
friction = 0.6;
|
||||||
friction = 0.6;
|
pickupRadius = 2;
|
||||||
pickupRadius = 2;
|
|
||||||
pickUpName = "some .77mm bullets";
|
pickUpName = "some .77mm bullets";
|
||||||
|
|
||||||
computeCRC = true;
|
computeCRC = true;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ItemData(CrimsonHawk) {
|
datablock ItemData(CrimsonHawk) {
|
||||||
className = Weapon;
|
className = Weapon;
|
||||||
catagory = "Spawn Items";
|
catagory = "Spawn Items";
|
||||||
shapeFile = "weapon_energy_vehicle.dts";
|
shapeFile = "weapon_energy_vehicle.dts";
|
||||||
image = CrimsonHawkImage;
|
image = CrimsonHawkImage;
|
||||||
mass = 2;
|
mass = 2;
|
||||||
elasticity = 0.2;
|
elasticity = 0.2;
|
||||||
friction = 0.6;
|
friction = 0.6;
|
||||||
pickupRadius = 2;
|
pickupRadius = 2;
|
||||||
pickUpName = "a CrimsonHawk Pistol";
|
pickUpName = "a Crimson Hawk Pistol";
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ShapeBaseImageData(CrimsonHawkImage)
|
datablock ShapeBaseImageData(CrimsonHawkImage) {
|
||||||
{
|
className = WeaponImage;
|
||||||
className = WeaponImage;
|
shapeFile = "weapon_energy_vehicle.dts";
|
||||||
shapeFile = "weapon_energy_vehicle.dts";
|
item = CrimsonHawk;
|
||||||
item = CrimsonHawk;
|
offset = "0 0 0";
|
||||||
offset = "0 0 0";
|
rotation = "0 1 0 180";
|
||||||
rotation = "0 1 0 180";
|
mass = 4;
|
||||||
mass = 4;
|
|
||||||
|
|
||||||
ammo = CrimsonHawkAmmo;
|
ammo = CrimsonHawkAmmo;
|
||||||
|
|
||||||
projectile = CHawkBullet;
|
projectile = CHawkBullet;
|
||||||
projectileType = tracerProjectile;
|
projectileType = tracerProjectile;
|
||||||
projectileSpread = 5.0 / 1000.0;
|
projectileSpread = 5.0 / 1000.0;
|
||||||
|
|
||||||
//ClipStuff
|
|
||||||
ClipName = "CrimsonHawkClip";
|
|
||||||
ClipPickupName["CrimsonHawkClip"] = "Some .77MM Clips";
|
|
||||||
ShowsClipInHud = 0;
|
|
||||||
ClipReloadTime = 4;
|
|
||||||
ClipReturn = 15;
|
|
||||||
InitialClips = 950;
|
|
||||||
HellClipCount = 10;
|
|
||||||
//
|
|
||||||
|
|
||||||
//RankRequire = $TWM2::RankRequire["CrimsonHawk"];
|
|
||||||
PrestigeRequire = 5;
|
|
||||||
|
|
||||||
//Challenges
|
|
||||||
HasChallenges = 1;
|
|
||||||
ChallengeCt = 9;
|
|
||||||
Challenge[1] = "Crimson Hawk Novice\t25\t100\tNone";
|
|
||||||
Challenge[2] = "Crimson Hawk Hunter\t50\t150\tGrip";
|
|
||||||
Challenge[3] = "Crimson Hawk Expert\t100\t250\tLaser";
|
|
||||||
Challenge[4] = "Crimson Hawk Master\t250\t500\tSilencer";
|
|
||||||
Challenge[5] = "Crimson Hawk God\t500\t1000\tNone";
|
|
||||||
Challenge[6] = "Crimson Hawk Bronze Commendation\t2500\t10000\tNone";
|
|
||||||
Challenge[7] = "Crimson Hawk Silver Commendation\t7500\t25000\tNone";
|
|
||||||
Challenge[8] = "Crimson Hawk Gold Commendation\t25000\t50000\tNone";
|
|
||||||
Challenge[9] = "Crimson Hawk Titan Commendation\t50000\t75000\tNone";
|
|
||||||
Upgrade[1] = "Grip";
|
|
||||||
Upgrade[2] = "Laser";
|
|
||||||
Upgrade[3] = "Silencer";
|
|
||||||
GunName = "Crimson Hawk";
|
|
||||||
//
|
|
||||||
|
|
||||||
stateName[0] = "Activate";
|
//ClipStuff
|
||||||
stateTransitionOnTimeout[0] = "ActivateReady";
|
ClipName = "CrimsonHawkClip";
|
||||||
stateTimeoutValue[0] = 0.5;
|
ClipPickupName["CrimsonHawkClip"] = "Some .77MM Clips";
|
||||||
stateSequence[0] = "Activate";
|
ShowsClipInHud = 0;
|
||||||
stateSound[0] = PlasmaSwitchSound;
|
ClipReloadTime = 4;
|
||||||
|
ClipReturn = 15;
|
||||||
|
InitialClips = 950;
|
||||||
|
HellClipCount = 10;
|
||||||
|
//
|
||||||
|
|
||||||
stateName[1] = "ActivateReady";
|
//RankRequire = $TWM2::RankRequire["CrimsonHawk"];
|
||||||
stateTransitionOnLoaded[1] = "Ready";
|
PrestigeRequire = 5;
|
||||||
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
|
||||||
|
|
||||||
stateName[2] = "Ready";
|
//Challenges
|
||||||
stateTransitionOnNoAmmo[2] = "NoAmmo";
|
HasChallenges = 1;
|
||||||
stateTransitionOnTriggerDown[2] = "Fire";
|
ChallengeCt = 9;
|
||||||
|
Challenge[1] = "Crimson Hawk Novice\t25\t100\tNone";
|
||||||
|
Challenge[2] = "Crimson Hawk Hunter\t50\t150\tGrip";
|
||||||
|
Challenge[3] = "Crimson Hawk Expert\t100\t250\tLaser";
|
||||||
|
Challenge[4] = "Crimson Hawk Master\t250\t500\tSilencer";
|
||||||
|
Challenge[5] = "Crimson Hawk God\t500\t1000\tNone";
|
||||||
|
Challenge[6] = "Crimson Hawk Bronze Commendation\t2500\t10000\tNone";
|
||||||
|
Challenge[7] = "Crimson Hawk Silver Commendation\t7500\t25000\tNone";
|
||||||
|
Challenge[8] = "Crimson Hawk Gold Commendation\t25000\t50000\tNone";
|
||||||
|
Challenge[9] = "Crimson Hawk Titan Commendation\t50000\t75000\tNone";
|
||||||
|
Upgrade[1] = "Grip";
|
||||||
|
Upgrade[2] = "Laser";
|
||||||
|
Upgrade[3] = "Silencer";
|
||||||
|
GunName = "Crimson Hawk";
|
||||||
|
//
|
||||||
|
|
||||||
stateName[3] = "Fire";
|
stateName[0] = "Activate";
|
||||||
stateTransitionOnTimeout[3] = "Fire2";
|
stateTransitionOnTimeout[0] = "ActivateReady";
|
||||||
stateTimeoutValue[3] = 0.1;
|
stateTimeoutValue[0] = 0.5;
|
||||||
stateFire[3] = true;
|
stateSequence[0] = "Activate";
|
||||||
stateRecoil[3] = LightRecoil;
|
stateSound[0] = PlasmaSwitchSound;
|
||||||
stateAllowImageChange[3] = false;
|
|
||||||
stateScript[3] = "onFire";
|
|
||||||
stateEmitterTime[3] = 0.1;
|
|
||||||
|
|
||||||
stateName[4] = "Fire2";
|
|
||||||
stateTransitionOnTimeout[4] = "Fire3";
|
|
||||||
stateTimeoutValue[4] = 0.1;
|
|
||||||
stateFire[4] = true;
|
|
||||||
stateRecoil[4] = LightRecoil;
|
|
||||||
stateAllowImageChange[4] = false;
|
|
||||||
stateScript[4] = "onFire";
|
|
||||||
stateEmitterTime[4] = 0.1;
|
|
||||||
|
|
||||||
stateName[5] = "Fire3";
|
|
||||||
stateTransitionOnTimeout[5] = "Fire4";
|
|
||||||
stateTimeoutValue[5] = 0.1;
|
|
||||||
stateFire[5] = true;
|
|
||||||
stateRecoil[5] = LightRecoil;
|
|
||||||
stateAllowImageChange[5] = false;
|
|
||||||
stateScript[5] = "onFire";
|
|
||||||
stateEmitterTime[5] = 0.1;
|
|
||||||
|
|
||||||
stateName[6] = "Fire4";
|
|
||||||
stateTransitionOnTimeout[6] = "Fire5";
|
|
||||||
stateTimeoutValue[6] = 0.1;
|
|
||||||
stateFire[6] = true;
|
|
||||||
stateRecoil[6] = LightRecoil;
|
|
||||||
stateAllowImageChange[6] = false;
|
|
||||||
stateScript[6] = "onFire";
|
|
||||||
stateEmitterTime[6] = 0.1;
|
|
||||||
|
|
||||||
stateName[7] = "Fire5";
|
stateName[1] = "ActivateReady";
|
||||||
stateTransitionOnTimeout[7] = "Reload";
|
stateTransitionOnLoaded[1] = "Ready";
|
||||||
stateTimeoutValue[7] = 0.1;
|
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
||||||
stateFire[7] = true;
|
|
||||||
stateRecoil[7] = LightRecoil;
|
|
||||||
stateAllowImageChange[7] = false;
|
|
||||||
stateScript[7] = "onFire";
|
|
||||||
stateEmitterTime[7] = 0.1;
|
|
||||||
//stateSound[3] = PistolFireSound;
|
|
||||||
|
|
||||||
stateName[8] = "Reload";
|
stateName[2] = "Ready";
|
||||||
stateTransitionOnNoAmmo[8] = "NoAmmo";
|
stateTransitionOnNoAmmo[2] = "NoAmmo";
|
||||||
stateTransitionOnTimeout[8] = "Ready";
|
stateTransitionOnTriggerDown[2] = "Fire";
|
||||||
stateTimeoutValue[8] = 0.1;
|
|
||||||
stateAllowImageChange[8] = false;
|
|
||||||
stateSequence[8] = "Reload";
|
|
||||||
|
|
||||||
stateName[9] = "NoAmmo";
|
stateName[3] = "Fire";
|
||||||
stateTransitionOnAmmo[9] = "Reload";
|
stateTransitionOnTimeout[3] = "Fire2";
|
||||||
stateSequence[9] = "NoAmmo";
|
stateTimeoutValue[3] = 0.1;
|
||||||
stateTransitionOnTriggerDown[9] = "DryFire";
|
stateFire[3] = true;
|
||||||
|
stateRecoil[3] = LightRecoil;
|
||||||
|
stateAllowImageChange[3] = false;
|
||||||
|
stateScript[3] = "onFire";
|
||||||
|
stateEmitterTime[3] = 0.1;
|
||||||
|
|
||||||
stateName[10] = "DryFire";
|
stateName[4] = "Fire2";
|
||||||
stateSound[10] = ChaingunDryFireSound;
|
stateTransitionOnTimeout[4] = "Fire3";
|
||||||
stateTimeoutValue[10] = 1.5;
|
stateTimeoutValue[4] = 0.1;
|
||||||
stateTransitionOnTimeout[10] = "NoAmmo";
|
stateFire[4] = true;
|
||||||
|
stateRecoil[4] = LightRecoil;
|
||||||
|
stateAllowImageChange[4] = false;
|
||||||
|
stateScript[4] = "onFire";
|
||||||
|
stateEmitterTime[4] = 0.1;
|
||||||
|
|
||||||
|
stateName[5] = "Fire3";
|
||||||
|
stateTransitionOnTimeout[5] = "Fire4";
|
||||||
|
stateTimeoutValue[5] = 0.1;
|
||||||
|
stateFire[5] = true;
|
||||||
|
stateRecoil[5] = LightRecoil;
|
||||||
|
stateAllowImageChange[5] = false;
|
||||||
|
stateScript[5] = "onFire";
|
||||||
|
stateEmitterTime[5] = 0.1;
|
||||||
|
|
||||||
|
stateName[6] = "Fire4";
|
||||||
|
stateTransitionOnTimeout[6] = "Fire5";
|
||||||
|
stateTimeoutValue[6] = 0.1;
|
||||||
|
stateFire[6] = true;
|
||||||
|
stateRecoil[6] = LightRecoil;
|
||||||
|
stateAllowImageChange[6] = false;
|
||||||
|
stateScript[6] = "onFire";
|
||||||
|
stateEmitterTime[6] = 0.1;
|
||||||
|
|
||||||
|
stateName[7] = "Fire5";
|
||||||
|
stateTransitionOnTimeout[7] = "Reload";
|
||||||
|
stateTimeoutValue[7] = 0.1;
|
||||||
|
stateFire[7] = true;
|
||||||
|
stateRecoil[7] = LightRecoil;
|
||||||
|
stateAllowImageChange[7] = false;
|
||||||
|
stateScript[7] = "onFire";
|
||||||
|
stateEmitterTime[7] = 0.1;
|
||||||
|
//stateSound[3] = PistolFireSound;
|
||||||
|
|
||||||
|
stateName[8] = "Reload";
|
||||||
|
stateTransitionOnNoAmmo[8] = "NoAmmo";
|
||||||
|
stateTransitionOnTimeout[8] = "Ready";
|
||||||
|
stateTimeoutValue[8] = 0.1;
|
||||||
|
stateAllowImageChange[8] = false;
|
||||||
|
stateSequence[8] = "Reload";
|
||||||
|
|
||||||
|
stateName[9] = "NoAmmo";
|
||||||
|
stateTransitionOnAmmo[9] = "Reload";
|
||||||
|
stateSequence[9] = "NoAmmo";
|
||||||
|
stateTransitionOnTriggerDown[9] = "DryFire";
|
||||||
|
|
||||||
|
stateName[10] = "DryFire";
|
||||||
|
stateSound[10] = ChaingunDryFireSound;
|
||||||
|
stateTimeoutValue[10] = 1.5;
|
||||||
|
stateTransitionOnTimeout[10] = "NoAmmo";
|
||||||
};
|
};
|
||||||
|
|
||||||
function CrimsonHawkImage::onMount(%this,%obj,%slot) {
|
function CrimsonHawkImage::onMount(%this,%obj,%slot) {
|
||||||
Parent::onMount(%this, %obj, %slot);
|
Parent::onMount(%this, %obj, %slot);
|
||||||
}
|
}
|
||||||
|
|
||||||
function CrimsonHawkImage::onFire(%data, %obj, %slot) {
|
function CrimsonHawkImage::onFire(%data, %obj, %slot) {
|
||||||
%p = Parent::onFire(%data, %obj, %slot);
|
%p = Parent::onFire(%data, %obj, %slot);
|
||||||
if(%obj.client.UpgradeOn("Silencer", %data.getName())) {
|
if(%obj.client.UpgradeOn("Silencer", %data.getName())) {
|
||||||
//zero sound :p
|
//zero sound :p
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
ServerPlay3d(PistolFireSound, %obj.getPosition());
|
ServerPlay3d(PistolFireSound, %obj.getPosition());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,163 +1,161 @@
|
||||||
datablock ItemData(LD06SavagerAmmo) {
|
datablock ItemData(LD06SavagerAmmo) {
|
||||||
className = Ammo;
|
className = Ammo;
|
||||||
catagory = "Ammo";
|
catagory = "Ammo";
|
||||||
shapeFile = "ammo_chaingun.dts";
|
shapeFile = "ammo_chaingun.dts";
|
||||||
mass = 1;
|
mass = 1;
|
||||||
elasticity = 0.2;
|
elasticity = 0.2;
|
||||||
friction = 0.6;
|
friction = 0.6;
|
||||||
pickupRadius = 2;
|
pickupRadius = 2;
|
||||||
pickUpName = "some LD06Savager rounds";
|
pickUpName = "some LD06Savager rounds";
|
||||||
|
|
||||||
computeCRC = true;
|
computeCRC = true;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
//--------------------------------------------------------------------------
|
//--------------------------------------------------------------------------
|
||||||
// Weapon
|
// Weapon
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
datablock ShapeBaseImageData(LD06SavagerImage) {
|
datablock ShapeBaseImageData(LD06SavagerImage) {
|
||||||
className = WeaponImage;
|
className = WeaponImage;
|
||||||
shapeFile = "weapon_plasma.dts";
|
shapeFile = "weapon_plasma.dts";
|
||||||
item = LD06Savager;
|
item = LD06Savager;
|
||||||
ammo = LD06SavagerAmmo;
|
ammo = LD06SavagerAmmo;
|
||||||
projectile = Wp400Pellet;
|
projectile = Wp400Pellet;
|
||||||
projectileType = TracerProjectile;
|
projectileType = TracerProjectile;
|
||||||
emap = true;
|
emap = true;
|
||||||
mass = 20;
|
mass = 20;
|
||||||
|
|
||||||
casing = ShellDebris;
|
casing = ShellDebris;
|
||||||
shellExitDir = "0.5 0.0 1.0"; // L/R - F/B - T/B
|
shellExitDir = "0.5 0.0 1.0"; // L/R - F/B - T/B
|
||||||
shellExitOffset = "0.15 -0.51 -0.1"; // L/R - F/B - T/B
|
shellExitOffset = "0.15 -0.51 -0.1"; // L/R - F/B - T/B
|
||||||
shellExitVariance = 10.0;
|
shellExitVariance = 10.0;
|
||||||
shellVelocity = 4.0;
|
shellVelocity = 4.0;
|
||||||
|
|
||||||
//ClipStuff
|
//ClipStuff
|
||||||
ClipName = "LD06SavagerClip";
|
ClipName = "LD06SavagerClip";
|
||||||
ClipPickupName["LD06SavagerClip"] = "some LD06Savager Clip Boxes";
|
ClipPickupName["LD06SavagerClip"] = "some LD06Savager Clip Boxes";
|
||||||
ShowsClipInHud = 0;
|
ShowsClipInHud = 0;
|
||||||
ClipReloadTime = 5;
|
ClipReloadTime = 5;
|
||||||
ClipReturn = 10;
|
ClipReturn = 10;
|
||||||
InitialClips = 999;
|
InitialClips = 999;
|
||||||
HellClipCount = 7;
|
HellClipCount = 7;
|
||||||
//
|
//
|
||||||
HasChallenges = 1;
|
HasChallenges = 1;
|
||||||
ChallengeCt = 8;
|
ChallengeCt = 8;
|
||||||
Challenge[1] = "LD06 Killer\t50\t100\tNone";
|
Challenge[1] = "LD06 Killer\t50\t100\tNone";
|
||||||
Challenge[2] = "LD06 Expert\t100\t250\tNone";
|
Challenge[2] = "LD06 Expert\t100\t250\tNone";
|
||||||
Challenge[3] = "LD06 Master\t250\t500\tNone";
|
Challenge[3] = "LD06 Master\t250\t500\tNone";
|
||||||
Challenge[4] = "LD06 God\t500\t1000\tSilencer";
|
Challenge[4] = "LD06 God\t500\t1000\tSilencer";
|
||||||
Challenge[5] = "LD06 Bronze Commendation\t1000\t10000\tNone";
|
Challenge[5] = "LD06 Bronze Commendation\t1000\t10000\tNone";
|
||||||
Challenge[6] = "LD06 Silver Commendation\t2500\t25000\tNone";
|
Challenge[6] = "LD06 Silver Commendation\t2500\t25000\tNone";
|
||||||
Challenge[7] = "LD06 Gold Commendation\t5000\t50000\tNone";
|
Challenge[7] = "LD06 Gold Commendation\t5000\t50000\tNone";
|
||||||
Challenge[8] = "LD06 Titan Commendation\t15000\t75000\tNone";
|
Challenge[8] = "LD06 Titan Commendation\t15000\t75000\tNone";
|
||||||
Upgrade[1] = "Silencer";
|
Upgrade[1] = "Silencer";
|
||||||
GunName = "LD06 Savager";
|
GunName = "LD06 Savager";
|
||||||
|
|
||||||
|
|
||||||
MedalRequire = 1;
|
|
||||||
|
|
||||||
|
|
||||||
projectileSpread = 10.0 / 1000.0;
|
|
||||||
|
|
||||||
stateName[0] = "Activate";
|
MedalRequire = 1;
|
||||||
stateTransitionOnTimeout[0] = "ActivateReady";
|
|
||||||
stateTimeoutValue[0] = 0.3;
|
|
||||||
stateSequence[0] = "Activate";
|
|
||||||
stateSound[0] = ChaingunSwitchSound;
|
|
||||||
|
|
||||||
stateName[1] = "ActivateReady";
|
|
||||||
stateTransitionOnLoaded[1] = "Ready";
|
|
||||||
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
|
||||||
|
|
||||||
stateName[2] = "Ready";
|
projectileSpread = 10.0 / 1000.0;
|
||||||
stateTransitionOnNoAmmo[2] = "NoAmmo";
|
|
||||||
stateTransitionOnTriggerDown[2] = "CheckWet";
|
|
||||||
|
|
||||||
stateName[3] = "Fire";
|
stateName[0] = "Activate";
|
||||||
stateTransitionOnTimeout[3] = "Reload";
|
stateTransitionOnTimeout[0] = "ActivateReady";
|
||||||
stateTimeoutValue[3] = 0.0001;
|
stateTimeoutValue[0] = 0.3;
|
||||||
stateFire[3] = true;
|
stateSequence[0] = "Activate";
|
||||||
stateEjectShell[3] = true;
|
stateSound[0] = ChaingunSwitchSound;
|
||||||
stateRecoil[3] = LightRecoil;
|
|
||||||
stateAllowImageChange[3] = false;
|
|
||||||
stateScript[3] = "onFire";
|
|
||||||
stateSound[3] = SniperFireSound;
|
|
||||||
|
|
||||||
stateName[4] = "Reload";
|
stateName[1] = "ActivateReady";
|
||||||
stateTransitionOnNoAmmo[4] = "NoAmmo";
|
stateTransitionOnLoaded[1] = "Ready";
|
||||||
stateTransitionOnTimeout[4] = "Ready";
|
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
||||||
stateTimeoutValue[4] = 0.6;
|
|
||||||
stateAllowImageChange[4] = false;
|
|
||||||
stateSequence[4] = "Reload";
|
|
||||||
|
|
||||||
stateName[5] = "NoAmmo";
|
stateName[2] = "Ready";
|
||||||
stateTransitionOnAmmo[5] = "Reload";
|
stateTransitionOnNoAmmo[2] = "NoAmmo";
|
||||||
stateSequence[5] = "NoAmmo";
|
stateTransitionOnTriggerDown[2] = "CheckWet";
|
||||||
stateTransitionOnTriggerDown[5] = "DryFire";
|
|
||||||
|
|
||||||
stateName[6] = "DryFire";
|
stateName[3] = "Fire";
|
||||||
stateSound[6] = ChaingunDryFireSound;
|
stateTransitionOnTimeout[3] = "Reload";
|
||||||
stateTimeoutValue[6] = 1.0;
|
stateTimeoutValue[3] = 0.0001;
|
||||||
stateTransitionOnTimeout[6] = "NoAmmo";
|
stateFire[3] = true;
|
||||||
|
stateEjectShell[3] = true;
|
||||||
|
stateRecoil[3] = LightRecoil;
|
||||||
|
stateAllowImageChange[3] = false;
|
||||||
|
stateScript[3] = "onFire";
|
||||||
|
stateSound[3] = SniperFireSound;
|
||||||
|
|
||||||
stateName[7] = "WetFire";
|
stateName[4] = "Reload";
|
||||||
stateSound[7] = ChaingunDryFireSound;
|
stateTransitionOnNoAmmo[4] = "NoAmmo";
|
||||||
stateTimeoutValue[7] = 1.0;
|
stateTransitionOnTimeout[4] = "Ready";
|
||||||
stateTransitionOnTimeout[7] = "Ready";
|
stateTimeoutValue[4] = 0.6;
|
||||||
|
stateAllowImageChange[4] = false;
|
||||||
|
stateSequence[4] = "Reload";
|
||||||
|
|
||||||
stateName[8] = "CheckWet";
|
stateName[5] = "NoAmmo";
|
||||||
stateTransitionOnWet[8] = "WetFire";
|
stateTransitionOnAmmo[5] = "Reload";
|
||||||
stateTransitionOnNotWet[8] = "Fire";
|
stateSequence[5] = "NoAmmo";
|
||||||
|
stateTransitionOnTriggerDown[5] = "DryFire";
|
||||||
|
|
||||||
|
stateName[6] = "DryFire";
|
||||||
|
stateSound[6] = ChaingunDryFireSound;
|
||||||
|
stateTimeoutValue[6] = 1.0;
|
||||||
|
stateTransitionOnTimeout[6] = "NoAmmo";
|
||||||
|
|
||||||
|
stateName[7] = "WetFire";
|
||||||
|
stateSound[7] = ChaingunDryFireSound;
|
||||||
|
stateTimeoutValue[7] = 1.0;
|
||||||
|
stateTransitionOnTimeout[7] = "Ready";
|
||||||
|
|
||||||
|
stateName[8] = "CheckWet";
|
||||||
|
stateTransitionOnWet[8] = "WetFire";
|
||||||
|
stateTransitionOnNotWet[8] = "Fire";
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ItemData(LD06Savager)
|
datablock ItemData(LD06Savager) {
|
||||||
{
|
className = Weapon;
|
||||||
className = Weapon;
|
catagory = "Spawn Items";
|
||||||
catagory = "Spawn Items";
|
shapeFile = "weapon_plasma.dts";
|
||||||
shapeFile = "weapon_plasma.dts";
|
image = LD06SavagerImage;
|
||||||
image = LD06SavagerImage;
|
mass = 1.0;
|
||||||
mass = 1.0;
|
elasticity = 0.2;
|
||||||
elasticity = 0.2;
|
friction = 0.6;
|
||||||
friction = 0.6;
|
pickupRadius = 2;
|
||||||
pickupRadius = 2;
|
pickUpName = "a LD06Savager";
|
||||||
pickUpName = "a LD06Savager";
|
|
||||||
|
|
||||||
computeCRC = true;
|
computeCRC = true;
|
||||||
emap = true;
|
emap = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
function LD06SavagerImage::onMount(%this,%obj,%slot) {
|
function LD06SavagerImage::onMount(%this, %obj, %slot) {
|
||||||
Parent::onMount(%this, %obj, %slot);
|
Parent::onMount(%this, %obj, %slot);
|
||||||
}
|
}
|
||||||
|
|
||||||
function LD06SavagerImage::onFire(%data,%obj,%slot) {
|
function LD06SavagerImage::onFire(%data,%obj,%slot) {
|
||||||
%obj.applyKick(-250);
|
%obj.applyKick(-250);
|
||||||
%obj.decInventory(%data.ammo,1);
|
%obj.decInventory(%data.ammo,1);
|
||||||
|
|
||||||
serverPlay3D(ShotgunFireSound, %obj.getPosition());
|
|
||||||
|
|
||||||
%vector = %obj.getMuzzleVector(%slot);
|
serverPlay3D(ShotgunFireSound, %obj.getPosition());
|
||||||
%mp = %obj.getMuzzlePoint(%slot);
|
|
||||||
|
%vector = %obj.getMuzzleVector(%slot);
|
||||||
|
%mp = %obj.getMuzzlePoint(%slot);
|
||||||
|
|
||||||
for (%i=0; %i < 5; %i++) {
|
for (%i=0; %i < 5; %i++) {
|
||||||
%x = (getRandom() - 0.5) * 2 * 3.1415926 * %data.projectileSpread;
|
%x = (getRandom() - 0.5) * 2 * 3.1415926 * %data.projectileSpread;
|
||||||
%y = (getRandom() - 0.5) * 2 * 3.1415926 * %data.projectileSpread;
|
%y = (getRandom() - 0.5) * 2 * 3.1415926 * %data.projectileSpread;
|
||||||
%z = (getRandom() - 0.5) * 2 * 3.1415926 * %data.projectileSpread;
|
%z = (getRandom() - 0.5) * 2 * 3.1415926 * %data.projectileSpread;
|
||||||
%mat = MatrixCreateFromEuler(%x @ " " @ %y @ " " @ %z);
|
%mat = MatrixCreateFromEuler(%x @ " " @ %y @ " " @ %z);
|
||||||
%newvector = MatrixMulVector(%mat, %vector);
|
%newvector = MatrixMulVector(%mat, %vector);
|
||||||
|
|
||||||
%p = new (%data.projectileType)() {
|
%p = new (%data.projectileType)() {
|
||||||
dataBlock = %data.projectile;
|
dataBlock = %data.projectile;
|
||||||
initialDirection = %newvector;
|
initialDirection = %newvector;
|
||||||
initialPosition = %mp;
|
initialPosition = %mp;
|
||||||
sourceObject = %obj;
|
sourceObject = %obj;
|
||||||
damageFactor = 1;
|
damageFactor = 1;
|
||||||
sourceSlot = %slot;
|
sourceSlot = %slot;
|
||||||
};
|
};
|
||||||
%p.WeaponImageSource = %data.getName();
|
%p.WeaponImageSource = %data.getName();
|
||||||
%p.ImageSource = "LD06SavagerImage";
|
%p.ImageSource = "LD06SavagerImage";
|
||||||
}
|
}
|
||||||
if(%obj.inv[LD06SavagerAmmo] == 0) { //Added Phantom139, TWM2
|
if(%obj.inv[LD06SavagerAmmo] == 0) { //Added Phantom139, TWM2
|
||||||
AttemptReload(%data, %obj, %slot);
|
AttemptReload(%data, %obj, %slot);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,195 +3,192 @@
|
||||||
//--------------------------------------------------------------------------
|
//--------------------------------------------------------------------------
|
||||||
|
|
||||||
datablock TracerProjectileData(m93Bullet) {
|
datablock TracerProjectileData(m93Bullet) {
|
||||||
doDynamicClientHits = true;
|
doDynamicClientHits = true;
|
||||||
|
|
||||||
directDamage = 0.22; // reduced .26
|
directDamage = 0.22; // reduced .26
|
||||||
directDamageType = $DamageType::m93;
|
directDamageType = $DamageType::M93;
|
||||||
explosion = "ChaingunExplosion";
|
explosion = "ChaingunExplosion";
|
||||||
splash = ChaingunSplash;
|
splash = ChaingunSplash;
|
||||||
HeadMultiplier = 1.5;
|
HeadMultiplier = 1.5;
|
||||||
LegsMultiplier = 0.5;
|
LegsMultiplier = 0.5;
|
||||||
|
|
||||||
kickBackStrength = 5.0;
|
kickBackStrength = 5.0;
|
||||||
sound = ChaingunProjectile;
|
sound = ChaingunProjectile;
|
||||||
|
|
||||||
ImageSource = "m93Image";
|
|
||||||
|
|
||||||
//dryVelocity = 425.0;
|
ImageSource = "m93Image";
|
||||||
dryVelocity = 2000.0; // z0dd - ZOD, 8-12-02. Was 425.0
|
|
||||||
wetVelocity = 1750.0;
|
|
||||||
velInheritFactor = 0.0;
|
|
||||||
fizzleTimeMS = 3000;
|
|
||||||
lifetimeMS = 3000;
|
|
||||||
explodeOnDeath = false;
|
|
||||||
reflectOnWaterImpactAngle = 0.0;
|
|
||||||
explodeOnWaterImpact = false;
|
|
||||||
deflectionOnWaterImpact = 0.0;
|
|
||||||
fizzleUnderwaterMS = 3000;
|
|
||||||
|
|
||||||
tracerLength = 25.0;
|
//dryVelocity = 425.0;
|
||||||
tracerAlpha = false;
|
dryVelocity = 2000.0; // z0dd - ZOD, 8-12-02. Was 425.0
|
||||||
tracerMinPixels = 6;
|
wetVelocity = 1750.0;
|
||||||
tracerColor = 211.0/255.0 @ " " @ 215.0/255.0 @ " " @ 120.0/255.0 @ " 0.75";
|
velInheritFactor = 0.0;
|
||||||
|
fizzleTimeMS = 3000;
|
||||||
|
lifetimeMS = 3000;
|
||||||
|
explodeOnDeath = false;
|
||||||
|
reflectOnWaterImpactAngle = 0.0;
|
||||||
|
explodeOnWaterImpact = false;
|
||||||
|
deflectionOnWaterImpact = 0.0;
|
||||||
|
fizzleUnderwaterMS = 3000;
|
||||||
|
|
||||||
|
tracerLength = 25.0;
|
||||||
|
tracerAlpha = false;
|
||||||
|
tracerMinPixels = 6;
|
||||||
|
tracerColor = 211.0/255.0 @ " " @ 215.0/255.0 @ " " @ 120.0/255.0 @ " 0.75";
|
||||||
tracerTex[0] = "special/tracer00";
|
tracerTex[0] = "special/tracer00";
|
||||||
tracerTex[1] = "special/tracercross";
|
tracerTex[1] = "special/tracercross";
|
||||||
tracerWidth = 0.09;
|
tracerWidth = 0.09;
|
||||||
crossSize = 0.20;
|
crossSize = 0.20;
|
||||||
crossViewAng = 0.990;
|
crossViewAng = 0.990;
|
||||||
renderCross = true;
|
renderCross = true;
|
||||||
|
|
||||||
decalData[0] = ChaingunDecal1;
|
decalData[0] = ChaingunDecal1;
|
||||||
decalData[1] = ChaingunDecal2;
|
decalData[1] = ChaingunDecal2;
|
||||||
decalData[2] = ChaingunDecal3;
|
decalData[2] = ChaingunDecal3;
|
||||||
decalData[3] = ChaingunDecal4;
|
decalData[3] = ChaingunDecal4;
|
||||||
decalData[4] = ChaingunDecal5;
|
decalData[4] = ChaingunDecal5;
|
||||||
decalData[5] = ChaingunDecal6;
|
decalData[5] = ChaingunDecal6;
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ItemData(m93Ammo)
|
datablock ItemData(m93Ammo) {
|
||||||
{
|
className = Ammo;
|
||||||
className = Ammo;
|
catagory = "Ammo";
|
||||||
catagory = "Ammo";
|
shapeFile = "ammo_chaingun.dts";
|
||||||
shapeFile = "ammo_chaingun.dts";
|
mass = 1;
|
||||||
mass = 1;
|
elasticity = 0.2;
|
||||||
elasticity = 0.2;
|
friction = 0.6;
|
||||||
friction = 0.6;
|
pickupRadius = 2;
|
||||||
pickupRadius = 2;
|
|
||||||
pickUpName = "some .77mm bullets";
|
pickUpName = "some .77mm bullets";
|
||||||
|
|
||||||
computeCRC = true;
|
computeCRC = true;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ItemData(m93) {
|
datablock ItemData(m93) {
|
||||||
className = Weapon;
|
className = Weapon;
|
||||||
catagory = "Spawn Items";
|
catagory = "Spawn Items";
|
||||||
shapeFile = "weapon_energy_vehicle.dts";
|
shapeFile = "weapon_energy_vehicle.dts";
|
||||||
image = m93Image;
|
image = m93Image;
|
||||||
mass = 2;
|
mass = 2;
|
||||||
elasticity = 0.2;
|
elasticity = 0.2;
|
||||||
friction = 0.6;
|
friction = 0.6;
|
||||||
pickupRadius = 2;
|
pickupRadius = 2;
|
||||||
pickUpName = "a m93 Pistol";
|
pickUpName = "a m93 Pistol";
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ShapeBaseImageData(m93Image)
|
datablock ShapeBaseImageData(m93Image) {
|
||||||
{
|
className = WeaponImage;
|
||||||
className = WeaponImage;
|
shapeFile = "weapon_energy_vehicle.dts";
|
||||||
shapeFile = "weapon_energy_vehicle.dts";
|
item = m93;
|
||||||
item = m93;
|
offset = "0 0 0";
|
||||||
offset = "0 0 0";
|
rotation = "0 1 0 180";
|
||||||
rotation = "0 1 0 180";
|
mass = 4;
|
||||||
mass = 4;
|
|
||||||
|
|
||||||
ammo = m93Ammo;
|
ammo = m93Ammo;
|
||||||
|
|
||||||
projectile = m93bullet;
|
projectile = m93bullet;
|
||||||
projectileType = tracerProjectile;
|
projectileType = tracerProjectile;
|
||||||
projectileSpread = 6.0 / 1000.0;
|
projectileSpread = 6.0 / 1000.0;
|
||||||
|
|
||||||
//ClipStuff
|
|
||||||
ClipName = "m93Clip";
|
|
||||||
ClipPickupName["m93Clip"] = "Some .77MM Clips";
|
|
||||||
ShowsClipInHud = 0;
|
|
||||||
ClipReloadTime = 4;
|
|
||||||
ClipReturn = 15;
|
|
||||||
InitialClips = 950;
|
|
||||||
HellClipCount = 10;
|
|
||||||
//
|
|
||||||
|
|
||||||
RankRequire = $TWM2::RankRequire["ALSWP"];
|
|
||||||
PrestigeRequire = 2;
|
|
||||||
|
|
||||||
//Challenges
|
|
||||||
HasChallenges = 1;
|
|
||||||
ChallengeCt = 9;
|
|
||||||
Challenge[1] = "m93 Novice\t25\t100\tNone";
|
|
||||||
Challenge[2] = "m93 Hunter\t50\t150\tGrip";
|
|
||||||
Challenge[3] = "m93 Expert\t100\t250\tLaser";
|
|
||||||
Challenge[4] = "m93 Master\t250\t500\tSilencer";
|
|
||||||
Challenge[5] = "m93 God\t500\t1000\tHSBullets";
|
|
||||||
Challenge[6] = "m93 Bronze Commendation\t1000\t10000\tNone";
|
|
||||||
Challenge[7] = "m93 Silver Commendation\t2500\t25000\tNone";
|
|
||||||
Challenge[8] = "m93 Gold Commendation\t5000\t50000\tNone";
|
|
||||||
Challenge[9] = "m93 Titan Commendation\t15000\t75000\tNone";
|
|
||||||
Upgrade[1] = "Grip";
|
|
||||||
Upgrade[2] = "Laser";
|
|
||||||
Upgrade[3] = "Silencer";
|
|
||||||
Upgrade[4] = "HSBullets";
|
|
||||||
GunName = "M93 Pistol";
|
|
||||||
//
|
|
||||||
|
|
||||||
stateName[0] = "Activate";
|
//ClipStuff
|
||||||
stateTransitionOnTimeout[0] = "ActivateReady";
|
ClipName = "m93Clip";
|
||||||
stateTimeoutValue[0] = 0.5;
|
ClipPickupName["m93Clip"] = "Some .77MM Clips";
|
||||||
stateSequence[0] = "Activate";
|
ShowsClipInHud = 0;
|
||||||
stateSound[0] = PlasmaSwitchSound;
|
ClipReloadTime = 4;
|
||||||
|
ClipReturn = 15;
|
||||||
|
InitialClips = 950;
|
||||||
|
HellClipCount = 10;
|
||||||
|
//
|
||||||
|
|
||||||
stateName[1] = "ActivateReady";
|
RankRequire = $TWM2::RankRequire["ALSWP"];
|
||||||
stateTransitionOnLoaded[1] = "Ready";
|
PrestigeRequire = 2;
|
||||||
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
|
||||||
|
|
||||||
stateName[2] = "Ready";
|
//Challenges
|
||||||
stateTransitionOnNoAmmo[2] = "NoAmmo";
|
HasChallenges = 1;
|
||||||
stateTransitionOnTriggerDown[2] = "Fire";
|
ChallengeCt = 9;
|
||||||
|
Challenge[1] = "m93 Novice\t25\t100\tNone";
|
||||||
|
Challenge[2] = "m93 Hunter\t50\t150\tGrip";
|
||||||
|
Challenge[3] = "m93 Expert\t100\t250\tLaser";
|
||||||
|
Challenge[4] = "m93 Master\t250\t500\tSilencer";
|
||||||
|
Challenge[5] = "m93 God\t500\t1000\tHSBullets";
|
||||||
|
Challenge[6] = "m93 Bronze Commendation\t1000\t10000\tNone";
|
||||||
|
Challenge[7] = "m93 Silver Commendation\t2500\t25000\tNone";
|
||||||
|
Challenge[8] = "m93 Gold Commendation\t5000\t50000\tNone";
|
||||||
|
Challenge[9] = "m93 Titan Commendation\t15000\t75000\tNone";
|
||||||
|
Upgrade[1] = "Grip";
|
||||||
|
Upgrade[2] = "Laser";
|
||||||
|
Upgrade[3] = "Silencer";
|
||||||
|
Upgrade[4] = "HSBullets";
|
||||||
|
GunName = "M93 Pistol";
|
||||||
|
//
|
||||||
|
|
||||||
stateName[3] = "Fire";
|
stateName[0] = "Activate";
|
||||||
stateTransitionOnTimeout[3] = "Fire2";
|
stateTransitionOnTimeout[0] = "ActivateReady";
|
||||||
stateTimeoutValue[3] = 0.1;
|
stateTimeoutValue[0] = 0.5;
|
||||||
stateFire[3] = true;
|
stateSequence[0] = "Activate";
|
||||||
stateRecoil[3] = LightRecoil;
|
stateSound[0] = PlasmaSwitchSound;
|
||||||
stateAllowImageChange[3] = false;
|
|
||||||
stateScript[3] = "onFire";
|
|
||||||
stateEmitterTime[3] = 0.1;
|
|
||||||
|
|
||||||
stateName[4] = "Fire2";
|
|
||||||
stateTransitionOnTimeout[4] = "Fire3";
|
|
||||||
stateTimeoutValue[4] = 0.1;
|
|
||||||
stateFire[4] = true;
|
|
||||||
stateRecoil[4] = LightRecoil;
|
|
||||||
stateAllowImageChange[4] = false;
|
|
||||||
stateScript[4] = "onFire";
|
|
||||||
stateEmitterTime[4] = 0.1;
|
|
||||||
|
|
||||||
stateName[5] = "Fire3";
|
|
||||||
stateTransitionOnTimeout[5] = "Reload";
|
|
||||||
stateTimeoutValue[5] = 0.1;
|
|
||||||
stateFire[5] = true;
|
|
||||||
stateRecoil[5] = LightRecoil;
|
|
||||||
stateAllowImageChange[5] = false;
|
|
||||||
stateScript[5] = "onFire";
|
|
||||||
stateEmitterTime[5] = 0.1;
|
|
||||||
//stateSound[3] = PistolFireSound;
|
|
||||||
|
|
||||||
stateName[6] = "Reload";
|
stateName[1] = "ActivateReady";
|
||||||
stateTransitionOnNoAmmo[6] = "NoAmmo";
|
stateTransitionOnLoaded[1] = "Ready";
|
||||||
stateTransitionOnTimeout[6] = "Ready";
|
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
||||||
stateTimeoutValue[6] = 0.1;
|
|
||||||
stateAllowImageChange[6] = false;
|
|
||||||
stateSequence[6] = "Reload";
|
|
||||||
|
|
||||||
stateName[7] = "NoAmmo";
|
stateName[2] = "Ready";
|
||||||
stateTransitionOnAmmo[7] = "Reload";
|
stateTransitionOnNoAmmo[2] = "NoAmmo";
|
||||||
stateSequence[7] = "NoAmmo";
|
stateTransitionOnTriggerDown[2] = "Fire";
|
||||||
stateTransitionOnTriggerDown[7] = "DryFire";
|
|
||||||
|
|
||||||
stateName[8] = "DryFire";
|
stateName[3] = "Fire";
|
||||||
stateSound[8] = ChaingunDryFireSound;
|
stateTransitionOnTimeout[3] = "Fire2";
|
||||||
stateTimeoutValue[8] = 1.5;
|
stateTimeoutValue[3] = 0.1;
|
||||||
stateTransitionOnTimeout[8] = "NoAmmo";
|
stateFire[3] = true;
|
||||||
|
stateRecoil[3] = LightRecoil;
|
||||||
|
stateAllowImageChange[3] = false;
|
||||||
|
stateScript[3] = "onFire";
|
||||||
|
stateEmitterTime[3] = 0.1;
|
||||||
|
|
||||||
|
stateName[4] = "Fire2";
|
||||||
|
stateTransitionOnTimeout[4] = "Fire3";
|
||||||
|
stateTimeoutValue[4] = 0.1;
|
||||||
|
stateFire[4] = true;
|
||||||
|
stateRecoil[4] = LightRecoil;
|
||||||
|
stateAllowImageChange[4] = false;
|
||||||
|
stateScript[4] = "onFire";
|
||||||
|
stateEmitterTime[4] = 0.1;
|
||||||
|
|
||||||
|
stateName[5] = "Fire3";
|
||||||
|
stateTransitionOnTimeout[5] = "Reload";
|
||||||
|
stateTimeoutValue[5] = 0.1;
|
||||||
|
stateFire[5] = true;
|
||||||
|
stateRecoil[5] = LightRecoil;
|
||||||
|
stateAllowImageChange[5] = false;
|
||||||
|
stateScript[5] = "onFire";
|
||||||
|
stateEmitterTime[5] = 0.1;
|
||||||
|
//stateSound[3] = PistolFireSound;
|
||||||
|
|
||||||
|
stateName[6] = "Reload";
|
||||||
|
stateTransitionOnNoAmmo[6] = "NoAmmo";
|
||||||
|
stateTransitionOnTimeout[6] = "Ready";
|
||||||
|
stateTimeoutValue[6] = 0.1;
|
||||||
|
stateAllowImageChange[6] = false;
|
||||||
|
stateSequence[6] = "Reload";
|
||||||
|
|
||||||
|
stateName[7] = "NoAmmo";
|
||||||
|
stateTransitionOnAmmo[7] = "Reload";
|
||||||
|
stateSequence[7] = "NoAmmo";
|
||||||
|
stateTransitionOnTriggerDown[7] = "DryFire";
|
||||||
|
|
||||||
|
stateName[8] = "DryFire";
|
||||||
|
stateSound[8] = ChaingunDryFireSound;
|
||||||
|
stateTimeoutValue[8] = 1.5;
|
||||||
|
stateTransitionOnTimeout[8] = "NoAmmo";
|
||||||
};
|
};
|
||||||
|
|
||||||
function m93Image::onMount(%this,%obj,%slot) {
|
function m93Image::onMount(%this,%obj,%slot) {
|
||||||
Parent::onMount(%this, %obj, %slot);
|
Parent::onMount(%this, %obj, %slot);
|
||||||
}
|
}
|
||||||
|
|
||||||
function m93Image::onFire(%data, %obj, %slot) {
|
function m93Image::onFire(%data, %obj, %slot) {
|
||||||
%p = Parent::onFire(%data, %obj, %slot);
|
%p = Parent::onFire(%data, %obj, %slot);
|
||||||
if(%obj.client.UpgradeOn("Silencer", %data.getName())) {
|
if(%obj.client.UpgradeOn("Silencer", %data.getName())) {
|
||||||
//zero sound :p
|
//zero sound :p
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
ServerPlay3d(PistolFireSound, %obj.getPosition());
|
ServerPlay3d(PistolFireSound, %obj.getPosition());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,247 +1,245 @@
|
||||||
// Pulse Phaser Weapon
|
// Pulse Phaser Weapon
|
||||||
datablock AudioProfile(PPWFireSound)
|
datablock AudioProfile(PPWFireSound) {
|
||||||
{
|
filename = "fx/powered/turret_outdoor_fire.wav";
|
||||||
filename = "fx/powered/turret_outdoor_fire.wav";
|
description = AudioDefault3d;
|
||||||
description = AudioDefault3d;
|
preload = true;
|
||||||
preload = true;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock LinearFlareProjectileData(phaserBolt) {
|
datablock LinearFlareProjectileData(phaserBolt) {
|
||||||
directDamage = 0.2; //reduced 0.45
|
directDamage = 0.26;
|
||||||
directDamageType = $DamageType::Phaser;
|
directDamageType = $DamageType::ES77PulsePhaser;
|
||||||
explosion = "BlasterExplosion";
|
explosion = "BlasterExplosion";
|
||||||
kickBackStrength = 0.0;
|
kickBackStrength = 0.0;
|
||||||
|
|
||||||
dryVelocity = 120.0;
|
dryVelocity = 160.0;
|
||||||
wetVelocity = 40.0;
|
wetVelocity = 40.0;
|
||||||
velInheritFactor = 0.5;
|
velInheritFactor = 0.5;
|
||||||
fizzleTimeMS = 2000;
|
fizzleTimeMS = 1300;
|
||||||
lifetimeMS = 3000;
|
lifetimeMS = 1500;
|
||||||
explodeOnDeath = false;
|
explodeOnDeath = false;
|
||||||
reflectOnWaterImpactAngle = 0.0;
|
reflectOnWaterImpactAngle = 0.0;
|
||||||
explodeOnWaterImpact = false;
|
explodeOnWaterImpact = false;
|
||||||
deflectionOnWaterImpact = 0.0;
|
deflectionOnWaterImpact = 0.0;
|
||||||
fizzleUnderwaterMS = 3000;
|
fizzleUnderwaterMS = 3000;
|
||||||
|
|
||||||
ImageSource = "PulsePhaserImage";
|
|
||||||
|
|
||||||
numFlares = 20;
|
ImageSource = "PulsePhaserImage";
|
||||||
size = 0.10;
|
|
||||||
flareColor = "0 1 0";
|
|
||||||
flareModTexture = "flaremod";
|
|
||||||
flareBaseTexture = "flarebase";
|
|
||||||
|
|
||||||
sound = BlasterProjectileSound;
|
numFlares = 20;
|
||||||
|
size = 0.10;
|
||||||
|
flareColor = "0 1 0";
|
||||||
|
flareModTexture = "flaremod";
|
||||||
|
flareBaseTexture = "flarebase";
|
||||||
|
|
||||||
hasLight = true;
|
sound = BlasterProjectileSound;
|
||||||
lightRadius = 3.0;
|
|
||||||
lightColor = "1 1 1";
|
hasLight = true;
|
||||||
|
lightRadius = 3.0;
|
||||||
|
lightColor = "1 1 1";
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock LinearFlareProjectileData(TrevorPhaserBolt) {
|
datablock LinearFlareProjectileData(TrevorPhaserBolt) {
|
||||||
directDamage = 0.21; //reduced .485
|
directDamage = 0.3;
|
||||||
directDamageType = $DamageType::Phaser;
|
directDamageType = $DamageType::ES77PulsePhaser;
|
||||||
explosion = "BlasterExplosion";
|
explosion = "BlasterExplosion";
|
||||||
kickBackStrength = 0.0;
|
kickBackStrength = 0.0;
|
||||||
|
|
||||||
dryVelocity = 120.0;
|
dryVelocity = 160.0;
|
||||||
wetVelocity = 40.0;
|
wetVelocity = 40.0;
|
||||||
velInheritFactor = 0.5;
|
velInheritFactor = 0.5;
|
||||||
fizzleTimeMS = 2000;
|
fizzleTimeMS = 1300;
|
||||||
lifetimeMS = 3000;
|
lifetimeMS = 1500;
|
||||||
explodeOnDeath = false;
|
explodeOnDeath = false;
|
||||||
reflectOnWaterImpactAngle = 0.0;
|
reflectOnWaterImpactAngle = 0.0;
|
||||||
explodeOnWaterImpact = false;
|
explodeOnWaterImpact = false;
|
||||||
deflectionOnWaterImpact = 0.0;
|
deflectionOnWaterImpact = 0.0;
|
||||||
fizzleUnderwaterMS = 3000;
|
fizzleUnderwaterMS = 3000;
|
||||||
|
|
||||||
ImageSource = "PulsePhaserImage";
|
ImageSource = "PulsePhaserImage";
|
||||||
|
|
||||||
numFlares = 20;
|
numFlares = 20;
|
||||||
size = 0.10;
|
size = 0.10;
|
||||||
flareColor = "0.5 0.1 0.9";
|
flareColor = "0.5 0.1 0.9";
|
||||||
flareModTexture = "flaremod";
|
flareModTexture = "flaremod";
|
||||||
flareBaseTexture = "flarebase";
|
flareBaseTexture = "flarebase";
|
||||||
|
|
||||||
sound = BlasterProjectileSound;
|
sound = BlasterProjectileSound;
|
||||||
|
|
||||||
hasLight = true;
|
hasLight = true;
|
||||||
lightRadius = 3.0;
|
lightRadius = 3.0;
|
||||||
lightColor = "1 1 1";
|
lightColor = "1 1 1";
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ShapeBaseImageData(PulsePhaserImage) {
|
datablock ShapeBaseImageData(PulsePhaserImage) {
|
||||||
className = WeaponImage;
|
className = WeaponImage;
|
||||||
shapeFile = "weapon_energy.dts";
|
shapeFile = "weapon_energy.dts";
|
||||||
item = PulsePhaser;
|
item = PulsePhaser;
|
||||||
projectile = phaserBolt;
|
projectile = phaserBolt;
|
||||||
projectileType = LinearFlareProjectile;
|
projectileType = LinearFlareProjectile;
|
||||||
|
|
||||||
HasChallenges = 1;
|
|
||||||
ChallengeCt = 10;
|
|
||||||
Challenge[1] = "Phaser Killer\t50\t100\tNone";
|
|
||||||
Challenge[2] = "Phaser Hunter\t150\t250\tNone";
|
|
||||||
Challenge[3] = "Phaser Expert\t250\t500\tLaser";
|
|
||||||
Challenge[4] = "Phaser Master\t500\t1000\tTriple Burst";
|
|
||||||
Challenge[5] = "Phaser God\t1000\t2000\tShotgun";
|
|
||||||
Challenge[6] = "Phaser Legend\t1500\t5000\tPhaser Blades";
|
|
||||||
Challenge[7] = "Phaser Bronze Commendation\t3000\t10000\tNone";
|
|
||||||
Challenge[8] = "Phaser Silver Commendation\t6000\t25000\tNone";
|
|
||||||
Challenge[9] = "Phaser Gold Commendation\t12500\t50000\tNone";
|
|
||||||
Challenge[10] = "Phaser Titan Commendation\t35000\t75000\tNone";
|
|
||||||
Upgrade[1] = "Laser";
|
|
||||||
Upgrade[2] = "Triple Burst";
|
|
||||||
Upgrade[3] = "Shotgun";
|
|
||||||
Upgrade[4] = "Phaser Blades";
|
|
||||||
GunName = "ES-77 Pulse Phaser";
|
|
||||||
|
|
||||||
RankRequire = $TWM2::RankRequire["PulsePhaser"];
|
HasChallenges = 1;
|
||||||
|
ChallengeCt = 10;
|
||||||
|
Challenge[1] = "Phaser Killer\t50\t100\tNone";
|
||||||
|
Challenge[2] = "Phaser Hunter\t150\t250\tNone";
|
||||||
|
Challenge[3] = "Phaser Expert\t250\t500\tLaser";
|
||||||
|
Challenge[4] = "Phaser Master\t500\t1000\tTriple Burst";
|
||||||
|
Challenge[5] = "Phaser God\t1000\t2000\tShotgun";
|
||||||
|
Challenge[6] = "Phaser Legend\t1500\t5000\tPhaser Blades";
|
||||||
|
Challenge[7] = "Phaser Bronze Commendation\t3000\t10000\tNone";
|
||||||
|
Challenge[8] = "Phaser Silver Commendation\t6000\t25000\tNone";
|
||||||
|
Challenge[9] = "Phaser Gold Commendation\t12500\t50000\tNone";
|
||||||
|
Challenge[10] = "Phaser Titan Commendation\t35000\t75000\tNone";
|
||||||
|
Upgrade[1] = "Laser";
|
||||||
|
Upgrade[2] = "Triple Burst";
|
||||||
|
Upgrade[3] = "Shotgun";
|
||||||
|
Upgrade[4] = "Phaser Blades";
|
||||||
|
GunName = "ES-77 Pulse Phaser";
|
||||||
|
|
||||||
usesEnergy = true;
|
RankRequire = $TWM2::RankRequire["PulsePhaser"];
|
||||||
fireEnergy = 4;
|
|
||||||
minEnergy = 4;
|
|
||||||
|
|
||||||
stateName[0] = "Activate";
|
usesEnergy = true;
|
||||||
stateTransitionOnTimeout[0] = "ActivateReady";
|
fireEnergy = 4;
|
||||||
stateTimeoutValue[0] = 0.5;
|
minEnergy = 4;
|
||||||
stateSequence[0] = "Activate";
|
|
||||||
stateSound[0] = BlasterSwitchSound;
|
|
||||||
|
|
||||||
stateName[1] = "ActivateReady";
|
stateName[0] = "Activate";
|
||||||
stateTransitionOnLoaded[1] = "Ready";
|
stateTransitionOnTimeout[0] = "ActivateReady";
|
||||||
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
stateTimeoutValue[0] = 0.5;
|
||||||
|
stateSequence[0] = "Activate";
|
||||||
|
stateSound[0] = BlasterSwitchSound;
|
||||||
|
|
||||||
stateName[2] = "Ready";
|
stateName[1] = "ActivateReady";
|
||||||
stateTransitionOnNoAmmo[2] = "NoAmmo";
|
stateTransitionOnLoaded[1] = "Ready";
|
||||||
stateTransitionOnTriggerDown[2] = "Fire";
|
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
||||||
|
|
||||||
stateName[3] = "Fire";
|
stateName[2] = "Ready";
|
||||||
stateTransitionOnTimeout[3] = "Reload";
|
stateTransitionOnNoAmmo[2] = "NoAmmo";
|
||||||
stateTimeoutValue[3] = 0.3;
|
stateTransitionOnTriggerDown[2] = "Fire";
|
||||||
stateFire[3] = true;
|
|
||||||
stateRecoil[3] = NoRecoil;
|
|
||||||
stateAllowImageChange[3] = false;
|
|
||||||
stateSequence[3] = "Fire";
|
|
||||||
stateSound[3] = PPWFireSound;
|
|
||||||
stateScript[3] = "onFire";
|
|
||||||
|
|
||||||
stateName[4] = "Reload";
|
stateName[3] = "Fire";
|
||||||
stateTransitionOnNoAmmo[4] = "NoAmmo";
|
stateTransitionOnTimeout[3] = "Reload";
|
||||||
stateTransitionOnTimeout[4] = "Ready";
|
stateTimeoutValue[3] = 0.3;
|
||||||
stateAllowImageChange[4] = false;
|
stateFire[3] = true;
|
||||||
stateSequence[4] = "Reload";
|
stateRecoil[3] = NoRecoil;
|
||||||
|
stateAllowImageChange[3] = false;
|
||||||
|
stateSequence[3] = "Fire";
|
||||||
|
stateSound[3] = PPWFireSound;
|
||||||
|
stateScript[3] = "onFire";
|
||||||
|
|
||||||
stateName[5] = "NoAmmo";
|
stateName[4] = "Reload";
|
||||||
stateTransitionOnAmmo[5] = "Reload";
|
stateTransitionOnNoAmmo[4] = "NoAmmo";
|
||||||
stateSequence[5] = "NoAmmo";
|
stateTransitionOnTimeout[4] = "Ready";
|
||||||
stateTransitionOnTriggerDown[5] = "DryFire";
|
stateAllowImageChange[4] = false;
|
||||||
|
stateSequence[4] = "Reload";
|
||||||
|
|
||||||
stateName[6] = "DryFire";
|
stateName[5] = "NoAmmo";
|
||||||
stateTimeoutValue[6] = 0.3;
|
stateTransitionOnAmmo[5] = "Reload";
|
||||||
stateSound[6] = BlasterDryFireSound;
|
stateSequence[5] = "NoAmmo";
|
||||||
stateTransitionOnTimeout[6] = "Ready";
|
stateTransitionOnTriggerDown[5] = "DryFire";
|
||||||
|
|
||||||
|
stateName[6] = "DryFire";
|
||||||
|
stateTimeoutValue[6] = 0.3;
|
||||||
|
stateSound[6] = BlasterDryFireSound;
|
||||||
|
stateTransitionOnTimeout[6] = "Ready";
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ItemData(PulsePhaser) {
|
datablock ItemData(PulsePhaser) {
|
||||||
className = Weapon;
|
className = Weapon;
|
||||||
catagory = "Spawn Items";
|
catagory = "Spawn Items";
|
||||||
shapeFile = "weapon_energy.dts";
|
shapeFile = "weapon_energy.dts";
|
||||||
image = PulsePhaserImage;
|
image = PulsePhaserImage;
|
||||||
mass = 1;
|
mass = 1;
|
||||||
elasticity = 0.2;
|
elasticity = 0.2;
|
||||||
friction = 0.6;
|
friction = 0.6;
|
||||||
pickupRadius = 2;
|
pickupRadius = 2;
|
||||||
pickUpName = "a Pulse Phaser";
|
pickUpName = "a Pulse Phaser";
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ShapeBaseImageData(Phaser2Image) : PulsePhaserImage {
|
datablock ShapeBaseImageData(Phaser2Image) : PulsePhaserImage {
|
||||||
shapeFile = "weapon_ELF.dts";
|
shapeFile = "weapon_ELF.dts";
|
||||||
offset = "0 0.3 0.2";
|
offset = "0 0.3 0.2";
|
||||||
rotation = "0 1 0 180";
|
rotation = "0 1 0 180";
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ShapeBaseImageData(Phaser3Image) : PulsePhaserImage {
|
datablock ShapeBaseImageData(Phaser3Image) : PulsePhaserImage {
|
||||||
shapeFile = "weapon_ELF.dts";
|
shapeFile = "weapon_ELF.dts";
|
||||||
offset = "0 .5 0";
|
offset = "0 .5 0";
|
||||||
};
|
};
|
||||||
|
|
||||||
function PulsePhaserImage::onMount(%this, %obj, %slot) {
|
function PulsePhaserImage::onMount(%this, %obj, %slot) {
|
||||||
Parent::onMount(%this, %obj, %slot);
|
Parent::onMount(%this, %obj, %slot);
|
||||||
if(%obj.client.UpgradeOn("Phaser Blades", %this.getName())) {
|
if(%obj.client.UpgradeOn("Phaser Blades", %this.getName())) {
|
||||||
%obj.mountImage(Phaser2Image, 5);
|
%obj.mountImage(Phaser2Image, 5);
|
||||||
%obj.mountImage(Phaser3Image, 6);
|
%obj.mountImage(Phaser3Image, 6);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function PulsePhaserImage::onUnmount(%this,%obj,%slot) {
|
function PulsePhaserImage::onUnmount(%this,%obj,%slot) {
|
||||||
%obj.unmountImage(5);
|
%obj.unmountImage(5);
|
||||||
%obj.unmountImage(6);
|
%obj.unmountImage(6);
|
||||||
Parent::onUnmount(%this, %obj, %slot);
|
Parent::onUnmount(%this, %obj, %slot);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function PulsePhaserImage::onFire(%data,%obj,%slot) {
|
function PulsePhaserImage::onFire(%data,%obj,%slot) {
|
||||||
if(%obj.cannotFire) {
|
if(%obj.cannotFire) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
%vector = %obj.getMuzzleVector(%slot);
|
%vector = %obj.getMuzzleVector(%slot);
|
||||||
%mp = %obj.getMuzzlePoint(%slot);
|
%mp = %obj.getMuzzlePoint(%slot);
|
||||||
if(%obj.client.UpgradeOn("Triple Burst", %data.getName())) {
|
if(%obj.client.UpgradeOn("Triple Burst", %data.getName())) {
|
||||||
%p1 = Parent::OnFire(%data, %obj, %slot);
|
%p1 = Parent::OnFire(%data, %obj, %slot);
|
||||||
|
|
||||||
%p2 = Schedule(100, 0, "spawnprojectile", %data.Projectile, %data.ProjectileType,
|
%p2 = Schedule(100, 0, "spawnprojectile", %data.Projectile, %data.ProjectileType,
|
||||||
vectorAdd(%obj.getPosition(), "-.45 0 1.4"), %vector, %obj);
|
vectorAdd(%obj.getPosition(), "-.45 0 1.4"), %vector, %obj);
|
||||||
%p2.WeaponImageSource = "PulsePhaserImage";
|
%p2.WeaponImageSource = "PulsePhaserImage";
|
||||||
schedule(100, 0, "ServerPlay3D", "PPWFireSound", %obj.getPosition());
|
schedule(100, 0, "ServerPlay3D", "PPWFireSound", %obj.getPosition());
|
||||||
|
|
||||||
%p3 = Schedule(250, 0, "spawnprojectile", %data.Projectile, %data.ProjectileType,
|
%p3 = Schedule(250, 0, "spawnprojectile", %data.Projectile, %data.ProjectileType,
|
||||||
vectorAdd(%obj.getPosition(), "-.45 0 1.4"), %vector, %obj);
|
vectorAdd(%obj.getPosition(), "-.45 0 1.4"), %vector, %obj);
|
||||||
%p3.WeaponImageSource = "PulsePhaserImage";
|
%p3.WeaponImageSource = "PulsePhaserImage";
|
||||||
schedule(250, 0, "ServerPlay3D", "PPWFireSound", %obj.getPosition());
|
schedule(250, 0, "ServerPlay3D", "PPWFireSound", %obj.getPosition());
|
||||||
|
|
||||||
ResetFireRestrict(%obj, 1);
|
|
||||||
schedule(1350, 0, "ResetFireRestrict", %obj, 0);
|
|
||||||
}
|
|
||||||
else if(%obj.client.UpgradeOn("Shotgun", %data.getName())) {
|
|
||||||
for (%i=0; %i < 3; %i++) {
|
|
||||||
%x = (getRandom() - 0.5) * 2 * 3.1415926 * (11/1000);
|
|
||||||
%y = (getRandom() - 0.5) * 2 * 3.1415926 * (11/1000);
|
|
||||||
%z = (getRandom() - 0.5) * 2 * 3.1415926 * (11/1000);
|
|
||||||
%mat = MatrixCreateFromEuler(%x @ " " @ %y @ " " @ %z);
|
|
||||||
%newvector = MatrixMulVector(%mat, %vector);
|
|
||||||
|
|
||||||
%p = new (%data.projectileType)() {
|
ResetFireRestrict(%obj, 1);
|
||||||
dataBlock = %data.projectile;
|
schedule(1350, 0, "ResetFireRestrict", %obj, 0);
|
||||||
initialDirection = %newvector;
|
}
|
||||||
initialPosition = %mp;
|
else if(%obj.client.UpgradeOn("Shotgun", %data.getName())) {
|
||||||
sourceObject = %obj;
|
for (%i=0; %i < 3; %i++) {
|
||||||
damageFactor = 1;
|
%x = (getRandom() - 0.5) * 2 * 3.1415926 * (11/1000);
|
||||||
sourceSlot = %slot;
|
%y = (getRandom() - 0.5) * 2 * 3.1415926 * (11/1000);
|
||||||
};
|
%z = (getRandom() - 0.5) * 2 * 3.1415926 * (11/1000);
|
||||||
|
%mat = MatrixCreateFromEuler(%x @ " " @ %y @ " " @ %z);
|
||||||
|
%newvector = MatrixMulVector(%mat, %vector);
|
||||||
|
|
||||||
%p.WeaponImageSource = "PulsePhaserImage";
|
%p = new (%data.projectileType)() {
|
||||||
}
|
dataBlock = %data.projectile;
|
||||||
ResetFireRestrict(%obj, 1);
|
initialDirection = %newvector;
|
||||||
schedule(1200, 0, "ResetFireRestrict", %obj, 0);
|
initialPosition = %mp;
|
||||||
}
|
sourceObject = %obj;
|
||||||
else if(%obj.client.UpgradeOn("Phaser Blades", %data.getName())) {
|
damageFactor = 1;
|
||||||
serverPlay3D("BomberTurretFireSound", %obj.getPosition());
|
sourceSlot = %slot;
|
||||||
%p = new (%data.projectileType)() {
|
};
|
||||||
dataBlock = TrevorPhaserBolt;
|
|
||||||
initialDirection = %vector;
|
|
||||||
initialPosition = %mp;
|
|
||||||
sourceObject = %obj;
|
|
||||||
damageFactor = 1;
|
|
||||||
sourceSlot = %slot;
|
|
||||||
};
|
|
||||||
|
|
||||||
%p.WeaponImageSource = "PulsePhaserImage";
|
%p.WeaponImageSource = "PulsePhaserImage";
|
||||||
}
|
}
|
||||||
else {
|
ResetFireRestrict(%obj, 1);
|
||||||
%p = Parent::OnFire(%data,%obj,%slot);
|
schedule(1200, 0, "ResetFireRestrict", %obj, 0);
|
||||||
}
|
}
|
||||||
|
else if(%obj.client.UpgradeOn("Phaser Blades", %data.getName())) {
|
||||||
|
serverPlay3D("BomberTurretFireSound", %obj.getPosition());
|
||||||
|
%p = new (%data.projectileType)() {
|
||||||
|
dataBlock = TrevorPhaserBolt;
|
||||||
|
initialDirection = %vector;
|
||||||
|
initialPosition = %mp;
|
||||||
|
sourceObject = %obj;
|
||||||
|
damageFactor = 1;
|
||||||
|
sourceSlot = %slot;
|
||||||
|
};
|
||||||
|
%p.WeaponImageSource = "PulsePhaserImage";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
%p = Parent::OnFire(%data,%obj,%slot);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function ResetFireRestrict(%plyr, %onOff) {
|
function ResetFireRestrict(%plyr, %onOff) {
|
||||||
%plyr.cannotFire = %onOff;
|
%plyr.cannotFire = %onOff;
|
||||||
}
|
}
|
||||||
|
|
@ -1,210 +1,206 @@
|
||||||
datablock AudioProfile(ALSWPFireSound) {
|
datablock AudioProfile(ALSWPFireSound) {
|
||||||
filename = "fx/weapons/cg_hard1.wav";
|
filename = "fx/weapons/cg_hard1.wav";
|
||||||
description = AudioDefault3d;
|
description = AudioDefault3d;
|
||||||
preload = true;
|
preload = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock TracerProjectileData(ALSWPBullet){
|
datablock TracerProjectileData(ALSWPBullet){
|
||||||
doDynamicClientHits = true;
|
doDynamicClientHits = true;
|
||||||
|
|
||||||
directDamage = 0.5;
|
directDamage = 0.5;
|
||||||
directDamageType = $DamageType::ALSWP;
|
directDamageType = $DamageType::ALSWP;
|
||||||
explosion = "ChaingunExplosion";
|
explosion = "ChaingunExplosion";
|
||||||
splash = ChaingunSplash;
|
splash = ChaingunSplash;
|
||||||
HeadMultiplier = 1.5;
|
HeadMultiplier = 1.5;
|
||||||
LegsMultiplier = 0.35;
|
LegsMultiplier = 0.35;
|
||||||
|
|
||||||
HeadShotKill = 0;
|
HeadShotKill = 0;
|
||||||
|
|
||||||
ImageSource = "ALSWPSniperRifleImage";
|
|
||||||
|
|
||||||
kickBackStrength = 15.0;
|
ImageSource = "ALSWPSniperRifleImage";
|
||||||
sound = ChaingunProjectile;
|
|
||||||
|
|
||||||
dryVelocity = 3000.0;
|
kickBackStrength = 15.0;
|
||||||
wetVelocity = 2000.0;
|
sound = ChaingunProjectile;
|
||||||
velInheritFactor = 1.0;
|
|
||||||
fizzleTimeMS = 1000;
|
|
||||||
lifetimeMS = 1000;
|
|
||||||
explodeOnDeath = false;
|
|
||||||
reflectOnWaterImpactAngle = 0.0;
|
|
||||||
explodeOnWaterImpact = false;
|
|
||||||
deflectionOnWaterImpact = 0.0;
|
|
||||||
fizzleUnderwaterMS = 3000;
|
|
||||||
|
|
||||||
tracerLength = 20.0;
|
dryVelocity = 3000.0;
|
||||||
tracerAlpha = false;
|
wetVelocity = 2000.0;
|
||||||
tracerMinPixels = 6;
|
velInheritFactor = 1.0;
|
||||||
tracerColor = 211.0/255.0 @ " " @ 215.0/255.0 @ " " @ 120.0/255.0 @ " 0.75";
|
fizzleTimeMS = 1000;
|
||||||
|
lifetimeMS = 1000;
|
||||||
|
explodeOnDeath = false;
|
||||||
|
reflectOnWaterImpactAngle = 0.0;
|
||||||
|
explodeOnWaterImpact = false;
|
||||||
|
deflectionOnWaterImpact = 0.0;
|
||||||
|
fizzleUnderwaterMS = 3000;
|
||||||
|
|
||||||
|
tracerLength = 20.0;
|
||||||
|
tracerAlpha = false;
|
||||||
|
tracerMinPixels = 6;
|
||||||
|
tracerColor = 211.0/255.0 @ " " @ 215.0/255.0 @ " " @ 120.0/255.0 @ " 0.75";
|
||||||
tracerTex[0] = "special/tracer00";
|
tracerTex[0] = "special/tracer00";
|
||||||
tracerTex[1] = "special/tracercross";
|
tracerTex[1] = "special/tracercross";
|
||||||
tracerWidth = 0.09;
|
tracerWidth = 0.09;
|
||||||
crossSize = 0.20;
|
crossSize = 0.20;
|
||||||
crossViewAng = 0.990;
|
crossViewAng = 0.990;
|
||||||
renderCross = true;
|
renderCross = true;
|
||||||
|
|
||||||
decalData[0] = ChaingunDecal1;
|
decalData[0] = ChaingunDecal1;
|
||||||
decalData[1] = ChaingunDecal2;
|
decalData[1] = ChaingunDecal2;
|
||||||
decalData[2] = ChaingunDecal3;
|
decalData[2] = ChaingunDecal3;
|
||||||
decalData[3] = ChaingunDecal4;
|
decalData[3] = ChaingunDecal4;
|
||||||
decalData[4] = ChaingunDecal5;
|
decalData[4] = ChaingunDecal5;
|
||||||
decalData[5] = ChaingunDecal6;
|
decalData[5] = ChaingunDecal6;
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ItemData(ALSWPSniperRifleAmmo)
|
datablock ItemData(ALSWPSniperRifleAmmo) {
|
||||||
{
|
className = Ammo;
|
||||||
className = Ammo;
|
catagory = "Ammo";
|
||||||
catagory = "Ammo";
|
shapeFile = "ammo_chaingun.dts";
|
||||||
shapeFile = "ammo_chaingun.dts";
|
mass = 1;
|
||||||
mass = 1;
|
elasticity = 0.2;
|
||||||
elasticity = 0.2;
|
friction = 0.6;
|
||||||
friction = 0.6;
|
pickupRadius = 2;
|
||||||
pickupRadius = 2;
|
|
||||||
pickUpName = "Some ALSWP Sniper Rifle Ammo";
|
pickUpName = "Some ALSWP Sniper Rifle Ammo";
|
||||||
|
|
||||||
computeCRC = true;
|
computeCRC = true;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
//--------------------------------------------------------------------------
|
//--------------------------------------------------------------------------
|
||||||
// Weapon
|
// Weapon
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
datablock ShapeBaseImageData(ALSWPSniperRifleImage) {
|
datablock ShapeBaseImageData(ALSWPSniperRifleImage) {
|
||||||
|
className = WeaponImage;
|
||||||
|
shapeFile = "weapon_sniper.dts";
|
||||||
|
mass = 10;
|
||||||
|
item = ALSWPSniperRifle;
|
||||||
|
ammo = ALSWPSniperRifleAmmo;
|
||||||
|
projectile = ALSWPBullet;
|
||||||
|
projectileType = TracerProjectile;
|
||||||
|
emap = true;
|
||||||
|
|
||||||
className = WeaponImage;
|
armThread = looksn;
|
||||||
shapeFile = "weapon_sniper.dts";
|
|
||||||
mass = 10;
|
|
||||||
item = ALSWPSniperRifle;
|
|
||||||
ammo = ALSWPSniperRifleAmmo;
|
|
||||||
projectile = ALSWPBullet;
|
|
||||||
projectileType = TracerProjectile;
|
|
||||||
emap = true;
|
|
||||||
|
|
||||||
armThread = looksn;
|
//ClipStuff
|
||||||
|
ClipName = "ALSWPClip";
|
||||||
|
ClipPickupName["ALSWPClip"] = "A Few Boxes Of ALSWP Sniper Bullets";
|
||||||
|
ShowsClipInHud = 1;
|
||||||
|
ClipReloadTime = 5;
|
||||||
|
ClipReturn = 10;
|
||||||
|
InitialClips = 6;
|
||||||
|
//
|
||||||
|
//Challenges
|
||||||
|
HasChallenges = 1;
|
||||||
|
ChallengeCt = 8;
|
||||||
|
Challenge[1] = "ALSWP Hunter\t100\t150\tNone";
|
||||||
|
Challenge[2] = "ALSWP Expert\t200\t250\tNone";
|
||||||
|
Challenge[3] = "ALSWP Master\t500\t500\tLaser";
|
||||||
|
Challenge[4] = "ALSWP God\t1000\t1000\tSilencer";
|
||||||
|
Challenge[5] = "ALSWP Bronze Commendation\t2500\t10000\tNone";
|
||||||
|
Challenge[6] = "ALSWP Silver Commendation\t5000\t25000\tNone";
|
||||||
|
Challenge[7] = "ALSWP Gold Commendation\t10000\t50000\tNone";
|
||||||
|
Challenge[8] = "ALSWP Titan Commendation\t25000\t75000\tNone";
|
||||||
|
Upgrade[1] = "Laser";
|
||||||
|
Upgrade[2] = "Silencer";
|
||||||
|
GunName = "ALSWP Sniper Rifle";
|
||||||
|
//
|
||||||
|
|
||||||
//ClipStuff
|
RankRequire = $TWM2::RankRequire["ALSWP"];
|
||||||
ClipName = "ALSWPClip";
|
|
||||||
ClipPickupName["ALSWPClip"] = "A Few Boxes Of ALSWP Sniper Bullets";
|
|
||||||
ShowsClipInHud = 1;
|
|
||||||
ClipReloadTime = 5;
|
|
||||||
ClipReturn = 10;
|
|
||||||
InitialClips = 6;
|
|
||||||
//
|
|
||||||
//Challenges
|
|
||||||
HasChallenges = 1;
|
|
||||||
ChallengeCt = 8;
|
|
||||||
Challenge[1] = "ALSWP Hunter\t100\t150\tNone";
|
|
||||||
Challenge[2] = "ALSWP Expert\t200\t250\tNone";
|
|
||||||
Challenge[3] = "ALSWP Master\t500\t500\tLaser";
|
|
||||||
Challenge[4] = "ALSWP God\t1000\t1000\tSilencer";
|
|
||||||
Challenge[5] = "ALSWP Bronze Commendation\t2500\t10000\tNone";
|
|
||||||
Challenge[6] = "ALSWP Silver Commendation\t5000\t25000\tNone";
|
|
||||||
Challenge[7] = "ALSWP Gold Commendation\t10000\t50000\tNone";
|
|
||||||
Challenge[8] = "ALSWP Titan Commendation\t25000\t75000\tNone";
|
|
||||||
Upgrade[1] = "Laser";
|
|
||||||
Upgrade[2] = "Silencer";
|
|
||||||
GunName = "ALSWP Sniper Rifle";
|
|
||||||
//
|
|
||||||
|
|
||||||
RankRequire = $TWM2::RankRequire["ALSWP"];
|
casing = ShellDebris;
|
||||||
|
shellExitDir = "1.0 0.3 1.0";
|
||||||
casing = ShellDebris;
|
shellExitOffset = "0.15 -0.56 -0.1";
|
||||||
shellExitDir = "1.0 0.3 1.0";
|
shellExitVariance = 15.0;
|
||||||
shellExitOffset = "0.15 -0.56 -0.1";
|
shellVelocity = 3.0;
|
||||||
shellExitVariance = 15.0;
|
|
||||||
shellVelocity = 3.0;
|
|
||||||
|
|
||||||
|
|
||||||
stateName[0] = "Activate";
|
stateName[0] = "Activate";
|
||||||
stateTransitionOnTimeout[0] = "ActivateReady";
|
stateTransitionOnTimeout[0] = "ActivateReady";
|
||||||
stateTimeoutValue[0] = 0.5;
|
stateTimeoutValue[0] = 0.5;
|
||||||
stateSequence[0] = "Activate";
|
stateSequence[0] = "Activate";
|
||||||
stateSound[0] = ChaingunSwitchSound;
|
stateSound[0] = ChaingunSwitchSound;
|
||||||
|
|
||||||
stateName[1] = "ActivateReady";
|
stateName[1] = "ActivateReady";
|
||||||
stateTransitionOnLoaded[1] = "Ready";
|
stateTransitionOnLoaded[1] = "Ready";
|
||||||
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
||||||
|
|
||||||
stateName[2] = "Ready";
|
stateName[2] = "Ready";
|
||||||
stateTransitionOnNoAmmo[2] = "NoAmmo";
|
stateTransitionOnNoAmmo[2] = "NoAmmo";
|
||||||
stateTransitionOnTriggerDown[2] = "CheckWet";
|
stateTransitionOnTriggerDown[2] = "CheckWet";
|
||||||
|
|
||||||
stateName[3] = "Fire";
|
stateName[3] = "Fire";
|
||||||
stateTransitionOnTimeout[3] = "Reload";
|
stateTransitionOnTimeout[3] = "Reload";
|
||||||
stateTimeoutValue[3] = 0.01;
|
stateTimeoutValue[3] = 0.01;
|
||||||
stateFire[3] = true;
|
stateFire[3] = true;
|
||||||
stateRecoil[3] = LightRecoil;
|
stateRecoil[3] = LightRecoil;
|
||||||
stateAllowImageChange[3] = false;
|
stateAllowImageChange[3] = false;
|
||||||
stateScript[3] = "onFire";
|
stateScript[3] = "onFire";
|
||||||
//stateSound[3] = "ALSWPFireSound";
|
//stateSound[3] = "ALSWPFireSound";
|
||||||
|
|
||||||
stateName[4] = "Reload";
|
stateName[4] = "Reload";
|
||||||
stateTransitionOnNoAmmo[4] = "NoAmmo";
|
stateTransitionOnNoAmmo[4] = "NoAmmo";
|
||||||
stateTransitionOnTimeout[4] = "Ready";
|
stateTransitionOnTimeout[4] = "Ready";
|
||||||
stateTimeoutValue[4] = 0.6;
|
stateTimeoutValue[4] = 0.6;
|
||||||
stateAllowImageChange[4] = false;
|
stateAllowImageChange[4] = false;
|
||||||
stateSequence[4] = "Reload";
|
stateSequence[4] = "Reload";
|
||||||
|
|
||||||
stateName[5] = "NoAmmo";
|
stateName[5] = "NoAmmo";
|
||||||
stateTransitionOnAmmo[5] = "Reload";
|
stateTransitionOnAmmo[5] = "Reload";
|
||||||
stateSequence[5] = "NoAmmo";
|
stateSequence[5] = "NoAmmo";
|
||||||
stateTransitionOnTriggerDown[5] = "DryFire";
|
stateTransitionOnTriggerDown[5] = "DryFire";
|
||||||
|
|
||||||
stateName[6] = "DryFire";
|
stateName[6] = "DryFire";
|
||||||
stateSound[6] = ChaingunDryFireSound;
|
stateSound[6] = ChaingunDryFireSound;
|
||||||
stateTimeoutValue[6] = 1.0;
|
stateTimeoutValue[6] = 1.0;
|
||||||
stateTransitionOnTimeout[6] = "NoAmmo";
|
stateTransitionOnTimeout[6] = "NoAmmo";
|
||||||
|
|
||||||
stateName[7] = "WetFire";
|
stateName[7] = "WetFire";
|
||||||
stateSound[7] = PlasmaFireWetSound;
|
stateSound[7] = PlasmaFireWetSound;
|
||||||
stateTimeoutValue[7] = 1.0;
|
stateTimeoutValue[7] = 1.0;
|
||||||
stateTransitionOnTimeout[7] = "Ready";
|
stateTransitionOnTimeout[7] = "Ready";
|
||||||
|
|
||||||
stateName[8] = "CheckWet";
|
stateName[8] = "CheckWet";
|
||||||
stateTransitionOnWet[8] = "WetFire";
|
stateTransitionOnWet[8] = "WetFire";
|
||||||
stateTransitionOnNotWet[8] = "Fire";
|
stateTransitionOnNotWet[8] = "Fire";
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ItemData(ALSWPSniperRifle)
|
datablock ItemData(ALSWPSniperRifle) {
|
||||||
{
|
className = Weapon;
|
||||||
className = Weapon;
|
catagory = "Spawn Items";
|
||||||
catagory = "Spawn Items";
|
shapeFile = "weapon_sniper.dts";
|
||||||
shapeFile = "weapon_sniper.dts";
|
image = ALSWPSniperRifleImage;
|
||||||
image = ALSWPSniperRifleImage;
|
mass = 1.0;
|
||||||
mass = 1.0;
|
elasticity = 0.0;
|
||||||
elasticity = 0.0;
|
friction = 0.6;
|
||||||
friction = 0.6;
|
pickupRadius = 2;
|
||||||
pickupRadius = 2;
|
pickUpName = "a ALSWP Sniper Rifle";
|
||||||
pickUpName = "a ALSWP Sniper Rifle";
|
|
||||||
|
|
||||||
computeCRC = true;
|
computeCRC = true;
|
||||||
emap = true;
|
emap = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
function ALSWPSniperRifleImage::onMount(%this,%obj,%slot) {
|
function ALSWPSniperRifleImage::onMount(%this,%obj,%slot) {
|
||||||
if(!$TWM2::AllowSnipers) {
|
if(!$TWM2::AllowSnipers) {
|
||||||
bottomPrint(%obj.client, "The host has disabled sniper weapons.", 2, 2);
|
bottomPrint(%obj.client, "The host has disabled sniper weapons.", 2, 2);
|
||||||
%obj.throwweapon(1);
|
%obj.throwweapon(1);
|
||||||
%obj.throwweapon(0);
|
%obj.throwweapon(0);
|
||||||
}
|
}
|
||||||
Parent::onMount(%this, %obj, %slot);
|
Parent::onMount(%this, %obj, %slot);
|
||||||
}
|
}
|
||||||
|
|
||||||
function ALSWPSniperRifleImage::onUnmount(%this,%obj,%slot) {
|
function ALSWPSniperRifleImage::onUnmount(%this,%obj,%slot) {
|
||||||
Parent::onUnmount(%this, %obj, %slot);
|
Parent::onUnmount(%this, %obj, %slot);
|
||||||
}
|
}
|
||||||
|
|
||||||
function ALSWPSniperRifleImage::onFire(%data, %obj, %slot) {
|
function ALSWPSniperRifleImage::onFire(%data, %obj, %slot) {
|
||||||
if(!$TWM2::AllowSnipers) {
|
if(!$TWM2::AllowSnipers) {
|
||||||
bottomPrint(%obj.client, "The host has disabled sniper weapons.", 2, 2);
|
bottomPrint(%obj.client, "The host has disabled sniper weapons.", 2, 2);
|
||||||
%obj.throwweapon(1);
|
%obj.throwweapon(1);
|
||||||
%obj.throwweapon(0);
|
%obj.throwweapon(0);
|
||||||
}
|
}
|
||||||
%p = Parent::onFire(%data, %obj, %slot);
|
%p = Parent::onFire(%data, %obj, %slot);
|
||||||
if(%obj.client.UpgradeOn("Silencer", %data.getName())) {
|
if(%obj.client.UpgradeOn("Silencer", %data.getName())) {
|
||||||
//zero sound :p
|
//zero sound :p
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
ServerPlay3d(ALSWPFireSound, %obj.getPosition());
|
ServerPlay3d(ALSWPFireSound, %obj.getPosition());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,225 +1,221 @@
|
||||||
datablock AudioProfile(G17FireSound) {
|
datablock AudioProfile(G17FireSound) {
|
||||||
filename = "fx/weapons/cg_metal4.wav";
|
filename = "fx/weapons/cg_metal4.wav";
|
||||||
description = AudioDefault3d;
|
description = AudioDefault3d;
|
||||||
preload = true;
|
preload = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock TracerProjectileData(G17Bullet){
|
datablock TracerProjectileData(G17Bullet){
|
||||||
doDynamicClientHits = true;
|
doDynamicClientHits = true;
|
||||||
|
|
||||||
directDamage = 0.25;
|
directDamage = 0.55;
|
||||||
directDamageType = $DamageType::G17;
|
directDamageType = $DamageType::G17;
|
||||||
explosion = "ChaingunExplosion";
|
explosion = "ChaingunExplosion";
|
||||||
splash = ChaingunSplash;
|
splash = ChaingunSplash;
|
||||||
HeadMultiplier = 1.5;
|
HeadMultiplier = 1.5;
|
||||||
LegsMultiplier = 0.35;
|
LegsMultiplier = 0.35;
|
||||||
|
|
||||||
HeadShotKill = 1;
|
HeadShotKill = 1;
|
||||||
|
|
||||||
ImageSource = "G17SniperRifleImage";
|
|
||||||
|
|
||||||
kickBackStrength = 15.0;
|
ImageSource = "G17SniperRifleImage";
|
||||||
sound = ChaingunProjectile;
|
|
||||||
|
|
||||||
dryVelocity = 3000.0;
|
kickBackStrength = 15.0;
|
||||||
wetVelocity = 2000.0;
|
sound = ChaingunProjectile;
|
||||||
velInheritFactor = 1.0;
|
|
||||||
fizzleTimeMS = 1000;
|
|
||||||
lifetimeMS = 1000;
|
|
||||||
explodeOnDeath = false;
|
|
||||||
reflectOnWaterImpactAngle = 0.0;
|
|
||||||
explodeOnWaterImpact = false;
|
|
||||||
deflectionOnWaterImpact = 0.0;
|
|
||||||
fizzleUnderwaterMS = 3000;
|
|
||||||
|
|
||||||
tracerLength = 20.0;
|
dryVelocity = 3000.0;
|
||||||
tracerAlpha = false;
|
wetVelocity = 2000.0;
|
||||||
tracerMinPixels = 6;
|
velInheritFactor = 1.0;
|
||||||
tracerColor = 211.0/255.0 @ " " @ 215.0/255.0 @ " " @ 120.0/255.0 @ " 0.75";
|
fizzleTimeMS = 1000;
|
||||||
|
lifetimeMS = 1000;
|
||||||
|
explodeOnDeath = false;
|
||||||
|
reflectOnWaterImpactAngle = 0.0;
|
||||||
|
explodeOnWaterImpact = false;
|
||||||
|
deflectionOnWaterImpact = 0.0;
|
||||||
|
fizzleUnderwaterMS = 3000;
|
||||||
|
|
||||||
|
tracerLength = 20.0;
|
||||||
|
tracerAlpha = false;
|
||||||
|
tracerMinPixels = 6;
|
||||||
|
tracerColor = 211.0/255.0 @ " " @ 215.0/255.0 @ " " @ 120.0/255.0 @ " 0.75";
|
||||||
tracerTex[0] = "special/tracer00";
|
tracerTex[0] = "special/tracer00";
|
||||||
tracerTex[1] = "special/tracercross";
|
tracerTex[1] = "special/tracercross";
|
||||||
tracerWidth = 0.09;
|
tracerWidth = 0.09;
|
||||||
crossSize = 0.20;
|
crossSize = 0.20;
|
||||||
crossViewAng = 0.990;
|
crossViewAng = 0.990;
|
||||||
renderCross = true;
|
renderCross = true;
|
||||||
|
|
||||||
decalData[0] = ChaingunDecal1;
|
decalData[0] = ChaingunDecal1;
|
||||||
decalData[1] = ChaingunDecal2;
|
decalData[1] = ChaingunDecal2;
|
||||||
decalData[2] = ChaingunDecal3;
|
decalData[2] = ChaingunDecal3;
|
||||||
decalData[3] = ChaingunDecal4;
|
decalData[3] = ChaingunDecal4;
|
||||||
decalData[4] = ChaingunDecal5;
|
decalData[4] = ChaingunDecal5;
|
||||||
decalData[5] = ChaingunDecal6;
|
decalData[5] = ChaingunDecal6;
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ItemData(G17SniperRifleAmmo)
|
datablock ItemData(G17SniperRifleAmmo) {
|
||||||
{
|
className = Ammo;
|
||||||
className = Ammo;
|
catagory = "Ammo";
|
||||||
catagory = "Ammo";
|
shapeFile = "ammo_chaingun.dts";
|
||||||
shapeFile = "ammo_chaingun.dts";
|
mass = 1;
|
||||||
mass = 1;
|
elasticity = 0.2;
|
||||||
elasticity = 0.2;
|
friction = 0.6;
|
||||||
friction = 0.6;
|
pickupRadius = 2;
|
||||||
pickupRadius = 2;
|
|
||||||
pickUpName = "Some G17 Sniper Rifle Ammo";
|
pickUpName = "Some G17 Sniper Rifle Ammo";
|
||||||
|
|
||||||
computeCRC = true;
|
computeCRC = true;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
//--------------------------------------------------------------------------
|
//--------------------------------------------------------------------------
|
||||||
// Weapon
|
// Weapon
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
datablock ShapeBaseImageData(G17SniperRifleImage) {
|
datablock ShapeBaseImageData(G17SniperRifleImage) {
|
||||||
|
className = WeaponImage;
|
||||||
|
shapeFile = "weapon_sniper.dts";
|
||||||
|
mass = 10;
|
||||||
|
item = G17SniperRifle;
|
||||||
|
ammo = G17SniperRifleAmmo;
|
||||||
|
projectile = G17Bullet;
|
||||||
|
projectileType = TracerProjectile;
|
||||||
|
emap = true;
|
||||||
|
|
||||||
className = WeaponImage;
|
armThread = looksn;
|
||||||
shapeFile = "weapon_sniper.dts";
|
|
||||||
mass = 10;
|
|
||||||
item = G17SniperRifle;
|
|
||||||
ammo = G17SniperRifleAmmo;
|
|
||||||
projectile = G17Bullet;
|
|
||||||
projectileType = TracerProjectile;
|
|
||||||
emap = true;
|
|
||||||
|
|
||||||
armThread = looksn;
|
//ClipStuff
|
||||||
|
ClipName = "G17Clip";
|
||||||
|
ClipPickupName["G17Clip"] = "A Few Boxes Of G17 Sniper Bullets";
|
||||||
|
ShowsClipInHud = 1;
|
||||||
|
ClipReloadTime = 4;
|
||||||
|
ClipReturn = 1;
|
||||||
|
InitialClips = 10;
|
||||||
|
//
|
||||||
|
//Challenges
|
||||||
|
HasChallenges = 1;
|
||||||
|
ChallengeCt = 8;
|
||||||
|
Challenge[1] = "G17 Hunter\t100\t150\tNone";
|
||||||
|
Challenge[2] = "G17 Expert\t200\t250\tNone";
|
||||||
|
Challenge[3] = "G17 Master\t500\t500\tLaser";
|
||||||
|
Challenge[4] = "G17 God\t1000\t1000\tSilencer";
|
||||||
|
Challenge[5] = "G17 Bronze Commendation\t2500\t10000\tNone";
|
||||||
|
Challenge[6] = "G17 Silver Commendation\t5000\t25000\tNone";
|
||||||
|
Challenge[7] = "G17 Gold Commendation\t10000\t50000\tNone";
|
||||||
|
Challenge[8] = "G17 Titan Commendation\t25000\t75000\tNone";
|
||||||
|
Upgrade[1] = "Laser";
|
||||||
|
Upgrade[2] = "Silencer";
|
||||||
|
GunName = "G17 Sniper Rifle";
|
||||||
|
//
|
||||||
|
|
||||||
//ClipStuff
|
casing = ShellDebris;
|
||||||
ClipName = "G17Clip";
|
shellExitDir = "1.0 0.3 1.0";
|
||||||
ClipPickupName["G17Clip"] = "A Few Boxes Of G17 Sniper Bullets";
|
shellExitOffset = "0.15 -0.56 -0.1";
|
||||||
ShowsClipInHud = 1;
|
shellExitVariance = 15.0;
|
||||||
ClipReloadTime = 4;
|
shellVelocity = 3.0;
|
||||||
ClipReturn = 1;
|
|
||||||
InitialClips = 10;
|
|
||||||
//
|
|
||||||
//Challenges
|
|
||||||
HasChallenges = 1;
|
|
||||||
ChallengeCt = 8;
|
|
||||||
Challenge[1] = "G17 Hunter\t100\t150\tNone";
|
|
||||||
Challenge[2] = "G17 Expert\t200\t250\tNone";
|
|
||||||
Challenge[3] = "G17 Master\t500\t500\tLaser";
|
|
||||||
Challenge[4] = "G17 God\t1000\t1000\tSilencer";
|
|
||||||
Challenge[5] = "G17 Bronze Commendation\t2500\t10000\tNone";
|
|
||||||
Challenge[6] = "G17 Silver Commendation\t5000\t25000\tNone";
|
|
||||||
Challenge[7] = "G17 Gold Commendation\t10000\t50000\tNone";
|
|
||||||
Challenge[8] = "G17 Titan Commendation\t25000\t75000\tNone";
|
|
||||||
Upgrade[1] = "Laser";
|
|
||||||
Upgrade[2] = "Silencer";
|
|
||||||
GunName = "G17 Sniper Rifle";
|
|
||||||
//
|
|
||||||
|
|
||||||
casing = ShellDebris;
|
|
||||||
shellExitDir = "1.0 0.3 1.0";
|
|
||||||
shellExitOffset = "0.15 -0.56 -0.1";
|
|
||||||
shellExitVariance = 15.0;
|
|
||||||
shellVelocity = 3.0;
|
|
||||||
|
|
||||||
|
|
||||||
stateName[0] = "Activate";
|
stateName[0] = "Activate";
|
||||||
stateTransitionOnTimeout[0] = "ActivateReady";
|
stateTransitionOnTimeout[0] = "ActivateReady";
|
||||||
stateTimeoutValue[0] = 0.5;
|
stateTimeoutValue[0] = 0.5;
|
||||||
stateSequence[0] = "Activate";
|
stateSequence[0] = "Activate";
|
||||||
stateSound[0] = ChaingunSwitchSound;
|
stateSound[0] = ChaingunSwitchSound;
|
||||||
|
|
||||||
stateName[1] = "ActivateReady";
|
stateName[1] = "ActivateReady";
|
||||||
stateTransitionOnLoaded[1] = "Ready";
|
stateTransitionOnLoaded[1] = "Ready";
|
||||||
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
||||||
|
|
||||||
stateName[2] = "Ready";
|
stateName[2] = "Ready";
|
||||||
stateTransitionOnNoAmmo[2] = "NoAmmo";
|
stateTransitionOnNoAmmo[2] = "NoAmmo";
|
||||||
stateTransitionOnTriggerDown[2] = "CheckWet";
|
stateTransitionOnTriggerDown[2] = "CheckWet";
|
||||||
|
|
||||||
stateName[3] = "Fire";
|
stateName[3] = "Fire";
|
||||||
stateTransitionOnTimeout[3] = "Reload";
|
stateTransitionOnTimeout[3] = "Reload";
|
||||||
stateTimeoutValue[3] = 0.01;
|
stateTimeoutValue[3] = 0.01;
|
||||||
stateFire[3] = true;
|
stateFire[3] = true;
|
||||||
stateRecoil[3] = LightRecoil;
|
stateRecoil[3] = LightRecoil;
|
||||||
stateAllowImageChange[3] = false;
|
stateAllowImageChange[3] = false;
|
||||||
stateScript[3] = "onFire";
|
stateScript[3] = "onFire";
|
||||||
//stateSound[3] = "G17FireSound";
|
//stateSound[3] = "G17FireSound";
|
||||||
|
|
||||||
stateName[4] = "Reload";
|
stateName[4] = "Reload";
|
||||||
stateTransitionOnNoAmmo[4] = "NoAmmo";
|
stateTransitionOnNoAmmo[4] = "NoAmmo";
|
||||||
stateTransitionOnTimeout[4] = "Ready";
|
stateTransitionOnTimeout[4] = "Ready";
|
||||||
stateTimeoutValue[4] = 1.1;
|
stateTimeoutValue[4] = 0.7;
|
||||||
stateAllowImageChange[4] = false;
|
stateAllowImageChange[4] = false;
|
||||||
stateSequence[4] = "Reload";
|
stateSequence[4] = "Reload";
|
||||||
|
|
||||||
stateName[5] = "NoAmmo";
|
stateName[5] = "NoAmmo";
|
||||||
stateTransitionOnAmmo[5] = "Reload";
|
stateTransitionOnAmmo[5] = "Reload";
|
||||||
stateSequence[5] = "NoAmmo";
|
stateSequence[5] = "NoAmmo";
|
||||||
stateTransitionOnTriggerDown[5] = "DryFire";
|
stateTransitionOnTriggerDown[5] = "DryFire";
|
||||||
|
|
||||||
stateName[6] = "DryFire";
|
stateName[6] = "DryFire";
|
||||||
stateSound[6] = ChaingunDryFireSound;
|
stateSound[6] = ChaingunDryFireSound;
|
||||||
stateTimeoutValue[6] = 1.0;
|
stateTimeoutValue[6] = 1.0;
|
||||||
stateTransitionOnTimeout[6] = "NoAmmo";
|
stateTransitionOnTimeout[6] = "NoAmmo";
|
||||||
|
|
||||||
stateName[7] = "WetFire";
|
stateName[7] = "WetFire";
|
||||||
stateSound[7] = PlasmaFireWetSound;
|
stateSound[7] = PlasmaFireWetSound;
|
||||||
stateTimeoutValue[7] = 1.0;
|
stateTimeoutValue[7] = 1.0;
|
||||||
stateTransitionOnTimeout[7] = "Ready";
|
stateTransitionOnTimeout[7] = "Ready";
|
||||||
|
|
||||||
stateName[8] = "CheckWet";
|
stateName[8] = "CheckWet";
|
||||||
stateTransitionOnWet[8] = "WetFire";
|
stateTransitionOnWet[8] = "WetFire";
|
||||||
stateTransitionOnNotWet[8] = "Fire";
|
stateTransitionOnNotWet[8] = "Fire";
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ItemData(G17SniperRifle)
|
datablock ItemData(G17SniperRifle) {
|
||||||
{
|
className = Weapon;
|
||||||
className = Weapon;
|
catagory = "Spawn Items";
|
||||||
catagory = "Spawn Items";
|
shapeFile = "weapon_sniper.dts";
|
||||||
shapeFile = "weapon_sniper.dts";
|
image = G17SniperRifleImage;
|
||||||
image = G17SniperRifleImage;
|
mass = 1.0;
|
||||||
mass = 1.0;
|
elasticity = 0.0;
|
||||||
elasticity = 0.0;
|
friction = 0.6;
|
||||||
friction = 0.6;
|
pickupRadius = 2;
|
||||||
pickupRadius = 2;
|
pickUpName = "a G17 Sniper Rifle";
|
||||||
pickUpName = "a G17 Sniper Rifle";
|
|
||||||
|
|
||||||
computeCRC = true;
|
computeCRC = true;
|
||||||
emap = true;
|
emap = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
//Two images make the scope
|
//Two images make the scope
|
||||||
datablock ShapeBaseImageData(G17ScopeImage) : G17SniperRifleImage {
|
datablock ShapeBaseImageData(G17ScopeImage) : G17SniperRifleImage {
|
||||||
shapeFile = "turret_belly_barrell.dts";
|
shapeFile = "turret_belly_barrell.dts";
|
||||||
offset = "0 0.25 0.25";
|
offset = "0 0.25 0.25";
|
||||||
rotation = "1 0 0 180";
|
rotation = "1 0 0 180";
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ShapeBaseImageData(G17ScopeImage2) : G17SniperRifleImage {
|
datablock ShapeBaseImageData(G17ScopeImage2) : G17SniperRifleImage {
|
||||||
shapeFile = "turret_belly_barrell.dts";
|
shapeFile = "turret_belly_barrell.dts";
|
||||||
offset = "0 0.3 0.25";
|
offset = "0 0.3 0.25";
|
||||||
rotation = "1 0 0 0";
|
rotation = "1 0 0 0";
|
||||||
};
|
};
|
||||||
|
|
||||||
function G17SniperRifleImage::onMount(%this,%obj,%slot) {
|
function G17SniperRifleImage::onMount(%this,%obj,%slot) {
|
||||||
if(!$TWM2::AllowSnipers) {
|
if(!$TWM2::AllowSnipers) {
|
||||||
bottomPrint(%obj.client, "The host has disabled sniper weapons.", 2, 2);
|
bottomPrint(%obj.client, "The host has disabled sniper weapons.", 2, 2);
|
||||||
%obj.throwweapon(1);
|
%obj.throwweapon(1);
|
||||||
%obj.throwweapon(0);
|
%obj.throwweapon(0);
|
||||||
}
|
}
|
||||||
Parent::onMount(%this, %obj, %slot);
|
Parent::onMount(%this, %obj, %slot);
|
||||||
%obj.mountImage(G17ScopeImage, 5);
|
%obj.mountImage(G17ScopeImage, 5);
|
||||||
%obj.mountImage(G17ScopeImage2, 6);
|
%obj.mountImage(G17ScopeImage2, 6);
|
||||||
}
|
}
|
||||||
|
|
||||||
function G17SniperRifleImage::onUnmount(%this,%obj,%slot) {
|
function G17SniperRifleImage::onUnmount(%this,%obj,%slot) {
|
||||||
Parent::onUnmount(%this, %obj, %slot);
|
Parent::onUnmount(%this, %obj, %slot);
|
||||||
%obj.unmountImage(5);
|
%obj.unmountImage(5);
|
||||||
%obj.unmountImage(6);
|
%obj.unmountImage(6);
|
||||||
}
|
}
|
||||||
|
|
||||||
function G17SniperRifleImage::onFire(%data, %obj, %slot) {
|
function G17SniperRifleImage::onFire(%data, %obj, %slot) {
|
||||||
if(!$TWM2::AllowSnipers) {
|
if(!$TWM2::AllowSnipers) {
|
||||||
bottomPrint(%obj.client, "The host has disabled sniper weapons.", 2, 2);
|
bottomPrint(%obj.client, "The host has disabled sniper weapons.", 2, 2);
|
||||||
%obj.throwweapon(1);
|
%obj.throwweapon(1);
|
||||||
%obj.throwweapon(0);
|
%obj.throwweapon(0);
|
||||||
}
|
}
|
||||||
%p = Parent::onFire(%data, %obj, %slot);
|
%p = Parent::onFire(%data, %obj, %slot);
|
||||||
if(%obj.client.UpgradeOn("Silencer", %data.getName())) {
|
if(%obj.client.UpgradeOn("Silencer", %data.getName())) {
|
||||||
//zero sound :p
|
//zero sound :p
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
ServerPlay3d(G17FireSound, %obj.getPosition());
|
ServerPlay3d(G17FireSound, %obj.getPosition());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,183 +1,178 @@
|
||||||
datablock TracerProjectileData(G41Bullet)
|
datablock TracerProjectileData(G41Bullet) {
|
||||||
{
|
doDynamicClientHits = true;
|
||||||
doDynamicClientHits = true;
|
|
||||||
|
|
||||||
directDamage = 0.3;
|
directDamage = 0.44;
|
||||||
directDamageType = $DamageType::G41;
|
directDamageType = $DamageType::G41;
|
||||||
explosion = "ChaingunExplosion";
|
explosion = "ChaingunExplosion";
|
||||||
splash = ChaingunSplash;
|
splash = ChaingunSplash;
|
||||||
HeadMultiplier = 1.1;
|
HeadMultiplier = 1.1;
|
||||||
LegsMultiplier = 0.35;
|
LegsMultiplier = 0.35;
|
||||||
|
|
||||||
ImageSource = "G41RifleImage";
|
ImageSource = "G41RifleImage";
|
||||||
|
|
||||||
kickBackStrength = 15.0;
|
kickBackStrength = 15.0;
|
||||||
sound = ChaingunProjectile;
|
sound = ChaingunProjectile;
|
||||||
|
|
||||||
dryVelocity = 3000.0;
|
dryVelocity = 3000.0;
|
||||||
wetVelocity = 2000.0;
|
wetVelocity = 2000.0;
|
||||||
velInheritFactor = 1.0;
|
velInheritFactor = 1.0;
|
||||||
fizzleTimeMS = 1000;
|
fizzleTimeMS = 1000;
|
||||||
lifetimeMS = 1000;
|
lifetimeMS = 1000;
|
||||||
explodeOnDeath = false;
|
explodeOnDeath = false;
|
||||||
reflectOnWaterImpactAngle = 0.0;
|
reflectOnWaterImpactAngle = 0.0;
|
||||||
explodeOnWaterImpact = false;
|
explodeOnWaterImpact = false;
|
||||||
deflectionOnWaterImpact = 0.0;
|
deflectionOnWaterImpact = 0.0;
|
||||||
fizzleUnderwaterMS = 3000;
|
fizzleUnderwaterMS = 3000;
|
||||||
|
|
||||||
tracerLength = 20.0;
|
tracerLength = 20.0;
|
||||||
tracerAlpha = false;
|
tracerAlpha = false;
|
||||||
tracerMinPixels = 6;
|
tracerMinPixels = 6;
|
||||||
tracerColor = 211.0/255.0 @ " " @ 215.0/255.0 @ " " @ 120.0/255.0 @ " 0.75";
|
tracerColor = 211.0/255.0 @ " " @ 215.0/255.0 @ " " @ 120.0/255.0 @ " 0.75";
|
||||||
tracerTex[0] = "special/tracer00";
|
tracerTex[0] = "special/tracer00";
|
||||||
tracerTex[1] = "special/tracercross";
|
tracerTex[1] = "special/tracercross";
|
||||||
tracerWidth = 0.09;
|
tracerWidth = 0.09;
|
||||||
crossSize = 0.20;
|
crossSize = 0.20;
|
||||||
crossViewAng = 0.990;
|
crossViewAng = 0.990;
|
||||||
renderCross = true;
|
renderCross = true;
|
||||||
|
|
||||||
decalData[0] = ChaingunDecal1;
|
decalData[0] = ChaingunDecal1;
|
||||||
decalData[1] = ChaingunDecal2;
|
decalData[1] = ChaingunDecal2;
|
||||||
decalData[2] = ChaingunDecal3;
|
decalData[2] = ChaingunDecal3;
|
||||||
decalData[3] = ChaingunDecal4;
|
decalData[3] = ChaingunDecal4;
|
||||||
decalData[4] = ChaingunDecal5;
|
decalData[4] = ChaingunDecal5;
|
||||||
decalData[5] = ChaingunDecal6;
|
decalData[5] = ChaingunDecal6;
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ItemData(G41RifleAmmo)
|
datablock ItemData(G41RifleAmmo) {
|
||||||
{
|
className = Ammo;
|
||||||
className = Ammo;
|
catagory = "Ammo";
|
||||||
catagory = "Ammo";
|
shapeFile = "ammo_chaingun.dts";
|
||||||
shapeFile = "ammo_chaingun.dts";
|
mass = 1;
|
||||||
mass = 1;
|
elasticity = 0.2;
|
||||||
elasticity = 0.2;
|
friction = 0.6;
|
||||||
friction = 0.6;
|
pickupRadius = 2;
|
||||||
pickupRadius = 2;
|
|
||||||
pickUpName = "Some G41 Rifle Bullets";
|
pickUpName = "Some G41 Rifle Bullets";
|
||||||
|
|
||||||
computeCRC = true;
|
computeCRC = true;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ShapeBaseImageData(G41RifleImage)
|
datablock ShapeBaseImageData(G41RifleImage) {
|
||||||
{
|
className = WeaponImage;
|
||||||
className = WeaponImage;
|
shapeFile = "weapon_sniper.dts";
|
||||||
shapeFile = "weapon_sniper.dts";
|
mass = 10;
|
||||||
mass = 10;
|
item = G41Rifle;
|
||||||
item = G41Rifle;
|
ammo = G41RifleAmmo;
|
||||||
ammo = G41RifleAmmo;
|
projectile = G41Bullet;
|
||||||
projectile = G41Bullet;
|
projectileType = TracerProjectile;
|
||||||
projectileType = TracerProjectile;
|
emap = true;
|
||||||
emap = true;
|
|
||||||
|
|
||||||
//ClipStuff
|
//ClipStuff
|
||||||
ClipName = "G41RifleClip";
|
ClipName = "G41RifleClip";
|
||||||
ClipPickupName["G41RifleClip"] = "some G41 Clip Cartons";
|
ClipPickupName["G41RifleClip"] = "some G41 Clip Cartons";
|
||||||
ShowsClipInHud = 1;
|
ShowsClipInHud = 1;
|
||||||
ClipReloadTime = 5;
|
ClipReloadTime = 5;
|
||||||
ClipReturn = 20;
|
ClipReturn = 20;
|
||||||
InitialClips = 7;
|
InitialClips = 7;
|
||||||
//
|
//
|
||||||
//Challenges
|
//Challenges
|
||||||
HasChallenges = 1;
|
HasChallenges = 1;
|
||||||
ChallengeCt = 8;
|
ChallengeCt = 8;
|
||||||
Challenge[1] = "G41 Hunter\t75\t150\tNone";
|
Challenge[1] = "G41 Hunter\t75\t150\tNone";
|
||||||
Challenge[2] = "G41 Expert\t150\t250\tGrip";
|
Challenge[2] = "G41 Expert\t150\t250\tGrip";
|
||||||
Challenge[3] = "G41 Master\t350\t500\tLaser";
|
Challenge[3] = "G41 Master\t350\t500\tLaser";
|
||||||
Challenge[4] = "G41 God\t600\t1000\tSilencer";
|
Challenge[4] = "G41 God\t600\t1000\tSilencer";
|
||||||
Challenge[5] = "G41 Bronze Commendation\t2500\t10000\tNone";
|
Challenge[5] = "G41 Bronze Commendation\t2500\t10000\tNone";
|
||||||
Challenge[6] = "G41 Silver Commendation\t5000\t25000\tNone";
|
Challenge[6] = "G41 Silver Commendation\t5000\t25000\tNone";
|
||||||
Challenge[7] = "G41 Gold Commendation\t10000\t50000\tNone";
|
Challenge[7] = "G41 Gold Commendation\t10000\t50000\tNone";
|
||||||
Challenge[8] = "G41 Titan Commendation\t25000\t75000\tNone";
|
Challenge[8] = "G41 Titan Commendation\t25000\t75000\tNone";
|
||||||
Upgrade[1] = "Grip";
|
Upgrade[1] = "Grip";
|
||||||
Upgrade[2] = "Laser";
|
Upgrade[2] = "Laser";
|
||||||
Upgrade[3] = "Silencer";
|
Upgrade[3] = "Silencer";
|
||||||
GunName = "G41 Semi-Automatic Rifle";
|
GunName = "G41 Semi-Automatic Rifle";
|
||||||
//
|
//
|
||||||
|
|
||||||
RankRequire = $TWM2::RankRequire["G41"];
|
|
||||||
|
|
||||||
casing = ShellDebris;
|
RankRequire = $TWM2::RankRequire["G41"];
|
||||||
shellExitDir = "1.0 0.3 1.0";
|
|
||||||
shellExitOffset = "0.15 -0.56 -0.1";
|
|
||||||
shellExitVariance = 15.0;
|
|
||||||
shellVelocity = 3.0;
|
|
||||||
|
|
||||||
projectileSpread = 3.0 / 1000.0;
|
casing = ShellDebris;
|
||||||
|
shellExitDir = "1.0 0.3 1.0";
|
||||||
|
shellExitOffset = "0.15 -0.56 -0.1";
|
||||||
|
shellExitVariance = 15.0;
|
||||||
|
shellVelocity = 3.0;
|
||||||
|
|
||||||
stateName[0] = "Activate";
|
projectileSpread = 2.0 / 1000.0;
|
||||||
stateTransitionOnTimeout[0] = "ActivateReady";
|
|
||||||
stateTimeoutValue[0] = 0.5;
|
|
||||||
stateSequence[0] = "Activate";
|
|
||||||
stateSound[0] = ChaingunSwitchSound;
|
|
||||||
|
|
||||||
stateName[1] = "ActivateReady";
|
stateName[0] = "Activate";
|
||||||
stateTransitionOnLoaded[1] = "Ready";
|
stateTransitionOnTimeout[0] = "ActivateReady";
|
||||||
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
stateTimeoutValue[0] = 0.5;
|
||||||
|
stateSequence[0] = "Activate";
|
||||||
|
stateSound[0] = ChaingunSwitchSound;
|
||||||
|
|
||||||
stateName[2] = "Ready";
|
stateName[1] = "ActivateReady";
|
||||||
stateTransitionOnNoAmmo[2] = "NoAmmo";
|
stateTransitionOnLoaded[1] = "Ready";
|
||||||
stateTransitionOnTriggerDown[2] = "CheckWet";
|
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
||||||
|
|
||||||
stateName[3] = "Fire";
|
stateName[2] = "Ready";
|
||||||
stateTransitionOnTimeout[3] = "Reload";
|
stateTransitionOnNoAmmo[2] = "NoAmmo";
|
||||||
stateTimeoutValue[3] = 0.01;
|
stateTransitionOnTriggerDown[2] = "CheckWet";
|
||||||
stateFire[3] = true;
|
|
||||||
stateRecoil[3] = LightRecoil;
|
|
||||||
stateAllowImageChange[3] = false;
|
|
||||||
stateScript[3] = "onFire";
|
|
||||||
stateEmitterTime[3] = 0.2;
|
|
||||||
//stateSound[3] = S3FireSound;
|
|
||||||
|
|
||||||
stateName[4] = "Reload";
|
stateName[3] = "Fire";
|
||||||
stateTransitionOnNoAmmo[4] = "NoAmmo";
|
stateTransitionOnTimeout[3] = "Reload";
|
||||||
stateTransitionOnTimeout[4] = "Ready";
|
stateTimeoutValue[3] = 0.01;
|
||||||
stateTimeoutValue[4] = 0.3;
|
stateFire[3] = true;
|
||||||
stateAllowImageChange[4] = false;
|
stateRecoil[3] = LightRecoil;
|
||||||
stateSequence[4] = "Reload";
|
stateAllowImageChange[3] = false;
|
||||||
|
stateScript[3] = "onFire";
|
||||||
|
stateEmitterTime[3] = 0.2;
|
||||||
|
//stateSound[3] = S3FireSound;
|
||||||
|
|
||||||
stateName[5] = "NoAmmo";
|
stateName[4] = "Reload";
|
||||||
stateTransitionOnAmmo[5] = "Reload";
|
stateTransitionOnNoAmmo[4] = "NoAmmo";
|
||||||
stateSequence[5] = "NoAmmo";
|
stateTransitionOnTimeout[4] = "Ready";
|
||||||
stateTransitionOnTriggerDown[5] = "DryFire";
|
stateTimeoutValue[4] = 0.15;
|
||||||
|
stateAllowImageChange[4] = false;
|
||||||
|
stateSequence[4] = "Reload";
|
||||||
|
|
||||||
stateName[6] = "DryFire";
|
stateName[5] = "NoAmmo";
|
||||||
stateSound[6] = ChaingunDryFireSound;
|
stateTransitionOnAmmo[5] = "Reload";
|
||||||
stateTimeoutValue[6] = 1.0;
|
stateSequence[5] = "NoAmmo";
|
||||||
stateTransitionOnTimeout[6] = "NoAmmo";
|
stateTransitionOnTriggerDown[5] = "DryFire";
|
||||||
|
|
||||||
stateName[7] = "WetFire";
|
stateName[6] = "DryFire";
|
||||||
stateSound[7] = PlasmaFireWetSound;
|
stateSound[6] = ChaingunDryFireSound;
|
||||||
stateTimeoutValue[7] = 1.0;
|
stateTimeoutValue[6] = 1.0;
|
||||||
stateTransitionOnTimeout[7] = "Ready";
|
stateTransitionOnTimeout[6] = "NoAmmo";
|
||||||
|
|
||||||
stateName[8] = "CheckWet";
|
stateName[7] = "WetFire";
|
||||||
stateTransitionOnWet[8] = "WetFire";
|
stateSound[7] = PlasmaFireWetSound;
|
||||||
stateTransitionOnNotWet[8] = "Fire";
|
stateTimeoutValue[7] = 1.0;
|
||||||
|
stateTransitionOnTimeout[7] = "Ready";
|
||||||
|
|
||||||
|
stateName[8] = "CheckWet";
|
||||||
|
stateTransitionOnWet[8] = "WetFire";
|
||||||
|
stateTransitionOnNotWet[8] = "Fire";
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ItemData(G41Rifle)
|
datablock ItemData(G41Rifle) {
|
||||||
{
|
className = Weapon;
|
||||||
className = Weapon;
|
catagory = "Spawn Items";
|
||||||
catagory = "Spawn Items";
|
shapeFile = "weapon_sniper.dts";
|
||||||
shapeFile = "weapon_sniper.dts";
|
image = G41RifleImage;
|
||||||
image = G41RifleImage;
|
mass = 1.0;
|
||||||
mass = 1.0;
|
elasticity = 0.0;
|
||||||
elasticity = 0.0;
|
friction = 0.6;
|
||||||
friction = 0.6;
|
pickupRadius = 2;
|
||||||
pickupRadius = 2;
|
pickUpName = "an G41 Semi-Automatic Rifle";
|
||||||
pickUpName = "an G41 Semi-Automatic Rifle";
|
|
||||||
|
|
||||||
computeCRC = true;
|
computeCRC = true;
|
||||||
emap = true;
|
emap = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
function G41RifleImage::onFire(%data, %obj, %slot) {
|
function G41RifleImage::onFire(%data, %obj, %slot) {
|
||||||
%p = Parent::onFire(%data, %obj, %slot);
|
%p = Parent::onFire(%data, %obj, %slot);
|
||||||
if(%obj.client.UpgradeOn("Silencer", %data.getName())) {
|
if(%obj.client.UpgradeOn("Silencer", %data.getName())) {
|
||||||
//zero sound :p
|
//zero sound :p
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
ServerPlay3d(S3FireSound, %obj.getPosition());
|
ServerPlay3d(S3FireSound, %obj.getPosition());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,227 +1,223 @@
|
||||||
datablock AudioProfile(M1FireSound) {
|
datablock AudioProfile(M1FireSound) {
|
||||||
filename = "fx/weapons/cg_metal2.wav";
|
filename = "fx/weapons/cg_metal2.wav";
|
||||||
description = AudioDefault3d;
|
description = AudioDefault3d;
|
||||||
preload = true;
|
preload = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock TracerProjectileData(M1Bullet){
|
datablock TracerProjectileData(M1Bullet) {
|
||||||
doDynamicClientHits = true;
|
doDynamicClientHits = true;
|
||||||
|
|
||||||
directDamage = 0.3;
|
directDamage = 0.65;
|
||||||
directDamageType = $DamageType::M1;
|
directDamageType = $DamageType::M1;
|
||||||
explosion = "ChaingunExplosion";
|
explosion = "ChaingunExplosion";
|
||||||
splash = ChaingunSplash;
|
splash = ChaingunSplash;
|
||||||
HeadMultiplier = 1.5;
|
HeadMultiplier = 1.5;
|
||||||
LegsMultiplier = 0.35;
|
LegsMultiplier = 0.35;
|
||||||
|
|
||||||
HeadShotKill = 1;
|
HeadShotKill = 1;
|
||||||
|
|
||||||
ImageSource = "M1SniperRifleImage";
|
|
||||||
|
|
||||||
kickBackStrength = 15.0;
|
ImageSource = "M1SniperRifleImage";
|
||||||
sound = ChaingunProjectile;
|
|
||||||
|
|
||||||
dryVelocity = 3000.0;
|
kickBackStrength = 15.0;
|
||||||
wetVelocity = 2000.0;
|
sound = ChaingunProjectile;
|
||||||
velInheritFactor = 1.0;
|
|
||||||
fizzleTimeMS = 1000;
|
|
||||||
lifetimeMS = 1000;
|
|
||||||
explodeOnDeath = false;
|
|
||||||
reflectOnWaterImpactAngle = 0.0;
|
|
||||||
explodeOnWaterImpact = false;
|
|
||||||
deflectionOnWaterImpact = 0.0;
|
|
||||||
fizzleUnderwaterMS = 3000;
|
|
||||||
|
|
||||||
tracerLength = 20.0;
|
dryVelocity = 3000.0;
|
||||||
tracerAlpha = false;
|
wetVelocity = 2000.0;
|
||||||
tracerMinPixels = 6;
|
velInheritFactor = 1.0;
|
||||||
tracerColor = 211.0/255.0 @ " " @ 215.0/255.0 @ " " @ 120.0/255.0 @ " 0.75";
|
fizzleTimeMS = 1000;
|
||||||
|
lifetimeMS = 1000;
|
||||||
|
explodeOnDeath = false;
|
||||||
|
reflectOnWaterImpactAngle = 0.0;
|
||||||
|
explodeOnWaterImpact = false;
|
||||||
|
deflectionOnWaterImpact = 0.0;
|
||||||
|
fizzleUnderwaterMS = 3000;
|
||||||
|
|
||||||
|
tracerLength = 20.0;
|
||||||
|
tracerAlpha = false;
|
||||||
|
tracerMinPixels = 6;
|
||||||
|
tracerColor = 211.0/255.0 @ " " @ 215.0/255.0 @ " " @ 120.0/255.0 @ " 0.75";
|
||||||
tracerTex[0] = "special/tracer00";
|
tracerTex[0] = "special/tracer00";
|
||||||
tracerTex[1] = "special/tracercross";
|
tracerTex[1] = "special/tracercross";
|
||||||
tracerWidth = 0.09;
|
tracerWidth = 0.09;
|
||||||
crossSize = 0.20;
|
crossSize = 0.20;
|
||||||
crossViewAng = 0.990;
|
crossViewAng = 0.990;
|
||||||
renderCross = true;
|
renderCross = true;
|
||||||
|
|
||||||
decalData[0] = ChaingunDecal1;
|
decalData[0] = ChaingunDecal1;
|
||||||
decalData[1] = ChaingunDecal2;
|
decalData[1] = ChaingunDecal2;
|
||||||
decalData[2] = ChaingunDecal3;
|
decalData[2] = ChaingunDecal3;
|
||||||
decalData[3] = ChaingunDecal4;
|
decalData[3] = ChaingunDecal4;
|
||||||
decalData[4] = ChaingunDecal5;
|
decalData[4] = ChaingunDecal5;
|
||||||
decalData[5] = ChaingunDecal6;
|
decalData[5] = ChaingunDecal6;
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ItemData(M1SniperRifleAmmo)
|
datablock ItemData(M1SniperRifleAmmo) {
|
||||||
{
|
className = Ammo;
|
||||||
className = Ammo;
|
catagory = "Ammo";
|
||||||
catagory = "Ammo";
|
shapeFile = "ammo_chaingun.dts";
|
||||||
shapeFile = "ammo_chaingun.dts";
|
mass = 1;
|
||||||
mass = 1;
|
elasticity = 0.2;
|
||||||
elasticity = 0.2;
|
friction = 0.6;
|
||||||
friction = 0.6;
|
pickupRadius = 2;
|
||||||
pickupRadius = 2;
|
|
||||||
pickUpName = "Some M1 Sniper Rifle Ammo";
|
pickUpName = "Some M1 Sniper Rifle Ammo";
|
||||||
|
|
||||||
computeCRC = true;
|
computeCRC = true;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
//--------------------------------------------------------------------------
|
//--------------------------------------------------------------------------
|
||||||
// Weapon
|
// Weapon
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
datablock ShapeBaseImageData(M1SniperRifleImage) {
|
datablock ShapeBaseImageData(M1SniperRifleImage) {
|
||||||
|
className = WeaponImage;
|
||||||
|
shapeFile = "weapon_sniper.dts";
|
||||||
|
mass = 10;
|
||||||
|
item = M1SniperRifle;
|
||||||
|
ammo = M1SniperRifleAmmo;
|
||||||
|
projectile = M1Bullet;
|
||||||
|
projectileType = TracerProjectile;
|
||||||
|
emap = true;
|
||||||
|
|
||||||
className = WeaponImage;
|
armThread = looksn;
|
||||||
shapeFile = "weapon_sniper.dts";
|
|
||||||
mass = 10;
|
|
||||||
item = M1SniperRifle;
|
|
||||||
ammo = M1SniperRifleAmmo;
|
|
||||||
projectile = M1Bullet;
|
|
||||||
projectileType = TracerProjectile;
|
|
||||||
emap = true;
|
|
||||||
|
|
||||||
armThread = looksn;
|
//ClipStuff
|
||||||
|
ClipName = "M1Clip";
|
||||||
|
ClipPickupName["M1Clip"] = "A Few Boxes Of M1 Sniper Bullets";
|
||||||
|
ShowsClipInHud = 1;
|
||||||
|
ClipReloadTime = 4;
|
||||||
|
ClipReturn = 5;
|
||||||
|
InitialClips = 5;
|
||||||
|
//
|
||||||
|
//Challenges
|
||||||
|
HasChallenges = 1;
|
||||||
|
ChallengeCt = 8;
|
||||||
|
Challenge[1] = "M1 Hunter\t100\t150\tNone";
|
||||||
|
Challenge[2] = "M1 Expert\t200\t250\tNone";
|
||||||
|
Challenge[3] = "M1 Master\t500\t500\tLaser";
|
||||||
|
Challenge[4] = "M1 God\t1000\t1000\tSilencer";
|
||||||
|
Challenge[5] = "M1 Bronze Commendation\t2500\t10000\tNone";
|
||||||
|
Challenge[6] = "M1 Silver Commendation\t5000\t25000\tNone";
|
||||||
|
Challenge[7] = "M1 Gold Commendation\t10000\t50000\tNone";
|
||||||
|
Challenge[8] = "M1 Titan Commendation\t25000\t75000\tNone";
|
||||||
|
Upgrade[1] = "Laser";
|
||||||
|
Upgrade[2] = "Silencer";
|
||||||
|
GunName = "M1 Sniper Rifle";
|
||||||
|
//
|
||||||
|
|
||||||
//ClipStuff
|
RankRequire = $TWM2::RankRequire["M1"];
|
||||||
ClipName = "M1Clip";
|
|
||||||
ClipPickupName["M1Clip"] = "A Few Boxes Of M1 Sniper Bullets";
|
|
||||||
ShowsClipInHud = 1;
|
|
||||||
ClipReloadTime = 5;
|
|
||||||
ClipReturn = 5;
|
|
||||||
InitialClips = 5;
|
|
||||||
//
|
|
||||||
//Challenges
|
|
||||||
HasChallenges = 1;
|
|
||||||
ChallengeCt = 8;
|
|
||||||
Challenge[1] = "M1 Hunter\t100\t150\tNone";
|
|
||||||
Challenge[2] = "M1 Expert\t200\t250\tNone";
|
|
||||||
Challenge[3] = "M1 Master\t500\t500\tLaser";
|
|
||||||
Challenge[4] = "M1 God\t1000\t1000\tSilencer";
|
|
||||||
Challenge[5] = "M1 Bronze Commendation\t2500\t10000\tNone";
|
|
||||||
Challenge[6] = "M1 Silver Commendation\t5000\t25000\tNone";
|
|
||||||
Challenge[7] = "M1 Gold Commendation\t10000\t50000\tNone";
|
|
||||||
Challenge[8] = "M1 Titan Commendation\t25000\t75000\tNone";
|
|
||||||
Upgrade[1] = "Laser";
|
|
||||||
Upgrade[2] = "Silencer";
|
|
||||||
GunName = "M1 Sniper Rifle";
|
|
||||||
//
|
|
||||||
|
|
||||||
RankRequire = $TWM2::RankRequire["M1"];
|
casing = ShellDebris;
|
||||||
|
shellExitDir = "1.0 0.3 1.0";
|
||||||
casing = ShellDebris;
|
shellExitOffset = "0.15 -0.56 -0.1";
|
||||||
shellExitDir = "1.0 0.3 1.0";
|
shellExitVariance = 15.0;
|
||||||
shellExitOffset = "0.15 -0.56 -0.1";
|
shellVelocity = 3.0;
|
||||||
shellExitVariance = 15.0;
|
|
||||||
shellVelocity = 3.0;
|
|
||||||
|
|
||||||
|
|
||||||
stateName[0] = "Activate";
|
stateName[0] = "Activate";
|
||||||
stateTransitionOnTimeout[0] = "ActivateReady";
|
stateTransitionOnTimeout[0] = "ActivateReady";
|
||||||
stateTimeoutValue[0] = 0.5;
|
stateTimeoutValue[0] = 0.5;
|
||||||
stateSequence[0] = "Activate";
|
stateSequence[0] = "Activate";
|
||||||
stateSound[0] = ChaingunSwitchSound;
|
stateSound[0] = ChaingunSwitchSound;
|
||||||
|
|
||||||
stateName[1] = "ActivateReady";
|
stateName[1] = "ActivateReady";
|
||||||
stateTransitionOnLoaded[1] = "Ready";
|
stateTransitionOnLoaded[1] = "Ready";
|
||||||
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
||||||
|
|
||||||
stateName[2] = "Ready";
|
stateName[2] = "Ready";
|
||||||
stateTransitionOnNoAmmo[2] = "NoAmmo";
|
stateTransitionOnNoAmmo[2] = "NoAmmo";
|
||||||
stateTransitionOnTriggerDown[2] = "CheckWet";
|
stateTransitionOnTriggerDown[2] = "CheckWet";
|
||||||
|
|
||||||
stateName[3] = "Fire";
|
stateName[3] = "Fire";
|
||||||
stateTransitionOnTimeout[3] = "Reload";
|
stateTransitionOnTimeout[3] = "Reload";
|
||||||
stateTimeoutValue[3] = 0.01;
|
stateTimeoutValue[3] = 0.01;
|
||||||
stateFire[3] = true;
|
stateFire[3] = true;
|
||||||
stateRecoil[3] = LightRecoil;
|
stateRecoil[3] = LightRecoil;
|
||||||
stateAllowImageChange[3] = false;
|
stateAllowImageChange[3] = false;
|
||||||
stateScript[3] = "onFire";
|
stateScript[3] = "onFire";
|
||||||
//stateSound[3] = "M1FireSound";
|
//stateSound[3] = "M1FireSound";
|
||||||
|
|
||||||
stateName[4] = "Reload";
|
stateName[4] = "Reload";
|
||||||
stateTransitionOnNoAmmo[4] = "NoAmmo";
|
stateTransitionOnNoAmmo[4] = "NoAmmo";
|
||||||
stateTransitionOnTimeout[4] = "Ready";
|
stateTransitionOnTimeout[4] = "Ready";
|
||||||
stateTimeoutValue[4] = 1.1;
|
stateTimeoutValue[4] = 0.9;
|
||||||
stateAllowImageChange[4] = false;
|
stateAllowImageChange[4] = false;
|
||||||
stateSequence[4] = "Reload";
|
stateSequence[4] = "Reload";
|
||||||
|
|
||||||
stateName[5] = "NoAmmo";
|
stateName[5] = "NoAmmo";
|
||||||
stateTransitionOnAmmo[5] = "Reload";
|
stateTransitionOnAmmo[5] = "Reload";
|
||||||
stateSequence[5] = "NoAmmo";
|
stateSequence[5] = "NoAmmo";
|
||||||
stateTransitionOnTriggerDown[5] = "DryFire";
|
stateTransitionOnTriggerDown[5] = "DryFire";
|
||||||
|
|
||||||
stateName[6] = "DryFire";
|
stateName[6] = "DryFire";
|
||||||
stateSound[6] = ChaingunDryFireSound;
|
stateSound[6] = ChaingunDryFireSound;
|
||||||
stateTimeoutValue[6] = 1.0;
|
stateTimeoutValue[6] = 1.0;
|
||||||
stateTransitionOnTimeout[6] = "NoAmmo";
|
stateTransitionOnTimeout[6] = "NoAmmo";
|
||||||
|
|
||||||
stateName[7] = "WetFire";
|
stateName[7] = "WetFire";
|
||||||
stateSound[7] = PlasmaFireWetSound;
|
stateSound[7] = PlasmaFireWetSound;
|
||||||
stateTimeoutValue[7] = 1.0;
|
stateTimeoutValue[7] = 1.0;
|
||||||
stateTransitionOnTimeout[7] = "Ready";
|
stateTransitionOnTimeout[7] = "Ready";
|
||||||
|
|
||||||
stateName[8] = "CheckWet";
|
stateName[8] = "CheckWet";
|
||||||
stateTransitionOnWet[8] = "WetFire";
|
stateTransitionOnWet[8] = "WetFire";
|
||||||
stateTransitionOnNotWet[8] = "Fire";
|
stateTransitionOnNotWet[8] = "Fire";
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ItemData(M1SniperRifle)
|
datablock ItemData(M1SniperRifle) {
|
||||||
{
|
className = Weapon;
|
||||||
className = Weapon;
|
catagory = "Spawn Items";
|
||||||
catagory = "Spawn Items";
|
shapeFile = "weapon_sniper.dts";
|
||||||
shapeFile = "weapon_sniper.dts";
|
image = M1SniperRifleImage;
|
||||||
image = M1SniperRifleImage;
|
mass = 1.0;
|
||||||
mass = 1.0;
|
elasticity = 0.0;
|
||||||
elasticity = 0.0;
|
friction = 0.6;
|
||||||
friction = 0.6;
|
pickupRadius = 2;
|
||||||
pickupRadius = 2;
|
pickUpName = "a M1 Sniper Rifle";
|
||||||
pickUpName = "a M1 Sniper Rifle";
|
|
||||||
|
|
||||||
computeCRC = true;
|
computeCRC = true;
|
||||||
emap = true;
|
emap = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
//Two images make the scope
|
//Two images make the scope
|
||||||
datablock ShapeBaseImageData(M1ScopeImage) : M1SniperRifleImage {
|
datablock ShapeBaseImageData(M1ScopeImage) : M1SniperRifleImage {
|
||||||
shapeFile = "turret_belly_barrell.dts";
|
shapeFile = "turret_belly_barrell.dts";
|
||||||
offset = "0 0.25 0.25";
|
offset = "0 0.25 0.25";
|
||||||
rotation = "1 0 0 180";
|
rotation = "1 0 0 180";
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ShapeBaseImageData(M1ScopeImage2) : M1SniperRifleImage {
|
datablock ShapeBaseImageData(M1ScopeImage2) : M1SniperRifleImage {
|
||||||
shapeFile = "turret_belly_barrell.dts";
|
shapeFile = "turret_belly_barrell.dts";
|
||||||
offset = "0 0.3 0.25";
|
offset = "0 0.3 0.25";
|
||||||
rotation = "1 0 0 0";
|
rotation = "1 0 0 0";
|
||||||
};
|
};
|
||||||
|
|
||||||
function M1SniperRifleImage::onMount(%this,%obj,%slot) {
|
function M1SniperRifleImage::onMount(%this,%obj,%slot) {
|
||||||
if(!$TWM2::AllowSnipers) {
|
if(!$TWM2::AllowSnipers) {
|
||||||
bottomPrint(%obj.client, "The host has disabled sniper weapons.", 2, 2);
|
bottomPrint(%obj.client, "The host has disabled sniper weapons.", 2, 2);
|
||||||
%obj.throwweapon(1);
|
%obj.throwweapon(1);
|
||||||
%obj.throwweapon(0);
|
%obj.throwweapon(0);
|
||||||
}
|
}
|
||||||
Parent::onMount(%this, %obj, %slot);
|
Parent::onMount(%this, %obj, %slot);
|
||||||
%obj.mountImage(M1ScopeImage, 5);
|
%obj.mountImage(M1ScopeImage, 5);
|
||||||
%obj.mountImage(M1ScopeImage2, 6);
|
%obj.mountImage(M1ScopeImage2, 6);
|
||||||
}
|
}
|
||||||
|
|
||||||
function M1SniperRifleImage::onUnmount(%this,%obj,%slot) {
|
function M1SniperRifleImage::onUnmount(%this,%obj,%slot) {
|
||||||
Parent::onUnmount(%this, %obj, %slot);
|
Parent::onUnmount(%this, %obj, %slot);
|
||||||
%obj.unmountImage(5);
|
%obj.unmountImage(5);
|
||||||
%obj.unmountImage(6);
|
%obj.unmountImage(6);
|
||||||
}
|
}
|
||||||
|
|
||||||
function M1SniperRifleImage::onFire(%data, %obj, %slot) {
|
function M1SniperRifleImage::onFire(%data, %obj, %slot) {
|
||||||
if(!$TWM2::AllowSnipers) {
|
if(!$TWM2::AllowSnipers) {
|
||||||
bottomPrint(%obj.client, "The host has disabled sniper weapons.", 2, 2);
|
bottomPrint(%obj.client, "The host has disabled sniper weapons.", 2, 2);
|
||||||
%obj.throwweapon(1);
|
%obj.throwweapon(1);
|
||||||
%obj.throwweapon(0);
|
%obj.throwweapon(0);
|
||||||
}
|
}
|
||||||
%p = Parent::onFire(%data, %obj, %slot);
|
%p = Parent::onFire(%data, %obj, %slot);
|
||||||
if(%obj.client.UpgradeOn("Silencer", %data.getName())) {
|
if(%obj.client.UpgradeOn("Silencer", %data.getName())) {
|
||||||
//zero sound :p
|
//zero sound :p
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
ServerPlay3d(M1FireSound, %obj.getPosition());
|
ServerPlay3d(M1FireSound, %obj.getPosition());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,267 +1,264 @@
|
||||||
datablock TracerProjectileData(M4A1Bullet) {
|
datablock TracerProjectileData(M4A1Bullet) {
|
||||||
doDynamicClientHits = true;
|
doDynamicClientHits = true;
|
||||||
|
|
||||||
directDamage = 0.09;
|
directDamage = 0.085;
|
||||||
directDamageType = $DamageType::M4A1;
|
directDamageType = $DamageType::M4A1;
|
||||||
explosion = "ChaingunExplosion";
|
explosion = "ChaingunExplosion";
|
||||||
splash = ChaingunSplash;
|
splash = ChaingunSplash;
|
||||||
HeadMultiplier = 1.25;
|
HeadMultiplier = 1.25;
|
||||||
LegsMultiplier = 0.75;
|
LegsMultiplier = 0.75;
|
||||||
|
|
||||||
kickBackStrength = 15.0;
|
kickBackStrength = 15.0;
|
||||||
sound = ChaingunProjectile;
|
sound = ChaingunProjectile;
|
||||||
|
|
||||||
ImageSource = "M4A1Image";
|
|
||||||
|
|
||||||
dryVelocity = 1750.0;
|
ImageSource = "M4A1Image";
|
||||||
wetVelocity = 1500.0;
|
|
||||||
velInheritFactor = 0.0;
|
|
||||||
fizzleTimeMS = 3000;
|
|
||||||
lifetimeMS = 3000;
|
|
||||||
explodeOnDeath = false;
|
|
||||||
reflectOnWaterImpactAngle = 0.0;
|
|
||||||
explodeOnWaterImpact = false;
|
|
||||||
deflectionOnWaterImpact = 0.0;
|
|
||||||
fizzleUnderwaterMS = 3000;
|
|
||||||
|
|
||||||
tracerLength = 9.0;
|
dryVelocity = 1750.0;
|
||||||
tracerAlpha = false;
|
wetVelocity = 1500.0;
|
||||||
tracerMinPixels = 6;
|
velInheritFactor = 0.0;
|
||||||
tracerColor = 211.0/255.0 @ " " @ 215.0/255.0 @ " " @ 120.0/255.0 @ " 0.75";
|
fizzleTimeMS = 3000;
|
||||||
|
lifetimeMS = 3000;
|
||||||
|
explodeOnDeath = false;
|
||||||
|
reflectOnWaterImpactAngle = 0.0;
|
||||||
|
explodeOnWaterImpact = false;
|
||||||
|
deflectionOnWaterImpact = 0.0;
|
||||||
|
fizzleUnderwaterMS = 3000;
|
||||||
|
|
||||||
|
tracerLength = 9.0;
|
||||||
|
tracerAlpha = false;
|
||||||
|
tracerMinPixels = 6;
|
||||||
|
tracerColor = 211.0/255.0 @ " " @ 215.0/255.0 @ " " @ 120.0/255.0 @ " 0.75";
|
||||||
tracerTex[0] = "special/tracer00";
|
tracerTex[0] = "special/tracer00";
|
||||||
tracerTex[1] = "special/tracercross";
|
tracerTex[1] = "special/tracercross";
|
||||||
tracerWidth = 0.09;
|
tracerWidth = 0.09;
|
||||||
crossSize = 0.20;
|
crossSize = 0.20;
|
||||||
crossViewAng = 0.990;
|
crossViewAng = 0.990;
|
||||||
renderCross = true;
|
renderCross = true;
|
||||||
|
|
||||||
decalData[0] = ChaingunDecal1;
|
decalData[0] = ChaingunDecal1;
|
||||||
decalData[1] = ChaingunDecal2;
|
decalData[1] = ChaingunDecal2;
|
||||||
decalData[2] = ChaingunDecal3;
|
decalData[2] = ChaingunDecal3;
|
||||||
decalData[3] = ChaingunDecal4;
|
decalData[3] = ChaingunDecal4;
|
||||||
decalData[4] = ChaingunDecal5;
|
decalData[4] = ChaingunDecal5;
|
||||||
decalData[5] = ChaingunDecal6;
|
decalData[5] = ChaingunDecal6;
|
||||||
};
|
};
|
||||||
|
|
||||||
//--------------------------------------------------------------------------
|
//--------------------------------------------------------------------------
|
||||||
// Ammo
|
// Ammo
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
|
|
||||||
datablock ItemData(M4A1Ammo)
|
datablock ItemData(M4A1Ammo) {
|
||||||
{
|
className = Ammo;
|
||||||
className = Ammo;
|
catagory = "Ammo";
|
||||||
catagory = "Ammo";
|
shapeFile = "ammo_chaingun.dts";
|
||||||
shapeFile = "ammo_chaingun.dts";
|
mass = 1;
|
||||||
mass = 1;
|
elasticity = 0.2;
|
||||||
elasticity = 0.2;
|
friction = 0.6;
|
||||||
friction = 0.6;
|
pickupRadius = 2;
|
||||||
pickupRadius = 2;
|
|
||||||
pickUpName = "some M4A1 ammo";
|
pickUpName = "some M4A1 ammo";
|
||||||
|
|
||||||
computeCRC = true;
|
computeCRC = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
//--------------------------------------------------------------------------
|
//--------------------------------------------------------------------------
|
||||||
// Weapon
|
// Weapon
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
datablock ShapeBaseImageData(M4A1Image)
|
datablock ShapeBaseImageData(M4A1Image) {
|
||||||
{
|
className = WeaponImage;
|
||||||
className = WeaponImage;
|
shapeFile = "weapon_energy_vehicle.dts";
|
||||||
shapeFile = "weapon_energy_vehicle.dts";
|
item = M4A1;
|
||||||
item = M4A1;
|
ammo = M4A1Ammo;
|
||||||
ammo = M4A1Ammo;
|
projectile = M4A1Bullet;
|
||||||
projectile = M4A1Bullet;
|
projectileType = TracerProjectile;
|
||||||
projectileType = TracerProjectile;
|
emap = true;
|
||||||
emap = true;
|
offset = "0 0.5 0"; // L/R - F/B - T/B
|
||||||
offset = "0 0.5 0"; // L/R - F/B - T/B
|
rotation = "0 1 0 180";
|
||||||
rotation = "0 1 0 180";
|
mass = 11;
|
||||||
mass = 11;
|
|
||||||
|
//ClipStuff
|
||||||
//ClipStuff
|
ClipName = "M4A1Clip";
|
||||||
ClipName = "M4A1Clip";
|
ClipPickupName["M4A1Clip"] = "some M4A1 Magazines";
|
||||||
ClipPickupName["M4A1Clip"] = "some M4A1 Magazines";
|
ShowsClipInHud = 1;
|
||||||
ShowsClipInHud = 1;
|
ClipReloadTime = 6;
|
||||||
ClipReloadTime = 4;
|
ClipReturn = 30;
|
||||||
ClipReturn = 30;
|
InitialClips = 7;
|
||||||
InitialClips = 7;
|
//
|
||||||
//
|
HasChallenges = 1;
|
||||||
HasChallenges = 1;
|
ChallengeCt = 11;
|
||||||
ChallengeCt = 11;
|
Challenge[1] = "M4A1 Killer\t50\t100\tGrip";
|
||||||
Challenge[1] = "M4A1 Killer\t50\t100\tGrip";
|
Challenge[2] = "M4A1 Hunter\t100\t250\tLaser";
|
||||||
Challenge[2] = "M4A1 Hunter\t100\t250\tLaser";
|
Challenge[3] = "M4A1 Expert\t250\t500\tShotgun Attachment";
|
||||||
Challenge[3] = "M4A1 Expert\t250\t500\tShotgun Attachment";
|
Challenge[4] = "M4A1 Master\t500\t1000\tGrenade Launcher Attachment";
|
||||||
Challenge[4] = "M4A1 Master\t500\t1000\tGrenade Launcher Attachment";
|
Challenge[5] = "M4A1 Legend\t750\t1500\tMini-Launcher Attachment";
|
||||||
Challenge[5] = "M4A1 Legend\t750\t1500\tMini-Launcher Attachment";
|
Challenge[6] = "M4A1 God\t1000\t2000\tSilencer";
|
||||||
Challenge[6] = "M4A1 God\t1000\t2000\tSilencer";
|
Challenge[7] = "M4A1 Supremacy\t2500\t5000\tUnlimited Attachment Ammo";
|
||||||
Challenge[7] = "M4A1 Supremacy\t2500\t5000\tUnlimited Attachment Ammo";
|
Challenge[8] = "M4A1 Bronze Commendation\t5000\t10000\tNone";
|
||||||
Challenge[8] = "M4A1 Bronze Commendation\t5000\t10000\tNone";
|
Challenge[9] = "M4A1 Silver Commendation\t12500\t25000\tNone";
|
||||||
Challenge[9] = "M4A1 Silver Commendation\t12500\t25000\tNone";
|
Challenge[10] = "M4A1 Gold Commendation\t25000\t50000\tNone";
|
||||||
Challenge[10] = "M4A1 Gold Commendation\t25000\t50000\tNone";
|
Challenge[11] = "M4A1 Titan Commendation\t50000\t75000\tNone";
|
||||||
Challenge[11] = "M4A1 Titan Commendation\t50000\t75000\tNone";
|
Upgrade[1] = "Grip";
|
||||||
Upgrade[1] = "Grip";
|
Upgrade[2] = "Laser";
|
||||||
Upgrade[2] = "Laser";
|
Upgrade[3] = "Shotgun Attachment";
|
||||||
Upgrade[3] = "Shotgun Attachment";
|
Upgrade[4] = "Grenade Launcher Attachment";
|
||||||
Upgrade[4] = "Grenade Launcher Attachment";
|
Upgrade[5] = "Mini-Launcher Attachment";
|
||||||
Upgrade[5] = "Mini-Launcher Attachment";
|
Upgrade[6] = "Silencer";
|
||||||
Upgrade[6] = "Silencer";
|
GunName = "M4A1 Assault Rifle";
|
||||||
GunName = "M4A1 Assault Rifle";
|
|
||||||
|
RankRequire = $TWM2::RankRequire["M4A1"];
|
||||||
RankRequire = $TWM2::RankRequire["M4A1"];
|
|
||||||
|
|
||||||
|
|
||||||
casing = ShellDebris;
|
casing = ShellDebris;
|
||||||
shellExitDir = "1.0 0.3 1.0";
|
shellExitDir = "1.0 0.3 1.0";
|
||||||
shellExitOffset = "0.15 -0.56 -0.1";
|
shellExitOffset = "0.15 -0.56 -0.1";
|
||||||
shellExitVariance = 15.0;
|
shellExitVariance = 15.0;
|
||||||
shellVelocity = 3.0;
|
shellVelocity = 3.0;
|
||||||
|
|
||||||
projectileSpread = 8.0 / 1000.0;
|
projectileSpread = 8.0 / 1000.0;
|
||||||
|
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
stateName[0] = "Activate";
|
stateName[0] = "Activate";
|
||||||
stateSequence[0] = "Activate";
|
stateSequence[0] = "Activate";
|
||||||
stateSound[0] = ChaingunSwitchSound;
|
stateSound[0] = ChaingunSwitchSound;
|
||||||
stateAllowImageChange[0] = false;
|
stateAllowImageChange[0] = false;
|
||||||
//
|
//
|
||||||
stateTimeoutValue[0] = 0.5;
|
stateTimeoutValue[0] = 0.5;
|
||||||
stateTransitionOnTimeout[0] = "Ready";
|
stateTransitionOnTimeout[0] = "Ready";
|
||||||
stateTransitionOnNoAmmo[0] = "NoAmmo";
|
stateTransitionOnNoAmmo[0] = "NoAmmo";
|
||||||
|
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
stateName[1] = "Ready";
|
stateName[1] = "Ready";
|
||||||
stateSpinThread[1] = Stop;
|
stateSpinThread[1] = Stop;
|
||||||
//
|
//
|
||||||
stateTransitionOnTriggerDown[1] = "Spinup";
|
stateTransitionOnTriggerDown[1] = "Spinup";
|
||||||
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
||||||
|
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
stateName[2] = "NoAmmo";
|
stateName[2] = "NoAmmo";
|
||||||
stateTransitionOnAmmo[2] = "Ready";
|
stateTransitionOnAmmo[2] = "Ready";
|
||||||
stateSpinThread[2] = Stop;
|
stateSpinThread[2] = Stop;
|
||||||
stateTransitionOnTriggerDown[2] = "DryFire";
|
stateTransitionOnTriggerDown[2] = "DryFire";
|
||||||
|
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
stateName[3] = "Spinup";
|
stateName[3] = "Spinup";
|
||||||
stateSpinThread[3] = SpinUp;
|
stateSpinThread[3] = SpinUp;
|
||||||
stateSound[3] = ChaingunSpinupSound;
|
stateSound[3] = ChaingunSpinupSound;
|
||||||
//
|
//
|
||||||
stateTimeoutValue[3] = 0.01;
|
stateTimeoutValue[3] = 0.01;
|
||||||
stateWaitForTimeout[3] = false;
|
stateWaitForTimeout[3] = false;
|
||||||
stateTransitionOnTimeout[3] = "Fire";
|
stateTransitionOnTimeout[3] = "Fire";
|
||||||
stateTransitionOnTriggerUp[3] = "Spindown";
|
stateTransitionOnTriggerUp[3] = "Spindown";
|
||||||
|
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
stateName[4] = "Fire";
|
stateName[4] = "Fire";
|
||||||
stateSequence[4] = "Fire";
|
stateSequence[4] = "Fire";
|
||||||
stateSequenceRandomFlash[4] = true;
|
stateSequenceRandomFlash[4] = true;
|
||||||
stateSpinThread[4] = FullSpeed;
|
stateSpinThread[4] = FullSpeed;
|
||||||
//stateSound[4] = ChaingunFireSound;
|
//stateSound[4] = ChaingunFireSound;
|
||||||
stateRecoil[4] = LightRecoil;
|
stateRecoil[4] = LightRecoil;
|
||||||
stateAllowImageChange[4] = false;
|
stateAllowImageChange[4] = false;
|
||||||
stateScript[4] = "onFire";
|
stateScript[4] = "onFire";
|
||||||
stateFire[4] = true;
|
stateFire[4] = true;
|
||||||
stateEjectShell[4] = true;
|
stateEjectShell[4] = true;
|
||||||
//
|
//
|
||||||
stateTimeoutValue[4] = 0.08;
|
stateTimeoutValue[4] = 0.08;
|
||||||
stateTransitionOnTimeout[4] = "Fire";
|
stateTransitionOnTimeout[4] = "Fire";
|
||||||
stateTransitionOnTriggerUp[4] = "Spindown";
|
stateTransitionOnTriggerUp[4] = "Spindown";
|
||||||
stateTransitionOnNoAmmo[4] = "EmptySpindown";
|
stateTransitionOnNoAmmo[4] = "EmptySpindown";
|
||||||
|
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
stateName[5] = "Spindown";
|
stateName[5] = "Spindown";
|
||||||
stateSound[5] = ChaingunSpinDownSound;
|
stateSound[5] = ChaingunSpinDownSound;
|
||||||
stateSpinThread[5] = SpinDown;
|
stateSpinThread[5] = SpinDown;
|
||||||
//
|
//
|
||||||
stateTimeoutValue[5] = 0.05;
|
stateTimeoutValue[5] = 0.05;
|
||||||
stateWaitForTimeout[5] = true;
|
stateWaitForTimeout[5] = true;
|
||||||
stateTransitionOnTimeout[5] = "Ready";
|
stateTransitionOnTimeout[5] = "Ready";
|
||||||
stateTransitionOnTriggerDown[5] = "Spinup";
|
stateTransitionOnTriggerDown[5] = "Spinup";
|
||||||
|
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
stateName[6] = "EmptySpindown";
|
stateName[6] = "EmptySpindown";
|
||||||
stateSound[6] = ChaingunSpinDownSound;
|
stateSound[6] = ChaingunSpinDownSound;
|
||||||
stateSpinThread[6] = SpinDown;
|
stateSpinThread[6] = SpinDown;
|
||||||
//
|
//
|
||||||
stateTimeoutValue[6] = 0.5;
|
stateTimeoutValue[6] = 0.5;
|
||||||
stateTransitionOnTimeout[6] = "NoAmmo";
|
stateTransitionOnTimeout[6] = "NoAmmo";
|
||||||
|
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
stateName[7] = "DryFire";
|
stateName[7] = "DryFire";
|
||||||
stateSound[7] = ChaingunDryFireSound;
|
stateSound[7] = ChaingunDryFireSound;
|
||||||
stateTimeoutValue[7] = 0.5;
|
stateTimeoutValue[7] = 0.5;
|
||||||
stateTransitionOnTimeout[7] = "NoAmmo";
|
stateTransitionOnTimeout[7] = "NoAmmo";
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ItemData(M4A1)
|
datablock ItemData(M4A1) {
|
||||||
{
|
className = Weapon;
|
||||||
className = Weapon;
|
catagory = "Spawn Items";
|
||||||
catagory = "Spawn Items";
|
shapeFile = "weapon_energy_vehicle.dts";
|
||||||
shapeFile = "weapon_energy_vehicle.dts";
|
image = M4A1Image;
|
||||||
image = M4A1Image;
|
mass = 1.0;
|
||||||
mass = 1.0;
|
elasticity = 0.2;
|
||||||
elasticity = 0.2;
|
friction = 0.6;
|
||||||
friction = 0.6;
|
pickupRadius = 2;
|
||||||
pickupRadius = 2;
|
pickUpName = "an M4A1";
|
||||||
pickUpName = "an M4A1";
|
|
||||||
|
|
||||||
computeCRC = true;
|
computeCRC = true;
|
||||||
emap = true;
|
emap = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
function M4A1::onInventory(%this,%obj,%amount) {
|
function M4A1::onInventory(%this,%obj,%amount) {
|
||||||
Parent::onInventory(%this, %obj, %amount);
|
Parent::onInventory(%this, %obj, %amount);
|
||||||
%obj.canUseM4A1Attachment = 1;
|
%obj.canUseM4A1Attachment = 1;
|
||||||
if(%obj.client.UpgradeOn("Shotgun Attachment", M4A1Image)) {
|
if(%obj.client.UpgradeOn("Shotgun Attachment", M4A1Image)) {
|
||||||
%obj.M4A1ShotgunClip = 5;
|
%obj.M4A1ShotgunClip = 5;
|
||||||
}
|
}
|
||||||
if(%obj.client.UpgradeOn("Grenade Launcher Attachment", M4A1Image)) {
|
if(%obj.client.UpgradeOn("Grenade Launcher Attachment", M4A1Image)) {
|
||||||
%obj.M4A1GLClip = 3;
|
%obj.M4A1GLClip = 3;
|
||||||
}
|
}
|
||||||
if(%obj.client.UpgradeOn("Mini-Launcher Attachment", M4A1Image)) {
|
if(%obj.client.UpgradeOn("Mini-Launcher Attachment", M4A1Image)) {
|
||||||
%obj.M4A1MLClip = 3;
|
%obj.M4A1MLClip = 3;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
datablock ShapeBaseImageData(M4A1BarrelImage) {
|
datablock ShapeBaseImageData(M4A1BarrelImage) {
|
||||||
ammo = M4A1Ammo;
|
ammo = M4A1Ammo;
|
||||||
shapeFile = "weapon_targeting.dts";
|
shapeFile = "weapon_targeting.dts";
|
||||||
offset = "0.0 0.0 0.0";
|
offset = "0.0 0.0 0.0";
|
||||||
emap = true;
|
emap = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ShapeBaseImageData(M4A1ScopeImage) {
|
datablock ShapeBaseImageData(M4A1ScopeImage) {
|
||||||
className = WeaponImage;
|
className = WeaponImage;
|
||||||
shapeFile = "weapon_targeting.dts";
|
shapeFile = "weapon_targeting.dts";
|
||||||
offset = "0.0 1.4 0.4";
|
offset = "0.0 1.4 0.4";
|
||||||
rotation = "180 0 0 90";
|
rotation = "180 0 0 90";
|
||||||
|
|
||||||
ammo = M4A1Ammo;
|
ammo = M4A1Ammo;
|
||||||
|
|
||||||
emap = true;
|
emap = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
function M4A1Image::onMount(%this,%obj,%slot) {
|
function M4A1Image::onMount(%this,%obj,%slot) {
|
||||||
Parent::onMount(%this, %obj, %slot);
|
Parent::onMount(%this, %obj, %slot);
|
||||||
%obj.mountImage(M4A1BarrelImage, 3);
|
%obj.mountImage(M4A1BarrelImage, 3);
|
||||||
%obj.mountImage(M4A1ScopeImage, 4);
|
%obj.mountImage(M4A1ScopeImage, 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
function M4A1Image::onUnmount(%this,%obj,%slot) {
|
function M4A1Image::onUnmount(%this,%obj,%slot) {
|
||||||
Parent::onUnmount(%this, %obj, %slot);
|
Parent::onUnmount(%this, %obj, %slot);
|
||||||
%obj.unmountImage(3);
|
%obj.unmountImage(3);
|
||||||
%obj.unmountImage(4);
|
%obj.unmountImage(4);
|
||||||
}
|
}
|
||||||
|
|
||||||
function M4A1Image::onFire(%data, %obj, %slot) {
|
function M4A1Image::onFire(%data, %obj, %slot) {
|
||||||
%p = Parent::onFire(%data, %obj, %slot);
|
%p = Parent::onFire(%data, %obj, %slot);
|
||||||
if(%obj.client.UpgradeOn("Silencer", %data.getName())) {
|
if(%obj.client.UpgradeOn("Silencer", %data.getName())) {
|
||||||
//zero sound :p
|
//zero sound :p
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
ServerPlay3d(ChaingunFireSound, %obj.getPosition());
|
ServerPlay3d(ChaingunFireSound, %obj.getPosition());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function M4A1RefreshAttachment(%obj) {
|
function M4A1RefreshAttachment(%obj) {
|
||||||
%obj.canUseM4A1Attachment = 1;
|
%obj.canUseM4A1Attachment = 1;
|
||||||
}
|
}
|
||||||
|
|
@ -1,176 +1,171 @@
|
||||||
datablock TracerProjectileData(PulseRifleBullet) {
|
datablock TracerProjectileData(PulseRifleBullet) {
|
||||||
doDynamicClientHits = true;
|
doDynamicClientHits = true;
|
||||||
|
|
||||||
directDamage = 0.2;
|
directDamage = 0.38;
|
||||||
explosion = "BlasterExplosion";
|
explosion = "BlasterExplosion";
|
||||||
splash = ChaingunSplash;
|
splash = ChaingunSplash;
|
||||||
|
|
||||||
directDamageType = $DamageType::ShrikeBlaster;
|
directDamageType = $DamageType::ShrikeBlaster;
|
||||||
kickBackStrength = 0.0;
|
kickBackStrength = 0.0;
|
||||||
|
|
||||||
sound = ShrikeBlasterProjectileSound;
|
sound = ShrikeBlasterProjectileSound;
|
||||||
|
|
||||||
ImageSource = "PulseRifleImage";
|
|
||||||
|
|
||||||
dryVelocity = 425.0;
|
ImageSource = "PulseRifleImage";
|
||||||
wetVelocity = 100.0;
|
|
||||||
velInheritFactor = 1.0;
|
|
||||||
fizzleTimeMS = 1000;
|
|
||||||
lifetimeMS = 1000;
|
|
||||||
explodeOnDeath = false;
|
|
||||||
reflectOnWaterImpactAngle = 0.0;
|
|
||||||
explodeOnWaterImpact = false;
|
|
||||||
deflectionOnWaterImpact = 0.0;
|
|
||||||
fizzleUnderwaterMS = 3000;
|
|
||||||
|
|
||||||
tracerLength = 45.0;
|
dryVelocity = 425.0;
|
||||||
tracerAlpha = false;
|
wetVelocity = 100.0;
|
||||||
tracerMinPixels = 6;
|
velInheritFactor = 1.0;
|
||||||
tracerColor = "1.0 0.0 0.0 0.0";
|
fizzleTimeMS = 1000;
|
||||||
|
lifetimeMS = 1000;
|
||||||
|
explodeOnDeath = false;
|
||||||
|
reflectOnWaterImpactAngle = 0.0;
|
||||||
|
explodeOnWaterImpact = false;
|
||||||
|
deflectionOnWaterImpact = 0.0;
|
||||||
|
fizzleUnderwaterMS = 3000;
|
||||||
|
|
||||||
|
tracerLength = 45.0;
|
||||||
|
tracerAlpha = false;
|
||||||
|
tracerMinPixels = 6;
|
||||||
|
tracerColor = "1.0 0.0 0.0 0.0";
|
||||||
tracerTex[0] = "special/shrikeBolt";
|
tracerTex[0] = "special/shrikeBolt";
|
||||||
tracerTex[1] = "special/shrikeBoltCross";
|
tracerTex[1] = "special/shrikeBoltCross";
|
||||||
tracerWidth = 0.55;
|
tracerWidth = 0.55;
|
||||||
crossSize = 0.99;
|
crossSize = 0.99;
|
||||||
crossViewAng = 0.990;
|
crossViewAng = 0.990;
|
||||||
renderCross = true;
|
renderCross = true;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ItemData(PulseRifleAmmo)
|
datablock ItemData(PulseRifleAmmo) {
|
||||||
{
|
className = Ammo;
|
||||||
className = Ammo;
|
catagory = "Ammo";
|
||||||
catagory = "Ammo";
|
shapeFile = "ammo_chaingun.dts";
|
||||||
shapeFile = "ammo_chaingun.dts";
|
mass = 1;
|
||||||
mass = 1;
|
elasticity = 0.2;
|
||||||
elasticity = 0.2;
|
friction = 0.6;
|
||||||
friction = 0.6;
|
pickupRadius = 2;
|
||||||
pickupRadius = 2;
|
|
||||||
pickUpName = "Some Pulse Rifle Bullets";
|
pickUpName = "Some Pulse Rifle Bullets";
|
||||||
|
|
||||||
computeCRC = true;
|
computeCRC = true;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ShapeBaseImageData(PulseRifleImage)
|
datablock ShapeBaseImageData(PulseRifleImage) {
|
||||||
{
|
className = WeaponImage;
|
||||||
className = WeaponImage;
|
shapeFile = "weapon_sniper.dts";
|
||||||
shapeFile = "weapon_sniper.dts";
|
mass = 10;
|
||||||
mass = 10;
|
item = PulseRifle;
|
||||||
item = PulseRifle;
|
ammo = PulseRifleAmmo;
|
||||||
ammo = PulseRifleAmmo;
|
projectile = PulseRifleBullet;
|
||||||
projectile = PulseRifleBullet;
|
projectileType = TracerProjectile;
|
||||||
projectileType = TracerProjectile;
|
emap = true;
|
||||||
emap = true;
|
|
||||||
|
|
||||||
//ClipStuff
|
//ClipStuff
|
||||||
ClipName = "PulseRifleClip";
|
ClipName = "PulseRifleClip";
|
||||||
ClipPickupName["PulseRifleClip"] = "some Pulse Clip Cartons";
|
ClipPickupName["PulseRifleClip"] = "some Pulse Clip Cartons";
|
||||||
ShowsClipInHud = 1;
|
ShowsClipInHud = 1;
|
||||||
ClipReloadTime = 5;
|
ClipReloadTime = 5;
|
||||||
ClipReturn = 20;
|
ClipReturn = 20;
|
||||||
InitialClips = 7;
|
InitialClips = 7;
|
||||||
//
|
//
|
||||||
//Challenges
|
//Challenges
|
||||||
HasChallenges = 1;
|
HasChallenges = 1;
|
||||||
ChallengeCt = 8;
|
ChallengeCt = 8;
|
||||||
Challenge[1] = "Pulse Hunter\t75\t150\tNone";
|
Challenge[1] = "Pulse Hunter\t75\t150\tNone";
|
||||||
Challenge[2] = "Pulse Expert\t150\t250\tGrip";
|
Challenge[2] = "Pulse Expert\t150\t250\tGrip";
|
||||||
Challenge[3] = "Pulse Master\t350\t500\tLaser";
|
Challenge[3] = "Pulse Master\t350\t500\tLaser";
|
||||||
Challenge[4] = "Pulse God\t600\t1000\tSilencer";
|
Challenge[4] = "Pulse God\t600\t1000\tSilencer";
|
||||||
Challenge[5] = "Pulse Bronze Commendation\t2500\t10000\tNone";
|
Challenge[5] = "Pulse Bronze Commendation\t2500\t10000\tNone";
|
||||||
Challenge[6] = "Pulse Silver Commendation\t5000\t25000\tNone";
|
Challenge[6] = "Pulse Silver Commendation\t5000\t25000\tNone";
|
||||||
Challenge[7] = "Pulse Gold Commendation\t10000\t50000\tNone";
|
Challenge[7] = "Pulse Gold Commendation\t10000\t50000\tNone";
|
||||||
Challenge[8] = "Pulse Titan Commendation\t25000\t75000\tNone";
|
Challenge[8] = "Pulse Titan Commendation\t25000\t75000\tNone";
|
||||||
Upgrade[1] = "Grip";
|
Upgrade[1] = "Grip";
|
||||||
Upgrade[2] = "Laser";
|
Upgrade[2] = "Laser";
|
||||||
Upgrade[3] = "Silencer";
|
Upgrade[3] = "Silencer";
|
||||||
GunName = "Pulse Semi-Automatic Rifle";
|
GunName = "Pulse Semi-Automatic Rifle";
|
||||||
//
|
//
|
||||||
|
|
||||||
//RankRequire = $TWM2::RankRequire["G41"];
|
//RankRequire = $TWM2::RankRequire["G41"];
|
||||||
PrestigeRequire = 2;
|
PrestigeRequire = 2;
|
||||||
|
|
||||||
casing = ShellDebris;
|
casing = ShellDebris;
|
||||||
shellExitDir = "1.0 0.3 1.0";
|
shellExitDir = "1.0 0.3 1.0";
|
||||||
shellExitOffset = "0.15 -0.56 -0.1";
|
shellExitOffset = "0.15 -0.56 -0.1";
|
||||||
shellExitVariance = 15.0;
|
shellExitVariance = 15.0;
|
||||||
shellVelocity = 3.0;
|
shellVelocity = 3.0;
|
||||||
|
|
||||||
projectileSpread = 2.0 / 1000.0;
|
projectileSpread = 2.0 / 1000.0;
|
||||||
|
|
||||||
stateName[0] = "Activate";
|
stateName[0] = "Activate";
|
||||||
stateTransitionOnTimeout[0] = "ActivateReady";
|
stateTransitionOnTimeout[0] = "ActivateReady";
|
||||||
stateTimeoutValue[0] = 0.5;
|
stateTimeoutValue[0] = 0.5;
|
||||||
stateSequence[0] = "Activate";
|
stateSequence[0] = "Activate";
|
||||||
stateSound[0] = ChaingunSwitchSound;
|
stateSound[0] = ChaingunSwitchSound;
|
||||||
|
|
||||||
stateName[1] = "ActivateReady";
|
stateName[1] = "ActivateReady";
|
||||||
stateTransitionOnLoaded[1] = "Ready";
|
stateTransitionOnLoaded[1] = "Ready";
|
||||||
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
||||||
|
|
||||||
stateName[2] = "Ready";
|
stateName[2] = "Ready";
|
||||||
stateTransitionOnNoAmmo[2] = "NoAmmo";
|
stateTransitionOnNoAmmo[2] = "NoAmmo";
|
||||||
stateTransitionOnTriggerDown[2] = "CheckWet";
|
stateTransitionOnTriggerDown[2] = "CheckWet";
|
||||||
|
|
||||||
stateName[3] = "Fire";
|
stateName[3] = "Fire";
|
||||||
stateTransitionOnTimeout[3] = "Reload";
|
stateTransitionOnTimeout[3] = "Reload";
|
||||||
stateTimeoutValue[3] = 0.01;
|
stateTimeoutValue[3] = 0.01;
|
||||||
stateFire[3] = true;
|
stateFire[3] = true;
|
||||||
stateRecoil[3] = LightRecoil;
|
stateRecoil[3] = LightRecoil;
|
||||||
stateAllowImageChange[3] = false;
|
stateAllowImageChange[3] = false;
|
||||||
stateScript[3] = "onFire";
|
stateScript[3] = "onFire";
|
||||||
stateEmitterTime[3] = 0.2;
|
stateEmitterTime[3] = 0.2;
|
||||||
//stateSound[3] = S3FireSound;
|
//stateSound[3] = S3FireSound;
|
||||||
|
|
||||||
stateName[4] = "Reload";
|
stateName[4] = "Reload";
|
||||||
stateTransitionOnNoAmmo[4] = "NoAmmo";
|
stateTransitionOnNoAmmo[4] = "NoAmmo";
|
||||||
stateTransitionOnTimeout[4] = "Ready";
|
stateTransitionOnTimeout[4] = "Ready";
|
||||||
stateTimeoutValue[4] = 0.3;
|
stateTimeoutValue[4] = 0.1;
|
||||||
stateAllowImageChange[4] = false;
|
stateAllowImageChange[4] = false;
|
||||||
stateSequence[4] = "Reload";
|
stateSequence[4] = "Reload";
|
||||||
|
|
||||||
stateName[5] = "NoAmmo";
|
stateName[5] = "NoAmmo";
|
||||||
stateTransitionOnAmmo[5] = "Reload";
|
stateTransitionOnAmmo[5] = "Reload";
|
||||||
stateSequence[5] = "NoAmmo";
|
stateSequence[5] = "NoAmmo";
|
||||||
stateTransitionOnTriggerDown[5] = "DryFire";
|
stateTransitionOnTriggerDown[5] = "DryFire";
|
||||||
|
|
||||||
stateName[6] = "DryFire";
|
stateName[6] = "DryFire";
|
||||||
stateSound[6] = ChaingunDryFireSound;
|
stateSound[6] = ChaingunDryFireSound;
|
||||||
stateTimeoutValue[6] = 1.0;
|
stateTimeoutValue[6] = 1.0;
|
||||||
stateTransitionOnTimeout[6] = "NoAmmo";
|
stateTransitionOnTimeout[6] = "NoAmmo";
|
||||||
|
|
||||||
stateName[7] = "WetFire";
|
stateName[7] = "WetFire";
|
||||||
stateSound[7] = PlasmaFireWetSound;
|
stateSound[7] = PlasmaFireWetSound;
|
||||||
stateTimeoutValue[7] = 1.0;
|
stateTimeoutValue[7] = 1.0;
|
||||||
stateTransitionOnTimeout[7] = "Ready";
|
stateTransitionOnTimeout[7] = "Ready";
|
||||||
|
|
||||||
stateName[8] = "CheckWet";
|
stateName[8] = "CheckWet";
|
||||||
stateTransitionOnWet[8] = "WetFire";
|
stateTransitionOnWet[8] = "WetFire";
|
||||||
stateTransitionOnNotWet[8] = "Fire";
|
stateTransitionOnNotWet[8] = "Fire";
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ItemData(PulseRifle)
|
datablock ItemData(PulseRifle) {
|
||||||
{
|
className = Weapon;
|
||||||
className = Weapon;
|
catagory = "Spawn Items";
|
||||||
catagory = "Spawn Items";
|
shapeFile = "weapon_sniper.dts";
|
||||||
shapeFile = "weapon_sniper.dts";
|
image = PulseRifleImage;
|
||||||
image = PulseRifleImage;
|
mass = 1.0;
|
||||||
mass = 1.0;
|
elasticity = 0.0;
|
||||||
elasticity = 0.0;
|
friction = 0.6;
|
||||||
friction = 0.6;
|
pickupRadius = 2;
|
||||||
pickupRadius = 2;
|
pickUpName = "an Pulse Semi-Automatic Rifle";
|
||||||
pickUpName = "an Pulse Semi-Automatic Rifle";
|
|
||||||
|
|
||||||
computeCRC = true;
|
computeCRC = true;
|
||||||
emap = true;
|
emap = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
function PulseRifleImage::onFire(%data, %obj, %slot) {
|
function PulseRifleImage::onFire(%data, %obj, %slot) {
|
||||||
%p = Parent::onFire(%data, %obj, %slot);
|
%p = Parent::onFire(%data, %obj, %slot);
|
||||||
if(%obj.client.UpgradeOn("Silencer", %data.getName())) {
|
if(%obj.client.UpgradeOn("Silencer", %data.getName())) {
|
||||||
//zero sound :p
|
//zero sound :p
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
ServerPlay3d(S3FireSound, %obj.getPosition());
|
ServerPlay3d(S3FireSound, %obj.getPosition());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,111 +1,90 @@
|
||||||
datablock AudioProfile(R700FireSound) {
|
datablock AudioProfile(R700FireSound) {
|
||||||
filename = "fx/weapons/cg_metal3.wav";
|
filename = "fx/weapons/cg_metal3.wav";
|
||||||
description = AudioDefault3d;
|
description = AudioDefault3d;
|
||||||
preload = true;
|
preload = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ParticleData(R700SmokeParticle)
|
datablock ParticleData(R700SmokeParticle) {
|
||||||
{
|
dragCoeffiecient = 0.0;
|
||||||
dragCoeffiecient = 0.0;
|
gravityCoefficient = -0.02;
|
||||||
gravityCoefficient = -0.02;
|
inheritedVelFactor = 0.1;
|
||||||
inheritedVelFactor = 0.1;
|
|
||||||
|
|
||||||
lifetimeMS = 1200;
|
lifetimeMS = 1200;
|
||||||
lifetimeVarianceMS = 100;
|
lifetimeVarianceMS = 100;
|
||||||
|
|
||||||
textureName = "particleTest";
|
textureName = "particleTest";
|
||||||
|
|
||||||
useInvAlpha = false;
|
useInvAlpha = false;
|
||||||
spinRandomMin = -90.0;
|
spinRandomMin = -90.0;
|
||||||
spinRandomMax = 90.0;
|
spinRandomMax = 90.0;
|
||||||
|
|
||||||
colors[0] = "1 1 1";
|
|
||||||
colors[1] = "1 1 1";
|
|
||||||
colors[2] = "1 1 1";
|
|
||||||
sizes[0] = 1;
|
|
||||||
sizes[1] = 1.2;
|
|
||||||
sizes[2] = 1.4;
|
|
||||||
times[0] = 0.0;
|
|
||||||
times[1] = 0.1;
|
|
||||||
times[2] = 1.0;
|
|
||||||
|
|
||||||
|
colors[0] = "1 1 1";
|
||||||
|
colors[1] = "1 1 1";
|
||||||
|
colors[2] = "1 1 1";
|
||||||
|
sizes[0] = 1;
|
||||||
|
sizes[1] = 1.2;
|
||||||
|
sizes[2] = 1.4;
|
||||||
|
times[0] = 0.0;
|
||||||
|
times[1] = 0.1;
|
||||||
|
times[2] = 1.0;
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ParticleEmitterData(R700SmokeEmitter)
|
datablock ParticleEmitterData(R700SmokeEmitter) {
|
||||||
{
|
ejectionPeriodMS = 10;
|
||||||
ejectionPeriodMS = 10;
|
periodVarianceMS = 0;
|
||||||
periodVarianceMS = 0;
|
|
||||||
|
|
||||||
ejectionVelocity = 1.5;
|
ejectionVelocity = 1.5;
|
||||||
velocityVariance = 0.3;
|
velocityVariance = 0.3;
|
||||||
|
|
||||||
thetaMin = 0.0;
|
thetaMin = 0.0;
|
||||||
thetaMax = 50.0;
|
thetaMax = 50.0;
|
||||||
|
|
||||||
particles = "R700SmokeParticle";
|
particles = "R700SmokeParticle";
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock LinearFlareProjectileData(R700Bullet)
|
datablock GrenadeProjectileData(R700Bullet) {
|
||||||
{
|
projectileShapeName = "weapon_missile_projectile.dts";
|
||||||
projectileShapeName = "weapon_missile_projectile.dts";
|
emitterDelay = -1;
|
||||||
scale = "1.0 1.0 1.0";
|
directDamage = 0.62;
|
||||||
faceViewer = true;
|
hasDamageRadius = false;
|
||||||
directDamage = 0.62;
|
directDamageType = $DamageType::R700;
|
||||||
kickBackStrength = 6400;
|
kickBackStrength = 6400;
|
||||||
radiusDamageType = $DamageType::R700;
|
bubbleEmitTime = 1.0;
|
||||||
|
|
||||||
HeadMultiplier = 1.5;
|
|
||||||
LegsMultiplier = 0.35;
|
|
||||||
|
|
||||||
HeadShotKill = 1;
|
HeadMultiplier = 1.5;
|
||||||
|
LegsMultiplier = 0.35;
|
||||||
|
|
||||||
ImageSource = "R700SniperRifleImage";
|
HeadShotKill = 1;
|
||||||
|
|
||||||
explosion = "ChaingunExplosion";
|
ImageSource = "R700SniperRifleImage";
|
||||||
splash = ChaingunSplash;
|
|
||||||
|
|
||||||
baseEmitter = R700SmokeEmitter;
|
sound = ChaingunProjectile;
|
||||||
|
explosion = "ChaingunExplosion";
|
||||||
|
underwaterExplosion = "ChaingunExplosion";
|
||||||
|
velInheritFactor = 0.5;
|
||||||
|
splash = ChaingunSplash;
|
||||||
|
|
||||||
dryVelocity = 2000.0;
|
baseEmitter = R700SmokeEmitter;
|
||||||
wetVelocity = 2000.0;
|
bubbleEmitter = R700SmokeEmitter;
|
||||||
velInheritFactor = 1.0;
|
|
||||||
fizzleTimeMS = 1000;
|
|
||||||
lifetimeMS = 1000;
|
|
||||||
explodeOnDeath = false;
|
|
||||||
reflectOnWaterImpactAngle = 0.0;
|
|
||||||
explodeOnWaterImpact = false;
|
|
||||||
deflectionOnWaterImpact = 0.0;
|
|
||||||
fizzleUnderwaterMS = 3000;
|
|
||||||
|
|
||||||
//activateDelayMS = 100;
|
grenadeElasticity = 0.35;
|
||||||
activateDelayMS = -1;
|
grenadeFriction = 0.2;
|
||||||
|
armingDelayMS = 1;
|
||||||
size[0] = 0.2;
|
muzzleVelocity = 2000.00;
|
||||||
size[1] = 0.5;
|
drag = 0.1;
|
||||||
size[2] = 0.1;
|
|
||||||
|
|
||||||
numFlares = 5; //less flares = less lag
|
|
||||||
flareColor = "1 0.18 0.03";
|
|
||||||
flareModTexture = "flaremod";
|
|
||||||
flareBaseTexture = "flarebase";
|
|
||||||
|
|
||||||
hasLight = true;
|
|
||||||
lightRadius = 10.0;
|
|
||||||
lightColor = "0.94 0.03 0.12";
|
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ItemData(R700SniperRifleAmmo)
|
datablock ItemData(R700SniperRifleAmmo) {
|
||||||
{
|
className = Ammo;
|
||||||
className = Ammo;
|
catagory = "Ammo";
|
||||||
catagory = "Ammo";
|
shapeFile = "ammo_chaingun.dts";
|
||||||
shapeFile = "ammo_chaingun.dts";
|
mass = 1;
|
||||||
mass = 1;
|
elasticity = 0.2;
|
||||||
elasticity = 0.2;
|
friction = 0.6;
|
||||||
friction = 0.6;
|
pickupRadius = 2;
|
||||||
pickupRadius = 2;
|
|
||||||
pickUpName = "Some R700 Sniper Rifle Ammo";
|
pickUpName = "Some R700 Sniper Rifle Ammo";
|
||||||
|
|
||||||
computeCRC = true;
|
computeCRC = true;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -113,156 +92,154 @@ datablock ItemData(R700SniperRifleAmmo)
|
||||||
// Weapon
|
// Weapon
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
datablock ShapeBaseImageData(R700SniperRifleImage) {
|
datablock ShapeBaseImageData(R700SniperRifleImage) {
|
||||||
|
className = WeaponImage;
|
||||||
|
shapeFile = "weapon_sniper.dts";
|
||||||
|
mass = 10;
|
||||||
|
item = R700SniperRifle;
|
||||||
|
ammo = R700SniperRifleAmmo;
|
||||||
|
projectile = R700Bullet;
|
||||||
|
projectileType = GrenadeProjectile;
|
||||||
|
emap = true;
|
||||||
|
|
||||||
className = WeaponImage;
|
armThread = looksn;
|
||||||
shapeFile = "weapon_sniper.dts";
|
|
||||||
mass = 10;
|
|
||||||
item = R700SniperRifle;
|
|
||||||
ammo = R700SniperRifleAmmo;
|
|
||||||
projectile = R700Bullet;
|
|
||||||
projectileType = LinearFlareProjectile;
|
|
||||||
emap = true;
|
|
||||||
|
|
||||||
armThread = looksn;
|
|
||||||
|
|
||||||
//ClipStuff
|
//ClipStuff
|
||||||
ClipName = "R700Clip";
|
ClipName = "R700Clip";
|
||||||
ClipPickupName["R700Clip"] = "A Few Boxes Of R700 Sniper Bullets";
|
ClipPickupName["R700Clip"] = "A Few Boxes Of R700 Sniper Bullets";
|
||||||
ShowsClipInHud = 1;
|
ShowsClipInHud = 1;
|
||||||
ClipReloadTime = 7;
|
ClipReloadTime = 7;
|
||||||
ClipReturn = 4;
|
ClipReturn = 4;
|
||||||
InitialClips = 6;
|
InitialClips = 6;
|
||||||
//
|
//
|
||||||
//Challenges
|
//Challenges
|
||||||
HasChallenges = 1;
|
HasChallenges = 1;
|
||||||
ChallengeCt = 8;
|
ChallengeCt = 8;
|
||||||
Challenge[1] = "R700 Hunter\t100\t150\tNone";
|
Challenge[1] = "R700 Hunter\t100\t150\tNone";
|
||||||
Challenge[2] = "R700 Expert\t200\t250\tNone";
|
Challenge[2] = "R700 Expert\t200\t250\tNone";
|
||||||
Challenge[3] = "R700 Master\t500\t500\tLaser";
|
Challenge[3] = "R700 Master\t500\t500\tLaser";
|
||||||
Challenge[4] = "R700 God\t1000\t1000\tSilencer";
|
Challenge[4] = "R700 God\t1000\t1000\tSilencer";
|
||||||
Challenge[5] = "R700 Bronze Commendation\t2500\t10000\tNone";
|
Challenge[5] = "R700 Bronze Commendation\t2500\t10000\tNone";
|
||||||
Challenge[6] = "R700 Silver Commendation\t5000\t25000\tNone";
|
Challenge[6] = "R700 Silver Commendation\t5000\t25000\tNone";
|
||||||
Challenge[7] = "R700 Gold Commendation\t10000\t50000\tNone";
|
Challenge[7] = "R700 Gold Commendation\t10000\t50000\tNone";
|
||||||
Challenge[8] = "R700 Titan Commendation\t25000\t75000\tNone";
|
Challenge[8] = "R700 Titan Commendation\t25000\t75000\tNone";
|
||||||
Upgrade[1] = "Laser";
|
Upgrade[1] = "Laser";
|
||||||
Upgrade[2] = "Silencer";
|
Upgrade[2] = "Silencer";
|
||||||
GunName = "R700 Sniper Rifle";
|
GunName = "R700 Sniper Rifle";
|
||||||
//
|
//
|
||||||
|
|
||||||
RankRequire = $TWM2::RankRequire["R700"];
|
RankRequire = $TWM2::RankRequire["R700"];
|
||||||
|
|
||||||
casing = ShellDebris;
|
casing = ShellDebris;
|
||||||
shellExitDir = "1.0 0.3 1.0";
|
shellExitDir = "1.0 0.3 1.0";
|
||||||
shellExitOffset = "0.15 -0.56 -0.1";
|
shellExitOffset = "0.15 -0.56 -0.1";
|
||||||
shellExitVariance = 15.0;
|
shellExitVariance = 15.0;
|
||||||
shellVelocity = 3.0;
|
shellVelocity = 3.0;
|
||||||
|
|
||||||
|
|
||||||
stateName[0] = "Activate";
|
stateName[0] = "Activate";
|
||||||
stateTransitionOnTimeout[0] = "ActivateReady";
|
stateTransitionOnTimeout[0] = "ActivateReady";
|
||||||
stateTimeoutValue[0] = 0.5;
|
stateTimeoutValue[0] = 0.5;
|
||||||
stateSequence[0] = "Activate";
|
stateSequence[0] = "Activate";
|
||||||
stateSound[0] = ChaingunSwitchSound;
|
stateSound[0] = ChaingunSwitchSound;
|
||||||
|
|
||||||
stateName[1] = "ActivateReady";
|
stateName[1] = "ActivateReady";
|
||||||
stateTransitionOnLoaded[1] = "Ready";
|
stateTransitionOnLoaded[1] = "Ready";
|
||||||
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
||||||
|
|
||||||
stateName[2] = "Ready";
|
stateName[2] = "Ready";
|
||||||
stateTransitionOnNoAmmo[2] = "NoAmmo";
|
stateTransitionOnNoAmmo[2] = "NoAmmo";
|
||||||
stateTransitionOnTriggerDown[2] = "CheckWet";
|
stateTransitionOnTriggerDown[2] = "CheckWet";
|
||||||
|
|
||||||
stateName[3] = "Fire";
|
stateName[3] = "Fire";
|
||||||
stateTransitionOnTimeout[3] = "Reload";
|
stateTransitionOnTimeout[3] = "Reload";
|
||||||
stateTimeoutValue[3] = 0.01;
|
stateTimeoutValue[3] = 0.01;
|
||||||
stateFire[3] = true;
|
stateFire[3] = true;
|
||||||
stateRecoil[3] = LightRecoil;
|
stateRecoil[3] = LightRecoil;
|
||||||
stateAllowImageChange[3] = false;
|
stateAllowImageChange[3] = false;
|
||||||
stateScript[3] = "onFire";
|
stateScript[3] = "onFire";
|
||||||
//stateSound[3] = "R700FireSound";
|
//stateSound[3] = "R700FireSound";
|
||||||
|
|
||||||
stateName[4] = "Reload";
|
stateName[4] = "Reload";
|
||||||
stateTransitionOnNoAmmo[4] = "NoAmmo";
|
stateTransitionOnNoAmmo[4] = "NoAmmo";
|
||||||
stateTransitionOnTimeout[4] = "Ready";
|
stateTransitionOnTimeout[4] = "Ready";
|
||||||
stateTimeoutValue[4] = 1.2;
|
stateTimeoutValue[4] = 1.2;
|
||||||
stateAllowImageChange[4] = false;
|
stateAllowImageChange[4] = false;
|
||||||
stateSequence[4] = "Reload";
|
stateSequence[4] = "Reload";
|
||||||
|
|
||||||
stateName[5] = "NoAmmo";
|
stateName[5] = "NoAmmo";
|
||||||
stateTransitionOnAmmo[5] = "Reload";
|
stateTransitionOnAmmo[5] = "Reload";
|
||||||
stateSequence[5] = "NoAmmo";
|
stateSequence[5] = "NoAmmo";
|
||||||
stateTransitionOnTriggerDown[5] = "DryFire";
|
stateTransitionOnTriggerDown[5] = "DryFire";
|
||||||
|
|
||||||
stateName[6] = "DryFire";
|
stateName[6] = "DryFire";
|
||||||
stateSound[6] = ChaingunDryFireSound;
|
stateSound[6] = ChaingunDryFireSound;
|
||||||
stateTimeoutValue[6] = 1.0;
|
stateTimeoutValue[6] = 1.0;
|
||||||
stateTransitionOnTimeout[6] = "NoAmmo";
|
stateTransitionOnTimeout[6] = "NoAmmo";
|
||||||
|
|
||||||
stateName[7] = "WetFire";
|
stateName[7] = "WetFire";
|
||||||
stateSound[7] = PlasmaFireWetSound;
|
stateSound[7] = PlasmaFireWetSound;
|
||||||
stateTimeoutValue[7] = 1.0;
|
stateTimeoutValue[7] = 1.0;
|
||||||
stateTransitionOnTimeout[7] = "Ready";
|
stateTransitionOnTimeout[7] = "Ready";
|
||||||
|
|
||||||
stateName[8] = "CheckWet";
|
stateName[8] = "CheckWet";
|
||||||
stateTransitionOnWet[8] = "WetFire";
|
stateTransitionOnWet[8] = "WetFire";
|
||||||
stateTransitionOnNotWet[8] = "Fire";
|
stateTransitionOnNotWet[8] = "Fire";
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ItemData(R700SniperRifle)
|
datablock ItemData(R700SniperRifle) {
|
||||||
{
|
className = Weapon;
|
||||||
className = Weapon;
|
catagory = "Spawn Items";
|
||||||
catagory = "Spawn Items";
|
shapeFile = "weapon_sniper.dts";
|
||||||
shapeFile = "weapon_sniper.dts";
|
image = R700SniperRifleImage;
|
||||||
image = R700SniperRifleImage;
|
mass = 1.0;
|
||||||
mass = 1.0;
|
elasticity = 0.0;
|
||||||
elasticity = 0.0;
|
friction = 0.6;
|
||||||
friction = 0.6;
|
pickupRadius = 2;
|
||||||
pickupRadius = 2;
|
pickUpName = "a R700 Sniper Rifle";
|
||||||
pickUpName = "a R700 Sniper Rifle";
|
|
||||||
|
|
||||||
computeCRC = true;
|
computeCRC = true;
|
||||||
emap = true;
|
emap = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ShapeBaseImageData(R700ScopeImage) {
|
datablock ShapeBaseImageData(R700ScopeImage) {
|
||||||
className = WeaponImage;
|
className = WeaponImage;
|
||||||
shapeFile = "weapon_targeting.dts";
|
shapeFile = "weapon_targeting.dts";
|
||||||
offset = "0.0 1.0 0.4";
|
offset = "0.0 1.0 0.4";
|
||||||
rotation = "180 0 0 90";
|
rotation = "180 0 0 90";
|
||||||
|
|
||||||
ammo = R700SniperRifleAmmo;
|
ammo = R700SniperRifleAmmo;
|
||||||
armThread = looksn;
|
armThread = looksn;
|
||||||
|
|
||||||
emap = true;
|
emap = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
function R700SniperRifleImage::onMount(%this,%obj,%slot) {
|
function R700SniperRifleImage::onMount(%this,%obj,%slot) {
|
||||||
if(!$TWM2::AllowSnipers) {
|
if(!$TWM2::AllowSnipers) {
|
||||||
bottomPrint(%obj.client, "The host has disabled sniper weapons.", 2, 2);
|
bottomPrint(%obj.client, "The host has disabled sniper weapons.", 2, 2);
|
||||||
%obj.throwweapon(1);
|
%obj.throwweapon(1);
|
||||||
%obj.throwweapon(0);
|
%obj.throwweapon(0);
|
||||||
}
|
}
|
||||||
Parent::onMount(%this, %obj, %slot);
|
Parent::onMount(%this, %obj, %slot);
|
||||||
%obj.mountImage(R700ScopeImage, 5);
|
%obj.mountImage(R700ScopeImage, 5);
|
||||||
}
|
}
|
||||||
|
|
||||||
function R700SniperRifleImage::onUnmount(%this,%obj,%slot) {
|
function R700SniperRifleImage::onUnmount(%this,%obj,%slot) {
|
||||||
Parent::onUnmount(%this, %obj, %slot);
|
Parent::onUnmount(%this, %obj, %slot);
|
||||||
%obj.unmountImage(5);
|
%obj.unmountImage(5);
|
||||||
}
|
}
|
||||||
|
|
||||||
function R700SniperRifleImage::onFire(%data, %obj, %slot) {
|
function R700SniperRifleImage::onFire(%data, %obj, %slot) {
|
||||||
if(!$TWM2::AllowSnipers) {
|
if(!$TWM2::AllowSnipers) {
|
||||||
bottomPrint(%obj.client, "The host has disabled sniper weapons.", 2, 2);
|
bottomPrint(%obj.client, "The host has disabled sniper weapons.", 2, 2);
|
||||||
%obj.throwweapon(1);
|
%obj.throwweapon(1);
|
||||||
%obj.throwweapon(0);
|
%obj.throwweapon(0);
|
||||||
}
|
}
|
||||||
%p = Parent::onFire(%data, %obj, %slot);
|
%p = Parent::onFire(%data, %obj, %slot);
|
||||||
if(%obj.client.UpgradeOn("Silencer", %data.getName())) {
|
if(%obj.client.UpgradeOn("Silencer", %data.getName())) {
|
||||||
//zero sound :p
|
//zero sound :p
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
ServerPlay3d(R700FireSound, %obj.getPosition());
|
ServerPlay3d(R700FireSound, %obj.getPosition());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,248 +1,238 @@
|
||||||
datablock AudioProfile(LaserRifleFireSound)
|
datablock AudioProfile(LaserRifleFireSound) {
|
||||||
{
|
filename = "fx/weapons/sniper_fire.wav";
|
||||||
filename = "fx/weapons/sniper_fire.wav";
|
description = AudioClose3d;
|
||||||
description = AudioClose3d;
|
preload = true;
|
||||||
preload = true;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ParticleData(RedFlareParticle)
|
datablock ParticleData(RedFlareParticle) {
|
||||||
{
|
dragCoeffiecient = 0.0;
|
||||||
dragCoeffiecient = 0.0;
|
gravityCoefficient = 0.15;
|
||||||
gravityCoefficient = 0.15;
|
inheritedVelFactor = 0.5;
|
||||||
inheritedVelFactor = 0.5;
|
|
||||||
|
|
||||||
lifetimeMS = 1800;
|
lifetimeMS = 1800;
|
||||||
lifetimeVarianceMS = 200;
|
lifetimeVarianceMS = 200;
|
||||||
|
|
||||||
textureName = "special/flareSpark";
|
textureName = "special/flareSpark";
|
||||||
|
|
||||||
colors[0] = "1.0 1.0 1.0 1.0";
|
colors[0] = "1.0 1.0 1.0 1.0";
|
||||||
colors[1] = "1.0 1.0 1.0 1.0";
|
colors[1] = "1.0 1.0 1.0 1.0";
|
||||||
colors[2] = "1.0 1.0 1.0 0.0";
|
colors[2] = "1.0 1.0 1.0 0.0";
|
||||||
|
|
||||||
sizes[0] = 0.6;
|
sizes[0] = 0.6;
|
||||||
sizes[1] = 0.3;
|
sizes[1] = 0.3;
|
||||||
sizes[2] = 0.1;
|
sizes[2] = 0.1;
|
||||||
|
|
||||||
times[0] = 0.0;
|
|
||||||
times[1] = 0.5;
|
|
||||||
times[2] = 1.0;
|
|
||||||
|
|
||||||
|
times[0] = 0.0;
|
||||||
|
times[1] = 0.5;
|
||||||
|
times[2] = 1.0;
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ParticleEmitterData(RedFlareemmiter)
|
datablock ParticleEmitterData(RedFlareemmiter){
|
||||||
{
|
ejectionPeriodMS = 10;
|
||||||
ejectionPeriodMS = 10;
|
periodVarianceMS = 0;
|
||||||
periodVarianceMS = 0;
|
|
||||||
|
|
||||||
ejectionVelocity = 1.0;
|
ejectionVelocity = 1.0;
|
||||||
velocityVariance = 0.0;
|
velocityVariance = 0.0;
|
||||||
|
|
||||||
thetaMin = 0.0;
|
thetaMin = 0.0;
|
||||||
thetaMax = 90.0;
|
thetaMax = 90.0;
|
||||||
|
|
||||||
orientParticles = true;
|
orientParticles = true;
|
||||||
orientOnVelocity = false;
|
orientOnVelocity = false;
|
||||||
|
|
||||||
particles = "RedFlareParticle";
|
particles = "RedFlareParticle";
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock LinearFlareProjectileData(LaserShot)
|
datablock LinearFlareProjectileData(LaserShot) {
|
||||||
{
|
scale = "1.0 1.0 1.0";
|
||||||
scale = "1.0 1.0 1.0";
|
faceViewer = false;
|
||||||
faceViewer = false;
|
directDamage = 0.6;
|
||||||
directDamage = 0.6;
|
kickBackStrength = 100.0;
|
||||||
kickBackStrength = 100.0;
|
directDamageType = $DamageType::LaserRifle;
|
||||||
directDamageType = $DamageType::LaserRifle;
|
|
||||||
|
|
||||||
explosion = "BlasterExplosion";
|
explosion = "BlasterExplosion";
|
||||||
splash = PlasmaSplash;
|
splash = PlasmaSplash;
|
||||||
|
|
||||||
ImageSource = "lasergunImage";
|
ImageSource = "lasergunImage";
|
||||||
|
|
||||||
dryVelocity = 200.0;
|
dryVelocity = 200.0;
|
||||||
wetVelocity = 10;
|
wetVelocity = 10;
|
||||||
velInheritFactor = 0.5;
|
velInheritFactor = 0.5;
|
||||||
fizzleTimeMS = 30000;
|
fizzleTimeMS = 30000;
|
||||||
lifetimeMS = 30000;
|
lifetimeMS = 30000;
|
||||||
explodeOnDeath = false;
|
explodeOnDeath = false;
|
||||||
reflectOnWaterImpactAngle = 0.0;
|
reflectOnWaterImpactAngle = 0.0;
|
||||||
explodeOnWaterImpact = true;
|
explodeOnWaterImpact = true;
|
||||||
deflectionOnWaterImpact = 0.0;
|
deflectionOnWaterImpact = 0.0;
|
||||||
fizzleUnderwaterMS = -1;
|
fizzleUnderwaterMS = -1;
|
||||||
|
|
||||||
baseEmitter = RedFlareemmiter;
|
baseEmitter = RedFlareemmiter;
|
||||||
delayEmitter = RedFlareemmiter;
|
delayEmitter = RedFlareemmiter;
|
||||||
bubbleEmitter = RedFlareemmiter;
|
bubbleEmitter = RedFlareemmiter;
|
||||||
|
|
||||||
//activateDelayMS = 100;
|
//activateDelayMS = 100;
|
||||||
activateDelayMS = -1;
|
activateDelayMS = -1;
|
||||||
|
|
||||||
size[0] = 0.2;
|
size[0] = 0.2;
|
||||||
size[1] = 0.2;
|
size[1] = 0.2;
|
||||||
size[2] = 0.2;
|
size[2] = 0.2;
|
||||||
|
|
||||||
|
|
||||||
numFlares = 15;
|
numFlares = 15;
|
||||||
flareColor = "1 0 0";
|
flareColor = "1 0 0";
|
||||||
flareModTexture = "flaremod";
|
flareModTexture = "flaremod";
|
||||||
flareBaseTexture = "flarebase";
|
flareBaseTexture = "flarebase";
|
||||||
|
|
||||||
sound = MissileProjectileSound;
|
sound = MissileProjectileSound;
|
||||||
fireSound = PlasmaFireSound;
|
fireSound = PlasmaFireSound;
|
||||||
wetFireSound = PlasmaFireWetSound;
|
wetFireSound = PlasmaFireWetSound;
|
||||||
|
|
||||||
hasLight = true;
|
|
||||||
lightRadius = 3.0;
|
|
||||||
lightColor = "1 0 0";
|
|
||||||
|
|
||||||
|
hasLight = true;
|
||||||
|
lightRadius = 3.0;
|
||||||
|
lightColor = "1 0 0";
|
||||||
};
|
};
|
||||||
|
|
||||||
//--------------------------------------------------------------------------
|
//--------------------------------------------------------------------------
|
||||||
// Ammo
|
// Ammo
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
|
|
||||||
datablock ItemData(lasergunAmmo)
|
datablock ItemData(lasergunAmmo){
|
||||||
{
|
className = Ammo;
|
||||||
className = Ammo;
|
catagory = "Ammo";
|
||||||
catagory = "Ammo";
|
shapeFile = "ammo_chaingun.dts";
|
||||||
shapeFile = "ammo_chaingun.dts";
|
mass = 1;
|
||||||
mass = 1;
|
elasticity = 0.2;
|
||||||
elasticity = 0.2;
|
friction = 0.6;
|
||||||
friction = 0.6;
|
pickupRadius = 2;
|
||||||
pickupRadius = 2;
|
|
||||||
pickUpName = "some laser rifle ammo";
|
pickUpName = "some laser rifle ammo";
|
||||||
|
|
||||||
computeCRC = true;
|
computeCRC = true;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
//--------------------------------------------------------------------------
|
//--------------------------------------------------------------------------
|
||||||
// Weapon
|
// Weapon
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
datablock ShapeBaseImageData(lasergunImage)
|
datablock ShapeBaseImageData(lasergunImage) {
|
||||||
{
|
className = WeaponImage;
|
||||||
className = WeaponImage;
|
shapeFile = "weapon_sniper.dts";
|
||||||
shapeFile = "weapon_sniper.dts";
|
item = lasergun;
|
||||||
item = lasergun;
|
ammo = lasergunAmmo;
|
||||||
ammo = lasergunAmmo;
|
projectile = LaserShot;
|
||||||
projectile = LaserShot;
|
projectileType = LinearFlareProjectile;
|
||||||
projectileType = LinearFlareProjectile;
|
emap = true;
|
||||||
emap = true;
|
|
||||||
armThread = looksn;
|
armThread = looksn;
|
||||||
mass = 10;
|
mass = 10;
|
||||||
|
|
||||||
casing = ShellDebris;
|
casing = ShellDebris;
|
||||||
shellExitDir = "1.0 0.3 1.0";
|
shellExitDir = "1.0 0.3 1.0";
|
||||||
shellExitOffset = "0.15 -0.56 -0.1";
|
shellExitOffset = "0.15 -0.56 -0.1";
|
||||||
shellExitVariance = 15.0;
|
shellExitVariance = 15.0;
|
||||||
shellVelocity = 3.0;
|
shellVelocity = 3.0;
|
||||||
|
|
||||||
//ClipStuff
|
//ClipStuff
|
||||||
ClipName = "lasergunClip";
|
ClipName = "lasergunClip";
|
||||||
ClipPickupName["lasergunClip"] = "A Photonic Laser Battery";
|
ClipPickupName["lasergunClip"] = "A Photonic Laser Battery";
|
||||||
ShowsClipInHud = 1;
|
ShowsClipInHud = 1;
|
||||||
ClipReloadTime = 6;
|
ClipReloadTime = 6;
|
||||||
ClipReturn = 10;
|
ClipReturn = 10;
|
||||||
InitialClips = 5;
|
InitialClips = 5;
|
||||||
//
|
//
|
||||||
//Challenges
|
//Challenges
|
||||||
HasChallenges = 1;
|
HasChallenges = 1;
|
||||||
ChallengeCt = 8;
|
ChallengeCt = 8;
|
||||||
Challenge[1] = "Laser Rifle Blaster\t100\t250\tNone";
|
Challenge[1] = "Laser Rifle Blaster\t100\t250\tNone";
|
||||||
Challenge[2] = "Laser Rifle Expert\t250\t500\tGrip";
|
Challenge[2] = "Laser Rifle Expert\t250\t500\tGrip";
|
||||||
Challenge[3] = "Laser Rifle Master\t750\t1000\tLaser";
|
Challenge[3] = "Laser Rifle Master\t750\t1000\tLaser";
|
||||||
Challenge[4] = "Laser Rifle God\t1500\t2000\tSilencer";
|
Challenge[4] = "Laser Rifle God\t1500\t2000\tSilencer";
|
||||||
Challenge[5] = "Laser Rifle Bronze Commendation\t5000\t10000\tNone";
|
Challenge[5] = "Laser Rifle Bronze Commendation\t5000\t10000\tNone";
|
||||||
Challenge[6] = "Laser Rifle Silver Commendation\t10000\t25000\tNone";
|
Challenge[6] = "Laser Rifle Silver Commendation\t10000\t25000\tNone";
|
||||||
Challenge[7] = "Laser Rifle Gold Commendation\t25000\t50000\tNone";
|
Challenge[7] = "Laser Rifle Gold Commendation\t25000\t50000\tNone";
|
||||||
Challenge[8] = "Laser Rifle Titan Commendation\t50000\t75000\tNone";
|
Challenge[8] = "Laser Rifle Titan Commendation\t50000\t75000\tNone";
|
||||||
Upgrade[1] = "Grip";
|
Upgrade[1] = "Grip";
|
||||||
Upgrade[2] = "Laser";
|
Upgrade[2] = "Laser";
|
||||||
Upgrade[3] = "Silencer";
|
Upgrade[3] = "Silencer";
|
||||||
GunName = "RSA Laser Rifle";
|
GunName = "UR-22 Laser Rifle";
|
||||||
//
|
//
|
||||||
|
|
||||||
RankRequire = $TWM2::RankRequire["RSALaserRifle"];
|
RankRequire = $TWM2::RankRequire["RSALaserRifle"];
|
||||||
|
|
||||||
maxSpread = 10.0 / 1000.0;
|
maxSpread = 10.0 / 1000.0;
|
||||||
|
|
||||||
stateName[0] = "Activate";
|
stateName[0] = "Activate";
|
||||||
stateTransitionOnTimeout[0] = "ActivateReady";
|
stateTransitionOnTimeout[0] = "ActivateReady";
|
||||||
stateTimeoutValue[0] = 0.5;
|
stateTimeoutValue[0] = 0.5;
|
||||||
stateSequence[0] = "Activate";
|
stateSequence[0] = "Activate";
|
||||||
stateSound[0] = ChaingunSwitchSound;
|
stateSound[0] = ChaingunSwitchSound;
|
||||||
|
|
||||||
stateName[1] = "ActivateReady";
|
stateName[1] = "ActivateReady";
|
||||||
stateTransitionOnLoaded[1] = "Ready";
|
stateTransitionOnLoaded[1] = "Ready";
|
||||||
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
||||||
|
|
||||||
stateName[2] = "Ready";
|
stateName[2] = "Ready";
|
||||||
stateTransitionOnNoAmmo[2] = "NoAmmo";
|
stateTransitionOnNoAmmo[2] = "NoAmmo";
|
||||||
stateTransitionOnTriggerDown[2] = "CheckWet";
|
stateTransitionOnTriggerDown[2] = "CheckWet";
|
||||||
|
|
||||||
stateName[3] = "Fire";
|
stateName[3] = "Fire";
|
||||||
stateTransitionOnTimeout[3] = "Reload";
|
stateTransitionOnTimeout[3] = "Reload";
|
||||||
stateTimeoutValue[3] = 0.0001;
|
stateTimeoutValue[3] = 0.0001;
|
||||||
stateFire[3] = true;
|
stateFire[3] = true;
|
||||||
stateEmitter[3] = "GunFireEffectEmitter";
|
stateEmitter[3] = "GunFireEffectEmitter";
|
||||||
stateEmitterNode[3] = "muzzlepoint1";
|
stateEmitterNode[3] = "muzzlepoint1";
|
||||||
stateEmitterTime[3] = 1;
|
stateEmitterTime[3] = 1;
|
||||||
stateRecoil[3] = LightRecoil;
|
stateRecoil[3] = LightRecoil;
|
||||||
stateAllowImageChange[3] = false;
|
stateAllowImageChange[3] = false;
|
||||||
stateScript[3] = "onFire";
|
stateScript[3] = "onFire";
|
||||||
stateEmitterTime[3] = 0.1;
|
stateEmitterTime[3] = 0.1;
|
||||||
//stateSound[3] = LaserRifleFireSound;
|
//stateSound[3] = LaserRifleFireSound;
|
||||||
|
|
||||||
stateName[4] = "Reload";
|
stateName[4] = "Reload";
|
||||||
stateTransitionOnNoAmmo[4] = "NoAmmo";
|
stateTransitionOnNoAmmo[4] = "NoAmmo";
|
||||||
stateTransitionOnTimeout[4] = "Ready";
|
stateTransitionOnTimeout[4] = "Ready";
|
||||||
stateTimeoutValue[4] = 0.7;
|
stateTimeoutValue[4] = 0.7;
|
||||||
stateAllowImageChange[4] = false;
|
stateAllowImageChange[4] = false;
|
||||||
stateSequence[4] = "Reload";
|
stateSequence[4] = "Reload";
|
||||||
|
|
||||||
stateName[5] = "NoAmmo";
|
stateName[5] = "NoAmmo";
|
||||||
stateTransitionOnAmmo[5] = "Reload";
|
stateTransitionOnAmmo[5] = "Reload";
|
||||||
stateSequence[5] = "NoAmmo";
|
stateSequence[5] = "NoAmmo";
|
||||||
stateTransitionOnTriggerDown[5] = "DryFire";
|
stateTransitionOnTriggerDown[5] = "DryFire";
|
||||||
|
|
||||||
stateName[6] = "DryFire";
|
stateName[6] = "DryFire";
|
||||||
stateSound[6] = ChaingunDryFireSound;
|
stateSound[6] = ChaingunDryFireSound;
|
||||||
stateTimeoutValue[6] = 0.2;
|
stateTimeoutValue[6] = 0.2;
|
||||||
stateTransitionOnTimeout[6] = "NoAmmo";
|
stateTransitionOnTimeout[6] = "NoAmmo";
|
||||||
|
|
||||||
stateName[7] = "WetFire";
|
stateName[7] = "WetFire";
|
||||||
stateSound[7] = ChaingunDryFireSound;
|
stateSound[7] = ChaingunDryFireSound;
|
||||||
stateTimeoutValue[7] = 0.2;
|
stateTimeoutValue[7] = 0.2;
|
||||||
stateTransitionOnTimeout[7] = "Ready";
|
stateTransitionOnTimeout[7] = "Ready";
|
||||||
|
|
||||||
stateName[8] = "CheckWet";
|
stateName[8] = "CheckWet";
|
||||||
stateTransitionOnWet[8] = "WetFire";
|
stateTransitionOnWet[8] = "WetFire";
|
||||||
stateTransitionOnNotWet[8] = "Fire";
|
stateTransitionOnNotWet[8] = "Fire";
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ItemData(lasergun)
|
datablock ItemData(lasergun) {
|
||||||
{
|
className = Weapon;
|
||||||
className = Weapon;
|
catagory = "Spawn Items";
|
||||||
catagory = "Spawn Items";
|
shapeFile = "weapon_chaingun.dts";
|
||||||
shapeFile = "weapon_chaingun.dts";
|
image = lasergunImage;
|
||||||
image = lasergunImage;
|
mass = 1.0;
|
||||||
mass = 1.0;
|
elasticity = 0.2;
|
||||||
elasticity = 0.2;
|
friction = 0.6;
|
||||||
friction = 0.6;
|
pickupRadius = 2;
|
||||||
pickupRadius = 2;
|
pickUpName = "a UR-22 Laser Rifle";
|
||||||
pickUpName = "a Laser Rifle";
|
|
||||||
|
|
||||||
computeCRC = true;
|
computeCRC = true;
|
||||||
emap = true;
|
emap = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
function lasergunImage::onFire(%data, %obj, %slot) {
|
function lasergunImage::onFire(%data, %obj, %slot) {
|
||||||
%p = Parent::onFire(%data, %obj, %slot);
|
%p = Parent::onFire(%data, %obj, %slot);
|
||||||
if(%obj.client.UpgradeOn("Silencer", %data.getName())) {
|
if(%obj.client.UpgradeOn("Silencer", %data.getName())) {
|
||||||
//zero sound :p
|
//zero sound :p
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
ServerPlay3d(LaserRifleFireSound, %obj.getPosition());
|
ServerPlay3d(LaserRifleFireSound, %obj.getPosition());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,225 +1,217 @@
|
||||||
datablock AudioProfile(S3FireSound)
|
datablock AudioProfile(S3FireSound) {
|
||||||
{
|
filename = "fx/vehicles/tank_chaingun.wav";
|
||||||
filename = "fx/vehicles/tank_chaingun.wav";
|
description = AudioDefault3d;
|
||||||
description = AudioDefault3d;
|
preload = true;
|
||||||
preload = true;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock TracerProjectileData(S3Bullet)
|
datablock TracerProjectileData(S3Bullet) {
|
||||||
{
|
doDynamicClientHits = true;
|
||||||
doDynamicClientHits = true;
|
|
||||||
|
|
||||||
directDamage = 0.7;
|
directDamage = 0.5;
|
||||||
directDamageType = $DamageType::S3;
|
directDamageType = $DamageType::S3;
|
||||||
explosion = "ChaingunExplosion";
|
explosion = "ChaingunExplosion";
|
||||||
splash = ChaingunSplash;
|
splash = ChaingunSplash;
|
||||||
HeadMultiplier = 1.5;
|
HeadMultiplier = 1.5;
|
||||||
LegsMultiplier = 0.35;
|
LegsMultiplier = 0.35;
|
||||||
|
|
||||||
HeadShotKill = 1;
|
HeadShotKill = 1;
|
||||||
|
|
||||||
kickBackStrength = 15.0;
|
kickBackStrength = 15.0;
|
||||||
sound = ChaingunProjectile;
|
sound = ChaingunProjectile;
|
||||||
|
|
||||||
dryVelocity = 3000.0;
|
dryVelocity = 3000.0;
|
||||||
wetVelocity = 2000.0;
|
wetVelocity = 2000.0;
|
||||||
velInheritFactor = 1.0;
|
velInheritFactor = 1.0;
|
||||||
fizzleTimeMS = 1000;
|
fizzleTimeMS = 1000;
|
||||||
lifetimeMS = 1000;
|
lifetimeMS = 1000;
|
||||||
explodeOnDeath = false;
|
explodeOnDeath = false;
|
||||||
reflectOnWaterImpactAngle = 0.0;
|
reflectOnWaterImpactAngle = 0.0;
|
||||||
explodeOnWaterImpact = false;
|
explodeOnWaterImpact = false;
|
||||||
deflectionOnWaterImpact = 0.0;
|
deflectionOnWaterImpact = 0.0;
|
||||||
fizzleUnderwaterMS = 3000;
|
fizzleUnderwaterMS = 3000;
|
||||||
|
|
||||||
ImageSource = "S3RifleImage";
|
|
||||||
|
|
||||||
tracerLength = 20.0;
|
ImageSource = "S3RifleImage";
|
||||||
tracerAlpha = false;
|
|
||||||
tracerMinPixels = 6;
|
tracerLength = 20.0;
|
||||||
tracerColor = 211.0/255.0 @ " " @ 215.0/255.0 @ " " @ 120.0/255.0 @ " 0.75";
|
tracerAlpha = false;
|
||||||
|
tracerMinPixels = 6;
|
||||||
|
tracerColor = 211.0/255.0 @ " " @ 215.0/255.0 @ " " @ 120.0/255.0 @ " 0.75";
|
||||||
tracerTex[0] = "special/tracer00";
|
tracerTex[0] = "special/tracer00";
|
||||||
tracerTex[1] = "special/tracercross";
|
tracerTex[1] = "special/tracercross";
|
||||||
tracerWidth = 0.09;
|
tracerWidth = 0.09;
|
||||||
crossSize = 0.20;
|
crossSize = 0.20;
|
||||||
crossViewAng = 0.990;
|
crossViewAng = 0.990;
|
||||||
renderCross = true;
|
renderCross = true;
|
||||||
|
|
||||||
decalData[0] = ChaingunDecal1;
|
decalData[0] = ChaingunDecal1;
|
||||||
decalData[1] = ChaingunDecal2;
|
decalData[1] = ChaingunDecal2;
|
||||||
decalData[2] = ChaingunDecal3;
|
decalData[2] = ChaingunDecal3;
|
||||||
decalData[3] = ChaingunDecal4;
|
decalData[3] = ChaingunDecal4;
|
||||||
decalData[4] = ChaingunDecal5;
|
decalData[4] = ChaingunDecal5;
|
||||||
decalData[5] = ChaingunDecal6;
|
decalData[5] = ChaingunDecal6;
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ItemData(S3RifleAmmo)
|
datablock ItemData(S3RifleAmmo) {
|
||||||
{
|
className = Ammo;
|
||||||
className = Ammo;
|
catagory = "Ammo";
|
||||||
catagory = "Ammo";
|
shapeFile = "ammo_chaingun.dts";
|
||||||
shapeFile = "ammo_chaingun.dts";
|
mass = 1;
|
||||||
mass = 1;
|
elasticity = 0.2;
|
||||||
elasticity = 0.2;
|
friction = 0.6;
|
||||||
friction = 0.6;
|
pickupRadius = 2;
|
||||||
pickupRadius = 2;
|
|
||||||
pickUpName = "Some S3 Rifle Bullets";
|
pickUpName = "Some S3 Rifle Bullets";
|
||||||
|
|
||||||
computeCRC = true;
|
computeCRC = true;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ShapeBaseImageData(S3RifleImage)
|
datablock ShapeBaseImageData(S3RifleImage) {
|
||||||
{
|
className = WeaponImage;
|
||||||
className = WeaponImage;
|
shapeFile = "weapon_sniper.dts";
|
||||||
shapeFile = "weapon_sniper.dts";
|
mass = 10;
|
||||||
mass = 10;
|
item = S3Rifle;
|
||||||
item = S3Rifle;
|
ammo = S3RifleAmmo;
|
||||||
ammo = S3RifleAmmo;
|
projectile = S3Bullet;
|
||||||
projectile = S3Bullet;
|
projectileType = TracerProjectile;
|
||||||
projectileType = TracerProjectile;
|
emap = true;
|
||||||
emap = true;
|
|
||||||
|
|
||||||
//ClipStuff
|
|
||||||
ClipName = "S3RifleClip";
|
|
||||||
ClipPickupName["S3RifleClip"] = "some S3 Clip Cartridges";
|
|
||||||
ShowsClipInHud = 1;
|
|
||||||
ClipReloadTime = 4;
|
|
||||||
ClipReturn = 10;
|
|
||||||
InitialClips = 6;
|
|
||||||
//
|
|
||||||
//Challenges
|
|
||||||
HasChallenges = 1;
|
|
||||||
ChallengeCt = 9;
|
|
||||||
Challenge[1] = "S3 Killer\t50\t100\tNone";
|
|
||||||
Challenge[2] = "S3 Extremist\t100\t150\tGrip";
|
|
||||||
Challenge[3] = "S3 Expert\t250\t250\tLaser";
|
|
||||||
Challenge[4] = "S3 Master\t500\t500\tSilencer";
|
|
||||||
Challenge[5] = "S3 God\t1500\t1000\tBurst Clip";
|
|
||||||
Challenge[6] = "S3 Bronze Commendation\t5000\t10000\tNone";
|
|
||||||
Challenge[7] = "S3 Silver Commendation\t10000\t25000\tNone";
|
|
||||||
Challenge[8] = "S3 Gold Commendation\t25000\t50000\tNone";
|
|
||||||
Challenge[9] = "S3 Titan Commendation\t50000\t75000\tNone";
|
|
||||||
Upgrade[1] = "Grip";
|
|
||||||
Upgrade[2] = "Laser";
|
|
||||||
Upgrade[3] = "Silencer";
|
|
||||||
Upgrade[4] = "Burst Clip";
|
|
||||||
GunName = "S3 Combat Rifle";
|
|
||||||
//
|
|
||||||
|
|
||||||
casing = ShellDebris;
|
//ClipStuff
|
||||||
shellExitDir = "1.0 0.3 1.0";
|
ClipName = "S3RifleClip";
|
||||||
shellExitOffset = "0.15 -0.56 -0.1";
|
ClipPickupName["S3RifleClip"] = "some S3 Clip Cartridges";
|
||||||
shellExitVariance = 15.0;
|
ShowsClipInHud = 1;
|
||||||
shellVelocity = 3.0;
|
ClipReloadTime = 4;
|
||||||
|
ClipReturn = 10;
|
||||||
|
InitialClips = 6;
|
||||||
|
//
|
||||||
|
//Challenges
|
||||||
|
HasChallenges = 1;
|
||||||
|
ChallengeCt = 9;
|
||||||
|
Challenge[1] = "S3 Killer\t50\t100\tNone";
|
||||||
|
Challenge[2] = "S3 Extremist\t100\t150\tGrip";
|
||||||
|
Challenge[3] = "S3 Expert\t250\t250\tLaser";
|
||||||
|
Challenge[4] = "S3 Master\t500\t500\tSilencer";
|
||||||
|
Challenge[5] = "S3 God\t1500\t1000\tBurst Clip";
|
||||||
|
Challenge[6] = "S3 Bronze Commendation\t5000\t10000\tNone";
|
||||||
|
Challenge[7] = "S3 Silver Commendation\t10000\t25000\tNone";
|
||||||
|
Challenge[8] = "S3 Gold Commendation\t25000\t50000\tNone";
|
||||||
|
Challenge[9] = "S3 Titan Commendation\t50000\t75000\tNone";
|
||||||
|
Upgrade[1] = "Grip";
|
||||||
|
Upgrade[2] = "Laser";
|
||||||
|
Upgrade[3] = "Silencer";
|
||||||
|
Upgrade[4] = "Burst Clip";
|
||||||
|
GunName = "S3 Combat Rifle";
|
||||||
|
//
|
||||||
|
|
||||||
projectileSpread = 3.0 / 1000.0;
|
casing = ShellDebris;
|
||||||
|
shellExitDir = "1.0 0.3 1.0";
|
||||||
|
shellExitOffset = "0.15 -0.56 -0.1";
|
||||||
|
shellExitVariance = 15.0;
|
||||||
|
shellVelocity = 3.0;
|
||||||
|
|
||||||
stateName[0] = "Activate";
|
projectileSpread = 2.5 / 1000.0;
|
||||||
stateTransitionOnTimeout[0] = "ActivateReady";
|
|
||||||
stateTimeoutValue[0] = 0.5;
|
|
||||||
stateSequence[0] = "Activate";
|
|
||||||
stateSound[0] = ChaingunSwitchSound;
|
|
||||||
|
|
||||||
stateName[1] = "ActivateReady";
|
stateName[0] = "Activate";
|
||||||
stateTransitionOnLoaded[1] = "Ready";
|
stateTransitionOnTimeout[0] = "ActivateReady";
|
||||||
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
stateTimeoutValue[0] = 0.5;
|
||||||
|
stateSequence[0] = "Activate";
|
||||||
|
stateSound[0] = ChaingunSwitchSound;
|
||||||
|
|
||||||
stateName[2] = "Ready";
|
stateName[1] = "ActivateReady";
|
||||||
stateTransitionOnNoAmmo[2] = "NoAmmo";
|
stateTransitionOnLoaded[1] = "Ready";
|
||||||
stateTransitionOnTriggerDown[2] = "CheckWet";
|
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
||||||
|
|
||||||
stateName[3] = "Fire";
|
stateName[2] = "Ready";
|
||||||
stateTransitionOnTimeout[3] = "Reload";
|
stateTransitionOnNoAmmo[2] = "NoAmmo";
|
||||||
stateTimeoutValue[3] = 0.01;
|
stateTransitionOnTriggerDown[2] = "CheckWet";
|
||||||
stateFire[3] = true;
|
|
||||||
stateRecoil[3] = LightRecoil;
|
|
||||||
stateAllowImageChange[3] = false;
|
|
||||||
stateScript[3] = "onFire";
|
|
||||||
stateEmitterTime[3] = 0.2;
|
|
||||||
//stateSound[3] = S3FireSound;
|
|
||||||
|
|
||||||
stateName[4] = "Reload";
|
stateName[3] = "Fire";
|
||||||
stateTransitionOnNoAmmo[4] = "NoAmmo";
|
stateTransitionOnTimeout[3] = "Reload";
|
||||||
stateTransitionOnTimeout[4] = "Ready";
|
stateTimeoutValue[3] = 0.01;
|
||||||
stateTimeoutValue[4] = 0.9;
|
stateFire[3] = true;
|
||||||
stateAllowImageChange[4] = false;
|
stateRecoil[3] = LightRecoil;
|
||||||
stateSequence[4] = "Reload";
|
stateAllowImageChange[3] = false;
|
||||||
|
stateScript[3] = "onFire";
|
||||||
|
stateEmitterTime[3] = 0.01;
|
||||||
|
//stateSound[3] = S3FireSound;
|
||||||
|
|
||||||
stateName[5] = "NoAmmo";
|
stateName[4] = "Reload";
|
||||||
stateTransitionOnAmmo[5] = "Reload";
|
stateTransitionOnNoAmmo[4] = "NoAmmo";
|
||||||
stateSequence[5] = "NoAmmo";
|
stateTransitionOnTimeout[4] = "Ready";
|
||||||
stateTransitionOnTriggerDown[5] = "DryFire";
|
stateTimeoutValue[4] = 0.4;
|
||||||
|
stateAllowImageChange[4] = false;
|
||||||
|
stateSequence[4] = "Reload";
|
||||||
|
|
||||||
stateName[6] = "DryFire";
|
stateName[5] = "NoAmmo";
|
||||||
stateSound[6] = ChaingunDryFireSound;
|
stateTransitionOnAmmo[5] = "Reload";
|
||||||
stateTimeoutValue[6] = 1.0;
|
stateSequence[5] = "NoAmmo";
|
||||||
stateTransitionOnTimeout[6] = "NoAmmo";
|
stateTransitionOnTriggerDown[5] = "DryFire";
|
||||||
|
|
||||||
stateName[7] = "WetFire";
|
stateName[6] = "DryFire";
|
||||||
stateSound[7] = PlasmaFireWetSound;
|
stateSound[6] = ChaingunDryFireSound;
|
||||||
stateTimeoutValue[7] = 1.0;
|
stateTimeoutValue[6] = 1.0;
|
||||||
stateTransitionOnTimeout[7] = "Ready";
|
stateTransitionOnTimeout[6] = "NoAmmo";
|
||||||
|
|
||||||
stateName[8] = "CheckWet";
|
stateName[7] = "WetFire";
|
||||||
stateTransitionOnWet[8] = "WetFire";
|
stateSound[7] = PlasmaFireWetSound;
|
||||||
stateTransitionOnNotWet[8] = "Fire";
|
stateTimeoutValue[7] = 1.0;
|
||||||
|
stateTransitionOnTimeout[7] = "Ready";
|
||||||
|
|
||||||
|
stateName[8] = "CheckWet";
|
||||||
|
stateTransitionOnWet[8] = "WetFire";
|
||||||
|
stateTransitionOnNotWet[8] = "Fire";
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ItemData(S3Rifle)
|
datablock ItemData(S3Rifle) {
|
||||||
{
|
className = Weapon;
|
||||||
className = Weapon;
|
catagory = "Spawn Items";
|
||||||
catagory = "Spawn Items";
|
shapeFile = "weapon_sniper.dts";
|
||||||
shapeFile = "weapon_sniper.dts";
|
image = S3RifleImage;
|
||||||
image = S3RifleImage;
|
mass = 1.0;
|
||||||
mass = 1.0;
|
elasticity = 0.0;
|
||||||
elasticity = 0.0;
|
friction = 0.6;
|
||||||
friction = 0.6;
|
pickupRadius = 2;
|
||||||
pickupRadius = 2;
|
pickUpName = "an S3 Combat Rifle";
|
||||||
pickUpName = "an S3 Combat Rifle";
|
|
||||||
|
|
||||||
computeCRC = true;
|
computeCRC = true;
|
||||||
emap = true;
|
emap = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
function S3RifleImage::OnFire(%data, %obj, %slot) {
|
function S3RifleImage::OnFire(%data, %obj, %slot) {
|
||||||
if(%obj.client.UpgradeOn("Burst Clip", %data.getName())) {
|
if(%obj.client.UpgradeOn("Burst Clip", %data.getName())) {
|
||||||
|
%spread = %data.projectileSpread;
|
||||||
%spread = %data.projectileSpread;
|
if(%obj.client !$= "") {
|
||||||
if(%obj.client !$= "") {
|
if(%obj.client.IsActivePerk("Advanced Grip")) {
|
||||||
if(%obj.client.IsActivePerk("Advanced Grip")) {
|
%spread = %spread / 2.5;
|
||||||
%spread = %spread / 2.5;
|
}
|
||||||
}
|
}
|
||||||
}
|
%vec2 = %obj.getMuzzleVector(%slot);
|
||||||
|
%x = (getRandom() - 0.5) * 2 * 3.1415926 * %spread;
|
||||||
%vec2 = %obj.getMuzzleVector(%slot);
|
%y = (getRandom() - 0.5) * 2 * 3.1415926 * %spread;
|
||||||
%x = (getRandom() - 0.5) * 2 * 3.1415926 * %spread;
|
%z = (getRandom() - 0.5) * 2 * 3.1415926 * %spread;
|
||||||
%y = (getRandom() - 0.5) * 2 * 3.1415926 * %spread;
|
%mat = MatrixCreateFromEuler(%x @ " " @ %y @ " " @ %z);
|
||||||
%z = (getRandom() - 0.5) * 2 * 3.1415926 * %spread;
|
%vector2 = MatrixMulVector(%mat, %vec2);
|
||||||
%mat = MatrixCreateFromEuler(%x @ " " @ %y @ " " @ %z);
|
|
||||||
%vector2 = MatrixMulVector(%mat, %vec2);
|
|
||||||
|
|
||||||
%vec3 = %obj.getMuzzleVector(%slot);
|
|
||||||
%x = (getRandom() - 0.5) * 2 * 3.1415926 * %spread;
|
|
||||||
%y = (getRandom() - 0.5) * 2 * 3.1415926 * %spread;
|
|
||||||
%z = (getRandom() - 0.5) * 2 * 3.1415926 * %spread;
|
|
||||||
%mat = MatrixCreateFromEuler(%x @ " " @ %y @ " " @ %z);
|
|
||||||
%vector3 = MatrixMulVector(%mat, %vec3);
|
|
||||||
|
|
||||||
%p1 = Parent::OnFire(%data, %obj, %slot);
|
|
||||||
|
|
||||||
%p2 = Schedule(100, 0, "spawnprojectile", %data.Projectile, %data.ProjectileType, vectorAdd(%obj.getPosition(), "-.45 0 1.4"), %vector2, %obj);
|
%vec3 = %obj.getMuzzleVector(%slot);
|
||||||
%p2.WeaponImageSource = "S3RifleImage";
|
%x = (getRandom() - 0.5) * 2 * 3.1415926 * %spread;
|
||||||
schedule(100, 0, "ServerPlay3D", "S3FireSound", %obj.getPosition());
|
%y = (getRandom() - 0.5) * 2 * 3.1415926 * %spread;
|
||||||
|
%z = (getRandom() - 0.5) * 2 * 3.1415926 * %spread;
|
||||||
|
%mat = MatrixCreateFromEuler(%x @ " " @ %y @ " " @ %z);
|
||||||
|
%vector3 = MatrixMulVector(%mat, %vec3);
|
||||||
|
|
||||||
%p3 = Schedule(250, 0, "spawnprojectile", %data.Projectile, %data.ProjectileType, vectorAdd(%obj.getPosition(), "-.45 0 1.4"), %vector3, %obj);
|
%p1 = Parent::OnFire(%data, %obj, %slot);
|
||||||
%p3.WeaponImageSource = "S3RifleImage";
|
|
||||||
schedule(250, 0, "ServerPlay3D", "S3FireSound", %obj.getPosition());
|
%p2 = Schedule(100, 0, "spawnprojectile", %data.Projectile, %data.ProjectileType, vectorAdd(%obj.getPosition(), "-.45 0 1.4"), %vector2, %obj);
|
||||||
}
|
%p2.WeaponImageSource = "S3RifleImage";
|
||||||
else if(%obj.client.UpgradeOn("Silencer", %data.getName())) {
|
schedule(100, 0, "ServerPlay3D", "S3FireSound", %obj.getPosition());
|
||||||
%p = Parent::OnFire(%data, %obj, %slot);
|
|
||||||
}
|
%p3 = Schedule(250, 0, "spawnprojectile", %data.Projectile, %data.ProjectileType, vectorAdd(%obj.getPosition(), "-.45 0 1.4"), %vector3, %obj);
|
||||||
else {
|
%p3.WeaponImageSource = "S3RifleImage";
|
||||||
%p = Parent::OnFire(%data, %obj, %slot);
|
schedule(250, 0, "ServerPlay3D", "S3FireSound", %obj.getPosition());
|
||||||
serverPlay3d(S3FireSound, %obj.getPosition());
|
}
|
||||||
}
|
else if(%obj.client.UpgradeOn("Silencer", %data.getName())) {
|
||||||
|
%p = Parent::OnFire(%data, %obj, %slot);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
%p = Parent::OnFire(%data, %obj, %slot);
|
||||||
|
serverPlay3d(S3FireSound, %obj.getPosition());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,176 +1,172 @@
|
||||||
datablock TracerProjectileData(S3SBullet) {
|
datablock TracerProjectileData(S3SBullet) {
|
||||||
doDynamicClientHits = true;
|
doDynamicClientHits = true;
|
||||||
|
|
||||||
directDamage = 0.45;
|
directDamage = 0.45;
|
||||||
directDamageType = $DamageType::S3;
|
directDamageType = $DamageType::S3;
|
||||||
explosion = "ChaingunExplosion";
|
explosion = "ChaingunExplosion";
|
||||||
splash = ChaingunSplash;
|
splash = ChaingunSplash;
|
||||||
HeadMultiplier = 1.5;
|
HeadMultiplier = 1.5;
|
||||||
LegsMultiplier = 0.35;
|
LegsMultiplier = 0.35;
|
||||||
|
|
||||||
HeadShotKill = 1;
|
HeadShotKill = 1;
|
||||||
|
|
||||||
kickBackStrength = 15.0;
|
kickBackStrength = 15.0;
|
||||||
sound = ChaingunProjectile;
|
sound = ChaingunProjectile;
|
||||||
|
|
||||||
ImageSource = "S3SRifleImage";
|
|
||||||
|
|
||||||
dryVelocity = 3000.0;
|
ImageSource = "S3SRifleImage";
|
||||||
wetVelocity = 2000.0;
|
|
||||||
velInheritFactor = 1.0;
|
|
||||||
fizzleTimeMS = 1000;
|
|
||||||
lifetimeMS = 1000;
|
|
||||||
explodeOnDeath = false;
|
|
||||||
reflectOnWaterImpactAngle = 0.0;
|
|
||||||
explodeOnWaterImpact = false;
|
|
||||||
deflectionOnWaterImpact = 0.0;
|
|
||||||
fizzleUnderwaterMS = 3000;
|
|
||||||
|
|
||||||
tracerLength = 20.0;
|
dryVelocity = 3000.0;
|
||||||
tracerAlpha = false;
|
wetVelocity = 2000.0;
|
||||||
tracerMinPixels = 6;
|
velInheritFactor = 1.0;
|
||||||
tracerColor = 211.0/255.0 @ " " @ 215.0/255.0 @ " " @ 120.0/255.0 @ " 0.75";
|
fizzleTimeMS = 1000;
|
||||||
|
lifetimeMS = 1000;
|
||||||
|
explodeOnDeath = false;
|
||||||
|
reflectOnWaterImpactAngle = 0.0;
|
||||||
|
explodeOnWaterImpact = false;
|
||||||
|
deflectionOnWaterImpact = 0.0;
|
||||||
|
fizzleUnderwaterMS = 3000;
|
||||||
|
|
||||||
|
tracerLength = 20.0;
|
||||||
|
tracerAlpha = false;
|
||||||
|
tracerMinPixels = 6;
|
||||||
|
tracerColor = 211.0/255.0 @ " " @ 215.0/255.0 @ " " @ 120.0/255.0 @ " 0.75";
|
||||||
tracerTex[0] = "special/tracer00";
|
tracerTex[0] = "special/tracer00";
|
||||||
tracerTex[1] = "special/tracercross";
|
tracerTex[1] = "special/tracercross";
|
||||||
tracerWidth = 0.09;
|
tracerWidth = 0.09;
|
||||||
crossSize = 0.20;
|
crossSize = 0.20;
|
||||||
crossViewAng = 0.990;
|
crossViewAng = 0.990;
|
||||||
renderCross = true;
|
renderCross = true;
|
||||||
|
|
||||||
decalData[0] = ChaingunDecal1;
|
decalData[0] = ChaingunDecal1;
|
||||||
decalData[1] = ChaingunDecal2;
|
decalData[1] = ChaingunDecal2;
|
||||||
decalData[2] = ChaingunDecal3;
|
decalData[2] = ChaingunDecal3;
|
||||||
decalData[3] = ChaingunDecal4;
|
decalData[3] = ChaingunDecal4;
|
||||||
decalData[4] = ChaingunDecal5;
|
decalData[4] = ChaingunDecal5;
|
||||||
decalData[5] = ChaingunDecal6;
|
decalData[5] = ChaingunDecal6;
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ItemData(S3SRifleAmmo)
|
datablock ItemData(S3SRifleAmmo) {
|
||||||
{
|
className = Ammo;
|
||||||
className = Ammo;
|
catagory = "Ammo";
|
||||||
catagory = "Ammo";
|
shapeFile = "ammo_chaingun.dts";
|
||||||
shapeFile = "ammo_chaingun.dts";
|
mass = 1;
|
||||||
mass = 1;
|
elasticity = 0.2;
|
||||||
elasticity = 0.2;
|
friction = 0.6;
|
||||||
friction = 0.6;
|
pickupRadius = 2;
|
||||||
pickupRadius = 2;
|
|
||||||
pickUpName = "Some S3S Rifle Bullets";
|
pickUpName = "Some S3S Rifle Bullets";
|
||||||
|
|
||||||
computeCRC = true;
|
computeCRC = true;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ShapeBaseImageData(S3SRifleImage)
|
datablock ShapeBaseImageData(S3SRifleImage) {
|
||||||
{
|
className = WeaponImage;
|
||||||
className = WeaponImage;
|
shapeFile = "weapon_sniper.dts";
|
||||||
shapeFile = "weapon_sniper.dts";
|
mass = 10;
|
||||||
mass = 10;
|
item = S3SRifle;
|
||||||
item = S3SRifle;
|
ammo = S3SRifleAmmo;
|
||||||
ammo = S3SRifleAmmo;
|
projectile = S3SBullet;
|
||||||
projectile = S3SBullet;
|
projectileType = TracerProjectile;
|
||||||
projectileType = TracerProjectile;
|
emap = true;
|
||||||
emap = true;
|
|
||||||
|
|
||||||
//ClipStuff
|
|
||||||
ClipName = "S3SRifleClip";
|
|
||||||
ClipPickupName["S3SRifleClip"] = "some S3S Clip Cartridges";
|
|
||||||
ShowsClipInHud = 1;
|
|
||||||
ClipReloadTime = 4;
|
|
||||||
ClipReturn = 30;
|
|
||||||
InitialClips = 6;
|
|
||||||
//
|
|
||||||
|
|
||||||
casing = ShellDebris;
|
//ClipStuff
|
||||||
shellExitDir = "1.0 0.3 1.0";
|
ClipName = "S3SRifleClip";
|
||||||
shellExitOffset = "0.15 -0.56 -0.1";
|
ClipPickupName["S3SRifleClip"] = "some S3S Clip Cartridges";
|
||||||
shellExitVariance = 15.0;
|
ShowsClipInHud = 1;
|
||||||
shellVelocity = 3.0;
|
ClipReloadTime = 4;
|
||||||
|
ClipReturn = 30;
|
||||||
|
InitialClips = 6;
|
||||||
|
//
|
||||||
|
|
||||||
projectileSpread = 2.0 / 1000.0;
|
casing = ShellDebris;
|
||||||
|
shellExitDir = "1.0 0.3 1.0";
|
||||||
|
shellExitOffset = "0.15 -0.56 -0.1";
|
||||||
|
shellExitVariance = 15.0;
|
||||||
|
shellVelocity = 3.0;
|
||||||
|
|
||||||
stateName[0] = "Activate";
|
projectileSpread = 2.0 / 1000.0;
|
||||||
stateTransitionOnTimeout[0] = "ActivateReady";
|
|
||||||
stateTimeoutValue[0] = 0.5;
|
|
||||||
stateSequence[0] = "Activate";
|
|
||||||
stateSound[0] = ChaingunSwitchSound;
|
|
||||||
|
|
||||||
stateName[1] = "ActivateReady";
|
stateName[0] = "Activate";
|
||||||
stateTransitionOnLoaded[1] = "Ready";
|
stateTransitionOnTimeout[0] = "ActivateReady";
|
||||||
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
stateTimeoutValue[0] = 0.5;
|
||||||
|
stateSequence[0] = "Activate";
|
||||||
|
stateSound[0] = ChaingunSwitchSound;
|
||||||
|
|
||||||
stateName[2] = "Ready";
|
stateName[1] = "ActivateReady";
|
||||||
stateTransitionOnNoAmmo[2] = "NoAmmo";
|
stateTransitionOnLoaded[1] = "Ready";
|
||||||
stateTransitionOnTriggerDown[2] = "CheckWet";
|
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
||||||
|
|
||||||
stateName[3] = "Fire";
|
stateName[2] = "Ready";
|
||||||
stateTransitionOnTimeout[3] = "Fire2";
|
stateTransitionOnNoAmmo[2] = "NoAmmo";
|
||||||
stateTimeoutValue[3] = 0.04;
|
stateTransitionOnTriggerDown[2] = "CheckWet";
|
||||||
stateFire[3] = true;
|
|
||||||
stateRecoil[3] = LightRecoil;
|
|
||||||
stateAllowImageChange[3] = false;
|
|
||||||
stateScript[3] = "onFire";
|
|
||||||
stateEmitterTime[3] = 0.2;
|
|
||||||
stateSound[3] = S3FireSound;
|
|
||||||
|
|
||||||
stateName[4] = "Fire2";
|
|
||||||
stateTransitionOnTimeout[4] = "Fire3";
|
|
||||||
stateTimeoutValue[4] = 0.04;
|
|
||||||
stateFire[4] = true;
|
|
||||||
stateRecoil[4] = LightRecoil;
|
|
||||||
stateAllowImageChange[4] = false;
|
|
||||||
stateScript[4] = "onFire";
|
|
||||||
stateEmitterTime[4] = 0.2;
|
|
||||||
stateSound[4] = S3FireSound;
|
|
||||||
|
|
||||||
stateName[5] = "Fire3";
|
stateName[3] = "Fire";
|
||||||
stateTransitionOnTimeout[5] = "Reload";
|
stateTransitionOnTimeout[3] = "Fire2";
|
||||||
stateTimeoutValue[5] = 0.04;
|
stateTimeoutValue[3] = 0.04;
|
||||||
stateFire[5] = true;
|
stateFire[3] = true;
|
||||||
stateRecoil[5] = LightRecoil;
|
stateRecoil[3] = LightRecoil;
|
||||||
stateAllowImageChange[5] = false;
|
stateAllowImageChange[3] = false;
|
||||||
stateScript[5] = "onFire";
|
stateScript[3] = "onFire";
|
||||||
stateEmitterTime[5] = 0.2;
|
stateEmitterTime[3] = 0.2;
|
||||||
stateSound[5] = S3FireSound;
|
stateSound[3] = S3FireSound;
|
||||||
|
|
||||||
stateName[6] = "Reload";
|
stateName[4] = "Fire2";
|
||||||
stateTransitionOnNoAmmo[6] = "NoAmmo";
|
stateTransitionOnTimeout[4] = "Fire3";
|
||||||
stateTransitionOnTimeout[6] = "Ready";
|
stateTimeoutValue[4] = 0.04;
|
||||||
stateTimeoutValue[6] = 0.9;
|
stateFire[4] = true;
|
||||||
stateAllowImageChange[6] = false;
|
stateRecoil[4] = LightRecoil;
|
||||||
stateSequence[6] = "Reload";
|
stateAllowImageChange[4] = false;
|
||||||
|
stateScript[4] = "onFire";
|
||||||
|
stateEmitterTime[4] = 0.2;
|
||||||
|
stateSound[4] = S3FireSound;
|
||||||
|
|
||||||
stateName[7] = "NoAmmo";
|
stateName[5] = "Fire3";
|
||||||
stateTransitionOnAmmo[7] = "Reload";
|
stateTransitionOnTimeout[5] = "Reload";
|
||||||
stateSequence[7] = "NoAmmo";
|
stateTimeoutValue[5] = 0.04;
|
||||||
stateTransitionOnTriggerDown[7] = "DryFire";
|
stateFire[5] = true;
|
||||||
|
stateRecoil[5] = LightRecoil;
|
||||||
|
stateAllowImageChange[5] = false;
|
||||||
|
stateScript[5] = "onFire";
|
||||||
|
stateEmitterTime[5] = 0.2;
|
||||||
|
stateSound[5] = S3FireSound;
|
||||||
|
|
||||||
stateName[8] = "DryFire";
|
stateName[6] = "Reload";
|
||||||
stateSound[8] = ChaingunDryFireSound;
|
stateTransitionOnNoAmmo[6] = "NoAmmo";
|
||||||
stateTimeoutValue[8] = 1.0;
|
stateTransitionOnTimeout[6] = "Ready";
|
||||||
stateTransitionOnTimeout[8] = "NoAmmo";
|
stateTimeoutValue[6] = 0.9;
|
||||||
|
stateAllowImageChange[6] = false;
|
||||||
|
stateSequence[6] = "Reload";
|
||||||
|
|
||||||
stateName[9] = "WetFire";
|
stateName[7] = "NoAmmo";
|
||||||
stateSound[9] = PlasmaFireWetSound;
|
stateTransitionOnAmmo[7] = "Reload";
|
||||||
stateTimeoutValue[9] = 1.0;
|
stateSequence[7] = "NoAmmo";
|
||||||
stateTransitionOnTimeout[9] = "Ready";
|
stateTransitionOnTriggerDown[7] = "DryFire";
|
||||||
|
|
||||||
stateName[10] = "CheckWet";
|
stateName[8] = "DryFire";
|
||||||
stateTransitionOnWet[10] = "WetFire";
|
stateSound[8] = ChaingunDryFireSound;
|
||||||
stateTransitionOnNotWet[10] = "Fire";
|
stateTimeoutValue[8] = 1.0;
|
||||||
|
stateTransitionOnTimeout[8] = "NoAmmo";
|
||||||
|
|
||||||
|
stateName[9] = "WetFire";
|
||||||
|
stateSound[9] = PlasmaFireWetSound;
|
||||||
|
stateTimeoutValue[9] = 1.0;
|
||||||
|
stateTransitionOnTimeout[9] = "Ready";
|
||||||
|
|
||||||
|
stateName[10] = "CheckWet";
|
||||||
|
stateTransitionOnWet[10] = "WetFire";
|
||||||
|
stateTransitionOnNotWet[10] = "Fire";
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ItemData(S3SRifle)
|
datablock ItemData(S3SRifle) {
|
||||||
{
|
className = Weapon;
|
||||||
className = Weapon;
|
catagory = "Spawn Items";
|
||||||
catagory = "Spawn Items";
|
shapeFile = "weapon_sniper.dts";
|
||||||
shapeFile = "weapon_sniper.dts";
|
image = S3SRifleImage;
|
||||||
image = S3SRifleImage;
|
mass = 1.0;
|
||||||
mass = 1.0;
|
elasticity = 0.0;
|
||||||
elasticity = 0.0;
|
friction = 0.6;
|
||||||
friction = 0.6;
|
pickupRadius = 2;
|
||||||
pickupRadius = 2;
|
pickUpName = "an S3S Combat Rifle";
|
||||||
pickUpName = "an S3S Combat Rifle";
|
|
||||||
|
|
||||||
computeCRC = true;
|
computeCRC = true;
|
||||||
emap = true;
|
emap = true;
|
||||||
};
|
};
|
||||||
|
|
@ -1,224 +1,219 @@
|
||||||
datablock AudioProfile(ShotgunFireSound) {
|
datablock AudioProfile(ShotgunFireSound) {
|
||||||
filename = "fx/weapons/TR2spinfusor_fire.wav";
|
filename = "fx/weapons/TR2spinfusor_fire.wav";
|
||||||
description = AudioClosest3d;
|
description = AudioClosest3d;
|
||||||
preload = true;
|
preload = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock TracerProjectileData(M1700Pellet)
|
datablock TracerProjectileData(M1700Pellet) {
|
||||||
{
|
doDynamicClientHits = true;
|
||||||
doDynamicClientHits = true;
|
|
||||||
|
|
||||||
directDamage = (0.075 * 1.5);
|
directDamage = 0.13;
|
||||||
directDamageType = $DamageType::M1700;
|
directDamageType = $DamageType::M1700;
|
||||||
explosion = "ChaingunExplosion";
|
explosion = "ChaingunExplosion";
|
||||||
splash = ChaingunSplash;
|
splash = ChaingunSplash;
|
||||||
HeadMultiplier = 1.2;
|
HeadMultiplier = 1.2;
|
||||||
LegsMultiplier = 0.75;
|
LegsMultiplier = 0.75;
|
||||||
|
|
||||||
ImageSource = "M1700Image";
|
|
||||||
|
|
||||||
longRangeMultiplier = 0.75;
|
ImageSource = "M1700Image";
|
||||||
kickBackStrength = 0.0;
|
|
||||||
sound = ChaingunProjectile;
|
|
||||||
|
|
||||||
dryVelocity = 1500.0;
|
longRangeMultiplier = 0.75;
|
||||||
wetVelocity = 1000.0;
|
kickBackStrength = 0.0;
|
||||||
velInheritFactor = 0.0;
|
sound = ChaingunProjectile;
|
||||||
fizzleTimeMS = 1000;
|
|
||||||
lifetimeMS = 1000;
|
|
||||||
explodeOnDeath = false;
|
|
||||||
reflectOnWaterImpactAngle = 0.0;
|
|
||||||
explodeOnWaterImpact = false;
|
|
||||||
deflectionOnWaterImpact = 0.0;
|
|
||||||
fizzleUnderwaterMS = 3000;
|
|
||||||
|
|
||||||
tracerLength = 5.0;
|
dryVelocity = 1500.0;
|
||||||
tracerAlpha = false;
|
wetVelocity = 1000.0;
|
||||||
tracerMinPixels = 6;
|
velInheritFactor = 0.0;
|
||||||
tracerColor = 211.0/255.0 @ " " @ 215.0/255.0 @ " " @ 120.0/255.0 @ " 0.75";
|
fizzleTimeMS = 100;
|
||||||
|
lifetimeMS = 150;
|
||||||
|
explodeOnDeath = false;
|
||||||
|
reflectOnWaterImpactAngle = 0.0;
|
||||||
|
explodeOnWaterImpact = false;
|
||||||
|
deflectionOnWaterImpact = 0.0;
|
||||||
|
fizzleUnderwaterMS = 3000;
|
||||||
|
|
||||||
|
tracerLength = 5.0;
|
||||||
|
tracerAlpha = false;
|
||||||
|
tracerMinPixels = 6;
|
||||||
|
tracerColor = 211.0/255.0 @ " " @ 215.0/255.0 @ " " @ 120.0/255.0 @ " 0.75";
|
||||||
tracerTex[0] = "special/tracer00";
|
tracerTex[0] = "special/tracer00";
|
||||||
tracerTex[1] = "special/tracercross";
|
tracerTex[1] = "special/tracercross";
|
||||||
tracerWidth = 0.09;
|
tracerWidth = 0.09;
|
||||||
crossSize = 0.20;
|
crossSize = 0.20;
|
||||||
crossViewAng = 0.990;
|
crossViewAng = 0.990;
|
||||||
renderCross = true;
|
renderCross = true;
|
||||||
|
|
||||||
decalData[0] = ChaingunDecal1;
|
decalData[0] = ChaingunDecal1;
|
||||||
decalData[1] = ChaingunDecal2;
|
decalData[1] = ChaingunDecal2;
|
||||||
decalData[2] = ChaingunDecal3;
|
decalData[2] = ChaingunDecal3;
|
||||||
decalData[3] = ChaingunDecal4;
|
decalData[3] = ChaingunDecal4;
|
||||||
decalData[4] = ChaingunDecal5;
|
decalData[4] = ChaingunDecal5;
|
||||||
decalData[5] = ChaingunDecal6;
|
decalData[5] = ChaingunDecal6;
|
||||||
};
|
};
|
||||||
|
|
||||||
//--------------------------------------------------------------------------
|
//--------------------------------------------------------------------------
|
||||||
// Ammo
|
// Ammo
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
|
|
||||||
datablock ItemData(M1700Ammo)
|
datablock ItemData(M1700Ammo) {
|
||||||
{
|
className = Ammo;
|
||||||
className = Ammo;
|
catagory = "Ammo";
|
||||||
catagory = "Ammo";
|
shapeFile = "ammo_chaingun.dts";
|
||||||
shapeFile = "ammo_chaingun.dts";
|
mass = 1;
|
||||||
mass = 1;
|
elasticity = 0.2;
|
||||||
elasticity = 0.2;
|
friction = 0.6;
|
||||||
friction = 0.6;
|
pickupRadius = 2;
|
||||||
pickupRadius = 2;
|
|
||||||
pickUpName = "some M1700 rounds";
|
pickUpName = "some M1700 rounds";
|
||||||
|
|
||||||
computeCRC = true;
|
computeCRC = true;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
//--------------------------------------------------------------------------
|
//--------------------------------------------------------------------------
|
||||||
// Weapon
|
// Weapon
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
datablock ShapeBaseImageData(M1700Image)
|
datablock ShapeBaseImageData(M1700Image) {
|
||||||
{
|
className = WeaponImage;
|
||||||
className = WeaponImage;
|
shapeFile = "weapon_plasma.dts";
|
||||||
shapeFile = "weapon_plasma.dts";
|
item = M1700;
|
||||||
item = M1700;
|
ammo = M1700Ammo;
|
||||||
ammo = M1700Ammo;
|
projectile = M1700Pellet;
|
||||||
projectile = M1700Pellet;
|
projectileType = TracerProjectile;
|
||||||
projectileType = TracerProjectile;
|
emap = true;
|
||||||
emap = true;
|
mass = 20;
|
||||||
mass = 20;
|
|
||||||
|
|
||||||
casing = ShellDebris;
|
casing = ShellDebris;
|
||||||
shellExitDir = "0.5 0.0 1.0"; // L/R - F/B - T/B
|
shellExitDir = "0.5 0.0 1.0"; // L/R - F/B - T/B
|
||||||
shellExitOffset = "0.15 -0.51 -0.1"; // L/R - F/B - T/B
|
shellExitOffset = "0.15 -0.51 -0.1"; // L/R - F/B - T/B
|
||||||
shellExitVariance = 10.0;
|
shellExitVariance = 10.0;
|
||||||
shellVelocity = 4.0;
|
shellVelocity = 4.0;
|
||||||
|
|
||||||
//ClipStuff
|
//ClipStuff
|
||||||
ClipName = "M1700Clip";
|
ClipName = "M1700Clip";
|
||||||
ClipPickupName["M1700Clip"] = "some M1700 Clip Boxes";
|
ClipPickupName["M1700Clip"] = "some M1700 Clip Boxes";
|
||||||
ShowsClipInHud = 1;
|
ShowsClipInHud = 1;
|
||||||
ClipReloadTime = 2;
|
ClipReloadTime = 3;
|
||||||
ClipReturn = 1;
|
ClipReturn = 1;
|
||||||
InitialClips = 15;
|
InitialClips = 15;
|
||||||
//
|
//
|
||||||
|
|
||||||
//Challenges
|
|
||||||
HasChallenges = 1;
|
|
||||||
ChallengeCt = 9;
|
|
||||||
Challenge[1] = "M1700 Killer\t50\t100\tNone";
|
|
||||||
Challenge[2] = "M1700 Extremist\t100\t150\tNone";
|
|
||||||
Challenge[3] = "M1700 Expert\t250\t250\tNone";
|
|
||||||
Challenge[4] = "M1700 Master\t500\t500\tNone";
|
|
||||||
Challenge[5] = "M1700 God\t1000\t1000\tNone";
|
|
||||||
Challenge[6] = "M1700 Bronze Commendation\t2500\t10000\tNone";
|
|
||||||
Challenge[7] = "M1700 Silver Commendation\t5000\t25000\tNone";
|
|
||||||
Challenge[8] = "M1700 Gold Commendation\t10000\t50000\tNone";
|
|
||||||
Challenge[9] = "M1700 Titan Commendation\t25000\t75000\tNone";
|
|
||||||
GunName = "M1700 Shotgun";
|
|
||||||
//
|
|
||||||
|
|
||||||
projectileSpread = 11.0 / 1000.0;
|
//Challenges
|
||||||
|
HasChallenges = 1;
|
||||||
|
ChallengeCt = 9;
|
||||||
|
Challenge[1] = "M1700 Killer\t50\t100\tNone";
|
||||||
|
Challenge[2] = "M1700 Extremist\t100\t150\tNone";
|
||||||
|
Challenge[3] = "M1700 Expert\t250\t250\tNone";
|
||||||
|
Challenge[4] = "M1700 Master\t500\t500\tNone";
|
||||||
|
Challenge[5] = "M1700 God\t1000\t1000\tNone";
|
||||||
|
Challenge[6] = "M1700 Bronze Commendation\t2500\t10000\tNone";
|
||||||
|
Challenge[7] = "M1700 Silver Commendation\t5000\t25000\tNone";
|
||||||
|
Challenge[8] = "M1700 Gold Commendation\t10000\t50000\tNone";
|
||||||
|
Challenge[9] = "M1700 Titan Commendation\t25000\t75000\tNone";
|
||||||
|
GunName = "M1700 Shotgun";
|
||||||
|
//
|
||||||
|
|
||||||
stateName[0] = "Activate";
|
projectileSpread = 11.0 / 1000.0;
|
||||||
stateTransitionOnTimeout[0] = "ActivateReady";
|
|
||||||
stateTimeoutValue[0] = 0.5;
|
|
||||||
stateSequence[0] = "Activate";
|
|
||||||
stateSound[0] = ChaingunSwitchSound;
|
|
||||||
|
|
||||||
stateName[1] = "ActivateReady";
|
stateName[0] = "Activate";
|
||||||
stateTransitionOnLoaded[1] = "Ready";
|
stateTransitionOnTimeout[0] = "ActivateReady";
|
||||||
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
stateTimeoutValue[0] = 0.5;
|
||||||
|
stateSequence[0] = "Activate";
|
||||||
|
stateSound[0] = ChaingunSwitchSound;
|
||||||
|
|
||||||
stateName[2] = "Ready";
|
stateName[1] = "ActivateReady";
|
||||||
stateTransitionOnNoAmmo[2] = "NoAmmo";
|
stateTransitionOnLoaded[1] = "Ready";
|
||||||
stateTransitionOnTriggerDown[2] = "CheckWet";
|
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
||||||
|
|
||||||
stateName[3] = "Fire";
|
stateName[2] = "Ready";
|
||||||
stateTransitionOnTimeout[3] = "Reload";
|
stateTransitionOnNoAmmo[2] = "NoAmmo";
|
||||||
stateTimeoutValue[3] = 0.0001;
|
stateTransitionOnTriggerDown[2] = "CheckWet";
|
||||||
stateFire[3] = true;
|
|
||||||
stateEjectShell[3] = true;
|
|
||||||
stateEmitter[3] = "GunFireEffectEmitter";
|
|
||||||
stateEmitterNode[3] = "muzzlepoint1";
|
|
||||||
stateEmitterTime[3] = 1;
|
|
||||||
stateRecoil[3] = LightRecoil;
|
|
||||||
stateAllowImageChange[3] = false;
|
|
||||||
stateScript[3] = "onFire";
|
|
||||||
stateEmitterTime[3] = 0.2;
|
|
||||||
stateSound[3] = SniperFireSound;
|
|
||||||
|
|
||||||
stateName[4] = "Reload";
|
stateName[3] = "Fire";
|
||||||
stateTransitionOnNoAmmo[4] = "NoAmmo";
|
stateTransitionOnTimeout[3] = "Reload";
|
||||||
stateTransitionOnTimeout[4] = "Ready";
|
stateTimeoutValue[3] = 0.0001;
|
||||||
stateTimeoutValue[4] = 0.5;
|
stateFire[3] = true;
|
||||||
stateAllowImageChange[4] = false;
|
stateEjectShell[3] = true;
|
||||||
stateSequence[4] = "Reload";
|
stateEmitter[3] = "GunFireEffectEmitter";
|
||||||
|
stateEmitterNode[3] = "muzzlepoint1";
|
||||||
|
stateEmitterTime[3] = 1;
|
||||||
|
stateRecoil[3] = LightRecoil;
|
||||||
|
stateAllowImageChange[3] = false;
|
||||||
|
stateScript[3] = "onFire";
|
||||||
|
stateEmitterTime[3] = 0.2;
|
||||||
|
stateSound[3] = SniperFireSound;
|
||||||
|
|
||||||
stateName[5] = "NoAmmo";
|
stateName[4] = "Reload";
|
||||||
stateTransitionOnAmmo[5] = "Reload";
|
stateTransitionOnNoAmmo[4] = "NoAmmo";
|
||||||
stateSequence[5] = "NoAmmo";
|
stateTransitionOnTimeout[4] = "Ready";
|
||||||
stateTransitionOnTriggerDown[5] = "DryFire";
|
stateTimeoutValue[4] = 0.5;
|
||||||
|
stateAllowImageChange[4] = false;
|
||||||
|
stateSequence[4] = "Reload";
|
||||||
|
|
||||||
stateName[6] = "DryFire";
|
stateName[5] = "NoAmmo";
|
||||||
stateSound[6] = ChaingunDryFireSound;
|
stateTransitionOnAmmo[5] = "Reload";
|
||||||
stateTimeoutValue[6] = 1.0;
|
stateSequence[5] = "NoAmmo";
|
||||||
stateTransitionOnTimeout[6] = "NoAmmo";
|
stateTransitionOnTriggerDown[5] = "DryFire";
|
||||||
|
|
||||||
stateName[7] = "WetFire";
|
stateName[6] = "DryFire";
|
||||||
stateSound[7] = ChaingunDryFireSound;
|
stateSound[6] = ChaingunDryFireSound;
|
||||||
stateTimeoutValue[7] = 1.0;
|
stateTimeoutValue[6] = 1.0;
|
||||||
stateTransitionOnTimeout[7] = "Ready";
|
stateTransitionOnTimeout[6] = "NoAmmo";
|
||||||
|
|
||||||
stateName[8] = "CheckWet";
|
stateName[7] = "WetFire";
|
||||||
stateTransitionOnWet[8] = "WetFire";
|
stateSound[7] = ChaingunDryFireSound;
|
||||||
stateTransitionOnNotWet[8] = "Fire";
|
stateTimeoutValue[7] = 1.0;
|
||||||
|
stateTransitionOnTimeout[7] = "Ready";
|
||||||
|
|
||||||
|
stateName[8] = "CheckWet";
|
||||||
|
stateTransitionOnWet[8] = "WetFire";
|
||||||
|
stateTransitionOnNotWet[8] = "Fire";
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ItemData(M1700)
|
datablock ItemData(M1700) {
|
||||||
{
|
className = Weapon;
|
||||||
className = Weapon;
|
catagory = "Spawn Items";
|
||||||
catagory = "Spawn Items";
|
shapeFile = "weapon_plasma.dts";
|
||||||
shapeFile = "weapon_plasma.dts";
|
image = M1700Image;
|
||||||
image = M1700Image;
|
mass = 1.0;
|
||||||
mass = 1.0;
|
elasticity = 0.2;
|
||||||
elasticity = 0.2;
|
friction = 0.6;
|
||||||
friction = 0.6;
|
pickupRadius = 2;
|
||||||
pickupRadius = 2;
|
pickUpName = "a M1700";
|
||||||
pickUpName = "a M1700";
|
|
||||||
|
|
||||||
computeCRC = true;
|
computeCRC = true;
|
||||||
emap = true;
|
emap = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
function M1700Image::onMount(%this,%obj,%slot) {
|
function M1700Image::onMount(%this,%obj,%slot) {
|
||||||
Parent::onMount(%this, %obj, %slot);
|
Parent::onMount(%this, %obj, %slot);
|
||||||
}
|
}
|
||||||
|
|
||||||
function M1700Image::onFire(%data,%obj,%slot) {
|
function M1700Image::onFire(%data,%obj,%slot) {
|
||||||
serverPlay3D(ShotgunFireSound, %obj.getPosition());
|
serverPlay3D(ShotgunFireSound, %obj.getPosition());
|
||||||
|
|
||||||
%obj.applyKick(-250);
|
%obj.applyKick(-250);
|
||||||
%obj.decInventory(%data.ammo,1);
|
%obj.decInventory(%data.ammo,1);
|
||||||
|
|
||||||
%vector = %obj.getMuzzleVector(%slot);
|
%vector = %obj.getMuzzleVector(%slot);
|
||||||
%mp = %obj.getMuzzlePoint(%slot);
|
%mp = %obj.getMuzzlePoint(%slot);
|
||||||
|
|
||||||
for (%i=0; %i < 12; %i++) {
|
for (%i=0; %i < 12; %i++) {
|
||||||
%x = (getRandom() - 0.5) * 2 * 3.1415926 * %data.projectileSpread;
|
%x = (getRandom() - 0.5) * 2 * 3.1415926 * %data.projectileSpread;
|
||||||
%y = (getRandom() - 0.5) * 2 * 3.1415926 * %data.projectileSpread;
|
%y = (getRandom() - 0.5) * 2 * 3.1415926 * %data.projectileSpread;
|
||||||
%z = (getRandom() - 0.5) * 2 * 3.1415926 * %data.projectileSpread;
|
%z = (getRandom() - 0.5) * 2 * 3.1415926 * %data.projectileSpread;
|
||||||
%mat = MatrixCreateFromEuler(%x @ " " @ %y @ " " @ %z);
|
%mat = MatrixCreateFromEuler(%x @ " " @ %y @ " " @ %z);
|
||||||
%newvector = MatrixMulVector(%mat, %vector);
|
%newvector = MatrixMulVector(%mat, %vector);
|
||||||
|
|
||||||
%p = new (%data.projectileType)() {
|
%p = new (%data.projectileType)() {
|
||||||
dataBlock = %data.projectile;
|
dataBlock = %data.projectile;
|
||||||
initialDirection = %newvector;
|
initialDirection = %newvector;
|
||||||
initialPosition = %mp;
|
initialPosition = %mp;
|
||||||
sourceObject = %obj;
|
sourceObject = %obj;
|
||||||
damageFactor = 1;
|
damageFactor = 1;
|
||||||
sourceSlot = %slot;
|
sourceSlot = %slot;
|
||||||
};
|
};
|
||||||
|
|
||||||
%p.WeaponImageSource = %data.getName();
|
%p.WeaponImageSource = %data.getName();
|
||||||
}
|
}
|
||||||
if(%obj.inv[M1700Ammo] == 0) { //Added Phantom139, TWM2
|
if(%obj.inv[M1700Ammo] == 0) { //Added Phantom139, TWM2
|
||||||
AttemptReload(%data, %obj, %slot);
|
AttemptReload(%data, %obj, %slot);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,218 +1,213 @@
|
||||||
datablock TracerProjectileData(Model1887Pellet)
|
datablock TracerProjectileData(Model1887Pellet) {
|
||||||
{
|
doDynamicClientHits = true;
|
||||||
doDynamicClientHits = true;
|
|
||||||
|
|
||||||
directDamage = (0.064 * 1.5);
|
directDamage = 0.11;
|
||||||
directDamageType = $DamageType::Model1887;
|
directDamageType = $DamageType::Model1887;
|
||||||
explosion = "ChaingunExplosion";
|
explosion = "ChaingunExplosion";
|
||||||
splash = ChaingunSplash;
|
splash = ChaingunSplash;
|
||||||
HeadMultiplier = 1.2;
|
HeadMultiplier = 1.2;
|
||||||
LegsMultiplier = 0.75;
|
LegsMultiplier = 0.75;
|
||||||
|
|
||||||
longRangeMultiplier = 0.75;
|
longRangeMultiplier = 0.75;
|
||||||
kickBackStrength = 0.0;
|
kickBackStrength = 0.0;
|
||||||
sound = ChaingunProjectile;
|
sound = ChaingunProjectile;
|
||||||
|
|
||||||
ImageSource = "Model1887Image";
|
|
||||||
|
|
||||||
dryVelocity = 1500.0;
|
ImageSource = "Model1887Image";
|
||||||
wetVelocity = 1000.0;
|
|
||||||
velInheritFactor = 0.0;
|
|
||||||
fizzleTimeMS = 500;
|
|
||||||
lifetimeMS = 500;
|
|
||||||
explodeOnDeath = false;
|
|
||||||
reflectOnWaterImpactAngle = 0.0;
|
|
||||||
explodeOnWaterImpact = false;
|
|
||||||
deflectionOnWaterImpact = 0.0;
|
|
||||||
fizzleUnderwaterMS = 3000;
|
|
||||||
|
|
||||||
tracerLength = 5.0;
|
dryVelocity = 1500.0;
|
||||||
tracerAlpha = false;
|
wetVelocity = 1000.0;
|
||||||
tracerMinPixels = 6;
|
velInheritFactor = 0.0;
|
||||||
tracerColor = 211.0/255.0 @ " " @ 215.0/255.0 @ " " @ 120.0/255.0 @ " 0.75";
|
fizzleTimeMS = 100;
|
||||||
|
lifetimeMS = 125;
|
||||||
|
explodeOnDeath = false;
|
||||||
|
reflectOnWaterImpactAngle = 0.0;
|
||||||
|
explodeOnWaterImpact = false;
|
||||||
|
deflectionOnWaterImpact = 0.0;
|
||||||
|
fizzleUnderwaterMS = 3000;
|
||||||
|
|
||||||
|
tracerLength = 5.0;
|
||||||
|
tracerAlpha = false;
|
||||||
|
tracerMinPixels = 6;
|
||||||
|
tracerColor = 211.0/255.0 @ " " @ 215.0/255.0 @ " " @ 120.0/255.0 @ " 0.75";
|
||||||
tracerTex[0] = "special/tracer00";
|
tracerTex[0] = "special/tracer00";
|
||||||
tracerTex[1] = "special/tracercross";
|
tracerTex[1] = "special/tracercross";
|
||||||
tracerWidth = 0.09;
|
tracerWidth = 0.09;
|
||||||
crossSize = 0.20;
|
crossSize = 0.20;
|
||||||
crossViewAng = 0.990;
|
crossViewAng = 0.990;
|
||||||
renderCross = true;
|
renderCross = true;
|
||||||
|
|
||||||
decalData[0] = ChaingunDecal1;
|
decalData[0] = ChaingunDecal1;
|
||||||
decalData[1] = ChaingunDecal2;
|
decalData[1] = ChaingunDecal2;
|
||||||
decalData[2] = ChaingunDecal3;
|
decalData[2] = ChaingunDecal3;
|
||||||
decalData[3] = ChaingunDecal4;
|
decalData[3] = ChaingunDecal4;
|
||||||
decalData[4] = ChaingunDecal5;
|
decalData[4] = ChaingunDecal5;
|
||||||
decalData[5] = ChaingunDecal6;
|
decalData[5] = ChaingunDecal6;
|
||||||
};
|
};
|
||||||
|
|
||||||
//--------------------------------------------------------------------------
|
//--------------------------------------------------------------------------
|
||||||
// Ammo
|
// Ammo
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
|
|
||||||
datablock ItemData(Model1887Ammo)
|
datablock ItemData(Model1887Ammo) {
|
||||||
{
|
className = Ammo;
|
||||||
className = Ammo;
|
catagory = "Ammo";
|
||||||
catagory = "Ammo";
|
shapeFile = "ammo_chaingun.dts";
|
||||||
shapeFile = "ammo_chaingun.dts";
|
mass = 1;
|
||||||
mass = 1;
|
elasticity = 0.2;
|
||||||
elasticity = 0.2;
|
friction = 0.6;
|
||||||
friction = 0.6;
|
pickupRadius = 2;
|
||||||
pickupRadius = 2;
|
|
||||||
pickUpName = "some Model 1887 rounds";
|
pickUpName = "some Model 1887 rounds";
|
||||||
|
|
||||||
computeCRC = true;
|
computeCRC = true;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
//--------------------------------------------------------------------------
|
//--------------------------------------------------------------------------
|
||||||
// Weapon
|
// Weapon
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
datablock ShapeBaseImageData(Model1887Image)
|
datablock ShapeBaseImageData(Model1887Image) {
|
||||||
{
|
className = WeaponImage;
|
||||||
className = WeaponImage;
|
shapeFile = "weapon_disc.dts";
|
||||||
shapeFile = "weapon_disc.dts";
|
item = Model1887;
|
||||||
item = Model1887;
|
ammo = Model1887Ammo;
|
||||||
ammo = Model1887Ammo;
|
projectile = Model1887Pellet;
|
||||||
projectile = Model1887Pellet;
|
projectileType = TracerProjectile;
|
||||||
projectileType = TracerProjectile;
|
emap = true;
|
||||||
emap = true;
|
mass = 20;
|
||||||
mass = 20;
|
|
||||||
|
|
||||||
casing = ShellDebris;
|
casing = ShellDebris;
|
||||||
shellExitDir = "0.5 0.0 1.0"; // L/R - F/B - T/B
|
shellExitDir = "0.5 0.0 1.0"; // L/R - F/B - T/B
|
||||||
shellExitOffset = "0.15 -0.51 -0.1"; // L/R - F/B - T/B
|
shellExitOffset = "0.15 -0.51 -0.1"; // L/R - F/B - T/B
|
||||||
shellExitVariance = 10.0;
|
shellExitVariance = 10.0;
|
||||||
shellVelocity = 4.0;
|
shellVelocity = 4.0;
|
||||||
|
|
||||||
//ClipStuff
|
//ClipStuff
|
||||||
ClipName = "Model1887Clip";
|
ClipName = "Model1887Clip";
|
||||||
ClipPickupName["Model1887Clip"] = "some Model 1887 Clip Boxes";
|
ClipPickupName["Model1887Clip"] = "some Model 1887 Clip Boxes";
|
||||||
ShowsClipInHud = 1;
|
ShowsClipInHud = 1;
|
||||||
ClipReloadTime = 9;
|
ClipReloadTime = 9;
|
||||||
ClipReturn = 7;
|
ClipReturn = 7;
|
||||||
InitialClips = 3;
|
InitialClips = 3;
|
||||||
|
|
||||||
ReloadSingle = 1;
|
|
||||||
SingleShotAdd = 1;
|
|
||||||
//
|
|
||||||
RankRequire = $TWM2::RankRequire["RSALaserRifle"];
|
|
||||||
PrestigeRequire = 1;
|
|
||||||
|
|
||||||
//Challenges
|
ReloadSingle = 1;
|
||||||
HasChallenges = 1;
|
SingleShotAdd = 1;
|
||||||
ChallengeCt = 9;
|
//
|
||||||
Challenge[1] = "Model 1887 Killer\t50\t100\tNone";
|
RankRequire = $TWM2::RankRequire["RSALaserRifle"];
|
||||||
Challenge[2] = "Model 1887 Extremist\t100\t150\tNone";
|
PrestigeRequire = 1;
|
||||||
Challenge[3] = "Model 1887 Expert\t250\t250\tNone";
|
|
||||||
Challenge[4] = "Model 1887 Master\t500\t500\tNone";
|
|
||||||
Challenge[5] = "Model 1887 God\t1000\t1000\tNone";
|
|
||||||
Challenge[6] = "Model 1887 Bronze Commendation\t2500\t10000\tNone";
|
|
||||||
Challenge[7] = "Model 1887 Silver Commendation\t5000\t25000\tNone";
|
|
||||||
Challenge[8] = "Model 1887 Gold Commendation\t10000\t50000\tNone";
|
|
||||||
Challenge[9] = "Model 1887 Titan Commendation\t25000\t75000\tNone";
|
|
||||||
GunName = "Model 1887 Shotgun";
|
|
||||||
//
|
|
||||||
|
|
||||||
projectileSpread = 7.0 / 1000.0;
|
//Challenges
|
||||||
|
HasChallenges = 1;
|
||||||
|
ChallengeCt = 9;
|
||||||
|
Challenge[1] = "Model 1887 Killer\t50\t100\tNone";
|
||||||
|
Challenge[2] = "Model 1887 Extremist\t100\t150\tNone";
|
||||||
|
Challenge[3] = "Model 1887 Expert\t250\t250\tNone";
|
||||||
|
Challenge[4] = "Model 1887 Master\t500\t500\tNone";
|
||||||
|
Challenge[5] = "Model 1887 God\t1000\t1000\tNone";
|
||||||
|
Challenge[6] = "Model 1887 Bronze Commendation\t2500\t10000\tNone";
|
||||||
|
Challenge[7] = "Model 1887 Silver Commendation\t5000\t25000\tNone";
|
||||||
|
Challenge[8] = "Model 1887 Gold Commendation\t10000\t50000\tNone";
|
||||||
|
Challenge[9] = "Model 1887 Titan Commendation\t25000\t75000\tNone";
|
||||||
|
GunName = "Model 1887 Shotgun";
|
||||||
|
//
|
||||||
|
|
||||||
stateName[0] = "Activate";
|
projectileSpread = 7.0 / 1000.0;
|
||||||
stateTransitionOnTimeout[0] = "ActivateReady";
|
|
||||||
stateTimeoutValue[0] = 0.5;
|
|
||||||
stateSequence[0] = "Activate";
|
|
||||||
stateSound[0] = ChaingunSwitchSound;
|
|
||||||
|
|
||||||
stateName[1] = "ActivateReady";
|
stateName[0] = "Activate";
|
||||||
stateTransitionOnLoaded[1] = "Ready";
|
stateTransitionOnTimeout[0] = "ActivateReady";
|
||||||
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
stateTimeoutValue[0] = 0.5;
|
||||||
|
stateSequence[0] = "Activate";
|
||||||
|
stateSound[0] = ChaingunSwitchSound;
|
||||||
|
|
||||||
stateName[2] = "Ready";
|
stateName[1] = "ActivateReady";
|
||||||
stateTransitionOnNoAmmo[2] = "NoAmmo";
|
stateTransitionOnLoaded[1] = "Ready";
|
||||||
stateTransitionOnTriggerDown[2] = "CheckWet";
|
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
||||||
|
|
||||||
stateName[3] = "Fire";
|
stateName[2] = "Ready";
|
||||||
stateTransitionOnTimeout[3] = "Reload";
|
stateTransitionOnNoAmmo[2] = "NoAmmo";
|
||||||
stateTimeoutValue[3] = 0.0001;
|
stateTransitionOnTriggerDown[2] = "CheckWet";
|
||||||
stateFire[3] = true;
|
|
||||||
stateEjectShell[3] = true;
|
|
||||||
stateRecoil[3] = LightRecoil;
|
|
||||||
stateAllowImageChange[3] = false;
|
|
||||||
stateScript[3] = "onFire";
|
|
||||||
|
|
||||||
stateName[4] = "Reload";
|
stateName[3] = "Fire";
|
||||||
stateTransitionOnNoAmmo[4] = "NoAmmo";
|
stateTransitionOnTimeout[3] = "Reload";
|
||||||
stateTransitionOnTimeout[4] = "Ready";
|
stateTimeoutValue[3] = 0.0001;
|
||||||
stateTimeoutValue[4] = 1.0;
|
stateFire[3] = true;
|
||||||
stateAllowImageChange[4] = false;
|
stateEjectShell[3] = true;
|
||||||
stateSequence[4] = "Reload";
|
stateRecoil[3] = LightRecoil;
|
||||||
|
stateAllowImageChange[3] = false;
|
||||||
|
stateScript[3] = "onFire";
|
||||||
|
|
||||||
stateName[5] = "NoAmmo";
|
stateName[4] = "Reload";
|
||||||
stateTransitionOnAmmo[5] = "Reload";
|
stateTransitionOnNoAmmo[4] = "NoAmmo";
|
||||||
stateSequence[5] = "NoAmmo";
|
stateTransitionOnTimeout[4] = "Ready";
|
||||||
stateTransitionOnTriggerDown[5] = "DryFire";
|
stateTimeoutValue[4] = 1.0;
|
||||||
|
stateAllowImageChange[4] = false;
|
||||||
|
stateSequence[4] = "Reload";
|
||||||
|
|
||||||
stateName[6] = "DryFire";
|
stateName[5] = "NoAmmo";
|
||||||
stateSound[6] = ChaingunDryFireSound;
|
stateTransitionOnAmmo[5] = "Reload";
|
||||||
stateTimeoutValue[6] = 1.0;
|
stateSequence[5] = "NoAmmo";
|
||||||
stateTransitionOnTimeout[6] = "NoAmmo";
|
stateTransitionOnTriggerDown[5] = "DryFire";
|
||||||
|
|
||||||
stateName[7] = "WetFire";
|
stateName[6] = "DryFire";
|
||||||
stateSound[7] = ChaingunDryFireSound;
|
stateSound[6] = ChaingunDryFireSound;
|
||||||
stateTimeoutValue[7] = 1.0;
|
stateTimeoutValue[6] = 1.0;
|
||||||
stateTransitionOnTimeout[7] = "Ready";
|
stateTransitionOnTimeout[6] = "NoAmmo";
|
||||||
|
|
||||||
stateName[8] = "CheckWet";
|
stateName[7] = "WetFire";
|
||||||
stateTransitionOnWet[8] = "WetFire";
|
stateSound[7] = ChaingunDryFireSound;
|
||||||
stateTransitionOnNotWet[8] = "Fire";
|
stateTimeoutValue[7] = 1.0;
|
||||||
|
stateTransitionOnTimeout[7] = "Ready";
|
||||||
|
|
||||||
|
stateName[8] = "CheckWet";
|
||||||
|
stateTransitionOnWet[8] = "WetFire";
|
||||||
|
stateTransitionOnNotWet[8] = "Fire";
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ItemData(Model1887)
|
datablock ItemData(Model1887 {
|
||||||
{
|
className = Weapon;
|
||||||
className = Weapon;
|
catagory = "Spawn Items";
|
||||||
catagory = "Spawn Items";
|
shapeFile = "weapon_plasma.dts";
|
||||||
shapeFile = "weapon_plasma.dts";
|
image = Model1887Image;
|
||||||
image = Model1887Image;
|
mass = 1.0;
|
||||||
mass = 1.0;
|
elasticity = 0.2;
|
||||||
elasticity = 0.2;
|
friction = 0.6;
|
||||||
friction = 0.6;
|
pickupRadius = 2;
|
||||||
pickupRadius = 2;
|
pickUpName = "a Model 1887";
|
||||||
pickUpName = "a Model 1887";
|
|
||||||
|
|
||||||
computeCRC = true;
|
computeCRC = true;
|
||||||
emap = true;
|
emap = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
function Model1887Image::onMount(%this,%obj,%slot) {
|
function Model1887Image::onMount(%this,%obj,%slot) {
|
||||||
Parent::onMount(%this, %obj, %slot);
|
Parent::onMount(%this, %obj, %slot);
|
||||||
}
|
}
|
||||||
|
|
||||||
function Model1887Image::onFire(%data,%obj,%slot) {
|
function Model1887Image::onFire(%data,%obj,%slot) {
|
||||||
serverPlay3D(ShotgunFireSound, %obj.getPosition());
|
serverPlay3D(ShotgunFireSound, %obj.getPosition());
|
||||||
|
|
||||||
%obj.applyKick(-250);
|
%obj.applyKick(-250);
|
||||||
%obj.decInventory(%data.ammo,1);
|
%obj.decInventory(%data.ammo,1);
|
||||||
|
|
||||||
%vector = %obj.getMuzzleVector(%slot);
|
%vector = %obj.getMuzzleVector(%slot);
|
||||||
%mp = %obj.getMuzzlePoint(%slot);
|
%mp = %obj.getMuzzlePoint(%slot);
|
||||||
|
|
||||||
for (%i = 0; %i < 14; %i++) {
|
for (%i = 0; %i < 18; %i++) {
|
||||||
%x = (getRandom() - 0.5) * 2 * 3.1415926 * %data.projectileSpread;
|
%x = (getRandom() - 0.5) * 2 * 3.1415926 * %data.projectileSpread;
|
||||||
%y = (getRandom() - 0.5) * 2 * 3.1415926 * %data.projectileSpread;
|
%y = (getRandom() - 0.5) * 2 * 3.1415926 * %data.projectileSpread;
|
||||||
%z = (getRandom() - 0.5) * 2 * 3.1415926 * %data.projectileSpread;
|
%z = (getRandom() - 0.5) * 2 * 3.1415926 * %data.projectileSpread;
|
||||||
%mat = MatrixCreateFromEuler(%x @ " " @ %y @ " " @ %z);
|
%mat = MatrixCreateFromEuler(%x @ " " @ %y @ " " @ %z);
|
||||||
%newvector = MatrixMulVector(%mat, %vector);
|
%newvector = MatrixMulVector(%mat, %vector);
|
||||||
|
|
||||||
%p = new (%data.projectileType)() {
|
%p = new (%data.projectileType)() {
|
||||||
dataBlock = %data.projectile;
|
dataBlock = %data.projectile;
|
||||||
initialDirection = %newvector;
|
initialDirection = %newvector;
|
||||||
initialPosition = %mp;
|
initialPosition = %mp;
|
||||||
sourceObject = %obj;
|
sourceObject = %obj;
|
||||||
damageFactor = 1;
|
damageFactor = 1;
|
||||||
sourceSlot = %slot;
|
sourceSlot = %slot;
|
||||||
};
|
};
|
||||||
|
|
||||||
%p.WeaponImageSource = %data.getName();
|
%p.WeaponImageSource = %data.getName();
|
||||||
}
|
}
|
||||||
if(%obj.inv[Model1887Ammo] == 0) { //Added Phantom139, TWM2
|
if(%obj.inv[Model1887Ammo] == 0) { //Added Phantom139, TWM2
|
||||||
AttemptReload(%data, %obj, %slot);
|
AttemptReload(%data, %obj, %slot);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -8,23 +8,22 @@
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
|
|
||||||
|
|
||||||
datablock DebrisData( SemiAutoShellDebris )
|
datablock DebrisData( SemiAutoShellDebris ) {
|
||||||
{
|
shapeName = "weapon_chaingun_ammocasing.dts";
|
||||||
shapeName = "weapon_chaingun_ammocasing.dts";
|
|
||||||
|
|
||||||
lifetime = 7.0;
|
lifetime = 7.0;
|
||||||
|
|
||||||
minSpinSpeed = 600.0;
|
minSpinSpeed = 600.0;
|
||||||
maxSpinSpeed = 800.0;
|
maxSpinSpeed = 800.0;
|
||||||
|
|
||||||
elasticity = 0.8;
|
elasticity = 0.8;
|
||||||
friction = 0.3;
|
friction = 0.3;
|
||||||
|
|
||||||
numBounces = 5;
|
numBounces = 5;
|
||||||
|
|
||||||
fade = true;
|
fade = true;
|
||||||
staticOnMaxBounce = true;
|
staticOnMaxBounce = true;
|
||||||
snapOnMaxBounce = true;
|
snapOnMaxBounce = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -32,295 +31,288 @@ datablock DebrisData( SemiAutoShellDebris )
|
||||||
// Projectile
|
// Projectile
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
|
|
||||||
datablock TracerProjectileData( SA2400Slug )
|
datablock TracerProjectileData( SA2400Slug ) {
|
||||||
{
|
doDynamicClientHits = true;
|
||||||
doDynamicClientHits = true;
|
|
||||||
|
|
||||||
directDamage = 0.3;
|
directDamage = 0.3;
|
||||||
directDamageType = $DamageType::SA2400;
|
directDamageType = $DamageType::SA2400;
|
||||||
explosion = "ChaingunExplosion";
|
explosion = "ChaingunExplosion";
|
||||||
splash = ChaingunSplash;
|
splash = ChaingunSplash;
|
||||||
|
|
||||||
HeadMultiplier = 1.9;
|
|
||||||
|
|
||||||
kickBackStrength = 428.0;
|
HeadMultiplier = 1.9;
|
||||||
sound = ChaingunProjectile;
|
|
||||||
|
|
||||||
ImageSource = "SA2400Image";
|
kickBackStrength = 428.0;
|
||||||
|
sound = ChaingunProjectile;
|
||||||
|
|
||||||
dryVelocity = 2561.0;
|
ImageSource = "SA2400Image";
|
||||||
wetVelocity = 586.0;
|
|
||||||
velInheritFactor = 1.0;
|
|
||||||
fizzleTimeMS = 3000;
|
|
||||||
lifetimeMS = 3000;
|
|
||||||
explodeOnDeath = false;
|
|
||||||
reflectOnWaterImpactAngle = 40.0;
|
|
||||||
explodeOnWaterImpact = false;
|
|
||||||
deflectionOnWaterImpact = 40.0;
|
|
||||||
fizzleUnderwaterMS = 3000;
|
|
||||||
|
|
||||||
tracerLength = 37.0;
|
dryVelocity = 2561.0;
|
||||||
tracerAlpha = false;
|
wetVelocity = 586.0;
|
||||||
tracerMinPixels = 6;
|
velInheritFactor = 1.0;
|
||||||
tracerColor = 211.0/255.0 @ " " @ 215.0/255.0 @ " " @ 120.0/255.0 @ " 0.75";
|
fizzleTimeMS = 150;
|
||||||
|
lifetimeMS = 200;
|
||||||
|
explodeOnDeath = false;
|
||||||
|
reflectOnWaterImpactAngle = 40.0;
|
||||||
|
explodeOnWaterImpact = false;
|
||||||
|
deflectionOnWaterImpact = 40.0;
|
||||||
|
fizzleUnderwaterMS = 3000;
|
||||||
|
|
||||||
|
tracerLength = 37.0;
|
||||||
|
tracerAlpha = false;
|
||||||
|
tracerMinPixels = 6;
|
||||||
|
tracerColor = 211.0/255.0 @ " " @ 215.0/255.0 @ " " @ 120.0/255.0 @ " 0.75";
|
||||||
tracerTex[0] = "special/tracer00";
|
tracerTex[0] = "special/tracer00";
|
||||||
tracerTex[1] = "special/tracercross";
|
tracerTex[1] = "special/tracercross";
|
||||||
tracerWidth = 0.10;
|
tracerWidth = 0.10;
|
||||||
crossSize = 0.20;
|
crossSize = 0.20;
|
||||||
crossViewAng = 0.990;
|
crossViewAng = 0.990;
|
||||||
renderCross = true;
|
renderCross = true;
|
||||||
|
|
||||||
decalData[0] = ChaingunDecal1;
|
decalData[0] = ChaingunDecal1;
|
||||||
decalData[1] = ChaingunDecal1;
|
decalData[1] = ChaingunDecal1;
|
||||||
decalData[2] = ChaingunDecal1;
|
decalData[2] = ChaingunDecal1;
|
||||||
decalData[3] = ChaingunDecal1;
|
decalData[3] = ChaingunDecal1;
|
||||||
decalData[4] = ChaingunDecal1;
|
decalData[4] = ChaingunDecal1;
|
||||||
decalData[5] = ChaingunDecal1;
|
decalData[5] = ChaingunDecal1;
|
||||||
};
|
};
|
||||||
//--------------------------------------------------------------------------
|
//--------------------------------------------------------------------------
|
||||||
// Ammo
|
// Ammo
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
|
|
||||||
datablock ItemData( SA2400Ammo )
|
datablock ItemData( SA2400Ammo ) {
|
||||||
{
|
className = Ammo;
|
||||||
className = Ammo;
|
catagory = "Ammo";
|
||||||
catagory = "Ammo";
|
shapeFile = "ammo_chaingun.dts";
|
||||||
shapeFile = "ammo_chaingun.dts";
|
mass = 1;
|
||||||
mass = 1;
|
elasticity = 0.2;
|
||||||
elasticity = 0.2;
|
friction = 0.6;
|
||||||
friction = 0.6;
|
pickupRadius = 2;
|
||||||
pickupRadius = 2;
|
|
||||||
pickUpName = "some chaingun ammo";
|
pickUpName = "some chaingun ammo";
|
||||||
|
|
||||||
computeCRC = true;
|
computeCRC = true;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
//--------------------------------------------------------------------------
|
//--------------------------------------------------------------------------
|
||||||
// Weapon
|
// Weapon
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
datablock ShapeBaseImageData( SA2400Image )
|
datablock ShapeBaseImageData( SA2400Image ) {
|
||||||
{
|
className = WeaponImage;
|
||||||
className = WeaponImage;
|
shapeFile = "weapon_grenade_launcher.dts";
|
||||||
shapeFile = "weapon_grenade_launcher.dts";
|
item = SA2400;
|
||||||
item = SA2400;
|
ammo = SA2400Ammo;
|
||||||
ammo = SA2400Ammo;
|
|
||||||
|
|
||||||
offset = "0 0 0";
|
|
||||||
emap = true;
|
|
||||||
|
|
||||||
casing = SemiAutoShellDebris;
|
offset = "0 0 0";
|
||||||
shellExitDir = "1.0 0.3 1.0";
|
emap = true;
|
||||||
shellExitOffset = "0.15 -0.56 -0.1";
|
|
||||||
shellExitVariance = 15.0;
|
|
||||||
shellVelocity = 30.0;
|
|
||||||
|
|
||||||
projectile = SA2400Slug;
|
casing = SemiAutoShellDebris;
|
||||||
projectileType = TracerProjectile;
|
shellExitDir = "1.0 0.3 1.0";
|
||||||
|
shellExitOffset = "0.15 -0.56 -0.1";
|
||||||
//ClipStuff
|
shellExitVariance = 15.0;
|
||||||
ClipName = "SA2400Clip";
|
shellVelocity = 30.0;
|
||||||
ClipPickupName["SA2400Clip"] = "some SA2400 Slugs";
|
|
||||||
ShowsClipInHud = 1;
|
projectile = SA2400Slug;
|
||||||
ClipReloadTime = 6;
|
projectileType = TracerProjectile;
|
||||||
ClipReturn = 21;
|
|
||||||
InitialClips = 8;
|
//ClipStuff
|
||||||
ReloadSingle = 1;
|
ClipName = "SA2400Clip";
|
||||||
SingleShotAdd = 7;
|
ClipPickupName["SA2400Clip"] = "some SA2400 Slugs";
|
||||||
//
|
ShowsClipInHud = 1;
|
||||||
RankRequire = $TWM2::RankRequire["SA2400"];
|
ClipReloadTime = 6;
|
||||||
|
ClipReturn = 21;
|
||||||
//Challenges
|
InitialClips = 8;
|
||||||
HasChallenges = 1;
|
ReloadSingle = 1;
|
||||||
ChallengeCt = 9;
|
SingleShotAdd = 7;
|
||||||
Challenge[1] = "SA2400 Killer\t50\t100\tNone";
|
//
|
||||||
Challenge[2] = "SA2400 Extremist\t100\t150\tNone";
|
RankRequire = $TWM2::RankRequire["SA2400"];
|
||||||
Challenge[3] = "SA2400 Expert\t250\t250\tNone";
|
|
||||||
Challenge[4] = "SA2400 Master\t500\t500\tNone";
|
//Challenges
|
||||||
Challenge[5] = "SA2400 God\t1000\t1000\tNone";
|
HasChallenges = 1;
|
||||||
Challenge[6] = "SA2400 Bronze Commendation\t2500\t10000\tNone";
|
ChallengeCt = 9;
|
||||||
Challenge[7] = "SA2400 Silver Commendation\t5000\t25000\tNone";
|
Challenge[1] = "SA2400 Killer\t50\t100\tNone";
|
||||||
Challenge[8] = "SA2400 Gold Commendation\t10000\t50000\tNone";
|
Challenge[2] = "SA2400 Extremist\t100\t150\tNone";
|
||||||
Challenge[9] = "SA2400 Titan Commendation\t25000\t75000\tNone";
|
Challenge[3] = "SA2400 Expert\t250\t250\tNone";
|
||||||
GunName = "SA2400 Shotgun";
|
Challenge[4] = "SA2400 Master\t500\t500\tNone";
|
||||||
//
|
Challenge[5] = "SA2400 God\t1000\t1000\tNone";
|
||||||
|
Challenge[6] = "SA2400 Bronze Commendation\t2500\t10000\tNone";
|
||||||
projectileSpread = 3.0 / 1000.0;
|
Challenge[7] = "SA2400 Silver Commendation\t5000\t25000\tNone";
|
||||||
//----------------------------------------------------------------------------\\
|
Challenge[8] = "SA2400 Gold Commendation\t10000\t50000\tNone";
|
||||||
//State Data\\
|
Challenge[9] = "SA2400 Titan Commendation\t25000\t75000\tNone";
|
||||||
//----------------------------------------------------------------------------\\
|
GunName = "SA2400 Shotgun";
|
||||||
stateName[0] = "Activate";
|
//
|
||||||
stateTransitionOnTimeout[0] = "ActivateReady";
|
|
||||||
stateSequence[0] = "Activate";
|
projectileSpread = 3.0 / 1000.0;
|
||||||
stateTimeoutValue[0] = 0.2;
|
//----------------------------------------------------------------------------\\
|
||||||
stateSound[0] = ChaingunSwitchSound;
|
//State Data\\
|
||||||
//----------------------------------------------------\\
|
//----------------------------------------------------------------------------\\
|
||||||
stateName[1] = "Ready";
|
stateName[0] = "Activate";
|
||||||
stateSequence[1] = "Ready";
|
stateTransitionOnTimeout[0] = "ActivateReady";
|
||||||
stateTimeoutValue[1] = 0.2;
|
stateSequence[0] = "Activate";
|
||||||
stateTransitionOnTriggerDown[1] = "FireFirstRound";
|
stateTimeoutValue[0] = 0.2;
|
||||||
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
stateSound[0] = ChaingunSwitchSound;
|
||||||
//----------------------------------------------------\\
|
//----------------------------------------------------\\
|
||||||
stateName[2] = "Reload";
|
stateName[1] = "Ready";
|
||||||
stateSequence[2] = "Reload";
|
stateSequence[1] = "Ready";
|
||||||
stateTransitionOnTimeout[2] = "Ready";
|
stateTimeoutValue[1] = 0.2;
|
||||||
stateTransitionOnNoAmmo[2] = "NoAmmo";
|
stateTransitionOnTriggerDown[1] = "FireFirstRound";
|
||||||
stateTimeoutValue[2] = 4.0;
|
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
||||||
stateAllowImageChange[2] = false;
|
//----------------------------------------------------\\
|
||||||
stateSound[2] = DiscDryFireSound;
|
stateName[2] = "Reload";
|
||||||
//----------------------------------------------------\\
|
stateSequence[2] = "Reload";
|
||||||
stateName[3] = "NoAmmo";
|
stateTransitionOnTimeout[2] = "Ready";
|
||||||
stateSequence[3] = "NoAmmo";
|
stateTransitionOnNoAmmo[2] = "NoAmmo";
|
||||||
stateTimeoutValue[3] = 0.2;
|
stateTimeoutValue[2] = 4.0;
|
||||||
stateTransitionOnTriggerDown[3] = "DryFire";
|
stateAllowImageChange[2] = false;
|
||||||
stateTransitionOnAmmo[3] = "Reload";
|
stateSound[2] = DiscDryFireSound;
|
||||||
//----------------------------------------------------\\
|
//----------------------------------------------------\\
|
||||||
stateName[4] = "DryFire";
|
stateName[3] = "NoAmmo";
|
||||||
stateSequence[4] = "DryFire";
|
stateSequence[3] = "NoAmmo";
|
||||||
stateTransitionOnTimeout[4] = "NoAmmo";
|
stateTimeoutValue[3] = 0.2;
|
||||||
stateTimeoutValue[4] = 0.5;
|
stateTransitionOnTriggerDown[3] = "DryFire";
|
||||||
stateSound[4] = DiscSwitchSound;
|
stateTransitionOnAmmo[3] = "Reload";
|
||||||
//----------------------------------------------------\\
|
//----------------------------------------------------\\
|
||||||
stateName[5] = "FireFirstRound";
|
stateName[4] = "DryFire";
|
||||||
stateSequence[5] = "Fire";
|
stateSequence[4] = "DryFire";
|
||||||
stateRecoil[5] = LightRecoil;
|
stateTransitionOnTimeout[4] = "NoAmmo";
|
||||||
stateTransitionOnTimeout[5] = "FireSecondRound";
|
stateTimeoutValue[4] = 0.5;
|
||||||
stateTransitionOnTriggerUp[5] = "ReadySecondRound";
|
stateSound[4] = DiscSwitchSound;
|
||||||
stateTransitionOnNoAmmo[5] = "NoAmmo";
|
//----------------------------------------------------\\
|
||||||
stateTimeoutValue[5] = 0.2;
|
stateName[5] = "FireFirstRound";
|
||||||
stateFire[5] = true;
|
stateSequence[5] = "Fire";
|
||||||
stateEjectShell[5] = true;
|
stateRecoil[5] = LightRecoil;
|
||||||
stateAllowImageChange[5] = false;
|
stateTransitionOnTimeout[5] = "FireSecondRound";
|
||||||
stateSound[5] = ShotgunFireSound;
|
stateTransitionOnTriggerUp[5] = "ReadySecondRound";
|
||||||
stateScript[5] = "onFire";
|
stateTransitionOnNoAmmo[5] = "NoAmmo";
|
||||||
//----------------------------------------------------\\
|
stateTimeoutValue[5] = 0.14;
|
||||||
stateName[6] = "FireSecondRound";
|
stateFire[5] = true;
|
||||||
stateSequence[6] = "Fire";
|
stateEjectShell[5] = true;
|
||||||
stateRecoil[6] = LightRecoil;
|
stateAllowImageChange[5] = false;
|
||||||
stateTransitionOnTimeout[6] = "FireThirdRound";
|
stateSound[5] = ShotgunFireSound;
|
||||||
stateTransitionOnTriggerUp[6] = "ReadyThirdRound";
|
stateScript[5] = "onFire";
|
||||||
stateTransitionOnNoAmmo[6] = "NoAmmo";
|
//----------------------------------------------------\\
|
||||||
stateTimeoutValue[6] = 0.2;
|
stateName[6] = "FireSecondRound";
|
||||||
stateFire[6] = true;
|
stateSequence[6] = "Fire";
|
||||||
stateEjectShell[6] = true;
|
stateRecoil[6] = LightRecoil;
|
||||||
stateAllowImageChange[6] = false;
|
stateTransitionOnTimeout[6] = "FireThirdRound";
|
||||||
stateSound[6] = ShotgunFireSound;
|
stateTransitionOnTriggerUp[6] = "ReadyThirdRound";
|
||||||
stateScript[6] = "onFire";
|
stateTransitionOnNoAmmo[6] = "NoAmmo";
|
||||||
//----------------------------------------------------\\
|
stateTimeoutValue[6] = 0.14;
|
||||||
stateName[7] = "FireThirdRound";
|
stateFire[6] = true;
|
||||||
stateSequence[7] = "Fire";
|
stateEjectShell[6] = true;
|
||||||
stateRecoil[7] = LightRecoil;
|
stateAllowImageChange[6] = false;
|
||||||
stateTransitionOnTimeout[7] = "FireFourthRound";
|
stateSound[6] = ShotgunFireSound;
|
||||||
stateTransitionOnTriggerUp[7] = "ReadyFourthRound";
|
stateScript[6] = "onFire";
|
||||||
stateTransitionOnNoAmmo[7] = "NoAmmo";
|
//----------------------------------------------------\\
|
||||||
stateTimeoutValue[7] = 0.2;
|
stateName[7] = "FireThirdRound";
|
||||||
stateFire[7] = true;
|
stateSequence[7] = "Fire";
|
||||||
stateEjectShell[7] = true;
|
stateRecoil[7] = LightRecoil;
|
||||||
stateAllowImageChange[7] = false;
|
stateTransitionOnTimeout[7] = "FireFourthRound";
|
||||||
stateSound[7] = ShotgunFireSound;
|
stateTransitionOnTriggerUp[7] = "ReadyFourthRound";
|
||||||
stateScript[7] = "onFire";
|
stateTransitionOnNoAmmo[7] = "NoAmmo";
|
||||||
//----------------------------------------------------\\
|
stateTimeoutValue[7] = 0.14;
|
||||||
stateName[8] = "FireFourthRound";
|
stateFire[7] = true;
|
||||||
stateSequence[8] = "Fire";
|
stateEjectShell[7] = true;
|
||||||
stateRecoil[8] = LightRecoil;
|
stateAllowImageChange[7] = false;
|
||||||
stateTransitionOnTimeout[8] = "FireFifthRound";
|
stateSound[7] = ShotgunFireSound;
|
||||||
stateTransitionOnTriggerUp[8] = "ReadyFifthRound";
|
stateScript[7] = "onFire";
|
||||||
stateTransitionOnNoAmmo[8] = "NoAmmo";
|
//----------------------------------------------------\\
|
||||||
stateTimeoutValue[8] = 0.2;
|
stateName[8] = "FireFourthRound";
|
||||||
stateFire[8] = true;
|
stateSequence[8] = "Fire";
|
||||||
stateEjectShell[8] = true;
|
stateRecoil[8] = LightRecoil;
|
||||||
stateAllowImageChange[8] = false;
|
stateTransitionOnTimeout[8] = "FireFifthRound";
|
||||||
stateSound[8] = ShotgunFireSound;
|
stateTransitionOnTriggerUp[8] = "ReadyFifthRound";
|
||||||
stateScript[8] = "onFire";
|
stateTransitionOnNoAmmo[8] = "NoAmmo";
|
||||||
//----------------------------------------------------\\
|
stateTimeoutValue[8] = 0.14;
|
||||||
stateName[9] = "FireFifthRound";
|
stateFire[8] = true;
|
||||||
stateSequence[9] = "Fire";
|
stateEjectShell[8] = true;
|
||||||
stateRecoil[9] = LightRecoil;
|
stateAllowImageChange[8] = false;
|
||||||
stateTransitionOnTimeout[9] = "FireSixthRound";
|
stateSound[8] = ShotgunFireSound;
|
||||||
stateTransitionOnTriggerUp[9] = "ReadySixthRound";
|
stateScript[8] = "onFire";
|
||||||
stateTransitionOnNoAmmo[9] = "NoAmmo";
|
//----------------------------------------------------\\
|
||||||
stateTimeoutValue[9] = 0.2;
|
stateName[9] = "FireFifthRound";
|
||||||
stateFire[9] = true;
|
stateSequence[9] = "Fire";
|
||||||
stateEjectShell[9] = true;
|
stateRecoil[9] = LightRecoil;
|
||||||
stateAllowImageChange[9] = false;
|
stateTransitionOnTimeout[9] = "FireSixthRound";
|
||||||
stateSound[9] = ShotgunFireSound;
|
stateTransitionOnTriggerUp[9] = "ReadySixthRound";
|
||||||
stateScript[9] = "onFire";
|
stateTransitionOnNoAmmo[9] = "NoAmmo";
|
||||||
//----------------------------------------------------\\
|
stateTimeoutValue[9] = 0.14;
|
||||||
stateName[10] = "FireSixthRound";
|
stateFire[9] = true;
|
||||||
stateSequence[10] = "Fire";
|
stateEjectShell[9] = true;
|
||||||
stateRecoil[10] = LightRecoil;
|
stateAllowImageChange[9] = false;
|
||||||
stateTransitionOnTimeout[10] = "FireSeventhRound";
|
stateSound[9] = ShotgunFireSound;
|
||||||
stateTransitionOnTriggerUp[10] = "ReadySeventhRound";
|
stateScript[9] = "onFire";
|
||||||
stateTransitionOnNoAmmo[10] = "NoAmmo";
|
//----------------------------------------------------\\
|
||||||
stateTimeoutValue[10] = 0.2;
|
stateName[10] = "FireSixthRound";
|
||||||
stateFire[10] = true;
|
stateSequence[10] = "Fire";
|
||||||
stateEjectShell[10] = true;
|
stateRecoil[10] = LightRecoil;
|
||||||
stateAllowImageChange[10] = false;
|
stateTransitionOnTimeout[10] = "FireSeventhRound";
|
||||||
stateSound[10] = ShotgunFireSound;
|
stateTransitionOnTriggerUp[10] = "ReadySeventhRound";
|
||||||
stateScript[10] = "onFire";
|
stateTransitionOnNoAmmo[10] = "NoAmmo";
|
||||||
//----------------------------------------------------\\
|
stateTimeoutValue[10] = 0.14;
|
||||||
stateName[11] = "FireSeventhRound";
|
stateFire[10] = true;
|
||||||
stateSequence[11] = "Fire";
|
stateEjectShell[10] = true;
|
||||||
stateRecoil[11] = LightRecoil;
|
stateAllowImageChange[10] = false;
|
||||||
stateTransitionOnTimeout[11] = "Reload";
|
stateSound[10] = ShotgunFireSound;
|
||||||
stateTransitionOnTriggerUp[11] = "Reload";
|
stateScript[10] = "onFire";
|
||||||
stateTransitionOnNoAmmo[11] = "NoAmmo";
|
//----------------------------------------------------\\
|
||||||
stateTimeoutValue[11] = 0.2;
|
stateName[11] = "FireSeventhRound";
|
||||||
stateFire[11] = true;
|
stateSequence[11] = "Fire";
|
||||||
stateEjectShell[11] = true;
|
stateRecoil[11] = LightRecoil;
|
||||||
stateAllowImageChange[11] = false;
|
stateTransitionOnTimeout[11] = "Reload";
|
||||||
stateSound[11] = ShotgunFireSound;
|
stateTransitionOnTriggerUp[11] = "Reload";
|
||||||
stateScript[11] = "onFire";
|
stateTransitionOnNoAmmo[11] = "NoAmmo";
|
||||||
//----------------------------------------------------\\
|
stateTimeoutValue[11] = 0.14;
|
||||||
stateName[12] = "ReadySecondRound";
|
stateFire[11] = true;
|
||||||
stateSequence[12] = "ReadySecondRound";
|
stateEjectShell[11] = true;
|
||||||
stateTransitionOnTriggerDown[12] = "FireSecondRound";
|
stateAllowImageChange[11] = false;
|
||||||
stateTransitionOnNoAmmo[12] = "NoAmmo";
|
stateSound[11] = ShotgunFireSound;
|
||||||
//----------------------------------------------------\\
|
stateScript[11] = "onFire";
|
||||||
stateName[13] = "ReadyThirdRound";
|
//----------------------------------------------------\\
|
||||||
stateSequence[13] = "ReadyThirdRound";
|
stateName[12] = "ReadySecondRound";
|
||||||
stateTransitionOnTriggerDown[13] = "FireThirdRound";
|
stateSequence[12] = "ReadySecondRound";
|
||||||
stateTransitionOnNoAmmo[13] = "NoAmmo";
|
stateTransitionOnTriggerDown[12] = "FireSecondRound";
|
||||||
//----------------------------------------------------\\
|
stateTransitionOnNoAmmo[12] = "NoAmmo";
|
||||||
stateName[14] = "ReadyFourthRound";
|
//----------------------------------------------------\\
|
||||||
stateSequence[14] = "ReadyFourthRound";
|
stateName[13] = "ReadyThirdRound";
|
||||||
stateTransitionOnTriggerDown[14] = "FireFourthRound";
|
stateSequence[13] = "ReadyThirdRound";
|
||||||
stateTransitionOnNoAmmo[14] = "NoAmmo";
|
stateTransitionOnTriggerDown[13] = "FireThirdRound";
|
||||||
//----------------------------------------------------\\
|
stateTransitionOnNoAmmo[13] = "NoAmmo";
|
||||||
stateName[15] = "ReadyFifthRound";
|
//----------------------------------------------------\\
|
||||||
stateSequence[15] = "ReadyFifthRound";
|
stateName[14] = "ReadyFourthRound";
|
||||||
stateTransitionOnTriggerDown[15] = "FireFifthRound";
|
stateSequence[14] = "ReadyFourthRound";
|
||||||
stateTransitionOnNoAmmo[15] = "NoAmmo";
|
stateTransitionOnTriggerDown[14] = "FireFourthRound";
|
||||||
//----------------------------------------------------\\
|
stateTransitionOnNoAmmo[14] = "NoAmmo";
|
||||||
stateName[16] = "ReadySixthRound";
|
//----------------------------------------------------\\
|
||||||
stateSequence[16] = "ReadySixthRound";
|
stateName[15] = "ReadyFifthRound";
|
||||||
stateTransitionOnTriggerDown[16] = "FireSixthRound";
|
stateSequence[15] = "ReadyFifthRound";
|
||||||
stateTransitionOnNoAmmo[16] = "NoAmmo";
|
stateTransitionOnTriggerDown[15] = "FireFifthRound";
|
||||||
//----------------------------------------------------\\
|
stateTransitionOnNoAmmo[15] = "NoAmmo";
|
||||||
stateName[17] = "ReadySeventhRound";
|
//----------------------------------------------------\\
|
||||||
stateSequence[17] = "ReadySeventhRound";
|
stateName[16] = "ReadySixthRound";
|
||||||
stateTransitionOnTriggerDown[17] = "FireSeventhRound";
|
stateSequence[16] = "ReadySixthRound";
|
||||||
stateTransitionOnNoAmmo[17] = "NoAmmo";
|
stateTransitionOnTriggerDown[16] = "FireSixthRound";
|
||||||
//----------------------------------------------------\\
|
stateTransitionOnNoAmmo[16] = "NoAmmo";
|
||||||
stateName[18] = "ActivateReady";
|
//----------------------------------------------------\\
|
||||||
stateTransitionOnLoaded[18] = "Ready";
|
stateName[17] = "ReadySeventhRound";
|
||||||
stateTransitionOnNoAmmo[18] = "NoAmmo";
|
stateSequence[17] = "ReadySeventhRound";
|
||||||
//----------------------------------------------------------------------------\\
|
stateTransitionOnTriggerDown[17] = "FireSeventhRound";
|
||||||
//----------------------------------------------------------------------------\\
|
stateTransitionOnNoAmmo[17] = "NoAmmo";
|
||||||
|
//----------------------------------------------------\\
|
||||||
|
stateName[18] = "ActivateReady";
|
||||||
|
stateTransitionOnLoaded[18] = "Ready";
|
||||||
|
stateTransitionOnNoAmmo[18] = "NoAmmo";
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ItemData( SA2400 )
|
datablock ItemData( SA2400 ) {
|
||||||
{
|
className = Weapon;
|
||||||
className = Weapon;
|
catagory = "Spawn Items";
|
||||||
catagory = "Spawn Items";
|
shapeFile = "weapon_grenade_launcher.dts";
|
||||||
shapeFile = "weapon_grenade_launcher.dts";
|
image = SA2400Image;
|
||||||
image = SA2400Image;
|
mass = 1;
|
||||||
mass = 1;
|
elasticity = 0.2;
|
||||||
elasticity = 0.2;
|
friction = 0.6;
|
||||||
friction = 0.6;
|
pickupRadius = 2;
|
||||||
pickupRadius = 2;
|
pickUpName = "a Semi-Automatic Shotgun";
|
||||||
pickUpName = "a Semi-Automatic Shotgun";
|
|
||||||
|
|
||||||
computeCRC = true;
|
computeCRC = true;
|
||||||
emap = true;
|
emap = true;
|
||||||
};
|
};
|
||||||
|
|
@ -1,219 +1,214 @@
|
||||||
datablock TracerProjectileData(SCD343Pellet)
|
datablock TracerProjectileData(SCD343Pellet) {
|
||||||
{
|
doDynamicClientHits = true;
|
||||||
doDynamicClientHits = true;
|
|
||||||
|
|
||||||
directDamage = (0.075 * 1.4);
|
directDamage = 0.17;
|
||||||
directDamageType = $DamageType::SCD343;
|
directDamageType = $DamageType::SCD343;
|
||||||
explosion = "ChaingunExplosion";
|
explosion = "ChaingunExplosion";
|
||||||
splash = ChaingunSplash;
|
splash = ChaingunSplash;
|
||||||
HeadMultiplier = 1.2;
|
HeadMultiplier = 1.2;
|
||||||
LegsMultiplier = 0.75;
|
LegsMultiplier = 0.75;
|
||||||
|
|
||||||
ImageSource = "SCD343Image";
|
|
||||||
|
|
||||||
longRangeMultiplier = 0.75;
|
ImageSource = "SCD343Image";
|
||||||
kickBackStrength = 0.0;
|
|
||||||
sound = ChaingunProjectile;
|
|
||||||
|
|
||||||
dryVelocity = 1500.0;
|
longRangeMultiplier = 0.75;
|
||||||
wetVelocity = 1000.0;
|
kickBackStrength = 0.0;
|
||||||
velInheritFactor = 0.0;
|
sound = ChaingunProjectile;
|
||||||
fizzleTimeMS = 1000;
|
|
||||||
lifetimeMS = 1000;
|
|
||||||
explodeOnDeath = false;
|
|
||||||
reflectOnWaterImpactAngle = 0.0;
|
|
||||||
explodeOnWaterImpact = false;
|
|
||||||
deflectionOnWaterImpact = 0.0;
|
|
||||||
fizzleUnderwaterMS = 3000;
|
|
||||||
|
|
||||||
tracerLength = 5.0;
|
dryVelocity = 1500.0;
|
||||||
tracerAlpha = false;
|
wetVelocity = 1000.0;
|
||||||
tracerMinPixels = 6;
|
velInheritFactor = 0.0;
|
||||||
tracerColor = 211.0/255.0 @ " " @ 215.0/255.0 @ " " @ 120.0/255.0 @ " 0.75";
|
fizzleTimeMS = 75;
|
||||||
|
lifetimeMS = 100;
|
||||||
|
explodeOnDeath = false;
|
||||||
|
reflectOnWaterImpactAngle = 0.0;
|
||||||
|
explodeOnWaterImpact = false;
|
||||||
|
deflectionOnWaterImpact = 0.0;
|
||||||
|
fizzleUnderwaterMS = 3000;
|
||||||
|
|
||||||
|
tracerLength = 5.0;
|
||||||
|
tracerAlpha = false;
|
||||||
|
tracerMinPixels = 6;
|
||||||
|
tracerColor = 211.0/255.0 @ " " @ 215.0/255.0 @ " " @ 120.0/255.0 @ " 0.75";
|
||||||
tracerTex[0] = "special/tracer00";
|
tracerTex[0] = "special/tracer00";
|
||||||
tracerTex[1] = "special/tracercross";
|
tracerTex[1] = "special/tracercross";
|
||||||
tracerWidth = 0.09;
|
tracerWidth = 0.09;
|
||||||
crossSize = 0.20;
|
crossSize = 0.20;
|
||||||
crossViewAng = 0.990;
|
crossViewAng = 0.990;
|
||||||
renderCross = true;
|
renderCross = true;
|
||||||
|
|
||||||
decalData[0] = ChaingunDecal1;
|
decalData[0] = ChaingunDecal1;
|
||||||
decalData[1] = ChaingunDecal2;
|
decalData[1] = ChaingunDecal2;
|
||||||
decalData[2] = ChaingunDecal3;
|
decalData[2] = ChaingunDecal3;
|
||||||
decalData[3] = ChaingunDecal4;
|
decalData[3] = ChaingunDecal4;
|
||||||
decalData[4] = ChaingunDecal5;
|
decalData[4] = ChaingunDecal5;
|
||||||
decalData[5] = ChaingunDecal6;
|
decalData[5] = ChaingunDecal6;
|
||||||
};
|
};
|
||||||
|
|
||||||
//--------------------------------------------------------------------------
|
//--------------------------------------------------------------------------
|
||||||
// Ammo
|
// Ammo
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
|
|
||||||
datablock ItemData(SCD343Ammo)
|
datablock ItemData(SCD343Ammo) {
|
||||||
{
|
className = Ammo;
|
||||||
className = Ammo;
|
catagory = "Ammo";
|
||||||
catagory = "Ammo";
|
shapeFile = "ammo_chaingun.dts";
|
||||||
shapeFile = "ammo_chaingun.dts";
|
mass = 1;
|
||||||
mass = 1;
|
elasticity = 0.2;
|
||||||
elasticity = 0.2;
|
friction = 0.6;
|
||||||
friction = 0.6;
|
pickupRadius = 2;
|
||||||
pickupRadius = 2;
|
|
||||||
pickUpName = "some SCD343 rounds";
|
pickUpName = "some SCD343 rounds";
|
||||||
|
|
||||||
computeCRC = true;
|
computeCRC = true;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
//--------------------------------------------------------------------------
|
//--------------------------------------------------------------------------
|
||||||
// Weapon
|
// Weapon
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
datablock ShapeBaseImageData(SCD343Image)
|
datablock ShapeBaseImageData(SCD343Image) {
|
||||||
{
|
className = WeaponImage;
|
||||||
className = WeaponImage;
|
shapeFile = "weapon_plasma.dts";
|
||||||
shapeFile = "weapon_plasma.dts";
|
item = SCD343;
|
||||||
item = SCD343;
|
ammo = SCD343Ammo;
|
||||||
ammo = SCD343Ammo;
|
projectile = SCD343Pellet;
|
||||||
projectile = SCD343Pellet;
|
projectileType = TracerProjectile;
|
||||||
projectileType = TracerProjectile;
|
emap = true;
|
||||||
emap = true;
|
mass = 20;
|
||||||
mass = 20;
|
|
||||||
|
|
||||||
casing = ShellDebris;
|
casing = ShellDebris;
|
||||||
shellExitDir = "0.5 0.0 1.0"; // L/R - F/B - T/B
|
shellExitDir = "0.5 0.0 1.0"; // L/R - F/B - T/B
|
||||||
shellExitOffset = "0.15 -0.51 -0.1"; // L/R - F/B - T/B
|
shellExitOffset = "0.15 -0.51 -0.1"; // L/R - F/B - T/B
|
||||||
shellExitVariance = 10.0;
|
shellExitVariance = 10.0;
|
||||||
shellVelocity = 4.0;
|
shellVelocity = 4.0;
|
||||||
|
|
||||||
//ClipStuff
|
//ClipStuff
|
||||||
ClipName = "SCD343Clip";
|
ClipName = "SCD343Clip";
|
||||||
ClipPickupName["SCD343Clip"] = "some SCD343 Clip Boxes";
|
ClipPickupName["SCD343Clip"] = "some SCD343 Clip Boxes";
|
||||||
ShowsClipInHud = 1;
|
ShowsClipInHud = 1;
|
||||||
ClipReloadTime = 4;
|
ClipReloadTime = 4;
|
||||||
ClipReturn = 1;
|
ClipReturn = 1;
|
||||||
InitialClips = 8;
|
InitialClips = 8;
|
||||||
//
|
//
|
||||||
RankRequire = $TWM2::RankRequire["SCD343"];
|
RankRequire = $TWM2::RankRequire["SCD343"];
|
||||||
|
|
||||||
//Challenges
|
//Challenges
|
||||||
HasChallenges = 1;
|
HasChallenges = 1;
|
||||||
ChallengeCt = 9;
|
ChallengeCt = 9;
|
||||||
Challenge[1] = "SCD343 Killer\t50\t100\tNone";
|
Challenge[1] = "SCD343 Killer\t50\t100\tNone";
|
||||||
Challenge[2] = "SCD343 Extremist\t100\t150\tNone";
|
Challenge[2] = "SCD343 Extremist\t100\t150\tNone";
|
||||||
Challenge[3] = "SCD343 Expert\t250\t250\tNone";
|
Challenge[3] = "SCD343 Expert\t250\t250\tNone";
|
||||||
Challenge[4] = "SCD343 Master\t500\t500\tNone";
|
Challenge[4] = "SCD343 Master\t500\t500\tNone";
|
||||||
Challenge[5] = "SCD343 God\t1000\t1000\tNone";
|
Challenge[5] = "SCD343 God\t1000\t1000\tNone";
|
||||||
Challenge[6] = "SCD343 Bronze Commendation\t2500\t10000\tNone";
|
Challenge[6] = "SCD343 Bronze Commendation\t2500\t10000\tNone";
|
||||||
Challenge[7] = "SCD343 Silver Commendation\t5000\t25000\tNone";
|
Challenge[7] = "SCD343 Silver Commendation\t5000\t25000\tNone";
|
||||||
Challenge[8] = "SCD343 Gold Commendation\t10000\t50000\tNone";
|
Challenge[8] = "SCD343 Gold Commendation\t10000\t50000\tNone";
|
||||||
Challenge[9] = "SCD343 Titan Commendation\t25000\t75000\tNone";
|
Challenge[9] = "SCD343 Titan Commendation\t25000\t75000\tNone";
|
||||||
GunName = "SCD343 Shotgun";
|
GunName = "SCD343 Shotgun";
|
||||||
//
|
//
|
||||||
|
|
||||||
projectileSpread = 6.0 / 1000.0;
|
projectileSpread = 10.0 / 1000.0;
|
||||||
|
|
||||||
stateName[0] = "Activate";
|
stateName[0] = "Activate";
|
||||||
stateTransitionOnTimeout[0] = "ActivateReady";
|
stateTransitionOnTimeout[0] = "ActivateReady";
|
||||||
stateTimeoutValue[0] = 0.5;
|
stateTimeoutValue[0] = 0.5;
|
||||||
stateSequence[0] = "Activate";
|
stateSequence[0] = "Activate";
|
||||||
stateSound[0] = ChaingunSwitchSound;
|
stateSound[0] = ChaingunSwitchSound;
|
||||||
|
|
||||||
stateName[1] = "ActivateReady";
|
stateName[1] = "ActivateReady";
|
||||||
stateTransitionOnLoaded[1] = "Ready";
|
stateTransitionOnLoaded[1] = "Ready";
|
||||||
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
||||||
|
|
||||||
stateName[2] = "Ready";
|
stateName[2] = "Ready";
|
||||||
stateTransitionOnNoAmmo[2] = "NoAmmo";
|
stateTransitionOnNoAmmo[2] = "NoAmmo";
|
||||||
stateTransitionOnTriggerDown[2] = "CheckWet";
|
stateTransitionOnTriggerDown[2] = "CheckWet";
|
||||||
|
|
||||||
stateName[3] = "Fire";
|
stateName[3] = "Fire";
|
||||||
stateTransitionOnTimeout[3] = "Reload";
|
stateTransitionOnTimeout[3] = "Reload";
|
||||||
stateTimeoutValue[3] = 0.0001;
|
stateTimeoutValue[3] = 0.0001;
|
||||||
stateFire[3] = true;
|
stateFire[3] = true;
|
||||||
stateEjectShell[3] = true;
|
stateEjectShell[3] = true;
|
||||||
stateEmitter[3] = "GunFireEffectEmitter";
|
stateEmitter[3] = "GunFireEffectEmitter";
|
||||||
stateEmitterNode[3] = "muzzlepoint1";
|
stateEmitterNode[3] = "muzzlepoint1";
|
||||||
stateEmitterTime[3] = 1;
|
stateEmitterTime[3] = 1;
|
||||||
stateRecoil[3] = LightRecoil;
|
stateRecoil[3] = LightRecoil;
|
||||||
stateAllowImageChange[3] = false;
|
stateAllowImageChange[3] = false;
|
||||||
stateScript[3] = "onFire";
|
stateScript[3] = "onFire";
|
||||||
stateEmitterTime[3] = 0.2;
|
stateEmitterTime[3] = 0.2;
|
||||||
stateSound[3] = SniperFireSound;
|
stateSound[3] = SniperFireSound;
|
||||||
|
|
||||||
stateName[4] = "Reload";
|
stateName[4] = "Reload";
|
||||||
stateTransitionOnNoAmmo[4] = "NoAmmo";
|
stateTransitionOnNoAmmo[4] = "NoAmmo";
|
||||||
stateTransitionOnTimeout[4] = "Ready";
|
stateTransitionOnTimeout[4] = "Ready";
|
||||||
stateTimeoutValue[4] = 0.5;
|
stateTimeoutValue[4] = 0.5;
|
||||||
stateAllowImageChange[4] = false;
|
stateAllowImageChange[4] = false;
|
||||||
stateSequence[4] = "Reload";
|
stateSequence[4] = "Reload";
|
||||||
|
|
||||||
stateName[5] = "NoAmmo";
|
stateName[5] = "NoAmmo";
|
||||||
stateTransitionOnAmmo[5] = "Reload";
|
stateTransitionOnAmmo[5] = "Reload";
|
||||||
stateSequence[5] = "NoAmmo";
|
stateSequence[5] = "NoAmmo";
|
||||||
stateTransitionOnTriggerDown[5] = "DryFire";
|
stateTransitionOnTriggerDown[5] = "DryFire";
|
||||||
|
|
||||||
stateName[6] = "DryFire";
|
stateName[6] = "DryFire";
|
||||||
stateSound[6] = ChaingunDryFireSound;
|
stateSound[6] = ChaingunDryFireSound;
|
||||||
stateTimeoutValue[6] = 1.0;
|
stateTimeoutValue[6] = 1.0;
|
||||||
stateTransitionOnTimeout[6] = "NoAmmo";
|
stateTransitionOnTimeout[6] = "NoAmmo";
|
||||||
|
|
||||||
stateName[7] = "WetFire";
|
stateName[7] = "WetFire";
|
||||||
stateSound[7] = ChaingunDryFireSound;
|
stateSound[7] = ChaingunDryFireSound;
|
||||||
stateTimeoutValue[7] = 1.0;
|
stateTimeoutValue[7] = 1.0;
|
||||||
stateTransitionOnTimeout[7] = "Ready";
|
stateTransitionOnTimeout[7] = "Ready";
|
||||||
|
|
||||||
stateName[8] = "CheckWet";
|
stateName[8] = "CheckWet";
|
||||||
stateTransitionOnWet[8] = "WetFire";
|
stateTransitionOnWet[8] = "WetFire";
|
||||||
stateTransitionOnNotWet[8] = "Fire";
|
stateTransitionOnNotWet[8] = "Fire";
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ItemData(SCD343)
|
datablock ItemData(SCD343) {
|
||||||
{
|
className = Weapon;
|
||||||
className = Weapon;
|
catagory = "Spawn Items";
|
||||||
catagory = "Spawn Items";
|
shapeFile = "weapon_plasma.dts";
|
||||||
shapeFile = "weapon_plasma.dts";
|
image = SCD343Image;
|
||||||
image = SCD343Image;
|
mass = 1.0;
|
||||||
mass = 1.0;
|
elasticity = 0.2;
|
||||||
elasticity = 0.2;
|
friction = 0.6;
|
||||||
friction = 0.6;
|
pickupRadius = 2;
|
||||||
pickupRadius = 2;
|
pickUpName = "a SCD343";
|
||||||
pickUpName = "a SCD343";
|
|
||||||
|
|
||||||
computeCRC = true;
|
computeCRC = true;
|
||||||
emap = true;
|
emap = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
function SCD343Image::onMount(%this,%obj,%slot) {
|
function SCD343Image::onMount(%this,%obj,%slot) {
|
||||||
Parent::onMount(%this, %obj, %slot);
|
Parent::onMount(%this, %obj, %slot);
|
||||||
}
|
}
|
||||||
|
|
||||||
function SCD343Image::onFire(%data,%obj,%slot) {
|
function SCD343Image::onFire(%data,%obj,%slot) {
|
||||||
serverPlay3D(ShotgunFireSound, %obj.getPosition());
|
serverPlay3D(ShotgunFireSound, %obj.getPosition());
|
||||||
|
|
||||||
%obj.applyKick(-250);
|
%obj.applyKick(-250);
|
||||||
%obj.decInventory(%data.ammo,1);
|
%obj.decInventory(%data.ammo,1);
|
||||||
|
|
||||||
%vector = %obj.getMuzzleVector(%slot);
|
%vector = %obj.getMuzzleVector(%slot);
|
||||||
%mp = %obj.getMuzzlePoint(%slot);
|
%mp = %obj.getMuzzlePoint(%slot);
|
||||||
|
|
||||||
for (%i=0; %i < 16; %i++) {
|
for (%i=0; %i < 16; %i++) {
|
||||||
%x = (getRandom() - 0.5) * 2 * 3.1415926 * %data.projectileSpread;
|
%x = (getRandom() - 0.5) * 2 * 3.1415926 * %data.projectileSpread;
|
||||||
%y = (getRandom() - 0.5) * 2 * 3.1415926 * %data.projectileSpread;
|
%y = (getRandom() - 0.5) * 2 * 3.1415926 * %data.projectileSpread;
|
||||||
%z = (getRandom() - 0.5) * 2 * 3.1415926 * %data.projectileSpread;
|
%z = (getRandom() - 0.5) * 2 * 3.1415926 * %data.projectileSpread;
|
||||||
%mat = MatrixCreateFromEuler(%x @ " " @ %y @ " " @ %z);
|
%mat = MatrixCreateFromEuler(%x @ " " @ %y @ " " @ %z);
|
||||||
%newvector = MatrixMulVector(%mat, %vector);
|
%newvector = MatrixMulVector(%mat, %vector);
|
||||||
|
|
||||||
%p = new (%data.projectileType)() {
|
%p = new (%data.projectileType)() {
|
||||||
dataBlock = %data.projectile;
|
dataBlock = %data.projectile;
|
||||||
initialDirection = %newvector;
|
initialDirection = %newvector;
|
||||||
initialPosition = %mp;
|
initialPosition = %mp;
|
||||||
sourceObject = %obj;
|
sourceObject = %obj;
|
||||||
damageFactor = 1;
|
damageFactor = 1;
|
||||||
sourceSlot = %slot;
|
sourceSlot = %slot;
|
||||||
};
|
};
|
||||||
|
|
||||||
%p.WeaponImageSource = %data.getName();
|
%p.WeaponImageSource = %data.getName();
|
||||||
}
|
}
|
||||||
if(%obj.inv[SCD343Ammo] == 0) { //Added Phantom139, TWM2
|
if(%obj.inv[SCD343Ammo] == 0) { //Added Phantom139, TWM2
|
||||||
AttemptReload(%data, %obj, %slot);
|
AttemptReload(%data, %obj, %slot);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,165 +1,161 @@
|
||||||
datablock TracerProjectileData(Wp400Pellet)
|
datablock TracerProjectileData(Wp400Pellet) {
|
||||||
{
|
doDynamicClientHits = true;
|
||||||
doDynamicClientHits = true;
|
|
||||||
|
|
||||||
directDamage = (0.075 * 1.5);
|
directDamage = 0.1125;
|
||||||
directDamageType = $DamageType::Wp400;
|
directDamageType = $DamageType::Wp400;
|
||||||
explosion = "ChaingunExplosion";
|
explosion = "ChaingunExplosion";
|
||||||
splash = ChaingunSplash;
|
splash = ChaingunSplash;
|
||||||
HeadMultiplier = 1.2;
|
HeadMultiplier = 1.2;
|
||||||
LegsMultiplier = 0.75;
|
LegsMultiplier = 0.75;
|
||||||
|
|
||||||
longRangeMultiplier = 0.75;
|
longRangeMultiplier = 0.75;
|
||||||
kickBackStrength = 0.0;
|
kickBackStrength = 0.0;
|
||||||
sound = ChaingunProjectile;
|
sound = ChaingunProjectile;
|
||||||
|
|
||||||
ImageSource = "Wp400Image";
|
|
||||||
|
|
||||||
dryVelocity = 1500.0;
|
ImageSource = "Wp400Image";
|
||||||
wetVelocity = 1000.0;
|
|
||||||
velInheritFactor = 0.0;
|
|
||||||
fizzleTimeMS = 1000;
|
|
||||||
lifetimeMS = 1000;
|
|
||||||
explodeOnDeath = false;
|
|
||||||
reflectOnWaterImpactAngle = 0.0;
|
|
||||||
explodeOnWaterImpact = false;
|
|
||||||
deflectionOnWaterImpact = 0.0;
|
|
||||||
fizzleUnderwaterMS = 3000;
|
|
||||||
|
|
||||||
tracerLength = 5.0;
|
dryVelocity = 1500.0;
|
||||||
tracerAlpha = false;
|
wetVelocity = 1000.0;
|
||||||
tracerMinPixels = 6;
|
velInheritFactor = 0.0;
|
||||||
tracerColor = 211.0/255.0 @ " " @ 215.0/255.0 @ " " @ 120.0/255.0 @ " 0.75";
|
fizzleTimeMS = 75;
|
||||||
|
lifetimeMS = 100;
|
||||||
|
explodeOnDeath = false;
|
||||||
|
reflectOnWaterImpactAngle = 0.0;
|
||||||
|
explodeOnWaterImpact = false;
|
||||||
|
deflectionOnWaterImpact = 0.0;
|
||||||
|
fizzleUnderwaterMS = 3000;
|
||||||
|
|
||||||
|
tracerLength = 5.0;
|
||||||
|
tracerAlpha = false;
|
||||||
|
tracerMinPixels = 6;
|
||||||
|
tracerColor = 211.0/255.0 @ " " @ 215.0/255.0 @ " " @ 120.0/255.0 @ " 0.75";
|
||||||
tracerTex[0] = "special/tracer00";
|
tracerTex[0] = "special/tracer00";
|
||||||
tracerTex[1] = "special/tracercross";
|
tracerTex[1] = "special/tracercross";
|
||||||
tracerWidth = 0.09;
|
tracerWidth = 0.09;
|
||||||
crossSize = 0.20;
|
crossSize = 0.20;
|
||||||
crossViewAng = 0.990;
|
crossViewAng = 0.990;
|
||||||
renderCross = true;
|
renderCross = true;
|
||||||
|
|
||||||
decalData[0] = ChaingunDecal1;
|
decalData[0] = ChaingunDecal1;
|
||||||
decalData[1] = ChaingunDecal2;
|
decalData[1] = ChaingunDecal2;
|
||||||
decalData[2] = ChaingunDecal3;
|
decalData[2] = ChaingunDecal3;
|
||||||
decalData[3] = ChaingunDecal4;
|
decalData[3] = ChaingunDecal4;
|
||||||
decalData[4] = ChaingunDecal5;
|
decalData[4] = ChaingunDecal5;
|
||||||
decalData[5] = ChaingunDecal6;
|
decalData[5] = ChaingunDecal6;
|
||||||
};
|
};
|
||||||
|
|
||||||
//--------------------------------------------------------------------------
|
//--------------------------------------------------------------------------
|
||||||
// Ammo
|
// Ammo
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
|
|
||||||
datablock ItemData(Wp400Ammo)
|
datablock ItemData(Wp400Ammo) {
|
||||||
{
|
className = Ammo;
|
||||||
className = Ammo;
|
catagory = "Ammo";
|
||||||
catagory = "Ammo";
|
shapeFile = "ammo_chaingun.dts";
|
||||||
shapeFile = "ammo_chaingun.dts";
|
mass = 1;
|
||||||
mass = 1;
|
elasticity = 0.2;
|
||||||
elasticity = 0.2;
|
friction = 0.6;
|
||||||
friction = 0.6;
|
pickupRadius = 2;
|
||||||
pickupRadius = 2;
|
|
||||||
pickUpName = "some Wp400 rounds";
|
pickUpName = "some Wp400 rounds";
|
||||||
|
|
||||||
computeCRC = true;
|
computeCRC = true;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
//--------------------------------------------------------------------------
|
//--------------------------------------------------------------------------
|
||||||
// Weapon
|
// Weapon
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
datablock ShapeBaseImageData(Wp400Image)
|
datablock ShapeBaseImageData(Wp400Image) {
|
||||||
{
|
className = WeaponImage;
|
||||||
className = WeaponImage;
|
shapeFile = "weapon_plasma.dts";
|
||||||
shapeFile = "weapon_plasma.dts";
|
item = Wp400;
|
||||||
item = Wp400;
|
ammo = Wp400Ammo;
|
||||||
ammo = Wp400Ammo;
|
projectile = Wp400Pellet;
|
||||||
projectile = Wp400Pellet;
|
projectileType = TracerProjectile;
|
||||||
projectileType = TracerProjectile;
|
emap = true;
|
||||||
emap = true;
|
mass = 20;
|
||||||
mass = 20;
|
|
||||||
|
|
||||||
casing = ShellDebris;
|
casing = ShellDebris;
|
||||||
shellExitDir = "0.5 0.0 1.0"; // L/R - F/B - T/B
|
shellExitDir = "0.5 0.0 1.0"; // L/R - F/B - T/B
|
||||||
shellExitOffset = "0.15 -0.51 -0.1"; // L/R - F/B - T/B
|
shellExitOffset = "0.15 -0.51 -0.1"; // L/R - F/B - T/B
|
||||||
shellExitVariance = 10.0;
|
shellExitVariance = 10.0;
|
||||||
shellVelocity = 4.0;
|
shellVelocity = 4.0;
|
||||||
|
|
||||||
//ClipStuff
|
//ClipStuff
|
||||||
ClipName = "Wp400Clip";
|
ClipName = "Wp400Clip";
|
||||||
ClipPickupName["Wp400Clip"] = "some Wp400 Clip Boxes";
|
ClipPickupName["Wp400Clip"] = "some Wp400 Clip Boxes";
|
||||||
ShowsClipInHud = 1;
|
ShowsClipInHud = 1;
|
||||||
ClipReloadTime = 4;
|
ClipReloadTime = 7;
|
||||||
ClipReturn = 5;
|
ClipReturn = 5;
|
||||||
InitialClips = 6;
|
InitialClips = 6;
|
||||||
//
|
//
|
||||||
RankRequire = $TWM2::RankRequire["Wp400"];
|
RankRequire = $TWM2::RankRequire["Wp400"];
|
||||||
|
|
||||||
//Challenges
|
|
||||||
HasChallenges = 1;
|
|
||||||
ChallengeCt = 9;
|
|
||||||
Challenge[1] = "Wp400 Killer\t50\t100\tNone";
|
|
||||||
Challenge[2] = "Wp400 Extremist\t100\t150\tNone";
|
|
||||||
Challenge[3] = "Wp400 Expert\t250\t250\tNone";
|
|
||||||
Challenge[4] = "Wp400 Master\t500\t500\tNone";
|
|
||||||
Challenge[5] = "Wp400 God\t1000\t1000\tNone";
|
|
||||||
Challenge[6] = "Wp400 Bronze Commendation\t2500\t10000\tNone";
|
|
||||||
Challenge[7] = "Wp400 Silver Commendation\t5000\t25000\tNone";
|
|
||||||
Challenge[8] = "Wp400 Gold Commendation\t10000\t50000\tNone";
|
|
||||||
Challenge[9] = "Wp400 Titan Commendation\t25000\t75000\tNone";
|
|
||||||
GunName = "Wp400 Shotgun";
|
|
||||||
//
|
|
||||||
|
|
||||||
projectileSpread = 10.0 / 1000.0;
|
//Challenges
|
||||||
|
HasChallenges = 1;
|
||||||
|
ChallengeCt = 9;
|
||||||
|
Challenge[1] = "Wp400 Killer\t50\t100\tNone";
|
||||||
|
Challenge[2] = "Wp400 Extremist\t100\t150\tNone";
|
||||||
|
Challenge[3] = "Wp400 Expert\t250\t250\tNone";
|
||||||
|
Challenge[4] = "Wp400 Master\t500\t500\tNone";
|
||||||
|
Challenge[5] = "Wp400 God\t1000\t1000\tNone";
|
||||||
|
Challenge[6] = "Wp400 Bronze Commendation\t2500\t10000\tNone";
|
||||||
|
Challenge[7] = "Wp400 Silver Commendation\t5000\t25000\tNone";
|
||||||
|
Challenge[8] = "Wp400 Gold Commendation\t10000\t50000\tNone";
|
||||||
|
Challenge[9] = "Wp400 Titan Commendation\t25000\t75000\tNone";
|
||||||
|
GunName = "Wp400 Shotgun";
|
||||||
|
//
|
||||||
|
|
||||||
stateName[0] = "Activate";
|
projectileSpread = 15.0 / 1000.0;
|
||||||
stateTransitionOnTimeout[0] = "ActivateReady";
|
|
||||||
stateTimeoutValue[0] = 0.3;
|
|
||||||
stateSequence[0] = "Activate";
|
|
||||||
stateSound[0] = ChaingunSwitchSound;
|
|
||||||
|
|
||||||
stateName[1] = "ActivateReady";
|
stateName[0] = "Activate";
|
||||||
stateTransitionOnLoaded[1] = "Ready";
|
stateTransitionOnTimeout[0] = "ActivateReady";
|
||||||
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
stateTimeoutValue[0] = 0.3;
|
||||||
|
stateSequence[0] = "Activate";
|
||||||
|
stateSound[0] = ChaingunSwitchSound;
|
||||||
|
|
||||||
stateName[2] = "Ready";
|
stateName[1] = "ActivateReady";
|
||||||
stateTransitionOnNoAmmo[2] = "NoAmmo";
|
stateTransitionOnLoaded[1] = "Ready";
|
||||||
stateTransitionOnTriggerDown[2] = "CheckWet";
|
stateTransitionOnNoAmmo[1] = "NoAmmo";
|
||||||
|
|
||||||
stateName[3] = "Fire";
|
stateName[2] = "Ready";
|
||||||
stateTransitionOnTimeout[3] = "Reload";
|
stateTransitionOnNoAmmo[2] = "NoAmmo";
|
||||||
stateTimeoutValue[3] = 0.0001;
|
stateTransitionOnTriggerDown[2] = "CheckWet";
|
||||||
stateFire[3] = true;
|
|
||||||
stateEjectShell[3] = true;
|
|
||||||
stateRecoil[3] = LightRecoil;
|
|
||||||
stateAllowImageChange[3] = false;
|
|
||||||
stateScript[3] = "onFire";
|
|
||||||
stateSound[3] = SniperFireSound;
|
|
||||||
|
|
||||||
stateName[4] = "Reload";
|
stateName[3] = "Fire";
|
||||||
stateTransitionOnNoAmmo[4] = "NoAmmo";
|
stateTransitionOnTimeout[3] = "Reload";
|
||||||
stateTransitionOnTimeout[4] = "Ready";
|
stateTimeoutValue[3] = 0.0001;
|
||||||
stateTimeoutValue[4] = 0.9;
|
stateFire[3] = true;
|
||||||
stateAllowImageChange[4] = false;
|
stateEjectShell[3] = true;
|
||||||
stateSequence[4] = "Reload";
|
stateRecoil[3] = LightRecoil;
|
||||||
|
stateAllowImageChange[3] = false;
|
||||||
|
stateScript[3] = "onFire";
|
||||||
|
stateSound[3] = SniperFireSound;
|
||||||
|
|
||||||
stateName[5] = "NoAmmo";
|
stateName[4] = "Reload";
|
||||||
stateTransitionOnAmmo[5] = "Reload";
|
stateTransitionOnNoAmmo[4] = "NoAmmo";
|
||||||
stateSequence[5] = "NoAmmo";
|
stateTransitionOnTimeout[4] = "Ready";
|
||||||
stateTransitionOnTriggerDown[5] = "DryFire";
|
stateTimeoutValue[4] = 0.5;
|
||||||
|
stateAllowImageChange[4] = false;
|
||||||
|
stateSequence[4] = "Reload";
|
||||||
|
|
||||||
stateName[6] = "DryFire";
|
stateName[5] = "NoAmmo";
|
||||||
stateSound[6] = ChaingunDryFireSound;
|
stateTransitionOnAmmo[5] = "Reload";
|
||||||
stateTimeoutValue[6] = 1.0;
|
stateSequence[5] = "NoAmmo";
|
||||||
stateTransitionOnTimeout[6] = "NoAmmo";
|
stateTransitionOnTriggerDown[5] = "DryFire";
|
||||||
|
|
||||||
stateName[7] = "WetFire";
|
stateName[6] = "DryFire";
|
||||||
stateSound[7] = ChaingunDryFireSound;
|
stateSound[6] = ChaingunDryFireSound;
|
||||||
stateTimeoutValue[7] = 1.0;
|
stateTimeoutValue[6] = 1.0;
|
||||||
stateTransitionOnTimeout[7] = "Ready";
|
stateTransitionOnTimeout[6] = "NoAmmo";
|
||||||
|
|
||||||
stateName[8] = "CheckWet";
|
stateName[7] = "WetFire";
|
||||||
stateTransitionOnWet[8] = "WetFire";
|
stateSound[7] = ChaingunDryFireSound;
|
||||||
stateTransitionOnNotWet[8] = "Fire";
|
stateTimeoutValue[7] = 1.0;
|
||||||
|
stateTransitionOnTimeout[7] = "Ready";
|
||||||
|
|
||||||
|
stateName[8] = "CheckWet";
|
||||||
|
stateTransitionOnWet[8] = "WetFire";
|
||||||
|
stateTransitionOnNotWet[8] = "Fire";
|
||||||
};
|
};
|
||||||
|
|
||||||
datablock ItemData(Wp400)
|
datablock ItemData(Wp400)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue