diff options
| author | Tim Angus <tim@ngus.net> | 2003-02-09 04:51:02 +0000 | 
|---|---|---|
| committer | Tim Angus <tim@ngus.net> | 2003-02-09 04:51:02 +0000 | 
| commit | d94d52e70af291daee2ad200b2fbeec1289106dc (patch) | |
| tree | 797c6e7c500a74907974c95fa46b6d3fb888b651 | |
| parent | 27d7ac95c1df03bea6d1a31d84dfe06f5ab765ba (diff) | |
* Started construction of a new model format, similar to Q2's
| -rw-r--r-- | src/cgame/cg_local.h | 1 | ||||
| -rw-r--r-- | src/cgame/cg_players.c | 229 | ||||
| -rw-r--r-- | src/game/bg_public.h | 44 | 
3 files changed, 192 insertions, 82 deletions
diff --git a/src/cgame/cg_local.h b/src/cgame/cg_local.h index 702af342..81a0908a 100644 --- a/src/cgame/cg_local.h +++ b/src/cgame/cg_local.h @@ -385,6 +385,7 @@ typedef struct    qboolean    newAnims;                   // true if using the new mission pack animations    qboolean    fixedlegs;                  // true if legs yaw is always the same as torso yaw    qboolean    fixedtorso;                 // true if torso never changes yaw +  qboolean    nonsegmented;               // true if model is Q2 style nonsegmented    vec3_t      headOffset;                 // move head in icon views    footstep_t  footsteps; diff --git a/src/cgame/cg_players.c b/src/cgame/cg_players.c index b8ca0d26..5384a44e 100644 --- a/src/cgame/cg_players.c +++ b/src/cgame/cg_players.c @@ -190,6 +190,11 @@ static qboolean CG_ParseAnimationFile( const char *filename, clientInfo_t *ci )        ci->fixedtorso = qtrue;        continue;      } +    else if( !Q_stricmp( token, "nonsegmented" ) ) +    { +      ci->nonsegmented = qtrue; +      continue; +    }      // if it is a number, start parsing animations      if( token[ 0 ] >= '0' && token[ 0 ] <= '9' ) @@ -201,104 +206,164 @@ static qboolean CG_ParseAnimationFile( const char *filename, clientInfo_t *ci )      Com_Printf( "unknown token '%s' is %s\n", token, filename );    } -  // read information for each frame -  for( i = 0; i < MAX_PLAYER_ANIMATIONS; i++ ) +  if( !ci->nonsegmented )    { -    token = COM_Parse( &text_p ); -     -    if( !*token ) +    // read information for each frame +    for( i = 0; i < MAX_PLAYER_ANIMATIONS; i++ )      { -      if( i >= TORSO_GETFLAG && i <= TORSO_NEGATIVE ) +      token = COM_Parse( &text_p ); +       +      if( !*token )        { -        animations[ i ].firstFrame = animations[ TORSO_GESTURE ].firstFrame; -        animations[ i ].frameLerp = animations[ TORSO_GESTURE ].frameLerp; -        animations[ i ].initialLerp = animations[ TORSO_GESTURE ].initialLerp; -        animations[ i ].loopFrames = animations[ TORSO_GESTURE ].loopFrames; -        animations[ i ].numFrames = animations[ TORSO_GESTURE ].numFrames; -        animations[ i ].reversed = qfalse; -        animations[ i ].flipflop = qfalse; -        continue; +        if( i >= TORSO_GETFLAG && i <= TORSO_NEGATIVE ) +        { +          animations[ i ].firstFrame = animations[ TORSO_GESTURE ].firstFrame; +          animations[ i ].frameLerp = animations[ TORSO_GESTURE ].frameLerp; +          animations[ i ].initialLerp = animations[ TORSO_GESTURE ].initialLerp; +          animations[ i ].loopFrames = animations[ TORSO_GESTURE ].loopFrames; +          animations[ i ].numFrames = animations[ TORSO_GESTURE ].numFrames; +          animations[ i ].reversed = qfalse; +          animations[ i ].flipflop = qfalse; +          continue; +        } +         +        break;        } -      break; -    } -     -    animations[ i ].firstFrame = atoi( token ); -     -    // leg only frames are adjusted to not count the upper body only frames -    if( i == LEGS_WALKCR ) -      skip = animations[ LEGS_WALKCR ].firstFrame - animations[ TORSO_GESTURE ].firstFrame; +      animations[ i ].firstFrame = atoi( token ); +       +      // leg only frames are adjusted to not count the upper body only frames +      if( i == LEGS_WALKCR ) +        skip = animations[ LEGS_WALKCR ].firstFrame - animations[ TORSO_GESTURE ].firstFrame; -    if( i >= LEGS_WALKCR && i<TORSO_GETFLAG ) -      animations[ i ].firstFrame -= skip; +      if( i >= LEGS_WALKCR && i<TORSO_GETFLAG ) +        animations[ i ].firstFrame -= skip; -    token = COM_Parse( &text_p ); -    if( !*token ) -      break; -     -    animations[ i ].numFrames = atoi( token ); -    animations[ i ].reversed = qfalse; -    animations[ i ].flipflop = qfalse; -     -    // if numFrames is negative the animation is reversed -    if( animations[ i ].numFrames < 0 ) +      token = COM_Parse( &text_p ); +      if( !*token ) +        break; +       +      animations[ i ].numFrames = atoi( token ); +      animations[ i ].reversed = qfalse; +      animations[ i ].flipflop = qfalse; +       +      // if numFrames is negative the animation is reversed +      if( animations[ i ].numFrames < 0 ) +      { +        animations[ i ].numFrames = -animations[ i ].numFrames; +        animations[ i ].reversed = qtrue; +      } + +      token = COM_Parse( &text_p ); +       +      if( !*token ) +        break; + +      animations[ i ].loopFrames = atoi( token ); + +      token = COM_Parse( &text_p ); +       +      if( !*token ) +        break; + +      fps = atof( token ); +      if( fps == 0 ) +        fps = 1; + +      animations[ i ].frameLerp = 1000 / fps; +      animations[ i ].initialLerp = 1000 / fps; +    } + +    if( i != MAX_PLAYER_ANIMATIONS )      { -      animations[ i ].numFrames = -animations[ i ].numFrames; -      animations[ i ].reversed = qtrue; +      CG_Printf( "Error parsing animation file: %s", filename ); +      return qfalse;      } +    // crouch backward animation +    memcpy( &animations[ LEGS_BACKCR ], &animations[ LEGS_WALKCR ], sizeof( animation_t ) ); +    animations[ LEGS_BACKCR ].reversed = qtrue; +    // walk backward animation +    memcpy( &animations[ LEGS_BACKWALK ], &animations[ LEGS_WALK ], sizeof( animation_t ) ); +    animations[ LEGS_BACKWALK ].reversed = qtrue; +    // flag moving fast +    animations[ FLAG_RUN ].firstFrame = 0; +    animations[ FLAG_RUN ].numFrames = 16; +    animations[ FLAG_RUN ].loopFrames = 16; +    animations[ FLAG_RUN ].frameLerp = 1000 / 15; +    animations[ FLAG_RUN ].initialLerp = 1000 / 15; +    animations[ FLAG_RUN ].reversed = qfalse; +    // flag not moving or moving slowly +    animations[ FLAG_STAND ].firstFrame = 16; +    animations[ FLAG_STAND ].numFrames = 5; +    animations[ FLAG_STAND ].loopFrames = 0; +    animations[ FLAG_STAND ].frameLerp = 1000 / 20; +    animations[ FLAG_STAND ].initialLerp = 1000 / 20; +    animations[ FLAG_STAND ].reversed = qfalse; +    // flag speeding up +    animations[ FLAG_STAND2RUN ].firstFrame = 16; +    animations[ FLAG_STAND2RUN ].numFrames = 5; +    animations[ FLAG_STAND2RUN ].loopFrames = 1; +    animations[ FLAG_STAND2RUN ].frameLerp = 1000 / 15; +    animations[ FLAG_STAND2RUN ].initialLerp = 1000 / 15; +    animations[ FLAG_STAND2RUN ].reversed = qtrue; +  } +  else +  { +    // read information for each frame +    for( i = 0; i < MAX_NONSEG_PLAYER_ANIMATIONS; i++ ) +    { +      token = COM_Parse( &text_p ); +       +      if( !*token ) +        break; +       +      animations[ i ].firstFrame = atoi( token ); +       +      token = COM_Parse( &text_p ); +      if( !*token ) +        break; +       +      animations[ i ].numFrames = atoi( token ); +      animations[ i ].reversed = qfalse; +      animations[ i ].flipflop = qfalse; +       +      // if numFrames is negative the animation is reversed +      if( animations[ i ].numFrames < 0 ) +      { +        animations[ i ].numFrames = -animations[ i ].numFrames; +        animations[ i ].reversed = qtrue; +      } -    token = COM_Parse( &text_p ); -     -    if( !*token ) -      break; +      token = COM_Parse( &text_p ); +       +      if( !*token ) +        break; -    animations[ i ].loopFrames = atoi( token ); +      animations[ i ].loopFrames = atoi( token ); -    token = COM_Parse( &text_p ); -     -    if( !*token ) -      break; +      token = COM_Parse( &text_p ); +       +      if( !*token ) +        break; -    fps = atof( token ); -    if( fps == 0 ) -      fps = 1; +      fps = atof( token ); +      if( fps == 0 ) +        fps = 1; -    animations[ i ].frameLerp = 1000 / fps; -    animations[ i ].initialLerp = 1000 / fps; -  } +      animations[ i ].frameLerp = 1000 / fps; +      animations[ i ].initialLerp = 1000 / fps; +    } -  if( i != MAX_PLAYER_ANIMATIONS ) -  { -    CG_Printf( "Error parsing animation file: %s", filename ); -    return qfalse; +    if( i != MAX_NONSEG_PLAYER_ANIMATIONS ) +    { +      CG_Printf( "Error parsing animation file: %s", filename ); +      return qfalse; +    } +     +    // walk backward animation +    memcpy( &animations[ NSPA_WALKBACK ], &animations[ NSPA_WALK ], sizeof( animation_t ) ); +    animations[ NSPA_WALKBACK ].reversed = qtrue;    } -  // crouch backward animation -  memcpy( &animations[ LEGS_BACKCR ], &animations[ LEGS_WALKCR ], sizeof( animation_t ) ); -  animations[ LEGS_BACKCR ].reversed = qtrue; -  // walk backward animation -  memcpy( &animations[ LEGS_BACKWALK ], &animations[ LEGS_WALK ], sizeof( animation_t ) ); -  animations[ LEGS_BACKWALK ].reversed = qtrue; -  // flag moving fast -  animations[ FLAG_RUN ].firstFrame = 0; -  animations[ FLAG_RUN ].numFrames = 16; -  animations[ FLAG_RUN ].loopFrames = 16; -  animations[ FLAG_RUN ].frameLerp = 1000 / 15; -  animations[ FLAG_RUN ].initialLerp = 1000 / 15; -  animations[ FLAG_RUN ].reversed = qfalse; -  // flag not moving or moving slowly -  animations[ FLAG_STAND ].firstFrame = 16; -  animations[ FLAG_STAND ].numFrames = 5; -  animations[ FLAG_STAND ].loopFrames = 0; -  animations[ FLAG_STAND ].frameLerp = 1000 / 20; -  animations[ FLAG_STAND ].initialLerp = 1000 / 20; -  animations[ FLAG_STAND ].reversed = qfalse; -  // flag speeding up -  animations[ FLAG_STAND2RUN ].firstFrame = 16; -  animations[ FLAG_STAND2RUN ].numFrames = 5; -  animations[ FLAG_STAND2RUN ].loopFrames = 1; -  animations[ FLAG_STAND2RUN ].frameLerp = 1000 / 15; -  animations[ FLAG_STAND2RUN ].initialLerp = 1000 / 15; -  animations[ FLAG_STAND2RUN ].reversed = qtrue;    return qtrue;  } diff --git a/src/game/bg_public.h b/src/game/bg_public.h index 20b97cf7..feadfcd1 100644 --- a/src/game/bg_public.h +++ b/src/game/bg_public.h @@ -626,6 +626,50 @@ typedef enum    MAX_PLAYER_TOTALANIMATIONS  } playerAnimNumber_t; +// nonsegmented animations +typedef enum +{ +  NSPA_STAND, + +  NSPA_GESTURE, + +  NSPA_WALK, +  NSPA_RUN, +  NSPA_RUNBACK, + +  NSPA_STRAFELEFT, +  NSPA_STRAFERIGHT, + +  NSPA_SWIM, + +  NSPA_JUMP, +  NSPA_LAND, +  NSPA_JUMPBACK, +  NSPA_LANDBACK, + +  NSPA_TURN, + +  NSPA_ATTACK1, +  NSPA_ATTACK2, +  NSPA_ATTACK3, + +  NSPA_PAIN1, +  NSPA_PAIN2, +   +  NSPA_DEATH1, +  NSPA_DEAD1, +  NSPA_DEATH2, +  NSPA_DEAD2, +  NSPA_DEATH3, +  NSPA_DEAD3, + +  MAX_NONSEG_PLAYER_ANIMATIONS, +   +  NSPA_WALKBACK, +   +  MAX_NONSEG_PLAYER_TOTALANIMATIONS +} nonSegPlayerAnimNumber_t; +  //TA: for buildable animations  typedef enum  {  | 
