// Based on Half-Life Featureful code // Credits to FreeSlave namespace INSDeadMonsters { class CDeadMonster : ScriptBaseMonsterEntity { void SpawnHelper(string modelName, int bloodColor = BLOOD_COLOR_RED, int health = 8) { g_Game.PrecacheModel( modelName ); g_EntityFuncs.SetModel(self, modelName); self.m_bloodColor = bloodColor; pev.health = health; pev.yaw_speed = 8; pev.sequence = 0; string seqName = getPos(m_iPose); int sequence = self.LookupSequence( seqName ); if (sequence >= 0) { pev.sequence = sequence; } else { g_Game.AlertMessage( at_console, "%1 with bad pose (no %2 animation in %3)\n", self.GetClassname(), seqName, modelName ); } } bool KeyValue( const string& in szKey, const string& in szValue ) { if (szKey == "pose") { m_iPose = atoi(szValue); return true; } else return BaseClass.KeyValue( szKey, szValue ); } string getPos(int pose) { return ''; } int m_iPose; }; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// const array alien_slave_dead_poses = {"dead_on_stomach", "dead_on_side"}; class monster_alien_slave_dead : CDeadMonster { void Spawn() { if (g_ClassicMode.IsEnabled()) { SpawnHelper("models/sc_insecure/hlclassic/dead_islave.mdl", BLOOD_COLOR_YELLOW); } else if (!g_ClassicMode.IsEnabled()) { SpawnHelper("models/sc_insecure/dead_islave.mdl", BLOOD_COLOR_YELLOW); } self.MonsterInitDead(); pev.frame = 255; } int Classify() { return self.GetClassification(CLASS_ALIEN_MILITARY); } string getPos(int pos) { return alien_slave_dead_poses[pos % alien_slave_dead_poses.length()]; } }; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// class monster_alien_grunt_dead : CDeadMonster { void Spawn() { if (g_ClassicMode.IsEnabled()) { SpawnHelper("models/sc_insecure/hlclassic/dead_agrunt.mdl", BLOOD_COLOR_YELLOW, 16); } else if (!g_ClassicMode.IsEnabled()) { SpawnHelper("models/sc_insecure/dead_agrunt.mdl", BLOOD_COLOR_YELLOW, 16); } self.MonsterInitDead(); pev.frame = 255; } int Classify() { return self.GetClassification(CLASS_ALIEN_MILITARY); } string getPos(int pos) { return "dead"; } }; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// class monster_houndeye_dead : CDeadMonster { void Spawn() { if (g_ClassicMode.IsEnabled()) { SpawnHelper("models/houndeye_dead.mdl", BLOOD_COLOR_YELLOW); } else if (!g_ClassicMode.IsEnabled()) { SpawnHelper("models/sc_insecure/dead_houndeye.mdl", BLOOD_COLOR_YELLOW); } self.MonsterInitDead(); pev.frame = 255; } int Classify() { return self.GetClassification(CLASS_ALIEN_MONSTER); } string getPos(int pos) { return "dead"; } }; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// const array hev_dead_poses = {"deadback", "deadsitting", "deadstomach", "deadtable"}; class monster_hev_dead : CDeadMonster { void Spawn() { if (g_ClassicMode.IsEnabled()) { SpawnHelper("models/sc_insecure/hlclassic/dead_hev.mdl", BLOOD_COLOR_RED); } else if (!g_ClassicMode.IsEnabled()) { SpawnHelper("models/sc_insecure/dead_hev.mdl", BLOOD_COLOR_RED); } self.MonsterInitDead(); pev.frame = 255; } int Classify() { return self.GetClassification(CLASS_HUMAN_PASSIVE); } string getPos(int pos) { return hev_dead_poses[pos % hev_dead_poses.length()]; } }; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// const array otis_dead2_poses = {"lying_on_back", "lying_on_side", "lying_on_stomach", "dead_sitting"}; class monster_otis_dead2 : CDeadMonster { void Spawn() { if (g_ClassicMode.IsEnabled()) { SpawnHelper("models/sc_insecure/hlclassic/otis.mdl", BLOOD_COLOR_RED); } else if (!g_ClassicMode.IsEnabled()) { SpawnHelper("models/sc_insecure/otis.mdl", BLOOD_COLOR_RED); } self.MonsterInitDead(); pev.frame = 255; } int Classify() { return self.GetClassification(CLASS_HUMAN_PASSIVE); } string getPos(int pos) { return otis_dead2_poses[pos % otis_dead2_poses.length()]; } }; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// const array construction_dead_poses = {"lying_on_back", "lying_on_side", "lying_on_stomach", "dead_sitting"}; class monster_construction_dead : CDeadMonster { void Spawn() { if (g_ClassicMode.IsEnabled()) { SpawnHelper("models/sc_insecure/hlclassic/construction.mdl", BLOOD_COLOR_RED); } else if (!g_ClassicMode.IsEnabled()) { SpawnHelper("models/sc_insecure/construction.mdl", BLOOD_COLOR_RED); } self.MonsterInitDead(); pev.frame = 255; } int Classify() { return self.GetClassification(CLASS_HUMAN_PASSIVE); } string getPos(int pos) { return construction_dead_poses[pos % construction_dead_poses.length()]; } }; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// const array scientist_dead2_poses = {"cower_die", "dead_vent", "dead_sitting", "dead_table"}; class monster_scientist_dead2 : CDeadMonster { void Spawn() { if (g_ClassicMode.IsEnabled()) { SpawnHelper("models/sc_insecure/hlclassic/dead_scientist.mdl", BLOOD_COLOR_RED); } else if (!g_ClassicMode.IsEnabled()) { SpawnHelper("models/sc_insecure/dead_scientist.mdl", BLOOD_COLOR_RED); } self.MonsterInitDead(); pev.frame = 255; } int Classify() { return self.GetClassification(CLASS_HUMAN_PASSIVE); } string getPos(int pos) { return scientist_dead2_poses[pos % scientist_dead2_poses.length()]; } }; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// void Register() { const array entities = { "monster_alien_slave_dead", "monster_alien_grunt_dead", "monster_houndeye_dead", "monster_hev_dead", "monster_otis_dead2", "monster_construction_dead", "monster_scientist_dead2" }; for (uint i=0; i