re-randomizing spawn times for SKs


(Demolama) #1

I was working on this months ago when I was working on lamapro but I never finished it because I abandoned my mod after a year and a half of work… however I went over the code today and finished it up so here you go.

re-randomize spawn times after x amount of people are killed in 4 seconds of the spawn shield being up.

all I ask is if you use it… give me credit for it :slight_smile:

g_match.c G_loadMatchGame

// derek add new spawn function to replace these lines
	G_NewSpawn();
	// Set version info for demoplayback compatibility
//	trap_SetConfigstring(CS_OSPVERSION, va("%s", G_BASEVERSION));	// Add more tokens as needed

	// Set up the random reinforcement seeds for both teams and send to clients
/*	dwBlueOffset = rand() % MAX_REINFSEEDS;
	dwRedOffset = rand() % MAX_REINFSEEDS;
	strcpy(strReinfSeeds, va("%d %d", (dwBlueOffset << REINF_BLUEDELT) + (rand() % (1 << REINF_BLUEDELT)),
									  (dwRedOffset << REINF_REDDELT)  + (rand() % (1 << REINF_REDDELT))));

	for(i=0; i<MAX_REINFSEEDS; i++) {
		aRandomValues[i] = (rand() % REINF_RANGE) * aReinfSeeds[i];
		strcat(strReinfSeeds, va(" %d", aRandomValues[i]));
	}

	level.dwBlueReinfOffset = 1000 * aRandomValues[dwBlueOffset] / aReinfSeeds[dwBlueOffset];
	level.dwRedReinfOffset  = 1000 * aRandomValues[dwRedOffset] / aReinfSeeds[dwRedOffset];

	trap_SetConfigstring(CS_REINFSEEDS, strReinfSeeds);
	*/

g_combat.c player_die

		G_LogKill(	attacker,	weap );

		//derek add random spawn adjuster for spawnkilling	
	if (self->client->respawnTime  >= (level.timeCurrent - self->client->ps.powerups[PW_INVULNERABLE] - 4000)){
		kill++;

	}else{
		kill = 0;

	}

	if (d_randomautospawns.integer > 0 && kill >=  d_randomautospawns.integer){
		if (level.warmupTime <= 0 && g_gamestate.integer == GS_PLAYING){
           G_NewTeamSpawn(self->client->sess.sessionTeam);
		   			
		}
	
	}
		
		if( g_gamestate.integer == GS_PLAYING ) {

then just add 2 new functions NewSpawn and NewTeamSpawn along with this struct.


typedef struct {
	int dwBlueOffset;
	int dwRedOffset;
	int aRandomValues[2][MAX_REINFSEEDS];
	int dwBlueReinfOffset;
	int dwRedReinfOffset;
} spawn_t;

spawn_t Teamspawn;

		
void G_NewSpawn(void)
{
	unsigned int i, dwBlueOffset, dwRedOffset;
	unsigned int aRandomValues[MAX_REINFSEEDS];
	char strReinfSeeds[MAX_STRING_CHARS];


	// Set up the random reinforcement seeds for both teams and send to clients
	Teamspawn.dwBlueOffset = dwBlueOffset = rand() % MAX_REINFSEEDS;
	Teamspawn.dwRedOffset = dwRedOffset = rand() % MAX_REINFSEEDS;


	Teamspawn.dwBlueReinfOffset = (dwBlueOffset << REINF_BLUEDELT) + (rand() % (1 << REINF_BLUEDELT));
	Teamspawn.dwRedReinfOffset =  (dwRedOffset << REINF_REDDELT)  + (rand() % (1 << REINF_REDDELT));
	strcpy(strReinfSeeds, va("%d %d", Teamspawn.dwBlueReinfOffset, Teamspawn.dwRedReinfOffset));
	

	for(i=0; i<MAX_REINFSEEDS; i++) {
		Teamspawn.aRandomValues[0][i] = Teamspawn.aRandomValues[1][i] = aRandomValues[i] = (rand() % REINF_RANGE) * aReinfSeeds[i];
		strcat(strReinfSeeds, va(" %d", aRandomValues[i]));
		
        	}

	level.dwBlueReinfOffset = 1000 * aRandomValues[dwBlueOffset] / aReinfSeeds[dwBlueOffset];
	level.dwRedReinfOffset  = 1000 * aRandomValues[dwRedOffset] / aReinfSeeds[dwRedOffset];
	

	trap_SetConfigstring(CS_REINFSEEDS, strReinfSeeds);
}


void G_NewTeamSpawn(int team)
{
	unsigned int i, dwBlueOffset, dwRedOffset;
	unsigned int aRandomValues[MAX_REINFSEEDS];
	char strReinfSeeds[MAX_STRING_CHARS];
	int red, blue;

		if (team == TEAM_ALLIES){
	// Set up the random reinforcement seeds for both teams and send to clients
		Teamspawn.dwBlueOffset = dwBlueOffset = rand() % MAX_REINFSEEDS;
		}else if (team == TEAM_AXIS){
		Teamspawn.dwRedOffset = dwRedOffset = rand() % MAX_REINFSEEDS;
		}
	

		// derek dont allow use of same position in the array... will screw up the array
			while (Teamspawn.dwBlueOffset == Teamspawn.dwRedOffset){
	
				if (team == TEAM_ALLIES){
				// Set up the random reinforcement seeds for both teams and send to clients
					Teamspawn.dwBlueOffset = dwBlueOffset = rand() % MAX_REINFSEEDS;
				}else if (team == TEAM_AXIS){
					Teamspawn.dwRedOffset = dwRedOffset = rand() % MAX_REINFSEEDS;
	
				}
              		
			}
	
		if (team == TEAM_ALLIES){
			Teamspawn.dwBlueReinfOffset = (dwBlueOffset << REINF_BLUEDELT) + (rand() % (1 << REINF_BLUEDELT));
		}else if (team == TEAM_AXIS){
			Teamspawn.dwRedReinfOffset =  (dwRedOffset << REINF_REDDELT)  + (rand() % (1 << REINF_REDDELT));
		}
		strcpy(strReinfSeeds, va("%d %d", Teamspawn.dwBlueReinfOffset, Teamspawn.dwRedReinfOffset));


		for(i=0; i<MAX_REINFSEEDS; i++) {
			aRandomValues[i] = (rand() % REINF_RANGE) * aReinfSeeds[i];
		
				if (team == TEAM_AXIS){
					if(i == Teamspawn.dwBlueOffset){
						aRandomValues[i] = Teamspawn.aRandomValues[1][Teamspawn.dwBlueOffset];
					}else{
						Teamspawn.aRandomValues[0][i] = aRandomValues[i];
					}
				}else if (team == TEAM_ALLIES){
					if(i == Teamspawn.dwRedOffset){
						aRandomValues[i]= Teamspawn.aRandomValues[0][Teamspawn.dwRedOffset];
					}else{
						Teamspawn.aRandomValues[1][i] = aRandomValues[i];
				}

			}
		strcat(strReinfSeeds, va(" %d", aRandomValues[i]));
	}

		if (team == TEAM_ALLIES){
			level.dwBlueReinfOffset = 1000 * aRandomValues[dwBlueOffset] / aReinfSeeds[dwBlueOffset];
	
		}else if (team == TEAM_AXIS){
			level.dwRedReinfOffset  = 1000 * aRandomValues[dwRedOffset] / aReinfSeeds[dwRedOffset];
		}

		trap_SetConfigstring(CS_REINFSEEDS, strReinfSeeds);
}


(kamikazee) #2

“Lamapro, it kicks the spawntimers’ ass!”

This may come in handy some time.