utils: mdldec: small update.

This commit is contained in:
Andrey Akhmichin 2020-11-28 05:34:15 +05:00 committed by Alibek Omarov
parent 3e7e251828
commit 299e3fe957
4 changed files with 45 additions and 52 deletions

View File

@ -4,7 +4,7 @@
MODULE = mdldec MODULE = mdldec
CC ?= gcc CC ?= gcc
CFLAGS ?= -O3 -pipe -DHAVE_TGMATH_H CFLAGS ?= -O3 -pipe -DHAVE_TGMATH_H -DSTDINT_H=\<stdint.h\>
LDFLAGS ?= -Wl,--no-undefined LDFLAGS ?= -Wl,--no-undefined
SYS = $(shell $(CC) -dumpmachine) SYS = $(shell $(CC) -dumpmachine)

View File

@ -145,23 +145,20 @@ static void GetMotionTypeString( int type, char *str, qboolean is_composite )
if( type & STUDIO_LZ ) if( type & STUDIO_LZ )
Q_strcat( str, " LZ" ); Q_strcat( str, " LZ" );
if( type & STUDIO_AX ) if( type & STUDIO_LXR )
Q_strcat( str, " AX" ); Q_strcat( str, " LXR" );
if( type & STUDIO_AY ) if( type & STUDIO_LYR )
Q_strcat( str, " AY" ); Q_strcat( str, " LYR" );
if( type & STUDIO_AZ ) if( type & STUDIO_LZR )
Q_strcat( str, " AZ" ); Q_strcat( str, " LZR" );
if( type & STUDIO_AXR ) if( type & STUDIO_LINEAR )
Q_strcat( str, " AXR" ); Q_strcat( str, " LM" );
if( type & STUDIO_AYR ) if( type & STUDIO_QUADRATIC_MOTION )
Q_strcat( str, " AYR" ); Q_strcat( str, " LQ" );
if( type & STUDIO_AZR )
Q_strcat( str, " AZR" );
return; return;
} }
@ -170,21 +167,20 @@ static void GetMotionTypeString( int type, char *str, qboolean is_composite )
switch( type ) switch( type )
{ {
case STUDIO_X: p = "X"; break; case STUDIO_X: p = "X"; break;
case STUDIO_Y: p = "Y"; break; case STUDIO_Y: p = "Y"; break;
case STUDIO_Z: p = "Z"; break; case STUDIO_Z: p = "Z"; break;
case STUDIO_XR: p = "XR"; break; case STUDIO_XR: p = "XR"; break;
case STUDIO_YR: p = "YR"; break; case STUDIO_YR: p = "YR"; break;
case STUDIO_ZR: p = "ZR"; break; case STUDIO_ZR: p = "ZR"; break;
case STUDIO_LX: p = "LX"; break; case STUDIO_LX: p = "LX"; break;
case STUDIO_LY: p = "LY"; break; case STUDIO_LY: p = "LY"; break;
case STUDIO_LZ: p = "LZ"; break; case STUDIO_LZ: p = "LZ"; break;
case STUDIO_AX: p = "AX"; break; case STUDIO_LXR: p = "LXR"; break;
case STUDIO_AY: p = "AY"; break; case STUDIO_LYR: p = "LYR"; break;
case STUDIO_AZ: p = "AZ"; break; case STUDIO_LZR: p = "LZR"; break;
case STUDIO_AXR: p = "AXR"; break; case STUDIO_LINEAR: p = "LM"; break;
case STUDIO_AYR: p = "AYR"; break; case STUDIO_QUADRATIC_MOTION: p = "LQ"; break;
case STUDIO_AZR: p = "AZR"; break;
default: break; default: break;
} }
@ -218,7 +214,7 @@ static void WriteTextureRenderMode( FILE *fp )
if( texture->flags & STUDIO_NF_NOMIPS ) if( texture->flags & STUDIO_NF_NOMIPS )
fprintf( fp, "$texrendermode \"%s\" \"nomips\" \n", texture->name ); // sven-coop extension fprintf( fp, "$texrendermode \"%s\" \"nomips\" \n", texture->name ); // sven-coop extension
if( texture->flags & STUDIO_NF_NOSMOOTH ) if( texture->flags & STUDIO_NF_SMOOTH )
{ {
fprintf( fp, "$texrendermode \"%s\" \"alpha\" \n", texture->name ); // sven-coop extension fprintf( fp, "$texrendermode \"%s\" \"alpha\" \n", texture->name ); // sven-coop extension
fprintf( fp, "$texrendermode \"%s\" \"nosmooth\" \n", texture->name ); // xash3d extension fprintf( fp, "$texrendermode \"%s\" \"nosmooth\" \n", texture->name ); // xash3d extension
@ -230,7 +226,7 @@ static void WriteTextureRenderMode( FILE *fp )
if( texture->flags & STUDIO_NF_MASKED ) if( texture->flags & STUDIO_NF_MASKED )
fprintf( fp, "$texrendermode \"%s\" \"masked\" \n", texture->name ); fprintf( fp, "$texrendermode \"%s\" \"masked\" \n", texture->name );
if( texture->flags & ( STUDIO_NF_MASKED | STUDIO_NF_SOLID ) ) if( texture->flags & ( STUDIO_NF_MASKED | STUDIO_NF_ALPHASOLID ) )
fprintf( fp, "$texrendermode \"%s\" \"masked_solid\" \n", texture->name ); // xash3d extension fprintf( fp, "$texrendermode \"%s\" \"masked_solid\" \n", texture->name ); // xash3d extension
if( texture->flags & STUDIO_NF_TWOSIDE ) if( texture->flags & STUDIO_NF_TWOSIDE )
@ -557,10 +553,6 @@ static void WriteSequenceInfo( FILE *fp )
if( seqdesc->numblends > 2 ) if( seqdesc->numblends > 2 )
fputs( "}\n", fp ); fputs( "}\n", fp );
if( seqdesc->numpivots )
printf( "WARNING: Sequence %s uses %i foot pivots, feature not supported.\n",
seqdesc->label, seqdesc->numpivots );
} }
} }
@ -573,11 +565,11 @@ void WriteQCScript( void )
{ {
FILE *fp; FILE *fp;
char filename[MAX_SYSPATH]; char filename[MAX_SYSPATH];
size_t len; int len;
len = Q_snprintf( filename, MAX_SYSPATH, "%s%s.qc", destdir, modelfile ); len = Q_snprintf( filename, MAX_SYSPATH, "%s%s.qc", destdir, modelfile );
if( len >= MAX_SYSPATH ) if( len == -1 )
{ {
fprintf( stderr, "ERROR: Destination path is too long. Can't write %s.qc\n", modelfile ); fprintf( stderr, "ERROR: Destination path is too long. Can't write %s.qc\n", modelfile );
return; return;

View File

@ -107,15 +107,11 @@ static void ClipRotations( vec3_t angle )
ProperBoneRotationZ ProperBoneRotationZ
============ ============
*/ */
static void ProperBoneRotationZ( mstudioseqdesc_t *seqdesc, vec_t *motion, int frame, float angle ) static void ProperBoneRotationZ( vec_t *motion, float angle )
{ {
int i;
float c, s, x, y; float c, s, x, y;
float rot; float rot;
for( i = 0; i < 3; i++ )
motion[i] += frame * 1.0f / seqdesc->numframes * seqdesc->linearmovement[i];
rot = DEG2RAD( angle ); rot = DEG2RAD( angle );
s = sin( rot ); s = sin( rot );
@ -302,7 +298,7 @@ static void WriteTriangles( FILE *fp, mstudiomodel_t *model )
{ {
if( j >= 0 ) if( j >= 0 )
{ {
// triangle fan // triangle strip
for( k = 0; j > 0; j--, k++, tricmds += 4 ) for( k = 0; j > 0; j--, k++, tricmds += 4 )
{ {
if( k == 0 ) if( k == 0 )
@ -337,7 +333,7 @@ static void WriteTriangles( FILE *fp, mstudiomodel_t *model )
} }
else else
{ {
// triangle strip // triangle fan
j = abs( j ); j = abs( j );
for( k = 0; j > 0; j--, k++, tricmds += 4 ) for( k = 0; j > 0; j--, k++, tricmds += 4 )
@ -391,7 +387,12 @@ static void WriteFrameInfo( FILE *fp, mstudioanim_t *anim, mstudioseqdesc_t *seq
CalcBonePosition( anim, bone, motion, frame ); CalcBonePosition( anim, bone, motion, frame );
if( bone->parent == -1 ) if( bone->parent == -1 )
ProperBoneRotationZ( seqdesc, motion, frame, 270.0f ); {
for( j = 0; j < 3; j++ )
motion[j] += frame * 1.0f / seqdesc->numframes * seqdesc->linearmovement[j];
ProperBoneRotationZ( motion, 270.0f );
}
ClipRotations( &motion[3] ); ClipRotations( &motion[3] );
@ -433,7 +434,7 @@ WriteReferences
static void WriteReferences( void ) static void WriteReferences( void )
{ {
int i, j; int i, j;
size_t len; int len;
FILE *fp; FILE *fp;
mstudiomodel_t *model; mstudiomodel_t *model;
mstudiobodyparts_t *bodypart; mstudiobodyparts_t *bodypart;
@ -460,7 +461,7 @@ static void WriteReferences( void )
len = Q_snprintf( filename, MAX_SYSPATH, "%s%s.smd", destdir, name ); len = Q_snprintf( filename, MAX_SYSPATH, "%s%s.smd", destdir, name );
if( len >= MAX_SYSPATH ) if( len == -1 )
{ {
fprintf( stderr, "ERROR: Destination path is too long. Can't write %s.smd\n", name ); fprintf( stderr, "ERROR: Destination path is too long. Can't write %s.smd\n", name );
RemoveBoneTransformMatrices(); RemoveBoneTransformMatrices();
@ -499,7 +500,7 @@ WriteSequences
static void WriteSequences( void ) static void WriteSequences( void )
{ {
int i, j; int i, j;
size_t len; int len;
FILE *fp; FILE *fp;
char filename[MAX_SYSPATH]; char filename[MAX_SYSPATH];
mstudioseqdesc_t *seqdesc; mstudioseqdesc_t *seqdesc;
@ -515,7 +516,7 @@ static void WriteSequences( void )
else else
len = Q_snprintf( filename, MAX_SYSPATH, "%s%s_blend%i.smd", destdir, seqdesc->label, j + 1 ); len = Q_snprintf( filename, MAX_SYSPATH, "%s%s_blend%i.smd", destdir, seqdesc->label, j + 1 );
if( len >= MAX_SYSPATH ) if( len == -1 )
{ {
fprintf( stderr, "ERROR: Destination path is too long. Can't write %s.smd\n", seqdesc->label ); fprintf( stderr, "ERROR: Destination path is too long. Can't write %s.smd\n", seqdesc->label );
return; return;

View File

@ -30,19 +30,19 @@ WriteBMP
*/ */
static void WriteBMP( mstudiotexture_t *texture ) static void WriteBMP( mstudiotexture_t *texture )
{ {
int i; int i, len;
FILE *fp; FILE *fp;
const byte *p; const byte *p;
byte *palette, *pic, *buf; byte *palette, *pic, *buf;
char filename[MAX_SYSPATH], texturename[64]; char filename[MAX_SYSPATH], texturename[64];
rgba_t rgba_palette[256]; rgba_t rgba_palette[256];
bmp_t bmp_hdr = {0,}; bmp_t bmp_hdr = {0,};
size_t texture_size, len; size_t texture_size;
COM_FileBase( texture->name, texturename ); COM_FileBase( texture->name, texturename );
len = Q_snprintf( filename, MAX_SYSPATH, "%s%s.bmp", destdir, texturename ); len = Q_snprintf( filename, MAX_SYSPATH, "%s%s.bmp", destdir, texturename );
if( len >= MAX_SYSPATH ) if( len == -1 )
{ {
fprintf( stderr, "ERROR: Destination path is too long. Can't write %s.bmp\n", texturename ); fprintf( stderr, "ERROR: Destination path is too long. Can't write %s.bmp\n", texturename );
return; return;