Module dpmod: Change committed
havoc at icculus.org
havoc at icculus.org
Wed Apr 9 23:24:40 EDT 2003
Commiter : havoc
CVSROOT : /cvs/cvsroot/twilight
Module : dpmod
Commit time: 2003-04-10 03:24:40 UTC
Log message:
weapon tweaks... I can't remember what I did :P
Modified files:
qc/casings.qc qc/client.qc qc/grenade.qc qc/havocbot.qc
qc/m_soldier.qc qc/mine.qc qc/w_dbshotgun.qc qc/w_grenade.qc
qc/w_info.qc qc/w_nailgun.qc qc/w_pistol.qc qc/w_shotgun.qc
qc/w_supernailgun.qc
------=MIME.3f5b2475847b61b6eda381a5d2827feb
Content-Type: text/plain; name="dpmod.20030410.032440.havoc.diff"
Content-Disposition: attachment; filename="dpmod.20030410.032440.havoc.diff"
Content-Transfer-Encoding: 8bit
Index: dpmod/qc/casings.qc
diff -u dpmod/qc/casings.qc:1.4 dpmod/qc/casings.qc:1.5
--- dpmod/qc/casings.qc:1.4 Tue Mar 11 14:31:32 2003
+++ dpmod/qc/casings.qc Wed Apr 9 23:24:30 2003
@@ -58,12 +58,12 @@
self.touch = casingtouch;
};
-// orientation is basically v_forward for the direction the casing points
-void(vector org, vector orientation, vector vel, float randomvel, float casingtype) ejectcasing =
+void(vector org, vector vel, float randomvel, vector ang, vector avel, float randomavel, float casingtype) ejectcasing =
{
local entity e;
if (cvar("temp1") & 2048)
return;
+
e = newdecor();
e.isdecor = TRUE;
e.alpha = 1;
@@ -71,12 +71,13 @@
e.movetype = MOVETYPE_BOUNCE;
e.solid = SOLID_TRIGGER;
e.velocity = vel + randomvec() * randomvel + self.velocity;
- e.angles = vectoangles(orientation);
+ e.angles = ang;
+ e.avelocity = avel + randomvec() * randomavel;
e.nextthink = time;
e.think = casingthink;
e.touch = casingtouch;
e.knockedloosefunc = casingknockedloosefunc;
- e.effects = EF_LOWPRECISION;
+ //e.effects = EF_LOWPRECISION;
e.createdtime = time;
if (casingtype == 1)
{
Index: dpmod/qc/client.qc
diff -u dpmod/qc/client.qc:1.5 dpmod/qc/client.qc:1.6
--- dpmod/qc/client.qc:1.5 Thu Feb 20 03:53:35 2003
+++ dpmod/qc/client.qc Wed Apr 9 23:24:30 2003
@@ -136,7 +136,7 @@
void() SetNewParms =
{
- parm1 = IT_WEAPON1 | IT_WEAPON2; // | IT_WEAPON3 | IT_WEAPON4 | IT_WEAPON5 | IT_WEAPON6 | IT_WEAPON7 | IT_WEAPON8 | IT_WEAPON9 | IT_WEAPON10;
+ parm1 = IT_WEAPON1 | IT_WEAPON2 | IT_WEAPON10; // | IT_WEAPON3 | IT_WEAPON4 | IT_WEAPON5 | IT_WEAPON6 | IT_WEAPON7 | IT_WEAPON8 | IT_WEAPON9 | IT_WEAPON10;
parm2 = HEALTHMAX; // health
parm3 = 0; // armorvalue
parm4 = STARTSP_AMMO_SHELLS;
@@ -191,7 +191,7 @@
}
else if (deathmatch)
{
- self.items = IT_WEAPON1 | IT_WEAPON2 | IT_WEAPON9 | IT_ARMOR1; // | IT_WEAPON3 | IT_WEAPON4 | IT_WEAPON5 | IT_WEAPON6 | IT_WEAPON7 | IT_WEAPON8 | IT_WEAPON9 | IT_WEAPON10;
+ self.items = IT_WEAPON1 | IT_WEAPON2 | IT_WEAPON9 | IT_WEAPON10 | IT_ARMOR1; // | IT_WEAPON3 | IT_WEAPON4 | IT_WEAPON5 | IT_WEAPON6 | IT_WEAPON7 | IT_WEAPON8 | IT_WEAPON9 | IT_WEAPON10;
self.health = HEALTHSTART; // health
self.max_health = HEALTHMAX;
self.armorvalue = 50;
@@ -291,7 +291,7 @@
GotoNextMap ();
return;
}
-
+
intermission_exittime = time + 1;
intermission_running = intermission_running + 1;
@@ -350,7 +350,7 @@
GotoNextMap();
}
-
+
if (intermission_running == 3)
{
if (!cvar("registered"))
@@ -359,14 +359,14 @@
WriteByte (MSG_ALL, SVC_SELLSCREEN);
return;
}
-
+
if ( (serverflags&15) == 15)
{
WriteByte (MSG_ALL, SVC_FINALE);
WriteString (MSG_ALL, "Now, you have all four Runes. You sense\ntremendous invisible forces moving to\nunseal ancient barriers. Shub-Niggurath\nhad hoped to use the Runes Herself to\nclear off the Earth, but now instead,\nyou will use them to enter her home and\nconfront her as an avatar of avenging\nEarth-life. If you defeat her, you will\nbe remembered forever as the savior of\nthe planet. If she conquers, it will be\nas if you had never been born.");
return;
}
-
+
}
GotoNextMap();
@@ -386,7 +386,7 @@
if (!self.button0 && !self.button1 && !self.button2)
return;
-
+
ExitIntermission ();
};
@@ -422,7 +422,7 @@
other.model = "";
setorigin (other, pos.origin);
other = other.chain;
- }
+ }
WriteByte (MSG_ALL, SVC_INTERMISSION);
};
@@ -444,7 +444,7 @@
bprint (other.netname);
bprint (" exited the level\n");
}
-
+
nextmap = self.map;
SUB_UseTargets ();
@@ -455,7 +455,7 @@
GotoNextMap();
return;
}
-
+
self.touch = SUB_Null;
// we can't move people right now, because touch functions are called
@@ -471,7 +471,7 @@
{
if (!self.map)
objerror ("changelevel trigger doesn't have map");
-
+
InitTrigger ();
self.touch = changelevel_touch;
};
@@ -1098,7 +1098,7 @@
// check for a jump-out-of-water
makevectors (self.angles);
start = self.origin;
- start_z = start_z + 8;
+ start_z = start_z + 8;
v_forward_z = 0;
normalize(v_forward);
end = start + v_forward*24;
@@ -1205,7 +1205,7 @@
else
self.flags = self.flags | FL_JUMPRELEASED;
- // teleporters can force a non-moving pause time
+ // teleporters can force a non-moving pause time
if (time < self.pausetime)
self.velocity = '0 0 0';
};
@@ -1371,7 +1371,7 @@
self.rad_time = 0;
self.radsuit_finished = 0;
}
- }
+ }
// 'glow' armor
if (self.armortype == 1.0)
Index: dpmod/qc/grenade.qc
diff -u dpmod/qc/grenade.qc:1.3 dpmod/qc/grenade.qc:1.4
--- dpmod/qc/grenade.qc:1.3 Fri Feb 28 00:13:31 2003
+++ dpmod/qc/grenade.qc Wed Apr 9 23:24:30 2003
@@ -3,8 +3,11 @@
float GRENADE_PROXIMITY = 2;
float GRENADE_IMMUNETODAMAGE = 4;
float GRENADE_TENWARHEAD = 8;
-float GRENADE_DETONATEONBUTTON3 = 16;
+float GRENADE_DETONATABLE = 16;
+float GRENADE_DETONATEONCREATURE = 32;
+.float activemines;
+
void() GrenadeExplode =
{
local vector v;
@@ -30,6 +33,7 @@
}
else
Explosion(self.origin, self.owner, self.dmg, self.dmg2, self.deathtype, '0 0 0', self.effects & EF_BLUE, self.obitfunc1);
+ self.owner.activemines = self.owner.activemines - 1;
remove(self);
};
@@ -43,6 +47,8 @@
self.movetype = MOVETYPE_NONE;
};
+.float detonatetimeout;
+
void() GrenadeThink =
{
local entity head;
@@ -52,6 +58,7 @@
p = pointcontents(self.origin);
if (p == CONTENT_SKY)
{
+ self.owner.activemines = self.owner.activemines - 1;
remove(self);
return;
}
@@ -60,11 +67,10 @@
self.th_die();
return;
}
- if (self.weapon & GRENADE_DETONATEONBUTTON3)
- if (self.owner.button3)
- if (self.deathtype == "GRENADE")
+ if (self.weapon & GRENADE_DETONATABLE)
+ if (time < self.owner.detonatetimeout)
{
- GrenadeExplode();
+ self.th_die();
return;
}
if (self.weapon & GRENADE_PROXIMITY)
@@ -118,14 +124,14 @@
{
v = normalize(self.velocity);
setorigin(self, self.origin - v * 16);
- GrenadeExplode();
+ self.th_die();
return;
}
- //if (self.weapon & GRENADE_PROXIMITY)
+ if (self.weapon & GRENADE_DETONATEONCREATURE)
if ((other.flags & FL_MONSTER) || other.classname == "player")
if (other.team == 0 || other.team != self.owner.team)
{
- GrenadeExplode();
+ self.th_die();
return;
}
self.lefty = TRUE;
@@ -138,6 +144,8 @@
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 ();
@@ -150,7 +158,7 @@
newmis.classname = "grenade";
// set newmis speed
newmis.velocity = vel;
- newmis.avelocity = '0 0 0';
+ newmis.avelocity = randomvec() * 100;//'0 0 0';
newmis.angles = vectoangles(newmis.velocity);
newmis.touch = GrenadeTouch;
newmis.dmg = damage;
Index: dpmod/qc/havocbot.qc
diff -u dpmod/qc/havocbot.qc:1.5 dpmod/qc/havocbot.qc:1.6
--- dpmod/qc/havocbot.qc:1.5 Sat Feb 22 04:26:44 2003
+++ dpmod/qc/havocbot.qc Wed Apr 9 23:24:30 2003
@@ -1247,6 +1247,8 @@
}
}
+ // LordHavoc: todo: deceleration aiming simulation
+
ang = vectoangles(aimdir);
// change to v_angle format
Index: dpmod/qc/m_soldier.qc
diff -u dpmod/qc/m_soldier.qc:1.3 dpmod/qc/m_soldier.qc:1.4
--- dpmod/qc/m_soldier.qc:1.3 Thu Feb 20 03:48:07 2003
+++ dpmod/qc/m_soldier.qc Wed Apr 9 23:24:30 2003
@@ -8,7 +8,7 @@
$cd id1/models/soldier3
$origin 0 -6 24
-$base base
+$base base
$skin skin
$frame stand1 stand2 stand3 stand4 stand5 stand6 stand7 stand8
@@ -150,15 +150,17 @@
void(vector hit) army_pistol =
{
+ local vector ang;
shotdir = normalize (hit - (self.origin + '0 0 12'));
shotdir = shotdir * 25 + randomvec();
shotdir = normalize(shotdir);
+ ang = vectoangles(shotdir);
shotorg = self.origin + '0 0 12';
sound (self, CHAN_WEAPON, "weapons/rocket1i.wav", 1, ATTN_NORM);
w_muzzleflash (shotorg, 1);
- ejectcasing (shotorg, shotdir, '0 0 0', 50, 0);
+ ejectcasing (shotorg, '0 0 0', 50, ang, '0 0 0', 150, 0);
FireBullets (self, self, 4, 1, DMG_SOLDIER_PISTOL_DAMAGE, DMG_SOLDIER_PISTOL_BDAMAGE, 0, 0, shotdir * 6000, 0.025, self.deathtype, DT_NAIL, Obituary_Generic);
};
@@ -181,15 +183,17 @@
void(vector hit) army_nail =
{
+ local vector ang;
shotdir = normalize (hit - (self.origin + '0 0 12'));
shotdir = shotdir * 25 + randomvec();
shotdir = normalize(shotdir);
+ ang = vectoangles(shotdir);
shotorg = self.origin + '0 0 12';
sound (self, CHAN_WEAPON, "weapons/rocket1i.wav", 1, ATTN_NORM);
w_muzzleflash (shotorg, 1);
- ejectcasing (shotorg, shotdir, '0 0 0', 50, 0);
+ ejectcasing (shotorg, '0 0 0', 50, ang, '0 0 0', 150, 0);
FireBullets (self, self, 4, 1, DMG_SOLDIER_MACHINEGUN_DAMAGE, DMG_SOLDIER_MACHINEGUN_BDAMAGE, 0, 0, shotdir * 5000, 0.05, self.deathtype, DT_NAIL, Obituary_Generic);
};
@@ -215,15 +219,17 @@
void(vector hit) army_shotgun =
{
+ local vector ang;
shotdir = normalize (hit - (self.origin + '0 0 12'));
shotdir = shotdir * 35 + randomvec();
shotdir = normalize(shotdir);
+ ang = vectoangles(shotdir);
shotorg = self.origin + '0 0 12';
sound (self, CHAN_WEAPON, "weapons/shotgn2.wav", 1, ATTN_NORM);
w_muzzleflash (shotorg, 2);
- ejectcasing (shotorg, shotdir, '0 0 0', 50, 1);
+ ejectcasing (shotorg, '0 0 0', 50, ang, '0 0 0', 150, 1);
FireBullets (self, self, 1, DMG_SOLDIER_SHOTGUN_PELLETS, DMG_SOLDIER_SHOTGUN_DAMAGE, DMG_SOLDIER_SHOTGUN_BDAMAGE, 0, 0, shotdir * 4000, 0.1, self.deathtype, DT_SHOTGUN, Obituary_Generic);
};
@@ -338,7 +344,7 @@
void(entity attacker, float damage) army_pain =
{
local float r;
-
+
if (self.pain_finished > time || random() < 0.75)
return;
Index: dpmod/qc/mine.qc
diff -u dpmod/qc/mine.qc:1.6 dpmod/qc/mine.qc:1.7
--- dpmod/qc/mine.qc:1.6 Fri Feb 28 00:15:12 2003
+++ dpmod/qc/mine.qc Wed Apr 9 23:24:30 2003
@@ -3,7 +3,9 @@
float MINE_PROXIMITY = 2;
float MINE_IMMUNETODAMAGE = 4;
float MINE_TENWARHEAD = 8;
+float MINE_FIVEWARHEAD = 64;
float MINE_DETONATABLE = 16;
+float MINE_HOP = 32;
.float activemines;
void() MineExplode =
@@ -13,19 +15,29 @@
self.owner.activemines = self.owner.activemines - 1;
if (self.weapon & MINE_TENWARHEAD)
{
- basevel = '0 0 250' + '0 0 0.2' * cvar("sv_gravity");
- t = /*GRENADE_IMPACT + */GRENADE_IMMUNETODAMAGE;
- v = randomvec() * 250 + basevel;LaunchGrenade(self.origin, v, self.owner, self.dmg, self.dmg2, t, 0.5, self.deathtype, self.obitfunc1);
- v = randomvec() * 250 + basevel;LaunchGrenade(self.origin, v, self.owner, self.dmg, self.dmg2, t, 0.5, self.deathtype, self.obitfunc1);
- v = randomvec() * 250 + basevel;LaunchGrenade(self.origin, v, self.owner, self.dmg, self.dmg2, t, 0.5, self.deathtype, self.obitfunc1);
- v = randomvec() * 250 + basevel;LaunchGrenade(self.origin, v, self.owner, self.dmg, self.dmg2, t, 0.5, self.deathtype, self.obitfunc1);
- v = randomvec() * 250 + basevel;LaunchGrenade(self.origin, v, self.owner, self.dmg, self.dmg2, t, 0.5, self.deathtype, self.obitfunc1);
- v = randomvec() * 250 + basevel;LaunchGrenade(self.origin, v, self.owner, self.dmg, self.dmg2, t, 0.5, self.deathtype, self.obitfunc1);
- v = randomvec() * 250 + basevel;LaunchGrenade(self.origin, v, self.owner, self.dmg, self.dmg2, t, 0.5, self.deathtype, self.obitfunc1);
- v = randomvec() * 250 + basevel;LaunchGrenade(self.origin, v, self.owner, self.dmg, self.dmg2, t, 0.5, self.deathtype, self.obitfunc1);
- v = randomvec() * 250 + basevel;LaunchGrenade(self.origin, v, self.owner, self.dmg, self.dmg2, t, 0.5, self.deathtype, self.obitfunc1);
- v = randomvec() * 250 + basevel;LaunchGrenade(self.origin, v, self.owner, self.dmg, self.dmg2, t, 0.5, self.deathtype, self.obitfunc1);
+ basevel = '0 0 0.5' * cvar("sv_gravity");
+ t = GRENADE_IMPACT + GRENADE_IMMUNETODAMAGE;
+ v = randomvec() * 500 + basevel;LaunchGrenade(self.origin, v, self.owner, self.dmg, self.dmg2, t, 1, self.deathtype, self.obitfunc1);
+ v = randomvec() * 500 + basevel;LaunchGrenade(self.origin, v, self.owner, self.dmg, self.dmg2, t, 1, self.deathtype, self.obitfunc1);
+ v = randomvec() * 500 + basevel;LaunchGrenade(self.origin, v, self.owner, self.dmg, self.dmg2, t, 1, self.deathtype, self.obitfunc1);
+ v = randomvec() * 500 + basevel;LaunchGrenade(self.origin, v, self.owner, self.dmg, self.dmg2, t, 1, self.deathtype, self.obitfunc1);
+ v = randomvec() * 500 + basevel;LaunchGrenade(self.origin, v, self.owner, self.dmg, self.dmg2, t, 1, self.deathtype, self.obitfunc1);
+ v = randomvec() * 500 + basevel;LaunchGrenade(self.origin, v, self.owner, self.dmg, self.dmg2, t, 1, self.deathtype, self.obitfunc1);
+ v = randomvec() * 500 + basevel;LaunchGrenade(self.origin, v, self.owner, self.dmg, self.dmg2, t, 1, self.deathtype, self.obitfunc1);
+ v = randomvec() * 500 + basevel;LaunchGrenade(self.origin, v, self.owner, self.dmg, self.dmg2, t, 1, self.deathtype, self.obitfunc1);
+ v = randomvec() * 500 + basevel;LaunchGrenade(self.origin, v, self.owner, self.dmg, self.dmg2, t, 1, self.deathtype, self.obitfunc1);
+ v = randomvec() * 500 + basevel;LaunchGrenade(self.origin, v, self.owner, self.dmg, self.dmg2, t, 1, self.deathtype, self.obitfunc1);
}
+ else if (self.weapon & MINE_FIVEWARHEAD)
+ {
+ basevel = '0 0 0.5' * cvar("sv_gravity");
+ t = GRENADE_IMPACT + GRENADE_IMMUNETODAMAGE;
+ v = randomvec() * 500 + basevel;LaunchGrenade(self.origin, v, self.owner, self.dmg, self.dmg2, t, 1, self.deathtype, self.obitfunc1);
+ v = randomvec() * 500 + basevel;LaunchGrenade(self.origin, v, self.owner, self.dmg, self.dmg2, t, 1, self.deathtype, self.obitfunc1);
+ v = randomvec() * 500 + basevel;LaunchGrenade(self.origin, v, self.owner, self.dmg, self.dmg2, t, 1, self.deathtype, self.obitfunc1);
+ v = randomvec() * 500 + basevel;LaunchGrenade(self.origin, v, self.owner, self.dmg, self.dmg2, t, 1, self.deathtype, self.obitfunc1);
+ v = randomvec() * 500 + basevel;LaunchGrenade(self.origin, v, self.owner, self.dmg, self.dmg2, t, 1, self.deathtype, self.obitfunc1);
+ }
else if (self.lefty == 2)
{
v = self.angles;
@@ -47,12 +59,22 @@
void() MineDet =
{
- self.think = MineExplode;
- self.nextthink = time;
- self.solid = SOLID_NOT;
self.takedamage = DAMAGE_NO;
+ self.think = MineExplode;
+ if (self.weapon & MINE_HOP)
+ {
+ self.nextthink = time + 0.3;
+ self.movetype = MOVETYPE_BOUNCE;
+ self.velocity = '0 0 500';
+ }
+ else
+ {
+ self.nextthink = time;
+ self.movetype = MOVETYPE_NONE;
+ self.solid = SOLID_NOT;
+ }
+ self.flags = self.flags - (self.flags & FL_ONGROUND);
setsize(self, '0 0 0', '0 0 0');
- self.movetype = MOVETYPE_NONE;
};
.float detonatetimeout;
Index: dpmod/qc/w_dbshotgun.qc
diff -u dpmod/qc/w_dbshotgun.qc:1.7 dpmod/qc/w_dbshotgun.qc:1.8
--- dpmod/qc/w_dbshotgun.qc:1.7 Tue Mar 11 14:17:24 2003
+++ dpmod/qc/w_dbshotgun.qc Wed Apr 9 23:24:30 2003
@@ -1,29 +1,32 @@
-void(entity targ, entity attacker, string dmsg, float dtype) Obituary_DBShotgunSingle =
+void(entity targ, entity attacker, string dmsg, float dtype) Obituary_DBShotgunSingle_Buckshot =
{
if (dtype == DTYPE_PLAYER)
{
- if (dmsg == "SHOTGUNEXPLOSIVESLUG")
+ deathstring1 = targ.netname;
+ deathstring2 = " was blown away by ";
+ deathstring3 = attacker.netname;
+ deathstring4 = "";
+ }
+ else
+ Obituary_Fallback(targ, attacker, dmsg, dtype);
+};
+
+void(entity targ, entity attacker, string dmsg, float dtype) Obituary_DBShotgunSingle_Explosive =
+{
+ if (dtype == DTYPE_PLAYER)
+ {
+ if (targ.bodyhealth < 1)
{
- if (targ.bodyhealth < 1)
- {
- deathstring1 = targ.netname;
- deathstring2 = " was blown apart by an explosive slug from ";
- deathstring3 = attacker.netname;
- deathstring4 = "";
- }
- else
- {
- deathstring1 = targ.netname;
- deathstring2 = " met an explosive slug from ";
- deathstring3 = attacker.netname;
- deathstring4 = "";
- }
+ deathstring1 = targ.netname;
+ deathstring2 = " was blown apart by an explosive slug from ";
+ deathstring3 = attacker.netname;
+ deathstring4 = "";
}
else
{
deathstring1 = targ.netname;
- deathstring2 = " was blown away by ";
+ deathstring2 = " met an explosive slug from ";
deathstring3 = attacker.netname;
deathstring4 = "";
}
@@ -31,32 +34,35 @@
else
Obituary_Fallback(targ, attacker, dmsg, dtype);
};
+
+void(entity targ, entity attacker, string dmsg, float dtype) Obituary_DBShotgunDouble_Buckshot =
+{
+ if (dtype == DTYPE_PLAYER)
+ {
+ deathstring1 = targ.netname;
+ deathstring2 = " took both barrels from ";
+ deathstring3 = attacker.netname;
+ deathstring4 = "";
+ }
+ else
+ Obituary_Fallback(targ, attacker, dmsg, dtype);
+};
-void(entity targ, entity attacker, string dmsg, float dtype) Obituary_DBShotgunDouble =
+void(entity targ, entity attacker, string dmsg, float dtype) Obituary_DBShotgunDouble_Explosive =
{
if (dtype == DTYPE_PLAYER)
{
- if (dmsg == "SHOTGUNEXPLOSIVESLUG")
+ if (targ.bodyhealth < 1)
{
- if (targ.bodyhealth < 1)
- {
- deathstring1 = targ.netname;
- deathstring2 = " was blown apart by two explosive slugs from ";
- deathstring3 = attacker.netname;
- deathstring4 = "";
- }
- else
- {
- deathstring1 = targ.netname;
- deathstring2 = " took two explosive slugs from ";
- deathstring3 = attacker.netname;
- deathstring4 = "";
- }
+ deathstring1 = targ.netname;
+ deathstring2 = " was blown apart by two explosive slugs from ";
+ deathstring3 = attacker.netname;
+ deathstring4 = "";
}
else
{
deathstring1 = targ.netname;
- deathstring2 = " took both barrels from ";
+ deathstring2 = " took two explosive slugs from ";
deathstring3 = attacker.netname;
deathstring4 = "";
}
@@ -65,11 +71,11 @@
Obituary_Fallback(targ, attacker, dmsg, dtype);
};
-//float DBSHOTGUNBUCKSHOT = 80;
+float DBSHOTGUNBUCKSHOT = 50;
float DBSHOTGUNEXPLOSIVESLUG = 50;
.float shotgunmode, shotgunshells;
-void(void(entity t, entity a, string m, float dtyp) obitfunc, float spreadboost) W_DBShotgunFireShell =
+void(void(entity t, entity a, string m, float dtyp) obitfunc, float spreadboost, float explosive) W_DBShotgunFireShell =
{
local vector v;
@@ -93,34 +99,84 @@
self.currentammo = self.ammo_shells = self.ammo_shells - 1;
self.wfiretime = time;
w_muzzleflash(v, 4);
- //if (self.shotgunmode)
+ if (explosive)
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);
}
- */
shotorg = v;
};
+
+void() W_DBShotgunSingleFireCode_Buckshot =
+{
+ W_DBShotgunFireShell(Obituary_DBShotgunSingle_Buckshot, 0, FALSE);
+};
-void() W_DBShotgunSingleFireCode =
+void() W_DBShotgunSingleFireCode_Explosive =
{
- W_DBShotgunFireShell(Obituary_DBShotgunSingle, 0);
+ W_DBShotgunFireShell(Obituary_DBShotgunSingle_Explosive, 0, TRUE);
};
-void() W_DBShotgunDoubleFireCode =
+void() W_DBShotgunDoubleFireCode_Buckshot =
{
- if (self.wload > 1)
+ while (self.wload > 0)
+ W_DBShotgunFireShell(Obituary_DBShotgunDouble_Buckshot, 0, FALSE);
+};
+
+void() W_DBShotgunDoubleFireCode_Explosive =
+{
+ while (self.wload > 0)
+ W_DBShotgunFireShell(Obituary_DBShotgunDouble_Explosive, 0, TRUE);
+};
+
+void(void(entity t, entity a, string m, float dtyp) obitfunc, float spreadboost, float explosive) W_DBShotgunGatlingFireShell =
+{
+ local vector v;
+
+ v = shotorg;
+ if (self.wload)
{
- while (self.wload > 0)
- W_DBShotgunFireShell(Obituary_DBShotgunDouble, 0);
+ self.wload = 0;
+ self.shotgunshells = self.shotgunshells + 1;
+ shotorg = shotorg - v_right;
}
+ else
+ {
+ self.wload = 1;
+ self.shotgunshells = self.shotgunshells + 2;
+ shotorg = shotorg + v_right;
+ }
+ /*
+ if (self.shotgunmode)
+ self.currentammo = self.ammo_xshells = self.ammo_xshells - 1;
else
- W_DBShotgunSingleFireCode();
+ */
+ self.currentammo = self.ammo_shells = self.ammo_shells - 1;
+ self.wfiretime = time;
+ w_muzzleflash(v, 4);
+ if (explosive)
+ 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);
+ }
+ shotorg = v;
+};
+
+void() W_DBShotgunGatlingFireCode_Buckshot =
+{
+ W_DBShotgunGatlingFireShell(Obituary_DBShotgunSingle_Buckshot, 0, FALSE);
};
+void() W_DBShotgunGatlingFireCode_Explosive =
+{
+ W_DBShotgunGatlingFireShell(Obituary_DBShotgunSingle_Explosive, 0, TRUE);
+};
+
+
void() w_dbshotgundrop1;
void() w_dbshotgundrop2;
void() w_dbshotgunraise1;
@@ -128,7 +184,7 @@
void() w_dbshotgun =
{
//local float swapmode, otherammo;
- local vector v;
+ local vector v, ang;
if (widle(w_dbshotgundrop1))
return;
@@ -160,12 +216,37 @@
}
*/
+ if (time > self.attack_finished)
+ {
+ if (self.shotgunshells)
+ {
+ sound(self, CHAN_AUTO, "weapons/bsgload.wav", 1, ATTN_STATIC);
+ v = shotorg + v_forward * -8;
+ ang = self.v_angle;ang_x = 0 - ang_x;
+ if (self.shotgunshells & 1) ejectcasing (v + v_right * 1, '0 0 0', 30, ang, '0 0 0', 150, 1);
+ if (self.shotgunshells & 2) ejectcasing (v + v_right * -1, '0 0 0', 30, ang, '0 0 0', 150, 1);
+ self.shotgunshells = 0;
+ }
+ if (self.ammo_shells > 0)
+ {
+ if (self.button0)
+ W_GenericSlowFireCode("weapons/shotgn2.wav", 0.2, W_DBShotgunGatlingFireCode_Buckshot);
+ else if (self.button3)
+ W_GenericSlowFireCode("weapons/shotgn2.wav", 0.2, W_DBShotgunGatlingFireCode_Explosive);
+ }
+ }
+
+ /*
if (self.wload > 0)
{
if (self.button0)
- W_GenericSlowFireCode("weapons/shotgn2.wav", 0.2, W_DBShotgunSingleFireCode);
+ //W_GenericSlowFireCode("weapons/shotgn2.wav", 0.2, W_DBShotgunSingleFireCode_Buckshot);
+ //W_GenericSlowFireCode("weapons/shotgn2.wav", 0.2, W_DBShotgunDoubleFireCode_Buckshot);
+ W_GenericSlowFireCode("weapons/shotgn2.wav", 0.2, W_DBShotgunSingleFireCode_Buckshot);
else if (self.button3)
- W_GenericSlowFireCode("weapons/shotgn2.wav", 0.2, W_DBShotgunDoubleFireCode);
+ //W_GenericSlowFireCode("weapons/shotgn2.wav", 0.2, W_DBShotgunDoubleFireCode_Buckshot);
+ //W_GenericSlowFireCode("weapons/shotgn2.wav", 0.2, W_DBShotgunDoubleFireCode_Explosive);
+ W_GenericSlowFireCode("weapons/shotgn2.wav", 0.2, W_DBShotgunSingleFireCode_Explosive);
}
else
{
@@ -176,12 +257,14 @@
self.attack_finished = time + 0.4;
sound(self, CHAN_AUTO, "weapons/bsgload.wav", 1, ATTN_STATIC);
v = shotorg + v_forward * -8;
- if (self.shotgunshells & 1) ejectcasing (v + v_right * 1, shotdir, '0 0 0', 30, 1);
- if (self.shotgunshells & 2) ejectcasing (v + v_right * -1, shotdir, '0 0 0', 30, 1);
+ ang = self.v_angle;ang_x = 0 - ang_x;
+ if (self.shotgunshells & 1) ejectcasing (v + v_right * 1, '0 0 0', 30, ang, '0 0 0', 150, 1);
+ if (self.shotgunshells & 2) ejectcasing (v + v_right * -1, '0 0 0', 30, ang, '0 0 0', 150, 1);
self.shotgunshells = 0;
}
else
{
+ */
/*
if (self.shotgunmode)
{
@@ -194,6 +277,7 @@
}
else
*/
+ /*
{
if (self.ammo_shells >= 1)
{
@@ -205,6 +289,7 @@
}
}
}
+ */
if (self.wfiretime)
{
Index: dpmod/qc/w_grenade.qc
diff -u dpmod/qc/w_grenade.qc:1.6 dpmod/qc/w_grenade.qc:1.7
--- dpmod/qc/w_grenade.qc:1.6 Tue Mar 11 14:25:48 2003
+++ dpmod/qc/w_grenade.qc Wed Apr 9 23:24:30 2003
@@ -48,6 +48,7 @@
Obituary_Fallback(targ, attacker, dmsg, dtype);
};
+/*
.float grenademode;
void() W_GrenadeFireImpact =
@@ -58,6 +59,15 @@
//LaunchGrenade(shotorg, shotdir * 1000 + v_up * 200 + self.velocity, self, 150 * damagescale, 200, GRENADE_IMPACT | GRENADE_IMMUNETODAMAGE, 25, "GRENADE", Obituary_Grenade);
LaunchGrenade(shotorg, shotdir * 1000 + v_up * 200, self, 150 * damagescale, 120, GRENADE_IMPACT | GRENADE_IMMUNETODAMAGE, 25, "GRENADE", Obituary_Grenade);
};
+*/
+
+void() W_GrenadeFirePipebomb =
+{
+ self.wfiretime = time;
+ self.currentammo = self.ammo_rockets = self.ammo_rockets - 1;
+ w_muzzleflash(shotorg, 3);
+ LaunchGrenade(shotorg, shotdir * 1000 + v_up * 200, self, 150 * damagescale, 120, GRENADE_DETONATABLE | GRENADE_DETONATEONCREATURE, 60, "PIPEBOMB", Obituary_Grenade);
+};
/*
void() W_GrenadeFireProximity =
@@ -69,6 +79,7 @@
};
*/
+/*
void() W_GrenadeFireSticky =
{
self.wfiretime = time;
@@ -76,9 +87,10 @@
w_muzzleflash(shotorg, 3);
LaunchMine(shotorg, shotdir * 1000 + v_up * 200, self, 120 * damagescale, 120, 50 * damagescale, 20 * damagescale, MINE_DETONATABLE, 60, "STICKYGRENADE", Obituary_Grenade);
};
+*/
.float activemines;
-.float oldbutton3;
+//.float oldbutton3;
void() w_grenadedrop1;
void() w_grenadedrop2;
void() w_grenaderaise1;
@@ -89,6 +101,69 @@
if (widle(w_grenadedrop1))
return;
+ if (time > self.detonatetimeout)
+ if (time > self.attack_finished)
+ {
+ if (self.button0)
+ {
+ if (self.activemines < 20)
+ {
+ if (self.ammo_rockets >= 1)
+ W_GenericSlowFireCode("weapons/grenade.wav", 0.3, W_GrenadeFirePipebomb);
+ else
+ self.switchweapon = W_BestWeapon(TRUE);
+ }
+ else
+ {
+ self.attack_finished = time + 0.3;
+ sprint(self, "only 20 remote explosives allowed, you must detonate some before placing more\n");
+ }
+ }
+ if (self.button3)
+ if (self.activemines > 0)
+ {
+ self.attack_finished = time + 0.3;
+ sound(self, CHAN_WEAPON, "weapons/bomb/trigger.wav", 1, ATTN_STATIC);
+ self.detonatetimeout = time + 0.1;
+ }
+ }
+
+ /*
+ if (time > self.attack_finished)
+ {
+ if (self.button3)
+ {
+ if (self.activemines < 20)
+ {
+ if (self.ammo_rockets >= 1)
+ W_GenericSlowFireCode("weapons/grenade.wav", 0.6, W_GrenadeFirePipebomb);
+ }
+ else
+ {
+ 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.button0)
+ {
+ if (self.activemines > 0)
+ {
+ self.attack_finished = time + 0.2;
+ sound(self, CHAN_WEAPON, "weapons/bomb/trigger.wav", 1, ATTN_STATIC);
+ self.detonatetimeout = time + 0.1;
+ }
+ else if (self.ammo_rockets >= 1)
+ W_GenericSlowFireCode("weapons/grenade.wav", 0.6, W_GrenadeFireImpact);
+ else
+ self.switchweapon = W_BestWeapon(TRUE);
+ }
+ }
+ */
+
+ /*
if (time > self.attack_finished)
{
if ((self.button3 && !self.oldbutton3) || (self.activemines < 1 && self.grenademode == 2))
@@ -106,9 +181,9 @@
if (self.grenademode >= 2)
self.grenademode = 0;
if (self.grenademode == 0)
- sprint(self, "mode: impact explosives\n");
+ sprint(self, "mode: impact grenades\n");
else if (self.grenademode == 1)
- sprint(self, "mode: remote explosives\n");
+ sprint(self, "mode: pipebombs\n");
}
}
else if (self.button0)
@@ -120,7 +195,7 @@
else if (self.grenademode == 1)
{
if (self.activemines < 20)
- W_GenericSlowFireCode("weapons/grenade.wav", 0.8, W_GrenadeFireSticky);
+ W_GenericSlowFireCode("weapons/grenade.wav", 0.6, W_GrenadeFirePipebomb);
else
{
if (time > self.attack_finished)
@@ -136,6 +211,7 @@
}
}
self.oldbutton3 = self.button3;
+ */
/*
if (self.button0)
{
Index: dpmod/qc/w_info.qc
diff -u dpmod/qc/w_info.qc:1.1.1.1 dpmod/qc/w_info.qc:1.2
--- dpmod/qc/w_info.qc:1.1.1.1 Thu Sep 19 15:07:40 2002
+++ dpmod/qc/w_info.qc Wed Apr 9 23:24:30 2003
@@ -261,7 +261,6 @@
while (1)
{
if (w == IT_WEAPON10) w = IT_WEAPON1;
- // if (w == IT_WEAPON9) w = IT_WEAPON1;
else if (w == IT_WEAPON1) w = IT_WEAPON2;
else if (w == IT_WEAPON2) w = IT_WEAPON3;
else if (w == IT_WEAPON3) w = IT_WEAPON4;
@@ -306,7 +305,6 @@
else if (w == IT_WEAPON3) w = IT_WEAPON2;
else if (w == IT_WEAPON2) w = IT_WEAPON1;
else if (w == IT_WEAPON1) w = IT_WEAPON10;
- //else if (w == IT_WEAPON1) w = IT_WEAPON9;
if (setweapon(w, WR_SELECTABLE))
{
self.switchweapon = w;
Index: dpmod/qc/w_nailgun.qc
diff -u dpmod/qc/w_nailgun.qc:1.5 dpmod/qc/w_nailgun.qc:1.6
--- dpmod/qc/w_nailgun.qc:1.5 Thu Feb 20 03:58:15 2003
+++ dpmod/qc/w_nailgun.qc Wed Apr 9 23:24:30 2003
@@ -14,7 +14,7 @@
void() W_NailgunFireCode =
{
- local vector v, casingdir;
+ local vector v, casingdir, ang;
if (self.ammo_nails < 1) {stopfiring = TRUE;return;}
self.wfiretime = time;
self.currentammo = self.ammo_nails = self.ammo_nails - 1;
@@ -25,15 +25,16 @@
self.punchangle_x = -2;
v = shotorg;
+ ang = self.v_angle;ang_x = 0 - ang_x;
if (self.wframe & 1)
{
shotorg = shotorg + v_right * 2;
- //ejectcasing(shotorg, shotdir, v_right * 200 + v_up * 50, 50, 0);
+ ejectcasing(shotorg, v_right * 200 + v_up * 50, 50, ang, '0 250 0', 100, 0);
}
else
{
shotorg = shotorg - v_right * 2;
- //ejectcasing(shotorg, shotdir, v_right * -200 + v_up * 50, 50, 0);
+ ejectcasing(shotorg, v_right * -200 + v_up * 50, 50, ang, '0 -250 0', 100, 0);
}
w_muzzleflash(shotorg, 1);
Index: dpmod/qc/w_pistol.qc
diff -u dpmod/qc/w_pistol.qc:1.6 dpmod/qc/w_pistol.qc:1.7
--- dpmod/qc/w_pistol.qc:1.6 Tue Mar 11 14:24:43 2003
+++ dpmod/qc/w_pistol.qc Wed Apr 9 23:24:30 2003
@@ -14,9 +14,11 @@
void() W_PistolFireCode =
{
+ local vector ang;
self.wfiretime = time;
w_muzzleflash(shotorg, 1);
- ejectcasing(shotorg, shotdir, v_right * 150 + v_up * 50, 50, 0);
+ ang = self.v_angle;ang_x = 0 - ang_x;
+ ejectcasing(shotorg, v_right * 150 + v_up * 50, 50, ang, '0 250 0', 100, 0);
FireBullets(self, self, 4, 1, 35 * damagescale, 35 * damagescale, 0, 0, shotdir * 7000, 0, "PISTOL", DT_NAIL, Obituary_Pistol);
};
Index: dpmod/qc/w_shotgun.qc
diff -u dpmod/qc/w_shotgun.qc:1.6 dpmod/qc/w_shotgun.qc:1.7
--- dpmod/qc/w_shotgun.qc:1.6 Tue Mar 11 14:17:24 2003
+++ dpmod/qc/w_shotgun.qc Wed Apr 9 23:24:30 2003
@@ -12,24 +12,26 @@
Obituary_Fallback(targ, attacker, dmsg, dtype);
};
-//float SHOTGUNBUCKSHOT = 75;
+float SHOTGUNBUCKSHOT = 50;
float SHOTGUNEXPLOSIVESLUG = 50;
.float shotgunmode;
-void() W_SingleShotgunFireCode =
+void() W_SingleShotgunFireCode_Buckshot =
{
self.wfiretime = time;
self.currentammo = self.ammo_shells = self.ammo_shells - 1;
w_muzzleflash(shotorg, 2);
- //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);
- }
- */
+ 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;
+};
+
+void() W_SingleShotgunFireCode_Explosive =
+{
+ self.wfiretime = time;
+ self.currentammo = self.ammo_shells = self.ammo_shells - 1;
+ w_muzzleflash(shotorg, 2);
+ 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);
self.wload = -1;
};
@@ -39,7 +41,7 @@
void() w_shotgunraise2;
void() w_shotgun =
{
- local vector v;
+ local vector v, ang;
if (widle(w_shotgundrop1))
return;
@@ -62,11 +64,14 @@
if (self.button0)
{
+ if (self.wload >= 1) // is it loaded?
+ W_GenericSlowFireCode("weapons/shotgn2.wav", 0.3, W_SingleShotgunFireCode_Buckshot);
+ }
+ else if (self.button3)
+ {
if (self.wload >= 1) // is it loaded?
- W_GenericSlowFireCode("weapons/shotgn2.wav", 0.3, W_SingleShotgunFireCode);
+ W_GenericSlowFireCode("weapons/shotgn2.wav", 0.3, W_SingleShotgunFireCode_Explosive);
}
- else
- self.notfiring = TRUE;
if (self.wload < 1 && time > self.attack_finished)
{
@@ -75,7 +80,8 @@
self.attack_finished = time + 0.2;
sound(self, CHAN_AUTO, "weapons/bsgload.wav", 1, ATTN_STATIC);
v = shotorg + v_forward * -5;
- ejectcasing (v, v_forward, (v_right * 100) + v_up * 40, 30, 1);
+ ang = self.v_angle;ang_x = 0 - ang_x;
+ ejectcasing(v, v_right * 100 + v_up * 40, 30, ang, '0 250 0', 100, 1);
self.wload = 0;
}
else if (self.ammo_shells >= 1)
Index: dpmod/qc/w_supernailgun.qc
diff -u dpmod/qc/w_supernailgun.qc:1.5 dpmod/qc/w_supernailgun.qc:1.6
--- dpmod/qc/w_supernailgun.qc:1.5 Thu Feb 20 03:58:15 2003
+++ dpmod/qc/w_supernailgun.qc Wed Apr 9 23:24:30 2003
@@ -14,7 +14,7 @@
void() W_SuperNailgunFireCode =
{
- local vector v;
+ local vector v, ang;
self.currentammo = self.ammo_nails = self.ammo_nails - 1;
self.wframe = self.wframe + 0.5; // 10fps animation
if (self.wframe >= 9)
@@ -24,7 +24,8 @@
v = shotorg;
shotorg = shotorg + v_up * 2;
w_muzzleflash(shotorg, 1);
- ejectcasing(shotorg, shotdir, v_right * 200 + v_up * 50, 50, 2);
+ ang = self.v_angle;ang_x = 0 - ang_x;
+ ejectcasing(shotorg, v_right * 200 + v_up * 50, 50, ang, '0 50 0', 100, 0);
FireBullets(self, self, 4, 1, 15 * damagescale, 15 * damagescale, 0, 0, shotdir * 7000, 0.05, "SUPERNAILGUN", DT_NAIL, Obituary_SuperNailgun);
shotorg = v;
More information about the twilight-commits
mailing list