set cl_hitsound_antispam_time 0.05 "don't play the hitsound more often than this"
seta cl_eventchase_death 0 "camera goes into 3rd person mode when the player is dead"
-seta cl_eventchase_intermission 0 "camera goes into 3rd person mode when the match ends"
seta cl_eventchase_distance 140 "final camera distance"
seta cl_eventchase_speed 1.3 "how fast the camera slides back, 0 is instant"
void PostInit(void);
void CSQC_Demo_Camera();
float HUD_WouldDrawScoreboard();
-float view_set;
float camera_mode;
float reticle_type;
string NextFrameCommand;
void CSQC_SPIDER_HUD();
void CSQC_RAPTOR_HUD();
-vector freeze_pmove_org, freeze_input_angles;
+vector freeze_org, freeze_ang;
entity nightvision_noise, nightvision_noise2;
float pickup_crosshair_time, pickup_crosshair_size;
ticrate = getstatf(STAT_MOVEVARS_TICRATE) * getstatf(STAT_MOVEVARS_TIMESCALE);
vo = '0 0 1' * getstati(STAT_VIEWHEIGHT);
- warpzone_fixview_origin = pmove_org + vo;
- warpzone_fixview_cl_viewangles = input_angles;
- warpzone_fixview_angles = view_angles;
- WarpZone_FixView();
- pmove_org = warpzone_fixview_origin - vo;
- input_angles = warpzone_fixview_cl_viewangles;
- view_angles = warpzone_fixview_angles;
-
if(autocvar_cl_lockview || (autocvar__hud_configure && spectatee_status <= 0) || intermission > 1)
{
- pmove_org = freeze_pmove_org;
- input_angles = view_angles = freeze_input_angles;
- R_SetView(VF_ORIGIN, pmove_org + vo);
- R_SetView(VF_ANGLES, view_angles);
- //R_SetView(VF_CL_VIEWANGLES, input_angles);
+ R_SetView(VF_ORIGIN, freeze_org);
+ R_SetView(VF_ANGLES, freeze_ang);
+ }
+ else
+ {
+ freeze_org = R_SetView3fv(VF_ORIGIN);
+ freeze_ang = R_SetView3fv(VF_ANGLES);
}
- freeze_pmove_org = pmove_org;
- freeze_input_angles = input_angles;
// event chase camera
if(autocvar_chase_active <= 0) // greater than 0 means it's enabled manually, and this code is skipped
{
- if(spectatee_status >= 0 && (autocvar_cl_eventchase_death && getstati(STAT_HEALTH) <= 0 && !intermission) || (autocvar_cl_eventchase_intermission && intermission))
+ if(spectatee_status >= 0 && (autocvar_cl_eventchase_death && getstati(STAT_HEALTH) <= 0 && !intermission) || intermission)
{
// We must enable chase_active to get a third person view (weapon viewmodel hidden and own player model showing).
// Ideally, there should be another way to enable third person cameras, such as through R_SetView()
vector eventchase_target_origin;
makevectors(view_angles);
// pass 1, used to check where the camera would go and obtain the trace_fraction
- eventchase_target_origin = pmove_org - v_forward * eventchase_current_distance;
+ eventchase_target_origin = freeze_org - v_forward * eventchase_current_distance;
- traceline(pmove_org, eventchase_target_origin, MOVE_WORLDONLY, self);
+ WarpZone_TraceLine(freeze_org, eventchase_target_origin, MOVE_WORLDONLY, self);
// pass 2, also multiplying view_forward with trace_fraction, to prevent the camera from going through walls
// The 0.1 subtraction is to not limit the camera precisely at the wall surface, as that allows the view to poke through
- eventchase_target_origin = pmove_org - v_forward * eventchase_current_distance * (trace_fraction - 0.1);
+ eventchase_target_origin = freeze_org - v_forward * eventchase_current_distance * (trace_fraction - 0.1);
+ WarpZone_TraceLine(freeze_org, eventchase_target_origin, MOVE_WORLDONLY, self);
- R_SetView(VF_ORIGIN, eventchase_target_origin);
- R_SetView(VF_ANGLES, view_angles);
+ R_SetView(VF_ORIGIN, trace_endpos);
+ R_SetView(VF_ANGLES, WarpZone_TransformVAngles(WarpZone_trace_transform, view_angles));
}
else if(autocvar_chase_active < 0) // time to disable chase_active if it was set by this code
{
}
}
+ WarpZone_FixView();
+ //WarpZone_FixPMove();
+
// Render the Scene
- if(!intermission || !view_set || (intermission && autocvar_cl_eventchase_intermission))
- {
- #ifdef VEHICLES_CSQC
- if(hud)
- {
- view_origin = vehicle_hudmodel.origin; //pmove_org + vo + randomvec() * 20;
- view_angles = input_angles;
- R_SetView(VF_ORIGIN, view_origin);
- makevectors(view_angles);
- view_forward = v_forward;
- view_right = v_right;
- view_up = v_up;
- view_set = 1;
- }
- else
- {
- #endif
- view_origin = pmove_org + vo;
- view_angles = input_angles;
- makevectors(view_angles);
- view_forward = v_forward;
- view_right = v_right;
- view_up = v_up;
- view_set = 1;
- #ifdef VEHICLES_CSQC
- }
- #endif
- }
+ view_origin = R_SetView3fv(VF_ORIGIN);
+ view_angles = R_SetView3fv(VF_ANGLES);
+ makevectors(view_angles);
+ view_forward = v_forward;
+ view_right = v_right;
+ view_up = v_up;
#ifdef BLURTEST
if(time > blurtest_time0 && time < blurtest_time1)
// ALWAYS Clear Current Scene First
R_ClearScene();
+ R_SetView(VF_ORIGIN, view_origin);
+ R_SetView(VF_ANGLES, view_angles);
// FIXME engine bug? VF_SIZE and VF_MIN are not restored to sensible values by this
R_SetView(VF_SIZE, vf_size);
if(contentavgalpha)
drawfill('0 0 0', eX * vid_conwidth + eY * vid_conheight, liquidcolor_prev, contentavgalpha * liquidalpha_prev, DRAWFLAG_NORMAL);
}
+
+ if(autocvar_hud_damage && !autocvar_chase_active)
- if(autocvar_hud_damage)
{
splash_size_x = max(vid_conwidth, vid_conheight);
splash_size_y = max(vid_conwidth, vid_conheight);
drawpic(splash_pos, "gfx/blood", splash_size, stov(autocvar_hud_damage_color), bound(0, myhealth_flash_temp, 1) * autocvar_hud_damage, DRAWFLAG_NORMAL);
}
- // Draw the mouse cursor
- // NOTE: drawpic must happen after R_RenderScene for some reason
- //drawpic(getmousepos(), "gfx/cursor.tga", '11 14 0', '1 1 1', 1, 0);
- //drawstring('50 50', ftos(game), '10 10 0', '1 1 1', 1, 0);
- //self = edict_num(player_localnum);
- //drawstring('0 0', vtos(pmove_org), '8 8 0', '1 1 1', 1, 0);
- //drawstring('0 8', strcat("ORG: ", vtos(self.origin), " state: ", ftos(self.ctf_state), " HP: ", ftos(self.health)), '8 8 0', '1 1 1', 1, 0);
- // as long as the ctf part isn't in, this is useless
if(menu_visible)
menu_show();
float autocvar_cl_hitsound;
float autocvar_cl_hitsound_antispam_time;
var float autocvar_cl_eventchase_death = 1;
-var float autocvar_cl_eventchase_intermission = 1;
var float autocvar_cl_eventchase_distance = 140;
var float autocvar_cl_eventchase_speed = 1.3;
} else if(msg == MSG_KILL) {
if (type == KILL_TEAM_RED || type == KILL_TEAM_BLUE) {
if(gentle) {
- centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, sprintf(_("^1Moron! You went against %s, a team mate!"), s1)));
+ centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, sprintf(_("^1Moron! You went against ^7%s^1, a team mate!"), s1)));
} else {
- centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, sprintf(_("^1Moron! You fragged %s, a team mate!"), s1)));
+ centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, sprintf(_("^1Moron! You fragged ^7%s^1, a team mate!"), s1)));
}
} else if (type == KILL_FIRST_BLOOD) {
if(gentle) {
self.velocity = '0 0 0';
self.avelocity = '0 0 0';
self.movement = '0 0 0';
- //self.fixangle = TRUE;
}
}
//don't allow the player to turn around while game is paused!
if(timeoutStatus == 2) {
+ // FIXME turn this into CSQC stuff
self.v_angle = self.lastV_angle;
self.angles = self.lastV_angle;
self.fixangle = TRUE;
self.angles_x = random() * 360;
self.angles_y = random() * 360;
// at least I'm not forcing retardedview by also assigning to angles_z
- self.fixangle = 1;
+ self.fixangle = TRUE;
}
}
else
self.alpha = 1;
- ang_x = bound(sv_pitch_min, self.owner.v_angle_x, sv_pitch_max);
- ang_y = 0;
- ang_z = 0;
-
- if(sv_pitch_fixyaw) // workaround for stupid player models that don't aim forward
- {
- ang_y = self.owner.v_angle_y;
- makevectors(ang);
- var vector v = v_forward;
- var float t = self.tag_entity.frame1time;
- var float f = self.tag_entity.frame;
- self.tag_entity.frame1time = time;
- self.tag_entity.frame = self.tag_entity.anim_idle_x;
- gettaginfo(self.tag_entity, self.tag_index);
- self.tag_entity.frame1time = t;
- self.tag_entity.frame = f;
- // untransform v according to this coordinate space
- vector w;
- w_x = v_forward * v;
- w_y = -v_right * v;
- w_z = v_up * v;
- self.angles = vectoangles(w);
- }
- else
+ if (!intermission_running)
{
- ang_x = -/* don't ask */ang_x;
- self.angles = ang;
+ ang_x = bound(sv_pitch_min, self.owner.v_angle_x, sv_pitch_max);
+ ang_y = 0;
+ ang_z = 0;
+
+ if(sv_pitch_fixyaw) // workaround for stupid player models that don't aim forward
+ {
+ ang_y = self.owner.v_angle_y;
+ makevectors(ang);
+ var vector v = v_forward;
+ var float t = self.tag_entity.frame1time;
+ var float f = self.tag_entity.frame;
+ self.tag_entity.frame1time = time;
+ self.tag_entity.frame = self.tag_entity.anim_idle_x;
+ gettaginfo(self.tag_entity, self.tag_index);
+ self.tag_entity.frame1time = t;
+ self.tag_entity.frame = f;
+ // untransform v according to this coordinate space
+ vector w;
+ w_x = v_forward * v;
+ w_y = -v_right * v;
+ w_z = v_up * v;
+ self.angles = vectoangles(w);
+ }
+ else
+ {
+ ang_x = -/* don't ask */ang_x;
+ self.angles = ang;
+ }
}
self.glowmod = self.owner.weaponentity_glowmod;
self.weapon_think = func;
//dprint("next ", ftos(self.weapon_nextthink), "\n");
- // The shoot animation looks TERRIBLE without animation blending! Yay for moonwalking while shooting!
+ // The shoot animation looks TERRIBLE without animation blending! Yay for moonwalking while shooting!
+ //anim = self.anim_shoot;
if (restartanim)
if (t)
if (!self.crouch) // shoot anim stands up, this looks bad
{
- local vector anim;
+ vector anim;
if(self.weapon == WEP_SHOTGUN && self.BUTTON_ATCK2)
+ {
anim = self.anim_melee;
- /*else
- anim = self.anim_shoot;*/
- anim_z = anim_y / (t + sys_frametime);
- setanim(self, anim, FALSE, TRUE, TRUE);
+ anim_z = anim_y / (t + sys_frametime);
+ setanim(self, anim, FALSE, TRUE, TRUE);
+ }
}
};
void setanim(entity e, vector anim, float looping, float override, float restart)
{
+ if (!anim)
+ return; // no animation was given to us! We can't use this.
+
if (anim_x == e.animstate_startframe)
if (anim_y == e.animstate_numframes)
if (anim_z == e.animstate_framerate)
string s;
if(!e.autoscreenshot) // initial call
{
- e.angles = e.v_angle;
- e.angles_x = -e.angles_x;
e.autoscreenshot = time + 0.8; // used for autoscreenshot
e.health = -2342;
// first intermission phase; voting phase has positive health (used to decide whether to send SVC_FINALE or not)
WriteByte(MSG_ONE, SVC_INTERMISSION);
}
}
-
- //e.velocity = '0 0 0';
- //e.fixangle = TRUE;
-
- // TODO halt weapon animation
}
#if VEHICLES_VIEWROTATE_CROSSHAIR
df = vectoangles(normalize(trace_endpos - self.origin + '0 0 32'));
if(df_x > 180) df_x -= 360;
- if(df_x < -180) df_x += 360;
+ if(df_x < -180) df_x += 360;--
if(df_y > 180) df_y -= 360;
if(df_y < -180) df_y += 360;
if(other.takedamage == DAMAGE_AIM)
if(other.classname == "player")
if(IsDifferentTeam(self.owner, other))
- if(IsFlying(other))
- AnnounceTo(self.owner, "airshot");
+ if(other.deadflag == DEAD_NO)
+ if(IsFlying(other))
+ AnnounceTo(self.owner, "airshot");
self.event_damage = SUB_Null;
self.takedamage = DAMAGE_NO;
setmodel(newmine, "models/mine.md3");
newmine.angles = vectoangles(-trace_plane_normal); // face against the surface
+ newmine.oldvelocity = self.velocity;
+
newmine.takedamage = self.takedamage;
newmine.damageforcescale = self.damageforcescale;
newmine.health = self.health;
if(other.takedamage == DAMAGE_AIM)
if(other.classname == "player")
if(IsDifferentTeam(self.owner, other))
- if(IsFlying(other))
- AnnounceTo(self.owner, "airshot");
+ if(other.deadflag == DEAD_NO)
+ if(IsFlying(other))
+ AnnounceTo(self.owner, "airshot");
self.event_damage = SUB_Null;
self.takedamage = DAMAGE_NO;
self.event_damage = SUB_Null;
self.takedamage = DAMAGE_NO;
+ if(self.movetype == MOVETYPE_NONE)
+ self.velocity = self.oldvelocity;
+
RadiusDamage (self, self.owner, autocvar_g_balance_minelayer_remote_damage, autocvar_g_balance_minelayer_remote_edgedamage, autocvar_g_balance_minelayer_remote_radius, world, autocvar_g_balance_minelayer_remote_force, self.projectiledeathtype | HITTYPE_BOUNCE, world);
if (self.owner.weapon == WEP_MINE_LAYER)
if(other.takedamage == DAMAGE_AIM)
if(other.classname == "player")
if(IsDifferentTeam(self.owner, other))
- if(IsFlying(other))
- AnnounceTo(self.owner, "airshot");
+ if(other.deadflag == DEAD_NO)
+ if(IsFlying(other))
+ AnnounceTo(self.owner, "airshot");
self.event_damage = SUB_Null;
self.takedamage = DAMAGE_NO;
void WarpZone_Fade_PreDraw()
{
if(self.warpzone_fadestart)
- self.alpha = bound(0, (self.warpzone_fadeend - vlen(view_origin - self.origin - 0.5 * (self.mins + self.maxs))) / (self.warpzone_fadeend - self.warpzone_fadestart), 1);
+ {
+ vector org;
+ org = R_SetView3fv(VF_ORIGIN);
+ self.alpha = bound(0, (self.warpzone_fadeend - vlen(org - self.origin - 0.5 * (self.mins + self.maxs))) / (self.warpzone_fadeend - self.warpzone_fadestart), 1);
+ }
else
self.alpha = 1;
//print(sprintf("%v <-> %v\n", view_origin, self.origin + 0.5 * (self.mins + self.maxs)));
float warpzone_fixingview;
float warpzone_fixingview_drawexteriormodel;
-//float warpzone_fixingview_sidespeed;
-//float warpzone_fixingview_forwardspeed;
-void WarpZone_Inside()
-{
- if(warpzone_fixingview)
- return;
- warpzone_fixingview = 1;
- warpzone_fixingview_drawexteriormodel = cvar("r_drawexteriormodel");
- //warpzone_fixingview_sidespeed = cvar("cl_sidespeed");
- //warpzone_fixingview_forwardspeed = cvar("cl_forwardspeed");
- cvar_set("r_drawexteriormodel", "0");
- //cvar_set("cl_sidespeed", ftos(warpzone_fixingview_sidespeed / 100)); // just keep a bit of it in case player gets stuck
- //cvar_set("cl_forwardspeed", ftos(warpzone_fixingview_forwardspeed / 100)); // just keep a bit of it in case player gets stuck
-}
+float autocvar_chase_active;
-void WarpZone_Outside()
+void WarpZone_View_Outside()
{
if(!warpzone_fixingview)
return;
warpzone_fixingview = 0;
cvar_set("r_drawexteriormodel", ftos(warpzone_fixingview_drawexteriormodel));
- //cvar_set("cl_sidespeed", ftos(warpzone_fixingview_sidespeed));
- //cvar_set("cl_forwardspeed", ftos(warpzone_fixingview_forwardspeed));
+}
+
+void WarpZone_View_Inside()
+{
+ if(autocvar_chase_active)
+ {
+ WarpZone_View_Outside();
+ return;
+ }
+ if(warpzone_fixingview)
+ return;
+ warpzone_fixingview = 1;
+ warpzone_fixingview_drawexteriormodel = cvar("r_drawexteriormodel");
+ cvar_set("r_drawexteriormodel", "0");
}
vector WarpZone_FixNearClip(vector o, vector c0, vector c1, vector c2, vector c3)
return '0 0 0';
}
-float warpzone_saved;
-vector warpzone_saved_origin;
-vector warpzone_saved_angles;
-vector warpzone_saved_cl_viewangles;
+void WarpZone_FixPMove()
+{
+ entity e;
+ e = WarpZone_Find(pmove_org, pmove_org);
+ if(e)
+ {
+ pmove_org = WarpZone_TransformOrigin(e, pmove_org);
+ input_angles = WarpZone_TransformVAngles(e, input_angles);
+ }
+}
+
#ifndef KEEP_ROLL
var float autocvar_cl_rollkillspeed = 10;
#endif
void WarpZone_FixView()
{
- float f;
- vector o;
entity e;
- vector corner0, corner1, corner2, corner3, nearclip;
-
- warpzone_saved = 0;
- warpzone_saved_origin = warpzone_fixview_origin;
- warpzone_saved_angles = warpzone_fixview_angles;
- warpzone_saved_cl_viewangles = warpzone_fixview_cl_viewangles;
-
- nearclip = '0 0 1' * (cvar("r_nearclip") * 1.125);
- corner0 = cs_unproject('0 0 0' + nearclip);
- corner1 = cs_unproject('1 0 0' * cvar("vid_conwidth") + nearclip);
- corner2 = cs_unproject('0 1 0' * cvar("vid_conheight") + nearclip);
- corner3 = cs_unproject('1 0 0' * cvar("vid_conwidth") + '0 1 0' * cvar("vid_conheight") + nearclip);
+ vector org, ang, nearclip, corner0, corner1, corner2, corner3, o;
+ float f;
-#ifndef KEEP_ROLL
- if(warpzone_fixview_angles_z != 0 || warpzone_fixview_cl_viewangles_z != 0)
- {
- if(autocvar_cl_rollkillspeed)
- f = max(0, (1 - frametime * autocvar_cl_rollkillspeed));
- else
- f = 0;
- warpzone_fixview_angles_z *= f;
- warpzone_fixview_cl_viewangles_z *= f;
- warpzone_saved_angles_z *= f; // PERMANENTLY apply that change!
- warpzone_saved_cl_viewangles_z *= f; // PERMANENTLY apply that change!
- warpzone_saved = 2;
- R_SetView(VF_CL_VIEWANGLES_Z, warpzone_fixview_angles_z);
- }
-#endif
+ org = R_SetView3fv(VF_ORIGIN);
+ ang = R_SetView3fv(VF_ANGLES);
- e = WarpZone_Find(warpzone_fixview_origin, warpzone_fixview_origin);
+ e = WarpZone_Find(org, org);
if(e)
{
- warpzone_saved = 1;
- warpzone_fixview_origin = WarpZone_TransformOrigin(e, warpzone_fixview_origin);
- corner0 = WarpZone_TransformOrigin(e, corner0);
- corner1 = WarpZone_TransformOrigin(e, corner1);
- corner2 = WarpZone_TransformOrigin(e, corner2);
- corner3 = WarpZone_TransformOrigin(e, corner3);
- warpzone_fixview_angles = WarpZone_TransformVAngles(e, warpzone_fixview_angles);
- warpzone_fixview_cl_viewangles = WarpZone_TransformVAngles(e, warpzone_fixview_cl_viewangles);
- WarpZone_Inside();
+ org = WarpZone_TransformOrigin(e, org);
+ ang = WarpZone_TransformVAngles(e, ang);
+ WarpZone_View_Inside();
}
else
- WarpZone_Outside();
+ WarpZone_View_Outside();
- // if we are near any warpzone planes - MOVE AWAY (work around nearclip)
- o = WarpZone_FixNearClip(warpzone_fixview_origin, corner0, corner1, corner2, corner3);
- if(o != '0 0 0')
- {
- warpzone_saved = 1;
- warpzone_fixview_origin += o;
- }
+#ifndef KEEP_ROLL
+ float rick;
+ if(autocvar_cl_rollkillspeed)
+ f = max(0, (1 - frametime * autocvar_cl_rollkillspeed));
+ else
+ f = 0;
- if(warpzone_saved == 1)
- {
- R_SetView(VF_ORIGIN, warpzone_fixview_origin);
- R_SetView(VF_ANGLES, warpzone_fixview_cl_viewangles);
- }
-}
-void WarpZone_UnFixView()
-{
- if(warpzone_saved)
- {
- warpzone_fixview_origin = warpzone_saved_origin;
- warpzone_fixview_angles = warpzone_saved_angles;
- warpzone_fixview_cl_viewangles = warpzone_saved_cl_viewangles;
- R_SetView(VF_ORIGIN, warpzone_fixview_origin);
- R_SetView(VF_ANGLES, warpzone_fixview_angles);
- R_SetView(VF_CL_VIEWANGLES, warpzone_fixview_cl_viewangles);
- }
+ rick = R_SetView(VF_CL_VIEWANGLES_Z);
+ rick *= f;
+ R_SetView(VF_CL_VIEWANGLES_Z, rick);
+
+ ang_z *= f;
+#endif
+
+ R_SetView(VF_ORIGIN, org);
+ R_SetView(VF_ANGLES, ang);
+
+ nearclip = '0 0 1' * (cvar("r_nearclip") * 1.125);
+ corner0 = cs_unproject('0 0 0' + nearclip);
+ corner1 = cs_unproject('1 0 0' * cvar("vid_conwidth") + nearclip);
+ corner2 = cs_unproject('0 1 0' * cvar("vid_conheight") + nearclip);
+ corner3 = cs_unproject('1 0 0' * cvar("vid_conwidth") + '0 1 0' * cvar("vid_conheight") + nearclip);
+ o = WarpZone_FixNearClip(org, corner0, corner1, corner2, corner3);
+ if(o != '0 0 0')
+ R_SetView(VF_ORIGIN, org + o);
}
void WarpZone_Init()
void WarpZone_Shutdown()
{
- WarpZone_Outside();
+ WarpZone_View_Outside();
}
void WarpZone_Camera_Read(float bIsNewEntity);
void WarpZone_Teleported_Read(float bIsNewEntity);
-vector warpzone_fixview_origin;
-vector warpzone_fixview_angles;
-vector warpzone_fixview_cl_viewangles;
-void WarpZone_FixView(); // this saves the previous values
-void WarpZone_UnFixView(); // and restores them
+void WarpZone_FixPMove();
+void WarpZone_FixView();
void WarpZone_Init();
void WarpZone_Shutdown();