![]()
|
| Tutorials are copyrighted by thier author and the Inside3D staff. And may be used in any Quake modification provided that the author and the Inside3D staff are credited. Please direct any comments to the author. |
| Created By: | Drywall |
| eMail: | drywall@telefragged.com |
| Difficulty Scale: | Easy |
| Step 1 This tutorial will teach you how to turn the nailgun into a gatling gun ala doom. First, you need to open weapons.qc and go until line "void() player_nail1; and write this: void() player_gat1; // gatling gun firing (see later) |
| Step 2 Now, further in weapons.qc, find the line: .float hit_z; . Above it, add this:
void(float ox, float ox2) W_FireGatSpikes = // this is a slightly modified version of firespikes
{
local vector dir;
local entity old;
makevectors (self.v_angle);
if (self.ammo_nails <1)
{
self.weapon = W_BestWeapon();
W_SetCurrentAmmo ();
return;
}
sound (self, chan_weapon, "weapons/rocket1i.wav", 1, attn_norm);
self.attack_finished = time + 0.2;
self.currentammo = self.ammo_nails = self.ammo_nails - 1;
dir = aim (self, 1000);
launch_spike (self.origin + '0 0 16' + v_right*ox + v_up*ox2, dir); // sets spike direction
self.punchangle_x = -2;
};
/*
===============
launch_gatling
===============
*/
void(vector org, vector dir) launch_gatling =
{
newmis = spawn ();
newmis.owner = self;
newmis.movetype = MOVETYPE_FLYMISSILE;
newmis.solid = SOLID_BBOX;
newmis.angles = vectoangles(dir);
newmis.touch = spike_touch;
newmis.classname = "spike";
newmis.think = SUB_Remove;
newmis.nextthink = time + 6;
setmodel (newmis, "progs/spike.mdl");
setsize (newmis, VEC_ORIGIN, VEC_ORIGIN);
setorigin (newmis, org);
newmis.velocity = dir * 1000;
};
void() W_FireGatling =
{
local vector dir;
local entity old;
sound (self, CHAN_WEAPON, "weapons/spike2.wav", 1, ATTN_NORM);
self.attack_finished = time + 0.2;
self.currentammo = self.ammo_nails = self.ammo_nails - 2;
dir = aim (self, 1000);
launch_gatling (self.origin + '0 0 16', dir);
newmis.touch = superspike_touch;
setmodel (newmis, "progs/s_spike.mdl");
setsize (newmis, VEC_ORIGIN, VEC_ORIGIN);
self.punchangle_x = -2;
};
|
| Step 3 Now open up player.qc . Above the line: void() player_light1 =[$light1, player_light2 ] insert these lines:
void() player_gat1 =[$nailatt1, player_gat2 ] // runs gat2 next
{
self.effects = self.effects | EF_MUZZLEFLASH;
if (!self.button0)
{player_run ();return;}
self.weaponframe = self.weaponframe + 1;
if (self.weaponframe == 9)
self.weaponframe = 1;
SuperDamageSound();
W_FireGatSpikes (-8, 0); // fires a spike to the left
self.attack_finished = time + 0.2;
};
void() player_gat2 =[$nailatt2, player_gat3 ] // runs gat3 next
{
self.effects = self.effects | EF_MUZZLEFLASH;
if (!self.button0)
{player_run ();return;}
self.weaponframe = self.weaponframe + 1;
if (self.weaponframe == 9)
self.weaponframe = 1;
SuperDamageSound();
W_FireGatSpikes (0, 8); // fires a spike up
self.attack_finished = time + 0.2;
};
void() player_gat3 =[$nailatt1, player_gat4 ] // runs gat4 next
{
self.effects = self.effects | EF_MUZZLEFLASH;
if (!self.button0)
{player_run ();return;}
self.weaponframe = self.weaponframe + 1;
if (self.weaponframe == 9)
self.weaponframe = 1;
SuperDamageSound();
W_FireGatSpikes (8, 0); // fires a spike to the right
self.attack_finished = time + 0.2;
};
void() player_gat4 =[$nailatt2, player_gat1 ] // back to 1
{
self.effects = self.effects | EF_MUZZLEFLASH;
if (!self.button0)
{player_run ();return;}
self.weaponframe = self.weaponframe + 1;
if (self.weaponframe == 9)
self.weaponframe = 1;
SuperDamageSound();
W_FireGatSpikes (0, -8); // fires a spike down
self.attack_finished = time + 0.2;
};
|
| Step4 Now find the W_Attack function in weapons.qc . Change these lines:
else if (self.weapon == IT_SUPER_NAILGUN)
{
player_nail1 ();
}
Add in these lines:
else if (self.weapon == IT_SUPER_NAILGUN)
{
player_gat1 ();
}
|
| Step 5 Woohoo! You're all ready to compile and run. Have fun... |