Beware. klik of death.

This commit is contained in:
Ragnvald Maartmann-Moe IV 2004-02-09 04:25:00 +00:00
parent cf14b40c95
commit 1cb1b902f9
14 changed files with 889 additions and 655 deletions

View file

@ -6,55 +6,63 @@
#include "mdl.qh"
#include "weapon.qh"
.void() prethink;
.void() actthink;
.void() postthink;
.void () prethink;
.void () actthink;
.void () postthink;
void() PlayerPreThink = {
if (is_cl(self))
PlayerStartFrame();
void ()
PlayerPreThink =
{
if (is_cl (self))
PlayerStartFrame ();
if (self.prethink)
self.prethink();
self.prethink ();
};
void() act_think = {
if (!is_autothink(self)) {
void ()
act_think =
{
if (!is_autothink (self)) {
frametime = 0.1;
PlayerPreThink();
PlayerPreThink ();
}
/*if (0.1 seconds have passed) {*/
if (self.actthink)
self.actthink();
self.actthink ();
if (self.menu_think)
self.menu_think();
self.menu_think ();
if (self.mdl_think && !self.mdl_thought)
self.mdl_think();
self.mdl_think ();
self.mdl_thought = FALSE;
if (self.w_think && !self.w_thought)
self.w_think();
self.w_think ();
self.w_thought = FALSE;
/*}*/
self.nextthink = time + 0.1; /* FIXME: Use sv_mintic here when non-client? */
if (!is_autothink(self))
PlayerPostThink();
if (!is_autothink (self))
PlayerPostThink ();
};
void() PlayerPostThink = {
void ()
PlayerPostThink =
{
if (self.postthink)
self.postthink();
self.postthink ();
if (is_cl(self))
PlayerEndFrame();
if (is_cl (self))
PlayerEndFrame ();
};
void() act_setup = {
void ()
act_setup =
{
self.think = act_think;
self.nextthink = time;
};

View file

@ -5,13 +5,11 @@
#include "damage.qh"
@extern {
.void () prethink;
.void () actthink;
.void () postthink;
.void() prethink;
.void() actthink;
.void() postthink;
void() act_setup;
void () act_setup;
};
#endif

View file

@ -17,8 +17,10 @@
#define STOP_EPSILON 0.1
void() dead_prethink = {
if (vlen(self.movedir) > vlen(self.velocity)) {
void ()
dead_prethink =
{
if (vlen (self.movedir) > vlen (self.velocity)) {
self.velocity = '0 0 0';
} else {
/* FIXME: Use e, decay per frame. */
@ -27,11 +29,14 @@ void() dead_prethink = {
self.pain_finished = time + 0.1;
}
if (self.velocity_x > -STOP_EPSILON && self.velocity_x < STOP_EPSILON)
if ((self.velocity_x > -STOP_EPSILON)
&& (self.velocity_x < STOP_EPSILON))
self.velocity_x = 0;
if (self.velocity_y > -STOP_EPSILON && self.velocity_y < STOP_EPSILON)
if ((self.velocity_y > -STOP_EPSILON)
&& (self.velocity_y < STOP_EPSILON))
self.velocity_y = 0;
if (self.velocity_z > -STOP_EPSILON && self.velocity_z < STOP_EPSILON)
if ((self.velocity_z > -STOP_EPSILON)
&& (self.velocity_z < STOP_EPSILON))
self.velocity_z = 0;
}
@ -48,28 +53,42 @@ void() dead_prethink = {
self.movedir = self.velocity;
};
void() dead_postthink = {
void ()
dead_postthink =
{
local vector vieworg;
self.dmg_take = 0;
self.dmg_save = 0;
vieworg = vieworigin(self);
vieworg = vieworigin (self);
if (pointcontents(vieworg + self.velocity*sv_maxtic) != pointcontents(vieworg)) {
if (pointcontents (vieworg + self.velocity * sv_maxtic)
!= pointcontents (vieworg)) {
self.movetype = MOVETYPE_NONE;
self.velocity = '0 0 0';
setorigin(self, self.origin);
}
};
float() dead_takeitem = { return FALSE; };
float(float d) dead_takedamage = { return FALSE; };
float ()
dead_takeitem =
{
return FALSE;
};
void() act_setup_dead = {
act_setup();
float (float d)
dead_takedamage =
{
return FALSE;
};
weapon_select_by_impulse(0);
void ()
act_setup_dead =
{
act_setup ();
weapon_select_by_impulse (0);
self.solid = SOLID_NOT;
self.takedamage = DAMAGE_NO;
@ -105,16 +124,16 @@ void() act_setup_dead = {
self.mass = 0;
self.movedir = self.velocity;
self.movedir_z -= sv_gravity * sv_maxtic; /* Gravity hack. */
self.movedir_z -= sv_gravity * sv_maxtic; // Gravity hack.
self.pain_finished = time + 0.1;
self.air_finished = time + 2;
override_set_th_takeitem(self, dead_takeitem);
override_set_th_takedamage(self, dead_takedamage);
override_set_th_takeitem (self, dead_takeitem);
override_set_th_takedamage (self, dead_takedamage);
override_set_prethink(self, dead_prethink);
override_set_actthink(self, NOTHING_function);
override_set_postthink(self, dead_postthink);
override_set_prethink (self, dead_prethink);
override_set_actthink (self, NOTHING_function);
override_set_postthink (self, dead_postthink);
dead_postthink(); /* make sure we don't noclip when near walls */
dead_postthink (); // make sure we don't noclip when near walls
};

View file

@ -2,9 +2,7 @@
#define ACT_DEAD_qh 1
@extern {
void() act_setup_dead;
void () act_setup_dead;
};
#endif

View file

@ -15,75 +15,79 @@
#include "override.qh"
void() act_player_init = {
precache_sound("player/plyrjmp8.wav");
precache_sound("player/h2ojump.wav");
void ()
act_player_init =
{
precache_sound ("player/plyrjmp8.wav");
precache_sound ("player/h2ojump.wav");
precache_sound("player/land.wav");
precache_sound("player/land2.wav");
precache_sound ("player/land.wav");
precache_sound ("player/land2.wav");
precache_sound("player/inh2o.wav");
precache_sound("player/slimbrn2.wav");
precache_sound("player/inlava.wav");
precache_sound ("player/inh2o.wav");
precache_sound ("player/slimbrn2.wav");
precache_sound ("player/inlava.wav");
precache_sound("misc/water1.wav");
precache_sound("misc/water2.wav");
precache_sound ("misc/water1.wav");
precache_sound ("misc/water2.wav");
precache_sound("player/drown1.wav");
precache_sound("player/drown2.wav");
precache_sound ("player/drown1.wav");
precache_sound ("player/drown2.wav");
precache_sound("player/lburn1.wav");
precache_sound("player/lburn2.wav");
precache_sound ("player/lburn1.wav");
precache_sound ("player/lburn2.wav");
precache_sound("player/gasp1.wav");
precache_sound("player/gasp2.wav");
precache_sound ("player/gasp1.wav");
precache_sound ("player/gasp2.wav");
precache_sound("misc/outwater.wav");
precache_sound ("misc/outwater.wav");
precache_sound("player/pain1.wav");
precache_sound("player/pain2.wav");
precache_sound("player/pain3.wav");
precache_sound("player/pain4.wav");
precache_sound("player/pain5.wav");
precache_sound("player/pain6.wav");
precache_sound ("player/pain1.wav");
precache_sound ("player/pain2.wav");
precache_sound ("player/pain3.wav");
precache_sound ("player/pain4.wav");
precache_sound ("player/pain5.wav");
precache_sound ("player/pain6.wav");
precache_sound("player/death1.wav");
precache_sound("player/death2.wav");
precache_sound("player/death3.wav");
precache_sound("player/death4.wav");
precache_sound("player/death5.wav");
precache_sound ("player/death1.wav");
precache_sound ("player/death2.wav");
precache_sound ("player/death3.wav");
precache_sound ("player/death4.wav");
precache_sound ("player/death5.wav");
precache_sound("player/gib.wav");
precache_sound("player/udeath.wav");
precache_sound ("player/gib.wav");
precache_sound ("player/udeath.wav");
precache_sound("player/h2odeath.wav");
precache_sound ("player/h2odeath.wav");
precache_model("progs/backpack.mdl");
precache_sound("weapons/lock4.wav");
precache_sound("items/itembk2.wav");
precache_model ("progs/backpack.mdl");
precache_sound ("weapons/lock4.wav");
precache_sound ("items/itembk2.wav");
};
// ========================================================================
void(float scl) player_throw_ammo = {
void (float scl)
player_throw_ammo =
{
local entity player;
player = self;
self = spawn("BACKPACK");
self = spawn ("BACKPACK");
if (scl > 1) {
/* FIXME: This is actually a hack to avoid powerups */
#define qg(eid) \
if (equip_query(player, eid)) \
equip_grant(self, eid) \
if (equip_query (player, eid)) \
equip_grant (self, eid) \
qg(EQUIPID_SUPER_SHOTGUN);
qg(EQUIPID_NAILGUN);
qg(EQUIPID_SUPER_NAILGUN);
qg(EQUIPID_GRENADE_LAUNCHER);
qg(EQUIPID_ROCKET_LAUNCHER);
qg(EQUIPID_LIGHTNING_GUN);
qg (EQUIPID_SUPER_SHOTGUN);
qg (EQUIPID_NAILGUN);
qg (EQUIPID_SUPER_NAILGUN);
qg (EQUIPID_GRENADE_LAUNCHER);
qg (EQUIPID_ROCKET_LAUNCHER);
qg (EQUIPID_LIGHTNING_GUN);
#undef qg
player.itemfield_1 = 0;
@ -103,18 +107,19 @@ void(float scl) player_throw_ammo = {
self.ammo_cells = player.ammo_cells * scl;
player.ammo_cells -= self.ammo_cells;
if (!self.ammo_shells && !self.ammo_nails && !self.ammo_rockets && !self.ammo_cells
&& !self.itemfield_1 && !self.itemfield_2 && !self.itemfield_3 && !self.itemfield_4) {
remove(self);
if (!self.ammo_shells && !self.ammo_nails && !self.ammo_rockets
&& !self.ammo_cells && !self.itemfield_1 && !self.itemfield_2
&& !self.itemfield_3 && !self.itemfield_4) {
remove (self);
self = player;
return;
}
self.origin = center(player);
self.origin = center (player);
self.movetype = MOVETYPE_TOSS;
self.velocity_x = crandom()*100;
self.velocity_y = crandom()*100;
self.velocity_x = crandom () * 100;
self.velocity_y = crandom () * 100;
self.velocity_z = 200;
self.mins = '-16 -16 0';
@ -127,42 +132,51 @@ void(float scl) player_throw_ammo = {
self.wait = -1;
self.think = SUB_remove;
self.nextthink = time + 20 + random()*20;
self.nextthink = time + 20 + random () *20;
item_generic();
item_generic ();
self = player;
};
void() player_die = {
void ()
player_die =
{
local float r;
if (self.health > CONFIG_GIB_HEALTH) {
if (self.waterlevel >= 3) {
self.noise = "player/h2odeath.wav";
} else {
r = random()*5;
if (r < 1) self.noise = "player/death1.wav";
else if (r < 2) self.noise = "player/death2.wav";
else if (r < 3) self.noise = "player/death3.wav";
else if (r < 4) self.noise = "player/death4.wav";
else self.noise = "player/death5.wav";
r = random () * 5;
if (r < 1)
self.noise = "player/death1.wav";
else if (r < 2)
self.noise = "player/death2.wav";
else if (r < 3)
self.noise = "player/death3.wav";
else if (r < 4)
self.noise = "player/death4.wav";
else
self.noise = "player/death5.wav";
}
sound(self, CHAN_VOICE, self.noise, 1, ATTN_NONE);
sound (self, CHAN_VOICE, self.noise, 1, ATTN_NONE);
player_throw_ammo(2);
mdl_bodyque_and_func(MDL_FUNC_DIE, floor(random()*5));
player_throw_ammo (2);
mdl_bodyque_and_func (MDL_FUNC_DIE, floor (random () * 5));
} else {
r = random()*2;
if (r < 1) self.noise = "player/gib.wav";
else self.noise = "player/udeath.wav";
r = random () * 2;
if (r < 1)
self.noise = "player/gib.wav";
else
self.noise = "player/udeath.wav";
sound(self, CHAN_VOICE, self.noise, 1, ATTN_NONE);
mdl_bodyque_and_func(MDL_FUNC_GIB, 0);
sound (self, CHAN_VOICE, self.noise, 1, ATTN_NONE);
mdl_bodyque_and_func (MDL_FUNC_GIB, 0);
}
makevectors(self.angles); /* Not v_angle! */
self.velocity = (v_forward*-200) + (v_up*100);
makevectors (self.angles); /* Not v_angle! */
self.velocity = (v_forward * -200) + (v_up * 100);
if (self.v_angle_x < 75 && self.v_angle_x > -75) {
self.angles = self.v_angle;
@ -171,155 +185,199 @@ void() player_die = {
}
/* FIXME: Hack. */
setorigin(self, vieworigin(self));
RemoveClientFromGame();
setorigin (self, vieworigin (self));
RemoveClientFromGame ();
};
// ========================================================================
float(float d) _player_takedamage_core = {
float (float d)
_player_takedamage_core =
{
self.health -= d;
self.dmg_take += d;
if (floor(self.health) <= 0) {
deathmsg_display();
player_die();
if (floor (self.health) <= 0) {
deathmsg_display ();
player_die ();
} else {
deathmsg_nodisplay();
self.mdl_func(MDL_FUNC_PAIN, d);
deathmsg_nodisplay ();
self.mdl_func (MDL_FUNC_PAIN, d);
}
return TRUE;
};
float(float d) player_takedamage = {
local float r, taked;
float (float d)
player_takedamage =
{
local float taked, r;
damage_push(d);
damage_push (d);
taked = damage_armor(d);
self.dmg_save = self.dmg_save + (d - taked);
taked = damage_armor (d);
self.dmg_save += (d - taked);
if (taked <= 0)
return FALSE;
if (self.pain_finished < time) {
if ((self.mdl_mod & MDL_MOD_SWIM_IN) && self.air_finished < (time + random()*9)) {
r = random()*2;
if (r < 1) self.noise = "player/drown2.wav";
else self.noise = "player/drown1.wav";
if ((self.mdl_mod & MDL_MOD_SWIM_IN) && self.air_finished < (time + random () * 9)) {
r = random () * 2;
if (r < 1)
self.noise = "player/drown2.wav";
else
self.noise = "player/drown1.wav";
} else {
r = random()*5;
if (r < 1) self.noise = "player/pain1.wav";
else if (r < 2) self.noise = "player/pain2.wav";
else if (r < 3) self.noise = "player/pain3.wav";
else if (r < 4) self.noise = "player/pain4.wav";
else if (r < 5) self.noise = "player/pain5.wav";
else self.noise = "player/pain6.wav";
r = random () * 5;
if (r < 1)
self.noise = "player/pain1.wav";
else if (r < 2)
self.noise = "player/pain2.wav";
else if (r < 3)
self.noise = "player/pain3.wav";
else if (r < 4)
self.noise = "player/pain4.wav";
else if (r < 5)
self.noise = "player/pain5.wav";
else
self.noise = "player/pain6.wav";
}
sound(self, CHAN_VOICE, self.noise, 1, ATTN_NORM);
sound (self, CHAN_VOICE, self.noise, 1, ATTN_NORM);
self.pain_finished = time + 1;
}
return _player_takedamage_core(taked);
return _player_takedamage_core (taked);
};
// ========================================================================
float(float d) _player_takedamage_drown = {
float (float d)
_player_takedamage_drown =
{
local float r;
if (d <= 0)
return FALSE;
if (self.pain_finished < time) {
r = random()*2;
if (r < 1) self.noise = self.noise3;
else self.noise = self.noise4;
r = random () * 2;
if (r < 1)
self.noise = self.noise3;
else
self.noise = self.noise4;
sound(self, CHAN_VOICE, self.noise, 1, ATTN_NORM);
sound (self, CHAN_VOICE, self.noise, 1, ATTN_NORM);
self.pain_finished = time + 1;
}
return _player_takedamage_core(d);
return _player_takedamage_core (d);
};
float(float d) _player_takedamage_melt = {
local float r, taked;
float (float d)
_player_takedamage_melt =
{
local float taked, r;
taked = damage_armor(d);
taked = damage_armor (d);
self.dmg_save += d - taked;
if (taked <= 0)
return FALSE;
if (self.pain_finished < time) {
r = random()*2;
if (r < 1) self.noise = self.noise3;
else self.noise = self.noise4;
r = random () * 2;
if (r < 1)
self.noise = self.noise3;
else
self.noise = self.noise4;
sound(self, CHAN_VOICE, self.noise, 1, ATTN_NORM);
sound (self, CHAN_VOICE, self.noise, 1, ATTN_NORM);
self.pain_finished = time + 1;
}
return _player_takedamage_core(taked);
return _player_takedamage_core (taked);
};
float(float d, float(float d) damg_func, void() deathmessage) _player_damage_custom = {
float (float d, float (float d) damg_func, void () deathmessage)
_player_damage_custom =
{
local float ret;
override_set_th_takedamage(self, damg_func);
ret = damage(self, self, world, d, deathmessage);
override_set_th_takedamage(self, player_takedamage);
override_set_th_takedamage (self, damg_func);
ret = damage (self, self, world, d, deathmessage);
override_set_th_takedamage (self, player_takedamage);
return ret;
};
// ========================================================================
void() _deathmsg_player_liquid = {
void ()
_deathmsg_player_liquid =
{
local string def_nname;
local float r;
def_nname = name(self);
def_nname = name (self);
if (self.watertype == CONTENT_WATER) {
r = random()*2;
if (r < 1) bprint(PRINT_DEATH, def_nname, " sleeps with the fishes.\n");
else bprint(PRINT_DEATH, def_nname, " hunts for air.\n");
} else if (self.watertype == CONTENT_SLIME) {
r = random()*2;
if (r < 1) bprint(PRINT_DEATH, def_nname, " can't exist on slime alone.\n");
else bprint(PRINT_DEATH, def_nname, " floats in slime.\n");
} else if (self.watertype == CONTENT_LAVA) {
r = random()*3;
if (r < 1) bprint(PRINT_DEATH, def_nname, " swam in a volcano.\n");
else if (r < 2) bprint(PRINT_DEATH, def_nname, " turned into hot slag.\n");
else bprint(PRINT_DEATH, def_nname, " parties with Chthon.\n");
} else {
bprint(PRINT_DEATH, def_nname, " gulps it down.\n");
switch (self.watertype) {
case CONTENT_WATER:
r = random () * 2;
if (r < 1)
bprint (PRINT_DEATH, def_nname, " sleeps with the fishes.\n");
else
bprint (PRINT_DEATH, def_nname, " hunts for air.\n");
break;
case CONTENT_SLIME:
r = random () * 2;
if (r < 1)
bprint (PRINT_DEATH, def_nname, " can't exist on slime alone.\n");
else
bprint (PRINT_DEATH, def_nname, " floats in slime.\n");
break;
case CONTENT_LAVA:
r = random () * 3;
if (r < 1)
bprint (PRINT_DEATH, def_nname, " swam in a volcano.\n");
else if (r < 2)
bprint (PRINT_DEATH, def_nname, " turned into hot slag.\n");
else
bprint (PRINT_DEATH, def_nname, " parties with Chthon.\n");
break;
default:
bprint (PRINT_DEATH, def_nname, " gulps it down.\n");
break;
}
};
void() _deathmsg_player_fall = {
void ()
_deathmsg_player_fall =
{
local string def_name;
local float r;
def_name = name(self);
def_name = name (self);
r = random()*3;
if (r < 1) bprint(PRINT_DEATH, def_name, " landed head-first.\n");
else if (r < 2) bprint(PRINT_DEATH, def_name, " cratered.\n");
else bprint(PRINT_DEATH, def_name, " took a nose dive into the ground.\n");
r = random () * 3;
if (r < 1)
bprint (PRINT_DEATH, def_name, " landed head-first.\n");
else if (r < 2)
bprint (PRINT_DEATH, def_name, " cratered.\n");
else
bprint (PRINT_DEATH, def_name,
" took a nose dive into the ground.\n");
};
// ========================================================================
/* This is so stupid. */
float() _player_jump = {
float ()
_player_jump =
{
if (!self.button2) {
self.flags |= FL_JUMPRELEASED;
return FALSE;
@ -331,7 +389,7 @@ float() _player_jump = {
if (!(self.flags & FL_JUMPRELEASED))
return FALSE;
self.mdl_func(MDL_FUNC_JUMP, 0);
self.mdl_func (MDL_FUNC_JUMP, 0);
self.flags &= ~FL_JUMPRELEASED;
self.button2 = 0;
@ -339,39 +397,43 @@ float() _player_jump = {
return TRUE;
};
void() _player_water_jump = {
void ()
_player_water_jump =
{
if (self.waterlevel <= 1) {
if (_player_jump())
sound(self, CHAN_BODY, "player/plyrjmp8.wav", 1, ATTN_NORM);
sound (self, CHAN_BODY, "player/plyrjmp8.wav", 1, ATTN_NORM);
return;
}
if (self.waterlevel <= 2) {
if (_player_jump())
sound(self, CHAN_BODY, "misc/water2.wav", 1, ATTN_NORM);
if (_player_jump ())
sound (self, CHAN_BODY, "misc/water2.wav", 1, ATTN_NORM);
}
/* Yeah. The engine is a piece of crap. */
if (self.button2) {
if (self.flags & FL_ONGROUND) {
self.flags = self.flags - FL_ONGROUND;
self.origin_z = self.origin_z + 1;
self.flags &= ~FL_ONGROUND;
self.origin_z++;
}
}
};
/* This is called every frame... */
void() player_prethink = {
void ()
player_prethink =
{
/* Gasp for air if we weren't swimming..
/* Checking here rather than later, with mdl_mod is a HACK */
/* It avoids the gasp when the player hasn't communicated
with the server in a while (it happens..) */
if (self.waterlevel < 3) {
if (self.mdl_mod&MDL_MOD_SWIM_IN) {
if (self.mdl_mod & MDL_MOD_SWIM_IN) {
if (self.air_finished < time)
sound(self, CHAN_VOICE, "player/gasp2.wav", 1, ATTN_NORM);
sound (self, CHAN_VOICE, "player/gasp2.wav", 1, ATTN_NORM);
else if (self.air_finished < (time + 9))
sound(self, CHAN_VOICE, "player/gasp1.wav", 1, ATTN_NORM);
sound (self, CHAN_VOICE, "player/gasp1.wav", 1, ATTN_NORM);
}
self.air_finished = time + 12;
@ -388,11 +450,15 @@ void() player_prethink = {
if (self.watertype == CONTENT_SLIME) {
self.noise3 = "player/lburn1.wav";
self.noise4 = "player/lburn2.wav";
_player_damage_custom(4*self.waterlevel*frametime, _player_takedamage_melt, _deathmsg_player_liquid);
_player_damage_custom (4 * self.waterlevel * frametime,
_player_takedamage_melt,
_deathmsg_player_liquid);
} else if (self.watertype == CONTENT_LAVA) {
self.noise3 = "player/lburn1.wav";
self.noise4 = "player/lburn2.wav";
_player_damage_custom(50*self.waterlevel*frametime, _player_takedamage_melt, _deathmsg_player_liquid);
_player_damage_custom (50 * self.waterlevel * frametime,
_player_takedamage_melt,
_deathmsg_player_liquid);
}
/* Try to breathe :) */
@ -400,22 +466,24 @@ void() player_prethink = {
local float damg;
damg = (time - self.air_finished) * 0.2;
if (damg > 1.5) damg = 1.5;
if (damg > 1.5)
damg = 1.5;
self.noise3 = "player/drown1.wav";
self.noise4 = "player/drown2.wav";
_player_damage_custom(damg, _player_takedamage_drown, _deathmsg_player_liquid);
_player_damage_custom (damg, _player_takedamage_drown,
_deathmsg_player_liquid);
}
/* Enter/exit water, swim sound */
if (!self.waterlevel) {
if (self.flags & FL_INWATER) {
sound(self, CHAN_BODY, "misc/outwater.wav", 1, ATTN_NORM);
self.flags = self.flags - FL_INWATER;
sound (self, CHAN_BODY, "misc/outwater.wav", 1, ATTN_NORM);
self.flags &= ~FL_INWATER;
}
if (_player_jump())
sound(self, CHAN_BODY, "player/plyrjmp8.wav", 1, ATTN_NORM);
sound (self, CHAN_BODY, "player/plyrjmp8.wav", 1, ATTN_NORM);
} else {
if (!(self.flags & FL_INWATER)) {
if (self.watertype == CONTENT_WATER)
@ -424,7 +492,7 @@ void() player_prethink = {
self.noise = "player/slimbrn2.wav";
else if (self.watertype == CONTENT_LAVA)
self.noise = "player/inlava.wav";
sound(self, CHAN_BODY, self.noise, 1, ATTN_NORM);
sound (self, CHAN_BODY, self.noise, 1, ATTN_NORM);
self.flags = (self.flags & ~FL_JUMPRELEASED) | FL_INWATER;
@ -434,39 +502,44 @@ void() player_prethink = {
if (self.mdl_mod&MDL_MOD_SWIM) {
local float increment, mxspeed;
increment = vlen(self.origin - self.pos1);
mxspeed = calc_max_speed(self);
increment = vlen (self.origin - self.pos1);
mxspeed = calc_max_speed (self);
if (increment > mxspeed)
increment = mxspeed;
self.water_finished += increment;
if (self.water_finished >= mxspeed) {
self.water_finished = 0;
if (random() < 0.5) self.noise = "misc/water1.wav";
else self.noise = "misc/water2.wav";
sound(self, CHAN_BODY, self.noise, 1, ATTN_NORM);
if (random () < 0.5)
self.noise = "misc/water1.wav";
else
self.noise = "misc/water2.wav";
sound (self, CHAN_BODY, self.noise, 1, ATTN_NORM);
}
}
_player_water_jump();
_player_water_jump ();
}
self.pos1 = self.origin;
#if DEBUG
debug_impulse();
debug_impulse ();
#endif
weapon_player_impulse();
weapon_player_impulse ();
};
/* This is not called every frame */
void() player_think = {
/* The player does not think. */
void ()
player_think =
{ // The player does not think.
};
/* FIXME: We should check to see if we actually collided.
I don't know how to at the moment... */
void() player_velocity_damage = {
void ()
player_velocity_damage =
{
local vector vel, dir;
local float v1, v2;
@ -478,45 +551,47 @@ void() player_velocity_damage = {
return;
/* Did we slow down a lot? */
v1 = vlen(vel);
v2 = vlen(self.velocity);
v1 = vlen (vel);
v2 = vlen (self.velocity);
if (v2 >= v1)
return;
vel = vel - self.velocity;
vel_z = vel_z * 2;
v1 = vlen(vel);
v1 = vlen (vel);
/* Find the largest magnitude dir */
vel_x = fabs(vel_x);
vel_y = fabs(vel_y);
vel_z = fabs(vel_z);
vel_x = fabs (vel_x);
vel_y = fabs (vel_y);
vel_z = fabs (vel_z);
dir = '0 0 1';
if (vel_y > (vel*dir))
if (vel_y > (vel * dir))
dir = '0 1 0';
if (vel_x > (vel*dir))
if (vel_x > (vel * dir))
dir = '1 0 0';
/* Play sounds, apply damage */
if (v1 > CONFIG_LAND_SOUND) {
if (dir_z && self.watertype == CONTENT_WATER) {
if (dir_z && (self.watertype == CONTENT_WATER)) {
self.noise = "player/h2ojump.wav";
} else if (v1 > CONFIG_LAND_HURT) {
self.noise = "player/land2.wav";
self.pain_finished = time + 1;
damage(self, self, world, 5, _deathmsg_player_fall);
damage (self, self, world, 5, _deathmsg_player_fall);
} else {
self.noise = "player/land.wav";
}
sound(self, CHAN_VOICE, self.noise, 1, ATTN_NORM);
sound (self, CHAN_VOICE, self.noise, 1, ATTN_NORM);
}
};
/* This is also called every frame... */
void() player_postthink = {
player_velocity_damage();
void ()
player_postthink =
{
player_velocity_damage ();
self.items &= ~(IT_ARMOR1|IT_ARMOR2|IT_ARMOR3);
if (self.armortype >= 0.8)
@ -526,100 +601,119 @@ void() player_postthink = {
else if (self.armortype >= 0.3)
self.items |= IT_ARMOR1;
update_weapon_flags();
weapon_set_ammo();
update_weapon_flags ();
weapon_set_ammo ();
};
// ========================================================================
void(float nitem, string str1, string str2) _item_xprint_strs = {
if (!is_cl(self))
void (float nitem, string str1, string str2)
_item_xprint_strs =
{
if (!is_cl (self))
return;
if (!str1)
return;
if (!str1) return;
if (nitem == 1) {
stuffcmd(self, "bf\n");
xprint_start(self, PRINT_LOW);
xprint_str("You get ");
} else if (nitem > 1) xprint_str(", ");
stuffcmd (self, "bf\n");
xprint_start (self, PRINT_LOW);
xprint_str ("You get ");
} else if (nitem > 1)
xprint_str (", ");
xprint_str(str1);
if (str2) xprint_str(str2);
xprint_str (str1);
if (str2)
xprint_str (str2);
};
void(float nitem, string str1, string str2) _item_xprint_strs_last = {
void (float nitem, string str1, string str2)
_item_xprint_strs_last =
{
if (!is_cl(self))
return;
if (!str1) return;
if (!str1)
return;
if (nitem == 1) {
stuffcmd(self, "bf\n");
xprint_start(self, PRINT_LOW);
xprint_str("You get ");
stuffcmd (self, "bf\n");
xprint_start (self, PRINT_LOW);
xprint_str ("You get ");
}
if (nitem == 2) xprint_str(" and ");
else if (nitem > 2) xprint_str(", and ");
if (nitem == 2)
xprint_str (" and ");
else if (nitem > 2)
xprint_str (", and ");
xprint_str(str1);
if (str2) xprint_str(str2);
xprint_str (str1);
if (str2)
xprint_str (str2);
xprint_str("\n");
xprint_str ("\n");
};
float nitem;
string str1, str2;
void(.float fld, float max, string sing, string plur) _player_takefield = {
void (.float fld, float max, string sing, string plur)
_player_takefield =
{
local float new, diff;
new = increase_bound(self.fld, other.fld, max);
if (new > 999) new = 999;
new = increase_bound (self.fld, other.fld, max);
if (new > 999)
new = 999;
if (new > self.fld) {
diff = floor(new) - floor(self.fld);
if (!diff) diff = new - self.fld;
diff = floor (new) - floor (self.fld);
if (!diff)
diff = new - self.fld;
_item_xprint_strs(nitem, str1, str2);
str1 = ftos(diff);
if (diff == 1) str2 = sing;
else str2 = plur;
_item_xprint_strs (nitem, str1, str2);
str1 = ftos (diff);
if (diff == 1)
str2 = sing;
else
str2 = plur;
nitem++;
self.fld = new;
}
};
float() player_takeitem = {
float ()
player_takeitem =
{
local float eid;
nitem = 0;
str1 = NIL;
str2 = NIL;
while ((eid = equip_iter(other)) != -1) {
if (equip_query(self, eid))
while ((eid = equip_iter (other)) != -1) {
if (equip_query (self, eid))
continue;
equip_grant(self, eid);
equip_grant (self, eid);
_item_xprint_strs(nitem, str1, str2);
_item_xprint_strs (nitem, str1, str2);
str1 = "the ";
str2 = equip_id_to_string(eid);
str2 = equip_id_to_string (eid);
nitem++;
}
_player_takefield(ammo_shells, self.max_ammo_shells, " shell", " shells");
_player_takefield(ammo_nails, self.max_ammo_nails, " nail", " nails");
_player_takefield(ammo_rockets, self.max_ammo_rockets, " rocket", " rockets");
_player_takefield(ammo_cells, self.max_ammo_cells, " cell", " cells");
_player_takefield (ammo_shells, self.max_ammo_shells, " shell", " shells");
_player_takefield (ammo_nails, self.max_ammo_nails, " nail", " nails");
_player_takefield (ammo_rockets, self.max_ammo_rockets, " rocket",
" rockets");
_player_takefield (ammo_cells, self.max_ammo_cells, " cell", " cells");
if (other.armorvalue <= self.max_armor) {
if ((other.armorvalue*other.armortype) > (self.armorvalue*self.armortype)) {
if ((other.armorvalue * other.armortype)
> (self.armorvalue * self.armortype)) {
self.armorvalue = other.armorvalue;
self.armortype = other.armortype;
_item_xprint_strs(nitem, str1, str2);
_item_xprint_strs (nitem, str1, str2);
str2 = NIL;
if (self.armortype >= 0.8)
str1 = "strong armor";
@ -633,18 +727,20 @@ float() player_takeitem = {
}
}
_player_takefield(health, self.max_health, " health", " health");
_player_takefield (health, self.max_health, " health", " health");
_item_xprint_strs_last(nitem, str1, str2);
_item_xprint_strs_last (nitem, str1, str2);
if (nitem) return TRUE;
if (nitem)
return TRUE;
return FALSE;
};
// ===================================================================== //
void() act_setup_player = {
act_setup();
void ()
act_setup_player ={
act_setup ();
self.movedir = '0 0 0';
@ -662,11 +758,11 @@ void() act_setup_player = {
self.pain_finished = 0;
self.water_finished = 0;
override_set_th_takeitem(self, player_takeitem);
override_set_th_takeitem (self, player_takeitem);
override_set_th_takedamage(self, player_takedamage);
override_set_th_takedamage (self, player_takedamage);
override_set_prethink(self, player_prethink);
override_set_actthink(self, player_think);
override_set_postthink(self, player_postthink);
override_set_prethink (self, player_prethink);
override_set_actthink (self, player_think);
override_set_postthink (self, player_postthink);
};

View file

@ -2,10 +2,8 @@
#define ACT_PLAYER_qh 1
@extern {
void() act_player_init;
void() act_setup_player;
void () act_player_init;
void () act_setup_player;
};
#endif

View file

@ -15,7 +15,11 @@
/*QUAKED info_null (0 0.5 0) (-4 -4 -4) (4 4 4)
Used as a positional target for spotlights, etc.
*/
void() info_null = { remove(self); };
void ()
info_null =
{
remove (self);
};
// ===============================================================
@ -26,9 +30,11 @@ Default style is 0
If targeted, it will toggle between on or off.
Makes steady fluorescent humming sound
*/
void() light_fluoro = {
void ()
light_fluoro =
{
self.noise = "ambience/fl_hum1.wav";
light();
light ();
};
/*QUAKED light_fluorospark (0 1 0) (-8 -8 -8) (8 8 8)
@ -37,7 +43,9 @@ Default light value is 300
Default style is 10
Makes sparking, broken fluorescent sound
*/
void() light_fluorospark = {
void ()
light_fluorospark =
{
if (!self.style)
self.style = 10;
@ -50,7 +58,9 @@ Sphere globe light.
Default light value is 300
Default style is 0
*/
void() light_globe = {
void ()
light_globe =
{
self.model = "progs/s_light.spr";
light();
};
@ -60,38 +70,46 @@ Short wall torch
Default light value is 200
Default style is 0
*/
void() light_torch_small_walltorch = {
void ()
light_torch_small_walltorch =
{
self.model = "progs/flame.mdl";
self.noise = "ambience/fire1.wav";
light();
light ();
};
/*QUAKED light_flame_large_yellow (0 1 0) (-10 -10 -12) (12 12 18)
Large yellow flame ball
*/
void() light_flame_large_yellow = {
void ()
light_flame_large_yellow =
{
self.model = "progs/flame2.mdl";
self.frame = 1;
self.noise = "ambience/fire1.wav";
light();
light ();
};
/*QUAKED light_flame_small_yellow (0 1 0) (-8 -8 -8) (8 8 8) START_OFF
Small yellow flame ball
*/
void() light_flame_small_yellow = {
void ()
light_flame_small_yellow =
{
self.model = "progs/flame2.mdl";
self.noise = "ambience/fire1.wav";
light();
light ();
};
/*QUAKED light_flame_small_white (0 1 0) (-10 -10 -40) (10 10 40) START_OFF
Small white flame ball
*/
void() light_flame_small_white = {
void ()
light_flame_small_white =
{
self.model = "progs/flame2.mdl";
self.noise = "ambience/fire1.wav";
light();
light ();
};
// ====================================================================
@ -99,7 +117,9 @@ void() light_flame_small_white = {
/*QUAKED misc_explobox2 (0 .5 .8) (0 0 0) (32 32 64)
Smaller exploding box, REGISTERED ONLY
*/
void() misc_explobox2 = {
void ()
misc_explobox2 =
{
self.model = "maps/b_exbox2.bsp";
self.noise = "weapons/r_exp3.wav";
self.dmg = 160;
@ -109,80 +129,102 @@ void() misc_explobox2 = {
self.maxs = '32 32 32';
}
misc_explobox();
misc_explobox ();
};
// ====================================================================
/*QUAKED ambient_suck_wind (0.3 0.1 0.6) (-10 -10 -8) (10 10 8)
*/
void() ambient_suck_wind = {
void ()
ambient_suck_wind =
{
self.noise = "ambience/suck1.wav";
self.volume = 1.0;
info_notnull();
info_notnull ();
};
/*QUAKED ambient_drone (0.3 0.1 0.6) (-10 -10 -8) (10 10 8)
*/
void() ambient_drone = {
void ()
ambient_drone =
{
self.noise = "ambience/drone6.wav";
info_notnull();
info_notnull ();
};
/*QUAKED ambient_flouro_buzz (0.3 0.1 0.6) (-10 -10 -8) (10 10 8)
*/
void() ambient_flouro_buzz = {
void ()
ambient_flouro_buzz =
{
self.noise = "ambience/buzz1.wav";
self.volume = 1.0;
info_notnull();
info_notnull ();
};
/*QUAKED ambient_drip (0.3 0.1 0.6) (-10 -10 -8) (10 10 8)
*/
void() ambient_drip = {
void ()
ambient_drip =
{
self.noise = "ambience/drip1.wav";
info_notnull();
info_notnull ();
};
/*QUAKED ambient_comp_hum (0.3 0.1 0.6) (-10 -10 -8) (10 10 8)
*/
void() ambient_comp_hum = {
void ()
ambient_comp_hum =
{
self.noise = "ambience/comp1.wav";
self.volume = 1.0;
info_notnull();
info_notnull ();
};
/*QUAKED ambient_thunder (0.3 0.1 0.6) (-10 -10 -8) (10 10 8)
*/
void() ambient_thunder = {
void ()
ambient_thunder =
{
self.noise = "ambience/thunder1.wav";
info_notnull();
info_notnull ();
};
/*QUAKED ambient_light_buzz (0.3 0.1 0.6) (-10 -10 -8) (10 10 8)
*/
void() ambient_light_buzz = {
void ()
ambient_light_buzz =
{
self.noise = "ambience/fl_hum1.wav";
info_notnull();
info_notnull ();
};
/*QUAKED ambient_swamp1 (0.3 0.1 0.6) (-10 -10 -8) (10 10 8)
*/
void() ambient_swamp1 = {
void ()
ambient_swamp1 =
{
self.noise = "ambience/swamp1.wav";
info_notnull();
info_notnull ();
};
/*QUAKED ambient_swamp2 (0.3 0.1 0.6) (-10 -10 -8) (10 10 8)
*/
void() ambient_swamp2 = {
void ()
ambient_swamp2 =
{
self.noise = "ambience/swamp2.wav";
info_notnull();
info_notnull ();
};
// ===========================================================================
void() path_corner = { info_notnull(); };
void ()
path_corner =
{
info_notnull ();
};
// ===========================================================================
@ -200,54 +242,71 @@ sounds
4)
set "message" to text string
*/
void() trigger_multiple = {
if (self.sounds == 1) self.noise1 = "misc/secret.wav";
else if (self.sounds == 2) self.noise1 = "misc/talk.wav";
else if (self.sounds == 3) self.noise1 = "misc/trigger1.wav";
void ()
trigger_multiple =
{
switch (self.sounds) {
case 1:
self.noise1 = "misc/secret.wav";
break;
case 2:
self.noise1 = "misc/talk.wav";
break;
case 3:
self.noise1 = "misc/trigger1.wav";
break;
}
trigger_generic();
trigger_generic ();
if (!self.wait) self.wait = 0.2;
if (!self.wait)
self.wait = 0.2;
self.count = 0;
};
/*QUAKED trigger_once (.5 .5 .5) ? notouch
*/
void() trigger_once = {
trigger_multiple();
void ()
trigger_once =
{
trigger_multiple ();
self.count = 1;
};
/*QUAKED trigger_relay (.5 .5 .5) (-8 -8 -8) (8 8 8)
*/
void() trigger_relay = {
void ()
trigger_relay =
{
self.spawnflags |= SPAWNFLAGS_TRIGGER_NOTOUCH;
trigger_multiple();
trigger_multiple ();
};
#define SPAWNFLAGS_NOMESSAGE 1
void() _trigger_counter_use = {
void ()
_trigger_counter_use =
{
local float doprint;
doprint = !(self.spawnflags & SPAWNFLAGS_NOMESSAGE) && is_cl(other);
doprint = !(self.spawnflags & SPAWNFLAGS_NOMESSAGE) && is_cl (other);
self.count--;
if (self.count <= 0) {
if (doprint) centerprint(other, "Sequence completed!");
if (doprint) centerprint (other, "Sequence completed!");
self.count = self.max_health;
util_use_targets();
util_use_targets ();
} else {
if (doprint) {
if (self.count > 3)
centerprint(other, "There are more to go...");
centerprint (other, "There are more to go...");
else if (self.count > 2)
centerprint(other, "Only 3 more to go...");
centerprint (other, "Only 3 more to go...");
else if (self.count > 1)
centerprint(other, "Only 2 more to go...");
centerprint (other, "Only 2 more to go...");
else
centerprint(other, "Only 1 more to go...");
centerprint (other, "Only 1 more to go...");
}
}
};
@ -255,8 +314,10 @@ void() _trigger_counter_use = {
/*QUAKED trigger_counter (.5 .5 .5) ? SPAWNFLAGS_NOMESSAGE
Wait decrease count by 1 until it reaches 0, then activate targets.
*/
void() trigger_counter = {
util_map_entity_init();
void ()
trigger_counter =
{
util_map_entity_init ();
self.model = NIL;
self.modelindex = 0;
@ -272,12 +333,17 @@ void() trigger_counter = {
/*QUAKED trigger_secret (.5 .5 .5) ?
*/
void() trigger_secret = {
if (!self.message) self.message = "You found a secret area!";
if (!self.sounds) self.sounds = 1;
if (self.sounds > 2) self.sounds = 0;
void ()
trigger_secret =
{
if (!self.message)
self.message = "You found a secret area!";
if (!self.sounds)
self.sounds = 1;
if (self.sounds > 2)
self.sounds = 0;
trigger_multiple();
trigger_multiple ();
self.count = 1;
};
@ -286,15 +352,21 @@ void() trigger_secret = {
sets skill level to the value of "message".
Only used on start map.
*/
void() trigger_setskill = { remove(self); };
void ()
trigger_setskill =
{
remove (self);
};
/*QUAKED trigger_onlyregistered (.5 .5 .5) ?
Only fires if playing the registered version, otherwise prints the message
*/
void() trigger_onlyregistered = {
void ()
trigger_onlyregistered =
{
self.message = "";
self.wait = -1;
trigger_generic();
trigger_generic ();
};
/*QUAKED trigger_monsterjump (.5 .5 .5) ?
@ -302,55 +374,66 @@ Walking monsters that touch this will jump in the direction of the trigger's ang
"speed" default to 200, the speed thrown forward
"height" default to 200, the speed thrown upwards
*/
void() trigger_monsterjump = { remove(self); };
void ()
trigger_monsterjump =
{
remove (self);
};
/*QUAKED func_episodegate (0 .5 .8) ? E1 E2 E3 E4
This bmodel will appear if the episode has allready been completed, so players can't reenter it.
*/
void() func_episodegate = {
void ()
func_episodegate =
{
if (!(serverflags & self.spawnflags)) {
remove(self);
remove (self);
return;
}
func_wall();
func_wall ();
};
/*QUAKED func_bossgate (0 .5 .8) ?
This bmodel appears unless players have all of the episode sigils.
*/
void() func_bossgate = {
void ()
func_bossgate =
{
if ((serverflags & 15) == 15) {
remove(self);
remove (self);
return;
}
func_wall();
func_wall ();
};
/* Monsters */
void() monster_boss = { remove(self); };
void() monster_demon1 = { remove(self); };
void() monster_dog = { remove(self); };
void() monster_enforcer = { remove(self); };
void() monster_fish = { remove(self); };
void() monster_hell_knight = { remove(self); };
void() monster_knight = { remove(self); };
void() monster_ogre = { remove(self); };
void() monster_ogre_marksman = { remove(self); };
void() monster_oldone = { remove(self); };
void() monster_shalrath = { remove(self); };
void() monster_shambler = { remove(self); };
void() monster_army = { remove(self); };
void() monster_tarbaby = { remove(self); };
void() monster_wizard = { remove(self); };
void() monster_zombie = { remove(self); };
void () monster_boss = { remove(self); };
void () monster_demon1 = { remove(self); };
void () monster_dog = { remove(self); };
void () monster_enforcer = { remove(self); };
void () monster_fish = { remove(self); };
void () monster_hell_knight = { remove(self); };
void () monster_knight = { remove(self); };
void () monster_ogre = { remove(self); };
void () monster_ogre_marksman = { remove(self); };
void () monster_oldone = { remove(self); };
void () monster_shalrath = { remove(self); };
void () monster_shambler = { remove(self); };
void () monster_army = { remove(self); };
void () monster_tarbaby = { remove(self); };
void () monster_wizard = { remove(self); };
void () monster_zombie = { remove(self); };
// =========================================================================
void() item_weapon = {
if (!self.noise2) self.noise2 = "weapons/pkup.wav";
void ()
item_weapon =
{
if (!self.noise2)
self.noise2 = "weapons/pkup.wav";
if (!self.mins && !self.maxs) {
self.mins = '-16 -16 0';
self.maxs = '16 16 56';
@ -359,67 +442,91 @@ void() item_weapon = {
self.wait = 25;
self.delay = 10;
}
item_generic();
item_generic ();
};
/*QUAKED weapon_supershotgun (0 .5 .8) (-16 -16 0) (16 16 32)
*/
void() weapon_supershotgun = {
void ()
weapon_supershotgun =
{
self.netname = STR_EQUIPID_SUPER_SHOTGUN;
if (!self.model) self.model = "progs/g_shot.mdl";
if (!self.ammo_shells) self.ammo_shells = 5;
equip_grant(self, EQUIPID_SUPER_SHOTGUN);
item_weapon();
if (!self.model)
self.model = "progs/g_shot.mdl";
if (!self.ammo_shells)
self.ammo_shells = 5;
equip_grant (self, EQUIPID_SUPER_SHOTGUN);
item_weapon ();
};
/*QUAKED weapon_nailgun (0 .5 .8) (-16 -16 0) (16 16 32)
*/
void() weapon_nailgun = {
void ()
weapon_nailgun =
{
self.netname = STR_EQUIPID_NAILGUN;
if (!self.model) self.model = "progs/g_nail.mdl";
if (!self.ammo_nails) self.ammo_nails = 30;
equip_grant(self, EQUIPID_NAILGUN);
item_weapon();
if (!self.model)
self.model = "progs/g_nail.mdl";
if (!self.ammo_nails)
self.ammo_nails = 30;
equip_grant (self, EQUIPID_NAILGUN);
item_weapon ();
};
/*QUAKED weapon_supernailgun (0 .5 .8) (-16 -16 0) (16 16 32)
*/
void() weapon_supernailgun = {
void ()
weapon_supernailgun =
{
self.netname = STR_EQUIPID_SUPER_NAILGUN;
if (!self.model) self.model = "progs/g_nail2.mdl";
if (!self.ammo_nails) self.ammo_nails = 30;
equip_grant(self, EQUIPID_SUPER_NAILGUN);
item_weapon();
if (!self.model)
self.model = "progs/g_nail2.mdl";
if (!self.ammo_nails)
self.ammo_nails = 30;
equip_grant (self, EQUIPID_SUPER_NAILGUN);
item_weapon ();
};
/*QUAKED weapon_grenadelauncher (0 .5 .8) (-16 -16 0) (16 16 32)
*/
void() weapon_grenadelauncher = {
void ()
weapon_grenadelauncher =
{
self.netname = STR_EQUIPID_GRENADE_LAUNCHER;
if (!self.model) self.model = "progs/g_rock.mdl";
if (!self.ammo_rockets) self.ammo_rockets = 5;
equip_grant(self, EQUIPID_GRENADE_LAUNCHER);
item_weapon();
if (!self.model)
self.model = "progs/g_rock.mdl";
if (!self.ammo_rockets)
self.ammo_rockets = 5;
equip_grant (self, EQUIPID_GRENADE_LAUNCHER);
item_weapon ();
};
/*QUAKED weapon_rocketlauncher (0 .5 .8) (-16 -16 0) (16 16 32)
*/
void() weapon_rocketlauncher = {
void ()
weapon_rocketlauncher =
{
self.netname = STR_EQUIPID_ROCKET_LAUNCHER;
if (!self.model) self.model = "progs/g_rock2.mdl";
if (!self.ammo_rockets) self.ammo_rockets = 5;
equip_grant(self, EQUIPID_ROCKET_LAUNCHER);
item_weapon();
if (!self.model)
self.model = "progs/g_rock2.mdl";
if (!self.ammo_rockets)
self.ammo_rockets = 5;
equip_grant (self, EQUIPID_ROCKET_LAUNCHER);
item_weapon ();
};
/*QUAKED weapon_lightning (0 .5 .8) (-16 -16 0) (16 16 32)
*/
void() weapon_lightning = {
void ()
weapon_lightning =
{
self.netname = STR_EQUIPID_LIGHTNING_GUN;
if (!self.model) self.model = "progs/g_light.mdl";
if (!self.ammo_cells) self.ammo_cells = 15;
equip_grant(self, EQUIPID_LIGHTNING_GUN);
item_weapon();
if (!self.model)
self.model = "progs/g_light.mdl";
if (!self.ammo_cells)
self.ammo_cells = 15;
equip_grant (self, EQUIPID_LIGHTNING_GUN);
item_weapon ();
};
// ========================================================================
@ -428,7 +535,9 @@ void() weapon_lightning = {
/*QUAKED item_shells (0 .5 .8) (0 0 0) (32 32 32) BIG
*/
void() item_shells = {
void ()
item_shells =
{
if (self.spawnflags & SPAWNFLAGS_AMMO_BIG) {
self.model = "maps/b_shell1.bsp";
self.ammo_shells = 40;
@ -436,12 +545,14 @@ void() item_shells = {
self.model = "maps/b_shell0.bsp";
self.ammo_shells = 20;
}
item_ammo();
item_ammo ();
};
/*QUAKED item_spikes (0 .5 .8) (0 0 0) (32 32 32) BIG
*/
void() item_spikes = {
void ()
item_spikes =
{
if (self.spawnflags & SPAWNFLAGS_AMMO_BIG) {
self.model = "maps/b_nail1.bsp";
self.ammo_nails = 50;
@ -449,12 +560,14 @@ void() item_spikes = {
self.model = "maps/b_nail0.bsp";
self.ammo_nails = 25;
}
item_ammo();
item_ammo ();
};
/*QUAKED item_rockets (0 .5 .8) (0 0 0) (32 32 32) BIG
*/
void() item_rockets = {
void ()
item_rockets =
{
if (self.spawnflags & SPAWNFLAGS_AMMO_BIG) {
self.model = "maps/b_rock1.bsp";
self.ammo_rockets = 10;
@ -462,12 +575,14 @@ void() item_rockets = {
self.model = "maps/b_rock0.bsp";
self.ammo_rockets = 5;
}
item_ammo();
item_ammo ();
};
/*QUAKED item_cells (0 .5 .8) (0 0 0) (32 32 32) BIG
*/
void() item_cells = {
void ()
item_cells =
{
if (self.spawnflags & SPAWNFLAGS_AMMO_BIG) {
self.model = "maps/b_batt1.bsp";
self.ammo_cells = 12;
@ -475,7 +590,7 @@ void() item_cells = {
self.model = "maps/b_batt0.bsp";
self.ammo_cells = 6;
}
item_ammo();
item_ammo ();
};
@ -483,40 +598,48 @@ void() item_cells = {
/*QUAKED item_armor1 (0 .5 .8) (-16 -16 0) (16 16 32)
*/
void() item_armor1 = {
void ()
item_armor1 =
{
self.skin = 0;
self.armorvalue = 100;
self.armortype = 0.3;
item_armor();
item_armor ();
};
/*QUAKED item_armor2 (0 .5 .8) (-16 -16 0) (16 16 32)
*/
void() item_armor2 = {
void ()
item_armor2 =
{
self.skin = 1;
self.armorvalue = 150;
self.armortype = 0.6;
item_armor();
item_armor ();
};
/*QUAKED item_armorInv (0 .5 .8) (-16 -16 0) (16 16 32)
*/
void() item_armorInv = {
void ()
item_armorInv =
{
self.skin = 2;
self.armorvalue = 200;
self.armortype = 0.8;
item_armor();
item_armor ();
};
// ========================================================================
/*QUAKED misc_teleporttrain (0 .5 .8) (-8 -8 -8) (8 8 8)
*/
void() misc_teleporttrain = {
void ()
misc_teleporttrain =
{
self.model = "progs/teleport.mdl";
self.dmg = -1;
self.avelocity = '100 200 300';
func_train();
func_train ();
};

View file

@ -395,7 +395,7 @@ void (string str)
xprint_str =
{
msg_entity = _xprint_client;
WriteBytes (MSG_ONE, (float) SVC_PRINT, _xprint_level);
WriteBytes (MSG_ONE, SVC_PRINT, _xprint_level);
WriteString (MSG_ONE, str);
};

View file

@ -1,99 +1,99 @@
/* Builtin functions */
entity () BUILTIN_spawn = #14;
void (entity e) remove = #15;
entity() BUILTIN_spawn = #14;
void(entity e) remove = #15;
void (entity e, vector o) setorigin = #2;
void (entity e, string m) setmodel = #3; // set movetype and solid first
void (entity e, vector min, vector max) setsize = #4;
void(entity e, vector o) setorigin = #2;
void(entity e, string m) setmodel = #3; // set movetype and solid first
void(entity e, vector min, vector max) setsize = #4;
string (string s) precache_sound = #19;
string (string s) precache_model = #20;
string (string s) precache_file = #68; // no effect except for -copy
string (string s) precache_sound2 = #76; // registered version only
string (string s) precache_model2 = #75; // registered version only
string (string s) precache_file2 = #77; // registered version only
string(string s) precache_sound = #19;
string(string s) precache_model = #20;
string(string s) precache_file = #68; // no effect except for -copy
string(string s) precache_sound2 = #76; // registered version only
string(string s) precache_model2 = #75; // registered version only
string(string s) precache_file2 = #77; // registered version only
void (float style, string value) lightstyle = #35;
// debug functions
void () BUILTIN_break = #6; // shatter progs
void (string e, ...) error = #10;
void (string e, ...) objerror = #11;
void () coredump = #28; // prints all edicts
void () traceon = #29; // turns statment trace on
void () traceoff = #30;
void() BUILTIN_break = #6; // shatter progs
void(string e, ...) error = #10;
void(string e, ...) objerror = #11;
void() coredump = #28; // prints all edicts
void() traceon = #29; // turns statment trace on
void() traceoff = #30;
void (entity e, float chan, string samp, float vol, float atten) sound = #8;
void(entity e, float chan, string samp, float vol, float atten) sound = #8;
void (vector ang) makevectors = #1; // sets v_forward, etc globals
vector (vector v) normalize = #9;
float (vector v) vlen = #12;
float (vector v) vectoyaw = #13;
vector (vector v) vectoangles = #51;
vector (entity e, float speed) aim = #44; // returns the shooting vector
void(vector ang) makevectors = #1; // sets v_forward, etc globals
vector(vector v) normalize = #9;
float(vector v) vlen = #12;
float(vector v) vectoyaw = #13;
vector(vector v) vectoangles = #51;
vector(entity e, float speed) aim = #44; // returns the shooting vector
float () random = #7; // returns 0 - 1
string (float f) ftos = #26;
float (string s) stof = #81; // convert string to float
string (vector v) vtos = #27;
float (float v) rint = #36; // round to nearest int
float (float v) floor = #37; // largest integer <= v
float (float v) ceil = #38; // smallest integer >= v
float (float f) fabs = #43;
float() random = #7; // returns 0 - 1
string(float f) ftos = #26;
float(string s) stof = #81; // convert string to float
string(vector v) vtos = #27;
float(float v) rint = #36; // round to nearest int
float(float v) floor = #37; // largest integer <= v
float(float v) ceil = #38; // smallest integer >= v
float(float f) fabs = #43;
// sets trace_* globals
// nomonsters can be:
// An entity will also be ignored for testing if forent == test,
// forent->owner == test, or test->owner == forent
// a forent of world is ignored
void (vector v1, vector v2, float nomonsters, entity forent) traceline = #16;
float (vector v) pointcontents = #41; // returns a CONTENT_*
float (entity e) checkbottom = #40; // true if self is on ground
float () droptofloor = #34; // TRUE if landed on floor
float (float yaw, float dist) walkmove = #32; // returns TRUE or FALSE
void (float step) movetogoal = #67;
void(vector v1, vector v2, float nomonsters, entity forent) traceline = #16;
float(vector v) pointcontents = #41; // returns a CONTENT_*
float(entity e) checkbottom = #40; // true if self is on ground
float() droptofloor = #34; // TRUE if landed on floor
float(float yaw, float dist) walkmove = #32; // returns TRUE or FALSE
void(float step) movetogoal = #67;
entity () checkclient = #17; // returns a client to look for
entity (entity start, .string fld, string match) find = #18;
entity (vector org, float rad) findradius = #22;
entity (entity e) nextent = #47; // for looping through all ents
entity() checkclient = #17; // returns a client to look for
entity(entity start, .string fld, string match) find = #18;
entity(vector org, float rad) findradius = #22;
entity(entity e) nextent = #47; // for looping through all ents
void (float level, string s, ...) bprint = #23;
void (entity client, float level, string s, ...) sprint = #24;
void (entity client, string s, ...) centerprint = #73; // sprint, but centered
void (string s, ...) dprint = #25;
void (entity e) eprint = #31; // prints an entire edict
void(float level, string s, ...) bprint = #23;
void(entity client, float level, string s, ...) sprint = #24;
void(entity client, string s, ...) centerprint = #73; // sprint, but centered
void(string s, ...) dprint = #25;
void(entity e) eprint = #31; // prints an entire edict
float (string s) cvar = #45; // return cvar.value
void (string var, string val) cvar_set = #72; // sets cvar.value
string (entity e, string key) infokey = #80; // get a key value (world = serverinfo)
void (string s1, ...) localcmd = #46; // put string into local que
void (entity client, string s) stuffcmd = #21;
float(string s) cvar = #45; // return cvar.value
void(string var, string val) cvar_set = #72; // sets cvar.value
string(entity e, string key) infokey = #80; // get a key value (world = serverinfo)
void(string s1, ...) localcmd = #46; // put string into local que
void(entity client, string s) stuffcmd = #21;
void () ChangeYaw = #49; // turn towards self.ideal_yaw
void() ChangeYaw = #49; // turn towards self.ideal_yaw
// at self.yaw_speed
// direct client message generation
void (float to, vector v) WriteAngleV = #0;
void (float to, vector v) WriteCoordV = #0;
void (float to, ...) WriteBytes = #0;
void (float to, float f) WriteByte = #52;
void (float to, float f) WriteChar = #53;
void (float to, float f) WriteShort = #54;
void (float to, float f) WriteLong = #55;
void (float to, float f) WriteCoord = #56;
void (float to, float f) WriteAngle = #57;
void (float to, string s) WriteString = #58;
void (float to, entity s) WriteEntity = #59;
void (vector where, float set) multicast = #82; // sends the temp message to a set
void(float to, vector v) WriteAngleV = #0;
void(float to, vector v) WriteCoordV = #0;
void(float to, ...) WriteBytes = #0;
void(float to, float f) WriteByte = #52;
void(float to, float f) WriteChar = #53;
void(float to, float f) WriteShort = #54;
void(float to, float f) WriteLong = #55;
void(float to, float f) WriteCoord = #56;
void(float to, float f) WriteAngle = #57;
void(float to, string s) WriteString = #58;
void(float to, entity s) WriteEntity = #59;
void(vector where, float set) multicast = #82; // sends the temp message to a set
void (entity e) BUILTIN_makestatic = #69;
void (string s) changelevel = #70;
void(entity e) BUILTIN_makestatic = #69;
void(string s) changelevel = #70;
void (vector pos, string samp, float vol, float atten) BUILTIN_ambientsound = #74;
void(vector pos, string samp, float vol, float atten) BUILTIN_ambientsound = #74;
void (entity e) setspawnparms = #78; // set parm1... to the
void(entity e) setspawnparms = #78; // set parm1... to the
// values at level start
// for coop respawn
void (entity killer, entity killee) logfrag = #79; // add to stats
void(entity killer, entity killee) logfrag = #79; // add to stats

View file

@ -5,92 +5,93 @@
#include "misc.qh"
void() effect_muzzleflash = {
WriteByte(MSG_MULTICAST, SVC_MUZZLEFLASH);
WriteEntity(MSG_MULTICAST, self);
multicast(self.origin, MULTICAST_PVS);
void ()
effect_muzzleflash =
{
WriteByte (MSG_MULTICAST, SVC_MUZZLEFLASH);
WriteEntity (MSG_MULTICAST, self);
multicast (self.origin, MULTICAST_PVS);
};
void(entity e) effect_smallkick = {
void (entity e)
effect_smallkick =
{
if (!is_cl(e))
return;
msg_entity = e;
WriteByte(MSG_ONE, SVC_SMALLKICK);
WriteByte (MSG_ONE, SVC_SMALLKICK);
};
void(vector org, vector dir, float d) effect_blood = {
void (vector org, vector dir, float d)
effect_blood =
{
d = d / 5;
if (d < 3) d = 3;
if (d > 255) d = 255;
if (d < 3)
d = 3;
if (d > 255)
d = 255;
WriteByte(MSG_MULTICAST, SVC_TEMPENTITY);
WriteByte(MSG_MULTICAST, TE_BLOOD);
WriteByte(MSG_MULTICAST, d);
WriteCoord(MSG_MULTICAST, org_x);
WriteCoord(MSG_MULTICAST, org_y);
WriteCoord(MSG_MULTICAST, org_z);
multicast(org, MULTICAST_PVS);
WriteBytes (MSG_MULTICAST, SVC_TEMPENTITY, TE_BLOOD, d);
WriteCoordV (MSG_MULTICAST, org);
multicast (org, MULTICAST_PVS);
};
void(vector org, vector vel, float d) effect_gun_spark = {
WriteByte(MSG_MULTICAST, SVC_TEMPENTITY);
WriteByte(MSG_MULTICAST, TE_GUNSHOT);
WriteByte(MSG_MULTICAST, d);
WriteCoord(MSG_MULTICAST, org_x);
WriteCoord(MSG_MULTICAST, org_y);
WriteCoord(MSG_MULTICAST, org_z);
multicast(org, MULTICAST_PVS);
void (vector org, vector vel, float d)
effect_gun_spark =
{
WriteBytes (MSG_MULTICAST, SVC_TEMPENTITY, TE_GUNSHOT, d);
WriteCoordV (MSG_MULTICAST, org);
multicast (org, MULTICAST_PVS);
};
void(vector org, vector vel) effect_nail_spark = {
WriteByte(MSG_MULTICAST, SVC_TEMPENTITY);
WriteByte(MSG_MULTICAST, TE_SPIKE);
WriteCoord(MSG_MULTICAST, org_x);
WriteCoord(MSG_MULTICAST, org_y);
WriteCoord(MSG_MULTICAST, org_z);
multicast(org, MULTICAST_PHS);
void (vector org, vector vel)
effect_nail_spark =
{
WriteBytes (MSG_MULTICAST, SVC_TEMPENTITY, TE_SPIKE);
WriteCoordV (MSG_MULTICAST, org);
multicast (org, MULTICAST_PHS);
};
void(vector org) effect_explosion = {
WriteByte(MSG_MULTICAST, SVC_TEMPENTITY);
WriteByte(MSG_MULTICAST, TE_EXPLOSION);
WriteCoord(MSG_MULTICAST, org_x);
WriteCoord(MSG_MULTICAST, org_y);
WriteCoord(MSG_MULTICAST, org_z);
multicast(org, MULTICAST_PHS);
void (vector org)
effect_explosion =
{
WriteBytes (MSG_MULTICAST, SVC_TEMPENTITY, TE_EXPLOSION);
WriteCoordV (MSG_MULTICAST, org);
multicast (org, MULTICAST_PHS);
};
void(vector org) effect_teleport_fog = {
void (vector org)
effect_teleport_fog =
{
local float r;
local string snd;
r = random() * 5;
if (r < 1) snd = "misc/r_tele1.wav";
else if (r < 2) snd = "misc/r_tele2.wav";
else if (r < 3) snd = "misc/r_tele3.wav";
else if (r < 4) snd = "misc/r_tele4.wav";
else snd = "misc/r_tele5.wav";
r = random () * 5;
if (r < 1)
snd = "misc/r_tele1.wav";
else if (r < 2)
snd = "misc/r_tele2.wav";
else if (r < 3)
snd = "misc/r_tele3.wav";
else if (r < 4)
snd = "misc/r_tele4.wav";
else
snd = "misc/r_tele5.wav";
WriteByte(MSG_MULTICAST, SVC_TEMPENTITY);
WriteByte(MSG_MULTICAST, TE_TELEPORT);
WriteCoord(MSG_MULTICAST, org_x);
WriteCoord(MSG_MULTICAST, org_y);
WriteCoord(MSG_MULTICAST, org_z);
multicast(org, MULTICAST_PHS);
WriteBytes (MSG_MULTICAST, SVC_TEMPENTITY, TE_TELEPORT);
WriteCoordV (MSG_MULTICAST, org);
multicast (org, MULTICAST_PHS);
sound_vector(org, snd, 1, ATTN_NORM);
sound_vector (org, snd, 1, ATTN_NORM);
};
void(entity from, vector p1, vector p2) effect_lightning2 = {
WriteByte(MSG_MULTICAST, SVC_TEMPENTITY);
WriteByte(MSG_MULTICAST, TE_LIGHTNING2);
WriteEntity(MSG_MULTICAST, from);
WriteCoord(MSG_MULTICAST, p1_x);
WriteCoord(MSG_MULTICAST, p1_y);
WriteCoord(MSG_MULTICAST, p1_z);
WriteCoord(MSG_MULTICAST, p2_x);
WriteCoord(MSG_MULTICAST, p2_y);
WriteCoord(MSG_MULTICAST, p2_z);
multicast(p1, MULTICAST_PHS);
void (entity from, vector p1, vector p2)
effect_lightning2 =
{
WriteBytes (MSG_MULTICAST, SVC_TEMPENTITY, TE_LIGHTNING2);
WriteEntity (MSG_MULTICAST, from);
WriteCoordV (MSG_MULTICAST, p1);
WriteCoordV (MSG_MULTICAST, p2);
multicast (p1, MULTICAST_PHS);
};

View file

@ -2,39 +2,39 @@
#define QW_PROTOCOL_qh 1
// protocol bytes
#define SVC_PRINT 8
#define SVC_UPDATEFRAGS 14
#define SVC_MAKESTATIC 20
#define SVC_TEMPENTITY 23
#define SVC_CENTERPRINT 26
#define SVC_KILLEDMONSTER 27
#define SVC_FOUNDSECRET 28
#define SVC_INTERMISSION 30
#define SVC_FINALE 31
#define SVC_CDTRACK 32
#define SVC_SELLSCREEN 33
#define SVC_SMALLKICK 34
#define SVC_BIGKICK 35
#define SVC_UPDATEPING 36
#define SVC_UPDATEENTERTIME 37
#define SVC_MUZZLEFLASH 39
#define SVC_UPDATEUSERINFO 40
#define SVC_UPDATEPL 53
#define SVC_PRINT 8.0
#define SVC_UPDATEFRAGS 14.0
#define SVC_MAKESTATIC 20.0
#define SVC_TEMPENTITY 23.0
#define SVC_CENTERPRINT 26.0
#define SVC_KILLEDMONSTER 27.0
#define SVC_FOUNDSECRET 28.0
#define SVC_INTERMISSION 30.0
#define SVC_FINALE 31.0
#define SVC_CDTRACK 32.0
#define SVC_SELLSCREEN 33.0
#define SVC_SMALLKICK 34.0
#define SVC_BIGKICK 35.0
#define SVC_UPDATEPING 36.0
#define SVC_UPDATEENTERTIME 37.0
#define SVC_MUZZLEFLASH 39.0
#define SVC_UPDATEUSERINFO 40.0
#define SVC_UPDATEPL 53.0
// temp entities
#define TE_SPIKE 0
#define TE_SUPERSPIKE 1
#define TE_GUNSHOT 2
#define TE_EXPLOSION 3
#define TE_TAREXPLOSION 4
#define TE_LIGHTNING1 5
#define TE_LIGHTNING2 6
#define TE_WIZSPIKE 7
#define TE_KNIGHTSPIKE 8
#define TE_LIGHTNING3 9
#define TE_LAVASPLASH 10
#define TE_TELEPORT 11
#define TE_BLOOD 12
#define TE_LIGHTNINGBLOOD 13
#define TE_SPIKE 0.0
#define TE_SUPERSPIKE 1.0
#define TE_GUNSHOT 2.0
#define TE_EXPLOSION 3.0
#define TE_TAREXPLOSION 4.0
#define TE_LIGHTNING1 5.0
#define TE_LIGHTNING2 6.0
#define TE_WIZSPIKE 7.0
#define TE_KNIGHTSPIKE 8.0
#define TE_LIGHTNING3 9.0
#define TE_LAVASPLASH 10.0
#define TE_TELEPORT 11.0
#define TE_BLOOD 12.0
#define TE_LIGHTNINGBLOOD 13.0
#endif

View file

@ -62,25 +62,22 @@ entity msg_entity; // destination of single entity writes
#ifndef QW_SYSTEM_qh
@system {
#endif
void() main; // only for testing
void () main; // only for testing
void() StartFrame;
void () StartFrame;
void() PlayerPreThink;
void() PlayerPostThink;
void () PlayerPreThink;
void () PlayerPostThink;
void() ClientKill;
void() ClientConnect;
void() PutClientInServer; // call after setting the parm1... parms
void() ClientDisconnect;
void() SetNewParms; // called when a client first connects to
// a server. sets parms so they can be
// saved off for restarts
void() SetChangeParms; // call to set parms for self so they can
// be saved for a level transition
void () ClientKill;
void () ClientConnect;
void () PutClientInServer; // call after setting the parm1... parms
void () ClientDisconnect;
void () SetNewParms; // called when a client first connects to a server.
// sets parms so they can be saved off for restarts
void () SetChangeParms; // call to set parms for self so they can
// be saved for a level transition
void end_sys_globals; // flag for structure dumping
#ifndef QW_SYSTEM_qh
@ -88,8 +85,8 @@ void end_sys_globals; // flag for structure dumping
#endif
/* End of system globals */
// ========================================================================== //
// ========================================================================== //
// ========================================================================= //
// ========================================================================= //
/* Do not change. These are the system fields required by C code */
/* (*** = do not set in prog code, maintained by C code) */
@ -117,16 +114,15 @@ void end_sys_globals; // flag for structure dumping
.vector mins, maxs; // bounding box extents reletive to origin
.vector size; // *** maxs - mins, use setsize
.void() touch;
.void() use;
.void() think;
.void() blocked; // for doors or plats, called when can't push other
.void () touch;
.void () use;
.void () think;
.void () blocked; // for doors or plats, called when can't push other
.float nextthink;
.entity groundentity;
// stats
.float health;
.float frags;
@ -144,7 +140,6 @@ void end_sys_globals; // flag for structure dumping
.vector view_ofs; // add to origin to get eye point
.float button0; // fire
.float button1; // use
.float button2; // jump
@ -203,5 +198,5 @@ void end_sys_globals; // flag for structure dumping
void end_sys_fields; // flag for structure dumping
/* End of system fields */
// ========================================================================== //
// ========================================================================== //
// ========================================================================= //
// ========================================================================= //

View file

@ -21,11 +21,10 @@ float sv_spawning;
#define SV_SIGNON_BUFFERS 8
#define SV_SIGNON_BUFFER_SWAP 512
// QF == 1, twilight/stock == 0
#define SV_FLUSHSIGNON_BREAKS 1
#define SV_FLUSHSIGNON_BREAKS 1 // QF == 1, twilight/stock == 0
#define SV_MAX_DATAGRAM 1450
#define SV_FRAME_OVERHEAD 725 /* Wild guess. */
#define SV_FRAME_OVERHEAD 725 // Wild guess.
#define SIZEOF_BASELINE 22
#define SIZEOF_AMBIENTSOUND 16
@ -39,7 +38,9 @@ float sv_frame_remaining;
// =================
float(float space) SZ_GetSpace_frame = {
float (float space)
SZ_GetSpace_frame =
{
if (sv_frame_remaining < space)
return FALSE;
@ -48,7 +49,10 @@ float(float space) SZ_GetSpace_frame = {
};
entity SZ_self;
float(float space) SZ_GetSpace_signon = {
float (float space)
SZ_GetSpace_signon =
{
if (sv_spawning || !SV_FLUSHSIGNON_BREAKS) {
if (self != SZ_self) {
SZ_self = self;
@ -72,66 +76,62 @@ float(float space) SZ_GetSpace_signon = {
// =================
void() SZ_init = {
void ()
SZ_init =
{
sv_signon_buf_remaining = SV_SIGNON_BUFFERS;
sv_signon_remaining = SV_MAX_DATAGRAM;
while ((self = nextent(self)))
SZ_GetSpace_signon(SIZEOF_BASELINE);
while ((self = nextent (self)))
SZ_GetSpace_signon (SIZEOF_BASELINE);
self = world;
};
void() SZ_frame = {
void ()
SZ_frame =
{
sv_frame_remaining = SV_MAX_DATAGRAM - SV_FRAME_OVERHEAD;
};
// =================
void(entity e) makestatic = {
void (entity e)
makestatic =
{
e.solid = SOLID_NOT;
e.movetype = MOVETYPE_NONE;
e.velocity = '0 0 0';
e.avelocity = '0 0 0';
e.nextthink = -1;
/* No more space? Just let it be... */
if (!SZ_GetSpace_signon(SIZEOF_MAKESTATIC))
// No more space? Just let it be...
if (!SZ_GetSpace_signon (SIZEOF_MAKESTATIC))
return;
if (!sv_spawning) {
if (!SZ_GetSpace_frame(SIZEOF_MAKESTATIC)) {
if (!SZ_GetSpace_frame (SIZEOF_MAKESTATIC)) {
self.think = SUB_makestatic;
self.nextthink = time + sv_mintic;
return;
}
WriteByte(MSG_ALL, SVC_MAKESTATIC);
WriteByte(MSG_ALL, e.modelindex);
WriteByte(MSG_ALL, e.frame);
WriteByte(MSG_ALL, e.colormap);
WriteByte(MSG_ALL, e.skin);
WriteCoord(MSG_ALL, e.origin_x);
WriteCoord(MSG_ALL, e.origin_y);
WriteCoord(MSG_ALL, e.origin_z);
WriteAngle(MSG_ALL, e.angles_x);
WriteAngle(MSG_ALL, e.angles_y);
WriteAngle(MSG_ALL, e.angles_z);
WriteBytes (MSG_ALL, SVC_MAKESTATIC, e.modelindex, e.frame,
e.colormap, e.skin);
WriteCoordV (MSG_ALL, e.origin);
WriteAngleV (MSG_ALL, e.angles);
}
BUILTIN_makestatic(e);
BUILTIN_makestatic (e);
};
void(vector pos, string samp, float vol, float atten) ambientsound = {
void (vector pos, string samp, float vol, float atten)
ambientsound =
{
if (!sv_spawning)
error("ambientsound after spawn functions\n");
error ("ambientsound after spawn functions\n");
SZ_GetSpace_signon(SIZEOF_AMBIENTSOUND);
SZ_GetSpace_signon (SIZEOF_AMBIENTSOUND);
/* Do it anyway */
BUILTIN_ambientsound(pos, samp, vol, atten);
// Do it anyway
BUILTIN_ambientsound (pos, samp, vol, atten);
};

View file

@ -2,15 +2,13 @@
#define SZ_WATCH_qh 1
@extern {
float sv_spawning;
float sv_spawning;
void() SZ_init;
void() SZ_frame;
void(entity e) makestatic;
void(vector pos, string samp, float vol, float atten) ambientsound;
void () SZ_init;
void () SZ_frame;
void (entity e) makestatic;
void (vector pos, string samp, float vol, float atten) ambientsound;
};
#endif