Yank out the monster's out of the codebase. Use entityDefs instead.
This commit is contained in:
parent
67d2f03a26
commit
dde42e481c
55 changed files with 1150 additions and 1010 deletions
|
@ -46,6 +46,18 @@ ClientGame_EventParse(float fHeader)
|
|||
float flForce = readfloat();
|
||||
FX_GibHuman(vGibPos, vDir, flForce);
|
||||
break;
|
||||
case EV_GIBALIEN:
|
||||
vector vGibPos2;
|
||||
vGibPos[0] = readcoord();
|
||||
vGibPos[1] = readcoord();
|
||||
vGibPos[2] = readcoord();
|
||||
vector vDir2;
|
||||
vDir[0] = readcoord();
|
||||
vDir[1] = readcoord();
|
||||
vDir[2] = readcoord();
|
||||
float flForce2 = readfloat();
|
||||
FX_GibAlien(vGibPos2, vDir2, flForce2);
|
||||
break;
|
||||
case EV_BLOOD:
|
||||
vector vBloodPos;
|
||||
vector vBloodColor;
|
||||
|
|
|
@ -455,6 +455,18 @@ HUD_DrawDamageIndicator(void)
|
|||
pSeatLocal->m_flDamageIndicator -= clframetime;
|
||||
}
|
||||
|
||||
void
|
||||
HUD_TimeRemaining(void)
|
||||
{
|
||||
vector iconPos = g_hudmins + [16, g_hudres[1] - 64];
|
||||
|
||||
/* display time if timelimit is being hit */
|
||||
if (serverkeyfloat("timelimit")) {
|
||||
string tempstr = strcat("Time Remaining: ", Util_GetTime());
|
||||
Font_DrawText_RGB(iconPos, tempstr, g_hud_color, FONT_20);
|
||||
}
|
||||
}
|
||||
|
||||
/* main entry */
|
||||
void
|
||||
HUD_Draw(void)
|
||||
|
@ -462,7 +474,16 @@ HUD_Draw(void)
|
|||
player pl = (player)pSeat->m_ePlayer;
|
||||
|
||||
#ifndef TFC
|
||||
#ifndef GEARBOX
|
||||
g_hud_color = autocvar_con_color * (1 / 255);
|
||||
#else
|
||||
if (getplayerkeyfloat(pl.entnum-1, "*team") == 1)
|
||||
g_hud_color = [255, 150, 0] / 255;
|
||||
else if (getplayerkeyfloat(pl.entnum-1, "*team") == 2)
|
||||
g_hud_color = [0, 1, 0];
|
||||
else
|
||||
g_hud_color = autocvar_con_color * (1 / 255);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* little point in not drawing these, even if you don't have a suit */
|
||||
|
@ -472,6 +493,8 @@ HUD_Draw(void)
|
|||
Obituary_Draw();
|
||||
Textmenu_Draw();
|
||||
|
||||
HUD_TimeRemaining();
|
||||
|
||||
if (!(pl.g_items & ITEM_SUIT)) {
|
||||
return;
|
||||
}
|
||||
|
|
136
src/client/hud_sprite.qc
Normal file
136
src/client/hud_sprite.qc
Normal file
|
@ -0,0 +1,136 @@
|
|||
/*
|
||||
* Copyright (c) 2023 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.
|
||||
*/
|
||||
|
||||
typedef struct
|
||||
{
|
||||
string m_strImage;
|
||||
vector m_vecSize;
|
||||
vector m_vecCanvasSize;
|
||||
vector m_vecCanvasPos;
|
||||
} hlsprite_t;
|
||||
|
||||
hlsprite_t *g_hlsprites;
|
||||
var hashtable g_hashhlsprite;
|
||||
|
||||
void
|
||||
HLSprite_Init(void)
|
||||
{
|
||||
filestream hudFile;
|
||||
vector imgSize;
|
||||
int spriteCount = 0i;
|
||||
int i = 0i;
|
||||
string line;
|
||||
|
||||
hudFile = fopen("sprites/hud.txt", FILE_READ);
|
||||
|
||||
if (hudFile < 0) {
|
||||
error("hud.txt was not found.");
|
||||
return;
|
||||
}
|
||||
|
||||
/* count valid entries */
|
||||
while ((line = fgets(hudFile))) {
|
||||
int c = tokenize_console(line);
|
||||
|
||||
if (c != 7)
|
||||
continue;
|
||||
|
||||
if (argv(1) != "640")
|
||||
continue;
|
||||
|
||||
spriteCount++;
|
||||
}
|
||||
|
||||
/* if we couldn't find anything, don't bother */
|
||||
if (spriteCount <= 0i)
|
||||
return;
|
||||
|
||||
/* allocate our hashtable */
|
||||
if (!g_hashhlsprite) {
|
||||
g_hashhlsprite = hash_createtab(2, HASH_ADD);
|
||||
}
|
||||
|
||||
/* to the beginning we go. */
|
||||
fseek(hudFile, 0);
|
||||
/* allocate valid entries */
|
||||
g_hlsprites = memalloc(sizeof(hlsprite_t) * spriteCount);
|
||||
|
||||
/* read the data into our banks */
|
||||
while ((line = fgets(hudFile))) {
|
||||
int c = tokenize_console(line);
|
||||
|
||||
if (c != 7)
|
||||
continue;
|
||||
|
||||
if (argv(1) != "640")
|
||||
continue;
|
||||
|
||||
g_hlsprites[i].m_strImage = spriteframe(sprintf("sprites/%s.spr", argv(2)), 0, 0.0f);
|
||||
g_hlsprites[i].m_vecSize[0] = stof(argv(5));
|
||||
g_hlsprites[i].m_vecSize[1] = stof(argv(6));
|
||||
imgSize = drawgetimagesize(g_hlsprites[i].m_strImage);
|
||||
g_hlsprites[i].m_vecCanvasPos[0] = stof(argv(3)) / imgSize[0];
|
||||
g_hlsprites[i].m_vecCanvasPos[1] = stof(argv(4)) / imgSize[1];
|
||||
g_hlsprites[i].m_vecCanvasSize[0] = g_hlsprites[i].m_vecSize[0] / imgSize[0];
|
||||
g_hlsprites[i].m_vecCanvasSize[1] = g_hlsprites[i].m_vecSize[1] / imgSize[1];
|
||||
hash_add(g_hashhlsprite, argv(0), (int)i);
|
||||
i++;
|
||||
}
|
||||
|
||||
print(sprintf("initialized %i HL sprites.\n", spriteCount));
|
||||
}
|
||||
|
||||
void
|
||||
HLSprite_Draw_RGBA(string spriteName, vector spritePos, vector spriteColor, float spriteAlpha, bool isAdditive)
|
||||
{
|
||||
int spriteNum = -1i;
|
||||
|
||||
spriteNum = (int)hash_get(g_hashhlsprite, spriteName, -1i);
|
||||
|
||||
if (spriteNum == -1i) {
|
||||
print(sprintf("cannot draw sprite %S!\n", spriteName));
|
||||
return;
|
||||
}
|
||||
|
||||
drawsubpic(
|
||||
spritePos,
|
||||
g_hlsprites[spriteNum].m_vecSize,
|
||||
g_hlsprites[spriteNum].m_strImage,
|
||||
g_hlsprites[spriteNum].m_vecCanvasPos,
|
||||
g_hlsprites[spriteNum].m_vecCanvasSize,
|
||||
spriteColor,
|
||||
spriteAlpha,
|
||||
isAdditive ? DRAWFLAG_ADDITIVE : 0
|
||||
);
|
||||
}
|
||||
|
||||
void
|
||||
HLSprite_Draw(string spriteName, vector spritePos, bool isAdditive)
|
||||
{
|
||||
HLSprite_Draw_RGBA(spriteName, spritePos, [1,1,1], 1.0f, isAdditive);
|
||||
}
|
||||
|
||||
void
|
||||
HLSprite_Draw_A(string spriteName, vector spritePos, float spriteAlpha, bool isAdditive)
|
||||
{
|
||||
HLSprite_Draw_RGBA(spriteName, spritePos, [1,1,1], spriteAlpha, isAdditive);
|
||||
}
|
||||
|
||||
void
|
||||
HLSprite_Draw_RGB(string spriteName, vector spritePos, vector spriteColor, bool isAdditive)
|
||||
{
|
||||
HLSprite_Draw_RGBA(spriteName, spritePos, spriteColor, 1.0f, isAdditive);
|
||||
}
|
|
@ -53,6 +53,7 @@ ClientGame_RendererRestart(string rstr)
|
|||
FX_Blood_Init();
|
||||
FX_BreakModel_Init();
|
||||
FX_Explosion_Init();
|
||||
FX_GibAlien_Init();
|
||||
FX_GibHuman_Init();
|
||||
FX_Spark_Init();
|
||||
FX_Impact_Init();
|
||||
|
|
|
@ -31,6 +31,7 @@ game_event.qc
|
|||
../../../valve/src/client/viewmodel.qc
|
||||
view.qc
|
||||
obituary.qc
|
||||
hud_sprite.qc
|
||||
hud_itemnotify.qc
|
||||
hud_dmgnotify.qc
|
||||
hud_ammonotify.qc
|
||||
|
|
|
@ -19,11 +19,13 @@
|
|||
|
||||
var int autocvar_cl_centerscores = FALSE;
|
||||
var int g_scores_teamplay = 0;
|
||||
var bool g_scores_scorepoints = false;
|
||||
|
||||
void
|
||||
Scores_Init(void)
|
||||
{
|
||||
g_scores_teamplay = (int)serverkeyfloat("teamplay");
|
||||
g_scores_scorepoints = (bool)serverkeyfloat("scorepoints");
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -33,7 +35,12 @@ Scores_DrawTeam(player pl, vector pos)
|
|||
|
||||
drawfont = Font_GetID(FONT_20);
|
||||
drawstring(pos + [0,-18], "Teams", [20,20], SCORE_HEADER_C, 1.0f, DRAWFLAG_ADDITIVE);
|
||||
drawstring(pos + [124,-18], "kills / deaths", [20,20], SCORE_HEADER_C, 1.0f, DRAWFLAG_ADDITIVE);
|
||||
|
||||
if (g_scores_scorepoints)
|
||||
drawstring(pos + [124-32,-18], "kills / deaths / score", [20,20], SCORE_HEADER_C, 1.0f, DRAWFLAG_ADDITIVE);
|
||||
else
|
||||
drawstring(pos + [124,-18], "kills / deaths", [20,20], SCORE_HEADER_C, 1.0f, DRAWFLAG_ADDITIVE);
|
||||
|
||||
drawstring(pos + [240,-18], "latency", [20,20], SCORE_HEADER_C, 1.0f, DRAWFLAG_ADDITIVE);
|
||||
|
||||
pos[1] += 12;
|
||||
|
@ -63,34 +70,61 @@ Scores_DrawTeam(player pl, vector pos)
|
|||
}
|
||||
|
||||
drawstring(pos + [24,0], getplayerkeyvalue(i, "name"), [20,20], [1,1,1], 1.0f, DRAWFLAG_ADDITIVE);
|
||||
drawstring(pos + [154,0], "/", [20,20], [1,1,1], 1.0f, DRAWFLAG_ADDITIVE);
|
||||
|
||||
/* Get the kills and align them left to right */
|
||||
temp = getplayerkeyvalue(i, "frags");
|
||||
l = stringwidth(temp, FALSE, [20,20]);
|
||||
drawstring(pos + [150 - l,0], temp, [20,20], [1,1,1], 1.0f, DRAWFLAG_ADDITIVE);
|
||||
if (g_scores_scorepoints) {
|
||||
drawstring(pos + [154-32,0], "/", [20,20], [1,1,1], 1.0f, DRAWFLAG_ADDITIVE);
|
||||
|
||||
/* Deaths are right to left aligned */
|
||||
temp = getplayerkeyvalue(i, "*deaths");
|
||||
drawstring(pos + [165,0], temp, [20,20], [1,1,1], 1.0f, DRAWFLAG_ADDITIVE);
|
||||
/* Get the kills and align them left to right */
|
||||
temp = getplayerkeyvalue(i, "frags");
|
||||
l = stringwidth(temp, FALSE, [20,20]);
|
||||
drawstring(pos + [150 - 32 - l,0], temp, [20,20], [1,1,1], 1.0f, DRAWFLAG_ADDITIVE);
|
||||
|
||||
drawstring(pos + [154+26,0], "/", [20,20], [1,1,1], 1.0f, DRAWFLAG_ADDITIVE);
|
||||
|
||||
/* Deaths are right to left aligned */
|
||||
temp = getplayerkeyvalue(i, "*deaths");
|
||||
if (!temp) temp = "0";
|
||||
l = stringwidth(temp, FALSE, [20,20]);
|
||||
drawstring(pos + [165 - l,0], temp, [20,20], [1,1,1], 1.0f, DRAWFLAG_ADDITIVE);
|
||||
|
||||
/* Deaths are right to left aligned */
|
||||
temp = getplayerkeyvalue(i, "*score");
|
||||
if (!temp) temp = "0";
|
||||
drawstring(pos + [165+32,0], temp, [20,20], [1,1,1], 1.0f, DRAWFLAG_ADDITIVE);
|
||||
} else {
|
||||
drawstring(pos + [154,0], "/", [20,20], [1,1,1], 1.0f, DRAWFLAG_ADDITIVE);
|
||||
|
||||
/* Get the kills and align them left to right */
|
||||
temp = getplayerkeyvalue(i, "frags");
|
||||
l = stringwidth(temp, FALSE, [20,20]);
|
||||
drawstring(pos + [150 - l,0], temp, [20,20], [1,1,1], 1.0f, DRAWFLAG_ADDITIVE);
|
||||
|
||||
/* Deaths are right to left aligned */
|
||||
temp = getplayerkeyvalue(i, "*deaths");
|
||||
drawstring(pos + [165,0], temp, [20,20], [1,1,1], 1.0f, DRAWFLAG_ADDITIVE);
|
||||
}
|
||||
|
||||
vector tmpColor;
|
||||
temp = getplayerkeyvalue(i, "*icon1");
|
||||
if (temp) {
|
||||
tmpColor[0] = getplayerkeyfloat(i, "*icon1_r");
|
||||
tmpColor[1] = getplayerkeyfloat(i, "*icon1_g");
|
||||
tmpColor[2] = getplayerkeyfloat(i, "*icon1_b");
|
||||
HLSprite_Draw_RGB(temp, pos - [8, 0], tmpColor, true);
|
||||
}
|
||||
|
||||
temp = getplayerkeyvalue(i, "*icon2");
|
||||
if (temp) {
|
||||
tmpColor[0] = getplayerkeyfloat(i, "*icon2_r");
|
||||
tmpColor[1] = getplayerkeyfloat(i, "*icon2_g");
|
||||
tmpColor[2] = getplayerkeyfloat(i, "*icon2_b");
|
||||
HLSprite_Draw_RGB(temp, pos + [8, 0], tmpColor, true);
|
||||
}
|
||||
|
||||
/* Get the latency and align it left to right */
|
||||
temp = getplayerkeyvalue(i, "ping");
|
||||
l = stringwidth(temp, FALSE, [20,20]);
|
||||
|
||||
if (getplayerkeyfloat(i, "*dead") == 1) {
|
||||
drawsubpic(
|
||||
pos - [8,0],
|
||||
[32,16],
|
||||
g_hud1_spr,
|
||||
[224/256, 240/256],
|
||||
[32/256, 16/256],
|
||||
[1,0,0],
|
||||
1.0f,
|
||||
DRAWFLAG_ADDITIVE
|
||||
);
|
||||
}
|
||||
|
||||
drawstring(pos + [290 - l,0], temp, [20,20], [1,1,1], 1.0f, DRAWFLAG_ADDITIVE);
|
||||
pos[1] += 20;
|
||||
}
|
||||
|
|
|
@ -44,6 +44,8 @@ void
|
|||
HLMultiplayerRules::InitPostEnts(void)
|
||||
{
|
||||
MOTD_LoadDefault();
|
||||
|
||||
forceinfokey(world, "scorepoints", "0");
|
||||
|
||||
if (IsTeamplay() == true) {
|
||||
int c;
|
||||
|
|
|
@ -45,24 +45,22 @@ enum
|
|||
CON_DIE
|
||||
};
|
||||
|
||||
class monster_alien_controller:NSMonster
|
||||
class monster_alien_controller:HLXenMonster
|
||||
{
|
||||
float m_flIdleTime;
|
||||
float m_flPainTime;
|
||||
|
||||
void(void) monster_alien_controller;
|
||||
|
||||
virtual void(void) Pain;
|
||||
virtual void(void) Death;
|
||||
virtual void(void) HasBeenHit;
|
||||
virtual void(void) HasBeenKilled;
|
||||
virtual void(void) IdleNoise;
|
||||
virtual void(void) Respawn;
|
||||
};
|
||||
|
||||
void
|
||||
monster_alien_controller::Pain(void)
|
||||
monster_alien_controller::HasBeenHit(void)
|
||||
{
|
||||
super::Pain();
|
||||
|
||||
if (m_flPainTime > time) {
|
||||
return;
|
||||
}
|
||||
|
@ -77,16 +75,11 @@ monster_alien_controller::Pain(void)
|
|||
}
|
||||
|
||||
void
|
||||
monster_alien_controller::Death(void)
|
||||
monster_alien_controller::HasBeenKilled(void)
|
||||
{
|
||||
/* if we're already dead (corpse) don't change animations */
|
||||
if (IsAlive() == true) {
|
||||
SetFrame(CON_DIE);
|
||||
Sound_Play(this, CHAN_VOICE, "monster_alien_controller.die");
|
||||
}
|
||||
|
||||
/* set the functional differences */
|
||||
super::Death();
|
||||
SetFrame(CON_DIE);
|
||||
Sound_Play(this, CHAN_VOICE, "monster_alien_controller.die");
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -124,4 +117,5 @@ monster_alien_controller::monster_alien_controller(void)
|
|||
model = "models/controller.mdl";
|
||||
base_mins = [-16,-16,0];
|
||||
base_maxs = [16,16,72];
|
||||
m_iAlliance = MAL_ALIEN;
|
||||
}
|
||||
|
|
|
@ -58,24 +58,22 @@ enum
|
|||
AG_LAND
|
||||
};
|
||||
|
||||
class monster_alien_grunt:NSMonster
|
||||
class monster_alien_grunt:HLXenMonster
|
||||
{
|
||||
float m_flIdleTime;
|
||||
float m_flPainTime;
|
||||
|
||||
void(void) monster_alien_grunt;
|
||||
|
||||
virtual void(void) Pain;
|
||||
virtual void(void) Death;
|
||||
virtual void(void) HasBeenHit;
|
||||
virtual void(void) HasBeenKilled;
|
||||
virtual void(void) IdleNoise;
|
||||
virtual void(void) Respawn;
|
||||
};
|
||||
|
||||
void
|
||||
monster_alien_grunt::Pain(void)
|
||||
monster_alien_grunt::HasBeenHit(void)
|
||||
{
|
||||
super::Pain();
|
||||
|
||||
if (m_flPainTime > time) {
|
||||
return;
|
||||
}
|
||||
|
@ -90,26 +88,21 @@ monster_alien_grunt::Pain(void)
|
|||
}
|
||||
|
||||
void
|
||||
monster_alien_grunt::Death(void)
|
||||
monster_alien_grunt::HasBeenKilled(void)
|
||||
{
|
||||
/* if we're already dead (corpse) don't change animations */
|
||||
if (IsAlive() == true) {
|
||||
/* 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");
|
||||
/* 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)));
|
||||
}
|
||||
|
||||
/* set the functional differences */
|
||||
super::Death();
|
||||
Sound_Play(this, CHAN_VOICE, "monster_alien_grunt.die");
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -149,4 +142,5 @@ monster_alien_grunt::monster_alien_grunt(void)
|
|||
base_mins = [-32,-32,0];
|
||||
base_maxs = [32,32,64];
|
||||
base_health = Skill_GetValue("agrunt_health", 90);
|
||||
m_iAlliance = MAL_ALIEN;
|
||||
}
|
||||
|
|
|
@ -56,15 +56,15 @@ enum
|
|||
SLV_JABBER
|
||||
};
|
||||
|
||||
class monster_alien_slave:NSTalkMonster
|
||||
class monster_alien_slave:HLXenTalkMonster
|
||||
{
|
||||
float m_flIdleTime;
|
||||
float m_flPainTime;
|
||||
|
||||
void(void) monster_alien_slave;
|
||||
|
||||
virtual void(void) Death;
|
||||
virtual void(void) Pain;
|
||||
virtual void(void) HasBeenKilled;
|
||||
virtual void(void) HasBeenHit;
|
||||
virtual void(void) IdleChat;
|
||||
virtual void(void) Respawn;
|
||||
|
||||
|
@ -167,10 +167,8 @@ monster_alien_slave::IdleChat(void)
|
|||
}
|
||||
|
||||
void
|
||||
monster_alien_slave::Pain(void)
|
||||
monster_alien_slave::HasBeenHit(void)
|
||||
{
|
||||
super::Pain();
|
||||
|
||||
if (m_flPainTime > time) {
|
||||
return;
|
||||
}
|
||||
|
@ -185,10 +183,8 @@ monster_alien_slave::Pain(void)
|
|||
}
|
||||
|
||||
void
|
||||
monster_alien_slave::Death(void)
|
||||
monster_alien_slave::HasBeenKilled(void)
|
||||
{
|
||||
/* if we're already dead (corpse) don't change animations */
|
||||
if (IsAlive() == true) {
|
||||
/* headshots == different animation */
|
||||
if (g_dmg_iHitBody == BODY_HEAD) {
|
||||
if (random() < 0.5) {
|
||||
|
@ -201,10 +197,7 @@ monster_alien_slave::Death(void)
|
|||
}
|
||||
|
||||
Sound_Play(this, CHAN_VOICE, "monster_alien_slave.die");
|
||||
}
|
||||
|
||||
/* set the functional differences */
|
||||
super::Death();
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -227,7 +220,7 @@ monster_alien_slave::monster_alien_slave(void)
|
|||
m_talkAnswer = "";
|
||||
m_talkAsk = "";
|
||||
m_talkAllyShot = "";
|
||||
m_talkGreet = "SLV_ALERT";
|
||||
m_talkGreet = "!SLV_ALERT";
|
||||
m_talkIdle = "!SLV_IDLE";
|
||||
m_talkSmelling = "";
|
||||
m_talkStare = "";
|
||||
|
|
|
@ -37,7 +37,8 @@ class monster_barnacle:NSMonster
|
|||
{
|
||||
void(void) monster_barnacle;
|
||||
|
||||
virtual void(void) Death;
|
||||
/* overrides */
|
||||
virtual void(void) HasBeenKilled;
|
||||
virtual void(void) Respawn;
|
||||
virtual void(void) Physics;
|
||||
};
|
||||
|
@ -49,16 +50,10 @@ monster_barnacle::Physics(void)
|
|||
}
|
||||
|
||||
void
|
||||
monster_barnacle::Death(void)
|
||||
monster_barnacle::HasBeenKilled(void)
|
||||
{
|
||||
/* if we're already dead (corpse) don't change animations */
|
||||
if (IsAlive() == true) {
|
||||
SetFrame(BCL_DIE);
|
||||
Sound_Play(this, CHAN_VOICE, "monster_barnacle.die");
|
||||
}
|
||||
|
||||
/* set the functional differences */
|
||||
super::Death();
|
||||
SetFrame(BCL_DIE);
|
||||
StartSoundDef("monster_barnacle.die", CHAN_VOICE, true);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -44,6 +44,7 @@ enum
|
|||
BA_FLINCH_SML
|
||||
};
|
||||
|
||||
#if 0
|
||||
class monster_barney:NSTalkMonster
|
||||
{
|
||||
void(void) monster_barney;
|
||||
|
@ -232,4 +233,5 @@ monster_barney::Spawned(void)
|
|||
void
|
||||
monster_barney::monster_barney(void)
|
||||
{
|
||||
}
|
||||
}
|
||||
#endif
|
|
@ -46,7 +46,7 @@ enum
|
|||
GON_FALLDIE
|
||||
};
|
||||
|
||||
class monster_bigmomma:NSMonster
|
||||
class monster_bigmomma:HLXenMonster
|
||||
{
|
||||
float m_flIdleTime;
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@ Flocking Floater
|
|||
|
||||
*/
|
||||
|
||||
class monster_bloater:NSMonster
|
||||
class monster_bloater:HLXenMonster
|
||||
{
|
||||
void(void) monster_bloater;
|
||||
};
|
||||
|
|
|
@ -54,7 +54,7 @@ enum
|
|||
* for close range attacks
|
||||
*/
|
||||
|
||||
class monster_bullchicken:NSMonster
|
||||
class monster_bullchicken:HLXenMonster
|
||||
{
|
||||
float m_flIdleTime;
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@ Boid
|
|||
|
||||
*/
|
||||
|
||||
class monster_flyer_flock:NSMonster
|
||||
class monster_flyer_flock:HLXenMonster
|
||||
{
|
||||
void(void) monster_flyer_flock;
|
||||
};
|
||||
|
|
|
@ -48,15 +48,15 @@ enum
|
|||
GARG_BUST
|
||||
};
|
||||
|
||||
class monster_gargantua:NSMonster
|
||||
class monster_gargantua:HLXenMonster
|
||||
{
|
||||
float m_flIdleTime;
|
||||
|
||||
void(void) monster_gargantua;
|
||||
|
||||
virtual void(void) Spawned;
|
||||
virtual void(void) Death;
|
||||
virtual void(void) Pain;
|
||||
virtual void(void) HasBeenKilled;
|
||||
virtual void(void) HasBeenHit;
|
||||
virtual void(void) IdleNoise;
|
||||
virtual void(void) Respawn;
|
||||
};
|
||||
|
@ -79,10 +79,8 @@ monster_gargantua::IdleNoise(void)
|
|||
}
|
||||
|
||||
void
|
||||
monster_gargantua::Pain(void)
|
||||
monster_gargantua::HasBeenHit(void)
|
||||
{
|
||||
super::Pain();
|
||||
|
||||
if (m_flAnimTime > time) {
|
||||
return;
|
||||
}
|
||||
|
@ -97,16 +95,10 @@ monster_gargantua::Pain(void)
|
|||
}
|
||||
|
||||
void
|
||||
monster_gargantua::Death(void)
|
||||
monster_gargantua::HasBeenKilled(void)
|
||||
{
|
||||
/* if we're already dead (corpse) don't change animations */
|
||||
if (IsAlive() == true) {
|
||||
SetFrame(GARG_DIE);
|
||||
Sound_Play(this, CHAN_VOICE, "monster_gargantua.die");
|
||||
}
|
||||
|
||||
/* set the functional differences */
|
||||
super::Death();
|
||||
SetFrame(GARG_DIE);
|
||||
Sound_Play(this, CHAN_VOICE, "monster_gargantua.die");
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -47,43 +47,30 @@ enum
|
|||
HC_STRUGGLE
|
||||
};
|
||||
|
||||
class monster_headcrab:NSMonster
|
||||
class monster_headcrab:HLXenMonster
|
||||
{
|
||||
bool m_bBiting;
|
||||
float m_flIdleTime;
|
||||
|
||||
void(void) monster_headcrab;
|
||||
void monster_headcrab(void);
|
||||
|
||||
virtual void(void) Spawned;
|
||||
virtual void(void) Pain;
|
||||
virtual void(void) Death;
|
||||
virtual void(void) IdleNoise;
|
||||
virtual int(void) AnimIdle;
|
||||
virtual int(void) AnimWalk;
|
||||
virtual int(void) AnimRun;
|
||||
virtual int(void) AttackRanged;
|
||||
virtual void(entity) Touch;
|
||||
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);
|
||||
};
|
||||
|
||||
int
|
||||
monster_headcrab::AnimIdle(void)
|
||||
float
|
||||
monster_headcrab:: MeleeMaxDistance(void)
|
||||
{
|
||||
return HC_IDLE1;
|
||||
return 256;
|
||||
}
|
||||
|
||||
int
|
||||
monster_headcrab::AnimWalk(void)
|
||||
{
|
||||
return HC_WALK;
|
||||
}
|
||||
|
||||
int
|
||||
monster_headcrab::AnimRun(void)
|
||||
{
|
||||
return HC_RUN;
|
||||
}
|
||||
|
||||
int
|
||||
monster_headcrab::AttackRanged(void)
|
||||
monster_headcrab::AttackMelee(void)
|
||||
{
|
||||
/* visual */
|
||||
if (random() < 0.5)
|
||||
|
@ -91,28 +78,33 @@ monster_headcrab::AttackRanged(void)
|
|||
else
|
||||
AnimPlay(HC_JUMP_VARIATION1);
|
||||
|
||||
m_flAttackThink = m_flAnimTime;
|
||||
m_flAttackThink = m_flAnimTime + 0.25;
|
||||
Sound_Play(this, CHAN_VOICE, "monster_headcrab.attack");
|
||||
|
||||
/* functional */
|
||||
vector jumpVelocity;
|
||||
makevectors(vectoangles(m_eEnemy.origin - origin));
|
||||
velocity = v_forward * 512 + [0,0,250];
|
||||
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, 500, 0, 0);
|
||||
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::Pain(void)
|
||||
monster_headcrab::HasBeenHit(void)
|
||||
{
|
||||
super::Pain();
|
||||
|
||||
if (m_flAnimTime > time) {
|
||||
return;
|
||||
}
|
||||
|
@ -127,16 +119,10 @@ monster_headcrab::Pain(void)
|
|||
}
|
||||
|
||||
void
|
||||
monster_headcrab::Death(void)
|
||||
monster_headcrab::HasBeenKilled(void)
|
||||
{
|
||||
/* if we're already dead (corpse) don't change animations */
|
||||
if (IsAlive() == true) {
|
||||
SetFrame(HC_DIE);
|
||||
Sound_Play(this, CHAN_VOICE, "monster_headcrab.die");
|
||||
}
|
||||
|
||||
/* set the functional differences */
|
||||
super::Death();
|
||||
SetFrame(HC_DIE);
|
||||
Sound_Play(this, CHAN_VOICE, "monster_headcrab.die");
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -152,7 +138,7 @@ monster_headcrab::IdleNoise(void)
|
|||
}
|
||||
m_flIdleTime = time + random(2,10);
|
||||
|
||||
Sound_Play(this, CHAN_VOICE, "monster_headcrab.idle");
|
||||
StartSoundDef("monster_headcrab.idle", CHAN_VOICE, true);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -59,7 +59,7 @@ enum
|
|||
HE_JUMPWINDOW
|
||||
};
|
||||
|
||||
class monster_houndeye:NSMonster
|
||||
class monster_houndeye:HLXenMonster
|
||||
{
|
||||
float m_flIdleTime;
|
||||
|
||||
|
|
|
@ -1,334 +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_grunt (0 0.8 0.8) (-16 -16 0) (16 16 72)
|
||||
|
||||
HALF-LIFE (1998) ENTITY
|
||||
|
||||
HECU - Human Grunt
|
||||
|
||||
*/
|
||||
|
||||
enum
|
||||
{
|
||||
GR_WALK,
|
||||
GR_RUN,
|
||||
GR_VICTORYDANCE,
|
||||
GR_COWER,
|
||||
GR_FLINCH,
|
||||
GR_LEFTLEGFLINCH,
|
||||
GR_RIGHTLEGFLINCH,
|
||||
GR_RIGHTARMFLINCH,
|
||||
GR_LEFTARMFLINCH,
|
||||
GR_LAUNCHNADE,
|
||||
GR_THROWNADE,
|
||||
GR_IDLE,
|
||||
GR_IDLE2,
|
||||
GR_COMBATIDLE,
|
||||
GR_FRONTKICK,
|
||||
GR_CROUCHIDLE,
|
||||
GR_CROUCHWAIT,
|
||||
GR_CROUCHSHOOTMP5,
|
||||
GR_STANDSHOOTMP5,
|
||||
GR_RELOADMP5,
|
||||
GR_CROUCHSHOOTSG,
|
||||
GR_STANDSHOOTSG,
|
||||
GR_RELOADSG,
|
||||
GR_SIGNALADV,
|
||||
GR_SIGNALFLANK,
|
||||
GR_SIGNALRETREAT,
|
||||
GR_DROPNADE,
|
||||
GR_LIMPWALK,
|
||||
GR_LIMPRUN,
|
||||
GR_TURNLEFT,
|
||||
GR_TURNRIGHT,
|
||||
GR_STRAFELEFT,
|
||||
GR_STRAFERIGHT,
|
||||
GR_DIEBACK,
|
||||
GR_DIEFORWARD,
|
||||
GR_DIE,
|
||||
GR_DIEBACK2,
|
||||
GR_DIEHS,
|
||||
GR_DIEGUT,
|
||||
GR_BARNACLE1,
|
||||
GR_BARNACLE2,
|
||||
GR_BARNACLE3,
|
||||
GR_BARNACLE4,
|
||||
GR_DEADSTOMACH,
|
||||
GR_DEADSTOMACH2,
|
||||
GR_DEADSIDE,
|
||||
GR_DEADSITTING,
|
||||
GR_REPELJUMP,
|
||||
GR_REPEL,
|
||||
GR_REPELSHOOT,
|
||||
GR_REPELLAND,
|
||||
GR_REPELDIE,
|
||||
GR_DRAGHOLEIDLE,
|
||||
GR_DRAGHOLE,
|
||||
GR_BUSTWALL,
|
||||
GR_HOPRAIL,
|
||||
GR_CONVERSE1,
|
||||
GR_CONVERSE2,
|
||||
GR_STARTLELEFT,
|
||||
GR_STRRTLERIGHT,
|
||||
GR_DIVE,
|
||||
GR_DEFUSE,
|
||||
GR_CORNER1,
|
||||
GR_CORNER2,
|
||||
GR_STONETOSS,
|
||||
GR_CLIFFDIE,
|
||||
GR_DIVESIDEIDLE,
|
||||
GR_DIVESIDE,
|
||||
GR_DIVEKNEELIDLE,
|
||||
GR_DIVEKNEEL,
|
||||
GR_WMBUTTON,
|
||||
GR_WM,
|
||||
GR_WMJUMP,
|
||||
GR_BUSTWINDOW,
|
||||
GR_DRAGLEFT,
|
||||
GR_DRAGRIGHT,
|
||||
GR_TRACKWAVE,
|
||||
GR_TRACKDIVE,
|
||||
GR_FLYBACK,
|
||||
GR_IMPALED,
|
||||
GR_JUMPTRACKS,
|
||||
GR_THROWPIPE,
|
||||
GR_PLUNGER
|
||||
};
|
||||
|
||||
class monster_human_grunt:NSTalkMonster
|
||||
{
|
||||
float m_flIdleTime;
|
||||
int m_iMP5Burst;
|
||||
float m_flAlertNoiseTime;
|
||||
|
||||
void monster_human_grunt(void);
|
||||
|
||||
virtual void Scream(void);
|
||||
virtual void IdleChat(void);
|
||||
virtual void Respawn(void);
|
||||
virtual void Spawned(void);
|
||||
virtual void Pain(void);
|
||||
virtual void Death(void);
|
||||
|
||||
virtual int AnimIdle(void);
|
||||
virtual int AnimWalk(void);
|
||||
virtual int AnimRun(void);
|
||||
|
||||
virtual int AttackRanged(void);
|
||||
virtual int AttackMelee(void);
|
||||
virtual void AttackKick(void);
|
||||
|
||||
virtual void AlertNoise(void);
|
||||
|
||||
};
|
||||
|
||||
int
|
||||
monster_human_grunt::AnimIdle(void)
|
||||
{
|
||||
return GR_IDLE;
|
||||
}
|
||||
|
||||
int
|
||||
monster_human_grunt::AnimWalk(void)
|
||||
{
|
||||
return GR_WALK;
|
||||
}
|
||||
|
||||
int
|
||||
monster_human_grunt::AnimRun(void)
|
||||
{
|
||||
return GR_RUN;
|
||||
}
|
||||
|
||||
void
|
||||
monster_human_grunt::AlertNoise(void)
|
||||
{
|
||||
if (m_flAlertNoiseTime > time)
|
||||
return;
|
||||
Sentence("!HG_CHECK");
|
||||
m_flAlertNoiseTime = time + 15.0f;
|
||||
}
|
||||
|
||||
int
|
||||
monster_human_grunt::AttackMelee(void)
|
||||
{
|
||||
/* visual */
|
||||
AnimPlay(GR_FRONTKICK);
|
||||
|
||||
m_flAttackThink = m_flAnimTime;
|
||||
Sound_Play(this, CHAN_VOICE, "monster_zombie.attack");
|
||||
|
||||
/* functional */
|
||||
think = AttackKick;
|
||||
nextthink = time + 0.25f;
|
||||
return (1);
|
||||
}
|
||||
|
||||
void
|
||||
monster_human_grunt::AttackKick(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_human_grunt::AttackRanged(void)
|
||||
{
|
||||
/* visual */
|
||||
AnimPlay(GR_STANDSHOOTMP5);
|
||||
Sound_Play(this, CHAN_WEAPON, "weapon_mp5.shoot");
|
||||
|
||||
if (m_iMP5Burst >= 2) {
|
||||
m_iMP5Burst = 0;
|
||||
m_flAttackThink = time + 0.4f;
|
||||
} else {
|
||||
m_iMP5Burst++;
|
||||
m_flAttackThink = time + 0.1f;
|
||||
}
|
||||
|
||||
/* functional */
|
||||
TraceAttack_FireBullets(1, origin + [0,0,16], 8, [0.01,0.01], 2);
|
||||
return (1);
|
||||
}
|
||||
|
||||
void monster_human_grunt::Scream(void)
|
||||
{
|
||||
if (m_flIdleTime > time) {
|
||||
return;
|
||||
}
|
||||
|
||||
Sentence(m_talkAllyShot);
|
||||
m_flIdleTime = time + 5.0f;
|
||||
}
|
||||
|
||||
void monster_human_grunt::IdleChat(void)
|
||||
{
|
||||
if (m_flIdleTime > time) {
|
||||
return;
|
||||
}
|
||||
|
||||
Sentence(m_talkIdle);
|
||||
|
||||
/* Sentence(m_talkPlayerIdle); */
|
||||
/* come up with logic to make them repsone to questions
|
||||
* Sentence(m_talkAsk);
|
||||
* Sentence(m_talkAnswer);
|
||||
*/
|
||||
m_flIdleTime = time + 5.0f + random(0,20);
|
||||
}
|
||||
|
||||
void
|
||||
monster_human_grunt::Pain(void)
|
||||
{
|
||||
super::Pain();
|
||||
|
||||
if (m_flAnimTime > time) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (random() < 0.25f) {
|
||||
return;
|
||||
}
|
||||
|
||||
Sound_Play(this, CHAN_VOICE, "monster_human_grunt.pain");
|
||||
SetFrame(GR_FLINCH);
|
||||
m_flAnimTime = time + 0.25f;
|
||||
}
|
||||
|
||||
void
|
||||
monster_human_grunt::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(GR_DIEHS);
|
||||
} else {
|
||||
SetFrame(GR_DIEBACK);
|
||||
}
|
||||
} else {
|
||||
SetFrame(GR_DIE);
|
||||
}
|
||||
}
|
||||
|
||||
Sound_Play(this, CHAN_VOICE, "monster_human_grunt.die");
|
||||
|
||||
/* set the functional differences */
|
||||
super::Death();
|
||||
}
|
||||
|
||||
void
|
||||
monster_human_grunt::Respawn(void)
|
||||
{
|
||||
super::Respawn();
|
||||
SetFrame(GR_IDLE);
|
||||
}
|
||||
|
||||
void
|
||||
monster_human_grunt::Spawned(void)
|
||||
{
|
||||
/* Adding some into other slots in hopes it feels right
|
||||
* listed below are other setences that might need their own:
|
||||
* !HG_MONST - Monster HG_ALERT
|
||||
* !HG_GREN - Grenade toss
|
||||
* !HG_CHECK - Sector check question
|
||||
* !HG_CLEAR - Sector clear response */
|
||||
|
||||
m_talkAnswer = "!HG_ANSWER";
|
||||
m_talkAsk = "!HG_QUEST";
|
||||
m_talkAllyShot = "!HG_COVER";
|
||||
m_talkGreet = "";
|
||||
m_talkIdle = "!HG_IDLE";
|
||||
m_talkSmelling = "";
|
||||
m_talkStare = "";
|
||||
m_talkSurvived = "!HG_CLEAR";
|
||||
m_talkWounded = "!HG_CHECK";
|
||||
|
||||
m_talkPlayerAsk = "";
|
||||
m_talkPlayerGreet = "!HG_ALERT";
|
||||
m_talkPlayerIdle = "!HG_CHARGE";
|
||||
m_talkPlayerWounded1 = "";
|
||||
m_talkPlayerWounded2 = "";
|
||||
m_talkPlayerWounded3 = "";
|
||||
m_talkUnfollow = "";
|
||||
m_talkFollow = "";
|
||||
m_talkStopFollow = "";
|
||||
|
||||
netname = "Grunt";
|
||||
model = "models/hgrunt.mdl";
|
||||
base_health = Skill_GetValue("hgrunt_health", 50);
|
||||
base_mins = [-16,-16,0];
|
||||
base_maxs = [16,16,72];
|
||||
m_iAlliance = MAL_ENEMY;
|
||||
super::Spawned();
|
||||
|
||||
Sound_Precache("monster_human_grunt.die");
|
||||
Sound_Precache("monster_human_grunt.pain");
|
||||
}
|
||||
|
||||
void monster_human_grunt::monster_human_grunt(void)
|
||||
{
|
||||
}
|
|
@ -47,7 +47,7 @@ enum
|
|||
NIL_SHOOT
|
||||
};
|
||||
|
||||
class monster_nihilanth:NSMonster
|
||||
class monster_nihilanth:HLXenMonster
|
||||
{
|
||||
float m_flIdleTime;
|
||||
|
||||
|
|
|
@ -80,7 +80,7 @@ enum
|
|||
TE_GRAB
|
||||
};
|
||||
|
||||
class monster_tentacle:NSMonster
|
||||
class monster_tentacle:HLXenMonster
|
||||
{
|
||||
float m_flIdleTime;
|
||||
|
||||
|
|
|
@ -1,252 +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_zombie (0 0.8 0.8) (-16 -16 0) (16 16 72)
|
||||
|
||||
HALF-LIFE (1998) ENTITY
|
||||
|
||||
Zombie
|
||||
|
||||
*/
|
||||
|
||||
enum
|
||||
{
|
||||
ZO_IDLE,
|
||||
ZO_TURNLEFT,
|
||||
ZO_TURNRIGHT,
|
||||
ZO_FLINCHSM,
|
||||
ZO_FLINCH,
|
||||
ZO_FLINCHBIG,
|
||||
ZO_RISE,
|
||||
ZO_FALLING,
|
||||
ZO_ATTACK1,
|
||||
ZO_ATTACK2,
|
||||
ZO_WALK,
|
||||
ZO_FLINCHLA,
|
||||
ZO_FLINCHRA,
|
||||
ZO_FLINCHLEFT,
|
||||
ZO_FLINCHRIGHT,
|
||||
ZO_DIEHS,
|
||||
ZO_DIEHS2,
|
||||
ZO_DIE,
|
||||
ZO_DIE2,
|
||||
ZO_DIE3,
|
||||
ZO_PAUSE,
|
||||
ZO_WALLBUST,
|
||||
ZO_WALLKICK,
|
||||
ZO_WINDOWBUST,
|
||||
ZO_SODA,
|
||||
ZO_SLIDEIDLE,
|
||||
ZO_SLIDE,
|
||||
ZO_VENTIDLE,
|
||||
ZO_VENT,
|
||||
ZO_DEADIDLE,
|
||||
ZO_DEAD,
|
||||
ZO_FREAKDIE,
|
||||
ZO_FREAK,
|
||||
ZO_EATTABLE,
|
||||
ZO_EAT,
|
||||
ZO_EATSTAND,
|
||||
ZO_DOORIP,
|
||||
ZO_PULLSCI,
|
||||
ZO_EAT2,
|
||||
ZO_EAT2STAND,
|
||||
ZO_VENT2IDLE,
|
||||
ZO_VENT2,
|
||||
ZO_HAUL,
|
||||
ZO_RISESNACK
|
||||
};
|
||||
|
||||
class monster_zombie:NSMonster
|
||||
{
|
||||
float m_flIdleTime;
|
||||
|
||||
void(void) monster_zombie;
|
||||
|
||||
virtual void(void) Spawned;
|
||||
virtual void(void) Pain;
|
||||
virtual void(void) Death;
|
||||
virtual void(void) IdleNoise;
|
||||
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 float GetWalkSpeed(void);
|
||||
virtual float GetChaseSpeed(void);
|
||||
virtual float GetRunSpeed(void);
|
||||
};
|
||||
|
||||
float
|
||||
monster_zombie::GetWalkSpeed(void)
|
||||
{
|
||||
return 64;
|
||||
}
|
||||
|
||||
float
|
||||
monster_zombie::GetChaseSpeed(void)
|
||||
{
|
||||
return 64;
|
||||
}
|
||||
|
||||
|
||||
float
|
||||
monster_zombie::GetRunSpeed(void)
|
||||
{
|
||||
return 64;
|
||||
}
|
||||
|
||||
int
|
||||
monster_zombie::AnimIdle(void)
|
||||
{
|
||||
return ZO_IDLE;
|
||||
}
|
||||
|
||||
int
|
||||
monster_zombie::AnimWalk(void)
|
||||
{
|
||||
return ZO_WALK;
|
||||
}
|
||||
|
||||
int
|
||||
monster_zombie::AnimRun(void)
|
||||
{
|
||||
return ZO_WALK;
|
||||
}
|
||||
|
||||
int
|
||||
monster_zombie::AttackMelee(void)
|
||||
{
|
||||
/* visual */
|
||||
if (random() < 0.5)
|
||||
AnimPlay(ZO_ATTACK1);
|
||||
else
|
||||
AnimPlay(ZO_ATTACK2);
|
||||
|
||||
m_flAttackThink = m_flAnimTime;
|
||||
Sound_Play(this, CHAN_VOICE, "monster_zombie.attack");
|
||||
|
||||
/* functional */
|
||||
think = AttackFlail;
|
||||
nextthink = time + 0.25f;
|
||||
return (1);
|
||||
}
|
||||
|
||||
void
|
||||
monster_zombie::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");
|
||||
}
|
||||
|
||||
void
|
||||
monster_zombie::Pain(void)
|
||||
{
|
||||
super::Pain();
|
||||
|
||||
if (m_flAnimTime > time) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (random() < 0.25f) {
|
||||
return;
|
||||
}
|
||||
|
||||
Sound_Play(this, CHAN_VOICE, "monster_zombie.pain");
|
||||
SetFrame(ZO_FLINCH + floor(random(0, 2)));
|
||||
m_flAnimTime = time + 0.25f;
|
||||
}
|
||||
|
||||
void
|
||||
monster_zombie::Death(void)
|
||||
{
|
||||
/* if we're already dead (corpse) don't change animations */
|
||||
if (IsAlive() == true) {
|
||||
/* headshots == different animation */
|
||||
if (g_dmg_iHitBody == BODY_HEAD) {
|
||||
if (random() < 0.5) {
|
||||
SetFrame(ZO_DIEHS);
|
||||
} else {
|
||||
SetFrame(ZO_DIEHS2);
|
||||
}
|
||||
} else {
|
||||
SetFrame(ZO_DIE + floor(random(0, 3)));
|
||||
}
|
||||
|
||||
Sound_Play(this, CHAN_VOICE, "monster_zombie.pain");
|
||||
}
|
||||
|
||||
/* set the functional differences */
|
||||
super::Death();
|
||||
}
|
||||
|
||||
void
|
||||
monster_zombie::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_zombie.idle");
|
||||
}
|
||||
|
||||
void
|
||||
monster_zombie::Respawn(void)
|
||||
{
|
||||
super::Respawn();
|
||||
SetFrame(ZO_IDLE);
|
||||
}
|
||||
|
||||
void
|
||||
monster_zombie::Spawned(void)
|
||||
{
|
||||
Sound_Precache("monster_zombie.alert");
|
||||
Sound_Precache("monster_zombie.attack");
|
||||
Sound_Precache("monster_zombie.attackhit");
|
||||
Sound_Precache("monster_zombie.attackmiss");
|
||||
Sound_Precache("monster_zombie.idle");
|
||||
Sound_Precache("monster_zombie.pain");
|
||||
netname = "Zombie";
|
||||
model = "models/zombie.mdl";
|
||||
base_health = Skill_GetValue("zombie_health", 50);
|
||||
base_mins = [-16,-16,0];
|
||||
base_maxs = [16,16,72];
|
||||
m_iAlliance = MAL_ALIEN;
|
||||
|
||||
super::Spawned();
|
||||
}
|
||||
|
||||
void
|
||||
monster_zombie::monster_zombie(void)
|
||||
{
|
||||
}
|
|
@ -19,41 +19,6 @@ defs.h
|
|||
|
||||
../shared/include.src
|
||||
|
||||
monster_apache.qc
|
||||
monster_alien_controller.qc
|
||||
monster_alien_grunt.qc
|
||||
monster_alien_slave.qc
|
||||
monster_barnacle.qc
|
||||
monster_barney.qc
|
||||
monster_barney_dead.qc
|
||||
monster_bigmomma.qc
|
||||
monster_bloater.qc
|
||||
monster_bullchicken.qc
|
||||
monster_cockroach.qc
|
||||
monster_flyer_flock.qc
|
||||
monster_gargantua.qc
|
||||
monster_gman.qc
|
||||
monster_headcrab.qc
|
||||
monster_babycrab.qc
|
||||
monster_hevsuit_dead.qc
|
||||
monster_houndeye.qc
|
||||
monster_human_grunt.qc
|
||||
monster_hgrunt_dead.qc
|
||||
monster_human_assassin.qc
|
||||
monster_ichthyosaur.qc
|
||||
monster_leech.qc
|
||||
monster_miniturret.qc
|
||||
monster_nihilanth.qc
|
||||
monster_osprey.qc
|
||||
monster_rat.qc
|
||||
monster_scientist_dead.qc
|
||||
monster_sitting_scientist.qc
|
||||
monster_scientist.qc
|
||||
monster_sentry.qc
|
||||
monster_tentacle.qc
|
||||
monster_turret.qc
|
||||
monster_zombie.qc
|
||||
|
||||
player.qc
|
||||
items.qc
|
||||
item_longjump.qc
|
||||
|
|
|
@ -16,5 +16,6 @@
|
|||
|
||||
enum
|
||||
{
|
||||
EV_GAUSSBEAM = EV_SEPARATOR
|
||||
EV_GAUSSBEAM = EV_SEPARATOR,
|
||||
EV_GIBALIEN
|
||||
};
|
||||
|
|
|
@ -57,6 +57,20 @@ FX_Blood(vector pos, vector color)
|
|||
self.think = NSEntity::Destroy;
|
||||
self.nextthink = time + 5.0f;
|
||||
}
|
||||
static void ABlood_Touch(void)
|
||||
{
|
||||
if (self.think != NSEntity::Destroy) {
|
||||
if (serverkeyfloat("*bspversion") == BSPVER_HL)
|
||||
Decals_Place(self.origin, sprintf("{yblood%d", floor(random(1,9))));
|
||||
else {
|
||||
decal_pickwall(self, self.origin);
|
||||
pointparticles(DECAL_BLOOD, g_tracedDecal.endpos, g_tracedDecal.normal, 1);
|
||||
}
|
||||
}
|
||||
|
||||
self.think = NSEntity::Destroy;
|
||||
self.nextthink = time + 5.0f;
|
||||
}
|
||||
|
||||
if (cvar("violence_hblood") <= 0) {
|
||||
return;
|
||||
|
@ -89,7 +103,10 @@ FX_Blood(vector pos, vector color)
|
|||
ePart.SetSolid(SOLID_BBOX);
|
||||
ePart.SetSize([0,0,0], [0,0,0]);
|
||||
|
||||
ePart.touch = Blood_Touch;
|
||||
if (color[1] != 0 && color[2] != 0)
|
||||
ePart.touch = ABlood_Touch;
|
||||
else
|
||||
ePart.touch = Blood_Touch;
|
||||
|
||||
/* ignore player physics */
|
||||
ePart.dimension_solid = 1;
|
||||
|
|
94
src/shared/fx_gibalien.qc
Normal file
94
src/shared/fx_gibalien.qc
Normal file
|
@ -0,0 +1,94 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#ifdef CLIENT
|
||||
string g_agibs[] = {
|
||||
"models/agibs.mdl",
|
||||
"models/agibs.mdl",
|
||||
"models/agibs.mdl",
|
||||
"models/agibs.mdl",
|
||||
"models/agibs.mdl"
|
||||
};
|
||||
|
||||
void
|
||||
FX_GibAlien_Init(void)
|
||||
{
|
||||
for (int i = 0; i < g_agibs.length; i++)
|
||||
precache_model(g_agibs[i]);
|
||||
|
||||
precache_sound("common/bodysplat.wav");
|
||||
}
|
||||
#endif
|
||||
|
||||
void
|
||||
FX_GibAlien(vector vecOrigin, vector vecDir, float flForce)
|
||||
{
|
||||
#ifdef SERVER
|
||||
WriteByte(MSG_MULTICAST, SVC_CGAMEPACKET);
|
||||
WriteByte(MSG_MULTICAST, EV_GIBALIEN);
|
||||
WriteCoord(MSG_MULTICAST, vecOrigin[0]);
|
||||
WriteCoord(MSG_MULTICAST, vecOrigin[1]);
|
||||
WriteCoord(MSG_MULTICAST, vecOrigin[2]);
|
||||
WriteCoord(MSG_MULTICAST, vecDir[0]);
|
||||
WriteCoord(MSG_MULTICAST, vecDir[1]);
|
||||
WriteCoord(MSG_MULTICAST, vecDir[2]);
|
||||
WriteFloat(MSG_MULTICAST, flForce);
|
||||
msg_entity = __NULL__;
|
||||
multicast(vecOrigin, MULTICAST_PVS);
|
||||
#else
|
||||
static void Gib_Remove(void) {
|
||||
remove(self);
|
||||
}
|
||||
static void Gib_Touch(void)
|
||||
{
|
||||
if (serverkeyfloat("*bspversion") == BSPVER_HL)
|
||||
Decals_Place(self.origin, sprintf("{yblood%d", floor(random(1,7))));
|
||||
else {
|
||||
decal_pickwall(self, self.origin);
|
||||
pointparticles(DECAL_BLOOD, g_tracedDecal.endpos, g_tracedDecal.normal, 1);
|
||||
}
|
||||
}
|
||||
|
||||
if (cvar("violence_agibs") <= 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
makevectors(vecDir);
|
||||
vecDir = v_forward;
|
||||
|
||||
for (int i = 0; i < 5; i++) {
|
||||
vector vel = vecDir;
|
||||
vel += random(-1,1) * v_right;
|
||||
vel += random(-1,1) * v_up;
|
||||
vel *= flForce;
|
||||
vel += [0,0,80];
|
||||
|
||||
entity gibb = spawn();
|
||||
setmodel(gibb, g_agibs[i]);
|
||||
setorigin(gibb, vecOrigin);
|
||||
gibb.movetype = MOVETYPE_BOUNCE;
|
||||
gibb.solid = SOLID_BBOX;
|
||||
setsize(gibb, [0,0,0], [0,0,0]);
|
||||
gibb.velocity = vel;
|
||||
gibb.avelocity = vectoangles(gibb.velocity);
|
||||
gibb.think = Gib_Remove;
|
||||
gibb.touch = Gib_Touch;
|
||||
gibb.nextthink = time + 5.0f;
|
||||
gibb.drawmask = MASK_ENGINE;
|
||||
}
|
||||
pointsound(vecOrigin, "common/bodysplat.wav", 1, ATTN_NORM);
|
||||
#endif
|
||||
}
|
|
@ -26,11 +26,9 @@ string g_hgibs[] = {
|
|||
void
|
||||
FX_GibHuman_Init(void)
|
||||
{
|
||||
precache_model("models/gib_b_bone.mdl");
|
||||
precache_model("models/gib_legbone.mdl");
|
||||
precache_model("models/gib_lung.mdl");
|
||||
precache_model("models/gib_skull.mdl");
|
||||
precache_model("models/gib_b_gib.mdl");
|
||||
for (int i = 0; i < g_hgibs.length; i++)
|
||||
precache_model(g_hgibs[i]);
|
||||
|
||||
precache_sound("common/bodysplat.wav");
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -12,6 +12,7 @@ fx_blood.qc
|
|||
fx_gaussbeam.qc
|
||||
fx_breakmodel.qc
|
||||
fx_explosion.qc
|
||||
fx_gibalien.qc
|
||||
fx_gibhuman.qc
|
||||
fx_spark.qc
|
||||
fx_corpse.qc
|
||||
|
|
|
@ -120,8 +120,9 @@ void w_rpg_primary(player pl)
|
|||
static void Rocket_BuildSpeed(void){
|
||||
/* Calculate new direction */
|
||||
if (self.weapon) {
|
||||
vector ownerTarget = self.owner.origin + self.owner.view_ofs;
|
||||
makevectors(self.owner.v_angle);
|
||||
traceline(self.owner.origin, self.owner.origin + v_forward * 8096, FALSE, self.owner);
|
||||
traceline(ownerTarget, ownerTarget + v_forward * 8096, FALSE, self.owner);
|
||||
self.angles = vectoangles(trace_endpos - self.origin);
|
||||
}
|
||||
|
||||
|
|
5
zpak001.pk3dir/def/monsters.def
Normal file
5
zpak001.pk3dir/def/monsters.def
Normal file
|
@ -0,0 +1,5 @@
|
|||
include "monsters/monster_barney.def"
|
||||
include "monsters/monster_human_grunt.def"
|
||||
include "monsters/monster_zombie.def"
|
||||
include "monsters/monster_scientist.def"
|
||||
include "monsters/monster_alien_grunt.def"
|
77
zpak001.pk3dir/def/monsters/monster_alien_grunt.def
Normal file
77
zpak001.pk3dir/def/monsters/monster_alien_grunt.def
Normal file
|
@ -0,0 +1,77 @@
|
|||
entityDef monster_alien_grunt
|
||||
{
|
||||
"spawnclass" "NSMonster"
|
||||
"model" "models/agrunt.mdl"
|
||||
"netname" "Zombie"
|
||||
"health" "skill:zombie_health"
|
||||
"mins" "-16 -16 0"
|
||||
"maxs" "16 16 72"
|
||||
"eye_height" "64"
|
||||
"team" "2"
|
||||
"propdata" "actor_alien"
|
||||
"speed_walk" "46"
|
||||
"speed_run" "292"
|
||||
|
||||
"def_attack_melee" "melee_agrunt_punch"
|
||||
"attack_melee_range" "96"
|
||||
"attack_ranged_range" "512"
|
||||
|
||||
"snd_idle" "monster_alien_grunt.idle"
|
||||
"snd_pain" "monster_alien_grunt.pain"
|
||||
"snd_death" "monster_alien_grunt.pain"
|
||||
"snd_melee_attack" "monster_alien_grunt.attack"
|
||||
"snd_melee_attack_hit" "monster_zombie.attackhit"
|
||||
"snd_melee_attack_miss" "monster_zombie.attackmiss"
|
||||
"snd_thud" "monster_generic.thud"
|
||||
|
||||
// animation event callbacks
|
||||
events {
|
||||
1 "SpawnProjectileDef" "ranged_agrunt_shot"
|
||||
1 "StartSoundDef" "weapon_hornetgun.fire"
|
||||
|
||||
2 "SpawnProjectileDef" "ranged_agrunt_shot"
|
||||
2 "StartSoundDef" "weapon_hornetgun.fire"
|
||||
|
||||
3 "SpawnProjectileDef" "ranged_agrunt_shot"
|
||||
3 "StartSoundDef" "weapon_hornetgun.fire"
|
||||
|
||||
4 "SpawnProjectileDef" "ranged_agrunt_shot"
|
||||
4 "StartSoundDef" "weapon_hornetgun.fire"
|
||||
|
||||
5 "SpawnProjectileDef" "ranged_agrunt_shot"
|
||||
5 "StartSoundDef" "weapon_hornetgun.fire"
|
||||
|
||||
10 "StartSoundDef" "monster_alien_grunt.step_left"
|
||||
11 "StartSoundDef" "monster_alien_grunt.step_right"
|
||||
}
|
||||
}
|
||||
|
||||
entityDef melee_agrunt_punch
|
||||
{
|
||||
"damage" "skill:agrunt_dmg_punch"
|
||||
"delay" "0.25f"
|
||||
}
|
||||
|
||||
|
||||
entityDef ranged_agrunt_shot
|
||||
{
|
||||
"spawnclass" "NSProjectile"
|
||||
"model" "models/hornet.mdl"
|
||||
|
||||
"def_damage" "damage_hornetDirect"
|
||||
|
||||
"health" "0"
|
||||
"velocity" "300"
|
||||
"fuse" "10"
|
||||
"detonate_on_fuse" "0"
|
||||
"detonate_on_death" "0"
|
||||
"detonate_on_world" "0"
|
||||
"detonate_on_actor" "1"
|
||||
"impact_damage_effect" "1"
|
||||
"impact_gib" "0"
|
||||
}
|
||||
|
||||
entityDef damage_hornetDirect
|
||||
{
|
||||
damage "skill:hornet_dmg"
|
||||
}
|
58
zpak001.pk3dir/def/monsters/monster_barney.def
Normal file
58
zpak001.pk3dir/def/monsters/monster_barney.def
Normal file
|
@ -0,0 +1,58 @@
|
|||
entityDef monster_barney
|
||||
{
|
||||
"spawnclass" "NSTalkMonster"
|
||||
"model" "models/barney.mdl"
|
||||
"netname" "Barney"
|
||||
"health" "skill:barney_health"
|
||||
"mins" "-16 -16 0"
|
||||
"maxs" "16 16 72"
|
||||
"eye_height" "64"
|
||||
"team" "0"
|
||||
"propdata" "actor_human"
|
||||
|
||||
"def_attack_ranged" "ranged_barney_shot"
|
||||
"reload_count" "18"
|
||||
"follow_on_use" "1"
|
||||
"weapon_drawn" "0"
|
||||
"body_on_draw" "2"
|
||||
"speed_walk" "64"
|
||||
"speed_run" "364"
|
||||
|
||||
"snd_pain" "monster_barney.pain"
|
||||
"snd_death" "monster_barney.die"
|
||||
"snd_ranged_attack" "weapon_glock.fire"
|
||||
"snd_reload" "monster_human_grunt.reload"
|
||||
"snd_thud" "monster_generic.thud"
|
||||
|
||||
"talk_answer" "!BA_ANSWER"
|
||||
"talk_ask" "!BA_QUESTION"
|
||||
"talk_ally_shoot" "!BA_SHOOT"
|
||||
"talk_idle" "!BA_IDLE"
|
||||
"talk_hearing" "!BA_HEAR"
|
||||
"talk_smelling" "!BA_SMELL"
|
||||
"talk_stare" "!BA_STARE"
|
||||
"talk_survived" "!BA_WOUND"
|
||||
"talk_wounded" "!BA_WOUND"
|
||||
"talk_player_ask" "!BA_QUESTION"
|
||||
"talk_player_greet" "!BA_HELLO"
|
||||
"talk_player_idle" "!BA_IDLE"
|
||||
"talk_player_wounded1" "!BA_CUREA"
|
||||
"talk_player_wounded2" "!BA_CUREB"
|
||||
"talk_player_wounded3" "!BA_CUREC"
|
||||
"talk_unfollow" "!BA_WAIT"
|
||||
"talk_follow" "!BA_OK"
|
||||
"talk_stop_follow" "!BA_STOP"
|
||||
"talk_deny_follow" "!BA_POK"
|
||||
|
||||
// pre-disaster
|
||||
when "spawnflags" equals "256" {
|
||||
"follow_on_use" "0"
|
||||
}
|
||||
}
|
||||
|
||||
entityDef ranged_barney_shot
|
||||
{
|
||||
"damage" "skill:hgrunt_pellets"
|
||||
"delay" "0.5"
|
||||
}
|
||||
|
149
zpak001.pk3dir/def/monsters/monster_human_grunt.def
Normal file
149
zpak001.pk3dir/def/monsters/monster_human_grunt.def
Normal file
|
@ -0,0 +1,149 @@
|
|||
entityDef monster_human_grunt
|
||||
{
|
||||
"spawnclass" "NSSquadMonster"
|
||||
"model" "models/hgrunt.mdl"
|
||||
"netname" "Grunt"
|
||||
"health" "skill:hgrunt_health"
|
||||
"mins" "-16 -16 0"
|
||||
"maxs" "16 16 72"
|
||||
"eye_height" "64"
|
||||
"team" "1"
|
||||
"propdata" "actor_human"
|
||||
"speed_walk" "41"
|
||||
"speed_run" "304"
|
||||
|
||||
// melee attack
|
||||
"def_attack_melee" "melee_hgrunt_kick"
|
||||
"attack_melee_range" "96"
|
||||
"snd_melee_attack" "monster_human_grunt.kick"
|
||||
|
||||
// primary ranged attack
|
||||
"def_attack_ranged" "ranged_hgrunt_mp5"
|
||||
"snd_ranged_attack" "weapon_mp5.shoot"
|
||||
"attack_ranged_range" "1024"
|
||||
"reload_count" "30"
|
||||
|
||||
// special attack
|
||||
"def_attack_special_1" "projectile_hgrunt_grenade"
|
||||
"attack_special_range" "1024"
|
||||
"projectile_delay" "1.0"
|
||||
|
||||
"snd_idle" "monster_human_grunt.idle"
|
||||
"snd_pain" "monster_human_grunt.pain"
|
||||
"snd_death" "monster_human_grunt.die"
|
||||
"snd_reload" "monster_human_grunt.reload"
|
||||
"snd_thud" "monster_generic.thud"
|
||||
"weapons" "3"
|
||||
|
||||
"squad_leader_body" "2"
|
||||
|
||||
// grenade launcher
|
||||
when "weapons" contains 4 {
|
||||
"body" "4"
|
||||
"def_attack_special_1" "projectile_hgrunt_ARgrenade"
|
||||
skin 1
|
||||
}
|
||||
|
||||
// shotgun grunt
|
||||
when "weapons" contains 8 {
|
||||
"body" "35"
|
||||
"reload_count" "8"
|
||||
"snd_ranged_attack" "weapon_shotgun.single"
|
||||
"def_attack_ranged" "ranged_hgrunt_shot"
|
||||
}
|
||||
|
||||
when "spawnflags" contains 32 {
|
||||
"squad_leader" "1"
|
||||
}
|
||||
}
|
||||
|
||||
entityDef melee_hgrunt_kick
|
||||
{
|
||||
"damage" "skill:hgrunt_kick"
|
||||
"delay" "0.25"
|
||||
}
|
||||
|
||||
entityDef ranged_hgrunt_mp5
|
||||
{
|
||||
"damage" "skill:hgrunt_pellets"
|
||||
"burst" "3"
|
||||
"burst_delay" "0.5"
|
||||
"delay" "0.1"
|
||||
}
|
||||
|
||||
entityDef ranged_hgrunt_shot
|
||||
{
|
||||
"damage" "skill:hgrunt_pellets"
|
||||
"delay" "1.0"
|
||||
}
|
||||
|
||||
entityDef projectile_hgrunt_ARgrenade
|
||||
{
|
||||
"spawnclass" "NSProjectile"
|
||||
"model" "models/grenade.mdl"
|
||||
|
||||
"def_splash_damage" "damage_grenadeSplash"
|
||||
|
||||
"health" "0"
|
||||
"velocity" "800 0 400"
|
||||
"angular_velocity" "300 300 300"
|
||||
"fuse" "4"
|
||||
"bounce" "1"
|
||||
"detonate_on_fuse" "1"
|
||||
"detonate_on_death" "0"
|
||||
"detonate_on_world" "1"
|
||||
"detonate_on_actor" "1"
|
||||
"impact_damage_effect" "1"
|
||||
"impact_gib" "1"
|
||||
|
||||
"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_fadetime" "0.5"
|
||||
|
||||
"snd_explode" "weapon_handgrenade.explode"
|
||||
"snd_bounce" "weapon_handgrenade.bounce"
|
||||
}
|
||||
|
||||
entityDef projectile_hgrunt_grenade
|
||||
{
|
||||
"spawnclass" "NSProjectile"
|
||||
"model" "models/w_grenade.mdl"
|
||||
|
||||
"def_splash_damage" "damage_grenadeSplash"
|
||||
|
||||
"health" "0"
|
||||
"velocity" "600 0 200"
|
||||
"angular_velocity" "300 300 300"
|
||||
"fuse" "4"
|
||||
"bounce" "1"
|
||||
"detonate_on_fuse" "1"
|
||||
"detonate_on_death" "0"
|
||||
"detonate_on_world" "0"
|
||||
"detonate_on_actor" "0"
|
||||
"impact_damage_effect" "1"
|
||||
"impact_gib" "1"
|
||||
|
||||
"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_fadetime" "0.5"
|
||||
|
||||
"snd_explode" "weapon_handgrenade.explode"
|
||||
"snd_bounce" "weapon_handgrenade.bounce"
|
||||
}
|
||||
|
||||
entityDef damage_grenadeSplash
|
||||
{
|
||||
"damage" "150"
|
||||
"radius" "160"
|
||||
}
|
||||
|
70
zpak001.pk3dir/def/monsters/monster_scientist.def
Normal file
70
zpak001.pk3dir/def/monsters/monster_scientist.def
Normal file
|
@ -0,0 +1,70 @@
|
|||
entityDef monster_scientist
|
||||
{
|
||||
"spawnclass" "NSTalkMonster"
|
||||
"model" "models/scientist.mdl"
|
||||
"netname" "Scientist"
|
||||
"health" "skill:scientist_health"
|
||||
"mins" "-16 -16 0"
|
||||
"maxs" "16 16 72"
|
||||
"eye_height" "64"
|
||||
"team" "0"
|
||||
"propdata" "actor_human"
|
||||
|
||||
"follow_on_use" "1"
|
||||
"speed_walk" "64"
|
||||
"speed_run" "364"
|
||||
|
||||
"snd_pain" "monster_scientist.pain"
|
||||
"snd_death" "monster_scientist.die"
|
||||
"snd_thud" "monster_scientist.thud"
|
||||
|
||||
"talk_answer" "!SC_ANSWER"
|
||||
"talk_ask" "!SC_QUESTION"
|
||||
"talk_ally_shoot" "!SC_PLFEAR"
|
||||
"talk_idle" "!SC_IDLE"
|
||||
"talk_hearing" "!SC_HEAR"
|
||||
"talk_smelling" "!SC_SMELL"
|
||||
"talk_stare" "!SC_STARE"
|
||||
"talk_survived" "!SC_WOUND"
|
||||
"talk_wounded" "!SC_MORTAL"
|
||||
"talk_player_ask" "!SC_QUESTION"
|
||||
"talk_player_greet" "!SC_HELLO"
|
||||
"talk_player_idle" "!SC_PIDLE"
|
||||
"talk_player_wounded1" "!SC_CUREA"
|
||||
"talk_player_wounded2" "!SC_CUREB"
|
||||
"talk_player_wounded3" "!SC_CUREC"
|
||||
"talk_unfollow" "!SC_WAIT"
|
||||
"talk_follow" "!SC_OK"
|
||||
"talk_stop_follow" "!SC_STOP"
|
||||
"talk_deny_follow" "!SC_POK"
|
||||
|
||||
when "body" equals "1" {
|
||||
"pitch" "105"
|
||||
"netname" "Walter"
|
||||
}
|
||||
|
||||
when "body" equals "2" {
|
||||
"pitch" "100"
|
||||
"netname" "Einstein"
|
||||
}
|
||||
|
||||
when "body" equals "3" {
|
||||
"pitch" "95"
|
||||
"netname" "Luther"
|
||||
"skin" "1"
|
||||
}
|
||||
|
||||
when "body" equals "4" {
|
||||
"pitch" "105"
|
||||
"netname" "Slick"
|
||||
}
|
||||
|
||||
// pre-disaster
|
||||
when "spawnflags" equals "256" {
|
||||
"talk_ask" ""
|
||||
"talk_player_ask" "!SC_PQUEST"
|
||||
"talk_player_greet" "!SC_PHELLO"
|
||||
"talk_player_idle" "!SC_PIDLE"
|
||||
"follow_on_use" "0"
|
||||
}
|
||||
}
|
33
zpak001.pk3dir/def/monsters/monster_zombie.def
Normal file
33
zpak001.pk3dir/def/monsters/monster_zombie.def
Normal file
|
@ -0,0 +1,33 @@
|
|||
entityDef monster_zombie
|
||||
{
|
||||
"spawnclass" "NSMonster"
|
||||
"model" "models/zombie.mdl"
|
||||
"netname" "Zombie"
|
||||
"health" "skill:zombie_health"
|
||||
"mins" "-16 -16 0"
|
||||
"maxs" "16 16 72"
|
||||
"eye_height" "64"
|
||||
"team" "2"
|
||||
"propdata" "actor_alien"
|
||||
"speed_walk" "72"
|
||||
"speed_run" "72"
|
||||
|
||||
"def_attack_melee" "melee_zombie_stab"
|
||||
"melee_range" "96"
|
||||
|
||||
"snd_idle" "monster_zombie.idle"
|
||||
"snd_pain" "monster_zombie.pain"
|
||||
"snd_death" "monster_zombie.pain"
|
||||
"snd_melee_attack" "monster_zombie.attack"
|
||||
"snd_melee_attack_hit" "monster_zombie.attackhit"
|
||||
"snd_melee_attack_miss" "monster_zombie.attackmiss"
|
||||
"snd_thud" "monster_generic.thud"
|
||||
}
|
||||
|
||||
entityDef melee_zombie_stab
|
||||
{
|
||||
"damage" "skill:zombie_dmg_one_slash"
|
||||
"delay" "0.25f"
|
||||
"wait" "0.5"
|
||||
"attempts" "2"
|
||||
}
|
|
@ -1,19 +0,0 @@
|
|||
entityDef weapon_357
|
||||
{
|
||||
"editor_color" ".3 .3 1"
|
||||
"editor_mins" "-16 -16 -16"
|
||||
"editor_maxs" "16 16 16"
|
||||
"editor_usage" ".367 Revolver"
|
||||
"editor_rotatable" "1"
|
||||
|
||||
"spawnclass" "NSItem"
|
||||
"model" "models/w_357.mdl"
|
||||
"inv_item" "3"
|
||||
"snd_acquire" "weapon.pickup"
|
||||
"snd_respawn" "item.respawn"
|
||||
}
|
||||
|
||||
entityDef weapon_python
|
||||
{
|
||||
"spawnclass" "weapon_357"
|
||||
}
|
|
@ -1,19 +0,0 @@
|
|||
entityDef weapon_9mmAR
|
||||
{
|
||||
"editor_color" ".3 .3 1"
|
||||
"editor_mins" "-16 -16 -16"
|
||||
"editor_maxs" "16 16 16"
|
||||
"editor_usage" "9mm AR"
|
||||
"editor_rotatable" "1"
|
||||
|
||||
"spawnclass" "NSItem"
|
||||
"model" "models/w_9mmAR.mdl"
|
||||
"inv_item" "4"
|
||||
"snd_acquire" "weapon.pickup"
|
||||
"snd_respawn" "item.respawn"
|
||||
}
|
||||
|
||||
entityDef weapon_mp5
|
||||
{
|
||||
"spawnclass" "weapon_9mmAR"
|
||||
}
|
|
@ -1,19 +0,0 @@
|
|||
entityDef weapon_9mmhandgun
|
||||
{
|
||||
"editor_color" ".3 .3 1"
|
||||
"editor_mins" "-16 -16 -16"
|
||||
"editor_maxs" "16 16 16"
|
||||
"editor_usage" "9mm Handgun"
|
||||
"editor_rotatable" "1"
|
||||
|
||||
"spawnclass" "NSItem"
|
||||
"model" "models/w_9mmhandgun.mdl"
|
||||
"inv_item" "2"
|
||||
"snd_acquire" "weapon.pickup"
|
||||
"snd_respawn" "item.respawn"
|
||||
}
|
||||
|
||||
entityDef weapon_glock
|
||||
{
|
||||
"spawnclass" "weapon_9mmhandgun"
|
||||
}
|
|
@ -1,14 +0,0 @@
|
|||
entityDef weapon_crossbow
|
||||
{
|
||||
"editor_color" ".3 .3 1"
|
||||
"editor_mins" "-16 -16 -16"
|
||||
"editor_maxs" "16 16 16"
|
||||
"editor_usage" "Crossbow"
|
||||
"editor_rotatable" "1"
|
||||
|
||||
"spawnclass" "NSItem"
|
||||
"model" "models/w_crossbow.mdl"
|
||||
"inv_item" "6"
|
||||
"snd_acquire" "weapon.pickup"
|
||||
"snd_respawn" "item.respawn"
|
||||
}
|
|
@ -1,14 +0,0 @@
|
|||
entityDef weapon_crowbar
|
||||
{
|
||||
"editor_color" ".3 .3 1"
|
||||
"editor_mins" "-16 -16 -16"
|
||||
"editor_maxs" "16 16 16"
|
||||
"editor_usage" "Crowbar"
|
||||
"editor_rotatable" "1"
|
||||
|
||||
"spawnclass" "NSItem"
|
||||
"model" "models/w_crowbar.mdl"
|
||||
"inv_item" "1"
|
||||
"snd_acquire" "weapon.pickup"
|
||||
"snd_respawn" "item.respawn"
|
||||
}
|
|
@ -1,14 +0,0 @@
|
|||
entityDef weapon_egon
|
||||
{
|
||||
"editor_color" ".3 .3 1"
|
||||
"editor_mins" "-16 -16 -16"
|
||||
"editor_maxs" "16 16 16"
|
||||
"editor_usage" "Gluon Gun"
|
||||
"editor_rotatable" "1"
|
||||
|
||||
"spawnclass" "NSItem"
|
||||
"model" "models/w_egon.mdl"
|
||||
"inv_item" "9"
|
||||
"snd_acquire" "weapon.pickup"
|
||||
"snd_respawn" "item.respawn"
|
||||
}
|
|
@ -1,14 +0,0 @@
|
|||
entityDef weapon_gauss
|
||||
{
|
||||
"editor_color" ".3 .3 1"
|
||||
"editor_mins" "-16 -16 -16"
|
||||
"editor_maxs" "16 16 16"
|
||||
"editor_usage" "Tau Cannon"
|
||||
"editor_rotatable" "1"
|
||||
|
||||
"spawnclass" "NSItem"
|
||||
"model" "models/w_gauss.mdl"
|
||||
"inv_item" "8"
|
||||
"snd_acquire" "weapon.pickup"
|
||||
"snd_respawn" "item.respawn"
|
||||
}
|
|
@ -1,14 +0,0 @@
|
|||
entityDef weapon_handgrenade
|
||||
{
|
||||
"editor_color" ".3 .3 1"
|
||||
"editor_mins" "-16 -16 -16"
|
||||
"editor_maxs" "16 16 16"
|
||||
"editor_usage" "Hand Grenade"
|
||||
"editor_rotatable" "1"
|
||||
|
||||
"spawnclass" "NSItem"
|
||||
"model" "models/w_grenade.mdl"
|
||||
"inv_item" "11"
|
||||
"snd_acquire" "weapon.pickup"
|
||||
"snd_respawn" "item.respawn"
|
||||
}
|
|
@ -1,14 +0,0 @@
|
|||
entityDef weapon_hornetgun
|
||||
{
|
||||
"editor_color" ".3 .3 1"
|
||||
"editor_mins" "-16 -16 -16"
|
||||
"editor_maxs" "16 16 16"
|
||||
"editor_usage" "Hornet Gun"
|
||||
"editor_rotatable" "1"
|
||||
|
||||
"spawnclass" "NSItem"
|
||||
"model" "models/w_hgun.mdl"
|
||||
"inv_item" "10"
|
||||
"snd_acquire" "weapon.pickup"
|
||||
"snd_respawn" "item.respawn"
|
||||
}
|
|
@ -1,14 +0,0 @@
|
|||
entityDef weapon_rpg
|
||||
{
|
||||
"editor_color" ".3 .3 1"
|
||||
"editor_mins" "-16 -16 -16"
|
||||
"editor_maxs" "16 16 16"
|
||||
"editor_usage" "Rocket Launcher"
|
||||
"editor_rotatable" "1"
|
||||
|
||||
"spawnclass" "NSItem"
|
||||
"model" "models/w_rpg.mdl"
|
||||
"inv_item" "7"
|
||||
"snd_acquire" "weapon.pickup"
|
||||
"snd_respawn" "item.respawn"
|
||||
}
|
|
@ -1,14 +0,0 @@
|
|||
entityDef weapon_satchel
|
||||
{
|
||||
"editor_color" ".3 .3 1"
|
||||
"editor_mins" "-16 -16 -16"
|
||||
"editor_maxs" "16 16 16"
|
||||
"editor_usage" "Satchel"
|
||||
"editor_rotatable" "1"
|
||||
|
||||
"spawnclass" "NSItem"
|
||||
"model" "models/w_satchel.mdl"
|
||||
"inv_item" "12"
|
||||
"snd_acquire" "weapon.pickup"
|
||||
"snd_respawn" "item.respawn"
|
||||
}
|
|
@ -1,14 +0,0 @@
|
|||
entityDef weapon_shotgun
|
||||
{
|
||||
"editor_color" ".3 .3 1"
|
||||
"editor_mins" "-16 -16 -16"
|
||||
"editor_maxs" "16 16 16"
|
||||
"editor_usage" "Shotgun"
|
||||
"editor_rotatable" "1"
|
||||
|
||||
"spawnclass" "NSItem"
|
||||
"model" "models/w_shotgun.mdl"
|
||||
"inv_item" "5"
|
||||
"snd_acquire" "weapon.pickup"
|
||||
"snd_respawn" "item.respawn"
|
||||
}
|
|
@ -1,15 +0,0 @@
|
|||
entityDef weapon_snark
|
||||
{
|
||||
"editor_color" ".3 .3 1"
|
||||
"editor_mins" "-16 -16 -16"
|
||||
"editor_maxs" "16 16 16"
|
||||
"editor_usage" "Snark"
|
||||
"editor_rotatable" "1"
|
||||
|
||||
"spawnclass" "NSItem"
|
||||
"model" "models/w_sqknest.mdl"
|
||||
"frame" "1"
|
||||
"inv_item" "14"
|
||||
"snd_acquire" "weapon.pickup"
|
||||
"snd_respawn" "item.respawn"
|
||||
}
|
|
@ -1,16 +0,0 @@
|
|||
entityDef weapon_tripmine
|
||||
{
|
||||
"editor_color" ".3 .3 1"
|
||||
"editor_mins" "-16 -16 -16"
|
||||
"editor_maxs" "16 16 16"
|
||||
"editor_usage" "Tripmine"
|
||||
"editor_rotatable" "1"
|
||||
|
||||
"spawnclass" "NSItem"
|
||||
"model" "models/v_tripmine.mdl"
|
||||
"body" "2"
|
||||
"frame" "8"
|
||||
"inv_item" "13"
|
||||
"snd_acquire" "weapon.pickup"
|
||||
"snd_respawn" "item.respawn"
|
||||
}
|
227
zpak001.pk3dir/def/weapons.def
Normal file
227
zpak001.pk3dir/def/weapons.def
Normal file
|
@ -0,0 +1,227 @@
|
|||
entityDef weapon_357
|
||||
{
|
||||
"editor_color" ".3 .3 1"
|
||||
"editor_mins" "-16 -16 -16"
|
||||
"editor_maxs" "16 16 16"
|
||||
"editor_usage" ".367 Revolver"
|
||||
"editor_rotatable" "1"
|
||||
|
||||
"spawnclass" "NSItem"
|
||||
"model" "models/w_357.mdl"
|
||||
"inv_item" "3"
|
||||
"snd_acquire" "weapon.pickup"
|
||||
"snd_respawn" "item.respawn"
|
||||
}
|
||||
|
||||
entityDef weapon_python
|
||||
{
|
||||
"spawnclass" "weapon_357"
|
||||
}
|
||||
|
||||
entityDef weapon_9mmAR
|
||||
{
|
||||
"editor_color" ".3 .3 1"
|
||||
"editor_mins" "-16 -16 -16"
|
||||
"editor_maxs" "16 16 16"
|
||||
"editor_usage" "9mm AR"
|
||||
"editor_rotatable" "1"
|
||||
|
||||
"spawnclass" "NSItem"
|
||||
"model" "models/w_9mmAR.mdl"
|
||||
"inv_item" "4"
|
||||
"snd_acquire" "weapon.pickup"
|
||||
"snd_respawn" "item.respawn"
|
||||
}
|
||||
|
||||
entityDef weapon_mp5
|
||||
{
|
||||
"spawnclass" "weapon_9mmAR"
|
||||
}
|
||||
|
||||
entityDef weapon_9mmhandgun
|
||||
{
|
||||
"editor_color" ".3 .3 1"
|
||||
"editor_mins" "-16 -16 -16"
|
||||
"editor_maxs" "16 16 16"
|
||||
"editor_usage" "9mm Handgun"
|
||||
"editor_rotatable" "1"
|
||||
|
||||
"spawnclass" "NSItem"
|
||||
"model" "models/w_9mmhandgun.mdl"
|
||||
"inv_item" "2"
|
||||
"snd_acquire" "weapon.pickup"
|
||||
"snd_respawn" "item.respawn"
|
||||
}
|
||||
|
||||
entityDef weapon_glock
|
||||
{
|
||||
"spawnclass" "weapon_9mmhandgun"
|
||||
}
|
||||
|
||||
entityDef weapon_crossbow
|
||||
{
|
||||
"editor_color" ".3 .3 1"
|
||||
"editor_mins" "-16 -16 -16"
|
||||
"editor_maxs" "16 16 16"
|
||||
"editor_usage" "Crossbow"
|
||||
"editor_rotatable" "1"
|
||||
|
||||
"spawnclass" "NSItem"
|
||||
"model" "models/w_crossbow.mdl"
|
||||
"inv_item" "6"
|
||||
"snd_acquire" "weapon.pickup"
|
||||
"snd_respawn" "item.respawn"
|
||||
}
|
||||
|
||||
entityDef weapon_crowbar
|
||||
{
|
||||
"editor_color" ".3 .3 1"
|
||||
"editor_mins" "-16 -16 -16"
|
||||
"editor_maxs" "16 16 16"
|
||||
"editor_usage" "Crowbar"
|
||||
"editor_rotatable" "1"
|
||||
|
||||
"spawnclass" "NSItem"
|
||||
"model" "models/w_crowbar.mdl"
|
||||
"inv_item" "1"
|
||||
"snd_acquire" "weapon.pickup"
|
||||
"snd_respawn" "item.respawn"
|
||||
}
|
||||
|
||||
entityDef weapon_egon
|
||||
{
|
||||
"editor_color" ".3 .3 1"
|
||||
"editor_mins" "-16 -16 -16"
|
||||
"editor_maxs" "16 16 16"
|
||||
"editor_usage" "Gluon Gun"
|
||||
"editor_rotatable" "1"
|
||||
|
||||
"spawnclass" "NSItem"
|
||||
"model" "models/w_egon.mdl"
|
||||
"inv_item" "9"
|
||||
"snd_acquire" "weapon.pickup"
|
||||
"snd_respawn" "item.respawn"
|
||||
}
|
||||
|
||||
entityDef weapon_gauss
|
||||
{
|
||||
"editor_color" ".3 .3 1"
|
||||
"editor_mins" "-16 -16 -16"
|
||||
"editor_maxs" "16 16 16"
|
||||
"editor_usage" "Tau Cannon"
|
||||
"editor_rotatable" "1"
|
||||
|
||||
"spawnclass" "NSItem"
|
||||
"model" "models/w_gauss.mdl"
|
||||
"inv_item" "8"
|
||||
"snd_acquire" "weapon.pickup"
|
||||
"snd_respawn" "item.respawn"
|
||||
}
|
||||
|
||||
entityDef weapon_handgrenade
|
||||
{
|
||||
"editor_color" ".3 .3 1"
|
||||
"editor_mins" "-16 -16 -16"
|
||||
"editor_maxs" "16 16 16"
|
||||
"editor_usage" "Hand Grenade"
|
||||
"editor_rotatable" "1"
|
||||
|
||||
"spawnclass" "NSItem"
|
||||
"model" "models/w_grenade.mdl"
|
||||
"inv_item" "11"
|
||||
"snd_acquire" "weapon.pickup"
|
||||
"snd_respawn" "item.respawn"
|
||||
}
|
||||
|
||||
entityDef weapon_hornetgun
|
||||
{
|
||||
"editor_color" ".3 .3 1"
|
||||
"editor_mins" "-16 -16 -16"
|
||||
"editor_maxs" "16 16 16"
|
||||
"editor_usage" "Hornet Gun"
|
||||
"editor_rotatable" "1"
|
||||
|
||||
"spawnclass" "NSItem"
|
||||
"model" "models/w_hgun.mdl"
|
||||
"inv_item" "10"
|
||||
"snd_acquire" "weapon.pickup"
|
||||
"snd_respawn" "item.respawn"
|
||||
}
|
||||
|
||||
entityDef weapon_rpg
|
||||
{
|
||||
"editor_color" ".3 .3 1"
|
||||
"editor_mins" "-16 -16 -16"
|
||||
"editor_maxs" "16 16 16"
|
||||
"editor_usage" "Rocket Launcher"
|
||||
"editor_rotatable" "1"
|
||||
|
||||
"spawnclass" "NSItem"
|
||||
"model" "models/w_rpg.mdl"
|
||||
"inv_item" "7"
|
||||
"snd_acquire" "weapon.pickup"
|
||||
"snd_respawn" "item.respawn"
|
||||
}
|
||||
|
||||
entityDef weapon_satchel
|
||||
{
|
||||
"editor_color" ".3 .3 1"
|
||||
"editor_mins" "-16 -16 -16"
|
||||
"editor_maxs" "16 16 16"
|
||||
"editor_usage" "Satchel"
|
||||
"editor_rotatable" "1"
|
||||
|
||||
"spawnclass" "NSItem"
|
||||
"model" "models/w_satchel.mdl"
|
||||
"inv_item" "12"
|
||||
"snd_acquire" "weapon.pickup"
|
||||
"snd_respawn" "item.respawn"
|
||||
}
|
||||
|
||||
entityDef weapon_shotgun
|
||||
{
|
||||
"editor_color" ".3 .3 1"
|
||||
"editor_mins" "-16 -16 -16"
|
||||
"editor_maxs" "16 16 16"
|
||||
"editor_usage" "Shotgun"
|
||||
"editor_rotatable" "1"
|
||||
|
||||
"spawnclass" "NSItem"
|
||||
"model" "models/w_shotgun.mdl"
|
||||
"inv_item" "5"
|
||||
"snd_acquire" "weapon.pickup"
|
||||
"snd_respawn" "item.respawn"
|
||||
}
|
||||
|
||||
entityDef weapon_snark
|
||||
{
|
||||
"editor_color" ".3 .3 1"
|
||||
"editor_mins" "-16 -16 -16"
|
||||
"editor_maxs" "16 16 16"
|
||||
"editor_usage" "Snark"
|
||||
"editor_rotatable" "1"
|
||||
|
||||
"spawnclass" "NSItem"
|
||||
"model" "models/w_sqknest.mdl"
|
||||
"frame" "1"
|
||||
"inv_item" "14"
|
||||
"snd_acquire" "weapon.pickup"
|
||||
"snd_respawn" "item.respawn"
|
||||
}
|
||||
|
||||
entityDef weapon_tripmine
|
||||
{
|
||||
"editor_color" ".3 .3 1"
|
||||
"editor_mins" "-16 -16 -16"
|
||||
"editor_maxs" "16 16 16"
|
||||
"editor_usage" "Tripmine"
|
||||
"editor_rotatable" "1"
|
||||
|
||||
"spawnclass" "NSItem"
|
||||
"model" "models/v_tripmine.mdl"
|
||||
"body" "2"
|
||||
"frame" "8"
|
||||
"inv_item" "13"
|
||||
"snd_acquire" "weapon.pickup"
|
||||
"snd_respawn" "item.respawn"
|
||||
}
|
|
@ -1,4 +1,18 @@
|
|||
r_part ember
|
||||
r_part main
|
||||
{
|
||||
texture "particles/fteparticlefont.tga"
|
||||
tcoords 97 97 191 191 256
|
||||
count 1
|
||||
scale 200
|
||||
scalefactor 1
|
||||
die 1
|
||||
rgb 255 128 76
|
||||
rgbdelta 0 -32 -32
|
||||
friction 1
|
||||
blend add
|
||||
}
|
||||
|
||||
r_part +ember
|
||||
{
|
||||
count 1
|
||||
texture "particles/fteparticlefont.tga"
|
||||
|
@ -21,7 +35,18 @@ r_part ember
|
|||
ramp 0 0 0 0.1 0
|
||||
}
|
||||
|
||||
r_part expgib
|
||||
r_part +main
|
||||
{
|
||||
lighttime 1
|
||||
lightradius 350
|
||||
lightradiusfade 300
|
||||
lightrgb 1.0 0.5 0.4
|
||||
lightrgbfade 0.36 0.19 0.19
|
||||
count 1
|
||||
model "sprites/fexplo.spr" framestart=0 framecount=29 framerate=20 additive scalemin=32 scalemax=32 orient
|
||||
}
|
||||
|
||||
r_part +main
|
||||
{
|
||||
cliptype expgib
|
||||
texture "particles/fteparticlefont.tga"
|
||||
|
@ -37,22 +62,7 @@ r_part expgib
|
|||
spawnmode circle
|
||||
}
|
||||
|
||||
r_part main
|
||||
{
|
||||
texture "particles/fteparticlefont.tga"
|
||||
tcoords 97 97 191 191 256
|
||||
count 1
|
||||
scale 200
|
||||
scalefactor 1
|
||||
die 1
|
||||
rgb 255 128 76
|
||||
rgbdelta 0 -32 -32
|
||||
friction 1
|
||||
blend add
|
||||
assoc expgib
|
||||
}
|
||||
|
||||
r_part blacksmoke
|
||||
r_part +main
|
||||
{
|
||||
texture "particles/fteparticlefont.tga"
|
||||
tcoords 97 97 191 191 256
|
||||
|
@ -64,5 +74,4 @@ r_part blacksmoke
|
|||
rgb 0 0 0
|
||||
spawnmode ball
|
||||
gravity -25
|
||||
veladd -20
|
||||
}
|
||||
|
|
|
@ -36,6 +36,14 @@
|
|||
{
|
||||
"breakable_model" "gibs_rock"
|
||||
}
|
||||
"actor_alien"
|
||||
{
|
||||
"breakable_model" "gibs_alien"
|
||||
}
|
||||
"actor_human"
|
||||
{
|
||||
"breakable_model" "gibs_human"
|
||||
}
|
||||
|
||||
|
||||
"BreakableModels"
|
||||
|
@ -72,5 +80,21 @@
|
|||
{
|
||||
"models/cindergibs.mdl#submodels=9" "5.0"
|
||||
}
|
||||
"gibs_alien"
|
||||
{
|
||||
"models/agibs.mdl#submodels=4" "5.0"
|
||||
"models/agibs.mdl#submodels=4" "5.0"
|
||||
"models/agibs.mdl#submodels=4" "5.0"
|
||||
"models/agibs.mdl#submodels=4" "5.0"
|
||||
"models/agibs.mdl#submodels=4" "5.0"
|
||||
}
|
||||
"gibs_human"
|
||||
{
|
||||
"models/gib_b_bone.mdl" "5.0"
|
||||
"models/gib_legbone.mdl" "5.0"
|
||||
"models/gib_lung.mdl" "5.0"
|
||||
"models/gib_skull.mdl" "5.0"
|
||||
"models/gib_b_gib.mdl" "5.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,3 +1,11 @@
|
|||
monster_generic.thud
|
||||
{
|
||||
sample common/bodydrop1.wav
|
||||
sample common/bodydrop2.wav
|
||||
sample common/bodydrop3.wav
|
||||
sample common/bodydrop4.wav
|
||||
}
|
||||
|
||||
monster_alien_grunt.alert
|
||||
{
|
||||
sample agrunt/ag_alert1.wav
|
||||
|
@ -41,6 +49,20 @@ monster_alien_grunt.pain
|
|||
sample agrunt/ag_pain5.wav
|
||||
}
|
||||
|
||||
monster_alien_grunt.step_left
|
||||
{
|
||||
pitch 0.7
|
||||
sample player/pl_ladder2.wav
|
||||
sample player/pl_ladder4.wav
|
||||
}
|
||||
|
||||
monster_alien_grunt.step_right
|
||||
{
|
||||
pitch 0.7
|
||||
sample player/pl_ladder1.wav
|
||||
sample player/pl_ladder3.wav
|
||||
}
|
||||
|
||||
monster_alien_controller.alert
|
||||
{
|
||||
sample controller/con_alert1.wav
|
||||
|
@ -392,6 +414,13 @@ monster_houndeye.pain
|
|||
sample houndeye/he_pain5.wav
|
||||
}
|
||||
|
||||
monster_human_grunt.idle
|
||||
{
|
||||
sample hgrunt/gr_idle1.wav
|
||||
sample hgrunt/gr_idle2.wav
|
||||
sample hgrunt/gr_idle3.wav
|
||||
}
|
||||
|
||||
monster_human_grunt.die
|
||||
{
|
||||
sample hgrunt/gr_die1.wav
|
||||
|
@ -408,6 +437,16 @@ monster_human_grunt.pain
|
|||
sample hgrunt/gr_pain5.wav
|
||||
}
|
||||
|
||||
monster_human_grunt.kick
|
||||
{
|
||||
sample zombie/claw_miss2.wav
|
||||
}
|
||||
|
||||
monster_human_grunt.reload
|
||||
{
|
||||
sample hgrunt/gr_reload1.wav
|
||||
}
|
||||
|
||||
monster_ichthyosaur.alert
|
||||
{
|
||||
sample ichy/ichy_alert1.wav
|
||||
|
|
|
@ -83,6 +83,13 @@ weapon_handgrenade.bounce
|
|||
sample weapons/grenade_hit3.wav
|
||||
}
|
||||
|
||||
weapon_handgrenade.explode
|
||||
{
|
||||
sample weapons/explode3.wav
|
||||
sample weapons/explode4.wav
|
||||
sample weapons/explode5.wav
|
||||
}
|
||||
|
||||
weapon_hornetgun.fire
|
||||
{
|
||||
alerts
|
||||
|
|
Loading…
Reference in a new issue