summaryrefslogtreecommitdiff
path: root/src/game/g_spawn.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/game/g_spawn.c')
-rw-r--r--src/game/g_spawn.c19
1 files changed, 14 insertions, 5 deletions
diff --git a/src/game/g_spawn.c b/src/game/g_spawn.c
index b66675c0..b8646ddf 100644
--- a/src/game/g_spawn.c
+++ b/src/game/g_spawn.c
@@ -377,10 +377,11 @@ in a gentity
void G_ParseField( const char *key, const char *value, gentity_t *ent )
{
field_t *f;
- byte *b;
- float v;
+ byte *b;
+ float v;
vec3_t vec;
vec4_t vec4;
+ int i, count;
for( f = fields; f->name; f++ )
{
@@ -396,14 +397,22 @@ void G_ParseField( const char *key, const char *value, gentity_t *ent )
break;
case F_VECTOR:
- sscanf( value, "%f %f %f", &vec[ 0 ], &vec[ 1 ], &vec[ 2 ] );
+ count = sscanf( value, "%f %f %f", &vec[ 0 ], &vec[ 1 ], &vec[ 2 ] );
+
+ for( i = 2; i >= count; i-- )
+ vec[ i ] = 0.0f;
+
( (float *)( b + f->ofs ) )[ 0 ] = vec[ 0 ];
( (float *)( b + f->ofs ) )[ 1 ] = vec[ 1 ];
( (float *)( b + f->ofs ) )[ 2 ] = vec[ 2 ];
break;
case F_VECTOR4:
- sscanf( value, "%f %f %f %f", &vec4[ 0 ], &vec4[ 1 ], &vec4[ 2 ], &vec4[ 3 ] );
+ count = sscanf( value, "%f %f %f %f", &vec4[ 0 ], &vec4[ 1 ], &vec4[ 2 ], &vec4[ 3 ] );
+
+ for( i = 3; i >= count; i-- )
+ vec[ i ] = 0.0f;
+
( (float *)( b + f->ofs ) )[ 0 ] = vec4[ 0 ];
( (float *)( b + f->ofs ) )[ 1 ] = vec4[ 1 ];
( (float *)( b + f->ofs ) )[ 2 ] = vec4[ 2 ];
@@ -474,7 +483,7 @@ void G_SpawnGEntityFromSpawnVars( void )
VectorCopy( ent->s.origin, ent->r.currentOrigin );
// if we didn't get a classname, don't bother spawning anything
- if ( !G_CallSpawn( ent ) )
+ if( !G_CallSpawn( ent ) )
G_FreeEntity( ent );
}