*** empty log message ***

git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@1845 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
Magnus 2006-01-12 01:55:21 +00:00
parent 1d437c5023
commit 6c209f284b
5 changed files with 261 additions and 18 deletions

View file

@ -346,6 +346,214 @@ void(entity targ, entity inflictor, entity attacker, float damage) T_Damage =
self = oldself;
};
/*
============
X_Damage
The other damage function.
============
*/
void(entity targ, entity inflictor, entity attacker, float damage) X_Damage =
{
local entity oldself;
local float save;
local float take, severity, helm;
local string attackerteam, targteam;
if (!targ.takedamage)
return;
// used by buttons and triggers to set activator for target firing
damage_attacker = attacker;
// check for quad damage powerup on the attacker
if (attacker.super_damage_finished > time && inflictor.classname != "door")
if (deathmatch == 4)
damage = damage * 8;
else
damage = damage * 4;
if (attacker.critical == 3)//attacker scored a headshot/critical
{
if (attacker.critical == 3)
{
severity = 0 + random()*20;
if (attacker.perk == 7)
severity = severity + 4;
if (attacker.class == 3)
severity = severity + 2;
if (severity >= 19)
damage = (damage * 3.0);
else if (severity >= 14)
damage = (damage * 2.5);
else
damage = (damage * 2.0);
helm = targ.armortype;
if (targ.helmet == 0)
{
sound (targ, CHAN_BODY, "player/headshot.wav", 1, ATTN_NORM);
helm = 0;
}
if (targ.helmet == AS_STRAIGHT)
{
sound (targ, CHAN_BODY, "weapons/helmet.wav", 1, ATTN_NORM);
helm = 0.10;
}
if (targ.helmet == AS_SLIDING)
{
sound (targ, CHAN_BODY, "weapons/helmet.wav", 1, ATTN_NORM);
helm = 0.15;
}
damage = (damage - (damage * helm));
makevectors (targ.v_angle);
}
}
if (random()*4<=1)
sound (targ, CHAN_BODY, targ.armornoise, 1, ATTN_NORM);
// add to the damage total for clients, which will be sent as a single
// message at the end of the frame
// FIXME: remove after combining shotgun blasts?
if (targ.flags & FL_CLIENT)
{
targ.dmg_take = targ.dmg_take + take;
targ.dmg_save = targ.dmg_save + save;
targ.dmg_inflictor = inflictor;
}
damage_inflictor = inflictor;
/*
// figure momentum add
if ( (inflictor != world) && (targ.movetype == MOVETYPE_WALK) )
{
dir = targ.origin - (inflictor.absmin + inflictor.absmax) * 0.5;
dir = normalize(dir);
// Set kickback for smaller weapons
//Zoid -- use normal NQ kickback
// // Read: only if it's not yourself doing the damage
// if ( (damage < 60) & ((attacker.classname == "player") & (targ.classname == "player")) & ( attacker.netname != targ.netname))
// targ.velocity = targ.velocity + dir * damage * 11;
// else
// Otherwise, these rules apply to rockets and grenades
// for blast velocity
targ.velocity = targ.velocity + dir * damage * 8;
// Rocket Jump modifiers
if ( (rj > 1) & ((attacker.classname == "player") & (targ.classname == "player")) & ( attacker.netname == targ.netname))
targ.velocity = targ.velocity + dir * damage * rj;
}*/
// check for godmode or invincibility
if (targ.flags & FL_GODMODE)
return;
if (targ.invincible_finished >= time)
{
if (self.invincible_sound < time)
{
sound (targ, CHAN_ITEM, "items/protect3.wav", 1, ATTN_NORM);
self.invincible_sound = time + 2;
}
return;
}
// team play damage avoidance
//ZOID 12-13-96: self.team doesn't work in QW. Use keys
attackerteam = infokey(attacker, "team");
targteam = infokey(targ, "team");
if ((teamplay == 1) && (targteam == attackerteam) &&
(attacker.classname == "player") && (attackerteam != "") &&
inflictor.classname !="door")
return;
if ((teamplay == 3) && (targteam == attackerteam) &&
(attacker.classname == "player") && (attackerteam != "") &&
(targ != attacker)&& inflictor.classname !="door")
return;
// do the damage
//different sorts of armour simply subtract different ammounts
//this makes armor like the force armor good against many small rounds
//(SMG, shotguns, swords, etc) but useless against big damage (grenades)
//power armor, which has the best of both worlds, is also the heaviest :p
switch(ToIID(targ.islot3))
{
case IID_ARM_BROTHERHOOD:
take -= 1;
break;
case IID_ARM_FORCE:
take -= 2;
break;
case IID_ARM_LPOWER:
take -= 3;
break;
default:
break;
}
if (take <= 0)
{
take = 0;
sound (targ, CHAN_BODY, targ.armornoise, 1, ATTN_NORM);
return;
}
targ.health = targ.health - take;
if (targ.health <= 0)
{
Killed (targ, attacker);
return;
}
// react to the damage
oldself = self;
self = targ;
/*SERVER
if ( (self.flags & FL_MONSTER) && attacker != world)
{
// get mad unless of the same class (except for soldiers)
if (self != attacker && attacker != self.enemy)
{
if ( (self.classname != attacker.classname)
|| (self.classname == "monster" ) )
{
if (self.enemy.classname == "player")
self.oldenemy = self.enemy;
self.enemy = attacker;
FoundTarget ();
}
}
}
*/
if (self.th_pain)
{
self.th_pain (attacker, take);
}
self = oldself;
};
/*
============
T_RadiusDamage

View file

@ -31,8 +31,10 @@ float IID_WP_AK74 = 417;
float IID_WP_DKS1 = 418;
float IID_WP_MOONLIGHT = 419;
float IID_WP_SA80 = 420;
float IID_WP_GAUSERIFLE = 421;
float IID_WP_GAUSERIFLE = 421; //2mm EC
float IID_WP_PULSERIFLE = 422;
float IID_WP_FNFAL = 423; //.308 AP
//and ammo for those guns
float IID_AM_NEEDLER = 507;
@ -468,6 +470,8 @@ string(float iid) GetItemVModel =
return "progs/v_srifle.mdl";
if (iid == IID_WP_MOONLIGHT)
return "progs/v_night.mdl";
if (iid == IID_WP_FNFAL)
return "progs/v_rangem.mdl";
if (iid == IID_WP_SA80)
@ -534,6 +538,8 @@ string(float iid) GetItemWModel =
return "progs/w_night.mdl";
if (iid == IID_WP_SA80)
return "progs/w_sa80.mdl";
if (iid == IID_WP_FNFAL)
return "progs/w_rangem.mdl";
if (iid == IID_WP_GAUSERIFLE)
return "progs/w_gauss.mdl";
@ -602,6 +608,8 @@ float(float iid) WeaponAmmoType =
return IID_AM_556MM;
if (iid == IID_WP_SA80)
return IID_AM_556MM;
if (iid == IID_WP_FNFAL)
return IID_AM_762MM;
if (iid == IID_WP_GAUSERIFLE)
return IID_AM_2MMEC;
@ -649,6 +657,8 @@ float(float iid) WeaponMagQuant =
return 10;
if (iid == IID_WP_PULSERIFLE)
return 40;
if (iid == IID_WP_FNFAL)
return 20;
return 0;
};
@ -700,7 +710,9 @@ float(float iid) GetItemWeight =
if (iid == IID_WP_GAUSERIFLE)
return 9;
if (iid == IID_WP_PULSERIFLE)
return 10;
return 12;
if (iid == IID_WP_FNFAL)
return 9;
if (iid == IID_ARM_SHIRT)
@ -798,6 +810,8 @@ string(float iid) GetItemName =
return "gauss rifle (2mm EC)";
if (iid == IID_WP_PULSERIFLE)
return "laser carbine (energy)";
if (iid == IID_WP_FNFAL)
return "fn-fal (7.62mm)";
@ -806,17 +820,17 @@ string(float iid) GetItemName =
if (iid == IID_AM_2MMEC)
return "2mm EC ammo";
if (iid == IID_AM_10MM)
return "10mm ammo";
return "10mm FMJ";
if (iid == IID_AM_556MM)
return "5.56mm ammo";
return "5.56mm FMJ";
if (iid == IID_AM_5MMHIGHVEL)
return "5mm high-velocity ammo";
return "5mm JHP";
if (iid == IID_AM_12GAUGESHELLS)
return "12-guage shotgun shells";
if (iid == IID_AM_ENERGYCELL)
return "small energy cell";
if (iid == IID_AM_762MM)
return "7.62mm ammo";
return "7.62mm AP";
if (iid == IID_AM_44MAGNUM)
return ".44 magnum ammo";
if (iid == IID_AM_45ACP)
@ -955,7 +969,8 @@ string(float iid) GetItemImage =
return "grifle.jpg";
if (iid == IID_WP_PULSERIFLE)
return "lcarbine.jpg";
if (iid == IID_WP_FNFAL)
return "fnfal.jpg";
if (iid == IID_AM_NEEDLER)
@ -1081,6 +1096,8 @@ float(string itname) ItemIDOfName =
return IID_WP_MP7;
if (itname == "rangemaster")
return IID_WP_RANGEMASTER;
if (itname == "fnfal")
return IID_WP_FNFAL;
if (itname == "ak-112")
return IID_WP_AK112;
if (itname == "ak-74")

View file

@ -141,7 +141,7 @@ string () ShotgunString =
*/
string () RifleString =
{
return ("rifles\n RIFLE | TYPE | WEIGHT | PRICE \n\n<EFBFBD>1 rangemaster 7mm 03 11$\n<EFBFBD>2 ak-112 5mm 04 21$\n<EFBFBD>3 remington .308 05 24$\n<EFBFBD>4 ak-74 5mm 04 27$\n<EFBFBD>5 moonlight .223 05 36$\n<EFBFBD>6 xl-70 5mm 05 23$\n<EFBFBD>7 plasma rifle 07 41$\n<EFBFBD>8 gauss rifle 2mm 08 51$\n");
return ("rifles\n RIFLE | TYPE | WEIGHT | PRICE \n\n<EFBFBD>1 rangemaster 7mm 03 11$\n<EFBFBD>2 ak-112 5mm 04 21$\n<EFBFBD>3 remington .308 05 24$\n<EFBFBD>4 ak-74 5mm 04 27$\n<EFBFBD>5 moonlight .223 05 36$\n<EFBFBD>6 sa-80 5mm 05 32$\n<EFBFBD>7 plasma rifle 12 41$\n<EFBFBD>8 gauss rifle 2mm 07 32$\n<EFBFBD>9 fn-fal .308 09 25$\n");
};
string () ChemString =

View file

@ -140,6 +140,8 @@ void(string type) ChangeAmmo =
self.ammotype2 = type;
};
void() SetWeaponModel;
void (float wt, float cost, float wid) BuyWeapon =
{
local string itname;
@ -182,6 +184,8 @@ void (float wt, float cost, float wid) BuyWeapon =
ammotype = WeaponAmmoType(wid);//load weapon with full ammo (may be changed)
AddStackable(self, ammotype, ammocount*3);
SetWeaponModel();
};
@ -572,9 +576,9 @@ void() W_PlayerMenu =
if (self.currentmenu == "shop_shotguns")
{
if (self.impulse == 1)
BuyWeapon(3, 3, IID_WP_PIPERIFLE); //weight, cost, item
BuyWeapon(3, 4, IID_WP_PIPERIFLE); //weight, cost, item
if (self.impulse == 2)
BuyWeapon(4, 7, IID_WP_WINCHESTER); //weight, cost, item
BuyWeapon(4, 8, IID_WP_WINCHESTER); //weight, cost, item
if (self.impulse == 3)
BuyWeapon(5, 12, IID_WP_MOSSBERG); //weight, cost, item
if (self.impulse == 4)
@ -597,9 +601,11 @@ void() W_PlayerMenu =
if (self.impulse == 6)
BuyWeapon(4, 32, IID_WP_SA80); //weight, cost, item
if (self.impulse == 7)
BuyWeapon(7, 40, IID_WP_GAUSERIFLE); //weight, cost, item
BuyWeapon(12, 45, IID_WP_PULSERIFLE); //weight, cost, item
if (self.impulse == 8)
BuyWeapon(10, 45, IID_WP_PULSERIFLE); //weight, cost, item
BuyWeapon(7, 32, IID_WP_GAUSERIFLE); //weight, cost, item
if (self.impulse == 9)
BuyWeapon(9, 25, IID_WP_FNFAL); //weight, cost, item
return;
}

View file

@ -1073,7 +1073,7 @@ void() W_Attack =
weap == IID_WP_VIBROBLADE ||
weap == IID_WP_POWERAXE)
{
self.attack_finished = time + 0.25;
self.attack_finished = time + 0.50;
player_knife1 ();
}
else if (weap == IID_WP_USP)
@ -1101,13 +1101,15 @@ void() W_Attack =
else if (weap == IID_WP_AK112)
FireAssaultRifle(14, 2, "weapons/ak112.wav", 4000, 0.09);
else if (weap == IID_WP_AK74)
FireAssaultRifle(18, 2, "weapons/ak47.wav", 6000, 0.1);
FireAssaultRifle(18, 2, "weapons/ak47.wav", 4000, 0.1);
else if (weap == IID_WP_DKS1)
FireAssaultRifle(30, 2, "weapons/dks-1.wav", 8000, 0.5);
FireAssaultRifle(24, 2, "weapons/dks-1.wav", 8000, 0.5);
else if (weap == IID_WP_MOONLIGHT)
FireAssaultRifle(16, 2, "weapons/m4-nw.wav", 4000, 0.09);
FireAssaultRifle(14, 2, "weapons/m4-nw.wav", 4000, 0.09);
else if (weap == IID_WP_SA80)
FireAssaultRifle(17, 2, "weapons/sa80.wav", 4000, 0.08);
else if (weap == IID_WP_FNFAL)
FireAssaultRifle(12, 3, "weapons/fnfal.wav", 6000, 0.12);
//float IID_WP_GAUSERIFLE = 421;
//float IID_WP_PULSERIFLE = 422;
@ -2062,6 +2064,7 @@ void (float dam, float rec, string snd, float rng, float rate) FirePistol =
if (trace_ent.solid == SOLID_BSP)
SpawnWood (trace_ent, org, 1);
dam = dam + random()*dam;
T_Damage (trace_ent, self, self, dam);
self.critical = 0;
@ -2153,6 +2156,7 @@ void (float dam, float rec, string snd, float rng, float rate) FireSMG =
if (trace_ent.solid == SOLID_BSP)
SpawnWood (trace_ent, org, 1);
dam = dam + random()*dam;
T_Damage (trace_ent, self, self, dam);
self.critical = 0;
@ -2170,9 +2174,11 @@ void (float dam, float rec, string snd, float rng, float rate) FireSMG =
void (float dam, float rec, string snd, float rng, float rate) FireAssaultRifle =
{
local float hs, tmp, zdif, is_headshot, z;
local float weap, hs, tmp, zdif, is_headshot, z;
local vector dir, source, targ, org, adjust, headshot_check;
weap = ToIID(self.(SlotField(self.current_slot)));
sound (self, CHAN_WEAPON, snd, 1, ATTN_NORM);
self.attack_finished = (time + rate);
@ -2271,7 +2277,12 @@ void (float dam, float rec, string snd, float rng, float rate) FireAssaultRifle
if (trace_ent.solid == SOLID_BSP)
SpawnWood (trace_ent, org, 1);
T_Damage (trace_ent, self, self, dam);
dam = dam + random()*dam;
if (weap != IID_WP_DKS1 && weap != IID_WP_FNFAL)
T_Damage (trace_ent, self, self, dam);
else if (weap == IID_WP_DKS1 || weap == IID_WP_FNFAL)
X_Damage (trace_ent, self, self, dam);
self.critical = 0;
if (trace_ent.solid == SOLID_BSP)
@ -3722,6 +3733,7 @@ void (vector s_aim, float dam, float tmp, float ran) W_FireBuckshotSpread1 =
self.critical = 3;
}
T_Damage (trace_ent, self, self, dam);
self.critical = 0;
}