Flashlight: Add the HUD indicator in the 'valve' base
Rewolf: Preparing initial work Effects: Added Gib-Human effect CBaseEntity: Make sure things that are hidden can't be damaged by default. E.g. func_breakables that are hidden func_door_rotating: Minor tweak saving us a few bytes item_food/sodacan: Make bounding box bigger, fix classname check to apply to "player", not "Player" (TW leftover) Damage_Radius: Fix how damage radius checks for brush based entities. Scientist Hunt specific stuff: - impulse 103 test cvar added to destroy everything around the map - scientists can be gibbed - scientists scream when falling - new cvar sh_scialert that spawn scientists alerted - new cvar sh_scispeed that is mirrored from the original mod - new cvar sh_scimax that will limit the amount of scientists spawned by the shdata system - new cvar sh_sciyaw that will randomize the spawn yaw angle when there's no other specified
This commit is contained in:
parent
99a2bd0c4b
commit
7c15bed7bb
25 changed files with 323 additions and 56 deletions
|
@ -8,3 +8,5 @@ qc-progs:
|
|||
$(CC) server/scihunt.src
|
||||
$(CC) client/cstrike.src
|
||||
$(CC) server/cstrike.src
|
||||
$(CC) client/rewolf.src
|
||||
$(CC) server/rewolf.src
|
||||
|
|
|
@ -374,14 +374,21 @@ void CSQC_Parse_Event(void)
|
|||
break;
|
||||
case EV_SPARK:
|
||||
vector vSparkPos, vSparkAngle;
|
||||
vSparkPos_x = readcoord();
|
||||
vSparkPos_y = readcoord();
|
||||
vSparkPos_z = readcoord();
|
||||
vSparkAngle_x = readcoord();
|
||||
vSparkAngle_y = readcoord();
|
||||
vSparkAngle_z = readcoord();
|
||||
vSparkPos[0] = readcoord();
|
||||
vSparkPos[1] = readcoord();
|
||||
vSparkPos[2] = readcoord();
|
||||
vSparkAngle[0] = readcoord();
|
||||
vSparkAngle[1] = readcoord();
|
||||
vSparkAngle[2] = readcoord();
|
||||
Effect_CreateSpark(vSparkPos, vSparkAngle);
|
||||
break;
|
||||
case EV_GIBHUMAN:
|
||||
vector vGibPos, vGibAngle;
|
||||
vGibPos[0] = readcoord();
|
||||
vGibPos[1] = readcoord();
|
||||
vGibPos[2] = readcoord();
|
||||
Effect_GibHuman(vGibPos);
|
||||
break;
|
||||
case EV_BLOOD:
|
||||
vector vBloodPos;
|
||||
vector vBloodAngle;
|
||||
|
@ -399,22 +406,22 @@ void CSQC_Parse_Event(void)
|
|||
case EV_EXPLOSION:
|
||||
vector vExploPos;
|
||||
|
||||
vExploPos_x = readcoord();
|
||||
vExploPos_y = readcoord();
|
||||
vExploPos_z = readcoord();
|
||||
vExploPos[0] = readcoord();
|
||||
vExploPos[1] = readcoord();
|
||||
vExploPos[2] = readcoord();
|
||||
|
||||
Effect_CreateExplosion(vExploPos);
|
||||
break;
|
||||
case EV_MODELGIB:
|
||||
vector vPos;
|
||||
vPos_x = readcoord();
|
||||
vPos_y = readcoord();
|
||||
vPos_z = readcoord();
|
||||
vPos[0] = readcoord();
|
||||
vPos[1] = readcoord();
|
||||
vPos[2] = readcoord();
|
||||
|
||||
vector vSize;
|
||||
vSize_x = readcoord();
|
||||
vSize_y = readcoord();
|
||||
vSize_z = readcoord();
|
||||
vSize[0] = readcoord();
|
||||
vSize[1] = readcoord();
|
||||
vSize[2] = readcoord();
|
||||
|
||||
float fStyle = readbyte();
|
||||
Effect_BreakModel(vPos, vSize, [0,0,0], fStyle);
|
||||
|
@ -435,13 +442,13 @@ void CSQC_Parse_Event(void)
|
|||
vector vOrigin, vNormal;
|
||||
|
||||
iType = (int)readbyte();
|
||||
vOrigin_x = readcoord();
|
||||
vOrigin_y = readcoord();
|
||||
vOrigin_z = readcoord();
|
||||
vOrigin[0] = readcoord();
|
||||
vOrigin[1] = readcoord();
|
||||
vOrigin[2] = readcoord();
|
||||
|
||||
vNormal_x = readcoord();
|
||||
vNormal_y = readcoord();
|
||||
vNormal_z = readcoord();
|
||||
vNormal[0] = readcoord();
|
||||
vNormal[1] = readcoord();
|
||||
vNormal[2] = readcoord();
|
||||
|
||||
Effect_Impact(iType, vOrigin, vNormal);
|
||||
break;
|
||||
|
|
71
Source/client/rewolf.src
Executable file
71
Source/client/rewolf.src
Executable file
|
@ -0,0 +1,71 @@
|
|||
#pragma target fte
|
||||
#pragma progs_dat "../../rewolf/csprogs.dat"
|
||||
|
||||
#define CSQC
|
||||
#define VALVE
|
||||
|
||||
#includelist
|
||||
../builtins.h
|
||||
../defs.h
|
||||
../math.h
|
||||
../materials.h
|
||||
../events.h
|
||||
../entities.h
|
||||
valve/defs.h
|
||||
defs.h
|
||||
vgui.h
|
||||
|
||||
util.c
|
||||
valve/init.c
|
||||
|
||||
../gs-entbase/client.src
|
||||
|
||||
sound.c
|
||||
text.c
|
||||
voice.c
|
||||
|
||||
../shared/valve/animations.c
|
||||
../shared/valve/player.cpp
|
||||
player.c
|
||||
../shared/pmove.c
|
||||
predict.c
|
||||
../shared/decals.c
|
||||
../shared/effects.c
|
||||
../shared/spraylogo.cpp
|
||||
|
||||
../shared/valve/items.h
|
||||
../shared/valve/crosshair.h
|
||||
../shared/valve/weapons.h
|
||||
../shared/valve/w_crowbar.c
|
||||
../shared/valve/w_glock.c
|
||||
../shared/valve/w_python.c
|
||||
../shared/valve/w_mp5.c
|
||||
../shared/valve/w_crossbow.c
|
||||
../shared/valve/w_shotgun.c
|
||||
../shared/valve/w_rpg.c
|
||||
../shared/valve/w_gauss.c
|
||||
../shared/valve/w_egon.c
|
||||
../shared/valve/w_hornetgun.c
|
||||
../shared/valve/w_handgrenade.c
|
||||
../shared/valve/w_tripmine.c
|
||||
../shared/valve/w_satchel.c
|
||||
../shared/valve/w_snark.c
|
||||
../shared/valve/weapons.c
|
||||
|
||||
valve/player.c
|
||||
entities.c
|
||||
|
||||
valve/cmds.c
|
||||
valve/game_event.c
|
||||
events.c
|
||||
valve/view.c
|
||||
view.c
|
||||
damage.c
|
||||
chat.c
|
||||
valve/hud.c
|
||||
valve/hud_weaponselect.c
|
||||
valve/scoreboard.c
|
||||
|
||||
valve/input.c
|
||||
entry.c
|
||||
#endlist
|
|
@ -263,10 +263,18 @@ void HUD_DrawAmmo3(void)
|
|||
void HUD_DrawFlashlight(void)
|
||||
{
|
||||
vector pos;
|
||||
player pl = (player)pSeat->ePlayer;
|
||||
pos = video_mins + [video_res[0] - 48, 16];
|
||||
|
||||
drawsubpic(pos, [32,32], HUD_NUMS, [spr_flash1[0], spr_flash1[1]],
|
||||
|
||||
if (pl.flags & FL_FLASHLIGHT) {
|
||||
drawsubpic(pos, [32,32], HUD_NUMS, [spr_flash1[0], spr_flash1[1]],
|
||||
[spr_flash1[2], spr_flash1[3]], g_hud_color, 1.0, DRAWFLAG_ADDITIVE);
|
||||
drawsubpic(pos, [48,32], HUD_NUMS, [spr_flash2[0], spr_flash2[1]],
|
||||
[spr_flash2[2], spr_flash2[3]], g_hud_color, 1.0, DRAWFLAG_ADDITIVE);
|
||||
} else {
|
||||
drawsubpic(pos, [32,32], HUD_NUMS, [spr_flash1[0], spr_flash1[1]],
|
||||
[spr_flash1[2], spr_flash1[3]], g_hud_color, HUD_ALPHA, DRAWFLAG_ADDITIVE);
|
||||
}
|
||||
}
|
||||
|
||||
void HUD_Draw(void)
|
||||
|
|
|
@ -6,6 +6,7 @@ enum {
|
|||
EV_WEAPON_SECONDARYATTACK,
|
||||
EV_WEAPON_RELOAD,
|
||||
EV_IMPACT,
|
||||
EV_GIBHUMAN,
|
||||
EV_BLOOD,
|
||||
EV_EXPLOSION,
|
||||
EV_SPARK,
|
||||
|
|
|
@ -112,4 +112,5 @@ void CBaseEntity :: Hide ( void )
|
|||
setmodel( this, "" );
|
||||
solid = SOLID_NOT;
|
||||
movetype = MOVETYPE_NONE;
|
||||
takedamage = DAMAGE_NO;
|
||||
}
|
||||
|
|
|
@ -150,14 +150,14 @@ void func_door_rotating::Away(void)
|
|||
if (!(spawnflags & SF_ROT_ONEWAY)) {
|
||||
/* One way doors only work on the Y axis */
|
||||
if (!(spawnflags & SF_ROT_ZAXIS || spawnflags & SF_ROT_XAXIS)) {
|
||||
vector vDifference = eActivator.origin - origin;
|
||||
vector vDifference = (eActivator.origin - eActivator.view_ofs) - origin;
|
||||
vector vAngles = eActivator.angles;
|
||||
vAngles[0] = vAngles[2] = 0;
|
||||
|
||||
makevectors(vAngles);
|
||||
vector vNext = (eActivator.origin + (v_forward * 10)) - origin;
|
||||
vAngles = (eActivator.origin + (v_forward * 10)) - origin;
|
||||
|
||||
if (((vDifference[0] * vNext[1]) - (vDifference[1] * vNext[0])) < 0) {
|
||||
if (((vDifference[0] * vAngles[1]) - (vDifference[1] * vAngles[0])) < 0) {
|
||||
fDirection = -1.0f;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,7 +16,7 @@ class item_food
|
|||
|
||||
void item_food :: Touch ( void )
|
||||
{
|
||||
if ( other.classname != "Player" ) {
|
||||
if ( other.classname != "player" ) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -25,6 +25,7 @@ void item_food :: Touch ( void )
|
|||
bevOwner.m_iReady = TRUE;
|
||||
}
|
||||
|
||||
Damage_Apply(other, this, -1, other.origin, FALSE);
|
||||
solid = SOLID_NOT;
|
||||
remove( this );
|
||||
}
|
||||
|
@ -32,7 +33,7 @@ void item_food :: Touch ( void )
|
|||
void item_food :: Setup ( void )
|
||||
{
|
||||
solid = SOLID_TRIGGER;
|
||||
setsize( this, '-8 -8 -8', '8 8 8' );
|
||||
setsize( this, '-16 -16 -16', '16 16 16' );
|
||||
touch = Touch;
|
||||
|
||||
if ( m_iIsCan ) {
|
||||
|
|
|
@ -12,6 +12,7 @@ var int autocvar_mp_flashlight = TRUE;
|
|||
|
||||
void Effect_Impact( int iType, vector vPos, vector vNormal );
|
||||
void Effect_CreateExplosion( vector vPos );
|
||||
void Effect_GibHuman( vector vPos);
|
||||
void Footsteps_Update( void );
|
||||
|
||||
void TraceAttack_FireBullets( int iShots, vector vPos, int iDamage, vector vecAccuracy);
|
||||
|
|
66
Source/server/rewolf.src
Executable file
66
Source/server/rewolf.src
Executable file
|
@ -0,0 +1,66 @@
|
|||
#pragma target fte
|
||||
#pragma progs_dat "../../rewolf/progs.dat"
|
||||
|
||||
#define QWSSQC
|
||||
#define VALVE
|
||||
|
||||
#includelist
|
||||
../builtins.h
|
||||
../defs.h
|
||||
valve/defs.h
|
||||
../math.h
|
||||
../materials.h
|
||||
../events.h
|
||||
../entities.h
|
||||
defs.h
|
||||
|
||||
../gs-entbase/server.src
|
||||
valve/monster_rat.cpp
|
||||
|
||||
../shared/decals.c
|
||||
../shared/effects.c
|
||||
../shared/spraylogo.cpp
|
||||
|
||||
../shared/valve/player.cpp
|
||||
valve/player.c
|
||||
../shared/pmove.c
|
||||
valve/spectator.c
|
||||
../shared/valve/items.h
|
||||
../shared/valve/crosshair.h
|
||||
../shared/valve/weapons.h
|
||||
../shared/valve/w_crowbar.c
|
||||
../shared/valve/w_glock.c
|
||||
../shared/valve/w_python.c
|
||||
../shared/valve/w_mp5.c
|
||||
../shared/valve/w_crossbow.c
|
||||
../shared/valve/w_shotgun.c
|
||||
../shared/valve/w_rpg.c
|
||||
../shared/valve/w_gauss.c
|
||||
../shared/valve/w_egon.c
|
||||
../shared/valve/w_hornetgun.c
|
||||
../shared/valve/w_handgrenade.c
|
||||
../shared/valve/w_tripmine.c
|
||||
../shared/valve/w_satchel.c
|
||||
../shared/valve/w_snark.c
|
||||
valve/items.cpp
|
||||
../shared/valve/weapons.c
|
||||
|
||||
spawn.c
|
||||
|
||||
valve/client.c
|
||||
client.c
|
||||
|
||||
valve/server.c
|
||||
server.c
|
||||
|
||||
valve/damage.c
|
||||
traceattack.c
|
||||
vox.c
|
||||
|
||||
footsteps.c
|
||||
flashlight.c
|
||||
valve/input.c
|
||||
|
||||
valve/spawn.c
|
||||
entry.c
|
||||
#endlist
|
|
@ -46,6 +46,16 @@ void Game_Input(void)
|
|||
}
|
||||
bprint(PRINT_HIGH, "Respawning all map entities...\n");
|
||||
}
|
||||
|
||||
if (self.impulse == 103) {
|
||||
// Respawn all the entities
|
||||
for (entity a = world; (a = find(a, classname, "func_breakable"));) {
|
||||
func_breakable caw = (func_breakable)a;
|
||||
caw.vDeath(world, 0, 0);
|
||||
}
|
||||
bprint(PRINT_HIGH, "BREAK EVERYTHING!\n");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
self.impulse = 0;
|
||||
|
|
|
@ -6,10 +6,14 @@
|
|||
*
|
||||
****/
|
||||
|
||||
var int autocvar_sh_scialert = FALSE;
|
||||
var int autocvar_sh_scispeed = 40;
|
||||
|
||||
enum {
|
||||
SCI_IDLE,
|
||||
SCI_WALK,
|
||||
SCI_RUN
|
||||
SCI_RUN,
|
||||
SCI_DEAD
|
||||
};
|
||||
|
||||
enum {
|
||||
|
@ -63,7 +67,8 @@ enumflags
|
|||
SCIF_USED,
|
||||
SCIF_SCARED,
|
||||
SCIF_FEAR,
|
||||
SCIF_SEEN
|
||||
SCIF_SEEN,
|
||||
SCIF_FALLING
|
||||
};
|
||||
|
||||
string sci_snddie[] = {
|
||||
|
@ -292,15 +297,13 @@ class monster_scientist:CBaseEntity
|
|||
virtual void() WarnOthers;
|
||||
};
|
||||
|
||||
|
||||
|
||||
void monster_scientist::Gib(void)
|
||||
{
|
||||
takedamage = DAMAGE_NO;
|
||||
Effect_GibHuman(this.origin);
|
||||
Hide();
|
||||
|
||||
for (int i = 0; i < 5; i++) {
|
||||
entity gib = spawn();
|
||||
//gib.think = Util_Remove;
|
||||
gib.nextthink = 10.0f;
|
||||
}
|
||||
}
|
||||
|
||||
void monster_scientist::WarnOthers(void)
|
||||
|
@ -404,7 +407,8 @@ void monster_scientist::Physics(void)
|
|||
}
|
||||
} else if (m_iFlags & SCIF_FEAR) {
|
||||
Scream();
|
||||
input_movevalues = [240, 0, 0];
|
||||
maxspeed = 240 * (autocvar_sh_scispeed/40);
|
||||
input_movevalues = [maxspeed, 0, 0];
|
||||
|
||||
if (m_flTraceTime < time) {
|
||||
traceline(self.origin, self.origin + (v_forward * 32), FALSE, this);
|
||||
|
@ -439,6 +443,15 @@ void monster_scientist::Physics(void)
|
|||
runstandardplayerphysics(this);
|
||||
Footsteps_Update();
|
||||
|
||||
if (!(flags & FL_ONGROUND) && velocity[2] < -100) {
|
||||
if (!(m_iFlags & SCIF_FALLING)) {
|
||||
sound(this, CHAN_VOICE, sci_sndscream[0], 1.0, ATTN_NORM, m_flPitch);
|
||||
}
|
||||
m_iFlags |= SCIF_FALLING;
|
||||
} else {
|
||||
m_iFlags -= (flags & SCIF_FALLING);
|
||||
}
|
||||
|
||||
movetype = MOVETYPE_NONE;
|
||||
}
|
||||
|
||||
|
@ -492,18 +505,27 @@ void monster_scientist::vDeath(int iHitBody)
|
|||
r = floor(random(0,sci_snddie.length));
|
||||
sound(this, CHAN_VOICE, sci_snddie[r], 1.0, ATTN_NORM, m_flPitch);
|
||||
|
||||
solid = SOLID_CORPSE;
|
||||
takedamage = DAMAGE_NO;
|
||||
frame = SCIA_DIE_SIMPLE + floor(random(0, 6));
|
||||
WarnOthers();
|
||||
|
||||
think = Respawn;
|
||||
nextthink = time + 10.0f;
|
||||
|
||||
m_eUser = world;
|
||||
customphysics = __NULL__;
|
||||
m_iFlags = 0x0;
|
||||
|
||||
think = Respawn;
|
||||
nextthink = time + 10.0f;
|
||||
if (health < -50) {
|
||||
Gib();
|
||||
return;
|
||||
}
|
||||
|
||||
WarnOthers();
|
||||
solid = SOLID_CORPSE;
|
||||
//takedamage = DAMAGE_NO;
|
||||
|
||||
if (style != SCI_DEAD) {
|
||||
frame = SCIA_DIE_SIMPLE + floor(random(0, 6));
|
||||
style = SCI_DEAD;
|
||||
}
|
||||
}
|
||||
|
||||
void monster_scientist::Hide(void)
|
||||
|
@ -536,6 +558,10 @@ void monster_scientist::Respawn(void)
|
|||
health = 50;
|
||||
velocity = [0,0,0];
|
||||
m_iFlags = 0x0;
|
||||
|
||||
if (autocvar_sh_scialert) {
|
||||
m_iFlags |= SCIF_FEAR;
|
||||
}
|
||||
}
|
||||
|
||||
void monster_scientist::monster_scientist(void)
|
||||
|
|
|
@ -6,21 +6,46 @@
|
|||
*
|
||||
****/
|
||||
|
||||
/* If only origin parameters are applied, make something up */
|
||||
var int autocvar_sh_sciyaw = TRUE;
|
||||
|
||||
/* Limit the amount of scientists spawned */
|
||||
var int autocvar_sh_scimax = 30;
|
||||
|
||||
string g_shItemList;
|
||||
|
||||
void SHData_SpawnScientist(void)
|
||||
{
|
||||
static int slimit = 0;
|
||||
if (autocvar_sh_scimax) {
|
||||
if (slimit >= autocvar_sh_scimax) {
|
||||
dprint("shdata: scientist limit hit. ignored\n");
|
||||
remove(self);
|
||||
return;
|
||||
}
|
||||
slimit++;
|
||||
}
|
||||
spawnfunc_monster_scientist();
|
||||
}
|
||||
|
||||
void SHData_New(void)
|
||||
{
|
||||
entity new = spawn();
|
||||
new.origin[0] = stof(argv(1));
|
||||
new.origin[1] = stof(argv(2));
|
||||
new.origin[2] = stof(argv(3));
|
||||
|
||||
if (autocvar_sh_sciyaw) {
|
||||
new.angles[1] = Math_FixDelta(random(0,360));
|
||||
}
|
||||
|
||||
setorigin(new, new.origin);
|
||||
|
||||
entity oldself = self;
|
||||
self = new;
|
||||
|
||||
if (argv(0) == "monster_scientist") {
|
||||
spawnfunc_monster_scientist();
|
||||
SHData_SpawnScientist();
|
||||
} else if (argv(0) == "info_player_team1") {
|
||||
self.classname = "info_player_deathmatch";
|
||||
} else if (argv(0) == "info_player_team2") {
|
||||
|
@ -44,7 +69,7 @@ void SHData_NewAngles(void)
|
|||
self = new;
|
||||
|
||||
if (argv(0) == "monster_scientist") {
|
||||
spawnfunc_monster_scientist();
|
||||
SHData_SpawnScientist();
|
||||
} else if (argv(0) == "info_player_team1") {
|
||||
self.classname = "info_player_deathmatch";
|
||||
} else if (argv(0) == "info_player_team2") {
|
||||
|
|
|
@ -75,7 +75,6 @@ void Damage_Apply(entity eTarget, entity eAttacker, float fDamage, vector vHitPo
|
|||
self = eTarget;
|
||||
|
||||
if (self.health <= 0) {
|
||||
self.health = 0;
|
||||
self.vDeath(trace_surface_id);
|
||||
} else {
|
||||
self.vPain(trace_surface_id);
|
||||
|
@ -163,7 +162,7 @@ void Damage_Radius(vector vOrigin, entity eAttacker, float fDamage, float fRadiu
|
|||
fDamage = rint(fDamage * fDiff);
|
||||
|
||||
if (fDiff > 0) {
|
||||
Damage_Apply(eDChain, eAttacker, fDamage, eDChain.origin, 0);
|
||||
Damage_Apply(eDChain, eAttacker, fDamage, vecRealPos, 0);
|
||||
/*if (eDChain.movetype != MOVETYPE_NONE) {
|
||||
vPush = vectoangles(vecRealPos - vOrigin);
|
||||
makevectors(vPush);
|
||||
|
|
|
@ -81,3 +81,12 @@ void Decals_PlaceScorch(vector pos)
|
|||
decal.nextthink = time /*+ 0.1f*/;
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef CSQC
|
||||
float Effect_Decal(void)
|
||||
{
|
||||
adddecal(self.classname, self.origin, self.mins, self.maxs, self.color, 1.0f);
|
||||
addentity(self);
|
||||
return PREDRAW_NEXT;
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -7,6 +7,15 @@
|
|||
****/
|
||||
|
||||
#ifdef CSQC
|
||||
|
||||
string g_hgibs[] = {
|
||||
"models/gib_b_bone.mdl",
|
||||
"models/gib_legbone.mdl",
|
||||
"models/gib_lung.mdl",
|
||||
"models/gib_skull.mdl",
|
||||
"models/gib_b_gib.mdl"
|
||||
};
|
||||
|
||||
void Effects_Init(void)
|
||||
{
|
||||
precache_model("sprites/fexplo.spr");
|
||||
|
@ -49,6 +58,11 @@ void Effects_Init(void)
|
|||
precache_sound("weapons/ric3.wav");
|
||||
precache_sound("weapons/ric4.wav");
|
||||
precache_sound("weapons/ric5.wav");
|
||||
precache_sound("common/bodysplat.wav");
|
||||
|
||||
for (int i = 0; i < g_hgibs.length; i++) {
|
||||
precache_model(g_hgibs[i]);
|
||||
}
|
||||
|
||||
// Half-Life only has generic ric1-5
|
||||
#ifdef CSTRIKE
|
||||
|
@ -61,6 +75,41 @@ void Effects_Init(void)
|
|||
}
|
||||
#endif
|
||||
|
||||
|
||||
void Effect_GibHuman(vector pos) {
|
||||
#ifdef SSQC
|
||||
WriteByte(MSG_MULTICAST, SVC_CGAMEPACKET);
|
||||
WriteByte(MSG_MULTICAST, EV_GIBHUMAN);
|
||||
WriteCoord(MSG_MULTICAST, pos[0]);
|
||||
WriteCoord(MSG_MULTICAST, pos[1]);
|
||||
WriteCoord(MSG_MULTICAST, pos[2]);
|
||||
msg_entity = __NULL__;
|
||||
multicast(pos, MULTICAST_PVS);
|
||||
#else
|
||||
static void Gib_Remove(void) {
|
||||
remove(self);
|
||||
}
|
||||
for (int i = 0; i < 5; i++) {
|
||||
|
||||
vector vel;
|
||||
vel[0] = random(-128,128);
|
||||
vel[1] = random(-128,128);
|
||||
vel[2] = (300 + random() * 64);
|
||||
|
||||
entity gibb = spawn();
|
||||
setmodel(gibb, g_hgibs[i]);
|
||||
setorigin(gibb, pos);
|
||||
gibb.movetype = MOVETYPE_BOUNCE;
|
||||
gibb.velocity = vel;
|
||||
gibb.avelocity = vectoangles(gibb.velocity);
|
||||
gibb.think = Gib_Remove;
|
||||
gibb.nextthink = time + 5.0f;
|
||||
gibb.drawmask = MASK_ENGINE;
|
||||
}
|
||||
pointsound(pos, "common/bodysplat.wav", 1, ATTN_NORM);
|
||||
#endif
|
||||
}
|
||||
|
||||
void Effect_CreateExplosion(vector vPos) {
|
||||
#ifdef SSQC
|
||||
Decals_PlaceScorch(vPos);
|
||||
|
@ -408,12 +457,3 @@ void Effect_BreakModel(vector vMins, vector vMaxs, vector vVel, float fStyle) {
|
|||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef CSQC
|
||||
float Effect_Decal(void)
|
||||
{
|
||||
adddecal(self.classname, self.origin, self.mins, self.maxs, self.color, 1.0f);
|
||||
addentity(self);
|
||||
return PREDRAW_NEXT;
|
||||
}
|
||||
#endif
|
||||
|
|
Binary file not shown.
Binary file not shown.
BIN
rewolf/csprogs.dat
Normal file
BIN
rewolf/csprogs.dat
Normal file
Binary file not shown.
BIN
rewolf/progs.dat
Normal file
BIN
rewolf/progs.dat
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
valve/menu.dat
BIN
valve/menu.dat
Binary file not shown.
BIN
valve/progs.dat
BIN
valve/progs.dat
Binary file not shown.
Loading…
Reference in a new issue