mirror of
https://github.com/Q3Rally-Team/q3rally.git
synced 2025-02-16 17:21:04 +00:00
New gametype - Domination
*** still needs some fixes ***
This commit is contained in:
parent
c4133be8b7
commit
e8d2946d6c
19 changed files with 702 additions and 40 deletions
|
@ -111,7 +111,7 @@ endif
|
||||||
export CROSS_COMPILING
|
export CROSS_COMPILING
|
||||||
|
|
||||||
ifndef VERSION
|
ifndef VERSION
|
||||||
VERSION=v0.0.1.5
|
VERSION=v0.0.2.1
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifndef CLIENTBIN
|
ifndef CLIENTBIN
|
||||||
|
|
|
@ -529,6 +529,33 @@ void CG_DrawTeamBackground( int x, int y, int w, int h, float alpha, int team )
|
||||||
trap_R_SetColor( NULL );
|
trap_R_SetColor( NULL );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
=======================
|
||||||
|
CG_DrawSigilHUD
|
||||||
|
=======================
|
||||||
|
*/
|
||||||
|
void CG_DrawSigilHUD( void ) {
|
||||||
|
int i, x=480, y=0;
|
||||||
|
for (i=0; i<MAX_SIGILS; i++) {
|
||||||
|
switch ( cgs.sigil[i] )
|
||||||
|
{
|
||||||
|
|
||||||
|
case SIGIL_ISWHITE:
|
||||||
|
CG_DrawPic( x, y, 18, 18, cgs.media.sigilShader );
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SIGIL_ISRED:
|
||||||
|
CG_DrawPic( x, y, 18, 18, cgs.media.redFlagShader[0] );
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SIGIL_ISBLUE:
|
||||||
|
CG_DrawPic( x, y, 18, 18, cgs.media.blueFlagShader[0] );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
x+= 19;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
================
|
================
|
||||||
CG_DrawStatusBar
|
CG_DrawStatusBar
|
||||||
|
@ -691,6 +718,10 @@ static void CG_DrawRallyStatusBar( void ) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// draw the dtf sigils
|
||||||
|
|
||||||
|
// if ( cgs.gametype == GT_DOMINATION )
|
||||||
|
// CG_DrawSigilHUD();
|
||||||
|
|
||||||
cent = &cg_entities[cg.snap->ps.clientNum];
|
cent = &cg_entities[cg.snap->ps.clientNum];
|
||||||
ps = &cg.snap->ps;
|
ps = &cg.snap->ps;
|
||||||
|
@ -3112,6 +3143,93 @@ static void CG_DrawWarmup( void ) {
|
||||||
*/
|
*/
|
||||||
// Q3Rally Code END
|
// Q3Rally Code END
|
||||||
|
|
||||||
|
//=======================================
|
||||||
|
//CG_DrawSigilLocationInfo
|
||||||
|
//=======================================
|
||||||
|
void CG_DrawSigilLocationInfo( vec3_t origin, vec3_t target, qhandle_t shader, vec4_t color )
|
||||||
|
{
|
||||||
|
int x = 320, y = 240;
|
||||||
|
int w = 320, h = 240;
|
||||||
|
float angle, distance;
|
||||||
|
vec3_t temp, angles;
|
||||||
|
VectorSubtract(origin, target, temp);
|
||||||
|
distance=VectorLength(temp);
|
||||||
|
VectorNormalize(temp);
|
||||||
|
vectoangles(temp,angles);
|
||||||
|
|
||||||
|
angles[YAW]=AngleSubtract(cg.snap->ps.viewangles[YAW],angles[YAW]);
|
||||||
|
angle=(angles[YAW] + 180.0f)/360.0f;
|
||||||
|
angle -=0.25;
|
||||||
|
angle *= (2*M_PI);
|
||||||
|
w=sqrt((w*w)+(h*h));
|
||||||
|
x +=cos(angle)*w;
|
||||||
|
y +=sin(angle)*w;
|
||||||
|
|
||||||
|
if (x<15)
|
||||||
|
x=15;
|
||||||
|
else {
|
||||||
|
|
||||||
|
if (x>605)
|
||||||
|
x=605;
|
||||||
|
}
|
||||||
|
if (y<20)
|
||||||
|
y=20;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (y>440)
|
||||||
|
y=440;
|
||||||
|
}
|
||||||
|
CG_DrawPic( x, y, 20, 20, shader );
|
||||||
|
CG_DrawStringExt( x-50, y+20, va("%10.2f",distance/100.0), color, qtrue, qfalse, TINYCHAR_WIDTH, TINYCHAR_HEIGHT, 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
//=======================================
|
||||||
|
//CG_DrawSigilLocations
|
||||||
|
//=======================================
|
||||||
|
static void CG_DrawSigilLocations( void ) {
|
||||||
|
snapshot_t *snap;
|
||||||
|
int i;
|
||||||
|
vec3_t origin, end;
|
||||||
|
int redSigil, blueSigil, whiteSigil;
|
||||||
|
|
||||||
|
if ( cgs.gametype != GT_DOMINATION)
|
||||||
|
return;
|
||||||
|
if ( cg.snap->ps.persistant[PERS_TEAM] == TEAM_SPECTATOR )
|
||||||
|
return;
|
||||||
|
|
||||||
|
if ( cg.nextSnap && (!cg.nextFrameTeleport && !cg.thisFrameTeleport))
|
||||||
|
|
||||||
|
snap = cg.nextSnap;
|
||||||
|
else
|
||||||
|
snap = cg.snap;
|
||||||
|
|
||||||
|
VectorCopy(cg.snap->ps.origin,origin);
|
||||||
|
redSigil = ITEM_INDEX( BG_FindItemForPowerup( PW_SIGILRED ) );
|
||||||
|
blueSigil = ITEM_INDEX( BG_FindItemForPowerup( PW_SIGILBLUE ) );
|
||||||
|
whiteSigil = ITEM_INDEX( BG_FindItemForPowerup( PW_SIGILWHITE ) );
|
||||||
|
|
||||||
|
for ( i = 0; i < snap->numEntities; i++ )
|
||||||
|
{
|
||||||
|
|
||||||
|
centity_t *target = &cg_entities[snap->entities[i].number];
|
||||||
|
if (target->currentState.eType != ET_ITEM)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if ( target->currentState.modelindex != redSigil && target->currentState.modelindex != blueSigil && target->currentState.modelindex != whiteSigil )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
VectorCopy(target->lerpOrigin,end);
|
||||||
|
|
||||||
|
if (target->currentState.modelindex == redSigil)
|
||||||
|
CG_DrawSigilLocationInfo(origin, end, cgs.media.redFlagShader[0], colorRed);
|
||||||
|
|
||||||
|
else if (target->currentState.modelindex == blueSigil)
|
||||||
|
CG_DrawSigilLocationInfo(origin, end, cgs.media.blueFlagShader[0], colorBlue);
|
||||||
|
|
||||||
|
else if (target->currentState.modelindex == whiteSigil)
|
||||||
|
CG_DrawSigilLocationInfo(origin, end, cgs.media.sigilShader, colorWhite);
|
||||||
|
}
|
||||||
|
}
|
||||||
//==================================================================================
|
//==================================================================================
|
||||||
#ifdef MISSIONPACK
|
#ifdef MISSIONPACK
|
||||||
/*
|
/*
|
||||||
|
@ -3222,6 +3340,9 @@ static void CG_Draw2D(stereoFrame_t stereoFrame)
|
||||||
|
|
||||||
CG_DrawLagometer();
|
CG_DrawLagometer();
|
||||||
|
|
||||||
|
if (cg_sigilLocator.integer == 1)
|
||||||
|
CG_DrawSigilLocations();
|
||||||
|
|
||||||
#ifdef MISSIONPACK
|
#ifdef MISSIONPACK
|
||||||
if (!cg_paused.integer) {
|
if (!cg_paused.integer) {
|
||||||
CG_DrawUpperRight(stereoFrame);
|
CG_DrawUpperRight(stereoFrame);
|
||||||
|
|
|
@ -894,7 +894,7 @@ void CG_EntityEvent( centity_t *cent, vec3_t position ) {
|
||||||
|
|
||||||
// powerups and team items will have a separate global sound, this one
|
// powerups and team items will have a separate global sound, this one
|
||||||
// will be played at prediction time
|
// will be played at prediction time
|
||||||
if ( item->giType == IT_POWERUP || item->giType == IT_TEAM ) {
|
if ( item->giType == IT_POWERUP || item->giType == IT_TEAM || item->giType == IT_SIGIL ) {
|
||||||
trap_S_StartSound (NULL, es->number, CHAN_AUTO, cgs.media.n_healthSound );
|
trap_S_StartSound (NULL, es->number, CHAN_AUTO, cgs.media.n_healthSound );
|
||||||
} else if (item->giType == IT_PERSISTANT_POWERUP) {
|
} else if (item->giType == IT_PERSISTANT_POWERUP) {
|
||||||
#ifdef MISSIONPACK
|
#ifdef MISSIONPACK
|
||||||
|
|
|
@ -263,6 +263,10 @@ void CG_DrawInformation( void ) {
|
||||||
case GT_CTF:
|
case GT_CTF:
|
||||||
s = "Capture The Flag";
|
s = "Capture The Flag";
|
||||||
break;
|
break;
|
||||||
|
// Q3Rally Code Start
|
||||||
|
case GT_DOMINATION:
|
||||||
|
s = "Domination";
|
||||||
|
break;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
#ifdef MISSIONPACK
|
#ifdef MISSIONPACK
|
||||||
|
|
|
@ -838,7 +838,9 @@ typedef struct {
|
||||||
qhandle_t redFlagShader[3];
|
qhandle_t redFlagShader[3];
|
||||||
qhandle_t blueFlagShader[3];
|
qhandle_t blueFlagShader[3];
|
||||||
qhandle_t flagShader[4];
|
qhandle_t flagShader[4];
|
||||||
|
// Q3Rally Code Start
|
||||||
|
qhandle_t sigilShader;
|
||||||
|
// Q3Rally Code END
|
||||||
qhandle_t flagPoleModel;
|
qhandle_t flagPoleModel;
|
||||||
qhandle_t flagFlapModel;
|
qhandle_t flagFlapModel;
|
||||||
|
|
||||||
|
@ -1342,7 +1344,7 @@ typedef struct {
|
||||||
// Q3Rally Code END
|
// Q3Rally Code END
|
||||||
int redflag, blueflag; // flag status from configstrings
|
int redflag, blueflag; // flag status from configstrings
|
||||||
int flagStatus;
|
int flagStatus;
|
||||||
|
int sigil[MAX_SIGILS];
|
||||||
qboolean newHud;
|
qboolean newHud;
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -1496,6 +1498,7 @@ extern vmCvar_t cg_oldRail;
|
||||||
extern vmCvar_t cg_oldRocket;
|
extern vmCvar_t cg_oldRocket;
|
||||||
extern vmCvar_t cg_oldPlasma;
|
extern vmCvar_t cg_oldPlasma;
|
||||||
extern vmCvar_t cg_trueLightning;
|
extern vmCvar_t cg_trueLightning;
|
||||||
|
extern vmCvar_t cg_sigilLocator;
|
||||||
#ifdef MISSIONPACK
|
#ifdef MISSIONPACK
|
||||||
extern vmCvar_t cg_redTeamName;
|
extern vmCvar_t cg_redTeamName;
|
||||||
extern vmCvar_t cg_blueTeamName;
|
extern vmCvar_t cg_blueTeamName;
|
||||||
|
@ -2071,7 +2074,17 @@ void trap_S_UpdateEntityPosition( int entityNum, const vec3_t origin );
|
||||||
// respatialize recalculates the volumes of sound as they should be heard by the
|
// respatialize recalculates the volumes of sound as they should be heard by the
|
||||||
// given entityNum and position
|
// given entityNum and position
|
||||||
void trap_S_Respatialize( int entityNum, const vec3_t origin, vec3_t axis[3], int inwater );
|
void trap_S_Respatialize( int entityNum, const vec3_t origin, vec3_t axis[3], int inwater );
|
||||||
|
|
||||||
sfxHandle_t trap_S_RegisterSound( const char *sample, qboolean compressed ); // returns buzz if not found
|
sfxHandle_t trap_S_RegisterSound( const char *sample, qboolean compressed ); // returns buzz if not found
|
||||||
|
|
||||||
|
|
||||||
|
/* Temp Debug Code
|
||||||
|
|
||||||
|
#define trap_S_RegisterSound( sample, compressed ) trap_S_RegisterSoundDebug( sample, compressed, __FILE__, __LINE__ )
|
||||||
|
sfxHandle_t trap_S_RegisterSoundDebug( const char *sample, qboolean compressed, const char *file, int line );
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
void trap_S_StartBackgroundTrack( const char *intro, const char *loop ); // empty name stops music
|
void trap_S_StartBackgroundTrack( const char *intro, const char *loop ); // empty name stops music
|
||||||
void trap_S_StopBackgroundTrack( void );
|
void trap_S_StopBackgroundTrack( void );
|
||||||
|
|
||||||
|
|
|
@ -222,7 +222,7 @@ vmCvar_t cg_oldRail;
|
||||||
vmCvar_t cg_oldRocket;
|
vmCvar_t cg_oldRocket;
|
||||||
vmCvar_t cg_oldPlasma;
|
vmCvar_t cg_oldPlasma;
|
||||||
vmCvar_t cg_trueLightning;
|
vmCvar_t cg_trueLightning;
|
||||||
|
vmCvar_t cg_sigilLocator;
|
||||||
#ifdef MISSIONPACK
|
#ifdef MISSIONPACK
|
||||||
vmCvar_t cg_redTeamName;
|
vmCvar_t cg_redTeamName;
|
||||||
vmCvar_t cg_blueTeamName;
|
vmCvar_t cg_blueTeamName;
|
||||||
|
@ -430,7 +430,8 @@ static cvarTable_t cvarTable[] = {
|
||||||
{ &cg_oldRail, "cg_oldRail", "1", CVAR_ARCHIVE},
|
{ &cg_oldRail, "cg_oldRail", "1", CVAR_ARCHIVE},
|
||||||
{ &cg_oldRocket, "cg_oldRocket", "1", CVAR_ARCHIVE},
|
{ &cg_oldRocket, "cg_oldRocket", "1", CVAR_ARCHIVE},
|
||||||
{ &cg_oldPlasma, "cg_oldPlasma", "1", CVAR_ARCHIVE},
|
{ &cg_oldPlasma, "cg_oldPlasma", "1", CVAR_ARCHIVE},
|
||||||
{ &cg_trueLightning, "cg_trueLightning", "0.0", CVAR_ARCHIVE}
|
{ &cg_trueLightning, "cg_trueLightning", "0.0", CVAR_ARCHIVE},
|
||||||
|
{ &cg_sigilLocator, "cg_sigilLocator", "1", CVAR_ARCHIVE}
|
||||||
// { &cg_pmove_fixed, "cg_pmove_fixed", "0", CVAR_USERINFO | CVAR_ARCHIVE }
|
// { &cg_pmove_fixed, "cg_pmove_fixed", "0", CVAR_USERINFO | CVAR_ARCHIVE }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -728,7 +729,7 @@ static void CG_RegisterSounds( void ) {
|
||||||
cgs.media.takenYourTeamSound = trap_S_RegisterSound( "sound/teamplay/flagtaken_yourteam.wav", qtrue );
|
cgs.media.takenYourTeamSound = trap_S_RegisterSound( "sound/teamplay/flagtaken_yourteam.wav", qtrue );
|
||||||
cgs.media.takenOpponentSound = trap_S_RegisterSound( "sound/teamplay/flagtaken_opponent.wav", qtrue );
|
cgs.media.takenOpponentSound = trap_S_RegisterSound( "sound/teamplay/flagtaken_opponent.wav", qtrue );
|
||||||
|
|
||||||
if ( cgs.gametype == GT_CTF || cg_buildScript.integer ) {
|
if ( cgs.gametype == GT_CTF || cgs.gametype == GT_DOMINATION || cg_buildScript.integer ) {
|
||||||
cgs.media.redFlagReturnedSound = trap_S_RegisterSound( "sound/teamplay/voc_red_returned.wav", qtrue );
|
cgs.media.redFlagReturnedSound = trap_S_RegisterSound( "sound/teamplay/voc_red_returned.wav", qtrue );
|
||||||
cgs.media.blueFlagReturnedSound = trap_S_RegisterSound( "sound/teamplay/voc_blue_returned.wav", qtrue );
|
cgs.media.blueFlagReturnedSound = trap_S_RegisterSound( "sound/teamplay/voc_blue_returned.wav", qtrue );
|
||||||
cgs.media.enemyTookYourFlagSound = trap_S_RegisterSound( "sound/teamplay/voc_enemy_flag.wav", qtrue );
|
cgs.media.enemyTookYourFlagSound = trap_S_RegisterSound( "sound/teamplay/voc_enemy_flag.wav", qtrue );
|
||||||
|
@ -1085,7 +1086,7 @@ static void CG_RegisterGraphics( void ) {
|
||||||
|
|
||||||
if ( cgs.gametype == GT_CTF || cgs.gametype == GT_1FCTF || cgs.gametype == GT_HARVESTER || cg_buildScript.integer ) {
|
if ( cgs.gametype == GT_CTF || cgs.gametype == GT_1FCTF || cgs.gametype == GT_HARVESTER || cg_buildScript.integer ) {
|
||||||
#else
|
#else
|
||||||
if ( cgs.gametype == GT_CTF || cg_buildScript.integer ) {
|
if ( cgs.gametype == GT_CTF || cgs.gametype == GT_DOMINATION || cg_buildScript.integer ) {
|
||||||
#endif
|
#endif
|
||||||
cgs.media.redFlagModel = trap_R_RegisterModel( "models/flags/r_flag.md3" );
|
cgs.media.redFlagModel = trap_R_RegisterModel( "models/flags/r_flag.md3" );
|
||||||
cgs.media.blueFlagModel = trap_R_RegisterModel( "models/flags/b_flag.md3" );
|
cgs.media.blueFlagModel = trap_R_RegisterModel( "models/flags/b_flag.md3" );
|
||||||
|
@ -1095,6 +1096,10 @@ static void CG_RegisterGraphics( void ) {
|
||||||
cgs.media.blueFlagShader[0] = trap_R_RegisterShaderNoMip( "icons/iconf_blu1" );
|
cgs.media.blueFlagShader[0] = trap_R_RegisterShaderNoMip( "icons/iconf_blu1" );
|
||||||
cgs.media.blueFlagShader[1] = trap_R_RegisterShaderNoMip( "icons/iconf_blu2" );
|
cgs.media.blueFlagShader[1] = trap_R_RegisterShaderNoMip( "icons/iconf_blu2" );
|
||||||
cgs.media.blueFlagShader[2] = trap_R_RegisterShaderNoMip( "icons/iconf_blu3" );
|
cgs.media.blueFlagShader[2] = trap_R_RegisterShaderNoMip( "icons/iconf_blu3" );
|
||||||
|
// Q3Rally Code Start
|
||||||
|
cgs.media.sigilShader = trap_R_RegisterShaderNoMip( "icons/iconf_neutral1" );
|
||||||
|
// Q3Rally Code END
|
||||||
|
|
||||||
#ifdef MISSIONPACK
|
#ifdef MISSIONPACK
|
||||||
cgs.media.flagPoleModel = trap_R_RegisterModel( "models/flag2/flagpole.md3" );
|
cgs.media.flagPoleModel = trap_R_RegisterModel( "models/flag2/flagpole.md3" );
|
||||||
cgs.media.flagFlapModel = trap_R_RegisterModel( "models/flag2/flagflap3.md3" );
|
cgs.media.flagFlapModel = trap_R_RegisterModel( "models/flag2/flagflap3.md3" );
|
||||||
|
@ -2156,6 +2161,9 @@ void CG_Init( int serverMessageNum, int serverCommandSequence, int clientNum ) {
|
||||||
|
|
||||||
cgs.redflag = cgs.blueflag = -1; // For compatibily, default to unset for
|
cgs.redflag = cgs.blueflag = -1; // For compatibily, default to unset for
|
||||||
cgs.flagStatus = -1;
|
cgs.flagStatus = -1;
|
||||||
|
// Q3Rally Code Start
|
||||||
|
cgs.sigil[0] = cgs.sigil[1] = cgs.sigil[2] = -1; // Sigil Reset
|
||||||
|
// Q3Rally Code END
|
||||||
// old servers
|
// old servers
|
||||||
|
|
||||||
// get the rendering configuration from the client system
|
// get the rendering configuration from the client system
|
||||||
|
|
|
@ -263,6 +263,14 @@ void CG_SetConfigValues( void ) {
|
||||||
cgs.redflag = s[0] - '0';
|
cgs.redflag = s[0] - '0';
|
||||||
cgs.blueflag = s[1] - '0';
|
cgs.blueflag = s[1] - '0';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
else if ( cgs.gametype == GT_DOMINATION ) {
|
||||||
|
s = CG_ConfigString( CS_SIGILSTATUS );
|
||||||
|
cgs.sigil[0] = s[0] - '0';
|
||||||
|
cgs.sigil[1] = s[1] - '0';
|
||||||
|
cgs.sigil[2] = s[2] - '0';
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef MISSIONPACK
|
#ifdef MISSIONPACK
|
||||||
else if( cgs.gametype == GT_1FCTF ) {
|
else if( cgs.gametype == GT_1FCTF ) {
|
||||||
s = CG_ConfigString( CS_FLAGSTATUS );
|
s = CG_ConfigString( CS_FLAGSTATUS );
|
||||||
|
@ -401,6 +409,14 @@ static void CG_ConfigStringModified( void ) {
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
else if ( num == CS_SIGILSTATUS ) {
|
||||||
|
if ( cgs.gametype == GT_DOMINATION ) {
|
||||||
|
cgs.sigil[0] = str[0] - '0';
|
||||||
|
cgs.sigil[1] = str[1] - '1';
|
||||||
|
cgs.sigil[2] = str[2] - '2';
|
||||||
|
}
|
||||||
|
}
|
||||||
else if ( num == CS_SHADERSTATE ) {
|
else if ( num == CS_SHADERSTATE ) {
|
||||||
CG_ShaderStateChanged();
|
CG_ShaderStateChanged();
|
||||||
}
|
}
|
||||||
|
|
|
@ -219,10 +219,23 @@ void trap_S_Respatialize( int entityNum, const vec3_t origin, vec3_t axis[3], in
|
||||||
syscall( CG_S_RESPATIALIZE, entityNum, origin, axis, inwater );
|
syscall( CG_S_RESPATIALIZE, entityNum, origin, axis, inwater );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
sfxHandle_t trap_S_RegisterSound( const char *sample, qboolean compressed ) {
|
sfxHandle_t trap_S_RegisterSound( const char *sample, qboolean compressed ) {
|
||||||
return syscall( CG_S_REGISTERSOUND, sample, compressed );
|
return syscall( CG_S_REGISTERSOUND, sample, compressed );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Temp Debug Code
|
||||||
|
|
||||||
|
sfxHandle_t trap_S_RegisterSoundDebug( const char *sample, qboolean compressed, const char *file, int line ) {
|
||||||
|
if ( !sample ) {
|
||||||
|
Com_Printf( "DEBUG: trap_S_RegisterSound: NULL sound name at %s:%d\n", file, line );
|
||||||
|
}
|
||||||
|
|
||||||
|
return syscall( CG_S_REGISTERSOUND, sample, compressed );
|
||||||
|
}
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
void trap_S_StartBackgroundTrack( const char *intro, const char *loop ) {
|
void trap_S_StartBackgroundTrack( const char *intro, const char *loop ) {
|
||||||
syscall( CG_S_STARTBACKGROUNDTRACK, intro, loop );
|
syscall( CG_S_STARTBACKGROUNDTRACK, intro, loop );
|
||||||
}
|
}
|
||||||
|
|
|
@ -890,6 +890,61 @@ Only in CTF games
|
||||||
/* sounds */ ""
|
/* sounds */ ""
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// Q3Rally Code Start
|
||||||
|
|
||||||
|
/*QUAKED team_DOMINATION_sigil_red
|
||||||
|
Only in Domination games
|
||||||
|
*/
|
||||||
|
{
|
||||||
|
"team_DOMINATION_sigil_red",
|
||||||
|
NULL,
|
||||||
|
{ "models/flags/r_flag.md3",
|
||||||
|
0, 0, 0 },
|
||||||
|
/* icon */ "icons/iconf_red1",
|
||||||
|
/* pickup */ "Flag",
|
||||||
|
0,
|
||||||
|
IT_SIGIL,
|
||||||
|
PW_SIGILRED,
|
||||||
|
/* precache */ "",
|
||||||
|
/* sounds */ ""
|
||||||
|
},
|
||||||
|
|
||||||
|
/*QUAKED team_DOMINATION_sigil_blue
|
||||||
|
Only in Domination games
|
||||||
|
*/
|
||||||
|
{
|
||||||
|
"team_DOMINATION_sigil_blue",
|
||||||
|
NULL,
|
||||||
|
{ "models/flags/b_flag.md3",
|
||||||
|
0, 0, 0 },
|
||||||
|
/* icon */ "icons/iconf_blu1",
|
||||||
|
/* pickup */ "Flag",
|
||||||
|
0,
|
||||||
|
IT_SIGIL,
|
||||||
|
PW_SIGILBLUE,
|
||||||
|
/* precache */ "",
|
||||||
|
/* sounds */ ""
|
||||||
|
},
|
||||||
|
|
||||||
|
/*QUAKED team_DOMINATION_sigil
|
||||||
|
Only in Domination games
|
||||||
|
*/
|
||||||
|
{
|
||||||
|
"team_DOMINATION_sigil",
|
||||||
|
NULL,
|
||||||
|
{ "models/flags/n_flag.md3",
|
||||||
|
0, 0, 0 },
|
||||||
|
/* icon */ "icons/iconf_neutral1",
|
||||||
|
/* pickup */ "Flag",
|
||||||
|
0,
|
||||||
|
IT_SIGIL,
|
||||||
|
PW_SIGILWHITE,
|
||||||
|
/* precache */ "",
|
||||||
|
/* sounds */ ""
|
||||||
|
},
|
||||||
|
|
||||||
|
// Q3Rally Code END
|
||||||
|
|
||||||
#ifdef MISSIONPACK
|
#ifdef MISSIONPACK
|
||||||
/*QUAKED holdable_kamikaze (.3 .3 1) (-16 -16 -16) (16 16 16) suspended
|
/*QUAKED holdable_kamikaze (.3 .3 1) (-16 -16 -16) (16 16 16) suspended
|
||||||
*/
|
*/
|
||||||
|
@ -1170,7 +1225,8 @@ gitem_t *BG_FindItemForPowerup( powerup_t pw ) {
|
||||||
for ( i = 0 ; i < bg_numItems ; i++ ) {
|
for ( i = 0 ; i < bg_numItems ; i++ ) {
|
||||||
if ( (bg_itemlist[i].giType == IT_POWERUP ||
|
if ( (bg_itemlist[i].giType == IT_POWERUP ||
|
||||||
bg_itemlist[i].giType == IT_TEAM ||
|
bg_itemlist[i].giType == IT_TEAM ||
|
||||||
bg_itemlist[i].giType == IT_PERSISTANT_POWERUP) &&
|
bg_itemlist[i].giType == IT_PERSISTANT_POWERUP ||
|
||||||
|
bg_itemlist[i].giType == IT_SIGIL ) &&
|
||||||
bg_itemlist[i].giTag == pw ) {
|
bg_itemlist[i].giTag == pw ) {
|
||||||
return &bg_itemlist[i];
|
return &bg_itemlist[i];
|
||||||
}
|
}
|
||||||
|
@ -1438,6 +1494,18 @@ qboolean BG_CanItemBeGrabbed( int gametype, const entityState_t *ent, const play
|
||||||
#endif
|
#endif
|
||||||
return qfalse;
|
return qfalse;
|
||||||
|
|
||||||
|
// Q3Rally Code Start
|
||||||
|
case IT_SIGIL:
|
||||||
|
// red team cannot touch a red sigil
|
||||||
|
if (ps->persistant[PERS_TEAM] == TEAM_RED && ent->powerups == PW_SIGILRED)
|
||||||
|
return qfalse;
|
||||||
|
// blue team cannot touch a blue sigil
|
||||||
|
else if (ps->persistant[PERS_TEAM] == TEAM_BLUE && ent->powerups == PW_SIGILBLUE)
|
||||||
|
return qfalse;
|
||||||
|
else
|
||||||
|
return qtrue;
|
||||||
|
// Q3Rally Code END
|
||||||
|
|
||||||
case IT_HOLDABLE:
|
case IT_HOLDABLE:
|
||||||
// can only hold one item at a time
|
// can only hold one item at a time
|
||||||
if ( ps->stats[STAT_HOLDABLE_ITEM] ) {
|
if ( ps->stats[STAT_HOLDABLE_ITEM] ) {
|
||||||
|
@ -1591,9 +1659,9 @@ char *eventnames[] = {
|
||||||
"EV_NOAMMO",
|
"EV_NOAMMO",
|
||||||
"EV_CHANGE_WEAPON",
|
"EV_CHANGE_WEAPON",
|
||||||
"EV_FIRE_WEAPON",
|
"EV_FIRE_WEAPON",
|
||||||
|
"EV_ALTFIRE_WEAPON",
|
||||||
// STONELANCE
|
// STONELANCE
|
||||||
"EV_HAZARD",
|
"EV_HAZARD",
|
||||||
"EV_ALTFIRE_WEAPON",
|
|
||||||
"EV_FIRE_REARWEAPON",
|
"EV_FIRE_REARWEAPON",
|
||||||
// END
|
// END
|
||||||
|
|
||||||
|
|
|
@ -106,6 +106,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
//#define CS_MODELS 32
|
//#define CS_MODELS 32
|
||||||
#define CS_MODELS 30
|
#define CS_MODELS 30
|
||||||
|
#define CS_SIGILSTATUS 31
|
||||||
// Q3Rally Code END
|
// Q3Rally Code END
|
||||||
#define CS_SOUNDS (CS_MODELS+MAX_MODELS)
|
#define CS_SOUNDS (CS_MODELS+MAX_MODELS)
|
||||||
// STONELANCE
|
// STONELANCE
|
||||||
|
@ -148,6 +149,7 @@ typedef enum {
|
||||||
GT_TEAM_RACING, // team racing
|
GT_TEAM_RACING, // team racing
|
||||||
GT_TEAM_RACING_DM, // team racing with weapons
|
GT_TEAM_RACING_DM, // team racing with weapons
|
||||||
GT_CTF, // capture the flag
|
GT_CTF, // capture the flag
|
||||||
|
GT_DOMINATION, // domination
|
||||||
// Q3Rally Code END
|
// Q3Rally Code END
|
||||||
GT_MAX_GAME_TYPE
|
GT_MAX_GAME_TYPE
|
||||||
} gametype_t;
|
} gametype_t;
|
||||||
|
@ -425,6 +427,9 @@ typedef enum {
|
||||||
PW_AMMOREGEN,
|
PW_AMMOREGEN,
|
||||||
PW_INVULNERABILITY,
|
PW_INVULNERABILITY,
|
||||||
|
|
||||||
|
PW_SIGILWHITE,
|
||||||
|
PW_SIGILRED,
|
||||||
|
PW_SIGILBLUE,
|
||||||
|
|
||||||
PW_NUM_POWERUPS
|
PW_NUM_POWERUPS
|
||||||
|
|
||||||
|
@ -825,6 +830,7 @@ typedef enum {
|
||||||
IT_TEAM,
|
IT_TEAM,
|
||||||
// Q3Rally Code Start
|
// Q3Rally Code Start
|
||||||
IT_RFWEAPON,
|
IT_RFWEAPON,
|
||||||
|
IT_SIGIL
|
||||||
// Q3Rally Code END
|
// Q3Rally Code END
|
||||||
} itemType_t;
|
} itemType_t;
|
||||||
|
|
||||||
|
|
|
@ -516,6 +516,11 @@ void Touch_Item (gentity_t *ent, gentity_t *other, trace_t *trace) {
|
||||||
case IT_TEAM:
|
case IT_TEAM:
|
||||||
respawn = Pickup_Team(ent, other);
|
respawn = Pickup_Team(ent, other);
|
||||||
break;
|
break;
|
||||||
|
// Q3Rally Code Start
|
||||||
|
case IT_SIGIL:
|
||||||
|
respawn = Sigil_Touch(ent, other);
|
||||||
|
break;
|
||||||
|
// Q3Rally Code END
|
||||||
case IT_HOLDABLE:
|
case IT_HOLDABLE:
|
||||||
respawn = Pickup_Holdable(ent, other);
|
respawn = Pickup_Holdable(ent, other);
|
||||||
break;
|
break;
|
||||||
|
@ -535,7 +540,7 @@ void Touch_Item (gentity_t *ent, gentity_t *other, trace_t *trace) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// powerup pickups are global broadcasts
|
// powerup pickups are global broadcasts
|
||||||
if ( ent->item->giType == IT_POWERUP || ent->item->giType == IT_TEAM) {
|
if ( ent->item->giType == IT_POWERUP || ent->item->giType == IT_TEAM || ent->item->giType == IT_SIGIL ) {
|
||||||
// if we want the global sound to play
|
// if we want the global sound to play
|
||||||
if (!ent->speed) {
|
if (!ent->speed) {
|
||||||
gentity_t *te;
|
gentity_t *te;
|
||||||
|
@ -806,6 +811,17 @@ void G_CheckTeamItems( void ) {
|
||||||
G_Printf( S_COLOR_YELLOW "WARNING: No team_CTF_blueflag in map\n" );
|
G_Printf( S_COLOR_YELLOW "WARNING: No team_CTF_blueflag in map\n" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Q3Rally Code Start
|
||||||
|
if ( g_gametype.integer == GT_DOMINATION )
|
||||||
|
{
|
||||||
|
gitem_t *item;
|
||||||
|
|
||||||
|
// check for at least one sigil
|
||||||
|
item = BG_FindItem( "Flag" );
|
||||||
|
if ( !item || !itemRegistered[item - bg_itemlist] )
|
||||||
|
G_Printf( S_COLOR_YELLOW "WARNING: No team_DOMINATION_sigil in map" );
|
||||||
|
}
|
||||||
|
// Q3Rally Code END
|
||||||
#ifdef MISSIONPACK
|
#ifdef MISSIONPACK
|
||||||
if( g_gametype.integer == GT_1FCTF ) {
|
if( g_gametype.integer == GT_1FCTF ) {
|
||||||
gitem_t *item;
|
gitem_t *item;
|
||||||
|
|
|
@ -325,6 +325,15 @@ qboolean G_CallSpawn( gentity_t *ent ) {
|
||||||
return qfalse;
|
return qfalse;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Q3Rally Code Start
|
||||||
|
if (g_gametype.integer == GT_DOMINATION)
|
||||||
|
{
|
||||||
|
RegisterItem(BG_FindItemForPowerup(PW_SIGILWHITE));
|
||||||
|
RegisterItem(BG_FindItemForPowerup(PW_SIGILRED));
|
||||||
|
RegisterItem(BG_FindItemForPowerup(PW_SIGILBLUE));
|
||||||
|
}
|
||||||
|
// Q3Rally Code END
|
||||||
|
|
||||||
// check item spawn functions
|
// check item spawn functions
|
||||||
for ( item=bg_itemlist+1 ; item->classname ; item++ ) {
|
for ( item=bg_itemlist+1 ; item->classname ; item++ ) {
|
||||||
if ( !strcmp(item->classname, ent->classname) ) {
|
if ( !strcmp(item->classname, ent->classname) ) {
|
||||||
|
@ -337,6 +346,11 @@ qboolean G_CallSpawn( gentity_t *ent ) {
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if ( item->giType == IT_TEAM && g_gametype.integer == GT_DOMINATION ) {
|
||||||
|
item = BG_FindItemForPowerup(PW_SIGILWHITE);
|
||||||
|
ent->classname = item->classname;
|
||||||
|
ent->r.svFlags = SVF_BROADCAST;
|
||||||
|
}
|
||||||
|
|
||||||
G_SpawnItem( ent, item );
|
G_SpawnItem( ent, item );
|
||||||
return qtrue;
|
return qtrue;
|
||||||
|
@ -761,6 +775,20 @@ void SP_worldspawn( void ) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
============================
|
||||||
|
G_ValidateSigils
|
||||||
|
============================
|
||||||
|
*/
|
||||||
|
void G_ValidateSigils()
|
||||||
|
{
|
||||||
|
gentity_t *it_ent;
|
||||||
|
|
||||||
|
it_ent = G_Spawn();
|
||||||
|
it_ent->think = ValidateSigilsInMap;
|
||||||
|
it_ent->nextthink = level.time + 500;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
==============
|
==============
|
||||||
G_SpawnEntitiesFromString
|
G_SpawnEntitiesFromString
|
||||||
|
@ -786,6 +814,10 @@ void G_SpawnEntitiesFromString( void ) {
|
||||||
G_SpawnGEntityFromSpawnVars();
|
G_SpawnGEntityFromSpawnVars();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// make sure Domination maps have a 3rd sigil
|
||||||
|
if (g_gametype.integer == GT_DOMINATION)
|
||||||
|
G_ValidateSigils();
|
||||||
|
|
||||||
|
|
||||||
level.spawning = qfalse; // any future calls to G_Spawn*() will be errors
|
level.spawning = qfalse; // any future calls to G_Spawn*() will be errors
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -24,6 +24,15 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
#include "g_local.h"
|
#include "g_local.h"
|
||||||
|
|
||||||
|
// Q3Rally Code Start
|
||||||
|
|
||||||
|
typedef struct domination_sigil_s
|
||||||
|
{
|
||||||
|
gentity_t *entity;
|
||||||
|
sigilStatus_t status;
|
||||||
|
} domination_sigil_t;
|
||||||
|
|
||||||
|
// Q3Rally Code END
|
||||||
|
|
||||||
typedef struct teamgame_s {
|
typedef struct teamgame_s {
|
||||||
float last_flag_capture;
|
float last_flag_capture;
|
||||||
|
@ -35,6 +44,9 @@ typedef struct teamgame_s {
|
||||||
int blueTakenTime;
|
int blueTakenTime;
|
||||||
int redObeliskAttackedTime;
|
int redObeliskAttackedTime;
|
||||||
int blueObeliskAttackedTime;
|
int blueObeliskAttackedTime;
|
||||||
|
// Q3Rally Code Start
|
||||||
|
domination_sigil_t sigil[MAX_SIGILS];
|
||||||
|
// Q3Rally Code END
|
||||||
} teamgame_t;
|
} teamgame_t;
|
||||||
|
|
||||||
teamgame_t teamgame;
|
teamgame_t teamgame;
|
||||||
|
@ -42,6 +54,10 @@ teamgame_t teamgame;
|
||||||
gentity_t *neutralObelisk;
|
gentity_t *neutralObelisk;
|
||||||
|
|
||||||
void Team_SetFlagStatus( int team, flagStatus_t status );
|
void Team_SetFlagStatus( int team, flagStatus_t status );
|
||||||
|
// Q3Rally Code Start
|
||||||
|
void Team_SetSigilStatus( int sigilNum, sigilStatus_t status );
|
||||||
|
void Init_Sigils( void );
|
||||||
|
// Q3Rally Code END
|
||||||
|
|
||||||
void Team_InitGame( void ) {
|
void Team_InitGame( void ) {
|
||||||
memset(&teamgame, 0, sizeof teamgame);
|
memset(&teamgame, 0, sizeof teamgame);
|
||||||
|
@ -53,12 +69,28 @@ void Team_InitGame( void ) {
|
||||||
teamgame.blueStatus = -1; // Invalid to force update
|
teamgame.blueStatus = -1; // Invalid to force update
|
||||||
Team_SetFlagStatus( TEAM_BLUE, FLAG_ATBASE );
|
Team_SetFlagStatus( TEAM_BLUE, FLAG_ATBASE );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
// Q3Rally Code Start
|
||||||
|
|
||||||
|
case GT_DOMINATION:
|
||||||
|
Init_Sigils();
|
||||||
|
teamgame.sigil[0].status = teamgame.sigil[1].status = teamgame.sigil[2].status = -1; // Invalid to force update
|
||||||
|
Team_SetSigilStatus( 0, SIGIL_ISWHITE );
|
||||||
|
Team_SetSigilStatus( 1, SIGIL_ISWHITE );
|
||||||
|
Team_SetSigilStatus( 2, SIGIL_ISWHITE );
|
||||||
|
break;
|
||||||
|
|
||||||
|
// Q3Rally Code END
|
||||||
|
|
||||||
#ifdef MISSIONPACK
|
#ifdef MISSIONPACK
|
||||||
case GT_1FCTF:
|
case GT_1FCTF:
|
||||||
teamgame.flagStatus = -1; // Invalid to force update
|
teamgame.flagStatus = -1; // Invalid to force update
|
||||||
Team_SetFlagStatus( TEAM_FREE, FLAG_ATBASE );
|
Team_SetFlagStatus( TEAM_FREE, FLAG_ATBASE );
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -88,6 +120,16 @@ const char *TeamName(int team) {
|
||||||
return "FREE";
|
return "FREE";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char *OtherTeamName(int team) {
|
||||||
|
if (team==TEAM_RED)
|
||||||
|
return "BLUE";
|
||||||
|
else if (team==TEAM_BLUE)
|
||||||
|
return "RED";
|
||||||
|
else if (team==TEAM_SPECTATOR)
|
||||||
|
return "SPECTATOR";
|
||||||
|
return "FREE";
|
||||||
|
}
|
||||||
|
|
||||||
const char *TeamColorString(int team) {
|
const char *TeamColorString(int team) {
|
||||||
if (team==TEAM_RED)
|
if (team==TEAM_RED)
|
||||||
return S_COLOR_RED;
|
return S_COLOR_RED;
|
||||||
|
@ -192,10 +234,152 @@ qboolean OnSameTeam( gentity_t *ent1, gentity_t *ent2 ) {
|
||||||
return qfalse;
|
return qfalse;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Q3Rally Code Start
|
||||||
|
static char dominationSigilStatusRemap[] = { '0', '1', '2' };
|
||||||
|
// Q3Rally Code END
|
||||||
static char ctfFlagStatusRemap[] = { '0', '1', '*', '*', '2' };
|
static char ctfFlagStatusRemap[] = { '0', '1', '*', '*', '2' };
|
||||||
static char oneFlagStatusRemap[] = { '0', '1', '2', '3', '4' };
|
static char oneFlagStatusRemap[] = { '0', '1', '2', '3', '4' };
|
||||||
|
|
||||||
|
// Q3Rally Code Start
|
||||||
|
/*
|
||||||
|
========================
|
||||||
|
Init_Sigils
|
||||||
|
========================
|
||||||
|
*/
|
||||||
|
void Init_Sigils( void ) {
|
||||||
|
gentity_t *point = NULL;
|
||||||
|
int sigilNum = 0;
|
||||||
|
for (point = g_entities; point < &g_entities[level.num_entities] ;
|
||||||
|
point++)
|
||||||
|
{
|
||||||
|
if (!point->inuse)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (!strcmp(point->classname, "team_Domination_sigil")) {
|
||||||
|
teamgame.sigil[sigilNum].entity = point;
|
||||||
|
sigilNum++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( sigilNum == 2 )
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
===============================
|
||||||
|
Team_SetSigilStatus
|
||||||
|
===============================
|
||||||
|
*/
|
||||||
|
void Team_SetSigilStatus( int sigilNum, sigilStatus_t status ) {
|
||||||
|
qboolean modified = qfalse;
|
||||||
|
|
||||||
|
// update only the sigil modified
|
||||||
|
if( teamgame.sigil[sigilNum].status != status );
|
||||||
|
teamgame.sigil[sigilNum].status = status;
|
||||||
|
modified = qtrue;
|
||||||
|
|
||||||
|
|
||||||
|
if( modified ) {
|
||||||
|
char st[4];
|
||||||
|
|
||||||
|
//send all 3 sigils' status to the configstring
|
||||||
|
st[0] = dominationSigilStatusRemap[teamgame.sigil[0].status];
|
||||||
|
st[1] = dominationSigilStatusRemap[teamgame.sigil[1].status];
|
||||||
|
st[2] = dominationSigilStatusRemap[teamgame.sigil[2].status];
|
||||||
|
st[3] = 0;
|
||||||
|
|
||||||
|
trap_SetConfigstring( CS_SIGILSTATUS, st );
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
==============================
|
||||||
|
ValidateSigilsInMap
|
||||||
|
==============================
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define FRADIUS 800
|
||||||
|
|
||||||
|
void ValidateSigilsInMap( gentity_t *ent )
|
||||||
|
{
|
||||||
|
vec3_t start, end, temp, mins, maxs, tvec, offset = {FRADIUS, FRADIUS, FRADIUS};
|
||||||
|
int numEnts, i, touch[MAX_GENTITIES], dist = FRADIUS;
|
||||||
|
gentity_t *tent, *targ;
|
||||||
|
float vlen;
|
||||||
|
qboolean foundItem = qfalse, foundPreferredItem = qfalse;
|
||||||
|
gitem_t *item;
|
||||||
|
|
||||||
|
// if 3rd sigil exists, this function doesn´t need to run
|
||||||
|
if (teamgame.sigil[2].entity)
|
||||||
|
return;
|
||||||
|
|
||||||
|
VectorCopy(teamgame.sigil[0].entity->r.currentOrigin, start);
|
||||||
|
VectorCopy(teamgame.sigil[1].entity->r.currentOrigin, end);
|
||||||
|
VectorSubtract(start, end, temp);
|
||||||
|
VectorScale(temp, 0.5, temp);
|
||||||
|
VectorAdd(end, temp, temp);
|
||||||
|
|
||||||
|
VectorCopy(temp, mins);
|
||||||
|
VectorCopy(temp, maxs);
|
||||||
|
VectorAdd(maxs, offset, maxs);
|
||||||
|
VectorScale(offset, -1, offset);
|
||||||
|
VectorAdd(mins, offset, mins);
|
||||||
|
|
||||||
|
numEnts = trap_EntitiesInBox( mins, maxs, touch, MAX_GENTITIES );
|
||||||
|
|
||||||
|
for ( i=0 ; i<numEnts ; i++ )
|
||||||
|
{
|
||||||
|
tent = &g_entities[touch[i]];
|
||||||
|
|
||||||
|
if (!tent->item)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (!(tent->item->giType == IT_HEALTH || tent->item->giType == IT_ARMOR || tent->item->giType == IT_WEAPON))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
VectorSubtract(temp, tent->r.currentOrigin, tvec);
|
||||||
|
vlen = abs(VectorLength(tvec));
|
||||||
|
|
||||||
|
if (vlen > FRADIUS)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if ( (foundItem && !foundPreferredItem) && (tent->item->giType == IT_HEALTH || tent->item->giType == IT_ARMOR) ) {
|
||||||
|
|
||||||
|
foundPreferredItem = qtrue;
|
||||||
|
dist = abs(VectorLength(tvec));
|
||||||
|
targ = tent;
|
||||||
|
} else {
|
||||||
|
if ( vlen < dist ) {
|
||||||
|
if (tent->item->giType == IT_HEALTH || tent->item->giType == IT_ARMOR || (tent->item->giType == IT_WEAPON && !foundPreferredItem ) ) {
|
||||||
|
foundItem = qtrue;
|
||||||
|
dist = abs(VectorLength(tvec));
|
||||||
|
targ = tent;
|
||||||
|
|
||||||
|
if (tent->item->giType == IT_HEALTH || tent->item->giType == IT_ARMOR)
|
||||||
|
foundPreferredItem = qtrue;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (foundItem)
|
||||||
|
{
|
||||||
|
|
||||||
|
item = BG_FindItemForPowerup(PW_SIGILWHITE);
|
||||||
|
targ->s.modelindex = item - bg_itemlist;
|
||||||
|
targ->classname = item->classname;
|
||||||
|
targ->item = item;
|
||||||
|
targ->r.svFlags = SVF_BROADCAST;
|
||||||
|
targ->s.powerups = PW_SIGILWHITE;
|
||||||
|
teamgame.sigil[2].entity = targ;
|
||||||
|
}
|
||||||
|
// kill the entity that does the spawn conversions
|
||||||
|
G_FreeEntity(ent);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Q3Rally Code END
|
||||||
|
|
||||||
void Team_SetFlagStatus( int team, flagStatus_t status ) {
|
void Team_SetFlagStatus( int team, flagStatus_t status ) {
|
||||||
qboolean modified = qfalse;
|
qboolean modified = qfalse;
|
||||||
|
|
||||||
|
@ -901,6 +1085,66 @@ int Pickup_Team( gentity_t *ent, gentity_t *other ) {
|
||||||
return Team_TouchEnemyFlag( ent, other, team );
|
return Team_TouchEnemyFlag( ent, other, team );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Q3Rally Code Start
|
||||||
|
|
||||||
|
/*
|
||||||
|
===================
|
||||||
|
Sigil_Think
|
||||||
|
===================
|
||||||
|
*/
|
||||||
|
void Sigil_Think( gentity_t *ent ) {
|
||||||
|
team_t team;
|
||||||
|
|
||||||
|
team = (ent->s.powerups == PW_SIGILRED) ? TEAM_RED : TEAM_BLUE;
|
||||||
|
ent->count = 0;
|
||||||
|
level.teamScores[team]++;
|
||||||
|
ent->nextthink = level.time + 10000;
|
||||||
|
|
||||||
|
// refresh scoreboard
|
||||||
|
CalculateRanks();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
====================================
|
||||||
|
Sigil_Touch
|
||||||
|
====================================
|
||||||
|
*/
|
||||||
|
int Sigil_Touch( gentity_t *ent, gentity_t *other ) {
|
||||||
|
gclient_t *cl = other->client;
|
||||||
|
int sigilNum = 0;
|
||||||
|
|
||||||
|
if (!cl)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (ent->count && ent->nextthink < level.time + 1500) // protect against overflows by not counting
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
// find the index of the sigil reffered by ent
|
||||||
|
while ( sigilNum < MAX_SIGILS && teamgame.sigil[sigilNum].entity != ent )
|
||||||
|
sigilNum++;
|
||||||
|
|
||||||
|
if ( cl->sess.sessionTeam == TEAM_RED && ent->s.powerups != PW_SIGILRED )
|
||||||
|
{
|
||||||
|
Team_SetSigilStatus(sigilNum, SIGIL_ISRED);
|
||||||
|
ent->nextthink = level.time - (level.time % 4000) + 4000;
|
||||||
|
ent->think = Sigil_Think;
|
||||||
|
ent->s.powerups = PW_SIGILRED;
|
||||||
|
ent->s.modelindex = ITEM_INDEX( BG_FindItemForPowerup( PW_SIGILRED ) );
|
||||||
|
ent->count = 1;
|
||||||
|
}
|
||||||
|
else if ( cl->sess.sessionTeam == TEAM_BLUE && ent->s.powerups != PW_SIGILBLUE )
|
||||||
|
{
|
||||||
|
Team_SetSigilStatus(sigilNum, SIGIL_ISBLUE);
|
||||||
|
ent->nextthink = level.time - (level.time % 4000) + 4000;
|
||||||
|
ent->think = Sigil_Think;
|
||||||
|
ent->s.powerups = PW_SIGILBLUE;
|
||||||
|
ent->s.modelindex = ITEM_INDEX( BG_FindItemForPowerup( PW_SIGILBLUE ) );
|
||||||
|
ent->count = 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Q3Rally Code END
|
||||||
/*
|
/*
|
||||||
===========
|
===========
|
||||||
Team_GetLocation
|
Team_GetLocation
|
||||||
|
|
|
@ -86,3 +86,8 @@ void TeamplayInfoMessage( gentity_t *ent );
|
||||||
void CheckTeamStatus(void);
|
void CheckTeamStatus(void);
|
||||||
|
|
||||||
int Pickup_Team( gentity_t *ent, gentity_t *other );
|
int Pickup_Team( gentity_t *ent, gentity_t *other );
|
||||||
|
|
||||||
|
// Q3Rally Code Start
|
||||||
|
int Sigil_Touch( gentity_t *ent, gentity_t *other );
|
||||||
|
void ValidateSigilsInMap( gentity_t *ent );
|
||||||
|
// Q3Rally Code END
|
||||||
|
|
|
@ -131,7 +131,8 @@ MULTIPLAYER MENU (SERVER BROWSER)
|
||||||
#define GAMES_TEAM_RACING_DM 6
|
#define GAMES_TEAM_RACING_DM 6
|
||||||
#define GAMES_TEAMPLAY 7
|
#define GAMES_TEAMPLAY 7
|
||||||
#define GAMES_CTF 8
|
#define GAMES_CTF 8
|
||||||
#define GAMES_NUM_GAMES 9
|
#define GAMES_DOMINATION 9
|
||||||
|
#define GAMES_NUM_GAMES 10
|
||||||
// END
|
// END
|
||||||
|
|
||||||
static const char *master_items[] = {
|
static const char *master_items[] = {
|
||||||
|
@ -163,6 +164,7 @@ static const char *servertype_items[] = {
|
||||||
"Team Racing Deathmatch",
|
"Team Racing Deathmatch",
|
||||||
"Team Deathmatch",
|
"Team Deathmatch",
|
||||||
"Capture the Flag",
|
"Capture the Flag",
|
||||||
|
"Domination",
|
||||||
// END
|
// END
|
||||||
0
|
0
|
||||||
};
|
};
|
||||||
|
@ -201,6 +203,7 @@ static char* gamenames[] = {
|
||||||
"TRace DM",
|
"TRace DM",
|
||||||
"Team DM", // team deathmatch
|
"Team DM", // team deathmatch
|
||||||
"CTF", // capture the flag
|
"CTF", // capture the flag
|
||||||
|
"Domination", // domination
|
||||||
// END
|
// END
|
||||||
"???", // unknown
|
"???", // unknown
|
||||||
0
|
0
|
||||||
|
@ -520,6 +523,10 @@ int ArenaServers_GametypeForGames(int games) {
|
||||||
case GAMES_CTF:
|
case GAMES_CTF:
|
||||||
gametype = GT_CTF;
|
gametype = GT_CTF;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case GAMES_DOMINATION:
|
||||||
|
gametype = GT_DOMINATION;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return gametype;
|
return gametype;
|
||||||
|
|
|
@ -144,13 +144,14 @@ static const char *gametype_items[] = {
|
||||||
"Team Racing Deathmatch",
|
"Team Racing Deathmatch",
|
||||||
// END
|
// END
|
||||||
"Capture the Flag",
|
"Capture the Flag",
|
||||||
|
"Domination",
|
||||||
0
|
0
|
||||||
};
|
};
|
||||||
|
|
||||||
// STONELANCE
|
// STONELANCE
|
||||||
// gametype_items[gametype_remap2[s_serveroptions.gametype]]
|
// 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};
|
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};
|
static int gametype_remap2[] = {0, 1, 0, 2, 3, 4, 5, 6, 7, 8};
|
||||||
|
|
||||||
int allowLength[3];
|
int allowLength[3];
|
||||||
int reversable;
|
int reversable;
|
||||||
|
@ -423,8 +424,11 @@ static int GametypeBits( char *string ) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if( Q_stricmp( token, "q3r_dom" ) == 0 ) {
|
||||||
|
bits |= 1 << GT_DOMINATION;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return bits;
|
return bits;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1246,6 +1250,8 @@ typedef struct {
|
||||||
menufield_s flaglimit;
|
menufield_s flaglimit;
|
||||||
menuradiobutton_s friendlyfire;
|
menuradiobutton_s friendlyfire;
|
||||||
menufield_s hostname;
|
menufield_s hostname;
|
||||||
|
menulist_s dominationSpawnStyle;
|
||||||
|
menuradiobutton_s sigillocator;
|
||||||
// STONLANCE
|
// STONLANCE
|
||||||
menulist_s trackLength;
|
menulist_s trackLength;
|
||||||
menulist_s reversed;
|
menulist_s reversed;
|
||||||
|
@ -1335,6 +1341,13 @@ static const char *botSkill_list[] = {
|
||||||
0
|
0
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// for dominationSpawnStyle
|
||||||
|
static const char *dtfspawn_list[] = {
|
||||||
|
"DM Spawns",
|
||||||
|
"CTF Team Spawns",
|
||||||
|
0
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
=================
|
=================
|
||||||
BotAlreadySelected
|
BotAlreadySelected
|
||||||
|
@ -1368,6 +1381,8 @@ ServerOptions_Start
|
||||||
static void ServerOptions_Start( void ) {
|
static void ServerOptions_Start( void ) {
|
||||||
int timelimit;
|
int timelimit;
|
||||||
int fraglimit;
|
int fraglimit;
|
||||||
|
int dominationSpawnStyle;
|
||||||
|
int sigillocator;
|
||||||
int maxclients;
|
int maxclients;
|
||||||
int dedicated;
|
int dedicated;
|
||||||
int friendlyfire;
|
int friendlyfire;
|
||||||
|
@ -1389,6 +1404,8 @@ static void ServerOptions_Start( void ) {
|
||||||
pure = s_serveroptions.pure.curvalue;
|
pure = s_serveroptions.pure.curvalue;
|
||||||
// STONELANCE
|
// STONELANCE
|
||||||
skill = s_serveroptions.botSkill.curvalue + 1;
|
skill = s_serveroptions.botSkill.curvalue + 1;
|
||||||
|
dominationSpawnStyle = s_serveroptions.dominationSpawnStyle.curvalue; // dtf
|
||||||
|
sigillocator = s_serveroptions.sigillocator.curvalue; // dtf
|
||||||
trackLength = s_serveroptions.trackLength.curvalue;
|
trackLength = s_serveroptions.trackLength.curvalue;
|
||||||
reversed = s_serveroptions.reversed.curvalue;
|
reversed = s_serveroptions.reversed.curvalue;
|
||||||
// END
|
// END
|
||||||
|
@ -1441,6 +1458,14 @@ static void ServerOptions_Start( void ) {
|
||||||
trap_Cvar_SetValue( "ui_ctf_friendlt", friendlyfire );
|
trap_Cvar_SetValue( "ui_ctf_friendlt", friendlyfire );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case GT_DOMINATION:
|
||||||
|
trap_Cvar_SetValue ("g_dominationSpawnStyle", Com_Clamp( 0, dominationSpawnStyle, dominationSpawnStyle ) );
|
||||||
|
trap_Cvar_SetValue ("cg_sigilLocator", Com_Clamp( 1, sigillocator, sigillocator) );
|
||||||
|
trap_Cvar_SetValue( "fraglimit", fraglimit );
|
||||||
|
trap_Cvar_SetValue( "timelimit", timelimit );
|
||||||
|
trap_Cvar_SetValue( "friendlt", friendlyfire );
|
||||||
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
trap_Cvar_SetValue( "sv_maxclients", Com_Clamp( 0, 12, maxclients ) );
|
trap_Cvar_SetValue( "sv_maxclients", Com_Clamp( 0, 12, maxclients ) );
|
||||||
|
@ -2219,7 +2244,9 @@ static void ServerOptions_MenuInit( qboolean multiplayer ) {
|
||||||
s_serveroptions.fraglimit.field.widthInChars = 3;
|
s_serveroptions.fraglimit.field.widthInChars = 3;
|
||||||
s_serveroptions.fraglimit.field.maxchars = 3;
|
s_serveroptions.fraglimit.field.maxchars = 3;
|
||||||
}
|
}
|
||||||
if( s_serveroptions.gametype != GT_CTF ) {
|
else if( s_serveroptions.gametype != GT_CTF && s_serveroptions.gametype != GT_DOMINATION ) {
|
||||||
|
// if( s_serveroptions.gametype != GT_CTF ) {
|
||||||
|
// END
|
||||||
s_serveroptions.fraglimit.generic.type = MTYPE_FIELD;
|
s_serveroptions.fraglimit.generic.type = MTYPE_FIELD;
|
||||||
s_serveroptions.fraglimit.generic.name = "Frag Limit:";
|
s_serveroptions.fraglimit.generic.name = "Frag Limit:";
|
||||||
s_serveroptions.fraglimit.generic.flags = QMF_NUMBERSONLY|QMF_PULSEIFFOCUS|QMF_SMALLFONT;
|
s_serveroptions.fraglimit.generic.flags = QMF_NUMBERSONLY|QMF_PULSEIFFOCUS|QMF_SMALLFONT;
|
||||||
|
@ -2330,6 +2357,23 @@ static void ServerOptions_MenuInit( qboolean multiplayer ) {
|
||||||
s_serveroptions.hostname.field.maxchars = 64;
|
s_serveroptions.hostname.field.maxchars = 64;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (s_serveroptions.gametype == GT_DOMINATION) {
|
||||||
|
y += BIGCHAR_HEIGHT+2;
|
||||||
|
s_serveroptions.dominationSpawnStyle.generic.type = MTYPE_SPINCONTROL;
|
||||||
|
s_serveroptions.dominationSpawnStyle.generic.flags = QMF_PULSEIFFOCUS|QMF_SMALLFONT;
|
||||||
|
s_serveroptions.dominationSpawnStyle.generic.x = OPTIONS_X;
|
||||||
|
s_serveroptions.dominationSpawnStyle.generic.y = y;
|
||||||
|
s_serveroptions.dominationSpawnStyle.generic.name = "Spawn Style:";
|
||||||
|
s_serveroptions.dominationSpawnStyle.itemnames = dtfspawn_list;
|
||||||
|
|
||||||
|
y += BIGCHAR_HEIGHT+2;
|
||||||
|
s_serveroptions.sigillocator.generic.type = MTYPE_RADIOBUTTON;
|
||||||
|
s_serveroptions.sigillocator.generic.flags = QMF_PULSEIFFOCUS|QMF_SMALLFONT;
|
||||||
|
s_serveroptions.sigillocator.generic.x = OPTIONS_X;
|
||||||
|
s_serveroptions.sigillocator.generic.y = y;
|
||||||
|
s_serveroptions.sigillocator.generic.name = "Flag Locator:";
|
||||||
|
}
|
||||||
|
|
||||||
y = 80;
|
y = 80;
|
||||||
s_serveroptions.botSkill.generic.type = MTYPE_SPINCONTROL;
|
s_serveroptions.botSkill.generic.type = MTYPE_SPINCONTROL;
|
||||||
s_serveroptions.botSkill.generic.flags = QMF_PULSEIFFOCUS|QMF_SMALLFONT;
|
s_serveroptions.botSkill.generic.flags = QMF_PULSEIFFOCUS|QMF_SMALLFONT;
|
||||||
|
@ -2459,7 +2503,7 @@ static void ServerOptions_MenuInit( qboolean multiplayer ) {
|
||||||
// STONELANCE
|
// STONELANCE
|
||||||
if( s_serveroptions.gametype != GT_DERBY ) {
|
if( s_serveroptions.gametype != GT_DERBY ) {
|
||||||
// END
|
// END
|
||||||
if( s_serveroptions.gametype != GT_CTF ) {
|
if( s_serveroptions.gametype != GT_CTF && s_serveroptions.gametype != GT_DOMINATION ) {
|
||||||
Menu_AddItem( &s_serveroptions.menu, &s_serveroptions.fraglimit );
|
Menu_AddItem( &s_serveroptions.menu, &s_serveroptions.fraglimit );
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -2536,6 +2580,11 @@ static void ServerOptions_MenuInit( qboolean multiplayer ) {
|
||||||
Menu_AddItem( &s_serveroptions.menu, &s_serveroptions.hostname );
|
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.back );
|
||||||
Menu_AddItem( &s_serveroptions.menu, &s_serveroptions.go );
|
Menu_AddItem( &s_serveroptions.menu, &s_serveroptions.go );
|
||||||
|
|
||||||
|
|
|
@ -116,6 +116,7 @@ MULTIPLAYER MENU (SERVER BROWSER)
|
||||||
#define GAMES_TEAM_RACING_DM 6
|
#define GAMES_TEAM_RACING_DM 6
|
||||||
#define GAMES_TEAMPLAY 7
|
#define GAMES_TEAMPLAY 7
|
||||||
#define GAMES_CTF 8
|
#define GAMES_CTF 8
|
||||||
|
#define GAMES_DOMINATION 9
|
||||||
// END
|
// END
|
||||||
|
|
||||||
static const char *master_items[] = {
|
static const char *master_items[] = {
|
||||||
|
@ -143,6 +144,7 @@ static const char *servertype_items[] = {
|
||||||
"Team Racing Deathmatch",
|
"Team Racing Deathmatch",
|
||||||
"Team Deathmatch",
|
"Team Deathmatch",
|
||||||
"Capture the Flag",
|
"Capture the Flag",
|
||||||
|
"Domination",
|
||||||
// END
|
// END
|
||||||
0
|
0
|
||||||
};
|
};
|
||||||
|
@ -180,6 +182,7 @@ static char* gamenames[] = {
|
||||||
"TRace DM",
|
"TRace DM",
|
||||||
"Team DM", // team deathmatch
|
"Team DM", // team deathmatch
|
||||||
"CTF", // capture the flag
|
"CTF", // capture the flag
|
||||||
|
"Domination", // domination
|
||||||
// END
|
// END
|
||||||
"???", // unknown
|
"???", // unknown
|
||||||
0
|
0
|
||||||
|
@ -615,6 +618,12 @@ static void ArenaServers_UpdateMenu( void ) {
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case GAMES_DOMINATION:
|
||||||
|
if( servernodeptr->gametype != GT_DOMINATION ) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if( servernodeptr->pingtime < servernodeptr->minPing ) {
|
if( servernodeptr->pingtime < servernodeptr->minPing ) {
|
||||||
|
@ -1182,6 +1191,10 @@ static void ArenaServers_StartRefresh( void )
|
||||||
strcpy( myargs, " ctf" );
|
strcpy( myargs, " ctf" );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case GAMES_DOMINATION:
|
||||||
|
strcpy( myargs, " domination" );
|
||||||
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -67,7 +67,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
#define BASETA "missionpack"
|
#define BASETA "missionpack"
|
||||||
|
|
||||||
#ifndef PRODUCT_VERSION
|
#ifndef PRODUCT_VERSION
|
||||||
#define PRODUCT_VERSION "v0.0.1.5_r253"
|
#define PRODUCT_VERSION "v0.0.2.1_r253"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
@ -1788,6 +1788,17 @@ typedef enum _flag_status {
|
||||||
FLAG_DROPPED
|
FLAG_DROPPED
|
||||||
} flagStatus_t;
|
} flagStatus_t;
|
||||||
|
|
||||||
|
// Q3Rally Code Start
|
||||||
|
|
||||||
|
#define MAX_SIGILS 3
|
||||||
|
|
||||||
|
typedef enum _sigil_status {
|
||||||
|
SIGIL_ISWHITE = 0,
|
||||||
|
SIGIL_ISRED,
|
||||||
|
SIGIL_ISBLUE
|
||||||
|
} sigilStatus_t;
|
||||||
|
|
||||||
|
// Q3Rally Code END
|
||||||
|
|
||||||
|
|
||||||
#define MAX_GLOBAL_SERVERS 4096
|
#define MAX_GLOBAL_SERVERS 4096
|
||||||
|
|
|
@ -95,7 +95,7 @@ q3rallycode
|
||||||
engine\code\botlib\l_utils.h
|
engine\code\botlib\l_utils.h
|
||||||
engine\code\botlib\lcc.mak
|
engine\code\botlib\lcc.mak
|
||||||
engine\code\botlib\linux-i386.mak
|
engine\code\botlib\linux-i386.mak
|
||||||
-cgame
|
+cgame
|
||||||
engine\code\cgame\cg_atmospheric.c
|
engine\code\cgame\cg_atmospheric.c
|
||||||
engine\code\cgame\cg_consolecmds.c
|
engine\code\cgame\cg_consolecmds.c
|
||||||
engine\code\cgame\cg_draw.c
|
engine\code\cgame\cg_draw.c
|
||||||
|
@ -427,7 +427,7 @@ q3rallycode
|
||||||
engine\code\null\null_main.c
|
engine\code\null\null_main.c
|
||||||
engine\code\null\null_net.c
|
engine\code\null\null_net.c
|
||||||
engine\code\null\null_snddma.c
|
engine\code\null\null_snddma.c
|
||||||
-q3_ui
|
+q3_ui
|
||||||
engine\code\q3_ui\ui.def
|
engine\code\q3_ui\ui.def
|
||||||
engine\code\q3_ui\ui_addbots.c
|
engine\code\q3_ui\ui_addbots.c
|
||||||
engine\code\q3_ui\ui_atoms.c
|
engine\code\q3_ui\ui_atoms.c
|
||||||
|
@ -861,23 +861,59 @@ q3rallycode
|
||||||
0=engine\code\qcommon\files.c
|
0=engine\code\qcommon\files.c
|
||||||
1=engine\code\qcommon\q_shared.h
|
1=engine\code\qcommon\q_shared.h
|
||||||
2=engine\Makefile
|
2=engine\Makefile
|
||||||
3=engine\code\q3_ui\ui_menu.c
|
3=engine\code\game\bg_misc.c
|
||||||
4=engine\code\q3_ui\ui_rally_credits.c
|
4=engine\code\cgame\cg_draw.c
|
||||||
|
5=engine\code\game\bg_public.h
|
||||||
|
6=engine\code\game\g_spawn.c
|
||||||
|
7=engine\code\game\g_team.c
|
||||||
|
8=engine\code\cgame\cg_local.h
|
||||||
|
9=engine\code\cgame\cg_syscalls.c
|
||||||
|
10=engine\code\cgame\cg_event.c
|
||||||
|
11=engine\code\cgame\cg_main.c
|
||||||
|
12=engine\code\game\inv.h
|
||||||
|
13=engine\code\game\g_items.c
|
||||||
[Selected Project Files]
|
[Selected Project Files]
|
||||||
Main=
|
Main=
|
||||||
Selected=engine\code\q3_ui\ui_rally_credits.c
|
Selected=engine\code\cgame\cg_local.h
|
||||||
[engine\code\qcommon\files.c]
|
[engine\code\qcommon\files.c]
|
||||||
TopLine=180
|
TopLine=161
|
||||||
Caret=3,211
|
Caret=129,192
|
||||||
[engine\code\qcommon\q_shared.h]
|
[engine\code\qcommon\q_shared.h]
|
||||||
TopLine=49
|
TopLine=1141
|
||||||
Caret=40,70
|
Caret=1,1156
|
||||||
[engine\Makefile]
|
[engine\Makefile]
|
||||||
TopLine=99
|
TopLine=99
|
||||||
Caret=17,114
|
Caret=17,114
|
||||||
[engine\code\q3_ui\ui_menu.c]
|
[engine\code\game\bg_misc.c]
|
||||||
TopLine=420
|
TopLine=886
|
||||||
Caret=63,438
|
Caret=1,895
|
||||||
[engine\code\q3_ui\ui_rally_credits.c]
|
[engine\code\cgame\cg_draw.c]
|
||||||
TopLine=101
|
TopLine=3192
|
||||||
Caret=65,102
|
Caret=1,3207
|
||||||
|
[engine\code\game\bg_public.h]
|
||||||
|
TopLine=426
|
||||||
|
Caret=1,431
|
||||||
|
[engine\code\game\g_spawn.c]
|
||||||
|
TopLine=323
|
||||||
|
Caret=1,332
|
||||||
|
[engine\code\game\g_team.c]
|
||||||
|
TopLine=272
|
||||||
|
Caret=1,272
|
||||||
|
[engine\code\cgame\cg_local.h]
|
||||||
|
TopLine=2067
|
||||||
|
Caret=3,2086
|
||||||
|
[engine\code\cgame\cg_syscalls.c]
|
||||||
|
TopLine=215
|
||||||
|
Caret=3,237
|
||||||
|
[engine\code\cgame\cg_event.c]
|
||||||
|
TopLine=873
|
||||||
|
Caret=94,897
|
||||||
|
[engine\code\cgame\cg_main.c]
|
||||||
|
TopLine=631
|
||||||
|
Caret=39,646
|
||||||
|
[engine\code\game\inv.h]
|
||||||
|
TopLine=81
|
||||||
|
Caret=1,95
|
||||||
|
[engine\code\game\g_items.c]
|
||||||
|
TopLine=506
|
||||||
|
Caret=66,537
|
||||||
|
|
Loading…
Reference in a new issue