NEW GAME MODE: LAST CAR STANDING

New map for this game mode: COMING SOON
zturtleman, check it out, please.
This commit is contained in:
insellium 2023-12-18 00:45:22 +05:00
parent d7c857b193
commit 227e401356
31 changed files with 400 additions and 149 deletions

View file

@ -7,16 +7,17 @@
seta r_smp "1"
// Gametype
// 1 = "Racing"
// 2 = "Racing Deatmatch"
// 1 = "Racing Deatmatch"
// 2 = "Racing"
// 3 = "Demolition Derby"
// 4 = "Deathmatch"
// 5 = "Team Deathmatch"
// 6 = "Team Racing"
// 7 = "Team Racing Deathmatch"
// 8 = "Capture the Flag"
// 9 = "Domination"
g_gametype 8
// 4 = "Last Car Standing"
// 5 = "Deathmatch"
// 6 = "Team Deathmatch"
// 7 = "Team Racing"
// 8 = "Team Racing Deathmatch"
// 9 = "Capture the Flag"
// 10 = "Domination"
g_gametype 9
// bot_enable - are Bots allowed ?
// 0 = off, 1 = on (Default: 0)

View file

@ -7,15 +7,16 @@
seta r_smp "1"
// Gametype
// 1 = "Racing"
// 2 = "Racing Deatmatch"
// 1 = "Racing Deatmatch"
// 2 = "Racing"
// 3 = "Demolition Derby"
// 4 = "Deathmatch"
// 5 = "Team Deathmatch"
// 6 = "Team Racing"
// 7 = "Team Racing Deathmatch"
// 8 = "Capture the Flag"
// 9 = "Domination"
// 4 = "Last Car Standing"
// 5 = "Deathmatch"
// 6 = "Team Deathmatch"
// 7 = "Team Racing"
// 8 = "Team Racing Deathmatch"
// 9 = "Capture the Flag"
// 10 = "Domination"
g_gametype 3
// bot_enable - are Bots allowed ?

View file

@ -7,16 +7,17 @@
seta r_smp "1"
// Gametype
// 1 = "Racing"
// 2 = "Racing Deatmatch"
// 1 = "Racing Deatmatch"
// 2 = "Racing"
// 3 = "Demolition Derby"
// 4 = "Deathmatch"
// 5 = "Team Deathmatch"
// 6 = "Team Racing"
// 7 = "Team Racing Deathmatch"
// 8 = "Capture the Flag"
// 9 = "Domination"
g_gametype 4
// 4 = "Last Car Standing"
// 5 = "Deathmatch"
// 6 = "Team Deathmatch"
// 7 = "Team Racing"
// 8 = "Team Racing Deathmatch"
// 9 = "Capture the Flag"
// 10 = "Domination"
g_gametype 5
// bot_enable - are Bots allowed ?
// 0 = off, 1 = on (Default: 0)

View file

@ -7,16 +7,17 @@
seta r_smp "1"
// Gametype
// 1 = "Racing"
// 2 = "Racing Deatmatch"
// 1 = "Racing Deatmatch"
// 2 = "Racing"
// 3 = "Demolition Derby"
// 4 = "Deathmatch"
// 5 = "Team Deathmatch"
// 6 = "Team Racing"
// 7 = "Team Racing Deathmatch"
// 8 = "Capture the Flag"
// 9 = "Domination"
g_gametype 9
// 4 = "Last Car Standing"
// 5 = "Deathmatch"
// 6 = "Team Deathmatch"
// 7 = "Team Racing"
// 8 = "Team Racing Deathmatch"
// 9 = "Capture the Flag"
// 10 = "Domination"
g_gametype 10
// bot_enable - are Bots allowed ?
// 0 = off, 1 = on (Default: 1)

113
baseq3r/q3r_lcs.cfg Normal file
View file

@ -0,0 +1,113 @@
// ************************************
// Q3Rally Server Config
// ************************************
// Multi CPU ?
// 0 = no, 1 = yes (Default: 0)
seta r_smp "1"
// Gametype
// 1 = "Racing Deatmatch"
// 2 = "Racing"
// 3 = "Demolition Derby"
// 4 = "Last Car Standing"
// 5 = "Deathmatch"
// 6 = "Team Deathmatch"
// 7 = "Team Racing"
// 8 = "Team Racing Deathmatch"
// 9 = "Capture the Flag"
// 10 = "Domination"
g_gametype 4
// bot_enable - are Bots allowed ?
// 0 = off, 1 = on (Default: 0)
bot_enable "1"
// Minimum Number of Players - Missing Players will be filled up with Bots
bot_minplayers "4"
// Capture Limit for Capture the Flag (0 = no Limit)
capturelimit 10
// Fraglimit (0 = no Limit)
fraglimit 30
// Timelimit [in minutes] (0 = no Limit)
timelimit 12
// Maximum Number of Clients (Observer are also counts as Clients)
sv_maxClients 16
// Servername
sv_hostname "Q3R Last Car Standing Server"
// "Message of the Day"
g_motd "Happy Smashing!"
// sv_allowdownload - Allows download from server of missing assets
// 0 = off, 1 = on (Default: 0)
sv_allowdownload "0"
sv_dlURL ""
// sv_floodProtect - Flood Protection
sv_floodProtect "1"
// Password protected Server
// 1 = password required, 0 = no password required (Default: 0)
sv_privateClients 0
// Password for password protected server
sv_privatePassword ""
// RCon Password for admin the server from console
rconPassword ""
// Pure Server for Cheat protection
// 1 = on, 0 = off (Default: 1)
sv_pure 0
// Maximum bandwith for Client
// possible values: 0...25000, 0 = no Limit (Default: 0)
sv_maxRate 25000
// Increase DL Rate of Addons
// possible values: 0...1000, (Default: 100)
sv_dlRate 1000
// Master-Server for registering the server
sv_master2 ""
sv_master3 ""
sv_master4 ""
sv_master5 ""
// Map Cycle
set d1 "map q3r_david5 ; set nextmap vstr d2"
set d2 "map q3r_demobowl ; set nextmap vstr d3"
set d3 "map q3r_dm02 ; set nextmap vstr d1"
vstr d1
// Weapon Respawn Time [in seconds] (Default: 5)
g_weaponrespawn 5
// allow Voting?
// Vote for:
// - map
// - map restart
// - kick
// - g_gametype
// 1 = on, 0 = off (Default: 1)
g_allowvote 1
// Quad Factor for Quad Damage (Default: 3)
g_quadfactor 3
// allow recording of demo files
// 1 = on, 0 = off (Default: 0)
g_syncronousClients 1
// Additional Infos
sets "Administrator" ""
sets "Email" ""
sets "URL" ""
sets "Location" ""
sets "CPU" ""

View file

@ -7,16 +7,17 @@
seta r_smp "1"
// Gametype
// 1 = "Racing"
// 2 = "Racing Deatmatch"
// 1 = "Racing Deatmatch"
// 2 = "Racing"
// 3 = "Demolition Derby"
// 4 = "Deathmatch"
// 5 = "Team Deathmatch"
// 6 = "Team Racing"
// 7 = "Team Racing Deathmatch"
// 8 = "Capture the Flag"
// 9 = "Domination"
g_gametype 0
// 4 = "Last Car Standing"
// 5 = "Deathmatch"
// 6 = "Team Deathmatch"
// 7 = "Team Racing"
// 8 = "Team Racing Deathmatch"
// 9 = "Capture the Flag"
// 10 = "Domination"
g_gametype 2
// bot_enable - are Bots allowed ?
// 0 = off, 1 = on (Default: 0)

View file

@ -7,15 +7,16 @@
seta r_smp "1"
// Gametype
// 1 = "Racing"
// 2 = "Racing Deatmatch"
// 1 = "Racing Deatmatch"
// 2 = "Racing"
// 3 = "Demolition Derby"
// 4 = "Deathmatch"
// 5 = "Team Deathmatch"
// 6 = "Team Racing"
// 7 = "Team Racing Deathmatch"
// 8 = "Capture the Flag"
// 9 = "Domination"
// 4 = "Last Car Standing"
// 5 = "Deathmatch"
// 6 = "Team Deathmatch"
// 7 = "Team Racing"
// 8 = "Team Racing Deathmatch"
// 9 = "Capture the Flag"
// 10 = "Domination"
g_gametype 1
// bot_enable - are Bots allowed ?

View file

@ -7,16 +7,17 @@
seta r_smp "1"
// Gametype
// 1 = "Racing"
// 2 = "Racing Deatmatch"
// 1 = "Racing Deatmatch"
// 2 = "Racing"
// 3 = "Demolition Derby"
// 4 = "Deathmatch"
// 5 = "Team Deathmatch"
// 6 = "Team Racing"
// 7 = "Team Racing Deathmatch"
// 8 = "Capture the Flag"
// 9 = "Domination"
g_gametype 5
// 4 = "Last Car Standing"
// 5 = "Deathmatch"
// 6 = "Team Deathmatch"
// 7 = "Team Racing"
// 8 = "Team Racing Deathmatch"
// 9 = "Capture the Flag"
// 10 = "Domination"
g_gametype 6
// bot_enable - are Bots allowed ?
// 0 = off, 1 = on (Default: 0)

View file

@ -7,16 +7,17 @@
seta r_smp "1"
// Gametype
// 1 = "Racing"
// 2 = "Racing Deatmatch"
// 1 = "Racing Deatmatch"
// 2 = "Racing"
// 3 = "Demolition Derby"
// 4 = "Deathmatch"
// 5 = "Team Deathmatch"
// 6 = "Team Racing"
// 7 = "Team Racing Deathmatch"
// 8 = "Capture the Flag"
// 9 = "Domination"
g_gametype 6
// 4 = "Last Car Standing"
// 5 = "Deathmatch"
// 6 = "Team Deathmatch"
// 7 = "Team Racing"
// 8 = "Team Racing Deathmatch"
// 9 = "Capture the Flag"
// 10 = "Domination"
g_gametype 7
// bot_enable - are Bots allowed ?
// 0 = off, 1 = on (Default: 0)

View file

@ -7,16 +7,17 @@
seta r_smp "1"
// Gametype
// 1 = "Racing"
// 2 = "Racing Deatmatch"
// 1 = "Racing Deatmatch"
// 2 = "Racing"
// 3 = "Demolition Derby"
// 4 = "Deathmatch"
// 5 = "Team Deathmatch"
// 6 = "Team Racing"
// 7 = "Team Racing Deathmatch"
// 8 = "Capture the Flag"
// 9 = "Domination"
g_gametype 7
// 4 = "Last Car Standing"
// 5 = "Deathmatch"
// 6 = "Team Deathmatch"
// 7 = "Team Racing"
// 8 = "Team Racing Deathmatch"
// 9 = "Capture the Flag"
// 10 = "Domination"
g_gametype 8
// bot_enable - are Bots allowed ?
// 0 = off, 1 = on (Default: 0)

View file

@ -290,6 +290,9 @@ void CG_DrawInformation( void ) {
case GT_DERBY:
s = "Demolition Derby";
break;
case GT_LCS:
s = "Last Car Standing";
break;
case GT_TEAM_RACING:
s = "Team Racing";
break;

View file

@ -982,7 +982,7 @@ void CG_PredictPlayerState( void ) {
// Q3Rally Code Start
if ((isRallyRace() || cgs.gametype == GT_DERBY) && !cg_entities[cg.snap->ps.clientNum].startRaceTime){
if ((isRallyRace() || cgs.gametype == GT_DERBY || cgs.gametype == GT_LCS) && !cg_entities[cg.snap->ps.clientNum].startRaceTime){
cg_pmove.cmd.buttons = BUTTON_HANDBRAKE;
cg_pmove.cmd.forwardmove = 0;

View file

@ -417,7 +417,7 @@ static float CG_DrawTimes( float y ) {
// Best Time
//
if ( cgs.gametype != GT_DERBY ){
if ( cgs.gametype != GT_DERBY || cgs.gametype != GT_LCS ){
time = getStringForTime( cent->bestLapTime );
Com_sprintf(s, sizeof(s), "B: %s", time);
@ -436,7 +436,7 @@ static float CG_DrawTimes( float y ) {
if (cgs.gametype != GT_DERBY){
if (cgs.gametype != GT_DERBY || cgs.gametype != GT_LCS ){
time = getStringForTime(lapTime);
Com_sprintf(s, sizeof(s), "L: %s", time);
@ -900,14 +900,14 @@ float CG_DrawUpperRightHUD( float y ) {
y = CG_DrawCurrentPosition( y );
y = CG_DrawCarAheadAndBehind( y );
}
else if (cgs.gametype == GT_DERBY)
else if (cgs.gametype == GT_DERBY || cgs.gametype == GT_LCS )
y = CG_DrawTimes( y );
// 0.5
// CG_DrawHUD_DerbyList(44, 130);
}
if (!isRallyNonDMRace() && cgs.gametype != GT_DERBY){
if (!isRallyNonDMRace() && cgs.gametype != GT_DERBY && cgs.gametype != GT_LCS){
y = CG_DrawScores( 636, y );
}

View file

@ -467,6 +467,7 @@ qboolean CG_DrawHUD( void ) {
break;
case GT_DERBY:
case GT_LCS:
// CG_DrawHUD_DerbyList(44, 130);
break;

View file

@ -140,6 +140,7 @@ typedef enum {
GT_RACING_DM, // racing with weapons
GT_SINGLE_PLAYER, // single player tournament
GT_DERBY, // demolition derby
GT_LCS, // last car standing
GT_DEATHMATCH, // random destruction
//-- team games go after this --

View file

@ -658,7 +658,7 @@ void ClientTimerActions( gentity_t *ent, int msec ) {
// count down health when over max
// STONELANCE
// if ( ent->health > client->ps.stats[STAT_MAX_HEALTH] ) {
if (((!isRallyRace() && g_gametype.integer != GT_DERBY)
if (((!isRallyRace() && g_gametype.integer != GT_DERBY && g_gametype.integer != GT_LCS)
|| level.startRaceTime) && ent->health > client->ps.stats[STAT_MAX_HEALTH]){
// END
ent->health--;
@ -668,7 +668,7 @@ void ClientTimerActions( gentity_t *ent, int msec ) {
// count down armor when over max
// STONELANCE
// if ( client->ps.stats[STAT_ARMOR] > client->ps.stats[STAT_MAX_HEALTH] ) {
if (((!isRallyRace() && g_gametype.integer != GT_DERBY) || level.startRaceTime)
if (((!isRallyRace() && g_gametype.integer != GT_DERBY && g_gametype.integer != GT_LCS) || level.startRaceTime)
&& client->ps.stats[STAT_ARMOR] > client->ps.stats[STAT_MAX_HEALTH]){
// END
client->ps.stats[STAT_ARMOR]--;
@ -1105,7 +1105,7 @@ void ClientThink_real( gentity_t *ent ) {
// check for car reset
G_ResetCar( ent );
if (!level.startRaceTime && (isRallyRace() || g_gametype.integer == GT_DERBY)){
if (!level.startRaceTime && (isRallyRace() || g_gametype.integer == GT_DERBY || g_gametype.integer == GT_LCS)){
if ( ucmd->buttons & ( BUTTON_ATTACK | BUTTON_USE_HOLDABLE ) && !ent->ready ) {
trap_SendServerCommand( ent->s.clientNum, "cp \"Waiting for other players...\n\"");
ent->ready = qtrue;
@ -1572,7 +1572,7 @@ void ClientThink_real( gentity_t *ent ) {
if ( g_forcerespawn.integer > 0 &&
( level.time - client->respawnTime ) > g_forcerespawn.integer * 1000 ) {
// STONELANCE
if (g_gametype.integer != GT_DERBY || !ent->client->finishRaceTime)
if (g_gametype.integer != GT_DERBY || g_gametype.integer != GT_LCS || !ent->client->finishRaceTime)
// END
ClientRespawn( ent );
return;
@ -1581,7 +1581,7 @@ void ClientThink_real( gentity_t *ent ) {
// pressing attack or use is the normal respawn method
if ( ucmd->buttons & ( BUTTON_ATTACK | BUTTON_USE_HOLDABLE ) ) {
// STONELANCE
if (g_gametype.integer != GT_DERBY || !ent->client->finishRaceTime)
if (g_gametype.integer != GT_DERBY || g_gametype.integer != GT_LCS || !ent->client->finishRaceTime)
// END
ClientRespawn( ent );
}

View file

@ -1237,7 +1237,7 @@ void ClientBegin( int clientNum ) {
// STONELANCE
// Make sure that clients that were not fully connected when the
// race was started will spawn as spectators
if ((isRallyRace() || g_gametype.integer == GT_DERBY) && level.startRaceTime &&
if ((isRallyRace() || g_gametype.integer == GT_DERBY || g_gametype.integer == GT_LCS) && level.startRaceTime &&
client->sess.sessionTeam != TEAM_SPECTATOR && !isRaceObserver( clientNum ) &&
!client->finishRaceTime ){

View file

@ -69,7 +69,7 @@ void DeathmatchScoreboardMessage( gentity_t *ent ) {
else
time = level.startRaceTime;
*/
if ( isRallyRace() || g_gametype.integer == GT_DERBY )
if ( isRallyRace() || g_gametype.integer == GT_DERBY || g_gametype.integer == GT_LCS )
time = level.startRaceTime;
else
time = cl->switchTeamTime;
@ -648,7 +648,7 @@ void SetTeam( gentity_t *ent, const char *s ) {
specState = SPECTATOR_FREE;
specWilling = qfalse;
}
else if ((isRallyRace() || g_gametype.integer == GT_DERBY) && level.startRaceTime){
else if ((isRallyRace() || g_gametype.integer == GT_DERBY || g_gametype.integer == GT_LCS) && level.startRaceTime){
trap_SendServerCommand( clientNum, "cp \"Cannot change teams\nduring a race.\n\"");
return; // dont allow any change except to spectator during a race.
}

View file

@ -530,7 +530,7 @@ void player_die( gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int
self->client->ps.pm_type = PM_DEAD;
// STONELANCE
if (g_gametype.integer == GT_DERBY && level.startRaceTime){
if (g_gametype.integer == GT_DERBY || g_gametype.integer == GT_LCS || level.startRaceTime){
self->client->finishRaceTime = level.time;
trap_SendServerCommand( -1, va("raceFinishTime %i %i", self->s.number, self->client->finishRaceTime) );
}

View file

@ -926,7 +926,7 @@ int QDECL SortRanks( const void *a, const void *b ) {
}
}
// sort by finish time if derby
else if (g_gametype.integer == GT_DERBY){
else if (g_gametype.integer == GT_DERBY && g_gametype.integer == GT_LCS ){
if ( ca->finishRaceTime && cb->finishRaceTime ) {
if (ca->finishRaceTime < cb->finishRaceTime)
return 1;
@ -1581,7 +1581,7 @@ qboolean ScoreIsTied( void ) {
// STONELANCE
// races or rallys can never be tied, otherwise then the level will not end
if ( g_gametype.integer == GT_DERBY || isRallyRace() )
if ( g_gametype.integer == GT_DERBY || g_gametype.integer == GT_LCS || isRallyRace() )
{
/*
a = level.clients[level.sortedClients[0]].finishRaceTime;
@ -1705,6 +1705,56 @@ void CheckExitRules( void ) {
return;
}
if (g_gametype.integer == GT_LCS && level.startRaceTime && !level.finishRaceTime) {
gclient_t *winner = NULL;
for ( i=0, count = 0 ; i< g_maxclients.integer ; i++ ) {
cl = level.clients + i;
if ( cl->pers.connected != CON_CONNECTED ) continue;
if ( cl->sess.sessionTeam == TEAM_SPECTATOR ) continue;
if ( isRaceObserver( cl->ps.clientNum ) ) continue;
if ( cl->ps.stats[STAT_HEALTH] <= 0 ) continue;
count++;
winner = cl;
}
if (winner && count == 1) {
level.winnerNumber = winner->ps.clientNum;
level.finishRaceTime = level.time;
trap_SendServerCommand( -1, va("print \"%s won the last car standing!\n\"", winner->pers.netname ));
trap_SendServerCommand( level.winnerNumber, "cp \"You won the last car standing!\n\"");
}
return;
}
if (g_gametype.integer == GT_LCS && level.startRaceTime && !level.finishRaceTime) {
gclient_t *winner = NULL;
for ( i=0, count = 0 ; i< g_maxclients.integer ; i++ ) {
cl = level.clients + i;
if ( cl->pers.connected != CON_CONNECTED ) continue;
if ( cl->sess.sessionTeam == TEAM_SPECTATOR ) continue;
if ( isRaceObserver( cl->ps.clientNum ) ) continue;
if ( cl->ps.stats[STAT_HEALTH] <= 0 ) continue;
count++;
winner = cl;
}
if (winner && count == 1) {
level.winnerNumber = winner->ps.clientNum;
level.finishRaceTime = level.time;
trap_SendServerCommand( -1, va("print \"%s won the last car standing!\n\"", winner->pers.netname ));
trap_SendServerCommand( level.winnerNumber, "cp \"You won the last car standing!\n\"");
}
return;
}
for ( i = 0, count = 0 ; i< g_maxclients.integer ; i++ ) {
@ -1741,11 +1791,19 @@ void CheckExitRules( void ) {
LogExit( "Derby finished." );
return;
}
if ( level.finishRaceTime && g_gametype.integer == GT_LCS
&& level.finishRaceTime + 10000 < level.time ){
g_entities[ level.winnerNumber ].client->finishRaceTime = level.time;
trap_SendServerCommand( -1, va("raceFinishTime %i %i", level.winnerNumber, level.time) );
LogExit( "Last car standing finished." );
return;
}
// END
// STONELANCE
// dont check frags or captures during a race or derby
if ( isRallyRace() || g_gametype.integer == GT_DERBY ){
if ( isRallyRace() || g_gametype.integer == GT_DERBY || g_gametype.integer == GT_LCS ){
return;
}
// END

View file

@ -436,7 +436,7 @@ void RallyStarter_Think( gentity_t *ent ){
Rally_Sound( ent, EV_GLOBAL_SOUND, CHAN_ANNOUNCER, G_SoundIndex("sound/rally/race/go.wav") );
if (g_gametype.integer != GT_DERBY)
if (g_gametype.integer != GT_DERBY || g_gametype.integer != GT_LCS)
ent->think = RallyRace_Think;
}
else if ( level.time > ent->pain_debounce_time + 4000 ){

View file

@ -342,6 +342,8 @@ starts "10"
Com_sprintf( string, sizeof(string), "{\nmap \"%s\"\nlongname \"%s\"\nfraglimit %i\ntype \"q3r_racing q3r_team_racing q3r_racing_dm q3r_team_racing_dm\"\nstarts \"%i\"\nlaps \"%i\"\nlength \"%.3f miles\"\ncheckpoints \"%i\"\nobserverspots \"%i\"\nweapons \"%i\"\npowerups \"%i\"\n}\n", Info_ValueForKey( serverinfo, "mapname" ), longname, level.numberOfLaps, numSpawnPoints, numLaps, trackLength, numCheckpoints, numObserverSpots, numWeapons, numPowerups);
else if ( g_gametype.integer == GT_DERBY )
Com_sprintf( string, sizeof(string), "{\nmap \"%s\"\nlongname \"%s\"\nfraglimit %i\ntype \"q3r_derby\"\nstarts \"%i\"\nobserverspots \"%i\"\nweapons \"%i\"\npowerups \"%i\"\n}\n", Info_ValueForKey( serverinfo, "mapname" ), longname, g_fraglimit.integer, numSpawnPoints, numObserverSpots, numWeapons, numPowerups);
else if ( g_gametype.integer == GT_LCS )
Com_sprintf( string, sizeof(string), "{\nmap \"%s\"\nlongname \"%s\"\nfraglimit %i\ntype \"q3r_lcs\"\nstarts \"%i\"\nobserverspots \"%i\"\nweapons \"%i\"\npowerups \"%i\"\n}\n", Info_ValueForKey( serverinfo, "mapname" ), longname, g_fraglimit.integer, numSpawnPoints, numObserverSpots, numWeapons, numPowerups);
else if ( g_gametype.integer == GT_CTF )
Com_sprintf( string, sizeof(string), "{\nmap \"%s\"\nlongname \"%s\"\nfraglimit %i\ntype \"q3r_ctf\"\nstarts \"%i\"\nobserverspots \"%i\"\nweapons \"%i\"\npowerups \"%i\"\n}\n", Info_ValueForKey( serverinfo, "mapname" ), longname, g_fraglimit.integer, numSpawnPoints, numObserverSpots, numWeapons, numPowerups);
else if ( g_gametype.integer == GT_DEATHMATCH || g_gametype.integer == GT_TEAM )

View file

@ -155,6 +155,18 @@ void G_InitSessionData( gclient_t *client, char *userinfo ) {
sess->sessionTeam = TEAM_FREE;
}
break;
case GT_LCS:
if ( g_maxGameClients.integer > 0 &&
level.numNonSpectatorClients >= g_maxGameClients.integer ) {
sess->sessionTeam = TEAM_SPECTATOR;
}
else if (level.startRaceTime){
sess->sessionTeam = TEAM_SPECTATOR;
} else {
sess->sessionTeam = TEAM_FREE;
}
break;
case GT_DEATHMATCH:
// END

View file

@ -480,7 +480,7 @@ void G_SpawnGEntityFromSpawnVars( void ) {
// UPDATE : change these
// STONELANCE
// static char *gametypeNames[] = {"ffa", "tournament", "single", "team", "ctf", "oneflag", "obelisk", "harvester"};
static char *gametypeNames[] = {"racing", "racing_dm", "single", "derby", "dm", "team", "team_racing", "team_racing_dm", "ctf"};
static char *gametypeNames[] = {"racing", "racing_dm", "single", "derby", "lcs", "dm", "team", "team_racing", "team_racing_dm", "ctf"};
// END
// get the next free entity
@ -771,7 +771,7 @@ void SP_worldspawn( void ) {
}
// STONELANCE
if (isRallyRace() || g_gametype.integer == GT_DERBY){
if (isRallyRace() || g_gametype.integer == GT_DERBY || g_gametype.integer == GT_LCS){
CreateRallyStarter();
}

View file

@ -66,6 +66,8 @@ extern vmCvar_t ui_team_racing_friendly;
extern vmCvar_t ui_derby_timelimit;
extern vmCvar_t ui_lcs_timelimit;
extern vmCvar_t ui_dm_fraglimit;
extern vmCvar_t ui_dm_timelimit;

View file

@ -121,6 +121,8 @@ vmCvar_t ui_team_racing_friendly;
vmCvar_t ui_derby_timelimit;
vmCvar_t ui_lcs_timelimit;
vmCvar_t ui_dm_fraglimit;
vmCvar_t ui_dm_timelimit;

View file

@ -126,13 +126,14 @@ MULTIPLAYER MENU (SERVER BROWSER)
#define GAMES_RACING 1
#define GAMES_RACING_DM 2
#define GAMES_DERBY 3
#define GAMES_DEATHMATCH 4
#define GAMES_TEAM_RACING 5
#define GAMES_TEAM_RACING_DM 6
#define GAMES_TEAMPLAY 7
#define GAMES_CTF 8
#define GAMES_DOMINATION 9
#define GAMES_NUM_GAMES 10
#define GAMES_LCS 4
#define GAMES_DEATHMATCH 5
#define GAMES_TEAM_RACING 6
#define GAMES_TEAM_RACING_DM 7
#define GAMES_TEAMPLAY 8
#define GAMES_CTF 9
#define GAMES_DOMINATION 10
#define GAMES_NUM_GAMES 11
// END
static const char *master_items[] = {
@ -159,6 +160,7 @@ static const char *servertype_items[] = {
"Racing",
"Racing Deathmatch",
"Demolition Derby",
"Last Car Standing",
"Deathmatch",
"Team Racing",
"Team Racing Deathmatch",
@ -198,6 +200,7 @@ static char* gamenames[] = {
"Race DM",
"SP ",
"Derby",
"LCS ",
"DM ",
"TRace",
"TRace DM",
@ -498,6 +501,10 @@ int ArenaServers_GametypeForGames(int games) {
gametype = GT_DERBY;
break;
case GAMES_LCS:
gametype = GT_LCS;
break;
case GAMES_TEAM_RACING:
gametype = GT_TEAM_RACING;
break;

View file

@ -135,6 +135,7 @@ static const char *gametype_items[] = {
"Racing",
"Racing Deathmatch",
"Demolition Derby",
"Last Car Standing",
"Deathmatch",
"Team Deathmatch",
"Team Racing",
@ -146,8 +147,8 @@ static const char *gametype_items[] = {
// STONELANCE
// gametype_items[gametype_remap2[s_serveroptions.gametype]]
static int gametype_remap[] = {GT_RACING, GT_RACING_DM, GT_DERBY, GT_DEATHMATCH, GT_TEAM, GT_TEAM_RACING, GT_TEAM_RACING_DM, GT_CTF, GT_DOMINATION};
static int gametype_remap2[] = {0, 1, 0, 2, 3, 4, 5, 6, 7, 8};
static int gametype_remap[] = {GT_RACING, GT_RACING_DM, GT_DERBY, GT_LCS, GT_DEATHMATCH, GT_TEAM, GT_TEAM_RACING, GT_TEAM_RACING_DM, GT_CTF, GT_DOMINATION};
static int gametype_remap2[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int allowLength[3];
int reversable;
@ -406,6 +407,11 @@ static int GametypeBits( char *string ) {
bits |= 1 << GT_DERBY;
continue;
}
if( Q_stricmp( token, "q3r_lcs" ) == 0 ) {
bits |= 1 << GT_LCS;
continue;
}
if( Q_stricmp( token, "q3r_dm" ) == 0 ) {
bits |= 1 << GT_DEATHMATCH;
@ -1292,6 +1298,10 @@ static void ServerOptions_Start( void ) {
case GT_DERBY:
trap_Cvar_SetValue( "ui_derby_timelimit", timelimit );
break;
case GT_LCS:
trap_Cvar_SetValue( "ui_lcs_timelimit", timelimit );
break;
case GT_DEATHMATCH:
trap_Cvar_SetValue( "ui_dm_fraglimit", fraglimit );
@ -1750,6 +1760,10 @@ static void ServerOptions_SetMenuItems( void ) {
case GT_DERBY:
Com_sprintf( s_serveroptions.timelimit.field.buffer, 4, "%i", (int)Com_Clamp( 0, 999, trap_Cvar_VariableValue( "ui_derby_timelimit" ) ) );
break;
case GT_LCS:
Com_sprintf( s_serveroptions.timelimit.field.buffer, 4, "%i", (int)Com_Clamp( 0, 999, trap_Cvar_VariableValue( "ui_lcs_timelimit" ) ) );
break;
case GT_DEATHMATCH:
Com_sprintf( s_serveroptions.fraglimit.field.buffer, 4, "%i", (int)Com_Clamp( 0, 999, trap_Cvar_VariableValue( "ui_dm_fraglimit" ) ) );
@ -2175,48 +2189,55 @@ if (s_serveroptions.gametype == GT_DOMINATION) {
}
// STONELANCE
if( s_serveroptions.gametype != GT_DERBY ) {
if( s_serveroptions.gametype == GT_DERBY || s_serveroptions.gametype == GT_LCS ) {
// Your code here
}
// END
if( s_serveroptions.gametype != GT_CTF && s_serveroptions.gametype != GT_DOMINATION ) {
Menu_AddItem( &s_serveroptions.menu, &s_serveroptions.fraglimit );
}
else {
Menu_AddItem( &s_serveroptions.menu, &s_serveroptions.flaglimit );
}
if( s_serveroptions.gametype != GT_CTF && s_serveroptions.gametype != GT_DOMINATION
&& s_serveroptions.gametype != GT_DERBY && s_serveroptions.gametype != GT_LCS ) {
Menu_AddItem( &s_serveroptions.menu, &s_serveroptions.fraglimit );
}
else if( s_serveroptions.gametype == GT_CTF || s_serveroptions.gametype == GT_DOMINATION ) {
Menu_AddItem( &s_serveroptions.menu, &s_serveroptions.flaglimit );
}
Menu_AddItem( &s_serveroptions.menu, &s_serveroptions.timelimit );
if( s_serveroptions.gametype >= GT_TEAM ) {
Menu_AddItem( &s_serveroptions.menu, &s_serveroptions.friendlyfire );
}
Menu_AddItem( &s_serveroptions.menu, &s_serveroptions.pure );
// STONELANCE
}
if( s_serveroptions.gametype == GT_RACING || s_serveroptions.gametype == GT_RACING_DM
|| s_serveroptions.gametype == GT_TEAM_RACING || s_serveroptions.gametype == GT_TEAM_RACING_DM) {
Menu_AddItem( &s_serveroptions.menu, &s_serveroptions.trackLength );
if ( reversable )
Menu_AddItem( &s_serveroptions.menu, &s_serveroptions.reversed );
}
// END
Menu_AddItem( &s_serveroptions.menu, &s_serveroptions.timelimit );
if( s_serveroptions.gametype >= GT_TEAM ) {
Menu_AddItem( &s_serveroptions.menu, &s_serveroptions.friendlyfire );
}
Menu_AddItem( &s_serveroptions.menu, &s_serveroptions.pure );
// STONELANCE
if( s_serveroptions.gametype == GT_RACING || s_serveroptions.gametype == GT_RACING_DM
|| s_serveroptions.gametype == GT_TEAM_RACING || s_serveroptions.gametype == GT_TEAM_RACING_DM) {
Menu_AddItem( &s_serveroptions.menu, &s_serveroptions.trackLength );
if ( reversable )
Menu_AddItem( &s_serveroptions.menu, &s_serveroptions.reversed );
}
// END
if( s_serveroptions.multiplayer ) {
Menu_AddItem( &s_serveroptions.menu, &s_serveroptions.dedicated );
}
if( s_serveroptions.multiplayer ) {
Menu_AddItem( &s_serveroptions.menu, &s_serveroptions.hostname );
}
if( s_serveroptions.multiplayer ) {
Menu_AddItem( &s_serveroptions.menu, &s_serveroptions.dedicated );
}
if( s_serveroptions.multiplayer ) {
Menu_AddItem( &s_serveroptions.menu, &s_serveroptions.hostname );
}
if (s_serveroptions.gametype == GT_DOMINATION) {
Menu_AddItem( &s_serveroptions.menu, &s_serveroptions.dominationSpawnStyle );
Menu_AddItem( &s_serveroptions.menu, &s_serveroptions.sigillocator );
}
}
Menu_AddItem( &s_serveroptions.menu, &s_serveroptions.back );
Menu_AddItem( &s_serveroptions.menu, &s_serveroptions.go );
Menu_AddItem( &s_serveroptions.menu, &s_serveroptions.back );
Menu_AddItem( &s_serveroptions.menu, &s_serveroptions.go );
ServerOptions_SetMenuItems();
ServerOptions_SetMenuItems();
}
/*

View file

@ -111,12 +111,13 @@ MULTIPLAYER MENU (SERVER BROWSER)
#define GAMES_RACING 1
#define GAMES_RACING_DM 2
#define GAMES_DERBY 3
#define GAMES_DEATHMATCH 4
#define GAMES_TEAM_RACING 5
#define GAMES_TEAM_RACING_DM 6
#define GAMES_TEAMPLAY 7
#define GAMES_CTF 8
#define GAMES_DOMINATION 9
#define GAMES_LCS 4
#define GAMES_DEATHMATCH 5
#define GAMES_TEAM_RACING 6
#define GAMES_TEAM_RACING_DM 7
#define GAMES_TEAMPLAY 8
#define GAMES_CTF 9
#define GAMES_DOMINATION 10
// END
static const char *master_items[] = {
@ -139,6 +140,7 @@ static const char *servertype_items[] = {
"Racing",
"Racing Deathmatch",
"Demolition Derby",
"Last Car Standing",
"Deathmatch",
"Team Racing",
"Team Racing Deathmatch",
@ -177,6 +179,7 @@ static char* gamenames[] = {
"Race",
"Race DM",
"Derby",
"LCS",
"DM ",
"TRace",
"TRace DM",
@ -579,6 +582,12 @@ static void ArenaServers_UpdateMenu( void ) {
continue;
}
break;
case GAMES_LCS:
if( servernodeptr->gametype != GT_LCS ) {
continue;
}
break;
case GAMES_TEAM_RACING:
if( servernodeptr->gametype != GT_TEAM_RACING ) {
@ -1174,6 +1183,10 @@ static void ArenaServers_StartRefresh( void )
case GAMES_DERBY:
strcpy( myargs, " derby" );
break;
case GAMES_LCS:
strcpy( myargs, " lcs" );
break;
case GAMES_TEAM_RACING:
strcpy( myargs, " team_racing" );

View file

@ -97,14 +97,15 @@ static startserver_t s_startserver;
static const char *gametype_items[] = {
"Free For All",
"Team Deathmatch",
"Tournament",
"Demolition Derby",
"Last Car Standing",
"Capture the Flag",
0
};
// STONELANCE - removed gametype
// static int gametype_remap[] = {GT_FFA, GT_TEAM, GT_TOURNAMENT, GT_CTF};
static int gametype_remap[] = {GT_RACING, GT_TEAM, GT_DERBY, GT_CTF};
static int gametype_remap[] = {GT_RACING, GT_TEAM, GT_DERBY, GT_LCS, GT_CTF};
// END
static int gametype_remap2[] = {0, 2, 0, 1, 3};

View file

@ -215,6 +215,12 @@ void TeamMain_MenuInit( void ) {
s_teammain.joingreen.generic.flags |= QMF_GRAYED;
s_teammain.joinyellow.generic.flags |= QMF_GRAYED;
break;
case GT_LCS:
s_teammain.joinred.generic.flags |= QMF_GRAYED;
s_teammain.joinblue.generic.flags |= QMF_GRAYED;
s_teammain.joingreen.generic.flags |= QMF_GRAYED;
s_teammain.joinyellow.generic.flags |= QMF_GRAYED;
break;
// END
default:
case GT_TEAM: