BVC VORTEX

uses reg nail gun animation

/*
===========================================================
Nate's #4 Random Psi Fire

===========================================================
*/

void (entity missile) T_RocketThink = {

   local vector dir;
   local float rand;

   do {

      makevectors (angle2);
      self.velocity = veloc;
      self.angles = angle;
      var1 = (var1 + TRUE);
      var1 = FALSE;

   } while ( FALSE );
   waver_timer = (waver_timer + TRUE);
   if ( (waver_timer < MOVETYPE_WALK) ) {

      rand = vrandom ();
      if ( (rand > MOVETYPE_FLYMISSILE) ) {

         dir = (angle2 + '10.000 -70.000 0.000');

      } else {

         if ( (rand > FL_CLIENT) ) {

            dir = (angle2 + '5.000 5.000 0.000');

         } else {

            if ( (rand > MOVETYPE_PUSH) ) {

               dir = (angle2 + '-30.000 10.000 0.000');

            } else {

               if ( (rand > MOVETYPE_TOSS) ) {

                  dir = (angle2 + '-5.000 -15.000 0.000');

               } else {

                  if ( (rand > MOVETYPE_FLY) ) {

                     dir = (angle2 + '0.000 27.000 0.000');

                  } else {

                     if ( (rand > MOVETYPE_STEP) ) {

                        dir = (angle2 + '-13.000 12.000 0.000');

                     } else {

                        if ( (rand > MOVETYPE_WALK) ) {

                           dir = (angle2 + '10.000 -3.000 0.000');

                        } else {

                           if ( (rand > FL_SWIM) ) {

                              dir = (angle2 + '-1.000 8.000 0.000');

                           } else {

                              if ( (rand > TRUE) ) {

                                 dir = (angle2 + '32.000 11.000 0.000');

                              } else {

                                 dir = (angle2 + '5.000 13.000 0.000');

                              }

                           }

                        }

                     }

                  }

               }

            }

         }

      }
      makevectors (dir);
      self.velocity = aim (self,1000.000);
      self.velocity = (self.velocity * 1000.000);
      veloc = veloc;
      self.velocity = (self.velocity + veloc);
      self.angles = angle;
      self.nextthink = time;
      self.think = T_RocketThink;

   } else {

      if ( (waver_timer > CONTENT_SOLID) ) {

         rand = vrandom ();
         if ( (rand > MOVETYPE_FLYMISSILE) ) {

            dir = (angle2 + '-5.000 23.000 0.000');

         } else {

            if ( (rand > FL_CLIENT) ) {

               dir = (angle2 + '-12.000 -8.000 0.000');

            } else {

               if ( (rand > MOVETYPE_PUSH) ) {

                  dir = (angle2 + '6.000 -9.000 0.000');

               } else {

                  if ( (rand > MOVETYPE_TOSS) ) {

                     dir = (angle2 + '5.000 -5.000 0.000');

                  } else {

                     if ( (rand > MOVETYPE_FLY) ) {

                        dir = (angle2 + '2.000 7.000 0.000');

                     } else {

                        if ( (rand > MOVETYPE_STEP) ) {

                           dir = (angle2 + '9.000 -1.000 0.000');

                        } else {

                           if ( (rand > MOVETYPE_WALK) ) {

                              dir = (angle2 + '5.000 -2.000 0.000');

                           } else {

                              if ( (rand > FL_SWIM) ) {

                                 dir = (angle2 + VEC_ORIGIN);

                              } else {

                                 if ( (rand > TRUE) ) {

                                    dir = (angle2 + '7.000 4.000 0.000');

                                 } else {

                                    dir = (angle2 + '9.000 42.000 0.000');

                                 }

                              }

                           }

                        }

                     }

                  }

               }

            }

         }
         waver_timer = (waver_timer + CONTENT_SOLID);
         makevectors (dir);
         self.velocity = aim (self,1000.000);
         self.velocity = (self.velocity * 1000.000);
         veloc = veloc;
         self.velocity = (self.velocity + veloc);
         self.angles = angle;
         self.nextthink = time;
         self.think = T_RocketThink;

      } else {

         waver_timer = (waver_timer + FL_SWIM);

      }

   }

};



void (float ox) Nate_FireSpikes = {

   local entity missile;
   local entity missile2;
   local entity missile3;
   local entity mpuff;

   var1 = FALSE;
   if ( ((self.ammo_nails >= 2.000) && (self.weapon == IT_SUPER_NAILGUN)) ) {

      W_FireSuperSpikes ();
      return ;

   }
   if ( (self.ammo_nails < 1.000) ) {

      self.weapon = W_BestWeapon ();
      W_SetCurrentAmmo ();
      return ;

   }
   self.ammo_nails = (self.ammo_nails - FL_SWIM);
   self.currentammo = (self.ammo_nails - FL_SWIM);
   sound (self,CHAN_WEAPON,"weapons/sgun1.wav",TRUE,ATTN_NORM);
   self.punchangle_x = CONTENT_SOLID;
   missile = spawn ();
   missile2 = spawn ();
   missile3 = spawn ();
   missile.owner = self;
   missile2.owner = self;
   missile3.owner = self;
   missile.movetype = MOVETYPE_FLYMISSILE;
   missile2.movetype = MOVETYPE_FLYMISSILE;
   missile3.movetype = MOVETYPE_FLYMISSILE;
   missile.solid = SOLID_BBOX;
   missile2.solid = SOLID_BBOX;
   missile3.solid = SOLID_BBOX;
   makevectors (self.v_angle);
   missile.velocity = aim (self,1000.000);
   missile2.velocity = aim (self,1000.000);
   missile3.velocity = aim (self,1000.000);
   missile.velocity = (missile.velocity * 1000.000);
   missile2.velocity = (missile2.velocity * 1000.000);
   missile3.velocity = (missile2.velocity * 1000.000);
   missile.angles = vectoangles (missile.velocity);
   missile2.angles = vectoangles (missile2.velocity);
   missile3.angles = vectoangles (missile2.velocity);
   angle = missile.angles;
   veloc = missile.velocity;
   angle2 = self.v_angle;
   missile.touch = superspike_touch;
   missile2.touch = superspike_touch;
   missile3.touch = superspike_touch;
   missile.nextthink = time;
   missile.think = T_RocketThink;
   missile2.nextthink = time;
   missile2.think = T_RocketThink;
   missile3.nextthink = time;
   missile3.think = T_RocketThink;
   setmodel (missile,"progs/k_spike.mdl");
   setmodel (missile2,"progs/k_spike.mdl");
   setmodel (missile3,"progs/k_spike.mdl");
   setsize (missile,VEC_ORIGIN,VEC_ORIGIN);
   setsize (missile2,VEC_ORIGIN,VEC_ORIGIN);
   setsize (missile3,VEC_ORIGIN,VEC_ORIGIN);
   setorigin (missile,((self.origin + (v_forward * FL_CLIENT)) + '-4.000 0.000 16.000'));
   setorigin (missile2,((self.origin + (v_forward * FL_CLIENT)) + '4.000 0.000 16.000'));
   setorigin (missile3,((self.origin + (v_forward * FL_CLIENT)) + '0.000 0.000 20.000'));

};
//=====================================================================


In this part for Q2 Vortex

void () W_Attack = {

use:  nate_rocket1 ();
/*
=====================================================
Nate's Number #5 Trail explosions

=====================================================
*/
void () NateTouch = {

   local float damg;

   if ( (other == self.owner) ) {

      return ;

   }
   if ( (pointcontents (self.origin) == CONTENT_SKY) ) {

      remove (self);
      return ;

   }
   damg = (100.000 + (random () * 20.000));
   if ( other.health ) {

      if ( (other.classname == "monster_shambler") ) {

         damg = (damg * 0.500);

      }
      T_Damage (other,self,self.owner,damg);

   }
   T_RadiusDamage (self,self.owner,120.000,other);
   sound (self, CHAN_WEAPON, "weapons/r_exp3.wav", 1, ATTN_NORM);
   self.origin = (self.origin - (8.000 * normalize (self.velocity)));
//   WriteByte (MSG_BROADCAST,SVC_TEMPENTITY);
//   WriteByte (MSG_BROADCAST,TE_EXPLOSION);
//   WriteCoord (MSG_BROADCAST,self.origin_x);
//   WriteCoord (MSG_BROADCAST,self.origin_y);
//   WriteCoord (MSG_BROADCAST,self.origin_z);
   BecomeExplosion ();

};


void () Nateframe1 = {
 
   local entity missile;
   local entity mpuff;

   self.ammo_nails = (self.ammo_nails - 1.000);
   self.currentammo = (self.ammo_nails - 1.000);
   sound (self,CHAN_WEAPON,"weapons/sgun1.wav",1.000,ATTN_NORM);
   self.punchangle_x = -2.000;
   missile = spawn ();
   missile.owner = self;
   missile.movetype = MOVETYPE_FLYMISSILE;
   missile.solid = SOLID_BBOX;
   missile.classname = "missile";
   makevectors ((self.v_angle));
   missile.velocity = aim (self,1000.000);
   missile.velocity = '0 0 -100';
   missile.angles = vectoangles (missile.velocity);
   missile.touch = NateTouch;
   missile.nextthink = (time + 5);
   missile.think = SUB_Remove;
   setmodel (missile,"progs/missile.mdl");
   setsize (missile,'0.000 0.000 0.000','0.000 0.000 0.000');
   setorigin (missile,((self.origin + (v_forward * 200.000)) + '0.000 0.000 30.000'));
};

void () Nateframe2 = {
 
   local entity missile;
   local entity mpuff;


   sound (self,CHAN_WEAPON,"weapons/sgun1.wav",1.000,ATTN_NORM);
   self.punchangle_x = -2.000;
   missile = spawn ();
   missile.owner = self;
   missile.movetype = MOVETYPE_FLYMISSILE;
   missile.solid = SOLID_BBOX;
   missile.classname = "missile";
   makevectors ((self.v_angle));
   missile.velocity = aim (self,1000.000);
   missile.velocity = '0 0 -100';
   missile.angles = vectoangles (missile.velocity);
   missile.touch = NateTouch;
   missile.nextthink = (time + 5);
   missile.think = SUB_Remove;
   setmodel (missile,"progs/missile.mdl");
   setsize (missile,'0.000 0.000 0.000','0.000 0.000 0.000');
   setorigin (missile,((self.origin + (v_forward * 300.000)) + '0.000 0.000 30.000'));
};

void () Nateframe3 = {
 
   local entity missile;
   local entity mpuff;


   sound (self,CHAN_WEAPON,"weapons/sgun1.wav",1.000,ATTN_NORM);
   self.punchangle_x = -2.000;
   missile = spawn ();
   missile.owner = self;
   missile.movetype = MOVETYPE_FLYMISSILE;
   missile.solid = SOLID_BBOX;
   missile.classname = "missile";
   makevectors ((self.v_angle));
   missile.velocity = aim (self,1000.000);
   missile.velocity = '0 0 -100';
   missile.angles = vectoangles (missile.velocity);
   missile.touch = NateTouch;
   missile.nextthink = (time + 5);
   missile.think = SUB_Remove;
   setmodel (missile,"progs/missile.mdl");
   setsize (missile,'0.000 0.000 0.000','0.000 0.000 0.000');
   setorigin (missile,((self.origin + (v_forward * 400.000)) + '0.000 0.000 30.000'));
};

void () Nateframe4 = {
 
   local entity missile;
   local entity mpuff;


   sound (self,CHAN_WEAPON,"weapons/sgun1.wav",1.000,ATTN_NORM);
   self.punchangle_x = -2.000;
   missile = spawn ();
   missile.owner = self;
   missile.movetype = MOVETYPE_FLYMISSILE;
   missile.solid = SOLID_BBOX;
   missile.classname = "missile";
   makevectors ((self.v_angle));
   missile.velocity = aim (self,1000.000);
   missile.velocity = '0 0 -100';
   missile.angles = vectoangles (missile.velocity);
   missile.touch = NateTouch;
   missile.nextthink = (time + 5);
   missile.think = SUB_Remove;
   setmodel (missile,"progs/missile.mdl");
   setsize (missile,'0.000 0.000 0.000','0.000 0.000 0.000');
   setorigin (missile,((self.origin + (v_forward * 500.000)) + '0.000 0.000 30.000'));
};


void () nate_rocket1 = [ 107.000, nate_rocket2 ] {

   Nateframe1 ();
   self.weaponframe = 1.000;
   self.effects = (self.effects | EF_MUZZLEFLASH);
   self.attack_finished = (time + 0.600);
};

void () nate_rocket2 = [ 108.000, nate_rocket3 ] {

   Nateframe2 ();
   self.weaponframe = 2.000;
   self.attack_finished = (time + 0.600);
};

void () nate_rocket3 = [ 109.000, nate_rocket4 ] {

   Nateframe3 ();
   self.weaponframe = 3.000;
   self.attack_finished = (time + 0.600); 
};

void () nate_rocket4 = [ 110.000, nate_rocket5 ] {

   Nateframe4 ();
   self.weaponframe = 4.000;
   self.attack_finished = (time + 0.600);
};

void () nate_rocket5 = [ 111.000, nate_rocket6 ] {

   self.weaponframe = 5.000;

};

void () nate_rocket6 = [ 112.000, player_run ] {

   self.weaponframe = 6.000;

};
//==================================================================

Ok now the proton storm has its own qc file you'll have to use this code for it:

void () W_Attack = {

W_Fire_Storm ();

//==========================================

you will have to use this code
for the flame thrower

player_flame1();


/*
===========================
flame thrower
===========================
*/

void(vector org) Flame_Burn =
{
     local entity flame;

     flame = spawn ();
     flame.owner = self;
     flame.classname = "fire";
     flame.movetype = MOVETYPE_FLYMISSILE;                
     flame.solid = SOLID_NOT;                
     flame.origin = org;                
     flame.velocity = '0 0 75';                
     setmodel (flame, "progs/flame2.mdl");                
     setsize (flame, '0 0 0', '0 0 0');                
     flame.nextthink = time + 0.01;                
     flame.think = s_explode1;                                
};

void() Flame_Think = // New...
{                   
     local float r;                      

     if (self.enemy.waterlevel == 3 || self.enemy.health <= 0)                      
     {                      
                                   // Make hiss sound...
        BecomeExplosion ();                           
        return;                           
     }                      
     self.origin = self.enemy.origin + '0 0 25';                      
     if (r < 0.3)                       // how often they get hurt/scream...
          T_Damage (self.enemy, self, self.owner, 1);                          // how much it burns...
     self.nextthink = time + 0.01;                      
                   // NOTE: you must keep the .nextthink fast, otherwise the flame won't keepup with player.
};                   

void(vector org, entity e) Flame_Onfire =                    // New...
{                   
     local entity flame;                      

     flame = spawn ();                      
     flame.owner = self.owner;                      
     flame.enemy = e;                      
     flame.classname = "fire";                      
     flame.movetype = MOVETYPE_NONE;                      
     flame.solid = SOLID_NOT;                      
     flame.origin = org;                      
     flame.velocity = '0 0 0';                      
     setmodel (flame, "progs/flame2.mdl");                                   // Don't forget to precache this
     setsize (flame, '0 0 -15', '0 0 0');                      
     flame.nextthink = time + 0.01;                      
     flame.think = Flame_Think;                      
     flame.effects = flame.effects | EF_DIMLIGHT;                      
 };                  

void() Flame_Touch = // remake of old Flame_Touch... Re-place the old one.                   
{                   
    local float r;                       
    local vector org;                       

    if (other.takedamage)                       
    {                       
         org = other.origin;                          
         org_z = self.origin_z;                          
         Flame_Burn (org);                          
         T_Damage (other, self, self.owner, 8);                          
         remove (self);                          
         r = random ();                          
         if (r < 0.2)// how often they get on-fire...                          
         {                          
             if ((other.classname == "player"))                              
             {                              
                                                   
                 centerprint (other,"You are on fire!\n- Find WATER fast -");                                  stuffcmd (other,"bf\n");
             }                              
             Flame_Onfire (org, other);                              
         }                          
    }                       
};                   

void() Cable_Fire =
{             
    local entity flame;                 
                     
    self.currentammo = self.ammo_nails = self.ammo_nails - 0.01;                 

    sound (self, CHAN_WEAPON, "hknight/hit.wav", 1, ATTN_NORM);                      // Don't forget to precache this
    flame = spawn ();                 
    flame.owner = self;                 
    flame.movetype = MOVETYPE_FLYMISSILE;                 
    flame.solid = SOLID_BBOX;                 
    flame.classname = "fire";                 
    makevectors (self.v_angle);                 
    flame.velocity = aim (self, 100000);                 
    flame.velocity = flame.velocity * 500;                 
    flame.touch = Flame_Touch;                 
    setmodel (flame, "progs/flame2.mdl");                 
    setsize (flame, '0 0 0', '0 0 0');                 
    setorigin (flame, self.origin + (v_forward * 16) + '0 0 16');                 
    flame.think = s_explode1;                 
    flame.nextthink = time + 0.25;                     // how far away from barrel before it flames up
                     // W_Attack, self.attack_finished - Would control how how close together they come out
};



void () player_flame1 = [ 107.000, player_flame2 ] {

   self.weaponframe = 1.000;



};

void () player_flame2 = [ 108.000, player_flame3 ] {
   
   self.weaponframe = 2.000;
   self.effects = (self.effects | EF_MUZZLEFLASH);
   Cable_Fire ();   

};

void () player_flame3 = [ 109.000, player_flame4 ] {

   self.weaponframe = 3.000;
   self.effects = (self.effects | EF_MUZZLEFLASH);
   Cable_Fire ();   

 
};

void () player_flame4 = [ 110.000, player_flame5 ] {

   self.weaponframe = 4.000;
   self.effects = (self.effects | EF_MUZZLEFLASH);
   Cable_Fire ();   
   self.attack_finished = (time + 0.600);
 
};

void () player_flame5 = [ 111.000, player_flame6 ] {

   self.weaponframe = 5.000;
   self.effects = (self.effects | EF_MUZZLEFLASH);
   Cable_Fire ();   

 
};

void () player_flame6 = [ 112.000, player_run ] {

   self.weaponframe = 6.000;


 
};

//=========================================================


Uses normal GL fire setup


/*
==========================================
Cable's #6 Plasma Grenades


==========================================
*/
void (vector org, vector dir) Cable_spike;

void () s_explde1 = [ 0.000, s_explde2 ] {


};

void () s_explde2 = [ 1.000, s_explde3 ] {


};

void () s_explde3 = [ 2.000, SUB_Remove ] {


};

void () BecomeExplosion2 = {

   self.movetype = MOVETYPE_NONE;
   self.velocity = '0.000 0.000 0.000';
   self.touch = SUB_Null;
   setmodel (self,"progs/s_explde.spr"); // we use a mdl for our main explosions so this is only for Cable
   self.solid = SOLID_NOT;               // uses the same name as the reg one prob have to change this one 
   s_explde1 ();                         // we'll send you the one we used

};

void () CableGExplode = {

   T_RadiusDamage (self,self.owner,120.000,world);
   sound (self, CHAN_WEAPON, "weapons/r_exp3.wav", 1, ATTN_NORM);   
//   WriteByte (MSG_BROADCAST,SVC_TEMPENTITY);
//   WriteByte (MSG_BROADCAST,TE_EXPLOSION);
//   WriteCoord (MSG_BROADCAST,self.origin_x);
//   WriteCoord (MSG_BROADCAST,self.origin_y);
//   WriteCoord (MSG_BROADCAST,self.origin_z);
   BecomeExplosion2 ();

};

//Cable new gun
void (vector org, vector dir) Cable_spike = {

   newmis = spawn ();
   newmis.owner = self;
   newmis.movetype = MOVETYPE_FLYMISSILE;
   newmis.solid = SOLID_BBOX;
   newmis.angles = vectoangles (dir);
   newmis.touch = CableGExplode;
   newmis.classname = "spike";
   newmis.think = SUB_Remove;
   newmis.nextthink = (time + 6.000);
   setmodel (newmis,"progs/laser.mdl");
   setsize (newmis,VEC_ORIGIN,VEC_ORIGIN);
   setorigin (newmis,org);
   newmis.velocity = (dir * 1000.000);

};//Cable new gun end


void () CableNBExplode = {

   local vector dir;
   local float counter;

   while ( (counter < 50.000) ) {

      counter = (counter + 1.000);
      dir_x = crandom ();
      dir_y = crandom ();
      dir_z = crandom ();
      Cable_spike (self.origin,dir);

   }
   CableGExplode ();
   return ;

};


void () CableGL = {

   local entity missile;
   local entity mpuff;

   self.ammo_rockets = (self.ammo_rockets - 1.000);
   self.currentammo = (self.ammo_rockets - 1.000);
   sound (self,CHAN_WEAPON,"weapons/grenade.wav",1.000,ATTN_NORM);
   self.punchangle_x = -2.000;
   missile = spawn ();
   missile.owner = self;
   missile.movetype = MOVETYPE_BOUNCE;
   missile.solid = SOLID_BBOX;
   missile.classname = "grenade";
   makevectors (self.v_angle);
   if ( self.v_angle_x ) {

      missile.velocity = ((((v_forward * 600.000) + (v_up * 200.000)) + ((crandom () * v_right) * 10.000)) + ((crandom () * v_up) * 10.000));

   } else {

      missile.velocity = aim (self,10000.000);
      missile.velocity = (missile.velocity * 600.000);
      missile.velocity_z = 200.000;

   }
   missile.avelocity = '300.000 300.000 300.000';
   missile.angles = vectoangles (missile.velocity);
   missile.touch = GrenadeTouch;
   missile.nextthink = (time + 3.500);
   missile.think = CableNBExplode;
   setmodel (missile,"progs/grenade.mdl");
   setsize (missile,'0.000 0.000 0.000','0.000 0.000 0.000');
   setorigin (missile,self.origin);

};
//=============================================================================

Cable plasma gun  has its own qc

and you will have to use this for the fireing

plasma_attack1 ();


I dont have the code for the freeze gun

you'll have to get it off of ftp.cdrom.com

I hope i have eveything here if not tell me and I will get it
to you A.s.a.p.

you will need the mdls and you will have to precache them

Have fun	 

