InsideQC
 - Front Page

Tutorials are copyrighted by their author and the Inside3D staff. And may be used in any Quake modification provided that the author and the InsideQC staff are credited. Please direct any comments to the author.


Created By: Jared Balloutd>
eMail: jballou@mdqnet.net
Difficulty Scale: Super Easy



In this tut, I'm gonna show ya how to make the EnergyBeamWeaponTron500 (yes, it's long, but if ya play Quake Mechs you'd know why) 
I made a whackass damage so that it would act like radius damage but do MUCH more damage by direct hit
void(entity inflictor, entity attacker, float damage, entity ignore) T_PlasmaDamage =
{
local float points;
local entity head;
local vector org; 
head = findradius(inflictor.origin, damage);

while (head)
{
if (head != ignore)
{
if (head.takedamage)
{
org = head.origin + (head.mins + head.maxs)*0.5;
points = 0.5*vlen (inflictor.origin - org);
if (points < 0)
points = 0;
points = damage - points;
if (head == attacker)
points = points * 0.5;
if (points > 0)
{
if (CanDamage (head, inflictor))
{ 
T_Damage (head, inflictor, attacker, points*10);
}
}
}
}
head = head.chain;
}
}; 
Next, we need a touch function. 
void() energy_touch =
{
local float rand;
if (other == self.owner)
return; 
if (other.solid == SOLID_TRIGGER)
return; // trigger field, do nothing 
if (pointcontents(self.origin) == CONTENT_SKY)
{
remove(self);
return;
}

// hit something that bleeds
T_PlasmaDamage (self, self.owner, 15, self.owner); 
remove(self);
}; 

Here's the nift-spiffy particle tracer....
void() EnergyThink =
{
self.effects = self.effects | EF_BRIGHTLIGHT;
particle (self.origin, '1 4 -7', 208, 2);
particle (self.origin, '3 -5 2', 208, 2);
particle (self.origin, '4 -1 4', 208, 2);
particle (self.origin, '-7 -3 3', 208, 2);
particle (self.origin, '2 -5 4', 208, 2);
particle (self.origin, '6 7 1', 208, 2);
particle (self.origin, '-3 8 -6', 208, 2);
particle (self.origin, '8 -1 3', 208, 2);
particle (self.origin, '1 4 -5', 208, 2);
self.nextthink = time + 0.01;
self.think=EnergyThink;
}; 
void() W_FireEnergy =
{
local entity missile;

self.currentammo = self.ammo_cells = self.ammo_cells - 0.01;
sound (self, CHAN_WEAPON, "weapons/energy.wav", 1, ATTN_NORM); //This  is from Quake Mechs, get the sound out of PAK or make yer own

missile = spawn ();
missile.owner = self;
missile.movetype = MOVETYPE_FLYMISSILE;
missile.solid = SOLID_BBOX;
missile.classname = "energybeam";

// set missile speed 
makevectors (self.v_angle);
missile.velocity = aim(self, 2000);
missile.velocity = missile.velocity * 2000;
missile.angles = vectoangles(missile.velocity);

missile.touch = energy_touch;

//Particles 
missile.nextthink = time + 0.01;
missile.think = EnergyThink; 
setorigin (missile, self.origin + v_forward*8 + v_right*25 +'0 0 18'); //This makes it shoot out from player's right shoulder, we made the view higher. Adapt to your own liking
};
And that's it! A neato energy weapon that will devestate anything that moves!






Tutorial html coding by Achilles.