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... |