diff --git a/README.md b/README.md index a2d08f5..038a79a 100644 --- a/README.md +++ b/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 * 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 :) + * 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 * Modified the damage scalar of missiles to be a OHK on rapier zombies * 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 * 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 +* 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 * 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 - * 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. \ No newline at end of file + * 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 \ No newline at end of file diff --git a/scripts/TWM2/Bosses/GhostOfFire.cs b/scripts/TWM2/Bosses/GhostOfFire.cs index 2021173..afe7bf6 100644 --- a/scripts/TWM2/Bosses/GhostOfFire.cs +++ b/scripts/TWM2/Bosses/GhostOfFire.cs @@ -1,386 +1,376 @@ //DBs -datablock ParticleData(GhostflameParticle) -{ - dragCoeffiecient = 0.0; - gravityCoefficient = -0.1; - inheritedVelFactor = 0.1; +datablock ParticleData(GhostflameParticle) { + dragCoeffiecient = 0.0; + gravityCoefficient = -0.1; + inheritedVelFactor = 0.1; - lifetimeMS = 500; - lifetimeVarianceMS = 50; + lifetimeMS = 500; + lifetimeVarianceMS = 50; - textureName = "particleTest"; + textureName = "particleTest"; - spinRandomMin = -10.0; - spinRandomMax = 10.0; + spinRandomMin = -10.0; + spinRandomMax = 10.0; - colors[0] = "0 1 0 0.4"; - colors[1] = "0 1 0 0.3"; - colors[2] = "0 1 0 0.0"; - sizes[0] = 2.0; - sizes[1] = 1.0; - sizes[2] = 0.8; - times[0] = 0.0; - times[1] = 0.6; - times[2] = 1.0; + colors[0] = "0 1 0 0.4"; + colors[1] = "0 1 0 0.3"; + colors[2] = "0 1 0 0.0"; + sizes[0] = 2.0; + sizes[1] = 1.0; + sizes[2] = 0.8; + times[0] = 0.0; + times[1] = 0.6; + times[2] = 1.0; }; -datablock ParticleEmitterData(GhostflameEmitter) -{ - ejectionPeriodMS = 3; - periodVarianceMS = 0; +datablock ParticleEmitterData(GhostflameEmitter) { + ejectionPeriodMS = 3; + periodVarianceMS = 0; - ejectionOffset = 0.2; - ejectionVelocity = 10.0; - velocityVariance = 0.0; + ejectionOffset = 0.2; + ejectionVelocity = 10.0; + velocityVariance = 0.0; - thetaMin = 0.0; - thetaMax = 10.0; + thetaMin = 0.0; + thetaMax = 10.0; - particles = "GhostflameParticle"; + particles = "GhostflameParticle"; }; -datablock LinearFlareProjectileData(GhostFlameboltMain) -{ - projectileShapeName = "turret_muzzlepoint.dts"; - scale = "1.0 1.0 1.0"; - faceViewer = true; - directDamage = 0.05; - hasDamageRadius = true; - indirectDamage = 0.1; - damageRadius = 4.0; - kickBackStrength = 0.0; - radiusDamageType = $DamageType::Plasma; +datablock LinearFlareProjectileData(GhostFlameboltMain) { + projectileShapeName = "turret_muzzlepoint.dts"; + scale = "1.0 1.0 1.0"; + faceViewer = true; + directDamage = 0.05; + hasDamageRadius = true; + indirectDamage = 0.1; + damageRadius = 4.0; + kickBackStrength = 0.0; + radiusDamageType = $DamageType::Plasma; - explosion = "ThrowerExplosion"; - splash = PlasmaSplash; + explosion = "ThrowerExplosion"; + splash = PlasmaSplash; - baseEmitter = GhostflameEmitter; + baseEmitter = GhostflameEmitter; - dryVelocity = 50.0; // z0dd - ZOD, 7/20/02. Faster plasma projectile. was 55 - wetVelocity = -1; - velInheritFactor = 0.3; - fizzleTimeMS = 250; - lifetimeMS = 30000; - explodeOnDeath = false; - reflectOnWaterImpactAngle = 0.0; - explodeOnWaterImpact = true; - deflectionOnWaterImpact = 0.0; - fizzleUnderwaterMS = -1; + dryVelocity = 50.0; // z0dd - ZOD, 7/20/02. Faster plasma projectile. was 55 + wetVelocity = -1; + velInheritFactor = 0.3; + fizzleTimeMS = 250; + lifetimeMS = 30000; + explodeOnDeath = false; + reflectOnWaterImpactAngle = 0.0; + explodeOnWaterImpact = true; + deflectionOnWaterImpact = 0.0; + fizzleUnderwaterMS = -1; - //activateDelayMS = 100; - activateDelayMS = -1; + //activateDelayMS = 100; + activateDelayMS = -1; - size[0] = 0.2; - size[1] = 0.5; - size[2] = 0.1; + size[0] = 0.2; + size[1] = 0.5; + size[2] = 0.1; - - numFlares = 35; - flareColor = "1 0.18 0.03"; - flareModTexture = "flaremod"; - flareBaseTexture = "flarebase"; + numFlares = 35; + flareColor = "1 0.18 0.03"; + flareModTexture = "flaremod"; + flareBaseTexture = "flarebase"; sound = PlasmaProjectileSound; - fireSound = FlamethrowerFireSound; - wetFireSound = PlasmaFireWetSound; + fireSound = FlamethrowerFireSound; + wetFireSound = PlasmaFireWetSound; - hasLight = true; - lightRadius = 10.0; - lightColor = "0.94 0.03 0.12"; + hasLight = true; + lightRadius = 10.0; + lightColor = "0.94 0.03 0.12"; }; -datablock ParticleData(NapalmExplosionParticle) -{ - dragCoefficient = 2; - gravityCoefficient = 0.2; - inheritedVelFactor = 0.2; - constantAcceleration = 0.0; - lifetimeMS = 450; - lifetimeVarianceMS = 150; - textureName = "particleTest"; - colors[0] = "1 0 0"; - colors[1] = "1 0 0"; - sizes[0] = 0.5; - sizes[1] = 2; +datablock ParticleData(NapalmExplosionParticle) { + dragCoefficient = 2; + gravityCoefficient = 0.2; + inheritedVelFactor = 0.2; + constantAcceleration = 0.0; + lifetimeMS = 450; + lifetimeVarianceMS = 150; + textureName = "particleTest"; + colors[0] = "1 0 0"; + colors[1] = "1 0 0"; + sizes[0] = 0.5; + sizes[1] = 2; }; -datablock ParticleEmitterData(NapalmExplosionEmitter) -{ - ejectionPeriodMS = 7; - periodVarianceMS = 0; - ejectionVelocity = 5; - velocityVariance = 1.0; - ejectionOffset = 0.0; - thetaMin = 0; - thetaMax = 60; - phiReferenceVel = 0; - phiVariance = 360; - overrideAdvances = false; - particles = "NapalmExplosionParticle"; +datablock ParticleEmitterData(NapalmExplosionEmitter) { + ejectionPeriodMS = 7; + periodVarianceMS = 0; + ejectionVelocity = 5; + velocityVariance = 1.0; + ejectionOffset = 0.0; + thetaMin = 0; + thetaMax = 60; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + particles = "NapalmExplosionParticle"; }; -datablock ExplosionData(NapalmExplosion) -{ - explosionShape = "effect_plasma_explosion.dts"; - soundProfile = plasmaExpSound; - particleEmitter = NapalmExplosionEmitter; - particleDensity = 150; - particleRadius = 1.25; - faceViewer = true; +datablock ExplosionData(NapalmExplosion) { + explosionShape = "effect_plasma_explosion.dts"; + soundProfile = plasmaExpSound; + particleEmitter = NapalmExplosionEmitter; + particleDensity = 150; + particleRadius = 1.25; + faceViewer = true; - sizes[0] = "3.0 3.0 3.0"; - sizes[1] = "3.0 3.0 3.0"; - times[0] = 0.0; - times[1] = 1.5; + sizes[0] = "3.0 3.0 3.0"; + sizes[1] = "3.0 3.0 3.0"; + times[0] = 0.0; + times[1] = 1.5; }; //-------------------------------------- //Napalm projectile //-------------------------------------- -datablock LinearProjectileData(NapalmShot) -{ - projectileShapeName = "mortar_projectile.dts"; - emitterDelay = -1; - directDamage = 0.0; - hasDamageRadius = true; - indirectDamage = 0.5; - damageRadius = 20.0; - radiusDamageType = $DamageType::Plasma; - kickBackStrength = 3000; +datablock LinearProjectileData(NapalmShot) { + projectileShapeName = "mortar_projectile.dts"; + emitterDelay = -1; + directDamage = 0.0; + hasDamageRadius = true; + indirectDamage = 0.5; + damageRadius = 20.0; + radiusDamageType = $DamageType::Plasma; + kickBackStrength = 3000; - explosion = "NapalmExplosion"; -// underwaterExplosion = "UnderwaterNapalmExplosion"; - velInheritFactor = 0.5; -// splash = NapalmSplash; - depthTolerance = 10.0; // depth at which it uses underwater explosion + explosion = "NapalmExplosion"; + // underwaterExplosion = "UnderwaterNapalmExplosion"; + velInheritFactor = 0.5; + // splash = NapalmSplash; + depthTolerance = 10.0; // depth at which it uses underwater explosion - baseEmitter = MissileFireEmitter; - bubbleEmitter = GrenadeBubbleEmitter; + baseEmitter = MissileFireEmitter; + bubbleEmitter = GrenadeBubbleEmitter; - grenadeElasticity = 0.15; - grenadeFriction = 0.4; - armingDelayMS = 2000; - muzzleVelocity = 63.7; - drag = 0.1; + grenadeElasticity = 0.15; + grenadeFriction = 0.4; + armingDelayMS = 2000; + muzzleVelocity = 63.7; + drag = 0.1; - sound = MortarProjectileSound; + sound = MortarProjectileSound; - hasLight = true; - lightRadius = 4; - lightColor = "1.00 0.9 1.00"; + hasLight = true; + lightRadius = 4; + lightColor = "1.00 0.9 1.00"; - hasLightUnderwaterColor = true; - 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; + hasLightUnderwaterColor = true; + 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; }; -datablock PlayerData(GhostFireArmor) : MediumPlayerDamageProfile -{ - emap = true; +datablock PlayerData(GhostFireArmor) : MediumPlayerDamageProfile { + emap = true; - className = Armor; - shapeFile = "medium_male.dts"; - cameraMaxDist = 3; - computeCRC = true; + className = Armor; + shapeFile = "medium_male.dts"; + cameraMaxDist = 3; + computeCRC = true; - debrisShapeName = "debris_player.dts"; - debris = HumanRedPlayerDebris; + debrisShapeName = "debris_player.dts"; + debris = HumanRedPlayerDebris; - canObserve = true; - cmdCategory = "Clients"; - cmdIcon = CMDPlayerIcon; - cmdMiniIconName = "commander/MiniIcons/com_player_grey"; + canObserve = true; + cmdCategory = "Clients"; + cmdIcon = CMDPlayerIcon; + cmdMiniIconName = "commander/MiniIcons/com_player_grey"; - hudImageNameFriendly[0] = "gui/hud_playertriangle"; - hudImageNameEnemy[0] = "gui/hud_playertriangle_enemy"; - hudRenderModulated[0] = true; + hudImageNameFriendly[0] = "gui/hud_playertriangle"; + hudImageNameEnemy[0] = "gui/hud_playertriangle_enemy"; + hudRenderModulated[0] = true; - hudImageNameFriendly[1] = "commander/MiniIcons/com_flag_grey"; - hudImageNameEnemy[1] = "commander/MiniIcons/com_flag_grey"; - hudRenderModulated[1] = true; - hudRenderAlways[1] = true; - hudRenderCenter[1] = true; - hudRenderDistance[1] = true; + hudImageNameFriendly[1] = "commander/MiniIcons/com_flag_grey"; + hudImageNameEnemy[1] = "commander/MiniIcons/com_flag_grey"; + hudRenderModulated[1] = true; + hudRenderAlways[1] = true; + hudRenderCenter[1] = true; + hudRenderDistance[1] = true; - hudImageNameFriendly[2] = "commander/MiniIcons/com_flag_grey"; - hudImageNameEnemy[2] = "commander/MiniIcons/com_flag_grey"; - hudRenderModulated[2] = true; - hudRenderAlways[2] = true; - hudRenderCenter[2] = true; - hudRenderDistance[2] = true; + hudImageNameFriendly[2] = "commander/MiniIcons/com_flag_grey"; + hudImageNameEnemy[2] = "commander/MiniIcons/com_flag_grey"; + hudRenderModulated[2] = true; + hudRenderAlways[2] = true; + hudRenderCenter[2] = true; + hudRenderDistance[2] = true; - aiAvoidThis = true; + aiAvoidThis = true; - minLookAngle = -1.5; - maxLookAngle = 1.5; - maxFreelookAngle = 3.0; + minLookAngle = -1.5; + maxLookAngle = 1.5; + maxFreelookAngle = 3.0; - mass = 70; - drag = 0.3; - maxdrag = 0.5; - density = 10; - maxDamage = 500.0; - maxEnergy = 400; - repairRate = 0.0053; - energyPerDamagePoint = 75.0; // shield energy required to block one point of damage + mass = 70; + drag = 0.3; + maxdrag = 0.5; + density = 10; + maxDamage = 500.0; + maxEnergy = 400; + repairRate = 0.0053; + energyPerDamagePoint = 75.0; // shield energy required to block one point of damage - rechargeRate = 0.456; - jetForce = 21.22 * 230; - underwaterJetForce = 25.22 * 130 * 1.5; - underwaterVertJetFactor = 1.5; - jetEnergyDrain = 4.0; - underwaterJetEnergyDrain = 1.0; - minJetEnergy = 10; - maxJetHorizontalPercentage = 0.8; + rechargeRate = 0.456; + jetForce = 21.22 * 230; + underwaterJetForce = 25.22 * 130 * 1.5; + underwaterVertJetFactor = 1.5; + jetEnergyDrain = 4.0; + underwaterJetEnergyDrain = 1.0; + minJetEnergy = 10; + maxJetHorizontalPercentage = 0.8; - runForce = 60 * 150; - runEnergyDrain = 0; - minRunEnergy = 0; - maxForwardSpeed = 18; - maxBackwardSpeed = 18; - maxSideSpeed = 18; + runForce = 60 * 150; + runEnergyDrain = 0; + minRunEnergy = 0; + maxForwardSpeed = 18; + maxBackwardSpeed = 18; + maxSideSpeed = 18; - maxUnderwaterForwardSpeed = 10.5; - maxUnderwaterBackwardSpeed = 9.5; - maxUnderwaterSideSpeed = 9.5; + maxUnderwaterForwardSpeed = 10.5; + maxUnderwaterBackwardSpeed = 9.5; + maxUnderwaterSideSpeed = 9.5; - recoverDelay = 4; - recoverRunForceScale = 0.7; + recoverDelay = 4; + recoverRunForceScale = 0.7; - // heat inc'ers and dec'ers - 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. + // heat inc'ers and dec'ers + 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. - jumpForce = 8.3 * 130; - jumpEnergyDrain = 0; - minJumpEnergy = 0; - jumpSurfaceAngle = 75; - jumpDelay = 0; + jumpForce = 8.3 * 130; + jumpEnergyDrain = 0; + minJumpEnergy = 0; + jumpSurfaceAngle = 75; + jumpDelay = 0; - // Controls over slope of runnable/jumpable surfaces - runSurfaceAngle = 85; - jumpSurfaceAngle = 85; + // Controls over slope of runnable/jumpable surfaces + runSurfaceAngle = 85; + jumpSurfaceAngle = 85; - minJumpSpeed = 25; - maxJumpSpeed = 35; + minJumpSpeed = 25; + maxJumpSpeed = 35; - horizMaxSpeed = 70; - horizResistSpeed = 28; - horizResistFactor = 0.32; - maxJetForwardSpeed = 18; + horizMaxSpeed = 70; + horizResistSpeed = 28; + horizResistFactor = 0.32; + maxJetForwardSpeed = 18; - upMaxSpeed = 80; - upResistSpeed = 30; - upResistFactor = 0.23; + upMaxSpeed = 80; + upResistSpeed = 30; + upResistFactor = 0.23; - minImpactSpeed = 45; - speedDamageScale = 0.006; + minImpactSpeed = 45; + speedDamageScale = 0.006; - jetSound = ArmorJetSound; - wetJetSound = ArmorWetJetSound; + jetSound = ArmorJetSound; + wetJetSound = ArmorWetJetSound; - jetEmitter = FlammerArmorJetEmitter; //Pyro jets - jetEffect = HumanMediumArmorJetEffect; + jetEmitter = FlammerArmorJetEmitter; //Pyro jets + jetEffect = HumanMediumArmorJetEffect; - boundingBox = "1.45 1.45 2.4"; - pickupRadius = 0.75; + boundingBox = "1.45 1.45 2.4"; + pickupRadius = 0.75; - // damage location details - boxNormalHeadPercentage = 0.83; - boxNormalTorsoPercentage = 0.49; - boxHeadLeftPercentage = 0; - boxHeadRightPercentage = 1; - boxHeadBackPercentage = 0; - boxHeadFrontPercentage = 1; + // damage location details + boxNormalHeadPercentage = 0.83; + boxNormalTorsoPercentage = 0.49; + boxHeadLeftPercentage = 0; + boxHeadRightPercentage = 1; + boxHeadBackPercentage = 0; + boxHeadFrontPercentage = 1; - //Foot Prints - decalData = MediumMaleFootprint; - decalOffset = 0.35; + //Foot Prints + decalData = MediumMaleFootprint; + decalOffset = 0.35; - footPuffEmitter = LightPuffEmitter; - footPuffNumParts = 15; - footPuffRadius = 0.25; + footPuffEmitter = LightPuffEmitter; + footPuffNumParts = 15; + footPuffRadius = 0.25; - dustEmitter = LiftoffDustEmitter; + dustEmitter = LiftoffDustEmitter; - splash = PlayerSplash; - splashVelocity = 4.0; - splashAngle = 67.0; - splashFreqMod = 300.0; - splashVelEpsilon = 0.60; - bubbleEmitTime = 0.4; - splashEmitter[0] = PlayerFoamDropletsEmitter; - splashEmitter[1] = PlayerFoamEmitter; - splashEmitter[2] = PlayerBubbleEmitter; - mediumSplashSoundVelocity = 10.0; - hardSplashSoundVelocity = 20.0; - exitSplashSoundVelocity = 5.0; + splash = PlayerSplash; + splashVelocity = 4.0; + splashAngle = 67.0; + splashFreqMod = 300.0; + splashVelEpsilon = 0.60; + bubbleEmitTime = 0.4; + splashEmitter[0] = PlayerFoamDropletsEmitter; + splashEmitter[1] = PlayerFoamEmitter; + splashEmitter[2] = PlayerBubbleEmitter; + mediumSplashSoundVelocity = 10.0; + hardSplashSoundVelocity = 20.0; + exitSplashSoundVelocity = 5.0; - footstepSplashHeight = 0.35; - //Footstep Sounds - LFootSoftSound = LFootMediumSoftSound; - RFootSoftSound = RFootMediumSoftSound; - LFootHardSound = LFootMediumHardSound; - RFootHardSound = RFootMediumHardSound; - LFootMetalSound = LFootMediumMetalSound; - RFootMetalSound = RFootMediumMetalSound; - LFootSnowSound = LFootMediumSnowSound; - RFootSnowSound = RFootMediumSnowSound; - LFootShallowSound = LFootMediumShallowSplashSound; - RFootShallowSound = RFootMediumShallowSplashSound; - LFootWadingSound = LFootMediumWadingSound; - RFootWadingSound = RFootMediumWadingSound; - LFootUnderwaterSound = LFootMediumUnderwaterSound; - RFootUnderwaterSound = RFootMediumUnderwaterSound; - LFootBubblesSound = LFootMediumBubblesSound; - RFootBubblesSound = RFootMediumBubblesSound; - movingBubblesSound = ArmorMoveBubblesSound; - waterBreathSound = WaterBreathMaleSound; + footstepSplashHeight = 0.35; + //Footstep Sounds + LFootSoftSound = LFootMediumSoftSound; + RFootSoftSound = RFootMediumSoftSound; + LFootHardSound = LFootMediumHardSound; + RFootHardSound = RFootMediumHardSound; + LFootMetalSound = LFootMediumMetalSound; + RFootMetalSound = RFootMediumMetalSound; + LFootSnowSound = LFootMediumSnowSound; + RFootSnowSound = RFootMediumSnowSound; + LFootShallowSound = LFootMediumShallowSplashSound; + RFootShallowSound = RFootMediumShallowSplashSound; + LFootWadingSound = LFootMediumWadingSound; + RFootWadingSound = RFootMediumWadingSound; + LFootUnderwaterSound = LFootMediumUnderwaterSound; + RFootUnderwaterSound = RFootMediumUnderwaterSound; + LFootBubblesSound = LFootMediumBubblesSound; + RFootBubblesSound = RFootMediumBubblesSound; + movingBubblesSound = ArmorMoveBubblesSound; + waterBreathSound = WaterBreathMaleSound; - impactSoftSound = ImpactMediumSoftSound; - impactHardSound = ImpactMediumHardSound; - impactMetalSound = ImpactMediumMetalSound; - impactSnowSound = ImpactMediumSnowSound; + impactSoftSound = ImpactMediumSoftSound; + impactHardSound = ImpactMediumHardSound; + impactMetalSound = ImpactMediumMetalSound; + impactSnowSound = ImpactMediumSnowSound; - skiSoftSound = SkiAllSoftSound; - skiHardSound = SkiAllHardSound; - skiMetalSound = SkiAllMetalSound; - skiSnowSound = SkiAllSnowSound; + skiSoftSound = SkiAllSoftSound; + skiHardSound = SkiAllHardSound; + skiMetalSound = SkiAllMetalSound; + skiSnowSound = SkiAllSnowSound; - impactWaterEasy = ImpactMediumWaterEasySound; - impactWaterMedium = ImpactMediumWaterMediumSound; - impactWaterHard = ImpactMediumWaterHardSound; + impactWaterEasy = ImpactMediumWaterEasySound; + impactWaterMedium = ImpactMediumWaterMediumSound; + impactWaterHard = ImpactMediumWaterHardSound; - groundImpactMinSpeed = 10.0; - groundImpactShakeFreq = "4.0 4.0 4.0"; - groundImpactShakeAmp = "1.0 1.0 1.0"; - groundImpactShakeDuration = 0.8; - groundImpactShakeFalloff = 10.0; + groundImpactMinSpeed = 10.0; + groundImpactShakeFreq = "4.0 4.0 4.0"; + groundImpactShakeAmp = "1.0 1.0 1.0"; + groundImpactShakeDuration = 0.8; + groundImpactShakeFalloff = 10.0; - exitingWater = ExitingWaterMediumSound; + exitingWater = ExitingWaterMediumSound; - maxWeapons = 2; // Max number of different weapons 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 + maxWeapons = 2; // Max number of different weapons 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 - damageScale[$DamageType::plasma] = 0.001; - damageScale[$DamageType::Burn] = 0.001; - damageScale[$DamageType::Fire] = 0.001; - damageScale[$DamageType::Bullet] = 0.10; //I deny you shrike n0bs + damageScale[$DamageType::plasma] = 0.001; + damageScale[$DamageType::Burn] = 0.001; + damageScale[$DamageType::Fire] = 0.001; + damageScale[$DamageType::Bullet] = 0.10; //I deny you shrike n0bs - // Inventory restrictions - max[RepairKit] = 4; + // Inventory restrictions + max[RepairKit] = 4; max[Mine] = 0; max[ZapMine] = 0; max[CrispMine] = 5; @@ -390,7 +380,7 @@ datablock PlayerData(GhostFireArmor) : MediumPlayerDamageProfile max[Pistol] = 1; max[PistolAmmo] = 10; max[Pistolclip] = 8; - max[PulsePhaser] = 1; + max[PulsePhaser] = 1; max[flamer] = 1; max[flamerAmmo] = 0; max[Napalm] = 1; @@ -399,111 +389,113 @@ datablock PlayerData(GhostFireArmor) : MediumPlayerDamageProfile max[BOV] = 1; max[SOmelee] = 1; max[IncindinaryGrenade] = 7; - max[Beacon] = 3; - // -END + max[Beacon] = 3; + // -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) { %Ghost = new player(){ - Datablock = "GhostFireArmor"; + Datablock = "GhostFireArmor"; }; - %Ghost.setTransform(%pos); - %Ghost.team = 30; - %Ghost.hastarget = 1; - %Ghost.isGOF = 1; - %Ghost.isBoss = 1; - MissionCleanup.add(%Ghost); - %Ghost.target = createTarget(%Ghost, ""@$TWM2::BossName["GoF"]@"", "", "Male3", '', %Ghost.team, PlayerSensor); - setTargetSensorData(%Ghost.target, PlayerSensor); - setTargetSensorGroup(%Ghost.target, 30); - setTargetName(%Ghost.target, addtaggedstring($TWM2::BossName["GoF"])); - - GOFAttack_FUNC("ConsiderFlamethrower", %Ghost); - GOFDoRandomAttacks(%ghost); - - InitiateBoss(%ghost, "GhostOfFire"); + %Ghost.setTransform(%pos); + %Ghost.team = 30; + %Ghost.hastarget = 1; + %Ghost.isGOF = 1; + %Ghost.isBoss = 1; + MissionCleanup.add(%Ghost); + %Ghost.target = createTarget(%Ghost, ""@$TWM2::BossName["GoF"]@"", "", "Male3", '', %Ghost.team, PlayerSensor); + setTargetSensorData(%Ghost.target, PlayerSensor); + setTargetSensorGroup(%Ghost.target, 30); + setTargetName(%Ghost.target, addtaggedstring($TWM2::BossName["GoF"])); - schedule(500, 0, "GOFLookforTarget", %Ghost); + GOFAttack_FUNC("ConsiderFlamethrower", %Ghost); + GOFDoRandomAttacks(%ghost); + + InitiateBoss(%ghost, "GhostOfFire"); + + schedule(500, 0, "GOFLookforTarget", %Ghost); } function GOFLookforTarget(%Ghost) { - if(!isObject(%Ghost)) - 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(!isObject(%Ghost)) { + return; } - } - if(%closestClient) { - GOFPerformMove(%Ghost,%closestClient,%closestDistance); - } - %Ghost.Targeting = schedule(500, %Ghost, "GOFLookforTarget", %Ghost); + 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(%closestClient) { + GOFPerformMove(%Ghost,%closestClient,%closestDistance); + } + %Ghost.Targeting = schedule(500, %Ghost, "GOFLookforTarget", %Ghost); } function GOFPerformMove(%ghost,%closestClient,%closestDistance) { - %ghost.TargetCL = %closestClient; - %ghost.DistToTarg = %closestDistance; - %zposition = %ghost.getPosition(); - %z = getWord(%zposition, 2); - if(%z < -300) { - %ghost.startFade(400, 0, true); - %ghost.startFade(1000, 0, false); - %ghost.setPosition(vectorAdd(vectoradd(%closestclient.player.getPosition(), "0 0 20"), TWM2Lib_MainControl("getRandomPosition", 25 TAB 1))); - %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..."); - } - %pos = %ghost.getworldboxcenter(); - %closestClient = %closestClient.Player; - if(%closestDistance <= $zombie::detectDist){ - if(%ghost.hastarget != 1){ - %ghost.hastarget = 1; + %ghost.TargetCL = %closestClient; + %ghost.DistToTarg = %closestDistance; + %zposition = %ghost.getPosition(); + %z = getWord(%zposition, 2); + if(%z < -300) { + %ghost.startFade(400, 0, true); + %ghost.startFade(1000, 0, false); + %ghost.setPosition(vectorAdd(vectoradd(%closestclient.player.getPosition(), "0 0 20"), TWM2Lib_MainControl("getRandomPosition", 25 TAB 1))); + %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..."); } - - //target is coming in for an easy kill, lets tele - if(%closestDistance < 15) { - GOFAttack_FUNC("BurnTeleport", %ghost); - } + %pos = %ghost.getworldboxcenter(); + %closestClient = %closestClient.Player; + if(%closestDistance <= $zombie::detectDist){ + 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(); - %vector = vectorNormalize(vectorSub(%clpos, %pos)); - %v1 = getword(%vector, 0); - %v2 = getword(%vector, 1); - %nv1 = %v2; - %nv2 = (%v1 * -1); - %none = 0; - %vector2 = %nv1@" "@%nv2@" "@%none; - %ghost.setRotation(fullrot("0 0 0",%vector2)); + %clpos = %closestClient.getPosition(); + %vector = vectorNormalize(vectorSub(%clpos, %pos)); + %v1 = getword(%vector, 0); + %v2 = getword(%vector, 1); + %nv1 = %v2; + %nv2 = (%v1 * -1); + %none = 0; + %vector2 = %nv1@" "@%nv2@" "@%none; + %ghost.setRotation(fullrot("0 0 0",%vector2)); - %fmultiplier = $Zombie::ForwardSpeed; - %vector = vectorscale(%vector, %Fmultiplier); - %upvec = "150"; + %fmultiplier = $Zombie::ForwardSpeed; + %vector = vectorscale(%vector, %Fmultiplier); + %upvec = "150"; - %x = Getword(%vector,0); - %y = Getword(%vector,1); - %z = Getword(%vector,2); - if(%z >= 600) - %upvec = (%upvec * 5); - %vector = %x@" "@%y@" "@%upvec; - %ghost.applyImpulse(%pos, %vector); - } + %x = Getword(%vector,0); + %y = Getword(%vector,1); + %z = Getword(%vector,2); + if(%z >= 600) { + %upvec = (%upvec * 5); + } + %vector = %x@" "@%y@" "@%upvec; + %ghost.applyImpulse(%pos, %vector); + } } @@ -683,25 +675,25 @@ function GOFAttack_FUNC(%att, %args) { } function GOFDoFlameCano(%g, %target) { - if(!isObject(%g) || %g.getState() $= "dead") { - return; - } - %g.setPosition(VectorAdd(%target.player.getPosition(), "0 0 70")); - %Pad = new StaticShape() { - dataBlock = DeployedSpine; - scale = ".1 .1 1"; - position = VectorAdd(%target.player.getPosition(), "0 0 69"); - }; - %g.setMoveState(true); - %Pad.setCloaked(true); - %Pad.schedule(3000, "setPosition", vectorSub(%Pad.getPosition(), "0 0 10")); - %Pad.schedule(4000, "setPosition", vectorSub(%Pad.getPosition(), "0 0 20")); - %Pad.schedule(5000, "setPosition", vectorSub(%Pad.getPosition(), "0 0 30")); - %Pad.schedule(6000, "setPosition", vectorSub(%Pad.getPosition(), "0 0 40")); - %g.schedule(6500, "SetMoveState", false); - %pad.schedule(6500, "Delete"); - //The Vector Crap - schedule(2500, 0, "GOFAttack_FUNC", "Flamecano", %g); + if(!isObject(%g) || %g.getState() $= "dead") { + return; + } + %g.setPosition(VectorAdd(%target.player.getPosition(), "0 0 70")); + %Pad = new StaticShape() { + dataBlock = DeployedSpine; + scale = ".1 .1 1"; + position = VectorAdd(%target.player.getPosition(), "0 0 69"); + }; + %g.setMoveState(true); + %Pad.setCloaked(true); + %Pad.schedule(3000, "setPosition", vectorSub(%Pad.getPosition(), "0 0 10")); + %Pad.schedule(4000, "setPosition", vectorSub(%Pad.getPosition(), "0 0 20")); + %Pad.schedule(5000, "setPosition", vectorSub(%Pad.getPosition(), "0 0 30")); + %Pad.schedule(6000, "setPosition", vectorSub(%Pad.getPosition(), "0 0 40")); + %g.schedule(6500, "SetMoveState", false); + %pad.schedule(6500, "Delete"); + //The Vector Crap + schedule(2500, 0, "GOFAttack_FUNC", "Flamecano", %g); } function GOFDoRandomAttacks(%g) { diff --git a/scripts/TWM2/Systems/ChallengeMenus.cs b/scripts/TWM2/Systems/ChallengeMenus.cs index 43f8c31..fad3e1e 100644 --- a/scripts/TWM2/Systems/ChallengeMenus.cs +++ b/scripts/TWM2/Systems/ChallengeMenus.cs @@ -10,45 +10,53 @@ function GenerateChallengesMenu(%client, %tag, %index) { messageClient( %client, 'SetLineHud', "", %tag, %index, "Select a category to view challenges:"); %index++; // - messageClient( %client, 'SetLineHud', "", %tag, %index, "PGD Challenges (Daily/Weekly/Monthly)"); + messageClient( %client, 'SetLineHud', "", %tag, %index, "PGD Challenges (Daily/Weekly/Monthly)"); %index++; - for(%i = 1; $Challenge::Category[%i] !$= ""; %i++) { - if(%i != 6) { - %categoryReq = getField($Challenge::Category[%i], 2); - if(getWord(%categoryReq, 0) $= "Officer") { - %offLevel = getWord(%categoryReq, 1); - if(%scriptController.officer >= %offLevel) { - messageClient( %client, 'SetLineHud', "", %tag, %index, ""@getField($Challenge::Category[%i], 0)@": "@getField($Challenge::Category[%i], 1)); - %index++; - } - else { - messageClient( %client, 'SetLineHud', "", %tag, %index, ""@getField($Challenge::Category[%i], 0)@": Locked, Requires officer level "@%offLevel@" ("@strReplace($Prestige::Name[%offLevel], " ", "")@")"); - %index++; - } + for(%i = 2; $Challenge::Category[%i] !$= ""; %i++) { + %categoryReq = getField($Challenge::Category[%i], 2); + if(getWord(%categoryReq, 0) $= "Officer") { + %offLevel = getWord(%categoryReq, 1); + if(%scriptController.officer >= %offLevel) { + messageClient( %client, 'SetLineHud', "", %tag, %index, ""@getField($Challenge::Category[%i], 0)@": "@getField($Challenge::Category[%i], 1)); + %index++; } - else { - if(%categoryReq == -1) { + else { + messageClient( %client, 'SetLineHud', "", %tag, %index, ""@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, ""@getField($Challenge::Category[%i], 0)@": "@getField($Challenge::Category[%i], 1)); + %index++; + } + else { + messageClient( %client, 'SetLineHud', "", %tag, %index, "=== CLASSIFIED: CONTINUE PLAYING TWM2 TO UNLOCK ==="); + %index++; + } + } + else { + if(%categoryReq == -1) { + messageClient( %client, 'SetLineHud', "", %tag, %index, ""@getField($Challenge::Category[%i], 0)@": "@getField($Challenge::Category[%i], 1)); + %index++; + } + else { + if(%xp >= $Rank::MinPoints[%categoryReq]) { messageClient( %client, 'SetLineHud', "", %tag, %index, ""@getField($Challenge::Category[%i], 0)@": "@getField($Challenge::Category[%i], 1)); %index++; } else { - if(%xp >= $Rank::MinPoints[%categoryReq]) { - messageClient( %client, 'SetLineHud', "", %tag, %index, ""@getField($Challenge::Category[%i], 0)@": "@getField($Challenge::Category[%i], 1)); - %index++; - } - else { - messageClient( %client, 'SetLineHud', "", %tag, %index, ""@getField($Challenge::Category[%i], 0)@": Locked, Requires Rank of "@$Ranks::NewRank[%categoryReq]@"."); - %index++; - } - } - } + messageClient( %client, 'SetLineHud', "", %tag, %index, ""@getField($Challenge::Category[%i], 0)@": Locked, Requires Rank of "@$Ranks::NewRank[%categoryReq]@"."); + %index++; + } + } } } return %index; } function GenerateChallengeSubMenu(%client, %subMenu, %tag, %index) { - if(%subMenu == 6) { + if(%subMenu == 1) { return GenerateDWMChallengeMenu(%client, %tag, %index); } diff --git a/scripts/TWM2/Systems/NWChallengeIndex.cs b/scripts/TWM2/Systems/NWChallengeIndex.cs index 9e128af..b71d46a 100644 --- a/scripts/TWM2/Systems/NWChallengeIndex.cs +++ b/scripts/TWM2/Systems/NWChallengeIndex.cs @@ -29,601 +29,717 @@ //For development purposes, challenges can also be disabled here: //$Challenge::FlagDisabled[%name] = true; -//Killstreaks -$Challenge::Category[1] = "Killstreak Challenges\tTasks for calling in advanced support\t13"; - -$Challenge::Challenge[1, 0] = "UAV1"; -$Challenge::Info["UAV1"] = "UAV Expert I\t1\t500\tNone\tCall in 30 UAV Recon Satellites"; -$Challenge::Challenge[1, 1] = "UAV2"; -$Challenge::Info["UAV2"] = "UAV Expert II\t1\t1000\tNone\tCall in 75 UAV Recon Satellites"; -$Challenge::Challenge[1, 2] = "UAV3"; -$Challenge::Info["UAV3"] = "UAV Expert III\t1\t2500\tNone\tCall in 100 UAV Recon Satellites"; -$Challenge::Challenge[1, 3] = "Airstrike1"; -$Challenge::Info["Airstrike1"] = "Airstrike Expert I\t1\t1000\tNone\tCall in 25 Airstrikes"; -$Challenge::Challenge[1, 4] = "Airstrike2"; -$Challenge::Info["Airstrike2"] = "Airstrike Expert II\t1\t5000\tNone\tCall in 65 Airstrikes"; -$Challenge::Challenge[1, 5] = "Airstrike3"; -$Challenge::Info["Airstrike3"] = "Airstrike Expert III\t1\t10000\tNone\tCall in 125 Airstrikes"; -$Challenge::Challenge[1, 6] = "UAMS1"; -$Challenge::Info["UAMS1"] = "UAMS Expert I\t1\t1000\tNone\tCall in 25 UAMS Strikes"; -$Challenge::Challenge[1, 7] = "UAMS2"; -$Challenge::Info["UAMS2"] = "UAMS Expert II\t1\t5000\tNone\tCall in 65 UAMS Strikes"; -$Challenge::Challenge[1, 8] = "UAMS3"; -$Challenge::Info["UAMS3"] = "UAMS Expert III\t1\t10000\tNone\tCall in 125 UAMS Strikes"; -$Challenge::Challenge[1, 9] = "Helicopter1"; -$Challenge::Info["Helicopter1"] = "Helicopter Expert I\t1\t2500\tNone\tCall in 25 Combat Helicopters"; -$Challenge::Challenge[1, 10] = "Helicopter2"; -$Challenge::Info["Helicopter2"] = "Helicopter Expert II\t1\t10000\tNone\tCall in 65 Combat Helicopters"; -$Challenge::Challenge[1, 11] = "Helicopter3"; -$Challenge::Info["Helicopter3"] = "Helicopter Expert III\t1\t12500\tCombat Helicopter Schematics\tCall in 125 Combat Helicopters"; -$Challenge::Challenge[1, 12] = "Harrier1"; -$Challenge::Info["Harrier1"] = "Harrier Expert I\t1\t2500\tNone\tCall in 20 Plasma Harrier Airstrikes"; -$Challenge::Challenge[1, 13] = "Harrier2"; -$Challenge::Info["Harrier2"] = "Harrier Expert II\t1\t5000\tNone\tCall in 55 Plasma Harrier Airstrikes"; -$Challenge::Challenge[1, 14] = "Harrier3"; -$Challenge::Info["Harrier3"] = "Harrier Expert III\t1\t12500\tPlasma Harrier Schematics\tCall in 110 Plasma Harrier Airstrikes"; -$Challenge::Challenge[1, 15] = "SatNuke1"; -$Challenge::Info["SatNuke1"] = "OLS Expert I\t1\t5000\tNone\tCall in 25 Orbital Laser Strikes"; -$Challenge::Challenge[1, 16] = "SatNuke2"; -$Challenge::Info["SatNuke2"] = "OLS Expert II\t1\t10000\tNone\tCall in 65 Orbital Laser Strikes"; -$Challenge::Challenge[1, 17] = "SatNuke3"; -$Challenge::Info["SatNuke3"] = "OLS Expert III\t1\t25000\tNone\tCall in 125 Orbital Laser Strikes"; -$Challenge::Challenge[1, 18] = "NapalmHarrier1"; -$Challenge::Info["NapalmHarrier1"] = "Napalm Airstrike Expert I\t1\t5000\tNone\tCall in 20 Napalm Airstrikes"; -$Challenge::Challenge[1, 19] = "NapalmHarrier2"; -$Challenge::Info["NapalmHarrier2"] = "Napalm Airstrike Expert II\t1\t10000\tNone\tCall in 55 Napalm Airstrikes"; -$Challenge::Challenge[1, 20] = "NapalmHarrier3"; -$Challenge::Info["NapalmHarrier3"] = "Napalm Airstrike Expert III\t1\t25000\tF41 Strike Fighter Schematics\tCall in 110 Napalm Airstrikes"; -$Challenge::Challenge[1, 21] = "GunHeli1"; -$Challenge::Info["GunHeli1"] = "Gunship Helicopter Expert I\t1\t5000\tNone\tCall in 20 Gunship Helicopters"; -$Challenge::Challenge[1, 22] = "GunHeli2"; -$Challenge::Info["GunHeli2"] = "Gunship Helicopter Expert II\t1\t10000\tNone\tCall in 55 Gunship Helicopters"; -$Challenge::Challenge[1, 23] = "GunHeli3"; -$Challenge::Info["GunHeli3"] = "Gunship Helicopter Expert III\t1\t25000\tGunship Helicopter Schematics\tCall in 110 Gunship Helicopters"; -$Challenge::Challenge[1, 24] = "SBomber1"; -$Challenge::Info["SBomber1"] = "Stealth Bomber Expert I\t1\t5000\tNone\tCall in 20 Stealth Bombers"; -$Challenge::Challenge[1, 25] = "SBomber2"; -$Challenge::Info["SBomber2"] = "Stealth Bomber Expert II\t1\t10000\tNone\tCall in 50 Stealth Bombers"; -$Challenge::Challenge[1, 26] = "SBomber3"; -$Challenge::Info["SBomber3"] = "Stealth Bomber Expert III\t1\t25000\tNone\tCall in 100 Stealth Bombers"; -$Challenge::Challenge[1, 27] = "Gunship1"; -$Challenge::Info["Gunship1"] = "Harbinger's Wrath Expert I\t1\t5000\tNone\tCall in 15 Harbinger Gunships"; -$Challenge::Challenge[1, 28] = "Gunship2"; -$Challenge::Info["Gunship2"] = "Harbinger's Wrath Expert II\t1\t10000\tNone\tCall in 35 Harbinger Gunships"; -$Challenge::Challenge[1, 29] = "Gunship3"; -$Challenge::Info["Gunship3"] = "Harbinger's Wrath Expert III\t1\t25000\tAC-130 Vehicle Schematics\tCall in 75 Harbinger Gunships"; -$Challenge::Challenge[1, 30] = "ACGunship1"; -$Challenge::RequiresChallenge[1, 30] = "Gunship3"; -$Challenge::Info["ACGunship1"] = "AC-130 Expert I\t1\t5000\tNone\tCall in 15 AC-130 Gunners"; -$Challenge::Challenge[1, 31] = "ACGunship2"; -$Challenge::RequiresChallenge[1, 31] = "Gunship3"; -$Challenge::Info["ACGunship2"] = "AC-130 Expert II\t1\t10000\tNone\tCall in 35 AC-130 Gunners"; -$Challenge::Challenge[1, 32] = "ACGunship3"; -$Challenge::RequiresChallenge[1, 32] = "Gunship3"; -$Challenge::Info["ACGunship3"] = "AC-130 Expert III\t1\t25000\tBragging Rights... lol.\tCall in 75 AC-130 Gunners"; -$Challenge::Challenge[1, 33] = "Apache1"; -$Challenge::Info["Apache1"] = "Apache Gunner Expert I\t1\t5000\tNone\tCall in 15 Apache Gunners"; -$Challenge::Challenge[1, 34] = "Apache2"; -$Challenge::Info["Apache2"] = "Apache Gunner Expert II\t1\t10000\tNone\tCall in 35 Apache Gunners"; -$Challenge::Challenge[1, 35] = "Apache3"; -$Challenge::Info["Apache3"] = "Apache Gunner Expert III\t1\t25000\tApache Helicopter Schematics\tCall in 75 Apache Gunners"; -$Challenge::Challenge[1, 36] = "Centaur1"; -$Challenge::Info["Centaur1"] = "Centaur Artillery Expert I\t1\t10000\tNone\tCall in 10 Artillery Strikes"; -$Challenge::Challenge[1, 37] = "Centaur2"; -$Challenge::Info["Centaur2"] = "Centaur Artillery Expert II\t1\t25000\tNone\tCall in 25 Artillery Strikes"; -$Challenge::Challenge[1, 38] = "Centaur3"; -$Challenge::Info["Centaur3"] = "Centaur Artillery Expert III\t1\t50000\tNone\tCall in 50 Artillery Strikes"; -$Challenge::Challenge[1, 39] = "EMP1"; -$Challenge::Info["EMP1"] = "EMP Expert I\t1\t10000\tNone\tCall in 5 Mass EMP's"; -$Challenge::Challenge[1, 40] = "EMP2"; -$Challenge::Info["EMP2"] = "EMP Expert II\t1\t25000\tNone\tCall in 10 Mass EMP's"; -$Challenge::Challenge[1, 41] = "EMP3"; -$Challenge::Info["EMP3"] = "EMP Expert III\t1\t50000\tNone\tCall in 25 Mass EMP's"; -$Challenge::Challenge[1, 42] = "Nuke1"; -$Challenge::Info["Nuke1"] = "Nuke Expert I\t1\t10000\tNone\tCall in 5 Nukes"; -$Challenge::Challenge[1, 43] = "Nuke2"; -$Challenge::Info["Nuke2"] = "Nuke Expert II\t1\t25000\tNone\tCall in 10 Nukes"; -$Challenge::Challenge[1, 44] = "Nuke3"; -$Challenge::Info["Nuke3"] = "Nuke Expert III\t1\t50000\tZ-Bomb Killstreak\tCall in 25 Nukes"; -$Challenge::Challenge[1, 45] = "Fission1"; -$Challenge::SetRequirement[1, 45] = "Officer 1"; -$Challenge::Info["Fission1"] = "Fission Bomb Expert I\t1\t25000\tNone\tCall in a Fission Bomb"; -$Challenge::Challenge[1, 46] = "Fission2"; -$Challenge::SetRequirement[1, 46] = "Officer 1"; -$Challenge::Info["Fission2"] = "Fission Bomb Expert II\t1\t50000\tNone\tCall in 2 Fission Bombs"; -$Challenge::Challenge[1, 47] = "Fission3"; -$Challenge::SetRequirement[1, 47] = "Officer 1"; -$Challenge::Info["Fission3"] = "Fission Bomb Expert III\t1\t75000\tNone\tCall in 5 Fission Bombs"; -$Challenge::Challenge[1, 48] = "PulseStar1"; -$Challenge::SetRequirement[1, 48] = "Officer 9"; -$Challenge::Info["PulseStar1"] = "PulseStar Expert I\t1\t5000\tNone\tCall in 15 PulseStar Shield Systems"; -$Challenge::Challenge[1, 49] = "PulseStar2"; -$Challenge::SetRequirement[1, 49] = "Officer 9"; -$Challenge::Info["PulseStar2"] = "PulseStar Expert II\t1\t10000\tNone\tCall in 30 PulseStar Shield Systems"; -$Challenge::Challenge[1, 50] = "PulseStar3"; -$Challenge::SetRequirement[1, 50] = "Officer 9"; -$Challenge::Info["PulseStar3"] = "PulseStar Expert III\t1\t25000\tNone\tCall in 50 PulseStar Shield Systems"; -$Challenge::Challenge[1, 51] = "LOAS1"; -$Challenge::SetRequirement[1, 51] = "Officer 15"; -$Challenge::Info["LOAS1"] = "LOAS Expert I\t1\t25000\tNone\tCall in 5 Low Orbit Orbital Strikes (LOAS)"; -$Challenge::Challenge[1, 52] = "LOAS2"; -$Challenge::SetRequirement[1, 52] = "Officer 15"; -$Challenge::Info["LOAS2"] = "LOAS Expert II\t1\t50000\tNone\tCall in 10 Low Orbit Orbital Strikes (LOAS)"; -$Challenge::Challenge[1, 53] = "LOAS3"; -$Challenge::SetRequirement[1, 53] = "Officer 15"; -$Challenge::Info["LOAS3"] = "LOAS Expert III\t1\t75000\tNone\tCall in 15 Low Orbit Orbital Strikes (LOAS)"; - -//Bosses -$Challenge::Category[2] = "Boss Challenges\tTasks for eliminating the toughest enemies in TWM2\t18"; - -$Challenge::Challenge[2, 0] = "Yvex1"; -$Challenge::Info["Yvex1"] = "Nightmarish Enterprise\t2\t1000\tNone\tDefeat Lord Yvex 3 Times"; -$Challenge::Challenge[2, 1] = "Yvex2"; -$Challenge::Info["Yvex2"] = "Darkness Rising\t2\t2500\tNone\tDefeat Lord Yvex 5 Times"; -$Challenge::Challenge[2, 2] = "Yvex3"; -$Challenge::Info["Yvex3"] = "Shadowy Desecration\t2\t5000\tNone\tDefeat Lord Yvex 10 Times"; -$Challenge::Challenge[2, 3] = "CWS1"; -$Challenge::Info["CWS1"] = "Fortress In The Sky\t2\t1000\tNone\tDefeat Colonel Windshear 3 Times"; -$Challenge::Challenge[2, 4] = "CWS2"; -$Challenge::Info["CWS2"] = "Aerieal Nightmare\t2\t2500\tNone\tDefeat Colonel Windshear 5 Times"; -$Challenge::Challenge[2, 5] = "CWS3"; -$Challenge::Info["CWS3"] = "Harbinger's Bane\t2\t5000\tNone\tDefeat Colonel Windshear 10 Times"; -$Challenge::Challenge[2, 6] = "GOL1"; -$Challenge::Info["GOL1"] = "Envious Lightning\t2\t1500\tNone\tDefeat The Ghost Of Lightning 3 Times"; -$Challenge::Challenge[2, 7] = "GOL2"; -$Challenge::Info["GOL2"] = "The Shocking Truth\t2\t3000\tNone\tDefeat The Ghost Of Lightning 5 Times"; -$Challenge::Challenge[2, 8] = "GOL3"; -$Challenge::Info["GOL3"] = "Severe Thunderstorm\t2\t6500\tNone\tDefeat The Ghost Of Lightning 10 Times"; -$Challenge::Challenge[2, 9] = "GOF1"; -$Challenge::Info["GOF1"] = "Purifier\t2\t5000\tNone\tDefeat The Ghost Of Fire"; -$Challenge::Challenge[2, 10] = "GOF2"; -$Challenge::Info["GOF2"] = "Inceneration Ender\t2\t10000\tNone\tDefeat The Ghost Of Fire 3 Times"; -$Challenge::Challenge[2, 11] = "GOF3"; -$Challenge::Info["GOF3"] = "Mt. Death Depleter\t2\t20000\tNone\tDefeat The Ghost Of Fire 5 Times"; -$Challenge::Challenge[2, 12] = "Veg1"; -$Challenge::Info["Veg1"] = "Flaming Revolt\t2\t1500\tNone\tDefeat General Vegenor 3 Times"; -$Challenge::Challenge[2, 13] = "Veg2"; -$Challenge::Info["Veg2"] = "Burning Frenzy\t2\t3000\tNone\tDefeat General Vegenor 5 Times"; -$Challenge::Challenge[2, 14] = "Veg3"; -$Challenge::Info["Veg3"] = "Firestorm Ender\t2\t6500\tNone\tDefeat General Vegenor 10 Times"; -$Challenge::Challenge[2, 15] = "LRog1"; -$Challenge::Info["LRog1"] = "Revenge Halter\t2\t2500\tNone\tDefeat Lord Rog 2 Times"; -$Challenge::Challenge[2, 16] = "LRog2"; -$Challenge::Info["LRog2"] = "Return to Returner\t2\t5000\tNone\tDefeat Lord Rog 4 Times"; -$Challenge::Challenge[2, 17] = "LRog3"; -$Challenge::Info["LRog3"] = "Payback's A Bitch\t2\t10000\tNone\tDefeat Lord Rog 7 Times"; -$Challenge::Challenge[2, 18] = "Ins1"; -$Challenge::Info["Ins1"] = "El Shipitor\t2\t2500\tNone\tDefeat Major Insignia 2 Times"; -$Challenge::Challenge[2, 19] = "Ins2"; -$Challenge::Info["Ins2"] = "No Gravity, No Problem\t2\t5000\tNone\tDefeat Major Insignia 4 Times"; -$Challenge::Challenge[2, 20] = "Ins3"; -$Challenge::Info["Ins3"] = "Gravitational Influx\t2\t10000\tNone\tDefeat Major Insignia 7 Times"; -$Challenge::Challenge[2, 21] = "Stormrider1"; -$Challenge::Info["Stormrider1"] = "Clear Skies\t2\t2500\tNone\tDefeat Commander Stormrider 3 Times"; -$Challenge::Challenge[2, 22] = "Stormrider2"; -$Challenge::Info["Stormrider2"] = "Shootdown Master\t2\t5000\tNone\tDefeat Commander Stormrider 5 Times"; -$Challenge::Challenge[2, 23] = "Stormrider3"; -$Challenge::Info["Stormrider3"] = "Harbinger Fighter Demolisher\t2\t10000\tNone\tDefeat Commander Stormrider 10 Times"; -$Challenge::Challenge[2, 24] = "Trev1"; -$Challenge::Info["Trev1"] = "Precious Cargo\t2\t2500\tNone\tDefeat Lordranius Trevor 2 Times"; -$Challenge::Challenge[2, 25] = "Trev2"; -$Challenge::Info["Trev2"] = "Harbinger Denied\t2\t5000\tNone\tDefeat Lordranius Trevor 4 Times"; -$Challenge::Challenge[2, 26] = "Trev3"; -$Challenge::Info["Trev3"] = "Tank Halter\t2\t10000\tNone\tDefeat Lordranius Trevor 7 Times"; -$Challenge::Challenge[2, 27] = "Vard1"; -$Challenge::Info["Vard1"] = "Shining Star\t2\t3500\tNone\tDefeat Lord Vardison"; -$Challenge::Challenge[2, 28] = "Vard2"; -$Challenge::Info["Vard2"] = "Glare The Dark\t2\t7000\tNone\tDefeat Lord Vardison 3 Times"; -$Challenge::Challenge[2, 29] = "Vard3"; -$Challenge::Info["Vard3"] = "Outevil The Wicked\t2\t12500\tNone\tDefeat Lord Vardison 5 Times"; -$Challenge::Challenge[2, 30] = "VardEasy"; -$Challenge::IsNotMultiTier["VardEasy"] = true; -$Challenge::Info["VardEasy"] = "The Standard Experience\t2\t7000\tNone\tDefeat Lord Vardison on Easy Difficulty"; -$Challenge::Challenge[2, 31] = "VardNorm"; -$Challenge::IsNotMultiTier["VardNorm"] = true; -$Challenge::Info["VardNorm"] = "Demon Hunter\t2\t15000\tNone\tDefeat Lord Vardison on Medium Difficulty"; -$Challenge::Challenge[2, 32] = "VardHard"; -$Challenge::IsNotMultiTier["VardHard"] = true; -$Challenge::Info["VardHard"] = "Master Demon Slayer\t2\t25000\tNone\tDefeat Lord Vardison on Hard Difficulty"; -$Challenge::Challenge[2, 33] = "VardWtf"; -$Challenge::IsNotMultiTier["VardWtf"] = true; -$Challenge::Info["VardWtf"] = "God of the Shadow Realm\t2\t50000\tNone\tAgainst all odds, slay WTF difficulty Lord Vardison"; -$Challenge::Challenge[2, 34] = "ShadeLord1"; -$Challenge::Info["ShadeLord1"] = "Night Stalker\t2\t5000\tNone\tDefeat The Shade Lord"; -$Challenge::Challenge[2, 35] = "ShadeLord2"; -$Challenge::Info["ShadeLord2"] = "Shadow Embracer\t2\t10000\tNone\tDefeat The Shade Lord Twice"; -$Challenge::Challenge[2, 36] = "ShadeLord3"; -$Challenge::Info["ShadeLord3"] = "Dawnlight Encarnate\t2\t20000\tNone\tDefeat The Shade Lord for the Third Time"; - -//Wargames -$Challenge::Category[3] = "Wargames Challenges\tTasks for eliminating enemy players in various ways\t23"; - -$Challenge::Challenge[3, 0] = "Slayer1"; -$Challenge::Info["Slayer1"] = "Slayer I\t3\t1000\tNone\tKill 100 Enemy Players"; -$Challenge::Challenge[3, 1] = "Slayer2"; -$Challenge::Info["Slayer2"] = "Slayer II\t3\t2500\tNone\tKill 250 Enemy Players"; -$Challenge::Challenge[3, 2] = "Slayer3"; -$Challenge::Info["Slayer3"] = "Slayer III\t3\t5000\tNone\tKill 500 Enemy Players"; -$Challenge::Challenge[3, 3] = "Slayer4"; -$Challenge::Info["Slayer4"] = "Slayer IV\t3\t7500\tNone\tKill 750 Enemy Players"; -$Challenge::Challenge[3, 4] = "Slayer5"; -$Challenge::Info["Slayer5"] = "Slayer V\t3\t10000\tNone\tKill 1000 Enemy Players"; -$Challenge::Challenge[3, 5] = "Defectionator1"; -$Challenge::Info["Defectionator1"] = "Defectionator I\t3\t2500\tNone\tKill 100 \"Zombified\" Players"; -$Challenge::Challenge[3, 6] = "Defectionator2"; -$Challenge::Info["Defectionator2"] = "Defectionator II\t3\t5000\tNone\tKill 250 \"Zombified\" Players"; -$Challenge::Challenge[3, 7] = "Defectionator3"; -$Challenge::Info["Defectionator3"] = "Defectionator III\t3\t10000\tNone\tKill 500 \"Zombified\" Players"; -$Challenge::Challenge[3, 8] = "Infectionator1"; -$Challenge::Info["Infectionator1"] = "Infectionator I\t3\t2500\tNone\tConvert 50 Players to the Zombie Horde"; -$Challenge::Challenge[3, 9] = "Infectionator2"; -$Challenge::Info["Infectionator2"] = "Infectionator II\t3\t5000\tNone\tConvert 100 Players to the Zombie Horde"; -$Challenge::Challenge[3, 10] = "Infectionator3"; -$Challenge::Info["Infectionator3"] = "Infectionator III\t3\t10000\tNone\tConvert 250 Players to the Zombie Horde"; -$Challenge::Challenge[3, 11] = "HSHoncho1"; -$Challenge::Info["HSHoncho1"] = "Headshot Honcho I\t3\t2500\tNone\tEliminate 100 Enemy Players with Headshots"; -$Challenge::Challenge[3, 12] = "HSHoncho2"; -$Challenge::Info["HSHoncho2"] = "Headshot Honcho II\t3\t5000\tNone\tEliminate 200 Enemy Players with Headshots"; -$Challenge::Challenge[3, 13] = "HSHoncho3"; -$Challenge::Info["HSHoncho3"] = "Headshot Honcho III\t3\t10000\tNone\tEliminate 300 Enemy Players with Headshots"; -$Challenge::Challenge[3, 14] = "VehMans1"; -$Challenge::Info["VehMans1"] = "Vehicular Manslaughter I\t3\t2500\tNone\tEliminate 50 Enemy Players with a vehicle"; -$Challenge::Challenge[3, 15] = "VehMans2"; -$Challenge::Info["VehMans2"] = "Vehicular Manslaughter II\t3\t5000\tNone\tEliminate 100 Enemy Players with a vehicle"; -$Challenge::Challenge[3, 16] = "VehMans3"; -$Challenge::Info["VehMans3"] = "Vehicular Manslaughter III\t3\t10000\tNone\tEliminate 250 Enemy Players with a vehicle"; -$Challenge::Challenge[3, 17] = "Assassin"; -$Challenge::IsNotMultiTier["Assassin"] = true; -$Challenge::Info["Assassin"] = "Assassinator\t3\t5000\tNone\tBackstab an enemy player using the Blade of Vengeance"; -$Challenge::Challenge[3, 18] = "CompletelyUnexpected"; -$Challenge::IsNotMultiTier["CompletelyUnexpected"] = true; -$Challenge::Info["CompletelyUnexpected"] = "That Was... Unexpected\t3\t50000\tNone\tEliminate General Rog by backstabbing him with the Blade of Vengence"; -$Challenge::Challenge[3, 19] = "Uncomprehendable"; -$Challenge::IsNotMultiTier["Uncomprehendable"] = true; -$Challenge::Info["Uncomprehendable"] = "Uncomprehendable\t3\t100000\tPure shock?\tGet killed in a fighter, and have the driverless vehicle run down your killer"; - -//Zombie Slaying -$Challenge::Category[4] = "Zombie Slaying Challenges\tTasks for eliminating combatants of the zombie horde\t28"; - -$Challenge::Challenge[4, 0] = "NormHunter1"; -$Challenge::Info["NormHunter1"] = "Frontline Buster I\t4\t2500\tNone\tSlay 2,500 Zombies (Normal Type)"; -$Challenge::Challenge[4, 1] = "NormHunter2"; -$Challenge::Info["NormHunter2"] = "Frontline Buster II\t4\t5000\tNone\tSlay 5,000 Zombies (Normal Type)"; -$Challenge::Challenge[4, 2] = "NormHunter3"; -$Challenge::Info["NormHunter3"] = "Frontline Buster III\t4\t10000\tNone\tSlay 10,000 Zombies (Normal Type)"; -$Challenge::Challenge[4, 3] = "RavHunter1"; -$Challenge::Info["RavHunter1"] = "Speed Kills I\t4\t2500\tNone\tSlay 1,000 Ravager Zombies"; -$Challenge::Challenge[4, 4] = "RavHunter2"; -$Challenge::Info["RavHunter2"] = "Speed Kills II\t4\t5000\tNone\tSlay 2,500 Ravager Zombies"; -$Challenge::Challenge[4, 5] = "RavHunter3"; -$Challenge::Info["RavHunter3"] = "Speed Kills III\t4\t10000\tNone\tSlay 5,000 Ravager Zombies"; -$Challenge::Challenge[4, 6] = "LordHunter1"; -$Challenge::Info["LordHunter1"] = "The Bigger They Are I\t4\t2500\tNone\tSlay 1,000 Zombie Lords"; -$Challenge::Challenge[4, 7] = "LordHunter2"; -$Challenge::Info["LordHunter2"] = "The Bigger They Are II\t4\t5000\tNone\tSlay 2,000 Zombie Lords"; -$Challenge::Challenge[4, 8] = "LordHunter3"; -$Challenge::Info["LordHunter3"] = "The Bigger They Are III\t4\t10000\tNone\tSlay 3,000 Zombie Lords"; -$Challenge::Challenge[4, 9] = "DemonHunter1"; -$Challenge::Info["DemonHunter1"] = "Fire Retardant I\t4\t2500\tNone\tSlay 1,000 Demon Zombies"; -$Challenge::Challenge[4, 10] = "DemonHunter2"; -$Challenge::Info["DemonHunter2"] = "Fire Retardant II\t4\t5000\tNone\tSlay 2,500 Demon Zombies"; -$Challenge::Challenge[4, 11] = "DemonHunter3"; -$Challenge::Info["DemonHunter3"] = "Fire Retardant III\t4\t10000\tNone\tSlay 5,000 Demon Zombies"; -$Challenge::Challenge[4, 12] = "AirRapHunter1"; -$Challenge::Info["AirRapHunter1"] = "Bat Slayer I\t4\t2500\tNone\tSlay 1,500 Air Rapier Zombies"; -$Challenge::Challenge[4, 13] = "AirRapHunter2"; -$Challenge::Info["AirRapHunter2"] = "Bat Slayer II\t4\t5000\tNone\tSlay 3,500 Air Rapier Zombies"; -$Challenge::Challenge[4, 14] = "AirRapHunter3"; -$Challenge::Info["AirRapHunter3"] = "Bat Slayer III\t4\t10000\tNone\tSlay 6,000 Air Rapier Zombies"; -$Challenge::Challenge[4, 15] = "DLordHunter1"; -$Challenge::Info["DLordHunter1"] = "Hellspawn Erradicator I\t4\t2500\tNone\tSlay 500 Demon Lord Zombies"; -$Challenge::Challenge[4, 16] = "DLordHunter2"; -$Challenge::Info["DLordHunter2"] = "Hellspawn Erradicator II\t4\t5000\tNone\tSlay 1,000 Demon Lord Zombies"; -$Challenge::Challenge[4, 17] = "DLordHunter3"; -$Challenge::Info["DLordHunter3"] = "Hellspawn Erradicator III\t4\t10000\tNone\tSlay 1,500 Demon Lord Zombies"; -$Challenge::Challenge[4, 18] = "ShifterHunter1"; -$Challenge::Info["ShifterHunter1"] = "Anti-Warp I\t4\t2500\tNone\tSlay 1,500 Shifter Zombies"; -$Challenge::Challenge[4, 19] = "ShifterHunter2"; -$Challenge::Info["ShifterHunter2"] = "Anti-Warp II\t4\t5000\tNone\tSlay 3,000 Shifter Zombies"; -$Challenge::Challenge[4, 20] = "ShifterHunter3"; -$Challenge::Info["ShifterHunter3"] = "Anti-Warp III\t4\t10000\tNone\tSlay 6,000 Shifter Zombies"; -$Challenge::Challenge[4, 21] = "SummonerHunter1"; -$Challenge::Info["SummonerHunter1"] = "Horde Halter I\t4\t2500\tNone\tSlay 1,000 Zombie Summoners"; -$Challenge::Challenge[4, 22] = "SummonerHunter2"; -$Challenge::Info["SummonerHunter2"] = "Horde Halter II\t4\t5000\tNone\tSlay 2,500 Zombie Summoners"; -$Challenge::Challenge[4, 23] = "SummonerHunter3"; -$Challenge::Info["SummonerHunter3"] = "Horde Halter III\t4\t10000\tNone\tSlay 5,000 Zombie Summoners"; -$Challenge::Challenge[4, 24] = "SniperHunter1"; -$Challenge::Info["SniperHunter1"] = "Scope Breaker I\t4\t2500\tNone\tSlay 1,000 Sniper Zombies"; -$Challenge::Challenge[4, 25] = "SniperHunter2"; -$Challenge::Info["SniperHunter2"] = "Scope Breaker II\t4\t5000\tNone\tSlay 2,500 Sniper Zombies"; -$Challenge::Challenge[4, 26] = "SniperHunter3"; -$Challenge::Info["SniperHunter3"] = "Scope Breaker III\t4\t10000\tNone\tSlay 5,000 Sniper Zombies"; -$Challenge::Challenge[4, 27] = "UDemHunter1"; -$Challenge::Info["UDemHunter1"] = "Runner Down I\t4\t2500\tNone\tSlay 1,000 Ultra Demon Zombies"; -$Challenge::Challenge[4, 28] = "UDemHunter2"; -$Challenge::Info["UDemHunter2"] = "Runner Down II\t4\t5000\tNone\tSlay 2,500 Ultra Demon Zombies"; -$Challenge::Challenge[4, 29] = "UDemHunter3"; -$Challenge::Info["UDemHunter3"] = "Runner Down III\t4\t10000\tNone\tSlay 5,000 Ultra Demon Zombies"; -$Challenge::Challenge[4, 30] = "VRavHunter1"; -$Challenge::Info["VRavHunter1"] = "C4 Coming Through I\t4\t2500\tNone\tSlay 1,000 Volatile Ravager Zombies"; -$Challenge::Challenge[4, 31] = "VRavHunter2"; -$Challenge::Info["VRavHunter2"] = "C4 Coming Through II\t4\t5000\tNone\tSlay 2,500 Volatile Ravager Zombies"; -$Challenge::Challenge[4, 32] = "VRavHunter3"; -$Challenge::Info["VRavHunter3"] = "C4 Coming Through III\t4\t10000\tNone\tSlay 5,000 Volatile Ravager Zombies"; -$Challenge::Challenge[4, 33] = "SSHunter1"; -$Challenge::Info["SSHunter1"] = "De-Flakerizer I\t4\t2500\tNone\tSlay 1,000 Slingshot Zombies"; -$Challenge::Challenge[4, 34] = "SSHunter2"; -$Challenge::Info["SSHunter2"] = "De-Flakerizer II\t4\t5000\tNone\tSlay 2,500 Slingshot Zombies"; -$Challenge::Challenge[4, 35] = "SSHunter3"; -$Challenge::Info["SSHunter3"] = "De-Flakerizer III\t4\t10000\tNone\tSlay 5,000 Slingshot Zombies"; -$Challenge::Challenge[4, 36] = "WraithHunter1"; -$Challenge::Info["WraithHunter1"] = "Anti Spec-Ops I\t4\t2500\tNone\tSlay 500 Wraith Zombies"; -$Challenge::Challenge[4, 37] = "WraithHunter2"; -$Challenge::Info["WraithHunter2"] = "Anti Spec-Ops II\t4\t5000\tNone\tSlay 750 Wraith Zombies"; -$Challenge::Challenge[4, 38] = "WraithHunter3"; -$Challenge::Info["WraithHunter3"] = "Anti Spec-Ops III\t4\t10000\tNone\tSlay 1,000 Wraith Zombies"; - -//Events -$Challenge::Category[5] = "Special Event Challenges\tTasks for playing TWM2 during special events\t-1"; - -$Challenge::Challenge[5, 0] = "NewYearsEve"; -$Challenge::Info["NewYearsEve"] = "New Years Eve Fireworks\t5\t1500\tJavelin Hellclass\tGet a Javelin Kill on New Year's Eve"; -$Challenge::Challenge[5, 1] = "NewYears"; -$Challenge::Info["NewYears"] = "New Years Fireworks\t5\t1500\tNone\tCall in a Nuclear Strike on New Year's Day"; -$Challenge::Challenge[5, 2] = "GunshipMall"; -$Challenge::Info["GunshipMall"] = "Gunship to the Mall\t5\t2500\tNone\tCall in a Gunship Killstreak on Christmas Mall 2009"; -$Challenge::Challenge[5, 3] = "IndepRPG"; -$Challenge::Info["IndepRPG"] = "Independance RPG\t5\t1500\tNone\tScore an RPG Kill on the Fourth of July"; -$Challenge::Challenge[5, 4] = "SoulsticeBombard"; -$Challenge::Info["SoulsticeBombard"] = "Soulstice Bombard\t5\t1500\tNone\tCall in artillery on one of the soulstices (6/21 or 12/21)"; //Phantom Games Development //see DChalg.cs -$Challenge::Category[6] = "PGD Challenges\tDaily challenges issued by PGD\t-1"; +$Challenge::Category[1] = "PGD Challenges\tDaily challenges issued by PGD\t-1"; + +//Killstreaks +$Challenge::Category[2] = "Killstreak Challenges\tTasks for calling in advanced support\t13"; + +$Challenge::Challenge[2, 0] = "UAV1"; +$Challenge::Info["UAV1"] = "UAV Expert I\t2\t500\tNone\tCall in 30 UAV Recon Satellites"; +$Challenge::Challenge[2, 1] = "UAV2"; +$Challenge::Info["UAV2"] = "UAV Expert II\t2\t1000\tNone\tCall in 75 UAV Recon Satellites"; +$Challenge::Challenge[2, 2] = "UAV3"; +$Challenge::Info["UAV3"] = "UAV Expert III\t2\t2500\tNone\tCall in 100 UAV Recon Satellites"; +$Challenge::Challenge[2, 3] = "Airstrike1"; +$Challenge::Info["Airstrike1"] = "Airstrike Expert I\t2\t1000\tNone\tCall in 25 Airstrikes"; +$Challenge::Challenge[2, 4] = "Airstrike2"; +$Challenge::Info["Airstrike2"] = "Airstrike Expert II\t2\t5000\tNone\tCall in 65 Airstrikes"; +$Challenge::Challenge[2, 5] = "Airstrike3"; +$Challenge::Info["Airstrike3"] = "Airstrike Expert III\t2\t10000\tNone\tCall in 125 Airstrikes"; +$Challenge::Challenge[2, 6] = "UAMS1"; +$Challenge::Info["UAMS1"] = "UAMS Expert I\t2\t1000\tNone\tCall in 25 UAMS Strikes"; +$Challenge::Challenge[2, 7] = "UAMS2"; +$Challenge::Info["UAMS2"] = "UAMS Expert II\t2\t5000\tNone\tCall in 65 UAMS Strikes"; +$Challenge::Challenge[2, 8] = "UAMS3"; +$Challenge::Info["UAMS3"] = "UAMS Expert III\t2\t10000\tNone\tCall in 125 UAMS Strikes"; +$Challenge::Challenge[2, 9] = "Helicopter1"; +$Challenge::Info["Helicopter1"] = "Helicopter Expert I\t2\t2500\tNone\tCall in 25 Combat Helicopters"; +$Challenge::Challenge[2, 10] = "Helicopter2"; +$Challenge::Info["Helicopter2"] = "Helicopter Expert II\t2\t10000\tNone\tCall in 65 Combat Helicopters"; +$Challenge::Challenge[2, 11] = "Helicopter3"; +$Challenge::Info["Helicopter3"] = "Helicopter Expert III\t2\t12500\tCombat Helicopter Schematics\tCall in 125 Combat Helicopters"; +$Challenge::Challenge[2, 12] = "Harrier1"; +$Challenge::Info["Harrier1"] = "Harrier Expert I\t2\t2500\tNone\tCall in 20 Plasma Harrier Airstrikes"; +$Challenge::Challenge[2, 13] = "Harrier2"; +$Challenge::Info["Harrier2"] = "Harrier Expert II\t2\t5000\tNone\tCall in 55 Plasma Harrier Airstrikes"; +$Challenge::Challenge[2, 14] = "Harrier3"; +$Challenge::Info["Harrier3"] = "Harrier Expert III\t2\t12500\tPlasma Harrier Schematics\tCall in 110 Plasma Harrier Airstrikes"; +$Challenge::Challenge[2, 15] = "SatNuke1"; +$Challenge::Info["SatNuke1"] = "OLS Expert I\t2\t5000\tNone\tCall in 25 Orbital Laser Strikes"; +$Challenge::Challenge[2, 16] = "SatNuke2"; +$Challenge::Info["SatNuke2"] = "OLS Expert II\t2\t10000\tNone\tCall in 65 Orbital Laser Strikes"; +$Challenge::Challenge[2, 17] = "SatNuke3"; +$Challenge::Info["SatNuke3"] = "OLS Expert III\t2\t25000\tNone\tCall in 125 Orbital Laser Strikes"; +$Challenge::Challenge[2, 18] = "NapalmHarrier1"; +$Challenge::Info["NapalmHarrier1"] = "Napalm Airstrike Expert I\t2\t5000\tNone\tCall in 20 Napalm Airstrikes"; +$Challenge::Challenge[2, 19] = "NapalmHarrier2"; +$Challenge::Info["NapalmHarrier2"] = "Napalm Airstrike Expert II\t2\t10000\tNone\tCall in 55 Napalm Airstrikes"; +$Challenge::Challenge[2, 20] = "NapalmHarrier3"; +$Challenge::Info["NapalmHarrier3"] = "Napalm Airstrike Expert III\t2\t25000\tF41 Strike Fighter Schematics\tCall in 110 Napalm Airstrikes"; +$Challenge::Challenge[2, 21] = "GunHeli1"; +$Challenge::Info["GunHeli1"] = "Gunship Helicopter Expert I\t2\t5000\tNone\tCall in 20 Gunship Helicopters"; +$Challenge::Challenge[2, 22] = "GunHeli2"; +$Challenge::Info["GunHeli2"] = "Gunship Helicopter Expert II\t2\t10000\tNone\tCall in 55 Gunship Helicopters"; +$Challenge::Challenge[2, 23] = "GunHeli3"; +$Challenge::Info["GunHeli3"] = "Gunship Helicopter Expert III\t2\t25000\tGunship Helicopter Schematics\tCall in 110 Gunship Helicopters"; +$Challenge::Challenge[2, 24] = "SBomber1"; +$Challenge::Info["SBomber1"] = "Stealth Bomber Expert I\t2\t5000\tNone\tCall in 20 Stealth Bombers"; +$Challenge::Challenge[2, 25] = "SBomber2"; +$Challenge::Info["SBomber2"] = "Stealth Bomber Expert II\t2\t10000\tNone\tCall in 50 Stealth Bombers"; +$Challenge::Challenge[2, 26] = "SBomber3"; +$Challenge::Info["SBomber3"] = "Stealth Bomber Expert III\t2\t25000\tNone\tCall in 100 Stealth Bombers"; +$Challenge::Challenge[2, 27] = "Gunship1"; +$Challenge::Info["Gunship1"] = "Harbinger's Wrath Expert I\t2\t5000\tNone\tCall in 15 Harbinger Gunships"; +$Challenge::Challenge[2, 28] = "Gunship2"; +$Challenge::Info["Gunship2"] = "Harbinger's Wrath Expert II\t2\t10000\tNone\tCall in 35 Harbinger Gunships"; +$Challenge::Challenge[2, 29] = "Gunship3"; +$Challenge::Info["Gunship3"] = "Harbinger's Wrath Expert III\t2\t25000\tAC-130 Vehicle Schematics\tCall in 75 Harbinger Gunships"; +$Challenge::Challenge[2, 30] = "ACGunship1"; +$Challenge::RequiresChallenge[2, 30] = "Gunship3"; +$Challenge::Info["ACGunship1"] = "AC-130 Expert I\t2\t5000\tNone\tCall in 15 AC-130 Gunners"; +$Challenge::Challenge[2, 31] = "ACGunship2"; +$Challenge::RequiresChallenge[2, 31] = "Gunship3"; +$Challenge::Info["ACGunship2"] = "AC-130 Expert II\t2\t10000\tNone\tCall in 35 AC-130 Gunners"; +$Challenge::Challenge[2, 32] = "ACGunship3"; +$Challenge::RequiresChallenge[2, 32] = "Gunship3"; +$Challenge::Info["ACGunship3"] = "AC-130 Expert III\t2\t25000\tBragging Rights... lol.\tCall in 75 AC-130 Gunners"; +$Challenge::Challenge[2, 33] = "Apache1"; +$Challenge::Info["Apache1"] = "Apache Gunner Expert I\t2\t5000\tNone\tCall in 15 Apache Gunners"; +$Challenge::Challenge[2, 34] = "Apache2"; +$Challenge::Info["Apache2"] = "Apache Gunner Expert II\t2\t10000\tNone\tCall in 35 Apache Gunners"; +$Challenge::Challenge[2, 35] = "Apache3"; +$Challenge::Info["Apache3"] = "Apache Gunner Expert III\t2\t25000\tApache Helicopter Schematics\tCall in 75 Apache Gunners"; +$Challenge::Challenge[2, 36] = "Centaur1"; +$Challenge::Info["Centaur1"] = "Centaur Artillery Expert I\t2\t10000\tNone\tCall in 10 Artillery Strikes"; +$Challenge::Challenge[2, 37] = "Centaur2"; +$Challenge::Info["Centaur2"] = "Centaur Artillery Expert II\t2\t25000\tNone\tCall in 25 Artillery Strikes"; +$Challenge::Challenge[2, 38] = "Centaur3"; +$Challenge::Info["Centaur3"] = "Centaur Artillery Expert III\t2\t50000\tNone\tCall in 50 Artillery Strikes"; +$Challenge::Challenge[2, 39] = "EMP1"; +$Challenge::Info["EMP1"] = "EMP Expert I\t2\t10000\tNone\tCall in 5 Mass EMP's"; +$Challenge::Challenge[2, 40] = "EMP2"; +$Challenge::Info["EMP2"] = "EMP Expert II\t2\t25000\tNone\tCall in 10 Mass EMP's"; +$Challenge::Challenge[2, 41] = "EMP3"; +$Challenge::Info["EMP3"] = "EMP Expert III\t2\t50000\tNone\tCall in 25 Mass EMP's"; +$Challenge::Challenge[2, 42] = "Nuke1"; +$Challenge::Info["Nuke1"] = "Nuke Expert I\t2\t10000\tNone\tCall in 5 Nukes"; +$Challenge::Challenge[2, 43] = "Nuke2"; +$Challenge::Info["Nuke2"] = "Nuke Expert II\t2\t25000\tNone\tCall in 10 Nukes"; +$Challenge::Challenge[2, 44] = "Nuke3"; +$Challenge::Info["Nuke3"] = "Nuke Expert III\t2\t50000\tZ-Bomb Killstreak\tCall in 25 Nukes"; +$Challenge::Challenge[2, 45] = "Fission1"; +$Challenge::SetRequirement[2, 45] = "Officer 1"; +$Challenge::Info["Fission1"] = "Fission Bomb Expert I\t2\t25000\tNone\tCall in a Fission Bomb"; +$Challenge::Challenge[2, 46] = "Fission2"; +$Challenge::SetRequirement[2, 46] = "Officer 1"; +$Challenge::Info["Fission2"] = "Fission Bomb Expert II\t2\t50000\tNone\tCall in 2 Fission Bombs"; +$Challenge::Challenge[2, 47] = "Fission3"; +$Challenge::SetRequirement[2, 47] = "Officer 1"; +$Challenge::Info["Fission3"] = "Fission Bomb Expert III\t2\t75000\tNone\tCall in 5 Fission Bombs"; +$Challenge::Challenge[2, 48] = "PulseStar1"; +$Challenge::SetRequirement[2, 48] = "Officer 9"; +$Challenge::Info["PulseStar1"] = "PulseStar Expert I\t2\t5000\tNone\tCall in 15 PulseStar Shield Systems"; +$Challenge::Challenge[2, 49] = "PulseStar2"; +$Challenge::SetRequirement[2, 49] = "Officer 9"; +$Challenge::Info["PulseStar2"] = "PulseStar Expert II\t2\t10000\tNone\tCall in 30 PulseStar Shield Systems"; +$Challenge::Challenge[2, 50] = "PulseStar3"; +$Challenge::SetRequirement[2, 50] = "Officer 9"; +$Challenge::Info["PulseStar3"] = "PulseStar Expert III\t2\t25000\tNone\tCall in 50 PulseStar Shield Systems"; +$Challenge::Challenge[2, 51] = "LOAS1"; +$Challenge::SetRequirement[2, 51] = "Officer 15"; +$Challenge::Info["LOAS1"] = "LOAS Expert I\t2\t25000\tNone\tCall in 5 Low Orbit Orbital Strikes (LOAS)"; +$Challenge::Challenge[2, 52] = "LOAS2"; +$Challenge::SetRequirement[2, 52] = "Officer 15"; +$Challenge::Info["LOAS2"] = "LOAS Expert II\t2\t50000\tNone\tCall in 10 Low Orbit Orbital Strikes (LOAS)"; +$Challenge::Challenge[2, 53] = "LOAS3"; +$Challenge::SetRequirement[2, 53] = "Officer 15"; +$Challenge::Info["LOAS3"] = "LOAS Expert III\t2\t75000\tNone\tCall in 15 Low Orbit Orbital Strikes (LOAS)"; + +//Bosses +$Challenge::Category[3] = "Boss Challenges\tTasks for eliminating the toughest enemies in TWM2\t18"; + +$Challenge::Challenge[3, 0] = "Yvex1"; +$Challenge::Info["Yvex1"] = "Nightmarish Enterprise\t3\t1000\tNone\tDefeat Lord Yvex 3 Times"; +$Challenge::Challenge[3, 1] = "Yvex2"; +$Challenge::Info["Yvex2"] = "Darkness Rising\t3\t2500\tNone\tDefeat Lord Yvex 5 Times"; +$Challenge::Challenge[3, 2] = "Yvex3"; +$Challenge::Info["Yvex3"] = "Shadowy Desecration\t3\t5000\tNone\tDefeat Lord Yvex 10 Times"; +$Challenge::Challenge[3, 3] = "CWS1"; +$Challenge::Info["CWS1"] = "Fortress In The Sky\t3\t1000\tNone\tDefeat Colonel Windshear 3 Times"; +$Challenge::Challenge[3, 4] = "CWS2"; +$Challenge::Info["CWS2"] = "Aerieal Nightmare\t3\t2500\tNone\tDefeat Colonel Windshear 5 Times"; +$Challenge::Challenge[3, 5] = "CWS3"; +$Challenge::Info["CWS3"] = "Harbinger's Bane\t3\t5000\tNone\tDefeat Colonel Windshear 10 Times"; +$Challenge::Challenge[3, 6] = "GOL1"; +$Challenge::Info["GOL1"] = "Envious Lightning\t3\t1500\tNone\tDefeat The Ghost Of Lightning 3 Times"; +$Challenge::Challenge[3, 7] = "GOL2"; +$Challenge::Info["GOL2"] = "The Shocking Truth\t3\t3000\tNone\tDefeat The Ghost Of Lightning 5 Times"; +$Challenge::Challenge[3, 8] = "GOL3"; +$Challenge::Info["GOL3"] = "Severe Thunderstorm\t3\t6500\tNone\tDefeat The Ghost Of Lightning 10 Times"; +$Challenge::Challenge[3, 9] = "GOF1"; +$Challenge::Info["GOF1"] = "Purifier\t3\t5000\tNone\tDefeat The Ghost Of Fire"; +$Challenge::Challenge[3, 10] = "GOF2"; +$Challenge::Info["GOF2"] = "Inceneration Ender\t3\t10000\tNone\tDefeat The Ghost Of Fire 3 Times"; +$Challenge::Challenge[3, 11] = "GOF3"; +$Challenge::Info["GOF3"] = "Mt. Death Depleter\t3\t20000\tNone\tDefeat The Ghost Of Fire 5 Times"; +$Challenge::Challenge[3, 12] = "Veg1"; +$Challenge::Info["Veg1"] = "Flaming Revolt\t3\t1500\tNone\tDefeat General Vegenor 3 Times"; +$Challenge::Challenge[3, 13] = "Veg2"; +$Challenge::Info["Veg2"] = "Burning Frenzy\t3\t3000\tNone\tDefeat General Vegenor 5 Times"; +$Challenge::Challenge[3, 14] = "Veg3"; +$Challenge::Info["Veg3"] = "Firestorm Ender\t3\t6500\tNone\tDefeat General Vegenor 10 Times"; +$Challenge::Challenge[3, 15] = "LRog1"; +$Challenge::Info["LRog1"] = "Revenge Halter\t3\t2500\tNone\tDefeat Lord Rog 2 Times"; +$Challenge::Challenge[3, 16] = "LRog2"; +$Challenge::Info["LRog2"] = "Return to Returner\t3\t5000\tNone\tDefeat Lord Rog 4 Times"; +$Challenge::Challenge[3, 17] = "LRog3"; +$Challenge::Info["LRog3"] = "Payback's A Bitch\t3\t10000\tNone\tDefeat Lord Rog 7 Times"; +$Challenge::Challenge[3, 18] = "Ins1"; +$Challenge::Info["Ins1"] = "El Shipitor\t3\t2500\tNone\tDefeat Major Insignia 2 Times"; +$Challenge::Challenge[3, 19] = "Ins2"; +$Challenge::Info["Ins2"] = "No Gravity, No Problem\t3\t5000\tNone\tDefeat Major Insignia 4 Times"; +$Challenge::Challenge[3, 20] = "Ins3"; +$Challenge::Info["Ins3"] = "Gravitational Influx\t3\t10000\tNone\tDefeat Major Insignia 7 Times"; +$Challenge::Challenge[3, 21] = "Stormrider1"; +$Challenge::Info["Stormrider1"] = "Clear Skies\t3\t2500\tNone\tDefeat Commander Stormrider 3 Times"; +$Challenge::Challenge[3, 22] = "Stormrider2"; +$Challenge::Info["Stormrider2"] = "Shootdown Master\t3\t5000\tNone\tDefeat Commander Stormrider 5 Times"; +$Challenge::Challenge[3, 23] = "Stormrider3"; +$Challenge::Info["Stormrider3"] = "Harbinger Fighter Demolisher\t3\t10000\tNone\tDefeat Commander Stormrider 10 Times"; +$Challenge::Challenge[3, 24] = "Trev1"; +$Challenge::Info["Trev1"] = "Warstation Breaker\t3\t2500\tNone\tDefeat Lordranius Trevor 2 Times"; +$Challenge::Challenge[3, 25] = "Trev2"; +$Challenge::Info["Trev2"] = "Armor Demolisher\t3\t5000\tNone\tDefeat Lordranius Trevor 4 Times"; +$Challenge::Challenge[3, 26] = "Trev3"; +$Challenge::Info["Trev3"] = "Bunker Buster Expert\t3\t10000\tNone\tDefeat Lordranius Trevor 7 Times"; +$Challenge::Challenge[3, 27] = "Vard1"; +$Challenge::Info["Vard1"] = "Shining Star\t3\t3500\tNone\tDefeat Lord Vardison"; +$Challenge::Challenge[3, 28] = "Vard2"; +$Challenge::Info["Vard2"] = "Glare The Dark\t3\t7000\tNone\tDefeat Lord Vardison 3 Times"; +$Challenge::Challenge[3, 29] = "Vard3"; +$Challenge::Info["Vard3"] = "Outevil The Wicked\t3\t12500\tNone\tDefeat Lord Vardison 5 Times"; +$Challenge::Challenge[3, 30] = "VardEasy"; +$Challenge::IsNotMultiTier["VardEasy"] = true; +$Challenge::Info["VardEasy"] = "The Standard Experience\t3\t7000\tNone\tDefeat Lord Vardison on Easy Difficulty"; +$Challenge::Challenge[3, 31] = "VardNorm"; +$Challenge::IsNotMultiTier["VardNorm"] = true; +$Challenge::Info["VardNorm"] = "Demon Hunter\t3\t15000\tNone\tDefeat Lord Vardison on Medium Difficulty"; +$Challenge::Challenge[3, 32] = "VardHard"; +$Challenge::IsNotMultiTier["VardHard"] = true; +$Challenge::Info["VardHard"] = "Master Demon Slayer\t3\t25000\tNone\tDefeat Lord Vardison on Hard Difficulty"; +$Challenge::Challenge[3, 33] = "VardWtf"; +$Challenge::IsNotMultiTier["VardWtf"] = true; +$Challenge::Info["VardWtf"] = "God of the Shadow Realm\t3\t50000\tNone\tAgainst all odds, slay WTF difficulty Lord Vardison"; +$Challenge::Challenge[3, 34] = "ShadeLord1"; +$Challenge::Info["ShadeLord1"] = "Night Stalker\t3\t5000\tNone\tDefeat The Shade Lord"; +$Challenge::Challenge[3, 35] = "ShadeLord2"; +$Challenge::Info["ShadeLord2"] = "Shadow Embracer\t3\t10000\tNone\tDefeat The Shade Lord Twice"; +$Challenge::Challenge[3, 36] = "ShadeLord3"; +$Challenge::Info["ShadeLord3"] = "Dawnlight Encarnate\t3\t20000\tNone\tDefeat The Shade Lord for the Third Time"; +$Challenge::Challenge[3, 37] = "Proficient1"; +$Challenge::Info["Proficient1"] = "Proficient I\t3\t15000\tNone\tEarn 25 Boss Proficiency Marks"; +$Challenge::Challenge[3, 38] = "Proficient2"; +$Challenge::Info["Proficient2"] = "Proficient II\t3\t25000\tNone\tEarn 50 Boss Proficiency Marks"; +$Challenge::Challenge[3, 39] = "Proficient3"; +$Challenge::Info["Proficient3"] = "Proficient III\t3\t50000\tNone\tEarn 100 Boss Proficiency Marks"; +$Challenge::Challenge[3, 40] = "MasterProficiency"; +$Challenge::IsNotMultiTier["MasterProficiency"] = true; +$Challenge::Info["MasterProficiency"] = "Master of Proficiency\t3\t35000\tNone\tEarn 50 Individual Boss Proficieny Marks"; + +//Wargames +$Challenge::Category[4] = "Wargames Challenges\tTasks for eliminating enemy players in various ways\t23"; + +$Challenge::Challenge[4, 0] = "Slayer1"; +$Challenge::Info["Slayer1"] = "Slayer I\t4\t1000\tNone\tKill 100 Enemy Players"; +$Challenge::Challenge[4, 1] = "Slayer2"; +$Challenge::Info["Slayer2"] = "Slayer II\t4\t2500\tNone\tKill 250 Enemy Players"; +$Challenge::Challenge[4, 2] = "Slayer3"; +$Challenge::Info["Slayer3"] = "Slayer III\t4\t5000\tNone\tKill 500 Enemy Players"; +$Challenge::Challenge[4, 3] = "Slayer4"; +$Challenge::Info["Slayer4"] = "Slayer IV\t4\t7500\tNone\tKill 750 Enemy Players"; +$Challenge::Challenge[4, 4] = "Slayer5"; +$Challenge::Info["Slayer5"] = "Slayer V\t4\t10000\tNone\tKill 1000 Enemy Players"; +$Challenge::Challenge[4, 5] = "Defectionator1"; +$Challenge::Info["Defectionator1"] = "Defectionator I\t4\t2500\tNone\tKill 100 \"Zombified\" Players"; +$Challenge::Challenge[4, 6] = "Defectionator2"; +$Challenge::Info["Defectionator2"] = "Defectionator II\t4\t5000\tNone\tKill 250 \"Zombified\" Players"; +$Challenge::Challenge[4, 7] = "Defectionator3"; +$Challenge::Info["Defectionator3"] = "Defectionator III\t4\t10000\tNone\tKill 500 \"Zombified\" Players"; +$Challenge::Challenge[4, 8] = "Infectionator1"; +$Challenge::Info["Infectionator1"] = "Infectionator I\t4\t2500\tNone\tConvert 50 Players to the Zombie Horde"; +$Challenge::Challenge[4, 9] = "Infectionator2"; +$Challenge::Info["Infectionator2"] = "Infectionator II\t4\t5000\tNone\tConvert 100 Players to the Zombie Horde"; +$Challenge::Challenge[4, 10] = "Infectionator3"; +$Challenge::Info["Infectionator3"] = "Infectionator III\t4\t10000\tNone\tConvert 250 Players to the Zombie Horde"; +$Challenge::Challenge[4, 11] = "HSHoncho1"; +$Challenge::Info["HSHoncho1"] = "Headshot Honcho I\t4\t2500\tNone\tEliminate 100 Enemy Players with Headshots"; +$Challenge::Challenge[4, 12] = "HSHoncho2"; +$Challenge::Info["HSHoncho2"] = "Headshot Honcho II\t4\t5000\tNone\tEliminate 200 Enemy Players with Headshots"; +$Challenge::Challenge[4, 13] = "HSHoncho3"; +$Challenge::Info["HSHoncho3"] = "Headshot Honcho III\t4\t10000\tNone\tEliminate 300 Enemy Players with Headshots"; +$Challenge::Challenge[4, 14] = "VehMans1"; +$Challenge::Info["VehMans1"] = "Vehicular Manslaughter I\t4\t2500\tNone\tEliminate 50 Enemy Players with a vehicle"; +$Challenge::Challenge[4, 15] = "VehMans2"; +$Challenge::Info["VehMans2"] = "Vehicular Manslaughter II\t4\t5000\tNone\tEliminate 100 Enemy Players with a vehicle"; +$Challenge::Challenge[4, 16] = "VehMans3"; +$Challenge::Info["VehMans3"] = "Vehicular Manslaughter III\t4\t10000\tNone\tEliminate 250 Enemy Players with a vehicle"; +$Challenge::Challenge[4, 17] = "Assassin"; +$Challenge::IsNotMultiTier["Assassin"] = true; +$Challenge::Info["Assassin"] = "Assassinator\t4\t5000\tNone\tBackstab an enemy player using the Blade of Vengeance"; +$Challenge::Challenge[4, 18] = "CompletelyUnexpected"; +$Challenge::IsNotMultiTier["CompletelyUnexpected"] = true; +$Challenge::Info["CompletelyUnexpected"] = "That Was... Unexpected\t4\t50000\tNone\tEliminate General Rog by backstabbing him with the Blade of Vengence"; +$Challenge::Challenge[4, 19] = "Uncomprehendable"; +$Challenge::IsNotMultiTier["Uncomprehendable"] = true; +$Challenge::Info["Uncomprehendable"] = "Uncomprehendable\t4\t100000\tPure shock?\tGet killed in a fighter, and have the driverless vehicle run down your killer"; + +//Survivor +$Challenge::Category[5] = "Survivor Challenges\tTasks related to surviving the living world\t23"; +$Challenge::Challenge[5, 0] = "IntoTheFire1"; +$Challenge::Info["IntoTheFire1"] = "Into The Fire I\t5\t5000\tNone\tComplete 5 Flashpoint Operations"; +$Challenge::Challenge[5, 1] = "IntoTheFire2"; +$Challenge::Info["IntoTheFire2"] = "Into The Fire II\t5\t10000\tNone\tComplete 10 Flashpoint Operations"; +$Challenge::Challenge[5, 2] = "IntoTheFire3"; +$Challenge::Info["IntoTheFire3"] = "Into The Fire III\t5\t15000\tNone\tComplete 25 Flashpoint Operations"; +$Challenge::Challenge[5, 3] = "MaximizedPotential"; +$Challenge::Info["MaximizedPotential"] = "Maximized Potential\t5\t10000\tNone\tReach the maximum hazard level (5) in a living world session"; +$Challenge::IsNotMultiTier["MaximizedPotential"] = true; +$Challenge::Challenge[5, 4] = "TheThunderdome"; +$Challenge::Info["TheThunderdome"] = "The Thunderdome\t5\t7500\tNone\tEnter a boss areana during a living world session"; +$Challenge::IsNotMultiTier["TheThunderdome"] = true; +$Challenge::Challenge[5, 5] = "HVTDown"; +$Challenge::Info["HVTDown"] = "HVT Down\t5\t10000\tNone\tDefeat an enemy field commander during a living world session"; +$Challenge::IsNotMultiTier["HVTDown"] = true; +$Challenge::Challenge[5, 6] = "ReaperOfReapers"; +$Challenge::Info["ReaperOfReapers"] = "Reaper Of Reapers\t5\t5000\tNone\tComplete the 'Aerieal Reaping' flashpoint operation."; +$Challenge::IsNotMultiTier["ReaperOfReapers"] = true; +$Challenge::Challenge[5, 7] = "MineNow"; +$Challenge::Info["MineNow"] = "Mine Now\t5\t5000\tNone\tComplete the 'Intel Fishing' flashpoint operation."; +$Challenge::IsNotMultiTier["MineNow"] = true; +$Challenge::Challenge[5, 8] = "YouLookLost"; +$Challenge::Info["YouLookLost"] = "You Look Lost\t5\t5000\tNone\tComplete the 'Sentry Patrol' flashpoint operation."; +$Challenge::IsNotMultiTier["YouLookLost"] = true; +$Challenge::Challenge[5, 9] = "DigElsewhere"; +$Challenge::Info["DigElsewhere"] = "Go Dig Elsewhere\t5\t5000\tNone\tComplete the 'Resource Drill' flashpoint operation."; +$Challenge::IsNotMultiTier["DigElsewhere"] = true; +$Challenge::Challenge[5, 10] = "BegoneFoulPortal"; +$Challenge::Info["BegoneFoulPortal"] = "Begone! Foul Portal!\t5\t5000\tNone\tComplete the 'Shadow Gate' flashpoint operation."; +$Challenge::IsNotMultiTier["BegoneFoulPortal"] = true; +$Challenge::Challenge[5, 11] = "HuntersAsPrey"; +$Challenge::Info["HuntersAsPrey"] = "Hunters As Prey\t5\t5000\tNone\tComplete the 'Air Raid' flashpoint operation."; +$Challenge::IsNotMultiTier["HuntersAsPrey"] = true; +$Challenge::Challenge[5, 12] = "ThroughTheFlare"; +$Challenge::Info["ThroughTheFlare"] = "Through The Flare\t5\t15000\tNLS-22 Acid Sniper\tFind and kill the Flareguide Mini-Boss during a living world session"; +$Challenge::IsNotMultiTier["ThroughTheFlare"] = true; + +//Zombie Slaying +$Challenge::Category[6] = "Zombie Slaying Challenges\tTasks for eliminating combatants of the zombie horde\t28"; + +$Challenge::Challenge[6, 0] = "NormHunter1"; +$Challenge::Info["NormHunter1"] = "Frontline Buster I\t6\t2500\tNone\tSlay 2,500 Zombies (Normal Type)"; +$Challenge::Challenge[6, 1] = "NormHunter2"; +$Challenge::Info["NormHunter2"] = "Frontline Buster II\t6\t5000\tNone\tSlay 5,000 Zombies (Normal Type)"; +$Challenge::Challenge[6, 2] = "NormHunter3"; +$Challenge::Info["NormHunter3"] = "Frontline Buster III\t6\t10000\tNone\tSlay 10,000 Zombies (Normal Type)"; +$Challenge::Challenge[6, 3] = "RavHunter1"; +$Challenge::Info["RavHunter1"] = "Speed Kills I\t6\t2500\tNone\tSlay 1,000 Ravager Zombies"; +$Challenge::Challenge[6, 4] = "RavHunter2"; +$Challenge::Info["RavHunter2"] = "Speed Kills II\t6\t5000\tNone\tSlay 2,500 Ravager Zombies"; +$Challenge::Challenge[6, 5] = "RavHunter3"; +$Challenge::Info["RavHunter3"] = "Speed Kills III\t6\t10000\tNone\tSlay 5,000 Ravager Zombies"; +$Challenge::Challenge[6, 6] = "LordHunter1"; +$Challenge::Info["LordHunter1"] = "The Bigger They Are I\t6\t2500\tNone\tSlay 1,000 Zombie Lords"; +$Challenge::Challenge[6, 7] = "LordHunter2"; +$Challenge::Info["LordHunter2"] = "The Bigger They Are II\t6\t5000\tNone\tSlay 2,000 Zombie Lords"; +$Challenge::Challenge[6, 8] = "LordHunter3"; +$Challenge::Info["LordHunter3"] = "The Bigger They Are III\t6\t10000\tNone\tSlay 3,000 Zombie Lords"; +$Challenge::Challenge[6, 9] = "DemonHunter1"; +$Challenge::Info["DemonHunter1"] = "Fire Retardant I\t6\t2500\tNone\tSlay 1,000 Demon Zombies"; +$Challenge::Challenge[6, 10] = "DemonHunter2"; +$Challenge::Info["DemonHunter2"] = "Fire Retardant II\t6\t5000\tNone\tSlay 2,500 Demon Zombies"; +$Challenge::Challenge[6, 11] = "DemonHunter3"; +$Challenge::Info["DemonHunter3"] = "Fire Retardant III\t6\t10000\tNone\tSlay 5,000 Demon Zombies"; +$Challenge::Challenge[6, 12] = "AirRapHunter1"; +$Challenge::Info["AirRapHunter1"] = "Bat Slayer I\t6\t2500\tNone\tSlay 1,500 Air Rapier Zombies"; +$Challenge::Challenge[6, 13] = "AirRapHunter2"; +$Challenge::Info["AirRapHunter2"] = "Bat Slayer II\t6\t5000\tNone\tSlay 3,500 Air Rapier Zombies"; +$Challenge::Challenge[6, 14] = "AirRapHunter3"; +$Challenge::Info["AirRapHunter3"] = "Bat Slayer III\t6\t10000\tNone\tSlay 6,000 Air Rapier Zombies"; +$Challenge::Challenge[6, 15] = "DLordHunter1"; +$Challenge::Info["DLordHunter1"] = "Hellspawn Erradicator I\t6\t2500\tNone\tSlay 500 Demon Lord Zombies"; +$Challenge::Challenge[6, 16] = "DLordHunter2"; +$Challenge::Info["DLordHunter2"] = "Hellspawn Erradicator II\t6\t5000\tNone\tSlay 1,000 Demon Lord Zombies"; +$Challenge::Challenge[6, 17] = "DLordHunter3"; +$Challenge::Info["DLordHunter3"] = "Hellspawn Erradicator III\t6\t10000\tNone\tSlay 1,500 Demon Lord Zombies"; +$Challenge::Challenge[6, 18] = "ShifterHunter1"; +$Challenge::Info["ShifterHunter1"] = "Anti-Warp I\t6\t2500\tNone\tSlay 1,500 Shifter Zombies"; +$Challenge::Challenge[6, 19] = "ShifterHunter2"; +$Challenge::Info["ShifterHunter2"] = "Anti-Warp II\t6\t5000\tNone\tSlay 3,000 Shifter Zombies"; +$Challenge::Challenge[6, 20] = "ShifterHunter3"; +$Challenge::Info["ShifterHunter3"] = "Anti-Warp III\t6\t10000\tNone\tSlay 6,000 Shifter Zombies"; +$Challenge::Challenge[6, 21] = "SummonerHunter1"; +$Challenge::Info["SummonerHunter1"] = "Horde Halter I\t6\t2500\tNone\tSlay 1,000 Zombie Summoners"; +$Challenge::Challenge[6, 22] = "SummonerHunter2"; +$Challenge::Info["SummonerHunter2"] = "Horde Halter II\t6\t5000\tNone\tSlay 2,500 Zombie Summoners"; +$Challenge::Challenge[6, 23] = "SummonerHunter3"; +$Challenge::Info["SummonerHunter3"] = "Horde Halter III\t6\t10000\tNone\tSlay 5,000 Zombie Summoners"; +$Challenge::Challenge[6, 24] = "SniperHunter1"; +$Challenge::Info["SniperHunter1"] = "Scope Breaker I\t6\t2500\tNone\tSlay 1,000 Sniper Zombies"; +$Challenge::Challenge[6, 25] = "SniperHunter2"; +$Challenge::Info["SniperHunter2"] = "Scope Breaker II\t6\t5000\tNone\tSlay 2,500 Sniper Zombies"; +$Challenge::Challenge[6, 26] = "SniperHunter3"; +$Challenge::Info["SniperHunter3"] = "Scope Breaker III\t6\t10000\tNone\tSlay 5,000 Sniper Zombies"; +$Challenge::Challenge[6, 27] = "UDemHunter1"; +$Challenge::Info["UDemHunter1"] = "Runner Down I\t6\t2500\tNone\tSlay 1,000 Ultra Demon Zombies"; +$Challenge::Challenge[6, 28] = "UDemHunter2"; +$Challenge::Info["UDemHunter2"] = "Runner Down II\t6\t5000\tNone\tSlay 2,500 Ultra Demon Zombies"; +$Challenge::Challenge[6, 29] = "UDemHunter3"; +$Challenge::Info["UDemHunter3"] = "Runner Down III\t6\t10000\tNone\tSlay 5,000 Ultra Demon Zombies"; +$Challenge::Challenge[6, 30] = "VRavHunter1"; +$Challenge::Info["VRavHunter1"] = "C4 Coming Through I\t6\t2500\tNone\tSlay 1,000 Volatile Ravager Zombies"; +$Challenge::Challenge[6, 31] = "VRavHunter2"; +$Challenge::Info["VRavHunter2"] = "C4 Coming Through II\t6\t5000\tNone\tSlay 2,500 Volatile Ravager Zombies"; +$Challenge::Challenge[6, 32] = "VRavHunter3"; +$Challenge::Info["VRavHunter3"] = "C4 Coming Through III\t6\t10000\tNone\tSlay 5,000 Volatile Ravager Zombies"; +$Challenge::Challenge[6, 33] = "SSHunter1"; +$Challenge::Info["SSHunter1"] = "De-Flakerizer I\t6\t2500\tNone\tSlay 1,000 Slingshot Zombies"; +$Challenge::Challenge[6, 34] = "SSHunter2"; +$Challenge::Info["SSHunter2"] = "De-Flakerizer II\t6\t5000\tNone\tSlay 2,500 Slingshot Zombies"; +$Challenge::Challenge[6, 35] = "SSHunter3"; +$Challenge::Info["SSHunter3"] = "De-Flakerizer III\t6\t10000\tNone\tSlay 5,000 Slingshot Zombies"; +$Challenge::Challenge[6, 36] = "WraithHunter1"; +$Challenge::Info["WraithHunter1"] = "Anti Spec-Ops I\t6\t2500\tNone\tSlay 500 Wraith Zombies"; +$Challenge::Challenge[6, 37] = "WraithHunter2"; +$Challenge::Info["WraithHunter2"] = "Anti Spec-Ops II\t6\t5000\tNone\tSlay 750 Wraith Zombies"; +$Challenge::Challenge[6, 38] = "WraithHunter3"; +$Challenge::Info["WraithHunter3"] = "Anti Spec-Ops III\t6\t10000\tNone\tSlay 1,000 Wraith Zombies"; +$Challenge::Challenge[6, 39] = "ShieldBreaker"; +$Challenge::Info["ShieldBreaker"] = "Shield Breaker\t6\t1000\tNone\tDestroy a Zombie Lord Defensive Barrier"; +$Challenge::IsNotMultiTier["ShieldBreaker"] = true; + +//Drone Hunter +$Challenge::Category[7] = "Drone Hunter Challenges\tTasks related to scrapping Harbinger Sentry Drones\t33"; + +$Challenge::Challenge[7, 0] = "DroningOn1"; +$Challenge::Info["DroningOn1"] = "Droning On I\t7\t5000\tNone\tEliminate 100 Harbinger Sentry Drones (Any Type)"; +$Challenge::Challenge[7, 1] = "DroningOn2"; +$Challenge::Info["DroningOn2"] = "Droning On II\t7\t10000\tNone\tEliminate 250 Harbinger Sentry Drones (Any Type)"; +$Challenge::Challenge[7, 2] = "DroningOn3"; +$Challenge::Info["DroningOn3"] = "Droning On III\t7\t15000\tNone\tEliminate 500 Harbinger Sentry Drones (Any Type)"; +$Challenge::Challenge[7, 3] = "DroningOn4"; +$Challenge::Info["DroningOn4"] = "Droning On IV\t7\t25000\tNone\tEliminate 1000 Harbinger Sentry Drones (Any Type)"; +$Challenge::Challenge[7, 4] = "DroningOn5"; +$Challenge::Info["DroningOn5"] = "Droning On V\t7\t50000\tNone\tEliminate 2500 Harbinger Sentry Drones (Any Type)"; //Sabotage -$Challenge::Category[7] = "Sabotage Challenges\tTasks related to the Sabotage game mode\t40"; +$Challenge::Category[8] = "Sabotage Challenges\tTasks related to the Sabotage game mode\t40"; -$Challenge::Challenge[7, 0] = "BombDisarmed"; +$Challenge::Challenge[8, 0] = "BombDisarmed"; $Challenge::IsNotMultiTier["BombDisarmed"] = true; -$Challenge::Info["BombDisarmed"] = "Bomb Disarmed\t7\t500\tNone\tDisarm an enemy bomb"; -$Challenge::Challenge[7, 1] = "BombPlanted"; +$Challenge::Info["BombDisarmed"] = "Bomb Disarmed\t8\t500\tNone\tDisarm an enemy bomb"; +$Challenge::Challenge[8, 1] = "BombPlanted"; $Challenge::IsNotMultiTier["BombPlanted"] = true; -$Challenge::Info["BombPlanted"] = "Bomb Planted\t7\t2500\tNone\tArm the bomb at the objective"; -$Challenge::Challenge[7, 2] = "BombDetonated"; +$Challenge::Info["BombPlanted"] = "Bomb Planted\t8\t2500\tNone\tArm the bomb at the objective"; +$Challenge::Challenge[8, 2] = "BombDetonated"; $Challenge::IsNotMultiTier["BombDetonated"] = true; -$Challenge::Info["BombDetonated"] = "Bomb Detonated\t7\t3000\tNone\tWin a Round Of Sabotage"; -$Challenge::Challenge[7, 3] = "3For5Sabo"; +$Challenge::Info["BombDetonated"] = "Bomb Detonated\t8\t3000\tNone\tWin a Round Of Sabotage"; +$Challenge::Challenge[8, 3] = "3For5Sabo"; $Challenge::IsNotMultiTier["3For5Sabo"] = true; -$Challenge::Info["3For5Sabo"] = "Three For Five\t7\t4500\tBomb Shadower Perk\tWin 3 of the 5 rounds in a Sabotage match"; -$Challenge::Challenge[7, 4] = "BaseDestroyer"; +$Challenge::Info["3For5Sabo"] = "Three For Five\t8\t4500\tBomb Shadower Perk\tWin 3 of the 5 rounds in a Sabotage match"; +$Challenge::Challenge[8, 4] = "BaseDestroyer"; $Challenge::IsNotMultiTier["BaseDestroyer"] = true; -$Challenge::Info["BaseDestroyer"] = "Base Destroyer\t7\t5000\tNone\tGo Undefeated in a full game of Sabotage"; +$Challenge::Info["BaseDestroyer"] = "Base Destroyer\t8\t5000\tNone\tGo Undefeated in a full game of Sabotage"; //Domination -$Challenge::Category[8] = "Domination Challenges\tTasks related to the Domination game mode\t40"; +$Challenge::Category[9] = "Domination Challenges\tTasks related to the Domination game mode\t40"; -$Challenge::Challenge[8, 0] = "ZoneCapture"; +$Challenge::Challenge[9, 0] = "ZoneCapture"; $Challenge::IsNotMultiTier["ZoneCapture"] = true; -$Challenge::Info["ZoneCapture"] = "Zone Conquerer\t8\t500\tNone\tCapture a domination point"; -$Challenge::Challenge[8, 1] = "ABC"; +$Challenge::Info["ZoneCapture"] = "Zone Conquerer\t9\t500\tNone\tCapture a domination point"; +$Challenge::Challenge[9, 1] = "ABC"; $Challenge::IsNotMultiTier["ABC"] = true; -$Challenge::Info["ABC"] = "Alpha Bravo Charlie\t8\t2500\tNone\tAt any point in the game, hold all three points"; -$Challenge::Challenge[8, 2] = "MatchSet"; +$Challenge::Info["ABC"] = "Alpha Bravo Charlie\t9\t2500\tNone\tAt any point in the game, hold all three points"; +$Challenge::Challenge[9, 2] = "MatchSet"; $Challenge::IsNotMultiTier["MatchSet"] = true; -$Challenge::Info["MatchSet"] = "Match Set\t8\t3000\tNone\tWin a Round Of Domination"; -$Challenge::Challenge[8, 3] = "3For5"; +$Challenge::Info["MatchSet"] = "Match Set\t9\t3000\tNone\tWin a Round Of Domination"; +$Challenge::Challenge[9, 3] = "3For5"; $Challenge::IsNotMultiTier["3For5"] = true; -$Challenge::Info["3For5"] = "Three For Five\t8\t4500\tNone\tWin 3 of the 5 rounds in a Domination match"; -$Challenge::Challenge[8, 4] = "Undefeatable"; +$Challenge::Info["3For5"] = "Three For Five\t9\t4500\tNone\tWin 3 of the 5 rounds in a Domination match"; +$Challenge::Challenge[9, 4] = "Undefeatable"; $Challenge::IsNotMultiTier["Undefeatable"] = true; -$Challenge::Info["Undefeatable"] = "Undefeatable\t8\t5000\tNone\tGo Undefeated in a full game of Domination"; +$Challenge::Info["Undefeatable"] = "Undefeatable\t9\t5000\tNone\tGo Undefeated in a full game of Domination"; //Horde 3 -$Challenge::Category[9] = "Horde 3 Challenges\tTasks related to surviving the waves of the zombie horde\t40"; +$Challenge::Category[10] = "Horde 3 Challenges\tTasks related to surviving the waves of the zombie horde\t40"; -$Challenge::Challenge[9, 0] = "15For15"; +$Challenge::Challenge[10, 0] = "15For15"; $Challenge::IsNotMultiTier["15For15"] = true; -$Challenge::Info["15For15"] = "15 For 15\t9\t15000\tNone\tComplete Wave 15"; -$Challenge::Challenge[9, 1] = "Milestone25"; +$Challenge::Info["15For15"] = "15 For 15\t10\t15000\tNone\tComplete Wave 15"; +$Challenge::Challenge[10, 1] = "Milestone25"; $Challenge::IsNotMultiTier["Milestone25"] = true; -$Challenge::Info["Milestone25"] = "Milestone 25\t9\t25000\tNone\tComplete Wave 25"; -$Challenge::Challenge[9, 2] = "ArmyOf50Stopped"; +$Challenge::Info["Milestone25"] = "Milestone 25\t10\t25000\tNone\tComplete Wave 25"; +$Challenge::Challenge[10, 2] = "ArmyOf50Stopped"; $Challenge::IsNotMultiTier["ArmyOf50Stopped"] = true; -$Challenge::Info["ArmyOf50Stopped"] = "Army Of 50 Stopped\t9\t50000\tSecond Chance Perk\tComplete Horde 3 (All 50 Waves)"; -$Challenge::Challenge[9, 3] = "Angel"; +$Challenge::Info["ArmyOf50Stopped"] = "Army Of 50 Stopped\t10\t50000\tSecond Chance Perk\tComplete Horde 3 (All 50 Waves)"; +$Challenge::Challenge[10, 3] = "Angel"; $Challenge::IsNotMultiTier["Angel"] = true; -$Challenge::Info["Angel"] = "Angel\t9\t500\tNone\tRevive a fallen teammate in Horde"; -$Challenge::Challenge[9, 4] = "ZBomber"; +$Challenge::Info["Angel"] = "Angel\t10\t500\tNone\tRevive a fallen teammate in Horde"; +$Challenge::Challenge[10, 4] = "ZBomber"; $Challenge::IsNotMultiTier["ZBomber"] = true; -$Challenge::Info["ZBomber"] = "Z-Bomber\t9\t2000\tNone\tCall in a Z-Bomb While Playing Horde"; -$Challenge::Challenge[9, 5] = "FirstBlood"; +$Challenge::Info["ZBomber"] = "Z-Bomber\t10\t2000\tNone\tCall in a Z-Bomb While Playing Horde"; +$Challenge::Challenge[10, 5] = "FirstBlood"; $Challenge::IsNotMultiTier["FirstBlood"] = true; -$Challenge::Info["FirstBlood"] = "First Blood\t9\t10000\tNone\tKill the first zombie that spawns in a Horde 3 game"; -$Challenge::Challenge[9, 6] = "SpeedSlayer"; +$Challenge::Info["FirstBlood"] = "First Blood\t10\t10000\tNone\tKill the first zombie that spawns in a Horde 3 game"; +$Challenge::Challenge[10, 6] = "SpeedSlayer"; $Challenge::IsNotMultiTier["SpeedSlayer"] = true; -$Challenge::Info["SpeedSlayer"] = "Speed Slayer\t9\t20000\tNone\tBe the featured first killer 10 times in a single game"; -$Challenge::Challenge[9, 7] = "HighScorer"; +$Challenge::Info["SpeedSlayer"] = "Speed Slayer\t10\t20000\tNone\tBe the featured first killer 10 times in a single game"; +$Challenge::Challenge[10, 7] = "HighScorer"; $Challenge::IsNotMultiTier["HighScorer"] = true; -$Challenge::Info["HighScorer"] = "High Scorer\t9\t25000\tNone\tBe the featured high scorer 10 times in a single game"; +$Challenge::Info["HighScorer"] = "High Scorer\t10\t25000\tNone\tBe the featured high scorer 10 times in a single game"; //Helljump -$Challenge::Category[10] = "Helljump Challenges\tTasks related to performing spec-ops Helljump operations\t40"; +$Challenge::Category[11] = "Helljump Challenges\tTasks related to performing spec-ops Helljump operations\t40"; -$Challenge::Challenge[10, 0] = "GroupBuster"; +$Challenge::Challenge[11, 0] = "GroupBuster"; $Challenge::IsNotMultiTier["GroupBuster"] = true; -$Challenge::Info["GroupBuster"] = "Group Buster\t10\t5000\tNone\tComplete A Group"; -$Challenge::Challenge[10, 1] = "WaveDefeater"; +$Challenge::Info["GroupBuster"] = "Group Buster\t11\t5000\tNone\tComplete A Group"; +$Challenge::Challenge[11, 1] = "WaveDefeater"; $Challenge::IsNotMultiTier["WaveDefeater"] = true; -$Challenge::Info["WaveDefeater"] = "Wave Defeater\t10\t50000\tNone\tComplete A Wave"; -$Challenge::Challenge[10, 2] = "OneK"; +$Challenge::Info["WaveDefeater"] = "Wave Defeater\t11\t50000\tNone\tComplete A Wave"; +$Challenge::Challenge[11, 2] = "OneK"; $Challenge::IsNotMultiTier["OneK"] = true; -$Challenge::Info["OneK"] = "1K Soldier\t10\t10000\tNone\tEarn 1,000 Points (Solo Score)"; -$Challenge::Challenge[10, 3] = "FiveK"; +$Challenge::Info["OneK"] = "1K Soldier\t11\t10000\tNone\tEarn 1,000 Points (Solo Score)"; +$Challenge::Challenge[11, 3] = "FiveK"; $Challenge::IsNotMultiTier["FiveK"] = true; -$Challenge::Info["FiveK"] = "5K Soldier\t10\t25000\tNone\tEarn 5,000 Points (Solo Score)"; -$Challenge::Challenge[10, 4] = "TenK"; +$Challenge::Info["FiveK"] = "5K Soldier\t11\t25000\tNone\tEarn 5,000 Points (Solo Score)"; +$Challenge::Challenge[11, 4] = "TenK"; $Challenge::IsNotMultiTier["TenK"] = true; -$Challenge::Info["TenK"] = "10K Soldier\t10\t50000\tNone\tEarn 10,000 Points (Solo Score)"; -$Challenge::Challenge[10, 5] = "PointsSurge"; +$Challenge::Info["TenK"] = "10K Soldier\t11\t50000\tNone\tEarn 10,000 Points (Solo Score)"; +$Challenge::Challenge[11, 5] = "PointsSurge"; $Challenge::IsNotMultiTier["PointsSurge"] = true; -$Challenge::Info["PointsSurge"] = "Points Surge\t10\t25000\tNone\tEarn 7,500 Points (Team Score)"; -$Challenge::Challenge[10, 6] = "PointsJackpot"; +$Challenge::Info["PointsSurge"] = "Points Surge\t11\t25000\tNone\tEarn 7,500 Points (Team Score)"; +$Challenge::Challenge[11, 6] = "PointsJackpot"; $Challenge::IsNotMultiTier["PointsJackpot"] = true; -$Challenge::Info["PointsJackpot"] = "Points Jackpot\t10\t50000\tNone\tEarn 25,000 Points (Team Score)"; -$Challenge::Challenge[10, 7] = "DownBoy"; +$Challenge::Info["PointsJackpot"] = "Points Jackpot\t11\t50000\tNone\tEarn 25,000 Points (Team Score)"; +$Challenge::Challenge[11, 7] = "DownBoy"; $Challenge::IsNotMultiTier["DownBoy"] = true; -$Challenge::Info["DownBoy"] = "Down Boy... Down\t10\t5000\tNone\tKill the wraith zombie on Strike 5"; -$Challenge::Challenge[10, 8] = "ClassExtravaganza"; +$Challenge::Info["DownBoy"] = "Down Boy... Down\t11\t5000\tNone\tKill the wraith zombie on Strike 5"; +$Challenge::Challenge[11, 8] = "ClassExtravaganza"; $Challenge::IsNotMultiTier["ClassExtravaganza"] = true; -$Challenge::Info["ClassExtravaganza"] = "Class Extravaganza\t10\t100\tNone\tUse a hellclass"; -$Challenge::Challenge[10, 9] = "LifeGiver"; +$Challenge::Info["ClassExtravaganza"] = "Class Extravaganza\t11\t100\tNone\tUse a hellclass"; +$Challenge::Challenge[11, 9] = "LifeGiver"; $Challenge::IsNotMultiTier["LifeGiver"] = true; -$Challenge::Info["LifeGiver"] = "Giver of Life\t10\t7500\tNone\tUse a Full Team Respawn beacon"; +$Challenge::Info["LifeGiver"] = "Giver of Life\t11\t7500\tNone\tUse a Full Team Respawn beacon"; //From The Top -$Challenge::Category[11] = "Operation Challenges\tTasks related to performing group operations\t49"; +$Challenge::Category[12] = "Operation Challenges\tTasks related to performing group operations\t49"; -$Challenge::Challenge[11, 0] = "SimonSays"; +$Challenge::Challenge[12, 0] = "SimonSays"; $Challenge::IsNotMultiTier["SimonSays"] = true; -$Challenge::Info["SimonSays"] = "Simon Says\t11\t1000\tNone\tOrder an operation"; -$Challenge::Challenge[11, 1] = "FromTheTop"; +$Challenge::Info["SimonSays"] = "Simon Says\t12\t1000\tNone\tOrder an operation"; +$Challenge::Challenge[12, 1] = "FromTheTop"; $Challenge::IsNotMultiTier["FromTheTop"] = true; -$Challenge::Info["FromTheTop"] = "From The Top\t11\t1000\tNone\tJoin an operation fireteam"; -$Challenge::Challenge[11, 2] = "NaturalLeader"; +$Challenge::Info["FromTheTop"] = "From The Top\t12\t1000\tNone\tJoin an operation fireteam"; +$Challenge::Challenge[12, 2] = "NaturalLeader"; $Challenge::IsNotMultiTier["NaturalLeader"] = true; -$Challenge::Info["NaturalLeader"] = "Natural Leader\t11\t2500\tNone\tOrder an operation, and have another player join the fireteam"; -$Challenge::Challenge[11, 3] = "GoldStar"; +$Challenge::Info["NaturalLeader"] = "Natural Leader\t12\t2500\tNone\tOrder an operation, and have another player join the fireteam"; +$Challenge::Challenge[12, 3] = "GoldStar"; $Challenge::IsNotMultiTier["GoldStar"] = true; -$Challenge::Info["GoldStar"] = "Gold Star\t11\t1000\tNone\tComplete an operation inside the time window"; -$Challenge::Challenge[11, 4] = "Faster"; +$Challenge::Info["GoldStar"] = "Gold Star\t12\t1000\tNone\tComplete an operation inside the time window"; +$Challenge::Challenge[12, 4] = "Faster"; $Challenge::IsNotMultiTier["Faster"] = true; -$Challenge::Info["Faster"] = "Faster!\t11\t250\tNone\tComplete an operation, but miss the time window"; -$Challenge::Challenge[11, 5] = "EpicFailure"; +$Challenge::Info["Faster"] = "Faster!\t12\t250\tNone\tComplete an operation, but miss the time window"; +$Challenge::Challenge[12, 5] = "EpicFailure"; $Challenge::IsNotMultiTier["EpicFailure"] = true; -$Challenge::Info["EpicFailure"] = "Epic Failure\t11\t5\tNone\tYou failed.... :)"; -$Challenge::Challenge[11, 6] = "ExpertGunner"; +$Challenge::Info["EpicFailure"] = "Epic Failure\t12\t5\tNone\tYou failed.... :)"; +$Challenge::Challenge[12, 6] = "ExpertGunner"; $Challenge::IsNotMultiTier["ExpertGunner"] = true; -$Challenge::Info["ExpertGunner"] = "Expert AC-130 Gunner\t11\t25000\tNone\tComplete Operation 'Rain Down'"; -$Challenge::Challenge[11, 7] = "Survivalist"; +$Challenge::Info["ExpertGunner"] = "Expert AC-130 Gunner\t12\t25000\tNone\tComplete Operation 'Rain Down'"; +$Challenge::Challenge[12, 7] = "Survivalist"; $Challenge::IsNotMultiTier["Survivalist"] = true; -$Challenge::Info["Survivalist"] = "Survivalist\t11\t25000\tNone\tComplete Operation 'Surrounded'"; -$Challenge::Challenge[11, 8] = "Invisibreh"; +$Challenge::Info["Survivalist"] = "Survivalist\t12\t25000\tNone\tComplete Operation 'Surrounded'"; +$Challenge::Challenge[12, 8] = "Invisibreh"; $Challenge::IsNotMultiTier["Invisibreh"] = true; -$Challenge::Info["Invisibreh"] = "Shhh.. I'm Invisibreh\t11\t25000\tNone\tComplete 'Enemy AC-130 Above' by hiding"; -$Challenge::Challenge[11, 9] = "WeakGunship"; +$Challenge::Info["Invisibreh"] = "Shhh.. I'm Invisibreh\t12\t25000\tNone\tComplete 'Enemy AC-130 Above' by hiding"; +$Challenge::Challenge[12, 9] = "WeakGunship"; $Challenge::IsNotMultiTier["WeakGunship"] = true; -$Challenge::Info["WeakGunship"] = "I have you now!\t11\t25000\tNone\tComplete 'Enemy AC-130 Above' by explosive force"; -$Challenge::Challenge[11, 10] = "InvasionBuster"; +$Challenge::Info["WeakGunship"] = "I have you now!\t12\t25000\tNone\tComplete 'Enemy AC-130 Above' by explosive force"; +$Challenge::Challenge[12, 10] = "InvasionBuster"; $Challenge::IsNotMultiTier["InvasionBuster"] = true; -$Challenge::Info["InvasionBuster"] = "Invade THIS!\t11\t25000\tNone\tComplete Operation 'Invasion'"; -$Challenge::Challenge[11, 11] = "SurvivalistExtreme"; +$Challenge::Info["InvasionBuster"] = "Invade THIS!\t12\t25000\tNone\tComplete Operation 'Invasion'"; +$Challenge::Challenge[12, 11] = "SurvivalistExtreme"; $Challenge::IsNotMultiTier["SurvivalistExtreme"] = true; -$Challenge::Info["SurvivalistExtreme"] = "Extreme Survivalist\t11\t50000\tNone\tComplete Operation 'Surrounded 2.0'"; +$Challenge::Info["SurvivalistExtreme"] = "Extreme Survivalist\t12\t50000\tNone\tComplete Operation 'Surrounded 2.0'"; //Prestige -$Challenge::Category[12] = "Officer Challenges\tTasks related to officer ranks and advanced progression\tOfficer 1"; +$Challenge::Category[13] = "Officer Challenges\tTasks related to officer ranks and advanced progression\tOfficer 1"; -$Challenge::Challenge[12, 0] = "Prestige1"; -$Challenge::SetHidden[12, 0] = true; -$Challenge::HiddenMessage[12, 0] = "=== CLASSIFIED: REQUIRES CLEARANCE ==="; +$Challenge::Challenge[13, 0] = "Prestige1"; +$Challenge::SetHidden[13, 0] = true; +$Challenge::HiddenMessage[13, 0] = "=== CLASSIFIED: REQUIRES CLEARANCE ==="; $Challenge::IsNotMultiTier["Prestige1"] = true; -$Challenge::Info["Prestige1"] = "Instructive Officer\t12\t100\tNone\tReach Officer Level 1"; +$Challenge::Info["Prestige1"] = "Instructive Officer\t13\t100\tNone\tReach Officer Level 1"; -$Challenge::Challenge[12, 1] = "Prestige2"; -$Challenge::SetHidden[12, 1] = true; -$Challenge::HiddenMessage[12, 1] = "=== CLASSIFIED: REQUIRES CLEARANCE ==="; +$Challenge::Challenge[13, 1] = "Prestige2"; +$Challenge::SetHidden[13, 1] = true; +$Challenge::HiddenMessage[13, 1] = "=== CLASSIFIED: REQUIRES CLEARANCE ==="; $Challenge::IsNotMultiTier["Prestige2"] = true; -$Challenge::Info["Prestige2"] = "Excelling Officer\t12\t250\tNone\tReach Officer Level 2"; +$Challenge::Info["Prestige2"] = "Excelling Officer\t13\t250\tNone\tReach Officer Level 2"; -$Challenge::Challenge[12, 2] = "Prestige3"; -$Challenge::SetHidden[12, 2] = true; -$Challenge::HiddenMessage[12, 2] = "=== CLASSIFIED: REQUIRES CLEARANCE ==="; +$Challenge::Challenge[13, 2] = "Prestige3"; +$Challenge::SetHidden[13, 2] = true; +$Challenge::HiddenMessage[13, 2] = "=== CLASSIFIED: REQUIRES CLEARANCE ==="; $Challenge::IsNotMultiTier["Prestige3"] = true; -$Challenge::Info["Prestige3"] = "Champion Officer\t12\t350\tNone\tReach Officer Level 3"; +$Challenge::Info["Prestige3"] = "Champion Officer\t13\t350\tNone\tReach Officer Level 3"; -$Challenge::Challenge[12, 3] = "Prestige4"; -$Challenge::SetHidden[12, 3] = true; -$Challenge::HiddenMessage[12, 3] = "=== CLASSIFIED: REQUIRES CLEARANCE ==="; +$Challenge::Challenge[13, 3] = "Prestige4"; +$Challenge::SetHidden[13, 3] = true; +$Challenge::HiddenMessage[13, 3] = "=== CLASSIFIED: REQUIRES CLEARANCE ==="; $Challenge::IsNotMultiTier["Prestige4"] = true; -$Challenge::Info["Prestige4"] = "Prestigious Officer\t12\t500\tNone\tReach Officer Level 4"; +$Challenge::Info["Prestige4"] = "Prestigious Officer\t13\t500\tNone\tReach Officer Level 4"; -$Challenge::Challenge[12, 4] = "Prestige5"; -$Challenge::SetHidden[12, 4] = true; -$Challenge::HiddenMessage[12, 4] = "=== CLASSIFIED: REQUIRES CLEARANCE ==="; +$Challenge::Challenge[13, 4] = "Prestige5"; +$Challenge::SetHidden[13, 4] = true; +$Challenge::HiddenMessage[13, 4] = "=== CLASSIFIED: REQUIRES CLEARANCE ==="; $Challenge::IsNotMultiTier["Prestige5"] = true; -$Challenge::Info["Prestige5"] = "Supreme Officer\t12\t1000\tNone\tReach Officer Level 5"; +$Challenge::Info["Prestige5"] = "Supreme Officer\t13\t1000\tNone\tReach Officer Level 5"; -$Challenge::Challenge[12, 5] = "Prestige6"; -$Challenge::SetHidden[12, 5] = true; -$Challenge::HiddenMessage[12, 5] = "=== CLASSIFIED: REQUIRES CLEARANCE ==="; +$Challenge::Challenge[13, 5] = "Prestige6"; +$Challenge::SetHidden[13, 5] = true; +$Challenge::HiddenMessage[13, 5] = "=== CLASSIFIED: REQUIRES CLEARANCE ==="; $Challenge::IsNotMultiTier["Prestige6"] = true; -$Challenge::Info["Prestige6"] = "Glorious Officer\t12\t2500\tNone\tReach Officer Level 6"; +$Challenge::Info["Prestige6"] = "Glorious Officer\t13\t2500\tNone\tReach Officer Level 6"; -$Challenge::Challenge[12, 6] = "Prestige7"; -$Challenge::SetHidden[12, 6] = true; -$Challenge::HiddenMessage[12, 6] = "=== CLASSIFIED: REQUIRES CLEARANCE ==="; +$Challenge::Challenge[13, 6] = "Prestige7"; +$Challenge::SetHidden[13, 6] = true; +$Challenge::HiddenMessage[13, 6] = "=== CLASSIFIED: REQUIRES CLEARANCE ==="; $Challenge::IsNotMultiTier["Prestige7"] = true; -$Challenge::Info["Prestige7"] = "Ultimate Officer\t12\t5000\tNone\tReach Officer Level 7"; +$Challenge::Info["Prestige7"] = "Ultimate Officer\t13\t5000\tNone\tReach Officer Level 7"; -$Challenge::Challenge[12, 7] = "Prestige8"; -$Challenge::SetHidden[12, 7] = true; -$Challenge::HiddenMessage[12, 7] = "=== CLASSIFIED: REQUIRES CLEARANCE ==="; +$Challenge::Challenge[13, 7] = "Prestige8"; +$Challenge::SetHidden[13, 7] = true; +$Challenge::HiddenMessage[13, 7] = "=== CLASSIFIED: REQUIRES CLEARANCE ==="; $Challenge::IsNotMultiTier["Prestige8"] = true; -$Challenge::Info["Prestige8"] = "Shadowing Officer\t12\t7500\tNone\tReach Officer Level 8"; +$Challenge::Info["Prestige8"] = "Shadowing Officer\t13\t7500\tNone\tReach Officer Level 8"; -$Challenge::Challenge[12, 8] = "Prestige9"; -$Challenge::SetHidden[12, 8] = true; -$Challenge::HiddenMessage[12, 8] = "=== CLASSIFIED: REQUIRES CLEARANCE ==="; +$Challenge::Challenge[13, 8] = "Prestige9"; +$Challenge::SetHidden[13, 8] = true; +$Challenge::HiddenMessage[13, 8] = "=== CLASSIFIED: REQUIRES CLEARANCE ==="; $Challenge::IsNotMultiTier["Prestige9"] = true; -$Challenge::Info["Prestige9"] = "Phantom Officer\t12\t10000\tNone\tReach Officer Level 9"; +$Challenge::Info["Prestige9"] = "Phantom Officer\t13\t10000\tNone\tReach Officer Level 9"; -$Challenge::Challenge[12, 9] = "Prestige10"; -$Challenge::SetHidden[12, 9] = true; -$Challenge::HiddenMessage[12, 9] = "=== CLASSIFIED: REQUIRES CLEARANCE ==="; +$Challenge::Challenge[13, 9] = "Prestige10"; +$Challenge::SetHidden[13, 9] = true; +$Challenge::HiddenMessage[13, 9] = "=== CLASSIFIED: REQUIRES CLEARANCE ==="; $Challenge::IsNotMultiTier["Prestige10"] = true; -$Challenge::Info["Prestige10"] = "Brutal Officer\t12\t10000\tNone\tReach Officer Level 10"; +$Challenge::Info["Prestige10"] = "Brutal Officer\t13\t10000\tNone\tReach Officer Level 10"; -$Challenge::Challenge[12, 10] = "Prestige11"; -$Challenge::SetHidden[12, 10] = true; -$Challenge::HiddenMessage[12, 10] = "=== CLASSIFIED: REQUIRES CLEARANCE ==="; +$Challenge::Challenge[13, 10] = "Prestige11"; +$Challenge::SetHidden[13, 10] = true; +$Challenge::HiddenMessage[13, 10] = "=== CLASSIFIED: REQUIRES CLEARANCE ==="; $Challenge::IsNotMultiTier["Prestige11"] = true; -$Challenge::Info["Prestige11"] = "Vengeful Officer\t12\t10000\tNone\tReach Officer Level 11"; +$Challenge::Info["Prestige11"] = "Vengeful Officer\t13\t10000\tNone\tReach Officer Level 11"; -$Challenge::Challenge[12, 11] = "Prestige12"; -$Challenge::SetHidden[12, 11] = true; -$Challenge::HiddenMessage[12, 11] = "=== CLASSIFIED: REQUIRES CLEARANCE ==="; +$Challenge::Challenge[13, 11] = "Prestige12"; +$Challenge::SetHidden[13, 11] = true; +$Challenge::HiddenMessage[13, 11] = "=== CLASSIFIED: REQUIRES CLEARANCE ==="; $Challenge::IsNotMultiTier["Prestige12"] = true; -$Challenge::Info["Prestige12"] = "Spectral Officer\t12\t10000\tNone\tReach Officer Level 12"; +$Challenge::Info["Prestige12"] = "Spectral Officer\t13\t10000\tNone\tReach Officer Level 12"; -$Challenge::Challenge[12, 12] = "Prestige13"; -$Challenge::SetHidden[12, 12] = true; -$Challenge::HiddenMessage[12, 12] = "=== CLASSIFIED: REQUIRES CLEARANCE ==="; +$Challenge::Challenge[13, 12] = "Prestige13"; +$Challenge::SetHidden[13, 12] = true; +$Challenge::HiddenMessage[13, 12] = "=== CLASSIFIED: REQUIRES CLEARANCE ==="; $Challenge::IsNotMultiTier["Prestige13"] = true; -$Challenge::Info["Prestige13"] = "Noble Officer\t12\t10000\tNone\tReach Officer Level 13"; +$Challenge::Info["Prestige13"] = "Noble Officer\t13\t10000\tNone\tReach Officer Level 13"; -$Challenge::Challenge[12, 13] = "Prestige14"; -$Challenge::SetHidden[12, 13] = true; -$Challenge::HiddenMessage[12, 13] = "=== CLASSIFIED: REQUIRES CLEARANCE ==="; +$Challenge::Challenge[13, 13] = "Prestige14"; +$Challenge::SetHidden[13, 13] = true; +$Challenge::HiddenMessage[13, 13] = "=== CLASSIFIED: REQUIRES CLEARANCE ==="; $Challenge::IsNotMultiTier["Prestige14"] = true; -$Challenge::Info["Prestige14"] = "Masterful Officer\t12\t10000\tNone\tReach Officer Level 14"; +$Challenge::Info["Prestige14"] = "Masterful Officer\t13\t10000\tNone\tReach Officer Level 14"; -$Challenge::Challenge[12, 14] = "Prestige15"; -$Challenge::SetHidden[12, 14] = true; -$Challenge::HiddenMessage[12, 14] = "=== CLASSIFIED: REQUIRES CLEARANCE ==="; +$Challenge::Challenge[13, 14] = "Prestige15"; +$Challenge::SetHidden[13, 14] = true; +$Challenge::HiddenMessage[13, 14] = "=== CLASSIFIED: REQUIRES CLEARANCE ==="; $Challenge::IsNotMultiTier["Prestige15"] = true; -$Challenge::Info["Prestige15"] = "Rising Harbinger\t12\t10000\tNone\tReach The Highest Officer Level (15)"; +$Challenge::Info["Prestige15"] = "Rising Harbinger\t13\t10000\tNone\tReach The Highest Officer Level (15)"; -$Challenge::Challenge[12, 15] = "GameEnder"; +$Challenge::Challenge[13, 15] = "GameEnder"; $Challenge::IsNotMultiTier["GameEnder"] = true; -$Challenge::Info["GameEnder"] = "Game Ender\t12\t5000\tNone\tUse a Fission Bomb to end a game"; -$Challenge::Challenge[12, 16] = "CastleWalls"; +$Challenge::Info["GameEnder"] = "Game Ender\t13\t5000\tNone\tUse a Fission Bomb to end a game"; +$Challenge::Challenge[13, 16] = "CastleWalls"; $Challenge::IsNotMultiTier["CastleWalls"] = true; -$Challenge::Info["CastleWalls"] = "Castle Walls\t12\t15000\tNone\tAbsorb 100 enemy rounds with a single PulseStar Shield System"; -$Challenge::Challenge[12, 17] = "OrbitalDeath"; +$Challenge::Info["CastleWalls"] = "Castle Walls\t13\t15000\tNone\tAbsorb 100 enemy rounds with a single PulseStar Shield System"; +$Challenge::Challenge[13, 17] = "OrbitalDeath"; $Challenge::IsNotMultiTier["OrbitalDeath"] = true; -$Challenge::Info["OrbitalDeath"] = "Orbital Death Dealer\t12\t20000\tNone\tEliminate 15 enemy players or 50 zombies with a single LOAS strike"; +$Challenge::Info["OrbitalDeath"] = "Orbital Death Dealer\t13\t20000\tNone\tEliminate 15 enemy players or 50 zombies with a single LOAS strike"; + +//Master Slayer +$Challenge::Category[14] = "Master Slayer Challenges\tTasks related to defeating the bosses in a specific manner\tOfficer 5"; +$Challenge::IsNotMultiTier["Dawnlight"] = true; +$Challenge::Info["Dawnlight"] = "Dawnlight\t14\t25000\tNone\tInflict 7500 Damage to Lord Yvex using the Aegis of Dawn in a single encounter"; +$Challenge::Challenge[14, 0] = "Dawnlight"; +$Challenge::IsNotMultiTier["FirmlyGrounded"] = true; +$Challenge::Info["FirmlyGrounded"] = "Firmly Grounded\t14\t25000\tNone\tDefeat the Ghost of Lightning, completing all current circuit sequences and overloads"; +$Challenge::Challenge[14, 1] = "FirmlyGrounded"; +$Challenge::IsNotMultiTier["Extinguished"] = true; +$Challenge::Info["Extinguished"] = "Extinguished\t14\t25000\tNone\tDefeat General Vegenor using only the Sonic Cannon"; +$Challenge::Challenge[14, 2] = "Extinguished"; +$Challenge::IsNotMultiTier["OnlySilence"] = true; +$Challenge::Info["OnlySilence"] = "There is Only Silence\t14\t25000\tNone\tDefeat Lord Rog without ever being killed by a meteor impact attack"; +$Challenge::Challenge[14, 3] = "OnlySilence"; +$Challenge::IsNotMultiTier["NewtonsLaws"] = true; +$Challenge::Info["NewtonsLaws"] = "Newton's Laws\t14\t25000\tNone\tDefeat Major Insignia with the Gravity Axe"; +$Challenge::Challenge[14, 4] = "NewtonsLaws"; +$Challenge::IsNotMultiTier["SequentialForces"] = true; +$Challenge::Info["SequentialForces"] = "Sequential Forces\t14\t25000\tNone\tDestroy Trevor's War Platform with the overload mechanic"; +$Challenge::Challenge[14, 5] = "SequentialForces"; +$Challenge::IsNotMultiTier["VolcanicRetribution"] = true; +$Challenge::Info["VolcanicRetribution"] = "Volcanic Retribution\t14\t25000\tNone\tDeflect a Volcanic Attack back at the Ghost of Fire"; +$Challenge::Challenge[14, 6] = "VolcanicRetribution"; +$Challenge::IsNotMultiTier["PhantomsFury"] = true; +$Challenge::Info["PhantomsFury"] = "Phantom's Fury\t14\t25000\tNone\tInflict 7500 Damage to Lord Vardison with the Shadow Encarnate Lance"; +$Challenge::Challenge[14, 7] = "PhantomsFury"; +$Challenge::IsNotMultiTier["Daybreak"] = true; +$Challenge::Info["Daybreak"] = "Daybreak\t14\t25000\tNone\tInflict 10000 Damage to the Shade Lord with Daybreak"; +$Challenge::Challenge[14, 8] = "Daybreak"; + +//Overpromotion +$Challenge::Category[15] = "Overpromotion Entry\tComplete all tasks to unlock overpromotion entry permissions\tMaxRank"; +$Challenge::IsNotMultiTier["OPTask1"] = true; +$Challenge::Info["OPTask1"] = "TASK I\t15\t0\tNone\tDefeat all TWM2 bosses at least once"; +$Challenge::Challenge[15, 0] = "OPTask1"; +$Challenge::IsNotMultiTier["OPTask2"] = true; +$Challenge::Info["OPTask2"] = "TASK II\t15\t0\tNone\tEarn a total of 250 individual boss proficiency marks"; +$Challenge::Challenge[15, 1] = "OPTask2"; +$Challenge::IsNotMultiTier["OPTask3"] = true; +$Challenge::Info["OPTask3"] = "TASK III\t15\t0\tNone\tComplete a Titan Commendation Challenge for any weapon in TWM2"; +$Challenge::Challenge[15, 2] = "OPTask3"; +$Challenge::IsNotMultiTier["OPTask4"] = true; +$Challenge::Info["OPTask4"] = "TASK IV\t15\t0\tNone\tDefeat Lord Vardison on WTF difficulty"; +$Challenge::Challenge[15, 2] = "OPTask4"; + +//Events +$Challenge::Category[16] = "Special Event Challenges\tTasks for playing TWM2 during special events\t-1"; + +$Challenge::Challenge[16, 0] = "NewYearsEve"; +$Challenge::Info["NewYearsEve"] = "New Years Eve Fireworks\t16\t1500\tJavelin Hellclass\tGet a Javelin Kill on New Year's Eve"; +$Challenge::IsNotMultiTier["NewYearsEve"] = true; +$Challenge::Challenge[16, 1] = "NewYears"; +$Challenge::Info["NewYears"] = "New Years Fireworks\t16\t1500\tNone\tCall in a Nuclear Strike on New Year's Day"; +$Challenge::IsNotMultiTier["NewYears"] = true; +$Challenge::Challenge[16, 2] = "GunshipMall"; +$Challenge::Info["GunshipMall"] = "Gunship to the Mall\t16\t2500\tNone\tCall in a Gunship Killstreak on Christmas Mall 2009"; +$Challenge::IsNotMultiTier["GunshipMall"] = true; +$Challenge::Challenge[16, 3] = "IndepRPG"; +$Challenge::Info["IndepRPG"] = "Independance RPG\t16\t1500\tNone\tScore an RPG Kill on the Fourth of July"; +$Challenge::IsNotMultiTier["IndepRPG"] = true; +$Challenge::Challenge[16, 4] = "SoulsticeBombard"; +$Challenge::Info["SoulsticeBombard"] = "Soulstice Bombard\t16\t1500\tNone\tCall in artillery on one of the soulstices (6/21 or 12/21)"; +$Challenge::IsNotMultiTier["SoulsticeBombard"] = true; //CORE @@ -648,6 +764,9 @@ function GameConnection::AllowedToDoNW(%client, %name) { if(getWord(%categoryReq, 0) $= "Officer") { return %scriptController.officer >= getWord(%categoryReq, 1); } + else if(getWord(%categoryReq, 0) $= "MaxRank") { + return %scriptController.officer >= 15 && %scriptController.millionxp >= 3; + } else { if(%categoryReq == -1) { return 1; diff --git a/scripts/TWM2/Zombie/ZombieCore.cs b/scripts/TWM2/Zombie/ZombieCore.cs index 9efa106..ea90669 100644 --- a/scripts/TWM2/Zombie/ZombieCore.cs +++ b/scripts/TWM2/Zombie/ZombieCore.cs @@ -17,6 +17,23 @@ $Zombie::detectDist = 9999; //$Zombie::FallDieHeight: The minimum altitude a zombie may be before being script killed $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 = 150; //$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; %vec = %x @ SPC @ %y @ SPC @ 0; %arg1.setRotation(fullrot("0 0 0", %vec)); - //Check for speed enhancement - %multiplier = $Zombie::SpeedMultiplier[%arg1.type] $= "" ? 1 : $Zombie::SpeedMultiplier[%arg1.type]; - %speed = %arg1.speed * %multiplier; + %speed = %arg1.speed; %vector = vectorScale(%vec, %speed); %arg1.applyImpulse(%arg1.direction, %vector); %arg1.Mnum -= 1; @@ -456,9 +471,17 @@ function TWM2Lib_Zombie_Core(%functionName, %arg1, %arg2, %arg3, %arg4) { %zombie.mountImage(ZWingImage2, 4); %zombie.setActionThread("scoutRoot",true); - //Demon Mother Zombie + //Demon Mother (Lord) Zombie 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 case 9: @@ -581,55 +604,39 @@ function TWM2Lib_Zombie_Core(%functionName, %arg1, %arg2, %arg3, %arg4) { %zombie.zapObject(); revivestand(%zombie, 0); } - - %zombie.speed = TWM2Lib_Zombie_Core("defineZSpeed", %spawnType); - + //Define Speed Parameters + %zombie.speed = TWM2Lib_Zombie_Core("defineZSpeed", %spawnType); if(!isSet($Zombie::SpeedUpdateTime[%spawnType])) { %zombie.updateTimeFrequency = $Zombie::BaseSpeedUpdateTime; } %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); 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 datablock AudioProfile(ZombieDeathSound1) diff --git a/scripts/TWM2/Zombie/ZombieTypes/Demon.cs b/scripts/TWM2/Zombie/ZombieTypes/Demon.cs index e2bfdca..54ea9b9 100644 --- a/scripts/TWM2/Zombie/ZombieTypes/Demon.cs +++ b/scripts/TWM2/Zombie/ZombieTypes/Demon.cs @@ -1,3 +1,5 @@ +$TWM2::ArmorHasCollisionFunction[DemonZombieArmor] = true; + datablock PlayerData(DemonZombieArmor) : LightMaleHumanArmor { boundingBox = "1.63 1.63 2.6"; maxDamage = 4.0; @@ -12,13 +14,55 @@ datablock PlayerData(DemonZombieArmor) : LightMaleHumanArmor { 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[Mine] = 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) { if(!isObject(%zombie) || %zombie.getState() $= "dead") { return; diff --git a/scripts/TWM2/Zombie/ZombieTypes/DemonLord.cs b/scripts/TWM2/Zombie/ZombieTypes/DemonLord.cs index 47d39c8..ee7b65d 100644 --- a/scripts/TWM2/Zombie/ZombieTypes/DemonLord.cs +++ b/scripts/TWM2/Zombie/ZombieTypes/DemonLord.cs @@ -1,308 +1,302 @@ -datablock PlayerData(DemonMotherZombieArmor) : LightMaleHumanArmor -{ - boundingBox = "1.5 1.5 2.6"; - maxDamage = 9.0; - minImpactSpeed = 35; - shapeFile = "medium_female.dts"; +$TWM2::ArmorHasCollisionFunction[DemonMotherZombieArmor] = true; - 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 - decalData = HeavyBiodermFootprint; - decalOffset = 0.4; + debrisShapeName = "bio_player_debris.dts"; - 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[Mine] = 0; max[Grenade] = 0; }; -datablock StaticShapeData(SubBeacon) -{ - shapeFile = "turret_muzzlepoint.dts"; - targetNameTag = 'beacon'; - isInvincible = true; +datablock StaticShapeData(SubBeacon) { + shapeFile = "turret_muzzlepoint.dts"; + targetNameTag = 'beacon'; + isInvincible = true; - dynamicType = $TypeMasks::SensorObjectType; + dynamicType = $TypeMasks::SensorObjectType; }; -datablock SeekerProjectileData(DMMissile) -{ - casingShapeName = "weapon_missile_casement.dts"; - projectileShapeName = "weapon_missile_projectile.dts"; - hasDamageRadius = true; - indirectDamage = 0.5; - damageRadius = 5.0; - radiusDamageType = $DamageType::Zombie; - kickBackStrength = 2000; +datablock SeekerProjectileData(DMMissile) { + casingShapeName = "weapon_missile_casement.dts"; + projectileShapeName = "weapon_missile_projectile.dts"; + hasDamageRadius = true; + indirectDamage = 0.5; + damageRadius = 5.0; + radiusDamageType = $DamageType::Zombie; + kickBackStrength = 2000; - explosion = "MissileExplosion"; - 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 + explosion = "MissileExplosion"; + 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 = MortarSmokeEmitter; - delayEmitter = MissileFireEmitter; - puffEmitter = MissilePuffEmitter; - bubbleEmitter = GrenadeBubbleEmitter; - bubbleEmitTime = 1.0; + baseEmitter = MortarSmokeEmitter; + delayEmitter = MissileFireEmitter; + puffEmitter = MissilePuffEmitter; + bubbleEmitter = GrenadeBubbleEmitter; + bubbleEmitTime = 1.0; - exhaustEmitter = MissileLauncherExhaustEmitter; - exhaustTimeMs = 300; - exhaustNodeName = "muzzlePoint1"; + exhaustEmitter = MissileLauncherExhaustEmitter; + exhaustTimeMs = 300; + exhaustNodeName = "muzzlePoint1"; - lifetimeMS = 10000; // z0dd - ZOD, 4/14/02. Was 6000 - muzzleVelocity = 10.0; - maxVelocity = 35.0; // z0dd - ZOD, 4/14/02. Was 80.0 - turningSpeed = 23.0; - acceleration = 15.0; + lifetimeMS = 10000; // z0dd - ZOD, 4/14/02. Was 6000 + muzzleVelocity = 10.0; + maxVelocity = 35.0; // z0dd - ZOD, 4/14/02. Was 80.0 + turningSpeed = 23.0; + acceleration = 15.0; - proximityRadius = 2.5; + proximityRadius = 2.5; - terrainAvoidanceSpeed = 10; - terrainScanAhead = 7; - terrainHeightFail = 1; - terrainAvoidanceRadius = 3; + terrainAvoidanceSpeed = 10; + terrainScanAhead = 7; + terrainHeightFail = 1; + terrainAvoidanceRadius = 3; - flareDistance = 40; - flareAngle = 20; - minSeekHeat = 0.0; + flareDistance = 40; + flareAngle = 20; + minSeekHeat = 0.0; - sound = MissileProjectileSound; + sound = MissileProjectileSound; - hasLight = true; - lightRadius = 5.0; - lightColor = "0.2 0.05 0"; + hasLight = true; + lightRadius = 5.0; + lightColor = "0.2 0.05 0"; - useFlechette = true; - flechetteDelayMs = 250; - casingDeb = FlechetteDebris; + useFlechette = true; + flechetteDelayMs = 250; + casingDeb = FlechetteDebris; - explodeOnWaterImpact = false; + explodeOnWaterImpact = false; }; -datablock LinearFlareProjectileData(DMPlasma) -{ - doDynamicClientHits = true; +datablock LinearFlareProjectileData(DMPlasma) { + doDynamicClientHits = true; - directDamage = 0; - directDamageType = $DamageType::Zombie; - hasDamageRadius = true; - indirectDamage = 0.8; // z0dd - ZOD, 4/25/02. Was 0.5 - damageRadius = 15.0; - kickBackStrength = 1500; - radiusDamageType = $DamageType::Zombie; - explosion = MortarExplosion; - splash = PlasmaSplash; + directDamage = 0; + directDamageType = $DamageType::Zombie; + hasDamageRadius = true; + indirectDamage = 0.8; // z0dd - ZOD, 4/25/02. Was 0.5 + damageRadius = 15.0; + kickBackStrength = 1500; + radiusDamageType = $DamageType::Zombie; + explosion = MortarExplosion; + splash = PlasmaSplash; - dryVelocity = 85.0; // z0dd - ZOD, 4/25/02. Was 50. Velocity of projectile out of water - wetVelocity = -1; - velInheritFactor = 1.0; - fizzleTimeMS = 4000; - lifetimeMS = 2500; // z0dd - ZOD, 4/25/02. Was 6000 - explodeOnDeath = true; - reflectOnWaterImpactAngle = 0.0; - explodeOnWaterImpact = true; - deflectionOnWaterImpact = 0.0; - fizzleUnderwaterMS = -1; + dryVelocity = 85.0; // z0dd - ZOD, 4/25/02. Was 50. Velocity of projectile out of water + wetVelocity = -1; + velInheritFactor = 1.0; + fizzleTimeMS = 4000; + lifetimeMS = 2500; // z0dd - ZOD, 4/25/02. Was 6000 + explodeOnDeath = true; + reflectOnWaterImpactAngle = 0.0; + explodeOnWaterImpact = true; + deflectionOnWaterImpact = 0.0; + fizzleUnderwaterMS = -1; - activateDelayMS = 100; + activateDelayMS = 100; - scale = "3.0 3.0 3.0"; - numFlares = 30; - flareColor = "0.1 0.3 1.0"; - flareModTexture = "flaremod"; - flareBaseTexture = "flarebase"; + scale = "3.0 3.0 3.0"; + numFlares = 30; + flareColor = "0.1 0.3 1.0"; + flareModTexture = "flaremod"; + flareBaseTexture = "flarebase"; }; -function DemonMotherCreate(%pos){ - %obj = new player(){ - Datablock = "DemonMotherZombieArmor"; - }; - %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 DemonMotherZombieArmor::AI(%datablock, %zombie) { + //Fork off to both of the AI functions + %zombie.defenseLoop = %datablock.defenseLoop(%zombie); + %zombie.aiRoutine = %datablock.AIRoutine(%zombie); } -function DemonMotherInitiate(%obj){ - if(!isObject(%obj)) - 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); - } - } +function DemonMotherZombieArmor::defenseLoop(%datablock, %zombie) { + if(!isObject(%zombie) || %zombie.getState() $= "dead") { + return; } - else if(%dist > 100){ - %rand = getrandom(1,120); - if(%rand == 94) //please, dont ask why i choose this number, it just poped in my head - DemonMotherDemonSpawn(%obj); - else - DemonMotherMoveToTarget(%obj,%searchobject); + %pos = %zombie.getposition(); + InitContainerRadiusSearch(%pos, 250, $TypeMasks::ProjectileObjectType); + while ((%searchObject = containerSearchNext()) != 0) { + %projpos = %searchobject.getPosition(); + %dist = vectorDist(%pos, %projpos); + if(%dist <= 100) { + if(%searchobject.lastpos) { + %zombie.playShieldEffect("1 1 1"); + %searchobject.delete(); + } + } + else { + %searchobject.lastpos = %projpos; + } } - else - DemonMotherMoveToTarget(%obj,%searchobject); - - %obj.justshot = 0; - %obj.justmelee = 0; - } - else{ - schedule(500, 0, "DemonMotherThink", %obj); - } + %zombie.defenseLoop = %datablock.schedule(50, "defenseLoop", %zombie); } -function DemonMotherDefense(%obj){ - if(!isObject(%obj)) - return; - if(%obj.getState() $= "dead") - 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(); +function DemonMotherZombieArmor::AIRoutine(%datablock, %zombie) { + if(!isObject(%zombie) || %zombie.getState() $= "dead") { + %zombie.throwWeapon(1); + return; } - else - %searchobject.lastpos = %projpos; - } - schedule(50, "DemonMotherDefense", %obj); + %pos = %zombie.getWorldBoxCenter(); + %closestClient = TWM2Lib_Zombie_Core("lookForTarget", %zombie); + %closestDistance = getWord(%closestClient, 1); + %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){ - if(!isObject(%obj)) - return; - if(%obj.getState() $= "dead") - return; - if(!isObject(%target)){ - DemonMotherThink(%obj); - return; - } - FaceTarget(%obj,%target); - if(%obj.chargecount $= "") - %obj.chargecount = 0; - %charge = new ParticleEmissionDummy() - { - position = %obj.getMuzzlePoint(4); - dataBlock = "defaultEmissionDummy"; - emitter = "BurnEmitter"; - }; - MissionCleanup.add(%charge); - %charge.schedule(100, "delete"); - - if(%obj.chargecount == 7){ - %vec = vectorsub(%target.getworldboxcenter(),%obj.getMuzzlePoint(4)); - %vec = vectoradd(%vec, vectorscale(%target.getvelocity(),vectorlen(%vec)/100)); - %p = new TracerProjectile() - { - dataBlock = LZombieAcidBall; - initialDirection = %vec; - initialPosition = %obj.getMuzzlePoint(4); - sourceObject = %obj; - sourceSlot = 6; - }; - } - if(%obj.chargecount == 9){ - %vec = vectorsub(%target.getworldboxcenter(),%obj.getMuzzlePoint(4)); - %vec = vectoradd(%vec, vectorscale(%target.getvelocity(),vectorlen(%vec)/100)); - %p = new TracerProjectile() - { - dataBlock = LZombieAcidBall; - initialDirection = %vec; - initialPosition = %obj.getMuzzlePoint(4); - sourceObject = %obj; - sourceSlot = 6; - }; - } - - if(%obj.chargecount <= 9){ - schedule(100, 0, "DemonMotherSpermAttack", %obj, %target); - %obj.chargecount++; - } - else{ - %obj.chargecount = 0; - %obj.justshot = 1; - DemonMotherThink(%obj); - } +function DemonMotherZombieArmor::AttackFunction(%datablock, %zombie, %attackFunction, %target) { + if(!isObject(%zombie) || %zombie.getState() $= "dead") { + return; + } + switch$(%attackFunction) { + case "AcidStrike": + if(!isObject(%target) || %target.getState() $= "dead") { + %zombie.aiRoutine = %datablock.AIRoutine(%zombie); + return; + } + %vector = TWM2Lib_Zombie_Core("zombieGetFacingDirection", %zombie, %target.getPosition()); + if(%zombie.chargeCount $= "") { + %zombie.chargeCount = 0; + } + %chargeEmitter = new ParticleEmissionDummy() { + datablock = "defaultEmissionDummy"; + emitter = "BurnEmitter"; + position = %zombie.getMuzzlePoint(4); + }; + MissionCleanup.add(%chargeEmitter); + %chargeEmitter.schedule(100, "delete"); + // + if(%zombie.chargeCount == 7 || %zombie.chargeCount == 9) { + %vec = vectorSub(%target.getWorldBoxCenter(), %zombie.getMuzzlePoint(4)); + %vec = vectorAdd(%vec, vectorScale(%target.getVelocity(), vectorLen(%vec) / 100)); + %p = new TracerProjectile() { + dataBlock = LZombieAcidBall; + initialDirection = %vec; + initialPosition = %zombie.getMuzzlePoint(4); + sourceObject = %zombie; + sourceSlot = 6; + }; + } + if(%obj.chargecount <= 9) { + %zombie.attackFunction = %datablock.schedule(100, 0, "AttackFunction", %zombie, %attackFunction, %target); + %zombie.chargeCount++; + } + else { + %zombie.chargecount = 0; + %zombie.justshot = 1; + %zombie.aiRoutine = %datablock.AIRoutine(%zombie); + } + + case "FireLunge": + + case "StrafeMove": + + case "FlyAttack": + + case "Firestorm": + + case "MissileStrike": + + case "PlasmaStrike": + + case "ChargeAttack": + } } function DemonMotherLungAttack(%obj,%target){ @@ -588,13 +582,3 @@ function DemonMotherDemonSpawn(%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)); -} diff --git a/scripts/TWM2/Zombie/ZombieTypes/DemonUltra.cs b/scripts/TWM2/Zombie/ZombieTypes/DemonUltra.cs index e2d1a9c..942a74e 100644 --- a/scripts/TWM2/Zombie/ZombieTypes/DemonUltra.cs +++ b/scripts/TWM2/Zombie/ZombieTypes/DemonUltra.cs @@ -1,29 +1,33 @@ -datablock PlayerData(DemonUltraZombieArmor) : LightMaleHumanArmor -{ - runForce = 60.20 * 90; - runEnergyDrain = 0.0; - minRunEnergy = 10; - maxForwardSpeed = 9; - maxBackwardSpeed = 7; - maxSideSpeed = 7; +datablock PlayerData(DemonUltraZombieArmor) : LightMaleHumanArmor { + runForce = 60.20 * 90; + runEnergyDrain = 0.0; + minRunEnergy = 10; + maxForwardSpeed = 9; + maxBackwardSpeed = 7; + maxSideSpeed = 7; - jumpForce = 14.0 * 90; + jumpForce = 14.0 * 90; - maxDamage = 2.8; - minImpactSpeed = 35; - shapeFile = "heavy_male.dts"; - jetEmitter = BiodermArmorJetEmitter; - jetEffect = BiodermArmorJetEffect; + maxDamage = 2.8; + minImpactSpeed = 35; + shapeFile = "heavy_male.dts"; + jetEmitter = BiodermArmorJetEmitter; + jetEffect = BiodermArmorJetEffect; - debrisShapeName = "bio_player_debris.dts"; + debrisShapeName = "bio_player_debris.dts"; - //Foot Prints - decalData = LightBiodermFootprint; - decalOffset = 0.3; + //Foot Prints + decalData = LightBiodermFootprint; + 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[Mine] = 0; diff --git a/scripts/TWM2/Zombie/ZombieTypes/EliteDemon.cs b/scripts/TWM2/Zombie/ZombieTypes/EliteDemon.cs index 3729dd1..a503fc7 100644 --- a/scripts/TWM2/Zombie/ZombieTypes/EliteDemon.cs +++ b/scripts/TWM2/Zombie/ZombieTypes/EliteDemon.cs @@ -1,23 +1,26 @@ -datablock PlayerData(EliteDemonZombieArmor) : LightMaleHumanArmor -{ - boundingBox = "1.63 1.63 2.6"; - maxDamage = 5.0; - minImpactSpeed = 35; - shapeFile = "bioderm_heavy.dts"; +datablock PlayerData(EliteDemonZombieArmor) : LightMaleHumanArmor { + boundingBox = "1.63 1.63 2.6"; + maxDamage = 5.0; + minImpactSpeed = 35; + shapeFile = "bioderm_heavy.dts"; - debrisShapeName = "bio_player_debris.dts"; + debrisShapeName = "bio_player_debris.dts"; - //Foot Prints - decalData = HeavyBiodermFootprint; - decalOffset = 0.4; + //Foot Prints + decalData = HeavyBiodermFootprint; + decalOffset = 0.4; - waterBreathSound = WaterBreathBiodermSound; + waterBreathSound = WaterBreathBiodermSound; - damageScale[$DamageType::M1700] = 2.0; - damageScale[$DamageType::Burn] = 0.1; - damageScale[$DamageType::Fire] = 0.1; - damageScale[$DamageType::Napalm] = 0.1; - damageScale[$DamageType::Plasma] = 0.1; + 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::Burn] = 0.1; + damageScale[$DamageType::Fire] = 0.1; + damageScale[$DamageType::Napalm] = 0.1; + damageScale[$DamageType::Plasma] = 0.1; max[RepairKit] = 0; max[Mine] = 0; diff --git a/scripts/TWM2/Zombie/ZombieTypes/Lord.cs b/scripts/TWM2/Zombie/ZombieTypes/Lord.cs index c0df6de..44e0522 100644 --- a/scripts/TWM2/Zombie/ZombieTypes/Lord.cs +++ b/scripts/TWM2/Zombie/ZombieTypes/Lord.cs @@ -1,3 +1,5 @@ +$TWM2::ArmorHasCollisionFunction[LordZombieArmor] = false; + datablock AudioProfile(ZLordFootSound) { filename = "fx/weapons/grenade_explode_UW.wav"; description = AudioBomb3d; @@ -29,7 +31,16 @@ datablock PlayerData(LordZombieArmor) : HeavyMaleBiodermArmor { LFootSnowSound = 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[Mine] = 0; diff --git a/scripts/TWM2/Zombie/ZombieTypes/Normal.cs b/scripts/TWM2/Zombie/ZombieTypes/Normal.cs index 82f1292..bfe4ccc 100644 --- a/scripts/TWM2/Zombie/ZombieTypes/Normal.cs +++ b/scripts/TWM2/Zombie/ZombieTypes/Normal.cs @@ -1,3 +1,5 @@ +$TWM2::ArmorHasCollisionFunction[ZombieArmor] = true; + datablock PlayerData(ZombieArmor) : LightMaleHumanArmor { runForce = 60.20 * 90; runEnergyDrain = 0.0; @@ -22,13 +24,45 @@ datablock PlayerData(ZombieArmor) : LightMaleHumanArmor { 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[Mine] = 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) { //Normal zombies do not employ any "AI" other than target and move, fork off to main move function %datablock.Move(%zombie); diff --git a/scripts/TWM2/Zombie/ZombieTypes/Rapier.cs b/scripts/TWM2/Zombie/ZombieTypes/Rapier.cs index 567ca7e..fb2e75e 100644 --- a/scripts/TWM2/Zombie/ZombieTypes/Rapier.cs +++ b/scripts/TWM2/Zombie/ZombieTypes/Rapier.cs @@ -1,3 +1,5 @@ +$TWM2::ArmorHasCollisionFunction[RapierZombieArmor] = true; + datablock PlayerData(RapierZombieArmor) : LightMaleBiodermArmor { maxDamage = 1.0; minImpactSpeed = 50; @@ -17,8 +19,13 @@ datablock PlayerData(RapierZombieArmor) : LightMaleBiodermArmor { 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::CrimsonHawk] = 1.9; max[RepairKit] = 0; max[Mine] = 0; @@ -57,6 +64,41 @@ datablock ShapeBaseImageData(ZWingAltImage2) { 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) { //No special AI here, we'll let %block.move() handle it... if(!isObject(%zombie) || %zombie.getState() $= "dead") { diff --git a/scripts/TWM2/Zombie/ZombieTypes/Ravager.cs b/scripts/TWM2/Zombie/ZombieTypes/Ravager.cs index 9eb2cc5..88d08f0 100644 --- a/scripts/TWM2/Zombie/ZombieTypes/Ravager.cs +++ b/scripts/TWM2/Zombie/ZombieTypes/Ravager.cs @@ -1,15 +1,49 @@ +$TWM2::ArmorHasCollisionFunction[RavagerZombieArmor] = true; + datablock PlayerData(RavagerZombieArmor) : LightMaleBiodermArmor { maxDamage = 1.0; minImpactSpeed = 50; 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[Mine] = 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 // TWM2 3.9.2 // - Old Behavior: Ground crawling zombie with fast speed that would ram into targets diff --git a/scripts/TWM2/Zombie/ZombieTypes/Shifter.cs b/scripts/TWM2/Zombie/ZombieTypes/Shifter.cs index ec82bff..9d8c558 100644 --- a/scripts/TWM2/Zombie/ZombieTypes/Shifter.cs +++ b/scripts/TWM2/Zombie/ZombieTypes/Shifter.cs @@ -1,34 +1,37 @@ -datablock PlayerData(ShifterZombieArmor) : LightMaleHumanArmor -{ - runForce = 60.20 * 90; - runEnergyDrain = 0.0; - minRunEnergy = 10; - maxForwardSpeed = 9; - maxBackwardSpeed = 7; - maxSideSpeed = 7; +datablock PlayerData(ShifterZombieArmor) : LightMaleHumanArmor { + runForce = 60.20 * 90; + runEnergyDrain = 0.0; + minRunEnergy = 10; + maxForwardSpeed = 9; + maxBackwardSpeed = 7; + maxSideSpeed = 7; - jumpForce = 14.0 * 90; + jumpForce = 14.0 * 90; - maxDamage = 2.8; - minImpactSpeed = 35; - shapeFile = "bioderm_light.dts"; - jetEmitter = BiodermArmorJetEmitter; - jetEffect = BiodermArmorJetEffect; + maxDamage = 2.8; + minImpactSpeed = 35; + shapeFile = "bioderm_light.dts"; + jetEmitter = BiodermArmorJetEmitter; + jetEffect = BiodermArmorJetEffect; - debrisShapeName = "bio_player_debris.dts"; + debrisShapeName = "bio_player_debris.dts"; - //Foot Prints - decalData = LightBiodermFootprint; - decalOffset = 0.3; + //Foot Prints + decalData = LightBiodermFootprint; + 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[Mine] = 0; max[Grenade] = 0; - }; function ShifterZombiemovetotarget(%zombie){ diff --git a/scripts/TWM2/Zombie/ZombieTypes/Slingshot.cs b/scripts/TWM2/Zombie/ZombieTypes/Slingshot.cs index 7ca68a6..abc0c7d 100644 --- a/scripts/TWM2/Zombie/ZombieTypes/Slingshot.cs +++ b/scripts/TWM2/Zombie/ZombieTypes/Slingshot.cs @@ -1,10 +1,14 @@ -datablock PlayerData(SSZombieArmor) : LightMaleBiodermArmor -{ - maxDamage = 1.0; - minImpactSpeed = 50; - speedDamageScale = 0.015; +datablock PlayerData(SSZombieArmor) : LightMaleBiodermArmor { + maxDamage = 1.0; + minImpactSpeed = 50; + 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[Mine] = 0; diff --git a/scripts/TWM2/Zombie/ZombieTypes/Sniper.cs b/scripts/TWM2/Zombie/ZombieTypes/Sniper.cs index 3e40882..091f1ad 100644 --- a/scripts/TWM2/Zombie/ZombieTypes/Sniper.cs +++ b/scripts/TWM2/Zombie/ZombieTypes/Sniper.cs @@ -1,18 +1,23 @@ datablock PlayerData(SniperZombieArmor) : LightMaleHumanArmor { - boundingBox = "1.63 1.63 2.6"; - maxDamage = 2.5; - minImpactSpeed = 35; - shapeFile = "bioderm_heavy.dts"; + boundingBox = "1.63 1.63 2.6"; + maxDamage = 2.5; + minImpactSpeed = 35; + shapeFile = "bioderm_heavy.dts"; - debrisShapeName = "bio_player_debris.dts"; + debrisShapeName = "bio_player_debris.dts"; - //Foot Prints - decalData = HeavyBiodermFootprint; - decalOffset = 0.4; + //Foot Prints + decalData = HeavyBiodermFootprint; + 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[Mine] = 0; @@ -20,17 +25,17 @@ datablock PlayerData(SniperZombieArmor) : LightMaleHumanArmor { }; datablock ShapeBaseImageData(ZSniperImage1) { - shapeFile = "weapon_sniper.dts"; - emap = true; - armThread = looksn; + shapeFile = "weapon_sniper.dts"; + emap = true; + armThread = looksn; }; datablock ShapeBaseImageData(ZSniperImage2) { - shapeFile = "weapon_targeting.dts"; - offset = "0.0 1.0 0.41"; - rotation = "90 0 0 90"; - armThread = looksn; - emap = true; + shapeFile = "weapon_targeting.dts"; + offset = "0.0 1.0 0.41"; + rotation = "90 0 0 90"; + armThread = looksn; + emap = true; }; function SniperZombiemovetotarget(%zombie){ diff --git a/scripts/TWM2/Zombie/ZombieTypes/Summoner.cs b/scripts/TWM2/Zombie/ZombieTypes/Summoner.cs index 446ee16..2546c56 100644 --- a/scripts/TWM2/Zombie/ZombieTypes/Summoner.cs +++ b/scripts/TWM2/Zombie/ZombieTypes/Summoner.cs @@ -1,29 +1,33 @@ -datablock PlayerData(SummonerZombieArmor) : LightMaleHumanArmor -{ - runForce = 60.20 * 90; - runEnergyDrain = 0.0; - minRunEnergy = 10; - maxForwardSpeed = 9; - maxBackwardSpeed = 7; - maxSideSpeed = 7; +datablock PlayerData(SummonerZombieArmor) : LightMaleHumanArmor { + runForce = 60.20 * 90; + runEnergyDrain = 0.0; + minRunEnergy = 10; + maxForwardSpeed = 9; + maxBackwardSpeed = 7; + maxSideSpeed = 7; - jumpForce = 14.0 * 90; + jumpForce = 14.0 * 90; - maxDamage = 2.8; - minImpactSpeed = 35; - shapeFile = "light_male.dts"; - jetEmitter = BiodermArmorJetEmitter; - jetEffect = BiodermArmorJetEffect; + maxDamage = 2.8; + minImpactSpeed = 35; + shapeFile = "light_male.dts"; + jetEmitter = BiodermArmorJetEmitter; + jetEffect = BiodermArmorJetEffect; - debrisShapeName = "bio_player_debris.dts"; + debrisShapeName = "bio_player_debris.dts"; - //Foot Prints - decalData = LightBiodermFootprint; - decalOffset = 0.3; + //Foot Prints + decalData = LightBiodermFootprint; + 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[Mine] = 0; diff --git a/scripts/TWM2/Zombie/ZombieTypes/VolatileRavager.cs b/scripts/TWM2/Zombie/ZombieTypes/VolatileRavager.cs index 2b8bd70..db1d642 100644 --- a/scripts/TWM2/Zombie/ZombieTypes/VolatileRavager.cs +++ b/scripts/TWM2/Zombie/ZombieTypes/VolatileRavager.cs @@ -1,9 +1,14 @@ datablock PlayerData(VolatileRavagerZombieArmor) : LightMaleBiodermArmor { - maxDamage = 1.0; - minImpactSpeed = 50; - speedDamageScale = 0.015; + maxDamage = 1.0; + minImpactSpeed = 50; + 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[Mine] = 0; @@ -11,8 +16,8 @@ datablock PlayerData(VolatileRavagerZombieArmor) : LightMaleBiodermArmor { }; datablock ShapeBaseImageData(ZExplosivePack) { - shapeFile = "pack_upgrade_satchel.dts"; - emap = false; + shapeFile = "pack_upgrade_satchel.dts"; + emap = false; }; function VRavZombiemovetotarget(%zombie){ diff --git a/scripts/TWM2/Zombie/ZombieTypes/Wraith.cs b/scripts/TWM2/Zombie/ZombieTypes/Wraith.cs index fa7cd5f..8a95235 100644 --- a/scripts/TWM2/Zombie/ZombieTypes/Wraith.cs +++ b/scripts/TWM2/Zombie/ZombieTypes/Wraith.cs @@ -1,23 +1,27 @@ -datablock PlayerData(WraithZombieArmor) : LightMaleHumanArmor -{ - boundingBox = "1.63 1.63 2.6"; - maxDamage = 4.0; - minImpactSpeed = 35; - shapeFile = "bioderm_heavy.dts"; +datablock PlayerData(WraithZombieArmor) : LightMaleHumanArmor { + boundingBox = "1.63 1.63 2.6"; + maxDamage = 4.0; + minImpactSpeed = 35; + shapeFile = "bioderm_heavy.dts"; - //shields mo-fo's - shieldHealthCharge = 0.05; - maxShieldLevel = 4.0; + //shields mo-fo's + shieldHealthCharge = 0.05; + maxShieldLevel = 4.0; - debrisShapeName = "bio_player_debris.dts"; + debrisShapeName = "bio_player_debris.dts"; - //Foot Prints - decalData = HeavyBiodermFootprint; - decalOffset = 0.4; + //Foot Prints + decalData = HeavyBiodermFootprint; + 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[Mine] = 0; diff --git a/scripts/damageTypes.cs b/scripts/damageTypes.cs index e9da5a3..e85d774 100644 --- a/scripts/damageTypes.cs +++ b/scripts/damageTypes.cs @@ -57,7 +57,7 @@ $DamageType::ZombieL = 58; $DamageType::Pistol = 59; $DamageType::Melee = 60; $DamageType::S3 = 61; -$DamageType::W1700 = 62; +$DamageType::M1700 = 62; $DamageType::G41 = 63; $DamageType::R700 = 64; $DamageType::MP26 = 65; @@ -75,14 +75,30 @@ $DamageType::deserteagle = 76; $DamageType::FissionBomb = 77; $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 -$DamageType::Water = 97; - +$DamageType::Water = 997; //Tinman - used in Hunters for cheap bastards ;) -$DamageType::NexusCamping = 98; - +$DamageType::NexusCamping = 998; // MES -- added so CTRL-K can get a distinctive message -$DamageType::Suicide = 99; +$DamageType::Suicide = 999; // Etc, etc. @@ -120,14 +136,14 @@ $DamageTypeText[30] = 'tank mortar'; $DamageTypeText[31] = 'satchel charge'; $DamageTypeText[32] = 'MPB missile'; $DamageTypeText[33] = 'lighting'; -$DamageTypeText[35] = 'ForceField'; +$DamageTypeText[35] = 'Force Field'; $DamageTypeText[36] = 'Crash'; $DamageTypeText[50] = 'Meteor'; $DamageTypeText[51] = 'Cursing'; $DamageTypeText[52] = 'Idiocy'; -$DamageTypeText[53] = 'SuperChaingun'; -$DamageTypeText[54] = 'KillerFog'; +$DamageTypeText[53] = 'Super Chaingun'; +$DamageTypeText[54] = 'Killer Fog'; $DamageTypeText[55] = 'Zombie'; $DamageTypeText[56] = 'ZAcid'; @@ -144,18 +160,24 @@ $DamageTypeText[66] = 'Pg700'; $DamageTypeText[67] = 'FellOff'; $DamageTypeText[68] = 'M1'; $DamageTypeText[69] = 'RP432'; -$DamageTypeText[70] = 'BladeOfVengance'; +$DamageTypeText[70] = 'Blade Of Vengance'; $DamageTypeText[71] = 'RPG'; -$DamageTypeText[72] = 'GravBolt'; -$DamageTypeText[73] = 'LaserRifle'; +$DamageTypeText[72] = 'Grav Bolt'; +$DamageTypeText[73] = 'Laser Rifle'; $DamageTypeText[74] = 'Burn'; $DamageTypeText[75] = 'SA2400'; -$DamageTypeText[76] = 'deserteagle'; -$DamageTypeText[77] = 'FissionBomb'; -$DamageTypeText[78] = 'RapierShield'; +$DamageTypeText[76] = 'desert eagle'; +$DamageTypeText[77] = 'Fission Bomb'; +$DamageTypeText[78] = 'Rapier Shield'; -$DamageTypeText[98] = 'nexus camping'; -$DamageTypeText[99] = 'suicide'; +$DamageTypeText[79] = 'Javelin'; +$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 ##### diff --git a/scripts/deathMessages.cs b/scripts/deathMessages.cs index 62334eb..b53f15a 100644 --- a/scripts/deathMessages.cs +++ b/scripts/deathMessages.cs @@ -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, 4] = '\c0%1 engulfs %2self in flames.'; -$DeathMessageSelfKill[$DamageType::FissionBomb, 0] = '\c0%1 Unleashed a fission bomb.'; -$DeathMessageSelfKill[$DamageType::FissionBomb, 1] = '\c0%1 Unleashed a fission bomb.'; -$DeathMessageSelfKill[$DamageType::FissionBomb, 2] = '\c0%1 Unleashed a fission bomb.'; -$DeathMessageSelfKill[$DamageType::FissionBomb, 3] = '\c0%1 Unleashed a fission bomb.'; -$DeathMessageSelfKill[$DamageType::FissionBomb, 4] = '\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 stared a bit too long at the bright fission bomb flash.'; +$DeathMessageSelfKill[$DamageType::FissionBomb, 2] = '\c0%1 pushed the big red button, and then didn\'t run.'; +$DeathMessageSelfKill[$DamageType::FissionBomb, 3] = '\c0%1 forgot to execute the third step of fission bomb operation, running.'; +$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 $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::SuperChaingun, 0] = '\c0%4 TEAMKILLED %1 with a super chaingun!'; $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::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!'; @@ -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::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::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::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::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 $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, 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, 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, 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, 2] = '\c0%4 utilizes advanced RSA Laser Technology on %1'; -$DeathMessage[$DamageType::LaserRifle, 3] = '\c0%4 burns holes into %1 from %6 RSA laser rifle.'; +$DeathMessage[$DamageType::LaserRifle, 2] = '\c0%4 utilizes advanced Laser Technology on %1'; +$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::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::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, 2] = '\c0%4 uses the most powerful pistol on %1'; +$DeathMessage[$DamageType::deserteagle, 1] = '\c0%4 blasts a pistol shot that %1 will never forget.'; +$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, 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, 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, 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.'; \ No newline at end of file diff --git a/scripts/inventoryHud.cs b/scripts/inventoryHud.cs index c05885c..6971373 100644 --- a/scripts/inventoryHud.cs +++ b/scripts/inventoryHud.cs @@ -38,7 +38,7 @@ $NameToInv["Tech"] = "Tech"; $InvWeapon[0] = "S3 Combat Rifle"; $InvWeapon[1] = "G41 S.A. Rifle"; $InvWeapon[2] = "M4A1"; -$InvWeapon[3] = "RSA Laser Rifle"; +$InvWeapon[3] = "UR-22 Laser Rifle"; $InvWeapon[4] = "Sh4d3 Rifle"; $InvWeapon[5] = "LUST Ion Rifle"; $InvWeapon[6] = "Pulse Rifle"; @@ -95,7 +95,7 @@ $NameToInv["LX53 AV Launcher"] = "MissileLauncher"; $NameToInv["RP-432 MG"] = "RP432"; $NameToInv["Mini-Chaingun"] = "MiniChaingun"; $NameToInv["Wp400 Shotgun"] = "Wp400"; -$NameToInv["RSA Laser Rifle"] = "lasergun"; +$NameToInv["UR-22 Laser Rifle"] = "lasergun"; $NameToInv["RPG-7"] = "RPG"; $NameToInv["Manipulator Tool"] = "EditTool"; $NameToInv["LUX-4 Ion Launcher"] = "IonLauncher"; diff --git a/scripts/player.cs b/scripts/player.cs index 714165a..a3e4b06 100644 --- a/scripts/player.cs +++ b/scripts/player.cs @@ -2691,462 +2691,366 @@ $ammoType[47] = "Model1887Ammo"; $ammoType[48] = "NapalmAmmo"; -function Armor::onCollision(%this,%obj,%col,%forceVehicleNode) -{ - if (%obj.getState() $= "Dead") - 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; - } +function Armor::onCollision(%this, %obj, %col, %forceVehicleNode) { + if (%obj.getState() $= "Dead") { + return; } - //if the player is an AI, he should snap to the mount points in node order, - //to ensure they mount the turret before the passenger seat, regardless of where they collide... - if (!%obj.isZombie && %obj.client.isAIControlled()) - { - %transform = %col.getTransform(); + %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") { - //either the AI is *required* to pilot, or they'll pick the first available passenger seat - if (%client.pilotVehicle) - { - //make sure the bot is in light armor - if (%client.player.getArmorSize() $= "Light") - { - //make sure the pilot seat is empty - if (!%col.getMountNodeObject(0)) - %node = 0; - } - } - else - %node = findAIEmptySeat(%col, %obj); - } - else - %node = findEmptySeat(%col, %obj, %forceVehicleNode); + // 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; + } + } - //now mount the player in the vehicle - if(%node >= 0) - { - // players can't be pilots, bombardiers or turreteers if they have - // "large" packs -- stations, turrets, turret barrels - if(hasLargePack(%obj)) { - // 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 the player is an AI, he should snap to the mount points in node order, + //to ensure they mount the turret before the passenger seat, regardless of where they collide... + if (!%obj.isZombie && %obj.client.isAIControlled()) { + %transform = %col.getTransform(); + //either the AI is *required* to pilot, or they'll pick the first available passenger seat + if (%client.pilotVehicle) { + //make sure the bot is in light armor + if (%client.player.getArmorSize() $= "Light") { + //make sure the pilot seat is empty + if (!%col.getMountNodeObject(0)) { + %node = 0; + } + } + } + else { + %node = findAIEmptySeat(%col, %obj); + } + } + else { + %node = findEmptySeat(%col, %obj, %forceVehicleNode); + } - commandToClient(%obj.client,'SetDefaultVehicleKeys', true); - //If pilot or passenger then bind a few extra keys - if(%node == 0) - commandToClient(%obj.client,'SetPilotVehicleKeys', true); - else - commandToClient(%obj.client,'SetPassengerVehicleKeys', true); + //now mount the player in the vehicle + if(%node >= 0) { + // players can't be pilots, bombardiers or turreteers if they have + // "large" packs -- stations, turrets, turret barrels + if(hasLargePack(%obj)) { + // 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) - %col.lastWeapon = ( %col.getMountedImage($WeaponSlot) == 0 ) ? "" : %col.getMountedImage($WeaponSlot).getName().item; - else - %col.lastWeapon = %obj.lastWeapon; + commandToClient(%obj.client,'SetDefaultVehicleKeys', true); + //If pilot or passenger then bind a few extra keys + if(%node == 0) { + 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.playAudio(0, MountVehicleSound); - %obj.mVehicle = %col; + %col.mountObject(%obj,%node); + %col.playAudio(0, MountVehicleSound); + %obj.mVehicle = %col; // if player is repairing something, stop it - if(%obj.repairing) + if(%obj.repairing) { stopRepairing(%obj); - - //this will setup the huds as well... - %dataBlock.playerMounted(%col,%obj, %node); - } - } + } + //this will setup the huds as well... + %dataBlock.playerMounted(%col, %obj, %node); + } + } // TODO - keep these up to date else if (%className $= "wall" || %className $= "wwall" || %className $= "spine" || %className $= "mspine" || %className $= "floor") { %obj.playAudio(0,(GetRandom()*2 >1) ? LFootMediumMetalSound : RFootMediumMetalSound); %obj.lastDepCol = %col; %obj.lastDepColPos = %obj.getPosition(); - if (%className $= "wall") - doorfunction(%obj,%col); + if (%className $= "wall") { + doorfunction(%obj, %col); + } } - else if (%className $= "Armor") { - // player has collided with another player - if(%obj.isZombie) { - %objiszomb = 1; - } - else { - %objiszomb = 0; - } - if(%col.onfire == 1 && %obj.onfire != 1 && !%obj.rapierShield){ - %obj.maxfirecount = (%col.maxfirecount - %col.firecount); - %obj.onfire = 1; - schedule(10, %obj, "burnloop", %obj); - } - if(%col.getState() $= "Dead" && !%objiszomb) { - %obj.lasttouchedcorpse = %col; - %gotSomething = false; - // it's corpse-looting time! - // weapons -- don't pick up more than you are allowed to carry! - for(%i = 0; ( %obj.weaponCount < %obj.getDatablock().maxWeapons ) && $InvWeapon[%i] !$= ""; %i++) - { - %weap = $NameToInv[$InvWeapon[%i]]; - if ( %col.hasInventory( %weap ) ) - { - if ( %obj.incInventory(%weap, 1) > 0 ) - { - %col.decInventory(%weap, 1); - %gotSomething = true; - messageClient(%obj.client, 'MsgItemPickup', '\c0You picked up %1.', %weap.pickUpName); - } - //New Clip Stuff - %WImg = %weap @ "Image"; //I love how there are so many ways - //To get The WeaponImage with only - //Ammo or NameToInv :p -Phantom - %ClipsLeft = %obj.ClipCount[%WImg.ClipName]; - %MaxClips = %WImg.InitialClips; //Initial == Max? - %ColClipsLeft = %col.ClipCount[%WImg.ClipName]; - //AHA! Pickup time - if(%ClipsLeft < %MaxClips) { - %clipsToAdd = %MaxClips - %ClipsLeft; - //this if checks the dead player's remaining clips - //If needed is more than what we have, we go to the - //else, otherwise, we add it. - if(%ColClipsLeft > 1 && (%ColClipsLeft - %clipsToAdd >= 0)) { - %ClipPickUpName = %WImg.ClipPickupName[%WImg.ClipName]; - %col.ClipCount[%WImg.ClipName] -= %clipsToAdd; - %obj.ClipCount[%WImg.ClipName] += %clipsToAdd; - %GotSomething = true; - messageClient(%obj.client, 'MsgItemPickup', "\c0You picked up "@%ClipPickUpName@"."); - //check if reload needs to be done? - - } - else { - %clipsToAdd = %ColClipsLeft; - %ClipPickUpName = %WImg.ClipPickupName[%WImg.ClipName]; - %col.ClipCount[%WImg.ClipName] -= %clipsToAdd; - %obj.ClipCount[%WImg.ClipName] += %clipsToAdd; - %GotSomething = true; - messageClient(%obj.client, 'MsgItemPickup', "\c0You picked up "@%ClipPickUpName@"."); - } - } - } - } - // targeting laser: - if ( %col.hasInventory( "TargetingLaser" ) ) - { - if ( %obj.incInventory( "TargetingLaser", 1 ) > 0 ) - { - %col.decInventory( "TargetingLaser", 1 ); - %gotSomething = true; - messageClient( %obj.client, 'MsgItemPickup', '\c0You picked up a targeting laser.' ); - } - } - // ammo - for(%j = 0; $ammoType[%j] !$= ""; %j++) - { - %ammoAmt = %col.inv[$ammoType[%j]]; - if(%ammoAmt) - { - // incInventory returns the amount of stuff successfully grabbed - %grabAmt = %obj.incInventory($ammoType[%j], %ammoAmt); - if(%grabAmt > 0) - { - %col.decInventory($ammoType[%j], %grabAmt); - %gotSomething = true; - messageClient(%obj.client, 'MsgItemPickup', '\c0You picked up %1.', $ammoType[%j].pickUpName); - %obj.client.setWeaponsHudAmmo($ammoType[%j], %obj.getInventory($ammoType[%j])); - } - } - } - // figure out what type, if any, grenades the (live) player has - %playerGrenType = "None"; - for(%x = 0; $InvGrenade[%x] !$= ""; %x++) { - %gren = $NameToInv[$InvGrenade[%x]]; - %playerGrenAmt = %obj.inv[%gren]; - if(%playerGrenAmt > 0) - { - %playerGrenType = %gren; - break; - } - } - // grenades - for(%k = 0; $InvGrenade[%k] !$= ""; %k++) - { - %gren = $NameToInv[$InvGrenade[%k]]; - %corpseGrenAmt = %col.inv[%gren]; - // does the corpse hold any of this grenade type? - if(%corpseGrenAmt) - { - // can the player pick up this grenade type? - if((%playerGrenType $= "None") || (%playerGrenType $= %gren)) - { - %taken = %obj.incInventory(%gren, %corpseGrenAmt); - if(%taken > 0) - { - %col.decInventory(%gren, %taken); - %gotSomething = true; - messageClient(%obj.client, 'MsgItemPickup', '\c0You picked up %1.', %gren.pickUpName); - %obj.client.setInventoryHudAmount(%gren, %obj.getInventory(%gren)); - } - } - break; - } - } - // figure out what type, if any, mines the (live) player has - %playerMineType = "None"; - for(%y = 0; $InvMine[%y] !$= ""; %y++) - { - %mType = $NameToInv[$InvMine[%y]]; - %playerMineAmt = %obj.inv[%mType]; - if(%playerMineAmt > 0) - { - %playerMineType = %mType; - break; - } - } - // mines - for(%l = 0; $InvMine[%l] !$= ""; %l++) - { - %mine = $NameToInv[$InvMine[%l]]; - %mineAmt = %col.inv[%mine]; - if(%mineAmt) { - if((%playerMineType $= "None") || (%playerMineType $= %mine)) - { - %grabbed = %obj.incInventory(%mine, %mineAmt); - if(%grabbed > 0) - { - %col.decInventory(%mine, %grabbed); - %gotSomething = true; - messageClient(%obj.client, 'MsgItemPickup', '\c0You picked up %1.', %mine.pickUpName); - %obj.client.setInventoryHudAmount(%mine, %obj.getInventory(%mine)); - } - } - break; - } - } - // 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; + else if (%className $= "Armor") { + // player has collided with another player + if(%col.onfire == 1 && %obj.onfire != 1 && !%obj.rapierShield){ + %obj.maxfirecount = (%col.maxfirecount - %col.firecount); + %obj.onfire = 1; + schedule(10, %obj, "burnloop", %obj); + } + if(%col.getState() $= "Dead" && (!%obj.isZombie && !%col.isZombie)) { + %obj.lasttouchedcorpse = %col; + %gotSomething = false; + // it's corpse-looting time! + // weapons -- don't pick up more than you are allowed to carry! + for(%i = 0; ( %obj.weaponCount < %obj.getDatablock().maxWeapons ) && $InvWeapon[%i] !$= ""; %i++) { + %weap = $NameToInv[$InvWeapon[%i]]; + if ( %col.hasInventory( %weap ) ) { + if ( %obj.incInventory(%weap, 1) > 0 ) { + %col.decInventory(%weap, 1); + %gotSomething = true; + messageClient(%obj.client, 'MsgItemPickup', '\c0You picked up %1.', %weap.pickUpName); + } + //New Clip Stuff + %WImg = %weap @ "Image"; //I love how there are so many ways + //To get The WeaponImage with only + //Ammo or NameToInv :p -Phantom + %ClipsLeft = %obj.ClipCount[%WImg.ClipName]; + %MaxClips = %WImg.InitialClips; //Initial == Max? + %ColClipsLeft = %col.ClipCount[%WImg.ClipName]; + //AHA! Pickup time + if(%ClipsLeft < %MaxClips) { + %clipsToAdd = %MaxClips - %ClipsLeft; + //this if checks the dead player's remaining clips + //If needed is more than what we have, we go to the + //else, otherwise, we add it. + if(%ColClipsLeft > 1 && (%ColClipsLeft - %clipsToAdd >= 0)) { + %ClipPickUpName = %WImg.ClipPickupName[%WImg.ClipName]; + %col.ClipCount[%WImg.ClipName] -= %clipsToAdd; + %obj.ClipCount[%WImg.ClipName] += %clipsToAdd; + %GotSomething = true; + messageClient(%obj.client, 'MsgItemPickup', "\c0You picked up "@%ClipPickUpName@"."); + //check if reload needs to be done? + if(%col.inv[%WImg.ammo] == 0) { + AttemptReload(%WImg, %obj, $WeaponSlot); + } + } + else { + %clipsToAdd = %ColClipsLeft; + %ClipPickUpName = %WImg.ClipPickupName[%WImg.ClipName]; + %col.ClipCount[%WImg.ClipName] -= %clipsToAdd; + %obj.ClipCount[%WImg.ClipName] += %clipsToAdd; + %GotSomething = true; + messageClient(%obj.client, 'MsgItemPickup', "\c0You picked up "@%ClipPickUpName@"."); + } + } + } + } + // targeting laser: + if ( %col.hasInventory( "TargetingLaser" ) ) { + if ( %obj.incInventory( "TargetingLaser", 1 ) > 0 ) { + %col.decInventory( "TargetingLaser", 1 ); + %gotSomething = true; + messageClient( %obj.client, 'MsgItemPickup', '\c0You picked up a targeting laser.' ); + } + } + // ammo + for(%j = 0; $ammoType[%j] !$= ""; %j++) { + %ammoAmt = %col.inv[$ammoType[%j]]; + if(%ammoAmt) { + // incInventory returns the amount of stuff successfully grabbed + %grabAmt = %obj.incInventory($ammoType[%j], %ammoAmt); + if(%grabAmt > 0) { + %col.decInventory($ammoType[%j], %grabAmt); + %gotSomething = true; + messageClient(%obj.client, 'MsgItemPickup', '\c0You picked up %1.', $ammoType[%j].pickUpName); + %obj.client.setWeaponsHudAmmo($ammoType[%j], %obj.getInventory($ammoType[%j])); + } + } + } + // figure out what type, if any, grenades the (live) player has + %playerGrenType = "None"; + for(%x = 0; $InvGrenade[%x] !$= ""; %x++) { + %gren = $NameToInv[$InvGrenade[%x]]; + %playerGrenAmt = %obj.inv[%gren]; + if(%playerGrenAmt > 0) { + %playerGrenType = %gren; + break; + } + } + // grenades + for(%k = 0; $InvGrenade[%k] !$= ""; %k++) { + %gren = $NameToInv[$InvGrenade[%k]]; + %corpseGrenAmt = %col.inv[%gren]; + // does the corpse hold any of this grenade type? + if(%corpseGrenAmt) { + // can the player pick up this grenade type? + if((%playerGrenType $= "None") || (%playerGrenType $= %gren)) { + %taken = %obj.incInventory(%gren, %corpseGrenAmt); + if(%taken > 0) { + %col.decInventory(%gren, %taken); + %gotSomething = true; + messageClient(%obj.client, 'MsgItemPickup', '\c0You picked up %1.', %gren.pickUpName); + %obj.client.setInventoryHudAmount(%gren, %obj.getInventory(%gren)); + } + } + break; + } + } + // figure out what type, if any, mines the (live) player has + %playerMineType = "None"; + for(%y = 0; $InvMine[%y] !$= ""; %y++) { + %mType = $NameToInv[$InvMine[%y]]; + %playerMineAmt = %obj.inv[%mType]; + if(%playerMineAmt > 0) { + %playerMineType = %mType; + break; + } + } + // mines + for(%l = 0; $InvMine[%l] !$= ""; %l++) { + %mine = $NameToInv[$InvMine[%l]]; + %mineAmt = %col.inv[%mine]; + if(%mineAmt) { + if((%playerMineType $= "None") || (%playerMineType $= %mine)) { + %grabbed = %obj.incInventory(%mine, %mineAmt); + if(%grabbed > 0) { + %col.decInventory(%mine, %grabbed); + %gotSomething = true; + messageClient(%obj.client, 'MsgItemPickup', '\c0You picked up %1.', %mine.pickUpName); + %obj.client.setInventoryHudAmount(%mine, %obj.getInventory(%mine)); + } + } + break; + } + } + // 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 ($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); + // Phantom139: + // TWM2 3.9.2: Major cleaning of zombie logic + // All zombie damage on collision is now handled by the individual datablocks in the zombieTypes/*.cs files. + // These #'s can be tweaked via the ZombieCore.cs file in the globals list at the top. + else if($TWM2::ArmorHasCollisionFunction[%colarmortype]) { + %datablock.armorCollisionFunction(%col, %obj); } - else { - %obj.client.sex = "Male"; - %obj.client.voiceTag = addTaggedString("Male" @ %voiceNum); - setTargetVoice(%obj.client.target,%obj.client.voiceTag); + else if ($PlayerSnapTo == true) { + if (!isObject(%col.getMountedObject(0))) { + if (!isObject(%obj.getMountedObject(0)) || %obj.getMountedObject(0) != %col) { + %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) { diff --git a/scripts/weapons/Equipment/Javelin.cs b/scripts/weapons/Equipment/Javelin.cs index f582d27..1082022 100644 --- a/scripts/weapons/Equipment/Javelin.cs +++ b/scripts/weapons/Equipment/Javelin.cs @@ -1,58 +1,58 @@ datablock SeekerProjectileData(JavelinMissile) { - casingShapeName = "weapon_missile_casement.dts"; - projectileShapeName = "weapon_missile_projectile.dts"; - hasDamageRadius = true; - indirectDamage = 1.8; //Requires Lock - damageRadius = 18.0; - radiusDamageType = $DamageType::Missile; - kickBackStrength = 2000; - - ImageSource = "JavelinImage"; + casingShapeName = "weapon_missile_casement.dts"; + projectileShapeName = "weapon_missile_projectile.dts"; + hasDamageRadius = true; + indirectDamage = 1.8; //Requires Lock + damageRadius = 18.0; + radiusDamageType = $DamageType::Javelin; + kickBackStrength = 2000; - explosion = "SatchelMainExplosion"; - 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 + ImageSource = "JavelinImage"; - baseEmitter = MissileSmokeEmitter; - delayEmitter = MissileFireEmitter; - puffEmitter = MissilePuffEmitter; - bubbleEmitter = GrenadeBubbleEmitter; - bubbleEmitTime = 1.0; + explosion = "SatchelMainExplosion"; + 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 - exhaustEmitter = MissileLauncherExhaustEmitter; - exhaustTimeMs = 300; - exhaustNodeName = "muzzlePoint1"; + baseEmitter = MissileSmokeEmitter; + delayEmitter = MissileFireEmitter; + puffEmitter = MissilePuffEmitter; + bubbleEmitter = GrenadeBubbleEmitter; + bubbleEmitTime = 1.0; - lifetimeMS = 30000; - muzzleVelocity = 10.0; - maxVelocity = 150.0; - turningSpeed = 110.0; - acceleration = 350.0; + exhaustEmitter = MissileLauncherExhaustEmitter; + exhaustTimeMs = 300; + exhaustNodeName = "muzzlePoint1"; - proximityRadius = 3; + lifetimeMS = 30000; + muzzleVelocity = 10.0; + maxVelocity = 150.0; + turningSpeed = 110.0; + acceleration = 350.0; - terrainAvoidanceSpeed = 180; - terrainScanAhead = 25; - terrainHeightFail = 12; - terrainAvoidanceRadius = 100; + proximityRadius = 3; - flareDistance = 200; - flareAngle = 30; + terrainAvoidanceSpeed = 180; + terrainScanAhead = 25; + terrainHeightFail = 12; + terrainAvoidanceRadius = 100; - sound = MissileProjectileSound; + flareDistance = 200; + flareAngle = 30; - hasLight = true; - lightRadius = 5.0; - lightColor = "0.2 0.05 0"; + sound = MissileProjectileSound; - useFlechette = true; - flechetteDelayMs = 550; - casingDeb = FlechetteDebris; + hasLight = true; + lightRadius = 5.0; + lightColor = "0.2 0.05 0"; - explodeOnWaterImpact = false; + useFlechette = true; + flechetteDelayMs = 550; + casingDeb = FlechetteDebris; + + explodeOnWaterImpact = false; }; @@ -61,183 +61,180 @@ datablock SeekerProjectileData(JavelinMissile) { // Ammo //-------------------------------------- -datablock ItemData(JavelinAmmo) -{ - className = Ammo; - catagory = "Ammo"; - shapeFile = "ammo_missile.dts"; - mass = 1; - elasticity = 0.2; - friction = 0.6; - pickupRadius = 2; +datablock ItemData(JavelinAmmo) { + className = Ammo; + catagory = "Ammo"; + shapeFile = "ammo_missile.dts"; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; pickUpName = "some javelin rockets"; - computeCRC = true; - + computeCRC = true; }; //-------------------------------------------------------------------------- // Weapon //-------------------------------------- -datablock ItemData(Javelin) -{ - className = Weapon; - catagory = "Spawn Items"; - shapeFile = "weapon_mortar.dts"; - image = JavelinImage; - mass = 1; - elasticity = 0.2; - friction = 0.6; - pickupRadius = 2; +datablock ItemData(Javelin) { + className = Weapon; + catagory = "Spawn Items"; + shapeFile = "weapon_mortar.dts"; + image = JavelinImage; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; pickUpName = "a javelin launcher"; - computeCRC = true; - emap = true; + computeCRC = true; + emap = true; }; datablock ShapeBaseImageData(JavelinImage) { - className = WeaponImage; - shapeFile = "weapon_mortar.dts"; - item = Javelin; - ammo = JavelinAmmo; - offset = "0 0 0"; - armThread = lookms; - emap = true; + className = WeaponImage; + shapeFile = "weapon_mortar.dts"; + item = Javelin; + ammo = JavelinAmmo; + offset = "0 0 0"; + armThread = lookms; + emap = true; - projectile = JavelinMissile; - projectileType = SeekerProjectile; + projectile = JavelinMissile; + projectileType = SeekerProjectile; - isSeeker = true; - seekRadius = 700; - maxSeekAngle = 8; - seekTime = 0.5; - 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"; + isSeeker = true; + seekRadius = 700; + maxSeekAngle = 8; + seekTime = 0.5; + minSeekHeat = 0.01; // the heat that must be present on a target to lock it. - 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 - minTargetingDistance = 80; + RankRequire = $TWM2::RankRequire["Javelin"]; - stateName[0] = "Activate"; - stateTransitionOnTimeout[0] = "ActivateReady"; - stateTimeoutValue[0] = 0.5; - stateSequence[0] = "Activate"; - stateSound[0] = MissileSwitchSound; + // only target objects outside this range + minTargetingDistance = 80; - stateName[1] = "ActivateReady"; - stateTransitionOnLoaded[1] = "Ready"; - stateTransitionOnNoAmmo[1] = "NoAmmo"; + stateName[0] = "Activate"; + stateTransitionOnTimeout[0] = "ActivateReady"; + stateTimeoutValue[0] = 0.5; + stateSequence[0] = "Activate"; + stateSound[0] = MissileSwitchSound; - stateName[2] = "Ready"; - stateTransitionOnNoAmmo[2] = "NoAmmo"; - stateTransitionOnTriggerDown[2] = "CheckWet"; + stateName[1] = "ActivateReady"; + stateTransitionOnLoaded[1] = "Ready"; + stateTransitionOnNoAmmo[1] = "NoAmmo"; - stateName[3] = "Fire"; - stateTransitionOnTimeout[3] = "Reload"; - stateTimeoutValue[3] = 0.4; - stateFire[3] = true; - stateRecoil[3] = LightRecoil; - stateAllowImageChange[3] = false; - stateSequence[3] = "Fire"; - stateScript[3] = "onFire"; - stateSound[3] = MissileFireSound; + stateName[2] = "Ready"; + stateTransitionOnNoAmmo[2] = "NoAmmo"; + stateTransitionOnTriggerDown[2] = "CheckWet"; - stateName[4] = "Reload"; - stateTransitionOnNoAmmo[4] = "NoAmmo"; - stateTransitionOnTimeout[4] = "Ready"; - stateTimeoutValue[4] = 2.5; - stateAllowImageChange[4] = false; - stateSequence[4] = "Reload"; - stateSound[4] = MissileReloadSound; + stateName[3] = "Fire"; + stateTransitionOnTimeout[3] = "Reload"; + stateTimeoutValue[3] = 0.4; + stateFire[3] = true; + stateRecoil[3] = LightRecoil; + stateAllowImageChange[3] = false; + stateSequence[3] = "Fire"; + stateScript[3] = "onFire"; + stateSound[3] = MissileFireSound; - stateName[5] = "NoAmmo"; - stateTransitionOnAmmo[5] = "Reload"; - stateSequence[5] = "NoAmmo"; - stateTransitionOnTriggerDown[5] = "DryFire"; + stateName[4] = "Reload"; + stateTransitionOnNoAmmo[4] = "NoAmmo"; + stateTransitionOnTimeout[4] = "Ready"; + stateTimeoutValue[4] = 2.5; + stateAllowImageChange[4] = false; + stateSequence[4] = "Reload"; + stateSound[4] = MissileReloadSound; - stateName[6] = "DryFire"; - stateSound[6] = MissileDryFireSound; - stateTimeoutValue[6] = 1.0; - stateTransitionOnTimeout[6] = "ActivateReady"; + stateName[5] = "NoAmmo"; + stateTransitionOnAmmo[5] = "Reload"; + stateSequence[5] = "NoAmmo"; + stateTransitionOnTriggerDown[5] = "DryFire"; - stateName[7] = "CheckTarget"; - stateTransitionOnNoTarget[7] = "DryFire"; - stateTransitionOnTarget[7] = "Fire"; + stateName[6] = "DryFire"; + stateSound[6] = MissileDryFireSound; + stateTimeoutValue[6] = 1.0; + stateTransitionOnTimeout[6] = "ActivateReady"; - stateName[8] = "CheckWet"; - stateTransitionOnWet[8] = "WetFire"; - stateTransitionOnNotWet[8] = "CheckTarget"; + stateName[7] = "CheckTarget"; + stateTransitionOnNoTarget[7] = "DryFire"; + stateTransitionOnTarget[7] = "Fire"; - stateName[9] = "WetFire"; - stateTransitionOnNoAmmo[9] = "NoAmmo"; - stateTransitionOnTimeout[9] = "Reload"; - stateSound[9] = MissileFireSound; - stateRecoil[3] = LightRecoil; - stateTimeoutValue[9] = 0.4; - stateScript[9] = "onWetFire"; - stateAllowImageChange[9] = false; + stateName[8] = "CheckWet"; + stateTransitionOnWet[8] = "WetFire"; + stateTransitionOnNotWet[8] = "CheckTarget"; + + stateName[9] = "WetFire"; + stateTransitionOnNoAmmo[9] = "NoAmmo"; + stateTransitionOnTimeout[9] = "Reload"; + stateSound[9] = MissileFireSound; + stateRecoil[3] = LightRecoil; + stateTimeoutValue[9] = 0.4; + stateScript[9] = "onWetFire"; + stateAllowImageChange[9] = false; }; function JavelinImage::onFire(%data,%obj,%slot) { - %obj.decInventory(%data.ammo,1); - if(%obj.inv[%data.ammo] == 0) { //Added Phantom139, TWM2 - AttemptReload(%data, %obj, %slot); - } + %obj.decInventory(%data.ammo,1); + if(%obj.inv[%data.ammo] == 0) { //Added Phantom139, TWM2 + AttemptReload(%data, %obj, %slot); + } - %p = new (SeekerProjectile)() { - dataBlock = JavelinMissile; - initialDirection = "0 0 10"; - initialPosition = %obj.getPosition(); - damageFactor = 1; - sourceObject = %obj; - }; - %p.WeaponImageSource = %data.getName(); - - MissileSet.add(%p); + %p = new (SeekerProjectile)() { + dataBlock = JavelinMissile; + initialDirection = "0 0 10"; + initialPosition = %obj.getPosition(); + damageFactor = 1; + sourceObject = %obj; + }; + %p.WeaponImageSource = %data.getName(); - %target = %obj.getLockedTarget(); - if(%target) { - //go up first!!! - //%p.setPositionTarget(vectorAdd(%obj.getPosition(), "0 0 200")); - %p.schedule(3500, "setObjectTarget", %target); - schedule(3501, 0, "SetMissileTargeted", %target, %p); - } - else if(%obj.isLocked()) { - //%p.setPositionTarget(vectorAdd(%obj.getPosition(), "0 0 200")); - //echo("Javelin Lock: "@%obj.getLockedPosition()@""); - %p.JavBeac = new BeaconObject() { - dataBlock = "BomberBeacon"; - beaconType = "vehicle"; - position = %obj.getLockedPosition(); - }; - %p.schedule(3500, "setObjectTarget", %p.JavBeac); - schedule(3500, 0, "SetMissileTargeted", %p.JavBeac, %p); - %p.JavBeac.schedule(10000, "Delete"); - } - else { - //no lock, this missile must self destruct... - %p.setNoTarget(); - %p.getDatablock().onExplode(%p, %p.getPosition(), 1); - } + MissileSet.add(%p); + + %target = %obj.getLockedTarget(); + if(%target) { + //go up first!!! + //%p.setPositionTarget(vectorAdd(%obj.getPosition(), "0 0 200")); + %p.schedule(3500, "setObjectTarget", %target); + schedule(3501, 0, "SetMissileTargeted", %target, %p); + } + else if(%obj.isLocked()) { + //%p.setPositionTarget(vectorAdd(%obj.getPosition(), "0 0 200")); + //echo("Javelin Lock: "@%obj.getLockedPosition()@""); + %p.JavBeac = new BeaconObject() { + dataBlock = "BomberBeacon"; + beaconType = "vehicle"; + position = %obj.getLockedPosition(); + }; + %p.schedule(3500, "setObjectTarget", %p.JavBeac); + schedule(3500, 0, "SetMissileTargeted", %p.JavBeac, %p); + %p.JavBeac.schedule(10000, "Delete"); + } + else { + //no lock, this missile must self destruct... + %p.setNoTarget(); + %p.getDatablock().onExplode(%p, %p.getPosition(), 1); + } } diff --git a/scripts/weapons/Equipment/RPG7.cs b/scripts/weapons/Equipment/RPG7.cs index 42c0f6a..1cfbf28 100644 --- a/scripts/weapons/Equipment/RPG7.cs +++ b/scripts/weapons/Equipment/RPG7.cs @@ -1,236 +1,229 @@ datablock SeekerProjectileData(RPGMissile) { - casingShapeName = "weapon_missile_casement.dts"; - projectileShapeName = "grenade.dts"; - hasDamageRadius = true; - indirectDamage = 1.3; //TWM2 2.1, Increased to 1.3 from 0.8 - damageRadius = 8.0; - radiusDamageType = $DamageType::RPG; - kickBackStrength = 3500; + casingShapeName = "weapon_missile_casement.dts"; + projectileShapeName = "grenade.dts"; + hasDamageRadius = true; + indirectDamage = 1.3; //TWM2 2.1, Increased to 1.3 from 0.8 + damageRadius = 8.0; + radiusDamageType = $DamageType::RPG; + kickBackStrength = 3500; - ImageSource = "RPGImage"; + ImageSource = "RPGImage"; - explosion = "HandGrenadeExplosion"; - 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 + explosion = "HandGrenadeExplosion"; + 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; - delayEmitter = MissileFireEmitter; - puffEmitter = MissilePuffEmitter; - bubbleEmitter = GrenadeBubbleEmitter; - bubbleEmitTime = 1.0; + baseEmitter = MissileSmokeEmitter; + delayEmitter = MissileFireEmitter; + puffEmitter = MissilePuffEmitter; + bubbleEmitter = GrenadeBubbleEmitter; + bubbleEmitTime = 1.0; - exhaustEmitter = MissileLauncherExhaustEmitter; - exhaustTimeMs = 300; - exhaustNodeName = "muzzlePoint1"; + exhaustEmitter = MissileLauncherExhaustEmitter; + exhaustTimeMs = 300; + exhaustNodeName = "muzzlePoint1"; - lifetimeMS = 5000; // z0dd - ZOD, 4/14/02. Was 6000 - muzzleVelocity = 100.0; - maxVelocity = 350.0; // z0dd - ZOD, 4/14/02. Was 80.0 - turningSpeed = 54.0; - acceleration = 50.0; + lifetimeMS = 5000; // z0dd - ZOD, 4/14/02. Was 6000 + muzzleVelocity = 100.0; + maxVelocity = 350.0; // z0dd - ZOD, 4/14/02. Was 80.0 + turningSpeed = 54.0; + acceleration = 50.0; - explodeOnDeath = true; + explodeOnDeath = true; - proximityRadius = 3; + proximityRadius = 3; - sound = MissileProjectileSound; + sound = MissileProjectileSound; - hasLight = true; - lightRadius = 3.0; - lightColor = "0.2 0.05 0"; + hasLight = true; + lightRadius = 3.0; + lightColor = "0.2 0.05 0"; - useFlechette = true; - flechetteDelayMs = 10; - casingDeb = FlechetteDebris; + useFlechette = true; + flechetteDelayMs = 10; + casingDeb = FlechetteDebris; - explodeOnWaterImpact = true; + explodeOnWaterImpact = true; }; //-------------------------------------------------------------------------- // Ammo //-------------------------------------- -datablock ItemData(RPGAmmo) -{ - className = Ammo; - catagory = "Ammo"; - shapeFile = "ammo_missile.dts"; - mass = 1; - elasticity = 0.2; - friction = 0.6; - pickupRadius = 2; +datablock ItemData(RPGAmmo) { + className = Ammo; + catagory = "Ammo"; + shapeFile = "ammo_missile.dts"; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; pickUpName = "Some RPGs"; - computeCRC = true; + computeCRC = true; }; //-------------------------------------------------------------------------- // Weapon //-------------------------------------- -datablock ItemData(RPG) -{ - className = Weapon; - catagory = "Spawn Items"; - shapeFile = "weapon_grenade_launcher.dts"; - image = RPGImage; - mass = 1; - elasticity = 0.2; - friction = 0.6; - pickupRadius = 2; - pickUpName = "an RPG"; +datablock ItemData(RPG) { + className = Weapon; + catagory = "Spawn Items"; + shapeFile = "weapon_grenade_launcher.dts"; + image = RPGImage; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; + pickUpName = "an RPG"; - computeCRC = true; - emap = true; + computeCRC = true; + emap = true; }; -datablock ShapeBaseImageData(RPGImage) -{ - className = WeaponImage; - shapeFile = "weapon_grenade_launcher.dts"; - item = RPG; - ammo = RPGAmmo; - offset = "0 -1 0"; - armThread = lookms; - emap = true; +datablock ShapeBaseImageData(RPGImage) { + className = WeaponImage; + shapeFile = "weapon_grenade_launcher.dts"; + item = RPG; + ammo = RPGAmmo; + offset = "0 -1 0"; + armThread = lookms; + emap = true; - projectile = RPGMissile; - projectileType = seekerprojectile; - 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"]; + projectile = RPGMissile; + projectileType = seekerprojectile; + projectileSpread = 1.0 / 1000.0; - stateName[0] = "Activate"; - stateTransitionOnTimeout[0] = "ActivateReady"; - stateTimeoutValue[0] = 2.0; - stateSequence[0] = "Activate"; - stateSound[0] = MissileSwitchSound; + //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"; - stateName[1] = "ActivateReady"; - stateTransitionOnLoaded[1] = "Ready"; - stateTransitionOnNoAmmo[1] = "NoAmmo"; + RankRequire = $TWM2::RankRequire["RPG7"]; - stateName[2] = "Ready"; - stateTransitionOnNoAmmo[2] = "NoAmmo"; - stateTransitionOnTriggerDown[2] = "CheckWet"; + stateName[0] = "Activate"; + stateTransitionOnTimeout[0] = "ActivateReady"; + stateTimeoutValue[0] = 2.0; + stateSequence[0] = "Activate"; + stateSound[0] = MissileSwitchSound; - stateName[3] = "Fire"; - stateTransitionOnTimeout[3] = "Reload"; - stateTimeoutValue[3] = 0.4; - stateFire[3] = true; - stateRecoil[3] = LightRecoil; - stateAllowImageChange[3] = false; - stateSequence[3] = "Fire"; - stateScript[3] = "onFire"; - stateSound[3] = MissileFireSound; + stateName[1] = "ActivateReady"; + stateTransitionOnLoaded[1] = "Ready"; + stateTransitionOnNoAmmo[1] = "NoAmmo"; - stateName[4] = "Reload"; - stateTransitionOnNoAmmo[4] = "NoAmmo"; - stateTransitionOnTimeout[4] = "Ready"; - stateTimeoutValue[4] = 0.1; - stateAllowImageChange[4] = false; - stateSequence[4] = "Reload"; - stateSound[4] = MissileReloadSound; + stateName[2] = "Ready"; + stateTransitionOnNoAmmo[2] = "NoAmmo"; + stateTransitionOnTriggerDown[2] = "CheckWet"; - stateName[5] = "NoAmmo"; - stateTransitionOnAmmo[5] = "Reload"; - stateSequence[5] = "NoAmmo"; - stateTransitionOnTriggerDown[5] = "DryFire"; + stateName[3] = "Fire"; + stateTransitionOnTimeout[3] = "Reload"; + stateTimeoutValue[3] = 0.4; + stateFire[3] = true; + stateRecoil[3] = LightRecoil; + stateAllowImageChange[3] = false; + stateSequence[3] = "Fire"; + stateScript[3] = "onFire"; + stateSound[3] = MissileFireSound; - stateName[6] = "DryFire"; - stateSound[6] = MissileDryFireSound; - stateTimeoutValue[6] = 1.0; - stateTransitionOnTimeout[6] = "ActivateReady"; + stateName[4] = "Reload"; + stateTransitionOnNoAmmo[4] = "NoAmmo"; + stateTransitionOnTimeout[4] = "Ready"; + stateTimeoutValue[4] = 0.1; + stateAllowImageChange[4] = false; + stateSequence[4] = "Reload"; + stateSound[4] = MissileReloadSound; - stateName[7] = "CheckTarget"; - stateTransitionOnNoTarget[7] = "Fire"; - stateTransitionOnTarget[7] = "Fire"; + stateName[5] = "NoAmmo"; + stateTransitionOnAmmo[5] = "Reload"; + stateSequence[5] = "NoAmmo"; + stateTransitionOnTriggerDown[5] = "DryFire"; - stateName[8] = "CheckWet"; - stateTransitionOnWet[8] = "DryFire"; - stateTransitionOnNotWet[8] = "CheckTarget"; + stateName[6] = "DryFire"; + stateSound[6] = MissileDryFireSound; + stateTimeoutValue[6] = 1.0; + stateTransitionOnTimeout[6] = "ActivateReady"; - stateName[9] = "WetFire"; - stateTransitionOnNoAmmo[9] = "NoAmmo"; - stateTransitionOnTimeout[9] = "Reload"; - stateTimeoutValue[9] = 0.4; - 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 RPGImage::OnFire(%data, %obj, %slot) { -// if($TWM2::PlayingSabo) { Inv. Ban lifted TWM2 1.8 -// MessageClient(%thrower.client, 'MsgC4IsBanned', "\c5RPGs are banned in this game mode"); -// return; -// } - %p = Parent::OnFire(%data, %obj, %slot); - if(!%obj.client.UpgradeOn("Spread Neutralizer", %data.getName())) { - schedule(500, 0, "RPGRandomMovement", %p); - } - if(%obj.client.UpgradeOn("Enhanced Explosives", %data.getName())) { - %p.damageFactor = 5; //heh - } - %p.ticksleft = 10; + // if($TWM2::PlayingSabo) { Inv. Ban lifted TWM2 1.8 + // MessageClient(%thrower.client, 'MsgC4IsBanned', "\c5RPGs are banned in this game mode"); + // return; + // } + %p = Parent::OnFire(%data, %obj, %slot); + if(!%obj.client.UpgradeOn("Spread Neutralizer", %data.getName())) { + schedule(500, 0, "RPGRandomMovement", %p); + } + if(%obj.client.UpgradeOn("Enhanced Explosives", %data.getName())) { + %p.damageFactor = 5; //heh + } + %p.ticksleft = 10; } function RPGRandomMovement(%p) { - if(!isObject(%p)) { - return; - } - %fw = %p.initialDirection; //current direction - %x = (getRandom() - 0.5) * 2 * 3.1415926 * (25/1000); - %y = (getRandom() - 0.5) * 2 * 3.1415926 * (25/1000); - %z = (getRandom() - 0.5) * 2 * 3.1415926 * (10/1000); - %mat = MatrixCreateFromEuler(%x @ " " @ %y @ " " @ %z); - %newvector = MatrixMulVector(%mat, %fw); - //now lets use basic torque operations to spawn a new RPG missile going the new direction - %pnew = new (SeekerProjectile)() { - dataBlock = RPGMissile; - initialDirection = %newvector; - initialPosition = %p.getPosition(); - damageFactor = %p.damageFactor; - //sourceObject = %p.sourceObject; // <-- done below to prevent spawning suicidal missiles - }; - MissionCleanup.add(%pnew); - %pnew.sourceObject = %p.sourceObject; - %pnew.WeaponImageSource = %p.WeaponImageSource; - %pnew.ticksleft = %p.ticksleft - 1; - %pnew.ImageSource = "RPGImage"; - //echo(%pnew.ticksleft); - if(%pnew.ticksleft <= 0) { //time up! - %pnew.getDatablock().onExplode(%pnew, %pnew.getPosition(), 1); - %p.delete(); - %pnew.delete(); - //echo("end"); - return; - } - else { - %p.delete(); - schedule(500, 0, "RPGRandomMovement", %pnew); - } + if(!isObject(%p)) { + return; + } + if(%p.ticksleft <= 0) { //time up! + %p.getDatablock().onExplode(%p, %p.getPosition(), 1); + %p.delete(); + return; + } + %fw = %p.initialDirection; //current direction + %x = (getRandom() - 0.5) * 2 * 3.1415926 * (25/1000); + %y = (getRandom() - 0.5) * 2 * 3.1415926 * (25/1000); + %z = (getRandom() - 0.5) * 2 * 3.1415926 * (10/1000); + %mat = MatrixCreateFromEuler(%x @ " " @ %y @ " " @ %z); + %newvector = MatrixMulVector(%mat, %fw); + //now lets use basic torque operations to spawn a new RPG missile going the new direction + %pnew = new (SeekerProjectile)() { + dataBlock = RPGMissile; + initialDirection = %newvector; + initialPosition = %p.getPosition(); + damageFactor = %p.damageFactor; + //sourceObject = %p.sourceObject; // <-- done below to prevent spawning suicidal missiles + }; + MissionCleanup.add(%pnew); + %pnew.sourceObject = %p.sourceObject; + %pnew.WeaponImageSource = %p.WeaponImageSource; + %pnew.ticksleft = %p.ticksleft - 1; + %pnew.ImageSource = "RPGImage"; + //echo(%pnew.ticksleft); + %p.delete(); + schedule(500, 0, "RPGRandomMovement", %pnew); } diff --git a/scripts/weapons/Equipment/Stinger.cs b/scripts/weapons/Equipment/Stinger.cs index d3b47ea..fc7de5d 100644 --- a/scripts/weapons/Equipment/Stinger.cs +++ b/scripts/weapons/Equipment/Stinger.cs @@ -1,58 +1,58 @@ datablock SeekerProjectileData(StingerMissile) { - casingShapeName = "weapon_missile_casement.dts"; - projectileShapeName = "weapon_missile_projectile.dts"; - hasDamageRadius = true; - indirectDamage = 1.4; //Requires Lock - damageRadius = 18.0; - radiusDamageType = $DamageType::Missile; - kickBackStrength = 1000; - - ImageSource = "StingerImage"; + casingShapeName = "weapon_missile_casement.dts"; + projectileShapeName = "weapon_missile_projectile.dts"; + hasDamageRadius = true; + indirectDamage = 1.4; //Requires Lock + damageRadius = 18.0; + radiusDamageType = $DamageType::Stinger; + kickBackStrength = 1000; - explosion = "SatchelMainExplosion"; - 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 + ImageSource = "StingerImage"; - baseEmitter = MissileSmokeEmitter; - delayEmitter = MissileFireEmitter; - puffEmitter = MissilePuffEmitter; - bubbleEmitter = GrenadeBubbleEmitter; - bubbleEmitTime = 1.0; + explosion = "SatchelMainExplosion"; + 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 - exhaustEmitter = MissileLauncherExhaustEmitter; - exhaustTimeMs = 300; - exhaustNodeName = "muzzlePoint1"; + baseEmitter = MissileSmokeEmitter; + delayEmitter = MissileFireEmitter; + puffEmitter = MissilePuffEmitter; + bubbleEmitter = GrenadeBubbleEmitter; + bubbleEmitTime = 1.0; - lifetimeMS = 30000; - muzzleVelocity = 10.0; - maxVelocity = 150.0; - turningSpeed = 110.0; - acceleration = 350.0; + exhaustEmitter = MissileLauncherExhaustEmitter; + exhaustTimeMs = 300; + exhaustNodeName = "muzzlePoint1"; - proximityRadius = 3; + lifetimeMS = 30000; + muzzleVelocity = 10.0; + maxVelocity = 150.0; + turningSpeed = 110.0; + acceleration = 350.0; - terrainAvoidanceSpeed = 180; - terrainScanAhead = 25; - terrainHeightFail = 12; - terrainAvoidanceRadius = 100; + proximityRadius = 3; - flareDistance = 200; - flareAngle = 30; + terrainAvoidanceSpeed = 180; + terrainScanAhead = 25; + terrainHeightFail = 12; + terrainAvoidanceRadius = 100; - sound = MissileProjectileSound; + flareDistance = 200; + flareAngle = 30; - hasLight = true; - lightRadius = 5.0; - lightColor = "0.2 0.05 0"; + sound = MissileProjectileSound; - useFlechette = true; - flechetteDelayMs = 550; - casingDeb = FlechetteDebris; + hasLight = true; + lightRadius = 5.0; + lightColor = "0.2 0.05 0"; - explodeOnWaterImpact = false; + useFlechette = true; + flechetteDelayMs = 550; + casingDeb = FlechetteDebris; + + explodeOnWaterImpact = false; }; @@ -61,170 +61,165 @@ datablock SeekerProjectileData(StingerMissile) { // Ammo //-------------------------------------- -datablock ItemData(StingerAmmo) -{ - className = Ammo; - catagory = "Ammo"; - shapeFile = "ammo_missile.dts"; - mass = 1; - elasticity = 0.2; - friction = 0.6; - pickupRadius = 2; +datablock ItemData(StingerAmmo) { + className = Ammo; + catagory = "Ammo"; + shapeFile = "ammo_missile.dts"; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; pickUpName = "some Stinger rockets"; - computeCRC = true; - + computeCRC = true; }; //-------------------------------------------------------------------------- // Weapon //-------------------------------------- -datablock ItemData(Stinger) -{ - className = Weapon; - catagory = "Spawn Items"; - shapeFile = "weapon_mortar.dts"; - image = StingerImage; - mass = 1; - elasticity = 0.2; - friction = 0.6; - pickupRadius = 2; +datablock ItemData(Stinger) { + className = Weapon; + catagory = "Spawn Items"; + shapeFile = "weapon_mortar.dts"; + image = StingerImage; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; pickUpName = "a Stinger launcher"; - computeCRC = true; - emap = true; + computeCRC = true; + emap = true; }; datablock ShapeBaseImageData(StingerImage) { - className = WeaponImage; - shapeFile = "weapon_grenade_launcher.dts"; - item = Stinger; - ammo = StingerAmmo; - offset = "0 0 0"; - armThread = lookms; - emap = true; + className = WeaponImage; + shapeFile = "weapon_grenade_launcher.dts"; + item = Stinger; + ammo = StingerAmmo; + offset = "0 0 0"; + armThread = lookms; + emap = true; - projectile = StingerMissile; - projectileType = SeekerProjectile; + projectile = StingerMissile; + projectileType = SeekerProjectile; - isSeeker = true; - seekRadius = 700; - maxSeekAngle = 8; - seekTime = 0.5; - 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"; + isSeeker = true; + seekRadius = 700; + maxSeekAngle = 8; + seekTime = 0.5; + minSeekHeat = 0.01; // the heat that must be present on a target to lock it. - 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 - minTargetingDistance = 80; + RankRequire = $TWM2::RankRequire["Stinger"]; - stateName[0] = "Activate"; - stateTransitionOnTimeout[0] = "ActivateReady"; - stateTimeoutValue[0] = 0.5; - stateSequence[0] = "Activate"; - stateSound[0] = MissileSwitchSound; + // only target objects outside this range + minTargetingDistance = 80; - stateName[1] = "ActivateReady"; - stateTransitionOnLoaded[1] = "Ready"; - stateTransitionOnNoAmmo[1] = "NoAmmo"; + stateName[0] = "Activate"; + stateTransitionOnTimeout[0] = "ActivateReady"; + stateTimeoutValue[0] = 0.5; + stateSequence[0] = "Activate"; + stateSound[0] = MissileSwitchSound; - stateName[2] = "Ready"; - stateTransitionOnNoAmmo[2] = "NoAmmo"; - stateTransitionOnTriggerDown[2] = "CheckWet"; + stateName[1] = "ActivateReady"; + stateTransitionOnLoaded[1] = "Ready"; + stateTransitionOnNoAmmo[1] = "NoAmmo"; - stateName[3] = "Fire"; - stateTransitionOnTimeout[3] = "Reload"; - stateTimeoutValue[3] = 0.4; - stateFire[3] = true; - stateRecoil[3] = LightRecoil; - stateAllowImageChange[3] = false; - stateSequence[3] = "Fire"; - stateScript[3] = "onFire"; - stateSound[3] = MissileFireSound; + stateName[2] = "Ready"; + stateTransitionOnNoAmmo[2] = "NoAmmo"; + stateTransitionOnTriggerDown[2] = "CheckWet"; - stateName[4] = "Reload"; - stateTransitionOnNoAmmo[4] = "NoAmmo"; - stateTransitionOnTimeout[4] = "Ready"; - stateTimeoutValue[4] = 2.5; - stateAllowImageChange[4] = false; - stateSequence[4] = "Reload"; - stateSound[4] = MissileReloadSound; + stateName[3] = "Fire"; + stateTransitionOnTimeout[3] = "Reload"; + stateTimeoutValue[3] = 0.4; + stateFire[3] = true; + stateRecoil[3] = LightRecoil; + stateAllowImageChange[3] = false; + stateSequence[3] = "Fire"; + stateScript[3] = "onFire"; + stateSound[3] = MissileFireSound; - stateName[5] = "NoAmmo"; - stateTransitionOnAmmo[5] = "Reload"; - stateSequence[5] = "NoAmmo"; - stateTransitionOnTriggerDown[5] = "DryFire"; + stateName[4] = "Reload"; + stateTransitionOnNoAmmo[4] = "NoAmmo"; + stateTransitionOnTimeout[4] = "Ready"; + stateTimeoutValue[4] = 2.5; + stateAllowImageChange[4] = false; + stateSequence[4] = "Reload"; + stateSound[4] = MissileReloadSound; - stateName[6] = "DryFire"; - stateSound[6] = MissileDryFireSound; - stateTimeoutValue[6] = 1.0; - stateTransitionOnTimeout[6] = "ActivateReady"; + stateName[5] = "NoAmmo"; + stateTransitionOnAmmo[5] = "Reload"; + stateSequence[5] = "NoAmmo"; + stateTransitionOnTriggerDown[5] = "DryFire"; - stateName[7] = "CheckTarget"; - stateTransitionOnNoTarget[7] = "DryFire"; - stateTransitionOnTarget[7] = "Fire"; + stateName[6] = "DryFire"; + stateSound[6] = MissileDryFireSound; + stateTimeoutValue[6] = 1.0; + stateTransitionOnTimeout[6] = "ActivateReady"; - stateName[8] = "CheckWet"; - stateTransitionOnWet[8] = "WetFire"; - stateTransitionOnNotWet[8] = "CheckTarget"; + stateName[7] = "CheckTarget"; + stateTransitionOnNoTarget[7] = "DryFire"; + stateTransitionOnTarget[7] = "Fire"; - stateName[9] = "WetFire"; - stateTransitionOnNoAmmo[9] = "NoAmmo"; - stateTransitionOnTimeout[9] = "Reload"; - stateSound[9] = MissileFireSound; - stateRecoil[3] = LightRecoil; - stateTimeoutValue[9] = 0.4; - stateScript[9] = "onWetFire"; - stateAllowImageChange[9] = false; + stateName[8] = "CheckWet"; + stateTransitionOnWet[8] = "WetFire"; + stateTransitionOnNotWet[8] = "CheckTarget"; + + stateName[9] = "WetFire"; + stateTransitionOnNoAmmo[9] = "NoAmmo"; + stateTransitionOnTimeout[9] = "Reload"; + stateSound[9] = MissileFireSound; + stateRecoil[3] = LightRecoil; + stateTimeoutValue[9] = 0.4; + stateScript[9] = "onWetFire"; + stateAllowImageChange[9] = false; }; -function StingerImage::onFire(%data,%obj,%slot) { - %obj.decInventory(%data.ammo,1); - if(%obj.inv[%data.ammo] == 0) { //Added Phantom139, TWM2 - AttemptReload(%data, %obj, %slot); - } +function StingerImage::onFire(%data, %obj, %slot) { + if(%obj.inv[%data.ammo] == 0) { //Added Phantom139, TWM2 + AttemptReload(%data, %obj, %slot); + } - %target = %obj.getLockedTarget(); - //requires lock - if(%target) { - %p = new (SeekerProjectile)() { - dataBlock = StingerMissile; - initialDirection = "0 0 10"; - initialPosition = %obj.getPosition(); - damageFactor = 1; - sourceObject = %obj; - }; - %p.WeaponImageSource = %data.getName(); + %target = %obj.getLockedTarget(); + //requires lock + if(%target) { + %p = new (SeekerProjectile)() { + dataBlock = StingerMissile; + initialDirection = "0 0 10"; + initialPosition = %obj.getPosition(); + damageFactor = 1; + sourceObject = %obj; + }; + %p.WeaponImageSource = %data.getName(); - MissileSet.add(%p); + MissileSet.add(%p); - %p.schedule(500, "setObjectTarget", %target); - schedule(501, 0, "SetMissileTargeted", %target, %p); - } - else if(%obj.isLocked()) { - return; - } - else { - return; - } + %p.schedule(500, "setObjectTarget", %target); + schedule(501, 0, "SetMissileTargeted", %target, %p); + + %obj.decInventory(%data.ammo,1); + } + else if(%obj.isLocked()) { + return; + } } diff --git a/scripts/weapons/Grenades/staticGrenade.cs b/scripts/weapons/Grenades/staticGrenade.cs index 2ef9f75..85c17c2 100644 --- a/scripts/weapons/Grenades/staticGrenade.cs +++ b/scripts/weapons/Grenades/staticGrenade.cs @@ -1,54 +1,49 @@ -datablock ItemData(StaticGrenadeThrown) -{ +datablock ItemData(StaticGrenadeThrown) { className = Weapon; shapeFile = "ammo_plasma.dts"; mass = 0.4; elasticity = 0.2; - friction = 1; - pickupRadius = 2; - maxDamage = 0.5; + friction = 1; + pickupRadius = 2; + maxDamage = 0.5; explosion = PlasmaBarrelBoltExplosion; underwaterExplosion = PlasmaBarrelBoltExplosion; - indirectDamage = 0.4; - damageRadius = 10.0; - radiusDamageType = $DamageType::Grenade; - kickBackStrength = 2000; - - computeCRC = true; + indirectDamage = 0.4; + damageRadius = 10.0; + radiusDamageType = $DamageType::StaticGrenade; + kickBackStrength = 2000; + computeCRC = true; }; -datablock ItemData(StaticGrenade) -{ +datablock ItemData(StaticGrenade) { className = HandInventory; catagory = "Handheld"; shapeFile = "ammo_plasma.dts"; mass = 0.4; elasticity = 0.2; - friction = 1; - pickupRadius = 2; - thrownItem = StaticGrenadeThrown; + friction = 1; + pickupRadius = 2; + thrownItem = StaticGrenadeThrown; pickUpName = "some static grenades"; isGrenade = true; - computeCRC = true; - + computeCRC = true; }; function StaticGrenadeThrown::onThrow(%this, %gren) { - AIGrenadeThrown(%gren); - %gren.detThread = schedule(3000, %gren, "detonateGrenade", %gren); + AIGrenadeThrown(%gren); + %gren.detThread = schedule(3000, %gren, "detonateGrenade", %gren); } function StaticGrenadeThrown::onCollision(%data, %obj, %col) { - %cn = %col.getDatablock().getClassName(); - if(%cn $= "PlayerData" || strstr(%cn, "Vehicle") != -1) { - //BOOM! - detonateGrenade(%obj); - //Die now... - if(!%col.isBoss && !%col.isGOF) { - RadiusExplosion( %obj, %obj.getPosition(), 1, 100, 1000, - %obj.sourceObject, $DamageType::Grenade); - } - } + %cn = %col.getDatablock().getClassName(); + if(%cn $= "PlayerData" || strstr(%cn, "Vehicle") != -1) { + //BOOM! + detonateGrenade(%obj); + //Die now... + if(!%col.isBoss && !%col.isGOF) { + RadiusExplosion( %obj, %obj.getPosition(), 1, 100, 1000, %obj.sourceObject, $DamageType::StaticGrenade); + } + } } diff --git a/scripts/weapons/MGs/MG42.cs b/scripts/weapons/MGs/MG42.cs index 2967307..1c2a0dc 100644 --- a/scripts/weapons/MGs/MG42.cs +++ b/scripts/weapons/MGs/MG42.cs @@ -1,229 +1,226 @@ datablock TracerProjectileData(MG42Bullet) { - doDynamicClientHits = true; + doDynamicClientHits = true; - directDamage = 0.063; - directDamageType = $DamageType::MG42; - explosion = "ChaingunExplosion"; - splash = ChaingunSplash; - HeadMultiplier = 1.5; - LegsMultiplier = 0.5; - - ImageSource = "MG42Image"; + directDamage = 0.063; + directDamageType = $DamageType::MG42; + explosion = "ChaingunExplosion"; + splash = ChaingunSplash; + HeadMultiplier = 1.5; + LegsMultiplier = 0.5; - kickBackStrength = 50.0; - sound = ChaingunProjectile; + ImageSource = "MG42Image"; - dryVelocity = 3000.0; - wetVelocity = 1000.0; - velInheritFactor = 1.0; - fizzleTimeMS = 3000; - lifetimeMS = 3000; - explodeOnDeath = false; - reflectOnWaterImpactAngle = 0.0; - explodeOnWaterImpact = false; - deflectionOnWaterImpact = 0.0; - fizzleUnderwaterMS = 3000; + kickBackStrength = 50.0; + sound = ChaingunProjectile; - tracerLength = 40.0; - tracerAlpha = false; - tracerMinPixels = 6; - tracerColor = 10.0/255.0 @ " " @ 30.0/255.0 @ " " @ 240.0/255.0 @ " 0.75"; + dryVelocity = 3000.0; + wetVelocity = 1000.0; + velInheritFactor = 1.0; + 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[1] = "special/tracercross"; tracerWidth = 0.2; - crossSize = 0.20; - crossViewAng = 0.990; - renderCross = true; + crossSize = 0.20; + crossViewAng = 0.990; + renderCross = true; - decalData[0] = ChaingunDecal1; - decalData[1] = ChaingunDecal2; - decalData[2] = ChaingunDecal3; - decalData[3] = ChaingunDecal4; - decalData[4] = ChaingunDecal5; - decalData[5] = ChaingunDecal6; + decalData[0] = ChaingunDecal1; + decalData[1] = ChaingunDecal2; + decalData[2] = ChaingunDecal3; + decalData[3] = ChaingunDecal4; + decalData[4] = ChaingunDecal5; + decalData[5] = ChaingunDecal6; }; //-------------------------------------------------------------------------- // Ammo //-------------------------------------- datablock ItemData(MG42Ammo) { - className = Ammo; - catagory = "Ammo"; - shapeFile = "ammo_chaingun.dts"; - mass = 3; - elasticity = 0.2; - friction = 0.6; - pickupRadius = 2; - pickUpName = "some PCT ammo"; - - computeCRC = true; + className = Ammo; + catagory = "Ammo"; + shapeFile = "ammo_chaingun.dts"; + mass = 3; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; + pickUpName = "some mg42 rounds"; + computeCRC = true; }; //-------------------------------------------------------------------------- // Weapon //-------------------------------------- datablock ShapeBaseImageData(MG42Image) { - className = WeaponImage; - shapeFile = "weapon_sniper.dts"; - item = MG42; - ammo = MG42Ammo; - projectile = MG42Bullet; - projectileType = TracerProjectile; - emap = true; - mass = 26; + className = WeaponImage; + shapeFile = "weapon_sniper.dts"; + item = MG42; + ammo = MG42Ammo; + projectile = MG42Bullet; + projectileType = TracerProjectile; + emap = true; + 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; - shellExitDir = "0.5 0 1"; - shellExitOffset = "0.0 0.75 0.0"; - shellExitVariance = 5.0; - 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"; - // + casing = ShellDebris; + shellExitDir = "0.5 0 1"; + shellExitOffset = "0.0 0.75 0.0"; + shellExitVariance = 5.0; + shellVelocity = 4.5; - 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"; + // - //-------------------------------------- - stateName[0] = "Activate"; - stateSequence[0] = "Activate"; - stateSound[0] = ChaingunSwitchSound; - stateAllowImageChange[0] = false; - // - stateTimeoutValue[0] = 0.5; - stateTransitionOnTimeout[0] = "Ready"; - stateTransitionOnNoAmmo[0] = "NoAmmo"; + RankRequire = $TWM2::RankRequire["MG42"]; - //-------------------------------------- - stateName[1] = "Ready"; - stateSpinThread[1] = Stop; - // - stateTransitionOnTriggerDown[1] = "Spinup"; - stateTransitionOnNoAmmo[1] = "NoAmmo"; + projectileSpread = 12.5 / 1000.0; - //-------------------------------------- - stateName[2] = "NoAmmo"; - stateTransitionOnAmmo[2] = "Ready"; - stateSpinThread[2] = Stop; - stateTransitionOnTriggerDown[2] = "DryFire"; + //-------------------------------------- + stateName[0] = "Activate"; + stateSequence[0] = "Activate"; + stateSound[0] = ChaingunSwitchSound; + stateAllowImageChange[0] = false; + // + stateTimeoutValue[0] = 0.5; + stateTransitionOnTimeout[0] = "Ready"; + stateTransitionOnNoAmmo[0] = "NoAmmo"; - //-------------------------------------- - stateName[3] = "Spinup"; - stateSpinThread[3] = SpinUp; - stateSound[3] = ChaingunSpinupSound; - // - stateTimeoutValue[3] = 0.1; - stateWaitForTimeout[3] = false; - stateTransitionOnTimeout[3] = "Fire"; - stateTransitionOnTriggerUp[3] = "Spindown"; + //-------------------------------------- + stateName[1] = "Ready"; + stateSpinThread[1] = Stop; + // + stateTransitionOnTriggerDown[1] = "Spinup"; + stateTransitionOnNoAmmo[1] = "NoAmmo"; - //-------------------------------------- - stateName[4] = "Fire"; - stateSequence[4] = "Fire"; - stateSequenceRandomFlash[4] = true; - stateSpinThread[4] = FullSpeed; - //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[2] = "NoAmmo"; + stateTransitionOnAmmo[2] = "Ready"; + stateSpinThread[2] = Stop; + stateTransitionOnTriggerDown[2] = "DryFire"; - //-------------------------------------- - stateName[5] = "Spindown"; - stateSound[5] = ChaingunSpinDownSound; - stateSpinThread[5] = SpinDown; - // - stateTimeoutValue[5] = 0.1; - stateWaitForTimeout[5] = true; - stateTransitionOnTimeout[5] = "Ready"; - stateTransitionOnTriggerDown[5] = "Spinup"; + //-------------------------------------- + stateName[3] = "Spinup"; + stateSpinThread[3] = SpinUp; + stateSound[3] = ChaingunSpinupSound; + // + stateTimeoutValue[3] = 0.1; + stateWaitForTimeout[3] = false; + stateTransitionOnTimeout[3] = "Fire"; + stateTransitionOnTriggerUp[3] = "Spindown"; - //-------------------------------------- - stateName[6] = "EmptySpindown"; - stateSound[6] = ChaingunSpinDownSound; - stateSpinThread[6] = SpinDown; - // - stateTimeoutValue[6] = 1.0; - stateTransitionOnTimeout[6] = "NoAmmo"; + //-------------------------------------- + stateName[4] = "Fire"; + stateSequence[4] = "Fire"; + stateSequenceRandomFlash[4] = true; + stateSpinThread[4] = FullSpeed; + //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[7] = "DryFire"; - stateSound[7] = ChaingunDryFireSound; - stateTimeoutValue[7] = 0.5; - stateTransitionOnTimeout[7] = "NoAmmo"; + //-------------------------------------- + stateName[5] = "Spindown"; + stateSound[5] = ChaingunSpinDownSound; + stateSpinThread[5] = SpinDown; + // + 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) { - className = Weapon; - catagory = "Spawn Items"; - shapeFile = "turret_tank_barrelchain.dts"; - image = MG42Image; - mass = 1.0; - elasticity = 0.2; - friction = 0.6; - pickupRadius = 2; - pickUpName = "a Portible Chaingun Turret"; + className = Weapon; + catagory = "Spawn Items"; + shapeFile = "turret_tank_barrelchain.dts"; + image = MG42Image; + mass = 1.0; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; + pickUpName = "a MG42 machine gun"; - computeCRC = true; - emap = true; + computeCRC = true; + emap = true; }; datablock ShapeBaseImageData(MG42Image1) : MG42Image { - className = WeaponImage; + className = WeaponImage; - shapeFile = "weapon_missile.dts"; - rotation = "0 0 1 180"; - offset = "0.01 0.04 0.0"; // L/R - F/B - T/B + shapeFile = "weapon_missile.dts"; + rotation = "0 0 1 180"; + offset = "0.01 0.04 0.0"; // L/R - F/B - T/B }; function MG42Image::onMount(%this,%obj,%slot) { - Parent::onMount(%this, %obj, %slot); - %obj.mountImage(MG42Image1, 3); - + Parent::onMount(%this, %obj, %slot); + %obj.mountImage(MG42Image1, 3); } function MG42Image::onUnmount(%this,%obj,%slot) { - Parent::onUnmount(%this, %obj, %slot); - %obj.unmountImage(3); + Parent::onUnmount(%this, %obj, %slot); + %obj.unmountImage(3); } function MG42Image::onFire(%data, %obj, %slot) { - %p = Parent::onFire(%data, %obj, %slot); - if(%obj.client.UpgradeOn("Silencer", %data.getName())) { - //zero sound :p - } - else { - ServerPlay3d(ChaingunFireSound, %obj.getPosition()); - } -} - + %p = Parent::onFire(%data, %obj, %slot); + if(%obj.client.UpgradeOn("Silencer", %data.getName())) { + //zero sound :p + } + else { + ServerPlay3d(ChaingunFireSound, %obj.getPosition()); + } +} \ No newline at end of file diff --git a/scripts/weapons/MGs/MRXX.cs b/scripts/weapons/MGs/MRXX.cs index 2c98fa4..80326e9 100644 --- a/scripts/weapons/MGs/MRXX.cs +++ b/scripts/weapons/MGs/MRXX.cs @@ -1,204 +1,202 @@ datablock TracerProjectileData(MRXXBullet) { - doDynamicClientHits = true; + doDynamicClientHits = true; - directDamage = 0.043; - directDamageType = $DamageType::MRXX; - explosion = "ChaingunExplosion"; - splash = ChaingunSplash; - HeadMultiplier = 1.25; - LegsMultiplier = 0.75; - - ImageSource = "MRXXImage"; + directDamage = 0.043; + directDamageType = $DamageType::MRXX; + explosion = "ChaingunExplosion"; + splash = ChaingunSplash; + HeadMultiplier = 1.25; + LegsMultiplier = 0.75; - kickBackStrength = 15.0; - sound = ChaingunProjectile; + ImageSource = "MRXXImage"; - dryVelocity = 1750.0; - wetVelocity = 1500.0; - velInheritFactor = 0.0; - fizzleTimeMS = 3000; - lifetimeMS = 3000; - explodeOnDeath = false; - reflectOnWaterImpactAngle = 0.0; - explodeOnWaterImpact = false; - deflectionOnWaterImpact = 0.0; - fizzleUnderwaterMS = 3000; + kickBackStrength = 15.0; + sound = ChaingunProjectile; - tracerLength = 9.0; - tracerAlpha = false; - tracerMinPixels = 6; - tracerColor = 211.0/255.0 @ " " @ 215.0/255.0 @ " " @ 120.0/255.0 @ " 0.75"; + dryVelocity = 1750.0; + 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; + tracerAlpha = false; + tracerMinPixels = 6; + tracerColor = 211.0/255.0 @ " " @ 215.0/255.0 @ " " @ 120.0/255.0 @ " 0.75"; tracerTex[0] = "special/tracer00"; tracerTex[1] = "special/tracercross"; tracerWidth = 0.09; - crossSize = 0.20; - crossViewAng = 0.990; - renderCross = true; + crossSize = 0.20; + crossViewAng = 0.990; + renderCross = true; - decalData[0] = ChaingunDecal1; - decalData[1] = ChaingunDecal2; - decalData[2] = ChaingunDecal3; - decalData[3] = ChaingunDecal4; - decalData[4] = ChaingunDecal5; - decalData[5] = ChaingunDecal6; + decalData[0] = ChaingunDecal1; + decalData[1] = ChaingunDecal2; + decalData[2] = ChaingunDecal3; + decalData[3] = ChaingunDecal4; + decalData[4] = ChaingunDecal5; + decalData[5] = ChaingunDecal6; }; -datablock ItemData(MRXXAmmo) -{ - className = Ammo; - catagory = "Ammo"; - shapeFile = "ammo_chaingun.dts"; - mass = 3; - elasticity = 0.2; - friction = 0.6; - pickupRadius = 2; +datablock ItemData(MRXXAmmo) { + className = Ammo; + catagory = "Ammo"; + shapeFile = "ammo_chaingun.dts"; + mass = 3; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; pickUpName = "some MRXX ammo"; - computeCRC = true; - + computeCRC = true; }; //-------------------------------------------------------------------------- // Weapon //-------------------------------------- datablock ShapeBaseImageData(MRXXImage) { - className = WeaponImage; - shapeFile = "weapon_mortar.dts"; - item = MRXX; - ammo = MRXXAmmo; - projectile = MRXXBullet; - projectileType = TracerProjectile; - emap = true; - mass = 26; + className = WeaponImage; + shapeFile = "weapon_mortar.dts"; + item = MRXX; + ammo = MRXXAmmo; + projectile = MRXXBullet; + projectileType = TracerProjectile; + emap = true; + mass = 26; - //ClipStuff - ClipName = "MRXXClip"; - ClipPickupName["MRXXClip"] = "some MRXX Clip Boxes"; - ShowsClipInHud = 1; - ClipReloadTime = 9; - ClipReturn = 150; - InitialClips = 5; - // - HasChallenges = 1; - ChallengeCt = 8; - Challenge[1] = "MRXX ZC4 Killer\t50\t100\tNone"; - Challenge[2] = "MRXX ZC4 Expert\t100\t250\tNone"; - Challenge[3] = "MRXX ZC4 Master\t250\t500\tGrip"; - Challenge[4] = "MRXX ZC4 God\t500\t1000\tSilencer"; - Challenge[5] = "MRXX ZC4 Bronze Commendation\t1500\t10000\tNone"; - Challenge[6] = "MRXX ZC4 Silver Commendation\t5000\t25000\tNone"; - Challenge[7] = "MRXX ZC4 Gold Commendation\t10000\t50000\tNone"; - Challenge[8] = "MRXX ZC4 Titan Commendation\t25000\t75000\tNone"; - Upgrade[1] = "Grip"; - Upgrade[2] = "Silencer"; - GunName = "MRXX ZC4 Machine Gun"; + //ClipStuff + ClipName = "MRXXClip"; + ClipPickupName["MRXXClip"] = "some MRXX Clip Boxes"; + ShowsClipInHud = 1; + ClipReloadTime = 9; + ClipReturn = 150; + InitialClips = 5; + // + HasChallenges = 1; + ChallengeCt = 8; + Challenge[1] = "MRXX ZC4 Killer\t50\t100\tNone"; + Challenge[2] = "MRXX ZC4 Expert\t100\t250\tNone"; + Challenge[3] = "MRXX ZC4 Master\t250\t500\tGrip"; + Challenge[4] = "MRXX ZC4 God\t500\t1000\tSilencer"; + Challenge[5] = "MRXX ZC4 Bronze Commendation\t1500\t10000\tNone"; + Challenge[6] = "MRXX ZC4 Silver Commendation\t5000\t25000\tNone"; + Challenge[7] = "MRXX ZC4 Gold Commendation\t10000\t50000\tNone"; + Challenge[8] = "MRXX ZC4 Titan Commendation\t25000\t75000\tNone"; + Upgrade[1] = "Grip"; + Upgrade[2] = "Silencer"; + GunName = "MRXX ZC4 Machine Gun"; - RankRequire = $TWM2::RankRequire["MRXX"]; + RankRequire = $TWM2::RankRequire["MRXX"]; - casing = ShellDebris; - shellExitDir = "0.5 0 1"; - shellExitOffset = "0.0 0.75 0.0"; - shellExitVariance = 5.0; - shellVelocity = 4.5; + casing = ShellDebris; + shellExitDir = "0.5 0 1"; + shellExitOffset = "0.0 0.75 0.0"; + shellExitVariance = 5.0; + shellVelocity = 4.5; - projectileSpread = 10.0 / 1000.0; + projectileSpread = 10.0 / 1000.0; - //-------------------------------------- - stateName[0] = "Activate"; - stateSequence[0] = "Activate"; - stateSound[0] = ChaingunSwitchSound; - stateAllowImageChange[0] = false; - // - stateTimeoutValue[0] = 0.5; - stateTransitionOnTimeout[0] = "Ready"; - stateTransitionOnNoAmmo[0] = "NoAmmo"; + //-------------------------------------- + stateName[0] = "Activate"; + stateSequence[0] = "Activate"; + stateSound[0] = ChaingunSwitchSound; + stateAllowImageChange[0] = false; + // + stateTimeoutValue[0] = 0.5; + stateTransitionOnTimeout[0] = "Ready"; + stateTransitionOnNoAmmo[0] = "NoAmmo"; - //-------------------------------------- - stateName[1] = "Ready"; - stateSpinThread[1] = Stop; - // - stateTransitionOnTriggerDown[1] = "Spinup"; - stateTransitionOnNoAmmo[1] = "NoAmmo"; + //-------------------------------------- + stateName[1] = "Ready"; + stateSpinThread[1] = Stop; + // + stateTransitionOnTriggerDown[1] = "Spinup"; + stateTransitionOnNoAmmo[1] = "NoAmmo"; - //-------------------------------------- - stateName[2] = "NoAmmo"; - stateTransitionOnAmmo[2] = "Ready"; - stateSpinThread[2] = Stop; - stateTransitionOnTriggerDown[2] = "DryFire"; + //-------------------------------------- + stateName[2] = "NoAmmo"; + stateTransitionOnAmmo[2] = "Ready"; + stateSpinThread[2] = Stop; + stateTransitionOnTriggerDown[2] = "DryFire"; - //-------------------------------------- - stateName[3] = "Spinup"; - stateSpinThread[3] = SpinUp; - stateSound[3] = ChaingunSpinupSound; - // - stateTimeoutValue[3] = 0.1; - stateWaitForTimeout[3] = false; - stateTransitionOnTimeout[3] = "Fire"; - stateTransitionOnTriggerUp[3] = "Spindown"; + //-------------------------------------- + stateName[3] = "Spinup"; + stateSpinThread[3] = SpinUp; + stateSound[3] = ChaingunSpinupSound; + // + stateTimeoutValue[3] = 0.1; + stateWaitForTimeout[3] = false; + stateTransitionOnTimeout[3] = "Fire"; + stateTransitionOnTriggerUp[3] = "Spindown"; - //-------------------------------------- - stateName[4] = "Fire"; - stateSequence[4] = "Fire"; - stateSequenceRandomFlash[4] = true; - stateSpinThread[4] = FullSpeed; - //stateSound[4] = MRXXFireSound; + //-------------------------------------- + stateName[4] = "Fire"; + stateSequence[4] = "Fire"; + stateSequenceRandomFlash[4] = true; + stateSpinThread[4] = FullSpeed; + //stateSound[4] = MRXXFireSound; - 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"; + 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"; - stateSound[5] = ChaingunSpinDownSound; - stateSpinThread[5] = SpinDown; - // - stateTimeoutValue[5] = 0.1; - stateWaitForTimeout[5] = true; - stateTransitionOnTimeout[5] = "Ready"; - stateTransitionOnTriggerDown[5] = "Spinup"; + //-------------------------------------- + stateName[5] = "Spindown"; + stateSound[5] = ChaingunSpinDownSound; + stateSpinThread[5] = SpinDown; + // + 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[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"; + //-------------------------------------- + stateName[7] = "DryFire"; + stateSound[7] = ChaingunDryFireSound; + stateTimeoutValue[7] = 0.5; + stateTransitionOnTimeout[7] = "NoAmmo"; }; datablock ItemData(MRXX) { - className = Weapon; - catagory = "Spawn Items"; - shapeFile = "turret_tank_barrelchain.dts"; - image = MRXXImage; - mass = 1.0; - elasticity = 0.2; - friction = 0.6; - pickupRadius = 2; - pickUpName = "a MRXX ZC4 MG"; + className = Weapon; + catagory = "Spawn Items"; + shapeFile = "turret_tank_barrelchain.dts"; + image = MRXXImage; + mass = 1.0; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; + pickUpName = "a MRXX ZC4 MG"; - computeCRC = true; - emap = true; + computeCRC = true; + emap = true; }; function MRXXImage::onFire(%data, %obj, %slot) { - %p = Parent::onFire(%data, %obj, %slot); - if(%obj.client.UpgradeOn("Silencer", %data.getName())) { - //zero sound :p - } - else { - ServerPlay3d(ChaingunFireSound, %obj.getPosition()); - } + %p = Parent::onFire(%data, %obj, %slot); + if(%obj.client.UpgradeOn("Silencer", %data.getName())) { + //zero sound :p + } + else { + ServerPlay3d(ChaingunFireSound, %obj.getPosition()); + } } diff --git a/scripts/weapons/Melee/BOV.cs b/scripts/weapons/Melee/BOV.cs index 87e9679..fb838ae 100644 --- a/scripts/weapons/Melee/BOV.cs +++ b/scripts/weapons/Melee/BOV.cs @@ -1,304 +1,273 @@ datablock AudioProfile(BOVHitSound) { - filename = "fx/misc/flag_snatch.wav"; - description = AudioClose3d; - preload = true; + filename = "fx/misc/flag_snatch.wav"; + description = AudioClose3d; + preload = true; }; -datablock ShapeBaseImageData(BOVButt) -{ - shapeFile = "weapon_disc.dts"; - mountPoint = 1; +datablock ShapeBaseImageData(BOVButt) { + shapeFile = "weapon_disc.dts"; + mountPoint = 1; - 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 + 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 +}; + +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) { - %obj.unmountImage(6); - %obj.mountImage(BOVButt, 5); + %obj.unmountImage(6); + %obj.mountImage(BOVButt, 5); } datablock LinearProjectileData(BOVhit) { - projectileShapeName = "disc.dts"; - emitterDelay = -1; - directDamage = 100.0; - radiusDamageType = $DamageType::Admin; - kickBackStrength = 1750; - - ImageSource = "BOVImage"; + projectileShapeName = "disc.dts"; + emitterDelay = -1; + directDamage = 0.9; + radiusDamageType = $DamageType::BladeOfVengance; + kickBackStrength = 1750; - sound = discProjectileSound; - explosion = "ChaingunExplosion"; - underwaterExplosion = "ChaingunExplosion"; - splash = DiscSplash; + ImageSource = "BOVImage"; - dryVelocity = 50; - wetVelocity = 30; - velInheritFactor = 0.5; - fizzleTimeMS = 100; - lifetimeMS = 100; - explodeOnDeath = true; - reflectOnWaterImpactAngle = 15.0; - explodeOnWaterImpact = true; - deflectionOnWaterImpact = 0.0; - fizzleUnderwaterMS = 5000; + sound = discProjectileSound; + explosion = "ChaingunExplosion"; + underwaterExplosion = "ChaingunExplosion"; + splash = DiscSplash; - 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; - lightRadius = 6.0; - lightColor = "0.175 0.175 0.5"; + activateDelayMS = 200; + + hasLight = true; + lightRadius = 6.0; + lightColor = "0.175 0.175 0.5"; }; //-------------------------------------------------------------------------- // Weapon //-------------------------------------- -datablock ShapeBaseImageData(BOVImage) -{ - className = WeaponImage; - shapeFile = "turret_muzzlepoint.dts"; - item = BOV; - projectile = BOVhit; - projectileType = LinearProjectile; +datablock ShapeBaseImageData(BOVImage) { + className = WeaponImage; + shapeFile = "turret_muzzlepoint.dts"; + item = BOV; + projectile = BOVhit; + projectileType = LinearProjectile; - usesEnergy = true; - fireEnergy = 20; - minEnergy = 30; - - MedalRequire = 1; + usesEnergy = true; + fireEnergy = 20; + minEnergy = 30; - stateName[0] = "Activate"; - stateTransitionOnTimeout[0] = "ActivateReady"; - stateTimeoutValue[0] = 1.0; - stateSequence[0] = "Activate"; - stateSound[0] = BlasterSwitchSound; + MedalRequire = 1; - stateName[1] = "ActivateReady"; - stateTransitionOnLoaded[1] = "Ready"; - stateTransitionOnNoAmmo[1] = "NoAmmo"; + stateName[0] = "Activate"; + stateTransitionOnTimeout[0] = "ActivateReady"; + stateTimeoutValue[0] = 1.0; + stateSequence[0] = "Activate"; + stateSound[0] = BlasterSwitchSound; - stateName[2] = "Ready"; - stateTransitionOnNoAmmo[2] = "NoAmmo"; - stateTransitionOnTriggerDown[2] = "Fire"; + stateName[1] = "ActivateReady"; + stateTransitionOnLoaded[1] = "Ready"; + stateTransitionOnNoAmmo[1] = "NoAmmo"; - stateName[3] = "Fire"; - stateTransitionOnTimeout[3] = "Reload"; - stateTimeoutValue[3] = 0.5; - stateFire[3] = true; - stateRecoil[3] = NoRecoil; - stateAllowImageChange[3] = false; - stateSequence[3] = "Fire"; - stateScript[3] = "onFire"; + stateName[2] = "Ready"; + stateTransitionOnNoAmmo[2] = "NoAmmo"; + stateTransitionOnTriggerDown[2] = "Fire"; - stateName[4] = "Reload"; - stateTransitionOnNoAmmo[4] = "NoAmmo"; - stateTransitionOnTimeout[4] = "Ready"; - stateAllowImageChange[4] = false; - stateSequence[4] = "Reload"; + stateName[3] = "Fire"; + stateTransitionOnTimeout[3] = "Reload"; + stateTimeoutValue[3] = 0.5; + stateFire[3] = true; + stateRecoil[3] = NoRecoil; + stateAllowImageChange[3] = false; + stateSequence[3] = "Fire"; + stateScript[3] = "onFire"; - stateName[5] = "NoAmmo"; - stateTransitionOnAmmo[5] = "Reload"; - stateSequence[5] = "NoAmmo"; - stateTransitionOnTriggerDown[5] = "DryFire"; + stateName[4] = "Reload"; + stateTransitionOnNoAmmo[4] = "NoAmmo"; + stateTransitionOnTimeout[4] = "Ready"; + stateAllowImageChange[4] = false; + stateSequence[4] = "Reload"; - stateName[6] = "DryFire"; - stateTimeoutValue[6] = 1.0; - stateSound[6] = BlasterDryFireSound; - stateTransitionOnTimeout[6] = "Ready"; + stateName[5] = "NoAmmo"; + stateTransitionOnAmmo[5] = "Reload"; + stateSequence[5] = "NoAmmo"; + stateTransitionOnTriggerDown[5] = "DryFire"; + + stateName[6] = "DryFire"; + stateTimeoutValue[6] = 1.0; + stateSound[6] = BlasterDryFireSound; + stateTransitionOnTimeout[6] = "Ready"; }; -datablock ItemData(BOV) -{ - className = Weapon; - catagory = "Spawn Items"; - shapeFile = "weapon_disc.dts"; - image = BOVImage; - mass = 1; - elasticity = 0.2; - friction = 0.6; - pickupRadius = 2; +datablock ItemData(BOV) { + className = Weapon; + catagory = "Spawn Items"; + shapeFile = "weapon_disc.dts"; + image = BOVImage; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; pickUpName = "a blade of vengance"; }; -function BOVImage::onMount(%data, %obj, %node) -{ - %obj.meleeIMG = %obj.mountImage(BOVButt, 5); +function BOVImage::onMount(%data, %obj, %node) { + if(!%obj.client.hasMedal(11) && !%obj.client.isAiControlled()) { + %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) -{ - %obj.unmountImage(5); +function BOVImage::onUnMount(%data, %obj, %node) { + %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) { - //dumbass use - //Person without the medal - if(!%obj.client.hasMedal(11) && !%obj.client.isAiControlled()) { - 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!"); - %obj.scriptKill($DamageType::Admin); - return; - } - if(%obj.cannotuseBOV) { //in the kill anim? - return; - } - // - %obj.unmountImage(5); - %obj.meleeIMG = %obj.mountImage(BoVSwing, 6); - %obj.backswing = schedule(300, 0, "swingbackbov", %obj); + if(!%obj.client.hasMedal(11) && !%obj.client.isAiControlled()) { + messageClient(%obj.client, 'MsgClient', "\c3You must aquire the 'Revenge Avoided Again' Medal to use this."); + return; + } + if(%obj.cannotuseBOV) { //in the kill anim? + return; + } + // + %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)() { - dataBlock = BOVhit; - initialDirection = %obj.getMuzzleVector(%slot); - initialPosition = %obj.getMuzzlePoint(%slot); - sourceObject = %obj; - sourceSlot = %slot; - }; - 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(); - } - } + %p = new (LinearProjectile)() { + dataBlock = BOVhit; + initialDirection = %obj.getMuzzleVector(%slot); + initialPosition = %obj.getMuzzlePoint(%slot); + sourceObject = %obj; + sourceSlot = %slot; + }; + MissionCleanup.add(%p); } function BOVhit::onCollision(%data, %projectile, %targetObject, %modifier, %position, %normal) { - if(%targetObject.isBoss) { - %targetObject.playShieldEffect("1 1 1"); - MessageClient(%projectile.sourceObject.client, 'MsgDeflect', "The Boss Deflects The Swipe"); - return; - } + %dMod = 1; + // if(%targetObject.rapierShield) { MessageClient(%projectile.sourceObject.client, 'MsgDeflect', "The Target Is Immortal."); 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); - %muzzleVec = %source.getMuzzleVector(0); + %muzzlePos = %source.getMuzzlePoint(0); + %muzzleVec = %source.getMuzzleVector(0); // extra damage for head shot or less for close range shots - if(!(%hitObj.getType() & ($TypeMasks::InteriorObjectType | $TypeMasks::TerrainObjectType)) && - (%hitObj.getDataBlock().getClassName() $= "PlayerData")) { - - if(%hitObj.getDataBlock().getClassName() $= "PlayerData") { - // Now we see if we hit from behind... - %forwardVec = %hitobj.getForwardVector(); - %objDir2D = getWord(%forwardVec, 0) @ " " @ getWord(%forwardVec,1) @ " " @ "0.0"; - %objPos = %hitObj.getPosition(); - %dif = VectorSub(%objPos, %muzzlePos); - %dif = getWord(%dif, 0) @ " " @ getWord(%dif, 1) @ " 0"; - %dif = VectorNormalize(%dif); - %dot = VectorDot(%dif, %objDir2D); - - // 120 Deg angle test... - // 1.05 == 60 degrees in radians - if (%dot >= mCos(1.05)) { - // Rear hit - %source.applyRepair("0.45"); //we get a bonus repair for rear - if(%source.team == %hitObj.team && !$TeamDamage) { - ServerPlay3d(BOVHitSound, %targetObject.getPosition()); - return; //stops shredding - } - %source.cannotuseBOV = 1; - if(!%hitObj.IsinvincibleC) { - DoBOVRearKill(%source, %hitObj, 0); - } - return; - } - } - - ServerPlay3d(BOVHitSound, %targetObject.getPosition()); - //The Blade Only Works On Players - %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."); - } - } - } + if(!(%hitObj.getType() & ($TypeMasks::InteriorObjectType | $TypeMasks::TerrainObjectType)) && (%hitObj.getDataBlock().getClassName() $= "PlayerData")) { + if(%hitObj.getDataBlock().getClassName() $= "PlayerData") { + // Now we see if we hit from behind... + %forwardVec = %hitobj.getForwardVector(); + %objDir2D = getWord(%forwardVec, 0) @ " " @ getWord(%forwardVec,1) @ " " @ "0.0"; + %objPos = %hitObj.getPosition(); + %dif = VectorSub(%objPos, %muzzlePos); + %dif = getWord(%dif, 0) @ " " @ getWord(%dif, 1) @ " 0"; + %dif = VectorNormalize(%dif); + %dot = VectorDot(%dif, %objDir2D); + // 120 Deg angle test... + // 1.05 == 60 degrees in radians + if (%dot >= mCos(1.05)) { + // Rear hit + %source.applyRepair("0.45"); //we get a bonus repair for rear + if(%source.team == %hitObj.team && !$TeamDamage) { + ServerPlay3d(BOVHitSound, %targetObject.getPosition()); + return; + } + %source.cannotuseBOV = 1; + if(!%hitObj.IsinvincibleC) { + 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); + if(isObject(%source) || %source.getState() !$= "dead") { + %source.applyRepair("0.15"); //15% + } + } } function DoBOVRearKill(%source, %target, %count) { - %count++; - if(!isObject(%source) || %source.getState() $= "dead") { - %target.setMoveState(false); - return; - } - %source.setMoveState(true); - %target.setMoveState(true); - %target.clearInventory(); //ha, no guns for You! - //lift - if(%count <= 15) { - %ZPos = %count * 0.025; - %newpos = vectoradd(%target.getPosition(),"0 0 "@%ZPos@""); - %target.setTransform(%newpos); - %target.setvelocity("0 0 0"); - } - else if(%count == 16) { - //MessageAll('MsgDIE', "\c4"@%source.client.namebase@": You're so.... weak..."); - %newpos = vectoradd(%target.getPosition(),"0 0 "@%ZPos * -1@""); - %target.setTransform(%newpos); - %target.setvelocity("0 0 0"); - } - else if(%count == 17) { - if(%target.isZombie) { - recordAction(%source.client, "BACK", "zombie"); - if(%target.isPlayerRog && %target.getControllingClient() !$= "") { - if(!%source.client.CheckNWChallengeCompletion("CompletelyUnexpected")) { - CompleteNWChallenge(%source.client, "CompletelyUnexpected"); - } - } - } - else { - recordAction(%source.client, "BACK", "player"); - if(!%source.client.CheckNWChallengeCompletion("Assassin")) { - CompleteNWChallenge(%source.client, "Assassin"); - } - } - //%target.blowup();//BAM! - ServerPlay3d(BOVHitSound, %target.getPosition()); - ServerPlay3d(BOVHitSound, %target.getPosition()); - 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@"."); - } - //Challenges... - %source.cannotuseBOV = 0; - %source.setMoveState(false); - return; - } - schedule(100,0,"DoBOVRearKill", %source, %target, %count); + %count++; + if(!isObject(%source) || %source.getState() $= "dead") { + %target.setMoveState(false); + return; + } + %source.setMoveState(true); + %target.setMoveState(true); + %target.clearInventory(); //ha, no guns for You! + //lift + if(%count <= 15) { + %ZPos = %count * 0.025; + %newpos = vectoradd(%target.getPosition(),"0 0 "@%ZPos@""); + %target.setTransform(%newpos); + %target.setvelocity("0 0 0"); + } + else if(%count == 16) { + %newpos = vectoradd(%target.getPosition(),"0 0 "@%ZPos * -1@""); + %target.setTransform(%newpos); + %target.setvelocity("0 0 0"); + } + else if(%count == 17) { + if(%target.isZombie) { + recordAction(%source.client, "BACK", "zombie"); + if(%target.isPlayerRog && %target.getControllingClient() !$= "") { + if(!%source.client.CheckNWChallengeCompletion("CompletelyUnexpected")) { + CompleteNWChallenge(%source.client, "CompletelyUnexpected"); + } + } + } + else { + recordAction(%source.client, "BACK", "player"); + if(!%source.client.CheckNWChallengeCompletion("Assassin")) { + CompleteNWChallenge(%source.client, "Assassin"); + } + } + ServerPlay3d(BOVHitSound, %target.getPosition()); + ServerPlay3d(BOVHitSound, %target.getPosition()); + ServerPlay3d(BOVHitSound, %target.getPosition()); + %target.damage(%source, %target.getposition(), 9999, $DamageType::BladeOfVengance_Assassination); + // + if(%target.client !$= "") { //a Player.. goodie + MessageAll('MessageAll', "\c0"@%target.client.namebase@" was assassinated by "@%source.client.namebase@"."); + } + //Challenges... + %source.cannotuseBOV = 0; + %source.setMoveState(false); + return; + } + schedule(100,0,"DoBOVRearKill", %source, %target, %count); } diff --git a/scripts/weapons/Melee/Plasmasabre.cs b/scripts/weapons/Melee/Plasmasabre.cs index 0fb8679..524f14c 100644 --- a/scripts/weapons/Melee/Plasmasabre.cs +++ b/scripts/weapons/Melee/Plasmasabre.cs @@ -1,31 +1,28 @@ //ALL CREDIT TO THE HALO MOD // ORIGINALLY CODED BY: SoldierOfLight -datablock AudioProfile(BeamExpSound) -{ - filename = "fx/vehicles/shrike_blaster_projectile_impact.wav"; - description = AudioClosest3d; - preload = true; +datablock AudioProfile(BeamExpSound) { + filename = "fx/vehicles/shrike_blaster_projectile_impact.wav"; + description = AudioClosest3d; + preload = true; }; -datablock ExplosionData(PlasmasaberExplosion) -{ - explosionShape = "disc_explosion.dts"; - faceViewer = true; - explosionscale = 0.1; - scale = 0.1; - soundProfile = BeamExpSound; +datablock ExplosionData(PlasmasaberExplosion) { + explosionShape = "disc_explosion.dts"; + faceViewer = true; + explosionscale = 0.1; + scale = 0.1; + soundProfile = BeamExpSound; - playSpeed = 2; + playSpeed = 2; - sizes[0] = 0.1; - sizes[1] = 0.1; - times[0] = 0.0; - times[1] = 1.0; + sizes[0] = 0.1; + sizes[1] = 0.1; + times[0] = 0.0; + times[1] = 1.0; }; -datablock TracerProjectileData(PlasmasaberExpCreater) -{ +datablock TracerProjectileData(PlasmasaberExpCreater) { className = "TracerProjectileData"; Explosion = "PlasmasaberExplosion"; dryVelocity = "0.1"; @@ -35,211 +32,192 @@ datablock TracerProjectileData(PlasmasaberExpCreater) explodeOnDeath = "1"; crossSize = "0.1"; renderCross = "0"; - isFXUnit = "1"; + isFXUnit = "1"; }; -datablock TargetProjectileData(PlasmasaberBeam) -{ - directDamage = 0.0; - hasDamageRadius = false; - indirectDamage = 0.0; - damageRadius = 0.0; - velInheritFactor = 1.0; +datablock TargetProjectileData(PlasmasaberBeam) { + directDamage = 0.0; + hasDamageRadius = false; + indirectDamage = 0.0; + damageRadius = 0.0; + velInheritFactor = 1.0; - maxRifleRange = 1.5; - beamColor = "0 1 1"; + maxRifleRange = 1.5; + beamColor = "1 1 0"; - startBeamWidth = 0.1; - pulseBeamWidth = 0.1; - beamFlareAngle = 3.0; - minFlareSize = 0.0; - maxFlareSize = 0.0; - pulseSpeed = 0.0; - pulseLength = 0.0; + startBeamWidth = 0.1; + pulseBeamWidth = 0.1; + beamFlareAngle = 3.0; + minFlareSize = 0.0; + maxFlareSize = 0.0; + pulseSpeed = 0.0; + pulseLength = 0.0; - textureName[0] = "special/nonlingradient"; - textureName[1] = "special/flare"; - textureName[2] = "special/pulse"; - textureName[3] = "skins/glow_Red"; + textureName[0] = "special/nonlingradient"; + textureName[1] = "special/flare"; + textureName[2] = "special/pulse"; + textureName[3] = "skins/glow_Red"; }; -PlasmasaberBeam.maxRifleRange = 1.5; - -datablock ItemData(Plasmasaber) -{ - className = Weapon; - catagory = "Spawn Items"; - //$$ TODO - real shape file - shapeFile = "stackable4m.dts"; - image = PlasmasaberImage; - mass = 1; - elasticity = 0.2; - friction = 0.6; - pickupRadius = 2; +datablock ItemData(Plasmasaber) { + className = Weapon; + catagory = "Spawn Items"; + //$$ TODO - real shape file + shapeFile = "stackable4m.dts"; + image = PlasmasaberImage; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; pickUpName = "a beam sword"; - computeCRC = true; - emap=true; + computeCRC = true; + emap = true; }; -datablock ShapeBaseImageData(PlasmasaberImage) -{ - className = WeaponImage; - shapeFile = "turret_muzzlepoint.dts"; - offset = "0.1 0.7 0.2"; - item = Plasmasaber; - emap = true; - projectile = EnergyBolt; - projectileType = EnergyProjectile; - - MedalRequire = 1; +datablock ShapeBaseImageData(PlasmasaberImage) { + className = WeaponImage; + shapeFile = "turret_muzzlepoint.dts"; + offset = "0.1 0.7 0.2"; + item = Plasmasaber; + emap = true; + projectile = EnergyBolt; + projectileType = EnergyProjectile; - // State Data - stateName[0] = "Activate"; - stateTransitionOnTimeout[0] = "ActivateReady"; - stateTimeoutValue[0] = 0.2; - stateSequence[0] = "Activate"; - stateSound[0] = ChaingunSwitchSound; + MedalRequire = 1; - stateName[1] = "ActivateReady"; - stateTimeoutValue[1] = 0.01; - stateScript[1] = "onActivateReady"; - stateTransitionOnTimeout[1] = "Ready"; + // State Data + stateName[0] = "Activate"; + stateTransitionOnTimeout[0] = "ActivateReady"; + stateTimeoutValue[0] = 0.2; + stateSequence[0] = "Activate"; + stateSound[0] = ChaingunSwitchSound; - stateName[2] = "Ready"; - stateScript[2] = "onReady"; - stateTransitionOnTriggerDown[2] = "Fire"; + stateName[1] = "ActivateReady"; + stateTimeoutValue[1] = 0.01; + stateScript[1] = "onActivateReady"; + stateTransitionOnTimeout[1] = "Ready"; - stateName[3] = "Fire"; - stateTransitionOnTimeout[3] = "Reload"; - stateFire[3] = true; - stateAllowImageChange[3] = false; - stateScript[3] = "onFire"; + stateName[2] = "Ready"; + stateScript[2] = "onReady"; + stateTransitionOnTriggerDown[2] = "Fire"; - stateName[4] = "Reload"; - stateTransitionOnTimeout[4] = "Ready"; - stateTimeoutValue[4] = 1.5; - stateAllowImageChange[4] = false; + stateName[3] = "Fire"; + stateTransitionOnTimeout[3] = "Reload"; + stateFire[3] = true; + stateAllowImageChange[3] = false; + stateScript[3] = "onFire"; + + stateName[4] = "Reload"; + stateTransitionOnTimeout[4] = "Ready"; + stateTimeoutValue[4] = 1.5; + stateAllowImageChange[4] = false; }; -datablock ShapeBaseImageData(PlasmasaberImage2) -{ - shapeFile = "weapon_energy_vehicle.dts"; - offset = "0.1 0.2 0"; - rotation = "1 0 0 -10"; +datablock ShapeBaseImageData(PlasmasaberImage2) { + shapeFile = "weapon_energy_vehicle.dts"; + offset = "0.1 0.2 0"; + rotation = "1 0 0 -10"; }; -function PlasmasaberImage::onMount(%data,%obj,%slot) -{ - if(%obj.isZombie || %obj.isBoss) { - %obj.setInventory(Plasmasaber, 0, true); - } - Parent::onMount(%data,%obj,%slot); - %obj.mountImage(PlasmasaberImage2,4); - %obj.usingPlasmasaber = 1; +function PlasmasaberImage::onMount(%data, %obj, %slot) { + if(%obj.isZombie || %obj.isBoss) { + %obj.setInventory(Plasmasaber, 0, true); + } + Parent::onMount(%data,%obj,%slot); + %obj.mountImage(PlasmasaberImage2, 4); + %obj.usingPlasmasaber = 1; } -function PlasmasaberImage::onUnmount(%data,%obj,%slot) -{ - Parent::onUnmount(%data,%obj,%slot); - %obj.unMountImage(4); - %obj.usingPlasmasaber = 0; - cancel(%obj.Plasmasaberloop); - if(isObject(%obj.beam1)) - { - %obj.beam1.delete(); - %obj.beam1 = ""; - } +function PlasmasaberImage::onUnmount(%data, %obj, %slot) { + Parent::onUnmount(%data,%obj,%slot); + %obj.unMountImage(4); + %obj.usingPlasmasaber = 0; + cancel(%obj.Plasmasaberloop); + if(isObject(%obj.beam1)) { + %obj.beam1.delete(); + %obj.beam1 = ""; + } } -function PlasmasaberImage::onActivateReady(%data,%obj,%slot) //small explosion -{ - %p = new TracerProjectile() - { - datablock = "PlasmasaberExpCreater"; - initialPosition = %obj.getMuzzlePoint(%slot); - initialDirection = %obj.getMuzzleVector(%slot); - sourceObject = %obj; - }; +function PlasmasaberImage::onActivateReady(%data, %obj, %slot) { //small explosion + %p = new TracerProjectile() { + datablock = "PlasmasaberExpCreater"; + initialPosition = %obj.getMuzzlePoint(%slot); + initialDirection = %obj.getMuzzleVector(%slot); + sourceObject = %obj; + }; } -function PlasmasaberImage::onReady(%data,%obj,%slot) //create beams -{ - Plasmasaberloop(%obj); +function PlasmasaberImage::onReady(%data, %obj, %slot) { //create beams + Plasmasaberloop(%obj); } -function PlasmasaberLoop(%obj) -{ - if(!isObject(%obj) || %obj.getState() $= "dead") { - return; - } - if(%obj.usingPlasmasaber == 0) - { - if(isObject(%obj.beam1)) - %obj.beam1.delete(); - return; - } - %vec1 = %obj.getMuzzleVector(4); - %vec = %obj.getMuzzleVector(0); - %vec2d = getWords(%vec,0,1) SPC "0"; - %left = vectorCross(%vec2d,"0 0 1"); - %up = vectorCross(%vec,%left); - %up = vectorScale(%up,0.2); - %down = vectorScale(%up,-1); - %pos1 = %obj.getMuzzlePoint(5); - %dir1 = vectorAdd(%vec1,%down); - if(!isObject(%obj.beam1) && !%obj.isCloaked()) - { - %obj.beam1 = new TargetProjectile() - { - datablock = "PlasmasaberBeam"; - initialPosition = %pos1; - initialDirection = %dir1; - sourceSlot = 4; - sourceObject = %obj; - }; - } - %obj.Plasmasaberloop = schedule(25,0,Plasmasaberloop,%obj); +function PlasmasaberLoop(%obj) { + if(!isObject(%obj) || %obj.getState() $= "dead") { + return; + } + if(%obj.usingPlasmasaber == 0) { + if(isObject(%obj.beam1)) { + %obj.beam1.delete(); + } + return; + } + %vec1 = %obj.getMuzzleVector(4); + %vec = %obj.getMuzzleVector(0); + %vec2d = getWords(%vec,0,1) SPC "0"; + %left = vectorCross(%vec2d,"0 0 1"); + %up = vectorCross(%vec,%left); + %up = vectorScale(%up,0.2); + %down = vectorScale(%up,-1); + %pos1 = %obj.getMuzzlePoint(5); + %dir1 = vectorAdd(%vec1,%down); + if(!isObject(%obj.beam1) && !%obj.isCloaked()) { + %obj.beam1 = new TargetProjectile() { + datablock = "PlasmasaberBeam"; + initialPosition = %pos1; + initialDirection = %dir1; + sourceSlot = 4; + sourceObject = %obj; + }; + } + %obj.Plasmasaberloop = schedule(25, 0, Plasmasaberloop, %obj); } -function PlasmasaberImage::onFire(%data,%obj,%slot) //apply damage -{ - %vec = %obj.getMuzzleVector(%slot); - %pos = %obj.getMuzzlePoint(%slot); - %vec = vectorScale(%vec,1.5); - %end = vectorAdd(%pos,%vec); - %mask = $TypeMasks::VehicleObjectType | $TypeMasks::PlayerObjectType | $TypeMasks::StaticShapeObjectType; - initContainerRadiusSearch(%end,1.0,%mask); - while((%target = containerSearchNext()) != 0) { - if(%target == %obj) //you can never be too careful - return; - if(!%target.isBoss) { - %target.damage(%obj,%target.getWorldBoxCenter(), 10.4, $DamageType::Plasmasaber); - } - else { - %target.damage(%obj,%target.getWorldBoxCenter(), 0.4, $DamageType::Plasmasaber); - } - %p = new TracerProjectile() - { - datablock = "PlasmasaberExpCreater"; - initialPosition = %target.getPosition(); - 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 PlasmasaberImage::onFire(%data, %obj, %slot) { //apply damage + %vec = %obj.getMuzzleVector(%slot); + %pos = %obj.getMuzzlePoint(%slot); + %vec = vectorScale(%vec, 1.5); + %end = vectorAdd(%pos, %vec); + %mask = $TypeMasks::VehicleObjectType | $TypeMasks::PlayerObjectType | $TypeMasks::StaticShapeObjectType; + initContainerRadiusSearch(%end, 1.0, %mask); + while((%target = containerSearchNext()) != 0) { + if(%target == %obj) { + return; + } + //if(!%target.isBoss) { + // %target.damage(%obj, %target.getWorldBoxCenter(), 10.4, $DamageType::Plasmasaber); + //} + //else { + // %target.damage(%obj, %target.getWorldBoxCenter(), 0.4, $DamageType::Plasmasaber); + //} + //TWM2 3.9.2: Balance Update, Bump Up Plasmasaber damage for all enemies + %target.damage(%obj, %target.getWorldBoxCenter(), 5.0, $DamageType::Plasmasaber); + %p = new TracerProjectile() { + datablock = "PlasmasaberExpCreater"; + initialPosition = %target.getPosition(); + initialDirection = %obj.getMuzzleVector(%slot); //who cares? + sourceObject = %obj; + }; + } } -function Plasmasaber::onThrow(%data,%obj,%plyr) -{ - %pos = %obj.getPosition(); - %p = new TracerProjectile() - { - datablock = "PlasmasaberExpCreater"; - initialPosition = %pos; - initialDirection = "0 0 1"; - sourceObject = %obj; - }; +function Plasmasaber::onThrow(%data, %obj, %plyr) { + %pos = %obj.getPosition(); + %p = new TracerProjectile() { + datablock = "PlasmasaberExpCreater"; + initialPosition = %pos; + initialDirection = "0 0 1"; + sourceObject = %obj; + }; } diff --git a/scripts/weapons/Other/AcidCannon.cs b/scripts/weapons/Other/AcidCannon.cs index 959a8cc..22f5ca1 100644 --- a/scripts/weapons/Other/AcidCannon.cs +++ b/scripts/weapons/Other/AcidCannon.cs @@ -155,49 +155,6 @@ datablock TracerProjectileData(LZombieAcidBall) { 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) { doDynamicClientHits = true; diff --git a/scripts/weapons/Other/IonLauncher.cs b/scripts/weapons/Other/IonLauncher.cs index 3b6bcaa..d846ac7 100644 --- a/scripts/weapons/Other/IonLauncher.cs +++ b/scripts/weapons/Other/IonLauncher.cs @@ -1,146 +1,146 @@ -datablock ItemData(IonLauncherAmmo) -{ - className = Ammo; - catagory = "Ammo"; - shapeFile = "ammo_missile.dts"; - mass = 1; - elasticity = 0.2; - friction = 0.6; - pickupRadius = 2; +datablock ItemData(IonLauncherAmmo) { + className = Ammo; + catagory = "Ammo"; + shapeFile = "ammo_missile.dts"; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; pickUpName = "Some Ion Launcher Missiles"; - computeCRC = true; + computeCRC = true; }; //-------------------------------------------------------------------------- // Weapon //-------------------------------------- -datablock ItemData(IonLauncher) -{ - className = Weapon; - catagory = "Spawn Items"; - shapeFile = "weapon_grenade_launcher.dts"; - image = IonLauncherImage; - mass = 1; - elasticity = 0.2; - friction = 0.6; - pickupRadius = 2; - pickUpName = "an Ion Launcher"; +datablock ItemData(IonLauncher) { + className = Weapon; + catagory = "Spawn Items"; + shapeFile = "weapon_grenade_launcher.dts"; + image = IonLauncherImage; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; + pickUpName = "an Ion Launcher"; - computeCRC = true; - emap = true; + computeCRC = true; + emap = true; }; -datablock ShapeBaseImageData(IonLauncherImage) -{ - className = WeaponImage; - shapeFile = "weapon_grenade_launcher.dts"; - item = IonLauncher; - ammo = IonLauncherAmmo; - offset = "0 -1 0"; - armThread = lookms; - emap = true; +datablock ShapeBaseImageData(IonLauncherImage) { + className = WeaponImage; + shapeFile = "weapon_grenade_launcher.dts"; + item = IonLauncher; + ammo = IonLauncherAmmo; + offset = "0 -1 0"; + armThread = lookms; + emap = true; - projectile = IonMissile; - projectileType = seekerprojectile; - projectileSpread = 1.0 / 1000.0; + projectile = IonMissile; + projectileType = seekerprojectile; + projectileSpread = 1.0 / 1000.0; - //ClipStuff - ClipName = "IonLauncherClip"; - ClipPickupName["IonLauncherClip"] = "A Few Ion Missile boxes"; - ShowsClipInHud = 1; - ClipReloadTime = 6; - ClipReturn = 2; - 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. + //ClipStuff + ClipName = "IonLauncherClip"; + ClipPickupName["IonLauncherClip"] = "A Few Ion Missile boxes"; + ShowsClipInHud = 1; + ClipReloadTime = 6; + ClipReturn = 2; + InitialClips = 7; - // only target objects outside this range - minTargetingDistance = 40; + GunName = "LUX-4 Ion Launcher"; + // - stateName[0] = "Activate"; - stateTransitionOnTimeout[0] = "ActivateReady"; - stateTimeoutValue[0] = 2.0; - stateSequence[0] = "Activate"; - stateSound[0] = MissileSwitchSound; + MedalRequire = 1; - stateName[1] = "ActivateReady"; - stateTransitionOnLoaded[1] = "Ready"; - stateTransitionOnNoAmmo[1] = "NoAmmo"; + isSeeker = true; + seekRadius = 1000; + maxSeekAngle = 8; + seekTime = 0.5; + minSeekHeat = 0.1; // the heat that must be present on a target to lock it. - stateName[2] = "Ready"; - stateTransitionOnNoAmmo[2] = "NoAmmo"; - stateTransitionOnTriggerDown[2] = "CheckWet"; + // only target objects outside this range + minTargetingDistance = 40; - stateName[3] = "Fire"; - stateTransitionOnTimeout[3] = "Reload"; - stateTimeoutValue[3] = 0.4; - stateFire[3] = true; - stateRecoil[3] = LightRecoil; - stateAllowImageChange[3] = false; - stateSequence[3] = "Fire"; - stateScript[3] = "onFire"; - stateSound[3] = MissileFireSound; + stateName[0] = "Activate"; + stateTransitionOnTimeout[0] = "ActivateReady"; + stateTimeoutValue[0] = 2.0; + stateSequence[0] = "Activate"; + stateSound[0] = MissileSwitchSound; - stateName[4] = "Reload"; - stateTransitionOnNoAmmo[4] = "NoAmmo"; - stateTransitionOnTimeout[4] = "Ready"; - stateTimeoutValue[4] = 4.5; - stateAllowImageChange[4] = false; - stateSequence[4] = "Reload"; - stateSound[4] = MissileReloadSound; + stateName[1] = "ActivateReady"; + stateTransitionOnLoaded[1] = "Ready"; + stateTransitionOnNoAmmo[1] = "NoAmmo"; - stateName[5] = "NoAmmo"; - stateTransitionOnAmmo[5] = "Reload"; - stateSequence[5] = "NoAmmo"; - stateTransitionOnTriggerDown[5] = "DryFire"; + stateName[2] = "Ready"; + stateTransitionOnNoAmmo[2] = "NoAmmo"; + stateTransitionOnTriggerDown[2] = "CheckWet"; - stateName[6] = "DryFire"; - stateSound[6] = MissileDryFireSound; - stateTimeoutValue[6] = 1.0; - stateTransitionOnTimeout[6] = "ActivateReady"; + stateName[3] = "Fire"; + stateTransitionOnTimeout[3] = "Reload"; + stateTimeoutValue[3] = 0.4; + stateFire[3] = true; + stateRecoil[3] = LightRecoil; + stateAllowImageChange[3] = false; + stateSequence[3] = "Fire"; + stateScript[3] = "onFire"; + stateSound[3] = MissileFireSound; - stateName[7] = "CheckTarget"; - stateTransitionOnNoTarget[7] = "Fire"; - stateTransitionOnTarget[7] = "Fire"; + stateName[4] = "Reload"; + stateTransitionOnNoAmmo[4] = "NoAmmo"; + stateTransitionOnTimeout[4] = "Ready"; + stateTimeoutValue[4] = 4.5; + stateAllowImageChange[4] = false; + stateSequence[4] = "Reload"; + stateSound[4] = MissileReloadSound; - stateName[8] = "CheckWet"; - stateTransitionOnWet[8] = "DryFire"; - stateTransitionOnNotWet[8] = "CheckTarget"; + stateName[5] = "NoAmmo"; + stateTransitionOnAmmo[5] = "Reload"; + stateSequence[5] = "NoAmmo"; + stateTransitionOnTriggerDown[5] = "DryFire"; - stateName[9] = "WetFire"; - stateTransitionOnNoAmmo[9] = "NoAmmo"; - stateTransitionOnTimeout[9] = "Reload"; - stateTimeoutValue[9] = 0.4; - stateScript[9] = "onWetFire"; - stateAllowImageChange[9] = false; + stateName[6] = "DryFire"; + stateSound[6] = MissileDryFireSound; + stateTimeoutValue[6] = 1.0; + stateTransitionOnTimeout[6] = "ActivateReady"; + + 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) { - %p = Parent::onFire(%data, %obj, %slot); - MissileSet.add(%p); + %p = Parent::onFire(%data, %obj, %slot); + MissileSet.add(%p); - %target = %obj.getLockedTarget(); - if(%target) - %p.setObjectTarget(%target); - else if(%obj.isLocked()) - %p.setPositionTarget(%obj.getLockedPosition()); - else - %p.setNoTarget(); + %target = %obj.getLockedTarget(); + if(%target) { + %p.setObjectTarget(%target); + } + else if(%obj.isLocked()) { + %p.setPositionTarget(%obj.getLockedPosition()); + } + else { + %p.setNoTarget(); + } } function IonLauncherImage::onWetFire(%data, %obj, %slot) { - %p = Parent::onFire(%data, %obj, %slot); - MissileSet.add(%p); + %p = Parent::onFire(%data, %obj, %slot); + MissileSet.add(%p); - %p.setObjectTarget(0); + %p.setObjectTarget(0); } diff --git a/scripts/weapons/Other/IonRifle.cs b/scripts/weapons/Other/IonRifle.cs index f2062d4..198867d 100644 --- a/scripts/weapons/Other/IonRifle.cs +++ b/scripts/weapons/Other/IonRifle.cs @@ -1,96 +1,97 @@ datablock ItemData(IonRifle) { - className = Weapon; - catagory = "Spawn Items"; - shapeFile = "weapon_sniper.dts"; - image = IonRifleImage; - mass = 1; - elasticity = 0.2; - friction = 0.6; - pickupRadius = 2; - pickUpName = "a sniper rifle"; - - computeCRC = true; + className = Weapon; + catagory = "Spawn Items"; + shapeFile = "weapon_sniper.dts"; + image = IonRifleImage; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; + pickUpName = "a LUX Ion Rifle"; + computeCRC = true; }; datablock ShapeBaseImageData(IonRifleImage) { - className = WeaponImage; - shapeFile = "weapon_sniper.dts"; - item = IonRifle; - projectile = ShockBeam; - projectileType = SniperProjectile; - armThread = looksn; + className = WeaponImage; + shapeFile = "weapon_sniper.dts"; + item = IonRifle; + projectile = ShockBeam; + projectileType = SniperProjectile; + armThread = looksn; - MedalRequire = 1; + MedalRequire = 1; - usesEnergy = true; - minEnergy = 6; + usesEnergy = true; + minEnergy = 6; - stateName[0] = "Activate"; - stateTransitionOnTimeout[0] = "ActivateReady"; - stateSound[0] = SniperRifleSwitchSound; - stateTimeoutValue[0] = 0.5; - stateSequence[0] = "Activate"; + stateName[0] = "Activate"; + stateTransitionOnTimeout[0] = "ActivateReady"; + stateSound[0] = SniperRifleSwitchSound; + stateTimeoutValue[0] = 0.5; + stateSequence[0] = "Activate"; - stateName[1] = "ActivateReady"; - stateTransitionOnLoaded[1] = "Ready"; - stateTransitionOnNoAmmo[1] = "NoAmmo"; + stateName[1] = "ActivateReady"; + stateTransitionOnLoaded[1] = "Ready"; + stateTransitionOnNoAmmo[1] = "NoAmmo"; - stateName[2] = "Ready"; - stateTransitionOnNoAmmo[2] = "NoAmmo"; - stateTransitionOnTriggerDown[2] = "CheckWet"; + stateName[2] = "Ready"; + stateTransitionOnNoAmmo[2] = "NoAmmo"; + stateTransitionOnTriggerDown[2] = "CheckWet"; - stateName[3] = "Fire"; - stateTransitionOnTimeout[3] = "Reload"; - stateTimeoutValue[3] = 0.5; - stateFire[3] = true; - stateAllowImageChange[3] = false; - stateSequence[3] = "Fire"; - stateScript[3] = "onFire"; + stateName[3] = "Fire"; + stateTransitionOnTimeout[3] = "Reload"; + stateTimeoutValue[3] = 0.5; + stateFire[3] = true; + stateAllowImageChange[3] = false; + stateSequence[3] = "Fire"; + stateScript[3] = "onFire"; - stateName[4] = "Reload"; - stateTransitionOnTimeout[4] = "Ready"; - stateTimeoutValue[4] = 0.5; - stateAllowImageChange[4] = false; + stateName[4] = "Reload"; + stateTransitionOnTimeout[4] = "Ready"; + stateTimeoutValue[4] = 0.5; + stateAllowImageChange[4] = false; - stateName[5] = "CheckWet"; - stateTransitionOnWet[5] = "DryFire"; - stateTransitionOnNotWet[5] = "Fire"; + stateName[5] = "CheckWet"; + stateTransitionOnWet[5] = "DryFire"; + stateTransitionOnNotWet[5] = "Fire"; - stateName[6] = "NoAmmo"; - stateTransitionOnAmmo[6] = "Reload"; - stateTransitionOnTriggerDown[6] = "DryFire"; - stateSequence[6] = "NoAmmo"; + stateName[6] = "NoAmmo"; + stateTransitionOnAmmo[6] = "Reload"; + stateTransitionOnTriggerDown[6] = "DryFire"; + stateSequence[6] = "NoAmmo"; - stateName[7] = "DryFire"; - stateSound[7] = SniperRifleDryFireSound; - stateTimeoutValue[7] = 0.5; - stateTransitionOnTimeout[7] = "Ready"; + stateName[7] = "DryFire"; + stateSound[7] = SniperRifleDryFireSound; + stateTimeoutValue[7] = 0.5; + stateTransitionOnTimeout[7] = "Ready"; }; function IonRifleImage::OnFire(%data, %obj, %slot) { - ServerPlay3D(thunderCrash2, %obj.getPosition()); - %pos = %obj.getMuzzlePoint(%slot); - %vec = %obj.getMuzzleVector(%slot); - %res = containerRayCast(%pos,vectorAdd(%pos,vectorScale(%vec,2000)), $TypeMasks::PlayerObjectType | $TypeMasks::TerrainObjectType | $TypeMasks::InteriorObjectType | $TypeMasks::StaticObjectType,%obj); - %HObj = getWord(%res, 0); - if(%HObj !$= "" && %HObj != 0) { - if(!(%HObj.getType() & ($TypeMasks::InteriorObjectType | $TypeMasks::TerrainObjectType))) { - %cn = %HObj.getDatablock().getClassName(); - if(%cn $= "PlayerData" || strstr(%cn, "Vehicle") != -1) { - %HObj.getDataBlock().damageObject(%HObj, %obj, %HObj.getPosition(), 0.45, $DamageType::Lightning); - } - } - } - if (%res) - %hitLoc = getWords(%res,1,3); - else - %hitLoc = vectorAdd(%pos,vectorScale(%vec,2000)); - %p = discharge(%pos,%vec); - %p.setEnergyPercentage(1); - createLifeLight(%hitLoc,1,1000); - addToShock(%p); - %p.schedule(1000,"delete"); - zap(0,25,%hitLoc); - ServerPlay3D(thunderCrash2, %hitLoc); + ServerPlay3D(thunderCrash2, %obj.getPosition()); + %pos = %obj.getMuzzlePoint(%slot); + %vec = %obj.getMuzzleVector(%slot); + %res = containerRayCast(%pos,vectorAdd(%pos,vectorScale(%vec,2000)), $TypeMasks::PlayerObjectType | $TypeMasks::TerrainObjectType | $TypeMasks::InteriorObjectType | $TypeMasks::StaticObjectType,%obj); + %HObj = getWord(%res, 0); + if(%HObj !$= "" && %HObj != 0) { + if(!(%HObj.getType() & ($TypeMasks::InteriorObjectType | $TypeMasks::TerrainObjectType))) { + %cn = %HObj.getDatablock().getClassName(); + if(%cn $= "PlayerData" || strstr(%cn, "Vehicle") != -1) { + %HObj.getDataBlock().damageObject(%HObj, %obj, %HObj.getPosition(), 0.45, $DamageType::Lightning); + } + } + } + if (%res) { + %hitLoc = getWords(%res,1,3); + } + else { + %hitLoc = vectorAdd(%pos,vectorScale(%vec,2000)); + } + %p = discharge(%pos,%vec); + %p.setEnergyPercentage(1); + createLifeLight(%hitLoc,1,1000); + addToShock(%p); + %p.schedule(1000,"delete"); + zap(0,25,%hitLoc); + ServerPlay3D(thunderCrash2, %hitLoc); } diff --git a/scripts/weapons/Other/MiniCollider.cs b/scripts/weapons/Other/MiniCollider.cs index 67b92aa..518cef3 100644 --- a/scripts/weapons/Other/MiniCollider.cs +++ b/scripts/weapons/Other/MiniCollider.cs @@ -1,111 +1,111 @@ datablock ShapeBaseImageData(MiniColliderCannonImage) { - className = WeaponImage; - shapeFile = "turret_mortar_large.dts"; - item = MiniColliderCannon; - usesenergy = true; + className = WeaponImage; + shapeFile = "turret_mortar_large.dts"; + item = MiniColliderCannon; + usesenergy = true; - projectile = MiniColliderShell; - projectileType = GrenadeProjectile; + projectile = MiniColliderShell; + projectileType = GrenadeProjectile; - emap = true; + emap = true; - 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"; + MedalRequire = 1; - stateName[0] = "Activate"; - stateTransitionOnTimeout[0] = "ActivateReady"; - stateTimeoutValue[0] = 0.5; - stateSequence[0] = "Activate"; - stateSound[0] = MortarReloadSound; + 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[1] = "ActivateReady"; - stateTransitionOnLoaded[1] = "Ready"; - stateTransitionOnNoAmmo[1] = "NoAmmo"; + stateName[0] = "Activate"; + stateTransitionOnTimeout[0] = "ActivateReady"; + stateTimeoutValue[0] = 0.5; + stateSequence[0] = "Activate"; + stateSound[0] = MortarReloadSound; - stateName[2] = "Ready"; - stateTransitionOnNoAmmo[2] = "NoAmmo"; - stateTransitionOnTriggerDown[2] = "Fire"; + stateName[1] = "ActivateReady"; + stateTransitionOnLoaded[1] = "Ready"; + stateTransitionOnNoAmmo[1] = "NoAmmo"; - stateName[3] = "Fire"; - stateTransitionOnTimeout[3] = "Reload"; - stateTimeoutValue[3] = 4.6; - stateFire[3] = true; - stateRecoil[3] = LightRecoil; - stateAllowImageChange[3] = false; - stateSequence[3] = "Fire"; - stateSound[3] = CentaurArtilleryFireSound; - stateScript[3] = "onFire"; + stateName[2] = "Ready"; + stateTransitionOnNoAmmo[2] = "NoAmmo"; + stateTransitionOnTriggerDown[2] = "Fire"; - stateName[4] = "Reload"; - stateTransitionOnNoAmmo[4] = "NoAmmo"; - stateTransitionOnTimeout[4] = "Ready"; - stateSound[4] = MortarSwitchSound; - stateEjectShell[4] = true; - stateAllowImageChange[4] = false; - stateSequence[4] = "Reload"; + stateName[3] = "Fire"; + stateTransitionOnTimeout[3] = "Reload"; + stateTimeoutValue[3] = 4.6; + stateFire[3] = true; + stateRecoil[3] = LightRecoil; + stateAllowImageChange[3] = false; + stateSequence[3] = "Fire"; + stateSound[3] = CentaurArtilleryFireSound; + stateScript[3] = "onFire"; - stateName[5] = "NoAmmo"; - stateTransitionOnAmmo[5] = "Reload"; - stateSequence[5] = "NoAmmo"; - stateTransitionOnTriggerDown[5] = "DryFire"; + stateName[4] = "Reload"; + stateTransitionOnNoAmmo[4] = "NoAmmo"; + stateTransitionOnTimeout[4] = "Ready"; + stateSound[4] = MortarSwitchSound; + stateEjectShell[4] = true; + stateAllowImageChange[4] = false; + stateSequence[4] = "Reload"; - stateName[6] = "DryFire"; - stateTimeoutValue[6] = 0.3; - stateSound[6] = ChaingunDryFireSound; - stateTransitionOnTimeout[6] = "Ready"; + stateName[5] = "NoAmmo"; + stateTransitionOnAmmo[5] = "Reload"; + stateSequence[5] = "NoAmmo"; + stateTransitionOnTriggerDown[5] = "DryFire"; + + stateName[6] = "DryFire"; + stateTimeoutValue[6] = 0.3; + stateSound[6] = ChaingunDryFireSound; + stateTransitionOnTimeout[6] = "Ready"; }; //item// datablock ItemData(MiniColliderCannon) { - className = Weapon; - catagory = "Spawn Items"; - shapeFile = "turret_mortar_large.dts"; - image = MiniColliderCannonImage; - mass = 1; - elasticity = 0.2; - friction = 0.6; - pickupRadius = 2; - pickUpName = "a PRTCL-995 Mini Collider Cannon"; + className = Weapon; + catagory = "Spawn Items"; + shapeFile = "turret_mortar_large.dts"; + image = MiniColliderCannonImage; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; + pickUpName = "a PRTCL-995 Mini Collider Cannon"; - computeCRC = true; - emap = true; + computeCRC = true; + emap = true; }; function MiniColliderCannonImage::onFire(%data, %obj, %slot) { - %vector = %obj.getMuzzleVector(%slot); - %mp = %obj.getMuzzlePoint(%slot); - if(%obj.client.UpgradeOn("Double Burst", %data.getName())) { - %p1 = Parent::OnFire(%data, %obj, %slot); - %p2 = Schedule(100, 0, "spawnprojectile", %data.Projectile, %data.ProjectileType, - %obj.getMuzzlePoint(%slot), %vector, %obj); - %p2.WeaponImageSource = "MiniColliderCannonImage"; - schedule(100, 0, "ServerPlay3D", "CentaurArtilleryFireSound", %obj.getPosition()); - } - else if(%obj.client.UpgradeOn("Triple Burst", %data.getName())) { - %p1 = Parent::OnFire(%data, %obj, %slot); - %p2 = Schedule(100, 0, "spawnprojectile", %data.Projectile, %data.ProjectileType, - %obj.getMuzzlePoint(%slot), %vector, %obj); - %p2.WeaponImageSource = "MiniColliderCannonImage"; - schedule(100, 0, "ServerPlay3D", "CentaurArtilleryFireSound", %obj.getPosition()); - %p3 = Schedule(200, 0, "spawnprojectile", %data.Projectile, %data.ProjectileType, - %obj.getMuzzlePoint(%slot), %vector, %obj); - %p3.WeaponImageSource = "MiniColliderCannonImage"; - schedule(100, 0, "ServerPlay3D", "CentaurArtilleryFireSound", %obj.getPosition()); - } - else { - %p = Parent::OnFire(%data, %obj, %slot); - } + %vector = %obj.getMuzzleVector(%slot); + %mp = %obj.getMuzzlePoint(%slot); + if(%obj.client.UpgradeOn("Double Burst", %data.getName())) { + %p1 = Parent::OnFire(%data, %obj, %slot); + %p2 = Schedule(100, 0, "spawnprojectile", %data.Projectile, %data.ProjectileType, + %obj.getMuzzlePoint(%slot), %vector, %obj); + %p2.WeaponImageSource = "MiniColliderCannonImage"; + schedule(100, 0, "ServerPlay3D", "CentaurArtilleryFireSound", %obj.getPosition()); + } + else if(%obj.client.UpgradeOn("Triple Burst", %data.getName())) { + %p1 = Parent::OnFire(%data, %obj, %slot); + %p2 = Schedule(100, 0, "spawnprojectile", %data.Projectile, %data.ProjectileType, + %obj.getMuzzlePoint(%slot), %vector, %obj); + %p2.WeaponImageSource = "MiniColliderCannonImage"; + schedule(100, 0, "ServerPlay3D", "CentaurArtilleryFireSound", %obj.getPosition()); + %p3 = Schedule(200, 0, "spawnprojectile", %data.Projectile, %data.ProjectileType, + %obj.getMuzzlePoint(%slot), %vector, %obj); + %p3.WeaponImageSource = "MiniColliderCannonImage"; + schedule(200, 0, "ServerPlay3D", "CentaurArtilleryFireSound", %obj.getPosition()); + } + else { + %p = Parent::OnFire(%data, %obj, %slot); + } } diff --git a/scripts/weapons/Other/NapalmLauncher.cs b/scripts/weapons/Other/NapalmLauncher.cs index 2cef59e..947e75a 100644 --- a/scripts/weapons/Other/NapalmLauncher.cs +++ b/scripts/weapons/Other/NapalmLauncher.cs @@ -1,117 +1,113 @@ -datablock ItemData(NapalmAmmo) -{ - className = Ammo; - catagory = "Ammo"; - shapeFile = "ammo_grenade.dts"; - mass = 1; - elasticity = 0.2; - friction = 0.6; - pickupRadius = 2; - pickUpName = "some Napalm"; +datablock ItemData(NapalmAmmo) { + className = Ammo; + catagory = "Ammo"; + shapeFile = "ammo_grenade.dts"; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; + pickUpName = "some Napalm"; }; //-------------------------------------------------------------------------- // Weapon //-------------------------------------- -datablock ShapeBaseImageData(NapalmImage) -{ - className = WeaponImage; - shapeFile = "ammo_grenade.dts"; - item = Napalm; - ammo = NapalmAmmo; - offset = "0 0 0"; - armThread = lookms; - emap = true; +datablock ShapeBaseImageData(NapalmImage) { + className = WeaponImage; + shapeFile = "ammo_grenade.dts"; + item = Napalm; + ammo = NapalmAmmo; + offset = "0 0 0"; + armThread = lookms; + emap = true; - projectileSpread = 0; + projectileSpread = 0; - projectile = NapalmShot; - 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; + projectile = NapalmShot; + projectileType = LinearProjectile; - //Challenges - HasChallenges = 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"; - // + RankRequire = $TWM2::RankRequire["NapalmLauncher"]; + MedalRequire = 1; - // State Data - stateName[0] = "ActivateReady"; - stateTransitionOnLoaded[0] = "Activate"; - stateTransitionOnNoAmmo[0] = "NoAmmo"; + //ClipStuff + ClipName = "NapalmClip"; + ClipPickupName["NapalmClip"] = "some napalm fuel clusters"; + ShowsClipInHud = 1; + ClipReloadTime = 5; + ClipReturn = 1; + InitialClips = 6; - stateName[1] = "Activate"; - stateTransitionOnTimeout[1] = "Ready"; - stateTimeoutValue[1] = 0.5; - stateSequence[1] = "Activated"; - stateSound[1] = PlasmaSwitchSound; + //Challenges + HasChallenges = 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"; + // - stateName[2] = "Ready"; - stateTransitionOnNoAmmo[2] = "NoAmmo"; - stateTransitionOnTriggerDown[2] = "Fire"; - stateSequence[2] = "DiscSpin"; -// stateSound[2] = DiscLoopSound; + // State Data + stateName[0] = "ActivateReady"; + stateTransitionOnLoaded[0] = "Activate"; + stateTransitionOnNoAmmo[0] = "NoAmmo"; - stateName[3] = "Fire"; - stateTransitionOnTimeout[3] = "Reload"; - stateTimeoutValue[3] = 0.3; - stateFire[3] = true; - stateRecoil[3] = LightRecoil; - stateAllowImageChange[3] = false; - stateSequence[3] = "Fire"; - stateScript[3] = "onFire"; - stateSound[3] = MortarFireSound; + stateName[1] = "Activate"; + stateTransitionOnTimeout[1] = "Ready"; + stateTimeoutValue[1] = 0.5; + stateSequence[1] = "Activated"; + stateSound[1] = PlasmaSwitchSound; - stateName[4] = "Reload"; - stateTransitionOnNoAmmo[4] = "NoAmmo"; - stateTransitionOnTimeout[4] = "Ready"; - stateTimeoutValue[4] = 2.2; // 0.25 load, 0.25 spinup - stateAllowImageChange[4] = false; - stateSequence[4] = "Reload"; -// stateSound[4] = DiscReloadSound; + stateName[2] = "Ready"; + stateTransitionOnNoAmmo[2] = "NoAmmo"; + stateTransitionOnTriggerDown[2] = "Fire"; + stateSequence[2] = "DiscSpin"; + // stateSound[2] = DiscLoopSound; - stateName[5] = "NoAmmo"; - stateTransitionOnAmmo[5] = "Reload"; - stateSequence[5] = "NoAmmo"; - stateTransitionOnTriggerDown[5] = "DryFire"; + stateName[3] = "Fire"; + stateTransitionOnTimeout[3] = "Reload"; + stateTimeoutValue[3] = 0.3; + stateFire[3] = true; + stateRecoil[3] = LightRecoil; + stateAllowImageChange[3] = false; + stateSequence[3] = "Fire"; + stateScript[3] = "onFire"; + stateSound[3] = MortarFireSound; - stateName[6] = "DryFire"; - stateSound[6] = GrenadeDryFireSound; - stateTimeoutValue[6] = 0.3; - stateTransitionOnTimeout[6] = "NoAmmo"; + stateName[4] = "Reload"; + stateTransitionOnNoAmmo[4] = "NoAmmo"; + stateTransitionOnTimeout[4] = "Ready"; + 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) -{ - className = Weapon; - catagory = "Spawn Items"; - shapeFile = "ammo_grenade.dts"; - image = NapalmImage; - mass = 1; - elasticity = 0.2; - friction = 0.6; - pickupRadius = 2; - pickUpName = "a Napalm Gun"; - emap = true; -}; +datablock ItemData(Napalm) { + className = Weapon; + catagory = "Spawn Items"; + shapeFile = "ammo_grenade.dts"; + image = NapalmImage; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; + pickUpName = "a Napalm Gun"; + emap = true; +}; \ No newline at end of file diff --git a/scripts/weapons/Other/PlasmaTorpedo.cs b/scripts/weapons/Other/PlasmaTorpedo.cs index 055f365..bf013bc 100644 --- a/scripts/weapons/Other/PlasmaTorpedo.cs +++ b/scripts/weapons/Other/PlasmaTorpedo.cs @@ -1,126 +1,123 @@ datablock TracerProjectileData(PlasmaTorpedoProjectile) { - doDynamicClientHits = true; + doDynamicClientHits = true; - directDamage = 0.0; - hasDamageRadius = true; - indirectDamage = 1.5; - damageRadius = 25.0; - kickBackStrength = 4000; - radiusDamageType = $DamageType::PTorpdeo; //obviously change this - - ImageSource = "PlasmaTorpedoImage"; - - explosion = "SatchelMainExplosion"; - splash = ChaingunSplash; + directDamage = 0.0; + hasDamageRadius = true; + indirectDamage = 1.5; + damageRadius = 25.0; + kickBackStrength = 4000; + radiusDamageType = $DamageType::PTorpdeo; - sound = ShrikeBlasterProjectileSound; + ImageSource = "PlasmaTorpedoImage"; - dryVelocity = 425.0; - wetVelocity = 100.0; - velInheritFactor = 1.0; - fizzleTimeMS = 1000; - lifetimeMS = 1000; - explodeOnDeath = false; - reflectOnWaterImpactAngle = 0.0; - explodeOnWaterImpact = false; - deflectionOnWaterImpact = 0.0; - fizzleUnderwaterMS = 3000; + explosion = "SatchelMainExplosion"; + splash = ChaingunSplash; - tracerLength = 45.0; - tracerAlpha = false; - tracerMinPixels = 6; - tracerColor = "1.0 0.0 0.0 0.0"; + sound = ShrikeBlasterProjectileSound; + + dryVelocity = 425.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[1] = "special/shrikeBoltCross"; tracerWidth = 0.55; - crossSize = 0.99; - crossViewAng = 0.990; - renderCross = true; - + crossSize = 0.99; + crossViewAng = 0.990; + renderCross = true; }; datablock ShapeBaseImageData(PlasmaTorpedoImage) { - className = WeaponImage; - shapeFile = "turret_fusion_large.dts"; - item = PlasmaTorpedo; - usesenergy = true; + className = WeaponImage; + shapeFile = "turret_fusion_large.dts"; + item = PlasmaTorpedo; + usesenergy = true; - projectile = PlasmaTorpedoProjectile; - projectileType = TracerProjectile; + projectile = PlasmaTorpedoProjectile; + projectileType = TracerProjectile; - emap = true; + emap = true; - //RankRequire = $TWM2::RankRequire["SCD343"]; - 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"; + //RankRequire = $TWM2::RankRequire["SCD343"]; + PrestigeRequire = 9; - stateName[0] = "Activate"; - stateTransitionOnTimeout[0] = "ActivateReady"; - stateTimeoutValue[0] = 0.5; - stateSequence[0] = "Activate"; - stateSound[0] = MortarReloadSound; + 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[1] = "ActivateReady"; - stateTransitionOnLoaded[1] = "Ready"; - stateTransitionOnNoAmmo[1] = "NoAmmo"; + stateName[0] = "Activate"; + stateTransitionOnTimeout[0] = "ActivateReady"; + stateTimeoutValue[0] = 0.5; + stateSequence[0] = "Activate"; + stateSound[0] = MortarReloadSound; - stateName[2] = "Ready"; - stateTransitionOnNoAmmo[2] = "NoAmmo"; - stateTransitionOnTriggerDown[2] = "Fire"; + stateName[1] = "ActivateReady"; + stateTransitionOnLoaded[1] = "Ready"; + stateTransitionOnNoAmmo[1] = "NoAmmo"; - stateName[3] = "Fire"; - stateTransitionOnTimeout[3] = "Reload"; - stateTimeoutValue[3] = 7.6; - stateFire[3] = true; - stateRecoil[3] = LightRecoil; - stateAllowImageChange[3] = false; - stateSequence[3] = "Fire"; - stateSound[3] = CentaurArtilleryFireSound; - stateScript[3] = "onFire"; + stateName[2] = "Ready"; + stateTransitionOnNoAmmo[2] = "NoAmmo"; + stateTransitionOnTriggerDown[2] = "Fire"; - stateName[4] = "Reload"; - stateTransitionOnNoAmmo[4] = "NoAmmo"; - stateTransitionOnTimeout[4] = "Ready"; - stateSound[4] = MortarSwitchSound; - stateEjectShell[4] = true; - stateAllowImageChange[4] = false; - stateSequence[4] = "Reload"; + stateName[3] = "Fire"; + stateTransitionOnTimeout[3] = "Reload"; + stateTimeoutValue[3] = 7.6; + stateFire[3] = true; + stateRecoil[3] = LightRecoil; + stateAllowImageChange[3] = false; + stateSequence[3] = "Fire"; + stateSound[3] = CentaurArtilleryFireSound; + stateScript[3] = "onFire"; - stateName[5] = "NoAmmo"; - stateTransitionOnAmmo[5] = "Reload"; - stateSequence[5] = "NoAmmo"; - stateTransitionOnTriggerDown[5] = "DryFire"; + stateName[4] = "Reload"; + stateTransitionOnNoAmmo[4] = "NoAmmo"; + stateTransitionOnTimeout[4] = "Ready"; + stateSound[4] = MortarSwitchSound; + stateEjectShell[4] = true; + stateAllowImageChange[4] = false; + stateSequence[4] = "Reload"; - stateName[6] = "DryFire"; - stateTimeoutValue[6] = 0.3; - stateSound[6] = ChaingunDryFireSound; - stateTransitionOnTimeout[6] = "Ready"; + stateName[5] = "NoAmmo"; + stateTransitionOnAmmo[5] = "Reload"; + stateSequence[5] = "NoAmmo"; + stateTransitionOnTriggerDown[5] = "DryFire"; + + stateName[6] = "DryFire"; + stateTimeoutValue[6] = 0.3; + stateSound[6] = ChaingunDryFireSound; + stateTransitionOnTimeout[6] = "Ready"; }; -//item// datablock ItemData(PlasmaTorpedo) { - className = Weapon; - catagory = "Spawn Items"; - shapeFile = "turret_mortar_large.dts"; - image = PlasmaTorpedoImage; - mass = 1; - elasticity = 0.2; - friction = 0.6; - pickupRadius = 2; - pickUpName = "a Plasma Torpedo Cannon"; - - computeCRC = true; - emap = true; -}; + className = Weapon; + catagory = "Spawn Items"; + shapeFile = "turret_mortar_large.dts"; + image = PlasmaTorpedoImage; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; + pickUpName = "a Plasma Torpedo Cannon"; + computeCRC = true; + emap = true; +}; \ No newline at end of file diff --git a/scripts/weapons/Other/ShadowRifle.cs b/scripts/weapons/Other/ShadowRifle.cs index 19bac80..9a04b97 100644 --- a/scripts/weapons/Other/ShadowRifle.cs +++ b/scripts/weapons/Other/ShadowRifle.cs @@ -1,167 +1,166 @@ datablock LinearFlareProjectileData(ShadowRifleBolt) { - projectileShapeName = "turret_muzzlepoint.dts"; - scale = "1.0 1.0 1.0"; - faceViewer = true; - directDamage = 0.02; - hasDamageRadius = true; - indirectDamage = 0.1; - damageRadius = 4.0; - kickBackStrength = 0.0; - radiusDamageType = $DamageType::Shadow; + projectileShapeName = "turret_muzzlepoint.dts"; + scale = "1.0 1.0 1.0"; + faceViewer = true; + directDamage = 0.02; + hasDamageRadius = true; + indirectDamage = 0.1; + damageRadius = 4.0; + kickBackStrength = 0.0; + radiusDamageType = $DamageType::Shadow; - explosion = "BlasterExplosion"; - splash = PlasmaSplash; + explosion = "BlasterExplosion"; + splash = PlasmaSplash; - baseEmitter = NMMissileBaseEmitter; - - ImageSource = "ShadowRifleImage"; + baseEmitter = NMMissileBaseEmitter; - dryVelocity = 120.0; // z0dd - ZOD, 7/20/02. Faster plasma projectile. was 55 - wetVelocity = -1; - velInheritFactor = 0.3; - fizzleTimeMS = 250; - lifetimeMS = 8000; - explodeOnDeath = false; - reflectOnWaterImpactAngle = 0.0; - explodeOnWaterImpact = true; - deflectionOnWaterImpact = 0.0; - fizzleUnderwaterMS = -1; + ImageSource = "ShadowRifleImage"; - //activateDelayMS = 100; - activateDelayMS = -1; + dryVelocity = 120.0; // z0dd - ZOD, 7/20/02. Faster plasma projectile. was 55 + wetVelocity = -1; + velInheritFactor = 0.3; + fizzleTimeMS = 250; + lifetimeMS = 8000; + explodeOnDeath = false; + reflectOnWaterImpactAngle = 0.0; + explodeOnWaterImpact = true; + deflectionOnWaterImpact = 0.0; + fizzleUnderwaterMS = -1; - size[0] = 0.2; - size[1] = 0.5; - size[2] = 0.1; + //activateDelayMS = 100; + activateDelayMS = -1; + + size[0] = 0.2; + size[1] = 0.5; + size[2] = 0.1; - numFlares = 35; - flareColor = "1 0.18 0.03"; - flareModTexture = "flaremod"; - flareBaseTexture = "flarebase"; + numFlares = 35; + flareColor = "1 0.18 0.03"; + flareModTexture = "flaremod"; + flareBaseTexture = "flarebase"; sound = PlasmaProjectileSound; - fireSound = FlamethrowerFireSound; - wetFireSound = PlasmaFireWetSound; + fireSound = FlamethrowerFireSound; + wetFireSound = PlasmaFireWetSound; - hasLight = true; - lightRadius = 10.0; - lightColor = "0.94 0.03 0.12"; + hasLight = true; + lightRadius = 10.0; + lightColor = "0.94 0.03 0.12"; }; datablock ItemData(ShadowRifle) { - className = Weapon; - catagory = "Spawn Items"; - shapeFile = "weapon_sniper.dts"; - image = ShadowRifleImage; - mass = 1; - elasticity = 0.2; - friction = 0.6; - pickupRadius = 2; + className = Weapon; + catagory = "Spawn Items"; + shapeFile = "weapon_sniper.dts"; + image = ShadowRifleImage; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; pickUpName = "a shadow rifle"; - computeCRC = true; - + computeCRC = true; }; datablock ShapeBaseImageData(ShadowRifleImage) { - className = WeaponImage; - shapeFile = "weapon_sniper.dts"; - item = ShadowRifle; - projectile = ShadowRifleBolt; - projectileType = LinearFlareProjectile; + className = WeaponImage; + shapeFile = "weapon_sniper.dts"; + item = ShadowRifle; + projectile = ShadowRifleBolt; + projectileType = LinearFlareProjectile; - MedalRequire = 1; + MedalRequire = 1; - usesEnergy = true; - minEnergy = 6; + usesEnergy = true; + minEnergy = 6; - stateName[0] = "Activate"; - stateTransitionOnTimeout[0] = "ActivateReady"; - stateSound[0] = SniperRifleSwitchSound; - stateTimeoutValue[0] = 0.5; - stateSequence[0] = "Activate"; + stateName[0] = "Activate"; + stateTransitionOnTimeout[0] = "ActivateReady"; + stateSound[0] = SniperRifleSwitchSound; + stateTimeoutValue[0] = 0.5; + stateSequence[0] = "Activate"; - stateName[1] = "ActivateReady"; - stateTransitionOnLoaded[1] = "Ready"; - stateTransitionOnNoAmmo[1] = "NoAmmo"; + stateName[1] = "ActivateReady"; + stateTransitionOnLoaded[1] = "Ready"; + stateTransitionOnNoAmmo[1] = "NoAmmo"; - stateName[2] = "Ready"; - stateTransitionOnNoAmmo[2] = "NoAmmo"; - stateTransitionOnTriggerDown[2] = "CheckWet"; + stateName[2] = "Ready"; + stateTransitionOnNoAmmo[2] = "NoAmmo"; + stateTransitionOnTriggerDown[2] = "CheckWet"; - stateName[3] = "Fire"; - stateTransitionOnTimeout[3] = "Reload"; - stateTimeoutValue[3] = 0.5; - stateFire[3] = true; - stateAllowImageChange[3] = false; - stateSequence[3] = "Fire"; - stateScript[3] = "onFire"; + stateName[3] = "Fire"; + stateTransitionOnTimeout[3] = "Reload"; + stateTimeoutValue[3] = 0.5; + stateFire[3] = true; + stateAllowImageChange[3] = false; + stateSequence[3] = "Fire"; + stateScript[3] = "onFire"; - stateName[4] = "Reload"; - stateTransitionOnTimeout[4] = "Ready"; - stateTimeoutValue[4] = 2.5; - stateAllowImageChange[4] = false; + stateName[4] = "Reload"; + stateTransitionOnTimeout[4] = "Ready"; + stateTimeoutValue[4] = 2.5; + stateAllowImageChange[4] = false; - stateName[5] = "CheckWet"; - stateTransitionOnWet[5] = "DryFire"; - stateTransitionOnNotWet[5] = "Fire"; + stateName[5] = "CheckWet"; + stateTransitionOnWet[5] = "DryFire"; + stateTransitionOnNotWet[5] = "Fire"; - stateName[6] = "NoAmmo"; - stateTransitionOnAmmo[6] = "Reload"; - stateTransitionOnTriggerDown[6] = "DryFire"; - stateSequence[6] = "NoAmmo"; + stateName[6] = "NoAmmo"; + stateTransitionOnAmmo[6] = "Reload"; + stateTransitionOnTriggerDown[6] = "DryFire"; + stateSequence[6] = "NoAmmo"; - stateName[7] = "DryFire"; - stateSound[7] = SniperRifleDryFireSound; - stateTimeoutValue[7] = 0.5; - stateTransitionOnTimeout[7] = "Ready"; + stateName[7] = "DryFire"; + stateSound[7] = SniperRifleDryFireSound; + stateTimeoutValue[7] = 0.5; + stateTransitionOnTimeout[7] = "Ready"; }; function ShadowRifleBolt::onCollision(%data,%projectile,%targetObject,%modifier,%position,%normal) { - Parent::OnCollision(%data,%projectile,%targetObject,%modifier,%position,%normal); - %cn = %targetObject.getClassName(); - if(%cn $= "Player") { - if($Host::TeamDamageOn == 0) { - if(%targetObject.team == %projectile.sourceObject.team) { - return; - } - } - if(%targetObject.beingSapped) { - return; - } - if(%targetObject.isBoss) { - %targetObject.playShieldEffect("1 1 1"); - %vec = vectorsub(%projectile.sourceObject.getworldboxcenter(),vectorAdd(%targetObject.getPosition(), "0 0 1")); - %vec = vectoradd(%vec, vectorscale(%projectile.sourceObject.getvelocity(),vectorlen(%vec)/100)); - %p = new LinearFlareProjectile() { - dataBlock = ShadowRifleBolt; //burn :) - initialDirection = %vec; - initialPosition = vectorAdd(%targetObject.getPosition(), "0 0 1"); - sourceObject = %targetObject; - sourceSlot = 0; - }; - messageClient(%projectile.sourceObject.client, 'MsgWarn', "WARNING: The boss deflects the pulse back at you!"); - return; - } - else { - %targetObject.beingSapped = 1; - SapLoop(%projectile.sourceObject, %targetObject); - } - } + Parent::OnCollision(%data,%projectile,%targetObject,%modifier,%position,%normal); + %cn = %targetObject.getClassName(); + if(%cn $= "Player") { + if($Host::TeamDamageOn == 0) { + if(%targetObject.team == %projectile.sourceObject.team) { + return; + } + } + if(%targetObject.beingSapped) { + return; + } + if(%targetObject.isBoss) { + %targetObject.playShieldEffect("1 1 1"); + %vec = vectorsub(%projectile.sourceObject.getworldboxcenter(),vectorAdd(%targetObject.getPosition(), "0 0 1")); + %vec = vectoradd(%vec, vectorscale(%projectile.sourceObject.getvelocity(),vectorlen(%vec)/100)); + %p = new LinearFlareProjectile() { + dataBlock = ShadowRifleBolt; //burn :) + initialDirection = %vec; + initialPosition = vectorAdd(%targetObject.getPosition(), "0 0 1"); + sourceObject = %targetObject; + sourceSlot = 0; + }; + messageClient(%projectile.sourceObject.client, 'MsgWarn', "WARNING: The boss deflects the pulse back at you!"); + return; + } + else { + %targetObject.beingSapped = 1; + SapLoop(%projectile.sourceObject, %targetObject); + } + } } function SapLoop(%source, %target) { - if(!%source.isAlive()) { - return; - } - if(!%target.isAlive()) { - createBlood(%target); - return; - } - %target.zapObject(); - %target.getDatablock().damageObject(%target, %source, %source.getPosition, 0.05, $DamageType::Shadow); - %target.lastDamagedImage = "ShadowRifleImage"; - %source.applyRepair(0.05); - schedule(500, 0, "SapLoop", %source, %target); -} + if(!%source.isAlive()) { + return; + } + if(!%target.isAlive()) { + createBlood(%target); + return; + } + %target.zapObject(); + %target.getDatablock().damageObject(%target, %source, %source.getPosition, 0.05, $DamageType::Shadow); + %target.lastDamagedImage = "ShadowRifleImage"; + %source.applyRepair(0.05); + schedule(500, 0, "SapLoop", %source, %target); +} \ No newline at end of file diff --git a/scripts/weapons/Pistols/Colt.cs b/scripts/weapons/Pistols/Colt.cs index 50f63d6..a2857e9 100644 --- a/scripts/weapons/Pistols/Colt.cs +++ b/scripts/weapons/Pistols/Colt.cs @@ -1,8 +1,7 @@ -datablock AudioProfile(PistolFireSound) -{ - filename = "fx/vehicles/tank_chaingun.wav"; - description = AudioDefault3d; - preload = true; +datablock AudioProfile(PistolFireSound) { + filename = "fx/vehicles/tank_chaingun.wav"; + description = AudioDefault3d; + preload = true; }; //-------------------------------------------------------------------------- @@ -10,217 +9,214 @@ datablock AudioProfile(PistolFireSound) //-------------------------------------------------------------------------- datablock TracerProjectileData(coltBullet) { - doDynamicClientHits = true; + doDynamicClientHits = true; - directDamage = 0.15; // z0dd - ZOD, 9-27-02. Was 0.0825 - directDamageType = $DamageType::pistol; - explosion = "ChaingunExplosion"; - splash = ChaingunSplash; - HeadMultiplier = 1.5; - LegsMultiplier = 0.5; - - ImageSource = "PistolImage"; + directDamage = 0.15; // z0dd - ZOD, 9-27-02. Was 0.0825 + directDamageType = $DamageType::pistol; + explosion = "ChaingunExplosion"; + splash = ChaingunSplash; + HeadMultiplier = 1.5; + LegsMultiplier = 0.5; - kickBackStrength = 5.0; - sound = ChaingunProjectile; + ImageSource = "PistolImage"; - //dryVelocity = 425.0; - 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; + kickBackStrength = 5.0; + sound = ChaingunProjectile; - tracerLength = 25.0; - tracerAlpha = false; - tracerMinPixels = 6; - tracerColor = 211.0/255.0 @ " " @ 215.0/255.0 @ " " @ 120.0/255.0 @ " 0.75"; + //dryVelocity = 425.0; + 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; + tracerAlpha = false; + tracerMinPixels = 6; + tracerColor = 211.0/255.0 @ " " @ 215.0/255.0 @ " " @ 120.0/255.0 @ " 0.75"; tracerTex[0] = "special/tracer00"; tracerTex[1] = "special/tracercross"; tracerWidth = 0.09; - crossSize = 0.20; - crossViewAng = 0.990; - renderCross = true; + crossSize = 0.20; + crossViewAng = 0.990; + renderCross = true; - decalData[0] = ChaingunDecal1; - decalData[1] = ChaingunDecal2; - decalData[2] = ChaingunDecal3; - decalData[3] = ChaingunDecal4; - decalData[4] = ChaingunDecal5; - decalData[5] = ChaingunDecal6; + decalData[0] = ChaingunDecal1; + decalData[1] = ChaingunDecal2; + decalData[2] = ChaingunDecal3; + decalData[3] = ChaingunDecal4; + decalData[4] = ChaingunDecal5; + decalData[5] = ChaingunDecal6; }; -datablock ItemData(pistolAmmo) -{ - className = Ammo; - catagory = "Ammo"; - shapeFile = "ammo_chaingun.dts"; - mass = 1; - elasticity = 0.2; - friction = 0.6; - pickupRadius = 2; +datablock ItemData(pistolAmmo) { + className = Ammo; + catagory = "Ammo"; + shapeFile = "ammo_chaingun.dts"; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; pickUpName = "some .77mm bullets"; - computeCRC = true; - + computeCRC = true; }; datablock ItemData(pistol) { - className = Weapon; - catagory = "Spawn Items"; - shapeFile = "weapon_energy_vehicle.dts"; - image = pistolImage; - mass = 2; - elasticity = 0.2; - friction = 0.6; - pickupRadius = 2; - pickUpName = "a Colt Pistol"; + className = Weapon; + catagory = "Spawn Items"; + shapeFile = "weapon_energy_vehicle.dts"; + image = pistolImage; + mass = 2; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; + pickUpName = "a Colt Pistol"; }; -datablock ShapeBaseImageData(PistolImage) -{ - className = WeaponImage; - shapeFile = "weapon_energy_vehicle.dts"; - item = pistol; - offset = "0 0 0"; - rotation = "0 1 0 180"; - mass = 4; +datablock ShapeBaseImageData(PistolImage) { + className = WeaponImage; + shapeFile = "weapon_energy_vehicle.dts"; + item = pistol; + offset = "0 0 0"; + rotation = "0 1 0 180"; + mass = 4; - ammo = pistolAmmo; + ammo = pistolAmmo; - projectile = coltbullet; - projectileType = tracerProjectile; - 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"; - // + projectile = coltbullet; + projectileType = tracerProjectile; + projectileSpread = 10.0 / 1000.0; - stateName[0] = "Activate"; - stateTransitionOnTimeout[0] = "ActivateReady"; - stateTimeoutValue[0] = 0.5; - stateSequence[0] = "Activate"; - stateSound[0] = PlasmaSwitchSound; + //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[1] = "ActivateReady"; - stateTransitionOnLoaded[1] = "Ready"; - stateTransitionOnNoAmmo[1] = "NoAmmo"; + stateName[0] = "Activate"; + stateTransitionOnTimeout[0] = "ActivateReady"; + stateTimeoutValue[0] = 0.5; + stateSequence[0] = "Activate"; + stateSound[0] = PlasmaSwitchSound; - stateName[2] = "Ready"; - stateTransitionOnNoAmmo[2] = "NoAmmo"; - stateTransitionOnTriggerDown[2] = "Fire"; + stateName[1] = "ActivateReady"; + stateTransitionOnLoaded[1] = "Ready"; + stateTransitionOnNoAmmo[1] = "NoAmmo"; - stateName[3] = "Fire"; - stateTransitionOnTimeout[3] = "Reload"; - stateTimeoutValue[3] = 0.1; - 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[2] = "Ready"; + stateTransitionOnNoAmmo[2] = "NoAmmo"; + stateTransitionOnTriggerDown[2] = "Fire"; - stateName[4] = "Reload"; - stateTransitionOnNoAmmo[4] = "NoAmmo"; - stateTransitionOnTimeout[4] = "Ready"; - stateTimeoutValue[4] = 0.1; - stateAllowImageChange[4] = false; - stateSequence[4] = "Reload"; + stateName[3] = "Fire"; + stateTransitionOnTimeout[3] = "Reload"; + stateTimeoutValue[3] = 0.1; + 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[5] = "NoAmmo"; - stateTransitionOnAmmo[5] = "Reload"; - stateSequence[5] = "NoAmmo"; - stateTransitionOnTriggerDown[5] = "DryFire"; + stateName[4] = "Reload"; + stateTransitionOnNoAmmo[4] = "NoAmmo"; + stateTransitionOnTimeout[4] = "Ready"; + stateTimeoutValue[4] = 0.1; + stateAllowImageChange[4] = false; + stateSequence[4] = "Reload"; - stateName[6] = "DryFire"; - stateSound[6] = ChaingunDryFireSound; - stateTimeoutValue[6] = 1.5; - stateTransitionOnTimeout[6] = "NoAmmo"; + stateName[5] = "NoAmmo"; + stateTransitionOnAmmo[5] = "Reload"; + stateSequence[5] = "NoAmmo"; + stateTransitionOnTriggerDown[5] = "DryFire"; + + stateName[6] = "DryFire"; + stateSound[6] = ChaingunDryFireSound; + stateTimeoutValue[6] = 1.5; + stateTransitionOnTimeout[6] = "NoAmmo"; }; datablock ShapeBaseImageData(PistolImage2) : PistolImage { - offset = "-0.5 0 0"; + offset = "-0.5 0 0"; }; -function PistolImage::onMount(%this,%obj,%slot) { - Parent::onMount(%this, %obj, %slot); - if(%obj.client.UpgradeOn("Excessive Duality", %this.getName())) { - %obj.mountImage(PistolImage2, 5); - } +function PistolImage::onMount(%this, %obj, %slot) { + Parent::onMount(%this, %obj, %slot); + if(%obj.client.UpgradeOn("Excessive Duality", %this.getName())) { + %obj.mountImage(PistolImage2, 5); + } } function PistolImage::onUnmount(%this,%obj,%slot) { - %obj.unmountImage(5); - Parent::onUnmount(%this, %obj, %slot); + %obj.unmountImage(5); + Parent::onUnmount(%this, %obj, %slot); } function PistolImage::onFire(%data, %obj, %slot) { - %p = Parent::onFire(%data, %obj, %slot); - if(%obj.client.UpgradeOn("Silencer", %data.getName())) { - //zero sound :p - } - else if(%obj.client.UpgradeOn("Excessive Duality", %data.getName())) { - schedule(200, 0, "FirePistolShot", %data, %obj, %slot); - ServerPlay3d(PistolFireSound, %obj.getPosition()); - } - else { - ServerPlay3d(PistolFireSound, %obj.getPosition()); - } + %p = Parent::onFire(%data, %obj, %slot); + if(%obj.client.UpgradeOn("Silencer", %data.getName())) { + //zero sound :p + } + else if(%obj.client.UpgradeOn("Excessive Duality", %data.getName())) { + schedule(200, 0, "FirePistolShot", %data, %obj, %slot); + ServerPlay3d(PistolFireSound, %obj.getPosition()); + } + else { + ServerPlay3d(PistolFireSound, %obj.getPosition()); + } } function FirePistolShot(%data, %obj, %slot) { - serverPlay3d("PistolFireSound", %obj.getPosition()); + serverPlay3d("PistolFireSound", %obj.getPosition()); - %vector = %obj.getMuzzleVector(%slot); - %mp = %obj.getMuzzlePoint(%slot); + %vector = %obj.getMuzzleVector(%slot); + %mp = %obj.getMuzzlePoint(%slot); - %x = (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; - %mat = MatrixCreateFromEuler(%x @ " " @ %y @ " " @ %z); - %newvector = MatrixMulVector(%mat, %vector); + %x = (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; + %mat = MatrixCreateFromEuler(%x @ " " @ %y @ " " @ %z); + %newvector = MatrixMulVector(%mat, %vector); - %p = new (%data.projectileType)() { - dataBlock = %data.projectile; - initialDirection = %newvector; - initialPosition = %mp; - sourceObject = %obj; - damageFactor = 1; - sourceSlot = %slot; - }; - %p.ImageSource = "PistolImage"; - %p.WeaponImageSource = "PistolImage"; + %p = new (%data.projectileType)() { + dataBlock = %data.projectile; + initialDirection = %newvector; + initialPosition = %mp; + sourceObject = %obj; + damageFactor = 1; + sourceSlot = %slot; + }; + %p.ImageSource = "PistolImage"; + %p.WeaponImageSource = "PistolImage"; } diff --git a/scripts/weapons/Pistols/CrimsonHawk.cs b/scripts/weapons/Pistols/CrimsonHawk.cs index 1b7ac09..c13abce 100644 --- a/scripts/weapons/Pistols/CrimsonHawk.cs +++ b/scripts/weapons/Pistols/CrimsonHawk.cs @@ -2,203 +2,199 @@ // Projectile //-------------------------------------------------------------------------- datablock TracerProjectileData(CHawkBullet) { - doDynamicClientHits = true; + doDynamicClientHits = true; - directDamage = 0.23; //reduced 0.5 - directDamageType = $DamageType::Hawk; //obviously change this + directDamage = 0.17; + directDamageType = $DamageType::CrimsonHawk; //obviously change this - explosion = "BlasterExplosion"; - splash = ChaingunSplash; + explosion = "BlasterExplosion"; + splash = ChaingunSplash; - sound = ShrikeBlasterProjectileSound; + sound = ShrikeBlasterProjectileSound; - dryVelocity = 425.0; - wetVelocity = 100.0; - velInheritFactor = 1.0; - fizzleTimeMS = 1000; - lifetimeMS = 1000; - explodeOnDeath = false; - reflectOnWaterImpactAngle = 0.0; - explodeOnWaterImpact = false; - deflectionOnWaterImpact = 0.0; - fizzleUnderwaterMS = 3000; - - ImageSource = "CrimsonHawkImage"; + dryVelocity = 425.0; + wetVelocity = 100.0; + velInheritFactor = 1.0; + fizzleTimeMS = 500; + lifetimeMS = 700; + 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 1.0"; + ImageSource = "CrimsonHawkImage"; + + tracerLength = 45.0; + tracerAlpha = false; + tracerMinPixels = 6; + tracerColor = "1.0 0.0 0.0 1.0"; tracerTex[0] = "special/shrikeBolt"; tracerTex[1] = "special/shrikeBoltCross"; tracerWidth = 0.55; - crossSize = 0.99; - crossViewAng = 0.990; - renderCross = true; - + crossSize = 0.99; + crossViewAng = 0.990; + renderCross = true; }; -datablock ItemData(CrimsonHawkAmmo) -{ - className = Ammo; - catagory = "Ammo"; - shapeFile = "ammo_chaingun.dts"; - mass = 1; - elasticity = 0.2; - friction = 0.6; - pickupRadius = 2; +datablock ItemData(CrimsonHawkAmmo) { + className = Ammo; + catagory = "Ammo"; + shapeFile = "ammo_chaingun.dts"; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; pickUpName = "some .77mm bullets"; - computeCRC = true; - + computeCRC = true; }; datablock ItemData(CrimsonHawk) { - className = Weapon; - catagory = "Spawn Items"; - shapeFile = "weapon_energy_vehicle.dts"; - image = CrimsonHawkImage; - mass = 2; - elasticity = 0.2; - friction = 0.6; - pickupRadius = 2; - pickUpName = "a CrimsonHawk Pistol"; + className = Weapon; + catagory = "Spawn Items"; + shapeFile = "weapon_energy_vehicle.dts"; + image = CrimsonHawkImage; + mass = 2; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; + pickUpName = "a Crimson Hawk Pistol"; }; -datablock ShapeBaseImageData(CrimsonHawkImage) -{ - className = WeaponImage; - shapeFile = "weapon_energy_vehicle.dts"; - item = CrimsonHawk; - offset = "0 0 0"; - rotation = "0 1 0 180"; - mass = 4; +datablock ShapeBaseImageData(CrimsonHawkImage) { + className = WeaponImage; + shapeFile = "weapon_energy_vehicle.dts"; + item = CrimsonHawk; + offset = "0 0 0"; + rotation = "0 1 0 180"; + mass = 4; - ammo = CrimsonHawkAmmo; + ammo = CrimsonHawkAmmo; - projectile = CHawkBullet; - projectileType = tracerProjectile; - 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"; - // + projectile = CHawkBullet; + projectileType = tracerProjectile; + projectileSpread = 5.0 / 1000.0; - stateName[0] = "Activate"; - stateTransitionOnTimeout[0] = "ActivateReady"; - stateTimeoutValue[0] = 0.5; - stateSequence[0] = "Activate"; - stateSound[0] = PlasmaSwitchSound; + //ClipStuff + ClipName = "CrimsonHawkClip"; + ClipPickupName["CrimsonHawkClip"] = "Some .77MM Clips"; + ShowsClipInHud = 0; + ClipReloadTime = 4; + ClipReturn = 15; + InitialClips = 950; + HellClipCount = 10; + // - stateName[1] = "ActivateReady"; - stateTransitionOnLoaded[1] = "Ready"; - stateTransitionOnNoAmmo[1] = "NoAmmo"; + //RankRequire = $TWM2::RankRequire["CrimsonHawk"]; + PrestigeRequire = 5; - stateName[2] = "Ready"; - stateTransitionOnNoAmmo[2] = "NoAmmo"; - stateTransitionOnTriggerDown[2] = "Fire"; + //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[3] = "Fire"; - stateTransitionOnTimeout[3] = "Fire2"; - stateTimeoutValue[3] = 0.1; - 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] = "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[0] = "Activate"; + stateTransitionOnTimeout[0] = "ActivateReady"; + stateTimeoutValue[0] = 0.5; + stateSequence[0] = "Activate"; + stateSound[0] = PlasmaSwitchSound; - 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[1] = "ActivateReady"; + stateTransitionOnLoaded[1] = "Ready"; + stateTransitionOnNoAmmo[1] = "NoAmmo"; - stateName[8] = "Reload"; - stateTransitionOnNoAmmo[8] = "NoAmmo"; - stateTransitionOnTimeout[8] = "Ready"; - stateTimeoutValue[8] = 0.1; - stateAllowImageChange[8] = false; - stateSequence[8] = "Reload"; + stateName[2] = "Ready"; + stateTransitionOnNoAmmo[2] = "NoAmmo"; + stateTransitionOnTriggerDown[2] = "Fire"; - stateName[9] = "NoAmmo"; - stateTransitionOnAmmo[9] = "Reload"; - stateSequence[9] = "NoAmmo"; - stateTransitionOnTriggerDown[9] = "DryFire"; + stateName[3] = "Fire"; + stateTransitionOnTimeout[3] = "Fire2"; + stateTimeoutValue[3] = 0.1; + stateFire[3] = true; + stateRecoil[3] = LightRecoil; + stateAllowImageChange[3] = false; + stateScript[3] = "onFire"; + stateEmitterTime[3] = 0.1; - stateName[10] = "DryFire"; - stateSound[10] = ChaingunDryFireSound; - stateTimeoutValue[10] = 1.5; - stateTransitionOnTimeout[10] = "NoAmmo"; + 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"; + 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) { - Parent::onMount(%this, %obj, %slot); + Parent::onMount(%this, %obj, %slot); } function CrimsonHawkImage::onFire(%data, %obj, %slot) { - %p = Parent::onFire(%data, %obj, %slot); - if(%obj.client.UpgradeOn("Silencer", %data.getName())) { - //zero sound :p - } - else { - ServerPlay3d(PistolFireSound, %obj.getPosition()); - } + %p = Parent::onFire(%data, %obj, %slot); + if(%obj.client.UpgradeOn("Silencer", %data.getName())) { + //zero sound :p + } + else { + ServerPlay3d(PistolFireSound, %obj.getPosition()); + } } diff --git a/scripts/weapons/Pistols/LD06Savager.cs b/scripts/weapons/Pistols/LD06Savager.cs index fe78ae1..74eec06 100644 --- a/scripts/weapons/Pistols/LD06Savager.cs +++ b/scripts/weapons/Pistols/LD06Savager.cs @@ -1,163 +1,161 @@ datablock ItemData(LD06SavagerAmmo) { - className = Ammo; - catagory = "Ammo"; - shapeFile = "ammo_chaingun.dts"; - mass = 1; - elasticity = 0.2; - friction = 0.6; - pickupRadius = 2; + className = Ammo; + catagory = "Ammo"; + shapeFile = "ammo_chaingun.dts"; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; pickUpName = "some LD06Savager rounds"; - computeCRC = true; - + computeCRC = true; }; //-------------------------------------------------------------------------- // Weapon //-------------------------------------- datablock ShapeBaseImageData(LD06SavagerImage) { - className = WeaponImage; - shapeFile = "weapon_plasma.dts"; - item = LD06Savager; - ammo = LD06SavagerAmmo; - projectile = Wp400Pellet; - projectileType = TracerProjectile; - emap = true; - mass = 20; + className = WeaponImage; + shapeFile = "weapon_plasma.dts"; + item = LD06Savager; + ammo = LD06SavagerAmmo; + projectile = Wp400Pellet; + projectileType = TracerProjectile; + emap = true; + mass = 20; - casing = ShellDebris; - 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 - shellExitVariance = 10.0; - shellVelocity = 4.0; + casing = ShellDebris; + 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 + shellExitVariance = 10.0; + shellVelocity = 4.0; - //ClipStuff - ClipName = "LD06SavagerClip"; - ClipPickupName["LD06SavagerClip"] = "some LD06Savager Clip Boxes"; - ShowsClipInHud = 0; - ClipReloadTime = 5; - ClipReturn = 10; - InitialClips = 999; - HellClipCount = 7; - // - HasChallenges = 1; - ChallengeCt = 8; - Challenge[1] = "LD06 Killer\t50\t100\tNone"; - Challenge[2] = "LD06 Expert\t100\t250\tNone"; - Challenge[3] = "LD06 Master\t250\t500\tNone"; - Challenge[4] = "LD06 God\t500\t1000\tSilencer"; - Challenge[5] = "LD06 Bronze Commendation\t1000\t10000\tNone"; - Challenge[6] = "LD06 Silver Commendation\t2500\t25000\tNone"; - Challenge[7] = "LD06 Gold Commendation\t5000\t50000\tNone"; - Challenge[8] = "LD06 Titan Commendation\t15000\t75000\tNone"; - Upgrade[1] = "Silencer"; - GunName = "LD06 Savager"; - - - MedalRequire = 1; - + //ClipStuff + ClipName = "LD06SavagerClip"; + ClipPickupName["LD06SavagerClip"] = "some LD06Savager Clip Boxes"; + ShowsClipInHud = 0; + ClipReloadTime = 5; + ClipReturn = 10; + InitialClips = 999; + HellClipCount = 7; + // + HasChallenges = 1; + ChallengeCt = 8; + Challenge[1] = "LD06 Killer\t50\t100\tNone"; + Challenge[2] = "LD06 Expert\t100\t250\tNone"; + Challenge[3] = "LD06 Master\t250\t500\tNone"; + Challenge[4] = "LD06 God\t500\t1000\tSilencer"; + Challenge[5] = "LD06 Bronze Commendation\t1000\t10000\tNone"; + Challenge[6] = "LD06 Silver Commendation\t2500\t25000\tNone"; + Challenge[7] = "LD06 Gold Commendation\t5000\t50000\tNone"; + Challenge[8] = "LD06 Titan Commendation\t15000\t75000\tNone"; + Upgrade[1] = "Silencer"; + GunName = "LD06 Savager"; - projectileSpread = 10.0 / 1000.0; - stateName[0] = "Activate"; - stateTransitionOnTimeout[0] = "ActivateReady"; - stateTimeoutValue[0] = 0.3; - stateSequence[0] = "Activate"; - stateSound[0] = ChaingunSwitchSound; + MedalRequire = 1; - stateName[1] = "ActivateReady"; - stateTransitionOnLoaded[1] = "Ready"; - stateTransitionOnNoAmmo[1] = "NoAmmo"; - stateName[2] = "Ready"; - stateTransitionOnNoAmmo[2] = "NoAmmo"; - stateTransitionOnTriggerDown[2] = "CheckWet"; + projectileSpread = 10.0 / 1000.0; - stateName[3] = "Fire"; - stateTransitionOnTimeout[3] = "Reload"; - stateTimeoutValue[3] = 0.0001; - stateFire[3] = true; - stateEjectShell[3] = true; - stateRecoil[3] = LightRecoil; - stateAllowImageChange[3] = false; - stateScript[3] = "onFire"; - stateSound[3] = SniperFireSound; + stateName[0] = "Activate"; + stateTransitionOnTimeout[0] = "ActivateReady"; + stateTimeoutValue[0] = 0.3; + stateSequence[0] = "Activate"; + stateSound[0] = ChaingunSwitchSound; - stateName[4] = "Reload"; - stateTransitionOnNoAmmo[4] = "NoAmmo"; - stateTransitionOnTimeout[4] = "Ready"; - stateTimeoutValue[4] = 0.6; - stateAllowImageChange[4] = false; - stateSequence[4] = "Reload"; + stateName[1] = "ActivateReady"; + stateTransitionOnLoaded[1] = "Ready"; + stateTransitionOnNoAmmo[1] = "NoAmmo"; - stateName[5] = "NoAmmo"; - stateTransitionOnAmmo[5] = "Reload"; - stateSequence[5] = "NoAmmo"; - stateTransitionOnTriggerDown[5] = "DryFire"; + stateName[2] = "Ready"; + stateTransitionOnNoAmmo[2] = "NoAmmo"; + stateTransitionOnTriggerDown[2] = "CheckWet"; - stateName[6] = "DryFire"; - stateSound[6] = ChaingunDryFireSound; - stateTimeoutValue[6] = 1.0; - stateTransitionOnTimeout[6] = "NoAmmo"; + stateName[3] = "Fire"; + stateTransitionOnTimeout[3] = "Reload"; + stateTimeoutValue[3] = 0.0001; + stateFire[3] = true; + stateEjectShell[3] = true; + stateRecoil[3] = LightRecoil; + stateAllowImageChange[3] = false; + stateScript[3] = "onFire"; + stateSound[3] = SniperFireSound; - stateName[7] = "WetFire"; - stateSound[7] = ChaingunDryFireSound; - stateTimeoutValue[7] = 1.0; - stateTransitionOnTimeout[7] = "Ready"; + stateName[4] = "Reload"; + stateTransitionOnNoAmmo[4] = "NoAmmo"; + stateTransitionOnTimeout[4] = "Ready"; + stateTimeoutValue[4] = 0.6; + stateAllowImageChange[4] = false; + stateSequence[4] = "Reload"; - stateName[8] = "CheckWet"; - stateTransitionOnWet[8] = "WetFire"; - stateTransitionOnNotWet[8] = "Fire"; + stateName[5] = "NoAmmo"; + stateTransitionOnAmmo[5] = "Reload"; + 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) -{ - className = Weapon; - catagory = "Spawn Items"; - shapeFile = "weapon_plasma.dts"; - image = LD06SavagerImage; - mass = 1.0; - elasticity = 0.2; - friction = 0.6; - pickupRadius = 2; - pickUpName = "a LD06Savager"; +datablock ItemData(LD06Savager) { + className = Weapon; + catagory = "Spawn Items"; + shapeFile = "weapon_plasma.dts"; + image = LD06SavagerImage; + mass = 1.0; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; + pickUpName = "a LD06Savager"; - computeCRC = true; - emap = true; + computeCRC = true; + emap = true; }; -function LD06SavagerImage::onMount(%this,%obj,%slot) { - Parent::onMount(%this, %obj, %slot); +function LD06SavagerImage::onMount(%this, %obj, %slot) { + Parent::onMount(%this, %obj, %slot); } function LD06SavagerImage::onFire(%data,%obj,%slot) { - %obj.applyKick(-250); - %obj.decInventory(%data.ammo,1); - - serverPlay3D(ShotgunFireSound, %obj.getPosition()); + %obj.applyKick(-250); + %obj.decInventory(%data.ammo,1); - %vector = %obj.getMuzzleVector(%slot); - %mp = %obj.getMuzzlePoint(%slot); + serverPlay3D(ShotgunFireSound, %obj.getPosition()); + + %vector = %obj.getMuzzleVector(%slot); + %mp = %obj.getMuzzlePoint(%slot); for (%i=0; %i < 5; %i++) { - %x = (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; - %mat = MatrixCreateFromEuler(%x @ " " @ %y @ " " @ %z); - %newvector = MatrixMulVector(%mat, %vector); + %x = (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; + %mat = MatrixCreateFromEuler(%x @ " " @ %y @ " " @ %z); + %newvector = MatrixMulVector(%mat, %vector); - %p = new (%data.projectileType)() { - dataBlock = %data.projectile; - initialDirection = %newvector; - initialPosition = %mp; - sourceObject = %obj; - damageFactor = 1; - sourceSlot = %slot; - }; - %p.WeaponImageSource = %data.getName(); - %p.ImageSource = "LD06SavagerImage"; - } - if(%obj.inv[LD06SavagerAmmo] == 0) { //Added Phantom139, TWM2 - AttemptReload(%data, %obj, %slot); - } + %p = new (%data.projectileType)() { + dataBlock = %data.projectile; + initialDirection = %newvector; + initialPosition = %mp; + sourceObject = %obj; + damageFactor = 1; + sourceSlot = %slot; + }; + %p.WeaponImageSource = %data.getName(); + %p.ImageSource = "LD06SavagerImage"; + } + if(%obj.inv[LD06SavagerAmmo] == 0) { //Added Phantom139, TWM2 + AttemptReload(%data, %obj, %slot); + } } diff --git a/scripts/weapons/Pistols/M93.cs b/scripts/weapons/Pistols/M93.cs index d588255..55034af 100644 --- a/scripts/weapons/Pistols/M93.cs +++ b/scripts/weapons/Pistols/M93.cs @@ -3,195 +3,192 @@ //-------------------------------------------------------------------------- datablock TracerProjectileData(m93Bullet) { - doDynamicClientHits = true; + doDynamicClientHits = true; - directDamage = 0.22; // reduced .26 - directDamageType = $DamageType::m93; - explosion = "ChaingunExplosion"; - splash = ChaingunSplash; - HeadMultiplier = 1.5; - LegsMultiplier = 0.5; + directDamage = 0.22; // reduced .26 + directDamageType = $DamageType::M93; + explosion = "ChaingunExplosion"; + splash = ChaingunSplash; + HeadMultiplier = 1.5; + LegsMultiplier = 0.5; - kickBackStrength = 5.0; - sound = ChaingunProjectile; - - ImageSource = "m93Image"; + kickBackStrength = 5.0; + sound = ChaingunProjectile; - //dryVelocity = 425.0; - 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; + ImageSource = "m93Image"; - tracerLength = 25.0; - tracerAlpha = false; - tracerMinPixels = 6; - tracerColor = 211.0/255.0 @ " " @ 215.0/255.0 @ " " @ 120.0/255.0 @ " 0.75"; + //dryVelocity = 425.0; + 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; + tracerAlpha = false; + tracerMinPixels = 6; + tracerColor = 211.0/255.0 @ " " @ 215.0/255.0 @ " " @ 120.0/255.0 @ " 0.75"; tracerTex[0] = "special/tracer00"; tracerTex[1] = "special/tracercross"; tracerWidth = 0.09; - crossSize = 0.20; - crossViewAng = 0.990; - renderCross = true; + crossSize = 0.20; + crossViewAng = 0.990; + renderCross = true; - decalData[0] = ChaingunDecal1; - decalData[1] = ChaingunDecal2; - decalData[2] = ChaingunDecal3; - decalData[3] = ChaingunDecal4; - decalData[4] = ChaingunDecal5; - decalData[5] = ChaingunDecal6; + decalData[0] = ChaingunDecal1; + decalData[1] = ChaingunDecal2; + decalData[2] = ChaingunDecal3; + decalData[3] = ChaingunDecal4; + decalData[4] = ChaingunDecal5; + decalData[5] = ChaingunDecal6; }; -datablock ItemData(m93Ammo) -{ - className = Ammo; - catagory = "Ammo"; - shapeFile = "ammo_chaingun.dts"; - mass = 1; - elasticity = 0.2; - friction = 0.6; - pickupRadius = 2; +datablock ItemData(m93Ammo) { + className = Ammo; + catagory = "Ammo"; + shapeFile = "ammo_chaingun.dts"; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; pickUpName = "some .77mm bullets"; - computeCRC = true; - + computeCRC = true; }; datablock ItemData(m93) { - className = Weapon; - catagory = "Spawn Items"; - shapeFile = "weapon_energy_vehicle.dts"; - image = m93Image; - mass = 2; - elasticity = 0.2; - friction = 0.6; - pickupRadius = 2; - pickUpName = "a m93 Pistol"; + className = Weapon; + catagory = "Spawn Items"; + shapeFile = "weapon_energy_vehicle.dts"; + image = m93Image; + mass = 2; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; + pickUpName = "a m93 Pistol"; }; -datablock ShapeBaseImageData(m93Image) -{ - className = WeaponImage; - shapeFile = "weapon_energy_vehicle.dts"; - item = m93; - offset = "0 0 0"; - rotation = "0 1 0 180"; - mass = 4; +datablock ShapeBaseImageData(m93Image) { + className = WeaponImage; + shapeFile = "weapon_energy_vehicle.dts"; + item = m93; + offset = "0 0 0"; + rotation = "0 1 0 180"; + mass = 4; - ammo = m93Ammo; + ammo = m93Ammo; - projectile = m93bullet; - projectileType = tracerProjectile; - 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"; - // + projectile = m93bullet; + projectileType = tracerProjectile; + projectileSpread = 6.0 / 1000.0; - stateName[0] = "Activate"; - stateTransitionOnTimeout[0] = "ActivateReady"; - stateTimeoutValue[0] = 0.5; - stateSequence[0] = "Activate"; - stateSound[0] = PlasmaSwitchSound; + //ClipStuff + ClipName = "m93Clip"; + ClipPickupName["m93Clip"] = "Some .77MM Clips"; + ShowsClipInHud = 0; + ClipReloadTime = 4; + ClipReturn = 15; + InitialClips = 950; + HellClipCount = 10; + // - stateName[1] = "ActivateReady"; - stateTransitionOnLoaded[1] = "Ready"; - stateTransitionOnNoAmmo[1] = "NoAmmo"; + RankRequire = $TWM2::RankRequire["ALSWP"]; + PrestigeRequire = 2; - stateName[2] = "Ready"; - stateTransitionOnNoAmmo[2] = "NoAmmo"; - stateTransitionOnTriggerDown[2] = "Fire"; + //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[3] = "Fire"; - stateTransitionOnTimeout[3] = "Fire2"; - stateTimeoutValue[3] = 0.1; - 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[0] = "Activate"; + stateTransitionOnTimeout[0] = "ActivateReady"; + stateTimeoutValue[0] = 0.5; + stateSequence[0] = "Activate"; + stateSound[0] = PlasmaSwitchSound; - stateName[6] = "Reload"; - stateTransitionOnNoAmmo[6] = "NoAmmo"; - stateTransitionOnTimeout[6] = "Ready"; - stateTimeoutValue[6] = 0.1; - stateAllowImageChange[6] = false; - stateSequence[6] = "Reload"; + stateName[1] = "ActivateReady"; + stateTransitionOnLoaded[1] = "Ready"; + stateTransitionOnNoAmmo[1] = "NoAmmo"; - stateName[7] = "NoAmmo"; - stateTransitionOnAmmo[7] = "Reload"; - stateSequence[7] = "NoAmmo"; - stateTransitionOnTriggerDown[7] = "DryFire"; + stateName[2] = "Ready"; + stateTransitionOnNoAmmo[2] = "NoAmmo"; + stateTransitionOnTriggerDown[2] = "Fire"; - stateName[8] = "DryFire"; - stateSound[8] = ChaingunDryFireSound; - stateTimeoutValue[8] = 1.5; - stateTransitionOnTimeout[8] = "NoAmmo"; + stateName[3] = "Fire"; + stateTransitionOnTimeout[3] = "Fire2"; + stateTimeoutValue[3] = 0.1; + 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) { - Parent::onMount(%this, %obj, %slot); + Parent::onMount(%this, %obj, %slot); } function m93Image::onFire(%data, %obj, %slot) { - %p = Parent::onFire(%data, %obj, %slot); - if(%obj.client.UpgradeOn("Silencer", %data.getName())) { - //zero sound :p - } - else { - ServerPlay3d(PistolFireSound, %obj.getPosition()); - } + %p = Parent::onFire(%data, %obj, %slot); + if(%obj.client.UpgradeOn("Silencer", %data.getName())) { + //zero sound :p + } + else { + ServerPlay3d(PistolFireSound, %obj.getPosition()); + } } diff --git a/scripts/weapons/Pistols/PulsePhaser.cs b/scripts/weapons/Pistols/PulsePhaser.cs index 7fc2a00..10dd1eb 100644 --- a/scripts/weapons/Pistols/PulsePhaser.cs +++ b/scripts/weapons/Pistols/PulsePhaser.cs @@ -1,247 +1,245 @@ // Pulse Phaser Weapon -datablock AudioProfile(PPWFireSound) -{ - filename = "fx/powered/turret_outdoor_fire.wav"; - description = AudioDefault3d; - preload = true; +datablock AudioProfile(PPWFireSound) { + filename = "fx/powered/turret_outdoor_fire.wav"; + description = AudioDefault3d; + preload = true; }; datablock LinearFlareProjectileData(phaserBolt) { - directDamage = 0.2; //reduced 0.45 - directDamageType = $DamageType::Phaser; - explosion = "BlasterExplosion"; - kickBackStrength = 0.0; + directDamage = 0.26; + directDamageType = $DamageType::ES77PulsePhaser; + explosion = "BlasterExplosion"; + kickBackStrength = 0.0; - dryVelocity = 120.0; - wetVelocity = 40.0; - velInheritFactor = 0.5; - fizzleTimeMS = 2000; - lifetimeMS = 3000; - explodeOnDeath = false; - reflectOnWaterImpactAngle = 0.0; - explodeOnWaterImpact = false; - deflectionOnWaterImpact = 0.0; - fizzleUnderwaterMS = 3000; - - ImageSource = "PulsePhaserImage"; + dryVelocity = 160.0; + wetVelocity = 40.0; + velInheritFactor = 0.5; + fizzleTimeMS = 1300; + lifetimeMS = 1500; + explodeOnDeath = false; + reflectOnWaterImpactAngle = 0.0; + explodeOnWaterImpact = false; + deflectionOnWaterImpact = 0.0; + fizzleUnderwaterMS = 3000; - numFlares = 20; - size = 0.10; - flareColor = "0 1 0"; - flareModTexture = "flaremod"; - flareBaseTexture = "flarebase"; + ImageSource = "PulsePhaserImage"; - sound = BlasterProjectileSound; + numFlares = 20; + size = 0.10; + flareColor = "0 1 0"; + flareModTexture = "flaremod"; + flareBaseTexture = "flarebase"; - hasLight = true; - lightRadius = 3.0; - lightColor = "1 1 1"; + sound = BlasterProjectileSound; + + hasLight = true; + lightRadius = 3.0; + lightColor = "1 1 1"; }; datablock LinearFlareProjectileData(TrevorPhaserBolt) { - directDamage = 0.21; //reduced .485 - directDamageType = $DamageType::Phaser; - explosion = "BlasterExplosion"; - kickBackStrength = 0.0; + directDamage = 0.3; + directDamageType = $DamageType::ES77PulsePhaser; + explosion = "BlasterExplosion"; + kickBackStrength = 0.0; - dryVelocity = 120.0; - wetVelocity = 40.0; - velInheritFactor = 0.5; - fizzleTimeMS = 2000; - lifetimeMS = 3000; - explodeOnDeath = false; - reflectOnWaterImpactAngle = 0.0; - explodeOnWaterImpact = false; - deflectionOnWaterImpact = 0.0; - fizzleUnderwaterMS = 3000; + dryVelocity = 160.0; + wetVelocity = 40.0; + velInheritFactor = 0.5; + fizzleTimeMS = 1300; + lifetimeMS = 1500; + explodeOnDeath = false; + reflectOnWaterImpactAngle = 0.0; + explodeOnWaterImpact = false; + deflectionOnWaterImpact = 0.0; + fizzleUnderwaterMS = 3000; - ImageSource = "PulsePhaserImage"; + ImageSource = "PulsePhaserImage"; - numFlares = 20; - size = 0.10; - flareColor = "0.5 0.1 0.9"; - flareModTexture = "flaremod"; - flareBaseTexture = "flarebase"; + numFlares = 20; + size = 0.10; + flareColor = "0.5 0.1 0.9"; + flareModTexture = "flaremod"; + flareBaseTexture = "flarebase"; - sound = BlasterProjectileSound; + sound = BlasterProjectileSound; - hasLight = true; - lightRadius = 3.0; - lightColor = "1 1 1"; + hasLight = true; + lightRadius = 3.0; + lightColor = "1 1 1"; }; datablock ShapeBaseImageData(PulsePhaserImage) { - className = WeaponImage; - shapeFile = "weapon_energy.dts"; - item = PulsePhaser; - projectile = phaserBolt; - 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"; + className = WeaponImage; + shapeFile = "weapon_energy.dts"; + item = PulsePhaser; + projectile = phaserBolt; + projectileType = LinearFlareProjectile; - 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; - fireEnergy = 4; - minEnergy = 4; + RankRequire = $TWM2::RankRequire["PulsePhaser"]; - stateName[0] = "Activate"; - stateTransitionOnTimeout[0] = "ActivateReady"; - stateTimeoutValue[0] = 0.5; - stateSequence[0] = "Activate"; - stateSound[0] = BlasterSwitchSound; + usesEnergy = true; + fireEnergy = 4; + minEnergy = 4; - stateName[1] = "ActivateReady"; - stateTransitionOnLoaded[1] = "Ready"; - stateTransitionOnNoAmmo[1] = "NoAmmo"; + stateName[0] = "Activate"; + stateTransitionOnTimeout[0] = "ActivateReady"; + stateTimeoutValue[0] = 0.5; + stateSequence[0] = "Activate"; + stateSound[0] = BlasterSwitchSound; - stateName[2] = "Ready"; - stateTransitionOnNoAmmo[2] = "NoAmmo"; - stateTransitionOnTriggerDown[2] = "Fire"; + stateName[1] = "ActivateReady"; + stateTransitionOnLoaded[1] = "Ready"; + stateTransitionOnNoAmmo[1] = "NoAmmo"; - stateName[3] = "Fire"; - stateTransitionOnTimeout[3] = "Reload"; - stateTimeoutValue[3] = 0.3; - stateFire[3] = true; - stateRecoil[3] = NoRecoil; - stateAllowImageChange[3] = false; - stateSequence[3] = "Fire"; - stateSound[3] = PPWFireSound; - stateScript[3] = "onFire"; + stateName[2] = "Ready"; + stateTransitionOnNoAmmo[2] = "NoAmmo"; + stateTransitionOnTriggerDown[2] = "Fire"; - stateName[4] = "Reload"; - stateTransitionOnNoAmmo[4] = "NoAmmo"; - stateTransitionOnTimeout[4] = "Ready"; - stateAllowImageChange[4] = false; - stateSequence[4] = "Reload"; + stateName[3] = "Fire"; + stateTransitionOnTimeout[3] = "Reload"; + stateTimeoutValue[3] = 0.3; + stateFire[3] = true; + stateRecoil[3] = NoRecoil; + stateAllowImageChange[3] = false; + stateSequence[3] = "Fire"; + stateSound[3] = PPWFireSound; + stateScript[3] = "onFire"; - stateName[5] = "NoAmmo"; - stateTransitionOnAmmo[5] = "Reload"; - stateSequence[5] = "NoAmmo"; - stateTransitionOnTriggerDown[5] = "DryFire"; + stateName[4] = "Reload"; + stateTransitionOnNoAmmo[4] = "NoAmmo"; + stateTransitionOnTimeout[4] = "Ready"; + stateAllowImageChange[4] = false; + stateSequence[4] = "Reload"; - stateName[6] = "DryFire"; - stateTimeoutValue[6] = 0.3; - stateSound[6] = BlasterDryFireSound; - stateTransitionOnTimeout[6] = "Ready"; + stateName[5] = "NoAmmo"; + stateTransitionOnAmmo[5] = "Reload"; + stateSequence[5] = "NoAmmo"; + stateTransitionOnTriggerDown[5] = "DryFire"; + + stateName[6] = "DryFire"; + stateTimeoutValue[6] = 0.3; + stateSound[6] = BlasterDryFireSound; + stateTransitionOnTimeout[6] = "Ready"; }; datablock ItemData(PulsePhaser) { - className = Weapon; - catagory = "Spawn Items"; - shapeFile = "weapon_energy.dts"; - image = PulsePhaserImage; - mass = 1; - elasticity = 0.2; - friction = 0.6; - pickupRadius = 2; + className = Weapon; + catagory = "Spawn Items"; + shapeFile = "weapon_energy.dts"; + image = PulsePhaserImage; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; pickUpName = "a Pulse Phaser"; }; datablock ShapeBaseImageData(Phaser2Image) : PulsePhaserImage { - shapeFile = "weapon_ELF.dts"; - offset = "0 0.3 0.2"; - rotation = "0 1 0 180"; + shapeFile = "weapon_ELF.dts"; + offset = "0 0.3 0.2"; + rotation = "0 1 0 180"; }; datablock ShapeBaseImageData(Phaser3Image) : PulsePhaserImage { - shapeFile = "weapon_ELF.dts"; - offset = "0 .5 0"; + shapeFile = "weapon_ELF.dts"; + offset = "0 .5 0"; }; function PulsePhaserImage::onMount(%this, %obj, %slot) { - Parent::onMount(%this, %obj, %slot); - if(%obj.client.UpgradeOn("Phaser Blades", %this.getName())) { - %obj.mountImage(Phaser2Image, 5); - %obj.mountImage(Phaser3Image, 6); - } + Parent::onMount(%this, %obj, %slot); + if(%obj.client.UpgradeOn("Phaser Blades", %this.getName())) { + %obj.mountImage(Phaser2Image, 5); + %obj.mountImage(Phaser3Image, 6); + } } function PulsePhaserImage::onUnmount(%this,%obj,%slot) { - %obj.unmountImage(5); - %obj.unmountImage(6); - Parent::onUnmount(%this, %obj, %slot); + %obj.unmountImage(5); + %obj.unmountImage(6); + Parent::onUnmount(%this, %obj, %slot); } function PulsePhaserImage::onFire(%data,%obj,%slot) { - if(%obj.cannotFire) { - return; - } - %vector = %obj.getMuzzleVector(%slot); - %mp = %obj.getMuzzlePoint(%slot); - if(%obj.client.UpgradeOn("Triple Burst", %data.getName())) { - %p1 = Parent::OnFire(%data, %obj, %slot); + if(%obj.cannotFire) { + return; + } + %vector = %obj.getMuzzleVector(%slot); + %mp = %obj.getMuzzlePoint(%slot); + if(%obj.client.UpgradeOn("Triple Burst", %data.getName())) { + %p1 = Parent::OnFire(%data, %obj, %slot); - %p2 = Schedule(100, 0, "spawnprojectile", %data.Projectile, %data.ProjectileType, - vectorAdd(%obj.getPosition(), "-.45 0 1.4"), %vector, %obj); - %p2.WeaponImageSource = "PulsePhaserImage"; - schedule(100, 0, "ServerPlay3D", "PPWFireSound", %obj.getPosition()); + %p2 = Schedule(100, 0, "spawnprojectile", %data.Projectile, %data.ProjectileType, + vectorAdd(%obj.getPosition(), "-.45 0 1.4"), %vector, %obj); + %p2.WeaponImageSource = "PulsePhaserImage"; + schedule(100, 0, "ServerPlay3D", "PPWFireSound", %obj.getPosition()); - %p3 = Schedule(250, 0, "spawnprojectile", %data.Projectile, %data.ProjectileType, - vectorAdd(%obj.getPosition(), "-.45 0 1.4"), %vector, %obj); - %p3.WeaponImageSource = "PulsePhaserImage"; - 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); + %p3 = Schedule(250, 0, "spawnprojectile", %data.Projectile, %data.ProjectileType, + vectorAdd(%obj.getPosition(), "-.45 0 1.4"), %vector, %obj); + %p3.WeaponImageSource = "PulsePhaserImage"; + schedule(250, 0, "ServerPlay3D", "PPWFireSound", %obj.getPosition()); - %p = new (%data.projectileType)() { - dataBlock = %data.projectile; - initialDirection = %newvector; - initialPosition = %mp; - sourceObject = %obj; - damageFactor = 1; - sourceSlot = %slot; - }; + 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.WeaponImageSource = "PulsePhaserImage"; - } - ResetFireRestrict(%obj, 1); - 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 = new (%data.projectileType)() { + dataBlock = %data.projectile; + initialDirection = %newvector; + initialPosition = %mp; + sourceObject = %obj; + damageFactor = 1; + sourceSlot = %slot; + }; - %p.WeaponImageSource = "PulsePhaserImage"; - } - else { - %p = Parent::OnFire(%data,%obj,%slot); - } + %p.WeaponImageSource = "PulsePhaserImage"; + } + ResetFireRestrict(%obj, 1); + 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) { - %plyr.cannotFire = %onOff; -} + %plyr.cannotFire = %onOff; +} \ No newline at end of file diff --git a/scripts/weapons/Rifles/ALSWPSniper.cs b/scripts/weapons/Rifles/ALSWPSniper.cs index 9f52be4..df24012 100644 --- a/scripts/weapons/Rifles/ALSWPSniper.cs +++ b/scripts/weapons/Rifles/ALSWPSniper.cs @@ -1,210 +1,206 @@ -datablock AudioProfile(ALSWPFireSound) { - filename = "fx/weapons/cg_hard1.wav"; - description = AudioDefault3d; - preload = true; + datablock AudioProfile(ALSWPFireSound) { + filename = "fx/weapons/cg_hard1.wav"; + description = AudioDefault3d; + preload = true; }; datablock TracerProjectileData(ALSWPBullet){ - doDynamicClientHits = true; + doDynamicClientHits = true; - directDamage = 0.5; - directDamageType = $DamageType::ALSWP; - explosion = "ChaingunExplosion"; - splash = ChaingunSplash; - HeadMultiplier = 1.5; - LegsMultiplier = 0.35; + directDamage = 0.5; + directDamageType = $DamageType::ALSWP; + explosion = "ChaingunExplosion"; + splash = ChaingunSplash; + HeadMultiplier = 1.5; + LegsMultiplier = 0.35; - HeadShotKill = 0; - - ImageSource = "ALSWPSniperRifleImage"; + HeadShotKill = 0; - kickBackStrength = 15.0; - sound = ChaingunProjectile; + ImageSource = "ALSWPSniperRifleImage"; - dryVelocity = 3000.0; - wetVelocity = 2000.0; - velInheritFactor = 1.0; - fizzleTimeMS = 1000; - lifetimeMS = 1000; - explodeOnDeath = false; - reflectOnWaterImpactAngle = 0.0; - explodeOnWaterImpact = false; - deflectionOnWaterImpact = 0.0; - fizzleUnderwaterMS = 3000; + kickBackStrength = 15.0; + sound = ChaingunProjectile; - tracerLength = 20.0; - tracerAlpha = false; - tracerMinPixels = 6; - tracerColor = 211.0/255.0 @ " " @ 215.0/255.0 @ " " @ 120.0/255.0 @ " 0.75"; + dryVelocity = 3000.0; + 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; + tracerAlpha = false; + tracerMinPixels = 6; + tracerColor = 211.0/255.0 @ " " @ 215.0/255.0 @ " " @ 120.0/255.0 @ " 0.75"; tracerTex[0] = "special/tracer00"; tracerTex[1] = "special/tracercross"; tracerWidth = 0.09; - crossSize = 0.20; - crossViewAng = 0.990; - renderCross = true; + crossSize = 0.20; + crossViewAng = 0.990; + renderCross = true; - decalData[0] = ChaingunDecal1; - decalData[1] = ChaingunDecal2; - decalData[2] = ChaingunDecal3; - decalData[3] = ChaingunDecal4; - decalData[4] = ChaingunDecal5; - decalData[5] = ChaingunDecal6; + decalData[0] = ChaingunDecal1; + decalData[1] = ChaingunDecal2; + decalData[2] = ChaingunDecal3; + decalData[3] = ChaingunDecal4; + decalData[4] = ChaingunDecal5; + decalData[5] = ChaingunDecal6; }; -datablock ItemData(ALSWPSniperRifleAmmo) -{ - className = Ammo; - catagory = "Ammo"; - shapeFile = "ammo_chaingun.dts"; - mass = 1; - elasticity = 0.2; - friction = 0.6; - pickupRadius = 2; +datablock ItemData(ALSWPSniperRifleAmmo) { + className = Ammo; + catagory = "Ammo"; + shapeFile = "ammo_chaingun.dts"; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; pickUpName = "Some ALSWP Sniper Rifle Ammo"; - computeCRC = true; - + computeCRC = true; }; //-------------------------------------------------------------------------- // Weapon //-------------------------------------- datablock ShapeBaseImageData(ALSWPSniperRifleImage) { + className = WeaponImage; + shapeFile = "weapon_sniper.dts"; + mass = 10; + item = ALSWPSniperRifle; + ammo = ALSWPSniperRifleAmmo; + projectile = ALSWPBullet; + projectileType = TracerProjectile; + emap = true; - className = WeaponImage; - shapeFile = "weapon_sniper.dts"; - mass = 10; - item = ALSWPSniperRifle; - ammo = ALSWPSniperRifleAmmo; - projectile = ALSWPBullet; - projectileType = TracerProjectile; - emap = true; + armThread = looksn; - 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 - 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"]; - RankRequire = $TWM2::RankRequire["ALSWP"]; - - casing = ShellDebris; - shellExitDir = "1.0 0.3 1.0"; - shellExitOffset = "0.15 -0.56 -0.1"; - shellExitVariance = 15.0; - shellVelocity = 3.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"; - stateTransitionOnTimeout[0] = "ActivateReady"; - stateTimeoutValue[0] = 0.5; - stateSequence[0] = "Activate"; - stateSound[0] = ChaingunSwitchSound; + stateName[0] = "Activate"; + stateTransitionOnTimeout[0] = "ActivateReady"; + stateTimeoutValue[0] = 0.5; + stateSequence[0] = "Activate"; + stateSound[0] = ChaingunSwitchSound; - stateName[1] = "ActivateReady"; - stateTransitionOnLoaded[1] = "Ready"; - stateTransitionOnNoAmmo[1] = "NoAmmo"; + stateName[1] = "ActivateReady"; + stateTransitionOnLoaded[1] = "Ready"; + stateTransitionOnNoAmmo[1] = "NoAmmo"; - stateName[2] = "Ready"; - stateTransitionOnNoAmmo[2] = "NoAmmo"; - stateTransitionOnTriggerDown[2] = "CheckWet"; + stateName[2] = "Ready"; + stateTransitionOnNoAmmo[2] = "NoAmmo"; + stateTransitionOnTriggerDown[2] = "CheckWet"; - stateName[3] = "Fire"; - stateTransitionOnTimeout[3] = "Reload"; - stateTimeoutValue[3] = 0.01; - stateFire[3] = true; - stateRecoil[3] = LightRecoil; - stateAllowImageChange[3] = false; - stateScript[3] = "onFire"; - //stateSound[3] = "ALSWPFireSound"; + stateName[3] = "Fire"; + stateTransitionOnTimeout[3] = "Reload"; + stateTimeoutValue[3] = 0.01; + stateFire[3] = true; + stateRecoil[3] = LightRecoil; + stateAllowImageChange[3] = false; + stateScript[3] = "onFire"; + //stateSound[3] = "ALSWPFireSound"; - stateName[4] = "Reload"; - stateTransitionOnNoAmmo[4] = "NoAmmo"; - stateTransitionOnTimeout[4] = "Ready"; - stateTimeoutValue[4] = 0.6; - stateAllowImageChange[4] = false; - stateSequence[4] = "Reload"; + stateName[4] = "Reload"; + stateTransitionOnNoAmmo[4] = "NoAmmo"; + stateTransitionOnTimeout[4] = "Ready"; + stateTimeoutValue[4] = 0.6; + stateAllowImageChange[4] = false; + stateSequence[4] = "Reload"; - stateName[5] = "NoAmmo"; - stateTransitionOnAmmo[5] = "Reload"; - stateSequence[5] = "NoAmmo"; - stateTransitionOnTriggerDown[5] = "DryFire"; + stateName[5] = "NoAmmo"; + stateTransitionOnAmmo[5] = "Reload"; + stateSequence[5] = "NoAmmo"; + stateTransitionOnTriggerDown[5] = "DryFire"; - stateName[6] = "DryFire"; - stateSound[6] = ChaingunDryFireSound; - stateTimeoutValue[6] = 1.0; - stateTransitionOnTimeout[6] = "NoAmmo"; + stateName[6] = "DryFire"; + stateSound[6] = ChaingunDryFireSound; + stateTimeoutValue[6] = 1.0; + stateTransitionOnTimeout[6] = "NoAmmo"; - stateName[7] = "WetFire"; - stateSound[7] = PlasmaFireWetSound; - stateTimeoutValue[7] = 1.0; - stateTransitionOnTimeout[7] = "Ready"; + stateName[7] = "WetFire"; + stateSound[7] = PlasmaFireWetSound; + stateTimeoutValue[7] = 1.0; + stateTransitionOnTimeout[7] = "Ready"; - stateName[8] = "CheckWet"; - stateTransitionOnWet[8] = "WetFire"; - stateTransitionOnNotWet[8] = "Fire"; + stateName[8] = "CheckWet"; + stateTransitionOnWet[8] = "WetFire"; + stateTransitionOnNotWet[8] = "Fire"; }; -datablock ItemData(ALSWPSniperRifle) -{ - className = Weapon; - catagory = "Spawn Items"; - shapeFile = "weapon_sniper.dts"; - image = ALSWPSniperRifleImage; - mass = 1.0; - elasticity = 0.0; - friction = 0.6; - pickupRadius = 2; - pickUpName = "a ALSWP Sniper Rifle"; +datablock ItemData(ALSWPSniperRifle) { + className = Weapon; + catagory = "Spawn Items"; + shapeFile = "weapon_sniper.dts"; + image = ALSWPSniperRifleImage; + mass = 1.0; + elasticity = 0.0; + friction = 0.6; + pickupRadius = 2; + pickUpName = "a ALSWP Sniper Rifle"; - computeCRC = true; - emap = true; + computeCRC = true; + emap = true; }; function ALSWPSniperRifleImage::onMount(%this,%obj,%slot) { - if(!$TWM2::AllowSnipers) { - bottomPrint(%obj.client, "The host has disabled sniper weapons.", 2, 2); - %obj.throwweapon(1); - %obj.throwweapon(0); - } - Parent::onMount(%this, %obj, %slot); + if(!$TWM2::AllowSnipers) { + bottomPrint(%obj.client, "The host has disabled sniper weapons.", 2, 2); + %obj.throwweapon(1); + %obj.throwweapon(0); + } + Parent::onMount(%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) { - if(!$TWM2::AllowSnipers) { - bottomPrint(%obj.client, "The host has disabled sniper weapons.", 2, 2); - %obj.throwweapon(1); - %obj.throwweapon(0); - } - %p = Parent::onFire(%data, %obj, %slot); - if(%obj.client.UpgradeOn("Silencer", %data.getName())) { - //zero sound :p - } - else { - ServerPlay3d(ALSWPFireSound, %obj.getPosition()); - } + if(!$TWM2::AllowSnipers) { + bottomPrint(%obj.client, "The host has disabled sniper weapons.", 2, 2); + %obj.throwweapon(1); + %obj.throwweapon(0); + } + %p = Parent::onFire(%data, %obj, %slot); + if(%obj.client.UpgradeOn("Silencer", %data.getName())) { + //zero sound :p + } + else { + ServerPlay3d(ALSWPFireSound, %obj.getPosition()); + } } diff --git a/scripts/weapons/Rifles/G17Sniper.cs b/scripts/weapons/Rifles/G17Sniper.cs index a425fc6..1405f3d 100644 --- a/scripts/weapons/Rifles/G17Sniper.cs +++ b/scripts/weapons/Rifles/G17Sniper.cs @@ -1,225 +1,221 @@ datablock AudioProfile(G17FireSound) { - filename = "fx/weapons/cg_metal4.wav"; - description = AudioDefault3d; - preload = true; + filename = "fx/weapons/cg_metal4.wav"; + description = AudioDefault3d; + preload = true; }; datablock TracerProjectileData(G17Bullet){ - doDynamicClientHits = true; + doDynamicClientHits = true; - directDamage = 0.25; - directDamageType = $DamageType::G17; - explosion = "ChaingunExplosion"; - splash = ChaingunSplash; - HeadMultiplier = 1.5; - LegsMultiplier = 0.35; + directDamage = 0.55; + directDamageType = $DamageType::G17; + explosion = "ChaingunExplosion"; + splash = ChaingunSplash; + HeadMultiplier = 1.5; + LegsMultiplier = 0.35; - HeadShotKill = 1; - - ImageSource = "G17SniperRifleImage"; + HeadShotKill = 1; - kickBackStrength = 15.0; - sound = ChaingunProjectile; + ImageSource = "G17SniperRifleImage"; - dryVelocity = 3000.0; - wetVelocity = 2000.0; - velInheritFactor = 1.0; - fizzleTimeMS = 1000; - lifetimeMS = 1000; - explodeOnDeath = false; - reflectOnWaterImpactAngle = 0.0; - explodeOnWaterImpact = false; - deflectionOnWaterImpact = 0.0; - fizzleUnderwaterMS = 3000; + kickBackStrength = 15.0; + sound = ChaingunProjectile; - tracerLength = 20.0; - tracerAlpha = false; - tracerMinPixels = 6; - tracerColor = 211.0/255.0 @ " " @ 215.0/255.0 @ " " @ 120.0/255.0 @ " 0.75"; + dryVelocity = 3000.0; + 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; + tracerAlpha = false; + tracerMinPixels = 6; + tracerColor = 211.0/255.0 @ " " @ 215.0/255.0 @ " " @ 120.0/255.0 @ " 0.75"; tracerTex[0] = "special/tracer00"; tracerTex[1] = "special/tracercross"; tracerWidth = 0.09; - crossSize = 0.20; - crossViewAng = 0.990; - renderCross = true; + crossSize = 0.20; + crossViewAng = 0.990; + renderCross = true; - decalData[0] = ChaingunDecal1; - decalData[1] = ChaingunDecal2; - decalData[2] = ChaingunDecal3; - decalData[3] = ChaingunDecal4; - decalData[4] = ChaingunDecal5; - decalData[5] = ChaingunDecal6; + decalData[0] = ChaingunDecal1; + decalData[1] = ChaingunDecal2; + decalData[2] = ChaingunDecal3; + decalData[3] = ChaingunDecal4; + decalData[4] = ChaingunDecal5; + decalData[5] = ChaingunDecal6; }; -datablock ItemData(G17SniperRifleAmmo) -{ - className = Ammo; - catagory = "Ammo"; - shapeFile = "ammo_chaingun.dts"; - mass = 1; - elasticity = 0.2; - friction = 0.6; - pickupRadius = 2; +datablock ItemData(G17SniperRifleAmmo) { + className = Ammo; + catagory = "Ammo"; + shapeFile = "ammo_chaingun.dts"; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; pickUpName = "Some G17 Sniper Rifle Ammo"; - computeCRC = true; - + computeCRC = true; }; //-------------------------------------------------------------------------- // Weapon //-------------------------------------- datablock ShapeBaseImageData(G17SniperRifleImage) { + className = WeaponImage; + shapeFile = "weapon_sniper.dts"; + mass = 10; + item = G17SniperRifle; + ammo = G17SniperRifleAmmo; + projectile = G17Bullet; + projectileType = TracerProjectile; + emap = true; - className = WeaponImage; - shapeFile = "weapon_sniper.dts"; - mass = 10; - item = G17SniperRifle; - ammo = G17SniperRifleAmmo; - projectile = G17Bullet; - projectileType = TracerProjectile; - emap = true; + armThread = looksn; - 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 - 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"; - // - - casing = ShellDebris; - shellExitDir = "1.0 0.3 1.0"; - shellExitOffset = "0.15 -0.56 -0.1"; - shellExitVariance = 15.0; - shellVelocity = 3.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"; - stateTransitionOnTimeout[0] = "ActivateReady"; - stateTimeoutValue[0] = 0.5; - stateSequence[0] = "Activate"; - stateSound[0] = ChaingunSwitchSound; + stateName[0] = "Activate"; + stateTransitionOnTimeout[0] = "ActivateReady"; + stateTimeoutValue[0] = 0.5; + stateSequence[0] = "Activate"; + stateSound[0] = ChaingunSwitchSound; - stateName[1] = "ActivateReady"; - stateTransitionOnLoaded[1] = "Ready"; - stateTransitionOnNoAmmo[1] = "NoAmmo"; + stateName[1] = "ActivateReady"; + stateTransitionOnLoaded[1] = "Ready"; + stateTransitionOnNoAmmo[1] = "NoAmmo"; - stateName[2] = "Ready"; - stateTransitionOnNoAmmo[2] = "NoAmmo"; - stateTransitionOnTriggerDown[2] = "CheckWet"; + stateName[2] = "Ready"; + stateTransitionOnNoAmmo[2] = "NoAmmo"; + stateTransitionOnTriggerDown[2] = "CheckWet"; - stateName[3] = "Fire"; - stateTransitionOnTimeout[3] = "Reload"; - stateTimeoutValue[3] = 0.01; - stateFire[3] = true; - stateRecoil[3] = LightRecoil; - stateAllowImageChange[3] = false; - stateScript[3] = "onFire"; - //stateSound[3] = "G17FireSound"; + stateName[3] = "Fire"; + stateTransitionOnTimeout[3] = "Reload"; + stateTimeoutValue[3] = 0.01; + stateFire[3] = true; + stateRecoil[3] = LightRecoil; + stateAllowImageChange[3] = false; + stateScript[3] = "onFire"; + //stateSound[3] = "G17FireSound"; - stateName[4] = "Reload"; - stateTransitionOnNoAmmo[4] = "NoAmmo"; - stateTransitionOnTimeout[4] = "Ready"; - stateTimeoutValue[4] = 1.1; - stateAllowImageChange[4] = false; - stateSequence[4] = "Reload"; + stateName[4] = "Reload"; + stateTransitionOnNoAmmo[4] = "NoAmmo"; + stateTransitionOnTimeout[4] = "Ready"; + stateTimeoutValue[4] = 0.7; + stateAllowImageChange[4] = false; + stateSequence[4] = "Reload"; - stateName[5] = "NoAmmo"; - stateTransitionOnAmmo[5] = "Reload"; - stateSequence[5] = "NoAmmo"; - stateTransitionOnTriggerDown[5] = "DryFire"; + stateName[5] = "NoAmmo"; + stateTransitionOnAmmo[5] = "Reload"; + stateSequence[5] = "NoAmmo"; + stateTransitionOnTriggerDown[5] = "DryFire"; - stateName[6] = "DryFire"; - stateSound[6] = ChaingunDryFireSound; - stateTimeoutValue[6] = 1.0; - stateTransitionOnTimeout[6] = "NoAmmo"; + stateName[6] = "DryFire"; + stateSound[6] = ChaingunDryFireSound; + stateTimeoutValue[6] = 1.0; + stateTransitionOnTimeout[6] = "NoAmmo"; - stateName[7] = "WetFire"; - stateSound[7] = PlasmaFireWetSound; - stateTimeoutValue[7] = 1.0; - stateTransitionOnTimeout[7] = "Ready"; + stateName[7] = "WetFire"; + stateSound[7] = PlasmaFireWetSound; + stateTimeoutValue[7] = 1.0; + stateTransitionOnTimeout[7] = "Ready"; - stateName[8] = "CheckWet"; - stateTransitionOnWet[8] = "WetFire"; - stateTransitionOnNotWet[8] = "Fire"; + stateName[8] = "CheckWet"; + stateTransitionOnWet[8] = "WetFire"; + stateTransitionOnNotWet[8] = "Fire"; }; -datablock ItemData(G17SniperRifle) -{ - className = Weapon; - catagory = "Spawn Items"; - shapeFile = "weapon_sniper.dts"; - image = G17SniperRifleImage; - mass = 1.0; - elasticity = 0.0; - friction = 0.6; - pickupRadius = 2; - pickUpName = "a G17 Sniper Rifle"; +datablock ItemData(G17SniperRifle) { + className = Weapon; + catagory = "Spawn Items"; + shapeFile = "weapon_sniper.dts"; + image = G17SniperRifleImage; + mass = 1.0; + elasticity = 0.0; + friction = 0.6; + pickupRadius = 2; + pickUpName = "a G17 Sniper Rifle"; - computeCRC = true; - emap = true; + computeCRC = true; + emap = true; }; //Two images make the scope datablock ShapeBaseImageData(G17ScopeImage) : G17SniperRifleImage { - shapeFile = "turret_belly_barrell.dts"; - offset = "0 0.25 0.25"; - rotation = "1 0 0 180"; + shapeFile = "turret_belly_barrell.dts"; + offset = "0 0.25 0.25"; + rotation = "1 0 0 180"; }; datablock ShapeBaseImageData(G17ScopeImage2) : G17SniperRifleImage { - shapeFile = "turret_belly_barrell.dts"; - offset = "0 0.3 0.25"; - rotation = "1 0 0 0"; + shapeFile = "turret_belly_barrell.dts"; + offset = "0 0.3 0.25"; + rotation = "1 0 0 0"; }; function G17SniperRifleImage::onMount(%this,%obj,%slot) { - if(!$TWM2::AllowSnipers) { - bottomPrint(%obj.client, "The host has disabled sniper weapons.", 2, 2); - %obj.throwweapon(1); - %obj.throwweapon(0); - } - Parent::onMount(%this, %obj, %slot); - %obj.mountImage(G17ScopeImage, 5); - %obj.mountImage(G17ScopeImage2, 6); + if(!$TWM2::AllowSnipers) { + bottomPrint(%obj.client, "The host has disabled sniper weapons.", 2, 2); + %obj.throwweapon(1); + %obj.throwweapon(0); + } + Parent::onMount(%this, %obj, %slot); + %obj.mountImage(G17ScopeImage, 5); + %obj.mountImage(G17ScopeImage2, 6); } function G17SniperRifleImage::onUnmount(%this,%obj,%slot) { - Parent::onUnmount(%this, %obj, %slot); - %obj.unmountImage(5); - %obj.unmountImage(6); + Parent::onUnmount(%this, %obj, %slot); + %obj.unmountImage(5); + %obj.unmountImage(6); } function G17SniperRifleImage::onFire(%data, %obj, %slot) { - if(!$TWM2::AllowSnipers) { - bottomPrint(%obj.client, "The host has disabled sniper weapons.", 2, 2); - %obj.throwweapon(1); - %obj.throwweapon(0); - } - %p = Parent::onFire(%data, %obj, %slot); - if(%obj.client.UpgradeOn("Silencer", %data.getName())) { - //zero sound :p - } - else { - ServerPlay3d(G17FireSound, %obj.getPosition()); - } -} + if(!$TWM2::AllowSnipers) { + bottomPrint(%obj.client, "The host has disabled sniper weapons.", 2, 2); + %obj.throwweapon(1); + %obj.throwweapon(0); + } + %p = Parent::onFire(%data, %obj, %slot); + if(%obj.client.UpgradeOn("Silencer", %data.getName())) { + //zero sound :p + } + else { + ServerPlay3d(G17FireSound, %obj.getPosition()); + } +} \ No newline at end of file diff --git a/scripts/weapons/Rifles/G41.cs b/scripts/weapons/Rifles/G41.cs index 0d3b3cd..54b51d5 100644 --- a/scripts/weapons/Rifles/G41.cs +++ b/scripts/weapons/Rifles/G41.cs @@ -1,183 +1,178 @@ -datablock TracerProjectileData(G41Bullet) -{ - doDynamicClientHits = true; +datablock TracerProjectileData(G41Bullet) { + doDynamicClientHits = true; - directDamage = 0.3; - directDamageType = $DamageType::G41; - explosion = "ChaingunExplosion"; - splash = ChaingunSplash; - HeadMultiplier = 1.1; - LegsMultiplier = 0.35; + directDamage = 0.44; + directDamageType = $DamageType::G41; + explosion = "ChaingunExplosion"; + splash = ChaingunSplash; + HeadMultiplier = 1.1; + LegsMultiplier = 0.35; - ImageSource = "G41RifleImage"; + ImageSource = "G41RifleImage"; - kickBackStrength = 15.0; - sound = ChaingunProjectile; + kickBackStrength = 15.0; + sound = ChaingunProjectile; - dryVelocity = 3000.0; - wetVelocity = 2000.0; - velInheritFactor = 1.0; - fizzleTimeMS = 1000; - lifetimeMS = 1000; - explodeOnDeath = false; - reflectOnWaterImpactAngle = 0.0; - explodeOnWaterImpact = false; - deflectionOnWaterImpact = 0.0; - fizzleUnderwaterMS = 3000; + dryVelocity = 3000.0; + 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; - tracerAlpha = false; - tracerMinPixels = 6; - tracerColor = 211.0/255.0 @ " " @ 215.0/255.0 @ " " @ 120.0/255.0 @ " 0.75"; + 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[1] = "special/tracercross"; tracerWidth = 0.09; - crossSize = 0.20; - crossViewAng = 0.990; - renderCross = true; + crossSize = 0.20; + crossViewAng = 0.990; + renderCross = true; - decalData[0] = ChaingunDecal1; - decalData[1] = ChaingunDecal2; - decalData[2] = ChaingunDecal3; - decalData[3] = ChaingunDecal4; - decalData[4] = ChaingunDecal5; - decalData[5] = ChaingunDecal6; + decalData[0] = ChaingunDecal1; + decalData[1] = ChaingunDecal2; + decalData[2] = ChaingunDecal3; + decalData[3] = ChaingunDecal4; + decalData[4] = ChaingunDecal5; + decalData[5] = ChaingunDecal6; }; -datablock ItemData(G41RifleAmmo) -{ - className = Ammo; - catagory = "Ammo"; - shapeFile = "ammo_chaingun.dts"; - mass = 1; - elasticity = 0.2; - friction = 0.6; - pickupRadius = 2; +datablock ItemData(G41RifleAmmo) { + className = Ammo; + catagory = "Ammo"; + shapeFile = "ammo_chaingun.dts"; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; pickUpName = "Some G41 Rifle Bullets"; - computeCRC = true; - + computeCRC = true; }; -datablock ShapeBaseImageData(G41RifleImage) -{ - className = WeaponImage; - shapeFile = "weapon_sniper.dts"; - mass = 10; - item = G41Rifle; - ammo = G41RifleAmmo; - projectile = G41Bullet; - projectileType = TracerProjectile; - emap = true; +datablock ShapeBaseImageData(G41RifleImage) { + className = WeaponImage; + shapeFile = "weapon_sniper.dts"; + mass = 10; + item = G41Rifle; + ammo = G41RifleAmmo; + projectile = G41Bullet; + projectileType = TracerProjectile; + emap = true; - //ClipStuff - ClipName = "G41RifleClip"; - ClipPickupName["G41RifleClip"] = "some G41 Clip Cartons"; - ShowsClipInHud = 1; - ClipReloadTime = 5; - ClipReturn = 20; - InitialClips = 7; - // - //Challenges - HasChallenges = 1; - ChallengeCt = 8; - Challenge[1] = "G41 Hunter\t75\t150\tNone"; - Challenge[2] = "G41 Expert\t150\t250\tGrip"; - Challenge[3] = "G41 Master\t350\t500\tLaser"; - Challenge[4] = "G41 God\t600\t1000\tSilencer"; - Challenge[5] = "G41 Bronze Commendation\t2500\t10000\tNone"; - Challenge[6] = "G41 Silver Commendation\t5000\t25000\tNone"; - Challenge[7] = "G41 Gold Commendation\t10000\t50000\tNone"; - Challenge[8] = "G41 Titan Commendation\t25000\t75000\tNone"; - Upgrade[1] = "Grip"; - Upgrade[2] = "Laser"; - Upgrade[3] = "Silencer"; - GunName = "G41 Semi-Automatic Rifle"; - // - - RankRequire = $TWM2::RankRequire["G41"]; + //ClipStuff + ClipName = "G41RifleClip"; + ClipPickupName["G41RifleClip"] = "some G41 Clip Cartons"; + ShowsClipInHud = 1; + ClipReloadTime = 5; + ClipReturn = 20; + InitialClips = 7; + // + //Challenges + HasChallenges = 1; + ChallengeCt = 8; + Challenge[1] = "G41 Hunter\t75\t150\tNone"; + Challenge[2] = "G41 Expert\t150\t250\tGrip"; + Challenge[3] = "G41 Master\t350\t500\tLaser"; + Challenge[4] = "G41 God\t600\t1000\tSilencer"; + Challenge[5] = "G41 Bronze Commendation\t2500\t10000\tNone"; + Challenge[6] = "G41 Silver Commendation\t5000\t25000\tNone"; + Challenge[7] = "G41 Gold Commendation\t10000\t50000\tNone"; + Challenge[8] = "G41 Titan Commendation\t25000\t75000\tNone"; + Upgrade[1] = "Grip"; + Upgrade[2] = "Laser"; + Upgrade[3] = "Silencer"; + GunName = "G41 Semi-Automatic Rifle"; + // - casing = ShellDebris; - shellExitDir = "1.0 0.3 1.0"; - shellExitOffset = "0.15 -0.56 -0.1"; - shellExitVariance = 15.0; - shellVelocity = 3.0; + RankRequire = $TWM2::RankRequire["G41"]; - 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"; - stateTransitionOnTimeout[0] = "ActivateReady"; - stateTimeoutValue[0] = 0.5; - stateSequence[0] = "Activate"; - stateSound[0] = ChaingunSwitchSound; + projectileSpread = 2.0 / 1000.0; - stateName[1] = "ActivateReady"; - stateTransitionOnLoaded[1] = "Ready"; - stateTransitionOnNoAmmo[1] = "NoAmmo"; + stateName[0] = "Activate"; + stateTransitionOnTimeout[0] = "ActivateReady"; + stateTimeoutValue[0] = 0.5; + stateSequence[0] = "Activate"; + stateSound[0] = ChaingunSwitchSound; - stateName[2] = "Ready"; - stateTransitionOnNoAmmo[2] = "NoAmmo"; - stateTransitionOnTriggerDown[2] = "CheckWet"; + stateName[1] = "ActivateReady"; + stateTransitionOnLoaded[1] = "Ready"; + stateTransitionOnNoAmmo[1] = "NoAmmo"; - stateName[3] = "Fire"; - stateTransitionOnTimeout[3] = "Reload"; - stateTimeoutValue[3] = 0.01; - stateFire[3] = true; - stateRecoil[3] = LightRecoil; - stateAllowImageChange[3] = false; - stateScript[3] = "onFire"; - stateEmitterTime[3] = 0.2; - //stateSound[3] = S3FireSound; + stateName[2] = "Ready"; + stateTransitionOnNoAmmo[2] = "NoAmmo"; + stateTransitionOnTriggerDown[2] = "CheckWet"; - stateName[4] = "Reload"; - stateTransitionOnNoAmmo[4] = "NoAmmo"; - stateTransitionOnTimeout[4] = "Ready"; - stateTimeoutValue[4] = 0.3; - stateAllowImageChange[4] = false; - stateSequence[4] = "Reload"; + stateName[3] = "Fire"; + stateTransitionOnTimeout[3] = "Reload"; + stateTimeoutValue[3] = 0.01; + stateFire[3] = true; + stateRecoil[3] = LightRecoil; + stateAllowImageChange[3] = false; + stateScript[3] = "onFire"; + stateEmitterTime[3] = 0.2; + //stateSound[3] = S3FireSound; - stateName[5] = "NoAmmo"; - stateTransitionOnAmmo[5] = "Reload"; - stateSequence[5] = "NoAmmo"; - stateTransitionOnTriggerDown[5] = "DryFire"; + stateName[4] = "Reload"; + stateTransitionOnNoAmmo[4] = "NoAmmo"; + stateTransitionOnTimeout[4] = "Ready"; + stateTimeoutValue[4] = 0.15; + stateAllowImageChange[4] = false; + stateSequence[4] = "Reload"; - stateName[6] = "DryFire"; - stateSound[6] = ChaingunDryFireSound; - stateTimeoutValue[6] = 1.0; - stateTransitionOnTimeout[6] = "NoAmmo"; + stateName[5] = "NoAmmo"; + stateTransitionOnAmmo[5] = "Reload"; + stateSequence[5] = "NoAmmo"; + stateTransitionOnTriggerDown[5] = "DryFire"; - stateName[7] = "WetFire"; - stateSound[7] = PlasmaFireWetSound; - stateTimeoutValue[7] = 1.0; - stateTransitionOnTimeout[7] = "Ready"; + stateName[6] = "DryFire"; + stateSound[6] = ChaingunDryFireSound; + stateTimeoutValue[6] = 1.0; + stateTransitionOnTimeout[6] = "NoAmmo"; - stateName[8] = "CheckWet"; - stateTransitionOnWet[8] = "WetFire"; - stateTransitionOnNotWet[8] = "Fire"; + stateName[7] = "WetFire"; + stateSound[7] = PlasmaFireWetSound; + stateTimeoutValue[7] = 1.0; + stateTransitionOnTimeout[7] = "Ready"; + + stateName[8] = "CheckWet"; + stateTransitionOnWet[8] = "WetFire"; + stateTransitionOnNotWet[8] = "Fire"; }; -datablock ItemData(G41Rifle) -{ - className = Weapon; - catagory = "Spawn Items"; - shapeFile = "weapon_sniper.dts"; - image = G41RifleImage; - mass = 1.0; - elasticity = 0.0; - friction = 0.6; - pickupRadius = 2; - pickUpName = "an G41 Semi-Automatic Rifle"; +datablock ItemData(G41Rifle) { + className = Weapon; + catagory = "Spawn Items"; + shapeFile = "weapon_sniper.dts"; + image = G41RifleImage; + mass = 1.0; + elasticity = 0.0; + friction = 0.6; + pickupRadius = 2; + pickUpName = "an G41 Semi-Automatic Rifle"; - computeCRC = true; - emap = true; + computeCRC = true; + emap = true; }; function G41RifleImage::onFire(%data, %obj, %slot) { - %p = Parent::onFire(%data, %obj, %slot); - if(%obj.client.UpgradeOn("Silencer", %data.getName())) { - //zero sound :p - } - else { - ServerPlay3d(S3FireSound, %obj.getPosition()); - } -} + %p = Parent::onFire(%data, %obj, %slot); + if(%obj.client.UpgradeOn("Silencer", %data.getName())) { + //zero sound :p + } + else { + ServerPlay3d(S3FireSound, %obj.getPosition()); + } +} \ No newline at end of file diff --git a/scripts/weapons/Rifles/M1Sniper.cs b/scripts/weapons/Rifles/M1Sniper.cs index 1cd3e0d..7a38bc5 100644 --- a/scripts/weapons/Rifles/M1Sniper.cs +++ b/scripts/weapons/Rifles/M1Sniper.cs @@ -1,227 +1,223 @@ datablock AudioProfile(M1FireSound) { - filename = "fx/weapons/cg_metal2.wav"; - description = AudioDefault3d; - preload = true; + filename = "fx/weapons/cg_metal2.wav"; + description = AudioDefault3d; + preload = true; }; -datablock TracerProjectileData(M1Bullet){ - doDynamicClientHits = true; +datablock TracerProjectileData(M1Bullet) { + doDynamicClientHits = true; - directDamage = 0.3; - directDamageType = $DamageType::M1; - explosion = "ChaingunExplosion"; - splash = ChaingunSplash; - HeadMultiplier = 1.5; - LegsMultiplier = 0.35; + directDamage = 0.65; + directDamageType = $DamageType::M1; + explosion = "ChaingunExplosion"; + splash = ChaingunSplash; + HeadMultiplier = 1.5; + LegsMultiplier = 0.35; - HeadShotKill = 1; - - ImageSource = "M1SniperRifleImage"; + HeadShotKill = 1; - kickBackStrength = 15.0; - sound = ChaingunProjectile; + ImageSource = "M1SniperRifleImage"; - dryVelocity = 3000.0; - wetVelocity = 2000.0; - velInheritFactor = 1.0; - fizzleTimeMS = 1000; - lifetimeMS = 1000; - explodeOnDeath = false; - reflectOnWaterImpactAngle = 0.0; - explodeOnWaterImpact = false; - deflectionOnWaterImpact = 0.0; - fizzleUnderwaterMS = 3000; + kickBackStrength = 15.0; + sound = ChaingunProjectile; - tracerLength = 20.0; - tracerAlpha = false; - tracerMinPixels = 6; - tracerColor = 211.0/255.0 @ " " @ 215.0/255.0 @ " " @ 120.0/255.0 @ " 0.75"; + dryVelocity = 3000.0; + 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; + tracerAlpha = false; + tracerMinPixels = 6; + tracerColor = 211.0/255.0 @ " " @ 215.0/255.0 @ " " @ 120.0/255.0 @ " 0.75"; tracerTex[0] = "special/tracer00"; tracerTex[1] = "special/tracercross"; tracerWidth = 0.09; - crossSize = 0.20; - crossViewAng = 0.990; - renderCross = true; + crossSize = 0.20; + crossViewAng = 0.990; + renderCross = true; - decalData[0] = ChaingunDecal1; - decalData[1] = ChaingunDecal2; - decalData[2] = ChaingunDecal3; - decalData[3] = ChaingunDecal4; - decalData[4] = ChaingunDecal5; - decalData[5] = ChaingunDecal6; + decalData[0] = ChaingunDecal1; + decalData[1] = ChaingunDecal2; + decalData[2] = ChaingunDecal3; + decalData[3] = ChaingunDecal4; + decalData[4] = ChaingunDecal5; + decalData[5] = ChaingunDecal6; }; -datablock ItemData(M1SniperRifleAmmo) -{ - className = Ammo; - catagory = "Ammo"; - shapeFile = "ammo_chaingun.dts"; - mass = 1; - elasticity = 0.2; - friction = 0.6; - pickupRadius = 2; +datablock ItemData(M1SniperRifleAmmo) { + className = Ammo; + catagory = "Ammo"; + shapeFile = "ammo_chaingun.dts"; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; pickUpName = "Some M1 Sniper Rifle Ammo"; - computeCRC = true; - + computeCRC = true; }; //-------------------------------------------------------------------------- // Weapon //-------------------------------------- datablock ShapeBaseImageData(M1SniperRifleImage) { + className = WeaponImage; + shapeFile = "weapon_sniper.dts"; + mass = 10; + item = M1SniperRifle; + ammo = M1SniperRifleAmmo; + projectile = M1Bullet; + projectileType = TracerProjectile; + emap = true; - className = WeaponImage; - shapeFile = "weapon_sniper.dts"; - mass = 10; - item = M1SniperRifle; - ammo = M1SniperRifleAmmo; - projectile = M1Bullet; - projectileType = TracerProjectile; - emap = true; + armThread = looksn; - 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 - 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"]; - RankRequire = $TWM2::RankRequire["M1"]; - - casing = ShellDebris; - shellExitDir = "1.0 0.3 1.0"; - shellExitOffset = "0.15 -0.56 -0.1"; - shellExitVariance = 15.0; - shellVelocity = 3.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"; - stateTransitionOnTimeout[0] = "ActivateReady"; - stateTimeoutValue[0] = 0.5; - stateSequence[0] = "Activate"; - stateSound[0] = ChaingunSwitchSound; + stateName[0] = "Activate"; + stateTransitionOnTimeout[0] = "ActivateReady"; + stateTimeoutValue[0] = 0.5; + stateSequence[0] = "Activate"; + stateSound[0] = ChaingunSwitchSound; - stateName[1] = "ActivateReady"; - stateTransitionOnLoaded[1] = "Ready"; - stateTransitionOnNoAmmo[1] = "NoAmmo"; + stateName[1] = "ActivateReady"; + stateTransitionOnLoaded[1] = "Ready"; + stateTransitionOnNoAmmo[1] = "NoAmmo"; - stateName[2] = "Ready"; - stateTransitionOnNoAmmo[2] = "NoAmmo"; - stateTransitionOnTriggerDown[2] = "CheckWet"; + stateName[2] = "Ready"; + stateTransitionOnNoAmmo[2] = "NoAmmo"; + stateTransitionOnTriggerDown[2] = "CheckWet"; - stateName[3] = "Fire"; - stateTransitionOnTimeout[3] = "Reload"; - stateTimeoutValue[3] = 0.01; - stateFire[3] = true; - stateRecoil[3] = LightRecoil; - stateAllowImageChange[3] = false; - stateScript[3] = "onFire"; - //stateSound[3] = "M1FireSound"; + stateName[3] = "Fire"; + stateTransitionOnTimeout[3] = "Reload"; + stateTimeoutValue[3] = 0.01; + stateFire[3] = true; + stateRecoil[3] = LightRecoil; + stateAllowImageChange[3] = false; + stateScript[3] = "onFire"; + //stateSound[3] = "M1FireSound"; - stateName[4] = "Reload"; - stateTransitionOnNoAmmo[4] = "NoAmmo"; - stateTransitionOnTimeout[4] = "Ready"; - stateTimeoutValue[4] = 1.1; - stateAllowImageChange[4] = false; - stateSequence[4] = "Reload"; + stateName[4] = "Reload"; + stateTransitionOnNoAmmo[4] = "NoAmmo"; + stateTransitionOnTimeout[4] = "Ready"; + stateTimeoutValue[4] = 0.9; + stateAllowImageChange[4] = false; + stateSequence[4] = "Reload"; - stateName[5] = "NoAmmo"; - stateTransitionOnAmmo[5] = "Reload"; - stateSequence[5] = "NoAmmo"; - stateTransitionOnTriggerDown[5] = "DryFire"; + stateName[5] = "NoAmmo"; + stateTransitionOnAmmo[5] = "Reload"; + stateSequence[5] = "NoAmmo"; + stateTransitionOnTriggerDown[5] = "DryFire"; - stateName[6] = "DryFire"; - stateSound[6] = ChaingunDryFireSound; - stateTimeoutValue[6] = 1.0; - stateTransitionOnTimeout[6] = "NoAmmo"; + stateName[6] = "DryFire"; + stateSound[6] = ChaingunDryFireSound; + stateTimeoutValue[6] = 1.0; + stateTransitionOnTimeout[6] = "NoAmmo"; - stateName[7] = "WetFire"; - stateSound[7] = PlasmaFireWetSound; - stateTimeoutValue[7] = 1.0; - stateTransitionOnTimeout[7] = "Ready"; + stateName[7] = "WetFire"; + stateSound[7] = PlasmaFireWetSound; + stateTimeoutValue[7] = 1.0; + stateTransitionOnTimeout[7] = "Ready"; - stateName[8] = "CheckWet"; - stateTransitionOnWet[8] = "WetFire"; - stateTransitionOnNotWet[8] = "Fire"; + stateName[8] = "CheckWet"; + stateTransitionOnWet[8] = "WetFire"; + stateTransitionOnNotWet[8] = "Fire"; }; -datablock ItemData(M1SniperRifle) -{ - className = Weapon; - catagory = "Spawn Items"; - shapeFile = "weapon_sniper.dts"; - image = M1SniperRifleImage; - mass = 1.0; - elasticity = 0.0; - friction = 0.6; - pickupRadius = 2; - pickUpName = "a M1 Sniper Rifle"; +datablock ItemData(M1SniperRifle) { + className = Weapon; + catagory = "Spawn Items"; + shapeFile = "weapon_sniper.dts"; + image = M1SniperRifleImage; + mass = 1.0; + elasticity = 0.0; + friction = 0.6; + pickupRadius = 2; + pickUpName = "a M1 Sniper Rifle"; - computeCRC = true; - emap = true; + computeCRC = true; + emap = true; }; //Two images make the scope datablock ShapeBaseImageData(M1ScopeImage) : M1SniperRifleImage { - shapeFile = "turret_belly_barrell.dts"; - offset = "0 0.25 0.25"; - rotation = "1 0 0 180"; + shapeFile = "turret_belly_barrell.dts"; + offset = "0 0.25 0.25"; + rotation = "1 0 0 180"; }; datablock ShapeBaseImageData(M1ScopeImage2) : M1SniperRifleImage { - shapeFile = "turret_belly_barrell.dts"; - offset = "0 0.3 0.25"; - rotation = "1 0 0 0"; + shapeFile = "turret_belly_barrell.dts"; + offset = "0 0.3 0.25"; + rotation = "1 0 0 0"; }; function M1SniperRifleImage::onMount(%this,%obj,%slot) { - if(!$TWM2::AllowSnipers) { - bottomPrint(%obj.client, "The host has disabled sniper weapons.", 2, 2); - %obj.throwweapon(1); - %obj.throwweapon(0); - } - Parent::onMount(%this, %obj, %slot); - %obj.mountImage(M1ScopeImage, 5); - %obj.mountImage(M1ScopeImage2, 6); + if(!$TWM2::AllowSnipers) { + bottomPrint(%obj.client, "The host has disabled sniper weapons.", 2, 2); + %obj.throwweapon(1); + %obj.throwweapon(0); + } + Parent::onMount(%this, %obj, %slot); + %obj.mountImage(M1ScopeImage, 5); + %obj.mountImage(M1ScopeImage2, 6); } function M1SniperRifleImage::onUnmount(%this,%obj,%slot) { - Parent::onUnmount(%this, %obj, %slot); - %obj.unmountImage(5); - %obj.unmountImage(6); + Parent::onUnmount(%this, %obj, %slot); + %obj.unmountImage(5); + %obj.unmountImage(6); } function M1SniperRifleImage::onFire(%data, %obj, %slot) { - if(!$TWM2::AllowSnipers) { - bottomPrint(%obj.client, "The host has disabled sniper weapons.", 2, 2); - %obj.throwweapon(1); - %obj.throwweapon(0); - } - %p = Parent::onFire(%data, %obj, %slot); - if(%obj.client.UpgradeOn("Silencer", %data.getName())) { - //zero sound :p - } - else { - ServerPlay3d(M1FireSound, %obj.getPosition()); - } -} + if(!$TWM2::AllowSnipers) { + bottomPrint(%obj.client, "The host has disabled sniper weapons.", 2, 2); + %obj.throwweapon(1); + %obj.throwweapon(0); + } + %p = Parent::onFire(%data, %obj, %slot); + if(%obj.client.UpgradeOn("Silencer", %data.getName())) { + //zero sound :p + } + else { + ServerPlay3d(M1FireSound, %obj.getPosition()); + } +} \ No newline at end of file diff --git a/scripts/weapons/Rifles/M4A1.cs b/scripts/weapons/Rifles/M4A1.cs index 9114fc1..effc83c 100644 --- a/scripts/weapons/Rifles/M4A1.cs +++ b/scripts/weapons/Rifles/M4A1.cs @@ -1,267 +1,264 @@ datablock TracerProjectileData(M4A1Bullet) { - doDynamicClientHits = true; + doDynamicClientHits = true; - directDamage = 0.09; - directDamageType = $DamageType::M4A1; - explosion = "ChaingunExplosion"; - splash = ChaingunSplash; - HeadMultiplier = 1.25; - LegsMultiplier = 0.75; + directDamage = 0.085; + directDamageType = $DamageType::M4A1; + explosion = "ChaingunExplosion"; + splash = ChaingunSplash; + HeadMultiplier = 1.25; + LegsMultiplier = 0.75; - kickBackStrength = 15.0; - sound = ChaingunProjectile; - - ImageSource = "M4A1Image"; + kickBackStrength = 15.0; + sound = ChaingunProjectile; - dryVelocity = 1750.0; - wetVelocity = 1500.0; - velInheritFactor = 0.0; - fizzleTimeMS = 3000; - lifetimeMS = 3000; - explodeOnDeath = false; - reflectOnWaterImpactAngle = 0.0; - explodeOnWaterImpact = false; - deflectionOnWaterImpact = 0.0; - fizzleUnderwaterMS = 3000; + ImageSource = "M4A1Image"; - tracerLength = 9.0; - tracerAlpha = false; - tracerMinPixels = 6; - tracerColor = 211.0/255.0 @ " " @ 215.0/255.0 @ " " @ 120.0/255.0 @ " 0.75"; + dryVelocity = 1750.0; + 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; + tracerAlpha = false; + tracerMinPixels = 6; + tracerColor = 211.0/255.0 @ " " @ 215.0/255.0 @ " " @ 120.0/255.0 @ " 0.75"; tracerTex[0] = "special/tracer00"; tracerTex[1] = "special/tracercross"; tracerWidth = 0.09; - crossSize = 0.20; - crossViewAng = 0.990; - renderCross = true; + crossSize = 0.20; + crossViewAng = 0.990; + renderCross = true; - decalData[0] = ChaingunDecal1; - decalData[1] = ChaingunDecal2; - decalData[2] = ChaingunDecal3; - decalData[3] = ChaingunDecal4; - decalData[4] = ChaingunDecal5; - decalData[5] = ChaingunDecal6; + decalData[0] = ChaingunDecal1; + decalData[1] = ChaingunDecal2; + decalData[2] = ChaingunDecal3; + decalData[3] = ChaingunDecal4; + decalData[4] = ChaingunDecal5; + decalData[5] = ChaingunDecal6; }; //-------------------------------------------------------------------------- // Ammo //-------------------------------------- -datablock ItemData(M4A1Ammo) -{ - className = Ammo; - catagory = "Ammo"; - shapeFile = "ammo_chaingun.dts"; - mass = 1; - elasticity = 0.2; - friction = 0.6; - pickupRadius = 2; +datablock ItemData(M4A1Ammo) { + className = Ammo; + catagory = "Ammo"; + shapeFile = "ammo_chaingun.dts"; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; pickUpName = "some M4A1 ammo"; - computeCRC = true; + computeCRC = true; }; //-------------------------------------------------------------------------- // Weapon //-------------------------------------- -datablock ShapeBaseImageData(M4A1Image) -{ - className = WeaponImage; - shapeFile = "weapon_energy_vehicle.dts"; - item = M4A1; - ammo = M4A1Ammo; - projectile = M4A1Bullet; - projectileType = TracerProjectile; - emap = true; - offset = "0 0.5 0"; // L/R - F/B - T/B - rotation = "0 1 0 180"; - mass = 11; - - //ClipStuff - ClipName = "M4A1Clip"; - ClipPickupName["M4A1Clip"] = "some M4A1 Magazines"; - ShowsClipInHud = 1; - ClipReloadTime = 4; - ClipReturn = 30; - InitialClips = 7; - // - HasChallenges = 1; - ChallengeCt = 11; - Challenge[1] = "M4A1 Killer\t50\t100\tGrip"; - Challenge[2] = "M4A1 Hunter\t100\t250\tLaser"; - Challenge[3] = "M4A1 Expert\t250\t500\tShotgun Attachment"; - Challenge[4] = "M4A1 Master\t500\t1000\tGrenade Launcher Attachment"; - Challenge[5] = "M4A1 Legend\t750\t1500\tMini-Launcher Attachment"; - Challenge[6] = "M4A1 God\t1000\t2000\tSilencer"; - Challenge[7] = "M4A1 Supremacy\t2500\t5000\tUnlimited Attachment Ammo"; - Challenge[8] = "M4A1 Bronze Commendation\t5000\t10000\tNone"; - Challenge[9] = "M4A1 Silver Commendation\t12500\t25000\tNone"; - Challenge[10] = "M4A1 Gold Commendation\t25000\t50000\tNone"; - Challenge[11] = "M4A1 Titan Commendation\t50000\t75000\tNone"; - Upgrade[1] = "Grip"; - Upgrade[2] = "Laser"; - Upgrade[3] = "Shotgun Attachment"; - Upgrade[4] = "Grenade Launcher Attachment"; - Upgrade[5] = "Mini-Launcher Attachment"; - Upgrade[6] = "Silencer"; - GunName = "M4A1 Assault Rifle"; - - RankRequire = $TWM2::RankRequire["M4A1"]; +datablock ShapeBaseImageData(M4A1Image) { + className = WeaponImage; + shapeFile = "weapon_energy_vehicle.dts"; + item = M4A1; + ammo = M4A1Ammo; + projectile = M4A1Bullet; + projectileType = TracerProjectile; + emap = true; + offset = "0 0.5 0"; // L/R - F/B - T/B + rotation = "0 1 0 180"; + mass = 11; + + //ClipStuff + ClipName = "M4A1Clip"; + ClipPickupName["M4A1Clip"] = "some M4A1 Magazines"; + ShowsClipInHud = 1; + ClipReloadTime = 6; + ClipReturn = 30; + InitialClips = 7; + // + HasChallenges = 1; + ChallengeCt = 11; + Challenge[1] = "M4A1 Killer\t50\t100\tGrip"; + Challenge[2] = "M4A1 Hunter\t100\t250\tLaser"; + Challenge[3] = "M4A1 Expert\t250\t500\tShotgun Attachment"; + Challenge[4] = "M4A1 Master\t500\t1000\tGrenade Launcher Attachment"; + Challenge[5] = "M4A1 Legend\t750\t1500\tMini-Launcher Attachment"; + Challenge[6] = "M4A1 God\t1000\t2000\tSilencer"; + Challenge[7] = "M4A1 Supremacy\t2500\t5000\tUnlimited Attachment Ammo"; + Challenge[8] = "M4A1 Bronze Commendation\t5000\t10000\tNone"; + Challenge[9] = "M4A1 Silver Commendation\t12500\t25000\tNone"; + Challenge[10] = "M4A1 Gold Commendation\t25000\t50000\tNone"; + Challenge[11] = "M4A1 Titan Commendation\t50000\t75000\tNone"; + Upgrade[1] = "Grip"; + Upgrade[2] = "Laser"; + Upgrade[3] = "Shotgun Attachment"; + Upgrade[4] = "Grenade Launcher Attachment"; + Upgrade[5] = "Mini-Launcher Attachment"; + Upgrade[6] = "Silencer"; + GunName = "M4A1 Assault Rifle"; + + RankRequire = $TWM2::RankRequire["M4A1"]; - casing = ShellDebris; - shellExitDir = "1.0 0.3 1.0"; - shellExitOffset = "0.15 -0.56 -0.1"; - shellExitVariance = 15.0; - shellVelocity = 3.0; + casing = ShellDebris; + shellExitDir = "1.0 0.3 1.0"; + shellExitOffset = "0.15 -0.56 -0.1"; + shellExitVariance = 15.0; + shellVelocity = 3.0; - projectileSpread = 8.0 / 1000.0; + projectileSpread = 8.0 / 1000.0; - //-------------------------------------- - stateName[0] = "Activate"; - stateSequence[0] = "Activate"; - stateSound[0] = ChaingunSwitchSound; - stateAllowImageChange[0] = false; - // - stateTimeoutValue[0] = 0.5; - stateTransitionOnTimeout[0] = "Ready"; - stateTransitionOnNoAmmo[0] = "NoAmmo"; + //-------------------------------------- + stateName[0] = "Activate"; + stateSequence[0] = "Activate"; + stateSound[0] = ChaingunSwitchSound; + stateAllowImageChange[0] = false; + // + stateTimeoutValue[0] = 0.5; + stateTransitionOnTimeout[0] = "Ready"; + stateTransitionOnNoAmmo[0] = "NoAmmo"; - //-------------------------------------- - stateName[1] = "Ready"; - stateSpinThread[1] = Stop; - // - stateTransitionOnTriggerDown[1] = "Spinup"; - stateTransitionOnNoAmmo[1] = "NoAmmo"; + //-------------------------------------- + stateName[1] = "Ready"; + stateSpinThread[1] = Stop; + // + stateTransitionOnTriggerDown[1] = "Spinup"; + stateTransitionOnNoAmmo[1] = "NoAmmo"; - //-------------------------------------- - stateName[2] = "NoAmmo"; - stateTransitionOnAmmo[2] = "Ready"; - stateSpinThread[2] = Stop; - stateTransitionOnTriggerDown[2] = "DryFire"; + //-------------------------------------- + stateName[2] = "NoAmmo"; + stateTransitionOnAmmo[2] = "Ready"; + stateSpinThread[2] = Stop; + stateTransitionOnTriggerDown[2] = "DryFire"; - //-------------------------------------- - stateName[3] = "Spinup"; - stateSpinThread[3] = SpinUp; - stateSound[3] = ChaingunSpinupSound; - // - stateTimeoutValue[3] = 0.01; - stateWaitForTimeout[3] = false; - stateTransitionOnTimeout[3] = "Fire"; - stateTransitionOnTriggerUp[3] = "Spindown"; + //-------------------------------------- + stateName[3] = "Spinup"; + stateSpinThread[3] = SpinUp; + stateSound[3] = ChaingunSpinupSound; + // + stateTimeoutValue[3] = 0.01; + stateWaitForTimeout[3] = false; + stateTransitionOnTimeout[3] = "Fire"; + stateTransitionOnTriggerUp[3] = "Spindown"; - //-------------------------------------- - stateName[4] = "Fire"; - stateSequence[4] = "Fire"; - stateSequenceRandomFlash[4] = true; - stateSpinThread[4] = FullSpeed; - //stateSound[4] = ChaingunFireSound; - stateRecoil[4] = LightRecoil; - stateAllowImageChange[4] = false; - stateScript[4] = "onFire"; - stateFire[4] = true; - stateEjectShell[4] = true; - // - stateTimeoutValue[4] = 0.08; - stateTransitionOnTimeout[4] = "Fire"; - stateTransitionOnTriggerUp[4] = "Spindown"; - stateTransitionOnNoAmmo[4] = "EmptySpindown"; + //-------------------------------------- + stateName[4] = "Fire"; + stateSequence[4] = "Fire"; + stateSequenceRandomFlash[4] = true; + stateSpinThread[4] = FullSpeed; + //stateSound[4] = ChaingunFireSound; + stateRecoil[4] = LightRecoil; + stateAllowImageChange[4] = false; + stateScript[4] = "onFire"; + stateFire[4] = true; + stateEjectShell[4] = true; + // + stateTimeoutValue[4] = 0.08; + stateTransitionOnTimeout[4] = "Fire"; + stateTransitionOnTriggerUp[4] = "Spindown"; + stateTransitionOnNoAmmo[4] = "EmptySpindown"; - //-------------------------------------- - stateName[5] = "Spindown"; - stateSound[5] = ChaingunSpinDownSound; - stateSpinThread[5] = SpinDown; - // - stateTimeoutValue[5] = 0.05; - stateWaitForTimeout[5] = true; - stateTransitionOnTimeout[5] = "Ready"; - stateTransitionOnTriggerDown[5] = "Spinup"; + //-------------------------------------- + stateName[5] = "Spindown"; + stateSound[5] = ChaingunSpinDownSound; + stateSpinThread[5] = SpinDown; + // + stateTimeoutValue[5] = 0.05; + stateWaitForTimeout[5] = true; + stateTransitionOnTimeout[5] = "Ready"; + stateTransitionOnTriggerDown[5] = "Spinup"; - //-------------------------------------- - stateName[6] = "EmptySpindown"; - stateSound[6] = ChaingunSpinDownSound; - stateSpinThread[6] = SpinDown; - // - stateTimeoutValue[6] = 0.5; - stateTransitionOnTimeout[6] = "NoAmmo"; + //-------------------------------------- + stateName[6] = "EmptySpindown"; + stateSound[6] = ChaingunSpinDownSound; + stateSpinThread[6] = SpinDown; + // + stateTimeoutValue[6] = 0.5; + stateTransitionOnTimeout[6] = "NoAmmo"; - //-------------------------------------- - stateName[7] = "DryFire"; - stateSound[7] = ChaingunDryFireSound; - stateTimeoutValue[7] = 0.5; - stateTransitionOnTimeout[7] = "NoAmmo"; + //-------------------------------------- + stateName[7] = "DryFire"; + stateSound[7] = ChaingunDryFireSound; + stateTimeoutValue[7] = 0.5; + stateTransitionOnTimeout[7] = "NoAmmo"; }; -datablock ItemData(M4A1) -{ - className = Weapon; - catagory = "Spawn Items"; - shapeFile = "weapon_energy_vehicle.dts"; - image = M4A1Image; - mass = 1.0; - elasticity = 0.2; - friction = 0.6; - pickupRadius = 2; - pickUpName = "an M4A1"; +datablock ItemData(M4A1) { + className = Weapon; + catagory = "Spawn Items"; + shapeFile = "weapon_energy_vehicle.dts"; + image = M4A1Image; + mass = 1.0; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; + pickUpName = "an M4A1"; - computeCRC = true; - emap = true; + computeCRC = true; + emap = true; }; function M4A1::onInventory(%this,%obj,%amount) { - Parent::onInventory(%this, %obj, %amount); - %obj.canUseM4A1Attachment = 1; - if(%obj.client.UpgradeOn("Shotgun Attachment", M4A1Image)) { - %obj.M4A1ShotgunClip = 5; - } - if(%obj.client.UpgradeOn("Grenade Launcher Attachment", M4A1Image)) { - %obj.M4A1GLClip = 3; - } - if(%obj.client.UpgradeOn("Mini-Launcher Attachment", M4A1Image)) { - %obj.M4A1MLClip = 3; - } + Parent::onInventory(%this, %obj, %amount); + %obj.canUseM4A1Attachment = 1; + if(%obj.client.UpgradeOn("Shotgun Attachment", M4A1Image)) { + %obj.M4A1ShotgunClip = 5; + } + if(%obj.client.UpgradeOn("Grenade Launcher Attachment", M4A1Image)) { + %obj.M4A1GLClip = 3; + } + if(%obj.client.UpgradeOn("Mini-Launcher Attachment", M4A1Image)) { + %obj.M4A1MLClip = 3; + } } datablock ShapeBaseImageData(M4A1BarrelImage) { - ammo = M4A1Ammo; - shapeFile = "weapon_targeting.dts"; - offset = "0.0 0.0 0.0"; - emap = true; + ammo = M4A1Ammo; + shapeFile = "weapon_targeting.dts"; + offset = "0.0 0.0 0.0"; + emap = true; }; datablock ShapeBaseImageData(M4A1ScopeImage) { - className = WeaponImage; - shapeFile = "weapon_targeting.dts"; - offset = "0.0 1.4 0.4"; - rotation = "180 0 0 90"; + className = WeaponImage; + shapeFile = "weapon_targeting.dts"; + offset = "0.0 1.4 0.4"; + rotation = "180 0 0 90"; - ammo = M4A1Ammo; + ammo = M4A1Ammo; - emap = true; + emap = true; }; function M4A1Image::onMount(%this,%obj,%slot) { - Parent::onMount(%this, %obj, %slot); - %obj.mountImage(M4A1BarrelImage, 3); - %obj.mountImage(M4A1ScopeImage, 4); + Parent::onMount(%this, %obj, %slot); + %obj.mountImage(M4A1BarrelImage, 3); + %obj.mountImage(M4A1ScopeImage, 4); } function M4A1Image::onUnmount(%this,%obj,%slot) { - Parent::onUnmount(%this, %obj, %slot); - %obj.unmountImage(3); - %obj.unmountImage(4); + Parent::onUnmount(%this, %obj, %slot); + %obj.unmountImage(3); + %obj.unmountImage(4); } function M4A1Image::onFire(%data, %obj, %slot) { - %p = Parent::onFire(%data, %obj, %slot); - if(%obj.client.UpgradeOn("Silencer", %data.getName())) { - //zero sound :p - } - else { - ServerPlay3d(ChaingunFireSound, %obj.getPosition()); - } + %p = Parent::onFire(%data, %obj, %slot); + if(%obj.client.UpgradeOn("Silencer", %data.getName())) { + //zero sound :p + } + else { + ServerPlay3d(ChaingunFireSound, %obj.getPosition()); + } } function M4A1RefreshAttachment(%obj) { - %obj.canUseM4A1Attachment = 1; -} + %obj.canUseM4A1Attachment = 1; +} \ No newline at end of file diff --git a/scripts/weapons/Rifles/PulseRifle.cs b/scripts/weapons/Rifles/PulseRifle.cs index 966fd4f..05988ba 100644 --- a/scripts/weapons/Rifles/PulseRifle.cs +++ b/scripts/weapons/Rifles/PulseRifle.cs @@ -1,176 +1,171 @@ datablock TracerProjectileData(PulseRifleBullet) { - doDynamicClientHits = true; + doDynamicClientHits = true; - directDamage = 0.2; - explosion = "BlasterExplosion"; - splash = ChaingunSplash; + directDamage = 0.38; + explosion = "BlasterExplosion"; + splash = ChaingunSplash; - directDamageType = $DamageType::ShrikeBlaster; - kickBackStrength = 0.0; + directDamageType = $DamageType::ShrikeBlaster; + kickBackStrength = 0.0; - sound = ShrikeBlasterProjectileSound; - - ImageSource = "PulseRifleImage"; + sound = ShrikeBlasterProjectileSound; - dryVelocity = 425.0; - wetVelocity = 100.0; - velInheritFactor = 1.0; - fizzleTimeMS = 1000; - lifetimeMS = 1000; - explodeOnDeath = false; - reflectOnWaterImpactAngle = 0.0; - explodeOnWaterImpact = false; - deflectionOnWaterImpact = 0.0; - fizzleUnderwaterMS = 3000; + ImageSource = "PulseRifleImage"; - tracerLength = 45.0; - tracerAlpha = false; - tracerMinPixels = 6; - tracerColor = "1.0 0.0 0.0 0.0"; + dryVelocity = 425.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[1] = "special/shrikeBoltCross"; tracerWidth = 0.55; - crossSize = 0.99; - crossViewAng = 0.990; - renderCross = true; - + crossSize = 0.99; + crossViewAng = 0.990; + renderCross = true; }; -datablock ItemData(PulseRifleAmmo) -{ - className = Ammo; - catagory = "Ammo"; - shapeFile = "ammo_chaingun.dts"; - mass = 1; - elasticity = 0.2; - friction = 0.6; - pickupRadius = 2; +datablock ItemData(PulseRifleAmmo) { + className = Ammo; + catagory = "Ammo"; + shapeFile = "ammo_chaingun.dts"; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; pickUpName = "Some Pulse Rifle Bullets"; - computeCRC = true; - + computeCRC = true; }; -datablock ShapeBaseImageData(PulseRifleImage) -{ - className = WeaponImage; - shapeFile = "weapon_sniper.dts"; - mass = 10; - item = PulseRifle; - ammo = PulseRifleAmmo; - projectile = PulseRifleBullet; - projectileType = TracerProjectile; - emap = true; +datablock ShapeBaseImageData(PulseRifleImage) { + className = WeaponImage; + shapeFile = "weapon_sniper.dts"; + mass = 10; + item = PulseRifle; + ammo = PulseRifleAmmo; + projectile = PulseRifleBullet; + projectileType = TracerProjectile; + emap = true; - //ClipStuff - ClipName = "PulseRifleClip"; - ClipPickupName["PulseRifleClip"] = "some Pulse Clip Cartons"; - ShowsClipInHud = 1; - ClipReloadTime = 5; - ClipReturn = 20; - InitialClips = 7; - // - //Challenges - HasChallenges = 1; - ChallengeCt = 8; - Challenge[1] = "Pulse Hunter\t75\t150\tNone"; - Challenge[2] = "Pulse Expert\t150\t250\tGrip"; - Challenge[3] = "Pulse Master\t350\t500\tLaser"; - Challenge[4] = "Pulse God\t600\t1000\tSilencer"; - Challenge[5] = "Pulse Bronze Commendation\t2500\t10000\tNone"; - Challenge[6] = "Pulse Silver Commendation\t5000\t25000\tNone"; - Challenge[7] = "Pulse Gold Commendation\t10000\t50000\tNone"; - Challenge[8] = "Pulse Titan Commendation\t25000\t75000\tNone"; - Upgrade[1] = "Grip"; - Upgrade[2] = "Laser"; - Upgrade[3] = "Silencer"; - GunName = "Pulse Semi-Automatic Rifle"; - // + //ClipStuff + ClipName = "PulseRifleClip"; + ClipPickupName["PulseRifleClip"] = "some Pulse Clip Cartons"; + ShowsClipInHud = 1; + ClipReloadTime = 5; + ClipReturn = 20; + InitialClips = 7; + // + //Challenges + HasChallenges = 1; + ChallengeCt = 8; + Challenge[1] = "Pulse Hunter\t75\t150\tNone"; + Challenge[2] = "Pulse Expert\t150\t250\tGrip"; + Challenge[3] = "Pulse Master\t350\t500\tLaser"; + Challenge[4] = "Pulse God\t600\t1000\tSilencer"; + Challenge[5] = "Pulse Bronze Commendation\t2500\t10000\tNone"; + Challenge[6] = "Pulse Silver Commendation\t5000\t25000\tNone"; + Challenge[7] = "Pulse Gold Commendation\t10000\t50000\tNone"; + Challenge[8] = "Pulse Titan Commendation\t25000\t75000\tNone"; + Upgrade[1] = "Grip"; + Upgrade[2] = "Laser"; + Upgrade[3] = "Silencer"; + GunName = "Pulse Semi-Automatic Rifle"; + // - //RankRequire = $TWM2::RankRequire["G41"]; - PrestigeRequire = 2; + //RankRequire = $TWM2::RankRequire["G41"]; + PrestigeRequire = 2; - casing = ShellDebris; - shellExitDir = "1.0 0.3 1.0"; - shellExitOffset = "0.15 -0.56 -0.1"; - shellExitVariance = 15.0; - shellVelocity = 3.0; + casing = ShellDebris; + shellExitDir = "1.0 0.3 1.0"; + shellExitOffset = "0.15 -0.56 -0.1"; + shellExitVariance = 15.0; + shellVelocity = 3.0; - projectileSpread = 2.0 / 1000.0; + projectileSpread = 2.0 / 1000.0; - stateName[0] = "Activate"; - stateTransitionOnTimeout[0] = "ActivateReady"; - stateTimeoutValue[0] = 0.5; - stateSequence[0] = "Activate"; - stateSound[0] = ChaingunSwitchSound; + stateName[0] = "Activate"; + stateTransitionOnTimeout[0] = "ActivateReady"; + stateTimeoutValue[0] = 0.5; + stateSequence[0] = "Activate"; + stateSound[0] = ChaingunSwitchSound; - stateName[1] = "ActivateReady"; - stateTransitionOnLoaded[1] = "Ready"; - stateTransitionOnNoAmmo[1] = "NoAmmo"; + stateName[1] = "ActivateReady"; + stateTransitionOnLoaded[1] = "Ready"; + stateTransitionOnNoAmmo[1] = "NoAmmo"; - stateName[2] = "Ready"; - stateTransitionOnNoAmmo[2] = "NoAmmo"; - stateTransitionOnTriggerDown[2] = "CheckWet"; + stateName[2] = "Ready"; + stateTransitionOnNoAmmo[2] = "NoAmmo"; + stateTransitionOnTriggerDown[2] = "CheckWet"; - stateName[3] = "Fire"; - stateTransitionOnTimeout[3] = "Reload"; - stateTimeoutValue[3] = 0.01; - stateFire[3] = true; - stateRecoil[3] = LightRecoil; - stateAllowImageChange[3] = false; - stateScript[3] = "onFire"; - stateEmitterTime[3] = 0.2; - //stateSound[3] = S3FireSound; + stateName[3] = "Fire"; + stateTransitionOnTimeout[3] = "Reload"; + stateTimeoutValue[3] = 0.01; + stateFire[3] = true; + stateRecoil[3] = LightRecoil; + stateAllowImageChange[3] = false; + stateScript[3] = "onFire"; + stateEmitterTime[3] = 0.2; + //stateSound[3] = S3FireSound; - stateName[4] = "Reload"; - stateTransitionOnNoAmmo[4] = "NoAmmo"; - stateTransitionOnTimeout[4] = "Ready"; - stateTimeoutValue[4] = 0.3; - stateAllowImageChange[4] = false; - stateSequence[4] = "Reload"; + stateName[4] = "Reload"; + stateTransitionOnNoAmmo[4] = "NoAmmo"; + stateTransitionOnTimeout[4] = "Ready"; + stateTimeoutValue[4] = 0.1; + stateAllowImageChange[4] = false; + stateSequence[4] = "Reload"; - stateName[5] = "NoAmmo"; - stateTransitionOnAmmo[5] = "Reload"; - stateSequence[5] = "NoAmmo"; - stateTransitionOnTriggerDown[5] = "DryFire"; + stateName[5] = "NoAmmo"; + stateTransitionOnAmmo[5] = "Reload"; + stateSequence[5] = "NoAmmo"; + stateTransitionOnTriggerDown[5] = "DryFire"; - stateName[6] = "DryFire"; - stateSound[6] = ChaingunDryFireSound; - stateTimeoutValue[6] = 1.0; - stateTransitionOnTimeout[6] = "NoAmmo"; + stateName[6] = "DryFire"; + stateSound[6] = ChaingunDryFireSound; + stateTimeoutValue[6] = 1.0; + stateTransitionOnTimeout[6] = "NoAmmo"; - stateName[7] = "WetFire"; - stateSound[7] = PlasmaFireWetSound; - stateTimeoutValue[7] = 1.0; - stateTransitionOnTimeout[7] = "Ready"; + stateName[7] = "WetFire"; + stateSound[7] = PlasmaFireWetSound; + stateTimeoutValue[7] = 1.0; + stateTransitionOnTimeout[7] = "Ready"; - stateName[8] = "CheckWet"; - stateTransitionOnWet[8] = "WetFire"; - stateTransitionOnNotWet[8] = "Fire"; + stateName[8] = "CheckWet"; + stateTransitionOnWet[8] = "WetFire"; + stateTransitionOnNotWet[8] = "Fire"; }; -datablock ItemData(PulseRifle) -{ - className = Weapon; - catagory = "Spawn Items"; - shapeFile = "weapon_sniper.dts"; - image = PulseRifleImage; - mass = 1.0; - elasticity = 0.0; - friction = 0.6; - pickupRadius = 2; - pickUpName = "an Pulse Semi-Automatic Rifle"; +datablock ItemData(PulseRifle) { + className = Weapon; + catagory = "Spawn Items"; + shapeFile = "weapon_sniper.dts"; + image = PulseRifleImage; + mass = 1.0; + elasticity = 0.0; + friction = 0.6; + pickupRadius = 2; + pickUpName = "an Pulse Semi-Automatic Rifle"; - computeCRC = true; - emap = true; + computeCRC = true; + emap = true; }; function PulseRifleImage::onFire(%data, %obj, %slot) { - %p = Parent::onFire(%data, %obj, %slot); - if(%obj.client.UpgradeOn("Silencer", %data.getName())) { - //zero sound :p - } - else { - ServerPlay3d(S3FireSound, %obj.getPosition()); - } -} + %p = Parent::onFire(%data, %obj, %slot); + if(%obj.client.UpgradeOn("Silencer", %data.getName())) { + //zero sound :p + } + else { + ServerPlay3d(S3FireSound, %obj.getPosition()); + } +} \ No newline at end of file diff --git a/scripts/weapons/Rifles/R700Sniper.cs b/scripts/weapons/Rifles/R700Sniper.cs index 757444c..913e634 100644 --- a/scripts/weapons/Rifles/R700Sniper.cs +++ b/scripts/weapons/Rifles/R700Sniper.cs @@ -1,111 +1,90 @@ datablock AudioProfile(R700FireSound) { - filename = "fx/weapons/cg_metal3.wav"; - description = AudioDefault3d; - preload = true; + filename = "fx/weapons/cg_metal3.wav"; + description = AudioDefault3d; + preload = true; }; -datablock ParticleData(R700SmokeParticle) -{ - dragCoeffiecient = 0.0; - gravityCoefficient = -0.02; - inheritedVelFactor = 0.1; +datablock ParticleData(R700SmokeParticle) { + dragCoeffiecient = 0.0; + gravityCoefficient = -0.02; + inheritedVelFactor = 0.1; - lifetimeMS = 1200; - lifetimeVarianceMS = 100; + lifetimeMS = 1200; + lifetimeVarianceMS = 100; - textureName = "particleTest"; + textureName = "particleTest"; - useInvAlpha = false; - spinRandomMin = -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; + useInvAlpha = false; + spinRandomMin = -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; }; -datablock ParticleEmitterData(R700SmokeEmitter) -{ - ejectionPeriodMS = 10; - periodVarianceMS = 0; +datablock ParticleEmitterData(R700SmokeEmitter) { + ejectionPeriodMS = 10; + periodVarianceMS = 0; - ejectionVelocity = 1.5; - velocityVariance = 0.3; + ejectionVelocity = 1.5; + velocityVariance = 0.3; - thetaMin = 0.0; - thetaMax = 50.0; + thetaMin = 0.0; + thetaMax = 50.0; - particles = "R700SmokeParticle"; + particles = "R700SmokeParticle"; }; -datablock LinearFlareProjectileData(R700Bullet) -{ - projectileShapeName = "weapon_missile_projectile.dts"; - scale = "1.0 1.0 1.0"; - faceViewer = true; - directDamage = 0.62; - kickBackStrength = 6400; - radiusDamageType = $DamageType::R700; - - HeadMultiplier = 1.5; - LegsMultiplier = 0.35; +datablock GrenadeProjectileData(R700Bullet) { + projectileShapeName = "weapon_missile_projectile.dts"; + emitterDelay = -1; + directDamage = 0.62; + hasDamageRadius = false; + directDamageType = $DamageType::R700; + kickBackStrength = 6400; + bubbleEmitTime = 1.0; - HeadShotKill = 1; + HeadMultiplier = 1.5; + LegsMultiplier = 0.35; - ImageSource = "R700SniperRifleImage"; + HeadShotKill = 1; - explosion = "ChaingunExplosion"; - splash = ChaingunSplash; + ImageSource = "R700SniperRifleImage"; - baseEmitter = R700SmokeEmitter; + sound = ChaingunProjectile; + explosion = "ChaingunExplosion"; + underwaterExplosion = "ChaingunExplosion"; + velInheritFactor = 0.5; + splash = ChaingunSplash; - dryVelocity = 2000.0; - wetVelocity = 2000.0; - velInheritFactor = 1.0; - fizzleTimeMS = 1000; - lifetimeMS = 1000; - explodeOnDeath = false; - reflectOnWaterImpactAngle = 0.0; - explodeOnWaterImpact = false; - deflectionOnWaterImpact = 0.0; - fizzleUnderwaterMS = 3000; + baseEmitter = R700SmokeEmitter; + bubbleEmitter = R700SmokeEmitter; - //activateDelayMS = 100; - activateDelayMS = -1; - - size[0] = 0.2; - size[1] = 0.5; - 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"; + grenadeElasticity = 0.35; + grenadeFriction = 0.2; + armingDelayMS = 1; + muzzleVelocity = 2000.00; + drag = 0.1; }; -datablock ItemData(R700SniperRifleAmmo) -{ - className = Ammo; - catagory = "Ammo"; - shapeFile = "ammo_chaingun.dts"; - mass = 1; - elasticity = 0.2; - friction = 0.6; - pickupRadius = 2; +datablock ItemData(R700SniperRifleAmmo) { + className = Ammo; + catagory = "Ammo"; + shapeFile = "ammo_chaingun.dts"; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; pickUpName = "Some R700 Sniper Rifle Ammo"; - computeCRC = true; + computeCRC = true; }; @@ -113,156 +92,154 @@ datablock ItemData(R700SniperRifleAmmo) // Weapon //-------------------------------------- datablock ShapeBaseImageData(R700SniperRifleImage) { + className = WeaponImage; + shapeFile = "weapon_sniper.dts"; + mass = 10; + item = R700SniperRifle; + ammo = R700SniperRifleAmmo; + projectile = R700Bullet; + projectileType = GrenadeProjectile; + emap = true; - className = WeaponImage; - shapeFile = "weapon_sniper.dts"; - mass = 10; - item = R700SniperRifle; - ammo = R700SniperRifleAmmo; - projectile = R700Bullet; - projectileType = LinearFlareProjectile; - emap = true; - - armThread = looksn; + armThread = looksn; - //ClipStuff - ClipName = "R700Clip"; - ClipPickupName["R700Clip"] = "A Few Boxes Of R700 Sniper Bullets"; - ShowsClipInHud = 1; - ClipReloadTime = 7; - ClipReturn = 4; - InitialClips = 6; - // - //Challenges - HasChallenges = 1; - ChallengeCt = 8; - Challenge[1] = "R700 Hunter\t100\t150\tNone"; - Challenge[2] = "R700 Expert\t200\t250\tNone"; - Challenge[3] = "R700 Master\t500\t500\tLaser"; - Challenge[4] = "R700 God\t1000\t1000\tSilencer"; - Challenge[5] = "R700 Bronze Commendation\t2500\t10000\tNone"; - Challenge[6] = "R700 Silver Commendation\t5000\t25000\tNone"; - Challenge[7] = "R700 Gold Commendation\t10000\t50000\tNone"; - Challenge[8] = "R700 Titan Commendation\t25000\t75000\tNone"; - Upgrade[1] = "Laser"; - Upgrade[2] = "Silencer"; - GunName = "R700 Sniper Rifle"; - // + //ClipStuff + ClipName = "R700Clip"; + ClipPickupName["R700Clip"] = "A Few Boxes Of R700 Sniper Bullets"; + ShowsClipInHud = 1; + ClipReloadTime = 7; + ClipReturn = 4; + InitialClips = 6; + // + //Challenges + HasChallenges = 1; + ChallengeCt = 8; + Challenge[1] = "R700 Hunter\t100\t150\tNone"; + Challenge[2] = "R700 Expert\t200\t250\tNone"; + Challenge[3] = "R700 Master\t500\t500\tLaser"; + Challenge[4] = "R700 God\t1000\t1000\tSilencer"; + Challenge[5] = "R700 Bronze Commendation\t2500\t10000\tNone"; + Challenge[6] = "R700 Silver Commendation\t5000\t25000\tNone"; + Challenge[7] = "R700 Gold Commendation\t10000\t50000\tNone"; + Challenge[8] = "R700 Titan Commendation\t25000\t75000\tNone"; + Upgrade[1] = "Laser"; + Upgrade[2] = "Silencer"; + GunName = "R700 Sniper Rifle"; + // - RankRequire = $TWM2::RankRequire["R700"]; + RankRequire = $TWM2::RankRequire["R700"]; - casing = ShellDebris; - shellExitDir = "1.0 0.3 1.0"; - shellExitOffset = "0.15 -0.56 -0.1"; - shellExitVariance = 15.0; - shellVelocity = 3.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"; - stateTransitionOnTimeout[0] = "ActivateReady"; - stateTimeoutValue[0] = 0.5; - stateSequence[0] = "Activate"; - stateSound[0] = ChaingunSwitchSound; + stateName[0] = "Activate"; + stateTransitionOnTimeout[0] = "ActivateReady"; + stateTimeoutValue[0] = 0.5; + stateSequence[0] = "Activate"; + stateSound[0] = ChaingunSwitchSound; - stateName[1] = "ActivateReady"; - stateTransitionOnLoaded[1] = "Ready"; - stateTransitionOnNoAmmo[1] = "NoAmmo"; + stateName[1] = "ActivateReady"; + stateTransitionOnLoaded[1] = "Ready"; + stateTransitionOnNoAmmo[1] = "NoAmmo"; - stateName[2] = "Ready"; - stateTransitionOnNoAmmo[2] = "NoAmmo"; - stateTransitionOnTriggerDown[2] = "CheckWet"; + stateName[2] = "Ready"; + stateTransitionOnNoAmmo[2] = "NoAmmo"; + stateTransitionOnTriggerDown[2] = "CheckWet"; - stateName[3] = "Fire"; - stateTransitionOnTimeout[3] = "Reload"; - stateTimeoutValue[3] = 0.01; - stateFire[3] = true; - stateRecoil[3] = LightRecoil; - stateAllowImageChange[3] = false; - stateScript[3] = "onFire"; - //stateSound[3] = "R700FireSound"; + stateName[3] = "Fire"; + stateTransitionOnTimeout[3] = "Reload"; + stateTimeoutValue[3] = 0.01; + stateFire[3] = true; + stateRecoil[3] = LightRecoil; + stateAllowImageChange[3] = false; + stateScript[3] = "onFire"; + //stateSound[3] = "R700FireSound"; - stateName[4] = "Reload"; - stateTransitionOnNoAmmo[4] = "NoAmmo"; - stateTransitionOnTimeout[4] = "Ready"; - stateTimeoutValue[4] = 1.2; - stateAllowImageChange[4] = false; - stateSequence[4] = "Reload"; + stateName[4] = "Reload"; + stateTransitionOnNoAmmo[4] = "NoAmmo"; + stateTransitionOnTimeout[4] = "Ready"; + stateTimeoutValue[4] = 1.2; + stateAllowImageChange[4] = false; + stateSequence[4] = "Reload"; - stateName[5] = "NoAmmo"; - stateTransitionOnAmmo[5] = "Reload"; - stateSequence[5] = "NoAmmo"; - stateTransitionOnTriggerDown[5] = "DryFire"; + stateName[5] = "NoAmmo"; + stateTransitionOnAmmo[5] = "Reload"; + stateSequence[5] = "NoAmmo"; + stateTransitionOnTriggerDown[5] = "DryFire"; - stateName[6] = "DryFire"; - stateSound[6] = ChaingunDryFireSound; - stateTimeoutValue[6] = 1.0; - stateTransitionOnTimeout[6] = "NoAmmo"; + stateName[6] = "DryFire"; + stateSound[6] = ChaingunDryFireSound; + stateTimeoutValue[6] = 1.0; + stateTransitionOnTimeout[6] = "NoAmmo"; - stateName[7] = "WetFire"; - stateSound[7] = PlasmaFireWetSound; - stateTimeoutValue[7] = 1.0; - stateTransitionOnTimeout[7] = "Ready"; + stateName[7] = "WetFire"; + stateSound[7] = PlasmaFireWetSound; + stateTimeoutValue[7] = 1.0; + stateTransitionOnTimeout[7] = "Ready"; - stateName[8] = "CheckWet"; - stateTransitionOnWet[8] = "WetFire"; - stateTransitionOnNotWet[8] = "Fire"; + stateName[8] = "CheckWet"; + stateTransitionOnWet[8] = "WetFire"; + stateTransitionOnNotWet[8] = "Fire"; }; -datablock ItemData(R700SniperRifle) -{ - className = Weapon; - catagory = "Spawn Items"; - shapeFile = "weapon_sniper.dts"; - image = R700SniperRifleImage; - mass = 1.0; - elasticity = 0.0; - friction = 0.6; - pickupRadius = 2; - pickUpName = "a R700 Sniper Rifle"; +datablock ItemData(R700SniperRifle) { + className = Weapon; + catagory = "Spawn Items"; + shapeFile = "weapon_sniper.dts"; + image = R700SniperRifleImage; + mass = 1.0; + elasticity = 0.0; + friction = 0.6; + pickupRadius = 2; + pickUpName = "a R700 Sniper Rifle"; - computeCRC = true; - emap = true; + computeCRC = true; + emap = true; }; datablock ShapeBaseImageData(R700ScopeImage) { - className = WeaponImage; - shapeFile = "weapon_targeting.dts"; - offset = "0.0 1.0 0.4"; - rotation = "180 0 0 90"; - - ammo = R700SniperRifleAmmo; - armThread = looksn; - - emap = true; + className = WeaponImage; + shapeFile = "weapon_targeting.dts"; + offset = "0.0 1.0 0.4"; + rotation = "180 0 0 90"; + + ammo = R700SniperRifleAmmo; + armThread = looksn; + + emap = true; }; function R700SniperRifleImage::onMount(%this,%obj,%slot) { - if(!$TWM2::AllowSnipers) { - bottomPrint(%obj.client, "The host has disabled sniper weapons.", 2, 2); - %obj.throwweapon(1); - %obj.throwweapon(0); - } - Parent::onMount(%this, %obj, %slot); - %obj.mountImage(R700ScopeImage, 5); + if(!$TWM2::AllowSnipers) { + bottomPrint(%obj.client, "The host has disabled sniper weapons.", 2, 2); + %obj.throwweapon(1); + %obj.throwweapon(0); + } + Parent::onMount(%this, %obj, %slot); + %obj.mountImage(R700ScopeImage, 5); } function R700SniperRifleImage::onUnmount(%this,%obj,%slot) { - Parent::onUnmount(%this, %obj, %slot); - %obj.unmountImage(5); + Parent::onUnmount(%this, %obj, %slot); + %obj.unmountImage(5); } function R700SniperRifleImage::onFire(%data, %obj, %slot) { - if(!$TWM2::AllowSnipers) { - bottomPrint(%obj.client, "The host has disabled sniper weapons.", 2, 2); - %obj.throwweapon(1); - %obj.throwweapon(0); - } - %p = Parent::onFire(%data, %obj, %slot); - if(%obj.client.UpgradeOn("Silencer", %data.getName())) { - //zero sound :p - } - else { - ServerPlay3d(R700FireSound, %obj.getPosition()); - } -} + if(!$TWM2::AllowSnipers) { + bottomPrint(%obj.client, "The host has disabled sniper weapons.", 2, 2); + %obj.throwweapon(1); + %obj.throwweapon(0); + } + %p = Parent::onFire(%data, %obj, %slot); + if(%obj.client.UpgradeOn("Silencer", %data.getName())) { + //zero sound :p + } + else { + ServerPlay3d(R700FireSound, %obj.getPosition()); + } +} \ No newline at end of file diff --git a/scripts/weapons/Rifles/RSALaserRifle.cs b/scripts/weapons/Rifles/RSALaserRifle.cs index 8063528..174f8a3 100644 --- a/scripts/weapons/Rifles/RSALaserRifle.cs +++ b/scripts/weapons/Rifles/RSALaserRifle.cs @@ -1,248 +1,238 @@ -datablock AudioProfile(LaserRifleFireSound) -{ - filename = "fx/weapons/sniper_fire.wav"; - description = AudioClose3d; - preload = true; +datablock AudioProfile(LaserRifleFireSound) { + filename = "fx/weapons/sniper_fire.wav"; + description = AudioClose3d; + preload = true; }; -datablock ParticleData(RedFlareParticle) -{ - dragCoeffiecient = 0.0; - gravityCoefficient = 0.15; - inheritedVelFactor = 0.5; +datablock ParticleData(RedFlareParticle) { + dragCoeffiecient = 0.0; + gravityCoefficient = 0.15; + inheritedVelFactor = 0.5; - lifetimeMS = 1800; - lifetimeVarianceMS = 200; + lifetimeMS = 1800; + lifetimeVarianceMS = 200; - textureName = "special/flareSpark"; + textureName = "special/flareSpark"; - colors[0] = "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[0] = "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"; - sizes[0] = 0.6; - sizes[1] = 0.3; - sizes[2] = 0.1; - - times[0] = 0.0; - times[1] = 0.5; - times[2] = 1.0; + sizes[0] = 0.6; + sizes[1] = 0.3; + sizes[2] = 0.1; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; }; -datablock ParticleEmitterData(RedFlareemmiter) -{ - ejectionPeriodMS = 10; - periodVarianceMS = 0; +datablock ParticleEmitterData(RedFlareemmiter){ + ejectionPeriodMS = 10; + periodVarianceMS = 0; - ejectionVelocity = 1.0; - velocityVariance = 0.0; + ejectionVelocity = 1.0; + velocityVariance = 0.0; - thetaMin = 0.0; - thetaMax = 90.0; + thetaMin = 0.0; + thetaMax = 90.0; - orientParticles = true; - orientOnVelocity = false; + orientParticles = true; + orientOnVelocity = false; - particles = "RedFlareParticle"; + particles = "RedFlareParticle"; }; -datablock LinearFlareProjectileData(LaserShot) -{ - scale = "1.0 1.0 1.0"; - faceViewer = false; - directDamage = 0.6; - kickBackStrength = 100.0; - directDamageType = $DamageType::LaserRifle; +datablock LinearFlareProjectileData(LaserShot) { + scale = "1.0 1.0 1.0"; + faceViewer = false; + directDamage = 0.6; + kickBackStrength = 100.0; + directDamageType = $DamageType::LaserRifle; - explosion = "BlasterExplosion"; - splash = PlasmaSplash; + explosion = "BlasterExplosion"; + splash = PlasmaSplash; - ImageSource = "lasergunImage"; + ImageSource = "lasergunImage"; - dryVelocity = 200.0; - wetVelocity = 10; - velInheritFactor = 0.5; - fizzleTimeMS = 30000; - lifetimeMS = 30000; - explodeOnDeath = false; - reflectOnWaterImpactAngle = 0.0; - explodeOnWaterImpact = true; - deflectionOnWaterImpact = 0.0; - fizzleUnderwaterMS = -1; + dryVelocity = 200.0; + wetVelocity = 10; + velInheritFactor = 0.5; + fizzleTimeMS = 30000; + lifetimeMS = 30000; + explodeOnDeath = false; + reflectOnWaterImpactAngle = 0.0; + explodeOnWaterImpact = true; + deflectionOnWaterImpact = 0.0; + fizzleUnderwaterMS = -1; - baseEmitter = RedFlareemmiter; - delayEmitter = RedFlareemmiter; - bubbleEmitter = RedFlareemmiter; + baseEmitter = RedFlareemmiter; + delayEmitter = RedFlareemmiter; + bubbleEmitter = RedFlareemmiter; - //activateDelayMS = 100; - activateDelayMS = -1; + //activateDelayMS = 100; + activateDelayMS = -1; - size[0] = 0.2; - size[1] = 0.2; - size[2] = 0.2; + size[0] = 0.2; + size[1] = 0.2; + size[2] = 0.2; - numFlares = 15; - flareColor = "1 0 0"; - flareModTexture = "flaremod"; - flareBaseTexture = "flarebase"; + numFlares = 15; + flareColor = "1 0 0"; + flareModTexture = "flaremod"; + flareBaseTexture = "flarebase"; - sound = MissileProjectileSound; - fireSound = PlasmaFireSound; - wetFireSound = PlasmaFireWetSound; - - hasLight = true; - lightRadius = 3.0; - lightColor = "1 0 0"; + sound = MissileProjectileSound; + fireSound = PlasmaFireSound; + wetFireSound = PlasmaFireWetSound; + hasLight = true; + lightRadius = 3.0; + lightColor = "1 0 0"; }; //-------------------------------------------------------------------------- // Ammo //-------------------------------------- -datablock ItemData(lasergunAmmo) -{ - className = Ammo; - catagory = "Ammo"; - shapeFile = "ammo_chaingun.dts"; - mass = 1; - elasticity = 0.2; - friction = 0.6; - pickupRadius = 2; +datablock ItemData(lasergunAmmo){ + className = Ammo; + catagory = "Ammo"; + shapeFile = "ammo_chaingun.dts"; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; pickUpName = "some laser rifle ammo"; - computeCRC = true; - + computeCRC = true; }; //-------------------------------------------------------------------------- // Weapon //-------------------------------------- -datablock ShapeBaseImageData(lasergunImage) -{ - className = WeaponImage; - shapeFile = "weapon_sniper.dts"; - item = lasergun; - ammo = lasergunAmmo; - projectile = LaserShot; - projectileType = LinearFlareProjectile; - emap = true; +datablock ShapeBaseImageData(lasergunImage) { + className = WeaponImage; + shapeFile = "weapon_sniper.dts"; + item = lasergun; + ammo = lasergunAmmo; + projectile = LaserShot; + projectileType = LinearFlareProjectile; + emap = true; armThread = looksn; - mass = 10; + mass = 10; - casing = ShellDebris; - shellExitDir = "1.0 0.3 1.0"; - shellExitOffset = "0.15 -0.56 -0.1"; - shellExitVariance = 15.0; - shellVelocity = 3.0; + casing = ShellDebris; + shellExitDir = "1.0 0.3 1.0"; + shellExitOffset = "0.15 -0.56 -0.1"; + shellExitVariance = 15.0; + shellVelocity = 3.0; - //ClipStuff - ClipName = "lasergunClip"; - ClipPickupName["lasergunClip"] = "A Photonic Laser Battery"; - ShowsClipInHud = 1; - ClipReloadTime = 6; - ClipReturn = 10; - InitialClips = 5; - // - //Challenges - HasChallenges = 1; - ChallengeCt = 8; - Challenge[1] = "Laser Rifle Blaster\t100\t250\tNone"; - Challenge[2] = "Laser Rifle Expert\t250\t500\tGrip"; - Challenge[3] = "Laser Rifle Master\t750\t1000\tLaser"; - Challenge[4] = "Laser Rifle God\t1500\t2000\tSilencer"; - Challenge[5] = "Laser Rifle Bronze Commendation\t5000\t10000\tNone"; - Challenge[6] = "Laser Rifle Silver Commendation\t10000\t25000\tNone"; - Challenge[7] = "Laser Rifle Gold Commendation\t25000\t50000\tNone"; - Challenge[8] = "Laser Rifle Titan Commendation\t50000\t75000\tNone"; - Upgrade[1] = "Grip"; - Upgrade[2] = "Laser"; - Upgrade[3] = "Silencer"; - GunName = "RSA Laser Rifle"; - // + //ClipStuff + ClipName = "lasergunClip"; + ClipPickupName["lasergunClip"] = "A Photonic Laser Battery"; + ShowsClipInHud = 1; + ClipReloadTime = 6; + ClipReturn = 10; + InitialClips = 5; + // + //Challenges + HasChallenges = 1; + ChallengeCt = 8; + Challenge[1] = "Laser Rifle Blaster\t100\t250\tNone"; + Challenge[2] = "Laser Rifle Expert\t250\t500\tGrip"; + Challenge[3] = "Laser Rifle Master\t750\t1000\tLaser"; + Challenge[4] = "Laser Rifle God\t1500\t2000\tSilencer"; + Challenge[5] = "Laser Rifle Bronze Commendation\t5000\t10000\tNone"; + Challenge[6] = "Laser Rifle Silver Commendation\t10000\t25000\tNone"; + Challenge[7] = "Laser Rifle Gold Commendation\t25000\t50000\tNone"; + Challenge[8] = "Laser Rifle Titan Commendation\t50000\t75000\tNone"; + Upgrade[1] = "Grip"; + Upgrade[2] = "Laser"; + Upgrade[3] = "Silencer"; + 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"; - stateTransitionOnTimeout[0] = "ActivateReady"; - stateTimeoutValue[0] = 0.5; - stateSequence[0] = "Activate"; - stateSound[0] = ChaingunSwitchSound; + stateName[0] = "Activate"; + stateTransitionOnTimeout[0] = "ActivateReady"; + stateTimeoutValue[0] = 0.5; + stateSequence[0] = "Activate"; + stateSound[0] = ChaingunSwitchSound; - stateName[1] = "ActivateReady"; - stateTransitionOnLoaded[1] = "Ready"; - stateTransitionOnNoAmmo[1] = "NoAmmo"; + stateName[1] = "ActivateReady"; + stateTransitionOnLoaded[1] = "Ready"; + stateTransitionOnNoAmmo[1] = "NoAmmo"; - stateName[2] = "Ready"; - stateTransitionOnNoAmmo[2] = "NoAmmo"; - stateTransitionOnTriggerDown[2] = "CheckWet"; + stateName[2] = "Ready"; + stateTransitionOnNoAmmo[2] = "NoAmmo"; + stateTransitionOnTriggerDown[2] = "CheckWet"; - stateName[3] = "Fire"; - stateTransitionOnTimeout[3] = "Reload"; - stateTimeoutValue[3] = 0.0001; - stateFire[3] = true; - stateEmitter[3] = "GunFireEffectEmitter"; - stateEmitterNode[3] = "muzzlepoint1"; - stateEmitterTime[3] = 1; - stateRecoil[3] = LightRecoil; - stateAllowImageChange[3] = false; - stateScript[3] = "onFire"; - stateEmitterTime[3] = 0.1; - //stateSound[3] = LaserRifleFireSound; + stateName[3] = "Fire"; + stateTransitionOnTimeout[3] = "Reload"; + stateTimeoutValue[3] = 0.0001; + stateFire[3] = true; + stateEmitter[3] = "GunFireEffectEmitter"; + stateEmitterNode[3] = "muzzlepoint1"; + stateEmitterTime[3] = 1; + stateRecoil[3] = LightRecoil; + stateAllowImageChange[3] = false; + stateScript[3] = "onFire"; + stateEmitterTime[3] = 0.1; + //stateSound[3] = LaserRifleFireSound; - stateName[4] = "Reload"; - stateTransitionOnNoAmmo[4] = "NoAmmo"; - stateTransitionOnTimeout[4] = "Ready"; - stateTimeoutValue[4] = 0.7; - stateAllowImageChange[4] = false; - stateSequence[4] = "Reload"; + stateName[4] = "Reload"; + stateTransitionOnNoAmmo[4] = "NoAmmo"; + stateTransitionOnTimeout[4] = "Ready"; + stateTimeoutValue[4] = 0.7; + stateAllowImageChange[4] = false; + stateSequence[4] = "Reload"; - stateName[5] = "NoAmmo"; - stateTransitionOnAmmo[5] = "Reload"; - stateSequence[5] = "NoAmmo"; - stateTransitionOnTriggerDown[5] = "DryFire"; + stateName[5] = "NoAmmo"; + stateTransitionOnAmmo[5] = "Reload"; + stateSequence[5] = "NoAmmo"; + stateTransitionOnTriggerDown[5] = "DryFire"; - stateName[6] = "DryFire"; - stateSound[6] = ChaingunDryFireSound; - stateTimeoutValue[6] = 0.2; - stateTransitionOnTimeout[6] = "NoAmmo"; + stateName[6] = "DryFire"; + stateSound[6] = ChaingunDryFireSound; + stateTimeoutValue[6] = 0.2; + stateTransitionOnTimeout[6] = "NoAmmo"; - stateName[7] = "WetFire"; - stateSound[7] = ChaingunDryFireSound; - stateTimeoutValue[7] = 0.2; - stateTransitionOnTimeout[7] = "Ready"; + stateName[7] = "WetFire"; + stateSound[7] = ChaingunDryFireSound; + stateTimeoutValue[7] = 0.2; + stateTransitionOnTimeout[7] = "Ready"; - stateName[8] = "CheckWet"; - stateTransitionOnWet[8] = "WetFire"; - stateTransitionOnNotWet[8] = "Fire"; + stateName[8] = "CheckWet"; + stateTransitionOnWet[8] = "WetFire"; + stateTransitionOnNotWet[8] = "Fire"; }; -datablock ItemData(lasergun) -{ - className = Weapon; - catagory = "Spawn Items"; - shapeFile = "weapon_chaingun.dts"; - image = lasergunImage; - mass = 1.0; - elasticity = 0.2; - friction = 0.6; - pickupRadius = 2; - pickUpName = "a Laser Rifle"; +datablock ItemData(lasergun) { + className = Weapon; + catagory = "Spawn Items"; + shapeFile = "weapon_chaingun.dts"; + image = lasergunImage; + mass = 1.0; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; + pickUpName = "a UR-22 Laser Rifle"; - computeCRC = true; - emap = true; + computeCRC = true; + emap = true; }; function lasergunImage::onFire(%data, %obj, %slot) { - %p = Parent::onFire(%data, %obj, %slot); - if(%obj.client.UpgradeOn("Silencer", %data.getName())) { - //zero sound :p - } - else { - ServerPlay3d(LaserRifleFireSound, %obj.getPosition()); - } -} + %p = Parent::onFire(%data, %obj, %slot); + if(%obj.client.UpgradeOn("Silencer", %data.getName())) { + //zero sound :p + } + else { + ServerPlay3d(LaserRifleFireSound, %obj.getPosition()); + } +} \ No newline at end of file diff --git a/scripts/weapons/Rifles/S3.cs b/scripts/weapons/Rifles/S3.cs index d00a6cb..9205ca4 100644 --- a/scripts/weapons/Rifles/S3.cs +++ b/scripts/weapons/Rifles/S3.cs @@ -1,225 +1,217 @@ -datablock AudioProfile(S3FireSound) -{ - filename = "fx/vehicles/tank_chaingun.wav"; - description = AudioDefault3d; - preload = true; +datablock AudioProfile(S3FireSound) { + filename = "fx/vehicles/tank_chaingun.wav"; + description = AudioDefault3d; + preload = true; }; -datablock TracerProjectileData(S3Bullet) -{ - doDynamicClientHits = true; +datablock TracerProjectileData(S3Bullet) { + doDynamicClientHits = true; - directDamage = 0.7; - directDamageType = $DamageType::S3; - explosion = "ChaingunExplosion"; - splash = ChaingunSplash; - HeadMultiplier = 1.5; - LegsMultiplier = 0.35; + directDamage = 0.5; + directDamageType = $DamageType::S3; + explosion = "ChaingunExplosion"; + splash = ChaingunSplash; + HeadMultiplier = 1.5; + LegsMultiplier = 0.35; - HeadShotKill = 1; + HeadShotKill = 1; - kickBackStrength = 15.0; - sound = ChaingunProjectile; + kickBackStrength = 15.0; + sound = ChaingunProjectile; - dryVelocity = 3000.0; - wetVelocity = 2000.0; - velInheritFactor = 1.0; - fizzleTimeMS = 1000; - lifetimeMS = 1000; - explodeOnDeath = false; - reflectOnWaterImpactAngle = 0.0; - explodeOnWaterImpact = false; - deflectionOnWaterImpact = 0.0; - fizzleUnderwaterMS = 3000; - - ImageSource = "S3RifleImage"; + dryVelocity = 3000.0; + 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; - tracerAlpha = false; - tracerMinPixels = 6; - tracerColor = 211.0/255.0 @ " " @ 215.0/255.0 @ " " @ 120.0/255.0 @ " 0.75"; + ImageSource = "S3RifleImage"; + + 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[1] = "special/tracercross"; tracerWidth = 0.09; - crossSize = 0.20; - crossViewAng = 0.990; - renderCross = true; + crossSize = 0.20; + crossViewAng = 0.990; + renderCross = true; - decalData[0] = ChaingunDecal1; - decalData[1] = ChaingunDecal2; - decalData[2] = ChaingunDecal3; - decalData[3] = ChaingunDecal4; - decalData[4] = ChaingunDecal5; - decalData[5] = ChaingunDecal6; + decalData[0] = ChaingunDecal1; + decalData[1] = ChaingunDecal2; + decalData[2] = ChaingunDecal3; + decalData[3] = ChaingunDecal4; + decalData[4] = ChaingunDecal5; + decalData[5] = ChaingunDecal6; }; -datablock ItemData(S3RifleAmmo) -{ - className = Ammo; - catagory = "Ammo"; - shapeFile = "ammo_chaingun.dts"; - mass = 1; - elasticity = 0.2; - friction = 0.6; - pickupRadius = 2; +datablock ItemData(S3RifleAmmo) { + className = Ammo; + catagory = "Ammo"; + shapeFile = "ammo_chaingun.dts"; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; pickUpName = "Some S3 Rifle Bullets"; - computeCRC = true; - + computeCRC = true; }; -datablock ShapeBaseImageData(S3RifleImage) -{ - className = WeaponImage; - shapeFile = "weapon_sniper.dts"; - mass = 10; - item = S3Rifle; - ammo = S3RifleAmmo; - projectile = S3Bullet; - projectileType = TracerProjectile; - 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"; - // +datablock ShapeBaseImageData(S3RifleImage) { + className = WeaponImage; + shapeFile = "weapon_sniper.dts"; + mass = 10; + item = S3Rifle; + ammo = S3RifleAmmo; + projectile = S3Bullet; + projectileType = TracerProjectile; + emap = true; - casing = ShellDebris; - shellExitDir = "1.0 0.3 1.0"; - shellExitOffset = "0.15 -0.56 -0.1"; - shellExitVariance = 15.0; - shellVelocity = 3.0; + //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"; + // - 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"; - stateTransitionOnTimeout[0] = "ActivateReady"; - stateTimeoutValue[0] = 0.5; - stateSequence[0] = "Activate"; - stateSound[0] = ChaingunSwitchSound; + projectileSpread = 2.5 / 1000.0; - stateName[1] = "ActivateReady"; - stateTransitionOnLoaded[1] = "Ready"; - stateTransitionOnNoAmmo[1] = "NoAmmo"; + stateName[0] = "Activate"; + stateTransitionOnTimeout[0] = "ActivateReady"; + stateTimeoutValue[0] = 0.5; + stateSequence[0] = "Activate"; + stateSound[0] = ChaingunSwitchSound; - stateName[2] = "Ready"; - stateTransitionOnNoAmmo[2] = "NoAmmo"; - stateTransitionOnTriggerDown[2] = "CheckWet"; + stateName[1] = "ActivateReady"; + stateTransitionOnLoaded[1] = "Ready"; + stateTransitionOnNoAmmo[1] = "NoAmmo"; - stateName[3] = "Fire"; - stateTransitionOnTimeout[3] = "Reload"; - stateTimeoutValue[3] = 0.01; - stateFire[3] = true; - stateRecoil[3] = LightRecoil; - stateAllowImageChange[3] = false; - stateScript[3] = "onFire"; - stateEmitterTime[3] = 0.2; - //stateSound[3] = S3FireSound; + stateName[2] = "Ready"; + stateTransitionOnNoAmmo[2] = "NoAmmo"; + stateTransitionOnTriggerDown[2] = "CheckWet"; - stateName[4] = "Reload"; - stateTransitionOnNoAmmo[4] = "NoAmmo"; - stateTransitionOnTimeout[4] = "Ready"; - stateTimeoutValue[4] = 0.9; - stateAllowImageChange[4] = false; - stateSequence[4] = "Reload"; + stateName[3] = "Fire"; + stateTransitionOnTimeout[3] = "Reload"; + stateTimeoutValue[3] = 0.01; + stateFire[3] = true; + stateRecoil[3] = LightRecoil; + stateAllowImageChange[3] = false; + stateScript[3] = "onFire"; + stateEmitterTime[3] = 0.01; + //stateSound[3] = S3FireSound; - stateName[5] = "NoAmmo"; - stateTransitionOnAmmo[5] = "Reload"; - stateSequence[5] = "NoAmmo"; - stateTransitionOnTriggerDown[5] = "DryFire"; + stateName[4] = "Reload"; + stateTransitionOnNoAmmo[4] = "NoAmmo"; + stateTransitionOnTimeout[4] = "Ready"; + stateTimeoutValue[4] = 0.4; + stateAllowImageChange[4] = false; + stateSequence[4] = "Reload"; - stateName[6] = "DryFire"; - stateSound[6] = ChaingunDryFireSound; - stateTimeoutValue[6] = 1.0; - stateTransitionOnTimeout[6] = "NoAmmo"; + stateName[5] = "NoAmmo"; + stateTransitionOnAmmo[5] = "Reload"; + stateSequence[5] = "NoAmmo"; + stateTransitionOnTriggerDown[5] = "DryFire"; - stateName[7] = "WetFire"; - stateSound[7] = PlasmaFireWetSound; - stateTimeoutValue[7] = 1.0; - stateTransitionOnTimeout[7] = "Ready"; + stateName[6] = "DryFire"; + stateSound[6] = ChaingunDryFireSound; + stateTimeoutValue[6] = 1.0; + stateTransitionOnTimeout[6] = "NoAmmo"; - stateName[8] = "CheckWet"; - stateTransitionOnWet[8] = "WetFire"; - stateTransitionOnNotWet[8] = "Fire"; + stateName[7] = "WetFire"; + stateSound[7] = PlasmaFireWetSound; + stateTimeoutValue[7] = 1.0; + stateTransitionOnTimeout[7] = "Ready"; + + stateName[8] = "CheckWet"; + stateTransitionOnWet[8] = "WetFire"; + stateTransitionOnNotWet[8] = "Fire"; }; -datablock ItemData(S3Rifle) -{ - className = Weapon; - catagory = "Spawn Items"; - shapeFile = "weapon_sniper.dts"; - image = S3RifleImage; - mass = 1.0; - elasticity = 0.0; - friction = 0.6; - pickupRadius = 2; - pickUpName = "an S3 Combat Rifle"; +datablock ItemData(S3Rifle) { + className = Weapon; + catagory = "Spawn Items"; + shapeFile = "weapon_sniper.dts"; + image = S3RifleImage; + mass = 1.0; + elasticity = 0.0; + friction = 0.6; + pickupRadius = 2; + pickUpName = "an S3 Combat Rifle"; - computeCRC = true; - emap = true; + computeCRC = true; + emap = true; }; function S3RifleImage::OnFire(%data, %obj, %slot) { - if(%obj.client.UpgradeOn("Burst Clip", %data.getName())) { - - %spread = %data.projectileSpread; - if(%obj.client !$= "") { - if(%obj.client.IsActivePerk("Advanced Grip")) { - %spread = %spread / 2.5; - } - } - - %vec2 = %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); - %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); + if(%obj.client.UpgradeOn("Burst Clip", %data.getName())) { + %spread = %data.projectileSpread; + if(%obj.client !$= "") { + if(%obj.client.IsActivePerk("Advanced Grip")) { + %spread = %spread / 2.5; + } + } + %vec2 = %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); + %vector2 = MatrixMulVector(%mat, %vec2); - %p2 = Schedule(100, 0, "spawnprojectile", %data.Projectile, %data.ProjectileType, vectorAdd(%obj.getPosition(), "-.45 0 1.4"), %vector2, %obj); - %p2.WeaponImageSource = "S3RifleImage"; - schedule(100, 0, "ServerPlay3D", "S3FireSound", %obj.getPosition()); + %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); - %p3 = Schedule(250, 0, "spawnprojectile", %data.Projectile, %data.ProjectileType, vectorAdd(%obj.getPosition(), "-.45 0 1.4"), %vector3, %obj); - %p3.WeaponImageSource = "S3RifleImage"; - schedule(250, 0, "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()); - } + %p1 = Parent::OnFire(%data, %obj, %slot); + + %p2 = Schedule(100, 0, "spawnprojectile", %data.Projectile, %data.ProjectileType, vectorAdd(%obj.getPosition(), "-.45 0 1.4"), %vector2, %obj); + %p2.WeaponImageSource = "S3RifleImage"; + schedule(100, 0, "ServerPlay3D", "S3FireSound", %obj.getPosition()); + + %p3 = Schedule(250, 0, "spawnprojectile", %data.Projectile, %data.ProjectileType, vectorAdd(%obj.getPosition(), "-.45 0 1.4"), %vector3, %obj); + %p3.WeaponImageSource = "S3RifleImage"; + schedule(250, 0, "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()); + } } diff --git a/scripts/weapons/Rifles/S3S.cs b/scripts/weapons/Rifles/S3S.cs index 962cc76..4d85654 100644 --- a/scripts/weapons/Rifles/S3S.cs +++ b/scripts/weapons/Rifles/S3S.cs @@ -1,176 +1,172 @@ datablock TracerProjectileData(S3SBullet) { - doDynamicClientHits = true; + doDynamicClientHits = true; - directDamage = 0.45; - directDamageType = $DamageType::S3; - explosion = "ChaingunExplosion"; - splash = ChaingunSplash; - HeadMultiplier = 1.5; - LegsMultiplier = 0.35; + directDamage = 0.45; + directDamageType = $DamageType::S3; + explosion = "ChaingunExplosion"; + splash = ChaingunSplash; + HeadMultiplier = 1.5; + LegsMultiplier = 0.35; - HeadShotKill = 1; + HeadShotKill = 1; - kickBackStrength = 15.0; - sound = ChaingunProjectile; - - ImageSource = "S3SRifleImage"; + kickBackStrength = 15.0; + sound = ChaingunProjectile; - dryVelocity = 3000.0; - wetVelocity = 2000.0; - velInheritFactor = 1.0; - fizzleTimeMS = 1000; - lifetimeMS = 1000; - explodeOnDeath = false; - reflectOnWaterImpactAngle = 0.0; - explodeOnWaterImpact = false; - deflectionOnWaterImpact = 0.0; - fizzleUnderwaterMS = 3000; + ImageSource = "S3SRifleImage"; - tracerLength = 20.0; - tracerAlpha = false; - tracerMinPixels = 6; - tracerColor = 211.0/255.0 @ " " @ 215.0/255.0 @ " " @ 120.0/255.0 @ " 0.75"; + dryVelocity = 3000.0; + 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; + tracerAlpha = false; + tracerMinPixels = 6; + tracerColor = 211.0/255.0 @ " " @ 215.0/255.0 @ " " @ 120.0/255.0 @ " 0.75"; tracerTex[0] = "special/tracer00"; tracerTex[1] = "special/tracercross"; tracerWidth = 0.09; - crossSize = 0.20; - crossViewAng = 0.990; - renderCross = true; + crossSize = 0.20; + crossViewAng = 0.990; + renderCross = true; - decalData[0] = ChaingunDecal1; - decalData[1] = ChaingunDecal2; - decalData[2] = ChaingunDecal3; - decalData[3] = ChaingunDecal4; - decalData[4] = ChaingunDecal5; - decalData[5] = ChaingunDecal6; + decalData[0] = ChaingunDecal1; + decalData[1] = ChaingunDecal2; + decalData[2] = ChaingunDecal3; + decalData[3] = ChaingunDecal4; + decalData[4] = ChaingunDecal5; + decalData[5] = ChaingunDecal6; }; -datablock ItemData(S3SRifleAmmo) -{ - className = Ammo; - catagory = "Ammo"; - shapeFile = "ammo_chaingun.dts"; - mass = 1; - elasticity = 0.2; - friction = 0.6; - pickupRadius = 2; +datablock ItemData(S3SRifleAmmo) { + className = Ammo; + catagory = "Ammo"; + shapeFile = "ammo_chaingun.dts"; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; pickUpName = "Some S3S Rifle Bullets"; - computeCRC = true; - + computeCRC = true; }; -datablock ShapeBaseImageData(S3SRifleImage) -{ - className = WeaponImage; - shapeFile = "weapon_sniper.dts"; - mass = 10; - item = S3SRifle; - ammo = S3SRifleAmmo; - projectile = S3SBullet; - projectileType = TracerProjectile; - emap = true; - - //ClipStuff - ClipName = "S3SRifleClip"; - ClipPickupName["S3SRifleClip"] = "some S3S Clip Cartridges"; - ShowsClipInHud = 1; - ClipReloadTime = 4; - ClipReturn = 30; - InitialClips = 6; - // +datablock ShapeBaseImageData(S3SRifleImage) { + className = WeaponImage; + shapeFile = "weapon_sniper.dts"; + mass = 10; + item = S3SRifle; + ammo = S3SRifleAmmo; + projectile = S3SBullet; + projectileType = TracerProjectile; + emap = true; - casing = ShellDebris; - shellExitDir = "1.0 0.3 1.0"; - shellExitOffset = "0.15 -0.56 -0.1"; - shellExitVariance = 15.0; - shellVelocity = 3.0; + //ClipStuff + ClipName = "S3SRifleClip"; + ClipPickupName["S3SRifleClip"] = "some S3S Clip Cartridges"; + ShowsClipInHud = 1; + 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"; - stateTransitionOnTimeout[0] = "ActivateReady"; - stateTimeoutValue[0] = 0.5; - stateSequence[0] = "Activate"; - stateSound[0] = ChaingunSwitchSound; + projectileSpread = 2.0 / 1000.0; - stateName[1] = "ActivateReady"; - stateTransitionOnLoaded[1] = "Ready"; - stateTransitionOnNoAmmo[1] = "NoAmmo"; + stateName[0] = "Activate"; + stateTransitionOnTimeout[0] = "ActivateReady"; + stateTimeoutValue[0] = 0.5; + stateSequence[0] = "Activate"; + stateSound[0] = ChaingunSwitchSound; - stateName[2] = "Ready"; - stateTransitionOnNoAmmo[2] = "NoAmmo"; - stateTransitionOnTriggerDown[2] = "CheckWet"; + stateName[1] = "ActivateReady"; + stateTransitionOnLoaded[1] = "Ready"; + stateTransitionOnNoAmmo[1] = "NoAmmo"; - stateName[3] = "Fire"; - stateTransitionOnTimeout[3] = "Fire2"; - stateTimeoutValue[3] = 0.04; - 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[2] = "Ready"; + stateTransitionOnNoAmmo[2] = "NoAmmo"; + stateTransitionOnTriggerDown[2] = "CheckWet"; - stateName[5] = "Fire3"; - stateTransitionOnTimeout[5] = "Reload"; - stateTimeoutValue[5] = 0.04; - stateFire[5] = true; - stateRecoil[5] = LightRecoil; - stateAllowImageChange[5] = false; - stateScript[5] = "onFire"; - stateEmitterTime[5] = 0.2; - stateSound[5] = S3FireSound; + stateName[3] = "Fire"; + stateTransitionOnTimeout[3] = "Fire2"; + stateTimeoutValue[3] = 0.04; + stateFire[3] = true; + stateRecoil[3] = LightRecoil; + stateAllowImageChange[3] = false; + stateScript[3] = "onFire"; + stateEmitterTime[3] = 0.2; + stateSound[3] = S3FireSound; - stateName[6] = "Reload"; - stateTransitionOnNoAmmo[6] = "NoAmmo"; - stateTransitionOnTimeout[6] = "Ready"; - stateTimeoutValue[6] = 0.9; - stateAllowImageChange[6] = false; - stateSequence[6] = "Reload"; + 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[7] = "NoAmmo"; - stateTransitionOnAmmo[7] = "Reload"; - stateSequence[7] = "NoAmmo"; - stateTransitionOnTriggerDown[7] = "DryFire"; + stateName[5] = "Fire3"; + stateTransitionOnTimeout[5] = "Reload"; + stateTimeoutValue[5] = 0.04; + stateFire[5] = true; + stateRecoil[5] = LightRecoil; + stateAllowImageChange[5] = false; + stateScript[5] = "onFire"; + stateEmitterTime[5] = 0.2; + stateSound[5] = S3FireSound; - stateName[8] = "DryFire"; - stateSound[8] = ChaingunDryFireSound; - stateTimeoutValue[8] = 1.0; - stateTransitionOnTimeout[8] = "NoAmmo"; + stateName[6] = "Reload"; + stateTransitionOnNoAmmo[6] = "NoAmmo"; + stateTransitionOnTimeout[6] = "Ready"; + stateTimeoutValue[6] = 0.9; + stateAllowImageChange[6] = false; + stateSequence[6] = "Reload"; - stateName[9] = "WetFire"; - stateSound[9] = PlasmaFireWetSound; - stateTimeoutValue[9] = 1.0; - stateTransitionOnTimeout[9] = "Ready"; + stateName[7] = "NoAmmo"; + stateTransitionOnAmmo[7] = "Reload"; + stateSequence[7] = "NoAmmo"; + stateTransitionOnTriggerDown[7] = "DryFire"; - stateName[10] = "CheckWet"; - stateTransitionOnWet[10] = "WetFire"; - stateTransitionOnNotWet[10] = "Fire"; + stateName[8] = "DryFire"; + stateSound[8] = ChaingunDryFireSound; + 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) -{ - className = Weapon; - catagory = "Spawn Items"; - shapeFile = "weapon_sniper.dts"; - image = S3SRifleImage; - mass = 1.0; - elasticity = 0.0; - friction = 0.6; - pickupRadius = 2; - pickUpName = "an S3S Combat Rifle"; +datablock ItemData(S3SRifle) { + className = Weapon; + catagory = "Spawn Items"; + shapeFile = "weapon_sniper.dts"; + image = S3SRifleImage; + mass = 1.0; + elasticity = 0.0; + friction = 0.6; + pickupRadius = 2; + pickUpName = "an S3S Combat Rifle"; - computeCRC = true; - emap = true; -}; + computeCRC = true; + emap = true; +}; \ No newline at end of file diff --git a/scripts/weapons/Shotguns/M1700.cs b/scripts/weapons/Shotguns/M1700.cs index 8744d8b..95d7637 100644 --- a/scripts/weapons/Shotguns/M1700.cs +++ b/scripts/weapons/Shotguns/M1700.cs @@ -1,224 +1,219 @@ datablock AudioProfile(ShotgunFireSound) { - filename = "fx/weapons/TR2spinfusor_fire.wav"; - description = AudioClosest3d; - preload = true; + filename = "fx/weapons/TR2spinfusor_fire.wav"; + description = AudioClosest3d; + preload = true; }; -datablock TracerProjectileData(M1700Pellet) -{ - doDynamicClientHits = true; +datablock TracerProjectileData(M1700Pellet) { + doDynamicClientHits = true; - directDamage = (0.075 * 1.5); - directDamageType = $DamageType::M1700; - explosion = "ChaingunExplosion"; - splash = ChaingunSplash; - HeadMultiplier = 1.2; - LegsMultiplier = 0.75; - - ImageSource = "M1700Image"; + directDamage = 0.13; + directDamageType = $DamageType::M1700; + explosion = "ChaingunExplosion"; + splash = ChaingunSplash; + HeadMultiplier = 1.2; + LegsMultiplier = 0.75; - longRangeMultiplier = 0.75; - kickBackStrength = 0.0; - sound = ChaingunProjectile; + ImageSource = "M1700Image"; - dryVelocity = 1500.0; - wetVelocity = 1000.0; - velInheritFactor = 0.0; - fizzleTimeMS = 1000; - lifetimeMS = 1000; - explodeOnDeath = false; - reflectOnWaterImpactAngle = 0.0; - explodeOnWaterImpact = false; - deflectionOnWaterImpact = 0.0; - fizzleUnderwaterMS = 3000; + longRangeMultiplier = 0.75; + kickBackStrength = 0.0; + sound = ChaingunProjectile; - tracerLength = 5.0; - tracerAlpha = false; - tracerMinPixels = 6; - tracerColor = 211.0/255.0 @ " " @ 215.0/255.0 @ " " @ 120.0/255.0 @ " 0.75"; + dryVelocity = 1500.0; + wetVelocity = 1000.0; + velInheritFactor = 0.0; + 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[1] = "special/tracercross"; tracerWidth = 0.09; - crossSize = 0.20; - crossViewAng = 0.990; - renderCross = true; + crossSize = 0.20; + crossViewAng = 0.990; + renderCross = true; - decalData[0] = ChaingunDecal1; - decalData[1] = ChaingunDecal2; - decalData[2] = ChaingunDecal3; - decalData[3] = ChaingunDecal4; - decalData[4] = ChaingunDecal5; - decalData[5] = ChaingunDecal6; + decalData[0] = ChaingunDecal1; + decalData[1] = ChaingunDecal2; + decalData[2] = ChaingunDecal3; + decalData[3] = ChaingunDecal4; + decalData[4] = ChaingunDecal5; + decalData[5] = ChaingunDecal6; }; //-------------------------------------------------------------------------- // Ammo //-------------------------------------- -datablock ItemData(M1700Ammo) -{ - className = Ammo; - catagory = "Ammo"; - shapeFile = "ammo_chaingun.dts"; - mass = 1; - elasticity = 0.2; - friction = 0.6; - pickupRadius = 2; +datablock ItemData(M1700Ammo) { + className = Ammo; + catagory = "Ammo"; + shapeFile = "ammo_chaingun.dts"; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; pickUpName = "some M1700 rounds"; - computeCRC = true; - + computeCRC = true; }; //-------------------------------------------------------------------------- // Weapon //-------------------------------------- -datablock ShapeBaseImageData(M1700Image) -{ - className = WeaponImage; - shapeFile = "weapon_plasma.dts"; - item = M1700; - ammo = M1700Ammo; - projectile = M1700Pellet; - projectileType = TracerProjectile; - emap = true; - mass = 20; +datablock ShapeBaseImageData(M1700Image) { + className = WeaponImage; + shapeFile = "weapon_plasma.dts"; + item = M1700; + ammo = M1700Ammo; + projectile = M1700Pellet; + projectileType = TracerProjectile; + emap = true; + mass = 20; - casing = ShellDebris; - 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 - shellExitVariance = 10.0; - shellVelocity = 4.0; + casing = ShellDebris; + 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 + shellExitVariance = 10.0; + shellVelocity = 4.0; - //ClipStuff - ClipName = "M1700Clip"; - ClipPickupName["M1700Clip"] = "some M1700 Clip Boxes"; - ShowsClipInHud = 1; - ClipReloadTime = 2; - ClipReturn = 1; - 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"; - // + //ClipStuff + ClipName = "M1700Clip"; + ClipPickupName["M1700Clip"] = "some M1700 Clip Boxes"; + ShowsClipInHud = 1; + ClipReloadTime = 3; + ClipReturn = 1; + InitialClips = 15; + // - 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"; - stateTransitionOnTimeout[0] = "ActivateReady"; - stateTimeoutValue[0] = 0.5; - stateSequence[0] = "Activate"; - stateSound[0] = ChaingunSwitchSound; + projectileSpread = 11.0 / 1000.0; - stateName[1] = "ActivateReady"; - stateTransitionOnLoaded[1] = "Ready"; - stateTransitionOnNoAmmo[1] = "NoAmmo"; + stateName[0] = "Activate"; + stateTransitionOnTimeout[0] = "ActivateReady"; + stateTimeoutValue[0] = 0.5; + stateSequence[0] = "Activate"; + stateSound[0] = ChaingunSwitchSound; - stateName[2] = "Ready"; - stateTransitionOnNoAmmo[2] = "NoAmmo"; - stateTransitionOnTriggerDown[2] = "CheckWet"; + stateName[1] = "ActivateReady"; + stateTransitionOnLoaded[1] = "Ready"; + stateTransitionOnNoAmmo[1] = "NoAmmo"; - stateName[3] = "Fire"; - stateTransitionOnTimeout[3] = "Reload"; - stateTimeoutValue[3] = 0.0001; - 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[2] = "Ready"; + stateTransitionOnNoAmmo[2] = "NoAmmo"; + stateTransitionOnTriggerDown[2] = "CheckWet"; - stateName[4] = "Reload"; - stateTransitionOnNoAmmo[4] = "NoAmmo"; - stateTransitionOnTimeout[4] = "Ready"; - stateTimeoutValue[4] = 0.5; - stateAllowImageChange[4] = false; - stateSequence[4] = "Reload"; + stateName[3] = "Fire"; + stateTransitionOnTimeout[3] = "Reload"; + stateTimeoutValue[3] = 0.0001; + 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[5] = "NoAmmo"; - stateTransitionOnAmmo[5] = "Reload"; - stateSequence[5] = "NoAmmo"; - stateTransitionOnTriggerDown[5] = "DryFire"; + stateName[4] = "Reload"; + stateTransitionOnNoAmmo[4] = "NoAmmo"; + stateTransitionOnTimeout[4] = "Ready"; + stateTimeoutValue[4] = 0.5; + stateAllowImageChange[4] = false; + stateSequence[4] = "Reload"; - stateName[6] = "DryFire"; - stateSound[6] = ChaingunDryFireSound; - stateTimeoutValue[6] = 1.0; - stateTransitionOnTimeout[6] = "NoAmmo"; + stateName[5] = "NoAmmo"; + stateTransitionOnAmmo[5] = "Reload"; + stateSequence[5] = "NoAmmo"; + stateTransitionOnTriggerDown[5] = "DryFire"; - stateName[7] = "WetFire"; - stateSound[7] = ChaingunDryFireSound; - stateTimeoutValue[7] = 1.0; - stateTransitionOnTimeout[7] = "Ready"; + stateName[6] = "DryFire"; + stateSound[6] = ChaingunDryFireSound; + stateTimeoutValue[6] = 1.0; + stateTransitionOnTimeout[6] = "NoAmmo"; - stateName[8] = "CheckWet"; - stateTransitionOnWet[8] = "WetFire"; - stateTransitionOnNotWet[8] = "Fire"; + stateName[7] = "WetFire"; + stateSound[7] = ChaingunDryFireSound; + stateTimeoutValue[7] = 1.0; + stateTransitionOnTimeout[7] = "Ready"; + + stateName[8] = "CheckWet"; + stateTransitionOnWet[8] = "WetFire"; + stateTransitionOnNotWet[8] = "Fire"; }; -datablock ItemData(M1700) -{ - className = Weapon; - catagory = "Spawn Items"; - shapeFile = "weapon_plasma.dts"; - image = M1700Image; - mass = 1.0; - elasticity = 0.2; - friction = 0.6; - pickupRadius = 2; - pickUpName = "a M1700"; +datablock ItemData(M1700) { + className = Weapon; + catagory = "Spawn Items"; + shapeFile = "weapon_plasma.dts"; + image = M1700Image; + mass = 1.0; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; + pickUpName = "a M1700"; - computeCRC = true; - emap = true; + computeCRC = true; + emap = true; }; function M1700Image::onMount(%this,%obj,%slot) { - Parent::onMount(%this, %obj, %slot); + Parent::onMount(%this, %obj, %slot); } function M1700Image::onFire(%data,%obj,%slot) { - serverPlay3D(ShotgunFireSound, %obj.getPosition()); + serverPlay3D(ShotgunFireSound, %obj.getPosition()); - %obj.applyKick(-250); - %obj.decInventory(%data.ammo,1); + %obj.applyKick(-250); + %obj.decInventory(%data.ammo,1); - %vector = %obj.getMuzzleVector(%slot); - %mp = %obj.getMuzzlePoint(%slot); + %vector = %obj.getMuzzleVector(%slot); + %mp = %obj.getMuzzlePoint(%slot); for (%i=0; %i < 12; %i++) { - %x = (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; - %mat = MatrixCreateFromEuler(%x @ " " @ %y @ " " @ %z); - %newvector = MatrixMulVector(%mat, %vector); + %x = (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; + %mat = MatrixCreateFromEuler(%x @ " " @ %y @ " " @ %z); + %newvector = MatrixMulVector(%mat, %vector); - %p = new (%data.projectileType)() { - dataBlock = %data.projectile; - initialDirection = %newvector; - initialPosition = %mp; - sourceObject = %obj; - damageFactor = 1; - sourceSlot = %slot; - }; - - %p.WeaponImageSource = %data.getName(); - } - if(%obj.inv[M1700Ammo] == 0) { //Added Phantom139, TWM2 - AttemptReload(%data, %obj, %slot); - } + %p = new (%data.projectileType)() { + dataBlock = %data.projectile; + initialDirection = %newvector; + initialPosition = %mp; + sourceObject = %obj; + damageFactor = 1; + sourceSlot = %slot; + }; + + %p.WeaponImageSource = %data.getName(); + } + if(%obj.inv[M1700Ammo] == 0) { //Added Phantom139, TWM2 + AttemptReload(%data, %obj, %slot); + } } diff --git a/scripts/weapons/Shotguns/Model1887.cs b/scripts/weapons/Shotguns/Model1887.cs index 9aeecd3..c955842 100644 --- a/scripts/weapons/Shotguns/Model1887.cs +++ b/scripts/weapons/Shotguns/Model1887.cs @@ -1,218 +1,213 @@ -datablock TracerProjectileData(Model1887Pellet) -{ - doDynamicClientHits = true; +datablock TracerProjectileData(Model1887Pellet) { + doDynamicClientHits = true; - directDamage = (0.064 * 1.5); - directDamageType = $DamageType::Model1887; - explosion = "ChaingunExplosion"; - splash = ChaingunSplash; - HeadMultiplier = 1.2; - LegsMultiplier = 0.75; + directDamage = 0.11; + directDamageType = $DamageType::Model1887; + explosion = "ChaingunExplosion"; + splash = ChaingunSplash; + HeadMultiplier = 1.2; + LegsMultiplier = 0.75; - longRangeMultiplier = 0.75; - kickBackStrength = 0.0; - sound = ChaingunProjectile; - - ImageSource = "Model1887Image"; + longRangeMultiplier = 0.75; + kickBackStrength = 0.0; + sound = ChaingunProjectile; - dryVelocity = 1500.0; - wetVelocity = 1000.0; - velInheritFactor = 0.0; - fizzleTimeMS = 500; - lifetimeMS = 500; - explodeOnDeath = false; - reflectOnWaterImpactAngle = 0.0; - explodeOnWaterImpact = false; - deflectionOnWaterImpact = 0.0; - fizzleUnderwaterMS = 3000; + ImageSource = "Model1887Image"; - tracerLength = 5.0; - tracerAlpha = false; - tracerMinPixels = 6; - tracerColor = 211.0/255.0 @ " " @ 215.0/255.0 @ " " @ 120.0/255.0 @ " 0.75"; + dryVelocity = 1500.0; + wetVelocity = 1000.0; + velInheritFactor = 0.0; + 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[1] = "special/tracercross"; tracerWidth = 0.09; - crossSize = 0.20; - crossViewAng = 0.990; - renderCross = true; + crossSize = 0.20; + crossViewAng = 0.990; + renderCross = true; - decalData[0] = ChaingunDecal1; - decalData[1] = ChaingunDecal2; - decalData[2] = ChaingunDecal3; - decalData[3] = ChaingunDecal4; - decalData[4] = ChaingunDecal5; - decalData[5] = ChaingunDecal6; + decalData[0] = ChaingunDecal1; + decalData[1] = ChaingunDecal2; + decalData[2] = ChaingunDecal3; + decalData[3] = ChaingunDecal4; + decalData[4] = ChaingunDecal5; + decalData[5] = ChaingunDecal6; }; //-------------------------------------------------------------------------- // Ammo //-------------------------------------- -datablock ItemData(Model1887Ammo) -{ - className = Ammo; - catagory = "Ammo"; - shapeFile = "ammo_chaingun.dts"; - mass = 1; - elasticity = 0.2; - friction = 0.6; - pickupRadius = 2; +datablock ItemData(Model1887Ammo) { + className = Ammo; + catagory = "Ammo"; + shapeFile = "ammo_chaingun.dts"; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; pickUpName = "some Model 1887 rounds"; - computeCRC = true; - + computeCRC = true; }; //-------------------------------------------------------------------------- // Weapon //-------------------------------------- -datablock ShapeBaseImageData(Model1887Image) -{ - className = WeaponImage; - shapeFile = "weapon_disc.dts"; - item = Model1887; - ammo = Model1887Ammo; - projectile = Model1887Pellet; - projectileType = TracerProjectile; - emap = true; - mass = 20; +datablock ShapeBaseImageData(Model1887Image) { + className = WeaponImage; + shapeFile = "weapon_disc.dts"; + item = Model1887; + ammo = Model1887Ammo; + projectile = Model1887Pellet; + projectileType = TracerProjectile; + emap = true; + mass = 20; - casing = ShellDebris; - 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 - shellExitVariance = 10.0; - shellVelocity = 4.0; + casing = ShellDebris; + 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 + shellExitVariance = 10.0; + shellVelocity = 4.0; - //ClipStuff - ClipName = "Model1887Clip"; - ClipPickupName["Model1887Clip"] = "some Model 1887 Clip Boxes"; - ShowsClipInHud = 1; - ClipReloadTime = 9; - ClipReturn = 7; - InitialClips = 3; - - ReloadSingle = 1; - SingleShotAdd = 1; - // - RankRequire = $TWM2::RankRequire["RSALaserRifle"]; - PrestigeRequire = 1; + //ClipStuff + ClipName = "Model1887Clip"; + ClipPickupName["Model1887Clip"] = "some Model 1887 Clip Boxes"; + ShowsClipInHud = 1; + ClipReloadTime = 9; + ClipReturn = 7; + InitialClips = 3; - //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"; - // + ReloadSingle = 1; + SingleShotAdd = 1; + // + RankRequire = $TWM2::RankRequire["RSALaserRifle"]; + PrestigeRequire = 1; - 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"; - stateTransitionOnTimeout[0] = "ActivateReady"; - stateTimeoutValue[0] = 0.5; - stateSequence[0] = "Activate"; - stateSound[0] = ChaingunSwitchSound; + projectileSpread = 7.0 / 1000.0; - stateName[1] = "ActivateReady"; - stateTransitionOnLoaded[1] = "Ready"; - stateTransitionOnNoAmmo[1] = "NoAmmo"; + stateName[0] = "Activate"; + stateTransitionOnTimeout[0] = "ActivateReady"; + stateTimeoutValue[0] = 0.5; + stateSequence[0] = "Activate"; + stateSound[0] = ChaingunSwitchSound; - stateName[2] = "Ready"; - stateTransitionOnNoAmmo[2] = "NoAmmo"; - stateTransitionOnTriggerDown[2] = "CheckWet"; + stateName[1] = "ActivateReady"; + stateTransitionOnLoaded[1] = "Ready"; + stateTransitionOnNoAmmo[1] = "NoAmmo"; - stateName[3] = "Fire"; - stateTransitionOnTimeout[3] = "Reload"; - stateTimeoutValue[3] = 0.0001; - stateFire[3] = true; - stateEjectShell[3] = true; - stateRecoil[3] = LightRecoil; - stateAllowImageChange[3] = false; - stateScript[3] = "onFire"; + stateName[2] = "Ready"; + stateTransitionOnNoAmmo[2] = "NoAmmo"; + stateTransitionOnTriggerDown[2] = "CheckWet"; - stateName[4] = "Reload"; - stateTransitionOnNoAmmo[4] = "NoAmmo"; - stateTransitionOnTimeout[4] = "Ready"; - stateTimeoutValue[4] = 1.0; - stateAllowImageChange[4] = false; - stateSequence[4] = "Reload"; + stateName[3] = "Fire"; + stateTransitionOnTimeout[3] = "Reload"; + stateTimeoutValue[3] = 0.0001; + stateFire[3] = true; + stateEjectShell[3] = true; + stateRecoil[3] = LightRecoil; + stateAllowImageChange[3] = false; + stateScript[3] = "onFire"; - stateName[5] = "NoAmmo"; - stateTransitionOnAmmo[5] = "Reload"; - stateSequence[5] = "NoAmmo"; - stateTransitionOnTriggerDown[5] = "DryFire"; + stateName[4] = "Reload"; + stateTransitionOnNoAmmo[4] = "NoAmmo"; + stateTransitionOnTimeout[4] = "Ready"; + stateTimeoutValue[4] = 1.0; + stateAllowImageChange[4] = false; + stateSequence[4] = "Reload"; - stateName[6] = "DryFire"; - stateSound[6] = ChaingunDryFireSound; - stateTimeoutValue[6] = 1.0; - stateTransitionOnTimeout[6] = "NoAmmo"; + stateName[5] = "NoAmmo"; + stateTransitionOnAmmo[5] = "Reload"; + stateSequence[5] = "NoAmmo"; + stateTransitionOnTriggerDown[5] = "DryFire"; - stateName[7] = "WetFire"; - stateSound[7] = ChaingunDryFireSound; - stateTimeoutValue[7] = 1.0; - stateTransitionOnTimeout[7] = "Ready"; + stateName[6] = "DryFire"; + stateSound[6] = ChaingunDryFireSound; + stateTimeoutValue[6] = 1.0; + stateTransitionOnTimeout[6] = "NoAmmo"; - stateName[8] = "CheckWet"; - stateTransitionOnWet[8] = "WetFire"; - stateTransitionOnNotWet[8] = "Fire"; + stateName[7] = "WetFire"; + stateSound[7] = ChaingunDryFireSound; + stateTimeoutValue[7] = 1.0; + stateTransitionOnTimeout[7] = "Ready"; + + stateName[8] = "CheckWet"; + stateTransitionOnWet[8] = "WetFire"; + stateTransitionOnNotWet[8] = "Fire"; }; -datablock ItemData(Model1887) -{ - className = Weapon; - catagory = "Spawn Items"; - shapeFile = "weapon_plasma.dts"; - image = Model1887Image; - mass = 1.0; - elasticity = 0.2; - friction = 0.6; - pickupRadius = 2; - pickUpName = "a Model 1887"; +datablock ItemData(Model1887 { + className = Weapon; + catagory = "Spawn Items"; + shapeFile = "weapon_plasma.dts"; + image = Model1887Image; + mass = 1.0; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; + pickUpName = "a Model 1887"; - computeCRC = true; - emap = true; + computeCRC = true; + emap = true; }; function Model1887Image::onMount(%this,%obj,%slot) { - Parent::onMount(%this, %obj, %slot); + Parent::onMount(%this, %obj, %slot); } function Model1887Image::onFire(%data,%obj,%slot) { - serverPlay3D(ShotgunFireSound, %obj.getPosition()); + serverPlay3D(ShotgunFireSound, %obj.getPosition()); - %obj.applyKick(-250); - %obj.decInventory(%data.ammo,1); + %obj.applyKick(-250); + %obj.decInventory(%data.ammo,1); - %vector = %obj.getMuzzleVector(%slot); - %mp = %obj.getMuzzlePoint(%slot); + %vector = %obj.getMuzzleVector(%slot); + %mp = %obj.getMuzzlePoint(%slot); - for (%i = 0; %i < 14; %i++) { - %x = (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; - %mat = MatrixCreateFromEuler(%x @ " " @ %y @ " " @ %z); - %newvector = MatrixMulVector(%mat, %vector); + for (%i = 0; %i < 18; %i++) { + %x = (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; + %mat = MatrixCreateFromEuler(%x @ " " @ %y @ " " @ %z); + %newvector = MatrixMulVector(%mat, %vector); - %p = new (%data.projectileType)() { - dataBlock = %data.projectile; - initialDirection = %newvector; - initialPosition = %mp; - sourceObject = %obj; - damageFactor = 1; - sourceSlot = %slot; - }; + %p = new (%data.projectileType)() { + dataBlock = %data.projectile; + initialDirection = %newvector; + initialPosition = %mp; + sourceObject = %obj; + damageFactor = 1; + sourceSlot = %slot; + }; - %p.WeaponImageSource = %data.getName(); - } - if(%obj.inv[Model1887Ammo] == 0) { //Added Phantom139, TWM2 - AttemptReload(%data, %obj, %slot); - } -} + %p.WeaponImageSource = %data.getName(); + } + if(%obj.inv[Model1887Ammo] == 0) { //Added Phantom139, TWM2 + AttemptReload(%data, %obj, %slot); + } +} \ No newline at end of file diff --git a/scripts/weapons/Shotguns/SA2400.cs b/scripts/weapons/Shotguns/SA2400.cs index 3d2abed..aa221f4 100644 --- a/scripts/weapons/Shotguns/SA2400.cs +++ b/scripts/weapons/Shotguns/SA2400.cs @@ -8,23 +8,22 @@ //-------------------------------------- -datablock DebrisData( SemiAutoShellDebris ) -{ - shapeName = "weapon_chaingun_ammocasing.dts"; +datablock DebrisData( SemiAutoShellDebris ) { + shapeName = "weapon_chaingun_ammocasing.dts"; - lifetime = 7.0; + lifetime = 7.0; - minSpinSpeed = 600.0; - maxSpinSpeed = 800.0; + minSpinSpeed = 600.0; + maxSpinSpeed = 800.0; - elasticity = 0.8; - friction = 0.3; + elasticity = 0.8; + friction = 0.3; - numBounces = 5; + numBounces = 5; - fade = true; - staticOnMaxBounce = true; - snapOnMaxBounce = true; + fade = true; + staticOnMaxBounce = true; + snapOnMaxBounce = true; }; @@ -32,295 +31,288 @@ datablock DebrisData( SemiAutoShellDebris ) // Projectile //-------------------------------------- -datablock TracerProjectileData( SA2400Slug ) -{ - doDynamicClientHits = true; +datablock TracerProjectileData( SA2400Slug ) { + doDynamicClientHits = true; - directDamage = 0.3; - directDamageType = $DamageType::SA2400; - explosion = "ChaingunExplosion"; - splash = ChaingunSplash; - - HeadMultiplier = 1.9; + directDamage = 0.3; + directDamageType = $DamageType::SA2400; + explosion = "ChaingunExplosion"; + splash = ChaingunSplash; - kickBackStrength = 428.0; - sound = ChaingunProjectile; + HeadMultiplier = 1.9; - ImageSource = "SA2400Image"; + kickBackStrength = 428.0; + sound = ChaingunProjectile; - dryVelocity = 2561.0; - wetVelocity = 586.0; - velInheritFactor = 1.0; - fizzleTimeMS = 3000; - lifetimeMS = 3000; - explodeOnDeath = false; - reflectOnWaterImpactAngle = 40.0; - explodeOnWaterImpact = false; - deflectionOnWaterImpact = 40.0; - fizzleUnderwaterMS = 3000; + ImageSource = "SA2400Image"; - tracerLength = 37.0; - tracerAlpha = false; - tracerMinPixels = 6; - tracerColor = 211.0/255.0 @ " " @ 215.0/255.0 @ " " @ 120.0/255.0 @ " 0.75"; + dryVelocity = 2561.0; + wetVelocity = 586.0; + velInheritFactor = 1.0; + 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[1] = "special/tracercross"; tracerWidth = 0.10; - crossSize = 0.20; - crossViewAng = 0.990; - renderCross = true; + crossSize = 0.20; + crossViewAng = 0.990; + renderCross = true; - decalData[0] = ChaingunDecal1; - decalData[1] = ChaingunDecal1; - decalData[2] = ChaingunDecal1; - decalData[3] = ChaingunDecal1; - decalData[4] = ChaingunDecal1; - decalData[5] = ChaingunDecal1; + decalData[0] = ChaingunDecal1; + decalData[1] = ChaingunDecal1; + decalData[2] = ChaingunDecal1; + decalData[3] = ChaingunDecal1; + decalData[4] = ChaingunDecal1; + decalData[5] = ChaingunDecal1; }; //-------------------------------------------------------------------------- // Ammo //-------------------------------------- -datablock ItemData( SA2400Ammo ) -{ - className = Ammo; - catagory = "Ammo"; - shapeFile = "ammo_chaingun.dts"; - mass = 1; - elasticity = 0.2; - friction = 0.6; - pickupRadius = 2; +datablock ItemData( SA2400Ammo ) { + className = Ammo; + catagory = "Ammo"; + shapeFile = "ammo_chaingun.dts"; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; pickUpName = "some chaingun ammo"; - computeCRC = true; - + computeCRC = true; }; //-------------------------------------------------------------------------- // Weapon //-------------------------------------- -datablock ShapeBaseImageData( SA2400Image ) -{ - className = WeaponImage; - shapeFile = "weapon_grenade_launcher.dts"; - item = SA2400; - ammo = SA2400Ammo; - - offset = "0 0 0"; - emap = true; +datablock ShapeBaseImageData( SA2400Image ) { + className = WeaponImage; + shapeFile = "weapon_grenade_launcher.dts"; + item = SA2400; + ammo = SA2400Ammo; - casing = SemiAutoShellDebris; - shellExitDir = "1.0 0.3 1.0"; - shellExitOffset = "0.15 -0.56 -0.1"; - shellExitVariance = 15.0; - shellVelocity = 30.0; + offset = "0 0 0"; + emap = true; - projectile = SA2400Slug; - projectileType = TracerProjectile; - - //ClipStuff - ClipName = "SA2400Clip"; - ClipPickupName["SA2400Clip"] = "some SA2400 Slugs"; - ShowsClipInHud = 1; - ClipReloadTime = 6; - ClipReturn = 21; - InitialClips = 8; - ReloadSingle = 1; - SingleShotAdd = 7; - // - RankRequire = $TWM2::RankRequire["SA2400"]; - - //Challenges - HasChallenges = 1; - ChallengeCt = 9; - Challenge[1] = "SA2400 Killer\t50\t100\tNone"; - Challenge[2] = "SA2400 Extremist\t100\t150\tNone"; - Challenge[3] = "SA2400 Expert\t250\t250\tNone"; - Challenge[4] = "SA2400 Master\t500\t500\tNone"; - Challenge[5] = "SA2400 God\t1000\t1000\tNone"; - Challenge[6] = "SA2400 Bronze Commendation\t2500\t10000\tNone"; - Challenge[7] = "SA2400 Silver Commendation\t5000\t25000\tNone"; - Challenge[8] = "SA2400 Gold Commendation\t10000\t50000\tNone"; - Challenge[9] = "SA2400 Titan Commendation\t25000\t75000\tNone"; - GunName = "SA2400 Shotgun"; - // - - projectileSpread = 3.0 / 1000.0; -//----------------------------------------------------------------------------\\ -//State Data\\ -//----------------------------------------------------------------------------\\ - stateName[0] = "Activate"; - stateTransitionOnTimeout[0] = "ActivateReady"; - stateSequence[0] = "Activate"; - stateTimeoutValue[0] = 0.2; - stateSound[0] = ChaingunSwitchSound; - //----------------------------------------------------\\ - stateName[1] = "Ready"; - stateSequence[1] = "Ready"; - stateTimeoutValue[1] = 0.2; - stateTransitionOnTriggerDown[1] = "FireFirstRound"; - stateTransitionOnNoAmmo[1] = "NoAmmo"; - //----------------------------------------------------\\ - stateName[2] = "Reload"; - stateSequence[2] = "Reload"; - stateTransitionOnTimeout[2] = "Ready"; - stateTransitionOnNoAmmo[2] = "NoAmmo"; - stateTimeoutValue[2] = 4.0; - stateAllowImageChange[2] = false; - stateSound[2] = DiscDryFireSound; - //----------------------------------------------------\\ - stateName[3] = "NoAmmo"; - stateSequence[3] = "NoAmmo"; - stateTimeoutValue[3] = 0.2; - stateTransitionOnTriggerDown[3] = "DryFire"; - stateTransitionOnAmmo[3] = "Reload"; - //----------------------------------------------------\\ - stateName[4] = "DryFire"; - stateSequence[4] = "DryFire"; - stateTransitionOnTimeout[4] = "NoAmmo"; - stateTimeoutValue[4] = 0.5; - stateSound[4] = DiscSwitchSound; - //----------------------------------------------------\\ - stateName[5] = "FireFirstRound"; - stateSequence[5] = "Fire"; - stateRecoil[5] = LightRecoil; - stateTransitionOnTimeout[5] = "FireSecondRound"; - stateTransitionOnTriggerUp[5] = "ReadySecondRound"; - stateTransitionOnNoAmmo[5] = "NoAmmo"; - stateTimeoutValue[5] = 0.2; - stateFire[5] = true; - stateEjectShell[5] = true; - stateAllowImageChange[5] = false; - stateSound[5] = ShotgunFireSound; - stateScript[5] = "onFire"; - //----------------------------------------------------\\ - stateName[6] = "FireSecondRound"; - stateSequence[6] = "Fire"; - stateRecoil[6] = LightRecoil; - stateTransitionOnTimeout[6] = "FireThirdRound"; - stateTransitionOnTriggerUp[6] = "ReadyThirdRound"; - stateTransitionOnNoAmmo[6] = "NoAmmo"; - stateTimeoutValue[6] = 0.2; - stateFire[6] = true; - stateEjectShell[6] = true; - stateAllowImageChange[6] = false; - stateSound[6] = ShotgunFireSound; - stateScript[6] = "onFire"; - //----------------------------------------------------\\ - stateName[7] = "FireThirdRound"; - stateSequence[7] = "Fire"; - stateRecoil[7] = LightRecoil; - stateTransitionOnTimeout[7] = "FireFourthRound"; - stateTransitionOnTriggerUp[7] = "ReadyFourthRound"; - stateTransitionOnNoAmmo[7] = "NoAmmo"; - stateTimeoutValue[7] = 0.2; - stateFire[7] = true; - stateEjectShell[7] = true; - stateAllowImageChange[7] = false; - stateSound[7] = ShotgunFireSound; - stateScript[7] = "onFire"; - //----------------------------------------------------\\ - stateName[8] = "FireFourthRound"; - stateSequence[8] = "Fire"; - stateRecoil[8] = LightRecoil; - stateTransitionOnTimeout[8] = "FireFifthRound"; - stateTransitionOnTriggerUp[8] = "ReadyFifthRound"; - stateTransitionOnNoAmmo[8] = "NoAmmo"; - stateTimeoutValue[8] = 0.2; - stateFire[8] = true; - stateEjectShell[8] = true; - stateAllowImageChange[8] = false; - stateSound[8] = ShotgunFireSound; - stateScript[8] = "onFire"; - //----------------------------------------------------\\ - stateName[9] = "FireFifthRound"; - stateSequence[9] = "Fire"; - stateRecoil[9] = LightRecoil; - stateTransitionOnTimeout[9] = "FireSixthRound"; - stateTransitionOnTriggerUp[9] = "ReadySixthRound"; - stateTransitionOnNoAmmo[9] = "NoAmmo"; - stateTimeoutValue[9] = 0.2; - stateFire[9] = true; - stateEjectShell[9] = true; - stateAllowImageChange[9] = false; - stateSound[9] = ShotgunFireSound; - stateScript[9] = "onFire"; - //----------------------------------------------------\\ - stateName[10] = "FireSixthRound"; - stateSequence[10] = "Fire"; - stateRecoil[10] = LightRecoil; - stateTransitionOnTimeout[10] = "FireSeventhRound"; - stateTransitionOnTriggerUp[10] = "ReadySeventhRound"; - stateTransitionOnNoAmmo[10] = "NoAmmo"; - stateTimeoutValue[10] = 0.2; - stateFire[10] = true; - stateEjectShell[10] = true; - stateAllowImageChange[10] = false; - stateSound[10] = ShotgunFireSound; - stateScript[10] = "onFire"; - //----------------------------------------------------\\ - stateName[11] = "FireSeventhRound"; - stateSequence[11] = "Fire"; - stateRecoil[11] = LightRecoil; - stateTransitionOnTimeout[11] = "Reload"; - stateTransitionOnTriggerUp[11] = "Reload"; - stateTransitionOnNoAmmo[11] = "NoAmmo"; - stateTimeoutValue[11] = 0.2; - stateFire[11] = true; - stateEjectShell[11] = true; - stateAllowImageChange[11] = false; - stateSound[11] = ShotgunFireSound; - stateScript[11] = "onFire"; - //----------------------------------------------------\\ - stateName[12] = "ReadySecondRound"; - stateSequence[12] = "ReadySecondRound"; - stateTransitionOnTriggerDown[12] = "FireSecondRound"; - stateTransitionOnNoAmmo[12] = "NoAmmo"; - //----------------------------------------------------\\ - stateName[13] = "ReadyThirdRound"; - stateSequence[13] = "ReadyThirdRound"; - stateTransitionOnTriggerDown[13] = "FireThirdRound"; - stateTransitionOnNoAmmo[13] = "NoAmmo"; - //----------------------------------------------------\\ - stateName[14] = "ReadyFourthRound"; - stateSequence[14] = "ReadyFourthRound"; - stateTransitionOnTriggerDown[14] = "FireFourthRound"; - stateTransitionOnNoAmmo[14] = "NoAmmo"; - //----------------------------------------------------\\ - stateName[15] = "ReadyFifthRound"; - stateSequence[15] = "ReadyFifthRound"; - stateTransitionOnTriggerDown[15] = "FireFifthRound"; - stateTransitionOnNoAmmo[15] = "NoAmmo"; - //----------------------------------------------------\\ - stateName[16] = "ReadySixthRound"; - stateSequence[16] = "ReadySixthRound"; - stateTransitionOnTriggerDown[16] = "FireSixthRound"; - stateTransitionOnNoAmmo[16] = "NoAmmo"; - //----------------------------------------------------\\ - stateName[17] = "ReadySeventhRound"; - stateSequence[17] = "ReadySeventhRound"; - stateTransitionOnTriggerDown[17] = "FireSeventhRound"; - stateTransitionOnNoAmmo[17] = "NoAmmo"; - //----------------------------------------------------\\ - stateName[18] = "ActivateReady"; - stateTransitionOnLoaded[18] = "Ready"; - stateTransitionOnNoAmmo[18] = "NoAmmo"; -//----------------------------------------------------------------------------\\ -//----------------------------------------------------------------------------\\ + casing = SemiAutoShellDebris; + shellExitDir = "1.0 0.3 1.0"; + shellExitOffset = "0.15 -0.56 -0.1"; + shellExitVariance = 15.0; + shellVelocity = 30.0; + + projectile = SA2400Slug; + projectileType = TracerProjectile; + + //ClipStuff + ClipName = "SA2400Clip"; + ClipPickupName["SA2400Clip"] = "some SA2400 Slugs"; + ShowsClipInHud = 1; + ClipReloadTime = 6; + ClipReturn = 21; + InitialClips = 8; + ReloadSingle = 1; + SingleShotAdd = 7; + // + RankRequire = $TWM2::RankRequire["SA2400"]; + + //Challenges + HasChallenges = 1; + ChallengeCt = 9; + Challenge[1] = "SA2400 Killer\t50\t100\tNone"; + Challenge[2] = "SA2400 Extremist\t100\t150\tNone"; + Challenge[3] = "SA2400 Expert\t250\t250\tNone"; + Challenge[4] = "SA2400 Master\t500\t500\tNone"; + Challenge[5] = "SA2400 God\t1000\t1000\tNone"; + Challenge[6] = "SA2400 Bronze Commendation\t2500\t10000\tNone"; + Challenge[7] = "SA2400 Silver Commendation\t5000\t25000\tNone"; + Challenge[8] = "SA2400 Gold Commendation\t10000\t50000\tNone"; + Challenge[9] = "SA2400 Titan Commendation\t25000\t75000\tNone"; + GunName = "SA2400 Shotgun"; + // + + projectileSpread = 3.0 / 1000.0; + //----------------------------------------------------------------------------\\ + //State Data\\ + //----------------------------------------------------------------------------\\ + stateName[0] = "Activate"; + stateTransitionOnTimeout[0] = "ActivateReady"; + stateSequence[0] = "Activate"; + stateTimeoutValue[0] = 0.2; + stateSound[0] = ChaingunSwitchSound; + //----------------------------------------------------\\ + stateName[1] = "Ready"; + stateSequence[1] = "Ready"; + stateTimeoutValue[1] = 0.2; + stateTransitionOnTriggerDown[1] = "FireFirstRound"; + stateTransitionOnNoAmmo[1] = "NoAmmo"; + //----------------------------------------------------\\ + stateName[2] = "Reload"; + stateSequence[2] = "Reload"; + stateTransitionOnTimeout[2] = "Ready"; + stateTransitionOnNoAmmo[2] = "NoAmmo"; + stateTimeoutValue[2] = 4.0; + stateAllowImageChange[2] = false; + stateSound[2] = DiscDryFireSound; + //----------------------------------------------------\\ + stateName[3] = "NoAmmo"; + stateSequence[3] = "NoAmmo"; + stateTimeoutValue[3] = 0.2; + stateTransitionOnTriggerDown[3] = "DryFire"; + stateTransitionOnAmmo[3] = "Reload"; + //----------------------------------------------------\\ + stateName[4] = "DryFire"; + stateSequence[4] = "DryFire"; + stateTransitionOnTimeout[4] = "NoAmmo"; + stateTimeoutValue[4] = 0.5; + stateSound[4] = DiscSwitchSound; + //----------------------------------------------------\\ + stateName[5] = "FireFirstRound"; + stateSequence[5] = "Fire"; + stateRecoil[5] = LightRecoil; + stateTransitionOnTimeout[5] = "FireSecondRound"; + stateTransitionOnTriggerUp[5] = "ReadySecondRound"; + stateTransitionOnNoAmmo[5] = "NoAmmo"; + stateTimeoutValue[5] = 0.14; + stateFire[5] = true; + stateEjectShell[5] = true; + stateAllowImageChange[5] = false; + stateSound[5] = ShotgunFireSound; + stateScript[5] = "onFire"; + //----------------------------------------------------\\ + stateName[6] = "FireSecondRound"; + stateSequence[6] = "Fire"; + stateRecoil[6] = LightRecoil; + stateTransitionOnTimeout[6] = "FireThirdRound"; + stateTransitionOnTriggerUp[6] = "ReadyThirdRound"; + stateTransitionOnNoAmmo[6] = "NoAmmo"; + stateTimeoutValue[6] = 0.14; + stateFire[6] = true; + stateEjectShell[6] = true; + stateAllowImageChange[6] = false; + stateSound[6] = ShotgunFireSound; + stateScript[6] = "onFire"; + //----------------------------------------------------\\ + stateName[7] = "FireThirdRound"; + stateSequence[7] = "Fire"; + stateRecoil[7] = LightRecoil; + stateTransitionOnTimeout[7] = "FireFourthRound"; + stateTransitionOnTriggerUp[7] = "ReadyFourthRound"; + stateTransitionOnNoAmmo[7] = "NoAmmo"; + stateTimeoutValue[7] = 0.14; + stateFire[7] = true; + stateEjectShell[7] = true; + stateAllowImageChange[7] = false; + stateSound[7] = ShotgunFireSound; + stateScript[7] = "onFire"; + //----------------------------------------------------\\ + stateName[8] = "FireFourthRound"; + stateSequence[8] = "Fire"; + stateRecoil[8] = LightRecoil; + stateTransitionOnTimeout[8] = "FireFifthRound"; + stateTransitionOnTriggerUp[8] = "ReadyFifthRound"; + stateTransitionOnNoAmmo[8] = "NoAmmo"; + stateTimeoutValue[8] = 0.14; + stateFire[8] = true; + stateEjectShell[8] = true; + stateAllowImageChange[8] = false; + stateSound[8] = ShotgunFireSound; + stateScript[8] = "onFire"; + //----------------------------------------------------\\ + stateName[9] = "FireFifthRound"; + stateSequence[9] = "Fire"; + stateRecoil[9] = LightRecoil; + stateTransitionOnTimeout[9] = "FireSixthRound"; + stateTransitionOnTriggerUp[9] = "ReadySixthRound"; + stateTransitionOnNoAmmo[9] = "NoAmmo"; + stateTimeoutValue[9] = 0.14; + stateFire[9] = true; + stateEjectShell[9] = true; + stateAllowImageChange[9] = false; + stateSound[9] = ShotgunFireSound; + stateScript[9] = "onFire"; + //----------------------------------------------------\\ + stateName[10] = "FireSixthRound"; + stateSequence[10] = "Fire"; + stateRecoil[10] = LightRecoil; + stateTransitionOnTimeout[10] = "FireSeventhRound"; + stateTransitionOnTriggerUp[10] = "ReadySeventhRound"; + stateTransitionOnNoAmmo[10] = "NoAmmo"; + stateTimeoutValue[10] = 0.14; + stateFire[10] = true; + stateEjectShell[10] = true; + stateAllowImageChange[10] = false; + stateSound[10] = ShotgunFireSound; + stateScript[10] = "onFire"; + //----------------------------------------------------\\ + stateName[11] = "FireSeventhRound"; + stateSequence[11] = "Fire"; + stateRecoil[11] = LightRecoil; + stateTransitionOnTimeout[11] = "Reload"; + stateTransitionOnTriggerUp[11] = "Reload"; + stateTransitionOnNoAmmo[11] = "NoAmmo"; + stateTimeoutValue[11] = 0.14; + stateFire[11] = true; + stateEjectShell[11] = true; + stateAllowImageChange[11] = false; + stateSound[11] = ShotgunFireSound; + stateScript[11] = "onFire"; + //----------------------------------------------------\\ + stateName[12] = "ReadySecondRound"; + stateSequence[12] = "ReadySecondRound"; + stateTransitionOnTriggerDown[12] = "FireSecondRound"; + stateTransitionOnNoAmmo[12] = "NoAmmo"; + //----------------------------------------------------\\ + stateName[13] = "ReadyThirdRound"; + stateSequence[13] = "ReadyThirdRound"; + stateTransitionOnTriggerDown[13] = "FireThirdRound"; + stateTransitionOnNoAmmo[13] = "NoAmmo"; + //----------------------------------------------------\\ + stateName[14] = "ReadyFourthRound"; + stateSequence[14] = "ReadyFourthRound"; + stateTransitionOnTriggerDown[14] = "FireFourthRound"; + stateTransitionOnNoAmmo[14] = "NoAmmo"; + //----------------------------------------------------\\ + stateName[15] = "ReadyFifthRound"; + stateSequence[15] = "ReadyFifthRound"; + stateTransitionOnTriggerDown[15] = "FireFifthRound"; + stateTransitionOnNoAmmo[15] = "NoAmmo"; + //----------------------------------------------------\\ + stateName[16] = "ReadySixthRound"; + stateSequence[16] = "ReadySixthRound"; + stateTransitionOnTriggerDown[16] = "FireSixthRound"; + stateTransitionOnNoAmmo[16] = "NoAmmo"; + //----------------------------------------------------\\ + stateName[17] = "ReadySeventhRound"; + stateSequence[17] = "ReadySeventhRound"; + stateTransitionOnTriggerDown[17] = "FireSeventhRound"; + stateTransitionOnNoAmmo[17] = "NoAmmo"; + //----------------------------------------------------\\ + stateName[18] = "ActivateReady"; + stateTransitionOnLoaded[18] = "Ready"; + stateTransitionOnNoAmmo[18] = "NoAmmo"; }; -datablock ItemData( SA2400 ) -{ - className = Weapon; - catagory = "Spawn Items"; - shapeFile = "weapon_grenade_launcher.dts"; - image = SA2400Image; - mass = 1; - elasticity = 0.2; - friction = 0.6; - pickupRadius = 2; - pickUpName = "a Semi-Automatic Shotgun"; +datablock ItemData( SA2400 ) { + className = Weapon; + catagory = "Spawn Items"; + shapeFile = "weapon_grenade_launcher.dts"; + image = SA2400Image; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; + pickUpName = "a Semi-Automatic Shotgun"; - computeCRC = true; - emap = true; -}; + computeCRC = true; + emap = true; +}; \ No newline at end of file diff --git a/scripts/weapons/Shotguns/SCD343.cs b/scripts/weapons/Shotguns/SCD343.cs index df2a939..6096c2a 100644 --- a/scripts/weapons/Shotguns/SCD343.cs +++ b/scripts/weapons/Shotguns/SCD343.cs @@ -1,219 +1,214 @@ -datablock TracerProjectileData(SCD343Pellet) -{ - doDynamicClientHits = true; +datablock TracerProjectileData(SCD343Pellet) { + doDynamicClientHits = true; - directDamage = (0.075 * 1.4); - directDamageType = $DamageType::SCD343; - explosion = "ChaingunExplosion"; - splash = ChaingunSplash; - HeadMultiplier = 1.2; - LegsMultiplier = 0.75; - - ImageSource = "SCD343Image"; + directDamage = 0.17; + directDamageType = $DamageType::SCD343; + explosion = "ChaingunExplosion"; + splash = ChaingunSplash; + HeadMultiplier = 1.2; + LegsMultiplier = 0.75; - longRangeMultiplier = 0.75; - kickBackStrength = 0.0; - sound = ChaingunProjectile; + ImageSource = "SCD343Image"; - dryVelocity = 1500.0; - wetVelocity = 1000.0; - velInheritFactor = 0.0; - fizzleTimeMS = 1000; - lifetimeMS = 1000; - explodeOnDeath = false; - reflectOnWaterImpactAngle = 0.0; - explodeOnWaterImpact = false; - deflectionOnWaterImpact = 0.0; - fizzleUnderwaterMS = 3000; + longRangeMultiplier = 0.75; + kickBackStrength = 0.0; + sound = ChaingunProjectile; - tracerLength = 5.0; - tracerAlpha = false; - tracerMinPixels = 6; - tracerColor = 211.0/255.0 @ " " @ 215.0/255.0 @ " " @ 120.0/255.0 @ " 0.75"; + dryVelocity = 1500.0; + wetVelocity = 1000.0; + velInheritFactor = 0.0; + 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[1] = "special/tracercross"; tracerWidth = 0.09; - crossSize = 0.20; - crossViewAng = 0.990; - renderCross = true; + crossSize = 0.20; + crossViewAng = 0.990; + renderCross = true; - decalData[0] = ChaingunDecal1; - decalData[1] = ChaingunDecal2; - decalData[2] = ChaingunDecal3; - decalData[3] = ChaingunDecal4; - decalData[4] = ChaingunDecal5; - decalData[5] = ChaingunDecal6; + decalData[0] = ChaingunDecal1; + decalData[1] = ChaingunDecal2; + decalData[2] = ChaingunDecal3; + decalData[3] = ChaingunDecal4; + decalData[4] = ChaingunDecal5; + decalData[5] = ChaingunDecal6; }; //-------------------------------------------------------------------------- // Ammo //-------------------------------------- -datablock ItemData(SCD343Ammo) -{ - className = Ammo; - catagory = "Ammo"; - shapeFile = "ammo_chaingun.dts"; - mass = 1; - elasticity = 0.2; - friction = 0.6; - pickupRadius = 2; +datablock ItemData(SCD343Ammo) { + className = Ammo; + catagory = "Ammo"; + shapeFile = "ammo_chaingun.dts"; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; pickUpName = "some SCD343 rounds"; - computeCRC = true; - + computeCRC = true; }; //-------------------------------------------------------------------------- // Weapon //-------------------------------------- -datablock ShapeBaseImageData(SCD343Image) -{ - className = WeaponImage; - shapeFile = "weapon_plasma.dts"; - item = SCD343; - ammo = SCD343Ammo; - projectile = SCD343Pellet; - projectileType = TracerProjectile; - emap = true; - mass = 20; +datablock ShapeBaseImageData(SCD343Image) { + className = WeaponImage; + shapeFile = "weapon_plasma.dts"; + item = SCD343; + ammo = SCD343Ammo; + projectile = SCD343Pellet; + projectileType = TracerProjectile; + emap = true; + mass = 20; - casing = ShellDebris; - 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 - shellExitVariance = 10.0; - shellVelocity = 4.0; + casing = ShellDebris; + 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 + shellExitVariance = 10.0; + shellVelocity = 4.0; - //ClipStuff - ClipName = "SCD343Clip"; - ClipPickupName["SCD343Clip"] = "some SCD343 Clip Boxes"; - ShowsClipInHud = 1; - ClipReloadTime = 4; - ClipReturn = 1; - InitialClips = 8; - // - RankRequire = $TWM2::RankRequire["SCD343"]; + //ClipStuff + ClipName = "SCD343Clip"; + ClipPickupName["SCD343Clip"] = "some SCD343 Clip Boxes"; + ShowsClipInHud = 1; + ClipReloadTime = 4; + ClipReturn = 1; + InitialClips = 8; + // + RankRequire = $TWM2::RankRequire["SCD343"]; - //Challenges - HasChallenges = 1; - ChallengeCt = 9; - Challenge[1] = "SCD343 Killer\t50\t100\tNone"; - Challenge[2] = "SCD343 Extremist\t100\t150\tNone"; - Challenge[3] = "SCD343 Expert\t250\t250\tNone"; - Challenge[4] = "SCD343 Master\t500\t500\tNone"; - Challenge[5] = "SCD343 God\t1000\t1000\tNone"; - Challenge[6] = "SCD343 Bronze Commendation\t2500\t10000\tNone"; - Challenge[7] = "SCD343 Silver Commendation\t5000\t25000\tNone"; - Challenge[8] = "SCD343 Gold Commendation\t10000\t50000\tNone"; - Challenge[9] = "SCD343 Titan Commendation\t25000\t75000\tNone"; - GunName = "SCD343 Shotgun"; - // + //Challenges + HasChallenges = 1; + ChallengeCt = 9; + Challenge[1] = "SCD343 Killer\t50\t100\tNone"; + Challenge[2] = "SCD343 Extremist\t100\t150\tNone"; + Challenge[3] = "SCD343 Expert\t250\t250\tNone"; + Challenge[4] = "SCD343 Master\t500\t500\tNone"; + Challenge[5] = "SCD343 God\t1000\t1000\tNone"; + Challenge[6] = "SCD343 Bronze Commendation\t2500\t10000\tNone"; + Challenge[7] = "SCD343 Silver Commendation\t5000\t25000\tNone"; + Challenge[8] = "SCD343 Gold Commendation\t10000\t50000\tNone"; + Challenge[9] = "SCD343 Titan Commendation\t25000\t75000\tNone"; + GunName = "SCD343 Shotgun"; + // - projectileSpread = 6.0 / 1000.0; + projectileSpread = 10.0 / 1000.0; - stateName[0] = "Activate"; - stateTransitionOnTimeout[0] = "ActivateReady"; - stateTimeoutValue[0] = 0.5; - stateSequence[0] = "Activate"; - stateSound[0] = ChaingunSwitchSound; + stateName[0] = "Activate"; + stateTransitionOnTimeout[0] = "ActivateReady"; + stateTimeoutValue[0] = 0.5; + stateSequence[0] = "Activate"; + stateSound[0] = ChaingunSwitchSound; - stateName[1] = "ActivateReady"; - stateTransitionOnLoaded[1] = "Ready"; - stateTransitionOnNoAmmo[1] = "NoAmmo"; + stateName[1] = "ActivateReady"; + stateTransitionOnLoaded[1] = "Ready"; + stateTransitionOnNoAmmo[1] = "NoAmmo"; - stateName[2] = "Ready"; - stateTransitionOnNoAmmo[2] = "NoAmmo"; - stateTransitionOnTriggerDown[2] = "CheckWet"; + stateName[2] = "Ready"; + stateTransitionOnNoAmmo[2] = "NoAmmo"; + stateTransitionOnTriggerDown[2] = "CheckWet"; - stateName[3] = "Fire"; - stateTransitionOnTimeout[3] = "Reload"; - stateTimeoutValue[3] = 0.0001; - 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[3] = "Fire"; + stateTransitionOnTimeout[3] = "Reload"; + stateTimeoutValue[3] = 0.0001; + 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"; - stateTransitionOnNoAmmo[4] = "NoAmmo"; - stateTransitionOnTimeout[4] = "Ready"; - stateTimeoutValue[4] = 0.5; - stateAllowImageChange[4] = false; - stateSequence[4] = "Reload"; + stateName[4] = "Reload"; + stateTransitionOnNoAmmo[4] = "NoAmmo"; + stateTransitionOnTimeout[4] = "Ready"; + stateTimeoutValue[4] = 0.5; + stateAllowImageChange[4] = false; + stateSequence[4] = "Reload"; - stateName[5] = "NoAmmo"; - stateTransitionOnAmmo[5] = "Reload"; - stateSequence[5] = "NoAmmo"; - stateTransitionOnTriggerDown[5] = "DryFire"; + stateName[5] = "NoAmmo"; + stateTransitionOnAmmo[5] = "Reload"; + stateSequence[5] = "NoAmmo"; + stateTransitionOnTriggerDown[5] = "DryFire"; - stateName[6] = "DryFire"; - stateSound[6] = ChaingunDryFireSound; - stateTimeoutValue[6] = 1.0; - stateTransitionOnTimeout[6] = "NoAmmo"; + 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[7] = "WetFire"; + stateSound[7] = ChaingunDryFireSound; + stateTimeoutValue[7] = 1.0; + stateTransitionOnTimeout[7] = "Ready"; - stateName[8] = "CheckWet"; - stateTransitionOnWet[8] = "WetFire"; - stateTransitionOnNotWet[8] = "Fire"; + stateName[8] = "CheckWet"; + stateTransitionOnWet[8] = "WetFire"; + stateTransitionOnNotWet[8] = "Fire"; }; -datablock ItemData(SCD343) -{ - className = Weapon; - catagory = "Spawn Items"; - shapeFile = "weapon_plasma.dts"; - image = SCD343Image; - mass = 1.0; - elasticity = 0.2; - friction = 0.6; - pickupRadius = 2; - pickUpName = "a SCD343"; +datablock ItemData(SCD343) { + className = Weapon; + catagory = "Spawn Items"; + shapeFile = "weapon_plasma.dts"; + image = SCD343Image; + mass = 1.0; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; + pickUpName = "a SCD343"; - computeCRC = true; - emap = true; + computeCRC = true; + emap = true; }; function SCD343Image::onMount(%this,%obj,%slot) { - Parent::onMount(%this, %obj, %slot); + Parent::onMount(%this, %obj, %slot); } function SCD343Image::onFire(%data,%obj,%slot) { - serverPlay3D(ShotgunFireSound, %obj.getPosition()); + serverPlay3D(ShotgunFireSound, %obj.getPosition()); - %obj.applyKick(-250); - %obj.decInventory(%data.ammo,1); + %obj.applyKick(-250); + %obj.decInventory(%data.ammo,1); - %vector = %obj.getMuzzleVector(%slot); - %mp = %obj.getMuzzlePoint(%slot); + %vector = %obj.getMuzzleVector(%slot); + %mp = %obj.getMuzzlePoint(%slot); for (%i=0; %i < 16; %i++) { - %x = (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; - %mat = MatrixCreateFromEuler(%x @ " " @ %y @ " " @ %z); - %newvector = MatrixMulVector(%mat, %vector); + %x = (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; + %mat = MatrixCreateFromEuler(%x @ " " @ %y @ " " @ %z); + %newvector = MatrixMulVector(%mat, %vector); - %p = new (%data.projectileType)() { - dataBlock = %data.projectile; - initialDirection = %newvector; - initialPosition = %mp; - sourceObject = %obj; - damageFactor = 1; - sourceSlot = %slot; - }; + %p = new (%data.projectileType)() { + dataBlock = %data.projectile; + initialDirection = %newvector; + initialPosition = %mp; + sourceObject = %obj; + damageFactor = 1; + sourceSlot = %slot; + }; - %p.WeaponImageSource = %data.getName(); - } - if(%obj.inv[SCD343Ammo] == 0) { //Added Phantom139, TWM2 - AttemptReload(%data, %obj, %slot); - } -} + %p.WeaponImageSource = %data.getName(); + } + if(%obj.inv[SCD343Ammo] == 0) { //Added Phantom139, TWM2 + AttemptReload(%data, %obj, %slot); + } +} \ No newline at end of file diff --git a/scripts/weapons/Shotguns/Wp400.cs b/scripts/weapons/Shotguns/Wp400.cs index 65b1c0a..b34a378 100644 --- a/scripts/weapons/Shotguns/Wp400.cs +++ b/scripts/weapons/Shotguns/Wp400.cs @@ -1,165 +1,161 @@ -datablock TracerProjectileData(Wp400Pellet) -{ - doDynamicClientHits = true; +datablock TracerProjectileData(Wp400Pellet) { + doDynamicClientHits = true; - directDamage = (0.075 * 1.5); - directDamageType = $DamageType::Wp400; - explosion = "ChaingunExplosion"; - splash = ChaingunSplash; - HeadMultiplier = 1.2; - LegsMultiplier = 0.75; + directDamage = 0.1125; + directDamageType = $DamageType::Wp400; + explosion = "ChaingunExplosion"; + splash = ChaingunSplash; + HeadMultiplier = 1.2; + LegsMultiplier = 0.75; - longRangeMultiplier = 0.75; - kickBackStrength = 0.0; - sound = ChaingunProjectile; - - ImageSource = "Wp400Image"; + longRangeMultiplier = 0.75; + kickBackStrength = 0.0; + sound = ChaingunProjectile; - dryVelocity = 1500.0; - wetVelocity = 1000.0; - velInheritFactor = 0.0; - fizzleTimeMS = 1000; - lifetimeMS = 1000; - explodeOnDeath = false; - reflectOnWaterImpactAngle = 0.0; - explodeOnWaterImpact = false; - deflectionOnWaterImpact = 0.0; - fizzleUnderwaterMS = 3000; + ImageSource = "Wp400Image"; - tracerLength = 5.0; - tracerAlpha = false; - tracerMinPixels = 6; - tracerColor = 211.0/255.0 @ " " @ 215.0/255.0 @ " " @ 120.0/255.0 @ " 0.75"; + dryVelocity = 1500.0; + wetVelocity = 1000.0; + velInheritFactor = 0.0; + 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[1] = "special/tracercross"; tracerWidth = 0.09; - crossSize = 0.20; - crossViewAng = 0.990; - renderCross = true; + crossSize = 0.20; + crossViewAng = 0.990; + renderCross = true; - decalData[0] = ChaingunDecal1; - decalData[1] = ChaingunDecal2; - decalData[2] = ChaingunDecal3; - decalData[3] = ChaingunDecal4; - decalData[4] = ChaingunDecal5; - decalData[5] = ChaingunDecal6; + decalData[0] = ChaingunDecal1; + decalData[1] = ChaingunDecal2; + decalData[2] = ChaingunDecal3; + decalData[3] = ChaingunDecal4; + decalData[4] = ChaingunDecal5; + decalData[5] = ChaingunDecal6; }; //-------------------------------------------------------------------------- // Ammo //-------------------------------------- -datablock ItemData(Wp400Ammo) -{ - className = Ammo; - catagory = "Ammo"; - shapeFile = "ammo_chaingun.dts"; - mass = 1; - elasticity = 0.2; - friction = 0.6; - pickupRadius = 2; +datablock ItemData(Wp400Ammo) { + className = Ammo; + catagory = "Ammo"; + shapeFile = "ammo_chaingun.dts"; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; pickUpName = "some Wp400 rounds"; - computeCRC = true; - + computeCRC = true; }; //-------------------------------------------------------------------------- // Weapon //-------------------------------------- -datablock ShapeBaseImageData(Wp400Image) -{ - className = WeaponImage; - shapeFile = "weapon_plasma.dts"; - item = Wp400; - ammo = Wp400Ammo; - projectile = Wp400Pellet; - projectileType = TracerProjectile; - emap = true; - mass = 20; +datablock ShapeBaseImageData(Wp400Image) { + className = WeaponImage; + shapeFile = "weapon_plasma.dts"; + item = Wp400; + ammo = Wp400Ammo; + projectile = Wp400Pellet; + projectileType = TracerProjectile; + emap = true; + mass = 20; - casing = ShellDebris; - 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 - shellExitVariance = 10.0; - shellVelocity = 4.0; + casing = ShellDebris; + 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 + shellExitVariance = 10.0; + shellVelocity = 4.0; - //ClipStuff - ClipName = "Wp400Clip"; - ClipPickupName["Wp400Clip"] = "some Wp400 Clip Boxes"; - ShowsClipInHud = 1; - ClipReloadTime = 4; - ClipReturn = 5; - InitialClips = 6; - // - 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"; - // + //ClipStuff + ClipName = "Wp400Clip"; + ClipPickupName["Wp400Clip"] = "some Wp400 Clip Boxes"; + ShowsClipInHud = 1; + ClipReloadTime = 7; + ClipReturn = 5; + InitialClips = 6; + // + RankRequire = $TWM2::RankRequire["Wp400"]; - 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"; - stateTransitionOnTimeout[0] = "ActivateReady"; - stateTimeoutValue[0] = 0.3; - stateSequence[0] = "Activate"; - stateSound[0] = ChaingunSwitchSound; + projectileSpread = 15.0 / 1000.0; - stateName[1] = "ActivateReady"; - stateTransitionOnLoaded[1] = "Ready"; - stateTransitionOnNoAmmo[1] = "NoAmmo"; + stateName[0] = "Activate"; + stateTransitionOnTimeout[0] = "ActivateReady"; + stateTimeoutValue[0] = 0.3; + stateSequence[0] = "Activate"; + stateSound[0] = ChaingunSwitchSound; - stateName[2] = "Ready"; - stateTransitionOnNoAmmo[2] = "NoAmmo"; - stateTransitionOnTriggerDown[2] = "CheckWet"; + stateName[1] = "ActivateReady"; + stateTransitionOnLoaded[1] = "Ready"; + stateTransitionOnNoAmmo[1] = "NoAmmo"; - stateName[3] = "Fire"; - stateTransitionOnTimeout[3] = "Reload"; - stateTimeoutValue[3] = 0.0001; - stateFire[3] = true; - stateEjectShell[3] = true; - stateRecoil[3] = LightRecoil; - stateAllowImageChange[3] = false; - stateScript[3] = "onFire"; - stateSound[3] = SniperFireSound; + stateName[2] = "Ready"; + stateTransitionOnNoAmmo[2] = "NoAmmo"; + stateTransitionOnTriggerDown[2] = "CheckWet"; - stateName[4] = "Reload"; - stateTransitionOnNoAmmo[4] = "NoAmmo"; - stateTransitionOnTimeout[4] = "Ready"; - stateTimeoutValue[4] = 0.9; - stateAllowImageChange[4] = false; - stateSequence[4] = "Reload"; + stateName[3] = "Fire"; + stateTransitionOnTimeout[3] = "Reload"; + stateTimeoutValue[3] = 0.0001; + stateFire[3] = true; + stateEjectShell[3] = true; + stateRecoil[3] = LightRecoil; + stateAllowImageChange[3] = false; + stateScript[3] = "onFire"; + stateSound[3] = SniperFireSound; - stateName[5] = "NoAmmo"; - stateTransitionOnAmmo[5] = "Reload"; - stateSequence[5] = "NoAmmo"; - stateTransitionOnTriggerDown[5] = "DryFire"; + stateName[4] = "Reload"; + stateTransitionOnNoAmmo[4] = "NoAmmo"; + stateTransitionOnTimeout[4] = "Ready"; + stateTimeoutValue[4] = 0.5; + stateAllowImageChange[4] = false; + stateSequence[4] = "Reload"; - stateName[6] = "DryFire"; - stateSound[6] = ChaingunDryFireSound; - stateTimeoutValue[6] = 1.0; - stateTransitionOnTimeout[6] = "NoAmmo"; + stateName[5] = "NoAmmo"; + stateTransitionOnAmmo[5] = "Reload"; + stateSequence[5] = "NoAmmo"; + stateTransitionOnTriggerDown[5] = "DryFire"; - stateName[7] = "WetFire"; - stateSound[7] = ChaingunDryFireSound; - stateTimeoutValue[7] = 1.0; - stateTransitionOnTimeout[7] = "Ready"; + stateName[6] = "DryFire"; + stateSound[6] = ChaingunDryFireSound; + stateTimeoutValue[6] = 1.0; + stateTransitionOnTimeout[6] = "NoAmmo"; - stateName[8] = "CheckWet"; - stateTransitionOnWet[8] = "WetFire"; - stateTransitionOnNotWet[8] = "Fire"; + stateName[7] = "WetFire"; + stateSound[7] = ChaingunDryFireSound; + stateTimeoutValue[7] = 1.0; + stateTransitionOnTimeout[7] = "Ready"; + + stateName[8] = "CheckWet"; + stateTransitionOnWet[8] = "WetFire"; + stateTransitionOnNotWet[8] = "Fire"; }; datablock ItemData(Wp400)