Initial work on some more of the gamemodes, specifically Live In Fear
This commit is contained in:
parent
b944425a1d
commit
d4a09b6149
18 changed files with 529 additions and 50 deletions
|
@ -24,6 +24,8 @@ class HLGameRules:CGameRules
|
|||
/* client */
|
||||
virtual void(NSClientPlayer) PlayerSpawn;
|
||||
virtual void(NSClientPlayer) PlayerDeath;
|
||||
virtual bool PlayerRequestRespawn(NSClientPlayer);
|
||||
virtual bool ImpulseCommand(NSClient, float);
|
||||
virtual void(NSClientPlayer) PlayerPostFrame;
|
||||
virtual void(NSClientPlayer, entity) ScientistKill;
|
||||
virtual void(void) RegisterSciDeath;
|
||||
|
@ -55,7 +57,6 @@ class SHTeamRules:HLGameRules
|
|||
|
||||
virtual void(void) RestartRound;
|
||||
virtual void(NSClientPlayer) PlayerSpawn;
|
||||
virtual void(NSClientPlayer) PlayerTeamSpawn;
|
||||
virtual bool(void) IsTeamplay;
|
||||
virtual void(void) AddTeam1Kill;
|
||||
virtual void(void) AddTeam2Kill;
|
||||
|
@ -68,6 +69,8 @@ class SHInvasionRules:HLGameRules
|
|||
{
|
||||
void(void) SHInvasionRules;
|
||||
virtual void(void) RegisterSciDeath;
|
||||
|
||||
virtual string Title(void);
|
||||
};
|
||||
|
||||
/* Standard Hunting (0):
|
||||
|
@ -76,6 +79,8 @@ class SHInvasionRules:HLGameRules
|
|||
class SHGameHunt:SHTeamRules
|
||||
{
|
||||
void(void) SHGameHunt;
|
||||
|
||||
virtual string Title(void);
|
||||
};
|
||||
|
||||
/* Stealth Hunting (1):
|
||||
|
@ -84,6 +89,8 @@ class SHGameHunt:SHTeamRules
|
|||
class SHGameStealth:SHTeamRules
|
||||
{
|
||||
void(void) SHGameStealth;
|
||||
|
||||
virtual string Title(void);
|
||||
};
|
||||
|
||||
/* Traditional Slaughter (2):
|
||||
|
@ -92,14 +99,19 @@ class SHGameStealth:SHTeamRules
|
|||
class SHGameSlaughter:HLGameRules
|
||||
{
|
||||
void(void) SHGameSlaughter;
|
||||
|
||||
virtual string Title(void);
|
||||
};
|
||||
|
||||
/* Live in Fear (3):
|
||||
Unique round-based gamemode where players have to only kill an evil randomly selected player controlled scientist causing chaos. Those who kill good scientists are punished with lost points. The evil scientist gains one point from every kill (NPC or Players). Scientists respawn.
|
||||
*/
|
||||
class SHGameFear:HLGameRules
|
||||
class SHGameFear:SHTeamRules
|
||||
{
|
||||
void(void) SHGameFear;
|
||||
virtual void(NSClientPlayer, entity) ScientistKill;
|
||||
|
||||
virtual string Title(void);
|
||||
};
|
||||
|
||||
/* Madness (4):
|
||||
|
@ -108,6 +120,8 @@ class SHGameFear:HLGameRules
|
|||
class SHGameMadness:HLGameRules
|
||||
{
|
||||
void(void) SHGameMadness;
|
||||
|
||||
virtual string Title(void);
|
||||
};
|
||||
|
||||
/* Invasion (5):
|
||||
|
@ -116,6 +130,8 @@ class SHGameMadness:HLGameRules
|
|||
class SHGameInvasion:SHInvasionRules
|
||||
{
|
||||
void(void) SHGameInvasion;
|
||||
|
||||
virtual string Title(void);
|
||||
};
|
||||
|
||||
typedef enum
|
||||
|
|
|
@ -278,7 +278,6 @@ HLGameRules::CheckRules(void)
|
|||
void
|
||||
HLGameRules::PlayerDeath(NSClientPlayer pl)
|
||||
{
|
||||
|
||||
player sh_pl = (player)pl;
|
||||
|
||||
/* obituary networking */
|
||||
|
@ -343,6 +342,17 @@ HLGameRules::PlayerDeath(NSClientPlayer pl)
|
|||
CheckRules();
|
||||
}
|
||||
|
||||
bool
|
||||
HLGameRules::PlayerRequestRespawn(NSClientPlayer bp)
|
||||
{
|
||||
if (bp.TimeSinceDeath() > 0.5f) {
|
||||
bp.ScheduleThink(PutClientInServer, 0.0f);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void
|
||||
HLGameRules::PlayerSpawn(NSClientPlayer pp)
|
||||
{
|
||||
|
@ -350,6 +360,7 @@ HLGameRules::PlayerSpawn(NSClientPlayer pp)
|
|||
/* this is where the mods want to deviate */
|
||||
entity spot;
|
||||
|
||||
pl.MakePlayer();
|
||||
pl.classname = "player";
|
||||
pl.SetMaxHealth(100);
|
||||
pl.SetHealth(100);
|
||||
|
@ -361,15 +372,21 @@ HLGameRules::PlayerSpawn(NSClientPlayer pp)
|
|||
pl.model = "models/player.mdl";
|
||||
string mymodel = infokey(pl, "model");
|
||||
|
||||
if (mymodel) {
|
||||
mymodel = sprintf("models/player/%s/%s.mdl", mymodel, mymodel);
|
||||
if (whichpack(mymodel)) {
|
||||
pl.model = mymodel;
|
||||
if (pl.team == 1) {
|
||||
pl.model = "models/scientist.mdl";
|
||||
setmodel(pl, pl.model);
|
||||
pl.SetSize(VEC_HULL_MIN + [0, 0, 64], VEC_HULL_MAX + [0, 0, 64]);
|
||||
} else {
|
||||
if (mymodel) {
|
||||
mymodel = sprintf("models/player/%s/%s.mdl", mymodel, mymodel);
|
||||
if (whichpack(mymodel)) {
|
||||
pl.model = mymodel;
|
||||
}
|
||||
}
|
||||
setmodel(pl, pl.model);
|
||||
pl.SetSize(VEC_HULL_MIN, VEC_HULL_MAX);
|
||||
}
|
||||
setmodel(pl, pl.model);
|
||||
|
||||
pl.SetSize(VEC_HULL_MIN, VEC_HULL_MAX);
|
||||
pl.ClearVelocity();
|
||||
pl.gravity = __NULL__;
|
||||
pl.SetFrame(1);
|
||||
|
@ -428,10 +445,15 @@ HLGameRules::PlayerSpawn(NSClientPlayer pp)
|
|||
setorigin(pl, spot.origin);
|
||||
pl.angles = spot.angles;
|
||||
|
||||
pl.g_items = ITEM_CROWBAR | ITEM_GLOCK | ITEM_SUIT;
|
||||
pl.activeweapon = WEAPON_GLOCK;
|
||||
pl.glock_mag = 18;
|
||||
pl.ammo_9mm = 44;
|
||||
if (pl.IsScientist() == true) {
|
||||
pl.g_items = ITEM_NEEDLE | ITEM_SUIT;
|
||||
pl.activeweapon = WEAPON_NEEDLE;
|
||||
} else {
|
||||
pl.g_items = ITEM_CROWBAR | ITEM_GLOCK | ITEM_SUIT;
|
||||
pl.activeweapon = WEAPON_GLOCK;
|
||||
pl.glock_mag = 18;
|
||||
pl.ammo_9mm = 44;
|
||||
}
|
||||
Weapons_RefreshAmmo(pl);
|
||||
SHData_GetItems(pl);
|
||||
|
||||
|
@ -462,13 +484,6 @@ HLGameRules::HLGameRules(void)
|
|||
* have a race condition */
|
||||
forceinfokey(world, "sci_count", "0");
|
||||
|
||||
/* realistic is an odd name, allow people to use sv_gamemode as an alias */
|
||||
if (cvar("sv_gamemode")) {
|
||||
cvar_set("sh_realistic",cvar_string("sv_gamemode"));
|
||||
} else {
|
||||
cvar_set("sv_gamemode",cvar_string("sh_realistic"));
|
||||
}
|
||||
|
||||
/* if the previous map set this value but the current doesn't
|
||||
* then set the default */
|
||||
cvar_set("sh_scispeed","40");
|
||||
|
@ -538,6 +553,7 @@ SHTeamRules::PlayerSpawn(NSClientPlayer pp)
|
|||
{
|
||||
player pl = (player)pp;
|
||||
|
||||
print(sprintf("team: %d\n", pl.team));
|
||||
if (pl.team > 0) {
|
||||
super::PlayerSpawn(pl);
|
||||
return;
|
||||
|
@ -547,15 +563,6 @@ SHTeamRules::PlayerSpawn(NSClientPlayer pp)
|
|||
Spawn_ObserverCam(pl);
|
||||
}
|
||||
|
||||
void
|
||||
SHTeamRules::PlayerTeamSpawn(NSClientPlayer pl)
|
||||
{
|
||||
int red = 0;
|
||||
int blue = 0;
|
||||
|
||||
super::PlayerSpawn(pl);
|
||||
}
|
||||
|
||||
void
|
||||
SHTeamRules::ScientistKill(NSClientPlayer cl, entity sci)
|
||||
{
|
||||
|
@ -667,12 +674,43 @@ SHInvasionRules::PlayerDeath(NSClientPlayer pl)
|
|||
|
||||
}
|
||||
|
||||
string
|
||||
SHInvasionRules::Title(void)
|
||||
{
|
||||
return ("Invasion");
|
||||
}
|
||||
|
||||
void
|
||||
SHInvasionRules::SHInvasionRules(void)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
void
|
||||
TriggerFlashlight(NSClient target)
|
||||
{
|
||||
entity oldself = self;
|
||||
self = target;
|
||||
Flashlight_Toggle();
|
||||
self = oldself;
|
||||
}
|
||||
|
||||
bool
|
||||
HLGameRules::ImpulseCommand(NSClient bp, float num)
|
||||
{
|
||||
switch (num) {
|
||||
case 100:
|
||||
TriggerFlashlight(bp);
|
||||
break;
|
||||
default:
|
||||
return super::ImpulseCommand(bp, num);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void
|
||||
CSEv_JoinAuto(void)
|
||||
{
|
||||
|
@ -704,7 +742,7 @@ CSEv_JoinAuto(void)
|
|||
|
||||
forceinfokey(pl, "*team", sprintf("%d", pl.team));
|
||||
|
||||
rules.PlayerTeamSpawn(pl);
|
||||
rules.PlayerSpawn(pl);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -720,8 +758,9 @@ CSEv_JoinTeam_f(float teamNumber)
|
|||
|
||||
pl.team = teamNumber;
|
||||
forceinfokey(pl, "*team", sprintf("%d", pl.team));
|
||||
breakpoint();
|
||||
|
||||
rules.PlayerTeamSpawn(pl);
|
||||
rules.PlayerSpawn(pl);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -2,4 +2,23 @@ void
|
|||
SHGameFear::SHGameFear(void)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
SHGameFear::ScientistKill(NSClientPlayer pp, entity sci)
|
||||
{
|
||||
player pl = (player)pp;
|
||||
|
||||
if (pl.IsScientist() == true) {
|
||||
pl.frags++;
|
||||
} else {
|
||||
pl.frags--;
|
||||
}
|
||||
}
|
||||
|
||||
string
|
||||
SHGameFear::Title(void)
|
||||
{
|
||||
return ("Stealth");
|
||||
}
|
|
@ -2,4 +2,10 @@ void
|
|||
SHGameHunt::SHGameHunt(void)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
string
|
||||
SHGameHunt::Title(void)
|
||||
{
|
||||
return ("Hunt");
|
||||
}
|
|
@ -3,4 +3,10 @@ SHGameInvasion::SHGameInvasion(void)
|
|||
{
|
||||
|
||||
|
||||
}
|
||||
|
||||
string
|
||||
SHGameInvasion::Title(void)
|
||||
{
|
||||
return ("Invasion");
|
||||
}
|
|
@ -2,4 +2,10 @@ void
|
|||
SHGameMadness::SHGameMadness(void)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
string
|
||||
SHGameMadness::Title(void)
|
||||
{
|
||||
return ("Madness");
|
||||
}
|
|
@ -2,4 +2,10 @@ void
|
|||
SHGameSlaughter::SHGameSlaughter(void)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
string
|
||||
SHGameSlaughter::Title(void)
|
||||
{
|
||||
return ("Slaughter");
|
||||
}
|
|
@ -3,4 +3,10 @@ SHGameStealth::SHGameStealth(void)
|
|||
{
|
||||
|
||||
|
||||
}
|
||||
|
||||
string
|
||||
SHGameStealth::Title(void)
|
||||
{
|
||||
return ("Stealth");
|
||||
}
|
|
@ -29,7 +29,7 @@ SHData_SpawnScientist(void)
|
|||
}
|
||||
slimit++;
|
||||
}
|
||||
spawnfunc_monster_scientist();
|
||||
//spawnfunc_monster_scientist();
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -87,6 +87,11 @@ SHData_NewAngles(void)
|
|||
void
|
||||
SHData_GetItems(player pl)
|
||||
{
|
||||
if (pl.IsScientist() == true) {
|
||||
Weapons_AddItem(pl, WEAPON_NEEDLE, -1);
|
||||
return;
|
||||
}
|
||||
|
||||
/* TODO: Parse the config files */
|
||||
pl.ammo_9mm = 68;
|
||||
pl.ammo_buckshot = 34;
|
||||
|
|
|
@ -31,6 +31,7 @@ weapons.h
|
|||
w_cannon.qc
|
||||
w_chainsaw.qc
|
||||
w_hammer.qc
|
||||
w_needle.qc
|
||||
weapons.qc
|
||||
../../../valve/src/shared/weapon_common.qc
|
||||
#endlist
|
||||
|
|
|
@ -37,7 +37,7 @@
|
|||
#define ITEM_CANNON 0x00040000
|
||||
#define ITEM_CHAINSAW 0x00080000
|
||||
#define ITEM_HAMMER 0x00100000
|
||||
#define ITEM_UNUSED22 0x00200000
|
||||
#define ITEM_NEEDLE 0x00200000
|
||||
#define ITEM_UNUSED23 0x00400000
|
||||
#define ITEM_UNUSED24 0x00800000
|
||||
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
|
||||
|
||||
#include "../../../valve/src/shared/skeleton.h"
|
||||
#include "scianims.h"
|
||||
|
||||
/* all custom SendFlags bits we can possibly send */
|
||||
enumflags
|
||||
|
@ -76,6 +77,7 @@ class player:NSClientPlayer
|
|||
PREDICTED_FLOAT(sh_insanetime)
|
||||
PREDICTED_FLOAT(sh_insaneactive)
|
||||
|
||||
virtual bool IsScientist(void);
|
||||
virtual void Physics_Jump(void);
|
||||
virtual void UpdatePlayerAnimation(float);
|
||||
|
||||
|
@ -83,6 +85,8 @@ class player:NSClientPlayer
|
|||
virtual float Physics_MaxSpeed(void);
|
||||
virtual void Physics_InputPreMove(void);
|
||||
virtual void Physics_InputPostMove(void);
|
||||
virtual void Physics_SetViewParms(void);
|
||||
virtual void Physics_Crouch(void);
|
||||
|
||||
#ifdef CLIENT
|
||||
////virtual void(void) draw;
|
||||
|
@ -103,14 +107,116 @@ class player:NSClientPlayer
|
|||
#endif
|
||||
};
|
||||
|
||||
void
|
||||
SHSciAnim_PlayerUpdate(NSClientPlayer playerTarget)
|
||||
{
|
||||
bool useTopAnim;
|
||||
player pl = (player)playerTarget;
|
||||
|
||||
if (pl.anim_top_delay <= 0.0f) {
|
||||
useTopAnim = false;
|
||||
} else {
|
||||
useTopAnim = true;
|
||||
}
|
||||
|
||||
if (vlen(pl.velocity) == 0) {
|
||||
pl.frame = SCIANIM_IDLE1;
|
||||
} else if (vlen(pl.velocity) < 150) {
|
||||
pl.frame = SCIANIM_WALK;
|
||||
} else if (vlen(pl.velocity) > 150) {
|
||||
pl.frame = SCIANIM_RUN;
|
||||
}
|
||||
|
||||
if (useTopAnim) {
|
||||
pl.frame = pl.anim_top;
|
||||
}
|
||||
|
||||
pl.baseframe = 0;
|
||||
pl.basebone = 0;
|
||||
pl.frame1time = pl.anim_top_time;
|
||||
}
|
||||
|
||||
bool
|
||||
player::IsScientist(void)
|
||||
{
|
||||
#ifdef CLIENT
|
||||
float myTeam = getplayerkeyfloat(this.entnum-1, "*team");
|
||||
#else
|
||||
float myTeam = team;
|
||||
#endif
|
||||
|
||||
return myTeam == 1 ? true : false;
|
||||
}
|
||||
|
||||
#ifndef PHY_VIEWPOS
|
||||
#define PHY_VIEWPOS [0,0,28]
|
||||
#endif
|
||||
|
||||
#ifndef PHY_VIEWPOS_CROUCHED
|
||||
#define PHY_VIEWPOS_CROUCHED [0,0,12]
|
||||
#endif
|
||||
#ifndef PHY_HULL_MIN
|
||||
#define PHY_HULL_MIN [-16,-16,-36]
|
||||
#endif
|
||||
|
||||
#ifndef PHY_HULL_MAX
|
||||
#define PHY_HULL_MAX [16,16,36]
|
||||
#endif
|
||||
|
||||
#ifndef PHY_HULL_CROUCHED_MIN
|
||||
#define PHY_HULL_CROUCHED_MIN [-16,-16,-18]
|
||||
#endif
|
||||
|
||||
#ifndef PHY_HULL_CROUCHED_MAX
|
||||
#define PHY_HULL_CROUCHED_MAX [16,16,18]
|
||||
#endif
|
||||
|
||||
|
||||
void
|
||||
player::Physics_Crouch(void)
|
||||
{
|
||||
if (IsScientist() == true) {
|
||||
view_ofs = PHY_VIEWPOS + [0,0, 36];
|
||||
return;
|
||||
}
|
||||
|
||||
super::Physics_Crouch();
|
||||
}
|
||||
|
||||
void
|
||||
player::Physics_SetViewParms(void)
|
||||
{
|
||||
vector bboxOffset = g_vec_null;
|
||||
|
||||
if (IsScientist() == true) {
|
||||
bboxOffset = [0, 0, 36];
|
||||
}
|
||||
|
||||
if (GetFlags() & FL_CROUCHING) {
|
||||
mins = PHY_HULL_CROUCHED_MIN;
|
||||
maxs = PHY_HULL_CROUCHED_MAX;
|
||||
view_ofs = PHY_VIEWPOS_CROUCHED;
|
||||
} else {
|
||||
mins = PHY_HULL_MIN;
|
||||
maxs = PHY_HULL_MAX;
|
||||
view_ofs = PHY_VIEWPOS;
|
||||
}
|
||||
SetSize(mins + bboxOffset, maxs + bboxOffset);
|
||||
}
|
||||
|
||||
void Animation_PlayerUpdate(player);
|
||||
void Animation_TimerUpdate(player, float);
|
||||
|
||||
void
|
||||
player::UpdatePlayerAnimation(float timelength)
|
||||
{
|
||||
/* calculate our skeletal progression */
|
||||
Animation_PlayerUpdate(this);
|
||||
if (IsScientist() == true) {
|
||||
SHSciAnim_PlayerUpdate(this);
|
||||
} else {
|
||||
/* calculate our skeletal progression */
|
||||
Animation_PlayerUpdate(this);
|
||||
}
|
||||
|
||||
/* advance animation timers */
|
||||
Animation_TimerUpdate(this, timelength);
|
||||
}
|
||||
|
@ -152,9 +258,15 @@ player::UpdateAliveCam(void)
|
|||
.string oldmodel;
|
||||
string Weapons_GetPlayermodel(player, int);
|
||||
|
||||
|
||||
void
|
||||
player::UpdatePlayerAttachments(bool visible)
|
||||
{
|
||||
if (IsScientist()) {
|
||||
p_model.modelindex = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
/* draw the flashlight */
|
||||
if (gflags & GF_FLASHLIGHT) {
|
||||
vector src;
|
||||
|
|
130
src/shared/scianims.h
Normal file
130
src/shared/scianims.h
Normal file
|
@ -0,0 +1,130 @@
|
|||
typedef enum {
|
||||
SCIANIM_WALK = 0,
|
||||
SCIANIM_WALK_SCARED = 1,
|
||||
SCIANIM_RUN = 2,
|
||||
SCIANIM_RUN1 = 3,
|
||||
SCIANIM_RUN2 = 4,
|
||||
SCIANIM_180_LEFT = 5,
|
||||
SCIANIM_180_RIGHT = 6,
|
||||
SCIANIM_FLINCH = 7,
|
||||
SCIANIM_FLINCH1 = 8,
|
||||
SCIANIM_LAFLINCH = 9,
|
||||
SCIANIM_RAFLINCH = 10,
|
||||
SCIANIM_LLFLINCH = 11,
|
||||
SCIANIM_RLFLINCH = 12,
|
||||
SCIANIM_IDLE1 = 13,
|
||||
SCIANIM_IDLE3 = 14,
|
||||
SCIANIM_IDLE4 = 15,
|
||||
SCIANIM_IDLE5 = 16,
|
||||
SCIANIM_IDLE6 = 17,
|
||||
SCIANIM_IDLE7 = 18,
|
||||
SCIANIM_CROUCHSTAND = 19,
|
||||
SCIANIM_CROUCH_IDLE = 20,
|
||||
SCIANIM_CROUCH_IDLE2 = 21,
|
||||
SCIANIM_CROUCH_IDLE3 = 22,
|
||||
SCIANIM_CROUCH_IDLE3 = 23,
|
||||
SCIANIM_PANIC = 24,
|
||||
SCIANIM_FEAR1 = 25,
|
||||
SCIANIM_FEAR2 = 26,
|
||||
SCIANIM_EYE_WIPE = 27,
|
||||
SCIANIM_PULL_NEEDLE = 28,
|
||||
SCIANIM_RETURN_NEEDLE = 29,
|
||||
SCIANIM_GIVE_SHOT = 30,
|
||||
SCIANIM_DIESIMPLE = 31,
|
||||
SCIANIM_DIEFORWARD = 32,
|
||||
SCIANIM_DIEFORWARD1 = 33,
|
||||
SCIANIM_DIEBACKWARD = 34,
|
||||
SCIANIM_HEADSHOT = 35,
|
||||
SCIANIM_GUTSHOT = 36,
|
||||
SCIANIM_LYING_ON_BACK = 37,
|
||||
SCIANIM_LYING_ON_STOMACH = 38,
|
||||
SCIANIM_DEAD_SITTING = 39,
|
||||
SCIANIM_DEAD_TABLE1 = 40,
|
||||
SCIANIM_DEAD_TABLE2 = 41,
|
||||
SCIANIM_DEAD_TABLE3 = 42,
|
||||
SCIANIM_BARNACLED1 = 43,
|
||||
SCIANIM_BARNACLED2 = 44,
|
||||
SCIANIM_BARNACLED3 = 45,
|
||||
SCIANIM_BARNACLED4 = 46,
|
||||
SCIANIM_CONSOLE = 47,
|
||||
SCIANIM_CHECKTIE = 48,
|
||||
SCIANIM_DRYHANDS = 49,
|
||||
SCIANIM_TIESHOE = 50,
|
||||
SCIANIM_WRITEBOARD = 51,
|
||||
SCIANIM_STUDYCART = 52,
|
||||
SCIANIM_LEAN = 53,
|
||||
SCIANIM_PONDERING = 54,
|
||||
SCIANIM_PONDERING2 = 55,
|
||||
SCIANIM_PONDERING3 = 56,
|
||||
SCIANIM_BUYSODA = 57,
|
||||
SCIANIM_PAUSE = 58,
|
||||
SCIANIM_YES = 59,
|
||||
SCIANIM_NO = 60,
|
||||
SCIANIM_PUSH_BUTTON = 61,
|
||||
SCIANIM_CONVERSE1 = 62,
|
||||
SCIANIM_CONVERSE2 = 63,
|
||||
SCIANIM_RETINA = 64,
|
||||
SCIANIM_TALKLEFT = 65,
|
||||
SCIANIM_TALKRIGHT = 66,
|
||||
SCIANIM_DESKIDLE = 67,
|
||||
SCIANIM_COFFEE = 68,
|
||||
SCIANIM_FRANTICBUTTON = 69,
|
||||
SCIANIM_STARTLE = 70,
|
||||
SCIANIM_SITLOOKLEFT = 71,
|
||||
SCIANIM_SITLOOKRIGHT = 72,
|
||||
SCIANIM_SITSCARED = 73,
|
||||
SCIANIM_SITTING2 = 74,
|
||||
SCIANIM_SITTING3 = 75,
|
||||
SCIANIM_CPRSCIENTIST = 76,
|
||||
SCIANIM_CPRSCIENTISTREVIVE = 77,
|
||||
SCIANIM_COWERING_IN_CORNER = 78,
|
||||
SCIANIM_SSTRUGGLEIDLE = 79,
|
||||
SCIANIM_SSTRUGGLE = 80,
|
||||
SCIANIM_HEADCRABBED = 81,
|
||||
SCIANIM_C1A0_CATWALKIDLE = 82,
|
||||
SCIANIM_C1A0_CATWALK = 83,
|
||||
SCIANIM_CEILING_DANGLE = 84,
|
||||
SCIANIM_VENTPULL1 = 85,
|
||||
SCIANIM_VENTPULL2 = 86,
|
||||
SCIANIM_VENTPULLIDLE1 = 87,
|
||||
SCIANIM_VENTPULLIDLE2 = 88,
|
||||
SCIANIM_SITIDLE = 89,
|
||||
SCIANIM_SITSTAND = 90,
|
||||
SCIANIM_KEYPAD = 91,
|
||||
SCIANIM_PANIC1 = 92,
|
||||
SCIANIM_LOOKWINDOW = 93,
|
||||
SCIANIM_WAVE = 94,
|
||||
SCIANIM_PULLDOOR = 95,
|
||||
SCIANIM_BEATDOOR = 96,
|
||||
SCIANIM_FALLINGLOOP = 97,
|
||||
SCIANIM_CRAWLWINDOW = 98,
|
||||
SCIANIM_DIVEWINDOW = 99,
|
||||
SCIANIM_LOCKED_DOOR = 100,
|
||||
SCIANIM_PUSH_BUTTON2 = 101,
|
||||
SCIANIM_UNLOCK_DOOR = 102,
|
||||
SCIANIM_QUICKLOOK = 103,
|
||||
SCIANIM_HANDRAILIDLE = 104,
|
||||
SCIANIM_HANDRAIL = 105,
|
||||
SCIANIM_HANGING_IDLE = 106,
|
||||
SCIANIM_FALL = 107,
|
||||
SCIANIM_SCIENTIST_GET_PULLED = 108,
|
||||
SCIANIM_HANGING_IDLE2 = 109,
|
||||
SCIANIM_FALL_ELEVATOR = 110,
|
||||
SCIANIM_SCIENTIST_IDLEWALL = 111,
|
||||
SCIANIM_ICKYJUMP_SCI = 112,
|
||||
SCIANIM_HAULSCIENTIST = 113,
|
||||
SCIANIM_C1A4_WOUNDED_IDLE = 114,
|
||||
SCIANIM_C1A4_DYING_SPEECH = 115,
|
||||
SCIANIM_TENTACLE_GRAB = 116,
|
||||
SCIANIM_HELICACK = 117,
|
||||
SCIANIM_WINDIVE = 118,
|
||||
SCIANIM_SCICRASHIDLE = 119,
|
||||
SCIANIM_SCICRASH = 120,
|
||||
SCIANIM_ONGUARD = 121,
|
||||
SCIANIM_SEEYA = 122,
|
||||
SCIANIM_ROCKETCRAWL = 123,
|
||||
SCIANIM_PORTAL = 124,
|
||||
SCIANIM_GLUONSHOW = 125,
|
||||
SCIANIM_CROUCH = 126,
|
||||
SCIANIM_KNEEL = 127,
|
||||
} sh_scianims_e;
|
123
src/shared/w_needle.qc
Normal file
123
src/shared/w_needle.qc
Normal file
|
@ -0,0 +1,123 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
void w_needle_precache(void)
|
||||
{
|
||||
}
|
||||
|
||||
void w_needle_updateammo(player pl)
|
||||
{
|
||||
Weapons_UpdateAmmo(pl, -1, -1, -1);
|
||||
}
|
||||
string w_needle_pmodel(player pl)
|
||||
{
|
||||
return __NULL__;
|
||||
}
|
||||
string w_needle_deathmsg(void)
|
||||
{
|
||||
return "%s poisoned %s.";
|
||||
}
|
||||
|
||||
void w_needle_draw(player pl)
|
||||
{
|
||||
}
|
||||
|
||||
void w_needle_holster(player pl)
|
||||
{
|
||||
}
|
||||
|
||||
void w_needle_primary(player pl)
|
||||
{
|
||||
if (pl.w_attack_next > 0.0) {
|
||||
return;
|
||||
}
|
||||
|
||||
vector startTrace = pl.GetEyePos();
|
||||
vector endTrace;
|
||||
|
||||
makevectors(pl.v_angle);
|
||||
endTrace = startTrace + (v_forward * 96);
|
||||
traceline(startTrace, endTrace, MOVE_NORMAL, pl);
|
||||
pl.w_attack_next = 1.0f;
|
||||
Animation_PlayerTop(pl, SCIANIM_PUSH_BUTTON, 1.0f);
|
||||
|
||||
#ifdef SERVER
|
||||
if (trace_fraction >= 1.0) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (trace_ent.takedamage == DAMAGE_NO) {
|
||||
return;
|
||||
}
|
||||
|
||||
if not (trace_ent.flags & FL_CLIENT || trace_ent.flags & FL_MONSTER) {
|
||||
return;
|
||||
}
|
||||
|
||||
Damage_Apply(trace_ent, pl, 7, WEAPON_NEEDLE, DMG_POISON);
|
||||
#endif
|
||||
}
|
||||
|
||||
void w_needle_secondary(player pl)
|
||||
{
|
||||
/* TODO: switch between first/third person */
|
||||
}
|
||||
|
||||
float w_needle_aimanim(player pl)
|
||||
{
|
||||
return 0; /* not used */
|
||||
}
|
||||
|
||||
void w_needle_hudpic(player pl, int s, vector pos, float a)
|
||||
{
|
||||
#ifdef CLIENT
|
||||
if (s) {
|
||||
drawsubpic(pos, [170,45], g_hammer_spr, [0,48/256], [170/256,45/256], g_hud_color, a, DRAWFLAG_ADDITIVE);
|
||||
} else {
|
||||
drawsubpic(pos, [170,45], g_hammer_spr, [0,0], [170/256,45/256], g_hud_color, a, DRAWFLAG_ADDITIVE);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
bool
|
||||
w_needle_isempty(player pl)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
weapon_t w_needle =
|
||||
{
|
||||
.name = "needle",
|
||||
.id = ITEM_NEEDLE,
|
||||
.slot = 0,
|
||||
.slot_pos = 2,
|
||||
.draw = w_needle_draw,
|
||||
.holster = w_needle_holster,
|
||||
.primary = w_needle_primary,
|
||||
.secondary = w_needle_secondary,
|
||||
.reload = __NULL__,
|
||||
.release = __NULL__,
|
||||
.postdraw = __NULL__,
|
||||
.precache = w_needle_precache,
|
||||
.pickup = __NULL__,
|
||||
.updateammo = w_needle_updateammo,
|
||||
.wmodel = __NULL__,
|
||||
.pmodel = w_needle_pmodel,
|
||||
.deathmsg = w_needle_deathmsg,
|
||||
.aimanim = w_needle_aimanim,
|
||||
.isempty = w_needle_isempty,
|
||||
.hudpic = w_needle_hudpic
|
||||
};
|
|
@ -21,6 +21,7 @@ enum
|
|||
WEAPON_CROWBAR,
|
||||
WEAPON_HAMMER,
|
||||
WEAPON_CHAINSAW,
|
||||
WEAPON_NEEDLE,
|
||||
WEAPON_GLOCK,
|
||||
WEAPON_PYTHON,
|
||||
WEAPON_MP5,
|
||||
|
|
|
@ -20,6 +20,7 @@ weapon_t g_weapons[] = {
|
|||
w_crowbar,
|
||||
w_hammer,
|
||||
w_chainsaw,
|
||||
w_needle,
|
||||
w_glock,
|
||||
w_python,
|
||||
w_mp5,
|
||||
|
|
|
@ -50,7 +50,8 @@ seta v_muzzledlight 0
|
|||
// config compat
|
||||
alias mp_timelimit timelimit
|
||||
alias mp_fraglimit fraglimit
|
||||
|
||||
alias sv_gamemode sh_realistic
|
||||
|
||||
// video settings
|
||||
seta gl_overbright 0
|
||||
seta gl_ldr 1
|
||||
|
|
|
@ -3,17 +3,18 @@ WEAPON_NONE 0
|
|||
WEAPON_CROWBAR 1
|
||||
WEAPON_HAMMER 2
|
||||
WEAPON_CHAINSAW 3
|
||||
WEAPON_GLOCK 4
|
||||
WEAPON_PYTHON 5
|
||||
WEAPON_MP5 6
|
||||
WEAPON_SHOTGUN 7
|
||||
WEAPON_CROSSBOW 8
|
||||
WEAPON_CANNON 9
|
||||
WEAPON_RPG 10
|
||||
WEAPON_GAUSS 11
|
||||
WEAPON_EGON 12
|
||||
WEAPON_HORNETGUN 13
|
||||
WEAPON_HANDGRENADE 14
|
||||
WEAPON_SATCHEL 15
|
||||
WEAPON_TRIPMINE 16
|
||||
WEAPON_SNARK 17
|
||||
WEAPON_NEEDLE 4
|
||||
WEAPON_GLOCK 5
|
||||
WEAPON_PYTHON 6
|
||||
WEAPON_MP5 7
|
||||
WEAPON_SHOTGUN 8
|
||||
WEAPON_CROSSBOW 9
|
||||
WEAPON_CANNON 10
|
||||
WEAPON_RPG 11
|
||||
WEAPON_GAUSS 12
|
||||
WEAPON_EGON 13
|
||||
WEAPON_HORNETGUN 14
|
||||
WEAPON_HANDGRENADE 15
|
||||
WEAPON_SATCHEL 16
|
||||
WEAPON_TRIPMINE 17
|
||||
WEAPON_SNARK 18
|
Loading…
Reference in a new issue