From 974e34b048c30a0592f26575e0d33252fc32c9bd Mon Sep 17 00:00:00 2001
From: Tim Angus <tim@ngus.net>
Date: Sat, 4 Oct 2003 21:57:37 +0000
Subject: * Switched Dragoon and Chimera in preparation for wall jumping *
 Removed SCA_CANJUMP and replaced with BG_FindJumpMagnitudeForClass * Fixed
 bug where holding crouch on a non-crouching class distorted speed

---
 src/game/bg_local.h  |   2 -
 src/game/bg_misc.c   | 224 +++++++++++++++++++++++++--------------------------
 src/game/bg_pmove.c  |  19 +++--
 src/game/bg_public.h |  15 ++--
 src/game/tremulous.h |  74 ++++++++---------
 5 files changed, 165 insertions(+), 169 deletions(-)

(limited to 'src')

diff --git a/src/game/bg_local.h b/src/game/bg_local.h
index 778bebba..603d57a7 100644
--- a/src/game/bg_local.h
+++ b/src/game/bg_local.h
@@ -19,8 +19,6 @@
 
 #define STEPSIZE    18
 
-#define JUMP_VELOCITY 270
-
 #define TIMER_LAND        130
 #define TIMER_GESTURE     (34*66+50)
 #define TIMER_ATTACK      500 //nonsegmented models
diff --git a/src/game/bg_misc.c b/src/game/bg_misc.c
index 485bc7ce..043e28bf 100644
--- a/src/game/bg_misc.c
+++ b/src/game/bg_misc.c
@@ -1215,8 +1215,8 @@ classAttributes_t bg_classList[ ] =
     10.0f,                                          //float   acceleration;
     6.0f,                                           //float   friction;
     100.0f,                                         //float   stopSpeed;
+    130.0f,                                         //float   jumpMagnitude;
     { PCL_A_B_LEV1, PCL_NONE, PCL_NONE },           //int     children[ 3 ];
-    ABUILDER_TTE,                                   //int     timetoevolve;
     ABUILDER_VALUE                                  //int     value;
   },
   { 
@@ -1237,7 +1237,7 @@ classAttributes_t bg_classList[ ] =
     ABUILDER_UPG_HEALTH,                            //int     health;
     0.0f,                                           //float   fallDamage;
     ABUILDER_UPG_REGEN,                             //int     regenRate;
-    SCA_CANJUMP|SCA_FOVWARPS|SCA_WALLCLIMBER|
+    SCA_FOVWARPS|SCA_WALLCLIMBER|
       SCA_NOFOOTSTEPS,                              //int     abilities;
     WP_ABUILD2,                                     //weapon_t  startWeapon
     95.0f,                                          //float   buildDist;
@@ -1249,8 +1249,8 @@ classAttributes_t bg_classList[ ] =
     10.0f,                                          //float   acceleration;
     6.0f,                                           //float   friction;
     100.0f,                                         //float   stopSpeed;
+    270.0f,                                         //float   jumpMagnitude;
     { PCL_NONE, PCL_NONE, PCL_NONE },               //int     children[ 3 ];
-    0,                                              //int     timetoevolve;
     ABUILDER_UPG_VALUE                              //int     value;
   },
   {
@@ -1271,7 +1271,7 @@ classAttributes_t bg_classList[ ] =
     SOLDIER_HEALTH,                                 //int     health;
     0.0f,                                           //float   fallDamage;
     SOLDIER_REGEN,                                  //int     regenRate;
-    SCA_WALLCLIMBER|SCA_CANJUMP|SCA_NOWEAPONDRIFT|
+    SCA_WALLCLIMBER|SCA_NOWEAPONDRIFT|
       SCA_FOVWARPS|SCA_ALIENSENSE|SCA_NOFOOTSTEPS,  //int     abilities;
     WP_VENOM,                                       //weapon_t  startWeapon
     0.0f,                                           //float   buildDist;
@@ -1283,8 +1283,8 @@ classAttributes_t bg_classList[ ] =
     10.0f,                                          //float   acceleration;
     6.0f,                                           //float   friction;
     400.0f,                                         //float   stopSpeed;
+    270.0f,                                         //float   jumpMagnitude;
     { PCL_A_O_LEV1, PCL_NONE, PCL_NONE },           //int     children[ 3 ];
-    SOLDIER_TTE,                                    //int     timetoevolve;
     SOLDIER_VALUE                                   //int     value;
   },
   {
@@ -1305,7 +1305,7 @@ classAttributes_t bg_classList[ ] =
     HYDRA_HEALTH,                                   //int     health;
     0.0f,                                           //float   fallDamage;
     HYDRA_REGEN,                                    //int     regenRate;
-    SCA_CANJUMP|SCA_NOWEAPONDRIFT|
+    SCA_NOWEAPONDRIFT|
       SCA_FOVWARPS|SCA_WALLCLIMBER|SCA_ALIENSENSE|
       SCA_NOFOOTSTEPS,                              //int     abilities;
     WP_GRAB_CLAW,                                   //weapon_t  startWeapon
@@ -1318,8 +1318,8 @@ classAttributes_t bg_classList[ ] =
     10.0f,                                          //float   acceleration;
     6.0f,                                           //float   friction;
     300.0f,                                         //float   stopSpeed;
+    270.0f,                                         //float   jumpMagnitude;
     { PCL_A_O_LEV2, PCL_A_O_LEV1_UPG, PCL_NONE },   //int     children[ 3 ];
-    HYDRA_TTE,                                      //int     timetoevolve;
     HYDRA_VALUE                                     //int     value;
   },
   {
@@ -1340,7 +1340,7 @@ classAttributes_t bg_classList[ ] =
     HYDRA_UPG_HEALTH,                               //int     health;
     0.0f,                                           //float   fallDamage;
     HYDRA_UPG_REGEN,                                //int     regenRate;
-    SCA_CANJUMP|SCA_NOWEAPONDRIFT|SCA_FOVWARPS|
+    SCA_NOWEAPONDRIFT|SCA_FOVWARPS|
       SCA_WALLCLIMBER|SCA_ALIENSENSE|
       SCA_NOFOOTSTEPS,                              //int     abilities;
     WP_GRAB_CLAW_UPG,                               //weapon_t  startWeapon
@@ -1353,80 +1353,12 @@ classAttributes_t bg_classList[ ] =
     10.0f,                                          //float   acceleration;
     6.0f,                                           //float   friction;
     300.0f,                                         //float   stopSpeed;
+    270.0f,                                         //float   jumpMagnitude;
     { PCL_A_O_LEV2, PCL_NONE, PCL_NONE },           //int     children[ 3 ];
-    HYDRA_UPG_TTE,                                  //int     timetoevolve;
     HYDRA_UPG_VALUE                                 //int     value;
   },
   {
     PCL_A_O_LEV2,                                   //int     classnum;
-    "dragoon",                                      //char    *classname;
-    "Dragoon",                                      //char    *humanname;
-    "prowl",                                        //char    *modelname;
-    1.0f,                                           //float   modelScale;
-    "default",                                      //char    *skinname;
-    "alien_general_hud",                            //char    *hudname;
-    ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ),            //int  stages
-    { -32, -32, -21 },                              //vec3_t  mins;
-    { 32, 32, 21 },                                 //vec3_t  maxs;
-    { 32, 32, 21 },                                 //vec3_t  crouchmaxs;
-    { -32, -32, -4 },                               //vec3_t  deadmins;
-    { 32, 32, 4 },                                  //vec3_t  deadmaxs;
-    24, 24,                                         //int     viewheight, crouchviewheight;
-    DRAGOON_HEALTH,                                 //int     health;
-    0.0f,                                           //float   fallDamage;
-    DRAGOON_REGEN,                                  //int     regenRate;
-    SCA_CANJUMP|SCA_NOWEAPONDRIFT|
-      SCA_FOVWARPS|SCA_ALIENSENSE|SCA_NOFOOTSTEPS,  //int     abilities;
-    WP_POUNCE,                                      //weapon_t  startWeapon
-    0.0f,                                           //float   buildDist;
-    110,                                            //int     fov;
-    0.0005f,                                        //float   bob;
-    1.0f,                                           //float   bobCycle;
-    25,                                             //int     steptime;
-    DRAGOON_SPEED,                                  //float   speed;
-    10.0f,                                          //float   acceleration;
-    6.0f,                                           //float   friction;
-    200.0f,                                         //float   stopSpeed;
-    { PCL_A_O_LEV3, PCL_A_O_LEV2_UPG, PCL_NONE },   //int     children[ 3 ];
-    DRAGOON_TTE,                                    //int     timetoevolve;
-    DRAGOON_VALUE                                   //int     value;
-  },
-  {
-    PCL_A_O_LEV2_UPG,                               //int     classnum;
-    "dragoonupg",                                   //char    *classname;
-    "Dragoon Upgrade",                              //char    *humanname;
-    "prowl",                                        //char    *modelname;
-    1.0f,                                           //float   modelScale;
-    "default",                                      //char    *skinname;
-    "alien_general_hud",                            //char    *hudname;
-    ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ),            //int  stages
-    { -32, -32, -21 },                              //vec3_t  mins;
-    { 32, 32, 21 },                                 //vec3_t  maxs;
-    { 32, 32, 21 },                                 //vec3_t  crouchmaxs;
-    { -32, -32, -4 },                               //vec3_t  deadmins;
-    { 32, 32, 4 },                                  //vec3_t  deadmaxs;
-    27, 27,                                         //int     viewheight, crouchviewheight;
-    DRAGOON_UPG_HEALTH,                             //int     health;
-    0.0f,                                           //float   fallDamage;
-    DRAGOON_UPG_REGEN,                              //int     regenRate;
-    SCA_CANJUMP|SCA_NOWEAPONDRIFT|
-      SCA_FOVWARPS|SCA_ALIENSENSE|SCA_NOFOOTSTEPS,  //int     abilities;
-    WP_POUNCE_UPG,                                  //weapon_t  startWeapon
-    0.0f,                                           //float   buildDist;
-    110,                                            //int     fov;
-    0.0005f,                                        //float   bob;
-    1.0f,                                           //float   bobCycle;
-    25,                                             //int     steptime;
-    DRAGOON_UPG_SPEED,                              //float   speed;
-    10.0f,                                          //float   acceleration;
-    6.0f,                                           //float   friction;
-    200.0f,                                         //float   stopSpeed;
-    { PCL_A_O_LEV3, PCL_NONE, PCL_NONE },           //int     children[ 3 ];
-    DRAGOON_UPG_TTE,                                //int     timetoevolve;
-    DRAGOON_UPG_VALUE                               //int     value;
-  },
-  {
-    PCL_A_O_LEV3,                                   //int     classnum;
     "chimera",                                      //char    *classname;
     "Chimera",                                      //char    *humanname;
     "tarantula",                                    //char    *modelname;
@@ -1443,7 +1375,7 @@ classAttributes_t bg_classList[ ] =
     CHIMERA_HEALTH,                                 //int     health;
     0.0f,                                           //float   fallDamage;
     CHIMERA_REGEN,                                  //int     regenRate;
-    SCA_CANJUMP|SCA_NOWEAPONDRIFT|
+    SCA_NOWEAPONDRIFT|SCA_WALLJUMPER|
       SCA_FOVWARPS|SCA_ALIENSENSE|SCA_NOFOOTSTEPS,  //int     abilities;
     WP_AREA_ZAP,                                    //weapon_t  startWeapon
     0.0f,                                           //float   buildDist;
@@ -1455,12 +1387,12 @@ classAttributes_t bg_classList[ ] =
     10.0f,                                          //float   acceleration;
     6.0f,                                           //float   friction;
     100.0f,                                         //float   stopSpeed;
-    { PCL_A_O_LEV4, PCL_A_O_LEV3_UPG, PCL_NONE },   //int     children[ 3 ];
-    CHIMERA_TTE,                                    //int     timetoevolve;
+    270.0f,                                         //float   jumpMagnitude;
+    { PCL_A_O_LEV3, PCL_A_O_LEV2_UPG, PCL_NONE },   //int     children[ 3 ];
     CHIMERA_VALUE                                   //int     value;
   },
   {
-    PCL_A_O_LEV3_UPG,                               //int     classnum;
+    PCL_A_O_LEV2_UPG,                               //int     classnum;
     "chimeraupg",                                   //char    *classname;
     "Chimera Upgrade",                              //char    *humanname;
     "tarantula",                                    //char    *modelname;
@@ -1477,7 +1409,7 @@ classAttributes_t bg_classList[ ] =
     CHIMERA_UPG_HEALTH,                             //int     health;
     0.0f,                                           //float   fallDamage;
     CHIMERA_UPG_REGEN,                              //int     regenRate;
-    SCA_CANJUMP|SCA_NOWEAPONDRIFT|
+    SCA_NOWEAPONDRIFT|SCA_WALLJUMPER|
       SCA_FOVWARPS|SCA_ALIENSENSE|SCA_NOFOOTSTEPS,  //int     abilities;
     WP_DIRECT_ZAP,                                  //weapon_t  startWeapon
     0.0f,                                           //float   buildDist;
@@ -1489,10 +1421,78 @@ classAttributes_t bg_classList[ ] =
     10.0f,                                          //float   acceleration;
     6.0f,                                           //float   friction;
     100.0f,                                         //float   stopSpeed;
-    { PCL_A_O_LEV4, PCL_NONE, PCL_NONE },           //int     children[ 3 ];
-    CHIMERA_UPG_TTE,                                //int     timetoevolve;
+    270.0f,                                         //float   jumpMagnitude;
+    { PCL_A_O_LEV3, PCL_NONE, PCL_NONE },           //int     children[ 3 ];
     CHIMERA_UPG_VALUE                               //int     value;
   },
+  {
+    PCL_A_O_LEV3,                                   //int     classnum;
+    "dragoon",                                      //char    *classname;
+    "Dragoon",                                      //char    *humanname;
+    "prowl",                                        //char    *modelname;
+    1.0f,                                           //float   modelScale;
+    "default",                                      //char    *skinname;
+    "alien_general_hud",                            //char    *hudname;
+    ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ),            //int  stages
+    { -32, -32, -21 },                              //vec3_t  mins;
+    { 32, 32, 21 },                                 //vec3_t  maxs;
+    { 32, 32, 21 },                                 //vec3_t  crouchmaxs;
+    { -32, -32, -4 },                               //vec3_t  deadmins;
+    { 32, 32, 4 },                                  //vec3_t  deadmaxs;
+    24, 24,                                         //int     viewheight, crouchviewheight;
+    DRAGOON_HEALTH,                                 //int     health;
+    0.0f,                                           //float   fallDamage;
+    DRAGOON_REGEN,                                  //int     regenRate;
+    SCA_NOWEAPONDRIFT|
+      SCA_FOVWARPS|SCA_ALIENSENSE|SCA_NOFOOTSTEPS,  //int     abilities;
+    WP_POUNCE,                                      //weapon_t  startWeapon
+    0.0f,                                           //float   buildDist;
+    110,                                            //int     fov;
+    0.0005f,                                        //float   bob;
+    1.0f,                                           //float   bobCycle;
+    25,                                             //int     steptime;
+    DRAGOON_SPEED,                                  //float   speed;
+    10.0f,                                          //float   acceleration;
+    6.0f,                                           //float   friction;
+    200.0f,                                         //float   stopSpeed;
+    270.0f,                                         //float   jumpMagnitude;
+    { PCL_A_O_LEV4, PCL_A_O_LEV3_UPG, PCL_NONE },   //int     children[ 3 ];
+    DRAGOON_VALUE                                   //int     value;
+  },
+  {
+    PCL_A_O_LEV3_UPG,                               //int     classnum;
+    "dragoonupg",                                   //char    *classname;
+    "Dragoon Upgrade",                              //char    *humanname;
+    "prowl",                                        //char    *modelname;
+    1.0f,                                           //float   modelScale;
+    "default",                                      //char    *skinname;
+    "alien_general_hud",                            //char    *hudname;
+    ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ),            //int  stages
+    { -32, -32, -21 },                              //vec3_t  mins;
+    { 32, 32, 21 },                                 //vec3_t  maxs;
+    { 32, 32, 21 },                                 //vec3_t  crouchmaxs;
+    { -32, -32, -4 },                               //vec3_t  deadmins;
+    { 32, 32, 4 },                                  //vec3_t  deadmaxs;
+    27, 27,                                         //int     viewheight, crouchviewheight;
+    DRAGOON_UPG_HEALTH,                             //int     health;
+    0.0f,                                           //float   fallDamage;
+    DRAGOON_UPG_REGEN,                              //int     regenRate;
+    SCA_NOWEAPONDRIFT|
+      SCA_FOVWARPS|SCA_ALIENSENSE|SCA_NOFOOTSTEPS,  //int     abilities;
+    WP_POUNCE_UPG,                                  //weapon_t  startWeapon
+    0.0f,                                           //float   buildDist;
+    110,                                            //int     fov;
+    0.0005f,                                        //float   bob;
+    1.0f,                                           //float   bobCycle;
+    25,                                             //int     steptime;
+    DRAGOON_UPG_SPEED,                              //float   speed;
+    10.0f,                                          //float   acceleration;
+    6.0f,                                           //float   friction;
+    200.0f,                                         //float   stopSpeed;
+    270.0f,                                         //float   jumpMagnitude;
+    { PCL_A_O_LEV4, PCL_NONE, PCL_NONE },           //int     children[ 3 ];
+    DRAGOON_UPG_VALUE                               //int     value;
+  },
   {
     PCL_A_O_LEV4,                                   //int     classnum;
     "bigmofo",                                      //char    *classname;
@@ -1511,7 +1511,7 @@ classAttributes_t bg_classList[ ] =
     BMOFO_HEALTH,                                   //int     health;
     0.0f,                                           //float   fallDamage;
     BMOFO_REGEN,                                    //int     regenRate;
-    SCA_CANJUMP|SCA_NOWEAPONDRIFT|
+    SCA_NOWEAPONDRIFT|
       SCA_FOVWARPS|SCA_ALIENSENSE|SCA_NOFOOTSTEPS,  //int     abilities;
     WP_CHARGE,                                      //weapon_t  startWeapon
     0.0f,                                           //float   buildDist;
@@ -1523,6 +1523,7 @@ classAttributes_t bg_classList[ ] =
     5.0f,                                           //float   acceleration;
     6.0f,                                           //float   friction;
     100.0f,                                         //float   stopSpeed;
+    270.0f,                                         //float   jumpMagnitude;
     { PCL_NONE, PCL_NONE, PCL_NONE },               //int     children[ 3 ];
     0,                                              //int     timetoevolve;
     BMOFO_VALUE                                     //int     value;
@@ -1545,7 +1546,7 @@ classAttributes_t bg_classList[ ] =
     100,                                            //int     health;
     1.0f,                                           //float   fallDamage;
     0,                                              //int     regenRate;
-    SCA_TAKESFALLDAMAGE|SCA_CANJUMP|
+    SCA_TAKESFALLDAMAGE|
       SCA_CANUSELADDERS,                            //int     abilities;
     WP_NONE, //special-cased in g_client.c          //weapon_t  startWeapon
     110.0f,                                         //float   buildDist;
@@ -1557,6 +1558,7 @@ classAttributes_t bg_classList[ ] =
     10.0f,                                          //float   acceleration;
     6.0f,                                           //float   friction;
     100.0f,                                         //float   stopSpeed;
+    270.0f,                                         //float   jumpMagnitude;
     { PCL_NONE, PCL_NONE, PCL_NONE },               //int     children[ 3 ];
     0,                                              //int     timetoevolve;
     0                                               //int     value;
@@ -1572,7 +1574,7 @@ classAttributes_t bg_classList[ ] =
     
     "bsuit", ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), { 0, 0, 0 }, { 0, 0, 0, },                             
     { 0, 0, 0, }, { 0, 0, 0, }, { 0, 0, 0, }, 0, 0, 0, 0.0f, 0, 0, WP_NONE, 0.0f, 0,   
-    0.0f, 1.0f, 0, 1.0f, 1.0f, 1.0f, 1.0f, { PCL_NONE, PCL_NONE, PCL_NONE }, 0, 0
+    0.0f, 1.0f, 0, 1.0f, 1.0f, 1.0f, 1.0f, 270.0f, { PCL_NONE, PCL_NONE, PCL_NONE }, 0, 0
   }
 };
 
@@ -2030,6 +2032,27 @@ float BG_FindStopSpeedForClass( int pclass )
   return 100.0f;
 }
 
+/*
+==============
+BG_FindJumpMagnitudeForClass
+==============
+*/
+float BG_FindJumpMagnitudeForClass( int pclass )
+{
+  int i;
+
+  for( i = 0; i < bg_numPclasses; i++ )
+  {
+    if( bg_classList[ i ].classNum == pclass )
+    {
+      return bg_classList[ i ].jumpMagnitude;
+    }
+  }
+  
+  Com_Printf( S_COLOR_YELLOW "WARNING: fallthrough in BG_FindJumpMagnitudeForClass\n" );
+  return 270.0f;
+}
+
 /*
 ==============
 BG_FindSteptimeForClass
@@ -2068,11 +2091,7 @@ qboolean BG_ClassHasAbility( int pclass, int ability )
     }
   }
 
-  //hack to get CANJUMP when a spectator
-  if( ability == SCA_CANJUMP )
-    return qtrue;
-  else
-    return qfalse;
+  return qfalse;
 }
 
 /*
@@ -2156,27 +2175,6 @@ int BG_ClassCanEvolveFromTo( int fclass, int tclass, int credits, int num )
   return 0;
 }
 
-/*
-==============
-BG_FindEvolveTimeForClass
-==============
-*/
-int BG_FindEvolveTimeForClass( int pclass )
-{
-  int i;
-
-  for( i = 0; i < bg_numPclasses; i++ )
-  {
-    if( bg_classList[ i ].classNum == pclass )
-    {
-      return bg_classList[ i ].timeToEvolve;
-    }
-  }
-  
-  Com_Printf( S_COLOR_YELLOW "WARNING: fallthrough in BG_FindEvolveTimeForClass\n" );
-  return 5000;
-}
-
 /*
 ==============
 BG_FindValueOfClass
diff --git a/src/game/bg_pmove.c b/src/game/bg_pmove.c
index 3703cc86..50082514 100644
--- a/src/game/bg_pmove.c
+++ b/src/game/bg_pmove.c
@@ -388,8 +388,14 @@ static float PM_CmdScale( usercmd_t *cmd )
   if( pm->ps->pm_type == PM_GRABBED )
     modifier = 0.0f;
 
-  if( !BG_ClassHasAbility( pm->ps->stats[ STAT_PCLASS ], SCA_CANJUMP ) )
-    cmd->upmove = 0;
+  if( pm->ps->persistant[ PERS_TEAM ] != TEAM_SPECTATOR )
+  {
+    if( BG_FindJumpMagnitudeForClass( pm->ps->stats[ STAT_PCLASS ] ) == 0.0f )
+      cmd->upmove = 0;
+
+    if( !( pm->ps->pm_flags & PMF_DUCKED ) && cmd->upmove < 0 )
+      cmd->upmove = 0;
+  }
 
   max = abs( cmd->forwardmove );
   if( abs( cmd->rightmove ) > max )
@@ -508,7 +514,7 @@ static qboolean PM_CheckPounce( void )
   
   AngleVectors( pm->ps->viewangles, forward, NULL, NULL );
   VectorMA( pm->ps->velocity, pm->ps->stats[ STAT_MISC ], forward, pm->ps->velocity );
-  pm->ps->velocity[ 2 ] += JUMP_VELOCITY / 2;
+  pm->ps->velocity[ 2 ] += BG_FindJumpMagnitudeForClass( pm->ps->stats[ STAT_PCLASS ] ) / 2.0f;
   
   PM_AddEvent( EV_JUMP );
   
@@ -541,7 +547,7 @@ PM_CheckJump
 */
 static qboolean PM_CheckJump( void )
 {
-  if( !BG_ClassHasAbility( pm->ps->stats[ STAT_PCLASS ], SCA_CANJUMP ) )
+  if( BG_FindJumpMagnitudeForClass( pm->ps->stats[ STAT_PCLASS ] ) == 0.0f )
     return qfalse;
 
   //can't jump and pounce charge at the same time
@@ -599,10 +605,11 @@ static qboolean PM_CheckJump( void )
     if( !( pm->ps->stats[ STAT_STATE ] & SS_WALLCLIMBINGCEILING ) )
       VectorCopy( pm->ps->grapplePoint, normal );
       
-    VectorMA( pm->ps->velocity, JUMP_VELOCITY, normal, pm->ps->velocity );
+    VectorMA( pm->ps->velocity, BG_FindJumpMagnitudeForClass( pm->ps->stats[ STAT_PCLASS ] ),
+              normal, pm->ps->velocity );
   }
   else
-    pm->ps->velocity[ 2 ] = JUMP_VELOCITY;
+    pm->ps->velocity[ 2 ] = BG_FindJumpMagnitudeForClass( pm->ps->stats[ STAT_PCLASS ] );
     
   PM_AddEvent( EV_JUMP );
 
diff --git a/src/game/bg_public.h b/src/game/bg_public.h
index 876a2f7e..6fdb8546 100644
--- a/src/game/bg_public.h
+++ b/src/game/bg_public.h
@@ -214,12 +214,12 @@ typedef enum
 #define SCA_WALLCLIMBER         0x00000001
 #define SCA_TAKESFALLDAMAGE     0x00000002
 #define SCA_CANZOOM             0x00000004
-#define SCA_CANJUMP             0x00000008
-#define SCA_NOWEAPONDRIFT       0x00000010
-#define SCA_FOVWARPS            0x00000020
-#define SCA_ALIENSENSE          0x00000040
-#define SCA_NOFOOTSTEPS         0x00000080
-#define SCA_CANUSELADDERS       0x00000100
+#define SCA_NOWEAPONDRIFT       0x00000008
+#define SCA_FOVWARPS            0x00000010
+#define SCA_ALIENSENSE          0x00000020
+#define SCA_NOFOOTSTEPS         0x00000040
+#define SCA_CANUSELADDERS       0x00000080
+#define SCA_WALLJUMPER          0x00000100
 
 #define SS_WALLCLIMBING         0x00000001
 #define SS_WALLCLIMBINGCEILING  0x00000002
@@ -897,6 +897,7 @@ typedef struct
   float     acceleration;
   float     friction;
   float     stopSpeed;
+  float     jumpMagnitude;
 
   int       children[ 3 ];
   int       timeToEvolve;
@@ -1088,12 +1089,12 @@ float     BG_FindSpeedForClass( int pclass );
 float     BG_FindAccelerationForClass( int pclass );
 float     BG_FindFrictionForClass( int pclass );
 float     BG_FindStopSpeedForClass( int pclass );
+float     BG_FindJumpMagnitudeForClass( int pclass );
 int       BG_FindSteptimeForClass( int pclass );
 qboolean  BG_ClassHasAbility( int pclass, int ability );
 weapon_t  BG_FindStartWeaponForClass( int pclass );
 float     BG_FindBuildDistForClass( int pclass );
 int       BG_ClassCanEvolveFromTo( int fclass, int tclass, int credits, int num );
-int       BG_FindEvolveTimeForClass( int pclass );
 int       BG_FindValueOfClass( int pclass );
 
 int       BG_FindPriceForWeapon( int weapon );
diff --git a/src/game/tremulous.h b/src/game/tremulous.h
index 692da42b..b0ec7341 100644
--- a/src/game/tremulous.h
+++ b/src/game/tremulous.h
@@ -27,7 +27,7 @@
 
 #define ABUILDER_BUILD_REPEAT       500
 #define ABUILDER_CLAW_DMG           ADM(25)
-#define ABUILDER_CLAW_RANGE         48.0f
+#define ABUILDER_CLAW_RANGE         64.0f
 #define ABUILDER_CLAW_REPEAT        1000
 #define ABUILDER_BASE_DELAY         9000
 #define ABUILDER_ADV_DELAY          4000
@@ -36,7 +36,7 @@
 #define SOLDIER_BITE_RANGE          32.0f
 #define SOLDIER_BITE_REPEAT         500
 
-#define HYDRA_CLAW_DMG              ADM(50)
+#define HYDRA_CLAW_DMG              ADM(40)
 #define HYDRA_CLAW_RANGE            96.0f
 #define HYDRA_CLAW_REPEAT           500
 #define HYDRA_CLAW_U_REPEAT         500
@@ -47,12 +47,23 @@
 #define HYDRA_PCLOUD_REPEAT         1000
 #define HYDRA_PCLOUD_TIME           10000
 
+#define CHIMERA_CLAW_DMG            ADM(50)
+#define CHIMERA_CLAW_RANGE          96.0f
+#define CHIMERA_CLAW_REPEAT         400
+#define CHIMERA_CLAW_U_REPEAT       300
+#define CHIMERA_AREAZAP_DMG         ADM(75)
+#define CHIMERA_AREAZAP_RANGE       200.0f
+#define CHIMERA_AREAZAP_REPEAT      1500
+#define CHIMERA_DIRECTZAP_DMG       ADM(100)
+#define CHIMERA_DIRECTZAP_RANGE     200.0f
+#define CHIMERA_DIRECTZAP_REPEAT    1500
+
 #define DRAGOON_CLAW_DMG            ADM(75)
-#define DRAGOON_CLAW_RANGE          48.0f
+#define DRAGOON_CLAW_RANGE          96.0f
 #define DRAGOON_CLAW_REPEAT         750
-#define DRAGOON_CLAW_U_REPEAT       750
-#define DRAGOON_POUNCE_DMG          ADM(100)
-#define DRAGOON_POUNCE_RANGE        48.0f
+#define DRAGOON_CLAW_U_REPEAT       500
+#define DRAGOON_POUNCE_DMG          ADM(200)
+#define DRAGOON_POUNCE_RANGE        96.0f
 #define DRAGOON_POUNCE_SPEED        750
 #define DRAGOON_POUNCE_SPEED_MOD    0.75f
 #define DRAGOON_POUNCE_TIME         1000
@@ -62,17 +73,6 @@
 #define DRAGOON_SLOWBLOB_SPEED_MOD  0.5f
 #define DRAGOON_SLOWBLOB_TIME       5000
 
-#define CHIMERA_CLAW_DMG            ADM(75)
-#define CHIMERA_CLAW_RANGE          96.0f
-#define CHIMERA_CLAW_REPEAT         400
-#define CHIMERA_CLAW_U_REPEAT       300
-#define CHIMERA_AREAZAP_DMG         ADM(75)
-#define CHIMERA_AREAZAP_RANGE       200.0f
-#define CHIMERA_AREAZAP_REPEAT      1500
-#define CHIMERA_DIRECTZAP_DMG       ADM(75)
-#define CHIMERA_DIRECTZAP_RANGE     200.0f
-#define CHIMERA_DIRECTZAP_REPEAT    1500
-
 #define BMOFO_CLAW_DMG              ADM(150)
 #define BMOFO_CLAW_RANGE            128.0f
 #define BMOFO_CLAW_REPEAT           750
@@ -103,7 +103,6 @@
 #define AVM(h)                      ((int)((float)h*ALIEN_VALUE_MODIFIER))
 
 #define ABUILDER_SPEED              0.8f
-#define ABUILDER_TTE                2000
 #define ABUILDER_VALUE              AVM(50)
 #define ABUILDER_HEALTH             AHM(50)
 #define ABUILDER_REGEN              2
@@ -114,46 +113,39 @@
 #define ABUILDER_UPG_REGEN          3
 
 #define SOLDIER_SPEED               1.3f
-#define SOLDIER_TTE                 2000
 #define SOLDIER_VALUE               AVM(50)
 #define SOLDIER_HEALTH              AHM(25)
 #define SOLDIER_REGEN               1
 
 #define HYDRA_SPEED                 1.25f
-#define HYDRA_TTE                   3000
 #define HYDRA_VALUE                 AVM(100)
 #define HYDRA_HEALTH                AHM(50)
 #define HYDRA_REGEN                 2
 
 #define HYDRA_UPG_SPEED             1.25f
-#define HYDRA_UPG_TTE               3000
 #define HYDRA_UPG_VALUE             AVM(120)
 #define HYDRA_UPG_HEALTH            AHM(50)
 #define HYDRA_UPG_REGEN             3
 
-#define DRAGOON_SPEED               1.2f
-#define DRAGOON_TTE                 3000
-#define DRAGOON_VALUE               AVM(200)
-#define DRAGOON_HEALTH              AHM(100)
-#define DRAGOON_REGEN               4
-
-#define DRAGOON_UPG_SPEED           1.2f
-#define DRAGOON_UPG_TTE             3000
-#define DRAGOON_UPG_VALUE           AVM(240)
-#define DRAGOON_UPG_HEALTH          AHM(120)
-#define DRAGOON_UPG_REGEN           5
-
 #define CHIMERA_SPEED               1.2f
-#define CHIMERA_TTE                 3000
-#define CHIMERA_VALUE               AVM(300)
-#define CHIMERA_HEALTH              AHM(200)
-#define CHIMERA_REGEN               6
+#define CHIMERA_VALUE               AVM(200)
+#define CHIMERA_HEALTH              AHM(100)
+#define CHIMERA_REGEN               4
 
 #define CHIMERA_UPG_SPEED           1.2f
-#define CHIMERA_UPG_TTE             3000
-#define CHIMERA_UPG_VALUE           AVM(360)
-#define CHIMERA_UPG_HEALTH          AHM(250)
-#define CHIMERA_UPG_REGEN           7
+#define CHIMERA_UPG_VALUE           AVM(340)
+#define CHIMERA_UPG_HEALTH          AHM(120)
+#define CHIMERA_UPG_REGEN           5
+
+#define DRAGOON_SPEED               1.2f
+#define DRAGOON_VALUE               AVM(300)
+#define DRAGOON_HEALTH              AHM(200)
+#define DRAGOON_REGEN               6
+
+#define DRAGOON_UPG_SPEED           1.2f
+#define DRAGOON_UPG_VALUE           AVM(360)
+#define DRAGOON_UPG_HEALTH          AHM(250)
+#define DRAGOON_UPG_REGEN           7
 
 #define BMOFO_SPEED                 1.1f
 #define BMOFO_VALUE                 AVM(400)
-- 
cgit