/* ================ readFile_int This parses an integer for the "tag" specified (cnf) ================ */ void readFile_int( char **cnf, int *v ) { char *t; //COM_MatchToken(cnf, "="); t = COM_ParseExt( cnf, qfalse ); if( !strcmp( t, "=" ) ) { t = COM_ParseExt( cnf, qfalse ); } else { COM_ParseWarning( "expected '=' before \"%s\"", t ); } *v = atoi( t ); }
/* ================ readFile_string This parses a literal string for the "tag" specified Color characters and escape sequences are parsed as well. ================ */ void readFile_string( char **cnf, char *s, int size ) { char *t; //COM_MatchToken(cnf, "="); s[ 0 ] = '\0'; t = COM_ParseExt( cnf, qfalse ); if( strcmp( t, "=" ) ) { COM_ParseWarning( "expected '=' before \"%s\"", t ); Q_strncpyz( s, t, size ); } while( 1 ) { t = COM_ParseExt( cnf, qfalse ); if( !*t ) break; if( strlen( t ) + strlen( s ) >= size ) break; if( *s ) Q_strcat( s, size, " " ); Q_strcat( s, size, t ); } }
/* =============== G_ParseDmgScript =============== */ static int G_ParseDmgScript( damageRegion_t *regions, char *buf ) { char *token; float angleSpan, heightSpan; int count; for ( count = 0;; count++ ) { token = COM_Parse( &buf ); if ( !token[ 0 ] ) { break; } if ( strcmp( token, "{" ) ) { COM_ParseError( "Missing {" ); break; } if ( count >= MAX_DAMAGE_REGIONS ) { COM_ParseError( "Max damage regions exceeded" ); break; } // defaults regions[ count ].name[ 0 ] = '\0'; regions[ count ].minHeight = 0.0f; regions[ count ].maxHeight = 1.0f; regions[ count ].minAngle = 0.0f; regions[ count ].maxAngle = 360.0f; regions[ count ].modifier = 1.0f; regions[ count ].crouch = qfalse; while ( 1 ) { token = COM_ParseExt( &buf, qtrue ); if ( !token[ 0 ] ) { COM_ParseError( "Unexpected end of file" ); break; } if ( !Q_stricmp( token, "}" ) ) { break; } else if ( !strcmp( token, "name" ) ) { token = COM_ParseExt( &buf, qfalse ); if ( token[ 0 ] ) { Q_strncpyz( regions[ count ].name, token, sizeof( regions[ count ].name ) ); } } else if ( !strcmp( token, "minHeight" ) ) { token = COM_ParseExt( &buf, qfalse ); if ( !token[ 0 ] ) { strcpy( token, "0" ); } regions[ count ].minHeight = atof( token ); } else if ( !strcmp( token, "maxHeight" ) ) { token = COM_ParseExt( &buf, qfalse ); if ( !token[ 0 ] ) { strcpy( token, "100" ); } regions[ count ].maxHeight = atof( token ); } else if ( !strcmp( token, "minAngle" ) ) { token = COM_ParseExt( &buf, qfalse ); if ( !token[ 0 ] ) { strcpy( token, "0" ); } regions[ count ].minAngle = atoi( token ); } else if ( !strcmp( token, "maxAngle" ) ) { token = COM_ParseExt( &buf, qfalse ); if ( !token[ 0 ] ) { strcpy( token, "360" ); } regions[ count ].maxAngle = atoi( token ); } else if ( !strcmp( token, "modifier" ) ) { token = COM_ParseExt( &buf, qfalse ); if ( !token[ 0 ] ) { strcpy( token, "1.0" ); } regions[ count ].modifier = atof( token ); } else if ( !strcmp( token, "crouch" ) ) { regions[ count ].crouch = qtrue; } else { COM_ParseWarning( "Unknown token \"%s\"", token ); } } // Angle portion covered angleSpan = regions[ count ].maxAngle - regions[ count ].minAngle; if ( angleSpan < 0.0f ) { angleSpan += 360.0f; } angleSpan /= 360.0f; // Height portion covered heightSpan = regions[ count ].maxHeight - regions[ count ].minHeight; if ( heightSpan < 0.0f ) { heightSpan = -heightSpan; } if ( heightSpan > 1.0f ) { heightSpan = 1.0f; } regions[ count ].area = angleSpan * heightSpan; if ( !regions[ count ].area ) { regions[ count ].area = 0.00001f; } } return count; }