From 299e3fe957f8979c5aab78850bfc2ff072b9a07d Mon Sep 17 00:00:00 2001 From: Andrey Akhmichin Date: Sat, 28 Nov 2020 05:34:15 +0500 Subject: [PATCH] utils: mdldec: small update. --- utils/mdldec/Makefile | 2 +- utils/mdldec/qc.c | 64 ++++++++++++++++++------------------------ utils/mdldec/smd.c | 25 +++++++++-------- utils/mdldec/texture.c | 6 ++-- 4 files changed, 45 insertions(+), 52 deletions(-) diff --git a/utils/mdldec/Makefile b/utils/mdldec/Makefile index 95138166..d804465a 100644 --- a/utils/mdldec/Makefile +++ b/utils/mdldec/Makefile @@ -4,7 +4,7 @@ MODULE = mdldec CC ?= gcc -CFLAGS ?= -O3 -pipe -DHAVE_TGMATH_H +CFLAGS ?= -O3 -pipe -DHAVE_TGMATH_H -DSTDINT_H=\ LDFLAGS ?= -Wl,--no-undefined SYS = $(shell $(CC) -dumpmachine) diff --git a/utils/mdldec/qc.c b/utils/mdldec/qc.c index fb22bbd4..b6a76103 100644 --- a/utils/mdldec/qc.c +++ b/utils/mdldec/qc.c @@ -145,23 +145,20 @@ static void GetMotionTypeString( int type, char *str, qboolean is_composite ) if( type & STUDIO_LZ ) Q_strcat( str, " LZ" ); - if( type & STUDIO_AX ) - Q_strcat( str, " AX" ); + if( type & STUDIO_LXR ) + Q_strcat( str, " LXR" ); - if( type & STUDIO_AY ) - Q_strcat( str, " AY" ); + if( type & STUDIO_LYR ) + Q_strcat( str, " LYR" ); - if( type & STUDIO_AZ ) - Q_strcat( str, " AZ" ); + if( type & STUDIO_LZR ) + Q_strcat( str, " LZR" ); - if( type & STUDIO_AXR ) - Q_strcat( str, " AXR" ); + if( type & STUDIO_LINEAR ) + Q_strcat( str, " LM" ); - if( type & STUDIO_AYR ) - Q_strcat( str, " AYR" ); - - if( type & STUDIO_AZR ) - Q_strcat( str, " AZR" ); + if( type & STUDIO_QUADRATIC_MOTION ) + Q_strcat( str, " LQ" ); return; } @@ -170,21 +167,20 @@ static void GetMotionTypeString( int type, char *str, qboolean is_composite ) switch( type ) { - case STUDIO_X: p = "X"; break; - case STUDIO_Y: p = "Y"; break; - case STUDIO_Z: p = "Z"; break; - case STUDIO_XR: p = "XR"; break; - case STUDIO_YR: p = "YR"; break; - case STUDIO_ZR: p = "ZR"; break; - case STUDIO_LX: p = "LX"; break; - case STUDIO_LY: p = "LY"; break; - case STUDIO_LZ: p = "LZ"; break; - case STUDIO_AX: p = "AX"; break; - case STUDIO_AY: p = "AY"; break; - case STUDIO_AZ: p = "AZ"; break; - case STUDIO_AXR: p = "AXR"; break; - case STUDIO_AYR: p = "AYR"; break; - case STUDIO_AZR: p = "AZR"; break; + case STUDIO_X: p = "X"; break; + case STUDIO_Y: p = "Y"; break; + case STUDIO_Z: p = "Z"; break; + case STUDIO_XR: p = "XR"; break; + case STUDIO_YR: p = "YR"; break; + case STUDIO_ZR: p = "ZR"; break; + case STUDIO_LX: p = "LX"; break; + case STUDIO_LY: p = "LY"; break; + case STUDIO_LZ: p = "LZ"; break; + case STUDIO_LXR: p = "LXR"; break; + case STUDIO_LYR: p = "LYR"; break; + case STUDIO_LZR: p = "LZR"; break; + case STUDIO_LINEAR: p = "LM"; break; + case STUDIO_QUADRATIC_MOTION: p = "LQ"; break; default: break; } @@ -218,7 +214,7 @@ static void WriteTextureRenderMode( FILE *fp ) if( texture->flags & STUDIO_NF_NOMIPS ) 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\" \"nosmooth\" \n", texture->name ); // xash3d extension @@ -230,7 +226,7 @@ static void WriteTextureRenderMode( FILE *fp ) if( texture->flags & STUDIO_NF_MASKED ) 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 if( texture->flags & STUDIO_NF_TWOSIDE ) @@ -557,10 +553,6 @@ static void WriteSequenceInfo( FILE *fp ) if( seqdesc->numblends > 2 ) 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; char filename[MAX_SYSPATH]; - size_t len; + int len; 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 ); return; diff --git a/utils/mdldec/smd.c b/utils/mdldec/smd.c index 3562bfc7..332ca9ea 100644 --- a/utils/mdldec/smd.c +++ b/utils/mdldec/smd.c @@ -107,15 +107,11 @@ static void ClipRotations( vec3_t angle ) 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 rot; - for( i = 0; i < 3; i++ ) - motion[i] += frame * 1.0f / seqdesc->numframes * seqdesc->linearmovement[i]; - rot = DEG2RAD( angle ); s = sin( rot ); @@ -302,7 +298,7 @@ static void WriteTriangles( FILE *fp, mstudiomodel_t *model ) { if( j >= 0 ) { - // triangle fan + // triangle strip for( k = 0; j > 0; j--, k++, tricmds += 4 ) { if( k == 0 ) @@ -337,7 +333,7 @@ static void WriteTriangles( FILE *fp, mstudiomodel_t *model ) } else { - // triangle strip + // triangle fan j = abs( j ); 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 ); 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] ); @@ -433,7 +434,7 @@ WriteReferences static void WriteReferences( void ) { int i, j; - size_t len; + int len; FILE *fp; mstudiomodel_t *model; mstudiobodyparts_t *bodypart; @@ -460,7 +461,7 @@ static void WriteReferences( void ) 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 ); RemoveBoneTransformMatrices(); @@ -499,7 +500,7 @@ WriteSequences static void WriteSequences( void ) { int i, j; - size_t len; + int len; FILE *fp; char filename[MAX_SYSPATH]; mstudioseqdesc_t *seqdesc; @@ -515,7 +516,7 @@ static void WriteSequences( void ) else 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 ); return; diff --git a/utils/mdldec/texture.c b/utils/mdldec/texture.c index f27381a2..77232bea 100644 --- a/utils/mdldec/texture.c +++ b/utils/mdldec/texture.c @@ -30,19 +30,19 @@ WriteBMP */ static void WriteBMP( mstudiotexture_t *texture ) { - int i; + int i, len; FILE *fp; const byte *p; byte *palette, *pic, *buf; char filename[MAX_SYSPATH], texturename[64]; rgba_t rgba_palette[256]; bmp_t bmp_hdr = {0,}; - size_t texture_size, len; + size_t texture_size; COM_FileBase( texture->name, 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 ); return;