|
|
i haven't thuroughly tested this, but so far looks to work well in 1 player,
!!hasn't been tested in multi!! So if its buggy give me a break i've only been
doing QuakeC for 2 weeks and i had no programming experience, (pretty good
for a 13 year old huh?). If u find a bug please tell me.
Step 1
1) Open weapons.qc
2) find W_FireLightning
3) Replace the Entire Funstion with this new function below
void() W_FireLightning =
{
local entity thunderbolt; // create thunderbolt entity
if (self.ammo_cells < 1) // if u have more than 1 cell, this is the best weapon
{
self.weapon = W_BestWeapon ();
W_SetCurrentAmmo ();
return;
}
self.currentammo = self.ammo_cells = self.ammo_cells - 1; // ammo it uses
self.punchangle_x = -2; // kickback angle
thunderbolt = spawn (); // spawning it
thunderbolt.owner = self; // self (you) is owner of thunderbolt
thunderbolt.movetype = MOVETYPE_FLYMISSILE; // flies straight on
thunderbolt.solid = SOLID_BBOX; // its solid
thunderbolt.classname = "thunderbolt"; // name it thunderbolt
makevectors (self.v_angle); // i dont know
thunderbolt.velocity = aim(self, 1000); // dont know this either
thunderbolt.velocity = thunderbolt.velocity * 1000; //speed of 1000
thunderbolt.angles = vectoangles(thunderbolt.velocity); // dont know
thunderbolt.touch = LightningHit; // calls LightningHit when touched
thunderbolt.nextthink = time + 5; // disappears after flying for 5 seconds
thunderbolt.think = SUB_Remove; // does nothing after 5 seconds
setmodel (thunderbolt, "progs/bolt.mdl"); // sets the thunderbolt model
setsize (thunderbolt, '0 0 0', '0 0 0'); // thunderbolt model size
setorigin (thunderbolt, self.origin + v_forward*8 + '0 0 16'); // thunderbolt spawn origin
};
4) Above W_FireLightning add these functions:
void() LightningHit =
{
local vector org; // creates org vector
local float damage=0; // floats damage starting at 0
local entity head; //creates head entity
org = self.origin + '0 0 16'; // vector org origin
head = findradius(self.origin, 250); //send lightning line to anything in 250 radius
while (head) // while looking for head
{
if (head.takedamage) // if head has health, attack it
{
if(head != self.owner) // don't attack thunderbolt owner!!
{
WriteByte (MSG_BROADCAST, SVC_TEMPENTITY); // temp entity
WriteByte (MSG_BROADCAST, TE_LIGHTNING2); // makes lightning line i think
WriteEntity (MSG_BROADCAST, head); // write head entity
WriteCoord (MSG_BROADCAST, org_x); // write orgs x coord
WriteCoord (MSG_BROADCAST, org_y); // write orgs y coord
WriteCoord (MSG_BROADCAST, org_z); // write orgs z coord
WriteCoord (MSG_BROADCAST, head.origin_x); // write heads x coord
WriteCoord (MSG_BROADCAST, head.origin_y); // write heads y coord
WriteCoord (MSG_BROADCAST, head.origin_z); // write heads z coord
sound (head, CHAN_WEAPON, "weapons/lhit.wav", 1, ATTN_NORM); // its sound
damage = 40 + random()*20; // 40 plus some random damage
T_Damage (head, self, self.owner, damage); // its damage
}
}
head = head.chain; // go to next enemy
}
remove(self);
};
Step 2
now just compile and have fun!
|