Corpses: Ensure frame1time is reset whenever we inherit someones corpse.
Items: Ensure we re-adjust our position post-spawn so we don't fall through yet-to-spawn geometry. Delete a whole bunch of now unused code.
This commit is contained in:
parent
c3975f5315
commit
f3596f2aef
63 changed files with 217 additions and 3773 deletions
|
@ -46,14 +46,14 @@ ClientGame_EventParse(float fHeader)
|
|||
float fTeam = readbyte();
|
||||
string sMessage = readstring();
|
||||
|
||||
CSQC_Parse_Print(sprintf("%s: %s", getplayerkeyvalue(fSender, "name"), sMessage), PRINT_CHAT);
|
||||
CSQC_Parse_Print(Util_ChatFormat(fSender, 0, sMessage), PRINT_CHAT);
|
||||
break;
|
||||
case EV_CHAT_TEAM:
|
||||
float fSender2 = readbyte();
|
||||
float fTeam2 = readbyte();
|
||||
string sMessage2 = readstring();
|
||||
|
||||
CSQC_Parse_Print(sprintf("[TEAM] %s: %s", getplayerkeyvalue(fSender2, "name"), sMessage2), PRINT_CHAT);
|
||||
CSQC_Parse_Print(Util_ChatFormat(fSender2, fTeam2, sMessage2), PRINT_CHAT);
|
||||
break;
|
||||
case EV_VIEWMODEL:
|
||||
View_PlayAnimation(readbyte());
|
||||
|
|
|
@ -38,7 +38,7 @@ HLSprite_Init(void)
|
|||
hudFile = fopen("sprites/hud.txt", FILE_READ);
|
||||
|
||||
if (hudFile < 0) {
|
||||
error("hud.txt was not found.");
|
||||
NSError("Missing file sprites/hud.txt");
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -91,7 +91,7 @@ HLSprite_Init(void)
|
|||
i++;
|
||||
}
|
||||
|
||||
print(sprintf("initialized %i HL sprites.\n", spriteCount));
|
||||
NSLog("...initialized %i HL sprites.", spriteCount);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -102,7 +102,7 @@ HLSprite_Draw_RGBA(string spriteName, vector spritePos, vector spriteColor, floa
|
|||
spriteNum = (int)hash_get(g_hashhlsprite, spriteName, -1i);
|
||||
|
||||
if (spriteNum == -1i) {
|
||||
print(sprintf("cannot draw sprite %S!\n", spriteName));
|
||||
NSError("Cannot draw sprite %S!", spriteName);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -14,6 +14,8 @@
|
|||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
void View_ForceChange(player pl, int targetWeapon);
|
||||
|
||||
vector g_vecHUDNums[6] =
|
||||
{
|
||||
[168 / 256, 72 / 128],
|
||||
|
@ -52,9 +54,10 @@ HUD_DrawWeaponSelect_Forward(void)
|
|||
|
||||
if (pSeat->m_flHUDWeaponSelectTime < time) {
|
||||
pSeat->m_iHUDWeaponSelected = pl.activeweapon;
|
||||
Sound_Play(pSeat->m_ePlayer, CHAN_ITEM, "Player.WeaponSelectionOpen");
|
||||
pl.StartSoundDef("Player.WeaponSelectionOpen", CHAN_ITEM, false);
|
||||
} else {
|
||||
Sound_Play(pSeat->m_ePlayer, CHAN_ITEM, "Player.WeaponSelectionMoveSlot");
|
||||
pl.StartSoundDef("Player.WeaponSelectionMoveSlot", CHAN_ITEM, false);
|
||||
|
||||
pSeat->m_iHUDWeaponSelected--;
|
||||
if (pSeat->m_iHUDWeaponSelected <= 0) {
|
||||
pSeat->m_iHUDWeaponSelected = g_weapons.length - 1;
|
||||
|
@ -83,9 +86,10 @@ HUD_DrawWeaponSelect_Back(void)
|
|||
|
||||
if (pSeat->m_flHUDWeaponSelectTime < time) {
|
||||
pSeat->m_iHUDWeaponSelected = pl.activeweapon;
|
||||
Sound_Play(pSeat->m_ePlayer, CHAN_ITEM, "Player.WeaponSelectionOpen");
|
||||
pl.StartSoundDef("Player.WeaponSelectionOpen", CHAN_ITEM, false);
|
||||
} else {
|
||||
Sound_Play(pSeat->m_ePlayer, CHAN_ITEM, "Player.WeaponSelectionMoveSlot");
|
||||
pl.StartSoundDef("Player.WeaponSelectionMoveSlot", CHAN_ITEM, false);
|
||||
|
||||
pSeat->m_iHUDWeaponSelected++;
|
||||
if (pSeat->m_iHUDWeaponSelected >= g_weapons.length) {
|
||||
pSeat->m_iHUDWeaponSelected = 1;
|
||||
|
@ -101,9 +105,6 @@ HUD_DrawWeaponSelect_Back(void)
|
|||
HUD_DrawWeaponSelect_Back();
|
||||
}
|
||||
|
||||
void
|
||||
View_ForceChange(player pl, int targetWeapon);
|
||||
|
||||
void
|
||||
HUD_DrawWeaponSelect_Trigger(void)
|
||||
{
|
||||
|
@ -166,9 +167,9 @@ HUD_SlotSelect(int slot)
|
|||
}
|
||||
|
||||
if (pSeat->m_flHUDWeaponSelectTime < time) {
|
||||
Sound_Play(pSeat->m_ePlayer, CHAN_ITEM, "Player.WeaponSelectionOpen");
|
||||
pl.StartSoundDef("Player.WeaponSelectionOpen", CHAN_ITEM, false);
|
||||
} else {
|
||||
Sound_Play(pSeat->m_ePlayer, CHAN_ITEM, "Player.WeaponSelectionMoveSlot");
|
||||
pl.StartSoundDef("Player WeaponSelectionMoveSlot", CHAN_ITEM, false);
|
||||
}
|
||||
|
||||
/* weren't in that slot? select the first one then */
|
||||
|
@ -211,7 +212,7 @@ HUD_DrawWeaponSelect(void)
|
|||
}
|
||||
if (pSeat->m_flHUDWeaponSelectTime < time) {
|
||||
if (pSeat->m_iHUDWeaponSelected) {
|
||||
Sound_Play(pSeat->m_ePlayer, CHAN_ITEM, "Player.WeaponSelectionClose");
|
||||
pl.StartSoundDef("Player WeaponSelectionClose", CHAN_ITEM, false);
|
||||
pSeat->m_iHUDWeaponSelected = 0;
|
||||
}
|
||||
return;
|
||||
|
|
|
@ -46,6 +46,13 @@ item_ammo::Touch(entity eToucher)
|
|||
void
|
||||
item_ammo::Respawn(void)
|
||||
{
|
||||
static void AdjustSpawnPos(void) {
|
||||
RestoreAngles();
|
||||
SetOrigin(GetSpawnOrigin());
|
||||
DropToFloor();
|
||||
SetMovetype(MOVETYPE_TOSS);
|
||||
}
|
||||
|
||||
SetSolid(SOLID_TRIGGER);
|
||||
SetMovetype(MOVETYPE_TOSS);
|
||||
SetOrigin(GetSpawnOrigin());
|
||||
|
@ -57,7 +64,7 @@ item_ammo::Respawn(void)
|
|||
if (real_owner && time > 30.0f)
|
||||
Sound_Play(this, CHAN_ITEM, "ammo.respawn");
|
||||
|
||||
droptofloor();
|
||||
ScheduleThink(AdjustSpawnPos, 0.0f);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -45,17 +45,19 @@ item_suit::Touch(entity eToucher)
|
|||
}
|
||||
|
||||
player pl = (player)other;
|
||||
|
||||
if (pl.g_items & ITEM_SUIT) {
|
||||
return;
|
||||
}
|
||||
|
||||
Logging_Pickup(other, this, __NULL__);
|
||||
sound(other, CHAN_ITEM, "fvox/bell.wav", 1, ATTN_NORM);
|
||||
sound(other, CHAN_VOICE, "fvox/hev_logon.wav", 1, ATTN_NORM);
|
||||
StartSound("fvox/bell.wav", CHAN_ITEM, 0, true);
|
||||
StartSound("fvox/hev_logon.wav", CHAN_VOICE, 0, true);
|
||||
|
||||
pl.g_items |= ITEM_SUIT;
|
||||
m_iValue = TRUE;
|
||||
|
||||
if (!target) {
|
||||
if (HasTriggerTarget() == false) {
|
||||
UseOutput(other, m_strOnPlayerTouch);
|
||||
} else {
|
||||
UseTargets(other, TRIG_TOGGLE, m_flDelay);
|
||||
|
@ -72,36 +74,45 @@ item_suit::Touch(entity eToucher)
|
|||
void
|
||||
item_suit::Respawn(void)
|
||||
{
|
||||
/* we need to delay the DropToFloor() by at least a frame.
|
||||
otherwise they may just fall through an entity (func_wall, func_train etc.)
|
||||
that came after this entity in the lump. */
|
||||
static void AdjustSpawnPos(void) {
|
||||
RestoreAngles();
|
||||
SetOrigin(GetSpawnOrigin());
|
||||
DropToFloor();
|
||||
SetMovetype(MOVETYPE_TOSS);
|
||||
}
|
||||
|
||||
if (cvar_string("fs_game") == "bshift") {
|
||||
Destroy();
|
||||
return;
|
||||
}
|
||||
|
||||
SetSolid(SOLID_TRIGGER);
|
||||
SetMovetype(MOVETYPE_TOSS);
|
||||
SetOrigin(GetSpawnOrigin());
|
||||
SetMovetype(MOVETYPE_TOSS);
|
||||
SetModel(GetSpawnModel());
|
||||
SetSize(VEC_HULL_MIN + [0,0,36], VEC_HULL_MAX + [0,0,36]);
|
||||
m_iValue = FALSE;
|
||||
|
||||
ReleaseThink();
|
||||
if (!real_owner && time > 30.0f) {
|
||||
StartSoundDef("item.respawn", CHAN_ITEM, true);
|
||||
}
|
||||
|
||||
if (!real_owner && time > 30.0f)
|
||||
Sound_Play(this, CHAN_ITEM, "item.respawn");
|
||||
|
||||
DropToFloor();
|
||||
ScheduleThink(AdjustSpawnPos, 0.0f);
|
||||
}
|
||||
|
||||
void
|
||||
item_suit::SpawnKey(string strKey, string strValue)
|
||||
item_suit::SpawnKey(string keyName, string setValue)
|
||||
{
|
||||
switch (strKey) {
|
||||
switch (keyName) {
|
||||
case "OnPlayerTouch":
|
||||
strValue = strreplace(",", ",_", strValue);
|
||||
m_strOnPlayerTouch = strcat(m_strOnPlayerTouch, ",_", strValue);
|
||||
setValue = strreplace(",", ",_", setValue);
|
||||
m_strOnPlayerTouch = strcat(m_strOnPlayerTouch, ",_", setValue);
|
||||
break;
|
||||
default:
|
||||
super::SpawnKey(strKey, strValue);
|
||||
super::SpawnKey(keyName, setValue);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,121 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2016-2020 Marco Cawthorne <marco@icculus.org>
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
|
||||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/*QUAKED monster_alien_controller (0 0.8 0.8) (-16 -16 0) (16 16 72)
|
||||
|
||||
HALF-LIFE (1998) ENTITY
|
||||
|
||||
Alien Controller
|
||||
|
||||
*/
|
||||
|
||||
enum
|
||||
{
|
||||
CON_ATTACK,
|
||||
CON_ATTACK2,
|
||||
CON_THROW,
|
||||
CON_IDLE2,
|
||||
CON_BLOCK,
|
||||
CON_SHOOT,
|
||||
CON_FLINCH,
|
||||
CON_FLINCH2,
|
||||
CON_FALL,
|
||||
CON_FORWARD,
|
||||
CON_BACKWARD,
|
||||
CON_UP,
|
||||
CON_DOWN,
|
||||
CON_RIGHT,
|
||||
CON_LEFT,
|
||||
CON_IDLE,
|
||||
CON_UNUSED,
|
||||
CON_UNUSED2,
|
||||
CON_DIE
|
||||
};
|
||||
|
||||
class monster_alien_controller:HLXenMonster
|
||||
{
|
||||
float m_flIdleTime;
|
||||
float m_flPainTime;
|
||||
|
||||
void(void) monster_alien_controller;
|
||||
|
||||
virtual void(void) HasBeenHit;
|
||||
virtual void(void) HasBeenKilled;
|
||||
virtual void(void) IdleNoise;
|
||||
virtual void(void) Respawn;
|
||||
};
|
||||
|
||||
void
|
||||
monster_alien_controller::HasBeenHit(void)
|
||||
{
|
||||
if (m_flPainTime > time) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (random() < 0.25f) {
|
||||
return;
|
||||
}
|
||||
|
||||
Sound_Play(this, CHAN_VOICE, "monster_alien_controller.die");
|
||||
SetFrame(CON_FLINCH + floor(random(0, 2)));
|
||||
m_flPainTime = time + 0.25f;
|
||||
}
|
||||
|
||||
void
|
||||
monster_alien_controller::HasBeenKilled(void)
|
||||
{
|
||||
/* if we're already dead (corpse) don't change animations */
|
||||
SetFrame(CON_DIE);
|
||||
Sound_Play(this, CHAN_VOICE, "monster_alien_controller.die");
|
||||
}
|
||||
|
||||
void
|
||||
monster_alien_controller::IdleNoise(void)
|
||||
{
|
||||
/* don't make noise if we're dead (corpse) */
|
||||
if (IsAlive() == false) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (m_flIdleTime > time) {
|
||||
return;
|
||||
}
|
||||
m_flIdleTime = time + random(2,10);
|
||||
|
||||
Sound_Play(this, CHAN_VOICE, "monster_alien_controller.idle");
|
||||
}
|
||||
|
||||
void
|
||||
monster_alien_controller::Respawn(void)
|
||||
{
|
||||
super::Respawn();
|
||||
SetFrame(CON_IDLE);
|
||||
}
|
||||
|
||||
void
|
||||
monster_alien_controller::monster_alien_controller(void)
|
||||
{
|
||||
Sound_Precache("monster_alien_controller.alert");
|
||||
Sound_Precache("monster_alien_controller.attack");
|
||||
Sound_Precache("monster_alien_controller.die");
|
||||
Sound_Precache("monster_alien_controller.idle");
|
||||
Sound_Precache("monster_alien_controller.pain");
|
||||
netname = "Alien Controller";
|
||||
model = "models/controller.mdl";
|
||||
base_mins = [-16,-16,0];
|
||||
base_maxs = [16,16,72];
|
||||
m_iAlliance = MAL_ALIEN;
|
||||
}
|
|
@ -1,146 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2016-2020 Marco Cawthorne <marco@icculus.org>
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
|
||||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/*QUAKED monster_alien_grunt (0 0.8 0.8) (-32 -32 0) (32 32 64)
|
||||
|
||||
HALF-LIFE (1998) ENTITY
|
||||
|
||||
Alien Grunt
|
||||
|
||||
*/
|
||||
|
||||
enum
|
||||
{
|
||||
AG_IDLE,
|
||||
AG_THREAT,
|
||||
AG_WALK,
|
||||
AG_RUN,
|
||||
AG_LEFT,
|
||||
AG_RIGHT,
|
||||
AG_FLINCH,
|
||||
AG_FLINCHBIG,
|
||||
AG_ATTACK,
|
||||
AG_ATTACK2,
|
||||
AG_VICTORYSQUAT,
|
||||
AG_VICTORYEAT,
|
||||
AG_VICTORYSTAND,
|
||||
AG_FLINCHARML,
|
||||
AG_FLINCHLEGL,
|
||||
AG_FLINCHARMR,
|
||||
AG_FLINCHLEGR,
|
||||
AG_SHOOTUP,
|
||||
AG_SHOOTDOWN,
|
||||
AG_SHOOT,
|
||||
AG_SHOOTQUICK,
|
||||
AG_SHOOTLONG,
|
||||
AG_DIEHS,
|
||||
AG_DIEGUT,
|
||||
AG_DIEFORWARD,
|
||||
AG_DIE,
|
||||
AG_DIEBACK,
|
||||
AG_FLOAT,
|
||||
AG_SCARE,
|
||||
AG_OPEN,
|
||||
AG_SMASHRAIL,
|
||||
AG_LAND
|
||||
};
|
||||
|
||||
class monster_alien_grunt:HLXenMonster
|
||||
{
|
||||
float m_flIdleTime;
|
||||
float m_flPainTime;
|
||||
|
||||
void(void) monster_alien_grunt;
|
||||
|
||||
virtual void(void) HasBeenHit;
|
||||
virtual void(void) HasBeenKilled;
|
||||
virtual void(void) IdleNoise;
|
||||
virtual void(void) Respawn;
|
||||
};
|
||||
|
||||
void
|
||||
monster_alien_grunt::HasBeenHit(void)
|
||||
{
|
||||
if (m_flPainTime > time) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (random() < 0.25f) {
|
||||
return;
|
||||
}
|
||||
|
||||
Sound_Play(this, CHAN_VOICE, "monster_alien_grunt.pain");
|
||||
SetFrame(AG_FLINCH + floor(random(0, 2)));
|
||||
m_flPainTime = time + 0.25f;
|
||||
}
|
||||
|
||||
void
|
||||
monster_alien_grunt::HasBeenKilled(void)
|
||||
{
|
||||
|
||||
/* headshots == different animation */
|
||||
if (g_dmg_iHitBody == BODY_HEAD) {
|
||||
if (random() < 0.5) {
|
||||
SetFrame(AG_DIEHS);
|
||||
} else {
|
||||
SetFrame(AG_DIEFORWARD);
|
||||
}
|
||||
} else {
|
||||
SetFrame(AG_DIE + floor(random(0, 2)));
|
||||
}
|
||||
|
||||
Sound_Play(this, CHAN_VOICE, "monster_alien_grunt.die");
|
||||
}
|
||||
|
||||
void
|
||||
monster_alien_grunt::IdleNoise(void)
|
||||
{
|
||||
/* don't make noise if we're dead (corpse) */
|
||||
if (IsAlive() == false) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (m_flIdleTime > time) {
|
||||
return;
|
||||
}
|
||||
m_flIdleTime = time + random(2,10);
|
||||
|
||||
Sound_Play(this, CHAN_VOICE, "monster_alien_grunt.idle");
|
||||
}
|
||||
|
||||
void
|
||||
monster_alien_grunt::Respawn(void)
|
||||
{
|
||||
super::Respawn();
|
||||
SetFrame(AG_IDLE);
|
||||
}
|
||||
|
||||
void
|
||||
monster_alien_grunt::monster_alien_grunt(void)
|
||||
{
|
||||
Sound_Precache("monster_alien_grunt.alert");
|
||||
Sound_Precache("monster_alien_grunt.attack");
|
||||
Sound_Precache("monster_alien_grunt.die");
|
||||
Sound_Precache("monster_alien_grunt.idle");
|
||||
Sound_Precache("monster_alien_grunt.pain");
|
||||
|
||||
netname = "Alien Grunt";
|
||||
model = "models/agrunt.mdl";
|
||||
base_mins = [-32,-32,0];
|
||||
base_maxs = [32,32,64];
|
||||
base_health = Skill_GetValue("agrunt_health", 90);
|
||||
m_iAlliance = MAL_ALIEN;
|
||||
}
|
|
@ -1,246 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2016-2020 Marco Cawthorne <marco@icculus.org>
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
|
||||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/*QUAKED monster_alien_slave (0 0.8 0.8) (-16 -16 0) (16 16 72)
|
||||
|
||||
HALF-LIFE (1998) ENTITY
|
||||
|
||||
Alien Slave
|
||||
|
||||
*/
|
||||
|
||||
enum
|
||||
{
|
||||
SLV_IDLE,
|
||||
SLV_IDLE2,
|
||||
SLV_IDLE3,
|
||||
SLV_CROUCH,
|
||||
SLV_WALK,
|
||||
SLV_WALK2,
|
||||
SLV_RUN,
|
||||
SLV_RIGHT,
|
||||
SLV_LEFT,
|
||||
SLV_JUMP,
|
||||
SLV_STAIRUP,
|
||||
SLV_ATTACK,
|
||||
SLV_ATTACKZAP,
|
||||
SLV_FLINCH,
|
||||
SLV_FLINCHLA,
|
||||
SLV_FLINCHRA,
|
||||
SLV_FLINCHL,
|
||||
SLV_FLINCHR,
|
||||
SLV_DIEHS,
|
||||
SLV_DIE,
|
||||
SLV_DIEBACK,
|
||||
SLV_DIEFORWARD,
|
||||
SLV_COLLAR,
|
||||
SLV_COLLAR2,
|
||||
SLV_PUSHUP,
|
||||
SLV_GRAB,
|
||||
SLV_UPDOWN,
|
||||
SLV_DOWNUP,
|
||||
SLV_JIBBER,
|
||||
SLV_JABBER
|
||||
};
|
||||
|
||||
class monster_alien_slave:HLXenTalkMonster
|
||||
{
|
||||
float m_flIdleTime;
|
||||
float m_flPainTime;
|
||||
|
||||
void(void) monster_alien_slave;
|
||||
|
||||
virtual void(void) HasBeenKilled;
|
||||
virtual void(void) HasBeenHit;
|
||||
virtual void(void) IdleChat;
|
||||
virtual void(void) Respawn;
|
||||
|
||||
virtual int(void) AnimIdle;
|
||||
virtual int(void) AnimWalk;
|
||||
virtual int(void) AnimRun;
|
||||
|
||||
virtual int(void) AttackMelee;
|
||||
virtual void(void) AttackFlail;
|
||||
|
||||
virtual int(void) AttackRanged;
|
||||
virtual void(void) AttackBeam;
|
||||
};
|
||||
|
||||
int
|
||||
monster_alien_slave::AnimIdle(void)
|
||||
{
|
||||
return SLV_IDLE;
|
||||
}
|
||||
|
||||
int
|
||||
monster_alien_slave::AnimWalk(void)
|
||||
{
|
||||
return SLV_WALK;
|
||||
}
|
||||
|
||||
int
|
||||
monster_alien_slave::AnimRun(void)
|
||||
{
|
||||
return SLV_RUN;
|
||||
}
|
||||
|
||||
int
|
||||
monster_alien_slave::AttackMelee(void)
|
||||
{
|
||||
/* visual */
|
||||
AnimPlay(SLV_ATTACK);
|
||||
|
||||
m_flAttackThink = m_flAnimTime;
|
||||
|
||||
/* functional */
|
||||
think = AttackFlail;
|
||||
nextthink = time + 0.25f;
|
||||
return (1);
|
||||
}
|
||||
|
||||
void
|
||||
monster_alien_slave::AttackFlail(void)
|
||||
{
|
||||
traceline(origin, m_eEnemy.origin, FALSE, this);
|
||||
|
||||
if (trace_fraction >= 1.0 || trace_ent.takedamage != DAMAGE_YES) {
|
||||
Sound_Play(this, CHAN_WEAPON, "monster_zombie.attackmiss");
|
||||
return;
|
||||
}
|
||||
|
||||
Damage_Apply(trace_ent, this, 25, 0, 0);
|
||||
Sound_Play(this, CHAN_WEAPON, "monster_zombie.attackhit");
|
||||
}
|
||||
|
||||
int
|
||||
monster_alien_slave::AttackRanged(void)
|
||||
{
|
||||
/* visual */
|
||||
AnimPlay(SLV_ATTACKZAP);
|
||||
|
||||
m_flAttackThink = m_flAnimTime;
|
||||
Sound_Play(this, CHAN_VOICE, "monster_alien_slave.attack_charge");
|
||||
|
||||
/* functional */
|
||||
think = AttackBeam;
|
||||
nextthink = time + 1.5f;
|
||||
return (1);
|
||||
}
|
||||
|
||||
void
|
||||
monster_alien_slave::AttackBeam(void)
|
||||
{
|
||||
traceline(origin, m_eEnemy.origin, FALSE, this);
|
||||
Sound_Play(this, CHAN_WEAPON, "monster_alien_slave.attack_shoot");
|
||||
|
||||
if (trace_fraction >= 1.0 || trace_ent.takedamage != DAMAGE_YES) {
|
||||
//Sound_Play(this, CHAN_WEAPON, "monster_zombie.attackmiss");
|
||||
return;
|
||||
}
|
||||
|
||||
Damage_Apply(trace_ent, this, 100, 0, 0);
|
||||
}
|
||||
|
||||
void
|
||||
monster_alien_slave::IdleChat(void)
|
||||
{
|
||||
if (m_flIdleTime > time) {
|
||||
return;
|
||||
}
|
||||
|
||||
Sentence(m_talkIdle);
|
||||
|
||||
m_flIdleTime = time + 5.0f + random(0,20);
|
||||
}
|
||||
|
||||
void
|
||||
monster_alien_slave::HasBeenHit(void)
|
||||
{
|
||||
if (m_flPainTime > time) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (random() < 0.25f) {
|
||||
return;
|
||||
}
|
||||
|
||||
Sound_Play(this, CHAN_VOICE, "monster_alien_slave.pain");
|
||||
SetFrame(SLV_FLINCH + floor(random(0, 2)));
|
||||
m_flPainTime = time + 0.25f;
|
||||
}
|
||||
|
||||
void
|
||||
monster_alien_slave::HasBeenKilled(void)
|
||||
{
|
||||
/* headshots == different animation */
|
||||
if (g_dmg_iHitBody == BODY_HEAD) {
|
||||
if (random() < 0.5) {
|
||||
SetFrame(SLV_DIEHS);
|
||||
} else {
|
||||
SetFrame(SLV_DIEBACK);
|
||||
}
|
||||
} else {
|
||||
SetFrame(SLV_DIE + floor(random(0, 3)));
|
||||
}
|
||||
|
||||
Sound_Play(this, CHAN_VOICE, "monster_alien_slave.die");
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
monster_alien_slave::Respawn(void)
|
||||
{
|
||||
super::Respawn();
|
||||
SetFrame(SLV_IDLE);
|
||||
}
|
||||
|
||||
void
|
||||
monster_alien_slave::monster_alien_slave(void)
|
||||
{
|
||||
Sound_Precache("monster_alien_slave.die");
|
||||
Sound_Precache("monster_alien_slave.pain");
|
||||
Sound_Precache("monster_alien_slave.attack_charge");
|
||||
Sound_Precache("monster_alien_slave.attack_shoot");
|
||||
Sound_Precache("monster_zombie.attackhit");
|
||||
Sound_Precache("monster_zombie.attackmiss");
|
||||
|
||||
m_talkAnswer = "";
|
||||
m_talkAsk = "";
|
||||
m_talkAllyShot = "";
|
||||
m_talkGreet = "!SLV_ALERT";
|
||||
m_talkIdle = "!SLV_IDLE";
|
||||
m_talkSmelling = "";
|
||||
m_talkStare = "";
|
||||
m_talkSurvived = "";
|
||||
m_talkWounded = "";
|
||||
|
||||
m_talkPlayerAsk = "";
|
||||
m_talkPlayerGreet = "!SLV_ALERT";
|
||||
m_talkPlayerIdle = "";
|
||||
m_talkPlayerWounded1 = "";
|
||||
m_talkPlayerWounded2 = "";
|
||||
m_talkPlayerWounded3 = "";
|
||||
m_talkUnfollow = "";
|
||||
m_talkFollow = "";
|
||||
m_talkStopFollow = "";
|
||||
|
||||
netname = "Alien Slave";
|
||||
model = "models/islave.mdl";
|
||||
base_health = Skill_GetValue("islave_health", 30);
|
||||
base_mins = [-16,-16,0];
|
||||
base_maxs = [16,16,72];
|
||||
m_iAlliance = MAL_ALIEN;
|
||||
}
|
|
@ -1,47 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2016-2020 Marco Cawthorne <marco@icculus.org>
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
|
||||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/*QUAKED monster_apache (0 0.8 0.8) (-300 -300 -172) (300 300 8)
|
||||
|
||||
HALF-LIFE (1998) ENTITY
|
||||
|
||||
Boeing AH-64 Apache
|
||||
|
||||
*/
|
||||
|
||||
class monster_apache:NSMonster
|
||||
{
|
||||
void(void) monster_apache;
|
||||
virtual void(void) Respawn;
|
||||
};
|
||||
|
||||
void monster_apache::Respawn(void)
|
||||
{
|
||||
super::Respawn();
|
||||
movetype = MOVETYPE_NONE;
|
||||
takedamage = DAMAGE_NO;
|
||||
iBleeds = FALSE;
|
||||
setsize(this, [-300,-300,-172], [300, 300, 8]);
|
||||
}
|
||||
|
||||
void monster_apache::monster_apache(void)
|
||||
{
|
||||
netname = "Apache";
|
||||
model = "models/apache.mdl";
|
||||
base_mins = [-16,-16,0];
|
||||
base_maxs = [16,16,72];
|
||||
base_health = Skill_GetValue("apache_health", 250);
|
||||
}
|
|
@ -1,33 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2016-2020 Marco Cawthorne <marco@icculus.org>
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
|
||||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/*QUAKED monster_babycrab (0 0.8 0.8) (-16 -16 0) (16 16 36)
|
||||
|
||||
HALF-LIFE (1998) ENTITY
|
||||
|
||||
Baby Headcrab
|
||||
|
||||
*/
|
||||
|
||||
class monster_babycrab:monster_headcrab
|
||||
{
|
||||
void(void) monster_babycrab;
|
||||
};
|
||||
|
||||
void
|
||||
monster_babycrab::monster_babycrab(void)
|
||||
{
|
||||
}
|
|
@ -1,77 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2016-2020 Marco Cawthorne <marco@icculus.org>
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
|
||||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/*QUAKED monster_barnacle (0 0.8 0.8) (-16 -16 -36) (16 16 0)
|
||||
|
||||
HALF-LIFE (1998) ENTITY
|
||||
|
||||
Barnacle
|
||||
|
||||
*/
|
||||
|
||||
enum
|
||||
{
|
||||
BCL_IDLE,
|
||||
BCL_IDLE2,
|
||||
BCL_IDLE3,
|
||||
BCL_FLINCH,
|
||||
BCL_ATTACK,
|
||||
BCL_CHEW,
|
||||
BCL_DIE
|
||||
};
|
||||
|
||||
class monster_barnacle:NSMonster
|
||||
{
|
||||
void(void) monster_barnacle;
|
||||
|
||||
/* overrides */
|
||||
virtual void(void) HasBeenKilled;
|
||||
virtual void(void) Respawn;
|
||||
virtual void(void) Physics;
|
||||
};
|
||||
|
||||
void
|
||||
monster_barnacle::Physics(void)
|
||||
{
|
||||
movetype = MOVETYPE_NONE;
|
||||
}
|
||||
|
||||
void
|
||||
monster_barnacle::HasBeenKilled(void)
|
||||
{
|
||||
SetFrame(BCL_DIE);
|
||||
StartSoundDef("monster_barnacle.die", CHAN_VOICE, true);
|
||||
}
|
||||
|
||||
void
|
||||
monster_barnacle::Respawn(void)
|
||||
{
|
||||
super::Respawn();
|
||||
SetFrame(BCL_IDLE);
|
||||
}
|
||||
|
||||
void monster_barnacle::monster_barnacle(void)
|
||||
{
|
||||
Sound_Precache("monster_barnacle.attackchew");
|
||||
Sound_Precache("monster_barnacle.attackpull");
|
||||
Sound_Precache("monster_barnacle.die");
|
||||
|
||||
netname = "Barnacle";
|
||||
model = "models/barnacle.mdl";
|
||||
base_mins = [-16,-16,-36];
|
||||
base_maxs = [16,16,0];
|
||||
base_health = Skill_GetValue("barnacle_health", 25);
|
||||
}
|
|
@ -1,237 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2016-2020 Marco Cawthorne <marco@icculus.org>
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
|
||||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/*QUAKED monster_barney (0 0.8 0.8) (-16 -16 0) (16 16 72)
|
||||
|
||||
HALF-LIFE (1998) ENTITY
|
||||
|
||||
Barney Calhoun
|
||||
|
||||
*/
|
||||
|
||||
enum
|
||||
{
|
||||
BA_IDLE1,
|
||||
BA_IDLE2,
|
||||
BA_IDLE3,
|
||||
BA_IDLE4,
|
||||
BA_WALK,
|
||||
BA_RUN,
|
||||
BA_SHOOT1,
|
||||
BA_SHOOT2,
|
||||
BA_DRAW,
|
||||
BA_HOLSTER,
|
||||
BA_RELOAD,
|
||||
BA_TURNLEFT,
|
||||
BA_TURNRIGHT,
|
||||
BA_FLINCH_LA,
|
||||
BA_FLINCH_RA,
|
||||
BA_FLINCH_LL,
|
||||
BA_FLINCH_RL,
|
||||
BA_FLINCH_SML
|
||||
};
|
||||
|
||||
#if 0
|
||||
class monster_barney:NSTalkMonster
|
||||
{
|
||||
void(void) monster_barney;
|
||||
|
||||
virtual void(void) Spawned;
|
||||
virtual void(void) Respawn;
|
||||
virtual void(void) OnPlayerUse;
|
||||
virtual void(void) Pain;
|
||||
virtual void(void) Death;
|
||||
virtual int(void) AnimIdle;
|
||||
virtual int(void) AnimWalk;
|
||||
virtual int(void) AnimRun;
|
||||
|
||||
virtual void(void) AttackDraw;
|
||||
virtual void(void) AttackHolster;
|
||||
virtual int(void) AttackMelee;
|
||||
virtual int(void) AttackRanged;
|
||||
|
||||
virtual void(monsterState_t, monsterState_t) StateChanged;
|
||||
};
|
||||
|
||||
int
|
||||
monster_barney::AnimIdle(void)
|
||||
{
|
||||
return BA_IDLE1;
|
||||
}
|
||||
|
||||
int
|
||||
monster_barney::AnimWalk(void)
|
||||
{
|
||||
return BA_WALK;
|
||||
}
|
||||
|
||||
int
|
||||
monster_barney::AnimRun(void)
|
||||
{
|
||||
return BA_RUN;
|
||||
}
|
||||
|
||||
void
|
||||
monster_barney::AttackDraw(void)
|
||||
{
|
||||
AnimPlay(BA_DRAW);
|
||||
m_flAttackThink = m_flAnimTime;
|
||||
}
|
||||
|
||||
void
|
||||
monster_barney::AttackHolster(void)
|
||||
{
|
||||
AnimPlay(BA_HOLSTER);
|
||||
m_flAttackThink = m_flAnimTime;
|
||||
}
|
||||
|
||||
int
|
||||
monster_barney::AttackMelee(void)
|
||||
{
|
||||
return AttackRanged();
|
||||
}
|
||||
|
||||
int
|
||||
monster_barney::AttackRanged(void)
|
||||
{
|
||||
/* visual */
|
||||
AnimPlay(BA_SHOOT1);
|
||||
m_flAttackThink = time + 0.4f;
|
||||
|
||||
/* functional */
|
||||
v_angle = vectoangles(m_eEnemy.origin - origin);
|
||||
TraceAttack_FireBullets(1, origin + [0,0,16], 8, [0.01,0.01], 2);
|
||||
Sound_Play(this, CHAN_WEAPON, "weapon_glock.fire");
|
||||
return (1);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
monster_barney::StateChanged(monsterState_t oldState, monsterState_t newState)
|
||||
{
|
||||
super::StateChanged(oldState, newState);
|
||||
|
||||
switch (newState) {
|
||||
case MONSTER_AIMING:
|
||||
if (oldState == MONSTER_ALERT)
|
||||
AttackDraw();
|
||||
break;
|
||||
case MONSTER_ALERT:
|
||||
if (oldState == MONSTER_AIMING)
|
||||
AttackHolster();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
monster_barney::OnPlayerUse(void)
|
||||
{
|
||||
if (spawnflags & MSF_PREDISASTER) {
|
||||
Sentence("!BA_POK");
|
||||
return;
|
||||
}
|
||||
|
||||
super::OnPlayerUse();
|
||||
}
|
||||
|
||||
void
|
||||
monster_barney::Pain(void)
|
||||
{
|
||||
/* don't bother if we're fully dead */
|
||||
if (IsAlive() == false)
|
||||
return;
|
||||
|
||||
super::Pain();
|
||||
|
||||
if (InAnimation() == true)
|
||||
return;
|
||||
|
||||
if (random() < 0.25f)
|
||||
return;
|
||||
|
||||
Sound_Speak(this, "monster_barney.pain");
|
||||
|
||||
AnimPlay(BA_FLINCH_LA + floor(random(0, 5)));
|
||||
m_flAttackThink = m_flAnimTime;
|
||||
}
|
||||
|
||||
void
|
||||
monster_barney::Death(void)
|
||||
{
|
||||
if (IsAlive() == true) {
|
||||
SetFrame(25 + floor(random(0, 6)));
|
||||
Sound_Speak(this, "monster_barney.die");
|
||||
}
|
||||
|
||||
/* now mark our state as 'dead' */
|
||||
super::Death();
|
||||
}
|
||||
|
||||
void
|
||||
monster_barney::Respawn(void)
|
||||
{
|
||||
super::Respawn();
|
||||
m_iFlags |= MONSTER_CANFOLLOW;
|
||||
PlayerUse = OnPlayerUse;
|
||||
}
|
||||
|
||||
void
|
||||
monster_barney::Spawned(void)
|
||||
{
|
||||
Sound_Precache("monster_barney.die");
|
||||
Sound_Precache("monster_barney.pain");
|
||||
|
||||
/* TODO
|
||||
* BA_MAD - When player gets too naughty
|
||||
* */
|
||||
m_talkAnswer = "!BA_ANSWER";
|
||||
m_talkAsk = "!BA_QUESTION";
|
||||
m_talkAllyShot = "!BA_SHOOT";
|
||||
m_talkGreet = "";
|
||||
m_talkIdle = "!BA_IDLE";
|
||||
m_talkHearing = "!BA_HEAR";
|
||||
m_talkSmelling = "!BA_SMELL";
|
||||
m_talkStare = "!BA_STARE";
|
||||
m_talkSurvived = "!BA_WOUND";
|
||||
m_talkWounded = "!BA_WOUND";
|
||||
|
||||
m_talkPlayerAsk = "!BA_QUESTION";
|
||||
m_talkPlayerGreet = "!BA_HELLO";
|
||||
m_talkPlayerIdle = "!BA_IDLE";
|
||||
m_talkPlayerWounded1 = "!BA_CUREA";
|
||||
m_talkPlayerWounded2 = "!BA_CUREB";
|
||||
m_talkPlayerWounded3 = "!BA_CUREC";
|
||||
m_talkUnfollow = "!BA_WAIT";
|
||||
m_talkFollow = "!BA_OK";
|
||||
m_talkStopFollow = "!BA_STOP";
|
||||
|
||||
model = "models/barney.mdl";
|
||||
netname = "Barney";
|
||||
base_health = Skill_GetValue("barney_health", 35);
|
||||
base_mins = [-16,-16,0];
|
||||
base_maxs = [16,16,72];
|
||||
m_iAlliance = MAL_FRIEND;
|
||||
|
||||
super::Spawned();
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
monster_barney::monster_barney(void)
|
||||
{
|
||||
}
|
||||
#endif
|
|
@ -1,73 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2016-2020 Marco Cawthorne <marco@icculus.org>
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
|
||||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/*QUAKED monster_barney_dead (0 0.8 0.8) (-16 -16 0) (16 16 72)
|
||||
|
||||
HALF-LIFE (1998) ENTITY
|
||||
|
||||
Barney's corpse
|
||||
|
||||
*/
|
||||
|
||||
class monster_barney_dead:NSTalkMonster
|
||||
{
|
||||
int m_iPose;
|
||||
|
||||
void(void) monster_barney_dead;
|
||||
|
||||
virtual void(void) Respawn;
|
||||
virtual void(string, string) SpawnKey;
|
||||
};
|
||||
|
||||
void
|
||||
monster_barney_dead::Respawn(void)
|
||||
{
|
||||
v_angle = GetSpawnAngles();
|
||||
v_angle[0] = Math_FixDelta(v_angle[0]);
|
||||
v_angle[1] = Math_FixDelta(v_angle[1]);
|
||||
v_angle[2] = Math_FixDelta(v_angle[2]);
|
||||
|
||||
SetOrigin(GetSpawnOrigin());
|
||||
SetAngles(v_angle);
|
||||
SetSolid(SOLID_CORPSE);
|
||||
SetMovetype(MOVETYPE_NONE);
|
||||
SetModel(GetSpawnModel());
|
||||
SetSize(VEC_HULL_MIN + [0,0,36], VEC_HULL_MAX + [0,0,36]);
|
||||
SetTakedamage(DAMAGE_YES);
|
||||
SetHealth(0);
|
||||
SetVelocity([0,0,0]);
|
||||
SetFrame(35 + m_iPose);
|
||||
|
||||
iBleeds = TRUE;
|
||||
}
|
||||
|
||||
void
|
||||
monster_barney_dead::SpawnKey(string strKey, string strValue)
|
||||
{
|
||||
switch (strKey) {
|
||||
case "pose":
|
||||
m_iPose = stoi(strValue);
|
||||
break;
|
||||
default:
|
||||
super::SpawnKey(strKey, strValue);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
monster_barney_dead::monster_barney_dead(void)
|
||||
{
|
||||
model = "models/barney.mdl";
|
||||
}
|
|
@ -1,131 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2016-2020 Marco Cawthorne <marco@icculus.org>
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
|
||||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/*QUAKED monster_bigmomma (0 0.8 0.8) (-95 -95 0) (95 95 190)
|
||||
|
||||
HALF-LIFE (1998) ENTITY
|
||||
|
||||
Gonarch
|
||||
|
||||
*/
|
||||
|
||||
enum
|
||||
{
|
||||
GON_IDLE,
|
||||
GON_IDLE2,
|
||||
GON_WALK,
|
||||
GON_RUN,
|
||||
GON_DIE,
|
||||
GON_CLAW,
|
||||
GON_CLAW2,
|
||||
GON_CLAW3,
|
||||
GON_SPAWN,
|
||||
GON_SHOOT,
|
||||
GON_FLINCH,
|
||||
GON_DEFEND,
|
||||
GON_JUMP,
|
||||
GON_ANGRY,
|
||||
GON_ANGRY2,
|
||||
GON_ANGRY3,
|
||||
GON_BREAKWALL,
|
||||
GON_FALL,
|
||||
GON_FALL2,
|
||||
GON_FALLDIE
|
||||
};
|
||||
|
||||
class monster_bigmomma:HLXenMonster
|
||||
{
|
||||
float m_flIdleTime;
|
||||
|
||||
void(void) monster_bigmomma;
|
||||
|
||||
virtual void(void) Death;
|
||||
virtual void(void) Pain;
|
||||
virtual void(void) IdleNoise;
|
||||
virtual void(void) Respawn;
|
||||
};
|
||||
|
||||
void
|
||||
monster_bigmomma::IdleNoise(void)
|
||||
{
|
||||
/* don't make noise if we're dead (corpse) */
|
||||
if (IsAlive() == false) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (m_flIdleTime > time) {
|
||||
return;
|
||||
}
|
||||
/* timing needs to adjusted as sounds conflict */
|
||||
m_flIdleTime = time + random(2,10);
|
||||
|
||||
Sound_Play(this, CHAN_VOICE, "monster_bigmomma.idle");
|
||||
}
|
||||
|
||||
void
|
||||
monster_bigmomma::Pain(void)
|
||||
{
|
||||
super::Pain();
|
||||
|
||||
if (m_flAnimTime > time) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (random() < 0.25f) {
|
||||
return;
|
||||
}
|
||||
|
||||
Sound_Play(this, CHAN_VOICE, "monster_bigmomma.pain");
|
||||
SetFrame(GON_FLINCH);
|
||||
m_flAnimTime = time + 0.25f;
|
||||
}
|
||||
|
||||
void
|
||||
monster_bigmomma::Death(void)
|
||||
{
|
||||
/* if we're already dead (corpse) don't change animations */
|
||||
if (IsAlive() == true) {
|
||||
SetFrame(GON_DIE);
|
||||
Sound_Play(this, CHAN_VOICE, "monster_bigmomma.die");
|
||||
}
|
||||
|
||||
/* set the functional differences */
|
||||
super::Death();
|
||||
}
|
||||
|
||||
void
|
||||
monster_bigmomma::Respawn(void)
|
||||
{
|
||||
super::Respawn();
|
||||
SetFrame(GON_IDLE);
|
||||
}
|
||||
|
||||
void monster_bigmomma::monster_bigmomma(void)
|
||||
{
|
||||
Sound_Precache("monster_bigmomma.alert");
|
||||
Sound_Precache("monster_bigmomma.attack");
|
||||
Sound_Precache("monster_bigmomma.child");
|
||||
Sound_Precache("monster_bigmomma.die");
|
||||
Sound_Precache("monster_bigmomma.idle");
|
||||
Sound_Precache("monster_bigmomma.pain");
|
||||
Sound_Precache("monster_bigmomma.step");
|
||||
netname = "Gonarch";
|
||||
model = "models/big_mom.mdl";
|
||||
/* health is based on factor, for it's not killable until last stage */
|
||||
base_health = Skill_GetValue("bigmomma_health_factor", 1.5) * 300;
|
||||
base_mins = [-95,-95,0];
|
||||
base_maxs = [95,95,190];
|
||||
}
|
|
@ -1,36 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2016-2020 Marco Cawthorne <marco@icculus.org>
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
|
||||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/*QUAKED monster_bloater (0 0.8 0.8) (-16 -16 0) (16 16 72)
|
||||
|
||||
HALF-LIFE (1998) ENTITY
|
||||
|
||||
Flocking Floater
|
||||
|
||||
*/
|
||||
|
||||
class monster_bloater:HLXenMonster
|
||||
{
|
||||
void(void) monster_bloater;
|
||||
};
|
||||
|
||||
void monster_bloater::monster_bloater(void)
|
||||
{
|
||||
netname = "Floater";
|
||||
model = "models/floater.mdl";
|
||||
base_mins = [-16,-16,0];
|
||||
base_maxs = [16,16,72];
|
||||
}
|
|
@ -1,154 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2016-2020 Marco Cawthorne <marco@icculus.org>
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
|
||||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/*QUAKED monster_bullchicken (0 0.8 0.8) (-32 -32 0) (32 32 64)
|
||||
|
||||
HALF-LIFE (1998) ENTITY
|
||||
|
||||
Bullsquid
|
||||
|
||||
*/
|
||||
|
||||
enum
|
||||
{
|
||||
BULL_WALK,
|
||||
BULL_RUN,
|
||||
BULL_SURPIRSE,
|
||||
BULL_FLINCH,
|
||||
BULL_FLINCH2,
|
||||
BULL_LEFT,
|
||||
BULL_RIGHT,
|
||||
BULL_IDLE,
|
||||
BULL_WHIP,
|
||||
BULL_BITE,
|
||||
BULL_RANGE,
|
||||
BULL_LOOK,
|
||||
BULL_SEECRAB,
|
||||
BULL_EAT,
|
||||
BULL_INSPECT,
|
||||
BULL_SNIFF,
|
||||
BULL_DIE,
|
||||
BULL_DIE2,
|
||||
BULL_JUMP,
|
||||
BULL_DRAGIDLE,
|
||||
BULL_DRAG,
|
||||
BULL_SCARE,
|
||||
BULL_FALLIDLE,
|
||||
BULL_FALL
|
||||
};
|
||||
|
||||
/* the growls are used in combination with the bite sounds
|
||||
* for close range attacks
|
||||
*/
|
||||
|
||||
class monster_bullchicken:HLXenMonster
|
||||
{
|
||||
float m_flIdleTime;
|
||||
|
||||
void(void) monster_bullchicken;
|
||||
|
||||
virtual void(void) Death;
|
||||
virtual void(void) Pain;
|
||||
virtual void(void) IdleNoise;
|
||||
virtual int(void) AnimIdle;
|
||||
virtual int(void) AnimWalk;
|
||||
virtual int(void) AnimRun;
|
||||
};
|
||||
|
||||
int
|
||||
monster_bullchicken::AnimIdle(void)
|
||||
{
|
||||
return BULL_IDLE;
|
||||
}
|
||||
|
||||
int
|
||||
monster_bullchicken::AnimWalk(void)
|
||||
{
|
||||
return BULL_WALK;
|
||||
}
|
||||
|
||||
int
|
||||
monster_bullchicken::AnimRun(void)
|
||||
{
|
||||
return BULL_RUN;
|
||||
}
|
||||
|
||||
void
|
||||
monster_bullchicken::IdleNoise(void)
|
||||
{
|
||||
/* don't make noise if we're dead (corpse) */
|
||||
if (IsAlive() == false) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (m_flIdleTime > time) {
|
||||
return;
|
||||
}
|
||||
/* timing needs to adjusted as sounds conflict */
|
||||
m_flIdleTime = time + random(2,10);
|
||||
|
||||
Sound_Play(this, CHAN_VOICE, "monster_bullchicken.idle");
|
||||
}
|
||||
|
||||
void
|
||||
monster_bullchicken::Pain(void)
|
||||
{
|
||||
super::Pain();
|
||||
|
||||
if (m_flAnimTime > time) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (random() < 0.25f) {
|
||||
return;
|
||||
}
|
||||
|
||||
Sound_Play(this, CHAN_VOICE, "monster_bullchicken.pain");
|
||||
SetFrame((random() < 0.5) ? BULL_FLINCH : BULL_FLINCH2);
|
||||
m_flAnimTime = time + 0.25f;
|
||||
}
|
||||
|
||||
void
|
||||
monster_bullchicken::Death(void)
|
||||
{
|
||||
/* if we're already dead (corpse) don't change animations */
|
||||
if (IsAlive() == true) {
|
||||
|
||||
/* two different animations */
|
||||
SetFrame((random() < 0.5) ? BULL_DIE : BULL_DIE2);
|
||||
|
||||
Sound_Play(this, CHAN_VOICE, "monster_bullchicken.die");
|
||||
}
|
||||
|
||||
/* set the functional differences */
|
||||
super::Death();
|
||||
}
|
||||
|
||||
void monster_bullchicken::monster_bullchicken(void)
|
||||
{
|
||||
Sound_Precache("monster_bullchicken.alert");
|
||||
Sound_Precache("monster_bullchicken.attack");
|
||||
Sound_Precache("monster_bullchicken.attackbite");
|
||||
Sound_Precache("monster_bullchicken.attackshoot");
|
||||
Sound_Precache("monster_bullchicken.die");
|
||||
Sound_Precache("monster_bullchicken.idle");
|
||||
Sound_Precache("monster_bullchicken.pain");
|
||||
netname = "Bullsquid";
|
||||
model = "models/bullsquid.mdl";
|
||||
base_health = Skill_GetValue("bullsquid_health", 40);
|
||||
base_mins = [-32,-32,0];
|
||||
base_maxs = [32,32,64];
|
||||
}
|
|
@ -1,53 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2016-2020 Marco Cawthorne <marco@icculus.org>
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
|
||||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/*QUAKED monster_cockroach (0 0.8 0.8) (-4 -4 0) (4 4 4)
|
||||
|
||||
HALF-LIFE (1998) ENTITY
|
||||
|
||||
Cockroach
|
||||
|
||||
*/
|
||||
|
||||
class monster_cockroach:NSMonster
|
||||
{
|
||||
void(void) monster_cockroach;
|
||||
virtual void(void) Death;
|
||||
};
|
||||
|
||||
void
|
||||
monster_cockroach::Death(void)
|
||||
{
|
||||
/* if we're already dead (corpse) don't change animations */
|
||||
if (IsAlive() == true) {
|
||||
Sound_Play(this, CHAN_VOICE, "monster_cockroach.die");
|
||||
}
|
||||
|
||||
/* make sure we gib this thing */
|
||||
health = -100;
|
||||
|
||||
/* set the functional differences */
|
||||
super::Death();
|
||||
}
|
||||
|
||||
void monster_cockroach::monster_cockroach(void)
|
||||
{
|
||||
Sound_Precache("monster_cockroach.die");
|
||||
netname = "Cockroach";
|
||||
model = "models/roach.mdl";
|
||||
base_mins = [-1,-1,0];
|
||||
base_maxs = [1,1,1];
|
||||
}
|
|
@ -1,36 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2016-2020 Marco Cawthorne <marco@icculus.org>
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
|
||||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/*QUAKED monster_flyer_flock (0 0.8 0.8) (-16 -16 0) (16 16 16)
|
||||
|
||||
HALF-LIFE (1998) ENTITY
|
||||
|
||||
Boid
|
||||
|
||||
*/
|
||||
|
||||
class monster_flyer_flock:HLXenMonster
|
||||
{
|
||||
void(void) monster_flyer_flock;
|
||||
};
|
||||
|
||||
void monster_flyer_flock::monster_flyer_flock(void)
|
||||
{
|
||||
netname = "Boid";
|
||||
model = "models/aflock.mdl";
|
||||
base_mins = [-16,-16,0];
|
||||
base_maxs = [16,16,16];
|
||||
}
|
|
@ -1,137 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2016-2020 Marco Cawthorne <marco@icculus.org>
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
|
||||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/*QUAKED monster_gargantua (0 0.8 0.8) (-32 -32 0) (32 32 128)
|
||||
|
||||
HALF-LIFE (1998) ENTITY
|
||||
|
||||
Gargantua
|
||||
|
||||
*/
|
||||
|
||||
enum
|
||||
{
|
||||
GARG_IDLE,
|
||||
GARG_IDLE2,
|
||||
GARG_IDLE3,
|
||||
GARG_IDLE4,
|
||||
GARG_WALK,
|
||||
GARG_RUN,
|
||||
GARG_SHOOT,
|
||||
GARG_SHOOT2,
|
||||
GARG_ATTACK,
|
||||
GARG_STOMP,
|
||||
GARG_LEFT,
|
||||
GARG_RIGHT,
|
||||
GARG_FLINCH,
|
||||
GARG_FLINCH2,
|
||||
GARG_DIE,
|
||||
GARG_BITEHEAD,
|
||||
GARG_THROW,
|
||||
GARG_SMASH,
|
||||
GARG_ROLLCAR,
|
||||
GARG_KICKCAR,
|
||||
GARG_PUSHCAR,
|
||||
GARG_BUST
|
||||
};
|
||||
|
||||
class monster_gargantua:HLXenMonster
|
||||
{
|
||||
float m_flIdleTime;
|
||||
|
||||
void(void) monster_gargantua;
|
||||
|
||||
virtual void(void) Spawned;
|
||||
virtual void(void) HasBeenKilled;
|
||||
virtual void(void) HasBeenHit;
|
||||
virtual void(void) IdleNoise;
|
||||
virtual void(void) Respawn;
|
||||
};
|
||||
|
||||
void
|
||||
monster_gargantua::IdleNoise(void)
|
||||
{
|
||||
/* don't make noise if we're dead (corpse) */
|
||||
if (IsAlive() == false) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (m_flIdleTime > time) {
|
||||
return;
|
||||
}
|
||||
/* timing needs to adjusted as sounds conflict */
|
||||
m_flIdleTime = time + random(2,10);
|
||||
|
||||
Sound_Play(this, CHAN_VOICE, "monster_gargantua.idle");
|
||||
}
|
||||
|
||||
void
|
||||
monster_gargantua::HasBeenHit(void)
|
||||
{
|
||||
if (m_flAnimTime > time) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (random() < 0.25f) {
|
||||
return;
|
||||
}
|
||||
|
||||
Sound_Play(this, CHAN_VOICE, "monster_gargantua.pain");
|
||||
SetFrame((random() < 0.5) ? GARG_FLINCH : GARG_FLINCH2);
|
||||
m_flAnimTime = time + 0.25f;
|
||||
}
|
||||
|
||||
void
|
||||
monster_gargantua::HasBeenKilled(void)
|
||||
{
|
||||
SetFrame(GARG_DIE);
|
||||
Sound_Play(this, CHAN_VOICE, "monster_gargantua.die");
|
||||
}
|
||||
|
||||
void
|
||||
monster_gargantua::Respawn(void)
|
||||
{
|
||||
super::Respawn();
|
||||
SetFrame(GARG_IDLE);
|
||||
/* takes damage from explosives only
|
||||
* takedamage = DAMAGE_NO; */
|
||||
iBleeds = FALSE;
|
||||
}
|
||||
|
||||
void
|
||||
monster_gargantua::Spawned(void)
|
||||
{
|
||||
super::Spawned();
|
||||
|
||||
Sound_Precache("monster_gargantua.alert");
|
||||
Sound_Precache("monster_gargantua.attack");
|
||||
Sound_Precache("monster_gargantua.attackflame");
|
||||
Sound_Precache("monster_gargantua.attackflameon");
|
||||
Sound_Precache("monster_gargantua.attackflameoff");
|
||||
Sound_Precache("monster_gargantua.die");
|
||||
Sound_Precache("monster_gargantua.idle");
|
||||
Sound_Precache("monster_gargantua.pain");
|
||||
Sound_Precache("monster_gargantua.step");
|
||||
}
|
||||
|
||||
void monster_gargantua::monster_gargantua(void)
|
||||
{
|
||||
netname = "Gargantua";
|
||||
model = "models/garg.mdl";
|
||||
base_health = Skill_GetValue("gargantua_health", 800);
|
||||
base_mins = [-32,-32,0];
|
||||
base_maxs = [32,32,128];
|
||||
}
|
|
@ -1,86 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2016-2020 Marco Cawthorne <marco@icculus.org>
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
|
||||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/*QUAKED monster_gman (0 0.8 0.8) (-16 -16 0) (16 16 72)
|
||||
|
||||
HALF-LIFE (1998) ENTITY
|
||||
|
||||
G-Man
|
||||
|
||||
*/
|
||||
|
||||
enum
|
||||
{
|
||||
GMAN_IDLE,
|
||||
GMAN_IDLETIE,
|
||||
GMAN_IDLELOOK,
|
||||
GMAN_IDLE2,
|
||||
GMAN_OPEN,
|
||||
GMAN_STAND,
|
||||
GMAN_WALK,
|
||||
GMAN_YES,
|
||||
GMAN_NO,
|
||||
GMAN_NOBIG,
|
||||
GMAN_YESBIG,
|
||||
GMAN_LISTEN,
|
||||
GMAN_LOOKDOWN,
|
||||
GMAN_LOOKDOWN2
|
||||
};
|
||||
|
||||
class monster_gman:NSTalkMonster
|
||||
{
|
||||
void(void) monster_gman;
|
||||
|
||||
virtual void(void) Respawn;
|
||||
virtual int(void) AnimIdle;
|
||||
virtual int(void) AnimWalk;
|
||||
virtual int(void) AnimRun;
|
||||
};
|
||||
|
||||
int
|
||||
monster_gman::AnimIdle(void)
|
||||
{
|
||||
return GMAN_IDLE;
|
||||
}
|
||||
|
||||
int
|
||||
monster_gman::AnimWalk(void)
|
||||
{
|
||||
return GMAN_WALK;
|
||||
}
|
||||
|
||||
int
|
||||
monster_gman::AnimRun(void)
|
||||
{
|
||||
return GMAN_WALK;
|
||||
}
|
||||
|
||||
void monster_gman::Respawn(void)
|
||||
{
|
||||
/* he can't die, he's the G-Man! */
|
||||
super::Respawn();
|
||||
SetFrame(GMAN_IDLE);
|
||||
takedamage = DAMAGE_NO;
|
||||
iBleeds = FALSE;
|
||||
}
|
||||
|
||||
void monster_gman::monster_gman(void)
|
||||
{
|
||||
netname = "G-Man";
|
||||
model = "models/gman.mdl";
|
||||
base_mins = [-16,-16,0];
|
||||
base_maxs = [16,16,72];
|
||||
}
|
|
@ -1,173 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2016-2020 Marco Cawthorne <marco@icculus.org>
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
|
||||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/*QUAKED monster_headcrab (0 0.8 0.8) (-16 -16 0) (16 16 36)
|
||||
|
||||
HALF-LIFE (1998) ENTITY
|
||||
|
||||
Headcrab
|
||||
|
||||
*/
|
||||
|
||||
enum
|
||||
{
|
||||
HC_IDLE1,
|
||||
HC_IDLE2,
|
||||
HC_IDLE3,
|
||||
HC_WALK,
|
||||
HC_RUN,
|
||||
HC_ANGRY,
|
||||
HC_FLINCH,
|
||||
HC_DIE,
|
||||
HC_180_LEFT,
|
||||
HC_180_RIGHT,
|
||||
HC_JUMP,
|
||||
HC_JUMP_VARIATION1,
|
||||
HC_JUMP_VARIATION2,
|
||||
HC_YAW_ADJUSTMENT,
|
||||
HC_HEADCRABBED1,
|
||||
HC_HEADCRABBED2,
|
||||
HC_HEADIDLE,
|
||||
HC_CRASHIDLE,
|
||||
HC_CRASH,
|
||||
HC_STRUGGLEIDLE,
|
||||
HC_STRUGGLE
|
||||
};
|
||||
|
||||
class monster_headcrab:HLXenMonster
|
||||
{
|
||||
bool m_bBiting;
|
||||
float m_flIdleTime;
|
||||
|
||||
void monster_headcrab(void);
|
||||
|
||||
virtual void Spawned(void);
|
||||
virtual void HasBeenHit(void);
|
||||
virtual void HasBeenKilled(void);
|
||||
virtual void IdleNoise(void);
|
||||
virtual int AttackMelee(void);
|
||||
virtual void Touch(entity);
|
||||
virtual float MeleeMaxDistance(void);
|
||||
};
|
||||
|
||||
float
|
||||
monster_headcrab:: MeleeMaxDistance(void)
|
||||
{
|
||||
return 256;
|
||||
}
|
||||
|
||||
int
|
||||
monster_headcrab::AttackMelee(void)
|
||||
{
|
||||
/* visual */
|
||||
if (random() < 0.5)
|
||||
AnimPlay(HC_JUMP);
|
||||
else
|
||||
AnimPlay(HC_JUMP_VARIATION1);
|
||||
|
||||
m_flAttackThink = m_flAnimTime + 0.25;
|
||||
Sound_Play(this, CHAN_VOICE, "monster_headcrab.attack");
|
||||
|
||||
/* functional */
|
||||
vector jumpVelocity;
|
||||
makevectors(vectoangles(m_eEnemy.origin - origin));
|
||||
jumpVelocity = (v_forward * 512) + [0, 0, 250];
|
||||
SetVelocity(jumpVelocity);
|
||||
m_bBiting = true;
|
||||
return (1);
|
||||
}
|
||||
|
||||
void
|
||||
monster_headcrab::Touch(entity eToucher)
|
||||
{
|
||||
if (m_bBiting)
|
||||
if (eToucher.takedamage == DAMAGE_YES)
|
||||
if (frame == HC_JUMP || frame == HC_JUMP_VARIATION1) {
|
||||
Damage_Apply(eToucher, this, Skill_GetValue("headcrab_dmg_bite", 10), 0, 0);
|
||||
StartSoundDef("monster_headcrab.attackhit", CHAN_VOICE, true);
|
||||
m_bBiting = false;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
monster_headcrab::HasBeenHit(void)
|
||||
{
|
||||
if (m_flAnimTime > time) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (random() < 0.25f) {
|
||||
return;
|
||||
}
|
||||
|
||||
Sound_Play(this, CHAN_VOICE, "monster_headcrab.pain");
|
||||
SetFrame(HC_FLINCH);
|
||||
m_flAnimTime = time + 0.25f;
|
||||
}
|
||||
|
||||
void
|
||||
monster_headcrab::HasBeenKilled(void)
|
||||
{
|
||||
SetFrame(HC_DIE);
|
||||
Sound_Play(this, CHAN_VOICE, "monster_headcrab.die");
|
||||
}
|
||||
|
||||
void
|
||||
monster_headcrab::IdleNoise(void)
|
||||
{
|
||||
/* don't make noise if we're dead (corpse) */
|
||||
if (IsAlive() == false) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (m_flIdleTime > time) {
|
||||
return;
|
||||
}
|
||||
m_flIdleTime = time + random(2,10);
|
||||
|
||||
StartSoundDef("monster_headcrab.idle", CHAN_VOICE, true);
|
||||
}
|
||||
|
||||
void
|
||||
monster_headcrab::Spawned(void)
|
||||
{
|
||||
super::Spawned();
|
||||
|
||||
Sound_Precache("monster_headcrab.alert");
|
||||
Sound_Precache("monster_headcrab.attack");
|
||||
Sound_Precache("monster_headcrab.attackhit");
|
||||
Sound_Precache("monster_headcrab.die");
|
||||
Sound_Precache("monster_headcrab.idle");
|
||||
Sound_Precache("monster_headcrab.pain");
|
||||
}
|
||||
|
||||
void
|
||||
monster_headcrab::monster_headcrab(void)
|
||||
{
|
||||
if (classname == "monster_babycrab") {
|
||||
netname = "Baby Headcrab";
|
||||
model = "models/baby_headcrab.mdl";
|
||||
base_health = Skill_GetValue ("headcrab_health", 10) /4;
|
||||
} else {
|
||||
netname = "Headcrab";
|
||||
model = "models/headcrab.mdl";
|
||||
base_health = Skill_GetValue("headcrab_health", 10);
|
||||
}
|
||||
|
||||
base_mins = [-16,-16,0];
|
||||
base_maxs = [16,16,36];
|
||||
m_iAlliance = MAL_ALIEN;
|
||||
}
|
|
@ -1,87 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2016-2020 Marco Cawthorne <marco@icculus.org>
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
|
||||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/*QUAKED monster_hevsuit_dead (0 0.8 0.8) (-16 -16 0) (16 16 72)
|
||||
|
||||
HALF-LIFE (1998) ENTITY
|
||||
|
||||
HEV-Suit/Player's corpse
|
||||
|
||||
*/
|
||||
|
||||
class monster_hevsuit_dead:NSMonster
|
||||
{
|
||||
int m_iPose;
|
||||
void(void) monster_hevsuit_dead;
|
||||
|
||||
virtual void(void) Respawn;
|
||||
virtual void(void) Gib;
|
||||
virtual void(string, string) SpawnKey;
|
||||
};
|
||||
|
||||
void
|
||||
monster_hevsuit_dead::Gib(void)
|
||||
{
|
||||
takedamage = DAMAGE_NO;
|
||||
FX_GibHuman(origin, vectoangles(origin - g_dmg_eAttacker.origin), g_dmg_iDamage * 2.0f);
|
||||
Disappear();
|
||||
}
|
||||
|
||||
void
|
||||
monster_hevsuit_dead::Respawn(void)
|
||||
{
|
||||
v_angle = GetSpawnAngles();
|
||||
v_angle[0] = Math_FixDelta(v_angle[0]);
|
||||
v_angle[1] = Math_FixDelta(v_angle[1]);
|
||||
v_angle[2] = Math_FixDelta(v_angle[2]);
|
||||
|
||||
SetOrigin(GetSpawnOrigin());
|
||||
angles = v_angle;
|
||||
solid = SOLID_CORPSE;
|
||||
movetype = MOVETYPE_NONE;
|
||||
SetModel(GetSpawnModel());
|
||||
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;
|
||||
SetFrame(73 + m_iPose);
|
||||
}
|
||||
|
||||
void
|
||||
monster_hevsuit_dead::SpawnKey(string strKey, string strValue)
|
||||
{
|
||||
switch (strKey) {
|
||||
case "pose":
|
||||
m_iPose = stoi(strValue);
|
||||
break;
|
||||
case "body":
|
||||
SetBody(stoi(strValue) + 1);
|
||||
break;
|
||||
case "skin":
|
||||
SetSkin(stoi(strValue));
|
||||
break;
|
||||
default:
|
||||
super::SpawnKey(strKey, strValue);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
monster_hevsuit_dead::monster_hevsuit_dead(void)
|
||||
{
|
||||
model = "models/player.mdl";
|
||||
m_iBody = 2;
|
||||
}
|
|
@ -1,86 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2016-2020 Marco Cawthorne <marco@icculus.org>
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
|
||||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/*QUAKED monster_hgrunt_dead (0 0.8 0.8) (-16 -16 0) (16 16 72)
|
||||
|
||||
HALF-LIFE (1998) ENTITY
|
||||
|
||||
Human Grunt's corpse
|
||||
|
||||
*/
|
||||
|
||||
class monster_hgrunt_dead:NSMonster
|
||||
{
|
||||
int m_iPose;
|
||||
void(void) monster_hgrunt_dead;
|
||||
|
||||
virtual void(void) Respawn;
|
||||
virtual void(void) Gib;
|
||||
virtual void(string, string) SpawnKey;
|
||||
};
|
||||
|
||||
void
|
||||
monster_hgrunt_dead::Gib(void)
|
||||
{
|
||||
takedamage = DAMAGE_NO;
|
||||
FX_GibHuman(origin, vectoangles(origin - g_dmg_eAttacker.origin), g_dmg_iDamage * 2.0f);
|
||||
Disappear();
|
||||
}
|
||||
|
||||
void
|
||||
monster_hgrunt_dead::Respawn(void)
|
||||
{
|
||||
v_angle = GetSpawnAngles();
|
||||
v_angle[0] = Math_FixDelta(v_angle[0]);
|
||||
v_angle[1] = Math_FixDelta(v_angle[1]);
|
||||
v_angle[2] = Math_FixDelta(v_angle[2]);
|
||||
|
||||
SetOrigin(GetSpawnOrigin());
|
||||
angles = v_angle;
|
||||
solid = SOLID_CORPSE;
|
||||
movetype = MOVETYPE_NONE;
|
||||
SetModel(GetSpawnModel());
|
||||
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;
|
||||
SetFrame(44 + m_iPose);
|
||||
}
|
||||
|
||||
void
|
||||
monster_hgrunt_dead::SpawnKey(string strKey, string strValue)
|
||||
{
|
||||
switch (strKey) {
|
||||
case "pose":
|
||||
m_iPose = stoi(strValue);
|
||||
break;
|
||||
case "body":
|
||||
m_iBody = stoi(strValue) + 1;
|
||||
break;
|
||||
case "skin":
|
||||
skin = stoi(strValue);
|
||||
break;
|
||||
default:
|
||||
super::SpawnKey(strKey, strValue);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
monster_hgrunt_dead::monster_hgrunt_dead(void)
|
||||
{
|
||||
model = "models/hgrunt.mdl";
|
||||
}
|
|
@ -1,241 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2016-2020 Marco Cawthorne <marco@icculus.org>
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
|
||||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/*QUAKED monster_houndeye (0 0.8 0.8) (-16 -16 0) (16 16 36)
|
||||
|
||||
HALF-LIFE (1998) ENTITY
|
||||
|
||||
Houndeye
|
||||
|
||||
*/
|
||||
|
||||
#define HE_BLAST_RADIUS 384
|
||||
|
||||
enum
|
||||
{
|
||||
HE_IDLE,
|
||||
HE_IDLE2,
|
||||
HE_IDLE3,
|
||||
HE_RUN,
|
||||
HE_RUN2,
|
||||
HE_RUN3,
|
||||
HE_DIE,
|
||||
HE_DIE2,
|
||||
HE_DIE3,
|
||||
HE_DIE4,
|
||||
HE_ATTACK,
|
||||
HE_FLINCH,
|
||||
HE_FLINCH2,
|
||||
HE_DIE5,
|
||||
HE_WALKLIMP,
|
||||
HE_WALK2,
|
||||
HE_LEADERLOOK,
|
||||
HE_SLEEP,
|
||||
HE_GOTOSLEEP,
|
||||
HE_WAKE,
|
||||
HE_IDLEMAD,
|
||||
HE_IDLEMAD2,
|
||||
HE_IDLEMAD3,
|
||||
HE_INSPECT,
|
||||
HE_EAT,
|
||||
HE_LEFT,
|
||||
HE_RIGHT,
|
||||
HE_JUMPBACK,
|
||||
HE_WAKEFAST,
|
||||
HE_WHIMPER,
|
||||
HE_JUMPWINDOW
|
||||
};
|
||||
|
||||
class monster_houndeye:HLXenMonster
|
||||
{
|
||||
float m_flIdleTime;
|
||||
|
||||
void monster_houndeye(void);
|
||||
|
||||
virtual void Spawned(void);
|
||||
virtual void Pain(void);
|
||||
virtual void Death(void);
|
||||
virtual void IdleNoise(void);
|
||||
virtual void Respawn(void);
|
||||
|
||||
virtual int AnimIdle(void);
|
||||
virtual int AnimWalk(void);
|
||||
virtual int AnimRun(void);
|
||||
|
||||
virtual int AttackMelee(void);
|
||||
virtual void AttackBlast(void);
|
||||
|
||||
virtual float MeleeMaxDistance(void);
|
||||
};
|
||||
|
||||
|
||||
/* The maximum distance to which we should attempt an attack */
|
||||
float
|
||||
monster_houndeye::MeleeMaxDistance(void)
|
||||
{
|
||||
return HE_BLAST_RADIUS/2;
|
||||
}
|
||||
|
||||
int
|
||||
monster_houndeye::AnimIdle(void)
|
||||
{
|
||||
return HE_IDLE;
|
||||
}
|
||||
|
||||
int
|
||||
monster_houndeye::AnimWalk(void)
|
||||
{
|
||||
return HE_WALK2;
|
||||
}
|
||||
|
||||
int
|
||||
monster_houndeye::AnimRun(void)
|
||||
{
|
||||
return HE_RUN;
|
||||
}
|
||||
|
||||
int
|
||||
monster_houndeye::AttackMelee(void)
|
||||
{
|
||||
AnimPlay(HE_ATTACK);
|
||||
Sound_Play(this, CHAN_WEAPON, "monster_houndeye.attack");
|
||||
m_flAttackThink = m_flAnimTime + 0.5f;
|
||||
|
||||
think = AttackBlast;
|
||||
nextthink = m_flAnimTime;
|
||||
return (1);
|
||||
}
|
||||
|
||||
void
|
||||
monster_houndeye::AttackBlast(void)
|
||||
{
|
||||
float new_dmg;
|
||||
float dist;
|
||||
float diff;
|
||||
vector pos;
|
||||
float dmg = 50; /* TODO: set proper damage */
|
||||
|
||||
for (entity e = world; (e = findfloat(e, ::takedamage, DAMAGE_YES));) {
|
||||
pos[0] = e.absmin[0] + (0.5 * (e.absmax[0] - e.absmin[0]));
|
||||
pos[1] = e.absmin[1] + (0.5 * (e.absmax[1] - e.absmin[1]));
|
||||
pos[2] = e.absmin[2] + (0.5 * (e.absmax[2] - e.absmin[2]));
|
||||
|
||||
if (e.classname == "monster_houndeye")
|
||||
continue;
|
||||
|
||||
/* don't bother if it's not anywhere near us */
|
||||
dist = vlen(origin - pos);
|
||||
if (dist > HE_BLAST_RADIUS) {
|
||||
continue;
|
||||
}
|
||||
|
||||
/* can we physically hit this thing? */
|
||||
other = world;
|
||||
traceline(e.origin, origin, MOVE_OTHERONLY, this);
|
||||
|
||||
if (trace_fraction < 1.0f)
|
||||
dmg *= 0.5f;
|
||||
|
||||
/* calculate new damage values */
|
||||
diff = vlen(origin - pos);
|
||||
diff = (HE_BLAST_RADIUS - diff) / HE_BLAST_RADIUS;
|
||||
new_dmg = rint(dmg * diff);
|
||||
|
||||
if (diff > 0) {
|
||||
Damage_Apply(e, this, new_dmg, 0, DMG_EXPLODE);
|
||||
}
|
||||
}
|
||||
Sound_Play(this, CHAN_WEAPON, "monster_houndeye.blast");
|
||||
}
|
||||
|
||||
void
|
||||
monster_houndeye::Pain(void)
|
||||
{
|
||||
super::Pain();
|
||||
|
||||
if (m_flAnimTime > time) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (random() < 0.25f) {
|
||||
return;
|
||||
}
|
||||
|
||||
Sound_Play(this, CHAN_VOICE, "monster_houndeye.pain");
|
||||
SetFrame(HE_FLINCH + floor(random(0, 2)));
|
||||
m_flAnimTime = time + 0.25f;
|
||||
}
|
||||
|
||||
void
|
||||
monster_houndeye::Death(void)
|
||||
{
|
||||
/* if we're already dead (corpse) don't change animations */
|
||||
if (IsAlive() == true) {
|
||||
SetFrame(HE_DIE + floor(random(0, 4)));
|
||||
|
||||
Sound_Play(this, CHAN_VOICE, "monster_houndeye.die");
|
||||
}
|
||||
|
||||
/* set the functional differences */
|
||||
super::Death();
|
||||
}
|
||||
|
||||
void
|
||||
monster_houndeye::IdleNoise(void)
|
||||
{
|
||||
/* don't make noise if we're dead (corpse) */
|
||||
if (IsAlive() == false) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (m_flIdleTime > time) {
|
||||
return;
|
||||
}
|
||||
m_flIdleTime = time + random(2,10);
|
||||
|
||||
Sound_Play(this, CHAN_VOICE, "monster_houndeye.idle");
|
||||
}
|
||||
|
||||
void
|
||||
monster_houndeye::Respawn(void)
|
||||
{
|
||||
super::Respawn();
|
||||
SetFrame(HE_IDLE);
|
||||
}
|
||||
|
||||
void
|
||||
monster_houndeye::Spawned(void)
|
||||
{
|
||||
netname = "Houndeye";
|
||||
model = "models/houndeye.mdl";
|
||||
base_health = Skill_GetValue("houndeye_health", 20);
|
||||
base_mins = [-16,-16,0];
|
||||
base_maxs = [16,16,36];
|
||||
m_iAlliance = MAL_ALIEN;
|
||||
super::Spawned();
|
||||
|
||||
Sound_Precache("monster_houndeye.alert");
|
||||
Sound_Precache("monster_houndeye.attack");
|
||||
Sound_Precache("monster_houndeye.blast");
|
||||
Sound_Precache("monster_houndeye.die");
|
||||
Sound_Precache("monster_houndeye.idle");
|
||||
Sound_Precache("monster_houndeye.pain");
|
||||
}
|
||||
|
||||
void
|
||||
monster_houndeye::monster_houndeye(void)
|
||||
{
|
||||
}
|
|
@ -1,102 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2016-2020 Marco Cawthorne <marco@icculus.org>
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
|
||||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/*QUAKED monster_human_assassin (0 0.8 0.8) (-16 -16 0) (16 16 72)
|
||||
|
||||
HALF-LIFE (1998) ENTITY
|
||||
|
||||
Black Ops - Assassin
|
||||
|
||||
*/
|
||||
|
||||
enum
|
||||
{
|
||||
HAS_IDLE,
|
||||
HAS_IDLE3,
|
||||
HAS_IDLE2,
|
||||
HAS_RUN,
|
||||
HAS_WALK,
|
||||
HAS_SHOOT,
|
||||
HAS_NADETHROW,
|
||||
HAS_KICK,
|
||||
HAS_KICK2,
|
||||
HAS_DIERUN,
|
||||
HAS_DIEBACK,
|
||||
HAS_DIE,
|
||||
HAS_JUMP,
|
||||
HAS_UP,
|
||||
HAS_UNUSED,
|
||||
HAS_ATTACKDOWN,
|
||||
HAS_LAND
|
||||
};
|
||||
|
||||
class monster_human_assassin:NSMonster
|
||||
{
|
||||
float m_flIdleTime;
|
||||
|
||||
void(void) monster_human_assassin;
|
||||
|
||||
virtual void(void) Death;
|
||||
virtual void(void) Respawn;
|
||||
virtual void Spawned(void);
|
||||
};
|
||||
|
||||
void
|
||||
monster_human_assassin::monster_human_assassin(void)
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
monster_human_assassin::Death(void)
|
||||
{
|
||||
/* if we're already dead (corpse) don't change animations */
|
||||
if (IsAlive() == true) {
|
||||
/* headshots == different animation */
|
||||
/* this animation may not have been used, but it looks cool */
|
||||
if (g_dmg_iHitBody == BODY_HEAD) {
|
||||
if (random() < 0.5) {
|
||||
SetFrame(HAS_DIERUN);
|
||||
} else {
|
||||
SetFrame(HAS_DIEBACK);
|
||||
}
|
||||
} else {
|
||||
SetFrame(HAS_DIE);
|
||||
}
|
||||
}
|
||||
|
||||
/* set the functional differences */
|
||||
super::Death();
|
||||
}
|
||||
|
||||
void
|
||||
monster_human_assassin::Spawned(void)
|
||||
{
|
||||
netname = "Assassin";
|
||||
model = "models/hassassin.mdl";
|
||||
base_health = Skill_GetValue("hassassin_health", 50);
|
||||
base_mins = [-16,-16,0];
|
||||
base_maxs = [16,16,72];
|
||||
m_iAlliance = MAL_ENEMY;
|
||||
|
||||
super::Spawned();
|
||||
}
|
||||
|
||||
void
|
||||
monster_human_assassin::Respawn(void)
|
||||
{
|
||||
super::Respawn();
|
||||
frame = HAS_IDLE;
|
||||
}
|
|
@ -1,144 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2016-2020 Marco Cawthorne <marco@icculus.org>
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
|
||||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/*QUAKED monster_ichthyosaur (0 0.8 0.8) (-32 -32 0) (32 32 64)
|
||||
|
||||
HALF-LIFE (1998) ENTITY
|
||||
|
||||
Ichthyosaur
|
||||
|
||||
*/
|
||||
|
||||
enum
|
||||
{
|
||||
ICHY_IDLE,
|
||||
ICHY_SWIM,
|
||||
ICHY_THRUST,
|
||||
ICHY_DIE1,
|
||||
ICHY_DIE2,
|
||||
ICHY_FLINCH,
|
||||
ICHY_FLINCH2,
|
||||
ICHY_DIE3,
|
||||
ICHY_BITER,
|
||||
ICHY_BITEL,
|
||||
ICHY_ATTACK,
|
||||
ICHY_RIGHT,
|
||||
ICHY_LEFT,
|
||||
ICHY_180,
|
||||
ICHY_HITCAGE,
|
||||
ICHY_JUMP
|
||||
};
|
||||
|
||||
class monster_ichthyosaur:NSMonster
|
||||
{
|
||||
float m_flIdleTime;
|
||||
|
||||
void(void) monster_ichthyosaur;
|
||||
|
||||
virtual void(void) Spawned;
|
||||
virtual void(void) Pain;
|
||||
virtual void(void) Death;
|
||||
virtual void(void) IdleNoise;
|
||||
virtual void(void) Respawn;
|
||||
};
|
||||
|
||||
void
|
||||
monster_ichthyosaur::Pain(void)
|
||||
{
|
||||
super::Pain();
|
||||
|
||||
if (m_flAnimTime > time) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (random() < 0.25f) {
|
||||
return;
|
||||
}
|
||||
|
||||
Sound_Play(this, CHAN_VOICE, "monster_ichthyosaur.pain");
|
||||
SetFrame(ICHY_FLINCH + floor(random(0, 2)));
|
||||
m_flAnimTime = time + 0.25f;
|
||||
}
|
||||
|
||||
void
|
||||
monster_ichthyosaur::Death(void)
|
||||
{
|
||||
/* if we're already dead (corpse) don't change animations */
|
||||
if (IsAlive() == true) {
|
||||
int r = floor(random(0,3));
|
||||
|
||||
switch (r) {
|
||||
case 1:
|
||||
SetFrame(ICHY_DIE2);
|
||||
break;
|
||||
case 2:
|
||||
SetFrame(ICHY_DIE3);
|
||||
break;
|
||||
default:
|
||||
SetFrame(ICHY_DIE1);
|
||||
break;
|
||||
}
|
||||
|
||||
Sound_Play(this, CHAN_VOICE, "monster_ichthyosaur.die");
|
||||
}
|
||||
|
||||
/* set the functional differences */
|
||||
super::Death();
|
||||
}
|
||||
|
||||
void
|
||||
monster_ichthyosaur::IdleNoise(void)
|
||||
{
|
||||
/* don't make noise if we're dead (corpse) */
|
||||
if (IsAlive() == false) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (m_flIdleTime > time) {
|
||||
return;
|
||||
}
|
||||
m_flIdleTime = time + random(2,10);
|
||||
|
||||
Sound_Play(this, CHAN_VOICE, "monster_ichthyosaur.idle");
|
||||
}
|
||||
|
||||
void
|
||||
monster_ichthyosaur::Respawn(void)
|
||||
{
|
||||
super::Respawn();
|
||||
SetFrame(ICHY_IDLE);
|
||||
}
|
||||
|
||||
void
|
||||
monster_ichthyosaur::Spawned(void)
|
||||
{
|
||||
netname = "Ichthyosaur";
|
||||
model = "models/icky.mdl";
|
||||
base_mins = [-32,-32,0];
|
||||
base_maxs = [32,32,64];
|
||||
super::Spawned();
|
||||
|
||||
Sound_Precache("monster_ichthyosaur.alert");
|
||||
Sound_Precache("monster_ichthyosaur.attack");
|
||||
Sound_Precache("monster_ichthyosaur.die");
|
||||
Sound_Precache("monster_ichthyosaur.idle");
|
||||
Sound_Precache("monster_ichthyosaur.pain");
|
||||
}
|
||||
|
||||
void
|
||||
monster_ichthyosaur::monster_ichthyosaur(void)
|
||||
{
|
||||
}
|
|
@ -1,91 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2016-2020 Marco Cawthorne <marco@icculus.org>
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
|
||||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/*QUAKED monster_leech (0 0.8 0.8) (-6 -6 0) (6 6 6)
|
||||
|
||||
HALF-LIFE (1998) ENTITY
|
||||
|
||||
Leech
|
||||
|
||||
*/
|
||||
|
||||
enum
|
||||
{
|
||||
LEECH_SWIM,
|
||||
LEECH_SWIM2,
|
||||
LEECH_ATTACK,
|
||||
LEECH_HOVER,
|
||||
LEECH_LEFT,
|
||||
LEECH_RIGHT,
|
||||
LEECH_DIE,
|
||||
LEECH_DIEEND
|
||||
};
|
||||
|
||||
class monster_leech:NSMonster
|
||||
{
|
||||
float m_flIdleTime;
|
||||
|
||||
void(void) monster_leech;
|
||||
|
||||
virtual void(void) Spawned;
|
||||
virtual void(void) Death;
|
||||
virtual void(void) DeathEnd;
|
||||
virtual void(void) Respawn;
|
||||
};
|
||||
|
||||
void
|
||||
monster_leech::DeathEnd(void)
|
||||
{
|
||||
SetFrame(LEECH_DIEEND);
|
||||
}
|
||||
|
||||
void
|
||||
monster_leech::Death(void)
|
||||
{
|
||||
/* if we're already dead (corpse) don't change animations */
|
||||
if (IsAlive() == true) {
|
||||
SetFrame(LEECH_DIE);
|
||||
think = DeathEnd;
|
||||
nextthink = time + 1.0f;
|
||||
}
|
||||
|
||||
/* set the functional differences */
|
||||
super::Death();
|
||||
}
|
||||
|
||||
void
|
||||
monster_leech::Respawn(void)
|
||||
{
|
||||
super::Respawn();
|
||||
SetFrame(LEECH_SWIM);
|
||||
}
|
||||
|
||||
void
|
||||
monster_leech::Spawned(void)
|
||||
{
|
||||
netname = "Leech";
|
||||
model = "models/leech.mdl";
|
||||
base_mins = [-6,-6,0];
|
||||
base_maxs = [6,6,6];
|
||||
super::Spawned();
|
||||
|
||||
Sound_Precache("monster_leech.alert");
|
||||
Sound_Precache("monster_leech.attack");
|
||||
}
|
||||
|
||||
void monster_leech::monster_leech(void)
|
||||
{
|
||||
}
|
|
@ -1,55 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2016-2020 Marco Cawthorne <marco@icculus.org>
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
|
||||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/*QUAKED monster_miniturret (0 0.8 0.8) (-16 -16 -32) (16 16 32)
|
||||
|
||||
HALF-LIFE (1998) ENTITY
|
||||
|
||||
Automatic Turret (small)
|
||||
|
||||
*/
|
||||
|
||||
enum
|
||||
{
|
||||
TUR_IDLE,
|
||||
TUR_FIRE,
|
||||
TUR_SPIN,
|
||||
TUR_DEPLOY,
|
||||
TUR_RETIRE,
|
||||
TUR_DIE
|
||||
};
|
||||
|
||||
class monster_miniturret:NSMonster
|
||||
{
|
||||
void(void) monster_miniturret;
|
||||
|
||||
virtual void Spawned(void);
|
||||
};
|
||||
|
||||
void monster_miniturret::monster_miniturret(void)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void monster_miniturret::Spawned(void)
|
||||
{
|
||||
netname = "Mini-Turret";
|
||||
model = "models/miniturret.mdl";
|
||||
base_mins = [-16,-16,-32];
|
||||
base_maxs = [16,16,32];
|
||||
|
||||
super::Spawned();
|
||||
}
|
|
@ -1,142 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2016-2020 Marco Cawthorne <marco@icculus.org>
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
|
||||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/*QUAKED monster_nihilanth (0 0.8 0.8) (-192 -192 0) (192 192 384)
|
||||
|
||||
HALF-LIFE (1998) ENTITY
|
||||
|
||||
Nihilanth
|
||||
|
||||
*/
|
||||
|
||||
enum
|
||||
{
|
||||
NIL_IDLE,
|
||||
NIL_ATTACK,
|
||||
NIL_ATTACK2,
|
||||
NIL_THROW,
|
||||
NIL_BLOCK,
|
||||
NIL_RECHARGE,
|
||||
NIL_IDLEOPEN,
|
||||
NIL_ATTACKOPEN,
|
||||
NIL_ATTACKOPEN2,
|
||||
NIL_FLINCH,
|
||||
NIL_FLINCH2,
|
||||
NIL_FALL,
|
||||
NIL_DIE,
|
||||
NIL_FORWARD,
|
||||
NIL_BACK,
|
||||
NIL_UP,
|
||||
NIL_DOWN,
|
||||
NIL_RIGHT,
|
||||
NIL_LEFT,
|
||||
NIL_WALK2,
|
||||
NIL_SHOOT
|
||||
};
|
||||
|
||||
class monster_nihilanth:HLXenMonster
|
||||
{
|
||||
float m_flIdleTime;
|
||||
|
||||
void(void) monster_nihilanth;
|
||||
|
||||
virtual void(void) Spawned;
|
||||
virtual void(void) Death;
|
||||
virtual void(void) Pain;
|
||||
virtual void(void) IdleNoise;
|
||||
virtual void(void) Respawn;
|
||||
};
|
||||
|
||||
void
|
||||
monster_nihilanth::IdleNoise(void)
|
||||
{
|
||||
/* don't make noise if we're dead (corpse) */
|
||||
if (IsAlive() == false) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (m_flIdleTime > time) {
|
||||
return;
|
||||
}
|
||||
|
||||
/* timing needs to adjusted as sounds conflict */
|
||||
m_flIdleTime = time + random(2,10);
|
||||
|
||||
Sound_Play(this, CHAN_VOICE, "monster_nihilanth.idle");
|
||||
}
|
||||
|
||||
void
|
||||
monster_nihilanth::Pain(void)
|
||||
{
|
||||
super::Pain();
|
||||
|
||||
if (m_flAnimTime > time) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (random() < 0.25f) {
|
||||
return;
|
||||
}
|
||||
|
||||
Sound_Play(this, CHAN_VOICE, "monster_nihilanth.pain");
|
||||
|
||||
SetFrame((random() < 0.5) ? NIL_FLINCH : NIL_FLINCH2);
|
||||
m_flAnimTime = time + 0.25f;
|
||||
}
|
||||
|
||||
void
|
||||
monster_nihilanth::Death(void)
|
||||
{
|
||||
/* if we're already dead (corpse) don't change animations */
|
||||
if (IsAlive() == true) {
|
||||
SetFrame(NIL_DIE);
|
||||
Sound_Play(this, CHAN_VOICE, "monster_nihilanth.die");
|
||||
}
|
||||
|
||||
/* set the functional differences */
|
||||
super::Death();
|
||||
}
|
||||
|
||||
void
|
||||
monster_nihilanth::Respawn(void)
|
||||
{
|
||||
super::Respawn();
|
||||
SetFrame(NIL_IDLE);
|
||||
}
|
||||
|
||||
void
|
||||
monster_nihilanth::Spawned(void)
|
||||
{
|
||||
netname = "Nihilanth";
|
||||
model = "models/nihilanth.mdl";
|
||||
base_health = Skill_GetValue("nihilanth_health", 800);
|
||||
base_mins = [-192,-192,-32];
|
||||
base_maxs = [192,192,384];
|
||||
super::Spawned();
|
||||
|
||||
Sound_Precache("monster_nihilanth.attack");
|
||||
Sound_Precache("monster_nihilanth.attackball");
|
||||
Sound_Precache("monster_nihilanth.attackballmove");
|
||||
Sound_Precache("monster_nihilanth.die");
|
||||
Sound_Precache("monster_nihilanth.idle");
|
||||
Sound_Precache("monster_nihilanth.pain");
|
||||
Sound_Precache("monster_nihilanth.recharge");
|
||||
}
|
||||
|
||||
void
|
||||
monster_nihilanth::monster_nihilanth(void)
|
||||
{
|
||||
}
|
|
@ -1,52 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2016-2020 Marco Cawthorne <marco@icculus.org>
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
|
||||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/*QUAKED monster_osprey (0 0.8 0.8) (-480 -480 -112) (480 480 24)
|
||||
|
||||
HALF-LIFE (1998) ENTITY
|
||||
|
||||
Bell Boeing VV-22 Osprey
|
||||
|
||||
*/
|
||||
|
||||
class monster_osprey:NSMonster
|
||||
{
|
||||
void(void) monster_osprey;
|
||||
virtual void(void) Respawn;
|
||||
|
||||
virtual void Spawned(void);
|
||||
};
|
||||
|
||||
void monster_osprey::monster_osprey(void)
|
||||
{
|
||||
}
|
||||
|
||||
void monster_osprey::Spawned(void)
|
||||
{
|
||||
netname = "Osprey";
|
||||
model = "models/osprey.mdl";
|
||||
base_mins = [-480,-480,-112];
|
||||
base_maxs = [480,480,24];
|
||||
super::Spawned();
|
||||
}
|
||||
|
||||
|
||||
void monster_osprey::Respawn(void)
|
||||
{
|
||||
super::Respawn();
|
||||
takedamage = DAMAGE_NO;
|
||||
iBleeds = FALSE;
|
||||
}
|
|
@ -1,48 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2016-2020 Marco Cawthorne <marco@icculus.org>
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
|
||||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/*QUAKED monster_rat (0 0.8 0.8) (-6 -6 0) (6 6 6)
|
||||
|
||||
HALF-LIFE (1998) ENTITY
|
||||
|
||||
Rat
|
||||
|
||||
*/
|
||||
|
||||
class monster_rat:NSMonster
|
||||
{
|
||||
void(void) monster_rat;
|
||||
|
||||
virtual void Spawned(void);
|
||||
};
|
||||
|
||||
void monster_rat::monster_rat(void)
|
||||
{
|
||||
netname = "Rat";
|
||||
model = "models/bigrat.mdl";
|
||||
base_mins = [-6,-6,-0];
|
||||
base_maxs = [6,6,6];
|
||||
}
|
||||
|
||||
void monster_rat::Spawned(void)
|
||||
{
|
||||
netname = "Rat";
|
||||
model = "models/bigrat.mdl";
|
||||
base_mins = [-6,-6,-0];
|
||||
base_maxs = [6,6,6];
|
||||
|
||||
super::Spawned();
|
||||
}
|
|
@ -1,222 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2016-2020 Marco Cawthorne <marco@icculus.org>
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
|
||||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/*QUAKED monster_scientist (0 0.8 0.8) (-16 -16 0) (16 16 72)
|
||||
|
||||
HALF-LIFE (1998) ENTITY
|
||||
|
||||
Scientist
|
||||
|
||||
*/
|
||||
|
||||
enum
|
||||
{
|
||||
SCIA_WALK,
|
||||
SCIA_WALKSCARED,
|
||||
SCIA_RUN,
|
||||
SCIA_RUNSCARED,
|
||||
SCIA_RUNLOOK,
|
||||
SCIA_180LEFT,
|
||||
SCIA_180RIGHT,
|
||||
SCIA_FLINCH,
|
||||
SCIA_PAIN,
|
||||
SCIA_PAINLEFT,
|
||||
SCIA_PAINRIGHT,
|
||||
SCIA_PAINLEGLEFT,
|
||||
SCIA_PAINLEGRIGHT,
|
||||
SCIA_IDLE1,
|
||||
SCIA_IDLE2,
|
||||
SCIA_IDLE3,
|
||||
SCIA_IDLE4,
|
||||
SCIA_IDLE5,
|
||||
SCIA_IDLE6,
|
||||
SCIA_SCARED_END,
|
||||
SCIA_SCARED1,
|
||||
SCIA_SCARED2,
|
||||
SCIA_SCARED3,
|
||||
SCIA_SCARED4,
|
||||
SCIA_PANIC,
|
||||
SCIA_FEAR1,
|
||||
SCIA_FEAR2,
|
||||
SCIA_CRY,
|
||||
SCIA_SCI1,
|
||||
SCIA_SCI2,
|
||||
SCIA_SCI3,
|
||||
SCIA_DIE_SIMPLE,
|
||||
SCIA_DIE_FORWARD1,
|
||||
SCIA_DIE_FORWARD2,
|
||||
SCIA_DIE_BACKWARD,
|
||||
SCIA_DIE_HEADSHOT,
|
||||
SCIA_DIE_GUTSHOT,
|
||||
SCIA_LYING1,
|
||||
SCIA_LYING2,
|
||||
SCIA_DEADSIT,
|
||||
SCIA_DEADTABLE1,
|
||||
SCIA_DEADTABLE2,
|
||||
SCIA_DEADTABLE3
|
||||
};
|
||||
|
||||
class monster_scientist:NSTalkMonster
|
||||
{
|
||||
void(void) monster_scientist;
|
||||
|
||||
virtual void(void) Spawned;
|
||||
virtual void(void) Respawn;
|
||||
virtual void(void) Pain;
|
||||
virtual void(void) Death;
|
||||
virtual void(void) PlayerUse;
|
||||
|
||||
virtual void(string, string) SpawnKey;
|
||||
};
|
||||
|
||||
void
|
||||
monster_scientist::PlayerUse(void)
|
||||
{
|
||||
if (spawnflags & MSF_PREDISASTER) {
|
||||
Sentence("!SC_POK");
|
||||
return;
|
||||
}
|
||||
|
||||
super::OnPlayerUse();
|
||||
}
|
||||
|
||||
void
|
||||
monster_scientist::Pain(void)
|
||||
{
|
||||
WarnAllies();
|
||||
|
||||
if (m_flAnimTime > time) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (random() < 0.25f) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (IsAlive() == true) {
|
||||
Sound_Speak(this, "monster_scientist.pain");
|
||||
SetFrame(SCIA_FLINCH + floor(random(0, 6)));
|
||||
m_iFlags |= MONSTER_FEAR;
|
||||
m_flAnimTime = time + 0.25f;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
monster_scientist::Death(void)
|
||||
{
|
||||
WarnAllies();
|
||||
|
||||
if (IsAlive() == true) {
|
||||
SetFrame(SCIA_DIE_SIMPLE + floor(random(0, 6)));
|
||||
Sound_Speak(this, "monster_scientist.die");
|
||||
}
|
||||
|
||||
/* now mark our state as 'dead' */
|
||||
super::Death();
|
||||
}
|
||||
|
||||
void
|
||||
monster_scientist::Respawn(void)
|
||||
{
|
||||
super::Respawn();
|
||||
m_iFlags |= MONSTER_CANFOLLOW;
|
||||
}
|
||||
|
||||
void
|
||||
monster_scientist::SpawnKey(string strKey, string strValue)
|
||||
{
|
||||
switch (strKey) {
|
||||
case "body":
|
||||
SetBody(stoi(strValue) + 1);
|
||||
break;
|
||||
default:
|
||||
super::SpawnKey(strKey, strValue);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
monster_scientist::Spawned(void)
|
||||
{
|
||||
if (spawnflags & MSF_PREDISASTER) {
|
||||
m_talkAsk = "";
|
||||
m_talkPlayerAsk = "!SC_PQUEST";
|
||||
m_talkPlayerGreet = "!SC_PHELLO";
|
||||
m_talkPlayerIdle = "!SC_PIDLE";
|
||||
} else {
|
||||
m_talkAsk = "!SC_QUESTION";
|
||||
m_talkPlayerAsk = "!SC_QUESTION";
|
||||
m_talkPlayerGreet = "!SC_HELLO";
|
||||
m_talkPlayerIdle = "!SC_PIDLE";
|
||||
}
|
||||
|
||||
m_talkAnswer = "!SC_ANSWER";
|
||||
m_talkAllyShot = "!SC_PLFEAR";
|
||||
m_talkGreet = "";
|
||||
m_talkIdle = "!SC_IDLE";
|
||||
m_talkHearing = "!SC_HEAR";
|
||||
m_talkSmelling = "!SC_SMELL";
|
||||
m_talkStare = "!SC_STARE";
|
||||
m_talkSurvived = "!SC_WOUND";
|
||||
m_talkWounded = "!SC_MORTAL";
|
||||
|
||||
/* they seem to use predisaster lines regardless of disaster state */
|
||||
m_talkPlayerWounded1 = "!SC_CUREA";
|
||||
m_talkPlayerWounded2 = "!SC_CUREB";
|
||||
m_talkPlayerWounded3 = "!SC_CUREC";
|
||||
m_talkUnfollow = "!SC_WAIT";
|
||||
m_talkFollow = "!SC_OK";
|
||||
m_talkStopFollow = "!SC_STOP";
|
||||
m_iBody = -1;
|
||||
|
||||
model = "models/scientist.mdl";
|
||||
base_mins = [-16,-16,0];
|
||||
base_maxs = [16,16,72];
|
||||
base_health = Skill_GetValue("scientist_health", 20);
|
||||
|
||||
super::Spawned();
|
||||
|
||||
Sound_Precache("monster_scientist.die");
|
||||
Sound_Precache("monster_scientist.pain");
|
||||
|
||||
/* has the body not been overriden, etc. choose a character for us */
|
||||
if (m_iBody == -1) {
|
||||
SetBody((int)floor(random(1,5)));
|
||||
}
|
||||
|
||||
switch (m_iBody) {
|
||||
case 1:
|
||||
m_flPitch = 105;
|
||||
netname = "Walter";
|
||||
break;
|
||||
case 2:
|
||||
m_flPitch = 100;
|
||||
netname = "Einstein";
|
||||
break;
|
||||
case 3:
|
||||
m_flPitch = 95;
|
||||
netname = "Luther";
|
||||
SetSkin(1);
|
||||
break;
|
||||
default:
|
||||
m_flPitch = 100;
|
||||
netname = "Slick";
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
monster_scientist::monster_scientist(void)
|
||||
{
|
||||
}
|
|
@ -1,121 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2016-2020 Marco Cawthorne <marco@icculus.org>
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
|
||||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/*QUAKED monster_scientist_dead (0 0.8 0.8) (-16 -16 0) (16 16 72)
|
||||
|
||||
HALF-LIFE (1998) ENTITY
|
||||
|
||||
Scientists' corpse
|
||||
|
||||
*/
|
||||
|
||||
enum
|
||||
{
|
||||
DSCIA_LYING1 = 37,
|
||||
DSCIA_LYING2,
|
||||
DSCIA_DEADSIT,
|
||||
DSCIA_DEADTABLE1,
|
||||
DSCIA_DEADTABLE2,
|
||||
DSCIA_DEADTABLE3,
|
||||
DSCIA_DEADHANG
|
||||
};
|
||||
|
||||
class monster_scientist_dead:NSMonster
|
||||
{
|
||||
int m_iPose;
|
||||
void(void) monster_scientist_dead;
|
||||
|
||||
virtual void(void) Respawn;
|
||||
virtual void(void) Gib;
|
||||
virtual void(string, string) SpawnKey;
|
||||
};
|
||||
|
||||
void
|
||||
monster_scientist_dead::Gib(void)
|
||||
{
|
||||
takedamage = DAMAGE_NO;
|
||||
FX_GibHuman(origin, vectoangles(origin - g_dmg_eAttacker.origin), g_dmg_iDamage * 2.0f);
|
||||
Disappear();
|
||||
}
|
||||
|
||||
void
|
||||
monster_scientist_dead::Respawn(void)
|
||||
{
|
||||
v_angle = GetSpawnAngles();
|
||||
v_angle[0] = Math_FixDelta(v_angle[0]);
|
||||
v_angle[1] = Math_FixDelta(v_angle[1]);
|
||||
v_angle[2] = Math_FixDelta(v_angle[2]);
|
||||
|
||||
SetOrigin(GetSpawnOrigin());
|
||||
angles = v_angle;
|
||||
solid = SOLID_CORPSE;
|
||||
movetype = MOVETYPE_NONE;
|
||||
SetModel(GetSpawnModel());
|
||||
setsize(this, VEC_HULL_MIN + [0,0,36], VEC_HULL_MIN + [0,0,36]);
|
||||
takedamage = DAMAGE_YES;
|
||||
health = 0;
|
||||
velocity = [0,0,0];
|
||||
iBleeds = TRUE;
|
||||
|
||||
switch (m_iPose) {
|
||||
case 1:
|
||||
SetFrame(DSCIA_LYING2);
|
||||
break;
|
||||
case 2:
|
||||
SetFrame(DSCIA_DEADSIT);
|
||||
break;
|
||||
case 3:
|
||||
SetFrame(DSCIA_DEADHANG);
|
||||
break;
|
||||
case 4:
|
||||
SetFrame(DSCIA_DEADTABLE1);
|
||||
break;
|
||||
case 5:
|
||||
SetFrame(DSCIA_DEADTABLE2);
|
||||
break;
|
||||
case 6:
|
||||
SetFrame(DSCIA_DEADTABLE3);
|
||||
break;
|
||||
default:
|
||||
SetFrame(DSCIA_LYING1);
|
||||
}
|
||||
|
||||
DropToFloor();
|
||||
}
|
||||
|
||||
void
|
||||
monster_scientist_dead::SpawnKey(string strKey, string strValue)
|
||||
{
|
||||
switch (strKey) {
|
||||
case "pose":
|
||||
m_iPose = stoi(strValue);
|
||||
break;
|
||||
case "body":
|
||||
SetBody(stoi(strValue) + 1);
|
||||
break;
|
||||
case "skin":
|
||||
SetSkin(stoi(strValue));
|
||||
break;
|
||||
default:
|
||||
super::SpawnKey(strKey, strValue);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
monster_scientist_dead::monster_scientist_dead(void)
|
||||
{
|
||||
model = "models/scientist.mdl";
|
||||
}
|
|
@ -1,87 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2016-2020 Marco Cawthorne <marco@icculus.org>
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
|
||||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/*QUAKED monster_sentry (0 0.8 0.8) (-16 -16 0) (16 16 72)
|
||||
|
||||
HALF-LIFE (1998) ENTITY
|
||||
|
||||
Sentry Gun
|
||||
|
||||
*/
|
||||
|
||||
enum
|
||||
{
|
||||
SENT_IDLE,
|
||||
SENT_FIRE,
|
||||
SENT_SPIN,
|
||||
SENT_DEPLOY,
|
||||
SENT_RETIRE,
|
||||
SENT_DIE
|
||||
};
|
||||
|
||||
|
||||
class monster_sentry:NSMonster
|
||||
{
|
||||
void(void) monster_sentry;
|
||||
|
||||
virtual void(void) Spawned;
|
||||
virtual void(void) Death;
|
||||
virtual void(void) Respawn;
|
||||
|
||||
};
|
||||
|
||||
void
|
||||
monster_sentry::Death(void)
|
||||
{
|
||||
/* if we're already dead (corpse) don't change animations */
|
||||
if (IsAlive() == true) {
|
||||
SetFrame(SENT_DIE);
|
||||
Sound_Play(this, CHAN_VOICE, "monster_sentry.die");
|
||||
}
|
||||
|
||||
/* set the functional differences */
|
||||
super::Death();
|
||||
}
|
||||
|
||||
void
|
||||
monster_sentry::Respawn(void)
|
||||
{
|
||||
super::Respawn();
|
||||
|
||||
SetFrame(SENT_IDLE);
|
||||
iBleeds = FALSE;
|
||||
}
|
||||
|
||||
void
|
||||
monster_sentry::Spawned(void)
|
||||
{
|
||||
netname = "Sentry";
|
||||
model = "models/sentry.mdl";
|
||||
base_health = Skill_GetValue("sentry_health", 40);
|
||||
base_mins = [-16,-16,0];
|
||||
base_maxs = [16,16,72];
|
||||
|
||||
super::Spawned();
|
||||
|
||||
Sound_Precache("monster_sentry.alert");
|
||||
Sound_Precache("monster_sentry.die");
|
||||
Sound_Precache("monster_sentry.idle");
|
||||
Sound_Precache("monster_sentry.retract");
|
||||
}
|
||||
|
||||
void monster_sentry::monster_sentry(void)
|
||||
{
|
||||
}
|
|
@ -1,140 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2016-2020 Marco Cawthorne <marco@icculus.org>
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
|
||||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/*QUAKED monster_sitting_scientist (0 0.8 0.8) (-14 -14 0) (14 14 36)
|
||||
|
||||
HALF-LIFE (1998) ENTITY
|
||||
|
||||
Sitting scientists
|
||||
|
||||
*/
|
||||
|
||||
enum
|
||||
{
|
||||
DSCIA_LYING1 = 37,
|
||||
DSCIA_LYING2,
|
||||
DSCIA_DEADSIT,
|
||||
DSCIA_DEADTABLE1,
|
||||
DSCIA_DEADTABLE2,
|
||||
DSCIA_DEADTABLE3,
|
||||
DSCIA_DEADHANG
|
||||
};
|
||||
|
||||
class monster_sitting_scientist:NSTalkMonster
|
||||
{
|
||||
int m_iPose;
|
||||
void(void) monster_sitting_scientist;
|
||||
|
||||
virtual void(void) Respawn;
|
||||
virtual void(void) Spawned;
|
||||
virtual void(void) Death;
|
||||
virtual void(void) Gib;
|
||||
virtual void(string, string) SpawnKey;
|
||||
};
|
||||
|
||||
void
|
||||
monster_sitting_scientist::Gib(void)
|
||||
{
|
||||
SetTakedamage(DAMAGE_NO);
|
||||
FX_GibHuman(GetOrigin(), vectoangles(GetOrigin() - g_dmg_eAttacker.origin), g_dmg_iDamage * 2.0f);
|
||||
Disappear();
|
||||
}
|
||||
|
||||
void
|
||||
monster_sitting_scientist::Death(void)
|
||||
{
|
||||
if (GetHealth() < -50) {
|
||||
Gib();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
monster_sitting_scientist::Respawn(void)
|
||||
{
|
||||
v_angle = GetSpawnAngles();
|
||||
v_angle[0] = Math_FixDelta(v_angle[0]);
|
||||
v_angle[1] = Math_FixDelta(v_angle[1]);
|
||||
v_angle[2] = Math_FixDelta(v_angle[2]);
|
||||
|
||||
SetOrigin(GetSpawnOrigin());
|
||||
SetAngles(v_angle);
|
||||
SetSolid(SOLID_BBOX);
|
||||
SetMovetype(MOVETYPE_NONE);
|
||||
SetModel(GetSpawnModel());
|
||||
SetSize([-14,-14,0],[14,14,36]);
|
||||
SetTakedamage(DAMAGE_YES);
|
||||
SetHealth(0);
|
||||
SetVelocity([0,0,0]);
|
||||
SetFrame(74);
|
||||
DropToFloor();
|
||||
iBleeds = TRUE;
|
||||
}
|
||||
|
||||
void
|
||||
monster_sitting_scientist::SpawnKey(string strKey, string strValue)
|
||||
{
|
||||
switch (strKey) {
|
||||
case "pose":
|
||||
m_iPose = stoi(strValue);
|
||||
break;
|
||||
case "body":
|
||||
SetBody(stoi(strValue) + 1);
|
||||
break;
|
||||
case "skin":
|
||||
SetSkin(stoi(strValue));
|
||||
break;
|
||||
default:
|
||||
super::SpawnKey(strKey, strValue);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
monster_sitting_scientist::Spawned(void)
|
||||
{
|
||||
model = "models/scientist.mdl";
|
||||
|
||||
super::Spawned();
|
||||
|
||||
/* has the body not been overriden, etc. choose a character for us */
|
||||
if (m_iBody == -1) {
|
||||
SetBody((int)floor(random(1,5)));
|
||||
}
|
||||
|
||||
switch (m_iBody) {
|
||||
case 1:
|
||||
m_flPitch = 105;
|
||||
netname = "Walter";
|
||||
break;
|
||||
case 2:
|
||||
m_flPitch = 100;
|
||||
netname = "Einstein";
|
||||
break;
|
||||
case 3:
|
||||
m_flPitch = 95;
|
||||
netname = "Luther";
|
||||
SetSkin(1);
|
||||
break;
|
||||
default:
|
||||
m_flPitch = 100;
|
||||
netname = "Slick";
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
monster_sitting_scientist::monster_sitting_scientist(void)
|
||||
{
|
||||
}
|
|
@ -1,139 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2016-2020 Marco Cawthorne <marco@icculus.org>
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
|
||||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/*QUAKED monster_tentacle (0 0.8 0.8) (-32 -32 0) (32 32 64)
|
||||
|
||||
HALF-LIFE (1998) ENTITY
|
||||
|
||||
Tentacle
|
||||
|
||||
*/
|
||||
|
||||
enum
|
||||
{
|
||||
TE_IDLEPIT,
|
||||
TE_RISE,
|
||||
TE_TOFLOOR1,
|
||||
TE_IDLE,
|
||||
TE_PISSED,
|
||||
TE_SMALLRISE,
|
||||
TE_WAVE,
|
||||
TE_STRIKE,
|
||||
TE_TAP,
|
||||
TE_ROTATE,
|
||||
TE_REAR,
|
||||
TE_REARIDLE,
|
||||
TE_TOLEV1,
|
||||
TE_IDELLEV1,
|
||||
TE_FIDGETLEV1,
|
||||
TE_SNAPLEV1,
|
||||
TE_STRIKELEV1,
|
||||
TE_TAPLEV1,
|
||||
TE_ROTATELEV1,
|
||||
TE_REARLEV1,
|
||||
TE_REARIDELLEV1,
|
||||
TE_TOLEV2,
|
||||
TE_IDLELEV2,
|
||||
TE_FIDGETLEV2,
|
||||
TE_SNAPLEV2,
|
||||
TE_SWINGLEV2,
|
||||
TE_TUTLEV2,
|
||||
TE_STRIKELEV2,
|
||||
TE_TAPLEV2,
|
||||
TE_ROTATELEV2,
|
||||
TE_REARLEV2,
|
||||
TE_FREAKDIE,
|
||||
TE_REARIDLE2,
|
||||
TE_TOLEV3,
|
||||
TE_IDLELEV3,
|
||||
TE_FIDGETLEV3,
|
||||
TE_SIDELEV3,
|
||||
TE_SWIPELEV3,
|
||||
TE_STRIKELEV3,
|
||||
TE_TAPLEV3,
|
||||
TE_ROTATELEV3,
|
||||
TE_REARLEV3,
|
||||
TE_REARIDLELEV3,
|
||||
TE_DOORLEV1,
|
||||
TE_ENGINELEV3,
|
||||
TE_ENGINEIDLE,
|
||||
TE_ENGINESWAY,
|
||||
TE_ENGINESWAT,
|
||||
TE_ENGINEBOB,
|
||||
TE_ENGINEDEATH,
|
||||
TE_ENGINEDEATH2,
|
||||
TE_ENGINEDEATH3,
|
||||
TE_GRABIDLE,
|
||||
TE_GRAB
|
||||
};
|
||||
|
||||
class monster_tentacle:HLXenMonster
|
||||
{
|
||||
float m_flIdleTime;
|
||||
|
||||
void(void) monster_tentacle;
|
||||
|
||||
virtual void(void) IdleNoise;
|
||||
virtual void(void) Respawn;
|
||||
virtual void(void) Spawned;
|
||||
};
|
||||
|
||||
void
|
||||
monster_tentacle::IdleNoise(void)
|
||||
{
|
||||
/* don't make noise if we're dead (corpse) */
|
||||
if (IsAlive() == false) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (m_flIdleTime > time) {
|
||||
return;
|
||||
}
|
||||
/* timing needs to adjusted as sounds conflict */
|
||||
m_flIdleTime = time + random(2,10);
|
||||
|
||||
Sound_Play(this, CHAN_VOICE, "monster_tentacle.idle");
|
||||
}
|
||||
|
||||
void
|
||||
monster_tentacle::Respawn(void)
|
||||
{
|
||||
super::Respawn();
|
||||
/* not entirely true, takes damage then retreats and reheals */
|
||||
takedamage = DAMAGE_NO;
|
||||
iBleeds = FALSE;
|
||||
SetFrame(TE_IDLE);
|
||||
}
|
||||
|
||||
void
|
||||
monster_tentacle::Spawned(void)
|
||||
{
|
||||
Sound_Precache("monster_tentacle.alert");
|
||||
Sound_Precache("monster_tentacle.attack");
|
||||
Sound_Precache("monster_tentacle.die");
|
||||
Sound_Precache("monster_tentacle.idle");
|
||||
netname = "Tentacle";
|
||||
model = "models/tentacle2.mdl";
|
||||
base_mins = [-32,-32,0];
|
||||
base_maxs = [32,32,64];
|
||||
|
||||
super::Spawned();
|
||||
}
|
||||
|
||||
void
|
||||
monster_tentacle::monster_tentacle(void)
|
||||
{
|
||||
}
|
|
@ -1,54 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2016-2020 Marco Cawthorne <marco@icculus.org>
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
|
||||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/*QUAKED monster_turret (0 0.8 0.8) (-16 -16 0) (16 16 72)
|
||||
|
||||
HALF-LIFE (1998) ENTITY
|
||||
|
||||
Automatic Turret (large)
|
||||
|
||||
*/
|
||||
|
||||
enum
|
||||
{
|
||||
TUR_IDLE,
|
||||
TUR_FIRE,
|
||||
TUR_SPIN,
|
||||
TUR_DEPLOY,
|
||||
TUR_RETIRE,
|
||||
TUR_DIE
|
||||
};
|
||||
|
||||
class monster_turret:NSMonster
|
||||
{
|
||||
void(void) monster_turret;
|
||||
|
||||
virtual void Spawned(void);
|
||||
};
|
||||
|
||||
void monster_turret::monster_turret(void)
|
||||
{
|
||||
}
|
||||
|
||||
void monster_turret::Spawned(void)
|
||||
{
|
||||
netname = "Turret";
|
||||
model = "models/turret.mdl";
|
||||
base_mins = [-16,-16,0];
|
||||
base_maxs = [16,16,72];
|
||||
|
||||
super::Spawned();
|
||||
}
|
|
@ -68,6 +68,7 @@ FX_Corpse_Spawn(player pl, float anim)
|
|||
body_next.velocity = (pl.velocity) + [0,0,120];
|
||||
body_next.colormap = pl.colormap;
|
||||
body_next.SetFrame(anim);
|
||||
body_next.frame1time = 0.0f;
|
||||
body_next.ScheduleThink(FX_Corpse_Update, 0.0f);
|
||||
return (entity)body_next;
|
||||
}
|
||||
|
|
|
@ -582,6 +582,10 @@ player::SendEntity
|
|||
float
|
||||
player::SendEntity(entity ePEnt, float flChanged)
|
||||
{
|
||||
/* just-in-case. */
|
||||
if (classname != "player")
|
||||
return (0);
|
||||
|
||||
/* don't broadcast invisible players */
|
||||
if (IsFakeSpectator() && ePEnt != this)
|
||||
return (0);
|
||||
|
|
|
@ -65,20 +65,22 @@ monster_tripmine::SendEntity(entity pvsent, float flags)
|
|||
void
|
||||
monster_tripmine::Trip(int walkthrough)
|
||||
{
|
||||
float dmg;
|
||||
vector explosionPos = GetOrigin();
|
||||
float explosionDamage = Skill_GetValue("plr_tripmine", 150);
|
||||
float explosionRadius = explosionDamage * 2.5f;
|
||||
|
||||
if (!walkthrough) {
|
||||
real_owner = g_dmg_eAttacker;
|
||||
}
|
||||
|
||||
/* This is to prevent infinite loops in Damage_Radius */
|
||||
Death =
|
||||
Pain = __NULL__;
|
||||
takedamage = DAMAGE_NO;
|
||||
dmg = Skill_GetValue("plr_tripmine", 150);
|
||||
SetPainCallback(__NULL__);
|
||||
SetDeathCallback(__NULL__);
|
||||
SetTakedamage(DAMAGE_NO);
|
||||
|
||||
pointparticles(particleeffectnum("fx_explosion.main"), origin, [0,0,0], 1);
|
||||
Damage_Radius(origin, real_owner, dmg, dmg * 2.5f, TRUE, WEAPON_TRIPMINE);
|
||||
Sound_Play(self, CHAN_VOICE, "fx.explosion");
|
||||
pointparticles(particleeffectnum("fx_explosion.main"), GetOrigin(), [0,0,0], 1);
|
||||
Damage_Radius(explosionPos, real_owner, explosionDamage, explosionRadius, true, WEAPON_TRIPMINE);
|
||||
StartSoundDef("fx.explosion", CHAN_VOICE, true);
|
||||
Destroy();
|
||||
}
|
||||
|
||||
|
@ -94,16 +96,16 @@ monster_tripmine::Ready(void)
|
|||
traceline(origin, origin + GetForward() * 2048, FALSE, this);
|
||||
|
||||
/* first time we're marked as ready, we play a sound and set the distance */
|
||||
if (takedamage == DAMAGE_NO) {
|
||||
if (CanBeDamaged() == false) {
|
||||
/* Laser calibrated to N units! */
|
||||
m_vecEndPos = trace_endpos;
|
||||
SetHealth(1);
|
||||
SetTakedamage(DAMAGE_YES);
|
||||
StartSoundDef("weapon_tripmine.activate", CHAN_WEAPON, true);
|
||||
SetSolid(SOLID_BBOX);
|
||||
Death =
|
||||
Pain = Damaged;
|
||||
SendFlags = -1;
|
||||
SetPainCallback(Damaged);
|
||||
SetDeathCallback(Damaged);
|
||||
ForceNetworkUpdate();
|
||||
}
|
||||
|
||||
/* laser shorter than when calibrated, explode! */
|
||||
|
@ -204,6 +206,7 @@ void w_tripmine_precache(void)
|
|||
precache_model("models/v_tripmine.mdl");
|
||||
#else
|
||||
precache_model("models/p_tripmine.mdl");
|
||||
precache_model("models/v_tripmine.mdl");
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
|
@ -63,7 +63,7 @@ entityDef monster_scientist
|
|||
}
|
||||
|
||||
// pre-disaster
|
||||
when "spawnflags" equals "256" {
|
||||
when "spawnflags" contains "256" {
|
||||
"talk_ask" ""
|
||||
"talk_player_ask" "!SC_PQUEST"
|
||||
"talk_player_greet" "!SC_PHELLO"
|
||||
|
|
|
@ -7,8 +7,8 @@ entityDef weapon_357
|
|||
"editor_rotatable" "1"
|
||||
|
||||
"spawnclass" "NSItem"
|
||||
"model" "models/w_357.mdl"
|
||||
"inv_item" "$WEAPON_PYTHON"
|
||||
"model" "models/w_357.mdl"
|
||||
"inv_item" "$WEAPON_PYTHON"
|
||||
"snd_acquire" "weapon.pickup"
|
||||
"snd_respawn" "item.respawn"
|
||||
}
|
||||
|
|
|
@ -7,8 +7,8 @@ entityDef weapon_9mmAR
|
|||
"editor_rotatable" "1"
|
||||
|
||||
"spawnclass" "NSItem"
|
||||
"model" "models/w_9mmAR.mdl"
|
||||
"inv_item" "$WEAPON_MP5"
|
||||
"model" "models/w_9mmAR.mdl"
|
||||
"inv_item" "$WEAPON_MP5"
|
||||
"snd_acquire" "weapon.pickup"
|
||||
"snd_respawn" "item.respawn"
|
||||
}
|
||||
|
@ -21,22 +21,22 @@ entityDef weapon_mp5
|
|||
entityDef projectile_ARgrenade
|
||||
{
|
||||
"spawnclass" "NSProjectile"
|
||||
"model" "models/grenade.mdl"
|
||||
"offset" "16 0 0"
|
||||
"velocity" "800 0 0"
|
||||
"model" "models/grenade.mdl"
|
||||
"offset" "16 0 0"
|
||||
"velocity" "800 0 0"
|
||||
"angular_velocity" "-300 0 0"
|
||||
"gravity" "0.5"
|
||||
"bounce" "1"
|
||||
"mins" "0 0 0"
|
||||
"maxs" "0 0 0"
|
||||
"gravity" "0.5"
|
||||
"bounce" "1"
|
||||
"mins" "0 0 0"
|
||||
"maxs" "0 0 0"
|
||||
"detonate_on_fuse" "0"
|
||||
"detonate_on_death" "1"
|
||||
"detonate_on_world" "1"
|
||||
"detonate_on_actor" "1"
|
||||
"snd_explode" "fx.explosion"
|
||||
"model_detonate" "fx_explosion.main"
|
||||
"decal_detonate" "ExplosionScorch"
|
||||
"smoke_fly" "weapon_9mmAR.nadetrail"
|
||||
"model_detonate" "fx_explosion.main"
|
||||
"decal_detonate" "ExplosionScorch"
|
||||
"smoke_fly" "weapon_9mmAR.nadetrail"
|
||||
|
||||
"def_damage" "damage_ARgrneadeDirect"
|
||||
"def_splash_damage" "damage_ARgrneadeSplash"
|
||||
|
|
|
@ -7,8 +7,8 @@ entityDef weapon_9mmhandgun
|
|||
"editor_rotatable" "1"
|
||||
|
||||
"spawnclass" "NSItem"
|
||||
"model" "models/w_9mmhandgun.mdl"
|
||||
"inv_item" "$WEAPON_GLOCK"
|
||||
"model" "models/w_9mmhandgun.mdl"
|
||||
"inv_item" "$WEAPON_GLOCK"
|
||||
"snd_acquire" "weapon.pickup"
|
||||
"snd_respawn" "item.respawn"
|
||||
}
|
||||
|
|
|
@ -7,8 +7,8 @@ entityDef weapon_crossbow
|
|||
"editor_rotatable" "1"
|
||||
|
||||
"spawnclass" "NSItem"
|
||||
"model" "models/w_crossbow.mdl"
|
||||
"inv_item" "$WEAPON_CROSSBOW"
|
||||
"model" "models/w_crossbow.mdl"
|
||||
"inv_item" "$WEAPON_CROSSBOW"
|
||||
"snd_acquire" "weapon.pickup"
|
||||
"snd_respawn" "item.respawn"
|
||||
}
|
||||
|
@ -16,13 +16,13 @@ entityDef weapon_crossbow
|
|||
entityDef projectile_arrow
|
||||
{
|
||||
"spawnclass" "NSProjectile"
|
||||
"model" "models/crossbow_bolt.mdl"
|
||||
"velocity" "2000 0 0"
|
||||
"model" "models/crossbow_bolt.mdl"
|
||||
"velocity" "2000 0 0"
|
||||
"angular_velocity" "0 0 20"
|
||||
"mins" "0 0 0"
|
||||
"maxs" "0 0 0"
|
||||
"mins" "0 0 0"
|
||||
"maxs" "0 0 0"
|
||||
"def_damage" "damage_arrowDirect"
|
||||
"model_detonate" "fx_spark.main"
|
||||
"model_detonate" "fx_spark.main"
|
||||
"snd_explode" "fx.spark"
|
||||
"detonate_on_fuse" "0"
|
||||
"detonate_on_death" "1"
|
||||
|
@ -37,13 +37,13 @@ entityDef damage_arrowDirect
|
|||
|
||||
entityDef projectile_arrowExplosive
|
||||
{
|
||||
"inherit" "projectile_arrow"
|
||||
"smoke_fly" "weapon_crossbow.trail"
|
||||
"inherit" "projectile_arrow"
|
||||
"smoke_fly" "weapon_crossbow.trail"
|
||||
"def_damage" ""
|
||||
"def_splash_damage" "damage_arrowSplash"
|
||||
"model_detonate" "fx_explosion.main"
|
||||
"model_detonate" "fx_explosion.main"
|
||||
"snd_explode" "fx.explosion"
|
||||
"decal_detonate" "ExplosionScorch"
|
||||
"decal_detonate" "ExplosionScorch"
|
||||
}
|
||||
|
||||
entityDef damage_arrowSplash
|
||||
|
|
|
@ -7,8 +7,8 @@ entityDef weapon_crowbar
|
|||
"editor_rotatable" "1"
|
||||
|
||||
"spawnclass" "NSItem"
|
||||
"model" "models/w_crowbar.mdl"
|
||||
"inv_item" "$WEAPON_CROWBAR"
|
||||
"model" "models/w_crowbar.mdl"
|
||||
"inv_item" "$WEAPON_CROWBAR"
|
||||
"snd_acquire" "weapon.pickup"
|
||||
"snd_respawn" "item.respawn"
|
||||
}
|
|
@ -7,8 +7,8 @@ entityDef weapon_egon
|
|||
"editor_rotatable" "1"
|
||||
|
||||
"spawnclass" "NSItem"
|
||||
"model" "models/w_egon.mdl"
|
||||
"inv_item" "$WEAPON_EGON"
|
||||
"model" "models/w_egon.mdl"
|
||||
"inv_item" "$WEAPON_EGON"
|
||||
"snd_acquire" "weapon.pickup"
|
||||
"snd_respawn" "item.respawn"
|
||||
}
|
|
@ -7,8 +7,8 @@ entityDef weapon_gauss
|
|||
"editor_rotatable" "1"
|
||||
|
||||
"spawnclass" "NSItem"
|
||||
"model" "models/w_gauss.mdl"
|
||||
"inv_item" "$WEAPON_GAUSS"
|
||||
"model" "models/w_gauss.mdl"
|
||||
"inv_item" "$WEAPON_GAUSS"
|
||||
"snd_acquire" "weapon.pickup"
|
||||
"snd_respawn" "item.respawn"
|
||||
}
|
|
@ -7,8 +7,8 @@ entityDef weapon_handgrenade
|
|||
"editor_rotatable" "1"
|
||||
|
||||
"spawnclass" "NSItem"
|
||||
"model" "models/w_grenade.mdl"
|
||||
"inv_item" "$WEAPON_HANDGRENADE"
|
||||
"model" "models/w_grenade.mdl"
|
||||
"inv_item" "$WEAPON_HANDGRENADE"
|
||||
"snd_acquire" "weapon.pickup"
|
||||
"snd_respawn" "item.respawn"
|
||||
}
|
||||
|
@ -16,16 +16,16 @@ entityDef weapon_handgrenade
|
|||
entityDef projectile_handgrenade
|
||||
{
|
||||
"spawnclass" "NSProjectile"
|
||||
"model" "models/w_grenade.mdl"
|
||||
"frame" "1"
|
||||
"fuse" "4"
|
||||
"model" "models/w_grenade.mdl"
|
||||
"frame" "1"
|
||||
"fuse" "4"
|
||||
"detonate_on_fuse" "1"
|
||||
"bounce" "1"
|
||||
"bounce" "1"
|
||||
"angular_velocity" "-350 0 0"
|
||||
"model_detonate" "fx_explosion.main"
|
||||
"model_detonate" "fx_explosion.main"
|
||||
"snd_explode" "fx.explosion"
|
||||
"snd_bounce" "weapon_handgrenade.bounce"
|
||||
"decal_detonate" "ExplosionScorch"
|
||||
"decal_detonate" "ExplosionScorch"
|
||||
|
||||
"def_damage" "damage_handgrenadeDirect"
|
||||
"def_splash_damage" "damage_handgrenadeSplash"
|
||||
|
|
|
@ -7,8 +7,8 @@ entityDef weapon_hornetgun
|
|||
"editor_rotatable" "1"
|
||||
|
||||
"spawnclass" "NSItem"
|
||||
"model" "models/w_hgun.mdl"
|
||||
"inv_item" "$WEAPON_HORNETGUN"
|
||||
"model" "models/w_hgun.mdl"
|
||||
"inv_item" "$WEAPON_HORNETGUN"
|
||||
"snd_acquire" "weapon.pickup"
|
||||
"snd_respawn" "item.respawn"
|
||||
}
|
|
@ -7,8 +7,8 @@ entityDef weapon_rpg
|
|||
"editor_rotatable" "1"
|
||||
|
||||
"spawnclass" "NSItem"
|
||||
"model" "models/w_rpg.mdl"
|
||||
"inv_item" "$WEAPON_RPG"
|
||||
"model" "models/w_rpg.mdl"
|
||||
"inv_item" "$WEAPON_RPG"
|
||||
"snd_acquire" "weapon.pickup"
|
||||
"snd_respawn" "item.respawn"
|
||||
}
|
||||
|
@ -16,49 +16,49 @@ entityDef weapon_rpg
|
|||
entityDef projectile_rocket
|
||||
{
|
||||
"spawnclass" "NSProjectile"
|
||||
"model" "models/rpgrocket.mdl"
|
||||
"model" "models/rpgrocket.mdl"
|
||||
|
||||
"def_damage" "damage_rocketDirect"
|
||||
"def_splash_damage" "damage_rocketSplash"
|
||||
|
||||
"health" "0"
|
||||
"velocity" "250"
|
||||
"angular_velocity" "0 0 200"
|
||||
"fuse" "10"
|
||||
"detonate_on_fuse" "0"
|
||||
"detonate_on_death" "1"
|
||||
"detonate_on_world" "1"
|
||||
"detonate_on_actor" "1"
|
||||
"health" "0"
|
||||
"velocity" "250"
|
||||
"angular_velocity" "0 0 200"
|
||||
"fuse" "10"
|
||||
"detonate_on_fuse" "0"
|
||||
"detonate_on_death" "1"
|
||||
"detonate_on_world" "1"
|
||||
"detonate_on_actor" "1"
|
||||
"impact_damage_effect" "1"
|
||||
"impact_gib" "1"
|
||||
"impact_gib" "1"
|
||||
|
||||
"thrust" "2000"
|
||||
"thrust" "2000"
|
||||
"thrust_start" "0.1"
|
||||
"thrust_end" "2"
|
||||
|
||||
"smoke_fly" "weapon_rpg.trail"
|
||||
"decal_detonate" "ExplosionScorch"
|
||||
"model_detonate" "fx_explosion.main"
|
||||
"smoke_fly" "weapon_rpg.trail"
|
||||
"decal_detonate" "ExplosionScorch"
|
||||
"model_detonate" "fx_explosion.main"
|
||||
"light_color" "1 0.8 0.4"
|
||||
"light_radius" "160"
|
||||
"light_offset" "0 0 0"
|
||||
|
||||
"explode_light_color" "2 1.6 0.8"
|
||||
"explode_light_radius" "320"
|
||||
"explode_light_color" "2 1.6 0.8"
|
||||
"explode_light_radius" "320"
|
||||
"explode_light_fadetime" "0.5"
|
||||
|
||||
"snd_explode" "fx.explosion"
|
||||
"snd_explode" "fx.explosion"
|
||||
}
|
||||
|
||||
entityDef projectile_rocket_homing
|
||||
{
|
||||
"inherit" "projectile_rocket"
|
||||
"inherit" "projectile_rocket"
|
||||
"thrust_homing" "1"
|
||||
}
|
||||
|
||||
entityDef damage_rocketDirect
|
||||
{
|
||||
"damage" "skill:plr_rocketlauncher_impact"
|
||||
"damage" "skill:plr_rocketlauncher_impact"
|
||||
"damage_random" "skill:plr_rocketlauncher_impact_rand"
|
||||
}
|
||||
|
||||
|
|
|
@ -7,8 +7,8 @@ entityDef weapon_satchel
|
|||
"editor_rotatable" "1"
|
||||
|
||||
"spawnclass" "NSItem"
|
||||
"model" "models/w_satchel.mdl"
|
||||
"inv_item" "$WEAPON_SATCHEL"
|
||||
"model" "models/w_satchel.mdl"
|
||||
"inv_item" "$WEAPON_SATCHEL"
|
||||
"snd_acquire" "weapon.pickup"
|
||||
"snd_respawn" "item.respawn"
|
||||
}
|
||||
|
@ -16,22 +16,22 @@ entityDef weapon_satchel
|
|||
entityDef projectile_satchel
|
||||
{
|
||||
"spawnclass" "NSProjectile"
|
||||
"model" "models/w_satchel.mdl"
|
||||
"velocity" "274 0 0"
|
||||
"model" "models/w_satchel.mdl"
|
||||
"velocity" "274 0 0"
|
||||
"angular_velocity" "0 400 0"
|
||||
"friction" "0.8"
|
||||
"gravity" "0.5"
|
||||
"bounce" "1"
|
||||
"frame" "1"
|
||||
"mins" "-1 -1 -4"
|
||||
"maxs" "1 1 4"
|
||||
"friction" "0.8"
|
||||
"gravity" "0.5"
|
||||
"bounce" "1"
|
||||
"frame" "1"
|
||||
"mins" "-1 -1 -4"
|
||||
"maxs" "1 1 4"
|
||||
"snd_bounce" "weapon_satchel.bounce"
|
||||
"inherit_velocity" "1"
|
||||
|
||||
"def_splash_damage" "damage_satchelExplosion"
|
||||
"model_detonate" "fx_explosion.main"
|
||||
"model_detonate" "fx_explosion.main"
|
||||
"snd_explode" "fx.explosion"
|
||||
"decal_detonate" "ExplosionScorch"
|
||||
"decal_detonate" "ExplosionScorch"
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -7,8 +7,8 @@ entityDef weapon_shotgun
|
|||
"editor_rotatable" "1"
|
||||
|
||||
"spawnclass" "NSItem"
|
||||
"model" "models/w_shotgun.mdl"
|
||||
"inv_item" "$WEAPON_SHOTGUN"
|
||||
"model" "models/w_shotgun.mdl"
|
||||
"inv_item" "$WEAPON_SHOTGUN"
|
||||
"snd_acquire" "weapon.pickup"
|
||||
"snd_respawn" "item.respawn"
|
||||
}
|
|
@ -7,9 +7,9 @@ entityDef weapon_snark
|
|||
"editor_rotatable" "1"
|
||||
|
||||
"spawnclass" "NSItem"
|
||||
"model" "models/w_sqknest.mdl"
|
||||
"frame" "1"
|
||||
"inv_item" "$WEAPON_SNARK"
|
||||
"model" "models/w_sqknest.mdl"
|
||||
"frame" "1"
|
||||
"inv_item" "$WEAPON_SNARK"
|
||||
"snd_acquire" "weapon.pickup"
|
||||
"snd_respawn" "item.respawn"
|
||||
}
|
|
@ -7,11 +7,11 @@ entityDef weapon_tripmine
|
|||
"editor_rotatable" "1"
|
||||
|
||||
"spawnclass" "NSItem"
|
||||
"model" "models/v_tripmine.mdl"
|
||||
"body0" "2"
|
||||
"body1" "2"
|
||||
"frame" "8"
|
||||
"inv_item" "$WEAPON_TRIPMINE"
|
||||
"model" "models/v_tripmine.mdl"
|
||||
"body0" "2"
|
||||
"body1" "2"
|
||||
"frame" "8"
|
||||
"inv_item" "$WEAPON_TRIPMINE"
|
||||
"snd_acquire" "weapon.pickup"
|
||||
"snd_respawn" "item.respawn"
|
||||
}
|
|
@ -77,17 +77,17 @@ r_part hotbits
|
|||
}
|
||||
|
||||
r_part +main
|
||||
{
|
||||
{
|
||||
lighttime 1
|
||||
lightradius 350
|
||||
lightradiusfade 300
|
||||
lightrgb 1.0 0.5 0.4
|
||||
lightrgbfade 0.36 0.19 0.19
|
||||
lightradius 350
|
||||
lightradiusfade 300
|
||||
lightrgb 1.0 0.5 0.4
|
||||
lightrgbfade 0.36 0.19 0.19
|
||||
count 0 0 2
|
||||
spawnorg 0 32
|
||||
orgadd 32
|
||||
model "sprites/fexplo.spr" framestart=0 framecount=29 framerate=20 additive scalemin=0.5 scalemax=2.5
|
||||
}
|
||||
}
|
||||
|
||||
r_part +main
|
||||
{
|
||||
|
@ -161,12 +161,12 @@ r_part spark
|
|||
}
|
||||
|
||||
r_part +spark
|
||||
{
|
||||
{
|
||||
lighttime 1
|
||||
lightradius 64
|
||||
lightradiusfade 300
|
||||
lightrgb 1.0 0.5 0.4
|
||||
lightrgbfade 0.36 0.19 0.19
|
||||
lightradius 64
|
||||
lightradiusfade 300
|
||||
lightrgb 1.0 0.5 0.4
|
||||
lightrgbfade 0.36 0.19 0.19
|
||||
count 0 0 1
|
||||
model "sprites/muzzleflash.spr" framestart=0 framecount=2 framerate=20 additive scalemin=0.1 scalemax=0.5
|
||||
}
|
||||
}
|
||||
|
|
|
@ -72,19 +72,19 @@ r_part smoke_grey
|
|||
}
|
||||
|
||||
r_part water
|
||||
{
|
||||
{
|
||||
count 0 0 1
|
||||
model "sprites/wsplash3.spr" framestart=0 frameend=14 framerate=20 additive
|
||||
}
|
||||
}
|
||||
|
||||
r_part slime
|
||||
{
|
||||
lighttime 0.5
|
||||
lightradius 256
|
||||
lightradiusfade 300
|
||||
lightrgb 0.0 1.0 0.0
|
||||
lightrgbfade 0.0 0.0 0.0
|
||||
}
|
||||
{
|
||||
lighttime 0.5
|
||||
lightradius 256
|
||||
lightradiusfade 300
|
||||
lightrgb 0.0 1.0 0.0
|
||||
lightrgbfade 0.0 0.0 0.0
|
||||
}
|
||||
|
||||
r_part +slime
|
||||
{
|
||||
|
@ -93,16 +93,16 @@ r_part +slime
|
|||
}
|
||||
|
||||
r_part lava
|
||||
{
|
||||
lighttime 0.5
|
||||
lightradius 256
|
||||
lightradiusfade 300
|
||||
{
|
||||
lighttime 0.5
|
||||
lightradius 256
|
||||
lightradiusfade 300
|
||||
lightrgb 1.0 0.0 0.0
|
||||
lightrgbfade 0.0 0.0 0.0
|
||||
}
|
||||
lightrgbfade 0.0 0.0 0.0
|
||||
}
|
||||
|
||||
r_part +lava
|
||||
{
|
||||
count 0 0 1
|
||||
model "sprites/wsplash3.spr" framestart=0 frameend=14 framerate=20 additive
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,12 +17,12 @@ r_part main
|
|||
}
|
||||
|
||||
r_part +main
|
||||
{
|
||||
{
|
||||
lighttime 1
|
||||
lightradius 64
|
||||
lightradiusfade 300
|
||||
lightrgb 1.0 0.5 0.4
|
||||
lightrgbfade 0.36 0.19 0.19
|
||||
lightradius 64
|
||||
lightradiusfade 300
|
||||
lightrgb 1.0 0.5 0.4
|
||||
lightrgbfade 0.36 0.19 0.19
|
||||
count 0 0 1
|
||||
model "sprites/muzzleflash.spr" framestart=0 framecount=2 framerate=20 additive scalemin=0.1 scalemax=0.5
|
||||
}
|
||||
}
|
||||
|
|
|
@ -39,11 +39,11 @@ r_part +main
|
|||
|
||||
// unused ricochet sprite, reactivated
|
||||
r_part +main
|
||||
{
|
||||
{
|
||||
count 0 0 1
|
||||
orgadd 8
|
||||
model "sprites/richo2.spr" framestart=0 framecount=15 framerate=20 additive scalemin=0.25 scalemax=0.55 alpha=0.65
|
||||
}
|
||||
}
|
||||
|
||||
// emitter for our bullet hole dust
|
||||
r_part +main
|
||||
|
@ -73,4 +73,4 @@ r_part dustparts
|
|||
randomvel 10
|
||||
veladd 50
|
||||
gravity 800
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,13 +18,13 @@ r_part main
|
|||
}
|
||||
|
||||
r_part +main
|
||||
{
|
||||
{
|
||||
count 0 0 1
|
||||
orgadd 8
|
||||
model "sprites/richo1.spr" framestart=0 framecount=3 framerate=20 additive scalemin=0.5 scalemax=0.5
|
||||
lighttime 1
|
||||
lightradius 64
|
||||
lightradiusfade 300
|
||||
lightrgb 1.0 0.5 0.4
|
||||
lightrgbfade 0.36 0.19 0.19
|
||||
}
|
||||
lightradius 64
|
||||
lightradiusfade 300
|
||||
lightrgb 1.0 0.5 0.4
|
||||
lightrgbfade 0.36 0.19 0.19
|
||||
}
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
r_part nadetrail
|
||||
{
|
||||
|
||||
step 4
|
||||
die 1
|
||||
type beam
|
||||
|
@ -9,7 +8,6 @@ r_part nadetrail
|
|||
emitinterval 5
|
||||
}
|
||||
|
||||
|
||||
r_part smoke
|
||||
{
|
||||
texture "particles/fteparticlefont.tga"
|
||||
|
@ -23,4 +21,4 @@ r_part smoke
|
|||
spawnmode ball
|
||||
randomvel 10
|
||||
gravity -25
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@ fx.explosion
|
|||
sample weapons/explode3.wav
|
||||
sample weapons/explode4.wav
|
||||
sample weapons/explode5.wav
|
||||
shakes 1.5
|
||||
shakes 3.0
|
||||
}
|
||||
|
||||
fx.explosion_dist
|
||||
|
|
|
@ -97,4 +97,20 @@ Player.FlashLightOff
|
|||
SprayCan.Paint
|
||||
{
|
||||
sample player/sprayer.wav
|
||||
}
|
||||
|
||||
Player.Wade
|
||||
{
|
||||
sample player/pl_wade1.wav
|
||||
sample player/pl_wade2.wav
|
||||
sample player/pl_wade3.wav
|
||||
sample player/pl_wade4.wav
|
||||
}
|
||||
|
||||
Player.Swim
|
||||
{
|
||||
sample player/pl_swim1.wav
|
||||
sample player/pl_swim2.wav
|
||||
sample player/pl_swim3.wav
|
||||
sample player/pl_swim4.wav
|
||||
}
|
Loading…
Reference in a new issue