]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
CSAD: various fixes. Should be playable now!
authorRudolf Polzer <divverent@xonotic.org>
Fri, 30 Nov 2012 15:38:55 +0000 (16:38 +0100)
committerRudolf Polzer <divverent@xonotic.org>
Fri, 30 Nov 2012 15:38:55 +0000 (16:38 +0100)
defaultXonotic.cfg
qcsrc/client/autocvars.qh
qcsrc/client/csqcmodel_hooks.qc
qcsrc/common/animdecide.qc
qcsrc/server/autocvars.qh
qcsrc/server/cl_player.qc

index 88a0d0ca5df447875e4206714e491d21226a25f2..4f949c0eb4ec6058d5e81d40d5f7ef5a7d4ce880 100644 (file)
@@ -247,7 +247,6 @@ set sv_doublejump 0 "allow Quake 2-style double jumps"
 set sv_jumpspeedcap_min "" "lower bound on the baseline velocity of a jump; final velocity will be >= (jumpheight * min + jumpheight)"
 set sv_jumpspeedcap_max "" "upper bound on the baseline velocity of a jump; final velocity will be <= (jumpheight * max + jumpheight)"
 set sv_jumpspeedcap_max_disable_on_ramps 0 "disable upper baseline velocity bound on ramps to preserve the old rampjump style"
-set sv_player_jumpanim_minfall 48 "minimum distance player has to have below their feet before the jump animation will be activated (only when falling, +jump will play anim instantly)"
 
 seta sv_precacheplayermodels 1
 seta sv_precacheweapons 0
index 1cc46038103a2c9e02f816671ab59bed86ed632f..0d4513f92b802a351f83883eecd5ed8e430d1d2f 100644 (file)
@@ -402,5 +402,3 @@ string autocvar__cl_playermodel;
 float autocvar_cl_precacheplayermodels;
 float autocvar_cl_deathglow;
 float autocvar_developer_csqcentities;
-float autocvar_sv_player_jumpanim_minfall;
-float autocvar_cl_csad;
index f3c1c198689ed307dbb5b9325e995ce05852e708..7caa36c560faa95578ea78da2a6f475dc78e1129 100644 (file)
@@ -583,7 +583,7 @@ void CSQCModel_Hook_PreDraw(float isplayer)
                CSQCPlayer_ForceModel_Apply(self.entnum == player_localnum + 1);
                CSQCPlayer_GlowMod_Apply();
                CSQCPlayer_LOD_Apply();
-               if(!isplayer || !autocvar_cl_csad)
+               if(!isplayer)
                        CSQCPlayer_FallbackFrame_Apply();
                else
                {
@@ -594,10 +594,6 @@ void CSQCModel_Hook_PreDraw(float isplayer)
                        {
                                if(self.pmove_flags & PMF_ONGROUND)
                                        flg |= FL_ONGROUND;
-                               // FIXME add proper detection whether csqc prediction did a jump, this one is a hack!
-                               if(self.pmove_flags & PMF_JUMP_HELD)
-                                       if(!(self.anim_prev_pmove_flags & PMF_JUMP_HELD))
-                                               animdecide_setaction(self, ANIMACTION_JUMP, TRUE);
                                self.anim_prev_pmove_flags = self.pmove_flags;
                                if(self.pmove_flags & PMF_DUCKED)
                                        animdecide_setstate(self, self.anim_state | ANIMSTATE_DUCK, FALSE);
@@ -655,7 +651,7 @@ void CSQCModel_Hook_PreUpdate(float isnew, float isplayer, float islocalplayer)
        CSQCModel_Effects_PreUpdate();
        if(self.isplayermodel)
        {
-               if(!isplayer || !autocvar_cl_csad)
+               if(!isplayer)
                        CSQCPlayer_FallbackFrame_PreUpdate();
                CSQCPlayer_ForceModel_PreUpdate();
        }
@@ -670,7 +666,7 @@ void CSQCModel_Hook_PostUpdate(float isnew, float isplayer, float islocalplayer)
        if(self.isplayermodel)
        {
                CSQCPlayer_ForceModel_PostUpdate();
-               if(!isplayer || !autocvar_cl_csad)
+               if(!isplayer)
                        CSQCPlayer_FallbackFrame_PostUpdate(isnew);
        }
        CSQCModel_Effects_PostUpdate();
index 5a44848d4009cbe9b3ff544a90067339e15b0329..a7d2b3278340de60e8eb1ad82baf6633c8339eb7 100644 (file)
@@ -151,7 +151,7 @@ vector animdecide_getloweranim(entity e)
                if(time <= t + outframe_y / outframe_z)
                {
                        // animation is running!
-                       return vec3(outframe_x, e.anim_lower_time, ANIMPRIO_ACTIVE);
+                       return vec3(outframe_x, t, ANIMPRIO_ACTIVE);
                }
        }
        // or, decide the anim by state
@@ -245,24 +245,12 @@ void animdecide_setimplicitstate(entity e, float flg)
        if(!(flg & FL_ONGROUND))
                s |= ANIMIMPLICITSTATE_INAIR;
 
-       // detect some kinds of otherwise misdetected jumps
+       // detect some kinds of otherwise misdetected jumps (ground to air transition)
+       // NOTE: currently, in CSQC this is the only jump detection, as the explicit jump action is never called!
        if(!(e.anim_implicit_state & ANIMIMPLICITSTATE_INAIR) && (s & ANIMIMPLICITSTATE_INAIR))
        {
-               // ground to air transition - do we want to reset jump anim?
-#if 0
-               if(e.anim_lower_action != ANIMACTION_JUMP || time > e.anim_lower_time + 0.2)
-               if(e.anim_lower_implicit_action != ANIMACTION_JUMP || time > e.anim_lower_implicit_time + 0.2)
-               {
-                       traceline(e.origin + '0 0 1' * e.maxs_z, e.origin + '0 0 1' * (e.mins_z - autocvar_sv_player_jumpanim_minfall), MOVE_NOMONSTERS, e);
-                       if(!trace_startsolid && trace_fraction == 1)
-                       {
-#endif
-                               e.anim_lower_implicit_action = ANIMACTION_JUMP;
-                               e.anim_lower_implicit_time = time;
-#if 0
-                       }
-               }
-#endif
+               e.anim_lower_implicit_action = ANIMACTION_JUMP;
+               e.anim_lower_implicit_time = time;
        }
 
        if(s != e.anim_implicit_state)
index 16a7193c13710903da8cd9ed2db5143802504508..d682e78f89c54f97d58afec8c44afd55df8de662 100644 (file)
@@ -1190,7 +1190,6 @@ float autocvar_sv_maxairspeed;
 float autocvar_sv_maxairstrafespeed;
 float autocvar_sv_maxspeed;
 string autocvar_sv_motd;
-float autocvar_sv_player_jumpanim_minfall;
 float autocvar_sv_precacheplayermodels;
 float autocvar_sv_precacheweapons;
 float autocvar_sv_q3acompat_machineshotgunswap;
index c6f67a2069d83e019b6943a65bf5c2c3dff4fe49..9f7e44887e8f1a6af50a26b7b0cf115374643eca 100644 (file)
@@ -161,16 +161,14 @@ void CopyBody(float keepvelocity)
        self.effects = oldself.effects;
        self.glowmod = oldself.glowmod;
        self.event_damage = oldself.event_damage;
-       self.animstate_startframe = oldself.animstate_startframe;
-       self.animstate_numframes = oldself.animstate_numframes;
-       self.animstate_framerate = oldself.animstate_framerate;
-       self.animstate_starttime = oldself.animstate_starttime;
-       self.animstate_endtime = oldself.animstate_endtime;
-       self.animstate_override = oldself.animstate_override;
-       self.animstate_looping = oldself.animstate_looping;
+       self.anim_state = oldself.anim_state;
+       self.anim_time = oldself.anim_time;
+       self.anim_lower_action = oldself.anim_lower_action;
+       self.anim_lower_time = oldself.anim_lower_time;
+       self.anim_upper_action = oldself.anim_upper_action;
+       self.anim_upper_time = oldself.anim_upper_time;
        self.dphitcontentsmask = oldself.dphitcontentsmask;
        self.death_time = oldself.death_time;
-       self.frame = oldself.frame;
        self.pain_finished = oldself.pain_finished;
        self.health = oldself.health;
        self.armorvalue = oldself.armorvalue;
@@ -208,6 +206,8 @@ void CopyBody(float keepvelocity)
        self.CopyBody_think = oldself.think;
        self.nextthink = time;
        self.think = CopyBody_Think;
+       // "bake" the current animation frame for clones (they don't get clientside animation)
+       animdecide_setframes(self, self.flags, FALSE, frame, frame1time, frame2, frame2time);
 
        self = oldself;
 }
@@ -245,8 +245,6 @@ void player_anim (void)
                animbits |= ANIMSTATE_DUCK;
        animdecide_setstate(self, animbits, FALSE);
 
-       animdecide_setframes(self, self.flags, FALSE, frame, frame1time, frame2, frame2time);
-
        if (self.weaponentity)
        {
                updateanim(self.weaponentity);