the Rainbow Networks
+++eXy FFA
Map: rq3dm4
Players: 2 / 18
The golden pot › RAINBOW NETWORKS › Tech & Support › Spawn....things
Spawn....things
Something wrong with our servers or your system?
Go to page 1, 2, 3  Next
Post new topic   Reply to topic   Printer Friendly Page     Forum IndexTech & Support
View previous topic :: View next topic  
Author Message
Falkland
Übergod
Übergod


Joined: Aug 01, 2008
Posts: 922
Location: Nowhere

PostPosted: Fri May 08, 2009 3:49 pm    Post subject: Spawn....things Reply with quote

NOTE : I was in doubt to publish this post but since OA/ioq3/Q3-1.32b source code is public like many other OSS projects , I decided to post it because I DID not discover anything of really really interesting.

The current DM and 1v1 player spawn function used till OA081 chooses a random spawn point between the furthest ones from the area where the player is dead ( SelectRandomFurthestSpawnPoint : the real spawn function is SelectSpawnPoint which is strictly a call to SelectRandomFurthestSpawnPoint )

CTF and the other team gameplay modes follow a different rule ( team-based-random spawn points )

Let's see a very very simple - and faulty - plane (2D) case :

Code::
_______________
|S1    |    S2|
|   A  |  B   |
|      |      |
---------------
|      |      |
|   C  |  D   |
|S3    |    S4|
---------------

4 Areas (A,B,C,D) with 4 spawn points ( S1 , S2 , S3 , S4 )

1v1 : 1st player die in A , so when this player will respawn , the SelectRandomFurthestSpawnPoint will choose with high probability for spawn point S4 ...

If a player knows all the spawn point of a map , the next spawn point could be easily predicted and the entire process serialized to be used as a technique (spawnfrags).

In space maps with few spawn points ( eg dm17-like maps ) it could be really easy for a faster enough player to frag the opponent everytime he/she respawns.

Of course there are some exceptions : on cpm1a map spawnfrags or direct spawnfrags with rg or lg is not so easy to do, thankfully to the good design of the map.

In DM this function should respawn players on the furthest random spawn points that don't telefrag but when spawn points are a few like in the sample map , telefrag becomes the rule if the number of players is higher than spawn points and/or a camper start to kill the other players that are/spawn in A/S1 for example. With camper's frags rate all the spawn points will be used and more than 1 player will be telefragged . In a way or in another most of the players will respawn in S1 under the camper's fire or they will be telefragged mostly in S4 . This happen usually on oa_dm7 until a lucky player doesn't kill the camper at one of the RLs. ( I remember more than once when there were more than 15 players at the NO CTF MAP server , on oa_dm7 with 2 campers at RLs and 1 on PG ... less than 2 minutes for the fastest and luckiest camper to reach the max score )

With many players and few spawn points , telefrags are a problem also when the match starts.

So this function should work well with enough complex maps with a high and odd number of spawn points while in maps with a pair number of spawn point and lower than the number of active players , the problem of telefragging can still persist.

Here are the DM/1v1 spawn functions defined in code/game/g_client.c ...

Code::

// contained in g_client.c

/*
=======================================================================

  SelectSpawnPoint

=======================================================================
*/

/*
================
SpotWouldTelefrag

================
*/
qboolean SpotWouldTelefrag( gentity_t *spot ) {
	int			i, num;
	int			touch[MAX_GENTITIES];
	gentity_t	*hit;
	vec3_t		mins, maxs;

	VectorAdd( spot->s.origin, playerMins, mins );
	VectorAdd( spot->s.origin, playerMaxs, maxs );
	num = trap_EntitiesInBox( mins, maxs, touch, MAX_GENTITIES );

	for (i=0 ; i<num ; i++) {
		hit = &g_entities[touch[i]];
		//if ( hit->client && hit->client->ps.stats[STAT_HEALTH] > 0 ) {
		if ( hit->client) {
			return qtrue;
		}

	}

	return qfalse;
}

/*
================
SelectNearestDeathmatchSpawnPoint

Find the spot that we DON'T want to use
================
*/
#define	MAX_SPAWN_POINTS	128
gentity_t *SelectNearestDeathmatchSpawnPoint( vec3_t from ) {
	gentity_t	*spot;
	vec3_t		delta;
	float		dist, nearestDist;
	gentity_t	*nearestSpot;

	nearestDist = 999999;
	nearestSpot = NULL;
	spot = NULL;

	while ((spot = G_Find (spot, FOFS(classname), "info_player_deathmatch")) != NULL) {

		VectorSubtract( spot->s.origin, from, delta );
		dist = VectorLength( delta );
		if ( dist < nearestDist ) {
			nearestDist = dist;
			nearestSpot = spot;
		}
	}

	return nearestSpot;
}


/*
================
SelectRandomDeathmatchSpawnPoint

go to a random point that doesn't telefrag
================
*/
#define	MAX_SPAWN_POINTS	128
gentity_t *SelectRandomDeathmatchSpawnPoint( void ) {
	gentity_t	*spot;
	int			count;
	int			selection;
	gentity_t	*spots[MAX_SPAWN_POINTS];

	count = 0;
	spot = NULL;

	while ((spot = G_Find (spot, FOFS(classname), "info_player_deathmatch")) != NULL) {
		if ( SpotWouldTelefrag( spot ) ) {
			continue;
		}
		spots[ count ] = spot;
		count++;
	}

	if ( !count ) {	// no spots that won't telefrag
		return G_Find( NULL, FOFS(classname), "info_player_deathmatch");
	}

	selection = rand() % count;
	return spots[ selection ];
}

/*
===========
SelectRandomFurthestSpawnPoint

Chooses a player start, deathmatch start, etc
============
*/
gentity_t *SelectRandomFurthestSpawnPoint ( vec3_t avoidPoint, vec3_t origin, vec3_t angles ) {
	gentity_t	*spot;
	vec3_t		delta;
	float		dist;
	float		list_dist[64];
	gentity_t	*list_spot[64];
	int			numSpots, rnd, i, j;

	numSpots = 0;
	spot = NULL;

	while ((spot = G_Find (spot, FOFS(classname), "info_player_deathmatch")) != NULL) {
		if ( SpotWouldTelefrag( spot ) ) {
			continue;
		}
		VectorSubtract( spot->s.origin, avoidPoint, delta );
		dist = VectorLength( delta );
		for (i = 0; i < numSpots; i++) {
			if ( dist > list_dist[i] ) {
				if ( numSpots >= 64 )
					numSpots = 64-1;
				for (j = numSpots; j > i; j--) {
					list_dist[j] = list_dist[j-1];
					list_spot[j] = list_spot[j-1];
				}
				list_dist[i] = dist;
				list_spot[i] = spot;
				numSpots++;
				if (numSpots > 64)
					numSpots = 64;
				break;
			}
		}
		if (i >= numSpots && numSpots < 64) {
			list_dist[numSpots] = dist;
			list_spot[numSpots] = spot;
			numSpots++;
		}
	}
	if (!numSpots) {
		spot = G_Find( NULL, FOFS(classname), "info_player_deathmatch");
		if (!spot)
			G_Error( "Couldn't find a spawn point" );
		VectorCopy (spot->s.origin, origin);
		origin[2] += 9;
		VectorCopy (spot->s.angles, angles);
		return spot;
	}

	// select a random spot from the spawn points furthest away
	rnd = random() * (numSpots / 2);

	VectorCopy (list_spot[rnd]->s.origin, origin);
	origin[2] += 9;
	VectorCopy (list_spot[rnd]->s.angles, angles);

	return list_spot[rnd];
}

/*
===========
SelectSpawnPoint

Chooses a player start, deathmatch start, etc
============
*/
gentity_t *SelectSpawnPoint ( vec3_t avoidPoint, vec3_t origin, vec3_t angles ) {
	return SelectRandomFurthestSpawnPoint( avoidPoint, origin, angles );

// the following code is inactive in OA081 , it is active since OpenArenaExpandedB35

	/*
	gentity_t	*spot;
	gentity_t	*nearestSpot;

	nearestSpot = SelectNearestDeathmatchSpawnPoint( avoidPoint );

	spot = SelectRandomDeathmatchSpawnPoint ( );
	if ( spot == nearestSpot ) {
		// roll again if it would be real close to point of death
		spot = SelectRandomDeathmatchSpawnPoint ( );
		if ( spot == nearestSpot ) {
			// last try
			spot = SelectRandomDeathmatchSpawnPoint ( );
		}		
	}

	// find a single player start spot
	if (!spot) {
		G_Error( "Couldn't find a spawn point" );
	}

	VectorCopy (spot->s.origin, origin);
	origin[2] += 9;
	VectorCopy (spot->s.angles, angles);

	return spot;
	*/
}


... while the team based spawn functions are coded in the file code/game/g_team.c :

Code::
...
// contained in g_team.c

/*---------------------------------------------------------------------------*/

/*
================
SelectRandomDeathmatchSpawnPoint

go to a random point that doesn't telefrag
================
*/
#define	MAX_TEAM_SPAWN_POINTS	32
gentity_t *SelectRandomTeamSpawnPoint( int teamstate, team_t team ) {
	gentity_t	*spot;
	int			count;
	int			selection;
	gentity_t	*spots[MAX_TEAM_SPAWN_POINTS];
	char		*classname;

	if(g_gametype.integer == GT_ELIMINATION) { //change sides every round
		if((level.roundNumber+level.eliminationSides)%2==1){
			if(team == TEAM_RED)
				team = TEAM_BLUE;
			else if(team == TEAM_BLUE)
				team = TEAM_RED;
		}
	}

	if (teamstate == TEAM_BEGIN) {
		if (team == TEAM_RED)
			classname = "team_CTF_redplayer";
		else if (team == TEAM_BLUE)
			classname = "team_CTF_blueplayer";
		else
			return NULL;
	} else {
		if (team == TEAM_RED)
			classname = "team_CTF_redspawn";
		else if (team == TEAM_BLUE)
			classname = "team_CTF_bluespawn";
		else
			return NULL;
	}
	count = 0;

	spot = NULL;

	while ((spot = G_Find (spot, FOFS(classname), classname)) != NULL) {
		if ( SpotWouldTelefrag( spot ) ) {
			continue;
		}
		spots[ count ] = spot;
		if (++count == MAX_TEAM_SPAWN_POINTS)
			break;
	}

	if ( !count ) {	// no spots that won't telefrag
		return G_Find( NULL, FOFS(classname), classname);
	}

	selection = rand() % count;
	return spots[ selection ];
}

/*
================
SelectRandomDDSpawnPoint

go to a random Double Domination Spawn Point
================
*/
#define	MAX_TEAM_SPAWN_POINTS	32
gentity_t *SelectRandomDDSpawnPoint( void ) {
	gentity_t	*spot;
	int			count;
	int			selection;
	gentity_t	*spots[MAX_TEAM_SPAWN_POINTS];
	char		*classname;

	
	classname = "info_player_dd";
		
	count = 0;

	spot = NULL;

	while ((spot = G_Find (spot, FOFS(classname), classname)) != NULL) {
		if ( SpotWouldTelefrag( spot ) ) {
			continue;
		}
		spots[ count ] = spot;
		if (++count == MAX_TEAM_SPAWN_POINTS)
			break;
	}

	if ( !count ) {	// no spots that won't telefrag
		return G_Find( NULL, FOFS(classname), classname);
	}

	selection = rand() % count;
	return spots[ selection ];
}

gentity_t *SelectRandomTeamDDSpawnPoint( team_t team ) {
	gentity_t	*spot;
	int			count;
	int			selection;
	gentity_t	*spots[MAX_TEAM_SPAWN_POINTS];
	char		*classname;

	if(team == TEAM_RED)
            classname = "info_player_dd_red";
        else
            classname = "info_player_dd_blue";
		
	count = 0;

	spot = NULL;

	while ((spot = G_Find (spot, FOFS(classname), classname)) != NULL) {
		if ( SpotWouldTelefrag( spot ) ) {
			continue;
		}
		spots[ count ] = spot;
		if (++count == MAX_TEAM_SPAWN_POINTS)
			break;
	}

	if ( !count ) {	// no spots that won't telefrag
		return G_Find( NULL, FOFS(classname), classname);
	}

	selection = rand() % count;
	return spots[ selection ];
}


/*
===========
SelectCTFSpawnPoint

============
*/
gentity_t *SelectCTFSpawnPoint ( team_t team, int teamstate, vec3_t origin, vec3_t angles ) {
	gentity_t	*spot;

	spot = SelectRandomTeamSpawnPoint ( teamstate, team );

	if (!spot) {
		return SelectSpawnPoint( vec3_origin, origin, angles );
	}

	VectorCopy (spot->s.origin, origin);
	origin[2] += 9;
	VectorCopy (spot->s.angles, angles);

	return spot;
}

/*
===========
SelectDoubleDominationSpawnPoint

============
*/
gentity_t *SelectDoubleDominationSpawnPoint ( team_t team, vec3_t origin, vec3_t angles ) {
	gentity_t	*spot;

        spot = SelectRandomTeamDDSpawnPoint( team );
        
        if(!spot) {
            spot = SelectRandomDDSpawnPoint ( );
        }
        
	if (!spot) {
		return SelectSpawnPoint( vec3_origin, origin, angles );
	}

	VectorCopy (spot->s.origin, origin);
	origin[2] += 9;
	VectorCopy (spot->s.angles, angles);

	return spot;
}

/*---------------------------------------------------------------------------*/
...

As u can see , the SelectRandomFurthestSpawnPoint function is the longest ( in terms of lines of code )

In the OpenarenaExpandedB35 ( the same in B36, B37 and B38 ) the spawn function is changed ( not so much , it was substituted by an ancient code ... previous than Q3-1.32b ) with the main mission ( as stated by sago007 himself ) to avoid telefrags : the spawn point is chosen randomly between all the spawn points that don't telefrag with the exclusion of the nearest one to the area in which the player was fragged.

Code::

/*
===========
SelectSpawnPoint

Chooses a player start, deathmatch start, etc
============
*/
gentity_t *SelectSpawnPoint ( vec3_t avoidPoint, vec3_t origin, vec3_t angles ) {
	//return SelectRandomFurthestSpawnPoint( avoidPoint, origin, angles );

	
	gentity_t	*spot;
	gentity_t	*nearestSpot;

	nearestSpot = SelectNearestDeathmatchSpawnPoint( avoidPoint );

	spot = SelectRandomDeathmatchSpawnPoint ( );
	if ( spot == nearestSpot ) {
		// roll again if it would be real close to point of death
		spot = SelectRandomDeathmatchSpawnPoint ( );
		if ( spot == nearestSpot ) {
			// last try
			spot = SelectRandomDeathmatchSpawnPoint ( );
		}		
	}

	// find a single player start spot
	if (!spot) {
		G_Error( "Couldn't find a spawn point" );
	}

	VectorCopy (spot->s.origin, origin);
	origin[2] += 9;
	VectorCopy (spot->s.angles, angles);

	return spot;
}


In 1v1 the next spawn point could still be predicted but not exactly : first of all, the player knows at least where not to fire after fragging his/her opponent ( the nearest spawn point ) but most of the times the fragged opponent will respawn near the player while moving to get other items in most of the maps.

With the NoGhost mod for q3 1.32 there's the possibility to choose which function should be used through a cvar : totally random or randomfurthest spawn points :

Quote::

...
g_farthestRespawnPoint (default=1) <-- Boolean to determine how the NoGhost mod will determine where to respawn a player after they die. Turning this variable off will spawn the player anywhere in the arena, rather than farthest away from they died. This could increase their chances of spawning right next to their former attacker.
...

I started to edit this post after sago007 released the OpenArenaExpandedB35 and I was going to point that random spawn points with the exclusion of the nearest one to where the dead player was fragged , was not enough to avoid ( or to reduce ) spawnfrags. I was going to suggest that also the killer position should be an active parameter to evaluate the next spawn point ( spawning the player as far as possible from the killer position ).

But the CPMA development team just already included in the latest version ( 1.47 ) of the Challenge mod a spawn function that use also the killer position as a parameter to decide where to respawn the dead player :

Quote from : www.promode.org/wiki/i...Tech_Sheet

Quote::

...

Player Spawning

Description

Respawns are biased away from player corpse

Specifics

* Spawnpoints overlapped by players are ignored
* Nearest spawnpoint to corpse is ignored
* Nearest spawnpoints to killer are ignored. Depends on total spawnpoints amount


Exceptions

* Deathmatch modes always use full random for suicides
* Flag modes always use full random among team spawnpoints

...

I've played a bit with rat.100 bot on cpm22 - pre-match trainings + matches - beeing spawnfragged only 2 or 3 times ( much less than before ).

To really avoid both spawnfrags and telefrags the mappers could help much more than the code by creating much complex DM/1v1 maps , with many well placed spawn points ( in a odd number and much more asymmetric as possible ) and not too near to the main items ( megahealth, armors ) unless they are well placed too ( eg the red armor in hub3aeroq3/cpm22 ). Also in the Challenge Quake Spec there's the citation "Depends on total spawnpoints amount" that means that a too low number of spawnpoints is not always a good thing.

PS: Feel free to report any error/suggestion.
Back to top
View user's profile
kernel_panic
Übergod
Übergod


Joined: Aug 28, 2007
Posts: 751
Location: uk

PostPosted: Sat May 09, 2009 12:23 am    Post subject: Re: Spawn....things Reply with quote

Wow. That was really interesting, Falkland. And precisely these days I was asking myself about how spawn points were decided.

One thing, why having an odd number of spawn points is better?

_________________
"Fuelling off topic babble since day 1."
Back to top
View user's profile
Falkland
Übergod
Übergod


Joined: Aug 01, 2008
Posts: 922
Location: Nowhere

PostPosted: Sat May 09, 2009 1:46 am    Post subject: Re: Spawn....things Reply with quote

kernel_panic wrote:

One thing, why having an odd number of spawn points is better?

Well ... the simplest case is a regular pentagon ... I have difficult to represent a pentagon in ascii form , so just think about it instead of a square : it will have 5 symmetric areas ( A1, A2 , A3 , A4 , A5 ) and 5 symmetric spawn points ( S1 , S2 , S3 , S4 , S5 ) ... once a player is fragged in A1 , the SelectRandomFurthestSpawnPoint will have at least 2 candidate points ( S4 ,S5 ) for spawning the player ( edit : better to precise ) while in the square case the candidate spawn point will be with high probability only 1 ( the opposite ).


Last edited by Falkland on Sat May 09, 2009 3:16 am; edited 1 time in total
Back to top
View user's profile
chiquita
Alpacas Approved
Alpacas Approved


Joined: Sep 01, 2007
Posts: 1410
Location: psychiatric ward

PostPosted: Sat May 09, 2009 2:44 am    Post subject: Re: Spawn....things Reply with quote

I didnt read the full thing.. but some custom maps have different or more random spawn points. OFC.. knowing spawn prediction is one thing, but possibly knowing the spawn areas can be a huge advantage.

Someone on noghost forums posted a q3dm17 map with random spawn points (probably just additional spawn areas). I thought it was worth noting because the map runs server side yet the client doesnt need to download or have the map.. it uses the local map with the altered spawn points. The map just needs to be in the server base folder.
Back to top
View user's profile
Falkland
Übergod
Übergod


Joined: Aug 01, 2008
Posts: 922
Location: Nowhere

PostPosted: Sat May 09, 2009 3:29 am    Post subject: Re: Spawn....things Reply with quote

chiquita wrote:

...
Someone on noghost forums posted a q3dm17 map with random spawn points (probably just additional spawn areas). I thought it was worth noting because the map runs server side yet the client doesnt need to download or have the map.. it uses the local map with the altered spawn points. The map just needs to be in the server base folder.

Mmm ... maybe you're right , I saw that post but the map is (was ?) also available for download ...

anyway , probably you're right cause in the last days I've played on a US q3 server ( Area51 FFA ) that has altered maps ( eg dm17 ... railguns and rail cells at the place of shotguns and shotgun cells ... the lightgun on the platform where there's usually the railgun ... lightgun cells at the place of the railgun cells ... and another megahealth on the higher platform where usually the quad spawns ... or Q3tourney3 with megahealth where usually spawns the battle suite and inverted weapons - railgun with rocketlauncher and viceversa ) ... but really idk if this can be done also ( or only ) by playing a bit with server side cvars.
Back to top
View user's profile
chiquita
Alpacas Approved
Alpacas Approved


Joined: Sep 01, 2007
Posts: 1410
Location: psychiatric ward

PostPosted: Sat May 09, 2009 1:54 pm    Post subject: Re: Spawn....things Reply with quote

The weapons and items are usually a server mod. For example I use a set item_replace_quad item_replace_haste -- to replace the quad.

I have never any option for spawn points on mods other than sv_furtherstspawnpoint so the player spawns the furthest distance.

Yes, that map has to be put in baseq3 for the spawn points to change but maybe it doesnt need to be downloaded because it contains a script that the server uses and the client does not need it.. It even works with pure even if the map is a different file size but dont know if this is because the map being modified is one which is default in game.
Back to top
View user's profile
pulchr
Elite Haxor!
Elite Haxor!


Joined: Oct 23, 2007
Posts: 167
Location: sweden

PostPosted: Sat May 09, 2009 2:33 pm    Post subject: Re: Spawn....things Reply with quote

i've got a question about spawns that maybe you know the answer to. when a duel match starts - how are the first starting spawns decided?

is it a totally random selection or are they also picked so players don't spawn next to each other?

the reason i'm asking is that i'm currently working on a duel map where i want to place spawns so that players don't spawn too close to each other, especially when the match begins.

any ideas of experience on how this works?

_________________
barry white saved my life
Back to top
View user's profile Send e-mail
Falkland
Übergod
Übergod


Joined: Aug 01, 2008
Posts: 922
Location: Nowhere

PostPosted: Sat May 09, 2009 3:18 pm    Post subject: Re: Spawn....things Reply with quote

pulchr wrote:
i've got a question about spawns that maybe you know the answer to. when a duel match starts - how are the first starting spawns decided?

is it a totally random selection or are they also picked so players don't spawn next to each other?
...

There's a function for selecting the initial spawn point , always in g_client.c :

Code::
/*
===========
SelectInitialSpawnPoint

Try to find a spawn point marked 'initial', otherwise
use normal spawn selection.
============
*/
gentity_t *SelectInitialSpawnPoint( vec3_t origin, vec3_t angles ) {
	gentity_t	*spot;

	spot = NULL;
	while ((spot = G_Find (spot, FOFS(classname), "info_player_deathmatch")) != NULL) {
		if ( spot->spawnflags & 1 ) {
			break;
		}
	}

	if ( !spot || SpotWouldTelefrag( spot ) ) {
		return SelectSpawnPoint( vec3_origin, origin, angles );
	}

	VectorCopy (spot->s.origin, origin);
	origin[2] += 9;
	VectorCopy (spot->s.angles, angles);

	return spot;
}
...

As stated in the comment , it searches for a spawn point marked as initial in the map else it uses the normal spawn point selection ( random-furthest for q3/ioq3/oa081 , random for OpenArenaExpandedBxy ) .
Back to top
View user's profile
chiquita
Alpacas Approved
Alpacas Approved


Joined: Sep 01, 2007
Posts: 1410
Location: psychiatric ward

PostPosted: Sat May 09, 2009 3:22 pm    Post subject: Re: Spawn....things Reply with quote

I don't know about how it works.. but on each round you can spawn right next to a player. edit: falkland clarified the start spawn

On dm17 each time you are killed you spawn at the opposite side of the map, regardless of where the enemy is. When I play on servers which has spawn protection I can't remember any time where I respawn in the same place but it can be close to the position I spawned first.

I think the game checks for available spawn points then spawns them in a random place. If there is more players than spawn points then spawn kills occur. I think it can sometimes happen just as a player walks over a spawn point but that rarely happens.. maybe lag can cause that.
Back to top
View user's profile
Falkland
Übergod
Übergod


Joined: Aug 01, 2008
Posts: 922
Location: Nowhere

PostPosted: Sat May 09, 2009 3:58 pm    Post subject: Re: Spawn....things Reply with quote

Another example of how the "twin_bad_(random-furthest-spawn-point+bad_map_design)_pair " could be letal for inexperienced or unlucky or ping-handicapped players :

In ztn3tourney :
- player1 kills player2 with railgun when player2 is over megahealth without picking it
- player1 is near the teleport
- player1 is quick enough to go on teleport after killing player2
- player1 will be exactly in front of the player2 while spawning expecially if player2 has a higher ping , because net latency will produce a little inconsistency in the game world between the moment in which player2 will press a key to respawn and the moment in which the player2 will effectively respawn.
Back to top
View user's profile
pulchr
Elite Haxor!
Elite Haxor!


Joined: Oct 23, 2007
Posts: 167
Location: sweden

PostPosted: Sat May 09, 2009 4:14 pm    Post subject: Re: Spawn....things Reply with quote

the "marked as initial" flag is indeed there - i just haven't seen it before.

the description reads: "INITIAL: makes the spawnpoint the initial place for the player to spawn at the beginning of the game."

_________________
barry white saved my life
Back to top
View user's profile Send e-mail
chiquita
Alpacas Approved
Alpacas Approved


Joined: Sep 01, 2007
Posts: 1410
Location: psychiatric ward

PostPosted: Sat May 09, 2009 4:32 pm    Post subject: Re: Spawn....things Reply with quote

Since alot of players dont enter the game at the same time it also adds a bit of randomness. But I guess that would mostly apply to FFA games

Players with loads of maps or low memory can take 10 or so seconds to enter a game after it begins.
Back to top
View user's profile
kernel_panic
Übergod
Übergod


Joined: Aug 28, 2007
Posts: 751
Location: uk

PostPosted: Sun May 10, 2009 1:58 am    Post subject: Re: Spawn....things Reply with quote

"Marked as initial"? What's that? Can the mapper mark a spawn point as such? Clarify, please.

_________________
"Fuelling off topic babble since day 1."
Back to top
View user's profile
kernel_panic
Übergod
Übergod


Joined: Aug 28, 2007
Posts: 751
Location: uk

PostPosted: Mon May 11, 2009 9:51 pm    Post subject: Re: Spawn....things Reply with quote

Falkland, do you know whether the distance calculated to decide the next spawn point takes into account teleporters?

So, in the next diagram, if a player dies in room A, the next spawn point won't be in room E because of the portal?

Code::
| A | B | C | D | E |
   |               |
   |_ _ portal _ _ | 

_________________
"Fuelling off topic babble since day 1."
Back to top
View user's profile
pulchr
Elite Haxor!
Elite Haxor!


Joined: Oct 23, 2007
Posts: 167
Location: sweden

PostPosted: Mon May 11, 2009 10:06 pm    Post subject: Re: Spawn....things Reply with quote

kernel_panic wrote:
"Marked as initial"? What's that? Can the mapper mark a spawn point as such? Clarify, please.

yes, at least i think so. the description i had above was taken from the gtkradiant entities properties.

i guess that the spawns not marked with initial will be ignored when the match first begins unless there are too few initial spawns. but i haven't tested this.

_________________
barry white saved my life
Back to top
View user's profile Send e-mail
Display posts from previous:   
Post new topic   Reply to topic   Printer Friendly Page     Forum Index -> Tech & Support All times are GMT + 1 Hour
Go to page 1, 2, 3  Next
Page 1 of 3


Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum


Welcome Anonymous


Membership:
Latest: kontol
New Today: 0
New Yesterday: 0
Overall: 355

People Online:
Members: 0
Visitors: 20
Total: 20
Who Is Where:
 Visitors:
01: Maps
02: The golden pot
03: The golden pot
04: The golden pot
05: Rainbow Media
06: Rainbow Media
07: Maps
08: The golden pot
09: The golden pot
10: Maps
11: Maps
12: Home
13: Maps
14: The golden pot
15: Maps
16: Maps
17: Maps
18: Maps
19: The golden pot
20: The golden pot

Staff Online:

No staff members are online!

The Rainbow Networks website is hosted by JockeTF and Soder on furver.se.

The Rainbow Networks
Interactive software released under GNU GPL, Code Credits, Privacy Policy
Azul theme and related images designed by Jamin