Esempio n. 1
0
        public void die(
            edict_t self, edict_t inflictor, edict_t attacker, int damage, float[] point) {
          int n;

          //	check for gib
          if (self.health <= self.gib_health) {
            GameBase.gi.sound(
                self,
                Defines.CHAN_VOICE,
                GameBase.gi.soundindex("misc/udeath.wav"),
                1,
                Defines.ATTN_NORM,
                0);
            for (n = 0; n < 2; n++)
              GameMisc.ThrowGib(
                  self, "models/objects/gibs/bone/tris.md2", damage, Defines.GIB_ORGANIC);
            for (n = 0; n < 4; n++)
              GameMisc.ThrowGib(
                  self, "models/objects/gibs/sm_meat/tris.md2", damage, Defines.GIB_ORGANIC);
            GameMisc.ThrowHead(
                self, "models/objects/gibs/head2/tris.md2", damage, Defines.GIB_ORGANIC);
            self.deadflag = Defines.DEAD_DEAD;
            return;
          }

          if (self.deadflag == Defines.DEAD_DEAD) return;

          //	regular death
          GameBase.gi.sound(self, Defines.CHAN_VOICE, sound_die, 1, Defines.ATTN_NORM, 0);
          self.deadflag = Defines.DEAD_DEAD;
          self.takedamage = Defines.DAMAGE_YES;

          self.monsterinfo.currentmove = gladiator_move_death;
        }
Esempio n. 2
0
        public void touch(edict_t ent, edict_t other, cplane_t plane, csurface_t surf) {
          float[] origin = {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);

          // calculate position for the explosion entity
          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 {
            // don't throw any debris in net games
            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);
        }
Esempio n. 3
0
 public void die(
     edict_t self, edict_t inflictor, edict_t attacker, int damage, float[] point) {
   GameBase.gi.sound(self, Defines.CHAN_VOICE, sound_death1, 1, Defines.ATTN_NORM, 0);
   GameMisc.BecomeExplosion1(self);
 }