Inside3D tutorials.
Created By: | Pob the Impaler (Paul Johnstone) |
eMail: | itac025@lauder.ac.uk |
Difficulty Scale: | Medium |
(I hope you didn't skip the above stuff, or this ain't gonna work!) Open up botfight.qc Find the function W_BestBotWeaponfloat () W_BestBotWeapon = { Cut & Paste this code over the WHOLE function: //===========Begin Code==========// float () W_BestBotWeapon = { local float it; local float rng; local float wlevel; it = self.items; rng = botrange (self.enemy); if ( (rng != RANGE_MELEE) ) { if ( ((self.ammo_rockets >= TRUE) && (it & IT_ROCKET_LAUNCHER)) ) { return ( IT_ROCKET_LAUNCHER ); } } if ( ((self.ammo_cells >= TRUE) && (it & IT_LIGHTNING)) ) { if ( ((rng == RANGE_MELEE) || (rng == RANGE_NEAR)) ) { wlevel = CheckWaterLevel (); if ( (wlevel < FL_SWIM) ) { return ( IT_LIGHTNING ); } if ( (self.items & IT_INVULNERABILITY) ) { return ( IT_LIGHTNING ); } } } if ( ((self.ammo_cells >= 1) && (it & IT_PLASMA_GUN))){ // Notice this line! return ( IT_PLASMA_GUN ); } if ( ((self.ammo_nails >= FL_SWIM) && (it & IT_SUPER_NAILGUN)) ) { return ( IT_SUPER_NAILGUN ); } if ( (rng == RANGE_NEAR) ) { if ( ((self.ammo_rockets >= TRUE) && (it & IT_GRENADE_LAUNCHER)) ) { if ( (self.enemy.origin_z < (self.origin_z + 175.000)) ) { return ( IT_GRENADE_LAUNCHER ); } } } if ( ((rng == RANGE_NEAR) || (rng == RANGE_MELEE)) ) { if ( ((self.ammo_shells >= FL_SWIM) && (it & IT_SUPER_SHOTGUN)) ) { return ( IT_SUPER_SHOTGUN ); } } if ( ((self.ammo_nails >= TRUE) && (it & IT_NAILGUN)) ) { return ( IT_NAILGUN ); } if ( ((self.ammo_shells >= TRUE) && (it & IT_SHOTGUN)) ) { return ( IT_SHOTGUN ); } return ( IT_AXE ); }; //=================End Code==========//
Find the function W_BestHeldWeaponfloat () W_BestHeldWeapon = { Cut & Paste the following code over the WHOLE function. //===========Begin Code==========// float () W_BestHeldWeapon = { local float it; local float wlevel; it = self.items; if ( ((self.ammo_rockets >= TRUE) && (it & IT_ROCKET_LAUNCHER)) ) { return ( IT_ROCKET_LAUNCHER ); } if ( ((self.ammo_cells >= TRUE) && (it & IT_LIGHTNING)) ) { wlevel = CheckWaterLevel (); if ( (wlevel < FL_SWIM) ) { return ( IT_LIGHTNING ); } if ( (self.items & IT_INVULNERABILITY) ) { return ( IT_LIGHTNING ); } } if ( ((self.ammo_cells >= 1) && (it & IT_PLASMA_GUN)) ) { return ( IT_PLASMA_GUN ); } if ( ((self.ammo_nails >= FL_SWIM) && (it & IT_SUPER_NAILGUN)) ) { return ( IT_SUPER_NAILGUN ); } if ( ((self.ammo_rockets >= TRUE) && (it & IT_GRENADE_LAUNCHER)) ) { if ( (self.enemy.origin_z < (self.origin_z + 175.000)) ) { return ( IT_GRENADE_LAUNCHER ); } } if ( ((self.ammo_shells >= FL_SWIM) && (it & IT_SUPER_SHOTGUN)) ) { return ( IT_SUPER_SHOTGUN ); } if ( ((self.ammo_nails >= TRUE) && (it & IT_NAILGUN)) ) { return ( IT_NAILGUN ); } if ( ((self.ammo_shells >= TRUE) && (it & IT_SHOTGUN)) ) { return ( IT_SHOTGUN ); } return ( IT_AXE ); }; //=================End Code==========//
Step 3
Find the lines of code which read: void () bot_axe1; void () bot_axeb1; void () bot_axec1; void () bot_axed1; void () bot_shot1; void () bot_nail1; Under this add: //===========Begin Code==========// void () bot_plasma1; // plasma frames //=================End Code==========//
Step 4
Find the function W_BotAttack()void () W_BotAttack = { Replace the whole function with this: //===========Begin Code==========// void () W_BotAttack = { local float r; local float addt; if ( !W_CheckNoAmmo () ) { return ; } if ( (time < self.attack_finished) ) { return ; } addt = FALSE; if ( (self.skil < MOVETYPE_WALK) ) { addt = (((MOVETYPE_WALK - self.skil) * random ()) * 0.350); } if ( (self.skil < TRUE) ) { addt = (addt + (random () * 0.300)); } makevectors (self.v_angle); self.show_hostile = (time + TRUE); if ( (self.weapon == IT_AXE) ) { sound (self,CHAN_WEAPON,"weapons/ax1.wav",TRUE,ATTN_NORM); r = random (); if ( (r < 0.250) ) { bot_axe1 (); } else { if ( (r < 0.500) ) { bot_axeb1 (); } else { if ( (r < 0.750) ) { bot_axec1 (); } else { bot_axed1 (); } } } self.attack_finished = ((time + 0.500) + addt); } else { if ( (self.weapon == IT_SHOTGUN) ) { bot_shot1 (); W_FireShotgun (); self.attack_finished = ((time + 0.500) + addt); } else { if ( (self.weapon == IT_SUPER_SHOTGUN) ) { bot_shot1 (); W_FireSuperShotgun (); self.attack_finished = ((time + 0.700) + addt); } else { if ( (self.weapon == IT_NAILGUN) ) { self.think = bot_nail1; } else { if ( (self.weapon == IT_PLASMA_GUN)) { self.think = bot_plasma1; // FIRE plasma gun plasma_firebolt(); self.attack_finished = ((time + 0.001) + addt); } else { if ( (self.weapon == IT_SUPER_NAILGUN) ) { self.think = bot_nail1; } else { if ( (self.weapon == IT_GRENADE_LAUNCHER) ) { bot_rocket1 (); W_FireGrenade (); self.attack_finished = ((time + 0.600) + addt); } else { if ( (self.weapon == IT_ROCKET_LAUNCHER) ) { bot_rocket1 (); W_FireRocket (); self.attack_finished = ((time + 0.800) + addt); } else { if ( (self.weapon == IT_LIGHTNING) ) { self.think = bot_light1; self.attack_finished = (time + 0.100); sound (self,CHAN_AUTO,"weapons/lstart.wav",TRUE,ATTN_NORM); } } } } } // added for plasma } } } } }; //=================End Code==========//
Step 5
Open Botit_th.qc Find the function supernailweight float (entity e) supernailweight = { BENEATH this function add: //===========Begin Code==========// float (entity e) plasmaweight = { local float weight; weight = (WANT + TRUE); if ( !(self.items & IT_PLASMA_GUN) ) { weight = (MUST_HAVE - TRUE); } return ( weight ); }; //=================End Code==========// Save and close botit_th.qc
Step 6
Open client.qc Find the function ClientObituary()void (entity targ, entity attacker) ClientObituary = { Find the lines: if ( (rnum == IT_SUPER_NAILGUN) ) { deathstring = " was punctured by "; deathstring2 = "\n"; } UNDER this add: //===========Begin Code==========// if ( (rnum == IT_PLASMA_GUN) ) { deathstring = " sucks a load of "; deathstring2 = "'s Plasma\n"; } //=================End Code==========// Save and close client.qc
Step 7
Open up Defs.qc At the bottom of defs.qc add: //===========Begin Code==========// float IT_PLASMA_GUN = 128.000; //=================End Code==========// save and close defs.qc
Step 8
Open dmbot.qc Find the function bot_rebound6()void () bot_rebound6 = [ 112.000, bot_chase ] { Under this add: //===========Begin Code==========// void () bot_plasma1 = [ 103.000, bot_plasma2 ] { self.effects = (self.effects | EF_MUZZLEFLASH); ai_botnailcharge (BOTSPEED); BotPostThink (); }; void () bot_plasma2 = [ 104.000, bot_run ] { self.effects = (self.effects | EF_MUZZLEFLASH); SuperDamageSound (); plasma_firebolt(); ai_botnailcharge (BOTSPEED); BotPostThink (); }; //=================End Code==========// save and close dmbot.qc
Step 9
Open items.qc Find the function RankForWeaponfloat (float w) RankForWeapon = { Copy & Paste the following code over the WHOLE function: //===========Begin Code==========// float (float w) RankForWeapon = { if ( (w == IT_LIGHTNING) ) { return ( TRUE ); } if ( (w == IT_ROCKET_LAUNCHER) ) { return ( FL_SWIM ); } if ( (w == IT_PLASMA_GUN) ) { return (3); } if ( (w == IT_SUPER_NAILGUN) ) { return ( 4 ); } if ( (w == IT_GRENADE_LAUNCHER) ) { return ( 5 ); } if ( (w == IT_SUPER_SHOTGUN) ) { return ( 6 ); } if ( (w == IT_NAILGUN) ) { return ( 7 ); } return ( MOVETYPE_PUSH ); }; //=================End Code==========//
Step 10
Find the function weapon_touch()void () weapon_touch = { Replace the ENTIRE function with the following code: //===========Begin Code==========// void () weapon_touch = { local float hadammo; local float best; local float new; local float old; local entity stemp; local float leave; if ( (other.classname == "peeper") ) { return ; // remmed out for develpment } if ( !(other.flags & FL_CLIENT) ) { if ( (other.classname != "dmbot") ) { return ; } } stemp = self; self = other; if ( (self.classname == "player") ) { best = W_BestWeapon (); } self = stemp; if ( ((deathmatch == FL_SWIM) || coop) ) { leave = TRUE; } else { leave = FALSE; } if ( (self.classname == "weapon_nailgun") ) { if ( (leave && (other.items & IT_NAILGUN)) ) { return ; } hadammo = other.ammo_nails; new = IT_NAILGUN; other.ammo_nails = (other.ammo_nails + SVC_INTERMISSION); if ( other.movetarget.movetarget ) { cacheRoute (other.movetarget,other.movetarget.movetarget,FALSE,self); } } else { if ( (self.classname == "weapon_supernailgun") ) { if ( (leave && (other.items & IT_SUPER_NAILGUN)) ) { return ; } hadammo = other.ammo_rockets; new = IT_SUPER_NAILGUN; other.ammo_nails = (other.ammo_nails + SVC_INTERMISSION); if ( other.movetarget.movetarget ) { cacheRoute (other.movetarget,other.movetarget.movetarget,FALSE,self); } } else { if ( (self.classname == "weapon_supershotgun") ) { if ( (leave && (other.items & IT_SUPER_SHOTGUN)) ) { return ; } hadammo = other.ammo_rockets; new = IT_SUPER_SHOTGUN; other.ammo_shells = (other.ammo_shells + MOVETYPE_FLY); } else { if ( (self.classname == "weapon_rocketlauncher") ) { if ( (leave && (other.items & IT_ROCKET_LAUNCHER)) ) { return ; } hadammo = other.ammo_rockets; new = IT_ROCKET_LAUNCHER; other.ammo_rockets = (other.ammo_rockets + MOVETYPE_FLY); if ( other.movetarget.movetarget ) { cacheRoute (other.movetarget,other.movetarget.movetarget,FALSE,self); } } else { if ( (self.classname == "weapon_grenadelauncher") ) { if ( (leave && (other.items & IT_GRENADE_LAUNCHER)) ) { return ; } hadammo = other.ammo_rockets; new = IT_GRENADE_LAUNCHER; other.ammo_rockets = (other.ammo_rockets + MOVETYPE_FLY); if ( other.movetarget.movetarget ) { cacheRoute (other.movetarget,other.movetarget.movetarget,FALSE,self); } } else { if ( (self.classname == "weapon_lightning") ) { if ( (leave && (other.items & IT_LIGHTNING)) ) { return ; } hadammo = other.ammo_rockets; new = IT_LIGHTNING; other.ammo_cells = (other.ammo_cells + 15.000); if ( other.movetarget.movetarget ) { cacheRoute (other.movetarget,other.movetarget.movetarget,FALSE,self); } } else { ////// if ( (self.classname == "weapon_plasma") ) { if ( (leave && (other.items & IT_PLASMA_GUN)) ) { return ; } hadammo = other.ammo_rockets; new = IT_PLASMA_GUN; other.ammo_cells = (other.ammo_cells + 25); if ( other.movetarget.movetarget ) { cacheRoute (other.movetarget,other.movetarget.movetarget,FALSE,self); } } else { ////// objerror ("weapon_touch: unknown classname"); } } } } }// added for plasma gun } } if ( (other.classname == "player") ) { sprint (other,"ΩΟΥΗΟΤΤΘΕ"); // "You got the " sprint (other,self.netname); sprint (other,"\n"); } sound (other,CHAN_ITEM,"weapons/pkup.wav",TRUE,ATTN_NORM); if ( (other.classname == "player") ) { stuffcmd (other,"bf\n"); } bound_other_ammo (); old = other.items; other.items = (other.items | new); // self.weapon = new; stemp = self; self = other; if ( !deathmatch ) { self.weapon = new; } else { Deathmatch_Weapon (old,new); } W_SetCurrentAmmo (); self = stemp; if ( leave ) { return ; } self.model = string_null; self.solid = SOLID_NOT; if ( (deathmatch >= TRUE) ) { self.nextthink = (time + SVC_INTERMISSION); } self.think = SUB_regen; activator = other; SUB_UseTargets (); }; //=================End Code==========//
Step 11
Find the function weapon_nailgun()void () weapon_nailgun = { BENEATH this function add: //===========Begin Code==========// void () weapon_plasma = { precache_model ("progs/plasma.mdl"); setmodel (self,"progs/plasma.mdl"); self.classname == ("weapon_plasma"); self.weapon = MOVETYPE_WALK; self.netname = "Plasma Gun"; self.touch = weapon_touch; setsize (self,'-16.000 -16.000 0.000','16.000 16.000 56.000'); self.th_weight = plasmaweight; self.th_cache = cachelightning; self.th_update = updatelightning; StartItem (); }; //=================End Code==========// save and close items.qc
Step 12
Don't worry not too far to go now! :) Open weapons.qc Find the line: void (vector org, vector vel, float damage) SpawnBlood; under this add: //===========Begin Code==========// void() plasma_attack1; //=================End Code==========// |=========================================================|
Step 13
Step 13 Find the function W_Precachevoid () W_Precache = { at the top of this function add: //===========Begin Code==========// precache_model ("progs/v_plasma.mdl"); // plasma gun precache_model ("progs/s_plasma.spr"); // plasma precache_sound ("weapons/plasma.wav"); // plasma gun sound precache_sound ("weapons/plasexpl.wav"); // plasma sound //=================End Code==========//
Step 14
Find the function W_FireRocketvoid () W_FireRocket = { After this function add: //===========Begin Code==========// void() plasma_impact1 = [1, plasma_impact2] {}; void() plasma_impact2 = [2, plasma_impact3] {}; void() plasma_impact3 = [3, plasma_impact4] {}; void() plasma_impact4 = [4, plasma_impact5] {}; void() plasma_impact5 = [1, plasma_impact6] {}; void() plasma_impact6 = [5, SUB_Remove ] {}; /* ================== plasma_touch ================== */ float () CheckWaterLevel; void () plasma_touch = { local float rand; local float wlevel; // hit something that bleeds if (other.takedamage) { // direct hit on an entity spawn_touchblood (2); T_Damage (other, self, self.owner, 20); // Do 20 points of damage } local float pc; pc = pointcontents (self.origin); if ((pc == CONTENT_WATER) || (pc == CONTENT_SLIME) || (pc == CONTENT_LAVA)) { //sound (self, CHAN_WEAPON, "enforcer/enfstop.wav", 1, ATTN_NORM); T_RadiusDamage (self, self.owner, 60, world); // If hit someone underwater do BIG damage :> } sound (self, CHAN_WEAPON, "weapons/plasexpl.wav", 1, ATTN_NORM); self.nextthink = time + 0.1; self.think = plasma_impact1; self.touch = SUB_Null; self.velocity = '0 0 0'; }; /* ============ New plasma_firebolt ============ */ void () plasma_firebolt = { local entity missile; local entity mpuff; local vector bfwd; local vector dir; dir = aim (self, 1000); self.ammo_cells = (self.ammo_cells - TRUE); self.currentammo = (self.ammo_cells - TRUE); sound (self,CHAN_WEAPON,"weapons/plasma.wav",TRUE,ATTN_NORM); self.punchangle_x = -2; missile = spawn (); missile.owner = self; missile.movetype = MOVETYPE_FLYMISSILE; missile.solid = SOLID_BBOX; makevectors (self.v_angle); if ( (self.classname == "dmbot") ) { missile.velocity = botaim (); bfwd = botaim (); bfwd_z = FALSE; } else { missile.velocity = aim (self,1000.000); } missile.velocity = (missile.velocity * 1000.000); missile.angles = vectoangles (missile.velocity); missile.touch = plasma_touch; missile.nextthink = (time + 3); missile.think = SUB_Remove; setmodel (missile,"progs/s_plasma.spr"); setsize (missile,VEC_ORIGIN,VEC_ORIGIN); if ( (self.classname == "dmbot") ) { setorigin (missile,((self.origin + (bfwd * FL_CLIENT)) + '0.000 0.000 16.000')); } else { setorigin (missile,((self.origin + (v_forward * FL_CLIENT)) + '0.000 0.000 16.000')); } }; /* ================== plasma_attack ================== */ void () plasma_attack1 =[103.00, plasma_attack2 ] { if ( (self.ammo_cells < TRUE) ) { self.weapon = W_BestWeapon (); W_SetCurrentAmmo (); if ( (self.classname == "dmbot") ) { self.think = self.th_run; } return ; } 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(); plasma_firebolt (); self.attack_finished = time + 0.1; }; void() plasma_attack2 =[104.00, plasma_attack1 ] { 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(); plasma_firebolt (); self.attack_finished = time + 0.1; }; //=================End Code==========//
Step 15
Find W_SetCurrentAmmovoid() W_SetCurrentAmmo = replace the whole function with: //===========Begin Code==========// void() W_SetCurrentAmmo = { if ( (self.classname == "player") || (self.classname == "peeper") ) {// get out of any weapon firing states player_run (); } self.items = self.items - ( self.items & (IT_SHELLS | IT_NAILS | IT_ROCKETS | IT_CELLS) ); if (self.weapon == IT_AXE) { self.currentammo = 0; self.weaponmodel = "progs/v_axe.mdl"; self.weaponframe = 0; } else if (self.weapon == IT_SHOTGUN) { self.currentammo = self.ammo_shells; self.weaponmodel = "progs/v_shot.mdl"; self.weaponframe = 0; self.items = self.items | IT_SHELLS; } else if (self.weapon == IT_SUPER_SHOTGUN) { self.currentammo = self.ammo_shells; self.weaponmodel = "progs/v_shot2.mdl"; self.weaponframe = 0; self.items = self.items | IT_SHELLS; } else if (self.weapon == IT_NAILGUN) { self.currentammo = self.ammo_nails; self.weaponmodel = "progs/v_nail.mdl"; self.weaponframe = 0; self.items = self.items | IT_NAILS; } else if (self.weapon == IT_SUPER_NAILGUN) { self.currentammo = self.ammo_nails; self.weaponmodel = "progs/v_nail2.mdl"; self.weaponframe = 0; self.items = self.items | IT_NAILS; } else if (self.weapon == IT_GRENADE_LAUNCHER) { self.currentammo = self.ammo_rockets; self.weaponmodel = "progs/v_rock.mdl"; self.weaponframe = 0; self.items = self.items | IT_ROCKETS; } else if (self.weapon == IT_ROCKET_LAUNCHER) { self.currentammo = self.ammo_rockets; self.weaponmodel = "progs/v_rock2.mdl"; self.weaponframe = 0; self.items = self.items | IT_ROCKETS; } else if (self.weapon == IT_LIGHTNING) { self.currentammo = self.ammo_cells; self.weaponmodel = "progs/v_light.mdl"; self.weaponframe = 0; self.items = self.items | IT_CELLS; } else if ( (self.weapon == IT_PLASMA_GUN) ) { self.currentammo = self.ammo_cells; self.weaponmodel = "progs/v_plasma.mdl"; self.weaponframe = FALSE; self.items = (self.items | IT_CELLS); } else { self.currentammo = 0; self.weaponmodel = " "; self.weaponframe = 0; } // ### chase cam mod ### if ( (self.speed & CHSCAM_ON) ) { self.weaponmodel = ""; self.weaponframe = 0; } }; //=================End Code==========//
Step 16
Find the function W_Attackvoid () W_Attack = { Replace the whole function with: //===========Begin Code==========// void () W_Attack = { local float r; if ( !W_CheckNoAmmo () ) { return ; } makevectors (self.v_angle); self.show_hostile = (time + TRUE); signalnoise (self,self); if ( (self.weapon == IT_AXE) ) { sound (self,CHAN_WEAPON,"weapons/ax1.wav",TRUE,ATTN_NORM); r = random (); if ( (r < 0.250) ) { player_axe1 (); } else { if ( (r < 0.500) ) { player_axeb1 (); } else { if ( (r < 0.750) ) { player_axec1 (); } else { player_axed1 (); } } } self.attack_finished = (time + 0.500); } else { if ( (self.weapon == IT_SHOTGUN) ) { player_shot1 (); W_FireShotgun (); self.attack_finished = (time + 0.500); } else { if ( (self.weapon == IT_SUPER_SHOTGUN) ) { player_shot1 (); W_FireSuperShotgun (); self.attack_finished = (time + 0.700); } else { if ( (self.weapon == IT_NAILGUN) ) { player_nail1 (); } else { if ( (self.weapon == IT_SUPER_NAILGUN) ) { player_nail1 (); } else { if ( (self.weapon == IT_GRENADE_LAUNCHER) ) { player_rocket1 (); W_FireGrenade (); self.attack_finished = (time + 0.600); } else { if ( (self.weapon == IT_ROCKET_LAUNCHER) ) { player_rocket1 (); W_FireRocket (); self.attack_finished = (time + 0.800); } else if (self.weapon == IT_PLASMA_GUN) { plasma_attack1 (); self.attack_finished = time + 0.1; } else if ( (self.weapon == IT_LIGHTNING) ) { player_light1 (); self.attack_finished = (time + 0.100); sound (self,CHAN_AUTO,"weapons/lstart.wav",TRUE,ATTN_NORM); } } } } } } } }; //=================End Code==========//
Step 17
Find the function W_ChangeWeaponvoid () W_ChangeWeapon = { Replace the whole function with: //===========Begin Code==========// void () W_ChangeWeapon = { local float it; local float am; local float fl; it = self.items; am = FALSE; if ( (self.impulse == TRUE) ) { fl = IT_AXE; } else { if ( (self.impulse == FL_SWIM) ) { fl = IT_SHOTGUN; if ( (self.ammo_shells < TRUE) ) { am = TRUE; } } else { if ( (self.impulse == MOVETYPE_WALK) ) { fl = IT_SUPER_SHOTGUN; if ( (self.ammo_shells < FL_SWIM) ) { am = TRUE; } } else { if ( (self.impulse == MOVETYPE_STEP) ) { fl = IT_NAILGUN; if ( (self.ammo_nails < TRUE) ) { am = TRUE; } } else { if ( (self.impulse == MOVETYPE_FLY) ) { fl = IT_SUPER_NAILGUN; if ( (self.ammo_nails < FL_SWIM) ) { am = TRUE; } } else { if ( (self.impulse == MOVETYPE_TOSS) ) { fl = IT_GRENADE_LAUNCHER; if ( (self.ammo_rockets < TRUE) ) { am = TRUE; } } else { if ( (self.impulse == MOVETYPE_PUSH) ) { fl = IT_ROCKET_LAUNCHER; if ( (self.ammo_rockets < TRUE) ) { am = TRUE; } } else { if ( (self.impulse == FL_CLIENT) ) { fl = IT_LIGHTNING; if ( (self.ammo_cells < TRUE) ) { am = TRUE; } }else { if ( (self.impulse == 20) ) { fl = IT_PLASMA_GUN; if ( (self.ammo_cells < TRUE) ) { am = TRUE; } } } } } } } } } } self.impulse = FALSE; if ( !(self.items & fl) ) { sprint (self,"ΞΟΧΕΑΠΟΞ\n"); // "No Weapon" in nice gold letters return ; } if ( am ) { sprint (self,"ΞΟΤΕΞΟΥΗΘΑΝΝΟ\n"); // "Not enough ammo" in nice gold letters return ; } self.weapon = fl; W_SetCurrentAmmo (); }; //=================End Code==========//
Step 18
Now find the functionvoid () CycleWeaponCommand = { Replace the whole function with: //===========Begin Code==========// void () CycleWeaponCommand = { local float it; local float am; it = self.items; self.impulse = FALSE; while ( TRUE ) { am = FALSE; if ( (self.weapon == IT_PLASMA_GUN) ) { self.weapon = IT_AXE; } else { if ( (self.weapon == IT_AXE) ) { self.weapon = IT_SHOTGUN; if ( (self.ammo_shells < TRUE) ) { am = TRUE; } } else { if ( (self.weapon == IT_SHOTGUN) ) { self.weapon = IT_SUPER_SHOTGUN; if ( (self.ammo_shells < FL_SWIM) ) { am = TRUE; } } else { if ( (self.weapon == IT_SUPER_SHOTGUN) ) { self.weapon = IT_NAILGUN; if ( (self.ammo_nails < TRUE) ) { am = TRUE; } } else { if ( (self.weapon == IT_NAILGUN) ) { self.weapon = IT_SUPER_NAILGUN; if ( (self.ammo_nails < FL_SWIM) ) { am = TRUE; } } else { if ( (self.weapon == IT_SUPER_NAILGUN) ) { self.weapon = IT_GRENADE_LAUNCHER; if ( (self.ammo_rockets < TRUE) ) { am = TRUE; }} else { if ( (self.weapon == IT_GRENADE_LAUNCHER) ) { self.weapon = IT_ROCKET_LAUNCHER; if ( (self.ammo_rockets < TRUE) ) { am = TRUE; } } else { if ( (self.weapon == IT_ROCKET_LAUNCHER) ) { self.weapon = IT_LIGHTNING; if ( (self.ammo_cells < TRUE) ) { am = TRUE; } }else { if ( (self.weapon == IT_LIGHTNING) ) { self.weapon = IT_PLASMA_GUN; if ( (self.ammo_cells < TRUE) ) { am = TRUE; } }// added for plasma } } } } } } } } if ( ((self.items & self.weapon) && (am == FALSE)) ) { W_SetCurrentAmmo (); return ; } } }; //=================End Code==========//
Step 19
Find the function ImpulseCommands()void () ImpulseCommands = { This bit is kind of hard to explain... Find the bit that says: if ( ((self.impulse >= TRUE) && (self.impulse <= 8)) ) { W_ChangeWeapon (); } add this: //===========Begin Code==========// else if (self.impulse == 20) { W_ChangeWeapon (); } //=================End Code==========// It should now read: void () ImpulseCommands = { local string tmp; if ( ((self.impulse >= TRUE) && (self.impulse <= 8)) ) { W_ChangeWeapon (); } else if (self.impulse == 20) { W_ChangeWeapon (); } else if ( (self.impulse == MOVETYPE_BOUNCE) ) { CycleWeaponCommand (); } etc etc.......
Step 20
Save and close everything. Compile! No go into Quake. Bind 9 to "impulse 9" type map dm3.Wander about a bit until you find the plasma gun, then shoot! To put a plasma gun into your levels insert a weapon_plasma. I hope this works! see 'ya next time.