Add invasion mode for testing AI, which has been expanded upon
10
README.md
|
@ -2,9 +2,9 @@
|
||||||
|
|
||||||
Clean-room reimplementation of Valve's Half-Life: Deathmatch and Half-Life (Experimental, this means Singleplayer is NOT complete).
|
Clean-room reimplementation of Valve's Half-Life: Deathmatch and Half-Life (Experimental, this means Singleplayer is NOT complete).
|
||||||
|
|
||||||
Similar to FreeCS, this aims to recreate the feeling of the original game.
|
Similar to Tactical Retreat (FreeCS), this aims to recreate the feeling of the original game.
|
||||||
It's designed to work with the content from the CD version of the game.
|
It's designed to work with the content from the Steam & CD version of the game.
|
||||||
You can use the data files from the Steam version also, but don't expect authenticity. Also servers may or may not, depending on the level, be compatible between versions.
|
There may be version mismatches between the different versions of Half-Life that you play. So you have to make sure you're running similar versions when hosting a game for someone.
|
||||||
|
|
||||||
Netplay improvements, such as prediction of both player physics and weapon-logic
|
Netplay improvements, such as prediction of both player physics and weapon-logic
|
||||||
are present.
|
are present.
|
||||||
|
@ -21,7 +21,7 @@ No proprietary SDKs have been looked at or taken apart, unlike similar projects.
|
||||||
To run it, all you need is [FTEQW](https://www.fteqw.org) and [the latest release .pk3 file](https://www.frag-net.com/pkgs/package_valve.pk3), which you save into `Half-Life/valve/`. That's about it. You can install updates through the **Configuration > Updates** menu.
|
To run it, all you need is [FTEQW](https://www.fteqw.org) and [the latest release .pk3 file](https://www.frag-net.com/pkgs/package_valve.pk3), which you save into `Half-Life/valve/`. That's about it. You can install updates through the **Configuration > Updates** menu.
|
||||||
|
|
||||||
## Building
|
## Building
|
||||||
Clone the repository into the Nuclide-SDK and build it:
|
Clone the repository into the [Nuclide-SDK](https://developer.vera-visions.com) and build it:
|
||||||
|
|
||||||
```
|
```
|
||||||
$ git clone https://code.idtech.space/fn/valve valve
|
$ git clone https://code.idtech.space/fn/valve valve
|
||||||
|
@ -60,7 +60,7 @@ We've had people ask in the oddest of places for help, please don't do that.
|
||||||
## License
|
## License
|
||||||
ISC License
|
ISC License
|
||||||
|
|
||||||
Copyright (c) 2016-2024 Marco Hladik <marco@icculus.org>
|
Copyright (c) 2016-2024 Marco Cawthorne <marco@icculus.org>
|
||||||
|
|
||||||
Permission to use, copy, modify, and distribute this software for any
|
Permission to use, copy, modify, and distribute this software for any
|
||||||
purpose with or without fee is hereby granted, provided that the above
|
purpose with or without fee is hereby granted, provided that the above
|
||||||
|
|
|
@ -25,9 +25,7 @@ ClientGame_EntityUpdate(float id, float new)
|
||||||
NSENTITY_READENTITY(HLWeapon, new)
|
NSENTITY_READENTITY(HLWeapon, new)
|
||||||
break;
|
break;
|
||||||
case ENT_PLAYER:
|
case ENT_PLAYER:
|
||||||
#ifdef GEARBOX
|
#ifdef SCIHUNT
|
||||||
NSENTITY_READENTITY(OP4Player, new)
|
|
||||||
#elif SCIHUNT
|
|
||||||
NSENTITY_READENTITY(SHPlayer, new)
|
NSENTITY_READENTITY(SHPlayer, new)
|
||||||
#else
|
#else
|
||||||
NSENTITY_READENTITY(HLPlayer, new)
|
NSENTITY_READENTITY(HLPlayer, new)
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#pragma target fte_5768
|
#pragma target fte_5768
|
||||||
#pragma progs_dat "../../csprogs.dat"
|
#pragma progs_dat "../../zpak001.pk3dir/csprogs.dat"
|
||||||
|
|
||||||
#define CSQC
|
#define CSQC
|
||||||
#define CLIENT
|
#define CLIENT
|
||||||
|
|
|
@ -4,3 +4,4 @@ all:
|
||||||
mkdir -pv ../../zpak001.pk3dir/progs/
|
mkdir -pv ../../zpak001.pk3dir/progs/
|
||||||
$(QCC) deathmatch.qc
|
$(QCC) deathmatch.qc
|
||||||
$(QCC) singleplayer.qc
|
$(QCC) singleplayer.qc
|
||||||
|
$(QCC) invasion.qc
|
||||||
|
|
157
src/rules/invasion.qc
Normal file
|
@ -0,0 +1,157 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2024 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma PROGS_DAT "../../zpak001.pk3dir/progs/invasion.dat"
|
||||||
|
|
||||||
|
#include "../../../src/server/api.h"
|
||||||
|
|
||||||
|
var string autocvar_invasion_monsterClass = "monster_zombie";
|
||||||
|
var int autocvar_invasion_monsterCount = 5;
|
||||||
|
|
||||||
|
void
|
||||||
|
WaveTimer_Tick(void)
|
||||||
|
{
|
||||||
|
int monsterCount = actor.TotalActors();
|
||||||
|
|
||||||
|
/* spawn a new monster */
|
||||||
|
if (monsterCount < autocvar_invasion_monsterCount) {
|
||||||
|
entity zombie = ents.Create(autocvar_invasion_monsterClass, [0,0,0]);
|
||||||
|
game.TeleportToSpawn(zombie);
|
||||||
|
ents.Input(zombie, "HordeOn", "", world);
|
||||||
|
}
|
||||||
|
|
||||||
|
self.nextthink = time + 2.0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
AllowFlashlight(void)
|
||||||
|
{
|
||||||
|
return cvars.GetBool("mp_flashlight");
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
CodeCallback_StartGameType(void)
|
||||||
|
{
|
||||||
|
ents.Precache(autocvar_invasion_monsterClass);
|
||||||
|
motd.LoadDefault();
|
||||||
|
game.SetSpawnPoint("info_player_deathmatch");
|
||||||
|
cvars.SetBool("coop", true);
|
||||||
|
|
||||||
|
teams.SetUp(1, "Military", [0, 255, 0], false);
|
||||||
|
teams.SetUp(2, "Aliens", [255, 0, 0], false);
|
||||||
|
teams.SetUp(3, "Players", [255, 255, 255], false);
|
||||||
|
teams.SetSpawnPoint(1, "info_player_deathmatch");
|
||||||
|
teams.SetSpawnPoint(2, "info_player_deathmatch");
|
||||||
|
teams.SetSpawnPoint(3, "info_player_deathmatch");
|
||||||
|
|
||||||
|
entity tick = spawn();
|
||||||
|
tick.think = WaveTimer_Tick;
|
||||||
|
tick.nextthink = time + 1.0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
CodeCallback_PlayerSpawn(void)
|
||||||
|
{
|
||||||
|
string playerModel;
|
||||||
|
|
||||||
|
ents.ChangeToClass(self, "player_mp");
|
||||||
|
ents.Input(self, "SetTeam", "3", world);
|
||||||
|
|
||||||
|
/* interpret the 'model' InfoKey */
|
||||||
|
playerModel = userinfo.GetString(self, "model");
|
||||||
|
|
||||||
|
if (playerModel != "") {
|
||||||
|
playerModel = sprintf("models/player/%s/%s.mdl", playerModel, playerModel);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* fallback is always models/player.mdl for Half-Life */
|
||||||
|
if (!STRING_SET(playerModel) || exists.InVFS(playerModel) == false) {
|
||||||
|
playerModel = "models/player.mdl";
|
||||||
|
}
|
||||||
|
|
||||||
|
self.modelindex = getmodelindex(playerModel); /* keep OG size */
|
||||||
|
game.TeleportToSpawn(self);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
CodeCallback_PlayerDisconnect(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
CodeCallback_PlayerRequestRespawn(void)
|
||||||
|
{
|
||||||
|
CodeCallback_PlayerSpawn();
|
||||||
|
return (true);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
CodeCallback_PlayerDamage(entity inflictor, entity attacker)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
CodeCallback_PlayerKilled(entity inflictor, entity attacker, string weapon)
|
||||||
|
{
|
||||||
|
combat.Obituary(self.netname, attacker.netname, weapon, "");
|
||||||
|
|
||||||
|
/* death-counter */
|
||||||
|
self.deaths++;
|
||||||
|
|
||||||
|
/* update score-counter */
|
||||||
|
if (ents.isPlayer(attacker)) {
|
||||||
|
if (self == attacker) {
|
||||||
|
attacker.frags--;
|
||||||
|
} else {
|
||||||
|
attacker.frags++;
|
||||||
|
}
|
||||||
|
} else if (ents.isSentient(attacker)) {
|
||||||
|
teams.AddScore(attacker.team, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
CodeCallback_NPCKilled(entity inflictor, entity attacker, string weapon)
|
||||||
|
{
|
||||||
|
combat.Obituary(self.netname, attacker.netname, weapon, "");
|
||||||
|
|
||||||
|
/* update score-counter */
|
||||||
|
if (ents.isPlayer(attacker)) {
|
||||||
|
if (self == attacker) {
|
||||||
|
attacker.frags--;
|
||||||
|
} else {
|
||||||
|
attacker.frags++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
CodeCallback_ImpulseCommand(float impulseNum)
|
||||||
|
{
|
||||||
|
switch (impulseNum) {
|
||||||
|
case 100:
|
||||||
|
if (AllowFlashlight() == true) {
|
||||||
|
ents.Input(self, "UseItem", "item_suit", self);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return (false);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (true);
|
||||||
|
}
|
|
@ -1,6 +1,6 @@
|
||||||
#pragma target fte_5768
|
#pragma target fte_5768
|
||||||
//#pragma flag enable assumeint
|
//#pragma flag enable assumeint
|
||||||
#pragma progs_dat "../../progs.dat"
|
#pragma progs_dat "../../zpak001.pk3dir/progs.dat"
|
||||||
|
|
||||||
#define QWSSQC
|
#define QWSSQC
|
||||||
#define SERVER
|
#define SERVER
|
||||||
|
|
|
@ -17,14 +17,20 @@
|
||||||
void
|
void
|
||||||
Game_InitRules(void)
|
Game_InitRules(void)
|
||||||
{
|
{
|
||||||
|
string gameType = cvar_string("g_gametype");
|
||||||
|
|
||||||
FX_Corpse_Init();
|
FX_Corpse_Init();
|
||||||
|
|
||||||
|
if (STRING_SET(gameType)) {
|
||||||
|
g_grMode = NSGameRules::InitFromProgs(strcat("progs/", gameType, ".dat"));
|
||||||
|
} else {
|
||||||
if (cvar("sv_playerslots") == 1 || cvar("coop") == 1) {
|
if (cvar("sv_playerslots") == 1 || cvar("coop") == 1) {
|
||||||
g_grMode = NSGameRules::InitFromProgs("progs/singleplayer.dat");
|
g_grMode = NSGameRules::InitFromProgs("progs/singleplayer.dat");
|
||||||
} else {
|
} else {
|
||||||
g_grMode = NSGameRules::InitFromProgs("progs/deathmatch.dat");
|
g_grMode = NSGameRules::InitFromProgs("progs/deathmatch.dat");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Game_Worldspawn(void)
|
Game_Worldspawn(void)
|
||||||
|
|
|
@ -34,7 +34,11 @@ FX_Corpse_Init(void)
|
||||||
|
|
||||||
for ( int i = 0; i <= CORPSES_MAX; i++ ) {
|
for ( int i = 0; i <= CORPSES_MAX; i++ ) {
|
||||||
next.classname = "corpse";
|
next.classname = "corpse";
|
||||||
|
|
||||||
|
if (autocvar_corpse_ragdolls)
|
||||||
next.owner = spawn(NSRagdoll);
|
next.owner = spawn(NSRagdoll);
|
||||||
|
else
|
||||||
|
next.owner = spawn(NSRenderableEntity);
|
||||||
|
|
||||||
if ( i == CORPSES_MAX ) {
|
if ( i == CORPSES_MAX ) {
|
||||||
next.owner = g_bodies;
|
next.owner = g_bodies;
|
||||||
|
@ -66,8 +70,15 @@ entity
|
||||||
FX_Corpse_Spawn(NSClientPlayer pl, float anim)
|
FX_Corpse_Spawn(NSClientPlayer pl, float anim)
|
||||||
{
|
{
|
||||||
NSRagdoll body_next = (NSRagdoll)FX_Corpse_Next();
|
NSRagdoll body_next = (NSRagdoll)FX_Corpse_Next();
|
||||||
|
|
||||||
|
if (autocvar_corpse_ragdolls) {
|
||||||
|
body_next.SetMovetype(MOVETYPE_PHYSICS);
|
||||||
|
body_next.SetSolid(SOLID_NOT);
|
||||||
|
} else {
|
||||||
body_next.SetMovetype(MOVETYPE_BOUNCE);
|
body_next.SetMovetype(MOVETYPE_BOUNCE);
|
||||||
body_next.SetSolid(SOLID_CORPSE);
|
body_next.SetSolid(SOLID_CORPSE);
|
||||||
|
}
|
||||||
|
|
||||||
body_next.SetModelindex(pl.GetModelindex());
|
body_next.SetModelindex(pl.GetModelindex());
|
||||||
|
|
||||||
if (pl.IsCrouching()) {
|
if (pl.IsCrouching()) {
|
||||||
|
@ -80,9 +91,11 @@ FX_Corpse_Spawn(NSClientPlayer pl, float anim)
|
||||||
body_next.SetAngles(pl.GetAngles());
|
body_next.SetAngles(pl.GetAngles());
|
||||||
body_next.SetVelocity(pl.GetVelocity() + [0,0,120]);
|
body_next.SetVelocity(pl.GetVelocity() + [0,0,120]);
|
||||||
body_next.SetFrame(anim);
|
body_next.SetFrame(anim);
|
||||||
|
body_next.m_iBody = pl.m_iBody;
|
||||||
body_next.ScheduleThink(FX_Corpse_Update, 0.0f);
|
body_next.ScheduleThink(FX_Corpse_Update, 0.0f);
|
||||||
body_next.colormap = pl.colormap;
|
body_next.colormap = pl.colormap;
|
||||||
body_next.frame1time = 0.0f;
|
body_next.frame1time = 0.0f;
|
||||||
|
|
||||||
return (entity)body_next;
|
return (entity)body_next;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -3,13 +3,45 @@ entityDef monster_alien_controller
|
||||||
"spawnclass" "NSTalkMonster"
|
"spawnclass" "NSTalkMonster"
|
||||||
"model" "models/controller.mdl"
|
"model" "models/controller.mdl"
|
||||||
"netname" "Alien Controller"
|
"netname" "Alien Controller"
|
||||||
"health" "0"
|
"health" "skill:controller_health"
|
||||||
"mins" "-16 -16 0"
|
"mins" "-32 -32 0"
|
||||||
"maxs" "16 16 72"
|
"maxs" "32 32 64"
|
||||||
"eye_height" "64"
|
"eye_height" "64"
|
||||||
"team" "2"
|
"team" "2"
|
||||||
"propdata" "actor_alien"
|
"propdata" "actor_alien"
|
||||||
|
|
||||||
"speed_walk" "0"
|
"speed_walk" "100"
|
||||||
"speed_run" "0"
|
"speed_run" "500"
|
||||||
|
"flying" "1"
|
||||||
|
"fly_offset" "128"
|
||||||
|
"attack_ranged_range" "1024"
|
||||||
|
|
||||||
|
events {
|
||||||
|
// ranged attack
|
||||||
|
2 "SpawnProjectileOffset" "ranged_controller_ball 0 0 36"
|
||||||
|
3 "StartSoundDef" "Controller.Attack"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
entityDef ranged_controller_ball
|
||||||
|
{
|
||||||
|
"spawnclass" "NSProjectile"
|
||||||
|
"model" "sprites/xspark4.spr"
|
||||||
|
"mins" "-16 -16 -16"
|
||||||
|
"mins" "16 16 16"
|
||||||
|
|
||||||
|
"def_damage" "damage_spitDirect"
|
||||||
|
|
||||||
|
"health" "0"
|
||||||
|
"velocity" "900"
|
||||||
|
"fuse" "10"
|
||||||
|
"detonate_on_fuse" "0"
|
||||||
|
"detonate_on_death" "0"
|
||||||
|
"detonate_on_world" "1"
|
||||||
|
"detonate_on_actor" "1"
|
||||||
|
"impact_damage_effect" "1"
|
||||||
|
"impact_gib" "0"
|
||||||
|
"trackEnemy" "1"
|
||||||
}
|
}
|
|
@ -26,19 +26,19 @@ entityDef monster_alien_grunt
|
||||||
|
|
||||||
// animation event callbacks
|
// animation event callbacks
|
||||||
events {
|
events {
|
||||||
1 "SpawnProjectileDef" "ranged_agrunt_shot"
|
1 "SpawnProjectileDef" "ranged_agrunt_shot_orange"
|
||||||
1 "StartSoundDef" "weapon_hornetgun.fire"
|
1 "StartSoundDef" "weapon_hornetgun.fire"
|
||||||
|
|
||||||
2 "SpawnProjectileDef" "ranged_agrunt_shot"
|
2 "SpawnProjectileDef" "ranged_agrunt_shot_red"
|
||||||
2 "StartSoundDef" "weapon_hornetgun.fire"
|
2 "StartSoundDef" "weapon_hornetgun.fire"
|
||||||
|
|
||||||
3 "SpawnProjectileDef" "ranged_agrunt_shot"
|
3 "SpawnProjectileDef" "ranged_agrunt_shot_orange"
|
||||||
3 "StartSoundDef" "weapon_hornetgun.fire"
|
3 "StartSoundDef" "weapon_hornetgun.fire"
|
||||||
|
|
||||||
4 "SpawnProjectileDef" "ranged_agrunt_shot"
|
4 "SpawnProjectileDef" "ranged_agrunt_shot_red"
|
||||||
4 "StartSoundDef" "weapon_hornetgun.fire"
|
4 "StartSoundDef" "weapon_hornetgun.fire"
|
||||||
|
|
||||||
5 "SpawnProjectileDef" "ranged_agrunt_shot"
|
5 "SpawnProjectileDef" "ranged_agrunt_shot_orange"
|
||||||
5 "StartSoundDef" "weapon_hornetgun.fire"
|
5 "StartSoundDef" "weapon_hornetgun.fire"
|
||||||
|
|
||||||
10 "StartSoundDef" "monster_alien_grunt.step_left"
|
10 "StartSoundDef" "monster_alien_grunt.step_left"
|
||||||
|
@ -53,15 +53,33 @@ entityDef melee_agrunt_punch
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
entityDef ranged_agrunt_shot
|
entityDef ranged_agrunt_shot_red
|
||||||
{
|
{
|
||||||
"spawnclass" "NSProjectile"
|
"spawnclass" "NSProjectile"
|
||||||
"model" "models/hornet.mdl"
|
"model" "models/hornet.mdl"
|
||||||
|
|
||||||
"def_damage" "damage_hornetDirect"
|
"def_damage" "damage_hornetDirect"
|
||||||
|
|
||||||
"health" "0"
|
"health" "0"
|
||||||
"velocity" "300"
|
"velocity" "600"
|
||||||
|
"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"
|
||||||
|
"smoke_fly" "weapon_hornet.red_trail"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
entityDef ranged_agrunt_shot_orange
|
||||||
|
{
|
||||||
|
"spawnclass" "NSProjectile"
|
||||||
|
"model" "models/hornet.mdl"
|
||||||
|
|
||||||
|
"def_damage" "damage_hornetDirect"
|
||||||
|
"health" "0"
|
||||||
|
"velocity" "800"
|
||||||
"fuse" "10"
|
"fuse" "10"
|
||||||
"detonate_on_fuse" "0"
|
"detonate_on_fuse" "0"
|
||||||
"detonate_on_death" "0"
|
"detonate_on_death" "0"
|
||||||
|
@ -70,6 +88,9 @@ entityDef ranged_agrunt_shot
|
||||||
"impact_damage_effect" "1"
|
"impact_damage_effect" "1"
|
||||||
"impact_gib" "0"
|
"impact_gib" "0"
|
||||||
"smoke_fly" "weapon_hornet.trail"
|
"smoke_fly" "weapon_hornet.trail"
|
||||||
|
"trackEnemy" "1"
|
||||||
|
"trackJitter" "8 16 16"
|
||||||
|
"trackDelay" "0.1"
|
||||||
}
|
}
|
||||||
|
|
||||||
entityDef damage_hornetDirect
|
entityDef damage_hornetDirect
|
||||||
|
|
|
@ -20,6 +20,82 @@ entityDef monster_alien_slave
|
||||||
"snd_pain" "monster_alien_slave.pain"
|
"snd_pain" "monster_alien_slave.pain"
|
||||||
"snd_death" "monster_alien_slave.die"
|
"snd_death" "monster_alien_slave.die"
|
||||||
"snd_thud" "monster_generic.thud"
|
"snd_thud" "monster_generic.thud"
|
||||||
|
|
||||||
|
// animation event callbacks
|
||||||
|
events {
|
||||||
|
1 "SpawnProjectileDef" "melee_islave_claw"
|
||||||
|
1 "StartSoundDef" "monster_alien_slave.claw"
|
||||||
|
|
||||||
|
2 "SpawnProjectileDef" "melee_islave_claw"
|
||||||
|
2 "StartSoundDef" "monster_alien_slave.claw"
|
||||||
|
|
||||||
|
// beam powerup, both left and right hand
|
||||||
|
3 "SpawnDefAttachment" "islave_beampowerup 0"
|
||||||
|
3 "SpawnDefAttachment" "islave_beampowerup 1"
|
||||||
|
|
||||||
|
// fire a beam towards the target
|
||||||
|
4 "SpawnDefAttachment" "islave_beamattack 0"
|
||||||
|
4 "SpawnDefAttachment" "islave_beamattack 0"
|
||||||
|
4 "SpawnDefAttachment" "islave_beamattack 1"
|
||||||
|
4 "SpawnDefAttachment" "islave_beamattack 1"
|
||||||
|
4 "SpawnProjectileDef" "ranged_islave_zap"
|
||||||
|
|
||||||
|
// kill anything parented to us
|
||||||
|
5 "KillChildClass" "islave_beampowerup"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
entityDef islave_beampowerup
|
||||||
|
{
|
||||||
|
"spawnclass" "env_beam"
|
||||||
|
"texture" "sprites/lgtning.spr"
|
||||||
|
"rendercolor" "96 128 16"
|
||||||
|
"renderamt" "64"
|
||||||
|
"NoiseAmplitude" "80"
|
||||||
|
"life" "3"
|
||||||
|
"Radius" "512"
|
||||||
|
"BoltWidth" "16"
|
||||||
|
"RadiusScale" "0 1 1"
|
||||||
|
"spawnflags" "1"
|
||||||
|
"decal_detonate" "Impact.Shot"
|
||||||
|
}
|
||||||
|
|
||||||
|
entityDef islave_beamattack
|
||||||
|
{
|
||||||
|
"spawnclass" "env_beam"
|
||||||
|
"texture" "sprites/lgtning.spr"
|
||||||
|
"rendercolor" "180 255 96"
|
||||||
|
"renderamt" "255"
|
||||||
|
"NoiseAmplitude" "80"
|
||||||
|
"life" "0.5"
|
||||||
|
"Radius" "512"
|
||||||
|
"BoltWidth" "64"
|
||||||
|
"BeamDir" "512 0 0"
|
||||||
|
"spawnflags" "1"
|
||||||
|
"decal_detonate" "Impact.Shot"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
entityDef damage_islave_zap
|
||||||
|
{
|
||||||
|
"damage" "skill:islave_dmg_zap"
|
||||||
|
}
|
||||||
|
|
||||||
|
entityDef ranged_islave_zap
|
||||||
|
{
|
||||||
|
"spawnclass" "NSProjectile"
|
||||||
|
"mins" "-16 -16 -32"
|
||||||
|
"maxs" "16 16 32"
|
||||||
|
"def_damage" "damage_islave_zap"
|
||||||
|
"health" "0"
|
||||||
|
"velocity" "9000"
|
||||||
|
"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 melee_islave_claw
|
entityDef melee_islave_claw
|
||||||
|
|
|
@ -4,12 +4,24 @@ entityDef monster_apache
|
||||||
"model" "models/apache.mdl"
|
"model" "models/apache.mdl"
|
||||||
"netname" "Apache"
|
"netname" "Apache"
|
||||||
"health" "0"
|
"health" "0"
|
||||||
"mins" "-16 -16 0"
|
"mins" "-32 -32 0"
|
||||||
"maxs" "16 16 72"
|
"maxs" "32 32 64"
|
||||||
"eye_height" "64"
|
"eye_height" "0"
|
||||||
"team" "2"
|
"team" "2"
|
||||||
"propdata" "actor_robot"
|
"propdata" "actor_robot"
|
||||||
|
|
||||||
"speed_walk" "0"
|
"speed_walk" "200"
|
||||||
"speed_run" "0"
|
"speed_run" "200"
|
||||||
|
"flying" "1"
|
||||||
|
"fly_offset" "768"
|
||||||
|
|
||||||
|
// primary ranged attack
|
||||||
|
"def_attack_ranged" "ranged_hgrunt_mp5"
|
||||||
|
"snd_ranged_attack" "weapon_mp5.shoot"
|
||||||
|
"attack_ranged_range" "2048"
|
||||||
|
|
||||||
|
// special attack
|
||||||
|
"def_attack_special_1" "projectile_rocket"
|
||||||
|
"attack_special_range" "1024"
|
||||||
|
"projectile_delay" "1.0"
|
||||||
}
|
}
|
|
@ -1,15 +1,21 @@
|
||||||
entityDef monster_barnacle
|
entityDef monster_barnacle
|
||||||
{
|
{
|
||||||
"spawnclass" "NSTalkMonster"
|
"spawnclass" "NSMonster"
|
||||||
"model" "models/barnacle.mdl"
|
"model" "models/barnacle.mdl"
|
||||||
"netname" "Barnacle"
|
"netname" "Barnacle"
|
||||||
"health" "0"
|
"health" "skill:barnacle_health"
|
||||||
"mins" "-16 -16 0"
|
"mins" "-16 -16 -32"
|
||||||
"maxs" "16 16 72"
|
"maxs" "16 16 0"
|
||||||
"eye_height" "64"
|
"eye_height" "0"
|
||||||
"team" "2"
|
"team" "2"
|
||||||
"propdata" "actor_human"
|
"propdata" "actor_human"
|
||||||
|
|
||||||
"speed_walk" "64"
|
"speed_walk" "0"
|
||||||
"speed_run" "364" // day one only
|
"speed_run" "0" // day one only
|
||||||
|
"static" "1"
|
||||||
|
"def_puke" "barnacle_gib"
|
||||||
|
|
||||||
|
events {
|
||||||
|
2 "ShootGib" "gibs_human 200 1"
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -53,6 +53,7 @@ entityDef monster_barney
|
||||||
|
|
||||||
entityDef ranged_barney_shot
|
entityDef ranged_barney_shot
|
||||||
{
|
{
|
||||||
|
"inherit" "projectile_bullet_base"
|
||||||
"damage" "skill:hgrunt_pellets"
|
"damage" "skill:hgrunt_pellets"
|
||||||
"delay" "0.5"
|
"delay" "0.5"
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,6 +9,90 @@ entityDef monster_bigmomma
|
||||||
"eye_height" "64"
|
"eye_height" "64"
|
||||||
"team" "2"
|
"team" "2"
|
||||||
"propdata" "actor_alien"
|
"propdata" "actor_alien"
|
||||||
"speed_walk" "46"
|
"speed_walk" "0"
|
||||||
"speed_run" "292"
|
"speed_run" "292"
|
||||||
|
|
||||||
|
"attack_ranged_range" "512"
|
||||||
|
"attack_melee_range" "152"
|
||||||
|
"def_attack_melee" "melee_bigmomma"
|
||||||
|
"def_attack_ranged" "ranged_bigmomma_spit"
|
||||||
|
|
||||||
|
"snd_alert" "BigMomma.Alert"
|
||||||
|
"snd_pain" "BigMomma.Pain"
|
||||||
|
"snd_death" "BigMomma.Die"
|
||||||
|
|
||||||
|
"snd_precache" "BigMomma.FootstepLeft"
|
||||||
|
"snd_precache" "BigMomma.FootstepRight"
|
||||||
|
"snd_precache" "BigMomma.ChildDie" // She mourns when her children die, who wouldn't?
|
||||||
|
"snd_precache" "BigMomma.Sack"
|
||||||
|
"snd_precache" "monster_bigmomma.scream"
|
||||||
|
"snd_precache" "BigMomma.LaunchMortar"
|
||||||
|
"snd_precache" "BigMomma.Attack"
|
||||||
|
"snd_precache" "BigMomma.AttackHit"
|
||||||
|
"snd_precache" "BigMomma.AttackMiss"
|
||||||
|
"snd_precache" "BigMomma.Birth" // BigMomma.LayHeadcrab seems to be the same?
|
||||||
|
|
||||||
|
"snd_precache" "NPC_BigMomma.SpitTouch1"
|
||||||
|
"snd_precache" "NPC_BigMomma.SpitHit1"
|
||||||
|
"snd_precache" "NPC_BigMomma.SpitHit2"
|
||||||
|
|
||||||
|
events {
|
||||||
|
// footsteps
|
||||||
|
1 "StartSoundDef" "BigMomma.FootstepLeft"
|
||||||
|
2 "StartSoundDef" "BigMomma.FootstepRight"
|
||||||
|
3 "StartSoundDef" "BigMomma.FootstepLeft"
|
||||||
|
4 "StartSoundDef" "BigMomma.FootstepRight"
|
||||||
|
|
||||||
|
// sfx
|
||||||
|
5 "StartSoundDef" "BigMomma.Sack"
|
||||||
|
6 "StartSoundDef" "BigMomma.Die"
|
||||||
|
14 "StartSoundDef" "monster_bigmomma.scream"
|
||||||
|
15 "StartSoundDef" "BigMomma.Pain"
|
||||||
|
16 "StartSoundDef" "BigMomma.Attack"
|
||||||
|
17 "StartSoundDef" "BigMomma.Birth"
|
||||||
|
|
||||||
|
// melee attacks
|
||||||
|
8 "SpawnProjectileDef" "melee_bigmomma"
|
||||||
|
9 "SpawnProjectileDef" "melee_bigmomma"
|
||||||
|
10 "SpawnProjectileDef "melee_bigmomma"
|
||||||
|
|
||||||
|
// ranged attack
|
||||||
|
11 "SpawnProjectileOffset" "ranged_bigmomma_spit 0 0 180"
|
||||||
|
|
||||||
|
// spawn offspring
|
||||||
|
12 "SpawnProjectileDef" "monster_babycrab"
|
||||||
|
|
||||||
|
// trigger our targets
|
||||||
|
50 "UseTargets" ""
|
||||||
|
|
||||||
|
// jump forward
|
||||||
|
13 "AddVelocity" "200 0 500"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
entityDef melee_bigmomma
|
||||||
|
{
|
||||||
|
"damage" "skill:bullsquid_dmg_bite"
|
||||||
|
"delay" "0.25f"
|
||||||
|
}
|
||||||
|
|
||||||
|
entityDef ranged_bigmomma_spit
|
||||||
|
{
|
||||||
|
"spawnclass" "NSProjectile"
|
||||||
|
"model" "sprites/mommaspit.spr"
|
||||||
|
"mins" "-16 -16 -16"
|
||||||
|
"mins" "16 16 16"
|
||||||
|
|
||||||
|
"def_damage" "damage_spitDirect"
|
||||||
|
|
||||||
|
"health" "0"
|
||||||
|
"velocity" "900"
|
||||||
|
"fuse" "10"
|
||||||
|
"detonate_on_fuse" "0"
|
||||||
|
"detonate_on_death" "0"
|
||||||
|
"detonate_on_world" "1"
|
||||||
|
"detonate_on_actor" "1"
|
||||||
|
"impact_damage_effect" "1"
|
||||||
|
"impact_gib" "0"
|
||||||
|
"trackEnemy" "1"
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,7 +13,7 @@ entityDef monster_bullchicken
|
||||||
"speed_run" "72"
|
"speed_run" "72"
|
||||||
|
|
||||||
"attack_ranged_range" "512"
|
"attack_ranged_range" "512"
|
||||||
"attack_melee1_range" "86" // tailwhip
|
"attack_melee_range" "86" // tailwhip
|
||||||
"attack_melee2_range" "86" // bite
|
"attack_melee2_range" "86" // bite
|
||||||
"def_attack_melee" "melee_bullchicken_tailwhip"
|
"def_attack_melee" "melee_bullchicken_tailwhip"
|
||||||
"def_attack_melee2" "melee_bullchicken_bite"
|
"def_attack_melee2" "melee_bullchicken_bite"
|
||||||
|
|
|
@ -13,3 +13,6 @@ entityDef monster_cockroach
|
||||||
"speed_walk" "0"
|
"speed_walk" "0"
|
||||||
"speed_run" "0"
|
"speed_run" "0"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TODO: coverhintnodeflags: FLESH | LOWLIGHT
|
||||||
|
TODO: OnSeenPlayer: MoveToCover
|
||||||
|
|
|
@ -12,4 +12,5 @@ entityDef monster_flyer
|
||||||
|
|
||||||
"speed_walk" "64"
|
"speed_walk" "64"
|
||||||
"speed_run" "364"
|
"speed_run" "364"
|
||||||
|
"flying" "1"
|
||||||
}
|
}
|
|
@ -12,4 +12,5 @@ entityDef monster_flyer_flock
|
||||||
|
|
||||||
"speed_walk" "64"
|
"speed_walk" "64"
|
||||||
"speed_run" "364"
|
"speed_run" "364"
|
||||||
|
"flying" "1"
|
||||||
}
|
}
|
|
@ -4,11 +4,22 @@ entityDef monster_gargantua
|
||||||
"model" "models/garg.mdl"
|
"model" "models/garg.mdl"
|
||||||
"netname" "Gargantua"
|
"netname" "Gargantua"
|
||||||
"health" "skill:gargantua_health"
|
"health" "skill:gargantua_health"
|
||||||
"mins" "-16 -16 0"
|
"mins" "-32 -32 0"
|
||||||
"maxs" "16 16 72"
|
"maxs" "32 32 128"
|
||||||
"eye_height" "64"
|
"eye_height" "64"
|
||||||
"team" "2"
|
"team" "2"
|
||||||
"propdata" "actor_alien"
|
"propdata" "actor_alien"
|
||||||
"speed_walk" "46"
|
"speed_walk" "46"
|
||||||
"speed_run" "292"
|
"speed_run" "292"
|
||||||
|
|
||||||
|
events {
|
||||||
|
// attacks
|
||||||
|
1 "SpawnProjectileDef" "melee_gargantua"
|
||||||
|
5 "SpawnProjectileDef" "stomp_gargantua"
|
||||||
|
|
||||||
|
// sfx
|
||||||
|
3 "StartSoundDef" "monster_gargantua.step"
|
||||||
|
4 "StartSoundDef" "monster_gargantua.step"
|
||||||
|
6 "StartSoundDef" "monster_gargantua.breathe"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,12 +3,12 @@ entityDef monster_gman
|
||||||
"spawnclass" "NSTalkMonster"
|
"spawnclass" "NSTalkMonster"
|
||||||
"model" "models/gman.mdl"
|
"model" "models/gman.mdl"
|
||||||
"netname" "G-Man"
|
"netname" "G-Man"
|
||||||
"health" "0" // he can't die, he's the G-Man!
|
"health" "" // he can't die, he's the G-Man!
|
||||||
"mins" "-16 -16 0"
|
"mins" "-16 -16 0"
|
||||||
"maxs" "16 16 72"
|
"maxs" "16 16 72"
|
||||||
"eye_height" "64"
|
"eye_height" "64"
|
||||||
"team" "0"
|
"team" "0"
|
||||||
"propdata" "actor_human"
|
"propdata" "actor_robot"
|
||||||
|
|
||||||
"speed_walk" "77"
|
"speed_walk" "77"
|
||||||
"speed_run" "364" // day one only
|
"speed_run" "364" // day one only
|
||||||
|
|
|
@ -3,13 +3,37 @@ entityDef monster_human_assassin
|
||||||
"spawnclass" "NSTalkMonster"
|
"spawnclass" "NSTalkMonster"
|
||||||
"model" "models/hassassin.mdl"
|
"model" "models/hassassin.mdl"
|
||||||
"netname" "Assassin"
|
"netname" "Assassin"
|
||||||
"health" "0"
|
"health" "skill:hassassin_health"
|
||||||
"mins" "-16 -16 0"
|
"mins" "-16 -16 0"
|
||||||
"maxs" "16 16 72"
|
"maxs" "16 16 72"
|
||||||
"eye_height" "64"
|
"eye_height" "64"
|
||||||
"team" "0"
|
"team" "1"
|
||||||
"propdata" "actor_human"
|
"propdata" "actor_human"
|
||||||
|
|
||||||
"speed_walk" "64"
|
"attack_ranged_range" "512"
|
||||||
|
"attack_melee_range" "86"
|
||||||
|
"def_attack_melee" "melee_hassassin_kick"
|
||||||
|
|
||||||
|
"speed_walk" "0"
|
||||||
"speed_run" "364"
|
"speed_run" "364"
|
||||||
|
|
||||||
|
"snd_thud" "monster_generic.thud"
|
||||||
|
|
||||||
|
// animation event callbacks
|
||||||
|
events {
|
||||||
|
1 "SpawnProjectileDef" "ranged_hassassin_shot"
|
||||||
|
1 "StartSoundDef" "monster_human_assassin.fire"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
entityDef melee_hassassin_kick
|
||||||
|
{
|
||||||
|
"damage" "skill:bullsquid_dmg_bite"
|
||||||
|
"delay" "0.25"
|
||||||
|
}
|
||||||
|
|
||||||
|
entityDef ranged_hassassin_shot
|
||||||
|
{
|
||||||
|
"inherit" "projectile_bullet_base"
|
||||||
|
"damage" "skill:9mm_bullet"
|
||||||
}
|
}
|
|
@ -19,7 +19,7 @@ entityDef monster_human_grunt
|
||||||
|
|
||||||
// primary ranged attack
|
// primary ranged attack
|
||||||
"def_attack_ranged" "ranged_hgrunt_mp5"
|
"def_attack_ranged" "ranged_hgrunt_mp5"
|
||||||
"snd_ranged_attack" "weapon_mp5.shoot"
|
"snd_ranged_attack" "Weapon_MP5.Single"
|
||||||
"attack_ranged_range" "1024"
|
"attack_ranged_range" "1024"
|
||||||
"reload_count" "30"
|
"reload_count" "30"
|
||||||
|
|
||||||
|
@ -29,10 +29,9 @@ entityDef monster_human_grunt
|
||||||
"projectile_delay" "1.0"
|
"projectile_delay" "1.0"
|
||||||
|
|
||||||
"snd_idle" "monster_human_grunt.idle"
|
"snd_idle" "monster_human_grunt.idle"
|
||||||
"snd_pain" "monster_human_grunt.pain"
|
"snd_pain" "HGrunt.Pain"
|
||||||
"snd_death" "monster_human_grunt.die"
|
"snd_death" "HGrunt.Die"
|
||||||
"snd_reload" "monster_human_grunt.reload"
|
"snd_reload" "HGrunt.Reload"
|
||||||
"snd_thud" "monster_generic.thud"
|
|
||||||
"weapons" "3"
|
"weapons" "3"
|
||||||
|
|
||||||
"squad_leader_body" "1:2"
|
"squad_leader_body" "1:2"
|
||||||
|
@ -55,16 +54,27 @@ entityDef monster_human_grunt
|
||||||
when "spawnflags" contains 32 {
|
when "spawnflags" contains 32 {
|
||||||
"squad_leader" "1"
|
"squad_leader" "1"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// animation event callbacks
|
||||||
|
events {
|
||||||
|
2 "StartSoundDef" "HGrunt.Reload"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
entityDef melee_hgrunt_kick
|
entityDef melee_hgrunt_kick
|
||||||
{
|
{
|
||||||
|
"spawnclass" "NSProjectile"
|
||||||
|
"is_bullet" "1"
|
||||||
"damage" "skill:hgrunt_kick"
|
"damage" "skill:hgrunt_kick"
|
||||||
"delay" "0.25"
|
"delay" "0.25"
|
||||||
|
"range" "64"
|
||||||
}
|
}
|
||||||
|
|
||||||
entityDef ranged_hgrunt_mp5
|
entityDef ranged_hgrunt_mp5
|
||||||
{
|
{
|
||||||
|
"inherit" "projectile_bullet_base"
|
||||||
"damage" "skill:hgrunt_pellets"
|
"damage" "skill:hgrunt_pellets"
|
||||||
"burst" "3"
|
"burst" "3"
|
||||||
"burst_delay" "0.5"
|
"burst_delay" "0.5"
|
||||||
|
@ -73,6 +83,7 @@ entityDef ranged_hgrunt_mp5
|
||||||
|
|
||||||
entityDef ranged_hgrunt_shot
|
entityDef ranged_hgrunt_shot
|
||||||
{
|
{
|
||||||
|
"inherit" "projectile_bullet_base"
|
||||||
"damage" "skill:hgrunt_pellets"
|
"damage" "skill:hgrunt_pellets"
|
||||||
"delay" "1.0"
|
"delay" "1.0"
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,13 +3,26 @@ entityDef monster_leech
|
||||||
"spawnclass" "NSTalkMonster"
|
"spawnclass" "NSTalkMonster"
|
||||||
"model" "models/leech.mdl"
|
"model" "models/leech.mdl"
|
||||||
"netname" "Leech"
|
"netname" "Leech"
|
||||||
"health" "0"
|
"health" "skill:leech_health"
|
||||||
"mins" "-8 -8 0"
|
"mins" "-8 -8 0"
|
||||||
"maxs" "8 8 8"
|
"maxs" "8 8 8"
|
||||||
"eye_height" "64"
|
"eye_height" "64"
|
||||||
"team" "2"
|
"team" "2"
|
||||||
"propdata" "actor_alien"
|
"propdata" "actor_alien"
|
||||||
|
|
||||||
"speed_walk" "0"
|
"speed_walk" "32"
|
||||||
"speed_run" "0"
|
"speed_run" "64"
|
||||||
|
|
||||||
|
"def_attack_melee" "melee_leech_bite"
|
||||||
|
"melee_range" "24"
|
||||||
|
|
||||||
|
"snd_melee_attack_hit" "monster_zombie.attackhit"
|
||||||
|
}
|
||||||
|
|
||||||
|
entityDef melee_leech_bite
|
||||||
|
{
|
||||||
|
"damage" "skill:zombie_dmg_one_slash"
|
||||||
|
"delay" "0.2"
|
||||||
|
"wait" "2"
|
||||||
|
"attempts" "1"
|
||||||
}
|
}
|
|
@ -7,9 +7,10 @@ entityDef monster_miniturret
|
||||||
"mins" "-16 -16 0"
|
"mins" "-16 -16 0"
|
||||||
"maxs" "16 16 16"
|
"maxs" "16 16 16"
|
||||||
"eye_height" "64"
|
"eye_height" "64"
|
||||||
"team" "2"
|
"team" "1"
|
||||||
"propdata" "actor_robot"
|
"propdata" "actor_robot"
|
||||||
|
|
||||||
"speed_walk" "0"
|
"speed_walk" "0"
|
||||||
"speed_run" "0"
|
"speed_run" "0"
|
||||||
|
"static" "1"
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,4 +12,5 @@ entityDef monster_nihilanth
|
||||||
|
|
||||||
"speed_walk" "0"
|
"speed_walk" "0"
|
||||||
"speed_run" "0"
|
"speed_run" "0"
|
||||||
|
"flying" "1"
|
||||||
}
|
}
|
|
@ -12,4 +12,5 @@ entityDef monster_osprey
|
||||||
|
|
||||||
"speed_walk" "0"
|
"speed_walk" "0"
|
||||||
"speed_run" "0"
|
"speed_run" "0"
|
||||||
|
"flying" "1"
|
||||||
}
|
}
|
|
@ -7,9 +7,36 @@ entityDef monster_sentry
|
||||||
"mins" "-16 -16 0"
|
"mins" "-16 -16 0"
|
||||||
"maxs" "16 16 72"
|
"maxs" "16 16 72"
|
||||||
"eye_height" "64"
|
"eye_height" "64"
|
||||||
"team" "2"
|
"team" "1"
|
||||||
"propdata" "actor_robot"
|
"propdata" "actor_robot"
|
||||||
|
|
||||||
|
"def_attack_ranged" "ranged_sentry_shot"
|
||||||
|
"attack_ranged_range" "1024"
|
||||||
|
|
||||||
|
"snd_idle" "monster_sentry.combatIdle"
|
||||||
|
"snd_death" "monster_sentry.die"
|
||||||
|
"snd_ranged_attack" "monster_sentry.fire"
|
||||||
|
"snd_thud" "monster_generic.thud"
|
||||||
|
|
||||||
|
"act_idle" "0" // when the sentry is turned off.
|
||||||
|
// "act_sleep" "4" // when the sentry retires;The animation is a dupe
|
||||||
|
"act_excited" "3" // waking up
|
||||||
|
"act_dieSimple" "5"
|
||||||
|
"act_dieForward" "5"
|
||||||
|
"act_dieViolent" "5"
|
||||||
|
"act_combatIdle" "2" // scanning
|
||||||
|
"act_rangeAttack1" "1"
|
||||||
|
"act_rangeAttack2" "1"
|
||||||
|
|
||||||
"speed_walk" "0"
|
"speed_walk" "0"
|
||||||
"speed_run" "0"
|
"speed_run" "0"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
entityDef ranged_sentry_shot
|
||||||
|
{
|
||||||
|
"inherit" "projectile_bullet_base"
|
||||||
|
"damage" "skill:hgrunt_pellets"
|
||||||
|
"delay" "0.1"
|
||||||
|
"attempts" "8"
|
||||||
|
"wait" "2"
|
||||||
|
}
|
||||||
|
|
|
@ -7,9 +7,10 @@ entityDef monster_turret
|
||||||
"mins" "-16 -16 0"
|
"mins" "-16 -16 0"
|
||||||
"maxs" "16 16 32"
|
"maxs" "16 16 32"
|
||||||
"eye_height" "64"
|
"eye_height" "64"
|
||||||
"team" "2"
|
"team" "1"
|
||||||
"propdata" "actor_robot"
|
"propdata" "actor_robot"
|
||||||
|
|
||||||
"speed_walk" "0"
|
"speed_walk" "0"
|
||||||
"speed_run" "0"
|
"speed_run" "0"
|
||||||
|
"static" "1"
|
||||||
}
|
}
|
|
@ -12,10 +12,19 @@ entityDef monster_zombie
|
||||||
"speed_walk" "72"
|
"speed_walk" "72"
|
||||||
"speed_run" "72"
|
"speed_run" "72"
|
||||||
|
|
||||||
|
"act_smallFlinch" "3"
|
||||||
|
"act_bigFlinch" "5"
|
||||||
|
"act_flinchHead" "4"
|
||||||
|
"act_flinchChest" "4"
|
||||||
|
"act_flinchStomach" "4"
|
||||||
|
"act_flinchLeftArm" "11"
|
||||||
|
"act_flinchRightArm" "12"
|
||||||
|
"act_flinchLeftLeg" "13"
|
||||||
|
"act_flinchRightLeg" "14"
|
||||||
|
|
||||||
"def_attack_melee" "melee_zombie_stab"
|
"def_attack_melee" "melee_zombie_stab"
|
||||||
"melee_range" "96"
|
"melee_range" "96"
|
||||||
|
|
||||||
|
|
||||||
"snd_sight" "monster_zombie.alert"
|
"snd_sight" "monster_zombie.alert"
|
||||||
"snd_idle" "monster_zombie.idle"
|
"snd_idle" "monster_zombie.idle"
|
||||||
"snd_pain" "monster_zombie.pain"
|
"snd_pain" "monster_zombie.pain"
|
||||||
|
@ -29,7 +38,7 @@ entityDef monster_zombie
|
||||||
entityDef melee_zombie_stab
|
entityDef melee_zombie_stab
|
||||||
{
|
{
|
||||||
"damage" "skill:zombie_dmg_one_slash"
|
"damage" "skill:zombie_dmg_one_slash"
|
||||||
"delay" "0.25f"
|
"delay" "0.5"
|
||||||
"wait" "0.5"
|
"wait" "0.5"
|
||||||
"attempts" "2"
|
"attempts" "2"
|
||||||
}
|
}
|
||||||
|
|
|
@ -110,7 +110,7 @@ entityDef projectile_9mmAR_mp
|
||||||
{
|
{
|
||||||
"inherit" "projectile_bullet_base"
|
"inherit" "projectile_bullet_base"
|
||||||
"damage" "skill:plr_9mmAR_bullet"
|
"damage" "skill:plr_9mmAR_bullet"
|
||||||
"spread" "0.5 0.5"
|
"spread" "0.05 0.05"
|
||||||
}
|
}
|
||||||
|
|
||||||
entityDef fireInfo_9mmAR_mp
|
entityDef fireInfo_9mmAR_mp
|
||||||
|
|
|
@ -42,6 +42,7 @@ entityDef projectile_crowbar
|
||||||
"spawnclass" "NSProjectile"
|
"spawnclass" "NSProjectile"
|
||||||
"damage" "skill:plr_crowbar"
|
"damage" "skill:plr_crowbar"
|
||||||
"is_bullet" "1"
|
"is_bullet" "1"
|
||||||
|
"range" "32"
|
||||||
"decal_impact" "Impact.Shot"
|
"decal_impact" "Impact.Shot"
|
||||||
"detonate_on_world" "1"
|
"detonate_on_world" "1"
|
||||||
"snd_hitBody" "Weapon_Crowbar.Melee_Hit"
|
"snd_hitBody" "Weapon_Crowbar.Melee_Hit"
|
||||||
|
|
|
@ -159,44 +159,72 @@ monster_barney.pain
|
||||||
sample barney/ba_pain1.wav
|
sample barney/ba_pain1.wav
|
||||||
}
|
}
|
||||||
|
|
||||||
monster_bigmomma.alert
|
NPC_BigMomma.SpitTouch1
|
||||||
|
{
|
||||||
|
sample bullchicken/bc_acid1.wav
|
||||||
|
}
|
||||||
|
|
||||||
|
NPC_BigMomma.SpitHit1
|
||||||
|
{
|
||||||
|
sample bullchicken/bc_spithit1.wav
|
||||||
|
}
|
||||||
|
|
||||||
|
NPC_BigMomma.SpitHit2
|
||||||
|
{
|
||||||
|
sample bullchicken/bc_spithit2.wav
|
||||||
|
}
|
||||||
|
|
||||||
|
BigMomma.Alert
|
||||||
{
|
{
|
||||||
sample gonarch/gon_alert1.wav
|
sample gonarch/gon_alert1.wav
|
||||||
sample gonarch/gon_alert2.wav
|
sample gonarch/gon_alert2.wav
|
||||||
sample gonarch/gon_alert3.wav
|
sample gonarch/gon_alert3.wav
|
||||||
}
|
}
|
||||||
|
|
||||||
// the groans for when she spits?
|
BigMomma.Attack
|
||||||
monster_bigmomma.attack
|
|
||||||
{
|
{
|
||||||
sample gonarch/gon_attack1.wav
|
sample gonarch/gon_attack1.wav
|
||||||
sample gonarch/gon_attack2.wav
|
sample gonarch/gon_attack2.wav
|
||||||
sample gonarch/gon_attack3.wav
|
sample gonarch/gon_attack3.wav
|
||||||
}
|
}
|
||||||
|
|
||||||
/ mourns the death of her children
|
// She mourns when her children die, who wouldn't?
|
||||||
monster_bigmomma.child
|
BigMomma.ChildDie
|
||||||
{
|
{
|
||||||
sample gonarch/gon_childdie1.wav
|
sample gonarch/gon_childdie1.wav
|
||||||
sample gonarch/gon_childdie2.wav
|
sample gonarch/gon_childdie2.wav
|
||||||
sample gonarch/gon_childdie3.wav
|
sample gonarch/gon_childdie3.wav
|
||||||
}
|
}
|
||||||
|
|
||||||
monster_bigmomma.die
|
BigMomma.Die
|
||||||
{
|
{
|
||||||
sample gonarch/gon_die1.wav
|
sample gonarch/gon_die1.wav
|
||||||
sample gonarch/gon_die2.wav
|
sample gonarch/gon_die2.wav
|
||||||
sample gonarch/gon_die3.wav
|
sample gonarch/gon_die3.wav
|
||||||
}
|
}
|
||||||
|
|
||||||
monster_bigmomma.idle
|
BigMomma.Sack
|
||||||
{
|
{
|
||||||
sample gonarch/gon_sack1.wav
|
sample gonarch/gon_sack1.wav
|
||||||
sample gonarch/gon_sack2.wav
|
sample gonarch/gon_sack2.wav
|
||||||
sample gonarch/gon_sack3.wav
|
sample gonarch/gon_sack3.wav
|
||||||
}
|
}
|
||||||
|
|
||||||
monster_bigmomma.pain
|
BigMomma.Birth
|
||||||
|
{
|
||||||
|
sample gonarch/gon_sack1.wav
|
||||||
|
sample gonarch/gon_sack2.wav
|
||||||
|
sample gonarch/gon_sack3.wav
|
||||||
|
}
|
||||||
|
|
||||||
|
BigMomma.LaunchMortar
|
||||||
|
{
|
||||||
|
sample gonarch/gon_sack1.wav
|
||||||
|
sample gonarch/gon_sack2.wav
|
||||||
|
sample gonarch/gon_sack3.wav
|
||||||
|
}
|
||||||
|
|
||||||
|
BigMomma.Pain
|
||||||
{
|
{
|
||||||
sample gonarch/gon_pain2.wav
|
sample gonarch/gon_pain2.wav
|
||||||
sample gonarch/gon_pain3.wav
|
sample gonarch/gon_pain3.wav
|
||||||
|
@ -205,7 +233,15 @@ monster_bigmomma.pain
|
||||||
}
|
}
|
||||||
|
|
||||||
// has unique foot step sounds
|
// has unique foot step sounds
|
||||||
monster_bigmomma.step
|
BigMomma.FootstepLeft
|
||||||
|
{
|
||||||
|
sample gonarch/gon_step1.wav
|
||||||
|
sample gonarch/gon_step2.wav
|
||||||
|
sample gonarch/gon_step3.wav
|
||||||
|
}
|
||||||
|
|
||||||
|
// HL:S does this
|
||||||
|
BigMomma.FootstepRight
|
||||||
{
|
{
|
||||||
sample gonarch/gon_step1.wav
|
sample gonarch/gon_step1.wav
|
||||||
sample gonarch/gon_step2.wav
|
sample gonarch/gon_step2.wav
|
||||||
|
|
9
zpak001.pk3dir/default_valve.cfg
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
set hostname "Rad-Therapy Server"
|
||||||
|
set maxplayers "8"
|
||||||
|
|
||||||
|
set con_color "255 150 0"
|
||||||
|
set vgui_color "255 170 0"
|
||||||
|
set cross_color "0 255 0"
|
||||||
|
|
||||||
|
set con_textfont "CONCHARS?fmt=hl"
|
||||||
|
set con_textsize "-12"
|
2
zpak001.pk3dir/fonts/menu_button.font
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
path fonts/nimbus/NimbusSanL-Bol.otf
|
||||||
|
size 14
|
6
zpak001.pk3dir/gfx/background.mat
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
{
|
||||||
|
map $whiteimage
|
||||||
|
rgbGen const (0.25 0.25 0.25)
|
||||||
|
}
|
||||||
|
}
|
3
zpak001.pk3dir/gfx/flags16/CREDITS
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
Flag Icons by Mark James <mjames@gmail.com>
|
||||||
|
https://github.com/markjames/famfamfam-flag-icons
|
||||||
|
http://www.famfamfam.com/lab/icons/flags/
|
BIN
zpak001.pk3dir/gfx/flags16/ad.png
Executable file
After Width: | Height: | Size: 643 B |
BIN
zpak001.pk3dir/gfx/flags16/ae.png
Executable file
After Width: | Height: | Size: 408 B |
BIN
zpak001.pk3dir/gfx/flags16/af.png
Executable file
After Width: | Height: | Size: 604 B |
BIN
zpak001.pk3dir/gfx/flags16/ag.png
Executable file
After Width: | Height: | Size: 591 B |
BIN
zpak001.pk3dir/gfx/flags16/ai.png
Executable file
After Width: | Height: | Size: 643 B |
BIN
zpak001.pk3dir/gfx/flags16/al.png
Executable file
After Width: | Height: | Size: 600 B |
BIN
zpak001.pk3dir/gfx/flags16/am.png
Executable file
After Width: | Height: | Size: 497 B |
BIN
zpak001.pk3dir/gfx/flags16/an.png
Executable file
After Width: | Height: | Size: 488 B |
BIN
zpak001.pk3dir/gfx/flags16/ao.png
Normal file
After Width: | Height: | Size: 428 B |
BIN
zpak001.pk3dir/gfx/flags16/ar.png
Executable file
After Width: | Height: | Size: 506 B |
BIN
zpak001.pk3dir/gfx/flags16/as.png
Executable file
After Width: | Height: | Size: 647 B |
BIN
zpak001.pk3dir/gfx/flags16/at.png
Executable file
After Width: | Height: | Size: 403 B |
BIN
zpak001.pk3dir/gfx/flags16/au.png
Executable file
After Width: | Height: | Size: 673 B |
BIN
zpak001.pk3dir/gfx/flags16/aw.png
Executable file
After Width: | Height: | Size: 524 B |
BIN
zpak001.pk3dir/gfx/flags16/ax.png
Executable file
After Width: | Height: | Size: 663 B |
BIN
zpak001.pk3dir/gfx/flags16/az.png
Executable file
After Width: | Height: | Size: 589 B |
BIN
zpak001.pk3dir/gfx/flags16/ba.png
Executable file
After Width: | Height: | Size: 593 B |
BIN
zpak001.pk3dir/gfx/flags16/bb.png
Executable file
After Width: | Height: | Size: 585 B |
BIN
zpak001.pk3dir/gfx/flags16/bd.png
Executable file
After Width: | Height: | Size: 504 B |
BIN
zpak001.pk3dir/gfx/flags16/be.png
Executable file
After Width: | Height: | Size: 449 B |
BIN
zpak001.pk3dir/gfx/flags16/bf.png
Executable file
After Width: | Height: | Size: 497 B |
BIN
zpak001.pk3dir/gfx/flags16/bg.png
Executable file
After Width: | Height: | Size: 462 B |
BIN
zpak001.pk3dir/gfx/flags16/bh.png
Executable file
After Width: | Height: | Size: 457 B |
BIN
zpak001.pk3dir/gfx/flags16/bi.png
Executable file
After Width: | Height: | Size: 675 B |
BIN
zpak001.pk3dir/gfx/flags16/bj.png
Executable file
After Width: | Height: | Size: 486 B |
BIN
zpak001.pk3dir/gfx/flags16/bm.png
Executable file
After Width: | Height: | Size: 611 B |
BIN
zpak001.pk3dir/gfx/flags16/bn.png
Executable file
After Width: | Height: | Size: 639 B |
BIN
zpak001.pk3dir/gfx/flags16/bo.png
Executable file
After Width: | Height: | Size: 500 B |
BIN
zpak001.pk3dir/gfx/flags16/br.png
Executable file
After Width: | Height: | Size: 593 B |
BIN
zpak001.pk3dir/gfx/flags16/bs.png
Executable file
After Width: | Height: | Size: 526 B |
BIN
zpak001.pk3dir/gfx/flags16/bt.png
Executable file
After Width: | Height: | Size: 631 B |
BIN
zpak001.pk3dir/gfx/flags16/bv.png
Executable file
After Width: | Height: | Size: 512 B |
BIN
zpak001.pk3dir/gfx/flags16/bw.png
Executable file
After Width: | Height: | Size: 443 B |
BIN
zpak001.pk3dir/gfx/flags16/by.png
Executable file
After Width: | Height: | Size: 514 B |
BIN
zpak001.pk3dir/gfx/flags16/bz.png
Executable file
After Width: | Height: | Size: 600 B |
BIN
zpak001.pk3dir/gfx/flags16/ca.png
Executable file
After Width: | Height: | Size: 628 B |
BIN
zpak001.pk3dir/gfx/flags16/catalonia.png
Normal file
After Width: | Height: | Size: 398 B |
BIN
zpak001.pk3dir/gfx/flags16/cc.png
Executable file
After Width: | Height: | Size: 625 B |
BIN
zpak001.pk3dir/gfx/flags16/cd.png
Normal file
After Width: | Height: | Size: 528 B |
BIN
zpak001.pk3dir/gfx/flags16/cf.png
Executable file
After Width: | Height: | Size: 614 B |
BIN
zpak001.pk3dir/gfx/flags16/cg.png
Executable file
After Width: | Height: | Size: 521 B |
BIN
zpak001.pk3dir/gfx/flags16/ch.png
Executable file
After Width: | Height: | Size: 367 B |
BIN
zpak001.pk3dir/gfx/flags16/ci.png
Executable file
After Width: | Height: | Size: 453 B |
BIN
zpak001.pk3dir/gfx/flags16/ck.png
Executable file
After Width: | Height: | Size: 586 B |
BIN
zpak001.pk3dir/gfx/flags16/cl.png
Executable file
After Width: | Height: | Size: 450 B |
BIN
zpak001.pk3dir/gfx/flags16/cm.png
Executable file
After Width: | Height: | Size: 525 B |
BIN
zpak001.pk3dir/gfx/flags16/cn.png
Executable file
After Width: | Height: | Size: 472 B |
BIN
zpak001.pk3dir/gfx/flags16/co.png
Executable file
After Width: | Height: | Size: 483 B |
BIN
zpak001.pk3dir/gfx/flags16/cr.png
Executable file
After Width: | Height: | Size: 477 B |
BIN
zpak001.pk3dir/gfx/flags16/cs.png
Executable file
After Width: | Height: | Size: 439 B |
BIN
zpak001.pk3dir/gfx/flags16/cu.png
Executable file
After Width: | Height: | Size: 563 B |
BIN
zpak001.pk3dir/gfx/flags16/cv.png
Executable file
After Width: | Height: | Size: 529 B |
BIN
zpak001.pk3dir/gfx/flags16/cx.png
Executable file
After Width: | Height: | Size: 608 B |
BIN
zpak001.pk3dir/gfx/flags16/cy.png
Executable file
After Width: | Height: | Size: 428 B |
BIN
zpak001.pk3dir/gfx/flags16/cz.png
Executable file
After Width: | Height: | Size: 476 B |
BIN
zpak001.pk3dir/gfx/flags16/de.png
Executable file
After Width: | Height: | Size: 545 B |
BIN
zpak001.pk3dir/gfx/flags16/dj.png
Executable file
After Width: | Height: | Size: 572 B |
BIN
zpak001.pk3dir/gfx/flags16/dk.png
Executable file
After Width: | Height: | Size: 495 B |
BIN
zpak001.pk3dir/gfx/flags16/dm.png
Executable file
After Width: | Height: | Size: 620 B |
BIN
zpak001.pk3dir/gfx/flags16/do.png
Executable file
After Width: | Height: | Size: 508 B |
BIN
zpak001.pk3dir/gfx/flags16/dz.png
Executable file
After Width: | Height: | Size: 582 B |
BIN
zpak001.pk3dir/gfx/flags16/ec.png
Executable file
After Width: | Height: | Size: 500 B |
BIN
zpak001.pk3dir/gfx/flags16/ee.png
Executable file
After Width: | Height: | Size: 429 B |