示例#1
0
文件: g_spawn.c 项目: coltongit/3wctf
/*
===================
G_SpawnGEntityFromSpawnVars

Spawn an entity and fill in all of the level fields from
level.spawnVars[], then call the class specfic spawn function
===================
*/
void G_SpawnGEntityFromSpawnVars( void ) {
	int			i;
	gentity_t	*ent;
	bgEntitySpawnInfo_t spawnInfo;

	// get the next free entity
	ent = G_Spawn();

	for ( i = 0 ; i < level.numSpawnVars ; i++ ) {
		G_ParseField( level.spawnVars[i][0], level.spawnVars[i][1], ent );
	}

	spawnInfo.gametype = g_gametype.integer;
	spawnInfo.spawnInt = G_SpawnInt;
	spawnInfo.spawnString = G_SpawnString;

	// check "notsingle", "notfree", "notteam", etc
	if ( !BG_CheckSpawnEntity( &spawnInfo ) ) {
		ADJUST_AREAPORTAL();
		G_FreeEntity( ent );
		return;
	}

	// move editor origin to pos
	VectorCopy( ent->s.origin, ent->s.pos.trBase );
	VectorCopy( ent->s.origin, ent->r.currentOrigin );

	// if we didn't get a classname, don't bother spawning anything
	if ( !G_CallSpawn( ent ) ) {
		G_FreeEntity( ent );
	}
}
示例#2
0
/*
=======================================================================================================================================
G_SpawnGEntityFromSpawnVars

Spawn an entity and fill in all of the level fields from
level.spawnVars[], then call the class specfic spawn function
=======================================================================================================================================
*/
void G_SpawnGEntityFromSpawnVars(void) {
	int i;
	gentity_t *ent;
	// get the next free entity
	ent = G_Spawn();

	for (i = 0; i < level.numSpawnVars; i++) {
		G_ParseField(level.spawnVars[i][0], level.spawnVars[i][1], ent);
	}
	// check for "notteam"/"notfree" flags
	if (g_gametype.integer == GT_SINGLE_PLAYER) {
		G_SpawnInt("notsingle", "0", &i);

		if (i) {
			ADJUST_AREAPORTAL();
			G_FreeEntity(ent);
			return;
		}
	}

	if (g_gametype.integer >= GT_TEAM) {
		G_SpawnInt("notteam", "0", &i);

		if (i) {
			ADJUST_AREAPORTAL();
			G_FreeEntity(ent);
			return;
		}
	} else {
		G_SpawnInt("notfree", "0", &i);

		if (i) {
			ADJUST_AREAPORTAL();
			G_FreeEntity(ent);
			return;
		}
	}
	// move editor origin to pos
	VectorCopy(ent->s.origin, ent->s.pos.trBase);
	VectorCopy(ent->s.origin, ent->r.currentOrigin);
	// if we didn't get a classname, don't bother spawning anything
	if (!G_CallSpawn(ent)) {
		ADJUST_AREAPORTAL();
		G_FreeEntity(ent);
	}
}
示例#3
0
/*
===================
G_SpawnGEntityFromSpawnVars

Spawn an entity and fill in all of the level fields from
level.spawnVars[], then call the class specfic spawn function
===================
*/
void G_SpawnGEntityFromSpawnVars( void ) {
	int			i;
	gentity_t	*ent;
	char		*s, *value, *gametypeName;
	static char *gametypeNames[] = { "ffa", "tournament", "single", "team", "ca" /*FIXME "clanarena" */, "ctf", "oneflag", "obelisk", "harvester", "ft", "dom", "ad", "rr", "race" };

	// get the next free entity
	ent = G_Spawn();

	for ( i = 0 ; i < level.numSpawnVars ; i++ ) {
		G_ParseField( level.spawnVars[i][0], level.spawnVars[i][1], ent );
	}

	// check for "notsingle" flag
	if ( g_gametype.integer == GT_SINGLE_PLAYER ) {
		G_SpawnInt( "notsingle", "0", &i );
		if ( i ) {
			ADJUST_AREAPORTAL();
			G_FreeEntity( ent );
			return;
		}
	}
	// check for "notteam" flag (GT_FFA, GT_TOURNAMENT, GT_SINGLE_PLAYER)
	if ( g_gametype.integer >= GT_TEAM ) {
		G_SpawnInt( "notteam", "0", &i );
		if ( i ) {
			ADJUST_AREAPORTAL();
			G_FreeEntity( ent );
			return;
		}
	} else {
		G_SpawnInt( "notfree", "0", &i );
		if ( i ) {
			ADJUST_AREAPORTAL();
			G_FreeEntity( ent );
			return;
		}
	}

	//FIXME this can also be a string in quake live
	if (G_SpawnString("not_gametype", NULL, &value)) {
		//FIXME did quakelive also use ints before ?
		if (isdigit(value[0])) {
			// old check using integer gametype values
			if (g_gametype.integer == i) {
				ADJUST_AREAPORTAL();
				G_FreeEntity(ent);
				return;
			}
		} else {
			if (g_gametype.integer >= GT_FFA && g_gametype.integer < GT_MAX_GAME_TYPE) {
				gametypeName = gametypeNames[g_gametype.integer];

				s = strstr(value, gametypeName);
				if (!s) {
					// try alternate quake live gametype names
					if (g_gametype.integer == GT_TEAM) {
						s = strstr(value, "tdm");
					} else if (g_gametype.integer == GT_TOURNAMENT) {
						s = strstr(value, "duel");
					} else if (g_gametype.integer == GT_HARVESTER) {
						s = strstr(value, "har");
					} else if (g_gametype.integer == GT_1FCTF) {
						s = strstr(value, "1f");
					} else if (g_gametype.integer == GT_OBELISK) {
						s = strstr(value, "ob");
					}
				}

				if (s) {
					//G_Printf("skipping item, not in gametype string: '%s'\n", value);
					ADJUST_AREAPORTAL();
					G_FreeEntity(ent);
					return;
				}
			}
		}
	}


#if 1  //def MPACK
	G_SpawnInt( "notta", "0", &i );
	if ( i ) {
		ADJUST_AREAPORTAL();
		G_FreeEntity( ent );
		return;
	}
#else
	G_SpawnInt( "notq3a", "0", &i );
	if ( i ) {
		ADJUST_AREAPORTAL();
		G_FreeEntity( ent );
		return;
	}
#endif


	if (G_SpawnString("gametype", NULL, &value)) {
		//Com_Printf("^5gametype: %s\n", value);

		//FIXME gametype as int?  q3 mods?

		if (g_gametype.integer >= GT_FFA && g_gametype.integer < GT_MAX_GAME_TYPE) {
			gametypeName = gametypeNames[g_gametype.integer];

			s = strstr(value, gametypeName);
			if (!s) {
				// try alternate quake live gametype names
				if (g_gametype.integer == GT_TEAM) {
					s = strstr(value, "tdm");
				} else if (g_gametype.integer == GT_TOURNAMENT) {
					s = strstr(value, "duel");
				} else if (g_gametype.integer == GT_HARVESTER) {
					s = strstr(value, "har");
				} else if (g_gametype.integer == GT_1FCTF) {
					s = strstr(value, "1f");
				} else if (g_gametype.integer == GT_OBELISK) {
					s = strstr(value, "ob");
				}
			}

			if (!s) {
				//G_Printf("skipping item, not in gametype string: '%s'\n", value);
				ADJUST_AREAPORTAL();
				G_FreeEntity(ent);
				return;
			}
		}
	}

	// move editor origin to pos
	VectorCopy( ent->s.origin, ent->s.pos.trBase );
	VectorCopy( ent->s.origin, ent->r.currentOrigin );

	// if we didn't get a classname, don't bother spawning anything
	if ( !G_CallSpawn( ent ) ) {
		G_FreeEntity( ent );
	}
}
示例#4
0
文件: g_spawn.c 项目: Camron/OpenJK
/*
===================
G_SpawnGEntityFromSpawnVars

Spawn an entity and fill in all of the level fields from
level.spawnVars[], then call the class specfic spawn function
===================
*/
void G_SpawnGEntityFromSpawnVars( qboolean inSubBSP ) {
	int			i;
	gentity_t	*ent;
	char		*s, *value, *gametypeName;
	static char *gametypeNames[] = {"ffa", "holocron", "jedimaster", "duel", "powerduel", "single", "team", "siege", "ctf", "cty"};

	// get the next free entity
	ent = G_Spawn();

	for ( i = 0 ; i < level.numSpawnVars ; i++ ) {
		G_ParseField( level.spawnVars[i][0], level.spawnVars[i][1], ent );
	}

	// check for "notsingle" flag
	if ( g_gametype.integer == GT_SINGLE_PLAYER ) {
		G_SpawnInt( "notsingle", "0", &i );
		if ( i ) {
			ADJUST_AREAPORTAL();
			G_FreeEntity( ent );
			return;
		}
	}
	// check for "notteam" flag (GT_FFA, GT_DUEL, GT_SINGLE_PLAYER)
	if ( g_gametype.integer >= GT_TEAM ) {
		G_SpawnInt( "notteam", "0", &i );
		if ( i ) {
			ADJUST_AREAPORTAL();
			G_FreeEntity( ent );
			return;
		}
	} else {
		G_SpawnInt( "notfree", "0", &i );
		if ( i ) {
			ADJUST_AREAPORTAL();
			G_FreeEntity( ent );
			return;
		}
	}

	if( G_SpawnString( "gametype", NULL, &value ) ) {
		if( g_gametype.integer >= GT_FFA && g_gametype.integer < GT_MAX_GAME_TYPE ) {
			gametypeName = gametypeNames[g_gametype.integer];

			s = strstr( value, gametypeName );
			if( !s ) {
				ADJUST_AREAPORTAL();
				G_FreeEntity( ent );
				return;
			}
		}
	}

	// move editor origin to pos
	VectorCopy( ent->s.origin, ent->s.pos.trBase );
	VectorCopy( ent->s.origin, ent->r.currentOrigin );

	// if we didn't get a classname, don't bother spawning anything
	if ( !G_CallSpawn( ent ) ) {
		G_FreeEntity( ent );
	}

	//Tag on the ICARUS scripting information only to valid recipients
	if ( trap_ICARUS_ValidEnt( ent ) )
	{
		trap_ICARUS_InitEnt( ent );

		if ( ent->classname && ent->classname[0] )
		{
			if ( Q_strncmp( "NPC_", ent->classname, 4 ) != 0 )
			{//Not an NPC_spawner (rww - probably don't even care for MP, but whatever)
				G_ActivateBehavior( ent, BSET_SPAWN );
			}
		}
	}
}
示例#5
0
/*
===================
G_SpawnGEntityFromSpawnVars

Spawn an entity and fill in all of the level fields from
level.spawnVars[], then call the class specfic spawn function
===================
*/
void G_SpawnGEntityFromSpawnVars( void ) {
    int			i;
    gentity_t	*ent;
    char		*s, *value;

    // get the next free entity
    ent = G_Spawn();

    for ( i = 0 ; i < level.numSpawnVars ; i++ ) {
        G_ParseField( level.spawnVars[i][0], level.spawnVars[i][1], ent );
    }

    // check for "notsingle" flag
    if ( g_gametype.integer == GT_SINGLE_PLAYER ) {
        G_SpawnInt( "notsingle", "0", &i );
        if ( i ) {
            ADJUST_AREAPORTAL();
            G_FreeEntity( ent );
            return;
        }
    }
    // check for "notteam" flag (GT_FFA, GT_TOURNAMENT, GT_SINGLE_PLAYER)
    if ( gt[g_gametype.integer].teams ) {
        G_SpawnInt( "notteam", "0", &i );
        if ( i ) {
            ADJUST_AREAPORTAL();
            G_FreeEntity( ent );
            return;
        }
    } else {
        G_SpawnInt( "notfree", "0", &i );
        if ( i ) {
            ADJUST_AREAPORTAL();
            G_FreeEntity( ent );
            return;
        }
    }

#ifdef MISSIONPACK
    G_SpawnInt( "notta", "0", &i );
    if ( i ) {
        ADJUST_AREAPORTAL();
        G_FreeEntity( ent );
        return;
    }
#else
    G_SpawnInt( "notq3a", "0", &i );
    if ( i ) {
        ADJUST_AREAPORTAL();
        G_FreeEntity( ent );
        return;
    }
#endif
//fnq3
    G_SpawnInt( "notfnq3", "0", &i );
    if ( i ) {
        ADJUST_AREAPORTAL();
        G_FreeEntity( ent );
        return;
    }

    if ( g_gametype.integer >= GT_FFA && g_gametype.integer < GT_MAX_GAME_TYPE ) {
        if ( G_SpawnString("gametype", NULL, &value) ) {
            s = strstr( value, gt[g_gametype.integer].refName );
            if ( !s ) {
                ADJUST_AREAPORTAL();
                G_FreeEntity( ent );
                return;
            }
        }

        if ( G_SpawnString("not_gametype", NULL, &value) ) {
            s = strstr( value, gt[g_gametype.integer].refName );
            if ( s ) {
                ADJUST_AREAPORTAL();
                G_FreeEntity( ent );
                return;
            }
        }
    }

    if ( gt[g_gametype.integer].arena ) {
        G_SpawnInt( "not_gt_arena", "0", &i );
        if ( i ) {
            ADJUST_AREAPORTAL();
            G_FreeEntity( ent );
            return;
        }
    }
    if ( gt[g_gametype.integer].ctf ) {
        G_SpawnInt( "not_gt_ctf", "0", &i );
        if ( i ) {
            ADJUST_AREAPORTAL();
            G_FreeEntity( ent );
            return;
        }
    }
    if ( gt[g_gametype.integer].dom ) {
        G_SpawnInt( "not_gt_dom", "0", &i );
        if ( i ) {
            ADJUST_AREAPORTAL();
            G_FreeEntity( ent );
            return;
        }
    }
    if ( gt[g_gametype.integer].duel ) {
        G_SpawnInt( "not_gt_duel", "0", &i );
        if ( i ) {
            ADJUST_AREAPORTAL();
            G_FreeEntity( ent );
            return;
        }
    }
    if ( gt[g_gametype.integer].elimination ) {
        G_SpawnInt( "not_gt_elim", "0", &i );
        if ( i ) {
            ADJUST_AREAPORTAL();
            G_FreeEntity( ent );
            return;
        }
    }
    if ( gt[g_gametype.integer].freeze ) {
        G_SpawnInt( "not_gt_freeze", "0", &i );
        if ( i ) {
            ADJUST_AREAPORTAL();
            G_FreeEntity( ent );
            return;
        }
    }
    if ( gt[g_gametype.integer].single ) {
        G_SpawnInt( "not_gt_single", "0", &i );
        if ( i ) {
            ADJUST_AREAPORTAL();
            G_FreeEntity( ent );
            return;
        }
    }
    if ( gt[g_gametype.integer].tdm ) {
        G_SpawnInt( "not_gt_tdm", "0", &i );
        if ( i ) {
            ADJUST_AREAPORTAL();
            G_FreeEntity( ent );
            return;
        }
    }
    if ( gt[g_gametype.integer].teams ) {
        G_SpawnInt( "not_gt_teams", "0", &i );
        if ( i ) {
            ADJUST_AREAPORTAL();
            G_FreeEntity( ent );
            return;
        }
    }
//-fnq3

    // move editor origin to pos
    VectorCopy( ent->s.origin, ent->s.pos.trBase );
    VectorCopy( ent->s.origin, ent->r.currentOrigin );

    // if we didn't get a classname, don't bother spawning anything
    if ( !G_CallSpawn(ent) ) {
        G_FreeEntity( ent );
    }
}
示例#6
0
/*
===================
G_SpawnGEntityFromSpawnVars

Spawn an entity and fill in all of the level fields from
level.spawnVars[], then call the class specfic spawn function
===================
*/
void G_SpawnGEntityFromSpawnVars( void ) {
	int			i;
	gentity_t	*ent;
	char		*s, *value, *gametypeName;
	static char *gametypeNames[] = {"ffa", "tournament", "single", "team", "ctf", "oneflag", "obelisk", "harvester"};

	// get the next free entity
	ent = G_Spawn();

	for ( i = 0 ; i < level.numSpawnVars ; i++ ) {
		G_ParseField( level.spawnVars[i][0], level.spawnVars[i][1], ent );
	}

	// check for "notsingle" flag
	if ( g_gametype.integer == GT_SINGLE_PLAYER ) {
		G_SpawnInt( "notsingle", "0", &i );
		if ( i ) {
			ADJUST_AREAPORTAL();
			G_FreeEntity( ent );
			return;
		}
	}
	// check for "notteam" flag (GT_FFA, GT_TOURNAMENT, GT_SINGLE_PLAYER)
	if ( g_gametype.integer >= GT_TEAM ) {
		G_SpawnInt( "notteam", "0", &i );
		if ( i ) {
			ADJUST_AREAPORTAL();
			G_FreeEntity( ent );
			return;
		}
	} else {
		G_SpawnInt( "notfree", "0", &i );
		if ( i ) {
			ADJUST_AREAPORTAL();
			G_FreeEntity( ent );
			return;
		}
	}

#ifdef MISSIONPACK
	G_SpawnInt( "notta", "0", &i );
	if ( i ) {
		ADJUST_AREAPORTAL();
		G_FreeEntity( ent );
		return;
	}
#else
	G_SpawnInt( "notq3a", "0", &i );
	if ( i ) {
		ADJUST_AREAPORTAL();
		G_FreeEntity( ent );
		return;
	}
#endif

	if( G_SpawnString( "gametype", NULL, &value ) ) {
		if( g_gametype.integer >= GT_FFA && g_gametype.integer < GT_MAX_GAME_TYPE ) {
			gametypeName = gametypeNames[g_gametype.integer];

			s = strstr( value, gametypeName );
			if( !s ) {
				ADJUST_AREAPORTAL();
				G_FreeEntity( ent );
				return;
			}
		}
	}

	// move editor origin to pos
	VectorCopy( ent->s.origin, ent->s.pos.trBase );
	VectorCopy( ent->s.origin, ent->r.currentOrigin );

	// if we didn't get a classname, don't bother spawning anything
	if ( !G_CallSpawn( ent ) ) {
		G_FreeEntity( ent );
	}
}
示例#7
0
文件: g_spawn.c 项目: ArtanAhmeti/lab
/*
===================
G_SpawnGEntityFromSpawnVars

Spawn an entity and fill in all of the level fields from
level.spawnVars[], then call the class specfic spawn function
===================
*/
void G_SpawnGEntityFromSpawnVars( void ) {
	int			i;
	gentity_t	*ent;
	char		*s, *value, *gametypeName;
	static char *gametypeNames[] = {"ffa", "tournament", "single", "team", "ctf", "oneflag", "obelisk", "harvester"};
	int spawnVarsOffset[MAX_SPAWN_VARS][2];	// key / value pairs offsets

	// Convert to offsets.
	for (i = 0; i < level.numSpawnVars; ++i) {
		spawnVarsOffset[i][0] = level.spawnVars[i][0] - level.spawnVarChars;
		spawnVarsOffset[i][1] = level.spawnVars[i][1] - level.spawnVarChars;
	}

	// Early out if spawn is not required.
	if (!dmlab_update_spawn_vars(
			level.spawnVarChars,
			&level.numSpawnVarChars,
			spawnVarsOffset,
			&level.numSpawnVars)) {
		return;
	}

	// Convert from offsets.
	for (i = 0; i < level.numSpawnVars; ++i) {
		level.spawnVars[i][0] = level.spawnVarChars + spawnVarsOffset[i][0];
		level.spawnVars[i][1] = level.spawnVarChars + spawnVarsOffset[i][1];
	}

	// get the next free entity
	ent = G_Spawn();

	for ( i = 0 ; i < level.numSpawnVars ; i++ ) {
		G_ParseField( level.spawnVars[i][0], level.spawnVars[i][1], ent );
	}

	// check for "notsingle" flag
	if ( g_gametype.integer == GT_SINGLE_PLAYER ) {
		G_SpawnInt( "notsingle", "0", &i );
		if ( i ) {
			ADJUST_AREAPORTAL();
			G_FreeEntity( ent );
			return;
		}
	}
	// check for "notteam" flag (GT_FFA, GT_TOURNAMENT, GT_SINGLE_PLAYER)
	if ( g_gametype.integer >= GT_TEAM ) {
		G_SpawnInt( "notteam", "0", &i );
		if ( i ) {
			ADJUST_AREAPORTAL();
			G_FreeEntity( ent );
			return;
		}
	} else {
		G_SpawnInt( "notfree", "0", &i );
		if ( i ) {
			ADJUST_AREAPORTAL();
			G_FreeEntity( ent );
			return;
		}
	}

#ifdef MISSIONPACK
	G_SpawnInt( "notta", "0", &i );
	if ( i ) {
		ADJUST_AREAPORTAL();
		G_FreeEntity( ent );
		return;
	}
#else
	G_SpawnInt( "notq3a", "0", &i );
	if ( i ) {
		ADJUST_AREAPORTAL();
		G_FreeEntity( ent );
		return;
	}
#endif

	if( G_SpawnString( "gametype", NULL, &value ) ) {
		if( g_gametype.integer >= GT_FFA && g_gametype.integer < GT_MAX_GAME_TYPE ) {
			gametypeName = gametypeNames[g_gametype.integer];

			s = strstr( value, gametypeName );
			if( !s ) {
				ADJUST_AREAPORTAL();
				G_FreeEntity( ent );
				return;
			}
		}
	}

	// move editor origin to pos
	VectorCopy( ent->s.origin, ent->s.pos.trBase );
	VectorCopy( ent->s.origin, ent->r.currentOrigin );

	// if we didn't get a classname, don't bother spawning anything
	if ( !G_CallSpawn( ent ) ) {
		G_FreeEntity( ent );
	}
}