Module dpmod: Change committed
havoc at icculus.org
havoc at icculus.org
Thu Feb 20 03:58:25 EST 2003
Commiter : havoc
CVSROOT : /cvs/cvsroot/twilight
Module : dpmod
Commit time: 2003-02-20 08:58:25 UTC
Log message:
shotgun added back (fires explosive slugs)
dbshotgun now fires only buckshot
pistol moved to slot 1
plasma rifle no longer has zoom button, altfire fires 3x shot power (same behavior as before when zoomed), recommend use of +button4 for zoom
grenade launcher now fires remote explosives (radio detonate with altfire or shoot them with a suitable weapon)
mines now do impact damage when they hit something
Modified files:
qc/w_dbshotgun.qc qc/w_grenade.qc qc/w_nailgun.qc qc/w_pistol.qc
qc/w_plasmarifle.qc qc/w_shotgun.qc qc/w_supernailgun.qc
qc/mine.qc
------=MIME.e145f49d1ce011e70c02b8ae5341d94f
Content-Type: text/plain; name="dpmod.20030220.085825.havoc.diff"
Content-Disposition: attachment; filename="dpmod.20030220.085825.havoc.diff"
Content-Transfer-Encoding: 8bit
Index: dpmod/qc/mine.qc
diff -u dpmod/qc/mine.qc:1.4 dpmod/qc/mine.qc:1.5
--- dpmod/qc/mine.qc:1.4 Thu Feb 13 21:47:16 2003
+++ dpmod/qc/mine.qc Thu Feb 20 03:58:15 2003
@@ -5,10 +5,12 @@
float MINE_TENWARHEAD = 8;
float MINE_DETONATEONBUTTON3 = 16;
+.float activemines;
void() MineExplode =
{
local vector v, basevel;
local float t;
+ self.owner.activemines = self.owner.activemines - 1;
if (self.weapon & MINE_TENWARHEAD)
{
basevel = '0 0 250' + '0 0 0.2' * cvar("sv_gravity");
@@ -60,9 +62,15 @@
local vector v;
self.nextthink = time;
fightdone = time + 1; // delay stuff until fighting is over
+ if (time > self.cnt)
+ {
+ self.th_die();
+ return;
+ }
p = pointcontents(self.origin);
if (p == CONTENT_SKY)
{
+ self.owner.activemines = self.owner.activemines - 1;
remove(self);
return;
}
@@ -78,18 +86,17 @@
MineExplode();
return;
}
- if (self.lefty == 3)
+ if (self.lefty)
+ if (time >= self.count)
{
+ self.count = time + 0.05;
+ if (self.lefty == 3)
if (!self.enemy.takedamage)
{
MineExplode();
return;
}
- }
- if (time >= self.count)
- {
- self.count = time + 0.05;
- if (self.lefty)
+ if (self.weapon & (MINE_PROXIMITY | MINE_LASERTRIP))
{
head = findradius(self.origin, self.dmg2 * 0.5);
while (head)
@@ -111,33 +118,28 @@
}
head = head.chain;
}
- }
- if (self.lefty == 2)
- {
- v = self.angles;
- v_x = 0 - v_x;
- makevectors(v);
- newmis = self.owner;
- self.owner = world;
- traceline(self.origin, self.origin + v_forward * 65536, FALSE, self);
- self.owner = newmis;
- self.dest = trace_endpos;
- if (trace_ent)
- if ((trace_ent.flags & FL_MONSTER) || trace_ent.classname == "player")
- if (trace_ent.team == 0 || trace_ent.team != self.owner.team)
+ if (self.lefty == 2)
{
- // trigger
- self.count = time + 1000;
- self.cnt = 0;
- sound(self, CHAN_VOICE, "weapons/bomb/trigger.wav", 1, ATTN_STATIC);
+ v = self.angles;
+ v_x = 0 - v_x;
+ makevectors(v);
+ newmis = self.owner;
+ self.owner = world;
+ traceline(self.origin, self.origin + v_forward * 65536, FALSE, self);
+ self.owner = newmis;
+ self.dest = trace_endpos;
+ if (trace_ent)
+ if ((trace_ent.flags & FL_MONSTER) || trace_ent.classname == "player")
+ if (trace_ent.team == 0 || trace_ent.team != self.owner.team)
+ {
+ // trigger
+ self.count = time + 1000;
+ self.cnt = 0;
+ sound(self, CHAN_VOICE, "weapons/bomb/trigger.wav", 1, ATTN_STATIC);
+ }
}
}
}
- if (time > self.cnt)
- {
- self.th_die();
- return;
- }
};
void(entity targ) MineAttach =
@@ -210,21 +212,26 @@
//self.angles = self.owner.angles;
};
+.float count3, count4;
void() MineTouch =
{
+ local vector v;
if (other == self.owner)
return; // don't hit owner
if (other.solid == SOLID_BSP)
{
findnearestsurface(16, self.origin, 32);
self.angles = vectoangles(trace_plane_normal);
- newmis = spawn();
- newmis.classname = "laserdot";
- newmis.owner = self;
- newmis.think = laserdotthink;
- newmis.nextthink = time;
- setmodel(newmis, "progs/s_bubble.spr");
- setsize(newmis, '0 0 0', '0 0 0');
+ if (self.weapon & MINE_LASERTRIP)
+ {
+ newmis = spawn();
+ newmis.classname = "laserdot";
+ newmis.owner = self;
+ newmis.think = laserdotthink;
+ newmis.nextthink = time;
+ setmodel(newmis, "progs/s_bubble.spr");
+ setsize(newmis, '0 0 0', '0 0 0');
+ }
if (self.weapon & MINE_LASERTRIP)
self.lefty = 2;
else
@@ -235,23 +242,31 @@
if ((other.flags & FL_MONSTER) || other.classname == "player")
if (other.team == 0 || other.team != self.owner.team)
{
+ if (self.count3)
+ {
+ v = normalize(self.velocity) * self.count4;
+ T_Damage(other, self, self.owner, self.count3, self.count4, self.deathtype, DT_IMPACT, self.origin, v, self.obitfunc1);
+ if (!other.takedamage)
+ return;
+ }
if (self.weapon & (MINE_PROXIMITY | MINE_LASERTRIP))
{
MineExplode();
return;
}
- self.weapon = self.weapon | MINE_PROXIMITY;
self.lefty = 3;
MineAttach(other);
return;
}
};
-void(vector org, vector vel, entity own, float damage, float damage2, float type, float lifetime, string dethtype, void(entity t, entity a, string m, float dtyp) obitfunc) LaunchMine =
+void(vector org, vector vel, entity own, float damage, float damage2, float impactdamage, float impactbodydamage, float type, float lifetime, string dethtype, void(entity t, entity a, string m, float dtyp) obitfunc) LaunchMine =
{
local vector v;
DelayGibComment(); // make him wait before commenting on gibs so it's not drown out by explosions etc
+ own.activemines = own.activemines + 1;
+
fightdone = time + 1; // delay stuff until fighting is over
v = normalize(vel);
newmis = spawn ();
@@ -270,6 +285,8 @@
newmis.touch = MineTouch;
newmis.dmg = damage;
newmis.dmg2 = damage2;
+ newmis.count3 = impactdamage;
+ newmis.count4 = impactbodydamage;
newmis.effects = EF_LOWPRECISION;
if (self.items & IT_QUAD)
{
Index: dpmod/qc/w_dbshotgun.qc
diff -u dpmod/qc/w_dbshotgun.qc:1.4 dpmod/qc/w_dbshotgun.qc:1.5
--- dpmod/qc/w_dbshotgun.qc:1.4 Thu Feb 13 21:47:16 2003
+++ dpmod/qc/w_dbshotgun.qc Thu Feb 20 03:58:15 2003
@@ -65,8 +65,8 @@
Obituary_Fallback(targ, attacker, dmsg, dtype);
};
-float DBSHOTGUNBUCKSHOT = 60;
-float DBSHOTGUNEXPLOSIVESLUG = 85;
+float DBSHOTGUNBUCKSHOT = 80;
+//float DBSHOTGUNEXPLOSIVESLUG = 85;
.float shotgunmode, shotgunshells;
void(void(entity t, entity a, string m, float dtyp) obitfunc, float spreadboost) W_DBShotgunFireShell =
@@ -85,15 +85,19 @@
shotorg = shotorg + v_right;
}
self.wload = self.wload - 1;
+ /*
if (self.shotgunmode)
self.currentammo = self.ammo_xshells = self.ammo_xshells - 1;
else
+ */
self.currentammo = self.ammo_shells = self.ammo_shells - 1;
self.wfiretime = time;
w_muzzleflash(v, 4);
+ /*
if (self.shotgunmode)
FireBullets(self, self, 1, 1, 0, 0, DBSHOTGUNEXPLOSIVESLUG * damagescale, 80, shotdir * 5000, spreadboost, "SHOTGUNEXPLOSIVESLUG", DT_SHOTGUN, obitfunc);
else
+ */
{
FireBullets(self, self, 1, 5, DBSHOTGUNBUCKSHOT * 0.1 * damagescale, DBSHOTGUNBUCKSHOT * 0.1 * damagescale, 0, 0, shotdir * 6000, spreadboost + 0.03, "SHOTGUN", DT_SHOTGUN, obitfunc);
FireBullets(self, self, 0, 5, DBSHOTGUNBUCKSHOT * 0.1 * damagescale, DBSHOTGUNBUCKSHOT * 0.1 * damagescale, 0, 0, shotdir * 6000, spreadboost + 0.03, "SHOTGUN", DT_SHOTGUN, obitfunc);
@@ -123,12 +127,13 @@
void() w_dbshotgunraise2;
void() w_dbshotgun =
{
- local float swapmode, otherammo;
+ //local float swapmode, otherammo;
local vector v;
if (widle(w_dbshotgundrop1))
return;
+ /*
if (self.shotgunmode)
{
swapmode = self.ammo_xshells < 1 && self.ammo_shells >= 1;
@@ -153,6 +158,7 @@
else
sprint(self, "Ammo: Buckshot\n");
}
+ */
if (self.wload > 0)
{
@@ -176,6 +182,7 @@
}
else
{
+ /*
if (self.shotgunmode)
{
if (self.ammo_xshells >= 1)
@@ -186,6 +193,7 @@
}
}
else
+ */
{
if (self.ammo_shells >= 1)
{
@@ -224,12 +232,14 @@
float() w_dbshotgunrating = {return genericweaponrating(0, 250, 175);};
void() w_dbshotgunsetup =
{
+ /*
if (self.shotgunmode)
wset(IT_WEAPON3, IT_SHELLS, self.ammo_xshells, VWEP_SUPER_SHOTGUN, "progs/v_dpshot2.mdl");
else
+ */
wset(IT_WEAPON3, IT_SHELLS, self.ammo_shells, VWEP_SUPER_SHOTGUN, "progs/v_dpshot2.mdl");
};
-float(float request) setweapon3 = {return weapongeneric(IT_WEAPON3, self.ammo_shells >= 1 || self.ammo_xshells >= 1, request, w_dbshotgunsetup, w_dbshotgun, w_dbshotgunraise1, w_directaim, w_dbshotgunrating, "Double Barrel Shotgun");};
+float(float request) setweapon3 = {return weapongeneric(IT_WEAPON3, self.ammo_shells >= 1/* || self.ammo_xshells >= 1*/, request, w_dbshotgunsetup, w_dbshotgun, w_dbshotgunraise1, w_directaim, w_dbshotgunrating, "Double Barrel Shotgun");};
void() w_dbshotgunraise1 = {self.wload = 0;self.shotgunshells = 0;wraise(9, w_dbshotgunraise2, 0.1);};
void() w_dbshotgunraise2 = {wraise(8, w_dbshotgun, 0.1);};
Index: dpmod/qc/w_grenade.qc
diff -u dpmod/qc/w_grenade.qc:1.3 dpmod/qc/w_grenade.qc:1.4
--- dpmod/qc/w_grenade.qc:1.3 Fri Nov 15 07:59:54 2002
+++ dpmod/qc/w_grenade.qc Thu Feb 20 03:58:15 2003
@@ -28,24 +28,46 @@
Obituary_Fallback(targ, attacker, dmsg, dtype);
};
+/*
void() W_GrenadeFireImpact =
{
+ local float a;
stopfiring = TRUE;
self.wfiretime = time;
- self.currentammo = self.ammo_rockets = self.ammo_rockets - 1;
+ a = self.ammo_rockets;
+ if (a > 1)
+ a = 1;
+ self.wfiretime = time;
+ self.currentammo = self.ammo_rockets = self.ammo_rockets - a;
w_muzzleflash(shotorg, 3);
- LaunchGrenade(shotorg, shotdir * 1000 + v_up * 200/* + self.velocity*/, self, 150 * damagescale, 200, GRENADE_IMPACT, 25, "GRENADE", Obituary_Grenade);
+ //LaunchGrenade(shotorg, shotdir * 1000 + v_up * 200 + self.velocity, self, (50 + 100 * a) * damagescale, 100 + 100 * a, GRENADE_IMPACT | GRENADE_IMMUNETODAMAGE, 25, "GRENADE", Obituary_Grenade);
+ LaunchGrenade(shotorg, shotdir * 1000 + v_up * 200, self, (50 + 100 * a) * damagescale, 100 + 100 * a, GRENADE_IMPACT | GRENADE_IMMUNETODAMAGE, 25, "GRENADE", Obituary_Grenade);
};
void() W_GrenadeFireProximity =
{
+ local float a;
stopfiring = TRUE;
+ a = self.ammo_rockets;
+ if (a > 1)
+ a = 1;
self.wfiretime = time;
+ self.currentammo = self.ammo_rockets = self.ammo_rockets - a;
+ w_muzzleflash(shotorg, 3);
+ LaunchGrenade(shotorg, shotdir * 1000 + v_up * 200, self, 100 * damagescale, 150, GRENADE_PROXIMITY, 5, "GRENADE", Obituary_Grenade);
+};
+*/
+
+void() W_GrenadeFireSticky =
+{
+ stopfiring = TRUE;
+ self.wfiretime = time;
self.currentammo = self.ammo_rockets = self.ammo_rockets - 1;
w_muzzleflash(shotorg, 3);
- LaunchGrenade(shotorg, shotdir * 1000 + v_up * 200/* + self.velocity*/, self, 100 * damagescale, 150, GRENADE_PROXIMITY, 5, "GRENADE", Obituary_Grenade);
+ LaunchMine(shotorg, shotdir * 3000 + v_up * 0, self, 150 * damagescale, 200, 50 * damagescale, 20 * damagescale, MINE_DETONATEONBUTTON3, 60, "STICKYGRENADE", Obituary_Grenade);
};
+.float activemines;
void() w_grenadedrop1;
void() w_grenadedrop2;
void() w_grenaderaise1;
@@ -58,6 +80,20 @@
if (self.button0)
{
+ if (self.activemines >= 20)
+ {
+ if (time > self.attack_finished)
+ {
+ self.attack_finished = time + 0.5;
+ sprint(self, "only 20 remote explosives allowed, you must detonate some before placing more\n");
+ }
+ }
+ else if (self.ammo_rockets >= 1)
+ W_GenericSlowFireCode("weapons/grenade.wav", 0.5, W_GrenadeFireSticky);
+ }
+ /*
+ if (self.button0)
+ {
if (self.ammo_rockets >= 1)
W_GenericSlowFireCode("weapons/grenade.wav", 0.5, W_GrenadeFireImpact);
}
@@ -66,6 +102,7 @@
if (self.ammo_rockets >= 1)
W_GenericSlowFireCode("weapons/grenade.wav", 0.8, W_GrenadeFireProximity);
}
+ */
if (self.wfiretime)
{
@@ -94,7 +131,7 @@
float() w_grenaderating = {return genericweaponrating(200, 500, 300);};
void() w_grenadesetup = {wset(IT_WEAPON6, IT_ROCKETS, self.ammo_rockets, VWEP_GRENADE_LAUNCHER, "progs/v_dprock.mdl");};
-float(float request) setweapon6 = {return weapongeneric(IT_WEAPON6, self.ammo_rockets >= 1, request, w_grenadesetup, w_grenade, w_grenaderaise1, w_grenadeaim, w_grenaderating, "Grenade Launcher");};
+float(float request) setweapon6 = {return weapongeneric(IT_WEAPON6, self.ammo_rockets >= 1 || self.activemines > 0, request, w_grenadesetup, w_grenade, w_grenaderaise1, w_grenadeaim, w_grenaderating, "Grenade Launcher");};
void() w_grenaderaise1 = {wraise(8, w_grenaderaise2, 0.1);};
void() w_grenaderaise2 = {wraise(7, w_grenade, 0.1);};
Index: dpmod/qc/w_nailgun.qc
diff -u dpmod/qc/w_nailgun.qc:1.4 dpmod/qc/w_nailgun.qc:1.5
--- dpmod/qc/w_nailgun.qc:1.4 Thu Feb 13 21:47:16 2003
+++ dpmod/qc/w_nailgun.qc Thu Feb 20 03:58:15 2003
@@ -78,7 +78,7 @@
self.currentammo = self.ammo_rockets = self.ammo_rockets - 1;
w_muzzleflash(shotorg, 3);
//LaunchGrenade(shotorg, shotdir * 1000 + v_up * 200, self, 80 * damagescale, 300, GRENADE_IMPACT, 2.5, "NAILGUNGRENADE", Obituary_NailgunGrenade);
- LaunchMine(shotorg, shotdir * 1000 + v_up * 200, self, 200 * damagescale, 70, MINE_LASERTRIP, 60, "LASERTRIPMINE", Obituary_NailgunMine);
+ LaunchMine(shotorg, shotdir * 1000 + v_up * 200, self, 200 * damagescale, 70, 20 * damagescale, 10 * damagescale, MINE_LASERTRIP, 60, "LASERTRIPMINE", Obituary_NailgunMine);
};
Index: dpmod/qc/w_pistol.qc
diff -u dpmod/qc/w_pistol.qc:1.4 dpmod/qc/w_pistol.qc:1.5
--- dpmod/qc/w_pistol.qc:1.4 Thu Feb 13 21:47:16 2003
+++ dpmod/qc/w_pistol.qc Thu Feb 20 03:58:15 2003
@@ -44,15 +44,15 @@
havoc_shotanimupdate(self.weaponframe);
};
-void() weapon2_precache =
+void() weapon1_precache =
{
precache_model("progs/v_dpshot.mdl");
precache_sound("weapons/rocket1i.wav");
};
float() w_pistolrating = {return genericweaponrating(0, 99999, 75);};
-void() w_pistolsetup = {wset(IT_WEAPON2, 0, 0, VWEP_SHOTGUN, "progs/v_dpshot.mdl");};
-float(float request) setweapon2 = {return weapongeneric(IT_WEAPON2, TRUE, request, w_pistolsetup, w_pistol, w_pistolraise1, w_directaim, w_pistolrating, "Pistol");};
+void() w_pistolsetup = {wset(IT_WEAPON1, 0, 0, VWEP_SHOTGUN, "progs/v_dpshot.mdl");};
+float(float request) setweapon1 = {return weapongeneric(IT_WEAPON1, TRUE, request, w_pistolsetup, w_pistol, w_pistolraise1, w_directaim, w_pistolrating, "Pistol");};
void() w_pistolraise1 = {wraise(8, w_pistolraise2, 0.1);};
void() w_pistolraise2 = {wraise(7, w_pistol, 0.1);};
Index: dpmod/qc/w_plasmarifle.qc
diff -u dpmod/qc/w_plasmarifle.qc:1.5 dpmod/qc/w_plasmarifle.qc:1.6
--- dpmod/qc/w_plasmarifle.qc:1.5 Thu Feb 13 21:47:16 2003
+++ dpmod/qc/w_plasmarifle.qc Thu Feb 20 03:58:15 2003
@@ -40,17 +40,12 @@
FirePlasma(self, shotorg, shotdir, self.wload * 30 * damagescale, 45, '0 0 0', "PLASMARIFLE", Obituary_PlasmaRifle);
};
-.float idealzoom;
-
void() w_plasmarifledrop1;
void() w_plasmarifledrop2;
void() w_plasmarifleraise1;
void() w_plasmarifleraise2;
void() w_plasmarifle =
{
- if (self.button3)
- self.idealzoom = 0.2;
-
/*
if (time > self.attack_finished)
{
@@ -142,18 +137,18 @@
if (time >= self.attack_finished)
{
- if (self.button0 && self.wburst > 0 && self.ammo_cells > 0)
+ if (self.ammo_cells > 0 && self.wburst > 0 && (self.button0 || self.button3))
{
// fire higher powered shots if zoomed
// (but they use ammo faster, so the burst runs out sooner)
self.wload = 1;
- if (self.idealzoom < 1)
+ if (self.button3)
self.wload = 3;
if (self.wload > self.wburst)
self.wload = self.wburst;
- W_GenericSlowFireCode("plasma/plasma.wav", 0.05, W_PlasmaRifleFire);
+ W_GenericSlowFireCode("plasma/plasma.wav", 0.1, W_PlasmaRifleFire);
}
- else if (self.wburst <= 0 && self.ammo_cells > 0)
+ else if (self.ammo_cells > 0 && self.wburst < 9)
{
self.wburst = 9;
self.attack_finished = time + 0.4;
Index: dpmod/qc/w_shotgun.qc
diff -u dpmod/qc/w_shotgun.qc:1.4 dpmod/qc/w_shotgun.qc:1.5
--- dpmod/qc/w_shotgun.qc:1.4 Thu Feb 13 21:47:16 2003
+++ dpmod/qc/w_shotgun.qc Thu Feb 20 03:58:15 2003
@@ -12,8 +12,8 @@
Obituary_Fallback(targ, attacker, dmsg, dtype);
};
-float SHOTGUNBUCKSHOT = 75;
-float SHOTGUNEXPLOSIVESLUG = 120;
+//float SHOTGUNBUCKSHOT = 75;
+float SHOTGUNEXPLOSIVESLUG = 95;
.float shotgunmode;
void() W_SingleShotgunFireCode =
@@ -21,13 +21,15 @@
self.wfiretime = time;
self.currentammo = self.ammo_shells = self.ammo_shells - 1;
w_muzzleflash(shotorg, 2);
- if (self.shotgunmode)
+ //if (self.shotgunmode)
FireBullets(self, self, 1, 1, SHOTGUNEXPLOSIVESLUG * 0.2 * damagescale, SHOTGUNEXPLOSIVESLUG * 0.2 * damagescale, SHOTGUNEXPLOSIVESLUG * 0.8 * damagescale, 80, shotdir * 5000, 0, "SHOTGUNEXPLOSIVESLUG", DT_SHOTGUN, Obituary_Shotgun);
+ /*
else
{
FireBullets(self, self, 1, 5, SHOTGUNBUCKSHOT * 0.1 * damagescale, SHOTGUNBUCKSHOT * 0.1 * damagescale, 0, 0, shotdir * 6000, 0.05, "SHOTGUN", DT_SHOTGUN, Obituary_Shotgun);
FireBullets(self, self, 0, 5, SHOTGUNBUCKSHOT * 0.1 * damagescale, SHOTGUNBUCKSHOT * 0.1 * damagescale, 0, 0, shotdir * 6000, 0.05, "SHOTGUN", DT_SHOTGUN, Obituary_Shotgun);
}
+ */
self.wload = -1;
};
@@ -41,6 +43,7 @@
if (widle(w_shotgundrop1))
return;
+ /*
if (self.button5)
if (time > self.attack_finished)
{
@@ -52,6 +55,7 @@
else
sprint(self, "Ammo: Buckshot\n");
}
+ */
if (self.wload > self.ammo_shells)
self.wload = self.ammo_shells;
Index: dpmod/qc/w_supernailgun.qc
diff -u dpmod/qc/w_supernailgun.qc:1.4 dpmod/qc/w_supernailgun.qc:1.5
--- dpmod/qc/w_supernailgun.qc:1.4 Thu Feb 13 21:47:16 2003
+++ dpmod/qc/w_supernailgun.qc Thu Feb 20 03:58:15 2003
@@ -76,7 +76,7 @@
a = self.ammo_rockets;
self.currentammo = self.ammo_rockets = self.ammo_rockets - a;
w_muzzleflash(shotorg, 3);
- LaunchMine(shotorg, shotdir * 1000 + v_up * 200, self, a * 100 * damagescale, a * 100 + 50, MINE_PROXIMITY, 60, "PROXIMITYMINE", Obituary_ProximityMine);
+ LaunchMine(shotorg, shotdir * 1000 + v_up * 200, self, a * 100 * damagescale, a * 100 + 50, 20 * damagescale, 10 * damagescale, MINE_PROXIMITY, 60, "PROXIMITYMINE", Obituary_ProximityMine);
};
void() w_snailgundrop1;
More information about the twilight-commits
mailing list