예제 #1
0
            public override void Die(edict_t self, edict_t inflictor, edict_t attacker, int damage, float[] point)
            {
                int n;

                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;
                }
                GameBase.gi.Sound(self, Defines.CHAN_VOICE, sound_death, 1, Defines.ATTN_NORM, 0);
                self.deadflag   = Defines.DEAD_DEAD;
                self.takedamage = Defines.DAMAGE_YES;
                self.monsterinfo.currentmove = gunner_move_death;
            }
예제 #2
0
            public override bool Think(edict_t self)
            {
                if (null == self.groundentity && GameBase.level.time < self.timestamp)
                {
                    self.nextthink = GameBase.level.time + Defines.FRAMETIME;
                    return(true);
                }

                GameMisc.BecomeExplosion1(self);
                return(true);
            }
예제 #3
0
            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);
            }
예제 #4
0
            public override void Die(edict_t self, edict_t inflictor, edict_t attacker, Int32 damage, Single[] point)
            {
                Int32 n;

                if (self.health <= self.gib_health)
                {
                    GameBase.gi.Sound(self, Defines.CHAN_VOICE, GameBase.gi.Soundindex("misc/udeath.wav"), 1, Defines.ATTN_IDLE, 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;
                }
                GameBase.gi.Sound(self, Defines.CHAN_VOICE, GameBase.gi.Soundindex("player/male/death" + ((Lib.Rand() % 4) + 1) + ".wav"), 1, Defines.ATTN_IDLE, 0);
                self.deadflag   = Defines.DEAD_DEAD;
                self.takedamage = Defines.DAMAGE_YES;
                if ((self.spawnflags & 8) != 0)
                {
                    insane_dead.Think(self);
                }
                else
                {
                    if (((self.s.frame >= FRAME_crawl1) && (self.s.frame <= FRAME_crawl9)) || ((self.s.frame >= FRAME_stand99) && (self.s.frame <= FRAME_stand160)))
                    {
                        self.monsterinfo.currentmove = insane_move_crawl_death;
                    }
                    else
                    {
                        self.monsterinfo.currentmove = insane_move_stand_death;
                    }
                }
            }
예제 #5
0
            public override void Die(edict_t self, edict_t inflictor, edict_t attacker, int damage, float[] point)
            {
                int n;

                self.s.effects = 0;
                self.monsterinfo.power_armor_type = Defines.POWER_ARMOR_NONE;
                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;
                }
                GameBase.gi.Sound(self, Defines.CHAN_VOICE, sound_death, 1, Defines.ATTN_NORM, 0);
                self.deadflag   = Defines.DEAD_DEAD;
                self.takedamage = Defines.DAMAGE_YES;
                if (Lib.Random() <= 0.5)
                {
                    self.monsterinfo.currentmove = brain_move_death1;
                }
                else
                {
                    self.monsterinfo.currentmove = brain_move_death2;
                }
            }
예제 #6
0
            public override bool Think(edict_t self)
            {
                float[] org = new float[] { 0, 0, 0 };
                int     n;

                self.think = BossExplode;
                Math3D.VectorCopy(self.s.origin, org);
                org[2] += 24 + (Lib.Rand() & 15);
                switch (self.count++)
                {
                case 0:
                    org[0] -= 24;
                    org[1] -= 24;
                    break;

                case 1:
                    org[0] += 24;
                    org[1] += 24;
                    break;

                case 2:
                    org[0] += 24;
                    org[1] -= 24;
                    break;

                case 3:
                    org[0] -= 24;
                    org[1] += 24;
                    break;

                case 4:
                    org[0] -= 48;
                    org[1] -= 48;
                    break;

                case 5:
                    org[0] += 48;
                    org[1] += 48;
                    break;

                case 6:
                    org[0] -= 48;
                    org[1] += 48;
                    break;

                case 7:
                    org[0] += 48;
                    org[1] -= 48;
                    break;

                case 8:
                    self.s.sound = 0;
                    for (n = 0; n < 4; n++)
                    {
                        GameMisc.ThrowGib(self, "models/objects/gibs/sm_meat/tris.md2", 500, Defines.GIB_ORGANIC);
                    }
                    for (n = 0; n < 8; n++)
                    {
                        GameMisc.ThrowGib(self, "models/objects/gibs/sm_metal/tris.md2", 500, Defines.GIB_METALLIC);
                    }
                    GameMisc.ThrowGib(self, "models/objects/gibs/chest/tris.md2", 500, Defines.GIB_ORGANIC);
                    GameMisc.ThrowHead(self, "models/objects/gibs/gear/tris.md2", 500, Defines.GIB_METALLIC);
                    self.deadflag = Defines.DEAD_DEAD;
                    return(true);
                }

                GameBase.gi.WriteByte(Defines.svc_temp_entity);
                GameBase.gi.WriteByte(Defines.TE_EXPLOSION1);
                GameBase.gi.WritePosition(org);
                GameBase.gi.Multicast(self.s.origin, Defines.MULTICAST_PVS);
                self.nextthink = GameBase.level.time + 0.1F;
                return(true);
            }
예제 #7
0
 public override 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);
 }