Created By: | Smoke2Much
eMail | smoke2much@Geocities.com
Difficulty Scale | Medium

| Step 1 It's Cluster Bomb Time !!!! Find the gap between the end of the lightning damage code and the start of the GrenadeExplode code in weapons.qc. Now you need to create the following in that gap:-
    void() ClusterExplode =
                     {

                      T_RadiusDamage (self, self.owner, 60, world);                 //Damage Variables, the one to notice is the third...
                                                                                                         //...which only does 60 damage
                      WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);     //Create temporary entity
                      WriteByte (MSG_BROADCAST, TE_EXPLOSION);         //Tell engine that temp entity is an explosion
                      WriteCoord (MSG_BROADCAST, self.origin_x);              //x coordinate of explosion
                      WriteCoord (MSG_BROADCAST, self.origin_y);              //y coordinate of explosion
                      WriteCoord (MSG_BROADCAST, self.origin_z);              //z coordinate of explosion

                           BecomeExplosion ();                                                     //Create explosion
                           };
                   void() GrenadeExplode =
                           {
                           local float cluster=0;                                                  //create a variable called cluster that equals zero
                           local entity missile;                                                   //create an entity called missile

                           while (cluster < 5)                                                     //while cluster is less than 5
                           {
                       cluster=cluster+1;                                                       //add one to cluster
                           missile = spawn ();                                                 //spawn a missile
                           missile.owner = self;                                               //missiles owner is player
                           missile.movetype = MOVETYPE_BOUNCE;             //the missile will bounce
                           missile.solid = SOLID_BBOX;                                 //the missile IS solid
                           missile.classname = "grenade";                              //if someone is killed by this then they were killed by a grenade

                   // set missile speed

                       missile.velocity_z = 500;                                           //missiles upward speed=500
                           missile.velocity_x = -100 + (random() * 200);             //missiles x and y velocitys...
                           missile.velocity_y = -100 + (random() * 200);             //are randomish
                           missile.avelocity = '300 300 300';                                  //missiles rotating velocity
                           missile.angles = vectoangles(missile.velocity);         //errrmmmm.  Don't know but it spins the grenade

                   // set missile duration
                           missile.nextthink = time + 1.5;                             //Time before clusters go off
                           missile.think = ClusterExplode;                             //Where to go after time's up
                           missile.touch = ClusterExplode;                             //If touched then explode
                           setmodel (missile, "progs/grenade.mdl");                //Missile model
                           setsize (missile, '0 0 0', '0 0 0');                            //Missile model size
                           setorigin (missile, self.origin);                                   //Where the missile will appear
                           }                                                                       //End of while loop
                           T_RadiusDamage (self, self.owner, 20, world);           //This code and below destroys
                                                                                                           //The original grenade in a small explosion
                           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() GrenadeExplode =
    {
    	T_RadiusDamage (self, self.owner, 120, world);

    	WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
    	WriteByte (MSG_BROADCAST, TE_EXPLOSION);					// Delete everything in BLUE!!!
    	WriteCoord (MSG_BROADCAST, self.origin_x);
    	WriteCoord (MSG_BROADCAST, self.origin_y);
    	WriteCoord (MSG_BROADCAST, self.origin_z);

    	BecomeExplosion ();
    };

| Step 3 That's the long boring part done. Now DELETE (!!!) the section called = GrenadeTouch. Final section now. Editing the section called W_FireGrenade. Simply change the following:-
                   self.currentammo = self.ammo_rockets = self.ammo_rockets - 1;  //Change the 1 to be a 3
                                                                                                                 //This means that each cluster bomb will cost 3 rockets

                   missile.touch = GrenadeTouch;                                           //change the GrenadeTouch to read GrenadeExplode so that
                                                                                                              //the bomb explodes if touched

| Step 4 And that's it... Compile it, and load it up the usual way. Try using the grenade launcher now !! (Funn as hell :)