News
Befunge
Doom
Inform
Quake
- Levels
- Mods
- Miscellaneous
RISC OS
Misc
Links
Contact
|
DIY Chain rocket launcher
(aka 'BOOM BOOM BOOM BOOM BOOM BOOM BOOM!')
- Get your favourite copy of the QC source. Or make a new one.
- Open Weapons.qc, and scroll down to W_FireSpikes
- Replace the lines
dir = aim (self, 1000);
launch_spike (self.origin + '0 0 16' + v_right*ox, dir);
with:
missile = spawn ();
missile.owner = self;
missile.movetype = MOVETYPE_FLYMISSILE;
missile.solid = SOLID_BBOX;
// set missile speed
makevectors (self.v_angle);
missile.velocity = aim(self, 1000);
missile.velocity = missile.velocity * 1000;
missile.angles = vectoangles(missile.velocity);
missile.touch = T_MissileTouch;
// set missile duration
missile.nextthink = time + 5;
missile.think = SUB_Remove;
setmodel (missile, "progs/missile.mdl");
setsize (missile, '0 0 0', '0 0 0');
setorigin (missile, self.origin + v_forward*8 + '0 0 16');
This is virtually the same as found in W_FireRocket, just without the bit that reduces your rocket ammo, plays the rocket
launcher sound, and sets the punchangle. You'll want to add this at the top of W_FireSpikes:
local entity missile;
- You need to change
setorigin (missile, self.origin + v_forward*8 + '0 0 16');
to:
setorigin (missile, self.origin + v_forward*8 + '0 0 16' + v_right*ox);
to make sure it fires the rockets from alternating barrels of the nailgun.
- You'll also want to change
sound (self, CHAN_WEAPON, "weapons/rocket1i.wav", 1, ATTN_NORM);
to:
sound (self, CHAN_WEAPON, "weapons/sgun1.wav", 1, ATTN_NORM);
to make sure it plays the rocket sound.
- Now open items.qc, and scroll down to the weapons area. Find weapon_nailgun, and change the netname from 'nailgun' to
'Chain Rocket Launcher'.
- Open client.qc, and scroll down to ClientObituary. Change:
if (rnum == IT_NAILGUN)
{
deathstring = " was nailed by ";
deathstring2 = "\n";
}
to:
if (rnum == IT_NAILGUN)
{
deathstring = " was liquidized by ";
deathstring2 = "'s chain rocket launcher\n";
}
Or some other comment. Deathstring is printed after the deceased's name, while deathstring2 is printed after the
attacker's name:
<deceased> <deathstring> <attacker> <deathstring2>
- Save all the files and compile!
- Further extenstion - adding some random inaccuracy. Go down to W_FireSpikes again, and change
self.punchangle_x = -2;
to:
self.punchangle_x = 4 * crandom();
This changes the punchangle (An offset to your view when you fire weapons, get hurt, etc) to a random number between -4
and 4 degrees pitch (crandom returns a number from -1 to 1, have a look at its definition at the top of weapons.qc)
Unfortunately punchangle doesn't effect the direction your gun fires, so we'll have to do that ourselves. The vector
missile.velocity is a direction for the rocket to head. We need to convert this into a set of angles, by using vectoangles.
Below
missile.velocity = aim(self, 1000);
insert the lines:
missile.velocity = vectoangles(missile.velocity);
// Convert it to a set of angles (Stored as in a vector), format 'pitch yaw 0' as opposed to 'x y z'
missile.velocity = missile.velocity + self.punchangle; // Add the punchangle to the direction the rocket's going.
makevectors(missile.velocity); // Convert back to a set of vectors. The function sets global variables v_forward,
v_right and v_up to point forward, right and up (Each has length 1).
missile.velocity = v_forward;
Hopefully the comments explain what's happening. Save and recompile to make this weapon a bit harder to use!
- Another extension - punchangle_y. Just like punchangle_x, you can set the yaw. Simply insert the line:
self.punchangle_y = 4 * crandom();
underneath the punchangle_x line. You could also set punchangle_z (Roll, although few QC functions work with it).
- Yet another extension. Like the last, this is simple. Change the
4 * crandom()
bits to
2 * skill * crandom()
for skill dependent inaccuracy! Skill 0 gives no inaccuracy, and skill 3 gives up to 6 degrees!
Fiddle around with this bit as much as you want
- No extensions this time. Now you've got to think up a few problems you're having, and ask me to write another of these
handy file thingies for it!
|