void MakeEdges(vector leftedge, vector rightedge, vector startpos, entity rayshield, string axis) { if(axis == "x") { leftedge_x = 0; rightedge_x = 0; } if(axis == "y") { leftedge_y = 0; rightedge_y = 0; } leftedge = startpos + leftedge; rightedge = startpos + rightedge; leftedge_z = startpos_z; rightedge_z = startpos_z; local entity leftshield; leftshield = spawn(); leftshield.owner = self; leftshield.solid = SOLID_NOT; setmodel(leftshield, ""); setsize(leftshield, '0 0 0', '0 0 0'); setorigin(leftshield, leftedge); rayshield.acider = leftshield; local entity rightshield; rightshield = spawn(); rightshield.owner = self; rightshield.solid = SOLID_NOT; setmodel(rightshield, ""); setsize(rightshield, '0 0 0', '0 0 0'); setorigin(rightshield, rightedge); rayshield.poisoner = rightshield; } /* void leftsoundx(vector startpos, float sleft) { local entity leftshield; leftshield = spawn(); leftshield.owner = self; leftshield.solid = SOLID_NOT; setmodel(leftshield, ""); setsize(leftshield, '0 0 0', '0 0 0'); // local vector leftstart; // leftstart = startpos; startpos_x = startpos_x + sleft; // leftstart_x = sleft; self.acider = leftshield; setorigin(self.acider, startpos); } void rightsoundx(vector startpos, float sright) { local entity rightshield; rightshield = spawn(); rightshield.owner = self; rightshield.solid = SOLID_NOT; setmodel(rightshield, ""); setsize(rightshield, '0 0 0', '0 0 0'); // local vector rightstart; // rightstart = startpos; // rightstart_x = sright; startpos_x = startpos_x + sright; self.poisoner = rightshield; setorigin(self.poisoner, startpos); } void leftsoundy(vector startpos, float sleft) { local entity leftshield; leftshield = spawn(); leftshield.owner = self; leftshield.solid = SOLID_NOT; setmodel(leftshield, ""); setsize(leftshield, '0 0 0', '0 0 0'); // local vector leftstart; // leftstart = startpos; // leftstart_y = sleft; startpos_y = startpos_y + sleft; self.acider = leftshield; setorigin(self.acider, startpos); } void rightsoundy(vector startpos, float sright) { local entity rightshield; rightshield = spawn(); rightshield.owner = self; rightshield.solid = SOLID_NOT; setmodel(rightshield, ""); setsize(rightshield, '0 0 0', '0 0 0'); // local vector rightstart; // rightstart = startpos; // rightstart_y = sright; startpos_y = startpos_y + sright; self.poisoner = rightshield; setorigin(self.poisoner, startpos); } */ void ShieldDown() { sound(self, CHAN_WEAPON, "misc/shielddown.wav", 1, ATTN_NORM); sound(self.acider, CHAN_WEAPON, "misc/shielddown.wav", 1, ATTN_NORM); sound(self.poisoner, CHAN_WEAPON, "misc/shielddown.wav", 1, ATTN_NORM); sound(self, CHAN_BODY, "emp/empout.wav", 1, ATTN_NORM); // self.effects = 0; remove(self); } void ShieldTouch() { sound(self, CHAN_BODY, "misc/shieldhit.wav", 1, ATTN_NORM); // muzzleflash(); // try blue globe // self.effects = 64; sound(self.acider, CHAN_BODY, "misc/shieldhit.wav", 1, ATTN_NORM); sound(self.poisoner, CHAN_BODY, "misc/shieldhit.wav", 1, ATTN_NORM); if(other.classname == "dart") { other.think = SmartHLV; other.nextthink = time; } if(other.classname == "rocket" || other.classname == "grenade") { self.force =self.force - 100; if(other.classname == "grenade") other.nextthink = time; } if(other.classname == "player" || other.classname == "bot" || other.classname == "monster") { sound(self, CHAN_VOICE, "misc/power.wav", 1, ATTN_NORM); other.deathtype = "shield"; T_Damage(other, self.pusher, self.pusher, 10); /* if(other.health <= self.force) { sound(self, CHAN_VOICE, "misc/power.wav", 1, ATTN_NORM); other.deathtype = "shield"; if(other.health >= 100) self.force = self.force - 100; else self.force = self.force - other.health; T_Damage(other, self.pusher, self.pusher, other.health); } else { other.deathtype = "shield"; T_Damage(other, self.pusher, self.pusher, self.force); ShieldDown(); } */ } // return bright light effect // self.effects = 4; if(self.force <= 0) ShieldDown(); } void ShieldThink() { /* entity shielders; shielders = findradius(self.origin, 300); while(shielders); { if(shielders != self && shielders != world) { if(shielders.classname == "player") safe_soundtoclient(shielders, self, CHAN_AUTO, "emp/empdmg2.wav", 1, ATTN_NORM); } shielders = shielders.chain; } */ if(time >= self.frags) { self.frags = time + 1.75; sound(self, CHAN_AUTO, "misc/shieldloop.wav", 1, ATTN_NORM); sound(self.acider, CHAN_AUTO, "misc/shieldloop.wav", 1, ATTN_NORM); sound(self.poisoner, CHAN_AUTO, "misc/shieldloop.wav", 1, ATTN_NORM); } if(time >= self.JetPackFlying) ShieldDown(); self.nextthink = time +0.1; } void RayShield() { if(self.DartsAndShields.shieldcount < 1) return; if(self.JETPACK_FUEL < 50) return; if(self.ammo_cells < 50) return; entity shield; vector ShieldStart; makevectors(self.angles); ShieldStart = self.origin + v_forward * 100; // test for shield placement and size traceline(self.origin, ShieldStart, true, self); if(trace_fraction != 1.0) return; vector shielddown; vector shieldleft; vector shieldup; vector shieldright; float shlddown; float shldleft; float shldup; float shldright; shielddown = ShieldStart - (v_up * 60); shieldleft = ShieldStart + (v_right * -200); shieldup = ShieldStart + (v_up * 100); shieldright = ShieldStart + (v_right * 200); traceline(ShieldStart, shielddown, true, self); shlddown = vlen(trace_endpos - ShieldStart); // not high enough floor ahead of the player if(shlddown > 50) return; traceline(ShieldStart, shieldleft, true, self); shldleft = vlen(trace_endpos - ShieldStart); traceline(ShieldStart, shieldup, true, self); shldup = vlen(trace_endpos - ShieldStart); traceline(ShieldStart, shieldright, true, self); shldright = vlen(trace_endpos - ShieldStart); shielddown_x = -1; shielddown_y = shldleft * -1; shielddown_z = shlddown * -1; shieldup_x = 1; shieldup_y = shldright; shieldup_z = shldup; shieldleft_x = shldleft * -1; shieldleft_y = -1; shieldleft_z = shlddown * -1; shieldright_x = shldright; shieldright_y = 1; shieldright_z = shldup; float tempangle; tempangle = vectoyaw(v_forward); shield = spawn (); shield.owner = shield; shield.movetype = MOVETYPE_NONE; shield.solid = SOLID_BBOX; shield.touch = ShieldTouch; shield.frags = time; shield.force = 1000; shield.JetPackFlying = time + 120; shield.pusher = self; setmodel (shield, ""); if(tempangle > 337 || tempangle < 23) { shielddown_y = shldright * -1; shieldup_y = shldleft; setsize (shield, shielddown, shieldup); // leftsoundy(ShieldStart, shielddown_y); // rightsoundy(ShieldStart, shieldup_y); MakeEdges(shielddown, shieldup, ShieldStart, shield, "x"); } else if(tempangle > 157 && tempangle < 203) { setsize (shield, shielddown, shieldup); // leftsoundy(ShieldStart, shielddown_y); // rightsoundy(ShieldStart, shieldup_y); MakeEdges(shielddown, shieldup, ShieldStart, shield, "x"); } else if(tempangle > 67 && tempangle < 113) { setsize (shield, shieldleft, shieldright); // leftsoundx(ShieldStart, shieldleft_x); // rightsoundx(ShieldStart, shieldright_x); MakeEdges(shieldleft, shieldright, ShieldStart, shield, "y"); } else if(tempangle > 247 && tempangle < 293) { shieldleft_x = shldright * -1; shieldright_x = shldleft; setsize (shield, shieldleft, shieldright); // leftsoundx(ShieldStart, shieldleft_x); // rightsoundx(ShieldStart, shieldright_x); MakeEdges(shieldleft, shieldright, ShieldStart, shield, "y"); } else { remove(shield); return; } setorigin (shield, ShieldStart); // shield.angles_y = self.angles_y; // shield.fixangle = true; // try bright light // shield.effects = 4; sound(shield, CHAN_WEAPON, "misc/shieldup.wav", 1, ATTN_NORM); // sound(shield, CHAN_VOICE, "misc/shieldloop.wav", 1, ATTN_NORM); self.DartsAndShields.shieldcount = self.DartsAndShields.shieldcount - 1; self.JETPACK_FUEL = 0; self.ammo_cells = self.ammo_cells - 50; shield.think = ShieldThink; shield.nextthink = time; }