public override void Touch(edict_t ent, edict_t other, cplane_t plane, csurface_t surf) { float[] origin = new float[] { 0, 0, 0 }; int n; if (other == ent.owner) { return; } if (surf != null && (surf.flags & Defines.SURF_SKY) != 0) { GameUtil.G_FreeEdict(ent); return; } if (ent.owner.client != null) { PlayerWeapon.PlayerNoise(ent.owner, ent.s.origin, Defines.PNOISE_IMPACT); } Math3D.VectorMA(ent.s.origin, -0.02F, ent.velocity, origin); if (other.takedamage != 0) { GameCombat.T_Damage(other, ent, ent.owner, ent.velocity, ent.s.origin, plane.normal, ent.dmg, 0, 0, Defines.MOD_ROCKET); } else { if (GameBase.deathmatch.value == 0 && 0 == GameBase.coop.value) { if ((surf != null) && 0 == (surf.flags & (Defines.SURF_WARP | Defines.SURF_TRANS33 | Defines.SURF_TRANS66 | Defines.SURF_FLOWING))) { n = Lib.Rand() % 5; while (n-- > 0) { GameMisc.ThrowDebris(ent, "models/objects/debris2/tris.md2", 2, ent.s.origin); } } } } GameCombat.T_RadiusDamage(ent, ent.owner, ent.radius_dmg, other, ent.dmg_radius, Defines.MOD_R_SPLASH); GameBase.gi.WriteByte(Defines.svc_temp_entity); if (ent.waterlevel != 0) { GameBase.gi.WriteByte(Defines.TE_ROCKET_EXPLOSION_WATER); } else { GameBase.gi.WriteByte(Defines.TE_ROCKET_EXPLOSION); } GameBase.gi.WritePosition(origin); GameBase.gi.Multicast(ent.s.origin, Defines.MULTICAST_PHS); GameUtil.G_FreeEdict(ent); }
public override void Use(edict_t self, edict_t other, edict_t activator) { GameBase.gi.WriteByte(Defines.svc_temp_entity); GameBase.gi.WriteByte(Defines.TE_SPLASH); GameBase.gi.WriteByte(self.count); GameBase.gi.WritePosition(self.s.origin); GameBase.gi.WriteDir(self.movedir); GameBase.gi.WriteByte(self.sounds); GameBase.gi.Multicast(self.s.origin, Defines.MULTICAST_PVS); if (self.dmg != 0) { GameCombat.T_RadiusDamage(self, activator, self.dmg, null, self.dmg + 40, Defines.MOD_SPLASH); } }
public override Boolean Think(edict_t self) { Single save; GameBase.gi.WriteByte(Defines.svc_temp_entity); GameBase.gi.WriteByte(Defines.TE_EXPLOSION1); GameBase.gi.WritePosition(self.s.origin); GameBase.gi.Multicast(self.s.origin, Defines.MULTICAST_PHS); GameCombat.T_RadiusDamage(self, self.activator, self.dmg, null, self.dmg + 40, Defines.MOD_EXPLOSIVE); save = self.delay; self.delay = 0; GameUtil.G_UseTargets(self, self.activator); self.delay = save; return(true); }
public override void Touch(edict_t self, edict_t other, cplane_t plane, csurface_t surf) { if (other == self.owner) { return; } if (surf != null && (surf.flags & Defines.SURF_SKY) != 0) { GameUtil.G_FreeEdict(self); return; } if (self.owner.client != null) { PlayerWeapon.PlayerNoise(self.owner, self.s.origin, Defines.PNOISE_IMPACT); } if (other.takedamage != 0) { GameCombat.T_Damage(other, self, self.owner, self.velocity, self.s.origin, plane.normal, 200, 0, 0, Defines.MOD_BFG_BLAST); } GameCombat.T_RadiusDamage(self, self.owner, 200, other, 100, Defines.MOD_BFG_BLAST); GameBase.gi.Sound(self, Defines.CHAN_VOICE, GameBase.gi.Soundindex("weapons/bfg__x1b.wav"), 1, Defines.ATTN_NORM, 0); self.solid = Defines.SOLID_NOT; self.touch = null; Math3D.VectorMA(self.s.origin, -1 * Defines.FRAMETIME, self.velocity, self.s.origin); Math3D.VectorClear(self.velocity); self.s.modelindex = GameBase.gi.Modelindex("sprites/s_bfg3.sp2"); self.s.frame = 0; self.s.sound = 0; self.s.effects &= ~Defines.EF_ANIM_ALLFAST; self.think = bfg_explode; self.nextthink = GameBase.level.time + Defines.FRAMETIME; self.enemy = other; GameBase.gi.WriteByte(Defines.svc_temp_entity); GameBase.gi.WriteByte(Defines.TE_BFG_BIGEXPLOSION); GameBase.gi.WritePosition(self.s.origin); GameBase.gi.Multicast(self.s.origin, Defines.MULTICAST_PVS); }
public override bool Think(edict_t ent) { float[] origin = new float[] { 0, 0, 0 }; int mod; if (ent.owner.client != null) { PlayerWeapon.PlayerNoise(ent.owner, ent.s.origin, Defines.PNOISE_IMPACT); } if (ent.enemy != null) { float points = 0; float[] v = new float[] { 0, 0, 0 }; float[] dir = new float[] { 0, 0, 0 }; Math3D.VectorAdd(ent.enemy.mins, ent.enemy.maxs, v); Math3D.VectorMA(ent.enemy.s.origin, 0.5F, v, v); Math3D.VectorSubtract(ent.s.origin, v, v); points = ent.dmg - 0.5F * Math3D.VectorLength(v); Math3D.VectorSubtract(ent.enemy.s.origin, ent.s.origin, dir); if ((ent.spawnflags & 1) != 0) { mod = Defines.MOD_HANDGRENADE; } else { mod = Defines.MOD_GRENADE; } GameCombat.T_Damage(ent.enemy, ent, ent.owner, dir, ent.s.origin, Globals.vec3_origin, (int)points, (int)points, Defines.DAMAGE_RADIUS, mod); } if ((ent.spawnflags & 2) != 0) { mod = Defines.MOD_HELD_GRENADE; } else if ((ent.spawnflags & 1) != 0) { mod = Defines.MOD_HG_SPLASH; } else { mod = Defines.MOD_G_SPLASH; } GameCombat.T_RadiusDamage(ent, ent.owner, ent.dmg, ent.enemy, ent.dmg_radius, mod); Math3D.VectorMA(ent.s.origin, -0.02F, ent.velocity, origin); GameBase.gi.WriteByte(Defines.svc_temp_entity); if (ent.waterlevel != 0) { if (ent.groundentity != null) { GameBase.gi.WriteByte(Defines.TE_GRENADE_EXPLOSION_WATER); } else { GameBase.gi.WriteByte(Defines.TE_ROCKET_EXPLOSION_WATER); } } else { if (ent.groundentity != null) { GameBase.gi.WriteByte(Defines.TE_GRENADE_EXPLOSION); } else { GameBase.gi.WriteByte(Defines.TE_ROCKET_EXPLOSION); } } GameBase.gi.WritePosition(origin); GameBase.gi.Multicast(ent.s.origin, Defines.MULTICAST_PHS); GameUtil.G_FreeEdict(ent); return(true); }