From 3319c56e4f4d3d2e4dc657147ebfd8fbfabb7aef Mon Sep 17 00:00:00 2001 From: Samual Lenks Date: Tue, 5 Mar 2013 01:21:48 -0500 Subject: [PATCH] "unpress" system on client --- defaultXonotic.cfg | 6 +++++ qcsrc/client/Main.qc | 6 +++++ qcsrc/client/View.qc | 46 +++++++++++++++++++++++++++++---------- qcsrc/client/autocvars.qh | 4 ++++ qcsrc/server/cl_player.qc | 1 - 5 files changed, 51 insertions(+), 12 deletions(-) diff --git a/defaultXonotic.cfg b/defaultXonotic.cfg index e1b16f435..40730b21c 100644 --- a/defaultXonotic.cfg +++ b/defaultXonotic.cfg @@ -68,6 +68,12 @@ seta cl_spawnzoom_factor 2 "factor of zoom while spawning" seta cl_zoomfactor 5 "how much +zoom will zoom (1-16)" seta cl_zoomspeed 8 "how fast it will zoom (0.5-16), negative values mean instant zoom" seta cl_zoomsensitivity 0 "how zoom changes sensitivity (0 = weakest, 1 = strongest)" + +seta cl_unpress_zoom_on_spawn 1 "automatically unpress zoom when you spawn" +seta cl_unpress_zoom_on_death 1 "automatically unpress zoom when you die (and don't allow zoom again while dead)" +seta cl_unpress_zoom_on_weapon_switch 1 "automatically unpress zoom when you switch a weapon" +seta cl_unpress_attack_on_weapon_switch 1 "automatically unpress fire and fire1 attack buttons when you switch a weapon" + freelook 1 sensitivity 6 v_gamma 1 diff --git a/qcsrc/client/Main.qc b/qcsrc/client/Main.qc index f8b6e9cf0..173a93194 100644 --- a/qcsrc/client/Main.qc +++ b/qcsrc/client/Main.qc @@ -1106,6 +1106,12 @@ void Net_ReadSpawn() { zoomin_effect = 1; current_viewzoom = (1 / bound(1, autocvar_cl_spawnzoom_factor, 16)); + + if(autocvar_cl_unpress_zoom_on_spawn) + { + localcmd("-zoom\n"); + button_zoom = FALSE; + } } void Net_TeamNagger() diff --git a/qcsrc/client/View.qc b/qcsrc/client/View.qc index 3362ce422..4f00c5534 100644 --- a/qcsrc/client/View.qc +++ b/qcsrc/client/View.qc @@ -414,13 +414,6 @@ void CSQC_UpdateView(float w, float h) button_attack2 = (input_buttons & BUTTON_3); button_zoom = (input_buttons & BUTTON_4); - // FIXME do we need this hack? - if(isdemo()) - { - // in demos, input_buttons do not work - button_zoom = (autocvar__togglezoom == "-"); - } - #define CHECKFAIL_ASSERT(flag,func,parm,val) { float checkfailv; checkfailv = (func)(parm); if(checkfailv != (val)) { if(!checkfail[(flag)]) localcmd(sprintf("\ncmd checkfail %s %s %d %d\n", #func, parm, val, checkfailv)); checkfail[(flag)] = 1; } } ENDS_WITH_CURLY_BRACE CHECKFAIL_ASSERT(0, cvar_type, "\{100}\{105}\{118}\{48}\{95}\{101}\{118}\{97}\{100}\{101}", 0); CHECKFAIL_ASSERT(1, cvar_type, "\{97}\{97}\{95}\{101}\{110}\{97}\{98}\{108}\{101}", 0); @@ -451,10 +444,28 @@ void CSQC_UpdateView(float w, float h) ticrate = getstatf(STAT_MOVEVARS_TICRATE) * getstatf(STAT_MOVEVARS_TIMESCALE); + float is_dead = (getstati(STAT_HEALTH) <= 0); + + // FIXME do we need this hack? + if(isdemo()) + { + // in demos, input_buttons do not work + button_zoom = (autocvar__togglezoom == "-"); + } + else if(button_zoom + && autocvar_cl_unpress_zoom_on_death + && (spectatee_status >= 0) + && (is_dead || intermission)) + { + // no zoom while dead or in intermission please + localcmd("-zoom\n"); + button_zoom = FALSE; + } + // 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) || intermission) + if(spectatee_status >= 0 && (autocvar_cl_eventchase_death && is_dead) || intermission) { // make special vector since we can't use view_origin (It is one frame old as of this code, it gets set later with the results this code makes.) vector current_view_origin = ((csqcplayer ? csqcplayer.origin : pmove_org) + autocvar_cl_eventchase_viewoffset); @@ -604,11 +615,24 @@ void CSQC_UpdateView(float w, float h) HUD_InitScores(); } - if(last_switchweapon != switchweapon) { + if(last_switchweapon != switchweapon) + { weapontime = time; last_switchweapon = switchweapon; + if(button_zoom && autocvar_cl_unpress_zoom_on_weapon_switch) + { + localcmd("-zoom\n"); + button_zoom = FALSE; + } + if(autocvar_cl_unpress_attack_on_weapon_switch) + { + localcmd("-fire\n"); + localcmd("-fire2\n"); + button_attack2 = FALSE; + } } - if(last_activeweapon != activeweapon) { + if(last_activeweapon != activeweapon) + { last_activeweapon = activeweapon; e = get_weaponinfo(activeweapon); @@ -756,7 +780,7 @@ void CSQC_UpdateView(float w, float h) // reticle_type is changed to the item we are zooming / aiming with, to decide which reticle to use // It must be a persisted float for fading out to work properly (you let go of the zoom button for // the view to go back to normal, so reticle_type would become 0 as we fade out) - if(spectatee_status || getstati(STAT_HEALTH) <= 0 || hud != HUD_NORMAL) + if(spectatee_status || is_dead || hud != HUD_NORMAL) reticle_type = 0; // prevent reticle from showing during the respawn zoom effect or for spectators else if(activeweapon == WEP_NEX && (button_zoom || zoomscript_caught) || activeweapon == WEP_RIFLE && (button_zoom || zoomscript_caught) || activeweapon == WEP_MINSTANEX && (button_zoom || zoomscript_caught)) reticle_type = 2; // nex zoom diff --git a/qcsrc/client/autocvars.qh b/qcsrc/client/autocvars.qh index ba6abadc0..150efb170 100644 --- a/qcsrc/client/autocvars.qh +++ b/qcsrc/client/autocvars.qh @@ -78,6 +78,10 @@ string autocvar_cl_weaponpriority; float autocvar_cl_zoomfactor; float autocvar_cl_zoomsensitivity; float autocvar_cl_zoomspeed; +var float autocvar_cl_unpress_zoom_on_spawn = 1; +var float autocvar_cl_unpress_zoom_on_death = 1; +var float autocvar_cl_unpress_zoom_on_weapon_switch = 1; +var float autocvar_cl_unpress_attack_on_weapon_switch = 1; float autocvar_con_chat; float autocvar_con_chatpos; float autocvar_con_chatrect; diff --git a/qcsrc/server/cl_player.qc b/qcsrc/server/cl_player.qc index cb44da03f..8fd2b13e2 100644 --- a/qcsrc/server/cl_player.qc +++ b/qcsrc/server/cl_player.qc @@ -619,7 +619,6 @@ void PlayerDamage (entity inflictor, entity attacker, float damage, float deatht if(clienttype(self) == CLIENTTYPE_REAL) { - stuffcmd(self, "-zoom\n"); self.fixangle = TRUE; //msg_entity = self; //WriteByte (MSG_ONE, SVC_SETANGLE); -- 2.39.2