November Changes

3.9.2 Balancing Pass, Armor System Adjustments, More Zombie Types Added
This commit is contained in:
Robert Fritzen 2017-11-30 19:43:22 -06:00
parent 19be242dfd
commit 0954efcdc4
58 changed files with 7602 additions and 7354 deletions

129
README.md
View file

@ -83,6 +83,10 @@ PLEASE NOTE: I've moved all old changelogs into the version_history folder. This
* Replaced the acid cannon with an anti-tank photon cannon * Replaced the acid cannon with an anti-tank photon cannon
* Zombie lords will now preferential target enemy ground armor before infantry, and engage their photon cannon on targets * Zombie lords will now preferential target enemy ground armor before infantry, and engage their photon cannon on targets
* Zombie lords can now activate a defensive barrier to protect themselves and allies from damage temporarily... enjoy this new rage inducing mechanic :) * Zombie lords can now activate a defensive barrier to protect themselves and allies from damage temporarily... enjoy this new rage inducing mechanic :)
* Demon
* Increased resistance to fire damage to 1000% from 3%
* Demon Zombies now light players on fire instead of infecting them on collision
* Players will be knocked back with a higher force when hit by demon zombies
* Air Rapier * Air Rapier
* Modified the damage scalar of missiles to be a OHK on rapier zombies * Modified the damage scalar of missiles to be a OHK on rapier zombies
* Added Boss Proficiency * Added Boss Proficiency
@ -112,7 +116,132 @@ PLEASE NOTE: I've moved all old changelogs into the version_history folder. This
* Re-did his ground detection script to "hopefully" eradicate those funny moments when he suicide bombs the ground, ending the fight * Re-did his ground detection script to "hopefully" eradicate those funny moments when he suicide bombs the ground, ending the fight
* Lord Vardison * Lord Vardison
* Fixed an erraneous text prompt that would appear when the shadow rift detonated outside of WTF difficulty stating vardison had healed when in fact he did not * Fixed an erraneous text prompt that would appear when the shadow rift detonated outside of WTF difficulty stating vardison had healed when in fact he did not
* General Enhancements
* Modified the vote logic in admin.cs to clean up a ton of redundant if/else paths
* Re-did the player collision logic in player.cs to make things a whole lot easier to modify in the future
* Did a pass through all of the weapon files, cleaning the code up and making each unique weapon have its own damage type.
* Some projectiles are still tied to bosses and killstreaks, these were not altered.
* For the updated damage types, death messages were added to the system such that PvP kills will be more easily tracked now.
* Gameplay Changes * Gameplay Changes
* The Helljump 'Oh Lordy' modifier has been changed to 'Reduces the cooldown time of the Zombie Lord's Photon Cannon by 50%'. * The Helljump 'Oh Lordy' modifier has been changed to 'Reduces the cooldown time of the Zombie Lord's Photon Cannon by 50%'.
* The RSA Laser Rifle has been renamed to the 'UR-22 Laser Rifle'
* General Bug Fixes * General Bug Fixes
* Addressed the issue when gaining more than 1 million EXP that would result in your total EXP being reset by the difference between 1 million exp and your current exp. * Addressed the issue when gaining more than 1 million EXP that would result in your total EXP being reset by the difference between 1 million exp and your current exp.
* Fixed the bug in which picking up weapon clips with an empty weapon would not automatically trigger weapon reload on that weapon.
* Fixed a typo in the damage types for the M1700 shotgun
* Weapon Balancing Pass (3.9.2)
* The 3.9.2 content update is bringing with it a full balance pass on the entire mod's arsenal, targeting for the most part weapons that have been underused in my personal opinion.
* Most of the changes are power up changes (As is my prefered choice of balancing), but a few high end outliers have been tuned down just a bit.
* Melee Weapons
* This weapon class is one that needed a pass the most, as soon as players get the blade of vengenace, they drop every other choice and only use the BoV, this is unintended
* The balance pass here should help to make the other two choices a little more enticing without ruining the power of the BoV for the players loyal to it.
* Blade of Vengenace
* Reduced damage from 100.0 to 0.9 (No longer OHKs in PvP)
* Assassination is still a OHK
* Added a 100.0 damage modifier to all zombie types for Blade of Vengeance
* This includes player zombies.
* Removed the clause that bosses could not be damaged by the Blade of Vengeance
* Bosses now take 65HP damage from the blade.
* Plasmasaber
* Removed the damage flag on player type
* Now deals a flat damage of 5.0 to all targets (OHK to all players, low tier zombies), 500HP damage to bosses.
* Sidearms
* At the moment, the two statistical outliers in the pool (Crimson Hawk and Pulse Phaser) feel close to being perfect, some minor tuning will help get them there.
* Crimson Hawk Pistol
* Trevor Haliade's personal sidearm is still pretty high on the lethality end of the spectrum.
* Reduced pulse damage from 0.23 to 0.17
* I also tweaked with the weapon's range a bit.
* Reduced the projectile life from 1 second to 0.7 seconds
* Added a 1.9 damage modifier to all zombie types
* This works out to ~0.32 damage per shot which is about a 40% damage increase against zombies
* ES-77 Pulse Phaser
* Last time I touched this weapon, I nearly started I riot amongst the entire Tribes 2 community, lol.
* After looking at how this weapon has performed between 3.3 and 3.9.1, I feel it needs a slight bump.
* Increased the base damage of the pulse phaser from 0.2 to 0.26
* Increased the damage of the phaser blade pulse from 0.21 to 0.3
* The strength of this weapon was it's incredible reach and long lasting projectile life time, this has been toned down a little
* Reduced the projectile lifetime from 3 seconds to 1.5 seconds
* Increased the projectile base speed from 120 to 160.
* The end result with be a stronger pulse phaser at the close range that loses out on the far reach aspect.
* Sniper Rifles
* The sniper rifle class has always been one of the stronger ones in TWM2, and I feel no reason to neuter it now.
* The goal of this update is to tweak the other sniper options to add more viable choices instead of just dropping the R700 as soon as you get it.
* G17 Sniper Rifle
* This heavy marksman rifle for the longest time has stood in the shadow of the almighty R700, I figured it's time to power it up a bit
* Increased the direct impact damage of the bullet from 0.25 to 0.55
* Reduced the round rechamber time from 1.1 seconds to 0.7 seconds
* M1 Sniper Rifle
* As with the G17, the M1 typically goes into the bin once players unlock the R700, this should still be a viable choice in the arsenal
* Increased the direct impact damage from 0.3 to 0.65
* Reduced the clip reload time from 5 seconds to 4 seconds
* Reduced the round rechamber time from 1.1 seconds to 0.9 seconds
* R700
* The monstrous R700 sniper rifle has for the most part, gone completely unchallenged since the release of the mod
* This weapon is about to get a lesson in Newton's Law of Gravity.
* Changed the projectile type from Tracer to Grenade
* Bullets will now drop as they travel, reducing the effective range with the same look angle.
* Players will now need to aim their shots based on distance too.
* Assault Rifles
* Assault Rifles have always felt good in TWM2, the strong jack of all trade weapons good for most ranges, while being outperformed in the range of other tools
* Only minor tweaking is needed here to help some of the unused tools get up to speed
* G-41
* For the most part, this rifle has been collecting dust in the bin of unused weapons due to other tools such as the S3 and R700 in the pool
* This weapon has been in need of a long coming tweak of power to make it a more viable choice
* Increased the bullet impact damage from 0.3 to 0.44
* Reduced the round rechamber time from 0.3 seconds to 0.15 seconds
* Reduced the spread factor of the weapon from 3:1000 to 2:1000
* M4A1
* This jack of all trades weapon currently sits as a power outlier in the assault rifle bin due to the various attachments it has
* Coupled with a high base round damage, this weapon would have turned into the go-to gun without adjustments
* Reduced the damage of the rounds from 0.09 to 0.085
* Increased the clip reload time from 4 seconds to 6 seconds
* Pulse Rifle
* As it stands right now, the pulse rifle is one of the weakest weapons in the mod, with the only advantage being the fastest and most accurate semi-auto in the pool
* With the enhancements to the G-41, the pulse rifle will also follow suit, which should make it a more viable choice in mid to long range fights
* Increased the shot damage from 0.2 to 0.38
* Reduced the round rechamber time from 0.3 seconds to 0.1 seconds
* S3 Rifle
* The weapon every player starts with in the mod has remained untouched since the first release of the mod.
* However, after a long hard thought on this one, I feel as if this weapon has actually been acting more like a sniper rifle than a semi-auto.
* With the changes to the G-41 and the Pulse Rifle however, the S3 still needs to be a viable tool, otherwise it will fall flat in the endgame
* The following adjustments have been made
* Reduced the direct impact damage from 0.7 to 0.5
* Reduced the round rechamber time from 0.9 seconds to 0.4 seconds
* Removed the delay between round fire and round rechambering (Shaving another 0.2 seconds off the rechamber time)
* Reduced the spread factor from 3:1000 to 2.5:1000
* Shotguns
* The buckshot tools of TWM2 have always been in a good place in terms of PvP, however I've noticed a sad trend of these being tossed aside in PvE aspects
* This update will mainly focus on tuning the damage up a bit in PvE, but balancing the range and spread for PvP.
* M1700
* The mod's first shotgun is a powerhouse in close range, with a heavy hitting OHK lurking for anyone foolish enough to come close.
* It's a bit strong in PvP right now, but it doesn't do quite enough in PvE
* Increased the pellet damage from 0.1125 to 0.13
* Increased the clip reload time from 2 seconds to 3 seconds
* Increased the damage modifier against zombies from 2.0/3.0 (Depending on the type) to a flat 4.5 across all types
* Cut the projectile lifetime from 1 second to 0.15 seconds
* Wp-400
* The semi-auto powerhouse shotgun is also getting some tuning done on it.
* Reduced the projectile lifetime from 1 second to 0.1 seconds (Slightly less range than the M1700)
* Increased the spread factor from 10:1000 to 15:1000
* Reduced the round rechamber time from 0.9 to 0.5
* Added a damage factor of 4.0 to all zombie types
* Increased the clip reload time from 4 seconds to 7 seconds
* SCD-343
* This monstrous one-shot machine has been the bane of my close quarters players since I unveiled this weapon.
* I have no plans to change this aspect, but to line it up with the other shotguns, I've made some tuning adjustments
* Increased the pellet damage from 0.1125 to 0.17
* Reduced the projectile lifetime from 1 second to 0.1 seconds
* Increased the spread factor from 6:1000 to 10:1000
* Added a damage factor of 4.0 to all zombie types
* SA-2400
* The SA-2400 is the wildcard of the shotgun class, firing slugs at a rapid speed versus standard spreads
* This weapon has been highly ineffective against zombie combatants, but no longer
* Reduced the time between slug shots from 0.2 seconds to 0.14 seconds
* Added a damage factor of 5.0 to all zombie types
* Reduced the projectile lifetime from 3 seconds (wtf?) to 0.2 seconds
* Model-1887
* The high end of the shotgun spectrum is the 1887, although a statisical look at the weapon really revealed that it was the weakest numerically
* Increased the pellet damage from 0.096 to 0.11
* Increased the number of pellets from 14 to 18
* Reduced the projectile lifetime from 0.5 s to 0.15 seconds
* Added a damage factor of 4.0 to all zombie types

View file

@ -1,6 +1,5 @@
//DBs //DBs
datablock ParticleData(GhostflameParticle) datablock ParticleData(GhostflameParticle) {
{
dragCoeffiecient = 0.0; dragCoeffiecient = 0.0;
gravityCoefficient = -0.1; gravityCoefficient = -0.1;
inheritedVelFactor = 0.1; inheritedVelFactor = 0.1;
@ -24,8 +23,7 @@ datablock ParticleData(GhostflameParticle)
times[2] = 1.0; times[2] = 1.0;
}; };
datablock ParticleEmitterData(GhostflameEmitter) datablock ParticleEmitterData(GhostflameEmitter) {
{
ejectionPeriodMS = 3; ejectionPeriodMS = 3;
periodVarianceMS = 0; periodVarianceMS = 0;
@ -39,8 +37,7 @@ datablock ParticleEmitterData(GhostflameEmitter)
particles = "GhostflameParticle"; particles = "GhostflameParticle";
}; };
datablock LinearFlareProjectileData(GhostFlameboltMain) datablock LinearFlareProjectileData(GhostFlameboltMain) {
{
projectileShapeName = "turret_muzzlepoint.dts"; projectileShapeName = "turret_muzzlepoint.dts";
scale = "1.0 1.0 1.0"; scale = "1.0 1.0 1.0";
faceViewer = true; faceViewer = true;
@ -74,7 +71,6 @@ datablock LinearFlareProjectileData(GhostFlameboltMain)
size[1] = 0.5; size[1] = 0.5;
size[2] = 0.1; size[2] = 0.1;
numFlares = 35; numFlares = 35;
flareColor = "1 0.18 0.03"; flareColor = "1 0.18 0.03";
flareModTexture = "flaremod"; flareModTexture = "flaremod";
@ -89,8 +85,7 @@ datablock LinearFlareProjectileData(GhostFlameboltMain)
lightColor = "0.94 0.03 0.12"; lightColor = "0.94 0.03 0.12";
}; };
datablock ParticleData(NapalmExplosionParticle) datablock ParticleData(NapalmExplosionParticle) {
{
dragCoefficient = 2; dragCoefficient = 2;
gravityCoefficient = 0.2; gravityCoefficient = 0.2;
inheritedVelFactor = 0.2; inheritedVelFactor = 0.2;
@ -104,8 +99,7 @@ datablock ParticleData(NapalmExplosionParticle)
sizes[1] = 2; sizes[1] = 2;
}; };
datablock ParticleEmitterData(NapalmExplosionEmitter) datablock ParticleEmitterData(NapalmExplosionEmitter) {
{
ejectionPeriodMS = 7; ejectionPeriodMS = 7;
periodVarianceMS = 0; periodVarianceMS = 0;
ejectionVelocity = 5; ejectionVelocity = 5;
@ -119,8 +113,7 @@ datablock ParticleEmitterData(NapalmExplosionEmitter)
particles = "NapalmExplosionParticle"; particles = "NapalmExplosionParticle";
}; };
datablock ExplosionData(NapalmExplosion) datablock ExplosionData(NapalmExplosion) {
{
explosionShape = "effect_plasma_explosion.dts"; explosionShape = "effect_plasma_explosion.dts";
soundProfile = plasmaExpSound; soundProfile = plasmaExpSound;
particleEmitter = NapalmExplosionEmitter; particleEmitter = NapalmExplosionEmitter;
@ -137,8 +130,7 @@ datablock ExplosionData(NapalmExplosion)
//-------------------------------------- //--------------------------------------
//Napalm projectile //Napalm projectile
//-------------------------------------- //--------------------------------------
datablock LinearProjectileData(NapalmShot) datablock LinearProjectileData(NapalmShot) {
{
projectileShapeName = "mortar_projectile.dts"; projectileShapeName = "mortar_projectile.dts";
emitterDelay = -1; emitterDelay = -1;
directDamage = 0.0; directDamage = 0.0;
@ -149,9 +141,9 @@ datablock LinearProjectileData(NapalmShot)
kickBackStrength = 3000; kickBackStrength = 3000;
explosion = "NapalmExplosion"; explosion = "NapalmExplosion";
// underwaterExplosion = "UnderwaterNapalmExplosion"; // underwaterExplosion = "UnderwaterNapalmExplosion";
velInheritFactor = 0.5; velInheritFactor = 0.5;
// splash = NapalmSplash; // splash = NapalmSplash;
depthTolerance = 10.0; // depth at which it uses underwater explosion depthTolerance = 10.0; // depth at which it uses underwater explosion
baseEmitter = MissileFireEmitter; baseEmitter = MissileFireEmitter;
@ -182,11 +174,9 @@ datablock LinearProjectileData(NapalmShot)
explodeOnWaterImpact = true; explodeOnWaterImpact = true;
deflectionOnWaterImpact = 0.0; deflectionOnWaterImpact = 0.0;
fizzleUnderwaterMS = 5000; fizzleUnderwaterMS = 5000;
}; };
datablock PlayerData(GhostFireArmor) : MediumPlayerDamageProfile datablock PlayerData(GhostFireArmor) : MediumPlayerDamageProfile {
{
emap = true; emap = true;
className = Armor; className = Armor;
@ -432,10 +422,12 @@ function StartGhostFire(%pos) {
} }
function GOFLookforTarget(%Ghost) { function GOFLookforTarget(%Ghost) {
if(!isObject(%Ghost)) if(!isObject(%Ghost)) {
return; return;
if(%Ghost.getState() $= "dead") }
if(%Ghost.getState() $= "dead") {
return; return;
}
%pos = %Ghost.getposition(); %pos = %Ghost.getposition();
%wbpos = %Ghost.getworldboxcenter(); %wbpos = %Ghost.getworldboxcenter();
%count = ClientGroup.getCount(); %count = ClientGroup.getCount();
@ -476,7 +468,6 @@ function GOFPerformMove(%ghost,%closestClient,%closestDistance) {
if(%ghost.hastarget != 1){ if(%ghost.hastarget != 1){
%ghost.hastarget = 1; %ghost.hastarget = 1;
} }
//target is coming in for an easy kill, lets tele //target is coming in for an easy kill, lets tele
if(%closestDistance < 15) { if(%closestDistance < 15) {
GOFAttack_FUNC("BurnTeleport", %ghost); GOFAttack_FUNC("BurnTeleport", %ghost);
@ -499,8 +490,9 @@ function GOFPerformMove(%ghost,%closestClient,%closestDistance) {
%x = Getword(%vector,0); %x = Getword(%vector,0);
%y = Getword(%vector,1); %y = Getword(%vector,1);
%z = Getword(%vector,2); %z = Getword(%vector,2);
if(%z >= 600) if(%z >= 600) {
%upvec = (%upvec * 5); %upvec = (%upvec * 5);
}
%vector = %x@" "@%y@" "@%upvec; %vector = %x@" "@%y@" "@%upvec;
%ghost.applyImpulse(%pos, %vector); %ghost.applyImpulse(%pos, %vector);
} }

View file

@ -10,10 +10,9 @@ function GenerateChallengesMenu(%client, %tag, %index) {
messageClient( %client, 'SetLineHud', "", %tag, %index, "<font:arial:16>Select a category to view challenges:"); messageClient( %client, 'SetLineHud', "", %tag, %index, "<font:arial:16>Select a category to view challenges:");
%index++; %index++;
// //
messageClient( %client, 'SetLineHud', "", %tag, %index, "<font:arial:14><a:gamelink\tOtherTasksSub\t6>PGD Challenges (Daily/Weekly/Monthly)</a>"); messageClient( %client, 'SetLineHud', "", %tag, %index, "<font:arial:14><a:gamelink\tOtherTasksSub\t1>PGD Challenges (Daily/Weekly/Monthly)</a>");
%index++; %index++;
for(%i = 1; $Challenge::Category[%i] !$= ""; %i++) { for(%i = 2; $Challenge::Category[%i] !$= ""; %i++) {
if(%i != 6) {
%categoryReq = getField($Challenge::Category[%i], 2); %categoryReq = getField($Challenge::Category[%i], 2);
if(getWord(%categoryReq, 0) $= "Officer") { if(getWord(%categoryReq, 0) $= "Officer") {
%offLevel = getWord(%categoryReq, 1); %offLevel = getWord(%categoryReq, 1);
@ -26,6 +25,16 @@ function GenerateChallengesMenu(%client, %tag, %index) {
%index++; %index++;
} }
} }
else if(getWord(%categoryReq, 0) $= "MaxRank") {
if(%scriptController.officer >= 15 && %scriptController.millionxp >= 3) {
messageClient( %client, 'SetLineHud', "", %tag, %index, "<font:arial:14><a:gamelink\tOtherTasksSub\t"@%i@">"@getField($Challenge::Category[%i], 0)@"</a>: "@getField($Challenge::Category[%i], 1));
%index++;
}
else {
messageClient( %client, 'SetLineHud', "", %tag, %index, "<font:arial:14><color:BB0000>=== CLASSIFIED: CONTINUE PLAYING TWM2 TO UNLOCK ===");
%index++;
}
}
else { else {
if(%categoryReq == -1) { if(%categoryReq == -1) {
messageClient( %client, 'SetLineHud', "", %tag, %index, "<font:arial:14><a:gamelink\tOtherTasksSub\t"@%i@">"@getField($Challenge::Category[%i], 0)@"</a>: "@getField($Challenge::Category[%i], 1)); messageClient( %client, 'SetLineHud', "", %tag, %index, "<font:arial:14><a:gamelink\tOtherTasksSub\t"@%i@">"@getField($Challenge::Category[%i], 0)@"</a>: "@getField($Challenge::Category[%i], 1));
@ -43,12 +52,11 @@ function GenerateChallengesMenu(%client, %tag, %index) {
} }
} }
} }
}
return %index; return %index;
} }
function GenerateChallengeSubMenu(%client, %subMenu, %tag, %index) { function GenerateChallengeSubMenu(%client, %subMenu, %tag, %index) {
if(%subMenu == 6) { if(%subMenu == 1) {
return GenerateDWMChallengeMenu(%client, %tag, %index); return GenerateDWMChallengeMenu(%client, %tag, %index);
} }

File diff suppressed because it is too large Load diff

View file

@ -17,6 +17,23 @@ $Zombie::detectDist = 9999;
//$Zombie::FallDieHeight: The minimum altitude a zombie may be before being script killed //$Zombie::FallDieHeight: The minimum altitude a zombie may be before being script killed
$Zombie::FallDieHeight = -500; $Zombie::FallDieHeight = -500;
//$Zombie::BaseDamage: The default damage taken when touching a zombie.
$Zombie::BaseDamage = 0.2;
//$Zombie::TypeDamage[#]: Overrides the BaseDamage with this value
$Zombie::TypeDamage[4] = 0.4;
$Zombie::TypeDamage[5] = 0.4;
$Zombie::TypeDamage[6] = 0.5;
$Zombie::TypeDamage[9] = 0.3;
$Zombie::TypeDamage[10] = 0.3;
$Zombie::TypeDamage[12] = 0.5;
$Zombie::TypeDamage[15] = 0.6;
//$Zombie::InfectOnCollide[#]: Special flag to determine if infection is applied upon contact, by default, this is true
//$Zombie::TypeInfectedMultiplier[#]: A damage multiplier to apply to infected targets, ie: Total Damage = $Zombie::TypeDamage[#] * $Zombie::TypeInfectedMultiplier[#]
// when the player taking damage is already infected.
$Zombie::TypeInfectedMultiplier[1] = 1.5;
//$Zombie::BaseSpeed: The default speed setting on zombies, any zombie that does not have a TypeSpeed var. set will default to the BaseSpeed //$Zombie::BaseSpeed: The default speed setting on zombies, any zombie that does not have a TypeSpeed var. set will default to the BaseSpeed
$Zombie::BaseSpeed = 150; $Zombie::BaseSpeed = 150;
//$Zombie::TypeSpeed[#]: The speed of a specific zombie type instance, overrides BaseSpeed for that specific type //$Zombie::TypeSpeed[#]: The speed of a specific zombie type instance, overrides BaseSpeed for that specific type
@ -127,9 +144,7 @@ function TWM2Lib_Zombie_Core(%functionName, %arg1, %arg2, %arg3, %arg4) {
%y = getWord(%arg1.direction, 0) * -1; %y = getWord(%arg1.direction, 0) * -1;
%vec = %x @ SPC @ %y @ SPC @ 0; %vec = %x @ SPC @ %y @ SPC @ 0;
%arg1.setRotation(fullrot("0 0 0", %vec)); %arg1.setRotation(fullrot("0 0 0", %vec));
//Check for speed enhancement %speed = %arg1.speed;
%multiplier = $Zombie::SpeedMultiplier[%arg1.type] $= "" ? 1 : $Zombie::SpeedMultiplier[%arg1.type];
%speed = %arg1.speed * %multiplier;
%vector = vectorScale(%vec, %speed); %vector = vectorScale(%vec, %speed);
%arg1.applyImpulse(%arg1.direction, %vector); %arg1.applyImpulse(%arg1.direction, %vector);
%arg1.Mnum -= 1; %arg1.Mnum -= 1;
@ -456,9 +471,17 @@ function TWM2Lib_Zombie_Core(%functionName, %arg1, %arg2, %arg3, %arg4) {
%zombie.mountImage(ZWingImage2, 4); %zombie.mountImage(ZWingImage2, 4);
%zombie.setActionThread("scoutRoot",true); %zombie.setActionThread("scoutRoot",true);
//Demon Mother Zombie //Demon Mother (Lord) Zombie
case 6: case 6:
return DemonMotherCreate(%spawnPos); %zombie = new player() {
Datablock = "DemonMotherZombieArmor";
};
%zombie.mountImage(ZdummyslotImg, 4);
%zombie.setInventory(AcidCannon, 1, true);
%zombie.use(AcidCannon);
%zombie.justshot = 0;
%zombie.justmelee = 0;
%zombie.noHS = 1;
//Shifter Zombie //Shifter Zombie
case 9: case 9:
@ -581,55 +604,39 @@ function TWM2Lib_Zombie_Core(%functionName, %arg1, %arg2, %arg3, %arg4) {
%zombie.zapObject(); %zombie.zapObject();
revivestand(%zombie, 0); revivestand(%zombie, 0);
} }
//Define Speed Parameters
%zombie.speed = TWM2Lib_Zombie_Core("defineZSpeed", %spawnType); %zombie.speed = TWM2Lib_Zombie_Core("defineZSpeed", %spawnType);
if(!isSet($Zombie::SpeedUpdateTime[%spawnType])) { if(!isSet($Zombie::SpeedUpdateTime[%spawnType])) {
%zombie.updateTimeFrequency = $Zombie::BaseSpeedUpdateTime; %zombie.updateTimeFrequency = $Zombie::BaseSpeedUpdateTime;
} }
%zombie.updateTimeFrequency = $Zombie::SpeedUpdateTime[%spawnType]; %zombie.updateTimeFrequency = $Zombie::SpeedUpdateTime[%spawnType];
//Define Damage Parameters
if(!isSet($Zombie::InfectOnCollide[%spawnType])) {
%zombie.damage_infectOnTouch = true;
}
else {
%zombie.damage_infectOnTouch = $Zombie::InfectOnCollide[%spawnType];
}
if(!isSet($Zombie::TypeDamage[%spawnType])) {
%zombie.damage_amountOnTouch = $Zombie::BaseDamage;
}
else {
%zombie.damage_amountOnTouch = $Zombie::TypeDamage[%spawnType];
}
if(!isSet($Zombie::TypeInfectedMultiplier[%spawnType])) {
%zombie.damage_alreadyInfectedMultiplier = 1;
}
else {
%zombie.damage_alreadyInfectedMultiplier = $Zombie::TypeInfectedMultiplier[%spawnType];
}
//Begin the AI
%zombie.getDatablock().AI(%zombie); %zombie.getDatablock().AI(%zombie);
return %zombie; return %zombie;
} }
} }
//************************************************************
//*****************Zomb Attack Stuff**************************
//************************************************************
function ChargeEmitter(%zombie){
if(!isobject(%zombie))
return;
if(%zombie.chargecount >= 2){
%charge2 = new ParticleEmissionDummy()
{
position = %zombie.getMuzzlePoint(6);
dataBlock = "defaultEmissionDummy";
emitter = "burnEmitter";
};
MissionCleanup.add(%charge2);
%charge2.schedule(100, "delete");
}
if(%zombie.chargecount <= 7){
%charge = new ParticleEmissionDummy()
{
position = %zombie.getMuzzlePoint(5);
dataBlock = "defaultEmissionDummy";
emitter = "burnEmitter";
};
MissionCleanup.add(%charge);
%charge.schedule(100, "delete");
}
if(%zombie.chargecount <= 9){
%zombie.Fire = schedule(100, %zombie, "ChargeEmitter", %zombie);
%zombie.chargecount++;
}
else
%zombie.chargecount = 0;
}
//----------------------------------------------------------- //-----------------------------------------------------------
//DEATH //DEATH
datablock AudioProfile(ZombieDeathSound1) datablock AudioProfile(ZombieDeathSound1)

View file

@ -1,3 +1,5 @@
$TWM2::ArmorHasCollisionFunction[DemonZombieArmor] = true;
datablock PlayerData(DemonZombieArmor) : LightMaleHumanArmor { datablock PlayerData(DemonZombieArmor) : LightMaleHumanArmor {
boundingBox = "1.63 1.63 2.6"; boundingBox = "1.63 1.63 2.6";
maxDamage = 4.0; maxDamage = 4.0;
@ -12,13 +14,55 @@ datablock PlayerData(DemonZombieArmor) : LightMaleHumanArmor {
waterBreathSound = WaterBreathBiodermSound; waterBreathSound = WaterBreathBiodermSound;
damageScale[$DamageType::M1700] = 2.0; damageScale[$DamageType::M1700] = 4.5;
damageScale[$DamageType::Wp400] = 4.0;
damageScale[$DamageType::SCD343] = 4.0;
damageScale[$DamageType::SA2400] = 5.0;
damageScale[$DamageType::Model1887] = 4.0;
damageScale[$DamageType::plasma] = 0.001;
damageScale[$DamageType::Burn] = 0.001;
damageScale[$DamageType::Fire] = 0.001;
damageScale[$DamageType::CrimsonHawk] = 1.9;
max[RepairKit] = 0; max[RepairKit] = 0;
max[Mine] = 0; max[Mine] = 0;
max[Grenade] = 0; max[Grenade] = 0;
}; };
function DemonZombieArmor::armorCollisionFunction(%datablock, %zombie, %colPlayer) {
if(!isObject(%zombie) || %zombie.getState() $= "dead") {
return;
}
if(!isObject(%colPlayer) || %colPlayer.getState() $= "dead") {
return;
}
//Check to make sure we're not hitting another zombie / boss
if(%colPlayer.isBoss || %colPlayer.isZombie || %colPlayer.rapierShield) {
return;
}
//Damage.
%causeInfect = %zombie.damage_infectOnTouch;
%baseDamage = %zombie.damage_amountOnTouch;
%multiplier = %zombie.damage_alreadyInfectedMultiplier;
//Phantom139 (11/20): Demons light players on fire, need to check for .onfire instead of the .infected flag.
%total = %colPlayer.onfire ? (%baseDamage * %multiplier) : %baseDamage;
%pushVector = vectorscale(%colPlayer.getvelocity(), 1000);
%colPlayer.applyimpulse(%colPlayer.getposition(), %pushVector);
if(%causeInfect) {
//Phantom139: Demon Zombies now cause burns instead of infects
//%colPlayer.Infected = 1;
//%colPlayer.InfectedLoop = schedule(10, %colPlayer, "TWM2Lib_Zombie_Core", "InfectLoop", %colPlayer);
%colPlayer.maxfirecount += (75 * (%total / 0.5));
if(%colPlayer.onfire == 0 || %colPlayer.onfire $= ""){
%colPlayer.onfire = 1;
schedule(10, %colPlayer, "burnloop", %colPlayer);
}
}
%colPlayer.damage(0, %colPlayer.getPosition(), %total, $DamageType::Zombie);
}
function DemonZombieArmor::AI(%datablock, %zombie) { function DemonZombieArmor::AI(%datablock, %zombie) {
if(!isObject(%zombie) || %zombie.getState() $= "dead") { if(!isObject(%zombie) || %zombie.getState() $= "dead") {
return; return;

View file

@ -1,5 +1,6 @@
datablock PlayerData(DemonMotherZombieArmor) : LightMaleHumanArmor $TWM2::ArmorHasCollisionFunction[DemonMotherZombieArmor] = true;
{
datablock PlayerData(DemonMotherZombieArmor) : LightMaleHumanArmor {
boundingBox = "1.5 1.5 2.6"; boundingBox = "1.5 1.5 2.6";
maxDamage = 9.0; maxDamage = 9.0;
minImpactSpeed = 35; minImpactSpeed = 35;
@ -13,15 +14,19 @@ datablock PlayerData(DemonMotherZombieArmor) : LightMaleHumanArmor
waterBreathSound = WaterBreathBiodermSound; waterBreathSound = WaterBreathBiodermSound;
damageScale[$DamageType::M1700] = 2.0; damageScale[$DamageType::M1700] = 4.5;
damageScale[$DamageType::Wp400] = 4.0;
damageScale[$DamageType::SCD343] = 4.0;
damageScale[$DamageType::SA2400] = 5.0;
damageScale[$DamageType::Model1887] = 4.0;
damageScale[$DamageType::CrimsonHawk] = 1.9;
max[RepairKit] = 0; max[RepairKit] = 0;
max[Mine] = 0; max[Mine] = 0;
max[Grenade] = 0; max[Grenade] = 0;
}; };
datablock StaticShapeData(SubBeacon) datablock StaticShapeData(SubBeacon) {
{
shapeFile = "turret_muzzlepoint.dts"; shapeFile = "turret_muzzlepoint.dts";
targetNameTag = 'beacon'; targetNameTag = 'beacon';
isInvincible = true; isInvincible = true;
@ -29,8 +34,7 @@ datablock StaticShapeData(SubBeacon)
dynamicType = $TypeMasks::SensorObjectType; dynamicType = $TypeMasks::SensorObjectType;
}; };
datablock SeekerProjectileData(DMMissile) datablock SeekerProjectileData(DMMissile) {
{
casingShapeName = "weapon_missile_casement.dts"; casingShapeName = "weapon_missile_casement.dts";
projectileShapeName = "weapon_missile_projectile.dts"; projectileShapeName = "weapon_missile_projectile.dts";
hasDamageRadius = true; hasDamageRadius = true;
@ -86,8 +90,7 @@ datablock SeekerProjectileData(DMMissile)
explodeOnWaterImpact = false; explodeOnWaterImpact = false;
}; };
datablock LinearFlareProjectileData(DMPlasma) datablock LinearFlareProjectileData(DMPlasma) {
{
doDynamicClientHits = true; doDynamicClientHits = true;
directDamage = 0; directDamage = 0;
@ -120,188 +123,179 @@ datablock LinearFlareProjectileData(DMPlasma)
flareBaseTexture = "flarebase"; flareBaseTexture = "flarebase";
}; };
function DemonMotherCreate(%pos){ function DemonMotherZombieArmor::AI(%datablock, %zombie) {
%obj = new player(){ //Fork off to both of the AI functions
Datablock = "DemonMotherZombieArmor"; %zombie.defenseLoop = %datablock.defenseLoop(%zombie);
}; %zombie.aiRoutine = %datablock.AIRoutine(%zombie);
%obj.setTransform(%pos);
%obj.team = 30;
MissionCleanup.add(%obj);
schedule(1000, 0, "DemonMotherInitiate", %obj);
%obj.isZombie = 1;
%obj.type = 6;
%obj.setInventory(AcidCannon, 1, true);
%obj.use(AcidCannon);
%zname = $TWM2::ZombieName[%obj.type]; // <- To Hosts, Enjoy, You can
//Change the Zombie Names now!!!
%obj.target = createTarget(%obj, %zname, "", "Derm3", '', %obj.team, PlayerSensor);
setTargetSensorData(%obj.target, PlayerSensor);
setTargetSensorGroup(%obj.target, 30);
setTargetName(%obj.target, addtaggedstring(%zname));
setTargetSkin(%obj.target, 'Horde');
return %obj;
} }
function DemonMotherInitiate(%obj){ function DemonMotherZombieArmor::defenseLoop(%datablock, %zombie) {
if(!isObject(%obj)) if(!isObject(%zombie) || %zombie.getState() $= "dead") {
return;
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; return;
} }
%pos = %obj.getposition(); %pos = %zombie.getposition();
%closestClient = ZombieLookForTarget(%zombie);
%closestDistance = getWord(%closestClient,1);
%closestClient = getWord(%closestClient,0).Player;
if(%closestClient != -1){
%searchobject = %closestclient;
%dist = vectorDist(%pos,%searchobject.getPosition());
if(%dist <= 100){
if(%dist <= 50){ //ok were now in combat mode, lets decide on what we should do, move attack, or shoot.
if(%obj.justmelee == 1){ //if we just used a melee attack, maybe we should follow it up with a shot attack.
if(%dist >= 10){ //good were far enough away, lets shoot em.
%rand = getrandom(1,3);
if(%rand <= 2)
DemonMotherSpermAttack(%obj,%searchobject);
else
DemonMotherFireRainAttack(%obj,%searchobject);
}
else //damn, to close, ok lung at him
DemonMotherLungAttack(%obj,%searchobject);
}
else{
%rand = getRandom(1,5); //ok so theres 3 good possible attacks here, so lets get a random variable and decide what to do.
if(%rand == 1)
DemonMotherPlasmaAttack(%obj,%searchobject);
else if(%rand <= 3)
DemonMotherStrafeAttack(%obj,%searchobject);
else
DemonMotherFlyAttack(%obj,%searchobject);
}
}
else{ //ok, were to far away, maybe we should shoot at them.
if(%obj.justshot == 1) //humm we just attacked, ok, let charge him, get in close
DemonMotherChargeIn(%obj,%searchobject);
else{ //were good to fire, FIRE AWAY!
%rand = getRandom(1,5); //ok so theres 3 good possible attacks here, so lets get a random variable and decide what to do.
if(%rand == 1)
DemonMotherFireRainAttack(%obj,%searchobject);
else if(%rand <= 3)
DemonMotherMissileAttack(%obj,%searchobject);
else
DemonMotherSpermAttack(%obj,%searchobject);
}
}
}
else if(%dist > 100){
%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);
}
else
DemonMotherMoveToTarget(%obj,%searchobject);
%obj.justshot = 0;
%obj.justmelee = 0;
}
else{
schedule(500, 0, "DemonMotherThink", %obj);
}
}
function DemonMotherDefense(%obj){
if(!isObject(%obj))
return;
if(%obj.getState() $= "dead")
return;
%pos = %obj.getposition();
InitContainerRadiusSearch(%pos, 250, $TypeMasks::ProjectileObjectType); InitContainerRadiusSearch(%pos, 250, $TypeMasks::ProjectileObjectType);
while ((%searchObject = containerSearchNext()) != 0){ while ((%searchObject = containerSearchNext()) != 0) {
%projpos = %searchobject.getPosition(); %projpos = %searchobject.getPosition();
%dist = vectorDist(%pos,%projpos); %dist = vectorDist(%pos, %projpos);
if(%dist <= 100){ if(%dist <= 100) {
if(%searchobject.lastpos) if(%searchobject.lastpos) {
%zombie.playShieldEffect("1 1 1");
%searchobject.delete(); %searchobject.delete();
} }
else }
else {
%searchobject.lastpos = %projpos; %searchobject.lastpos = %projpos;
} }
schedule(50, "DemonMotherDefense", %obj); }
%zombie.defenseLoop = %datablock.schedule(50, "defenseLoop", %zombie);
} }
function DemonMotherSpermAttack(%obj,%target){ function DemonMotherZombieArmor::AIRoutine(%datablock, %zombie) {
if(!isObject(%obj)) if(!isObject(%zombie) || %zombie.getState() $= "dead") {
return; %zombie.throwWeapon(1);
if(%obj.getState() $= "dead")
return;
if(!isObject(%target)){
DemonMotherThink(%obj);
return; return;
} }
FaceTarget(%obj,%target); %pos = %zombie.getWorldBoxCenter();
if(%obj.chargecount $= "") %closestClient = TWM2Lib_Zombie_Core("lookForTarget", %zombie);
%obj.chargecount = 0; %closestDistance = getWord(%closestClient, 1);
%charge = new ParticleEmissionDummy() %closestClient = getWord(%closestClient, 0).Player;
{ if(%closestClient != -1){
position = %obj.getMuzzlePoint(4); %searchobject = %closestclient;
dataBlock = "defaultEmissionDummy"; %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 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"; emitter = "BurnEmitter";
position = %zombie.getMuzzlePoint(4);
}; };
MissionCleanup.add(%charge); MissionCleanup.add(%chargeEmitter);
%charge.schedule(100, "delete"); %chargeEmitter.schedule(100, "delete");
//
if(%obj.chargecount == 7){ if(%zombie.chargeCount == 7 || %zombie.chargeCount == 9) {
%vec = vectorsub(%target.getworldboxcenter(),%obj.getMuzzlePoint(4)); %vec = vectorSub(%target.getWorldBoxCenter(), %zombie.getMuzzlePoint(4));
%vec = vectoradd(%vec, vectorscale(%target.getvelocity(),vectorlen(%vec)/100)); %vec = vectorAdd(%vec, vectorScale(%target.getVelocity(), vectorLen(%vec) / 100));
%p = new TracerProjectile() %p = new TracerProjectile() {
{
dataBlock = LZombieAcidBall; dataBlock = LZombieAcidBall;
initialDirection = %vec; initialDirection = %vec;
initialPosition = %obj.getMuzzlePoint(4); initialPosition = %zombie.getMuzzlePoint(4);
sourceObject = %obj; sourceObject = %zombie;
sourceSlot = 6; sourceSlot = 6;
}; };
} }
if(%obj.chargecount == 9){ if(%obj.chargecount <= 9) {
%vec = vectorsub(%target.getworldboxcenter(),%obj.getMuzzlePoint(4)); %zombie.attackFunction = %datablock.schedule(100, 0, "AttackFunction", %zombie, %attackFunction, %target);
%vec = vectoradd(%vec, vectorscale(%target.getvelocity(),vectorlen(%vec)/100)); %zombie.chargeCount++;
%p = new TracerProjectile() }
{ else {
dataBlock = LZombieAcidBall; %zombie.chargecount = 0;
initialDirection = %vec; %zombie.justshot = 1;
initialPosition = %obj.getMuzzlePoint(4); %zombie.aiRoutine = %datablock.AIRoutine(%zombie);
sourceObject = %obj;
sourceSlot = 6;
};
} }
if(%obj.chargecount <= 9){ case "FireLunge":
schedule(100, 0, "DemonMotherSpermAttack", %obj, %target);
%obj.chargecount++; case "StrafeMove":
}
else{ case "FlyAttack":
%obj.chargecount = 0;
%obj.justshot = 1; case "Firestorm":
DemonMotherThink(%obj);
case "MissileStrike":
case "PlasmaStrike":
case "ChargeAttack":
} }
} }
@ -588,13 +582,3 @@ function DemonMotherDemonSpawn(%obj){
} }
schedule(1500, 0, "DemonMotherThink", %obj); schedule(1500, 0, "DemonMotherThink", %obj);
} }
function FaceTarget(%obj,%target){
%vector = vectorNormalize(vectorSub(%target.getPosition(), %obj.getPosition()));
%v1 = getword(%vector, 0);
%v2 = getword(%vector, 1);
%nv1 = %v2;
%nv2 = (%v1 * -1);
%vector2 = %nv1@" "@%nv2@" 0";
%obj.setRotation(fullrot("0 0 0",%vector2));
}

View file

@ -1,5 +1,4 @@
datablock PlayerData(DemonUltraZombieArmor) : LightMaleHumanArmor datablock PlayerData(DemonUltraZombieArmor) : LightMaleHumanArmor {
{
runForce = 60.20 * 90; runForce = 60.20 * 90;
runEnergyDrain = 0.0; runEnergyDrain = 0.0;
minRunEnergy = 10; minRunEnergy = 10;
@ -23,7 +22,12 @@ datablock PlayerData(DemonUltraZombieArmor) : LightMaleHumanArmor
waterBreathSound = WaterBreathBiodermSound; waterBreathSound = WaterBreathBiodermSound;
damageScale[$DamageType::M1700] = 3.0; damageScale[$DamageType::M1700] = 4.5;
damageScale[$DamageType::Wp400] = 4.0;
damageScale[$DamageType::SCD343] = 4.0;
damageScale[$DamageType::SA2400] = 5.0;
damageScale[$DamageType::Model1887] = 4.0;
damageScale[$DamageType::CrimsonHawk] = 1.9;
max[RepairKit] = 0; max[RepairKit] = 0;
max[Mine] = 0; max[Mine] = 0;

View file

@ -1,5 +1,4 @@
datablock PlayerData(EliteDemonZombieArmor) : LightMaleHumanArmor datablock PlayerData(EliteDemonZombieArmor) : LightMaleHumanArmor {
{
boundingBox = "1.63 1.63 2.6"; boundingBox = "1.63 1.63 2.6";
maxDamage = 5.0; maxDamage = 5.0;
minImpactSpeed = 35; minImpactSpeed = 35;
@ -13,7 +12,11 @@ datablock PlayerData(EliteDemonZombieArmor) : LightMaleHumanArmor
waterBreathSound = WaterBreathBiodermSound; waterBreathSound = WaterBreathBiodermSound;
damageScale[$DamageType::M1700] = 2.0; damageScale[$DamageType::M1700] = 4.5;
damageScale[$DamageType::Wp400] = 4.0;
damageScale[$DamageType::SCD343] = 4.0;
damageScale[$DamageType::SA2400] = 5.0;
damageScale[$DamageType::Model1887] = 4.0;
damageScale[$DamageType::Burn] = 0.1; damageScale[$DamageType::Burn] = 0.1;
damageScale[$DamageType::Fire] = 0.1; damageScale[$DamageType::Fire] = 0.1;
damageScale[$DamageType::Napalm] = 0.1; damageScale[$DamageType::Napalm] = 0.1;

View file

@ -1,3 +1,5 @@
$TWM2::ArmorHasCollisionFunction[LordZombieArmor] = false;
datablock AudioProfile(ZLordFootSound) { datablock AudioProfile(ZLordFootSound) {
filename = "fx/weapons/grenade_explode_UW.wav"; filename = "fx/weapons/grenade_explode_UW.wav";
description = AudioBomb3d; description = AudioBomb3d;
@ -29,7 +31,16 @@ datablock PlayerData(LordZombieArmor) : HeavyMaleBiodermArmor {
LFootSnowSound = ZLordFootSound; LFootSnowSound = ZLordFootSound;
RFootSnowSound = ZLordFootSound; RFootSnowSound = ZLordFootSound;
damageScale[$DamageType::M1700] = 1.5; damageScale[$DamageType::RP432] = 3.5;
damageScale[$DamageType::MG42] = 4.0;
damageScale[$DamageType::MRXX] = 4.5;
damageScale[$DamageType::PTorpedo] = 10.0;
damageScale[$DamageType::CrimsonHawk] = 1.9;
damageScale[$DamageType::M1700] = 4.5;
damageScale[$DamageType::Wp400] = 4.0;
damageScale[$DamageType::SCD343] = 4.0;
damageScale[$DamageType::SA2400] = 5.0;
damageScale[$DamageType::Model1887] = 4.0;
max[RepairKit] = 0; max[RepairKit] = 0;
max[Mine] = 0; max[Mine] = 0;

View file

@ -1,3 +1,5 @@
$TWM2::ArmorHasCollisionFunction[ZombieArmor] = true;
datablock PlayerData(ZombieArmor) : LightMaleHumanArmor { datablock PlayerData(ZombieArmor) : LightMaleHumanArmor {
runForce = 60.20 * 90; runForce = 60.20 * 90;
runEnergyDrain = 0.0; runEnergyDrain = 0.0;
@ -22,13 +24,45 @@ datablock PlayerData(ZombieArmor) : LightMaleHumanArmor {
waterBreathSound = WaterBreathBiodermSound; waterBreathSound = WaterBreathBiodermSound;
damageScale[$DamageType::M1700] = 3.0; damageScale[$DamageType::M1700] = 4.5;
damageScale[$DamageType::Wp400] = 4.0;
damageScale[$DamageType::SCD343] = 4.0;
damageScale[$DamageType::SA2400] = 5.0;
damageScale[$DamageType::Model1887] = 4.0;
damageScale[$DamageType::CrimsonHawk] = 1.9;
max[RepairKit] = 0; max[RepairKit] = 0;
max[Mine] = 0; max[Mine] = 0;
max[Grenade] = 0; max[Grenade] = 0;
}; };
function ZombieArmor::armorCollisionFunction(%datablock, %zombie, %colPlayer) {
if(!isObject(%zombie) || %zombie.getState() $= "dead") {
return;
}
if(!isObject(%colPlayer) || %colPlayer.getState() $= "dead") {
return;
}
//Check to make sure we're not hitting another zombie / boss
if(%colPlayer.isBoss || %colPlayer.isZombie || %colPlayer.rapierShield) {
return;
}
//Damage.
%causeInfect = %zombie.damage_infectOnTouch;
%baseDamage = %zombie.damage_amountOnTouch;
%multiplier = %zombie.damage_alreadyInfectedMultiplier;
%total = %colPlayer.infected ? (%baseDamage * %multiplier) : %baseDamage;
%pushVector = vectorscale(%colPlayer.getvelocity(), 100);
%colPlayer.applyimpulse(%colPlayer.getposition(), %pushVector);
if(%causeInfect) {
%colPlayer.Infected = 1;
%colPlayer.InfectedLoop = schedule(10, %colPlayer, "TWM2Lib_Zombie_Core", "InfectLoop", %colPlayer);
}
%colPlayer.damage(0, %colPlayer.getPosition(), %total, $DamageType::Zombie);
}
function ZombieArmor::AI(%datablock, %zombie) { function ZombieArmor::AI(%datablock, %zombie) {
//Normal zombies do not employ any "AI" other than target and move, fork off to main move function //Normal zombies do not employ any "AI" other than target and move, fork off to main move function
%datablock.Move(%zombie); %datablock.Move(%zombie);

View file

@ -1,3 +1,5 @@
$TWM2::ArmorHasCollisionFunction[RapierZombieArmor] = true;
datablock PlayerData(RapierZombieArmor) : LightMaleBiodermArmor { datablock PlayerData(RapierZombieArmor) : LightMaleBiodermArmor {
maxDamage = 1.0; maxDamage = 1.0;
minImpactSpeed = 50; minImpactSpeed = 50;
@ -17,8 +19,13 @@ datablock PlayerData(RapierZombieArmor) : LightMaleBiodermArmor {
boundingBox = "2.0 2.0 1.2"; boundingBox = "2.0 2.0 1.2";
damageScale[$DamageType::M1700] = 2.0; damageScale[$DamageType::M1700] = 4.5;
damageScale[$DamageType::Wp400] = 4.0;
damageScale[$DamageType::SCD343] = 4.0;
damageScale[$DamageType::SA2400] = 5.0;
damageScale[$DamageType::Model1887] = 4.0;
damageScale[$DamageType::Missile] = 100.0; damageScale[$DamageType::Missile] = 100.0;
damageScale[$DamageType::CrimsonHawk] = 1.9;
max[RepairKit] = 0; max[RepairKit] = 0;
max[Mine] = 0; max[Mine] = 0;
@ -57,6 +64,41 @@ datablock ShapeBaseImageData(ZWingAltImage2) {
rotation = "-0.5 -2 0 35"; // L/R - F/B - T/B rotation = "-0.5 -2 0 35"; // L/R - F/B - T/B
}; };
function RapierZombieArmor::armorCollisionFunction(%datablock, %zombie, %colPlayer) {
if(!isObject(%zombie) || %zombie.getState() $= "dead") {
return;
}
if(!isObject(%colPlayer) || %colPlayer.getState() $= "dead") {
return;
}
//Check to make sure we're not hitting another zombie / boss
if(%colPlayer.isBoss || %colPlayer.isZombie || %colPlayer.rapierShield) {
return;
}
//Damage.
%causeInfect = %zombie.damage_infectOnTouch;
%baseDamage = %zombie.damage_amountOnTouch;
%multiplier = %zombie.damage_alreadyInfectedMultiplier;
%total = %colPlayer.infected ? (%baseDamage * %multiplier) : %baseDamage;
%chance = getRandom(1, 3);
if(%chance != 3) {
%zombie.iscarrying = true;
%colPlayer.grabbed = true;
%colPlayer.damage(0, %colPlayer.getPosition(), %baseDamage, $DamageType::Zombie);
%zombie.killingPlayer = %datablock.zCarryLoop(%zombie, %colPlayer, 0);
}
else {
%colPlayer.damage(0, %colPlayer.getPosition(), %total, $DamageType::Zombie);
if(%causeInfect) {
%colPlayer.Infected = 1;
%colPlayer.InfectedLoop = schedule(10, %colPlayer, "TWM2Lib_Zombie_Core", "InfectLoop", %colPlayer);
}
}
}
function RapierZombieArmor::AI(%datablock, %zombie) { function RapierZombieArmor::AI(%datablock, %zombie) {
//No special AI here, we'll let %block.move() handle it... //No special AI here, we'll let %block.move() handle it...
if(!isObject(%zombie) || %zombie.getState() $= "dead") { if(!isObject(%zombie) || %zombie.getState() $= "dead") {

View file

@ -1,15 +1,49 @@
$TWM2::ArmorHasCollisionFunction[RavagerZombieArmor] = true;
datablock PlayerData(RavagerZombieArmor) : LightMaleBiodermArmor { datablock PlayerData(RavagerZombieArmor) : LightMaleBiodermArmor {
maxDamage = 1.0; maxDamage = 1.0;
minImpactSpeed = 50; minImpactSpeed = 50;
speedDamageScale = 0.015; speedDamageScale = 0.015;
damageScale[$DamageType::M1700] = 2.0; damageScale[$DamageType::M1700] = 4.5;
damageScale[$DamageType::Wp400] = 4.0;
damageScale[$DamageType::SCD343] = 4.0;
damageScale[$DamageType::SA2400] = 5.0;
damageScale[$DamageType::Model1887] = 4.0;
damageScale[$DamageType::CrimsonHawk] = 1.9;
max[RepairKit] = 0; max[RepairKit] = 0;
max[Mine] = 0; max[Mine] = 0;
max[Grenade] = 0; max[Grenade] = 0;
}; };
function RavagerZombieArmor::armorCollisionFunction(%datablock, %zombie, %colPlayer) {
if(!isObject(%zombie) || %zombie.getState() $= "dead") {
return;
}
if(!isObject(%colPlayer) || %colPlayer.getState() $= "dead") {
return;
}
//Check to make sure we're not hitting another zombie / boss
if(%colPlayer.isBoss || %colPlayer.isZombie || %colPlayer.rapierShield) {
return;
}
//Damage.
%causeInfect = %zombie.damage_infectOnTouch;
%baseDamage = %zombie.damage_amountOnTouch;
%multiplier = %zombie.damage_alreadyInfectedMultiplier;
%total = %colPlayer.infected ? (%baseDamage * %multiplier) : %baseDamage;
%pushVector = vectorscale(%colPlayer.getvelocity(), 100);
%colPlayer.applyimpulse(%colPlayer.getposition(), %pushVector);
if(%causeInfect) {
%colPlayer.Infected = 1;
%colPlayer.InfectedLoop = schedule(10, %colPlayer, "TWM2Lib_Zombie_Core", "InfectLoop", %colPlayer);
}
%colPlayer.damage(0, %colPlayer.getPosition(), %total, $DamageType::Zombie);
}
//Ravager Zombies //Ravager Zombies
// TWM2 3.9.2 // TWM2 3.9.2
// - Old Behavior: Ground crawling zombie with fast speed that would ram into targets // - Old Behavior: Ground crawling zombie with fast speed that would ram into targets

View file

@ -1,5 +1,4 @@
datablock PlayerData(ShifterZombieArmor) : LightMaleHumanArmor datablock PlayerData(ShifterZombieArmor) : LightMaleHumanArmor {
{
runForce = 60.20 * 90; runForce = 60.20 * 90;
runEnergyDrain = 0.0; runEnergyDrain = 0.0;
minRunEnergy = 10; minRunEnergy = 10;
@ -23,12 +22,16 @@ datablock PlayerData(ShifterZombieArmor) : LightMaleHumanArmor
waterBreathSound = WaterBreathBiodermSound; waterBreathSound = WaterBreathBiodermSound;
damageScale[$DamageType::M1700] = 3.0; damageScale[$DamageType::M1700] = 4.5;
damageScale[$DamageType::Wp400] = 4.0;
damageScale[$DamageType::SCD343] = 4.0;
damageScale[$DamageType::SA2400] = 5.0;
damageScale[$DamageType::Model1887] = 4.0;
damageScale[$DamageType::CrimsonHawk] = 1.9;
max[RepairKit] = 0; max[RepairKit] = 0;
max[Mine] = 0; max[Mine] = 0;
max[Grenade] = 0; max[Grenade] = 0;
}; };
function ShifterZombiemovetotarget(%zombie){ function ShifterZombiemovetotarget(%zombie){

View file

@ -1,10 +1,14 @@
datablock PlayerData(SSZombieArmor) : LightMaleBiodermArmor datablock PlayerData(SSZombieArmor) : LightMaleBiodermArmor {
{
maxDamage = 1.0; maxDamage = 1.0;
minImpactSpeed = 50; minImpactSpeed = 50;
speedDamageScale = 0.015; speedDamageScale = 0.015;
damageScale[$DamageType::M1700] = 2.0; damageScale[$DamageType::M1700] = 4.5;
damageScale[$DamageType::Wp400] = 4.0;
damageScale[$DamageType::SCD343] = 4.0;
damageScale[$DamageType::SA2400] = 5.0;
damageScale[$DamageType::Model1887] = 4.0;
damageScale[$DamageType::CrimsonHawk] = 1.9;
max[RepairKit] = 0; max[RepairKit] = 0;
max[Mine] = 0; max[Mine] = 0;

View file

@ -12,7 +12,12 @@ datablock PlayerData(SniperZombieArmor) : LightMaleHumanArmor {
waterBreathSound = WaterBreathBiodermSound; waterBreathSound = WaterBreathBiodermSound;
damageScale[$DamageType::M1700] = 2.0; damageScale[$DamageType::M1700] = 4.5;
damageScale[$DamageType::Wp400] = 4.0;
damageScale[$DamageType::SCD343] = 4.0;
damageScale[$DamageType::SA2400] = 5.0;
damageScale[$DamageType::Model1887] = 4.0;
damageScale[$DamageType::CrimsonHawk] = 1.9;
max[RepairKit] = 0; max[RepairKit] = 0;
max[Mine] = 0; max[Mine] = 0;

View file

@ -1,5 +1,4 @@
datablock PlayerData(SummonerZombieArmor) : LightMaleHumanArmor datablock PlayerData(SummonerZombieArmor) : LightMaleHumanArmor {
{
runForce = 60.20 * 90; runForce = 60.20 * 90;
runEnergyDrain = 0.0; runEnergyDrain = 0.0;
minRunEnergy = 10; minRunEnergy = 10;
@ -23,7 +22,12 @@ datablock PlayerData(SummonerZombieArmor) : LightMaleHumanArmor
waterBreathSound = WaterBreathBiodermSound; waterBreathSound = WaterBreathBiodermSound;
damageScale[$DamageType::M1700] = 3.0; damageScale[$DamageType::M1700] = 4.5;
damageScale[$DamageType::Wp400] = 4.0;
damageScale[$DamageType::SCD343] = 4.0;
damageScale[$DamageType::SA2400] = 5.0;
damageScale[$DamageType::Model1887] = 4.0;
damageScale[$DamageType::CrimsonHawk] = 1.9;
max[RepairKit] = 0; max[RepairKit] = 0;
max[Mine] = 0; max[Mine] = 0;

View file

@ -3,7 +3,12 @@ datablock PlayerData(VolatileRavagerZombieArmor) : LightMaleBiodermArmor {
minImpactSpeed = 50; minImpactSpeed = 50;
speedDamageScale = 0.015; speedDamageScale = 0.015;
damageScale[$DamageType::M1700] = 2.0; damageScale[$DamageType::M1700] = 4.5;
damageScale[$DamageType::Wp400] = 4.0;
damageScale[$DamageType::SCD343] = 4.0;
damageScale[$DamageType::SA2400] = 5.0;
damageScale[$DamageType::Model1887] = 4.0;
damageScale[$DamageType::CrimsonHawk] = 1.9;
max[RepairKit] = 0; max[RepairKit] = 0;
max[Mine] = 0; max[Mine] = 0;

View file

@ -1,5 +1,4 @@
datablock PlayerData(WraithZombieArmor) : LightMaleHumanArmor datablock PlayerData(WraithZombieArmor) : LightMaleHumanArmor {
{
boundingBox = "1.63 1.63 2.6"; boundingBox = "1.63 1.63 2.6";
maxDamage = 4.0; maxDamage = 4.0;
minImpactSpeed = 35; minImpactSpeed = 35;
@ -17,7 +16,12 @@ datablock PlayerData(WraithZombieArmor) : LightMaleHumanArmor
waterBreathSound = WaterBreathBiodermSound; waterBreathSound = WaterBreathBiodermSound;
damageScale[$DamageType::M1700] = 2.0; damageScale[$DamageType::M1700] = 4.5;
damageScale[$DamageType::Wp400] = 4.0;
damageScale[$DamageType::SCD343] = 4.0;
damageScale[$DamageType::SA2400] = 5.0;
damageScale[$DamageType::Model1887] = 4.0;
damageScale[$DamageType::CrimsonHawk] = 1.9;
max[RepairKit] = 0; max[RepairKit] = 0;
max[Mine] = 0; max[Mine] = 0;

View file

@ -57,7 +57,7 @@ $DamageType::ZombieL = 58;
$DamageType::Pistol = 59; $DamageType::Pistol = 59;
$DamageType::Melee = 60; $DamageType::Melee = 60;
$DamageType::S3 = 61; $DamageType::S3 = 61;
$DamageType::W1700 = 62; $DamageType::M1700 = 62;
$DamageType::G41 = 63; $DamageType::G41 = 63;
$DamageType::R700 = 64; $DamageType::R700 = 64;
$DamageType::MP26 = 65; $DamageType::MP26 = 65;
@ -75,14 +75,30 @@ $DamageType::deserteagle = 76;
$DamageType::FissionBomb = 77; $DamageType::FissionBomb = 77;
$DamageType::RapierShield = 78; $DamageType::RapierShield = 78;
//Phantom139: TWM2 3.9.2: Added in damage types for every weapon, attack, etc for balancing individually
$DamageType::Javelin = 79;
$DamageType::Stinger = 80;
$DamageType::StaticGrenade = 81;
$DamageType::Plasmasaber = 82;
$DamageType::BladeOfVengance_Assassination = 83;
$DamageType::MG42 = 84;
$DamageType::MRXX = 85;
$DamageType::PTorpedo = 86;
$DamageType::CrimsonHawk = 87;
$DamageType::M93 = 88;
$DamageType::ES77PulsePhaser = 89;
$DamageType::Wp400 = 90;
$DamageType::SCD343 = 91;
$DamageType::Model1887 = 92;
//Phantom139: TWM2 3.9.2: Updated these "special" damage types to have much higher index values
// DMM -- added so MPBs that blow up under water get a message // DMM -- added so MPBs that blow up under water get a message
$DamageType::Water = 97; $DamageType::Water = 997;
//Tinman - used in Hunters for cheap bastards ;) //Tinman - used in Hunters for cheap bastards ;)
$DamageType::NexusCamping = 98; $DamageType::NexusCamping = 998;
// MES -- added so CTRL-K can get a distinctive message // MES -- added so CTRL-K can get a distinctive message
$DamageType::Suicide = 99; $DamageType::Suicide = 999;
// Etc, etc. // Etc, etc.
@ -120,14 +136,14 @@ $DamageTypeText[30] = 'tank mortar';
$DamageTypeText[31] = 'satchel charge'; $DamageTypeText[31] = 'satchel charge';
$DamageTypeText[32] = 'MPB missile'; $DamageTypeText[32] = 'MPB missile';
$DamageTypeText[33] = 'lighting'; $DamageTypeText[33] = 'lighting';
$DamageTypeText[35] = 'ForceField'; $DamageTypeText[35] = 'Force Field';
$DamageTypeText[36] = 'Crash'; $DamageTypeText[36] = 'Crash';
$DamageTypeText[50] = 'Meteor'; $DamageTypeText[50] = 'Meteor';
$DamageTypeText[51] = 'Cursing'; $DamageTypeText[51] = 'Cursing';
$DamageTypeText[52] = 'Idiocy'; $DamageTypeText[52] = 'Idiocy';
$DamageTypeText[53] = 'SuperChaingun'; $DamageTypeText[53] = 'Super Chaingun';
$DamageTypeText[54] = 'KillerFog'; $DamageTypeText[54] = 'Killer Fog';
$DamageTypeText[55] = 'Zombie'; $DamageTypeText[55] = 'Zombie';
$DamageTypeText[56] = 'ZAcid'; $DamageTypeText[56] = 'ZAcid';
@ -144,18 +160,24 @@ $DamageTypeText[66] = 'Pg700';
$DamageTypeText[67] = 'FellOff'; $DamageTypeText[67] = 'FellOff';
$DamageTypeText[68] = 'M1'; $DamageTypeText[68] = 'M1';
$DamageTypeText[69] = 'RP432'; $DamageTypeText[69] = 'RP432';
$DamageTypeText[70] = 'BladeOfVengance'; $DamageTypeText[70] = 'Blade Of Vengance';
$DamageTypeText[71] = 'RPG'; $DamageTypeText[71] = 'RPG';
$DamageTypeText[72] = 'GravBolt'; $DamageTypeText[72] = 'Grav Bolt';
$DamageTypeText[73] = 'LaserRifle'; $DamageTypeText[73] = 'Laser Rifle';
$DamageTypeText[74] = 'Burn'; $DamageTypeText[74] = 'Burn';
$DamageTypeText[75] = 'SA2400'; $DamageTypeText[75] = 'SA2400';
$DamageTypeText[76] = 'deserteagle'; $DamageTypeText[76] = 'desert eagle';
$DamageTypeText[77] = 'FissionBomb'; $DamageTypeText[77] = 'Fission Bomb';
$DamageTypeText[78] = 'RapierShield'; $DamageTypeText[78] = 'Rapier Shield';
$DamageTypeText[98] = 'nexus camping'; $DamageTypeText[79] = 'Javelin';
$DamageTypeText[99] = 'suicide'; $DamageTypeText[80] = 'Stinger';
$DamageTypeText[81] = 'Static Grenade';
$DamageTypeText[82] = 'Plasmasaber';
$DamageTypeText[998] = 'water';
$DamageTypeText[998] = 'nexus camping';
$DamageTypeText[999] = 'suicide';
// ##### PLEASE DO NOT REORDER THE DAMAGE PROFILE TABLES BELOW ##### // ##### PLEASE DO NOT REORDER THE DAMAGE PROFILE TABLES BELOW #####

View file

@ -115,11 +115,55 @@ $DeathMessageSelfKill[$DamageType::Fire, 2] = '\c0%1 burns %2self with %3 flamet
$DeathMessageSelfKill[$DamageType::Fire, 3] = '\c0%1 burns %2self down to cinders.'; $DeathMessageSelfKill[$DamageType::Fire, 3] = '\c0%1 burns %2self down to cinders.';
$DeathMessageSelfKill[$DamageType::Fire, 4] = '\c0%1 engulfs %2self in flames.'; $DeathMessageSelfKill[$DamageType::Fire, 4] = '\c0%1 engulfs %2self in flames.';
$DeathMessageSelfKill[$DamageType::FissionBomb, 0] = '\c0%1 Unleashed a fission bomb.'; $DeathMessageSelfKill[$DamageType::FissionBomb, 0] = '\c0%1\'s super powered fission bomb turned on it\'s owner with lethal ferocity.';
$DeathMessageSelfKill[$DamageType::FissionBomb, 1] = '\c0%1 Unleashed a fission bomb.'; $DeathMessageSelfKill[$DamageType::FissionBomb, 1] = '\c0%1 stared a bit too long at the bright fission bomb flash.';
$DeathMessageSelfKill[$DamageType::FissionBomb, 2] = '\c0%1 Unleashed a fission bomb.'; $DeathMessageSelfKill[$DamageType::FissionBomb, 2] = '\c0%1 pushed the big red button, and then didn\'t run.';
$DeathMessageSelfKill[$DamageType::FissionBomb, 3] = '\c0%1 Unleashed a fission bomb.'; $DeathMessageSelfKill[$DamageType::FissionBomb, 3] = '\c0%1 forgot to execute the third step of fission bomb operation, running.';
$DeathMessageSelfKill[$DamageType::FissionBomb, 4] = '\c0%1 Unleashed a fission bomb.'; $DeathMessageSelfKill[$DamageType::FissionBomb, 4] = '\c0%1 sets off a bright reaction of decimation, upon %2self.';
$DeathMessageSelfKill[$DamageType::Javelin, 0] = '\c0%1 obtained long range missile locking upon %2self.';
$DeathMessageSelfKill[$DamageType::Javelin, 1] = '\c0%1 pointed the javelin launching tube in the wrong direction.';
$DeathMessageSelfKill[$DamageType::Javelin, 2] = '\c0%1 obliterates %2self with %3 javelin.';
$DeathMessageSelfKill[$DamageType::Javelin, 3] = '\c0%1 looks up in the sky at %3 javelin rocket as it goes up... and then back down.';
$DeathMessageSelfKill[$DamageType::Javelin, 4] = '\c0%1 took self-artillery javelin practice too literally...';
$DeathMessageSelfKill[$DamageType::Stinger, 0] = '\c0%1 performed the ritual of anti-anti-aircraft upon %2self.';
$DeathMessageSelfKill[$DamageType::Stinger, 1] = '\c0%1 obtains missile locking upon %2self.';
$DeathMessageSelfKill[$DamageType::Stinger, 2] = '\c0%1 punts the stinger missile out of the park, along with %3 life.';
$DeathMessageSelfKill[$DamageType::Stinger, 3] = '\c0%1\'s missile launching skills have been increased to explosively spectacular levels.';
$DeathMessageSelfKill[$DamageType::Stinger, 4] = '\c0%1 blows %2self away with a stinger rocket';
$DeathMessageSelfKill[$DamageType::StaticGrenade, 0] = '\c0%1 took electrically induced explosives to a whole new meaning.';
$DeathMessageSelfKill[$DamageType::StaticGrenade, 1] = '\c0%1 pulled the pin on a static grenade, and then walked into it.';
$DeathMessageSelfKill[$DamageType::StaticGrenade, 2] = '\c0%1 tossed a static grenade and then performed boomerang logic on it.';
$DeathMessageSelfKill[$DamageType::StaticGrenade, 3] = '\c0%1\'s static grenade tossing skills have exploded into new proportions.';
$DeathMessageSelfKill[$DamageType::StaticGrenade, 4] = '\c0%1 blows %2self away with a static grenade';
//These three are impossible deaths, but w/e
$DeathMessageSelfKill[$DamageType::Plasmasaber, 0] = '\c0%1 turned %3 plasma energy sword upon %2self.';
$DeathMessageSelfKill[$DamageType::Plasmasaber, 1] = '\c0%1 turned %3 plasma energy sword upon %2self.';
$DeathMessageSelfKill[$DamageType::Plasmasaber, 2] = '\c0%1 turned %3 plasma energy sword upon %2self.';
$DeathMessageSelfKill[$DamageType::Plasmasaber, 3] = '\c0%1 turned %3 plasma energy sword upon %2self.';
$DeathMessageSelfKill[$DamageType::Plasmasaber, 4] = '\c0%1 turned %3 plasma energy sword upon %2self.';
$DeathMessageSelfKill[$DamageType::BladeOfVengance, 0] = '\c0%1 turned %3 blade of vengeance upon %2self.';
$DeathMessageSelfKill[$DamageType::BladeOfVengance, 1] = '\c0%1 turned %3 blade of vengeance upon %2self.';
$DeathMessageSelfKill[$DamageType::BladeOfVengance, 2] = '\c0%1 turned %3 blade of vengeance upon %2self.';
$DeathMessageSelfKill[$DamageType::BladeOfVengance, 3] = '\c0%1 turned %3 blade of vengeance upon %2self.';
$DeathMessageSelfKill[$DamageType::BladeOfVengance, 4] = '\c0%1 turned %3 blade of vengeance upon %2self.';
$DeathMessageSelfKill[$DamageType::BladeOfVengance_Assassination, 0] = '\c0%1 turned %3 blade of vengeance upon %2self.';
$DeathMessageSelfKill[$DamageType::BladeOfVengance_Assassination, 1] = '\c0%1 turned %3 blade of vengeance upon %2self.';
$DeathMessageSelfKill[$DamageType::BladeOfVengance_Assassination, 2] = '\c0%1 turned %3 blade of vengeance upon %2self.';
$DeathMessageSelfKill[$DamageType::BladeOfVengance_Assassination, 3] = '\c0%1 turned %3 blade of vengeance upon %2self.';
$DeathMessageSelfKill[$DamageType::BladeOfVengance_Assassination, 4] = '\c0%1 turned %3 blade of vengeance upon %2self.';
$DeathMessageSelfKill[$DamageType::PTorpedo, 0] = '\c0%1 pointed %3 proton torpedo cannon in the wrong direction.';
$DeathMessageSelfKill[$DamageType::PTorpedo, 1] = '\c0%1 decimates %3 local area with a proton torpedo cannon.';
$DeathMessageSelfKill[$DamageType::PTorpedo, 2] = '\c0%1 took proton detonation to a whole new level.';
$DeathMessageSelfKill[$DamageType::PTorpedo, 3] = '\c0%1\'s proton torpedo aiming skills are self-evident.';
$DeathMessageSelfKill[$DamageType::PTorpedo, 4] = '\c0%1 annihilates %2self into dust with a proton torpedo';
//used when a player is killed by a teammate //used when a player is killed by a teammate
$DeathMessageTeamKillCount = 1; $DeathMessageTeamKillCount = 1;
@ -138,7 +182,7 @@ $DeathMessageTeamKill[$DamageType::SatchelCharge, 0] = '\c0%4 blew up TEAMMATE %
$DeathMessageTeamKill[$DamageType::Impact, 0] = '\c0%4 runs down TEAMMATE %1!'; $DeathMessageTeamKill[$DamageType::Impact, 0] = '\c0%4 runs down TEAMMATE %1!';
$DeathMessageTeamKill[$DamageType::SuperChaingun, 0] = '\c0%4 TEAMKILLED %1 with a super chaingun!'; $DeathMessageTeamKill[$DamageType::SuperChaingun, 0] = '\c0%4 TEAMKILLED %1 with a super chaingun!';
$DeathMessageTeamKill[$DamageType::Pistol, 0] = '\c0%4 TEAMKILLED %1 with a colt pistol!'; $DeathMessageTeamKill[$DamageType::Pistol, 0] = '\c0%4 TEAMKILLED %1 with a colt pistol!';
$DeathMessageTeamKill[$DamageType::Melee, 0] = '\c0%4 Swings at TEAMMATE %1, and doesn\'t stop in time!'; $DeathMessageTeamKill[$DamageType::Melee, 0] = '\c0%4 swings for the fences in the general direction of TEAMMATE %1.';
$DeathMessageTeamKill[$DamageType::S3, 0] = '\c0%4 Nailed TEAMMATE %1 with an S3 Combat Rifle!'; $DeathMessageTeamKill[$DamageType::S3, 0] = '\c0%4 Nailed TEAMMATE %1 with an S3 Combat Rifle!';
$DeathMessageTeamKill[$DamageType::W1700, 0] = '\c0%4 Blasts TEAMMATE %1 with a W1700 Shotgun!'; $DeathMessageTeamKill[$DamageType::W1700, 0] = '\c0%4 Blasts TEAMMATE %1 with a W1700 Shotgun!';
$DeathMessageTeamKill[$DamageType::G41, 0] = '\c0%4 Kills TEAMMATE %1 with Semi-Automatic G41 Fire!'; $DeathMessageTeamKill[$DamageType::G41, 0] = '\c0%4 Kills TEAMMATE %1 with Semi-Automatic G41 Fire!';
@ -149,12 +193,23 @@ $DeathMessageTeamKill[$DamageType::M1, 0] = '\c0%4 Nails TEAMMATE %1 with an M1
$DeathMessageTeamKill[$DamageType::RP432, 0] = '\c0%4 Shreds up TEAMMATE %1 with %6 RP432 MG!'; $DeathMessageTeamKill[$DamageType::RP432, 0] = '\c0%4 Shreds up TEAMMATE %1 with %6 RP432 MG!';
$DeathMessageTeamKill[$DamageType::RPG, 0] = '\c0%4 Blows TEAMMATE %1 away with an RPG!'; $DeathMessageTeamKill[$DamageType::RPG, 0] = '\c0%4 Blows TEAMMATE %1 away with an RPG!';
$DeathMessageTeamKill[$DamageType::GravBolt, 0] = '\c0%4 ships TEAMMATE %1 to the upper atmosphere with a grav cannon!'; $DeathMessageTeamKill[$DamageType::GravBolt, 0] = '\c0%4 ships TEAMMATE %1 to the upper atmosphere with a grav cannon!';
$DeathMessageTeamKill[$DamageType::LaserRifle, 0] = '\c0%4 burns TEAMMATE %1 with %6 RSA Laser Rifle'; $DeathMessageTeamKill[$DamageType::LaserRifle, 0] = '\c0%4 burns TEAMMATE %1 with %6 UR-22 Laser Rifle';
$DeathMessageTeamKill[$DamageType::Fire, 0] = '\c0%4 burns TEAMMATE %1 with a flamethrower'; $DeathMessageTeamKill[$DamageType::Fire, 0] = '\c0%4 burns TEAMMATE %1 with a flamethrower';
$DeathMessageTeamKill[$DamageType::SA2400, 0] = '\c0%4 Nails TEAMMATE %1 with a SA2400'; $DeathMessageTeamKill[$DamageType::SA2400, 0] = '\c0%4 Nails TEAMMATE %1 with a SA2400';
$DeathMessageTeamKill[$DamageType::DesertEagle, 0] = '\c0%4 blasts TEAMMATE %1 with a desert eagle pistol'; $DeathMessageTeamKill[$DamageType::DesertEagle, 0] = '\c0%4 blasts TEAMMATE %1 with a desert eagle pistol';
$DeathMessageTeamKill[$DamageType::FissionBomb, 0] = '\c0%4 kills %1 with a Fission Bomb.'; $DeathMessageTeamKill[$DamageType::FissionBomb, 0] = '\c0%4 annihilates TEAMMATE %1 with a Fission Bomb.';
$DeathMessageTeamKill[$DamageType::Javelin, 0] = '\c0%4 nails TEAMMATE %1 with a javelin rocket.';
$DeathMessageTeamKill[$DamageType::Stinger, 0] = '\c0%4 ends TEAMMATE %1\'s vehicle experience with a stinger missile.';
$DeathMessageTeamKill[$DamageType::StaticGrenade, 0] = '\c0%4 TEAMKILLED %1 with a static grenade.';
$DeathMessageTeamKill[$DamageType::Plasmasaber, 0] = '\c0%4 strikes down TEAMMATE %1 with a plasmasaber.';
$DeathMessageTeamKill[$DamageType::BladeOfVengance, 0] = '\c0%4 strikes down TEAMMATE %1 with %6 blade of vengeance.';
$DeathMessageTeamKill[$DamageType::BladeOfVengance_Assassination, 0] = '\c0%4 assassinated TEAMMATE %1 with %6 blade of vengeance, oops.';
$DeathMessageTeamKill[$DamageType::MG42, 0] = '\c0%4 guns down TEAMMATE %1 with %6 MG42!';
$DeathMessageTeamKill[$DamageType::MRXX, 0] = '\c0%4 perforates TEAMMATE %1 with %6 MRXX ZC4 machine gun!';
$DeathMessageTeamKill[$DamageType::PTorpedo, 0] = '\c0%4 vaporized TEAMMATE %1 with a proton torpedo cannon!';
$DeathMessageTeamKill[$DamageType::CrimsonHawk, 0] = '\c0%4 eliminates TEAMMATE %1 with %6 crimson hawk pistol!';
$DeathMessageTeamKill[$DamageType::M93, 0] = '\c0%4 nails TEAMMATE %1 with a burst fired M93 pistol!';
$DeathMessageTeamKill[$DamageType::ES77PulsePhaser, 0] = '\c0%4 eliminates TEAMMATE %1 with %6 ES-77 Pulse Phaser!';
//these used when a player is killed by an enemy //these used when a player is killed by an enemy
$DeathMessageCount = 5; $DeathMessageCount = 5;
@ -526,7 +581,7 @@ $DeathMessage[$DamageType::Pg700, 4] = '\c0%1 is rapidly gunned down from %4\'s
$DeathMessage[$DamageType::FellOff, 0] = '\c0%1 began %3 high flying sky diving career a little too close to the ground.';// $DeathMessage[$DamageType::FellOff, 0] = '\c0%1 began %3 high flying sky diving career a little too close to the ground.';//
$DeathMessage[$DamageType::FellOff, 1] = '\c0%1 must have thougt staying close to the edge was a great idea.';// $DeathMessage[$DamageType::FellOff, 1] = '\c0%1 must have thougt staying close to the edge was a great idea.';//
$DeathMessage[$DamageType::FellOff, 2] = '\c0%1 now realizes that gravity is the law, and everyone must obey it.';// $DeathMessage[$DamageType::FellOff, 2] = '\c0%1 learned about Newton\'s Law of Gravity a bit too late.';//
$DeathMessage[$DamageType::FellOff, 3] = '\c0%1 couldn\'t handle the gravity of the situation.';// $DeathMessage[$DamageType::FellOff, 3] = '\c0%1 couldn\'t handle the gravity of the situation.';//
$DeathMessage[$DamageType::FellOff, 4] = '\c0%1 takes a nice long trip down the edge.';// $DeathMessage[$DamageType::FellOff, 4] = '\c0%1 takes a nice long trip down the edge.';//
@ -548,10 +603,10 @@ $DeathMessage[$DamageType::RPG, 2] = '\c0%4 blasted %1 with %6 RPG';
$DeathMessage[$DamageType::RPG, 3] = '\c0%4 blows %1 into epic explosive proportions.'; $DeathMessage[$DamageType::RPG, 3] = '\c0%4 blows %1 into epic explosive proportions.';
$DeathMessage[$DamageType::RPG, 4] = '\c0%1 died after taking a RPG to the face from %4.'; $DeathMessage[$DamageType::RPG, 4] = '\c0%1 died after taking a RPG to the face from %4.';
$DeathMessage[$DamageType::LaserRifle, 0] = '\c0%4 beamed down %1 with an RSA Laser Rifle.'; $DeathMessage[$DamageType::LaserRifle, 0] = '\c0%4 beamed down %1 with a Laser Rifle.';
$DeathMessage[$DamageType::LaserRifle, 1] = '\c0%4 blasts ultimate laser beams into %1.'; $DeathMessage[$DamageType::LaserRifle, 1] = '\c0%4 blasts ultimate laser beams into %1.';
$DeathMessage[$DamageType::LaserRifle, 2] = '\c0%4 utilizes advanced RSA Laser Technology on %1'; $DeathMessage[$DamageType::LaserRifle, 2] = '\c0%4 utilizes advanced Laser Technology on %1';
$DeathMessage[$DamageType::LaserRifle, 3] = '\c0%4 burns holes into %1 from %6 RSA laser rifle.'; $DeathMessage[$DamageType::LaserRifle, 3] = '\c0%4 burns holes into %1 from %6 laser rifle.';
$DeathMessage[$DamageType::LaserRifle, 4] = '\c0%4 gives %1 some laser therapy, too bad it was lethal.'; $DeathMessage[$DamageType::LaserRifle, 4] = '\c0%4 gives %1 some laser therapy, too bad it was lethal.';
$DeathMessage[$DamageType::Burn, 0] = '\c0%1 screams fire, nobody comes to aid %2.'; $DeathMessage[$DamageType::Burn, 0] = '\c0%1 screams fire, nobody comes to aid %2.';
@ -573,10 +628,10 @@ $DeathMessage[$DamageType::SA2400, 3] = '\c0%4 unloads a full clip of buckshot u
$DeathMessage[$DamageType::SA2400, 4] = '\c0%1 has many tiny buckshot holes from %4 in %2.'; $DeathMessage[$DamageType::SA2400, 4] = '\c0%1 has many tiny buckshot holes from %4 in %2.';
$DeathMessage[$DamageType::deserteagle, 0] = '\c0%4 blows %1 away with a desert eagle pistol.'; $DeathMessage[$DamageType::deserteagle, 0] = '\c0%4 blows %1 away with a desert eagle pistol.';
$DeathMessage[$DamageType::deserteagle, 1] = '\c0%4 blasts a pistol shot that %1 will never forger.'; $DeathMessage[$DamageType::deserteagle, 1] = '\c0%4 blasts a pistol shot that %1 will never forget.';
$DeathMessage[$DamageType::deserteagle, 2] = '\c0%4 uses the most powerful pistol on %1'; $DeathMessage[$DamageType::deserteagle, 2] = '\c0%4 unleashes the most powerful pistol on %1';
$DeathMessage[$DamageType::deserteagle, 3] = '\c0%4 shows %1 some desert eagle skillz.'; $DeathMessage[$DamageType::deserteagle, 3] = '\c0%4 shows %1 some desert eagle skillz.';
$DeathMessage[$DamageType::deserteagle, 4] = '\c0%4 gives %1 some D.Eagle bullets, they are murderous.'; $DeathMessage[$DamageType::deserteagle, 4] = '\c0%4 gives %1 a rocking wonderful time with a desert eagle barrage.';
$DeathMessage[$DamageType::FissionBomb, 0] = '\c0%4 kills %1 with a Fission Bomb..'; $DeathMessage[$DamageType::FissionBomb, 0] = '\c0%4 kills %1 with a Fission Bomb..';
$DeathMessage[$DamageType::FissionBomb, 1] = '\c0%4 kills %1 with a Fission Bomb..'; $DeathMessage[$DamageType::FissionBomb, 1] = '\c0%4 kills %1 with a Fission Bomb..';
@ -584,3 +639,74 @@ $DeathMessage[$DamageType::FissionBomb, 2] = '\c0%4 kills %1 with a Fission Bomb
$DeathMessage[$DamageType::FissionBomb, 3] = '\c0%4 kills %1 with a Fission Bomb..'; $DeathMessage[$DamageType::FissionBomb, 3] = '\c0%4 kills %1 with a Fission Bomb..';
$DeathMessage[$DamageType::FissionBomb, 4] = '\c0%4 kills %1 with a Fission Bomb..'; $DeathMessage[$DamageType::FissionBomb, 4] = '\c0%4 kills %1 with a Fission Bomb..';
$DeathMessage[$DamageType::Javelin, 0] = '\c0%4 fires a rocket which goes up.. %1 stares in astonishment as it comes back down.';
$DeathMessage[$DamageType::Javelin, 1] = '\c0%1 was blasted out of existence by %4\'s javelin rocket.';
$DeathMessage[$DamageType::Javelin, 2] = '\c0%1 has been scattered across the battlefield thanks to %4\'s javelin.';
$DeathMessage[$DamageType::Javelin, 3] = '\c0%4 strikes down %1 with a javelin rocket from afar.';
$DeathMessage[$DamageType::Javelin, 4] = '\c0%1 experiences explosive javelin decomposition from %4.';
$DeathMessage[$DamageType::Stinger, 0] = '\c0%4 ends %1\'s vehicular journey with a stinger missile.';
$DeathMessage[$DamageType::Stinger, 1] = '\c0%1 is knocked out of the sky by %4\'s stinger missile.';
$DeathMessage[$DamageType::Stinger, 2] = '\c0%1\'s floating bits and remains rain down from %4\'s stinger missile.';
$DeathMessage[$DamageType::Stinger, 3] = '\c0%4 shoots %1 out of the sky with a stinger missile.';
$DeathMessage[$DamageType::Stinger, 4] = '\c0%1 gets that seeking feeling from %4\'s stinger missile.';
$DeathMessage[$DamageType::StaticGrenade, 0] = '\c0%4 ends %1 with an electrical explosive charge.';
$DeathMessage[$DamageType::StaticGrenade, 1] = '\c0%1 experiences violent electrical fury thanks to %4.';
$DeathMessage[$DamageType::StaticGrenade, 2] = '\c0%4 tosses the static grenade of life ending power at %1.';
$DeathMessage[$DamageType::StaticGrenade, 3] = '\c0%4 nails %1 with a static grenade.';
$DeathMessage[$DamageType::StaticGrenade, 4] = '\c0%1\'s life ends with violent electrical blasts, curtosey of %4.';
$DeathMessage[$DamageType::Plasmasaber, 0] = '\c0%4 strikes down %1 with %6 plasmasaber.';
$DeathMessage[$DamageType::Plasmasaber, 1] = '\c0%1 endures lethal heated stab wounds courtesy of %4\'s plasmasaber.';
$DeathMessage[$DamageType::Plasmasaber, 2] = '\c0%4 swings to the fences with a plasmasaber in %1\'s general direction.';
$DeathMessage[$DamageType::Plasmasaber, 3] = '\c0%4 nails %1 with a plasmasaber.';
$DeathMessage[$DamageType::Plasmasaber, 4] = '\c0%1\'s death was swift and vengeful, thanks to %4\'s saber skills.';
$DeathMessage[$DamageType::BladeOfVengance, 0] = '\c0%4 strikes down %1 with %6 blade of vengeance.';
$DeathMessage[$DamageType::BladeOfVengance, 1] = '\c0%1 endures lethal sword wounds from %4.';
$DeathMessage[$DamageType::BladeOfVengance, 2] = '\c0%4 stabs %1 lethaly with the blade of vengeance.';
$DeathMessage[$DamageType::BladeOfVengance, 3] = '\c0%4 hacks and slashes at %1 with a blade of vengeance.';
$DeathMessage[$DamageType::BladeOfVengance, 4] = '\c0%1\'s swordmanship skills were outmatched by %4 and %6 blade of vengeance.';
$DeathMessage[$DamageType::BladeOfVengance_Assassination, 0] = '\c0%4 holds %1 in that close, rear, and stabtastic aspect.';
$DeathMessage[$DamageType::BladeOfVengance_Assassination, 1] = '\c0%1 takes a sword to the back courtesy of %4.';
$DeathMessage[$DamageType::BladeOfVengance_Assassination, 2] = '\c0%4 assassinated %1 with %6 blade of vengeance.';
$DeathMessage[$DamageType::BladeOfVengance_Assassination, 3] = '\c0%4 strikes down %1 in that lethal backstabbing fashion.';
$DeathMessage[$DamageType::BladeOfVengance_Assassination, 4] = '\c0%1\'s unexpected blade of vengeance death came quickly from %4.';
$DeathMessage[$DamageType::MG42, 0] = '\c0%4 unleashes the full power of %6 MG42 upon %1.';
$DeathMessage[$DamageType::MG42, 1] = '\c0%4 tears apart %1 with an MG42 machine gun.';
$DeathMessage[$DamageType::MG42, 2] = '\c0%4 shows %1 the full power of an MG42 machine gun';
$DeathMessage[$DamageType::MG42, 3] = '\c0%4 blows numerous holes into %1, MG42 sized holes.';
$DeathMessage[$DamageType::MG42, 4] = '\c0%1 is rapidly perforated by %4\'s MG42.';
$DeathMessage[$DamageType::MRXX, 0] = '\c0%4 turns %6 trusted harbinger machine gun in %1\'s general direction.';
$DeathMessage[$DamageType::MRXX, 1] = '\c0%4 annihilates %1 with %6 MRXX ZC4 machine gun.';
$DeathMessage[$DamageType::MRXX, 2] = '\c0%4 shreds %1 with an MRXX ZC4 machine gun.';
$DeathMessage[$DamageType::MRXX, 3] = '\c0%4 rips apart %1 with an MRXX ZC4.';
$DeathMessage[$DamageType::MRXX, 4] = '\c0%1 is shown the power of harbinger machine gun weaponry by %4.';
$DeathMessage[$DamageType::PTorpedo, 0] = '\c0%4 aims down the scope on %6 proton torpedo cannon, %1 ceased to exist.';
$DeathMessage[$DamageType::PTorpedo, 1] = '\c0%4 vaporizes %1 with %6 proton torpedo cannon.';
$DeathMessage[$DamageType::PTorpedo, 2] = '\c0%4 turns %1 to dust with a single proton torpedo strike.';
$DeathMessage[$DamageType::PTorpedo, 3] = '\c0%4 ended the existence of %1 with a proton torpedo cannon.';
$DeathMessage[$DamageType::PTorpedo, 4] = '\c0%1 gets one sight of a flash, followed by the destructive end thanks to %4.';
$DeathMessage[$DamageType::CrimsonHawk, 0] = '\c0%4 strikes down %1 with %6 crimson hawk pulse pistol.';
$DeathMessage[$DamageType::CrimsonHawk, 1] = '\c0%4 takes down %1 with rapid energy pulses from a crimson hawk.';
$DeathMessage[$DamageType::CrimsonHawk, 2] = '\c0%4 shows %1 what happens when you face down Trevor Haliade\'s pistol.';
$DeathMessage[$DamageType::CrimsonHawk, 3] = '\c0%4 unloads rapid pulse bursts upon %1 with a crimson hawk pistol.';
$DeathMessage[$DamageType::CrimsonHawk, 4] = '\c0%1 has nowhere to run or hide once %4\'s rapid fire pulses engage.';
$DeathMessage[$DamageType::M93, 0] = '\c0%4 unleashes burst fired pistol rounds upon %1.';
$DeathMessage[$DamageType::M93, 1] = '\c0%4 eliminates %1 with %6 M93 pistol.';
$DeathMessage[$DamageType::M93, 2] = '\c0%4 hits %1 with burst fired precision small arms fire.';
$DeathMessage[$DamageType::M93, 3] = '\c0%4 overpowers %1 with %6 M93 burst fire pistol.';
$DeathMessage[$DamageType::M93, 4] = '\c0%1 is put down by %4\'s M93 bursts.';
$DeathMessage[$DamageType::ES77PulsePhaser, 0] = '\c0%4 nails %1 with repeated heated energy pulses.';
$DeathMessage[$DamageType::ES77PulsePhaser, 1] = '\c0%4 eliminates %1 with %6 ES-77 Pulse Phaser.';
$DeathMessage[$DamageType::ES77PulsePhaser, 2] = '\c0%4 shows %1 the power of the pulse phaser.';
$DeathMessage[$DamageType::ES77PulsePhaser, 3] = '\c0%4 fires off superheated pulse shots in %1\'s direction.';
$DeathMessage[$DamageType::ES77PulsePhaser, 4] = '\c0%4 makes short work of %1 with a pulse phaser.';

View file

@ -38,7 +38,7 @@ $NameToInv["Tech"] = "Tech";
$InvWeapon[0] = "S3 Combat Rifle"; $InvWeapon[0] = "S3 Combat Rifle";
$InvWeapon[1] = "G41 S.A. Rifle"; $InvWeapon[1] = "G41 S.A. Rifle";
$InvWeapon[2] = "M4A1"; $InvWeapon[2] = "M4A1";
$InvWeapon[3] = "RSA Laser Rifle"; $InvWeapon[3] = "UR-22 Laser Rifle";
$InvWeapon[4] = "Sh4d3 Rifle"; $InvWeapon[4] = "Sh4d3 Rifle";
$InvWeapon[5] = "LUST Ion Rifle"; $InvWeapon[5] = "LUST Ion Rifle";
$InvWeapon[6] = "Pulse Rifle"; $InvWeapon[6] = "Pulse Rifle";
@ -95,7 +95,7 @@ $NameToInv["LX53 AV Launcher"] = "MissileLauncher";
$NameToInv["RP-432 MG"] = "RP432"; $NameToInv["RP-432 MG"] = "RP432";
$NameToInv["Mini-Chaingun"] = "MiniChaingun"; $NameToInv["Mini-Chaingun"] = "MiniChaingun";
$NameToInv["Wp400 Shotgun"] = "Wp400"; $NameToInv["Wp400 Shotgun"] = "Wp400";
$NameToInv["RSA Laser Rifle"] = "lasergun"; $NameToInv["UR-22 Laser Rifle"] = "lasergun";
$NameToInv["RPG-7"] = "RPG"; $NameToInv["RPG-7"] = "RPG";
$NameToInv["Manipulator Tool"] = "EditTool"; $NameToInv["Manipulator Tool"] = "EditTool";
$NameToInv["LUX-4 Ion Launcher"] = "IonLauncher"; $NameToInv["LUX-4 Ion Launcher"] = "IonLauncher";

View file

@ -2691,10 +2691,10 @@ $ammoType[47] = "Model1887Ammo";
$ammoType[48] = "NapalmAmmo"; $ammoType[48] = "NapalmAmmo";
function Armor::onCollision(%this,%obj,%col,%forceVehicleNode) function Armor::onCollision(%this, %obj, %col, %forceVehicleNode) {
{ if (%obj.getState() $= "Dead") {
if (%obj.getState() $= "Dead")
return; return;
}
%dataBlock = %col.getDataBlock(); %dataBlock = %col.getDataBlock();
%colarmortype = %Datablock.getname(); %colarmortype = %Datablock.getname();
@ -2703,8 +2703,8 @@ function Armor::onCollision(%this,%obj,%col,%forceVehicleNode)
%client = %obj.client; %client = %obj.client;
// player collided with a vehicle // player collided with a vehicle
%node = -1; %node = -1;
if (%forceVehicleNode !$= "" || (%className $= WheeledVehicleData || %className $= FlyingVehicleData || %className $= HoverVehicleData) && if (%forceVehicleNode !$= "" || (%className $= WheeledVehicleData || %className $= FlyingVehicleData || %className $= HoverVehicleData)
%obj.mountVehicle && %obj.getState() $= "Move" && %col.mountable && !%obj.inStation && %col.getDamageState() !$= "Destroyed") { && %obj.mountVehicle && %obj.getState() $= "Move" && %col.mountable && !%obj.inStation && %col.getDamageState() !$= "Destroyed") {
// Escape pod // Escape pod
if (%dataBlock == EscapePodVehicle.getID()) { if (%dataBlock == EscapePodVehicle.getID()) {
@ -2720,38 +2720,35 @@ function Armor::onCollision(%this,%obj,%col,%forceVehicleNode)
//if the player is an AI, he should snap to the mount points in node order, //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... //to ensure they mount the turret before the passenger seat, regardless of where they collide...
if (!%obj.isZombie && %obj.client.isAIControlled()) if (!%obj.isZombie && %obj.client.isAIControlled()) {
{
%transform = %col.getTransform(); %transform = %col.getTransform();
//either the AI is *required* to pilot, or they'll pick the first available passenger seat //either the AI is *required* to pilot, or they'll pick the first available passenger seat
if (%client.pilotVehicle) if (%client.pilotVehicle) {
{
//make sure the bot is in light armor //make sure the bot is in light armor
if (%client.player.getArmorSize() $= "Light") if (%client.player.getArmorSize() $= "Light") {
{
//make sure the pilot seat is empty //make sure the pilot seat is empty
if (!%col.getMountNodeObject(0)) if (!%col.getMountNodeObject(0)) {
%node = 0; %node = 0;
} }
} }
else }
else {
%node = findAIEmptySeat(%col, %obj); %node = findAIEmptySeat(%col, %obj);
} }
else }
else {
%node = findEmptySeat(%col, %obj, %forceVehicleNode); %node = findEmptySeat(%col, %obj, %forceVehicleNode);
}
//now mount the player in the vehicle //now mount the player in the vehicle
if(%node >= 0) if(%node >= 0) {
{
// players can't be pilots, bombardiers or turreteers if they have // players can't be pilots, bombardiers or turreteers if they have
// "large" packs -- stations, turrets, turret barrels // "large" packs -- stations, turrets, turret barrels
if(hasLargePack(%obj)) { if(hasLargePack(%obj)) {
// check to see if attempting to enter a "sitting" node // check to see if attempting to enter a "sitting" node
if(nodeIsSitting(%datablock, %node)) { if(nodeIsSitting(%datablock, %node)) {
// send the player a message -- can't sit here with large pack // send the player a message -- can't sit here with large pack
if(!%obj.noSitMessage) if(!%obj.noSitMessage) {
{
%obj.noSitMessage = true; %obj.noSitMessage = true;
%obj.schedule(2000, "resetSitMessage"); %obj.schedule(2000, "resetSitMessage");
messageClient(%obj.client, 'MsgCantSitHere', '\c2Pack too large, can\'t occupy this seat.~wfx/misc/misc.error.wav'); messageClient(%obj.client, 'MsgCantSitHere', '\c2Pack too large, can\'t occupy this seat.~wfx/misc/misc.error.wav');
@ -2759,21 +2756,25 @@ function Armor::onCollision(%this,%obj,%col,%forceVehicleNode)
return; return;
} }
} }
if(%col.noEnemyControl && %obj.team != %col.team) if(%col.noEnemyControl && %obj.team != %col.team) {
return; return;
}
commandToClient(%obj.client,'SetDefaultVehicleKeys', true); commandToClient(%obj.client,'SetDefaultVehicleKeys', true);
//If pilot or passenger then bind a few extra keys //If pilot or passenger then bind a few extra keys
if(%node == 0) if(%node == 0) {
commandToClient(%obj.client,'SetPilotVehicleKeys', true); commandToClient(%obj.client,'SetPilotVehicleKeys', true);
else }
else {
commandToClient(%obj.client,'SetPassengerVehicleKeys', true); commandToClient(%obj.client,'SetPassengerVehicleKeys', true);
}
if(!%obj.inStation) if(!%obj.inStation) {
%col.lastWeapon = ( %col.getMountedImage($WeaponSlot) == 0 ) ? "" : %col.getMountedImage($WeaponSlot).getName().item; %col.lastWeapon = ( %col.getMountedImage($WeaponSlot) == 0 ) ? "" : %col.getMountedImage($WeaponSlot).getName().item;
else }
else {
%col.lastWeapon = %obj.lastWeapon; %col.lastWeapon = %obj.lastWeapon;
}
%obj.preVehicleMountPos = %obj.getPosition(); %obj.preVehicleMountPos = %obj.getPosition();
%col.mountObject(%obj,%node); %col.mountObject(%obj,%node);
@ -2781,11 +2782,11 @@ function Armor::onCollision(%this,%obj,%col,%forceVehicleNode)
%obj.mVehicle = %col; %obj.mVehicle = %col;
// if player is repairing something, stop it // if player is repairing something, stop it
if(%obj.repairing) if(%obj.repairing) {
stopRepairing(%obj); stopRepairing(%obj);
}
//this will setup the huds as well... //this will setup the huds as well...
%dataBlock.playerMounted(%col,%obj, %node); %dataBlock.playerMounted(%col, %obj, %node);
} }
} }
// TODO - keep these up to date // TODO - keep these up to date
@ -2793,34 +2794,26 @@ function Armor::onCollision(%this,%obj,%col,%forceVehicleNode)
%obj.playAudio(0,(GetRandom()*2 >1) ? LFootMediumMetalSound : RFootMediumMetalSound); %obj.playAudio(0,(GetRandom()*2 >1) ? LFootMediumMetalSound : RFootMediumMetalSound);
%obj.lastDepCol = %col; %obj.lastDepCol = %col;
%obj.lastDepColPos = %obj.getPosition(); %obj.lastDepColPos = %obj.getPosition();
if (%className $= "wall") if (%className $= "wall") {
doorfunction(%obj,%col); doorfunction(%obj, %col);
}
} }
else if (%className $= "Armor") { else if (%className $= "Armor") {
// player has collided with another player // player has collided with another player
if(%obj.isZombie) {
%objiszomb = 1;
}
else {
%objiszomb = 0;
}
if(%col.onfire == 1 && %obj.onfire != 1 && !%obj.rapierShield){ if(%col.onfire == 1 && %obj.onfire != 1 && !%obj.rapierShield){
%obj.maxfirecount = (%col.maxfirecount - %col.firecount); %obj.maxfirecount = (%col.maxfirecount - %col.firecount);
%obj.onfire = 1; %obj.onfire = 1;
schedule(10, %obj, "burnloop", %obj); schedule(10, %obj, "burnloop", %obj);
} }
if(%col.getState() $= "Dead" && !%objiszomb) { if(%col.getState() $= "Dead" && (!%obj.isZombie && !%col.isZombie)) {
%obj.lasttouchedcorpse = %col; %obj.lasttouchedcorpse = %col;
%gotSomething = false; %gotSomething = false;
// it's corpse-looting time! // it's corpse-looting time!
// weapons -- don't pick up more than you are allowed to carry! // weapons -- don't pick up more than you are allowed to carry!
for(%i = 0; ( %obj.weaponCount < %obj.getDatablock().maxWeapons ) && $InvWeapon[%i] !$= ""; %i++) for(%i = 0; ( %obj.weaponCount < %obj.getDatablock().maxWeapons ) && $InvWeapon[%i] !$= ""; %i++) {
{
%weap = $NameToInv[$InvWeapon[%i]]; %weap = $NameToInv[$InvWeapon[%i]];
if ( %col.hasInventory( %weap ) ) if ( %col.hasInventory( %weap ) ) {
{ if ( %obj.incInventory(%weap, 1) > 0 ) {
if ( %obj.incInventory(%weap, 1) > 0 )
{
%col.decInventory(%weap, 1); %col.decInventory(%weap, 1);
%gotSomething = true; %gotSomething = true;
messageClient(%obj.client, 'MsgItemPickup', '\c0You picked up %1.', %weap.pickUpName); messageClient(%obj.client, 'MsgItemPickup', '\c0You picked up %1.', %weap.pickUpName);
@ -2845,7 +2838,9 @@ function Armor::onCollision(%this,%obj,%col,%forceVehicleNode)
%GotSomething = true; %GotSomething = true;
messageClient(%obj.client, 'MsgItemPickup', "\c0You picked up "@%ClipPickUpName@"."); messageClient(%obj.client, 'MsgItemPickup', "\c0You picked up "@%ClipPickUpName@".");
//check if reload needs to be done? //check if reload needs to be done?
if(%col.inv[%WImg.ammo] == 0) {
AttemptReload(%WImg, %obj, $WeaponSlot);
}
} }
else { else {
%clipsToAdd = %ColClipsLeft; %clipsToAdd = %ColClipsLeft;
@ -2859,25 +2854,20 @@ function Armor::onCollision(%this,%obj,%col,%forceVehicleNode)
} }
} }
// targeting laser: // targeting laser:
if ( %col.hasInventory( "TargetingLaser" ) ) if ( %col.hasInventory( "TargetingLaser" ) ) {
{ if ( %obj.incInventory( "TargetingLaser", 1 ) > 0 ) {
if ( %obj.incInventory( "TargetingLaser", 1 ) > 0 )
{
%col.decInventory( "TargetingLaser", 1 ); %col.decInventory( "TargetingLaser", 1 );
%gotSomething = true; %gotSomething = true;
messageClient( %obj.client, 'MsgItemPickup', '\c0You picked up a targeting laser.' ); messageClient( %obj.client, 'MsgItemPickup', '\c0You picked up a targeting laser.' );
} }
} }
// ammo // ammo
for(%j = 0; $ammoType[%j] !$= ""; %j++) for(%j = 0; $ammoType[%j] !$= ""; %j++) {
{
%ammoAmt = %col.inv[$ammoType[%j]]; %ammoAmt = %col.inv[$ammoType[%j]];
if(%ammoAmt) if(%ammoAmt) {
{
// incInventory returns the amount of stuff successfully grabbed // incInventory returns the amount of stuff successfully grabbed
%grabAmt = %obj.incInventory($ammoType[%j], %ammoAmt); %grabAmt = %obj.incInventory($ammoType[%j], %ammoAmt);
if(%grabAmt > 0) if(%grabAmt > 0) {
{
%col.decInventory($ammoType[%j], %grabAmt); %col.decInventory($ammoType[%j], %grabAmt);
%gotSomething = true; %gotSomething = true;
messageClient(%obj.client, 'MsgItemPickup', '\c0You picked up %1.', $ammoType[%j].pickUpName); messageClient(%obj.client, 'MsgItemPickup', '\c0You picked up %1.', $ammoType[%j].pickUpName);
@ -2890,26 +2880,21 @@ function Armor::onCollision(%this,%obj,%col,%forceVehicleNode)
for(%x = 0; $InvGrenade[%x] !$= ""; %x++) { for(%x = 0; $InvGrenade[%x] !$= ""; %x++) {
%gren = $NameToInv[$InvGrenade[%x]]; %gren = $NameToInv[$InvGrenade[%x]];
%playerGrenAmt = %obj.inv[%gren]; %playerGrenAmt = %obj.inv[%gren];
if(%playerGrenAmt > 0) if(%playerGrenAmt > 0) {
{
%playerGrenType = %gren; %playerGrenType = %gren;
break; break;
} }
} }
// grenades // grenades
for(%k = 0; $InvGrenade[%k] !$= ""; %k++) for(%k = 0; $InvGrenade[%k] !$= ""; %k++) {
{
%gren = $NameToInv[$InvGrenade[%k]]; %gren = $NameToInv[$InvGrenade[%k]];
%corpseGrenAmt = %col.inv[%gren]; %corpseGrenAmt = %col.inv[%gren];
// does the corpse hold any of this grenade type? // does the corpse hold any of this grenade type?
if(%corpseGrenAmt) if(%corpseGrenAmt) {
{
// can the player pick up this grenade type? // can the player pick up this grenade type?
if((%playerGrenType $= "None") || (%playerGrenType $= %gren)) if((%playerGrenType $= "None") || (%playerGrenType $= %gren)) {
{
%taken = %obj.incInventory(%gren, %corpseGrenAmt); %taken = %obj.incInventory(%gren, %corpseGrenAmt);
if(%taken > 0) if(%taken > 0) {
{
%col.decInventory(%gren, %taken); %col.decInventory(%gren, %taken);
%gotSomething = true; %gotSomething = true;
messageClient(%obj.client, 'MsgItemPickup', '\c0You picked up %1.', %gren.pickUpName); messageClient(%obj.client, 'MsgItemPickup', '\c0You picked up %1.', %gren.pickUpName);
@ -2921,27 +2906,22 @@ function Armor::onCollision(%this,%obj,%col,%forceVehicleNode)
} }
// figure out what type, if any, mines the (live) player has // figure out what type, if any, mines the (live) player has
%playerMineType = "None"; %playerMineType = "None";
for(%y = 0; $InvMine[%y] !$= ""; %y++) for(%y = 0; $InvMine[%y] !$= ""; %y++) {
{
%mType = $NameToInv[$InvMine[%y]]; %mType = $NameToInv[$InvMine[%y]];
%playerMineAmt = %obj.inv[%mType]; %playerMineAmt = %obj.inv[%mType];
if(%playerMineAmt > 0) if(%playerMineAmt > 0) {
{
%playerMineType = %mType; %playerMineType = %mType;
break; break;
} }
} }
// mines // mines
for(%l = 0; $InvMine[%l] !$= ""; %l++) for(%l = 0; $InvMine[%l] !$= ""; %l++) {
{
%mine = $NameToInv[$InvMine[%l]]; %mine = $NameToInv[$InvMine[%l]];
%mineAmt = %col.inv[%mine]; %mineAmt = %col.inv[%mine];
if(%mineAmt) { if(%mineAmt) {
if((%playerMineType $= "None") || (%playerMineType $= %mine)) if((%playerMineType $= "None") || (%playerMineType $= %mine)) {
{
%grabbed = %obj.incInventory(%mine, %mineAmt); %grabbed = %obj.incInventory(%mine, %mineAmt);
if(%grabbed > 0) if(%grabbed > 0) {
{
%col.decInventory(%mine, %grabbed); %col.decInventory(%mine, %grabbed);
%gotSomething = true; %gotSomething = true;
messageClient(%obj.client, 'MsgItemPickup', '\c0You picked up %1.', %mine.pickUpName); messageClient(%obj.client, 'MsgItemPickup', '\c0You picked up %1.', %mine.pickUpName);
@ -2953,11 +2933,9 @@ function Armor::onCollision(%this,%obj,%col,%forceVehicleNode)
} }
// beacons // beacons
%beacAmt = %col.inv[Beacon]; %beacAmt = %col.inv[Beacon];
if(%beacAmt) if(%beacAmt) {
{
%bTaken = %obj.incInventory(Beacon, %beacAmt); %bTaken = %obj.incInventory(Beacon, %beacAmt);
if(%bTaken > 0) if(%bTaken > 0) {
{
%col.decInventory(Beacon, %bTaken); %col.decInventory(Beacon, %bTaken);
%gotSomething = true; %gotSomething = true;
messageClient(%obj.client, 'MsgItemPickup', '\c0You picked up %1.', Beacon.pickUpName); messageClient(%obj.client, 'MsgItemPickup', '\c0You picked up %1.', Beacon.pickUpName);
@ -2966,11 +2944,9 @@ function Armor::onCollision(%this,%obj,%col,%forceVehicleNode)
} }
// repair kit // repair kit
%rkAmt = %col.inv[RepairKit]; %rkAmt = %col.inv[RepairKit];
if(%rkAmt) if(%rkAmt) {
{
%rkTaken = %obj.incInventory(RepairKit, %rkAmt); %rkTaken = %obj.incInventory(RepairKit, %rkAmt);
if(%rkTaken > 0) if(%rkTaken > 0) {
{
%col.decInventory(RepairKit, %rkTaken); %col.decInventory(RepairKit, %rkTaken);
%gotSomething = true; %gotSomething = true;
messageClient(%obj.client, 'MsgItemPickup', '\c0You picked up %1.', RepairKit.pickUpName); messageClient(%obj.client, 'MsgItemPickup', '\c0You picked up %1.', RepairKit.pickUpName);
@ -2978,131 +2954,12 @@ function Armor::onCollision(%this,%obj,%col,%forceVehicleNode)
} }
} }
} }
else if((%colarmortype $= "ZombieArmor" || %col.canZkill == 1) && %obj.Infected != 1 && %objiszomb != 1 && !%obj.rapierShield){ // Phantom139:
%Vector = vectorscale(%col.getvelocity(), 100); // TWM2 3.9.2: Major cleaning of zombie logic
%obj.applyimpulse(%obj.getposition(), %Vector); // All zombie damage on collision is now handled by the individual datablocks in the zombieTypes/*.cs files.
%obj.Infected = 1; // These #'s can be tweaked via the ZombieCore.cs file in the globals list at the top.
%obj.InfectedLoop = schedule(10, %obj, "TWM2Lib_Zombie_Core", "InfectLoop", %obj); else if($TWM2::ArmorHasCollisionFunction[%colarmortype]) {
%obj.damage(0, %obj.position, 0.2, $DamageType::Zombie); %datablock.armorCollisionFunction(%col, %obj);
}
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) { else if ($PlayerSnapTo == true) {
if (!isObject(%col.getMountedObject(0))) { if (!isObject(%col.getMountedObject(0))) {
@ -3125,10 +2982,12 @@ function Armor::onCollision(%this,%obj,%col,%forceVehicleNode)
%col.applyImpulse(%col.getPosition(),"0 0 500"); %col.applyImpulse(%col.getPosition(),"0 0 500");
} }
if (%obj.client.race $= "Human" && $SexChangeMode == true) { if (%obj.client.race $= "Human" && $SexChangeMode == true) {
if (%obj.client.oldSex $= "") if (%obj.client.oldSex $= "") {
%obj.client.oldSex = %obj.client.sex; %obj.client.oldSex = %obj.client.sex;
if (%obj.client.oldVoice $= "") }
if (%obj.client.oldVoice $= "") {
%obj.client.oldVoice = %obj.client.voice; %obj.client.oldVoice = %obj.client.voice;
}
%voice = getTaggedString(getTargetVoice(%obj.client.target)); %voice = getTaggedString(getTargetVoice(%obj.client.target));
%voiceNum = getSubStr(%voice,strLen(%voice)-1,1); %voiceNum = getSubStr(%voice,strLen(%voice)-1,1);
if (%obj.client.sex $= "Male") { if (%obj.client.sex $= "Male") {
@ -3143,10 +3002,55 @@ function Armor::onCollision(%this,%obj,%col,%forceVehicleNode)
} }
%obj.setArmor(%client.armor); %obj.setArmor(%client.armor);
} }
if(%gotSomething) if(%gotSomething) {
%col.playAudio(0, CorpseLootingSound); %col.playAudio(0, CorpseLootingSound);
} }
}
} }
//else if((%colarmortype $= "LordRogZombieArmor" && %objiszomb != 1 && !%obj.rapierShield)) {
// if(%col.isAllyBot && !%col.isAttacking) {
// return;
// }
// %obj.scriptkill($DamageType::Admin);
// %col.setDamageLevel(%col.getDamageLevel() - 10.0);
// %col.setVelocity("0 0 0");
// if(!%obj.iszombie) {
// ServerPlay3d(BOVHitSound, %obj.getPosition());
// %randMessage = getrandom(3)+1;
// switch(%randMessage) {
// case 1:
// MessageAll('MessageAll', "\c4"@$TWM2::ZombieName[8]@": Slice And Dice "@%obj.client.namebase@"!");
// case 2:
// MessageAll('MessageAll', "\c4"@$TWM2::ZombieName[8]@": Die... "@%obj.client.namebase@" Painfully.");
// case 3:
// MessageAll('MessageAll', "\c4"@$TWM2::ZombieName[8]@": Your life "@%obj.client.namebase@", is now mine!");
// default:
// MessageAll('MessageAll', "\c4"@$TWM2::ZombieName[8]@": Slice And Dice "@%obj.client.namebase@"!");
// }
// }
//}
//else if((%colarmortype $= "ROGZombieArmor" && %objiszomb != 1 && !%obj.rapierShield && !%col.isPlayerRog)) {
// if(%col.isAllyBot && !%col.isAttacking) {
// return;
// }
// %obj.scriptkill($DamageType::Admin);
// %col.setDamageLevel(%col.getDamageLevel() - 10.0);
// %col.setVelocity("0 0 0");
// if(!%obj.iszombie) {
// ServerPlay3d(BOVHitSound, %obj.getPosition());
// %randMessage = getrandom(3)+1;
// switch(%randMessage) {
// case 1:
// MessageAll('MessageAll', "\c4"@$TWM2::ZombieName[16]@": Slice And Dice "@%obj.client.namebase@"!");
// case 2:
// MessageAll('MessageAll', "\c4"@$TWM2::ZombieName[16]@": Die... "@%obj.client.namebase@" Painfully.");
// case 3:
// MessageAll('MessageAll', "\c4"@$TWM2::ZombieName[16]@": Your life "@%obj.client.namebase@", is now mine!");
// default:
// MessageAll('MessageAll', "\c4"@$TWM2::ZombieName[16]@": Slice And Dice "@%obj.client.namebase@"!");
// }
// }
//}
function Player::resetSitMessage(%obj) function Player::resetSitMessage(%obj)
{ {

View file

@ -4,7 +4,7 @@ datablock SeekerProjectileData(JavelinMissile) {
hasDamageRadius = true; hasDamageRadius = true;
indirectDamage = 1.8; //Requires Lock indirectDamage = 1.8; //Requires Lock
damageRadius = 18.0; damageRadius = 18.0;
radiusDamageType = $DamageType::Missile; radiusDamageType = $DamageType::Javelin;
kickBackStrength = 2000; kickBackStrength = 2000;
ImageSource = "JavelinImage"; ImageSource = "JavelinImage";
@ -61,8 +61,7 @@ datablock SeekerProjectileData(JavelinMissile) {
// Ammo // Ammo
//-------------------------------------- //--------------------------------------
datablock ItemData(JavelinAmmo) datablock ItemData(JavelinAmmo) {
{
className = Ammo; className = Ammo;
catagory = "Ammo"; catagory = "Ammo";
shapeFile = "ammo_missile.dts"; shapeFile = "ammo_missile.dts";
@ -73,14 +72,12 @@ datablock ItemData(JavelinAmmo)
pickUpName = "some javelin rockets"; pickUpName = "some javelin rockets";
computeCRC = true; computeCRC = true;
}; };
//-------------------------------------------------------------------------- //--------------------------------------------------------------------------
// Weapon // Weapon
//-------------------------------------- //--------------------------------------
datablock ItemData(Javelin) datablock ItemData(Javelin) {
{
className = Weapon; className = Weapon;
catagory = "Spawn Items"; catagory = "Spawn Items";
shapeFile = "weapon_mortar.dts"; shapeFile = "weapon_mortar.dts";

View file

@ -53,8 +53,7 @@ datablock SeekerProjectileData(RPGMissile) {
// Ammo // Ammo
//-------------------------------------- //--------------------------------------
datablock ItemData(RPGAmmo) datablock ItemData(RPGAmmo) {
{
className = Ammo; className = Ammo;
catagory = "Ammo"; catagory = "Ammo";
shapeFile = "ammo_missile.dts"; shapeFile = "ammo_missile.dts";
@ -70,8 +69,7 @@ datablock ItemData(RPGAmmo)
//-------------------------------------------------------------------------- //--------------------------------------------------------------------------
// Weapon // Weapon
//-------------------------------------- //--------------------------------------
datablock ItemData(RPG) datablock ItemData(RPG) {
{
className = Weapon; className = Weapon;
catagory = "Spawn Items"; catagory = "Spawn Items";
shapeFile = "weapon_grenade_launcher.dts"; shapeFile = "weapon_grenade_launcher.dts";
@ -86,8 +84,7 @@ datablock ItemData(RPG)
emap = true; emap = true;
}; };
datablock ShapeBaseImageData(RPGImage) datablock ShapeBaseImageData(RPGImage) {
{
className = WeaponImage; className = WeaponImage;
shapeFile = "weapon_grenade_launcher.dts"; shapeFile = "weapon_grenade_launcher.dts";
item = RPG; item = RPG;
@ -184,10 +181,10 @@ datablock ShapeBaseImageData(RPGImage)
}; };
function RPGImage::OnFire(%data, %obj, %slot) { function RPGImage::OnFire(%data, %obj, %slot) {
// if($TWM2::PlayingSabo) { Inv. Ban lifted TWM2 1.8 // if($TWM2::PlayingSabo) { Inv. Ban lifted TWM2 1.8
// MessageClient(%thrower.client, 'MsgC4IsBanned', "\c5RPGs are banned in this game mode"); // MessageClient(%thrower.client, 'MsgC4IsBanned', "\c5RPGs are banned in this game mode");
// return; // return;
// } // }
%p = Parent::OnFire(%data, %obj, %slot); %p = Parent::OnFire(%data, %obj, %slot);
if(!%obj.client.UpgradeOn("Spread Neutralizer", %data.getName())) { if(!%obj.client.UpgradeOn("Spread Neutralizer", %data.getName())) {
schedule(500, 0, "RPGRandomMovement", %p); schedule(500, 0, "RPGRandomMovement", %p);
@ -202,6 +199,11 @@ function RPGRandomMovement(%p) {
if(!isObject(%p)) { if(!isObject(%p)) {
return; return;
} }
if(%p.ticksleft <= 0) { //time up!
%p.getDatablock().onExplode(%p, %p.getPosition(), 1);
%p.delete();
return;
}
%fw = %p.initialDirection; //current direction %fw = %p.initialDirection; //current direction
%x = (getRandom() - 0.5) * 2 * 3.1415926 * (25/1000); %x = (getRandom() - 0.5) * 2 * 3.1415926 * (25/1000);
%y = (getRandom() - 0.5) * 2 * 3.1415926 * (25/1000); %y = (getRandom() - 0.5) * 2 * 3.1415926 * (25/1000);
@ -222,15 +224,6 @@ function RPGRandomMovement(%p) {
%pnew.ticksleft = %p.ticksleft - 1; %pnew.ticksleft = %p.ticksleft - 1;
%pnew.ImageSource = "RPGImage"; %pnew.ImageSource = "RPGImage";
//echo(%pnew.ticksleft); //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(); %p.delete();
schedule(500, 0, "RPGRandomMovement", %pnew); schedule(500, 0, "RPGRandomMovement", %pnew);
}
} }

View file

@ -4,7 +4,7 @@ datablock SeekerProjectileData(StingerMissile) {
hasDamageRadius = true; hasDamageRadius = true;
indirectDamage = 1.4; //Requires Lock indirectDamage = 1.4; //Requires Lock
damageRadius = 18.0; damageRadius = 18.0;
radiusDamageType = $DamageType::Missile; radiusDamageType = $DamageType::Stinger;
kickBackStrength = 1000; kickBackStrength = 1000;
ImageSource = "StingerImage"; ImageSource = "StingerImage";
@ -61,8 +61,7 @@ datablock SeekerProjectileData(StingerMissile) {
// Ammo // Ammo
//-------------------------------------- //--------------------------------------
datablock ItemData(StingerAmmo) datablock ItemData(StingerAmmo) {
{
className = Ammo; className = Ammo;
catagory = "Ammo"; catagory = "Ammo";
shapeFile = "ammo_missile.dts"; shapeFile = "ammo_missile.dts";
@ -73,14 +72,12 @@ datablock ItemData(StingerAmmo)
pickUpName = "some Stinger rockets"; pickUpName = "some Stinger rockets";
computeCRC = true; computeCRC = true;
}; };
//-------------------------------------------------------------------------- //--------------------------------------------------------------------------
// Weapon // Weapon
//-------------------------------------- //--------------------------------------
datablock ItemData(Stinger) datablock ItemData(Stinger) {
{
className = Weapon; className = Weapon;
catagory = "Spawn Items"; catagory = "Spawn Items";
shapeFile = "weapon_mortar.dts"; shapeFile = "weapon_mortar.dts";
@ -197,8 +194,7 @@ datablock ShapeBaseImageData(StingerImage) {
stateAllowImageChange[9] = false; stateAllowImageChange[9] = false;
}; };
function StingerImage::onFire(%data,%obj,%slot) { function StingerImage::onFire(%data, %obj, %slot) {
%obj.decInventory(%data.ammo,1);
if(%obj.inv[%data.ammo] == 0) { //Added Phantom139, TWM2 if(%obj.inv[%data.ammo] == 0) { //Added Phantom139, TWM2
AttemptReload(%data, %obj, %slot); AttemptReload(%data, %obj, %slot);
} }
@ -219,12 +215,11 @@ function StingerImage::onFire(%data,%obj,%slot) {
%p.schedule(500, "setObjectTarget", %target); %p.schedule(500, "setObjectTarget", %target);
schedule(501, 0, "SetMissileTargeted", %target, %p); schedule(501, 0, "SetMissileTargeted", %target, %p);
%obj.decInventory(%data.ammo,1);
} }
else if(%obj.isLocked()) { else if(%obj.isLocked()) {
return; return;
} }
else {
return;
}
} }

View file

@ -1,5 +1,4 @@
datablock ItemData(StaticGrenadeThrown) datablock ItemData(StaticGrenadeThrown) {
{
className = Weapon; className = Weapon;
shapeFile = "ammo_plasma.dts"; shapeFile = "ammo_plasma.dts";
mass = 0.4; mass = 0.4;
@ -11,15 +10,13 @@ datablock ItemData(StaticGrenadeThrown)
underwaterExplosion = PlasmaBarrelBoltExplosion; underwaterExplosion = PlasmaBarrelBoltExplosion;
indirectDamage = 0.4; indirectDamage = 0.4;
damageRadius = 10.0; damageRadius = 10.0;
radiusDamageType = $DamageType::Grenade; radiusDamageType = $DamageType::StaticGrenade;
kickBackStrength = 2000; kickBackStrength = 2000;
computeCRC = true; computeCRC = true;
}; };
datablock ItemData(StaticGrenade) datablock ItemData(StaticGrenade) {
{
className = HandInventory; className = HandInventory;
catagory = "Handheld"; catagory = "Handheld";
shapeFile = "ammo_plasma.dts"; shapeFile = "ammo_plasma.dts";
@ -32,7 +29,6 @@ datablock ItemData(StaticGrenade)
isGrenade = true; isGrenade = true;
computeCRC = true; computeCRC = true;
}; };
function StaticGrenadeThrown::onThrow(%this, %gren) { function StaticGrenadeThrown::onThrow(%this, %gren) {
@ -47,8 +43,7 @@ function StaticGrenadeThrown::onCollision(%data, %obj, %col) {
detonateGrenade(%obj); detonateGrenade(%obj);
//Die now... //Die now...
if(!%col.isBoss && !%col.isGOF) { if(!%col.isBoss && !%col.isGOF) {
RadiusExplosion( %obj, %obj.getPosition(), 1, 100, 1000, RadiusExplosion( %obj, %obj.getPosition(), 1, 100, 1000, %obj.sourceObject, $DamageType::StaticGrenade);
%obj.sourceObject, $DamageType::Grenade);
} }
} }
} }

View file

@ -54,10 +54,9 @@ datablock ItemData(MG42Ammo) {
elasticity = 0.2; elasticity = 0.2;
friction = 0.6; friction = 0.6;
pickupRadius = 2; pickupRadius = 2;
pickUpName = "some PCT ammo"; pickUpName = "some mg42 rounds";
computeCRC = true; computeCRC = true;
}; };
//-------------------------------------------------------------------------- //--------------------------------------------------------------------------
@ -192,7 +191,7 @@ datablock ItemData(MG42) {
elasticity = 0.2; elasticity = 0.2;
friction = 0.6; friction = 0.6;
pickupRadius = 2; pickupRadius = 2;
pickUpName = "a Portible Chaingun Turret"; pickUpName = "a MG42 machine gun";
computeCRC = true; computeCRC = true;
emap = true; emap = true;
@ -209,7 +208,6 @@ datablock ShapeBaseImageData(MG42Image1) : MG42Image {
function MG42Image::onMount(%this,%obj,%slot) { function MG42Image::onMount(%this,%obj,%slot) {
Parent::onMount(%this, %obj, %slot); Parent::onMount(%this, %obj, %slot);
%obj.mountImage(MG42Image1, 3); %obj.mountImage(MG42Image1, 3);
} }
function MG42Image::onUnmount(%this,%obj,%slot) { function MG42Image::onUnmount(%this,%obj,%slot) {
@ -226,4 +224,3 @@ function MG42Image::onFire(%data, %obj, %slot) {
ServerPlay3d(ChaingunFireSound, %obj.getPosition()); ServerPlay3d(ChaingunFireSound, %obj.getPosition());
} }
} }

View file

@ -43,8 +43,7 @@ datablock TracerProjectileData(MRXXBullet) {
decalData[5] = ChaingunDecal6; decalData[5] = ChaingunDecal6;
}; };
datablock ItemData(MRXXAmmo) datablock ItemData(MRXXAmmo) {
{
className = Ammo; className = Ammo;
catagory = "Ammo"; catagory = "Ammo";
shapeFile = "ammo_chaingun.dts"; shapeFile = "ammo_chaingun.dts";
@ -55,7 +54,6 @@ datablock ItemData(MRXXAmmo)
pickUpName = "some MRXX ammo"; pickUpName = "some MRXX ammo";
computeCRC = true; computeCRC = true;
}; };
//-------------------------------------------------------------------------- //--------------------------------------------------------------------------

View file

@ -4,8 +4,7 @@ datablock AudioProfile(BOVHitSound) {
preload = true; preload = true;
}; };
datablock ShapeBaseImageData(BOVButt) datablock ShapeBaseImageData(BOVButt) {
{
shapeFile = "weapon_disc.dts"; shapeFile = "weapon_disc.dts";
mountPoint = 1; mountPoint = 1;
@ -13,6 +12,14 @@ datablock ShapeBaseImageData(BOVButt)
rotation = "2.0 -2.0 3.0 45"; // L/R - F/B - T/B rotation = "2.0 -2.0 3.0 45"; // L/R - F/B - T/B
}; };
datablock ShapeBaseImageData(BoVSwing) {
shapeFile = "weapon_disc.dts";
mountPoint = 1;
offset = "0.0 1.45 -0.4"; // L/R - F/B - T/B
rotation = "0 0 1 180"; // L/R - F/B - T/B
};
function swingbackbov(%obj) { function swingbackbov(%obj) {
%obj.unmountImage(6); %obj.unmountImage(6);
%obj.mountImage(BOVButt, 5); %obj.mountImage(BOVButt, 5);
@ -21,8 +28,8 @@ function swingbackbov(%obj) {
datablock LinearProjectileData(BOVhit) { datablock LinearProjectileData(BOVhit) {
projectileShapeName = "disc.dts"; projectileShapeName = "disc.dts";
emitterDelay = -1; emitterDelay = -1;
directDamage = 100.0; directDamage = 0.9;
radiusDamageType = $DamageType::Admin; radiusDamageType = $DamageType::BladeOfVengance;
kickBackStrength = 1750; kickBackStrength = 1750;
ImageSource = "BOVImage"; ImageSource = "BOVImage";
@ -32,11 +39,11 @@ datablock LinearProjectileData(BOVhit) {
underwaterExplosion = "ChaingunExplosion"; underwaterExplosion = "ChaingunExplosion";
splash = DiscSplash; splash = DiscSplash;
dryVelocity = 50; dryVelocity = 200;
wetVelocity = 30; wetVelocity = 200;
velInheritFactor = 0.5; velInheritFactor = 0.5;
fizzleTimeMS = 100; fizzleTimeMS = 25;
lifetimeMS = 100; lifetimeMS = 25;
explodeOnDeath = true; explodeOnDeath = true;
reflectOnWaterImpactAngle = 15.0; reflectOnWaterImpactAngle = 15.0;
explodeOnWaterImpact = true; explodeOnWaterImpact = true;
@ -54,8 +61,7 @@ datablock LinearProjectileData(BOVhit) {
//-------------------------------------------------------------------------- //--------------------------------------------------------------------------
// Weapon // Weapon
//-------------------------------------- //--------------------------------------
datablock ShapeBaseImageData(BOVImage) datablock ShapeBaseImageData(BOVImage) {
{
className = WeaponImage; className = WeaponImage;
shapeFile = "turret_muzzlepoint.dts"; shapeFile = "turret_muzzlepoint.dts";
item = BOV; item = BOV;
@ -108,8 +114,7 @@ datablock ShapeBaseImageData(BOVImage)
stateTransitionOnTimeout[6] = "Ready"; stateTransitionOnTimeout[6] = "Ready";
}; };
datablock ItemData(BOV) datablock ItemData(BOV) {
{
className = Weapon; className = Weapon;
catagory = "Spawn Items"; catagory = "Spawn Items";
shapeFile = "weapon_disc.dts"; shapeFile = "weapon_disc.dts";
@ -121,32 +126,23 @@ datablock ItemData(BOV)
pickUpName = "a blade of vengance"; pickUpName = "a blade of vengance";
}; };
function BOVImage::onMount(%data, %obj, %node) function BOVImage::onMount(%data, %obj, %node) {
{ if(!%obj.client.hasMedal(11) && !%obj.client.isAiControlled()) {
%obj.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); %obj.meleeIMG = %obj.mountImage(BOVButt, 5);
} }
function BOVImage::onUnMount(%data, %obj, %node) function BOVImage::onUnMount(%data, %obj, %node) {
{
%obj.unmountImage(5); %obj.unmountImage(5);
} }
datablock ShapeBaseImageData(BoVSwing)
{
shapeFile = "weapon_disc.dts";
mountPoint = 1;
offset = "0.0 1.45 -0.4"; // L/R - F/B - T/B
rotation = "0 0 1 180"; // L/R - F/B - T/B
};
function BOVImage::onFire(%data, %obj, %node) { function BOVImage::onFire(%data, %obj, %node) {
//dumbass use
//Person without the medal
if(!%obj.client.hasMedal(11) && !%obj.client.isAiControlled()) { if(!%obj.client.hasMedal(11) && !%obj.client.isAiControlled()) {
messageClient(%obj.client, 'MsgClient', "\c3You must aquire the 'Revenge Avoided Again' Medal to use this."); 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; return;
} }
if(%obj.cannotuseBOV) { //in the kill anim? if(%obj.cannotuseBOV) { //in the kill anim?
@ -157,7 +153,6 @@ function BOVImage::onFire(%data, %obj, %node) {
%obj.meleeIMG = %obj.mountImage(BoVSwing, 6); %obj.meleeIMG = %obj.mountImage(BoVSwing, 6);
%obj.backswing = schedule(300, 0, "swingbackbov", %obj); %obj.backswing = schedule(300, 0, "swingbackbov", %obj);
if(!%obj.client.IsActivePerk("Blade Sweep")) {
%p = new (LinearProjectile)() { %p = new (LinearProjectile)() {
dataBlock = BOVhit; dataBlock = BOVhit;
initialDirection = %obj.getMuzzleVector(%slot); initialDirection = %obj.getMuzzleVector(%slot);
@ -166,37 +161,21 @@ function BOVImage::onFire(%data, %obj, %node) {
sourceSlot = %slot; sourceSlot = %slot;
}; };
MissionCleanup.add(%p); MissionCleanup.add(%p);
}
else {
for (%i = 0; %i < 7; %i++) {
%x = (getRandom() - 0.5) * 2 * 3.1415926 * (6/1000);
%y = (getRandom() - 0.5) * 2 * 3.1415926 * (6/1000);
%z = 0;
%mat = MatrixCreateFromEuler(%x @ " " @ %y @ " " @ %z);
%newvector = MatrixMulVector(%mat, %vector);
%p = new (LinearProjectile)() {
dataBlock = BOVhit;
initialDirection = %newvector;
initialPosition = %obj.getMuzzlePoint(%slot);
sourceObject = %obj;
damageFactor = 1;
sourceSlot = %slot;
};
%p.WeaponImageSource = %data.getName();
}
}
} }
function BOVhit::onCollision(%data, %projectile, %targetObject, %modifier, %position, %normal) { function BOVhit::onCollision(%data, %projectile, %targetObject, %modifier, %position, %normal) {
if(%targetObject.isBoss) { %dMod = 1;
%targetObject.playShieldEffect("1 1 1"); //
MessageClient(%projectile.sourceObject.client, 'MsgDeflect', "The Boss Deflects The Swipe");
return;
}
if(%targetObject.rapierShield) { if(%targetObject.rapierShield) {
MessageClient(%projectile.sourceObject.client, 'MsgDeflect', "The Target Is Immortal."); MessageClient(%projectile.sourceObject.client, 'MsgDeflect', "The Target Is Immortal.");
return; return;
}
//
if(%targetObject.isBoss) {
%dMod += 7;
}
if(%targetObject.isZombie) {
%dMod += 100;
} }
%source = %projectile.SourceObject; %source = %projectile.SourceObject;
%hitObj = %targetObject; %hitObj = %targetObject;
@ -205,9 +184,7 @@ function BOVhit::onCollision(%data, %projectile, %targetObject, %modifier, %posi
%muzzleVec = %source.getMuzzleVector(0); %muzzleVec = %source.getMuzzleVector(0);
// extra damage for head shot or less for close range shots // extra damage for head shot or less for close range shots
if(!(%hitObj.getType() & ($TypeMasks::InteriorObjectType | $TypeMasks::TerrainObjectType)) && if(!(%hitObj.getType() & ($TypeMasks::InteriorObjectType | $TypeMasks::TerrainObjectType)) && (%hitObj.getDataBlock().getClassName() $= "PlayerData")) {
(%hitObj.getDataBlock().getClassName() $= "PlayerData")) {
if(%hitObj.getDataBlock().getClassName() $= "PlayerData") { if(%hitObj.getDataBlock().getClassName() $= "PlayerData") {
// Now we see if we hit from behind... // Now we see if we hit from behind...
%forwardVec = %hitobj.getForwardVector(); %forwardVec = %hitobj.getForwardVector();
@ -217,7 +194,6 @@ function BOVhit::onCollision(%data, %projectile, %targetObject, %modifier, %posi
%dif = getWord(%dif, 0) @ " " @ getWord(%dif, 1) @ " 0"; %dif = getWord(%dif, 0) @ " " @ getWord(%dif, 1) @ " 0";
%dif = VectorNormalize(%dif); %dif = VectorNormalize(%dif);
%dot = VectorDot(%dif, %objDir2D); %dot = VectorDot(%dif, %objDir2D);
// 120 Deg angle test... // 120 Deg angle test...
// 1.05 == 60 degrees in radians // 1.05 == 60 degrees in radians
if (%dot >= mCos(1.05)) { if (%dot >= mCos(1.05)) {
@ -225,7 +201,7 @@ function BOVhit::onCollision(%data, %projectile, %targetObject, %modifier, %posi
%source.applyRepair("0.45"); //we get a bonus repair for rear %source.applyRepair("0.45"); //we get a bonus repair for rear
if(%source.team == %hitObj.team && !$TeamDamage) { if(%source.team == %hitObj.team && !$TeamDamage) {
ServerPlay3d(BOVHitSound, %targetObject.getPosition()); ServerPlay3d(BOVHitSound, %targetObject.getPosition());
return; //stops shredding return;
} }
%source.cannotuseBOV = 1; %source.cannotuseBOV = 1;
if(!%hitObj.IsinvincibleC) { if(!%hitObj.IsinvincibleC) {
@ -234,18 +210,13 @@ function BOVhit::onCollision(%data, %projectile, %targetObject, %modifier, %posi
return; return;
} }
} }
ServerPlay3d(BOVHitSound, %targetObject.getPosition()); ServerPlay3d(BOVHitSound, %targetObject.getPosition());
//The Blade Only Works On Players //The Blade Only Works On Players
%targetObject.damage(%projectile.sourceObject, %position, %data.directDamage, %data.directDamageType); %totalDamage = %data.directDamage * dMod;
%targetObject.damage(%projectile.sourceObject, %position, %totalDamage, %data.directDamageType);
if(isObject(%source) || %source.getState() !$= "dead") { if(isObject(%source) || %source.getState() !$= "dead") {
%source.applyRepair("0.15"); //15% %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.");
}
}
} }
} }
@ -266,7 +237,6 @@ function DoBOVRearKill(%source, %target, %count) {
%target.setvelocity("0 0 0"); %target.setvelocity("0 0 0");
} }
else if(%count == 16) { else if(%count == 16) {
//MessageAll('MsgDIE', "\c4"@%source.client.namebase@": You're so.... weak...");
%newpos = vectoradd(%target.getPosition(),"0 0 "@%ZPos * -1@""); %newpos = vectoradd(%target.getPosition(),"0 0 "@%ZPos * -1@"");
%target.setTransform(%newpos); %target.setTransform(%newpos);
%target.setvelocity("0 0 0"); %target.setvelocity("0 0 0");
@ -286,11 +256,10 @@ function DoBOVRearKill(%source, %target, %count) {
CompleteNWChallenge(%source.client, "Assassin"); CompleteNWChallenge(%source.client, "Assassin");
} }
} }
//%target.blowup();//BAM!
ServerPlay3d(BOVHitSound, %target.getPosition()); ServerPlay3d(BOVHitSound, %target.getPosition());
ServerPlay3d(BOVHitSound, %target.getPosition()); ServerPlay3d(BOVHitSound, %target.getPosition());
ServerPlay3d(BOVHitSound, %target.getPosition()); ServerPlay3d(BOVHitSound, %target.getPosition());
%target.damage(%source, %target.getposition(), 9999, $DamageType::BladeOfVengance); %target.damage(%source, %target.getposition(), 9999, $DamageType::BladeOfVengance_Assassination);
// //
if(%target.client !$= "") { //a Player.. goodie if(%target.client !$= "") { //a Player.. goodie
MessageAll('MessageAll', "\c0"@%target.client.namebase@" was assassinated by "@%source.client.namebase@"."); MessageAll('MessageAll', "\c0"@%target.client.namebase@" was assassinated by "@%source.client.namebase@".");

View file

@ -1,15 +1,13 @@
//ALL CREDIT TO THE HALO MOD //ALL CREDIT TO THE HALO MOD
// ORIGINALLY CODED BY: SoldierOfLight // ORIGINALLY CODED BY: SoldierOfLight
datablock AudioProfile(BeamExpSound) datablock AudioProfile(BeamExpSound) {
{
filename = "fx/vehicles/shrike_blaster_projectile_impact.wav"; filename = "fx/vehicles/shrike_blaster_projectile_impact.wav";
description = AudioClosest3d; description = AudioClosest3d;
preload = true; preload = true;
}; };
datablock ExplosionData(PlasmasaberExplosion) datablock ExplosionData(PlasmasaberExplosion) {
{
explosionShape = "disc_explosion.dts"; explosionShape = "disc_explosion.dts";
faceViewer = true; faceViewer = true;
explosionscale = 0.1; explosionscale = 0.1;
@ -24,8 +22,7 @@ datablock ExplosionData(PlasmasaberExplosion)
times[1] = 1.0; times[1] = 1.0;
}; };
datablock TracerProjectileData(PlasmasaberExpCreater) datablock TracerProjectileData(PlasmasaberExpCreater) {
{
className = "TracerProjectileData"; className = "TracerProjectileData";
Explosion = "PlasmasaberExplosion"; Explosion = "PlasmasaberExplosion";
dryVelocity = "0.1"; dryVelocity = "0.1";
@ -38,8 +35,7 @@ datablock TracerProjectileData(PlasmasaberExpCreater)
isFXUnit = "1"; isFXUnit = "1";
}; };
datablock TargetProjectileData(PlasmasaberBeam) datablock TargetProjectileData(PlasmasaberBeam) {
{
directDamage = 0.0; directDamage = 0.0;
hasDamageRadius = false; hasDamageRadius = false;
indirectDamage = 0.0; indirectDamage = 0.0;
@ -47,7 +43,7 @@ datablock TargetProjectileData(PlasmasaberBeam)
velInheritFactor = 1.0; velInheritFactor = 1.0;
maxRifleRange = 1.5; maxRifleRange = 1.5;
beamColor = "0 1 1"; beamColor = "1 1 0";
startBeamWidth = 0.1; startBeamWidth = 0.1;
pulseBeamWidth = 0.1; pulseBeamWidth = 0.1;
@ -63,10 +59,7 @@ datablock TargetProjectileData(PlasmasaberBeam)
textureName[3] = "skins/glow_Red"; textureName[3] = "skins/glow_Red";
}; };
PlasmasaberBeam.maxRifleRange = 1.5; datablock ItemData(Plasmasaber) {
datablock ItemData(Plasmasaber)
{
className = Weapon; className = Weapon;
catagory = "Spawn Items"; catagory = "Spawn Items";
//$$ TODO - real shape file //$$ TODO - real shape file
@ -79,11 +72,10 @@ datablock ItemData(Plasmasaber)
pickUpName = "a beam sword"; pickUpName = "a beam sword";
computeCRC = true; computeCRC = true;
emap=true; emap = true;
}; };
datablock ShapeBaseImageData(PlasmasaberImage) datablock ShapeBaseImageData(PlasmasaberImage) {
{
className = WeaponImage; className = WeaponImage;
shapeFile = "turret_muzzlepoint.dts"; shapeFile = "turret_muzzlepoint.dts";
offset = "0.1 0.7 0.2"; offset = "0.1 0.7 0.2";
@ -122,40 +114,34 @@ datablock ShapeBaseImageData(PlasmasaberImage)
stateAllowImageChange[4] = false; stateAllowImageChange[4] = false;
}; };
datablock ShapeBaseImageData(PlasmasaberImage2) datablock ShapeBaseImageData(PlasmasaberImage2) {
{
shapeFile = "weapon_energy_vehicle.dts"; shapeFile = "weapon_energy_vehicle.dts";
offset = "0.1 0.2 0"; offset = "0.1 0.2 0";
rotation = "1 0 0 -10"; rotation = "1 0 0 -10";
}; };
function PlasmasaberImage::onMount(%data,%obj,%slot) function PlasmasaberImage::onMount(%data, %obj, %slot) {
{
if(%obj.isZombie || %obj.isBoss) { if(%obj.isZombie || %obj.isBoss) {
%obj.setInventory(Plasmasaber, 0, true); %obj.setInventory(Plasmasaber, 0, true);
} }
Parent::onMount(%data,%obj,%slot); Parent::onMount(%data,%obj,%slot);
%obj.mountImage(PlasmasaberImage2,4); %obj.mountImage(PlasmasaberImage2, 4);
%obj.usingPlasmasaber = 1; %obj.usingPlasmasaber = 1;
} }
function PlasmasaberImage::onUnmount(%data,%obj,%slot) function PlasmasaberImage::onUnmount(%data, %obj, %slot) {
{
Parent::onUnmount(%data,%obj,%slot); Parent::onUnmount(%data,%obj,%slot);
%obj.unMountImage(4); %obj.unMountImage(4);
%obj.usingPlasmasaber = 0; %obj.usingPlasmasaber = 0;
cancel(%obj.Plasmasaberloop); cancel(%obj.Plasmasaberloop);
if(isObject(%obj.beam1)) if(isObject(%obj.beam1)) {
{
%obj.beam1.delete(); %obj.beam1.delete();
%obj.beam1 = ""; %obj.beam1 = "";
} }
} }
function PlasmasaberImage::onActivateReady(%data,%obj,%slot) //small explosion function PlasmasaberImage::onActivateReady(%data, %obj, %slot) { //small explosion
{ %p = new TracerProjectile() {
%p = new TracerProjectile()
{
datablock = "PlasmasaberExpCreater"; datablock = "PlasmasaberExpCreater";
initialPosition = %obj.getMuzzlePoint(%slot); initialPosition = %obj.getMuzzlePoint(%slot);
initialDirection = %obj.getMuzzleVector(%slot); initialDirection = %obj.getMuzzleVector(%slot);
@ -163,20 +149,18 @@ function PlasmasaberImage::onActivateReady(%data,%obj,%slot) //small explosion
}; };
} }
function PlasmasaberImage::onReady(%data,%obj,%slot) //create beams function PlasmasaberImage::onReady(%data, %obj, %slot) { //create beams
{
Plasmasaberloop(%obj); Plasmasaberloop(%obj);
} }
function PlasmasaberLoop(%obj) function PlasmasaberLoop(%obj) {
{
if(!isObject(%obj) || %obj.getState() $= "dead") { if(!isObject(%obj) || %obj.getState() $= "dead") {
return; return;
} }
if(%obj.usingPlasmasaber == 0) if(%obj.usingPlasmasaber == 0) {
{ if(isObject(%obj.beam1)) {
if(isObject(%obj.beam1))
%obj.beam1.delete(); %obj.beam1.delete();
}
return; return;
} }
%vec1 = %obj.getMuzzleVector(4); %vec1 = %obj.getMuzzleVector(4);
@ -188,10 +172,8 @@ function PlasmasaberLoop(%obj)
%down = vectorScale(%up,-1); %down = vectorScale(%up,-1);
%pos1 = %obj.getMuzzlePoint(5); %pos1 = %obj.getMuzzlePoint(5);
%dir1 = vectorAdd(%vec1,%down); %dir1 = vectorAdd(%vec1,%down);
if(!isObject(%obj.beam1) && !%obj.isCloaked()) if(!isObject(%obj.beam1) && !%obj.isCloaked()) {
{ %obj.beam1 = new TargetProjectile() {
%obj.beam1 = new TargetProjectile()
{
datablock = "PlasmasaberBeam"; datablock = "PlasmasaberBeam";
initialPosition = %pos1; initialPosition = %pos1;
initialDirection = %dir1; initialDirection = %dir1;
@ -199,44 +181,40 @@ function PlasmasaberLoop(%obj)
sourceObject = %obj; sourceObject = %obj;
}; };
} }
%obj.Plasmasaberloop = schedule(25,0,Plasmasaberloop,%obj); %obj.Plasmasaberloop = schedule(25, 0, Plasmasaberloop, %obj);
} }
function PlasmasaberImage::onFire(%data,%obj,%slot) //apply damage function PlasmasaberImage::onFire(%data, %obj, %slot) { //apply damage
{
%vec = %obj.getMuzzleVector(%slot); %vec = %obj.getMuzzleVector(%slot);
%pos = %obj.getMuzzlePoint(%slot); %pos = %obj.getMuzzlePoint(%slot);
%vec = vectorScale(%vec,1.5); %vec = vectorScale(%vec, 1.5);
%end = vectorAdd(%pos,%vec); %end = vectorAdd(%pos, %vec);
%mask = $TypeMasks::VehicleObjectType | $TypeMasks::PlayerObjectType | $TypeMasks::StaticShapeObjectType; %mask = $TypeMasks::VehicleObjectType | $TypeMasks::PlayerObjectType | $TypeMasks::StaticShapeObjectType;
initContainerRadiusSearch(%end,1.0,%mask); initContainerRadiusSearch(%end, 1.0, %mask);
while((%target = containerSearchNext()) != 0) { while((%target = containerSearchNext()) != 0) {
if(%target == %obj) //you can never be too careful if(%target == %obj) {
return; return;
if(!%target.isBoss) {
%target.damage(%obj,%target.getWorldBoxCenter(), 10.4, $DamageType::Plasmasaber);
} }
else { //if(!%target.isBoss) {
%target.damage(%obj,%target.getWorldBoxCenter(), 0.4, $DamageType::Plasmasaber); // %target.damage(%obj, %target.getWorldBoxCenter(), 10.4, $DamageType::Plasmasaber);
} //}
%p = new TracerProjectile() //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"; datablock = "PlasmasaberExpCreater";
initialPosition = %target.getPosition(); initialPosition = %target.getPosition();
initialDirection = %obj.getMuzzleVector(%slot); //who cares? initialDirection = %obj.getMuzzleVector(%slot); //who cares?
sourceObject = %obj; sourceObject = %obj;
}; };
} }
//play anim
// %obj.disableMove(true); //don't screw up the kewl animation ;)
// %obj.schedule(500,disableMove,false);
} }
function Plasmasaber::onThrow(%data,%obj,%plyr) function Plasmasaber::onThrow(%data, %obj, %plyr) {
{
%pos = %obj.getPosition(); %pos = %obj.getPosition();
%p = new TracerProjectile() %p = new TracerProjectile() {
{
datablock = "PlasmasaberExpCreater"; datablock = "PlasmasaberExpCreater";
initialPosition = %pos; initialPosition = %pos;
initialDirection = "0 0 1"; initialDirection = "0 0 1";

View file

@ -155,49 +155,6 @@ datablock TracerProjectileData(LZombieAcidBall) {
emap = true; emap = true;
}; };
datablock TracerProjectileData(EliteRapierAcidBomb) {
doDynamicClientHits = true;
projectileShapeName = "";
directDamage = 0.0;
directDamageType = $DamageType::ZAcid;
hasDamageRadius = true;
indirectDamage = 0.6;
damageRadius = 7.5;
kickBackStrength = 0.0;
radiusDamageType = $DamageType::ZAcid;
sound = BlasterProjectileSound;
explosion = ZAcidBombExplosion;
ImageSource = "AcidCannonImage";
dryVelocity = 100.0;
wetVelocity = 100.0;
velInheritFactor = 1.0;
fizzleTimeMS = 4000;
lifetimeMS = 1000;
explodeOnDeath = false;
reflectOnWaterImpactAngle = 0.0;
explodeOnWaterImpact = true;
deflectionOnWaterImpact = 0.0;
fizzleUnderwaterMS = -1;
activateDelayMS = 100;
tracerLength = 10;
tracerAlpha = false;
tracerMinPixels = 6;
tracerColor = "0 1 0 1";
tracerTex[0] = "special/landSpikeBolt";
tracerTex[1] = "special/landSpikeBoltCross";
tracerWidth = 0.8;
crossSize = 0.79;
crossViewAng = 0.990;
renderCross = true;
emap = true;
};
datablock TracerProjectileData(SSZombieAcidBall) { datablock TracerProjectileData(SSZombieAcidBall) {
doDynamicClientHits = true; doDynamicClientHits = true;

View file

@ -1,5 +1,4 @@
datablock ItemData(IonLauncherAmmo) datablock ItemData(IonLauncherAmmo) {
{
className = Ammo; className = Ammo;
catagory = "Ammo"; catagory = "Ammo";
shapeFile = "ammo_missile.dts"; shapeFile = "ammo_missile.dts";
@ -15,8 +14,7 @@ datablock ItemData(IonLauncherAmmo)
//-------------------------------------------------------------------------- //--------------------------------------------------------------------------
// Weapon // Weapon
//-------------------------------------- //--------------------------------------
datablock ItemData(IonLauncher) datablock ItemData(IonLauncher) {
{
className = Weapon; className = Weapon;
catagory = "Spawn Items"; catagory = "Spawn Items";
shapeFile = "weapon_grenade_launcher.dts"; shapeFile = "weapon_grenade_launcher.dts";
@ -31,8 +29,7 @@ datablock ItemData(IonLauncher)
emap = true; emap = true;
}; };
datablock ShapeBaseImageData(IonLauncherImage) datablock ShapeBaseImageData(IonLauncherImage) {
{
className = WeaponImage; className = WeaponImage;
shapeFile = "weapon_grenade_launcher.dts"; shapeFile = "weapon_grenade_launcher.dts";
item = IonLauncher; item = IonLauncher;
@ -130,12 +127,15 @@ function IonLauncherImage::onFire(%data,%obj,%slot) {
MissileSet.add(%p); MissileSet.add(%p);
%target = %obj.getLockedTarget(); %target = %obj.getLockedTarget();
if(%target) if(%target) {
%p.setObjectTarget(%target); %p.setObjectTarget(%target);
else if(%obj.isLocked()) }
else if(%obj.isLocked()) {
%p.setPositionTarget(%obj.getLockedPosition()); %p.setPositionTarget(%obj.getLockedPosition());
else }
else {
%p.setNoTarget(); %p.setNoTarget();
}
} }
function IonLauncherImage::onWetFire(%data, %obj, %slot) { function IonLauncherImage::onWetFire(%data, %obj, %slot) {

View file

@ -7,10 +7,9 @@ datablock ItemData(IonRifle) {
elasticity = 0.2; elasticity = 0.2;
friction = 0.6; friction = 0.6;
pickupRadius = 2; pickupRadius = 2;
pickUpName = "a sniper rifle"; pickUpName = "a LUX Ion Rifle";
computeCRC = true; computeCRC = true;
}; };
datablock ShapeBaseImageData(IonRifleImage) { datablock ShapeBaseImageData(IonRifleImage) {
@ -82,10 +81,12 @@ function IonRifleImage::OnFire(%data, %obj, %slot) {
} }
} }
} }
if (%res) if (%res) {
%hitLoc = getWords(%res,1,3); %hitLoc = getWords(%res,1,3);
else }
else {
%hitLoc = vectorAdd(%pos,vectorScale(%vec,2000)); %hitLoc = vectorAdd(%pos,vectorScale(%vec,2000));
}
%p = discharge(%pos,%vec); %p = discharge(%pos,%vec);
%p.setEnergyPercentage(1); %p.setEnergyPercentage(1);
createLifeLight(%hitLoc,1,1000); createLifeLight(%hitLoc,1,1000);

View file

@ -103,7 +103,7 @@ function MiniColliderCannonImage::onFire(%data, %obj, %slot) {
%p3 = Schedule(200, 0, "spawnprojectile", %data.Projectile, %data.ProjectileType, %p3 = Schedule(200, 0, "spawnprojectile", %data.Projectile, %data.ProjectileType,
%obj.getMuzzlePoint(%slot), %vector, %obj); %obj.getMuzzlePoint(%slot), %vector, %obj);
%p3.WeaponImageSource = "MiniColliderCannonImage"; %p3.WeaponImageSource = "MiniColliderCannonImage";
schedule(100, 0, "ServerPlay3D", "CentaurArtilleryFireSound", %obj.getPosition()); schedule(200, 0, "ServerPlay3D", "CentaurArtilleryFireSound", %obj.getPosition());
} }
else { else {
%p = Parent::OnFire(%data, %obj, %slot); %p = Parent::OnFire(%data, %obj, %slot);

View file

@ -1,5 +1,4 @@
datablock ItemData(NapalmAmmo) datablock ItemData(NapalmAmmo) {
{
className = Ammo; className = Ammo;
catagory = "Ammo"; catagory = "Ammo";
shapeFile = "ammo_grenade.dts"; shapeFile = "ammo_grenade.dts";
@ -14,8 +13,7 @@ datablock ItemData(NapalmAmmo)
// Weapon // Weapon
//-------------------------------------- //--------------------------------------
datablock ShapeBaseImageData(NapalmImage) datablock ShapeBaseImageData(NapalmImage) {
{
className = WeaponImage; className = WeaponImage;
shapeFile = "ammo_grenade.dts"; shapeFile = "ammo_grenade.dts";
item = Napalm; item = Napalm;
@ -70,7 +68,7 @@ datablock ShapeBaseImageData(NapalmImage)
stateTransitionOnNoAmmo[2] = "NoAmmo"; stateTransitionOnNoAmmo[2] = "NoAmmo";
stateTransitionOnTriggerDown[2] = "Fire"; stateTransitionOnTriggerDown[2] = "Fire";
stateSequence[2] = "DiscSpin"; stateSequence[2] = "DiscSpin";
// stateSound[2] = DiscLoopSound; // stateSound[2] = DiscLoopSound;
stateName[3] = "Fire"; stateName[3] = "Fire";
stateTransitionOnTimeout[3] = "Reload"; stateTransitionOnTimeout[3] = "Reload";
@ -88,7 +86,7 @@ datablock ShapeBaseImageData(NapalmImage)
stateTimeoutValue[4] = 2.2; // 0.25 load, 0.25 spinup stateTimeoutValue[4] = 2.2; // 0.25 load, 0.25 spinup
stateAllowImageChange[4] = false; stateAllowImageChange[4] = false;
stateSequence[4] = "Reload"; stateSequence[4] = "Reload";
// stateSound[4] = DiscReloadSound; // stateSound[4] = DiscReloadSound;
stateName[5] = "NoAmmo"; stateName[5] = "NoAmmo";
stateTransitionOnAmmo[5] = "Reload"; stateTransitionOnAmmo[5] = "Reload";
@ -99,11 +97,9 @@ datablock ShapeBaseImageData(NapalmImage)
stateSound[6] = GrenadeDryFireSound; stateSound[6] = GrenadeDryFireSound;
stateTimeoutValue[6] = 0.3; stateTimeoutValue[6] = 0.3;
stateTransitionOnTimeout[6] = "NoAmmo"; stateTransitionOnTimeout[6] = "NoAmmo";
}; };
datablock ItemData(Napalm) datablock ItemData(Napalm) {
{
className = Weapon; className = Weapon;
catagory = "Spawn Items"; catagory = "Spawn Items";
shapeFile = "ammo_grenade.dts"; shapeFile = "ammo_grenade.dts";

View file

@ -6,7 +6,7 @@ datablock TracerProjectileData(PlasmaTorpedoProjectile) {
indirectDamage = 1.5; indirectDamage = 1.5;
damageRadius = 25.0; damageRadius = 25.0;
kickBackStrength = 4000; kickBackStrength = 4000;
radiusDamageType = $DamageType::PTorpdeo; //obviously change this radiusDamageType = $DamageType::PTorpdeo;
ImageSource = "PlasmaTorpedoImage"; ImageSource = "PlasmaTorpedoImage";
@ -36,7 +36,6 @@ datablock TracerProjectileData(PlasmaTorpedoProjectile) {
crossSize = 0.99; crossSize = 0.99;
crossViewAng = 0.990; crossViewAng = 0.990;
renderCross = true; renderCross = true;
}; };
datablock ShapeBaseImageData(PlasmaTorpedoImage) { datablock ShapeBaseImageData(PlasmaTorpedoImage) {
@ -108,7 +107,6 @@ datablock ShapeBaseImageData(PlasmaTorpedoImage) {
stateTransitionOnTimeout[6] = "Ready"; stateTransitionOnTimeout[6] = "Ready";
}; };
//item//
datablock ItemData(PlasmaTorpedo) { datablock ItemData(PlasmaTorpedo) {
className = Weapon; className = Weapon;
catagory = "Spawn Items"; catagory = "Spawn Items";
@ -123,4 +121,3 @@ datablock ItemData(PlasmaTorpedo) {
computeCRC = true; computeCRC = true;
emap = true; emap = true;
}; };

View file

@ -61,7 +61,6 @@ datablock ItemData(ShadowRifle) {
pickUpName = "a shadow rifle"; pickUpName = "a shadow rifle";
computeCRC = true; computeCRC = true;
}; };
datablock ShapeBaseImageData(ShadowRifleImage) { datablock ShapeBaseImageData(ShadowRifleImage) {

View file

@ -1,5 +1,4 @@
datablock AudioProfile(PistolFireSound) datablock AudioProfile(PistolFireSound) {
{
filename = "fx/vehicles/tank_chaingun.wav"; filename = "fx/vehicles/tank_chaingun.wav";
description = AudioDefault3d; description = AudioDefault3d;
preload = true; preload = true;
@ -55,8 +54,7 @@ datablock TracerProjectileData(coltBullet) {
decalData[5] = ChaingunDecal6; decalData[5] = ChaingunDecal6;
}; };
datablock ItemData(pistolAmmo) datablock ItemData(pistolAmmo) {
{
className = Ammo; className = Ammo;
catagory = "Ammo"; catagory = "Ammo";
shapeFile = "ammo_chaingun.dts"; shapeFile = "ammo_chaingun.dts";
@ -67,7 +65,6 @@ datablock ItemData(pistolAmmo)
pickUpName = "some .77mm bullets"; pickUpName = "some .77mm bullets";
computeCRC = true; computeCRC = true;
}; };
datablock ItemData(pistol) { datablock ItemData(pistol) {
@ -82,8 +79,7 @@ datablock ItemData(pistol) {
pickUpName = "a Colt Pistol"; pickUpName = "a Colt Pistol";
}; };
datablock ShapeBaseImageData(PistolImage) datablock ShapeBaseImageData(PistolImage) {
{
className = WeaponImage; className = WeaponImage;
shapeFile = "weapon_energy_vehicle.dts"; shapeFile = "weapon_energy_vehicle.dts";
item = pistol; item = pistol;
@ -175,7 +171,7 @@ datablock ShapeBaseImageData(PistolImage2) : PistolImage {
offset = "-0.5 0 0"; offset = "-0.5 0 0";
}; };
function PistolImage::onMount(%this,%obj,%slot) { function PistolImage::onMount(%this, %obj, %slot) {
Parent::onMount(%this, %obj, %slot); Parent::onMount(%this, %obj, %slot);
if(%obj.client.UpgradeOn("Excessive Duality", %this.getName())) { if(%obj.client.UpgradeOn("Excessive Duality", %this.getName())) {
%obj.mountImage(PistolImage2, 5); %obj.mountImage(PistolImage2, 5);

View file

@ -4,8 +4,8 @@
datablock TracerProjectileData(CHawkBullet) { datablock TracerProjectileData(CHawkBullet) {
doDynamicClientHits = true; doDynamicClientHits = true;
directDamage = 0.23; //reduced 0.5 directDamage = 0.17;
directDamageType = $DamageType::Hawk; //obviously change this directDamageType = $DamageType::CrimsonHawk; //obviously change this
explosion = "BlasterExplosion"; explosion = "BlasterExplosion";
splash = ChaingunSplash; splash = ChaingunSplash;
@ -15,8 +15,8 @@ datablock TracerProjectileData(CHawkBullet) {
dryVelocity = 425.0; dryVelocity = 425.0;
wetVelocity = 100.0; wetVelocity = 100.0;
velInheritFactor = 1.0; velInheritFactor = 1.0;
fizzleTimeMS = 1000; fizzleTimeMS = 500;
lifetimeMS = 1000; lifetimeMS = 700;
explodeOnDeath = false; explodeOnDeath = false;
reflectOnWaterImpactAngle = 0.0; reflectOnWaterImpactAngle = 0.0;
explodeOnWaterImpact = false; explodeOnWaterImpact = false;
@ -35,11 +35,9 @@ datablock TracerProjectileData(CHawkBullet) {
crossSize = 0.99; crossSize = 0.99;
crossViewAng = 0.990; crossViewAng = 0.990;
renderCross = true; renderCross = true;
}; };
datablock ItemData(CrimsonHawkAmmo) datablock ItemData(CrimsonHawkAmmo) {
{
className = Ammo; className = Ammo;
catagory = "Ammo"; catagory = "Ammo";
shapeFile = "ammo_chaingun.dts"; shapeFile = "ammo_chaingun.dts";
@ -50,7 +48,6 @@ datablock ItemData(CrimsonHawkAmmo)
pickUpName = "some .77mm bullets"; pickUpName = "some .77mm bullets";
computeCRC = true; computeCRC = true;
}; };
datablock ItemData(CrimsonHawk) { datablock ItemData(CrimsonHawk) {
@ -62,11 +59,10 @@ datablock ItemData(CrimsonHawk) {
elasticity = 0.2; elasticity = 0.2;
friction = 0.6; friction = 0.6;
pickupRadius = 2; pickupRadius = 2;
pickUpName = "a CrimsonHawk Pistol"; pickUpName = "a Crimson Hawk Pistol";
}; };
datablock ShapeBaseImageData(CrimsonHawkImage) datablock ShapeBaseImageData(CrimsonHawkImage) {
{
className = WeaponImage; className = WeaponImage;
shapeFile = "weapon_energy_vehicle.dts"; shapeFile = "weapon_energy_vehicle.dts";
item = CrimsonHawk; item = CrimsonHawk;

View file

@ -9,7 +9,6 @@ datablock ItemData(LD06SavagerAmmo) {
pickUpName = "some LD06Savager rounds"; pickUpName = "some LD06Savager rounds";
computeCRC = true; computeCRC = true;
}; };
//-------------------------------------------------------------------------- //--------------------------------------------------------------------------
@ -110,8 +109,7 @@ datablock ShapeBaseImageData(LD06SavagerImage) {
stateTransitionOnNotWet[8] = "Fire"; stateTransitionOnNotWet[8] = "Fire";
}; };
datablock ItemData(LD06Savager) datablock ItemData(LD06Savager) {
{
className = Weapon; className = Weapon;
catagory = "Spawn Items"; catagory = "Spawn Items";
shapeFile = "weapon_plasma.dts"; shapeFile = "weapon_plasma.dts";
@ -126,7 +124,7 @@ datablock ItemData(LD06Savager)
emap = true; emap = true;
}; };
function LD06SavagerImage::onMount(%this,%obj,%slot) { function LD06SavagerImage::onMount(%this, %obj, %slot) {
Parent::onMount(%this, %obj, %slot); Parent::onMount(%this, %obj, %slot);
} }

View file

@ -6,7 +6,7 @@ datablock TracerProjectileData(m93Bullet) {
doDynamicClientHits = true; doDynamicClientHits = true;
directDamage = 0.22; // reduced .26 directDamage = 0.22; // reduced .26
directDamageType = $DamageType::m93; directDamageType = $DamageType::M93;
explosion = "ChaingunExplosion"; explosion = "ChaingunExplosion";
splash = ChaingunSplash; splash = ChaingunSplash;
HeadMultiplier = 1.5; HeadMultiplier = 1.5;
@ -48,8 +48,7 @@ datablock TracerProjectileData(m93Bullet) {
decalData[5] = ChaingunDecal6; decalData[5] = ChaingunDecal6;
}; };
datablock ItemData(m93Ammo) datablock ItemData(m93Ammo) {
{
className = Ammo; className = Ammo;
catagory = "Ammo"; catagory = "Ammo";
shapeFile = "ammo_chaingun.dts"; shapeFile = "ammo_chaingun.dts";
@ -60,7 +59,6 @@ datablock ItemData(m93Ammo)
pickUpName = "some .77mm bullets"; pickUpName = "some .77mm bullets";
computeCRC = true; computeCRC = true;
}; };
datablock ItemData(m93) { datablock ItemData(m93) {
@ -75,8 +73,7 @@ datablock ItemData(m93) {
pickUpName = "a m93 Pistol"; pickUpName = "a m93 Pistol";
}; };
datablock ShapeBaseImageData(m93Image) datablock ShapeBaseImageData(m93Image) {
{
className = WeaponImage; className = WeaponImage;
shapeFile = "weapon_energy_vehicle.dts"; shapeFile = "weapon_energy_vehicle.dts";
item = m93; item = m93;

View file

@ -1,22 +1,21 @@
// Pulse Phaser Weapon // Pulse Phaser Weapon
datablock AudioProfile(PPWFireSound) datablock AudioProfile(PPWFireSound) {
{
filename = "fx/powered/turret_outdoor_fire.wav"; filename = "fx/powered/turret_outdoor_fire.wav";
description = AudioDefault3d; description = AudioDefault3d;
preload = true; preload = true;
}; };
datablock LinearFlareProjectileData(phaserBolt) { datablock LinearFlareProjectileData(phaserBolt) {
directDamage = 0.2; //reduced 0.45 directDamage = 0.26;
directDamageType = $DamageType::Phaser; directDamageType = $DamageType::ES77PulsePhaser;
explosion = "BlasterExplosion"; explosion = "BlasterExplosion";
kickBackStrength = 0.0; kickBackStrength = 0.0;
dryVelocity = 120.0; dryVelocity = 160.0;
wetVelocity = 40.0; wetVelocity = 40.0;
velInheritFactor = 0.5; velInheritFactor = 0.5;
fizzleTimeMS = 2000; fizzleTimeMS = 1300;
lifetimeMS = 3000; lifetimeMS = 1500;
explodeOnDeath = false; explodeOnDeath = false;
reflectOnWaterImpactAngle = 0.0; reflectOnWaterImpactAngle = 0.0;
explodeOnWaterImpact = false; explodeOnWaterImpact = false;
@ -39,16 +38,16 @@ datablock LinearFlareProjectileData(phaserBolt) {
}; };
datablock LinearFlareProjectileData(TrevorPhaserBolt) { datablock LinearFlareProjectileData(TrevorPhaserBolt) {
directDamage = 0.21; //reduced .485 directDamage = 0.3;
directDamageType = $DamageType::Phaser; directDamageType = $DamageType::ES77PulsePhaser;
explosion = "BlasterExplosion"; explosion = "BlasterExplosion";
kickBackStrength = 0.0; kickBackStrength = 0.0;
dryVelocity = 120.0; dryVelocity = 160.0;
wetVelocity = 40.0; wetVelocity = 40.0;
velInheritFactor = 0.5; velInheritFactor = 0.5;
fizzleTimeMS = 2000; fizzleTimeMS = 1300;
lifetimeMS = 3000; lifetimeMS = 1500;
explodeOnDeath = false; explodeOnDeath = false;
reflectOnWaterImpactAngle = 0.0; reflectOnWaterImpactAngle = 0.0;
explodeOnWaterImpact = false; explodeOnWaterImpact = false;
@ -234,7 +233,6 @@ function PulsePhaserImage::onFire(%data,%obj,%slot) {
damageFactor = 1; damageFactor = 1;
sourceSlot = %slot; sourceSlot = %slot;
}; };
%p.WeaponImageSource = "PulsePhaserImage"; %p.WeaponImageSource = "PulsePhaserImage";
} }
else { else {

View file

@ -1,4 +1,4 @@
datablock AudioProfile(ALSWPFireSound) { datablock AudioProfile(ALSWPFireSound) {
filename = "fx/weapons/cg_hard1.wav"; filename = "fx/weapons/cg_hard1.wav";
description = AudioDefault3d; description = AudioDefault3d;
preload = true; preload = true;
@ -51,8 +51,7 @@ datablock TracerProjectileData(ALSWPBullet){
decalData[5] = ChaingunDecal6; decalData[5] = ChaingunDecal6;
}; };
datablock ItemData(ALSWPSniperRifleAmmo) datablock ItemData(ALSWPSniperRifleAmmo) {
{
className = Ammo; className = Ammo;
catagory = "Ammo"; catagory = "Ammo";
shapeFile = "ammo_chaingun.dts"; shapeFile = "ammo_chaingun.dts";
@ -63,14 +62,12 @@ datablock ItemData(ALSWPSniperRifleAmmo)
pickUpName = "Some ALSWP Sniper Rifle Ammo"; pickUpName = "Some ALSWP Sniper Rifle Ammo";
computeCRC = true; computeCRC = true;
}; };
//-------------------------------------------------------------------------- //--------------------------------------------------------------------------
// Weapon // Weapon
//-------------------------------------- //--------------------------------------
datablock ShapeBaseImageData(ALSWPSniperRifleImage) { datablock ShapeBaseImageData(ALSWPSniperRifleImage) {
className = WeaponImage; className = WeaponImage;
shapeFile = "weapon_sniper.dts"; shapeFile = "weapon_sniper.dts";
mass = 10; mass = 10;
@ -165,8 +162,7 @@ datablock ShapeBaseImageData(ALSWPSniperRifleImage) {
stateTransitionOnNotWet[8] = "Fire"; stateTransitionOnNotWet[8] = "Fire";
}; };
datablock ItemData(ALSWPSniperRifle) datablock ItemData(ALSWPSniperRifle) {
{
className = Weapon; className = Weapon;
catagory = "Spawn Items"; catagory = "Spawn Items";
shapeFile = "weapon_sniper.dts"; shapeFile = "weapon_sniper.dts";

View file

@ -7,7 +7,7 @@ datablock AudioProfile(G17FireSound) {
datablock TracerProjectileData(G17Bullet){ datablock TracerProjectileData(G17Bullet){
doDynamicClientHits = true; doDynamicClientHits = true;
directDamage = 0.25; directDamage = 0.55;
directDamageType = $DamageType::G17; directDamageType = $DamageType::G17;
explosion = "ChaingunExplosion"; explosion = "ChaingunExplosion";
splash = ChaingunSplash; splash = ChaingunSplash;
@ -51,8 +51,7 @@ datablock TracerProjectileData(G17Bullet){
decalData[5] = ChaingunDecal6; decalData[5] = ChaingunDecal6;
}; };
datablock ItemData(G17SniperRifleAmmo) datablock ItemData(G17SniperRifleAmmo) {
{
className = Ammo; className = Ammo;
catagory = "Ammo"; catagory = "Ammo";
shapeFile = "ammo_chaingun.dts"; shapeFile = "ammo_chaingun.dts";
@ -63,14 +62,12 @@ datablock ItemData(G17SniperRifleAmmo)
pickUpName = "Some G17 Sniper Rifle Ammo"; pickUpName = "Some G17 Sniper Rifle Ammo";
computeCRC = true; computeCRC = true;
}; };
//-------------------------------------------------------------------------- //--------------------------------------------------------------------------
// Weapon // Weapon
//-------------------------------------- //--------------------------------------
datablock ShapeBaseImageData(G17SniperRifleImage) { datablock ShapeBaseImageData(G17SniperRifleImage) {
className = WeaponImage; className = WeaponImage;
shapeFile = "weapon_sniper.dts"; shapeFile = "weapon_sniper.dts";
mass = 10; mass = 10;
@ -139,7 +136,7 @@ datablock ShapeBaseImageData(G17SniperRifleImage) {
stateName[4] = "Reload"; stateName[4] = "Reload";
stateTransitionOnNoAmmo[4] = "NoAmmo"; stateTransitionOnNoAmmo[4] = "NoAmmo";
stateTransitionOnTimeout[4] = "Ready"; stateTransitionOnTimeout[4] = "Ready";
stateTimeoutValue[4] = 1.1; stateTimeoutValue[4] = 0.7;
stateAllowImageChange[4] = false; stateAllowImageChange[4] = false;
stateSequence[4] = "Reload"; stateSequence[4] = "Reload";
@ -163,8 +160,7 @@ datablock ShapeBaseImageData(G17SniperRifleImage) {
stateTransitionOnNotWet[8] = "Fire"; stateTransitionOnNotWet[8] = "Fire";
}; };
datablock ItemData(G17SniperRifle) datablock ItemData(G17SniperRifle) {
{
className = Weapon; className = Weapon;
catagory = "Spawn Items"; catagory = "Spawn Items";
shapeFile = "weapon_sniper.dts"; shapeFile = "weapon_sniper.dts";

View file

@ -1,8 +1,7 @@
datablock TracerProjectileData(G41Bullet) datablock TracerProjectileData(G41Bullet) {
{
doDynamicClientHits = true; doDynamicClientHits = true;
directDamage = 0.3; directDamage = 0.44;
directDamageType = $DamageType::G41; directDamageType = $DamageType::G41;
explosion = "ChaingunExplosion"; explosion = "ChaingunExplosion";
splash = ChaingunSplash; splash = ChaingunSplash;
@ -44,8 +43,7 @@ datablock TracerProjectileData(G41Bullet)
decalData[5] = ChaingunDecal6; decalData[5] = ChaingunDecal6;
}; };
datablock ItemData(G41RifleAmmo) datablock ItemData(G41RifleAmmo) {
{
className = Ammo; className = Ammo;
catagory = "Ammo"; catagory = "Ammo";
shapeFile = "ammo_chaingun.dts"; shapeFile = "ammo_chaingun.dts";
@ -56,11 +54,9 @@ datablock ItemData(G41RifleAmmo)
pickUpName = "Some G41 Rifle Bullets"; pickUpName = "Some G41 Rifle Bullets";
computeCRC = true; computeCRC = true;
}; };
datablock ShapeBaseImageData(G41RifleImage) datablock ShapeBaseImageData(G41RifleImage) {
{
className = WeaponImage; className = WeaponImage;
shapeFile = "weapon_sniper.dts"; shapeFile = "weapon_sniper.dts";
mass = 10; mass = 10;
@ -103,7 +99,7 @@ datablock ShapeBaseImageData(G41RifleImage)
shellExitVariance = 15.0; shellExitVariance = 15.0;
shellVelocity = 3.0; shellVelocity = 3.0;
projectileSpread = 3.0 / 1000.0; projectileSpread = 2.0 / 1000.0;
stateName[0] = "Activate"; stateName[0] = "Activate";
stateTransitionOnTimeout[0] = "ActivateReady"; stateTransitionOnTimeout[0] = "ActivateReady";
@ -132,7 +128,7 @@ datablock ShapeBaseImageData(G41RifleImage)
stateName[4] = "Reload"; stateName[4] = "Reload";
stateTransitionOnNoAmmo[4] = "NoAmmo"; stateTransitionOnNoAmmo[4] = "NoAmmo";
stateTransitionOnTimeout[4] = "Ready"; stateTransitionOnTimeout[4] = "Ready";
stateTimeoutValue[4] = 0.3; stateTimeoutValue[4] = 0.15;
stateAllowImageChange[4] = false; stateAllowImageChange[4] = false;
stateSequence[4] = "Reload"; stateSequence[4] = "Reload";
@ -156,8 +152,7 @@ datablock ShapeBaseImageData(G41RifleImage)
stateTransitionOnNotWet[8] = "Fire"; stateTransitionOnNotWet[8] = "Fire";
}; };
datablock ItemData(G41Rifle) datablock ItemData(G41Rifle) {
{
className = Weapon; className = Weapon;
catagory = "Spawn Items"; catagory = "Spawn Items";
shapeFile = "weapon_sniper.dts"; shapeFile = "weapon_sniper.dts";

View file

@ -4,10 +4,10 @@ datablock AudioProfile(M1FireSound) {
preload = true; preload = true;
}; };
datablock TracerProjectileData(M1Bullet){ datablock TracerProjectileData(M1Bullet) {
doDynamicClientHits = true; doDynamicClientHits = true;
directDamage = 0.3; directDamage = 0.65;
directDamageType = $DamageType::M1; directDamageType = $DamageType::M1;
explosion = "ChaingunExplosion"; explosion = "ChaingunExplosion";
splash = ChaingunSplash; splash = ChaingunSplash;
@ -51,8 +51,7 @@ datablock TracerProjectileData(M1Bullet){
decalData[5] = ChaingunDecal6; decalData[5] = ChaingunDecal6;
}; };
datablock ItemData(M1SniperRifleAmmo) datablock ItemData(M1SniperRifleAmmo) {
{
className = Ammo; className = Ammo;
catagory = "Ammo"; catagory = "Ammo";
shapeFile = "ammo_chaingun.dts"; shapeFile = "ammo_chaingun.dts";
@ -63,14 +62,12 @@ datablock ItemData(M1SniperRifleAmmo)
pickUpName = "Some M1 Sniper Rifle Ammo"; pickUpName = "Some M1 Sniper Rifle Ammo";
computeCRC = true; computeCRC = true;
}; };
//-------------------------------------------------------------------------- //--------------------------------------------------------------------------
// Weapon // Weapon
//-------------------------------------- //--------------------------------------
datablock ShapeBaseImageData(M1SniperRifleImage) { datablock ShapeBaseImageData(M1SniperRifleImage) {
className = WeaponImage; className = WeaponImage;
shapeFile = "weapon_sniper.dts"; shapeFile = "weapon_sniper.dts";
mass = 10; mass = 10;
@ -86,7 +83,7 @@ datablock ShapeBaseImageData(M1SniperRifleImage) {
ClipName = "M1Clip"; ClipName = "M1Clip";
ClipPickupName["M1Clip"] = "A Few Boxes Of M1 Sniper Bullets"; ClipPickupName["M1Clip"] = "A Few Boxes Of M1 Sniper Bullets";
ShowsClipInHud = 1; ShowsClipInHud = 1;
ClipReloadTime = 5; ClipReloadTime = 4;
ClipReturn = 5; ClipReturn = 5;
InitialClips = 5; InitialClips = 5;
// //
@ -141,7 +138,7 @@ datablock ShapeBaseImageData(M1SniperRifleImage) {
stateName[4] = "Reload"; stateName[4] = "Reload";
stateTransitionOnNoAmmo[4] = "NoAmmo"; stateTransitionOnNoAmmo[4] = "NoAmmo";
stateTransitionOnTimeout[4] = "Ready"; stateTransitionOnTimeout[4] = "Ready";
stateTimeoutValue[4] = 1.1; stateTimeoutValue[4] = 0.9;
stateAllowImageChange[4] = false; stateAllowImageChange[4] = false;
stateSequence[4] = "Reload"; stateSequence[4] = "Reload";
@ -165,8 +162,7 @@ datablock ShapeBaseImageData(M1SniperRifleImage) {
stateTransitionOnNotWet[8] = "Fire"; stateTransitionOnNotWet[8] = "Fire";
}; };
datablock ItemData(M1SniperRifle) datablock ItemData(M1SniperRifle) {
{
className = Weapon; className = Weapon;
catagory = "Spawn Items"; catagory = "Spawn Items";
shapeFile = "weapon_sniper.dts"; shapeFile = "weapon_sniper.dts";

View file

@ -1,7 +1,7 @@
datablock TracerProjectileData(M4A1Bullet) { datablock TracerProjectileData(M4A1Bullet) {
doDynamicClientHits = true; doDynamicClientHits = true;
directDamage = 0.09; directDamage = 0.085;
directDamageType = $DamageType::M4A1; directDamageType = $DamageType::M4A1;
explosion = "ChaingunExplosion"; explosion = "ChaingunExplosion";
splash = ChaingunSplash; splash = ChaingunSplash;
@ -47,8 +47,7 @@ datablock TracerProjectileData(M4A1Bullet) {
// Ammo // Ammo
//-------------------------------------- //--------------------------------------
datablock ItemData(M4A1Ammo) datablock ItemData(M4A1Ammo) {
{
className = Ammo; className = Ammo;
catagory = "Ammo"; catagory = "Ammo";
shapeFile = "ammo_chaingun.dts"; shapeFile = "ammo_chaingun.dts";
@ -64,8 +63,7 @@ datablock ItemData(M4A1Ammo)
//-------------------------------------------------------------------------- //--------------------------------------------------------------------------
// Weapon // Weapon
//-------------------------------------- //--------------------------------------
datablock ShapeBaseImageData(M4A1Image) datablock ShapeBaseImageData(M4A1Image) {
{
className = WeaponImage; className = WeaponImage;
shapeFile = "weapon_energy_vehicle.dts"; shapeFile = "weapon_energy_vehicle.dts";
item = M4A1; item = M4A1;
@ -81,7 +79,7 @@ datablock ShapeBaseImageData(M4A1Image)
ClipName = "M4A1Clip"; ClipName = "M4A1Clip";
ClipPickupName["M4A1Clip"] = "some M4A1 Magazines"; ClipPickupName["M4A1Clip"] = "some M4A1 Magazines";
ShowsClipInHud = 1; ShowsClipInHud = 1;
ClipReloadTime = 4; ClipReloadTime = 6;
ClipReturn = 30; ClipReturn = 30;
InitialClips = 7; InitialClips = 7;
// //
@ -192,8 +190,7 @@ datablock ShapeBaseImageData(M4A1Image)
stateTransitionOnTimeout[7] = "NoAmmo"; stateTransitionOnTimeout[7] = "NoAmmo";
}; };
datablock ItemData(M4A1) datablock ItemData(M4A1) {
{
className = Weapon; className = Weapon;
catagory = "Spawn Items"; catagory = "Spawn Items";
shapeFile = "weapon_energy_vehicle.dts"; shapeFile = "weapon_energy_vehicle.dts";

View file

@ -1,7 +1,7 @@
datablock TracerProjectileData(PulseRifleBullet) { datablock TracerProjectileData(PulseRifleBullet) {
doDynamicClientHits = true; doDynamicClientHits = true;
directDamage = 0.2; directDamage = 0.38;
explosion = "BlasterExplosion"; explosion = "BlasterExplosion";
splash = ChaingunSplash; splash = ChaingunSplash;
@ -33,11 +33,9 @@ datablock TracerProjectileData(PulseRifleBullet) {
crossSize = 0.99; crossSize = 0.99;
crossViewAng = 0.990; crossViewAng = 0.990;
renderCross = true; renderCross = true;
}; };
datablock ItemData(PulseRifleAmmo) datablock ItemData(PulseRifleAmmo) {
{
className = Ammo; className = Ammo;
catagory = "Ammo"; catagory = "Ammo";
shapeFile = "ammo_chaingun.dts"; shapeFile = "ammo_chaingun.dts";
@ -48,11 +46,9 @@ datablock ItemData(PulseRifleAmmo)
pickUpName = "Some Pulse Rifle Bullets"; pickUpName = "Some Pulse Rifle Bullets";
computeCRC = true; computeCRC = true;
}; };
datablock ShapeBaseImageData(PulseRifleImage) datablock ShapeBaseImageData(PulseRifleImage) {
{
className = WeaponImage; className = WeaponImage;
shapeFile = "weapon_sniper.dts"; shapeFile = "weapon_sniper.dts";
mass = 10; mass = 10;
@ -125,7 +121,7 @@ datablock ShapeBaseImageData(PulseRifleImage)
stateName[4] = "Reload"; stateName[4] = "Reload";
stateTransitionOnNoAmmo[4] = "NoAmmo"; stateTransitionOnNoAmmo[4] = "NoAmmo";
stateTransitionOnTimeout[4] = "Ready"; stateTransitionOnTimeout[4] = "Ready";
stateTimeoutValue[4] = 0.3; stateTimeoutValue[4] = 0.1;
stateAllowImageChange[4] = false; stateAllowImageChange[4] = false;
stateSequence[4] = "Reload"; stateSequence[4] = "Reload";
@ -149,8 +145,7 @@ datablock ShapeBaseImageData(PulseRifleImage)
stateTransitionOnNotWet[8] = "Fire"; stateTransitionOnNotWet[8] = "Fire";
}; };
datablock ItemData(PulseRifle) datablock ItemData(PulseRifle) {
{
className = Weapon; className = Weapon;
catagory = "Spawn Items"; catagory = "Spawn Items";
shapeFile = "weapon_sniper.dts"; shapeFile = "weapon_sniper.dts";

View file

@ -4,8 +4,7 @@ datablock AudioProfile(R700FireSound) {
preload = true; preload = true;
}; };
datablock ParticleData(R700SmokeParticle) datablock ParticleData(R700SmokeParticle) {
{
dragCoeffiecient = 0.0; dragCoeffiecient = 0.0;
gravityCoefficient = -0.02; gravityCoefficient = -0.02;
inheritedVelFactor = 0.1; inheritedVelFactor = 0.1;
@ -28,11 +27,9 @@ datablock ParticleData(R700SmokeParticle)
times[0] = 0.0; times[0] = 0.0;
times[1] = 0.1; times[1] = 0.1;
times[2] = 1.0; times[2] = 1.0;
}; };
datablock ParticleEmitterData(R700SmokeEmitter) datablock ParticleEmitterData(R700SmokeEmitter) {
{
ejectionPeriodMS = 10; ejectionPeriodMS = 10;
periodVarianceMS = 0; periodVarianceMS = 0;
@ -45,14 +42,14 @@ datablock ParticleEmitterData(R700SmokeEmitter)
particles = "R700SmokeParticle"; particles = "R700SmokeParticle";
}; };
datablock LinearFlareProjectileData(R700Bullet) datablock GrenadeProjectileData(R700Bullet) {
{
projectileShapeName = "weapon_missile_projectile.dts"; projectileShapeName = "weapon_missile_projectile.dts";
scale = "1.0 1.0 1.0"; emitterDelay = -1;
faceViewer = true;
directDamage = 0.62; directDamage = 0.62;
hasDamageRadius = false;
directDamageType = $DamageType::R700;
kickBackStrength = 6400; kickBackStrength = 6400;
radiusDamageType = $DamageType::R700; bubbleEmitTime = 1.0;
HeadMultiplier = 1.5; HeadMultiplier = 1.5;
LegsMultiplier = 0.35; LegsMultiplier = 0.35;
@ -61,41 +58,23 @@ datablock LinearFlareProjectileData(R700Bullet)
ImageSource = "R700SniperRifleImage"; ImageSource = "R700SniperRifleImage";
sound = ChaingunProjectile;
explosion = "ChaingunExplosion"; explosion = "ChaingunExplosion";
underwaterExplosion = "ChaingunExplosion";
velInheritFactor = 0.5;
splash = ChaingunSplash; splash = ChaingunSplash;
baseEmitter = R700SmokeEmitter; baseEmitter = R700SmokeEmitter;
bubbleEmitter = R700SmokeEmitter;
dryVelocity = 2000.0; grenadeElasticity = 0.35;
wetVelocity = 2000.0; grenadeFriction = 0.2;
velInheritFactor = 1.0; armingDelayMS = 1;
fizzleTimeMS = 1000; muzzleVelocity = 2000.00;
lifetimeMS = 1000; drag = 0.1;
explodeOnDeath = false;
reflectOnWaterImpactAngle = 0.0;
explodeOnWaterImpact = false;
deflectionOnWaterImpact = 0.0;
fizzleUnderwaterMS = 3000;
//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";
}; };
datablock ItemData(R700SniperRifleAmmo) datablock ItemData(R700SniperRifleAmmo) {
{
className = Ammo; className = Ammo;
catagory = "Ammo"; catagory = "Ammo";
shapeFile = "ammo_chaingun.dts"; shapeFile = "ammo_chaingun.dts";
@ -113,14 +92,13 @@ datablock ItemData(R700SniperRifleAmmo)
// Weapon // Weapon
//-------------------------------------- //--------------------------------------
datablock ShapeBaseImageData(R700SniperRifleImage) { datablock ShapeBaseImageData(R700SniperRifleImage) {
className = WeaponImage; className = WeaponImage;
shapeFile = "weapon_sniper.dts"; shapeFile = "weapon_sniper.dts";
mass = 10; mass = 10;
item = R700SniperRifle; item = R700SniperRifle;
ammo = R700SniperRifleAmmo; ammo = R700SniperRifleAmmo;
projectile = R700Bullet; projectile = R700Bullet;
projectileType = LinearFlareProjectile; projectileType = GrenadeProjectile;
emap = true; emap = true;
armThread = looksn; armThread = looksn;
@ -208,8 +186,7 @@ datablock ShapeBaseImageData(R700SniperRifleImage) {
stateTransitionOnNotWet[8] = "Fire"; stateTransitionOnNotWet[8] = "Fire";
}; };
datablock ItemData(R700SniperRifle) datablock ItemData(R700SniperRifle) {
{
className = Weapon; className = Weapon;
catagory = "Spawn Items"; catagory = "Spawn Items";
shapeFile = "weapon_sniper.dts"; shapeFile = "weapon_sniper.dts";

View file

@ -1,12 +1,10 @@
datablock AudioProfile(LaserRifleFireSound) datablock AudioProfile(LaserRifleFireSound) {
{
filename = "fx/weapons/sniper_fire.wav"; filename = "fx/weapons/sniper_fire.wav";
description = AudioClose3d; description = AudioClose3d;
preload = true; preload = true;
}; };
datablock ParticleData(RedFlareParticle) datablock ParticleData(RedFlareParticle) {
{
dragCoeffiecient = 0.0; dragCoeffiecient = 0.0;
gravityCoefficient = 0.15; gravityCoefficient = 0.15;
inheritedVelFactor = 0.5; inheritedVelFactor = 0.5;
@ -27,11 +25,9 @@ datablock ParticleData(RedFlareParticle)
times[0] = 0.0; times[0] = 0.0;
times[1] = 0.5; times[1] = 0.5;
times[2] = 1.0; times[2] = 1.0;
}; };
datablock ParticleEmitterData(RedFlareemmiter) datablock ParticleEmitterData(RedFlareemmiter){
{
ejectionPeriodMS = 10; ejectionPeriodMS = 10;
periodVarianceMS = 0; periodVarianceMS = 0;
@ -47,8 +43,7 @@ datablock ParticleEmitterData(RedFlareemmiter)
particles = "RedFlareParticle"; particles = "RedFlareParticle";
}; };
datablock LinearFlareProjectileData(LaserShot) datablock LinearFlareProjectileData(LaserShot) {
{
scale = "1.0 1.0 1.0"; scale = "1.0 1.0 1.0";
faceViewer = false; faceViewer = false;
directDamage = 0.6; directDamage = 0.6;
@ -95,15 +90,13 @@ datablock LinearFlareProjectileData(LaserShot)
hasLight = true; hasLight = true;
lightRadius = 3.0; lightRadius = 3.0;
lightColor = "1 0 0"; lightColor = "1 0 0";
}; };
//-------------------------------------------------------------------------- //--------------------------------------------------------------------------
// Ammo // Ammo
//-------------------------------------- //--------------------------------------
datablock ItemData(lasergunAmmo) datablock ItemData(lasergunAmmo){
{
className = Ammo; className = Ammo;
catagory = "Ammo"; catagory = "Ammo";
shapeFile = "ammo_chaingun.dts"; shapeFile = "ammo_chaingun.dts";
@ -114,14 +107,12 @@ datablock ItemData(lasergunAmmo)
pickUpName = "some laser rifle ammo"; pickUpName = "some laser rifle ammo";
computeCRC = true; computeCRC = true;
}; };
//-------------------------------------------------------------------------- //--------------------------------------------------------------------------
// Weapon // Weapon
//-------------------------------------- //--------------------------------------
datablock ShapeBaseImageData(lasergunImage) datablock ShapeBaseImageData(lasergunImage) {
{
className = WeaponImage; className = WeaponImage;
shapeFile = "weapon_sniper.dts"; shapeFile = "weapon_sniper.dts";
item = lasergun; item = lasergun;
@ -160,7 +151,7 @@ datablock ShapeBaseImageData(lasergunImage)
Upgrade[1] = "Grip"; Upgrade[1] = "Grip";
Upgrade[2] = "Laser"; Upgrade[2] = "Laser";
Upgrade[3] = "Silencer"; Upgrade[3] = "Silencer";
GunName = "RSA Laser Rifle"; GunName = "UR-22 Laser Rifle";
// //
RankRequire = $TWM2::RankRequire["RSALaserRifle"]; RankRequire = $TWM2::RankRequire["RSALaserRifle"];
@ -221,8 +212,7 @@ datablock ShapeBaseImageData(lasergunImage)
stateTransitionOnNotWet[8] = "Fire"; stateTransitionOnNotWet[8] = "Fire";
}; };
datablock ItemData(lasergun) datablock ItemData(lasergun) {
{
className = Weapon; className = Weapon;
catagory = "Spawn Items"; catagory = "Spawn Items";
shapeFile = "weapon_chaingun.dts"; shapeFile = "weapon_chaingun.dts";
@ -231,7 +221,7 @@ datablock ItemData(lasergun)
elasticity = 0.2; elasticity = 0.2;
friction = 0.6; friction = 0.6;
pickupRadius = 2; pickupRadius = 2;
pickUpName = "a Laser Rifle"; pickUpName = "a UR-22 Laser Rifle";
computeCRC = true; computeCRC = true;
emap = true; emap = true;

View file

@ -1,15 +1,13 @@
datablock AudioProfile(S3FireSound) datablock AudioProfile(S3FireSound) {
{
filename = "fx/vehicles/tank_chaingun.wav"; filename = "fx/vehicles/tank_chaingun.wav";
description = AudioDefault3d; description = AudioDefault3d;
preload = true; preload = true;
}; };
datablock TracerProjectileData(S3Bullet) datablock TracerProjectileData(S3Bullet) {
{
doDynamicClientHits = true; doDynamicClientHits = true;
directDamage = 0.7; directDamage = 0.5;
directDamageType = $DamageType::S3; directDamageType = $DamageType::S3;
explosion = "ChaingunExplosion"; explosion = "ChaingunExplosion";
splash = ChaingunSplash; splash = ChaingunSplash;
@ -53,8 +51,7 @@ datablock TracerProjectileData(S3Bullet)
decalData[5] = ChaingunDecal6; decalData[5] = ChaingunDecal6;
}; };
datablock ItemData(S3RifleAmmo) datablock ItemData(S3RifleAmmo) {
{
className = Ammo; className = Ammo;
catagory = "Ammo"; catagory = "Ammo";
shapeFile = "ammo_chaingun.dts"; shapeFile = "ammo_chaingun.dts";
@ -65,11 +62,9 @@ datablock ItemData(S3RifleAmmo)
pickUpName = "Some S3 Rifle Bullets"; pickUpName = "Some S3 Rifle Bullets";
computeCRC = true; computeCRC = true;
}; };
datablock ShapeBaseImageData(S3RifleImage) datablock ShapeBaseImageData(S3RifleImage) {
{
className = WeaponImage; className = WeaponImage;
shapeFile = "weapon_sniper.dts"; shapeFile = "weapon_sniper.dts";
mass = 10; mass = 10;
@ -112,7 +107,7 @@ datablock ShapeBaseImageData(S3RifleImage)
shellExitVariance = 15.0; shellExitVariance = 15.0;
shellVelocity = 3.0; shellVelocity = 3.0;
projectileSpread = 3.0 / 1000.0; projectileSpread = 2.5 / 1000.0;
stateName[0] = "Activate"; stateName[0] = "Activate";
stateTransitionOnTimeout[0] = "ActivateReady"; stateTransitionOnTimeout[0] = "ActivateReady";
@ -135,13 +130,13 @@ datablock ShapeBaseImageData(S3RifleImage)
stateRecoil[3] = LightRecoil; stateRecoil[3] = LightRecoil;
stateAllowImageChange[3] = false; stateAllowImageChange[3] = false;
stateScript[3] = "onFire"; stateScript[3] = "onFire";
stateEmitterTime[3] = 0.2; stateEmitterTime[3] = 0.01;
//stateSound[3] = S3FireSound; //stateSound[3] = S3FireSound;
stateName[4] = "Reload"; stateName[4] = "Reload";
stateTransitionOnNoAmmo[4] = "NoAmmo"; stateTransitionOnNoAmmo[4] = "NoAmmo";
stateTransitionOnTimeout[4] = "Ready"; stateTransitionOnTimeout[4] = "Ready";
stateTimeoutValue[4] = 0.9; stateTimeoutValue[4] = 0.4;
stateAllowImageChange[4] = false; stateAllowImageChange[4] = false;
stateSequence[4] = "Reload"; stateSequence[4] = "Reload";
@ -165,8 +160,7 @@ datablock ShapeBaseImageData(S3RifleImage)
stateTransitionOnNotWet[8] = "Fire"; stateTransitionOnNotWet[8] = "Fire";
}; };
datablock ItemData(S3Rifle) datablock ItemData(S3Rifle) {
{
className = Weapon; className = Weapon;
catagory = "Spawn Items"; catagory = "Spawn Items";
shapeFile = "weapon_sniper.dts"; shapeFile = "weapon_sniper.dts";
@ -183,14 +177,12 @@ datablock ItemData(S3Rifle)
function S3RifleImage::OnFire(%data, %obj, %slot) { function S3RifleImage::OnFire(%data, %obj, %slot) {
if(%obj.client.UpgradeOn("Burst Clip", %data.getName())) { if(%obj.client.UpgradeOn("Burst Clip", %data.getName())) {
%spread = %data.projectileSpread; %spread = %data.projectileSpread;
if(%obj.client !$= "") { if(%obj.client !$= "") {
if(%obj.client.IsActivePerk("Advanced Grip")) { if(%obj.client.IsActivePerk("Advanced Grip")) {
%spread = %spread / 2.5; %spread = %spread / 2.5;
} }
} }
%vec2 = %obj.getMuzzleVector(%slot); %vec2 = %obj.getMuzzleVector(%slot);
%x = (getRandom() - 0.5) * 2 * 3.1415926 * %spread; %x = (getRandom() - 0.5) * 2 * 3.1415926 * %spread;
%y = (getRandom() - 0.5) * 2 * 3.1415926 * %spread; %y = (getRandom() - 0.5) * 2 * 3.1415926 * %spread;

View file

@ -45,8 +45,7 @@ datablock TracerProjectileData(S3SBullet) {
decalData[5] = ChaingunDecal6; decalData[5] = ChaingunDecal6;
}; };
datablock ItemData(S3SRifleAmmo) datablock ItemData(S3SRifleAmmo) {
{
className = Ammo; className = Ammo;
catagory = "Ammo"; catagory = "Ammo";
shapeFile = "ammo_chaingun.dts"; shapeFile = "ammo_chaingun.dts";
@ -57,11 +56,9 @@ datablock ItemData(S3SRifleAmmo)
pickUpName = "Some S3S Rifle Bullets"; pickUpName = "Some S3S Rifle Bullets";
computeCRC = true; computeCRC = true;
}; };
datablock ShapeBaseImageData(S3SRifleImage) datablock ShapeBaseImageData(S3SRifleImage) {
{
className = WeaponImage; className = WeaponImage;
shapeFile = "weapon_sniper.dts"; shapeFile = "weapon_sniper.dts";
mass = 10; mass = 10;
@ -159,8 +156,7 @@ datablock ShapeBaseImageData(S3SRifleImage)
stateTransitionOnNotWet[10] = "Fire"; stateTransitionOnNotWet[10] = "Fire";
}; };
datablock ItemData(S3SRifle) datablock ItemData(S3SRifle) {
{
className = Weapon; className = Weapon;
catagory = "Spawn Items"; catagory = "Spawn Items";
shapeFile = "weapon_sniper.dts"; shapeFile = "weapon_sniper.dts";

View file

@ -4,11 +4,10 @@ datablock AudioProfile(ShotgunFireSound) {
preload = true; preload = true;
}; };
datablock TracerProjectileData(M1700Pellet) datablock TracerProjectileData(M1700Pellet) {
{
doDynamicClientHits = true; doDynamicClientHits = true;
directDamage = (0.075 * 1.5); directDamage = 0.13;
directDamageType = $DamageType::M1700; directDamageType = $DamageType::M1700;
explosion = "ChaingunExplosion"; explosion = "ChaingunExplosion";
splash = ChaingunSplash; splash = ChaingunSplash;
@ -24,8 +23,8 @@ datablock TracerProjectileData(M1700Pellet)
dryVelocity = 1500.0; dryVelocity = 1500.0;
wetVelocity = 1000.0; wetVelocity = 1000.0;
velInheritFactor = 0.0; velInheritFactor = 0.0;
fizzleTimeMS = 1000; fizzleTimeMS = 100;
lifetimeMS = 1000; lifetimeMS = 150;
explodeOnDeath = false; explodeOnDeath = false;
reflectOnWaterImpactAngle = 0.0; reflectOnWaterImpactAngle = 0.0;
explodeOnWaterImpact = false; explodeOnWaterImpact = false;
@ -55,8 +54,7 @@ datablock TracerProjectileData(M1700Pellet)
// Ammo // Ammo
//-------------------------------------- //--------------------------------------
datablock ItemData(M1700Ammo) datablock ItemData(M1700Ammo) {
{
className = Ammo; className = Ammo;
catagory = "Ammo"; catagory = "Ammo";
shapeFile = "ammo_chaingun.dts"; shapeFile = "ammo_chaingun.dts";
@ -67,14 +65,12 @@ datablock ItemData(M1700Ammo)
pickUpName = "some M1700 rounds"; pickUpName = "some M1700 rounds";
computeCRC = true; computeCRC = true;
}; };
//-------------------------------------------------------------------------- //--------------------------------------------------------------------------
// Weapon // Weapon
//-------------------------------------- //--------------------------------------
datablock ShapeBaseImageData(M1700Image) datablock ShapeBaseImageData(M1700Image) {
{
className = WeaponImage; className = WeaponImage;
shapeFile = "weapon_plasma.dts"; shapeFile = "weapon_plasma.dts";
item = M1700; item = M1700;
@ -94,7 +90,7 @@ datablock ShapeBaseImageData(M1700Image)
ClipName = "M1700Clip"; ClipName = "M1700Clip";
ClipPickupName["M1700Clip"] = "some M1700 Clip Boxes"; ClipPickupName["M1700Clip"] = "some M1700 Clip Boxes";
ShowsClipInHud = 1; ShowsClipInHud = 1;
ClipReloadTime = 2; ClipReloadTime = 3;
ClipReturn = 1; ClipReturn = 1;
InitialClips = 15; InitialClips = 15;
// //
@ -171,8 +167,7 @@ datablock ShapeBaseImageData(M1700Image)
stateTransitionOnNotWet[8] = "Fire"; stateTransitionOnNotWet[8] = "Fire";
}; };
datablock ItemData(M1700) datablock ItemData(M1700) {
{
className = Weapon; className = Weapon;
catagory = "Spawn Items"; catagory = "Spawn Items";
shapeFile = "weapon_plasma.dts"; shapeFile = "weapon_plasma.dts";

View file

@ -1,8 +1,7 @@
datablock TracerProjectileData(Model1887Pellet) datablock TracerProjectileData(Model1887Pellet) {
{
doDynamicClientHits = true; doDynamicClientHits = true;
directDamage = (0.064 * 1.5); directDamage = 0.11;
directDamageType = $DamageType::Model1887; directDamageType = $DamageType::Model1887;
explosion = "ChaingunExplosion"; explosion = "ChaingunExplosion";
splash = ChaingunSplash; splash = ChaingunSplash;
@ -18,8 +17,8 @@ datablock TracerProjectileData(Model1887Pellet)
dryVelocity = 1500.0; dryVelocity = 1500.0;
wetVelocity = 1000.0; wetVelocity = 1000.0;
velInheritFactor = 0.0; velInheritFactor = 0.0;
fizzleTimeMS = 500; fizzleTimeMS = 100;
lifetimeMS = 500; lifetimeMS = 125;
explodeOnDeath = false; explodeOnDeath = false;
reflectOnWaterImpactAngle = 0.0; reflectOnWaterImpactAngle = 0.0;
explodeOnWaterImpact = false; explodeOnWaterImpact = false;
@ -49,8 +48,7 @@ datablock TracerProjectileData(Model1887Pellet)
// Ammo // Ammo
//-------------------------------------- //--------------------------------------
datablock ItemData(Model1887Ammo) datablock ItemData(Model1887Ammo) {
{
className = Ammo; className = Ammo;
catagory = "Ammo"; catagory = "Ammo";
shapeFile = "ammo_chaingun.dts"; shapeFile = "ammo_chaingun.dts";
@ -61,14 +59,12 @@ datablock ItemData(Model1887Ammo)
pickUpName = "some Model 1887 rounds"; pickUpName = "some Model 1887 rounds";
computeCRC = true; computeCRC = true;
}; };
//-------------------------------------------------------------------------- //--------------------------------------------------------------------------
// Weapon // Weapon
//-------------------------------------- //--------------------------------------
datablock ShapeBaseImageData(Model1887Image) datablock ShapeBaseImageData(Model1887Image) {
{
className = WeaponImage; className = WeaponImage;
shapeFile = "weapon_disc.dts"; shapeFile = "weapon_disc.dts";
item = Model1887; item = Model1887;
@ -165,8 +161,7 @@ datablock ShapeBaseImageData(Model1887Image)
stateTransitionOnNotWet[8] = "Fire"; stateTransitionOnNotWet[8] = "Fire";
}; };
datablock ItemData(Model1887) datablock ItemData(Model1887 {
{
className = Weapon; className = Weapon;
catagory = "Spawn Items"; catagory = "Spawn Items";
shapeFile = "weapon_plasma.dts"; shapeFile = "weapon_plasma.dts";
@ -194,7 +189,7 @@ function Model1887Image::onFire(%data,%obj,%slot) {
%vector = %obj.getMuzzleVector(%slot); %vector = %obj.getMuzzleVector(%slot);
%mp = %obj.getMuzzlePoint(%slot); %mp = %obj.getMuzzlePoint(%slot);
for (%i = 0; %i < 14; %i++) { for (%i = 0; %i < 18; %i++) {
%x = (getRandom() - 0.5) * 2 * 3.1415926 * %data.projectileSpread; %x = (getRandom() - 0.5) * 2 * 3.1415926 * %data.projectileSpread;
%y = (getRandom() - 0.5) * 2 * 3.1415926 * %data.projectileSpread; %y = (getRandom() - 0.5) * 2 * 3.1415926 * %data.projectileSpread;
%z = (getRandom() - 0.5) * 2 * 3.1415926 * %data.projectileSpread; %z = (getRandom() - 0.5) * 2 * 3.1415926 * %data.projectileSpread;

View file

@ -8,8 +8,7 @@
//-------------------------------------- //--------------------------------------
datablock DebrisData( SemiAutoShellDebris ) datablock DebrisData( SemiAutoShellDebris ) {
{
shapeName = "weapon_chaingun_ammocasing.dts"; shapeName = "weapon_chaingun_ammocasing.dts";
lifetime = 7.0; lifetime = 7.0;
@ -32,8 +31,7 @@ datablock DebrisData( SemiAutoShellDebris )
// Projectile // Projectile
//-------------------------------------- //--------------------------------------
datablock TracerProjectileData( SA2400Slug ) datablock TracerProjectileData( SA2400Slug ) {
{
doDynamicClientHits = true; doDynamicClientHits = true;
directDamage = 0.3; directDamage = 0.3;
@ -51,8 +49,8 @@ datablock TracerProjectileData( SA2400Slug )
dryVelocity = 2561.0; dryVelocity = 2561.0;
wetVelocity = 586.0; wetVelocity = 586.0;
velInheritFactor = 1.0; velInheritFactor = 1.0;
fizzleTimeMS = 3000; fizzleTimeMS = 150;
lifetimeMS = 3000; lifetimeMS = 200;
explodeOnDeath = false; explodeOnDeath = false;
reflectOnWaterImpactAngle = 40.0; reflectOnWaterImpactAngle = 40.0;
explodeOnWaterImpact = false; explodeOnWaterImpact = false;
@ -81,8 +79,7 @@ datablock TracerProjectileData( SA2400Slug )
// Ammo // Ammo
//-------------------------------------- //--------------------------------------
datablock ItemData( SA2400Ammo ) datablock ItemData( SA2400Ammo ) {
{
className = Ammo; className = Ammo;
catagory = "Ammo"; catagory = "Ammo";
shapeFile = "ammo_chaingun.dts"; shapeFile = "ammo_chaingun.dts";
@ -93,14 +90,12 @@ datablock ItemData( SA2400Ammo )
pickUpName = "some chaingun ammo"; pickUpName = "some chaingun ammo";
computeCRC = true; computeCRC = true;
}; };
//-------------------------------------------------------------------------- //--------------------------------------------------------------------------
// Weapon // Weapon
//-------------------------------------- //--------------------------------------
datablock ShapeBaseImageData( SA2400Image ) datablock ShapeBaseImageData( SA2400Image ) {
{
className = WeaponImage; className = WeaponImage;
shapeFile = "weapon_grenade_launcher.dts"; shapeFile = "weapon_grenade_launcher.dts";
item = SA2400; item = SA2400;
@ -146,9 +141,9 @@ datablock ShapeBaseImageData( SA2400Image )
// //
projectileSpread = 3.0 / 1000.0; projectileSpread = 3.0 / 1000.0;
//----------------------------------------------------------------------------\\ //----------------------------------------------------------------------------\\
//State Data\\ //State Data\\
//----------------------------------------------------------------------------\\ //----------------------------------------------------------------------------\\
stateName[0] = "Activate"; stateName[0] = "Activate";
stateTransitionOnTimeout[0] = "ActivateReady"; stateTransitionOnTimeout[0] = "ActivateReady";
stateSequence[0] = "Activate"; stateSequence[0] = "Activate";
@ -187,7 +182,7 @@ datablock ShapeBaseImageData( SA2400Image )
stateTransitionOnTimeout[5] = "FireSecondRound"; stateTransitionOnTimeout[5] = "FireSecondRound";
stateTransitionOnTriggerUp[5] = "ReadySecondRound"; stateTransitionOnTriggerUp[5] = "ReadySecondRound";
stateTransitionOnNoAmmo[5] = "NoAmmo"; stateTransitionOnNoAmmo[5] = "NoAmmo";
stateTimeoutValue[5] = 0.2; stateTimeoutValue[5] = 0.14;
stateFire[5] = true; stateFire[5] = true;
stateEjectShell[5] = true; stateEjectShell[5] = true;
stateAllowImageChange[5] = false; stateAllowImageChange[5] = false;
@ -200,7 +195,7 @@ datablock ShapeBaseImageData( SA2400Image )
stateTransitionOnTimeout[6] = "FireThirdRound"; stateTransitionOnTimeout[6] = "FireThirdRound";
stateTransitionOnTriggerUp[6] = "ReadyThirdRound"; stateTransitionOnTriggerUp[6] = "ReadyThirdRound";
stateTransitionOnNoAmmo[6] = "NoAmmo"; stateTransitionOnNoAmmo[6] = "NoAmmo";
stateTimeoutValue[6] = 0.2; stateTimeoutValue[6] = 0.14;
stateFire[6] = true; stateFire[6] = true;
stateEjectShell[6] = true; stateEjectShell[6] = true;
stateAllowImageChange[6] = false; stateAllowImageChange[6] = false;
@ -213,7 +208,7 @@ datablock ShapeBaseImageData( SA2400Image )
stateTransitionOnTimeout[7] = "FireFourthRound"; stateTransitionOnTimeout[7] = "FireFourthRound";
stateTransitionOnTriggerUp[7] = "ReadyFourthRound"; stateTransitionOnTriggerUp[7] = "ReadyFourthRound";
stateTransitionOnNoAmmo[7] = "NoAmmo"; stateTransitionOnNoAmmo[7] = "NoAmmo";
stateTimeoutValue[7] = 0.2; stateTimeoutValue[7] = 0.14;
stateFire[7] = true; stateFire[7] = true;
stateEjectShell[7] = true; stateEjectShell[7] = true;
stateAllowImageChange[7] = false; stateAllowImageChange[7] = false;
@ -226,7 +221,7 @@ datablock ShapeBaseImageData( SA2400Image )
stateTransitionOnTimeout[8] = "FireFifthRound"; stateTransitionOnTimeout[8] = "FireFifthRound";
stateTransitionOnTriggerUp[8] = "ReadyFifthRound"; stateTransitionOnTriggerUp[8] = "ReadyFifthRound";
stateTransitionOnNoAmmo[8] = "NoAmmo"; stateTransitionOnNoAmmo[8] = "NoAmmo";
stateTimeoutValue[8] = 0.2; stateTimeoutValue[8] = 0.14;
stateFire[8] = true; stateFire[8] = true;
stateEjectShell[8] = true; stateEjectShell[8] = true;
stateAllowImageChange[8] = false; stateAllowImageChange[8] = false;
@ -239,7 +234,7 @@ datablock ShapeBaseImageData( SA2400Image )
stateTransitionOnTimeout[9] = "FireSixthRound"; stateTransitionOnTimeout[9] = "FireSixthRound";
stateTransitionOnTriggerUp[9] = "ReadySixthRound"; stateTransitionOnTriggerUp[9] = "ReadySixthRound";
stateTransitionOnNoAmmo[9] = "NoAmmo"; stateTransitionOnNoAmmo[9] = "NoAmmo";
stateTimeoutValue[9] = 0.2; stateTimeoutValue[9] = 0.14;
stateFire[9] = true; stateFire[9] = true;
stateEjectShell[9] = true; stateEjectShell[9] = true;
stateAllowImageChange[9] = false; stateAllowImageChange[9] = false;
@ -252,7 +247,7 @@ datablock ShapeBaseImageData( SA2400Image )
stateTransitionOnTimeout[10] = "FireSeventhRound"; stateTransitionOnTimeout[10] = "FireSeventhRound";
stateTransitionOnTriggerUp[10] = "ReadySeventhRound"; stateTransitionOnTriggerUp[10] = "ReadySeventhRound";
stateTransitionOnNoAmmo[10] = "NoAmmo"; stateTransitionOnNoAmmo[10] = "NoAmmo";
stateTimeoutValue[10] = 0.2; stateTimeoutValue[10] = 0.14;
stateFire[10] = true; stateFire[10] = true;
stateEjectShell[10] = true; stateEjectShell[10] = true;
stateAllowImageChange[10] = false; stateAllowImageChange[10] = false;
@ -265,7 +260,7 @@ datablock ShapeBaseImageData( SA2400Image )
stateTransitionOnTimeout[11] = "Reload"; stateTransitionOnTimeout[11] = "Reload";
stateTransitionOnTriggerUp[11] = "Reload"; stateTransitionOnTriggerUp[11] = "Reload";
stateTransitionOnNoAmmo[11] = "NoAmmo"; stateTransitionOnNoAmmo[11] = "NoAmmo";
stateTimeoutValue[11] = 0.2; stateTimeoutValue[11] = 0.14;
stateFire[11] = true; stateFire[11] = true;
stateEjectShell[11] = true; stateEjectShell[11] = true;
stateAllowImageChange[11] = false; stateAllowImageChange[11] = false;
@ -305,12 +300,9 @@ datablock ShapeBaseImageData( SA2400Image )
stateName[18] = "ActivateReady"; stateName[18] = "ActivateReady";
stateTransitionOnLoaded[18] = "Ready"; stateTransitionOnLoaded[18] = "Ready";
stateTransitionOnNoAmmo[18] = "NoAmmo"; stateTransitionOnNoAmmo[18] = "NoAmmo";
//----------------------------------------------------------------------------\\
//----------------------------------------------------------------------------\\
}; };
datablock ItemData( SA2400 ) datablock ItemData( SA2400 ) {
{
className = Weapon; className = Weapon;
catagory = "Spawn Items"; catagory = "Spawn Items";
shapeFile = "weapon_grenade_launcher.dts"; shapeFile = "weapon_grenade_launcher.dts";

View file

@ -1,8 +1,7 @@
datablock TracerProjectileData(SCD343Pellet) datablock TracerProjectileData(SCD343Pellet) {
{
doDynamicClientHits = true; doDynamicClientHits = true;
directDamage = (0.075 * 1.4); directDamage = 0.17;
directDamageType = $DamageType::SCD343; directDamageType = $DamageType::SCD343;
explosion = "ChaingunExplosion"; explosion = "ChaingunExplosion";
splash = ChaingunSplash; splash = ChaingunSplash;
@ -18,8 +17,8 @@ datablock TracerProjectileData(SCD343Pellet)
dryVelocity = 1500.0; dryVelocity = 1500.0;
wetVelocity = 1000.0; wetVelocity = 1000.0;
velInheritFactor = 0.0; velInheritFactor = 0.0;
fizzleTimeMS = 1000; fizzleTimeMS = 75;
lifetimeMS = 1000; lifetimeMS = 100;
explodeOnDeath = false; explodeOnDeath = false;
reflectOnWaterImpactAngle = 0.0; reflectOnWaterImpactAngle = 0.0;
explodeOnWaterImpact = false; explodeOnWaterImpact = false;
@ -49,8 +48,7 @@ datablock TracerProjectileData(SCD343Pellet)
// Ammo // Ammo
//-------------------------------------- //--------------------------------------
datablock ItemData(SCD343Ammo) datablock ItemData(SCD343Ammo) {
{
className = Ammo; className = Ammo;
catagory = "Ammo"; catagory = "Ammo";
shapeFile = "ammo_chaingun.dts"; shapeFile = "ammo_chaingun.dts";
@ -61,14 +59,12 @@ datablock ItemData(SCD343Ammo)
pickUpName = "some SCD343 rounds"; pickUpName = "some SCD343 rounds";
computeCRC = true; computeCRC = true;
}; };
//-------------------------------------------------------------------------- //--------------------------------------------------------------------------
// Weapon // Weapon
//-------------------------------------- //--------------------------------------
datablock ShapeBaseImageData(SCD343Image) datablock ShapeBaseImageData(SCD343Image) {
{
className = WeaponImage; className = WeaponImage;
shapeFile = "weapon_plasma.dts"; shapeFile = "weapon_plasma.dts";
item = SCD343; item = SCD343;
@ -109,7 +105,7 @@ datablock ShapeBaseImageData(SCD343Image)
GunName = "SCD343 Shotgun"; GunName = "SCD343 Shotgun";
// //
projectileSpread = 6.0 / 1000.0; projectileSpread = 10.0 / 1000.0;
stateName[0] = "Activate"; stateName[0] = "Activate";
stateTransitionOnTimeout[0] = "ActivateReady"; stateTransitionOnTimeout[0] = "ActivateReady";
@ -166,8 +162,7 @@ datablock ShapeBaseImageData(SCD343Image)
stateTransitionOnNotWet[8] = "Fire"; stateTransitionOnNotWet[8] = "Fire";
}; };
datablock ItemData(SCD343) datablock ItemData(SCD343) {
{
className = Weapon; className = Weapon;
catagory = "Spawn Items"; catagory = "Spawn Items";
shapeFile = "weapon_plasma.dts"; shapeFile = "weapon_plasma.dts";

View file

@ -1,8 +1,7 @@
datablock TracerProjectileData(Wp400Pellet) datablock TracerProjectileData(Wp400Pellet) {
{
doDynamicClientHits = true; doDynamicClientHits = true;
directDamage = (0.075 * 1.5); directDamage = 0.1125;
directDamageType = $DamageType::Wp400; directDamageType = $DamageType::Wp400;
explosion = "ChaingunExplosion"; explosion = "ChaingunExplosion";
splash = ChaingunSplash; splash = ChaingunSplash;
@ -18,8 +17,8 @@ datablock TracerProjectileData(Wp400Pellet)
dryVelocity = 1500.0; dryVelocity = 1500.0;
wetVelocity = 1000.0; wetVelocity = 1000.0;
velInheritFactor = 0.0; velInheritFactor = 0.0;
fizzleTimeMS = 1000; fizzleTimeMS = 75;
lifetimeMS = 1000; lifetimeMS = 100;
explodeOnDeath = false; explodeOnDeath = false;
reflectOnWaterImpactAngle = 0.0; reflectOnWaterImpactAngle = 0.0;
explodeOnWaterImpact = false; explodeOnWaterImpact = false;
@ -49,8 +48,7 @@ datablock TracerProjectileData(Wp400Pellet)
// Ammo // Ammo
//-------------------------------------- //--------------------------------------
datablock ItemData(Wp400Ammo) datablock ItemData(Wp400Ammo) {
{
className = Ammo; className = Ammo;
catagory = "Ammo"; catagory = "Ammo";
shapeFile = "ammo_chaingun.dts"; shapeFile = "ammo_chaingun.dts";
@ -61,14 +59,12 @@ datablock ItemData(Wp400Ammo)
pickUpName = "some Wp400 rounds"; pickUpName = "some Wp400 rounds";
computeCRC = true; computeCRC = true;
}; };
//-------------------------------------------------------------------------- //--------------------------------------------------------------------------
// Weapon // Weapon
//-------------------------------------- //--------------------------------------
datablock ShapeBaseImageData(Wp400Image) datablock ShapeBaseImageData(Wp400Image) {
{
className = WeaponImage; className = WeaponImage;
shapeFile = "weapon_plasma.dts"; shapeFile = "weapon_plasma.dts";
item = Wp400; item = Wp400;
@ -88,7 +84,7 @@ datablock ShapeBaseImageData(Wp400Image)
ClipName = "Wp400Clip"; ClipName = "Wp400Clip";
ClipPickupName["Wp400Clip"] = "some Wp400 Clip Boxes"; ClipPickupName["Wp400Clip"] = "some Wp400 Clip Boxes";
ShowsClipInHud = 1; ShowsClipInHud = 1;
ClipReloadTime = 4; ClipReloadTime = 7;
ClipReturn = 5; ClipReturn = 5;
InitialClips = 6; InitialClips = 6;
// //
@ -109,7 +105,7 @@ datablock ShapeBaseImageData(Wp400Image)
GunName = "Wp400 Shotgun"; GunName = "Wp400 Shotgun";
// //
projectileSpread = 10.0 / 1000.0; projectileSpread = 15.0 / 1000.0;
stateName[0] = "Activate"; stateName[0] = "Activate";
stateTransitionOnTimeout[0] = "ActivateReady"; stateTransitionOnTimeout[0] = "ActivateReady";
@ -138,7 +134,7 @@ datablock ShapeBaseImageData(Wp400Image)
stateName[4] = "Reload"; stateName[4] = "Reload";
stateTransitionOnNoAmmo[4] = "NoAmmo"; stateTransitionOnNoAmmo[4] = "NoAmmo";
stateTransitionOnTimeout[4] = "Ready"; stateTransitionOnTimeout[4] = "Ready";
stateTimeoutValue[4] = 0.9; stateTimeoutValue[4] = 0.5;
stateAllowImageChange[4] = false; stateAllowImageChange[4] = false;
stateSequence[4] = "Reload"; stateSequence[4] = "Reload";