diff --git a/Source/server/rewolf.src b/Source/server/rewolf.src index 21f0a32f..4f0181ab 100755 --- a/Source/server/rewolf.src +++ b/Source/server/rewolf.src @@ -16,6 +16,7 @@ defs.h ../gs-entbase/server.src valve/monster_rat.cpp +valve/monster_scientist_dead.cpp ../shared/decals.c ../shared/effects.c diff --git a/Source/server/scihunt.src b/Source/server/scihunt.src index e344b79e..11af5042 100755 --- a/Source/server/scihunt.src +++ b/Source/server/scihunt.src @@ -17,6 +17,7 @@ defs.h ../gs-entbase/server.src valve/monster_rat.cpp scihunt/monster_scientist.cpp +valve/monster_scientist_dead.cpp ../shared/decals.c ../shared/effects.c diff --git a/Source/server/valve.src b/Source/server/valve.src index bea29234..7cfce342 100755 --- a/Source/server/valve.src +++ b/Source/server/valve.src @@ -16,6 +16,7 @@ defs.h ../gs-entbase/server.src valve/monster_rat.cpp +valve/monster_scientist_dead.cpp ../shared/decals.c ../shared/effects.c diff --git a/Source/server/valve/monster_scientist_dead.cpp b/Source/server/valve/monster_scientist_dead.cpp new file mode 100644 index 00000000..87f73d99 --- /dev/null +++ b/Source/server/valve/monster_scientist_dead.cpp @@ -0,0 +1,115 @@ +/*** +* +* Copyright (c) 2016-2019 Marco 'eukara' Hladik. All rights reserved. +* +* See the file LICENSE attached with the sources for usage details. +* +****/ + +enum { + DSCIA_LYING1 = 37, + DSCIA_LYING2, + DSCIA_DEADSIT, + DSCIA_DEADTABLE1, + DSCIA_DEADTABLE2, + DSCIA_DEADTABLE3, + DSCIA_DEADHANG +}; + +class monster_scientist_dead:CBaseEntity +{ + int m_iPose; + void() monster_scientist_dead; + + virtual void() Hide; + virtual void() Respawn; + virtual void(int) vPain; + virtual void(int) vDeath; + virtual void() Gib; +}; + +void monster_scientist_dead::Gib(void) +{ + takedamage = DAMAGE_NO; + Effect_GibHuman(this.origin); + Hide(); +} + +void monster_scientist_dead::vPain(int iHitBody) +{ + +} + +void monster_scientist_dead::vDeath(int iHitBody) +{ + if (health < -50) { + Gib(); + return; + } +} + +void monster_scientist_dead::Hide(void) +{ + setmodel(this, ""); + solid = SOLID_NOT; + movetype = MOVETYPE_NONE; +} + +void monster_scientist_dead::Respawn(void) +{ + v_angle[0] = Math_FixDelta(m_oldAngle[0]); + v_angle[1] = Math_FixDelta(m_oldAngle[1]); + v_angle[2] = Math_FixDelta(m_oldAngle[2]); + + setorigin(this, m_oldOrigin); + angles = v_angle; + solid = SOLID_CORPSE; + movetype = MOVETYPE_NONE; + setmodel(this, m_oldModel); + setsize(this, VEC_HULL_MIN + [0,0,36], VEC_HULL_MAX + [0,0,36]); + takedamage = DAMAGE_YES; + health = 0; + velocity = [0,0,0]; + iBleeds = TRUE; + + switch (m_iPose) { + case 1: + frame = DSCIA_LYING2; + break; + case 2: + frame = DSCIA_DEADSIT; + break; + case 3: + frame = DSCIA_DEADHANG; + break; + case 4: + frame = DSCIA_DEADTABLE1; + break; + case 5: + frame = DSCIA_DEADTABLE2; + break; + case 6: + frame = DSCIA_DEADTABLE3; + break; + default: + frame = DSCIA_LYING1; + } +} + +void monster_scientist_dead::monster_scientist_dead(void) +{ + model = "models/scientist.mdl"; + + for (int i = 1; i < (tokenize(__fullspawndata)-1); i += 2) { + switch (argv(i)) { + case "pose": + m_iPose = stoi(argv(i+1)); + default: + break; + } + } + + CBaseEntity::CBaseEntity(); + precache_model(m_oldModel); + Respawn(); +}