mirror of
https://github.com/yquake2/slightmechanicaldestruction.git
synced 2024-11-13 00:24:27 +00:00
Remove unused variables
src/g_chase.c:10:9: warning: variable ‘oldgoal’ set but not used [-Wunused-but-set-variable] src/g_crane.c:118:9: warning: variable ‘origin’ set but not used [-Wunused-but-set-variable] src/g_crane.c:380:11: warning: variable ‘save’ set but not used [-Wunused-but-set-variable] src/g_func.c:101:15: warning: variable ‘sr’ set but not used [-Wunused-but-set-variable] src/g_func.c:101:11: warning: variable ‘cr’ set but not used [-Wunused-but-set-variable] src/g_func.c:836:11: warning: variable ‘save’ set but not used [-Wunused-but-set-variable] src/g_func.c:1942:11: warning: variable ‘save’ set but not used [-Wunused-but-set-variable] src/g_func.c:2488:11: warning: variable ‘save’ set but not used [-Wunused-but-set-variable] src/g_func.c:3487:11: warning: variable ‘save’ set but not used [-Wunused-but-set-variable] src/g_func.c:3642:10: warning: variable ‘oldorg’ set but not used [-Wunused-but-set-variable] src/g_func.c:3790:9: warning: variable ‘origin’ set but not used [-Wunused-but-set-variable] src/g_misc.c:1251:9: warning: variable ‘save’ set but not used [-Wunused-but-set-variable] src/g_newai.c:36:11: warning: variable ‘playerVisible’ set but not used [-Wunused-but-set-variable] src/g_newai.c:482:28: warning: variable ‘count3’ set but not used [-Wunused-but-set-variable] src/g_newai.c:481:8: warning: variable ‘field’ set but not used [-Wunused-but-set-variable] src/g_newai.c:928:11: warning: variable ‘errors’ set but not used [-Wunused-but-set-variable] src/g_phys.c:35:10: warning: variable ‘fall_time’ set but not used [-Wunused-but-set-variable] src/g_phys.c:891:16: warning: variable ‘maxs’ set but not used [-Wunused-but-set-variable] src/g_phys.c:891:10: warning: variable ‘mins’ set but not used [-Wunused-but-set-variable] src/g_trigger.c:1423:12: warning: variable ‘what’ set but not used [-Wunused-but-set-variable] src/g_trigger.c:1402:10: warning: variable ‘tr’ set but not used [-Wunused-but-set-variable] src/g_tracktrain.c:1014:11: warning: variable ‘save’ set but not used [-Wunused-but-set-variable] src/m_boss2.c:566:11: warning: variable ‘enemy_infront’ set but not used [-Wunused-but-set-variable] src/m_boss32.c:596:8: warning: variable ‘range’ set but not used [-Wunused-but-set-variable] src/m_boss32.c:738:11: warning: variable ‘enemy_infront’ set but not used [-Wunused-but-set-variable] src/m_boss31.c:548:8: warning: variable ‘range’ set but not used [-Wunused-but-set-variable] src/m_boss31.c:613:11: warning: variable ‘enemy_infront’ set but not used [-Wunused-but-set-variable] src/p_hud.c:157:7: warning: variable ‘picnum’ set but not used [-Wunused-but-set-variable]
This commit is contained in:
parent
52e8de3cb5
commit
701b470ded
12 changed files with 267 additions and 339 deletions
|
@ -7,7 +7,6 @@ void UpdateChaseCam(edict_t *ent)
|
|||
vec3_t forward, right;
|
||||
trace_t trace;
|
||||
int i;
|
||||
vec3_t oldgoal;
|
||||
vec3_t angles;
|
||||
|
||||
// is our chase target gone?
|
||||
|
@ -25,7 +24,6 @@ void UpdateChaseCam(edict_t *ent)
|
|||
targ = ent->client->chase_target;
|
||||
|
||||
VectorCopy(targ->s.origin, ownerv);
|
||||
VectorCopy(ent->s.origin, oldgoal);
|
||||
|
||||
ownerv[2] += targ->viewheight;
|
||||
|
||||
|
|
|
@ -115,9 +115,6 @@ void Cargo_Stop (edict_t *ent)
|
|||
|
||||
void cargo_blocked (edict_t *cargo, edict_t *obstacle )
|
||||
{
|
||||
vec3_t origin;
|
||||
|
||||
VectorAdd(obstacle->s.origin,obstacle->origin_offset,origin);
|
||||
cargo->gravity = 1.0;
|
||||
cargo->movetype = MOVETYPE_PUSHABLE;
|
||||
cargo->velocity[2] = 0;
|
||||
|
@ -377,8 +374,6 @@ void Crane_blocked (edict_t *self, edict_t *other)
|
|||
if (other)
|
||||
{
|
||||
// Lazarus: Some of our ents don't have origin near the model
|
||||
vec3_t save;
|
||||
VectorCopy(other->s.origin,save);
|
||||
VectorMA (other->absmin, 0.5, other->size, other->s.origin);
|
||||
BecomeExplosion1 (other);
|
||||
}
|
||||
|
@ -413,7 +408,7 @@ void Crane_Move_Final (edict_t *ent)
|
|||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (ent->moveinfo.remaining_distance == 0)
|
||||
{
|
||||
Crane_Move_Done (ent);
|
||||
|
@ -631,7 +626,7 @@ void G_FindCraneParts()
|
|||
// moving to play
|
||||
if(hook->speaker)
|
||||
hook->speaker->spawnflags = 1 - (control->spawnflags & 1);
|
||||
|
||||
|
||||
// Get offset from hook origin to hoist origin, so we can
|
||||
// correct timing problems
|
||||
VectorSubtract(hook->s.origin,hoist->s.origin,hook->offset);
|
||||
|
@ -1116,7 +1111,7 @@ void crane_control_action(edict_t *control, edict_t *activator, vec3_t point)
|
|||
beam->absmin[dir];
|
||||
cable->crane_control = control;
|
||||
memcpy(&cable->moveinfo,&beam->moveinfo,sizeof(moveinfo_t));
|
||||
|
||||
|
||||
if(beam->crane_onboard_control)
|
||||
{
|
||||
beam->crane_onboard_control->crane_dir = dir;
|
||||
|
@ -1317,7 +1312,7 @@ void crane_control_action(edict_t *control, edict_t *activator, vec3_t point)
|
|||
}
|
||||
|
||||
void Use_Crane_Control (edict_t *ent, edict_t *other, edict_t *activator)
|
||||
{
|
||||
{
|
||||
ent->spawnflags ^= 1;
|
||||
if(ent->crane_hook->speaker)
|
||||
ent->crane_hook->speaker->spawnflags = 1 - (ent->spawnflags & 1);
|
||||
|
@ -1523,7 +1518,7 @@ void crane_reset_use (edict_t *self, edict_t *other, edict_t *activator)
|
|||
edict_t *crane;
|
||||
edict_t *control, *beam, *cable, *cargo, *hoist, *hook;
|
||||
vec3_t bonk, v1, v2;
|
||||
|
||||
|
||||
|
||||
crane = G_Find (NULL, FOFS(targetname), self->target);
|
||||
if(!crane)
|
||||
|
@ -1542,7 +1537,7 @@ void crane_reset_use (edict_t *self, edict_t *other, edict_t *activator)
|
|||
gi.centerprintf(activator,"No power\n");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
beam = control->crane_beam;
|
||||
hoist = control->crane_hoist;
|
||||
hook = control->crane_hook;
|
||||
|
@ -1650,7 +1645,7 @@ void crane_reset_use (edict_t *self, edict_t *other, edict_t *activator)
|
|||
cable->crane_bonk = beam->crane_bonk + cable->absmin[dir] - beam->absmin[dir];
|
||||
cable->crane_control = control;
|
||||
memcpy(&cable->moveinfo,&beam->moveinfo,sizeof(moveinfo_t));
|
||||
|
||||
|
||||
if(beam->crane_onboard_control)
|
||||
{
|
||||
beam->crane_onboard_control->crane_dir = dir;
|
||||
|
|
170
src/g_func.c
170
src/g_func.c
|
@ -98,12 +98,9 @@ restart:
|
|||
if (self->turn_rider) {
|
||||
// Match angular velocities
|
||||
if (!Q_stricmp(e->classname,"func_rotating")) {
|
||||
float cr, sr;
|
||||
float cy, sy;
|
||||
cy = cos((e->s.angles[1]-delta_angles[1])*M_PI/180);
|
||||
sy = sin((e->s.angles[1]-delta_angles[1])*M_PI/180);
|
||||
cr = cos((e->s.angles[2]-delta_angles[2])*M_PI/180);
|
||||
sr = sin((e->s.angles[2]-delta_angles[2])*M_PI/180);
|
||||
if (e->movedir[0] > 0) {
|
||||
e->s.angles[1] = delta_angles[1];
|
||||
} else if (e->movedir[1] > 0) {
|
||||
|
@ -229,7 +226,7 @@ restart:
|
|||
}
|
||||
}
|
||||
|
||||
// FMOD
|
||||
// FMOD
|
||||
if (!Q_stricmp(e->classname,"target_playback"))
|
||||
FMOD_UpdateSpeakerPos(e);
|
||||
|
||||
|
@ -320,7 +317,7 @@ void train_spline (edict_t *self)
|
|||
return;
|
||||
if ( (train->from != train->to) && !train->moveinfo.is_blocked && (train->spawnflags & TRAIN_START_ON))
|
||||
{
|
||||
spline_calc (train, train->from->s.origin, train->to->s.origin,
|
||||
spline_calc (train, train->from->s.origin, train->to->s.origin,
|
||||
train->from->s.angles, train->to->s.angles,
|
||||
train->moveinfo.ratio, p, a);
|
||||
VectorSubtract(p,train->mins,p);
|
||||
|
@ -598,10 +595,10 @@ void AngleMove_Begin (edict_t *ent)
|
|||
VectorSubtract (ent->moveinfo.end_angles, ent->s.angles, destdelta);
|
||||
else
|
||||
VectorSubtract (ent->moveinfo.start_angles, ent->s.angles, destdelta);
|
||||
|
||||
|
||||
// calculate length of vector
|
||||
len = VectorLength (destdelta);
|
||||
|
||||
|
||||
// divide by speed to get time to reach dest
|
||||
traveltime = len / ent->moveinfo.speed;
|
||||
|
||||
|
@ -833,8 +830,6 @@ void plat_blocked (edict_t *self, edict_t *other)
|
|||
if (other)
|
||||
{
|
||||
// Lazarus: Some of our ents don't have origin near the model
|
||||
vec3_t save;
|
||||
VectorCopy(other->s.origin,save);
|
||||
VectorMA (other->absmin, 0.5, other->size, other->s.origin);
|
||||
BecomeExplosion1 (other);
|
||||
}
|
||||
|
@ -851,7 +846,7 @@ void plat_blocked (edict_t *self, edict_t *other)
|
|||
|
||||
|
||||
void Use_Plat (edict_t *ent, edict_t *other, edict_t *activator)
|
||||
{
|
||||
{
|
||||
if (ent->think)
|
||||
return; // already down
|
||||
plat_go_down (ent);
|
||||
|
@ -862,7 +857,7 @@ void Touch_Plat_Center (edict_t *ent, edict_t *other, cplane_t *plane, csurface_
|
|||
{
|
||||
if (!other->client)
|
||||
return;
|
||||
|
||||
|
||||
if (other->health <= 0)
|
||||
return;
|
||||
|
||||
|
@ -880,13 +875,13 @@ void plat_spawn_inside_trigger (edict_t *ent)
|
|||
|
||||
//
|
||||
// middle trigger
|
||||
//
|
||||
//
|
||||
trigger = G_Spawn();
|
||||
trigger->touch = Touch_Plat_Center;
|
||||
trigger->movetype = MOVETYPE_NONE;
|
||||
trigger->solid = SOLID_TRIGGER;
|
||||
trigger->enemy = ent;
|
||||
|
||||
|
||||
tmin[0] = ent->mins[0] + 25;
|
||||
tmin[1] = ent->mins[1] + 25;
|
||||
tmin[2] = ent->mins[2];
|
||||
|
@ -899,7 +894,7 @@ void plat_spawn_inside_trigger (edict_t *ent)
|
|||
|
||||
if (ent->spawnflags & PLAT_LOW_TRIGGER)
|
||||
tmax[2] = tmin[2] + 8;
|
||||
|
||||
|
||||
if (tmax[0] - tmin[0] <= 0)
|
||||
{
|
||||
tmin[0] = (ent->mins[0] + ent->maxs[0]) *0.5;
|
||||
|
@ -910,7 +905,7 @@ void plat_spawn_inside_trigger (edict_t *ent)
|
|||
tmin[1] = (ent->mins[1] + ent->maxs[1]) *0.5;
|
||||
tmax[1] = tmin[1] + 1;
|
||||
}
|
||||
|
||||
|
||||
VectorCopy (tmin, trigger->mins);
|
||||
VectorCopy (tmax, trigger->maxs);
|
||||
|
||||
|
@ -942,7 +937,7 @@ Set "sounds" to one of the following:
|
|||
void SP_func_plat (edict_t *ent)
|
||||
{
|
||||
char soundname[64]; //CW
|
||||
|
||||
|
||||
VectorClear (ent->s.angles);
|
||||
ent->solid = SOLID_BSP;
|
||||
ent->movetype = MOVETYPE_PUSH;
|
||||
|
@ -981,7 +976,7 @@ void SP_func_plat (edict_t *ent)
|
|||
ent->pos2[2] -= (ent->maxs[2] - ent->mins[2]) - st.lip;
|
||||
|
||||
ent->use = Use_Plat;
|
||||
plat_spawn_inside_trigger (ent); // the "start moving" trigger
|
||||
plat_spawn_inside_trigger (ent); // the "start moving" trigger
|
||||
|
||||
if (ent->targetname)
|
||||
{
|
||||
|
@ -1074,7 +1069,7 @@ void rotating_blocked (edict_t *self, edict_t *other)
|
|||
{
|
||||
/* // Lazarus: This was added to do damage to pickup items, but may break
|
||||
// existing maps.
|
||||
|
||||
|
||||
if (!(other->svflags & SVF_MONSTER) && (!other->client) ) {
|
||||
// give it a chance to go away on it's own terms (like gibs)
|
||||
T_Damage (other, self, self, vec3_origin, other->s.origin, vec3_origin, 100000, 1, 0, MOD_CRUSH);
|
||||
|
@ -1377,7 +1372,7 @@ void SP_func_button (edict_t *ent)
|
|||
|
||||
if (ent->sounds != 1)
|
||||
ent->moveinfo.sound_start = gi.soundindex ("switches/butn2.wav");
|
||||
|
||||
|
||||
if (!ent->speed)
|
||||
ent->speed = 40;
|
||||
if (!ent->accel)
|
||||
|
@ -1427,7 +1422,7 @@ void SP_func_button (edict_t *ent)
|
|||
//====================================================================
|
||||
//
|
||||
// SP_func_trainbutton is a button linked to a func_train with the
|
||||
// "movewith" key. The button itself does NOT move relative to the
|
||||
// "movewith" key. The button itself does NOT move relative to the
|
||||
// train, but the effect can be simulated with animations and sounds
|
||||
//
|
||||
// Spawnflags 1 = can be activated by looking at it and pressing +attack
|
||||
|
@ -1714,7 +1709,7 @@ void door_go_down (edict_t *self)
|
|||
self->takedamage = DAMAGE_YES;
|
||||
self->health = self->max_health;
|
||||
}
|
||||
|
||||
|
||||
if (strcmp(self->classname, "func_door") == 0) {
|
||||
if (self->movewith)
|
||||
movewith_update(self);
|
||||
|
@ -1745,7 +1740,7 @@ void door_go_up (edict_t *self, edict_t *activator)
|
|||
if ((self->flags & FL_REVERSIBLE) && activator)
|
||||
check_reverse_rotation(self,activator->s.origin);
|
||||
|
||||
if (!(self->flags & FL_TEAMSLAVE))
|
||||
if (!(self->flags & FL_TEAMSLAVE))
|
||||
{
|
||||
if (self->moveinfo.sound_start)
|
||||
gi.sound (self, CHAN_NO_PHS_ADD+CHAN_VOICE, self->moveinfo.sound_start, 1, ATTN_STATIC, 0);
|
||||
|
@ -1800,7 +1795,7 @@ void door_use (edict_t *self, edict_t *other, edict_t *activator)
|
|||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// trigger all paired doors
|
||||
for (ent = self ; ent ; ent = ent->teamchain)
|
||||
{
|
||||
|
@ -1939,8 +1934,6 @@ void door_blocked (edict_t *self, edict_t *other)
|
|||
if (other)
|
||||
{
|
||||
// Lazarus: Some of our ents don't have origin near the model
|
||||
vec3_t save;
|
||||
VectorCopy(other->s.origin,save);
|
||||
VectorMA (other->absmin, 0.5, other->size, other->s.origin);
|
||||
BecomeExplosion1(other);
|
||||
}
|
||||
|
@ -2034,7 +2027,7 @@ void SP_func_door (edict_t *ent)
|
|||
{
|
||||
vec3_t abs_movedir;
|
||||
char soundname[64]; //CW
|
||||
|
||||
|
||||
//CW++ Setup customisable sounds.
|
||||
if (ent->sounds > 0)
|
||||
{
|
||||
|
@ -2054,7 +2047,7 @@ void SP_func_door (edict_t *ent)
|
|||
|
||||
ent->blocked = door_blocked;
|
||||
ent->use = door_use;
|
||||
|
||||
|
||||
if (!ent->speed)
|
||||
ent->speed = 100;
|
||||
if (deathmatch->value)
|
||||
|
@ -2110,7 +2103,7 @@ void SP_func_door (edict_t *ent)
|
|||
gi.soundindex ("misc/talk.wav");
|
||||
ent->touch = door_touch;
|
||||
}
|
||||
|
||||
|
||||
ent->moveinfo.speed = ent->speed;
|
||||
ent->moveinfo.accel = ent->accel;
|
||||
ent->moveinfo.decel = ent->decel;
|
||||
|
@ -2281,7 +2274,7 @@ void SP_func_door_rotating (edict_t *ent)
|
|||
ent->die = door_killed;
|
||||
ent->max_health = ent->health;
|
||||
}
|
||||
|
||||
|
||||
if (ent->targetname && ent->message)
|
||||
{
|
||||
gi.soundindex ("misc/talk.wav");
|
||||
|
@ -2485,8 +2478,6 @@ void train_blocked (edict_t *self, edict_t *other)
|
|||
if (other)
|
||||
{
|
||||
// Lazarus: Some of our ents don't have origin near the model
|
||||
vec3_t save;
|
||||
VectorCopy(other->s.origin,save);
|
||||
VectorMA (other->absmin, 0.5, other->size, other->s.origin);
|
||||
BecomeExplosion1 (other);
|
||||
}
|
||||
|
@ -2566,7 +2557,7 @@ void train_wait (edict_t *self)
|
|||
{
|
||||
train_next (self);
|
||||
self->spawnflags &= ~TRAIN_START_ON;
|
||||
VectorClear (self->velocity);
|
||||
VectorClear (self->velocity);
|
||||
// Lazarus: turn off animation for stationary trains
|
||||
self->s.effects &= ~(EF_ANIM_ALL | EF_ANIM_ALLFAST);
|
||||
self->nextthink = 0;
|
||||
|
@ -2583,7 +2574,7 @@ void train_wait (edict_t *self)
|
|||
{
|
||||
train_next (self);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
// Rroff's rotating train stuff, with quite a few changes
|
||||
|
@ -2655,30 +2646,30 @@ void train_yaw (edict_t *self)
|
|||
if (self->enemy->movewith_next && (self->enemy->movewith_next->movewith_ent == self->enemy))
|
||||
set_child_movement(self->enemy);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (cur_yaw != idl_yaw) {
|
||||
if (cur_yaw < idl_yaw)
|
||||
{
|
||||
Dist_1 = (idl_yaw - cur_yaw)*10;
|
||||
Dist_2 = ((360 - idl_yaw) + cur_yaw)*10;
|
||||
|
||||
|
||||
if (Dist_1 < Dist_2)
|
||||
{
|
||||
Distance = Dist_1;
|
||||
|
||||
|
||||
if (Distance < yaw_vel)
|
||||
yaw_vel = Distance;
|
||||
|
||||
|
||||
self->enemy->avelocity[YAW] = yaw_vel;
|
||||
}
|
||||
else
|
||||
{
|
||||
Distance = Dist_2;
|
||||
|
||||
|
||||
if (Distance < yaw_vel)
|
||||
yaw_vel = Distance;
|
||||
|
||||
|
||||
self->enemy->avelocity[YAW] = -yaw_vel;
|
||||
}
|
||||
}
|
||||
|
@ -2686,32 +2677,32 @@ void train_yaw (edict_t *self)
|
|||
{
|
||||
Dist_1 = (cur_yaw - idl_yaw)*10;
|
||||
Dist_2 = ((360 - cur_yaw) + idl_yaw)*10;
|
||||
|
||||
|
||||
if (Dist_1 < Dist_2)
|
||||
{
|
||||
Distance = Dist_1;
|
||||
|
||||
|
||||
if (Distance < yaw_vel)
|
||||
yaw_vel = Distance;
|
||||
|
||||
|
||||
self->enemy->avelocity[YAW] = -yaw_vel;
|
||||
}
|
||||
else
|
||||
{
|
||||
Distance = Dist_2;
|
||||
|
||||
|
||||
if (Distance < yaw_vel)
|
||||
yaw_vel = Distance;
|
||||
|
||||
|
||||
self->enemy->avelocity[YAW] = yaw_vel;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// gi.dprintf ("train cy: %g iy: %g ys: %g\n", cur_yaw, idl_yaw, self->enemy->avelocity[1]);
|
||||
|
||||
|
||||
if (self->enemy->s.angles[YAW] < 0)
|
||||
self->enemy->s.angles[YAW] += 360;
|
||||
|
||||
|
||||
if (self->enemy->s.angles[YAW] >= 360)
|
||||
self->enemy->s.angles[YAW] -= 360;
|
||||
}
|
||||
|
@ -2722,23 +2713,23 @@ void train_yaw (edict_t *self)
|
|||
{
|
||||
Dist_1 = (idl_pitch - cur_pitch)*10;
|
||||
Dist_2 = ((360 - idl_pitch) + cur_pitch)*10;
|
||||
|
||||
|
||||
if (Dist_1 < Dist_2)
|
||||
{
|
||||
Distance = Dist_1;
|
||||
|
||||
|
||||
if (Distance < pitch_vel)
|
||||
pitch_vel = Distance;
|
||||
|
||||
|
||||
self->enemy->avelocity[PITCH] = pitch_vel;
|
||||
}
|
||||
else
|
||||
{
|
||||
Distance = Dist_2;
|
||||
|
||||
|
||||
if (Distance < pitch_vel)
|
||||
pitch_vel = Distance;
|
||||
|
||||
|
||||
self->enemy->avelocity[PITCH] = -pitch_vel;
|
||||
}
|
||||
}
|
||||
|
@ -2746,30 +2737,30 @@ void train_yaw (edict_t *self)
|
|||
{
|
||||
Dist_1 = (cur_pitch - idl_pitch)*10;
|
||||
Dist_2 = ((360 - cur_pitch) + idl_pitch)*10;
|
||||
|
||||
|
||||
if (Dist_1 < Dist_2)
|
||||
{
|
||||
Distance = Dist_1;
|
||||
|
||||
|
||||
if (Distance < pitch_vel)
|
||||
pitch_vel = Distance;
|
||||
|
||||
|
||||
self->enemy->avelocity[PITCH] = -pitch_vel;
|
||||
}
|
||||
else
|
||||
{
|
||||
Distance = Dist_2;
|
||||
|
||||
|
||||
if (Distance < pitch_vel)
|
||||
pitch_vel = Distance;
|
||||
|
||||
|
||||
self->enemy->avelocity[PITCH] = pitch_vel;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (self->enemy->s.angles[PITCH] < 0)
|
||||
self->enemy->s.angles[PITCH] += 360;
|
||||
|
||||
|
||||
if (self->enemy->s.angles[PITCH] >= 360)
|
||||
self->enemy->s.angles[PITCH] -= 360;
|
||||
}
|
||||
|
@ -2779,23 +2770,23 @@ void train_yaw (edict_t *self)
|
|||
{
|
||||
Dist_1 = (idl_roll - cur_roll)*10;
|
||||
Dist_2 = ((360 - idl_roll) + cur_roll)*10;
|
||||
|
||||
|
||||
if (Dist_1 < Dist_2)
|
||||
{
|
||||
Distance = Dist_1;
|
||||
|
||||
|
||||
if (Distance < roll_vel)
|
||||
roll_vel = Distance;
|
||||
|
||||
|
||||
self->enemy->avelocity[ROLL] = roll_vel;
|
||||
}
|
||||
else
|
||||
{
|
||||
Distance = Dist_2;
|
||||
|
||||
|
||||
if (Distance < roll_vel)
|
||||
roll_vel = Distance;
|
||||
|
||||
|
||||
self->enemy->avelocity[ROLL] = -roll_vel;
|
||||
}
|
||||
}
|
||||
|
@ -2803,30 +2794,30 @@ void train_yaw (edict_t *self)
|
|||
{
|
||||
Dist_1 = (cur_roll - idl_roll)*10;
|
||||
Dist_2 = ((360 - cur_roll) + idl_roll)*10;
|
||||
|
||||
|
||||
if (Dist_1 < Dist_2)
|
||||
{
|
||||
Distance = Dist_1;
|
||||
|
||||
|
||||
if (Distance < roll_vel)
|
||||
roll_vel = Distance;
|
||||
|
||||
|
||||
self->enemy->avelocity[ROLL] = -roll_vel;
|
||||
}
|
||||
else
|
||||
{
|
||||
Distance = Dist_2;
|
||||
|
||||
|
||||
if (Distance < roll_vel)
|
||||
roll_vel = Distance;
|
||||
|
||||
|
||||
self->enemy->avelocity[ROLL] = roll_vel;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (self->enemy->s.angles[ROLL] < 0)
|
||||
self->enemy->s.angles[ROLL] += 360;
|
||||
|
||||
|
||||
if (self->enemy->s.angles[ROLL] >= 360)
|
||||
self->enemy->s.angles[ROLL] -= 360;
|
||||
}
|
||||
|
@ -3484,8 +3475,6 @@ void door_secret_blocked (edict_t *self, edict_t *other)
|
|||
if (other)
|
||||
{
|
||||
// Lazarus: Some of our ents don't have origin near the model
|
||||
vec3_t save;
|
||||
VectorCopy(other->s.origin,save);
|
||||
VectorMA (other->absmin, 0.5, other->size, other->s.origin);
|
||||
BecomeExplosion1 (other);
|
||||
}
|
||||
|
@ -3566,7 +3555,7 @@ void SP_func_door_secret (edict_t *ent)
|
|||
gi.soundindex ("misc/talk.wav");
|
||||
ent->touch = door_touch;
|
||||
}
|
||||
|
||||
|
||||
ent->classname = "func_door";
|
||||
|
||||
gi.linkentity (ent);
|
||||
|
@ -3605,7 +3594,7 @@ void SP_func_killbox (edict_t *ent)
|
|||
// 2) Can be pushed off a ledge and damaged by falling
|
||||
// 3) Default dmg = 0 (no fireball) and health = 0 (indestructible)
|
||||
// 4) Plays a sound when moving
|
||||
//
|
||||
//
|
||||
// targetname - If triggered, pushable object self-destructs, throwing
|
||||
// debris chunks and (if dmg>0) exploding
|
||||
// health - Damage sustained by object before it "dies". On death,
|
||||
|
@ -3625,7 +3614,7 @@ void SP_func_killbox (edict_t *ent)
|
|||
// 1 = tank/thud.wav
|
||||
// 2 = weapons/rg_hum.wav
|
||||
// 3 = weapons/rockfly.wav
|
||||
//
|
||||
//
|
||||
// SF=1 - Trigger spawn. Func_pushable is invisible and non-solid until triggered.
|
||||
// 2 - No knockback. Not moved by weapon fire (invulnerable func_pushables aren't
|
||||
// affected by weapon fire in either case)
|
||||
|
@ -3639,15 +3628,14 @@ void SP_func_killbox (edict_t *ent)
|
|||
//
|
||||
qboolean box_movestep (edict_t *ent, vec3_t move, qboolean relink)
|
||||
{
|
||||
vec3_t oldorg, neworg, end;
|
||||
vec3_t neworg, end;
|
||||
trace_t trace;
|
||||
float stepsize;
|
||||
|
||||
vec3_t maxs, mins, origin;
|
||||
|
||||
// try the move
|
||||
// try the move
|
||||
VectorAdd (ent->s.origin, ent->origin_offset, origin);
|
||||
VectorCopy (origin, oldorg);
|
||||
VectorAdd (origin, move, neworg);
|
||||
VectorCopy (ent->size, maxs);
|
||||
VectorScale (maxs, 0.5, maxs);
|
||||
|
@ -3735,12 +3723,12 @@ void box_use (edict_t *self, edict_t *other, edict_t *activator)
|
|||
qboolean box_walkmove (edict_t *ent, float yaw, float dist)
|
||||
{
|
||||
vec3_t move;
|
||||
|
||||
|
||||
if (!ent->groundentity && !(ent->flags & (FL_FLY|FL_SWIM)))
|
||||
return false;
|
||||
|
||||
yaw = yaw*M_PI*2 / 360;
|
||||
|
||||
|
||||
move[0] = cos(yaw)*dist;
|
||||
move[1] = sin(yaw)*dist;
|
||||
move[2] = 0;
|
||||
|
@ -3787,7 +3775,6 @@ void box_touch (edict_t *self, edict_t *other, cplane_t *plane, csurface_t *surf
|
|||
float v11, v12, v21, v22;
|
||||
int axis;
|
||||
vec3_t v1, v2, v;
|
||||
vec3_t origin;
|
||||
edict_t *bottom, *top;
|
||||
|
||||
// if other is another func_pushable, AND self is in
|
||||
|
@ -3818,13 +3805,13 @@ void box_touch (edict_t *self, edict_t *other, cplane_t *plane, csurface_t *surf
|
|||
}
|
||||
if (self->waterlevel==0) return;
|
||||
|
||||
// 06/03/00 change: If either func_pushable is currently being moved
|
||||
// 06/03/00 change: If either func_pushable is currently being moved
|
||||
// by crane, bail out.
|
||||
if (self->crane_control) return;
|
||||
if (other->crane_control) return;
|
||||
|
||||
// Since func_pushables have a bounding box, impact will ALWAYS be on one of the
|
||||
// planes of the bounding box. The "plane" argument isn't always used, but since
|
||||
// planes of the bounding box. The "plane" argument isn't always used, but since
|
||||
// all entities involved use a parallelepiped bounding box we can rely on offsets
|
||||
// to centers to figure out which side the impact is on.
|
||||
VectorAdd (self->absmax,self->absmin,v1);
|
||||
|
@ -3846,8 +3833,8 @@ void box_touch (edict_t *self, edict_t *other, cplane_t *plane, csurface_t *surf
|
|||
self->velocity[axis] = v12;
|
||||
other->velocity[axis] = v22;
|
||||
|
||||
// Assuming frictionless surfaces, momentum of crate is conserved in
|
||||
// other two directions (so velocity doesn't change)... BUT we want
|
||||
// Assuming frictionless surfaces, momentum of crate is conserved in
|
||||
// other two directions (so velocity doesn't change)... BUT we want
|
||||
// to get the bottom crate out from underneath the other one,
|
||||
// so we're gonna be a little "creative"
|
||||
if (axis==2) {
|
||||
|
@ -3891,7 +3878,6 @@ void box_touch (edict_t *self, edict_t *other, cplane_t *plane, csurface_t *surf
|
|||
}
|
||||
// if other is a monster or a player and box is on other's head and moving down,
|
||||
// do impact damage
|
||||
VectorAdd(self->s.origin,self->origin_offset,origin);
|
||||
if ( other->client || (other->svflags & SVF_MONSTER) )
|
||||
{
|
||||
VectorAdd (self->absmax,self->absmin,v1);
|
||||
|
@ -3986,7 +3972,7 @@ void box_touch (edict_t *self, edict_t *other, cplane_t *plane, csurface_t *surf
|
|||
// Give object a little nudge to give us some clearance
|
||||
VectorSubtract (v1, other->s.origin, v);
|
||||
box_walkmove (self, vectoyaw(v), 4);
|
||||
// Now get the offset from the player to the object,
|
||||
// Now get the offset from the player to the object,
|
||||
// and preserve that offset in ClientThink by shifting
|
||||
// object as needed.
|
||||
VectorSubtract(other->s.origin,self->s.origin,self->offset);
|
||||
|
@ -4460,7 +4446,7 @@ void SP_func_force_wall(edict_t *ent)
|
|||
if (!ent->speed)
|
||||
ent->speed = FRAMETIME;
|
||||
//CW---
|
||||
|
||||
|
||||
// if (!ent->style) //CW: commented out to allow black particles
|
||||
// ent->style = 208;
|
||||
|
||||
|
@ -4519,7 +4505,7 @@ void swinging_door_killed (edict_t *self, edict_t *inflictor, edict_t *attacker,
|
|||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// trigger all paired doors
|
||||
for (ent = master ; ent ; ent = ent->teamchain)
|
||||
{
|
||||
|
@ -4638,7 +4624,7 @@ void func_air_on(edict_t *self, edict_t *other, edict_t *activator)
|
|||
}
|
||||
|
||||
/*QUAKED func_air (0 .5 .8) ? StartOn
|
||||
Allows player to breathe when inside the trigger field, despite
|
||||
Allows player to breathe when inside the trigger field, despite
|
||||
the environment they're currently in (eg. water).
|
||||
If there is no targetname set, the trigger field is always active.
|
||||
|
||||
|
@ -4674,4 +4660,4 @@ void SP_func_air(edict_t *self)
|
|||
self->touch = func_air_touch;
|
||||
gi.linkentity(self);
|
||||
}
|
||||
//CW---
|
||||
//CW---
|
||||
|
|
82
src/g_misc.c
82
src/g_misc.c
|
@ -77,7 +77,7 @@ void VelocityForDamage (int damage, vec3_t v)
|
|||
|
||||
if (damage < 50)
|
||||
VectorScale (v, 0.7, v);
|
||||
else
|
||||
else
|
||||
VectorScale (v, 1.2, v);
|
||||
}
|
||||
|
||||
|
@ -528,7 +528,7 @@ void path_corner_touch (edict_t *self, edict_t *other, cplane_t *plane, csurface
|
|||
|
||||
if (other->movetarget != self)
|
||||
return;
|
||||
|
||||
|
||||
if (other->enemy)
|
||||
return;
|
||||
|
||||
|
@ -572,7 +572,7 @@ void path_corner_touch (edict_t *self, edict_t *other, cplane_t *plane, csurface
|
|||
}
|
||||
else
|
||||
{
|
||||
|
||||
|
||||
if (!other->movetarget)
|
||||
{
|
||||
other->monsterinfo.pausetime = level.time + 100000000;
|
||||
|
@ -672,7 +672,7 @@ void point_combat_touch (edict_t *self, edict_t *other, cplane_t *plane, csurfac
|
|||
else
|
||||
{
|
||||
char *savetarget;
|
||||
|
||||
|
||||
savetarget = self->target;
|
||||
self->target = self->pathtarget;
|
||||
if (other->enemy && other->enemy->client)
|
||||
|
@ -1025,7 +1025,7 @@ void func_explosive_explode (edict_t *self)
|
|||
if (!mass)
|
||||
mass = 75;
|
||||
|
||||
// Lazarus: Use traditional debris for gib_type=0, but non-zero gib_type gives equal
|
||||
// Lazarus: Use traditional debris for gib_type=0, but non-zero gib_type gives equal
|
||||
// weight to all models.
|
||||
|
||||
if ( (self->gib_type > 0) && (self->gib_type < 10))
|
||||
|
@ -1079,7 +1079,7 @@ void func_explosive_explode (edict_t *self)
|
|||
ThrowDebris (self, "models/objects/debris1/tris.md2", 1, chunkorigin, 0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// small chunks
|
||||
count = mass / 25;
|
||||
if (count > 16)
|
||||
|
@ -1248,7 +1248,6 @@ void barrel_explode (edict_t *self)
|
|||
{
|
||||
vec3_t org;
|
||||
float spd;
|
||||
vec3_t save;
|
||||
vec3_t size;
|
||||
|
||||
if (self->gib_type == GIB_BARREL)
|
||||
|
@ -1256,7 +1255,6 @@ void barrel_explode (edict_t *self)
|
|||
func_explosive_explode(self);
|
||||
return;
|
||||
}
|
||||
VectorCopy (self->s.origin, save);
|
||||
VectorMA (self->absmin, 0.5, self->size, self->s.origin);
|
||||
|
||||
T_RadiusDamage (self, self->activator, self->dmg, NULL, self->dmg+40, MOD_BARREL, -0.5);
|
||||
|
@ -1439,7 +1437,7 @@ void misc_blackhole_think (edict_t *self)
|
|||
if (++self->s.frame < 19)
|
||||
self->nextthink = level.time + FRAMETIME;
|
||||
else
|
||||
{
|
||||
{
|
||||
self->s.frame = 0;
|
||||
self->nextthink = level.time + FRAMETIME;
|
||||
}
|
||||
|
@ -1461,7 +1459,7 @@ void SP_misc_blackhole (edict_t *ent)
|
|||
VectorSet (ent->maxs, 64, 64, 8);
|
||||
ent->s.modelindex = gi.modelindex ("models/objects/black/tris.md2");
|
||||
// ent->s.renderfx = RF_TRANSLUCENT; // Lazarus: For some oddball reason if this is set
|
||||
// here, blackhole generator will be
|
||||
// here, blackhole generator will be
|
||||
// invisible. Rogue MP has the same problem.
|
||||
ent->use = misc_blackhole_use;
|
||||
ent->think = misc_blackhole_think;
|
||||
|
@ -1478,7 +1476,7 @@ void misc_eastertank_think (edict_t *self)
|
|||
if (++self->s.frame < 293)
|
||||
self->nextthink = level.time + FRAMETIME;
|
||||
else
|
||||
{
|
||||
{
|
||||
self->s.frame = 254;
|
||||
self->nextthink = level.time + FRAMETIME;
|
||||
}
|
||||
|
@ -1512,7 +1510,7 @@ void misc_easterchick_think (edict_t *self)
|
|||
if (++self->s.frame < 247)
|
||||
self->nextthink = level.time + FRAMETIME;
|
||||
else
|
||||
{
|
||||
{
|
||||
self->s.frame = 208;
|
||||
self->nextthink = level.time + FRAMETIME;
|
||||
}
|
||||
|
@ -1546,7 +1544,7 @@ void misc_easterchick2_think (edict_t *self)
|
|||
if (++self->s.frame < 287)
|
||||
self->nextthink = level.time + FRAMETIME;
|
||||
else
|
||||
{
|
||||
{
|
||||
self->s.frame = 248;
|
||||
self->nextthink = level.time + FRAMETIME;
|
||||
}
|
||||
|
@ -1836,7 +1834,7 @@ void SP_misc_viper (edict_t *ent)
|
|||
}
|
||||
|
||||
|
||||
/*QUAKED misc_bigviper (1 .5 0) (-176 -120 -24) (176 120 72)
|
||||
/*QUAKED misc_bigviper (1 .5 0) (-176 -120 -24) (176 120 72)
|
||||
This is a large stationary viper as seen in Paul's intro
|
||||
*/
|
||||
void SP_misc_bigviper (edict_t *ent)
|
||||
|
@ -1875,7 +1873,7 @@ void misc_viper_bomb_touch (edict_t *self, edict_t *other, cplane_t *plane, csur
|
|||
|
||||
if (level.num_reflectors)
|
||||
ReflectExplosion (TE_EXPLOSION2, self->s.origin);
|
||||
|
||||
|
||||
self->svflags |= SVF_NOCLIENT;
|
||||
self->solid = SOLID_NOT;
|
||||
self->use = misc_viper_bomb_use;
|
||||
|
@ -2577,10 +2575,10 @@ void SP_func_clock_screen(edict_t *self)
|
|||
base or splash effect
|
||||
LANDMARK (=64) If set, player angles and speed are preserved
|
||||
|
||||
misc_teleporter selects a random pick from up to 8 targets for a
|
||||
misc_teleporter selects a random pick from up to 8 targets for a
|
||||
destination
|
||||
|
||||
trigger_transition with same name as teleporter can be used to
|
||||
trigger_transition with same name as teleporter can be used to
|
||||
teleport multiple non-player entities
|
||||
================================================================== */
|
||||
void teleport_transition_ents (edict_t *transition, edict_t *teleporter, edict_t *destination)
|
||||
|
@ -2635,7 +2633,7 @@ void teleport_transition_ents (edict_t *transition, edict_t *teleporter, edict_t
|
|||
if (angles[YAW])
|
||||
{
|
||||
vec3_t spawn_offset;
|
||||
|
||||
|
||||
VectorSubtract(ent->s.origin,start,spawn_offset);
|
||||
VectorCopy(spawn_offset,v);
|
||||
G_ProjectSource (vec3_origin, v, forward, right, spawn_offset);
|
||||
|
@ -2685,7 +2683,7 @@ void teleport_transition_ents (edict_t *transition, edict_t *teleporter, edict_t
|
|||
if (angles[YAW])
|
||||
{
|
||||
vec3_t spawn_offset;
|
||||
|
||||
|
||||
VectorSubtract(ent->s.origin,start,spawn_offset);
|
||||
VectorCopy(spawn_offset,v);
|
||||
G_ProjectSource (vec3_origin, v, forward, right, spawn_offset);
|
||||
|
@ -2703,7 +2701,7 @@ void teleport_transition_ents (edict_t *transition, edict_t *teleporter, edict_t
|
|||
}
|
||||
}
|
||||
|
||||
// G_PickDestination is identical to G_PickTarget, but w/o the
|
||||
// G_PickDestination is identical to G_PickTarget, but w/o the
|
||||
// obnoxious error message.
|
||||
|
||||
#define MAXCHOICES 8
|
||||
|
@ -2954,7 +2952,7 @@ void SP_misc_teleporter (edict_t *ent)
|
|||
VectorSet (trig->mins, -8, -8, 8);
|
||||
VectorSet (trig->maxs, 8, 8, 24);
|
||||
gi.linkentity (trig);
|
||||
|
||||
|
||||
}
|
||||
|
||||
void trigger_teleporter_use (edict_t *self, edict_t *other, edict_t *activator)
|
||||
|
@ -3124,7 +3122,7 @@ void fountain_animate(edict_t *self)
|
|||
if (self->s.frame >= self->framenumbers)
|
||||
self->s.frame = self->startframe;
|
||||
|
||||
// Check if it's time to fade yet (self->wait would have been set in
|
||||
// Check if it's time to fade yet (self->wait would have been set in
|
||||
// spawn_precipitation or drop_touch if so).
|
||||
|
||||
if (self->wait && (level.time >= self->wait))
|
||||
|
@ -3162,7 +3160,7 @@ void leaf_fade2(edict_t *self)
|
|||
if (level.time >= self->wait)
|
||||
self->wait = 0; //reset for next use with leaf_fade2 (remember, self->count is 1)
|
||||
}
|
||||
//CW---
|
||||
//CW---
|
||||
}
|
||||
|
||||
void leaf_fade(edict_t *self)
|
||||
|
@ -3191,8 +3189,8 @@ void leaf_fade(edict_t *self)
|
|||
else
|
||||
self->think = leaf_fade; //reset from fountain_animate
|
||||
}
|
||||
//CW---
|
||||
|
||||
//CW---
|
||||
|
||||
gi.linkentity(self);
|
||||
}
|
||||
|
||||
|
@ -3364,7 +3362,7 @@ void target_precipitation_think (edict_t *self)
|
|||
|
||||
self->nextthink = level.time + FRAMETIME;
|
||||
|
||||
// Don't start raining until player is in the game. The following
|
||||
// Don't start raining until player is in the game. The following
|
||||
// takes care of both initial map load conditions and restored saved games.
|
||||
// This is a gross abuse of groundentity_linkcount. Sue me.
|
||||
if (g_edicts[1].linkcount == self->groundentity_linkcount)
|
||||
|
@ -3405,9 +3403,9 @@ void target_precipitation_think (edict_t *self)
|
|||
u = crandom() * (self->tright[0] - self->bleft[0])/2;
|
||||
v = crandom() * (self->tright[1] - self->bleft[1])/2;
|
||||
z = crandom() * (self->tright[2] - self->bleft[2])/2;
|
||||
|
||||
|
||||
VectorCopy(center, org);
|
||||
|
||||
|
||||
org[0] += u;
|
||||
org[1] += v;
|
||||
org[2] += z;
|
||||
|
@ -3508,7 +3506,7 @@ void SP_target_precipitation (edict_t *ent)
|
|||
ent->spawnflags &= ~SF_WEATHER_SPLASH;
|
||||
|
||||
ent->use = target_precipitation_use;
|
||||
|
||||
|
||||
if (!ent->count)
|
||||
ent->count = 1;
|
||||
|
||||
|
@ -3568,7 +3566,7 @@ void target_fountain_think (edict_t *self)
|
|||
if (!(self->spawnflags & SF_WEATHER_FIRE_ONCE))
|
||||
self->nextthink = level.time + FRAMETIME;
|
||||
|
||||
// Don't start raining until player is in the game. The following
|
||||
// Don't start raining until player is in the game. The following
|
||||
// takes care of both initial map load conditions and restored saved games.
|
||||
// This is a gross abuse of groundentity_linkcount. Sue me.
|
||||
if (g_edicts[1].linkcount == self->groundentity_linkcount)
|
||||
|
@ -3611,9 +3609,9 @@ void target_fountain_think (edict_t *self)
|
|||
u = crandom() * (self->tright[0] - self->bleft[0])/2;
|
||||
v = crandom() * (self->tright[1] - self->bleft[1])/2;
|
||||
z = crandom() * (self->tright[2] - self->bleft[2])/2;
|
||||
|
||||
|
||||
VectorCopy(center, org);
|
||||
|
||||
|
||||
org[0] += u;
|
||||
org[1] += v;
|
||||
org[2] += z;
|
||||
|
@ -3718,7 +3716,7 @@ void SP_target_fountain (edict_t *ent)
|
|||
//CW---
|
||||
|
||||
ent->use = target_fountain_use;
|
||||
|
||||
|
||||
if (!ent->count)
|
||||
ent->count = 1;
|
||||
|
||||
|
@ -3812,7 +3810,7 @@ int PatchDeadSoldier ()
|
|||
sprintf (infilename, "baseq2/%s", DEADSOLDIER_MODEL);
|
||||
if ( !(infile = fopen (infilename, "rb")) )
|
||||
{
|
||||
// If file doesn't exist on user's hard disk, it must be in
|
||||
// If file doesn't exist on user's hard disk, it must be in
|
||||
// pak0.pak
|
||||
|
||||
pak_header_t pakheader;
|
||||
|
@ -3866,7 +3864,7 @@ int PatchDeadSoldier ()
|
|||
else
|
||||
{
|
||||
fread (&model, sizeof (dmdl_t), 1, infile);
|
||||
|
||||
|
||||
datasize = model.ofs_end - model.ofs_skins;
|
||||
if ( !(data = malloc (datasize)) ) // make sure freed locally
|
||||
{
|
||||
|
@ -3874,13 +3872,13 @@ int PatchDeadSoldier ()
|
|||
return 0;
|
||||
}
|
||||
fread (data, sizeof (byte), datasize, infile);
|
||||
|
||||
|
||||
fclose (infile);
|
||||
}
|
||||
|
||||
|
||||
// update model info
|
||||
model.num_skins = NUM_SKINS;
|
||||
|
||||
|
||||
// Already had 1 skin, so new offset doesn't include that one
|
||||
newoffset = (model.num_skins-1) * MAX_SKINNAME;
|
||||
model.ofs_st += newoffset;
|
||||
|
@ -3888,7 +3886,7 @@ int PatchDeadSoldier ()
|
|||
model.ofs_frames += newoffset;
|
||||
model.ofs_glcmds += newoffset;
|
||||
model.ofs_end += newoffset;
|
||||
|
||||
|
||||
// save new model
|
||||
sprintf (outfilename, "%s/models", gamedir->string); // make some dirs if needed
|
||||
_mkdir (outfilename);
|
||||
|
@ -3902,7 +3900,7 @@ int PatchDeadSoldier ()
|
|||
_mkdir (outfilename);
|
||||
|
||||
sprintf (outfilename, "%s/%s", gamedir->string, DEADSOLDIER_MODEL);
|
||||
|
||||
|
||||
if ( !(outfile = fopen (outfilename, "wb")) )
|
||||
{
|
||||
// file couldn't be created for some other reason
|
||||
|
@ -3910,12 +3908,12 @@ int PatchDeadSoldier ()
|
|||
free (data);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
fwrite (&model, sizeof (dmdl_t), 1, outfile);
|
||||
fwrite (skins, sizeof (char), model.num_skins*MAX_SKINNAME, outfile);
|
||||
data += MAX_SKINNAME;
|
||||
fwrite (data, sizeof (byte), datasize, outfile);
|
||||
|
||||
|
||||
fclose (outfile);
|
||||
gi.dprintf ("PatchDeadSoldier: Saved %s\n", outfilename);
|
||||
free (data);
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
gi.WriteByte (TE_DEBUGTRAIL);
|
||||
gi.WritePosition (pt1);
|
||||
gi.WritePosition (pt2);
|
||||
gi.multicast (pt1, MULTICAST_PVS);
|
||||
gi.multicast (pt1, MULTICAST_PVS);
|
||||
|
||||
self->nextthink = level.time + 10;
|
||||
*/
|
||||
|
@ -33,8 +33,6 @@ qboolean parasite_drain_attack_ok (vec3_t start, vec3_t end);
|
|||
// shotchance: 0-1, chance they'll take the shot if it's clear.
|
||||
qboolean blocked_checkshot (edict_t *self, float shotChance)
|
||||
{
|
||||
qboolean playerVisible;
|
||||
|
||||
if(!self->enemy)
|
||||
return false;
|
||||
|
||||
|
@ -73,16 +71,15 @@ qboolean blocked_checkshot (edict_t *self, float shotChance)
|
|||
if (tr.ent != self->enemy)
|
||||
{
|
||||
self->monsterinfo.aiflags |= AI_BLOCKED;
|
||||
|
||||
|
||||
if(self->monsterinfo.attack)
|
||||
self->monsterinfo.attack(self);
|
||||
|
||||
|
||||
self->monsterinfo.aiflags &= ~AI_BLOCKED;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
playerVisible = visible (self, self->enemy);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -149,7 +146,7 @@ qboolean blocked_checkplat (edict_t *self, float dist)
|
|||
// if(g_showlogic && g_showlogic->value)
|
||||
// gi.dprintf("player above, and plat will raise. using!\n");
|
||||
plat->use (plat, self, self);
|
||||
return true;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else if(playerPosition == -1)
|
||||
|
@ -478,8 +475,7 @@ qboolean monsterlost_checkhint (edict_t *self)
|
|||
edict_t *closest;
|
||||
float closest_range = 1000000;
|
||||
edict_t *start, *destination;
|
||||
int field;
|
||||
int count1=0, count2=0, count3=0, count4=0, count5=0;
|
||||
int count1=0, count2=0, count4=0, count5=0;
|
||||
float r;
|
||||
int i;
|
||||
qboolean hint_path_represented[MAX_HINT_CHAINS];
|
||||
|
@ -498,14 +494,12 @@ qboolean monsterlost_checkhint (edict_t *self)
|
|||
|
||||
if (self->monsterinfo.aiflags & AI_STAND_GROUND)
|
||||
return false;
|
||||
|
||||
|
||||
if (!strcmp(self->classname, "monster_turret"))
|
||||
return false;
|
||||
|
||||
monster_pathchain = NULL;
|
||||
|
||||
field = FOFS(classname);
|
||||
|
||||
// find all the hint_paths.
|
||||
// FIXME - can we not do this every time?
|
||||
for (i=0; i < num_hint_paths; i++)
|
||||
|
@ -529,7 +523,7 @@ qboolean monsterlost_checkhint (edict_t *self)
|
|||
e = e->hint_chain;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// filter them by distance and visibility to the monster
|
||||
e = monster_pathchain;
|
||||
checkpoint = NULL;
|
||||
|
@ -617,7 +611,6 @@ qboolean monsterlost_checkhint (edict_t *self)
|
|||
|
||||
count1 = 0;
|
||||
count2 = 0;
|
||||
count3 = 0;
|
||||
count4 = 0;
|
||||
count5 = 0;
|
||||
|
||||
|
@ -705,14 +698,14 @@ qboolean monsterlost_checkhint (edict_t *self)
|
|||
checkpoint = e;
|
||||
e = e->target_hint_chain;
|
||||
}
|
||||
|
||||
|
||||
// at this point we should have:
|
||||
// monster_pathchain - a list of "monster valid" hint_path nodes linked together by monster_hint_chain
|
||||
// target_pathcain - a list of "target valid" hint_path nodes linked together by target_hint_chain. these
|
||||
// are filtered such that only nodes which are on the same chain as "monster valid" nodes
|
||||
//
|
||||
// Now, we figure out which "monster valid" node we want to use
|
||||
//
|
||||
//
|
||||
// To do this, we first off make sure we have some target nodes. If we don't, there are no valid hint_path nodes
|
||||
// for us to take
|
||||
//
|
||||
|
@ -738,8 +731,8 @@ qboolean monsterlost_checkhint (edict_t *self)
|
|||
hint_path_represented[e->hint_chain_id] = true;
|
||||
e = e->target_hint_chain;
|
||||
}
|
||||
|
||||
// traverse the monster_pathchain - if the hint_node isn't represented in the "target valid" chain list,
|
||||
|
||||
// traverse the monster_pathchain - if the hint_node isn't represented in the "target valid" chain list,
|
||||
// remove it
|
||||
// if it is on the list, check it for range from the monster. If the range is the closest, keep it
|
||||
//
|
||||
|
@ -788,7 +781,7 @@ qboolean monsterlost_checkhint (edict_t *self)
|
|||
|
||||
if (!closest)
|
||||
return false;
|
||||
|
||||
|
||||
destination = closest;
|
||||
|
||||
self->monsterinfo.goal_hint = destination;
|
||||
|
@ -810,7 +803,7 @@ void hint_path_touch (edict_t *self, edict_t *other, cplane_t *plane, csurface_t
|
|||
// int chain; // direction - (-1) = upstream, (1) = downstream, (0) = done
|
||||
qboolean goalFound = false;
|
||||
|
||||
if(other->monsterinfo.aiflags & AI_MEDIC_PATROL)
|
||||
if(other->monsterinfo.aiflags & AI_MEDIC_PATROL)
|
||||
{
|
||||
if(other->movetarget == self)
|
||||
medic_NextPatrolPoint(other,self);
|
||||
|
@ -828,7 +821,7 @@ void hint_path_touch (edict_t *self, edict_t *other, cplane_t *plane, csurface_t
|
|||
if(other->movetarget == self)
|
||||
{
|
||||
goal = other->monsterinfo.goal_hint;
|
||||
|
||||
|
||||
// if the monster is where he wants to be
|
||||
if (goal == self)
|
||||
{
|
||||
|
@ -925,10 +918,9 @@ void InitHintPaths (void)
|
|||
{
|
||||
edict_t *e, *current;
|
||||
int field, i, count2;
|
||||
qboolean errors = false;
|
||||
|
||||
hint_paths_present = 0;
|
||||
|
||||
|
||||
// check all the hint_paths.
|
||||
field = FOFS(classname);
|
||||
e = G_Find(NULL, field, "hint_path");
|
||||
|
@ -949,7 +941,6 @@ void InitHintPaths (void)
|
|||
{
|
||||
gi.dprintf ("Hint path at %s marked as endpoint with both target (%s) and targetname (%s)\n",
|
||||
vtos (e->s.origin), e->target, e->targetname);
|
||||
errors = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -974,22 +965,20 @@ void InitHintPaths (void)
|
|||
e = G_Find(NULL, field, current->target);
|
||||
if (G_Find(e, field, current->target))
|
||||
{
|
||||
gi.dprintf ("\nForked hint path at %s detected for chain %d, target %s\n",
|
||||
gi.dprintf ("\nForked hint path at %s detected for chain %d, target %s\n",
|
||||
vtos (current->s.origin), num_hint_paths, current->target);
|
||||
hint_path_start[i]->hint_chain = NULL;
|
||||
count2 = 0;
|
||||
errors = true;
|
||||
continue;
|
||||
}
|
||||
while (e)
|
||||
{
|
||||
if (e->hint_chain)
|
||||
{
|
||||
gi.dprintf ("\nCircular hint path at %s detected for chain %d, targetname %s\n",
|
||||
gi.dprintf ("\nCircular hint path at %s detected for chain %d, targetname %s\n",
|
||||
vtos (e->s.origin), num_hint_paths, e->targetname);
|
||||
hint_path_start[i]->hint_chain = NULL;
|
||||
count2 = 0;
|
||||
errors = true;
|
||||
break;
|
||||
}
|
||||
count2++;
|
||||
|
@ -1001,7 +990,7 @@ void InitHintPaths (void)
|
|||
e = G_Find(NULL, field, current->target);
|
||||
if (G_Find(e, field, current->target))
|
||||
{
|
||||
gi.dprintf ("\nForked hint path at %s detected for chain %d, target %s\n",
|
||||
gi.dprintf ("\nForked hint path at %s detected for chain %d, target %s\n",
|
||||
vtos (current->s.origin), num_hint_paths, current->target);
|
||||
hint_path_start[i]->hint_chain = NULL;
|
||||
count2 = 0;
|
||||
|
@ -1024,12 +1013,12 @@ qboolean inback (edict_t *self, edict_t *other)
|
|||
vec3_t vec;
|
||||
float dot;
|
||||
vec3_t forward;
|
||||
|
||||
|
||||
AngleVectors (self->s.angles, forward, NULL, NULL);
|
||||
VectorSubtract (other->s.origin, self->s.origin, vec);
|
||||
VectorNormalize (vec);
|
||||
dot = DotProduct (vec, forward);
|
||||
|
||||
|
||||
if (dot < -0.3)
|
||||
return true;
|
||||
return false;
|
||||
|
@ -1038,7 +1027,7 @@ qboolean inback (edict_t *self, edict_t *other)
|
|||
float realrange (edict_t *self, edict_t *other)
|
||||
{
|
||||
vec3_t dir;
|
||||
|
||||
|
||||
VectorSubtract (self->s.origin, other->s.origin, dir);
|
||||
return VectorLength(dir);
|
||||
}
|
||||
|
@ -1069,7 +1058,7 @@ qboolean face_wall (edict_t *self)
|
|||
|
||||
//
|
||||
// Monster "Bad" Areas
|
||||
//
|
||||
//
|
||||
|
||||
void badarea_touch (edict_t *ent, edict_t *other, cplane_t *plane, csurface_t *surf)
|
||||
{
|
||||
|
@ -1080,7 +1069,7 @@ edict_t *SpawnBadArea(vec3_t mins, vec3_t maxs, float lifespan, edict_t *owner)
|
|||
{
|
||||
edict_t *badarea;
|
||||
vec3_t origin;
|
||||
|
||||
|
||||
VectorAdd(mins, maxs, origin);
|
||||
VectorScale(origin, 0.5, origin);
|
||||
|
||||
|
@ -1139,7 +1128,7 @@ edict_t *CheckForBadArea(edict_t *ent)
|
|||
return hit;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -1179,7 +1168,7 @@ void PredictAim (edict_t *target, vec3_t start, float bolt_speed, qboolean eye_h
|
|||
VectorSubtract (vec, start, aimdir);
|
||||
VectorNormalize (aimdir);
|
||||
}
|
||||
|
||||
|
||||
if (aimpoint)
|
||||
{
|
||||
VectorCopy (vec, aimpoint);
|
||||
|
@ -1192,12 +1181,12 @@ qboolean below (edict_t *self, edict_t *other)
|
|||
vec3_t vec;
|
||||
float dot;
|
||||
vec3_t down;
|
||||
|
||||
|
||||
VectorSubtract (other->s.origin, self->s.origin, vec);
|
||||
VectorNormalize (vec);
|
||||
VectorSet (down, 0, 0, -1);
|
||||
dot = DotProduct (vec, down);
|
||||
|
||||
|
||||
if (dot > 0.95) // 18 degree arc below
|
||||
return true;
|
||||
return false;
|
||||
|
@ -1235,7 +1224,7 @@ void drawbbox (edict_t *self)
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
for (i=0; i<= 3; i++)
|
||||
{
|
||||
for (j=0; j<= 2; j++)
|
||||
|
@ -1244,7 +1233,7 @@ void drawbbox (edict_t *self)
|
|||
gi.WriteByte (TE_DEBUGTRAIL);
|
||||
gi.WritePosition (pt[starts[i]]);
|
||||
gi.WritePosition (pt[lines[i][j]]);
|
||||
gi.multicast (pt[starts[i]], MULTICAST_ALL);
|
||||
gi.multicast (pt[starts[i]], MULTICAST_ALL);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1256,7 +1245,7 @@ void drawbbox (edict_t *self)
|
|||
gi.WriteByte (TE_DEBUGTRAIL);
|
||||
gi.WritePosition (self->s.origin);
|
||||
gi.WritePosition (newbox);
|
||||
gi.multicast (self->s.origin, MULTICAST_PVS);
|
||||
gi.multicast (self->s.origin, MULTICAST_PVS);
|
||||
VectorClear (newbox);
|
||||
|
||||
VectorMA (self->s.origin, 50, r, newbox);
|
||||
|
@ -1264,7 +1253,7 @@ void drawbbox (edict_t *self)
|
|||
gi.WriteByte (TE_DEBUGTRAIL);
|
||||
gi.WritePosition (self->s.origin);
|
||||
gi.WritePosition (newbox);
|
||||
gi.multicast (self->s.origin, MULTICAST_PVS);
|
||||
gi.multicast (self->s.origin, MULTICAST_PVS);
|
||||
VectorClear (newbox);
|
||||
|
||||
VectorMA (self->s.origin, 50, u, newbox);
|
||||
|
@ -1272,7 +1261,7 @@ void drawbbox (edict_t *self)
|
|||
gi.WriteByte (TE_DEBUGTRAIL);
|
||||
gi.WritePosition (self->s.origin);
|
||||
gi.WritePosition (newbox);
|
||||
gi.multicast (self->s.origin, MULTICAST_PVS);
|
||||
gi.multicast (self->s.origin, MULTICAST_PVS);
|
||||
VectorClear (newbox);
|
||||
}
|
||||
|
||||
|
@ -1333,7 +1322,7 @@ edict_t * PickCoopTarget (edict_t *self)
|
|||
|
||||
// get a number from 0 to (num_targets-1)
|
||||
targetID = (random() * (float)num_targets);
|
||||
|
||||
|
||||
// just in case we got a 1.0 from random
|
||||
if (targetID == num_targets)
|
||||
targetID--;
|
||||
|
|
94
src/g_phys.c
94
src/g_phys.c
|
@ -10,7 +10,7 @@ edict_t *blocker;
|
|||
|
||||
pushmove objects do not obey gravity, and do not interact with each other or trigger fields, but block normal movement and push normal objects when they move.
|
||||
|
||||
onground is set for toss objects when they come to a complete rest. it is set for steping or walking objects
|
||||
onground is set for toss objects when they come to a complete rest. it is set for steping or walking objects
|
||||
|
||||
doors, plats, etc are SOLID_BSP, and MOVETYPE_PUSH
|
||||
bonus items are SOLID_TRIGGER touch, and MOVETYPE_TOSS
|
||||
|
@ -32,7 +32,7 @@ solid_edge items only clip against bsp models.
|
|||
void other_FallingDamage (edict_t *ent)
|
||||
{
|
||||
float delta;
|
||||
float fall_time, fall_value;
|
||||
float fall_value;
|
||||
int damage;
|
||||
vec3_t dir;
|
||||
|
||||
|
@ -69,8 +69,6 @@ void other_FallingDamage (edict_t *ent)
|
|||
fall_value = delta * 0.5;
|
||||
if (fall_value > 40) fall_value = 40;
|
||||
|
||||
fall_time = level.time + FALL_TIME;
|
||||
|
||||
if (delta > MAX_SAFE_FALLDIST) //CW: reduced safe falling distance, and replaced hardcoded value
|
||||
{
|
||||
ent->pain_debounce_time = level.time; // no normal pain sound
|
||||
|
@ -128,7 +126,7 @@ edict_t *SV_TestEntityPosition (edict_t *ent)
|
|||
else
|
||||
return world;
|
||||
}
|
||||
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -180,7 +178,7 @@ qboolean SV_RunThink (edict_t *ent)
|
|||
return true;
|
||||
if (thinktime > level.time + 0.001)
|
||||
return true;
|
||||
|
||||
|
||||
ent->nextthink = 0;
|
||||
if (!ent->think)
|
||||
gi.error ("NULL ent->think for %s",ent->classname);
|
||||
|
@ -205,7 +203,7 @@ void SV_Impact (edict_t *e1, trace_t *trace)
|
|||
|
||||
if (e1->touch && e1->solid != SOLID_NOT)
|
||||
e1->touch (e1, e2, &trace->plane, trace->surface);
|
||||
|
||||
|
||||
if (e2->touch && e2->solid != SOLID_NOT)
|
||||
e2->touch (e2, e1, NULL, NULL);
|
||||
}
|
||||
|
@ -226,13 +224,13 @@ int ClipVelocity (vec3_t in, vec3_t normal, vec3_t out, float overbounce)
|
|||
float backoff;
|
||||
float change;
|
||||
int i, blocked;
|
||||
|
||||
|
||||
blocked = 0;
|
||||
if (normal[2] > 0)
|
||||
blocked |= 1; // floor
|
||||
if (!normal[2])
|
||||
blocked |= 2; // step
|
||||
|
||||
|
||||
backoff = DotProduct (in, normal) * overbounce;
|
||||
|
||||
for (i=0 ; i<3 ; i++)
|
||||
|
@ -276,12 +274,12 @@ int SV_FlyMove (edict_t *ent, float time, int mask)
|
|||
|
||||
retry:
|
||||
numbumps = 4;
|
||||
|
||||
|
||||
blocked = 0;
|
||||
VectorCopy (ent->velocity, original_velocity);
|
||||
VectorCopy (ent->velocity, primal_velocity);
|
||||
numplanes = 0;
|
||||
|
||||
|
||||
time_left = time;
|
||||
|
||||
ent->groundentity = NULL;
|
||||
|
@ -371,9 +369,9 @@ retry:
|
|||
if (!ent->inuse)
|
||||
break; // removed by the impact function
|
||||
|
||||
|
||||
|
||||
time_left -= time_left * trace.fraction;
|
||||
|
||||
|
||||
// cliped to another plane
|
||||
if (numplanes >= MAX_CLIP_PLANES)
|
||||
{ // this shouldn't really happen
|
||||
|
@ -401,7 +399,7 @@ retry:
|
|||
if (j == numplanes)
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
if (i != numplanes)
|
||||
{ // go along this plane
|
||||
VectorCopy (new_velocity, ent->velocity);
|
||||
|
@ -470,12 +468,12 @@ retry:
|
|||
|
||||
numbumps = 4;
|
||||
ent->bounce_me = 0;
|
||||
|
||||
|
||||
blocked = 0;
|
||||
VectorCopy (ent->velocity, original_velocity);
|
||||
VectorCopy (ent->velocity, primal_velocity);
|
||||
numplanes = 0;
|
||||
|
||||
|
||||
time_left = time;
|
||||
|
||||
VectorAdd(ent->s.origin,ent->origin_offset,origin);
|
||||
|
@ -622,7 +620,7 @@ retry:
|
|||
if (j == numplanes)
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
if (i != numplanes)
|
||||
{ // go along this plane
|
||||
VectorCopy (new_velocity, ent->velocity);
|
||||
|
@ -706,7 +704,7 @@ trace_t SV_PushEntity (edict_t *ent, vec3_t push)
|
|||
|
||||
retry:
|
||||
trace = gi.trace (start, ent->mins, ent->maxs, end, ent, mask);
|
||||
|
||||
|
||||
VectorCopy (trace.endpos, ent->s.origin);
|
||||
gi.linkentity (ent);
|
||||
|
||||
|
@ -754,7 +752,7 @@ retry:
|
|||
G_TouchTriggers (ent);
|
||||
|
||||
return trace;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
typedef struct
|
||||
|
@ -888,7 +886,6 @@ qboolean SV_Push (edict_t *pusher, vec3_t move, vec3_t amove)
|
|||
{
|
||||
int i, e;
|
||||
edict_t *check, *block;
|
||||
vec3_t mins, maxs;
|
||||
pushed_t *p;
|
||||
vec3_t org, org2, org_check, forward, right, up;
|
||||
vec3_t move2={0,0,0};
|
||||
|
@ -910,13 +907,6 @@ qboolean SV_Push (edict_t *pusher, vec3_t move, vec3_t amove)
|
|||
move[i] = 0.125 * (int)temp;
|
||||
}
|
||||
|
||||
// find the bounding box
|
||||
for (i=0 ; i<3 ; i++)
|
||||
{
|
||||
mins[i] = pusher->absmin[i] + move[i];
|
||||
maxs[i] = pusher->absmax[i] + move[i];
|
||||
}
|
||||
|
||||
// Lazarus: temp turn indicates whether riders
|
||||
// should rotate with the pusher
|
||||
if(pusher->turn_rider && turn_rider->value)
|
||||
|
@ -1018,7 +1008,7 @@ qboolean SV_Push (edict_t *pusher, vec3_t move, vec3_t amove)
|
|||
VectorCopy (check->s.angles, pushed_p->angles);
|
||||
pushed_p++;
|
||||
|
||||
// try moving the contacted entity
|
||||
// try moving the contacted entity
|
||||
VectorAdd (check->s.origin, move, check->s.origin);
|
||||
// Lazarus: if turn_rider is set, do it. We don't do this by default
|
||||
// 'cause it can be a fairly drastic change in gameplay
|
||||
|
@ -1040,7 +1030,7 @@ qboolean SV_Push (edict_t *pusher, vec3_t move, vec3_t amove)
|
|||
// PMF_NO_PREDICTION overrides .exe's client physics, which
|
||||
// really doesn't like for us to change player angles. Note
|
||||
// that this isn't strictly necessary, since Lazarus 1.7 and
|
||||
// later automatically turn prediction off (in ClientThink) when
|
||||
// later automatically turn prediction off (in ClientThink) when
|
||||
// player is riding a MOVETYPE_PUSH
|
||||
check->client->ps.pmove.pm_flags |= PMF_NO_PREDICTION;
|
||||
}
|
||||
|
@ -1081,7 +1071,7 @@ qboolean SV_Push (edict_t *pusher, vec3_t move, vec3_t amove)
|
|||
tr = gi.trace(check->s.origin,vec3_origin,vec3_origin,org,check,MASK_SOLID);
|
||||
if(!tr.startsolid && tr.fraction < 1)
|
||||
check->s.origin[2] = tr.endpos[2] - check->mins[2] + fabs(tr.plane.normal[0])*check->size[0]/2 + fabs(tr.plane.normal[1])*check->size[1]/2;
|
||||
|
||||
|
||||
// Lazarus: func_tracktrain is a special case. Since we KNOW (if the map was
|
||||
// constructed properly) that "move_origin" is a safe position, we
|
||||
// can infer that there should be a safe (not embedded) position
|
||||
|
@ -1089,7 +1079,7 @@ qboolean SV_Push (edict_t *pusher, vec3_t move, vec3_t amove)
|
|||
if((pusher->flags & FL_TRACKTRAIN) && (check->client || (check->svflags & SVF_MONSTER)))
|
||||
{
|
||||
vec3_t f,l,u;
|
||||
|
||||
|
||||
AngleVectors(pusher->s.angles, f, l, u);
|
||||
VectorScale(f,pusher->move_origin[0],f);
|
||||
VectorScale(l,-pusher->move_origin[1],l);
|
||||
|
@ -1111,7 +1101,7 @@ qboolean SV_Push (edict_t *pusher, vec3_t move, vec3_t amove)
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// may have pushed them off an edge
|
||||
if (check->groundentity != pusher)
|
||||
check->groundentity = NULL;
|
||||
|
@ -1185,7 +1175,7 @@ qboolean SV_Push (edict_t *pusher, vec3_t move, vec3_t amove)
|
|||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// save off the obstacle so we can call the block function
|
||||
obstacle = check;
|
||||
|
||||
|
@ -1353,7 +1343,7 @@ void SV_Physics_Noclip (edict_t *ent)
|
|||
// regular thinking
|
||||
if (!SV_RunThink (ent))
|
||||
return;
|
||||
|
||||
|
||||
VectorMA (ent->s.angles, FRAMETIME, ent->avelocity, ent->s.angles);
|
||||
VectorMA (ent->s.origin, FRAMETIME, ent->velocity, ent->s.origin);
|
||||
|
||||
|
@ -1478,7 +1468,7 @@ void SV_Physics_Toss (edict_t *ent)
|
|||
|
||||
// stop if on ground
|
||||
if (trace.plane.normal[2] > 0.7)
|
||||
{
|
||||
{
|
||||
// if (ent->velocity[2] < 60 || ent->movetype != MOVETYPE_BOUNCE )
|
||||
if (ent->velocity[2] < bounce_minv->value || (ent->movetype != MOVETYPE_BOUNCE) )
|
||||
{
|
||||
|
@ -1646,7 +1636,7 @@ void SV_Physics_Step (edict_t *ent)
|
|||
|
||||
ent->bob = min(2.0,300.0/ent->mass);
|
||||
ent->duration = max(2.0,1.0 + ent->mass/100);
|
||||
|
||||
|
||||
// Figure out neutral bouyancy line for this entity
|
||||
// This isn't entirely realistic, but helps gameplay:
|
||||
// Arbitrary mass limit for func_pushable that can be pushed on
|
||||
|
@ -1684,14 +1674,14 @@ void SV_Physics_Step (edict_t *ent)
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
ground = ent->groundentity;
|
||||
|
||||
SV_CheckVelocity (ent);
|
||||
|
||||
if (ground)
|
||||
wasonground = true;
|
||||
|
||||
|
||||
if (ent->avelocity[0] || ent->avelocity[1] || ent->avelocity[2])
|
||||
SV_AddRotationalFriction (ent);
|
||||
|
||||
|
@ -1721,7 +1711,7 @@ void SV_Physics_Step (edict_t *ent)
|
|||
|
||||
// friction for swimming monsters that have been given vertical velocity
|
||||
if (ent->movetype != MOVETYPE_PUSHABLE) {
|
||||
// Lazarus: This is id's swag at drag. It works mostly, but for submerged
|
||||
// Lazarus: This is id's swag at drag. It works mostly, but for submerged
|
||||
// crates we can do better.
|
||||
if ((ent->flags & FL_SWIM) && (ent->velocity[2] != 0)) {
|
||||
speed = fabs(ent->velocity[2]);
|
||||
|
@ -1871,14 +1861,14 @@ void SV_Physics_Step (edict_t *ent)
|
|||
speed = sqrt(vel[0]*vel[0] +vel[1]*vel[1]);
|
||||
if (speed) {
|
||||
friction = sv_friction;
|
||||
|
||||
|
||||
control = speed < sv_stopspeed ? sv_stopspeed : speed;
|
||||
newspeed = speed - FRAMETIME*control*friction;
|
||||
|
||||
|
||||
if (newspeed < 0)
|
||||
newspeed = 0;
|
||||
newspeed /= speed;
|
||||
|
||||
|
||||
vel[0] *= newspeed;
|
||||
vel[1] *= newspeed;
|
||||
}
|
||||
|
@ -2006,12 +1996,12 @@ int SV_VehicleMove (edict_t *ent, float time, int mask)
|
|||
vec3_t origin;
|
||||
|
||||
numbumps = 4;
|
||||
|
||||
|
||||
blocked = 0;
|
||||
VectorCopy (ent->velocity, original_velocity);
|
||||
VectorCopy (ent->velocity, primal_velocity);
|
||||
numplanes = 0;
|
||||
|
||||
|
||||
VectorCopy(ent->velocity,xy_velocity);
|
||||
xy_velocity[2] = 0;
|
||||
xy_speed = VectorLength(xy_velocity);
|
||||
|
@ -2045,7 +2035,7 @@ retry:
|
|||
|
||||
if (trace.allsolid)
|
||||
{
|
||||
// entity is trapped in another solid
|
||||
// entity is trapped in another solid
|
||||
if(trace.ent && (trace.ent->svflags & SVF_MONSTER)) {
|
||||
// Monster stuck in vehicle. No matter how screwed up this is,
|
||||
// we've gotta get him out of there.
|
||||
|
@ -2068,7 +2058,7 @@ retry:
|
|||
}
|
||||
else if(trace.ent->client && xy_speed > 0 )
|
||||
{
|
||||
// If player is relatively close to the vehicle move_origin, AND the
|
||||
// If player is relatively close to the vehicle move_origin, AND the
|
||||
// vehicle is still moving, then most likely the player just disengaged
|
||||
// the vehicle and isn't really trapped. Move player along with
|
||||
// vehicle
|
||||
|
@ -2372,7 +2362,7 @@ trace_t SV_DebrisEntity (edict_t *ent, vec3_t push)
|
|||
if(speed1 <= 0) return trace;
|
||||
scale = (float)ent->mass/200.*speed1;
|
||||
VectorMA(trace.ent->velocity,scale,v1,trace.ent->velocity);
|
||||
// Take a swag at it...
|
||||
// Take a swag at it...
|
||||
|
||||
if(speed1 > 100) {
|
||||
damage = (int)(ent->mass * speed1 / 5000.);
|
||||
|
@ -2391,7 +2381,7 @@ trace_t SV_DebrisEntity (edict_t *ent, vec3_t push)
|
|||
}
|
||||
}
|
||||
return trace;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
=============
|
||||
|
@ -2443,10 +2433,10 @@ void SV_Physics_Debris (edict_t *ent)
|
|||
ClipVelocity (ent->velocity, trace.plane.normal, ent->velocity, backoff);
|
||||
|
||||
// stop if on ground
|
||||
// if (trace.plane.normal[2] > 0.7) Lazarus: This is too strict... rocks get hung
|
||||
// if (trace.plane.normal[2] > 0.7) Lazarus: This is too strict... rocks get hung
|
||||
// up on sides of cliffs and spin in place
|
||||
if (trace.plane.normal[2] > 0.3)
|
||||
{
|
||||
{
|
||||
if (ent->velocity[2] < 60)
|
||||
{
|
||||
ent->groundentity = trace.ent;
|
||||
|
@ -2456,7 +2446,7 @@ void SV_Physics_Debris (edict_t *ent)
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// check for water transition
|
||||
wasinwater = (ent->watertype & MASK_WATER);
|
||||
ent->watertype = gi.pointcontents (ent->s.origin);
|
||||
|
@ -2585,6 +2575,6 @@ void G_RunEntity (edict_t *ent)
|
|||
SV_Physics_Conveyor(ent);
|
||||
break;
|
||||
default:
|
||||
gi.error ("SV_Physics: bad movetype %i", (int)ent->movetype);
|
||||
gi.error ("SV_Physics: bad movetype %i", (int)ent->movetype);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -56,7 +56,7 @@ float UTIL_ApproachAngle( float target, float value, float speed )
|
|||
|
||||
target = UTIL_AngleMod( target );
|
||||
value = UTIL_AngleMod( target );
|
||||
|
||||
|
||||
delta = target - value;
|
||||
|
||||
// Speed is assumed to be positive
|
||||
|
@ -72,7 +72,7 @@ float UTIL_ApproachAngle( float target, float value, float speed )
|
|||
value += speed;
|
||||
else if ( delta < -speed )
|
||||
value -= speed;
|
||||
else
|
||||
else
|
||||
value = target;
|
||||
|
||||
return value;
|
||||
|
@ -358,7 +358,7 @@ void SP_func_trackchange (edict_t *self)
|
|||
|
||||
|
||||
/*=====================================================================================
|
||||
func_tracktrain
|
||||
func_tracktrain
|
||||
|
||||
target first path_track stop
|
||||
dmg damage applied to blocker
|
||||
|
@ -385,7 +385,7 @@ void tracktrain_drive (edict_t *train, edict_t *other )
|
|||
VectorCopy(train->s.angles,angles);
|
||||
VectorNegate(angles,angles);
|
||||
AngleVectors(angles,f1,l1,u1);
|
||||
|
||||
|
||||
VectorSubtract(other->s.origin,train->s.origin,offset);
|
||||
VectorScale(f1, offset[0],f1);
|
||||
VectorScale(l1,-offset[1],l1);
|
||||
|
@ -706,7 +706,7 @@ void tracktrain_think (edict_t *self)
|
|||
speed = self->moveinfo.current_speed - self->moveinfo.decel/10;
|
||||
if(speed < self->moveinfo.next_speed) speed = self->moveinfo.next_speed;
|
||||
}
|
||||
|
||||
|
||||
VectorSubtract(self->moveinfo.end_origin,self->s.origin,v);
|
||||
distance = VectorLength(v);
|
||||
if(speed != 0)
|
||||
|
@ -720,10 +720,10 @@ void tracktrain_think (edict_t *self)
|
|||
time = 100000;
|
||||
VectorNormalize(v);
|
||||
VectorScale(v,fabs(speed),self->velocity);
|
||||
|
||||
|
||||
// gi.dprintf("distance to %s=%g, time=%g\n",
|
||||
// self->target_ent->targetname,distance,time);
|
||||
|
||||
|
||||
gi.linkentity(self);
|
||||
}
|
||||
|
||||
|
@ -787,7 +787,7 @@ void tracktrain_think (edict_t *self)
|
|||
speed = self->moveinfo.current_speed - self->moveinfo.decel/10;
|
||||
if(speed < self->moveinfo.next_speed) speed = self->moveinfo.next_speed;
|
||||
}
|
||||
|
||||
|
||||
if(speed != 0)
|
||||
{
|
||||
VectorSubtract(self->moveinfo.end_origin,self->s.origin,v);
|
||||
|
@ -880,7 +880,7 @@ void tracktrain_think (edict_t *self)
|
|||
if(speed < self->moveinfo.next_speed) speed = self->moveinfo.next_speed;
|
||||
}
|
||||
|
||||
if( speed != 0 )
|
||||
if( speed != 0 )
|
||||
{
|
||||
VectorSubtract(self->moveinfo.end_origin,self->s.origin,v);
|
||||
distance = VectorNormalize(v);
|
||||
|
@ -913,7 +913,7 @@ void tracktrain_think (edict_t *self)
|
|||
VectorCopy(self->s.angles,angles);
|
||||
VectorNegate(angles,angles);
|
||||
AngleVectors(angles,f1,l1,u1);
|
||||
|
||||
|
||||
// find a player
|
||||
for (i=1, ent=&g_edicts[1] ; i<=maxclients->value ; i++, ent++) {
|
||||
if (!ent->inuse) continue;
|
||||
|
@ -1011,8 +1011,6 @@ void tracktrain_blocked (edict_t *self, edict_t *other)
|
|||
if (other)
|
||||
{
|
||||
// Some of our ents don't have origin near the model
|
||||
vec3_t save;
|
||||
VectorCopy(other->s.origin,save);
|
||||
VectorMA (other->absmin, 0.5, other->size, other->s.origin);
|
||||
BecomeExplosion1 (other);
|
||||
}
|
||||
|
@ -1166,10 +1164,10 @@ edict_t *NextPathTrack(edict_t *train, edict_t *path)
|
|||
if(DotProduct(forward,to_next) > 0)
|
||||
next = NULL;
|
||||
}
|
||||
|
||||
|
||||
if(!next)
|
||||
{
|
||||
// Find path_track whose target or target2 is set to
|
||||
// Find path_track whose target or target2 is set to
|
||||
// the current path_track
|
||||
edict_t *e;
|
||||
int i;
|
||||
|
@ -1228,11 +1226,11 @@ edict_t *NextPathTrack(edict_t *train, edict_t *path)
|
|||
{
|
||||
edict_t *next2;
|
||||
float dot2;
|
||||
|
||||
|
||||
next2 = G_PickTarget (path->target2);
|
||||
if( next2 == path )
|
||||
next2 = NULL;
|
||||
|
||||
|
||||
if(next2)
|
||||
{
|
||||
VectorSubtract(next2->s.origin,path->s.origin,to_next);
|
||||
|
@ -1246,7 +1244,7 @@ edict_t *NextPathTrack(edict_t *train, edict_t *path)
|
|||
next2 = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if((next && next2) && (dot2 < dot))
|
||||
next = next2;
|
||||
}
|
||||
|
@ -1360,12 +1358,11 @@ edict_t *NextPathTrack(edict_t *train, edict_t *path)
|
|||
|
||||
void LookAhead( edict_t *train, vec3_t point, float dist )
|
||||
{
|
||||
float originalDist = dist;
|
||||
float length;
|
||||
vec3_t v;
|
||||
edict_t *path;
|
||||
int n=0;
|
||||
|
||||
|
||||
path = train->target_ent;
|
||||
if(!path || dist < 0)
|
||||
return;
|
||||
|
@ -1500,23 +1497,23 @@ void tracktrain_turn (edict_t *self)
|
|||
{
|
||||
Dist_1 = (idl_yaw - cur_yaw)*10;
|
||||
Dist_2 = ((360 - idl_yaw) + cur_yaw)*10;
|
||||
|
||||
|
||||
if (Dist_1 < Dist_2)
|
||||
{
|
||||
Distance = Dist_1;
|
||||
|
||||
|
||||
if (Distance < yaw_vel)
|
||||
yaw_vel = Distance;
|
||||
|
||||
|
||||
new_speed = yaw_vel;
|
||||
}
|
||||
else
|
||||
{
|
||||
Distance = Dist_2;
|
||||
|
||||
|
||||
if (Distance < yaw_vel)
|
||||
yaw_vel = Distance;
|
||||
|
||||
|
||||
new_speed = -yaw_vel;
|
||||
}
|
||||
}
|
||||
|
@ -1524,23 +1521,23 @@ void tracktrain_turn (edict_t *self)
|
|||
{
|
||||
Dist_1 = (cur_yaw - idl_yaw)*10;
|
||||
Dist_2 = ((360 - cur_yaw) + idl_yaw)*10;
|
||||
|
||||
|
||||
if (Dist_1 < Dist_2)
|
||||
{
|
||||
Distance = Dist_1;
|
||||
|
||||
|
||||
if (Distance < yaw_vel)
|
||||
yaw_vel = Distance;
|
||||
|
||||
|
||||
new_speed = -yaw_vel;
|
||||
}
|
||||
else
|
||||
{
|
||||
Distance = Dist_2;
|
||||
|
||||
|
||||
if (Distance < yaw_vel)
|
||||
yaw_vel = Distance;
|
||||
|
||||
|
||||
new_speed = yaw_vel;
|
||||
}
|
||||
}
|
||||
|
@ -1548,10 +1545,10 @@ void tracktrain_turn (edict_t *self)
|
|||
|
||||
// if(developer->value)
|
||||
// gi.dprintf ("current yaw: %g ideal yaw: %g yaw speed: %g\n", cur_yaw, idl_yaw, self->enemy->avelocity[1]);
|
||||
|
||||
|
||||
if (train->s.angles[YAW] < 0)
|
||||
train->s.angles[YAW] += 360;
|
||||
|
||||
|
||||
if (train->s.angles[YAW] >= 360)
|
||||
train->s.angles[YAW] -= 360;
|
||||
}
|
||||
|
@ -1584,23 +1581,23 @@ void tracktrain_turn (edict_t *self)
|
|||
{
|
||||
Dist_1 = (idl_pitch - cur_pitch)*10;
|
||||
Dist_2 = ((360 - idl_pitch) + cur_pitch)*10;
|
||||
|
||||
|
||||
if (Dist_1 < Dist_2)
|
||||
{
|
||||
Distance = Dist_1;
|
||||
|
||||
|
||||
if (Distance < pitch_vel)
|
||||
pitch_vel = Distance;
|
||||
|
||||
|
||||
new_speed = pitch_vel;
|
||||
}
|
||||
else
|
||||
{
|
||||
Distance = Dist_2;
|
||||
|
||||
|
||||
if (Distance < pitch_vel)
|
||||
pitch_vel = Distance;
|
||||
|
||||
|
||||
new_speed = -pitch_vel;
|
||||
}
|
||||
}
|
||||
|
@ -1608,31 +1605,31 @@ void tracktrain_turn (edict_t *self)
|
|||
{
|
||||
Dist_1 = (cur_pitch - idl_pitch)*10;
|
||||
Dist_2 = ((360 - cur_pitch) + idl_pitch)*10;
|
||||
|
||||
|
||||
if (Dist_1 < Dist_2)
|
||||
{
|
||||
Distance = Dist_1;
|
||||
|
||||
|
||||
if (Distance < pitch_vel)
|
||||
pitch_vel = Distance;
|
||||
|
||||
|
||||
new_speed = -pitch_vel;
|
||||
}
|
||||
else
|
||||
{
|
||||
Distance = Dist_2;
|
||||
|
||||
|
||||
if (Distance < pitch_vel)
|
||||
pitch_vel = Distance;
|
||||
|
||||
|
||||
new_speed = pitch_vel;
|
||||
}
|
||||
}
|
||||
train->avelocity[PITCH] = new_speed;
|
||||
|
||||
|
||||
if (train->s.angles[PITCH] < 0)
|
||||
train->s.angles[PITCH] += 360;
|
||||
|
||||
|
||||
if (train->s.angles[PITCH] >= 360)
|
||||
train->s.angles[PITCH] -= 360;
|
||||
}
|
||||
|
@ -1739,7 +1736,7 @@ void func_tracktrain_find (edict_t *self)
|
|||
self->moveinfo.accel = self->moveinfo.decel = self->moveinfo.speed;
|
||||
self->moveinfo.next_speed = self->moveinfo.state * self->moveinfo.speed/3;
|
||||
}
|
||||
|
||||
|
||||
self->target_ent = ent;
|
||||
|
||||
// Get angles to next path_track
|
||||
|
|
|
@ -73,7 +73,7 @@ void multi_trigger (edict_t *ent)
|
|||
}
|
||||
//CW---
|
||||
|
||||
if (ent->wait > 0)
|
||||
if (ent->wait > 0)
|
||||
{
|
||||
ent->think = multi_wait;
|
||||
ent->nextthink = level.time + ent->wait;
|
||||
|
@ -177,7 +177,7 @@ void SP_trigger_multiple (edict_t *ent)
|
|||
ent->noise_index = -1;
|
||||
}
|
||||
//CW---
|
||||
|
||||
|
||||
if (!ent->wait)
|
||||
ent->wait = 0.2;
|
||||
ent->touch = Touch_Multi;
|
||||
|
@ -321,7 +321,7 @@ void SP_trigger_relay (edict_t *self)
|
|||
self->noise_index = -1;
|
||||
}
|
||||
//CW---
|
||||
|
||||
|
||||
if(!self->count) self->count = -1;
|
||||
// end DWH
|
||||
|
||||
|
@ -490,7 +490,7 @@ void trigger_counter_use(edict_t *self, edict_t *other, edict_t *activator)
|
|||
G_FreeEdict(self); // DWH
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
self->count--;
|
||||
|
||||
if (self->count)
|
||||
|
@ -502,7 +502,7 @@ void trigger_counter_use(edict_t *self, edict_t *other, edict_t *activator)
|
|||
}
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if (! (self->spawnflags & 1))
|
||||
{
|
||||
gi.centerprintf(activator, "Sequence completed!");
|
||||
|
@ -569,7 +569,7 @@ void trigger_push_touch (edict_t *self, edict_t *other, cplane_t *plane, csurfac
|
|||
else if (other->movetype == MOVETYPE_PUSHABLE)
|
||||
{
|
||||
vec3_t v;
|
||||
VectorScale (self->movedir, self->speed * 2000 / (float)(other->mass), v);
|
||||
VectorScale (self->movedir, self->speed * 2000 / (float)(other->mass), v);
|
||||
VectorAdd(other->velocity,v,other->velocity);
|
||||
}
|
||||
else if (other->health > 0)
|
||||
|
@ -660,7 +660,7 @@ void medibot_touch(edict_t *self, edict_t *other, cplane_t *plane, csurface_t *s
|
|||
gi.sound (other, CHAN_AUTO, gi.soundindex ("misc/talk1.wav"), 1, ATTN_NORM, 0);
|
||||
self->message = NULL;
|
||||
}
|
||||
|
||||
|
||||
if (self->target)
|
||||
{
|
||||
G_UseTargets(self, other);
|
||||
|
@ -702,12 +702,12 @@ void SP_trigger_medibot(edict_t *self)
|
|||
self->touch = medibot_touch;
|
||||
self->noise_index = gi.soundindex("items/s_health.wav");
|
||||
if (!self->health) self->health = 1;
|
||||
|
||||
|
||||
if (!self->count) self->count = 50;
|
||||
|
||||
if (self->spawnflags & SF_MEDI_START_OFF)
|
||||
{
|
||||
if (self->targetname == NULL)
|
||||
if (self->targetname == NULL)
|
||||
{
|
||||
gi.dprintf("trigger_medibot at %s flagged to start off but has no targetname (will start on)\n", vtos(self->s.origin));
|
||||
self->solid = SOLID_TRIGGER;
|
||||
|
@ -822,7 +822,7 @@ void hurt_touch (edict_t *self, edict_t *other, cplane_t *plane, csurface_t *sur
|
|||
{
|
||||
// DWH - Original code would fail to play a sound for
|
||||
// SF=16 unless player just HAPPENED to hit
|
||||
// trigger_hurt at framenum = an integral number of
|
||||
// trigger_hurt at framenum = an integral number of
|
||||
// full seconds.
|
||||
if ( ((level.framenum % 10) == 0 ) || (self->spawnflags & SF_HURT_SLOW) )
|
||||
gi.sound (other, CHAN_AUTO, self->noise_index, 1, ATTN_NORM, 0);
|
||||
|
@ -949,10 +949,10 @@ void trigger_monsterjump_touch (edict_t *self, edict_t *other, cplane_t *plane,
|
|||
// set XY even if not on ground, so the jump will clear lips
|
||||
other->velocity[0] = self->movedir[0] * self->speed;
|
||||
other->velocity[1] = self->movedir[1] * self->speed;
|
||||
|
||||
|
||||
if (!other->groundentity)
|
||||
return;
|
||||
|
||||
|
||||
other->groundentity = NULL;
|
||||
other->velocity[2] = self->movedir[2];
|
||||
}
|
||||
|
@ -1021,7 +1021,7 @@ void SP_tremor_trigger_multiple (edict_t *ent)
|
|||
// DWH - should be silent
|
||||
// ent->noise_index = gi.soundindex ("misc/trigger1.wav");
|
||||
ent->noise_index = -1;
|
||||
|
||||
|
||||
if (!ent->wait)
|
||||
ent->wait = 0.2;
|
||||
ent->touch = Touch_Multi;
|
||||
|
@ -1116,7 +1116,7 @@ void trigger_inside_think (edict_t *self)
|
|||
if (hit->absmax[1] > self->absmax[1]) continue;
|
||||
if (hit->absmax[2] > self->absmax[2]) continue;
|
||||
G_UseTargets (self, hit);
|
||||
if (self->wait > 0)
|
||||
if (self->wait > 0)
|
||||
self->nextthink = level.time + self->wait;
|
||||
else
|
||||
{
|
||||
|
@ -1244,7 +1244,7 @@ void SP_trigger_scales (edict_t *self)
|
|||
}
|
||||
//======================================================================================
|
||||
// TRIGGER_BBOX - Exactly like a tremor_trigger_multiple, but uses bleft, tright fields
|
||||
// to define extents of trigger field rather than a brush model. This
|
||||
// to define extents of trigger field rather than a brush model. This
|
||||
// helps lower the total brush model count, which in turn helps head off
|
||||
// Index Overflow errors.
|
||||
//======================================================================================
|
||||
|
@ -1346,7 +1346,7 @@ void SP_trigger_bbox (edict_t *ent)
|
|||
ent->noise_index = gi.soundindex ("misc/talk.wav");
|
||||
else if (ent->sounds == 3)
|
||||
ent->noise_index = -1;
|
||||
|
||||
|
||||
if (!ent->wait)
|
||||
ent->wait = 0.2;
|
||||
|
||||
|
@ -1399,7 +1399,6 @@ void SP_trigger_bbox (edict_t *ent)
|
|||
|
||||
void trigger_look_touch (edict_t *self, edict_t *other, cplane_t *plane, csurface_t *surf)
|
||||
{
|
||||
trace_t tr;
|
||||
vec_t dist;
|
||||
vec3_t dir, forward, left, up, end, start;
|
||||
|
||||
|
@ -1420,13 +1419,11 @@ void trigger_look_touch (edict_t *self, edict_t *other, cplane_t *plane, csurfac
|
|||
// Then trigger only fires if looking at TARGET, not trigger bbox
|
||||
edict_t *target;
|
||||
int num_triggered=0;
|
||||
edict_t *what;
|
||||
vec3_t endpos;
|
||||
|
||||
target = G_Find(NULL,FOFS(targetname),self->target);
|
||||
while(target && !num_triggered)
|
||||
{
|
||||
what = LookingAt(other,0,endpos,NULL);
|
||||
if(target->inuse && (LookingAt(other,0,NULL,NULL) == target))
|
||||
{
|
||||
num_triggered++;
|
||||
|
@ -1462,14 +1459,12 @@ void trigger_look_touch (edict_t *self, edict_t *other, cplane_t *plane, csurfac
|
|||
VectorSubtract(self->s.origin,start,dir);
|
||||
dist = VectorLength(dir);
|
||||
VectorMA(start,dist,forward,end);
|
||||
|
||||
tr = gi.trace(start,vec3_origin,vec3_origin,end,other,MASK_OPAQUE);
|
||||
|
||||
|
||||
// See if we're looking at origin, within bleft, tright
|
||||
// FIXME: The following is more or less accurate if the
|
||||
// bleft-tright box is roughly a cube. If it's considerably
|
||||
// longer in one direction we'll get false misses.
|
||||
|
||||
|
||||
if(end[0] < self->s.origin[0] + self->bleft[0])
|
||||
return;
|
||||
if(end[1] < self->s.origin[1] + self->bleft[1])
|
||||
|
@ -1482,12 +1477,12 @@ void trigger_look_touch (edict_t *self, edict_t *other, cplane_t *plane, csurfac
|
|||
return;
|
||||
if(end[2] > self->s.origin[2] + self->tright[2])
|
||||
return;
|
||||
|
||||
|
||||
self->activator = other;
|
||||
G_UseTargets (self, other);
|
||||
}
|
||||
|
||||
if (self->wait > 0)
|
||||
if (self->wait > 0)
|
||||
{
|
||||
self->think = multi_wait;
|
||||
self->nextthink = level.time + self->wait;
|
||||
|
@ -1533,7 +1528,7 @@ void SP_trigger_look (edict_t *self)
|
|||
self->noise_index = gi.soundindex ("misc/talk.wav");
|
||||
else if (self->sounds == 3)
|
||||
self->noise_index = -1;
|
||||
|
||||
|
||||
if (!self->wait)
|
||||
self->wait = 0.2;
|
||||
|
||||
|
@ -1683,7 +1678,7 @@ void WriteTransitionEdict (FILE *f, edict_t *changelevel, edict_t *ent)
|
|||
vec3_t angles;
|
||||
vec3_t forward, right, v;
|
||||
vec3_t spawn_offset;
|
||||
|
||||
|
||||
VectorSubtract(e.s.origin,changelevel->s.origin,spawn_offset);
|
||||
angles[PITCH] = angles[ROLL] = 0.;
|
||||
angles[YAW] = changelevel->s.angles[YAW];
|
||||
|
|
|
@ -563,7 +563,6 @@ qboolean Boss2_CheckAttack (edict_t *self)
|
|||
vec3_t temp;
|
||||
float chance;
|
||||
trace_t tr;
|
||||
qboolean enemy_infront;
|
||||
int enemy_range;
|
||||
float enemy_yaw;
|
||||
|
||||
|
@ -585,7 +584,6 @@ qboolean Boss2_CheckAttack (edict_t *self)
|
|||
return false;
|
||||
}
|
||||
|
||||
enemy_infront = infront(self, self->enemy);
|
||||
enemy_range = range(self, self->enemy);
|
||||
VectorSubtract (self->enemy->s.origin, self->s.origin, temp);
|
||||
enemy_yaw = vectoyaw(temp);
|
||||
|
|
|
@ -544,12 +544,6 @@ void jorg_firebullet (edict_t *self)
|
|||
|
||||
void jorg_attack(edict_t *self)
|
||||
{
|
||||
vec3_t vec;
|
||||
float range;
|
||||
|
||||
VectorSubtract (self->enemy->s.origin, self->s.origin, vec);
|
||||
range = VectorLength (vec);
|
||||
|
||||
if (random() <= 0.75)
|
||||
{
|
||||
gi.sound (self, CHAN_VOICE, sound_attack1, 1, ATTN_NORM,0);
|
||||
|
@ -610,7 +604,6 @@ qboolean Jorg_CheckAttack (edict_t *self)
|
|||
vec3_t temp;
|
||||
float chance;
|
||||
trace_t tr;
|
||||
qboolean enemy_infront;
|
||||
int enemy_range;
|
||||
float enemy_yaw;
|
||||
|
||||
|
@ -629,7 +622,6 @@ qboolean Jorg_CheckAttack (edict_t *self)
|
|||
return false;
|
||||
}
|
||||
|
||||
enemy_infront = infront(self, self->enemy);
|
||||
enemy_range = range(self, self->enemy);
|
||||
VectorSubtract (self->enemy->s.origin, self->s.origin, temp);
|
||||
enemy_yaw = vectoyaw(temp);
|
||||
|
|
|
@ -592,16 +592,10 @@ void makron_sight(edict_t *self, edict_t *other)
|
|||
|
||||
void makron_attack(edict_t *self)
|
||||
{
|
||||
vec3_t vec;
|
||||
float range;
|
||||
float r;
|
||||
|
||||
r = random();
|
||||
|
||||
VectorSubtract (self->enemy->s.origin, self->s.origin, vec);
|
||||
range = VectorLength (vec);
|
||||
|
||||
|
||||
if (r <= 0.3)
|
||||
self->monsterinfo.currentmove = &makron_move_attack3;
|
||||
else if (r <= 0.6)
|
||||
|
@ -735,7 +729,6 @@ qboolean Makron_CheckAttack (edict_t *self)
|
|||
vec3_t temp;
|
||||
float chance;
|
||||
trace_t tr;
|
||||
qboolean enemy_infront;
|
||||
int enemy_range;
|
||||
float enemy_yaw;
|
||||
|
||||
|
@ -754,7 +747,6 @@ qboolean Makron_CheckAttack (edict_t *self)
|
|||
return false;
|
||||
}
|
||||
|
||||
enemy_infront = infront(self, self->enemy);
|
||||
enemy_range = range(self, self->enemy);
|
||||
VectorSubtract (self->enemy->s.origin, self->s.origin, temp);
|
||||
enemy_yaw = vectoyaw(temp);
|
||||
|
|
10
src/p_hud.c
10
src/p_hud.c
|
@ -154,7 +154,6 @@ void DeathmatchScoreboardMessage (edict_t *ent, edict_t *killer)
|
|||
int sorted[MAX_CLIENTS];
|
||||
int sortedscores[MAX_CLIENTS];
|
||||
int score, total;
|
||||
int picnum;
|
||||
int x, y;
|
||||
gclient_t *cl;
|
||||
edict_t *cl_ent;
|
||||
|
@ -197,7 +196,6 @@ void DeathmatchScoreboardMessage (edict_t *ent, edict_t *killer)
|
|||
cl = &game.clients[sorted[i]];
|
||||
cl_ent = g_edicts + 1 + sorted[i];
|
||||
|
||||
picnum = gi.imageindex ("i_fixme");
|
||||
x = (i>=6) ? 160 : 0;
|
||||
y = 32 + 32 * (i%6);
|
||||
|
||||
|
@ -318,12 +316,12 @@ void HelpComputer (edict_t *ent)
|
|||
"xv 0 yv 54 cstring2 \"%s\" " // help 1
|
||||
"xv 0 yv 110 cstring2 \"%s\" " // help 2
|
||||
"xv 50 yv 164 string2 \" kills goals secrets\" "
|
||||
"xv 50 yv 172 string2 \"%3i/%3i %i/%i %i/%i\" ",
|
||||
"xv 50 yv 172 string2 \"%3i/%3i %i/%i %i/%i\" ",
|
||||
sk,
|
||||
level.level_name,
|
||||
game.helpmessage1,
|
||||
game.helpmessage2,
|
||||
level.killed_monsters, level.total_monsters,
|
||||
level.killed_monsters, level.total_monsters,
|
||||
level.found_goals, level.total_goals,
|
||||
level.found_secrets, level.total_secrets);
|
||||
}
|
||||
|
@ -462,7 +460,7 @@ void G_SetStats (edict_t *ent)
|
|||
ent->client->ps.stats[STAT_AMMO_ICON] = gi.imageindex (item->icon);
|
||||
ent->client->ps.stats[STAT_AMMO] = ent->client->pers.inventory[ent->client->ammo_index];
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// armor
|
||||
//
|
||||
|
@ -682,7 +680,7 @@ void G_SetSpectatorStats (edict_t *ent)
|
|||
cl->ps.stats[STAT_LAYOUTS] |= 2;
|
||||
|
||||
if (cl->chase_target && cl->chase_target->inuse)
|
||||
cl->ps.stats[STAT_CHASE] = CS_PLAYERSKINS +
|
||||
cl->ps.stats[STAT_CHASE] = CS_PLAYERSKINS +
|
||||
(cl->chase_target - g_edicts) - 1;
|
||||
else
|
||||
cl->ps.stats[STAT_CHASE] = 0;
|
||||
|
|
Loading…
Reference in a new issue