From c9856b0dcebc64c50e7c029287fcf6bda6f2ba01 Mon Sep 17 00:00:00 2001 From: perle Date: Mon, 29 Jul 2024 08:38:25 +0200 Subject: [PATCH] prepare new Gametype 4-Teams-CTF still needs tweaking --- engine/code/cgame/cg_draw.c | 24 +++++-- engine/code/cgame/cg_local.h | 2 + engine/code/cgame/cg_main.c | 10 +++ engine/code/cgame/cg_players.c | 3 - engine/code/cgame/cg_playerstate.c | 2 + engine/code/cgame/cg_predict.c | 6 ++ engine/code/cgame/cg_scoreboard.c | 14 ++++ engine/code/game/ai_dmq3.c | 8 +++ engine/code/game/ai_dmq3.h | 4 ++ engine/code/game/bg_misc.c | 51 +++++++++++++- engine/code/game/bg_public.h | 4 +- engine/code/game/g_active.c | 6 ++ engine/code/game/g_combat.c | 10 +++ engine/code/game/g_misc.c | 8 +++ engine/code/game/g_rankings.c | 2 +- engine/code/game/g_target.c | 4 ++ engine/code/game/g_team.c | 52 +++++++++++--- engine/code/game/inv.h | 106 +++++++++++++++-------------- engine/code/qcommon/q_shared.h | 2 +- q3rallycode.ppr | Bin 32368 -> 34061 bytes 20 files changed, 246 insertions(+), 72 deletions(-) diff --git a/engine/code/cgame/cg_draw.c b/engine/code/cgame/cg_draw.c index b6271b44..f56eaed3 100644 --- a/engine/code/cgame/cg_draw.c +++ b/engine/code/cgame/cg_draw.c @@ -391,6 +391,10 @@ void CG_DrawFlagModel( float x, float y, float w, float h, int team, qboolean fo handle = cgs.media.redFlagModel; } else if( team == TEAM_BLUE ) { handle = cgs.media.blueFlagModel; + } else if( team == TEAM_GREEN) { + handle = cgs.media.greenFlagModel; + } else if( team == TEAM_YELLOW ) { + handle = cgs.media.yellowFlagModel; } else if( team == TEAM_FREE ) { handle = cgs.media.neutralFlagModel; } else { @@ -404,6 +408,10 @@ void CG_DrawFlagModel( float x, float y, float w, float h, int team, qboolean fo item = BG_FindItemForPowerup( PW_REDFLAG ); } else if( team == TEAM_BLUE ) { item = BG_FindItemForPowerup( PW_BLUEFLAG ); + } else if( team == TEAM_GREEN ) { + item = BG_FindItemForPowerup( PW_GREENFLAG ); + } else if( team == TEAM_YELLOW ) { + item = BG_FindItemForPowerup( PW_YELLOWFLAG ); } else if( team == TEAM_FREE ) { item = BG_FindItemForPowerup( PW_NEUTRALFLAG ); } else { @@ -640,6 +648,10 @@ static void CG_DrawStatusBar( void ) { CG_DrawStatusBarFlag( 185 + CHAR_WIDTH*3 + TEXT_ICON_SPACE + ICON_SIZE, TEAM_RED ); } else if( cg.predictedPlayerState.powerups[PW_BLUEFLAG] ) { CG_DrawStatusBarFlag( 185 + CHAR_WIDTH*3 + TEXT_ICON_SPACE + ICON_SIZE, TEAM_BLUE ); + } else if( cg.predictedPlayerState.powerups[PW_GREENFLAG] ) { + CG_DrawStatusBarFlag( 185 + CHAR_WIDTH*3 + TEXT_ICON_SPACE + ICON_SIZE, TEAM_GREEN ); + } else if( cg.predictedPlayerState.powerups[PW_YELLOWFLAG] ) { + CG_DrawStatusBarFlag( 185 + CHAR_WIDTH*3 + TEXT_ICON_SPACE + ICON_SIZE, TEAM_YELLOW ); } else if( cg.predictedPlayerState.powerups[PW_NEUTRALFLAG] ) { CG_DrawStatusBarFlag( 185 + CHAR_WIDTH*3 + TEXT_ICON_SPACE + ICON_SIZE, TEAM_FREE ); } @@ -847,6 +859,10 @@ static void CG_DrawRallyStatusBar( void ) { CG_DrawStatusBarFlag( 495, TEAM_RED); else if (cg.predictedPlayerState.powerups[PW_BLUEFLAG]) CG_DrawStatusBarFlag( 495, TEAM_BLUE); + else if (cg.predictedPlayerState.powerups[PW_GREENFLAG]) + CG_DrawStatusBarFlag( 495, TEAM_GREEN); + else if (cg.predictedPlayerState.powerups[PW_YELLOWFLAG]) + CG_DrawStatusBarFlag( 495, TEAM_YELLOW); else if (cg_entities[cg.snap->ps.clientNum].finishRaceTime && cg_entities[cg.snap->ps.clientNum].currentPosition == 1){ @@ -1179,17 +1195,17 @@ static void CG_DrawRallyPowerups( void ) { active++; } - // draw the icons and timers + // draw the icons and timers TRYOUT: bug #71 for ( i = 0 ; i < active ; i++ ) { item = BG_FindItemForPowerup( sorted[i] ); color = 1; - CG_FillRect( 402, 476 - 30, 90, 24, bg_color ); + CG_FillRect( 495, 476 - 30, 90, 24, bg_color ); trap_R_SetColor( colors[color] ); - CG_DrawField( 424 + CHAR_WIDTH, 476 - 28, 2, sortedTime[ i ] / 1000 ); + CG_DrawField( 517 + CHAR_WIDTH, 476 - 28, 2, sortedTime[ i ] / 1000 ); t = ps->powerups[ sorted[i] ]; if ( t - cg.time >= POWERUP_BLINKS * POWERUP_BLINK_TIME ) { @@ -1216,7 +1232,7 @@ static void CG_DrawRallyPowerups( void ) { size = 19; } - CG_DrawPic( 408, 476 - 27, size, size, trap_R_RegisterShader( item->icon ) ); + CG_DrawPic( 503, 476 - 27, size, size, trap_R_RegisterShader( item->icon ) ); } trap_R_SetColor( NULL ); } diff --git a/engine/code/cgame/cg_local.h b/engine/code/cgame/cg_local.h index 8ae07e5b..104039a4 100644 --- a/engine/code/cgame/cg_local.h +++ b/engine/code/cgame/cg_local.h @@ -827,6 +827,8 @@ typedef struct { qhandle_t redFlagFlapSkin; qhandle_t blueFlagFlapSkin; + qhandle_t greenFlagFlapSkin; + qhandle_t yellowFlagFlapSkin; qhandle_t neutralFlagFlapSkin; qhandle_t redFlagBaseModel; diff --git a/engine/code/cgame/cg_main.c b/engine/code/cgame/cg_main.c index bfa0a1de..7dec7aa2 100644 --- a/engine/code/cgame/cg_main.c +++ b/engine/code/cgame/cg_main.c @@ -1130,6 +1130,8 @@ static void CG_RegisterGraphics( void ) { cgs.media.redFlagFlapSkin = trap_R_RegisterSkin( "models/flag2/red.skin" ); cgs.media.blueFlagFlapSkin = trap_R_RegisterSkin( "models/flag2/blue.skin" ); + cgs.media.greenFlagFlapSkin = trap_R_RegisterSkin( "models/flag2/green.skin" ); + cgs.media.yellowFlagFlapSkin = trap_R_RegisterSkin( "models/flag2/yellow.skin" ); cgs.media.neutralFlagFlapSkin = trap_R_RegisterSkin( "models/flag2/white.skin" ); cgs.media.redFlagBaseModel = trap_R_RegisterModel( "models/mapobjects/flagbase/red_base.md3" ); @@ -1910,6 +1912,10 @@ static const char *CG_FeederItemText(float feederID, int index, int column, qhan team = TEAM_RED; } else if (feederID == FEEDER_BLUETEAM_LIST) { team = TEAM_BLUE; + } else if (feederID == FEEDER_GREENTEAM_LIST) { + team = TEAM_GREEN; + } else if (feederID == FEEDER_YELLOWTEAM_LIST) { + team = TEAM_YELLOW; } info = CG_InfoFromScoreIndex(index, team, &scoreIndex); @@ -1926,6 +1932,10 @@ static const char *CG_FeederItemText(float feederID, int index, int column, qhan *handle = cg_items[ ITEM_INDEX(item) ].icon; } else if ( info->powerups & ( 1 << PW_BLUEFLAG ) ) { item = BG_FindItemForPowerup( PW_BLUEFLAG ); + } else if ( info->powerups & ( 1 << PW_GREENFLAG ) ) { + item = BG_FindItemForPowerup( PW_GREENFLAG ); + } else if ( info->powerups & ( 1 << PW_YELLOWFLAG ) ) { + item = BG_FindItemForPowerup( PW_YELLOWFLAG ); *handle = cg_items[ ITEM_INDEX(item) ].icon; } else { if ( info->botSkill > 0 && info->botSkill <= 5 ) { diff --git a/engine/code/cgame/cg_players.c b/engine/code/cgame/cg_players.c index 5d47571a..3a42df7a 100644 --- a/engine/code/cgame/cg_players.c +++ b/engine/code/cgame/cg_players.c @@ -2416,7 +2416,6 @@ static void CG_PlayerPowerups( centity_t *cent, refEntity_t *torso ) { trap_R_AddLightToScene( cent->lerpOrigin, 200 + (rand()&31), 0.2f, 0.2f, 1.0 ); } -/* finish in 0.5 // greenflag if ( powerups & ( 1 << PW_GREENFLAG ) ) { @@ -2440,8 +2439,6 @@ static void CG_PlayerPowerups( centity_t *cent, refEntity_t *torso ) { trap_R_AddLightToScene( cent->lerpOrigin, 200 + (rand()&31), 1.0, 1.0, 0.2f ); } -// end finish in 0.5 -*/ // neutralflag if ( powerups & ( 1 << PW_NEUTRALFLAG ) ) { diff --git a/engine/code/cgame/cg_playerstate.c b/engine/code/cgame/cg_playerstate.c index 58a65182..5bb3d337 100644 --- a/engine/code/cgame/cg_playerstate.c +++ b/engine/code/cgame/cg_playerstate.c @@ -437,6 +437,8 @@ void CG_CheckLocalSounds( playerState_t *ps, playerState_t *ops ) { if ( cgs.gametype > GT_TEAM ) { if ((ps->powerups[PW_REDFLAG] != ops->powerups[PW_REDFLAG] && ps->powerups[PW_REDFLAG]) || (ps->powerups[PW_BLUEFLAG] != ops->powerups[PW_BLUEFLAG] && ps->powerups[PW_BLUEFLAG]) || + (ps->powerups[PW_GREENFLAG] != ops->powerups[PW_GREENFLAG] && ps->powerups[PW_GREENFLAG]) || + (ps->powerups[PW_YELLOWFLAG] != ops->powerups[PW_YELLOWFLAG] && ps->powerups[PW_YELLOWFLAG]) || (ps->powerups[PW_NEUTRALFLAG] != ops->powerups[PW_NEUTRALFLAG] && ps->powerups[PW_NEUTRALFLAG]) ) { trap_S_StartLocalSound( cgs.media.youHaveFlagSound, CHAN_ANNOUNCER ); diff --git a/engine/code/cgame/cg_predict.c b/engine/code/cgame/cg_predict.c index 6949a2bd..881e617a 100644 --- a/engine/code/cgame/cg_predict.c +++ b/engine/code/cgame/cg_predict.c @@ -494,6 +494,12 @@ static void CG_TouchItem( centity_t *cent ) { if (cg.predictedPlayerState.persistant[PERS_TEAM] == TEAM_BLUE && item->giType == IT_TEAM && item->giTag == PW_BLUEFLAG) return; + if (cg.predictedPlayerState.persistant[PERS_TEAM] == TEAM_GREEN && + item->giType == IT_TEAM && item->giTag == PW_GREENFLAG) + return; + if (cg.predictedPlayerState.persistant[PERS_TEAM] == TEAM_YELLOW && + item->giType == IT_TEAM && item->giTag == PW_YELLOWFLAG) + return; } // grab it diff --git a/engine/code/cgame/cg_scoreboard.c b/engine/code/cgame/cg_scoreboard.c index 25175c9d..b8055392 100644 --- a/engine/code/cgame/cg_scoreboard.c +++ b/engine/code/cgame/cg_scoreboard.c @@ -143,6 +143,20 @@ static void CG_DrawClientScore( int y, score_t *score, float *color, float fade, else { CG_DrawFlagModel( iconx, y, 16, 16, TEAM_BLUE, qfalse ); } + } else if ( ci->powerups & ( 1 << PW_GREENFLAG ) ) { + if( largeFormat ) { + CG_DrawFlagModel( iconx, y - ( 32 - BIGCHAR_HEIGHT ) / 2, 32, 32, TEAM_GREEN, qfalse ); + } + else { + CG_DrawFlagModel( iconx, y, 16, 16, TEAM_GREEN, qfalse ); + } + } else if ( ci->powerups & ( 1 << PW_YELLOWFLAG ) ) { + if( largeFormat ) { + CG_DrawFlagModel( iconx, y - ( 32 - BIGCHAR_HEIGHT ) / 2, 32, 32, TEAM_YELLOW, qfalse ); + } + else { + CG_DrawFlagModel( iconx, y, 16, 16, TEAM_YELLOW, qfalse ); + } } // STONELANCE - draw flag beside winner else if (cg_entities[score->client].finishRaceTime && diff --git a/engine/code/game/ai_dmq3.c b/engine/code/game/ai_dmq3.c index 8237f362..0662355d 100644 --- a/engine/code/game/ai_dmq3.c +++ b/engine/code/game/ai_dmq3.c @@ -135,6 +135,8 @@ int BotCTFCarryingFlag(bot_state_t *bs) { if (bs->inventory[INVENTORY_REDFLAG] > 0) return CTF_FLAG_RED; else if (bs->inventory[INVENTORY_BLUEFLAG] > 0) return CTF_FLAG_BLUE; + else if (bs->inventory[INVENTORY_GREENFLAG] > 0) return CTF_FLAG_GREEN; + else if (bs->inventory[INVENTORY_YELLOWFLAG] > 0) return CTF_FLAG_YELLOW; return CTF_FLAG_NONE; } @@ -229,6 +231,10 @@ qboolean EntityCarriesFlag(aas_entityinfo_t *entinfo) { return qtrue; if ( entinfo->powerups & ( 1 << PW_BLUEFLAG ) ) return qtrue; + if ( entinfo->powerups & ( 1 << PW_GREENFLAG ) ) + return qtrue; + if ( entinfo->powerups & ( 1 << PW_YELLOWFLAG ) ) + return qtrue; #ifdef MISSIONPACK if ( entinfo->powerups & ( 1 << PW_NEUTRALFLAG ) ) return qtrue; @@ -1799,6 +1805,8 @@ void BotUpdateInventory(bot_state_t *bs) { #endif bs->inventory[INVENTORY_REDFLAG] = bs->cur_ps.powerups[PW_REDFLAG] != 0; bs->inventory[INVENTORY_BLUEFLAG] = bs->cur_ps.powerups[PW_BLUEFLAG] != 0; + bs->inventory[INVENTORY_GREENFLAG] = bs->cur_ps.powerups[PW_GREENFLAG] != 0; + bs->inventory[INVENTORY_YELLOWFLAG] = bs->cur_ps.powerups[PW_YELLOWFLAG] != 0; #ifdef MISSIONPACK bs->inventory[INVENTORY_NEUTRALFLAG] = bs->cur_ps.powerups[PW_NEUTRALFLAG] != 0; if (BotTeam(bs) == TEAM_RED) { diff --git a/engine/code/game/ai_dmq3.h b/engine/code/game/ai_dmq3.h index 42d1f763..e57662ea 100644 --- a/engine/code/game/ai_dmq3.h +++ b/engine/code/game/ai_dmq3.h @@ -183,9 +183,13 @@ void BotMapScripts(bot_state_t *bs); #define CTF_FLAG_NONE 0 #define CTF_FLAG_RED 1 #define CTF_FLAG_BLUE 2 +#define CTF_FLAG_GREEN 3 +#define CTF_FLAG_YELLOW 4 //CTF skins #define CTF_SKIN_REDTEAM "red" #define CTF_SKIN_BLUETEAM "blue" +#define CTF_SKIN_GREENTEAM "green" +#define CTF_SKIN_YELLOWTEAM "yellow" extern int gametype; //game type extern int maxclients; //maximum number of clients diff --git a/engine/code/game/bg_misc.c b/engine/code/game/bg_misc.c index f1a2027c..aabb6ddc 100644 --- a/engine/code/game/bg_misc.c +++ b/engine/code/game/bg_misc.c @@ -881,7 +881,40 @@ Only in CTF games /* precache */ "", /* sounds */ "" }, + +/*QUAKED team_CTF_greenflag (0 1 0) (-16 -16 -16) (16 16 16) +Only in CTF games +*/ + { + "team_CTF_greenflag", + NULL, + { "models/flags/b_flag.md3", + NULL, NULL, NULL }, +/* icon */ "icons/iconf_green1", +/* pickup */ "Green Flag", + 0, + IT_TEAM, + PW_GREENFLAG, +/* precache */ "", +/* sounds */ "" + }, +/*QUAKED team_CTF_yellowflag (1 1 0) (-16 -16 -16) (16 16 16) +Only in CTF games +*/ + { + "team_CTF_yellowflag", + NULL, + { "models/flags/b_flag.md3", + NULL, NULL, NULL }, +/* icon */ "icons/iconf_yell1", +/* pickup */ "Yellow Flag", + 0, + IT_TEAM, + PW_YELLOWFLAG, +/* precache */ "", +/* sounds */ "" + }, // Q3Rally Code Start /*QUAKED team_DOMINATION_sigil_red @@ -1505,12 +1538,28 @@ qboolean BG_CanItemBeGrabbed( int gametype, const entityState_t *ent, const play (item->giTag == PW_REDFLAG && ent->modelindex2) || (item->giTag == PW_REDFLAG && ps->powerups[PW_BLUEFLAG]) ) return qtrue; - } else if (ps->persistant[PERS_TEAM] == TEAM_BLUE) { + } + + else if (ps->persistant[PERS_TEAM] == TEAM_BLUE) { if (item->giTag == PW_REDFLAG || (item->giTag == PW_BLUEFLAG && ent->modelindex2) || (item->giTag == PW_BLUEFLAG && ps->powerups[PW_REDFLAG]) ) return qtrue; } + + else if (ps->persistant[PERS_TEAM] == TEAM_BLUE) { + if (item->giTag == PW_REDFLAG || + (item->giTag == PW_BLUEFLAG && ent->modelindex2) || + (item->giTag == PW_BLUEFLAG && ps->powerups[PW_REDFLAG]) ) + return qtrue; + } + + else if (ps->persistant[PERS_TEAM] == TEAM_BLUE) { + if (item->giTag == PW_REDFLAG || + (item->giTag == PW_BLUEFLAG && ent->modelindex2) || + (item->giTag == PW_BLUEFLAG && ps->powerups[PW_REDFLAG]) ) + return qtrue; + } } #ifdef MISSIONPACK diff --git a/engine/code/game/bg_public.h b/engine/code/game/bg_public.h index eae5b444..b627bfcb 100644 --- a/engine/code/game/bg_public.h +++ b/engine/code/game/bg_public.h @@ -405,8 +405,8 @@ typedef enum { PW_REDFLAG, PW_BLUEFLAG, -// PW_GREENFLAG, -// PW_YELLOWFLAG, + PW_GREENFLAG, + PW_YELLOWFLAG, PW_NEUTRALFLAG, #ifdef MISSIONPACK diff --git a/engine/code/game/g_active.c b/engine/code/game/g_active.c index c622fa97..2ca5e1da 100644 --- a/engine/code/game/g_active.c +++ b/engine/code/game/g_active.c @@ -803,6 +803,12 @@ void ClientEvents( gentity_t *ent, int oldEventSequence ) { } else if ( ent->client->ps.powerups[ PW_BLUEFLAG ] ) { item = BG_FindItemForPowerup( PW_BLUEFLAG ); j = PW_BLUEFLAG; + } else if ( ent->client->ps.powerups[ PW_GREENFLAG ] ) { + item = BG_FindItemForPowerup( PW_GREENFLAG ); + j = PW_GREENFLAG; + } else if ( ent->client->ps.powerups[ PW_YELLOWFLAG ] ) { + item = BG_FindItemForPowerup( PW_YELLOWFLAG ); + j = PW_YELLOWFLAG; } else if ( ent->client->ps.powerups[ PW_NEUTRALFLAG ] ) { item = BG_FindItemForPowerup( PW_NEUTRALFLAG ); j = PW_NEUTRALFLAG; diff --git a/engine/code/game/g_combat.c b/engine/code/game/g_combat.c index c65c9249..33699f66 100644 --- a/engine/code/game/g_combat.c +++ b/engine/code/game/g_combat.c @@ -415,6 +415,8 @@ void CheckAlmostCapture( gentity_t *self, gentity_t *attacker ) { // if this player was carrying a flag if ( self->client->ps.powerups[PW_REDFLAG] || self->client->ps.powerups[PW_BLUEFLAG] || + self->client->ps.powerups[PW_GREENFLAG] || + self->client->ps.powerups[PW_YELLOWFLAG] || self->client->ps.powerups[PW_NEUTRALFLAG] ) { // get the goal flag this player should have been going for if ( g_gametype.integer == GT_CTF ) { @@ -631,6 +633,14 @@ void player_die( gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int Team_ReturnFlag( TEAM_BLUE ); self->client->ps.powerups[PW_BLUEFLAG] = 0; } + else if ( self->client->ps.powerups[PW_GREENFLAG] ) { // only happens in standard CTF + Team_ReturnFlag( TEAM_GREEN ); + self->client->ps.powerups[PW_GREENFLAG] = 0; + } + else if ( self->client->ps.powerups[PW_YELLOWFLAG] ) { // only happens in standard CTF + Team_ReturnFlag( TEAM_YELLOW ); + self->client->ps.powerups[PW_YELLOWFLAG] = 0; + } } TossClientItems( self ); diff --git a/engine/code/game/g_misc.c b/engine/code/game/g_misc.c index 8347c23e..aaf7da2a 100644 --- a/engine/code/game/g_misc.c +++ b/engine/code/game/g_misc.c @@ -479,6 +479,14 @@ static void PortalTouch( gentity_t *self, gentity_t *other, trace_t *trace) { Drop_Item( other, BG_FindItemForPowerup( PW_BLUEFLAG ), 0 ); other->client->ps.powerups[PW_BLUEFLAG] = 0; } + else if ( other->client->ps.powerups[PW_GREENFLAG] ) { // only happens in standard CTF + Drop_Item( other, BG_FindItemForPowerup( PW_GREENFLAG ), 0 ); + other->client->ps.powerups[PW_GREENFLAG] = 0; + } + else if ( other->client->ps.powerups[PW_YELLOWFLAG] ) { // only happens in standard CTF + Drop_Item( other, BG_FindItemForPowerup( PW_YELLOWFLAG ), 0 ); + other->client->ps.powerups[PW_YELLOWFLAG] = 0; + } // find the destination destination = NULL; diff --git a/engine/code/game/g_rankings.c b/engine/code/game/g_rankings.c index 4d8f6947..397b990e 100644 --- a/engine/code/game/g_rankings.c +++ b/engine/code/game/g_rankings.c @@ -898,7 +898,7 @@ void G_RankPickupPowerup( int self, int powerup ) } // ctf flags are treated as powerups - if( (powerup == PW_REDFLAG) || (powerup == PW_BLUEFLAG) ) + if( (powerup == PW_REDFLAG) || (powerup == PW_BLUEFLAG) || (powerup == PW_GREENFLAG) || (powerup == PW_YELLOWFLAG) ) { trap_RankReportInt( self, -1, QGR_KEY_FLAG_PICKUP, 1, 1 ); return; diff --git a/engine/code/game/g_target.c b/engine/code/game/g_target.c index f76235f0..7b9bcfc6 100644 --- a/engine/code/game/g_target.c +++ b/engine/code/game/g_target.c @@ -74,6 +74,10 @@ void Use_target_remove_powerups( gentity_t *ent, gentity_t *other, gentity_t *ac Team_ReturnFlag( TEAM_RED ); } else if( activator->client->ps.powerups[PW_BLUEFLAG] ) { Team_ReturnFlag( TEAM_BLUE ); + } else if( activator->client->ps.powerups[PW_GREENFLAG] ) { + Team_ReturnFlag( TEAM_GREEN ); + } else if( activator->client->ps.powerups[PW_YELLOWFLAG] ) { + Team_ReturnFlag( TEAM_YELLOW ); } else if( activator->client->ps.powerups[PW_NEUTRALFLAG] ) { Team_ReturnFlag( TEAM_FREE ); } diff --git a/engine/code/game/g_team.c b/engine/code/game/g_team.c index 7e1684c4..45f49eae 100644 --- a/engine/code/game/g_team.c +++ b/engine/code/game/g_team.c @@ -457,6 +457,12 @@ void Team_CheckDroppedItem( gentity_t *dropped ) { else if( dropped->item->giTag == PW_BLUEFLAG ) { Team_SetFlagStatus( TEAM_BLUE, FLAG_DROPPED ); } + else if( dropped->item->giTag == PW_GREENFLAG ) { + Team_SetFlagStatus( TEAM_GREEN, FLAG_DROPPED ); + } + else if( dropped->item->giTag == PW_YELLOWFLAG ) { + Team_SetFlagStatus( TEAM_YELLOW, FLAG_DROPPED ); + } else if( dropped->item->giTag == PW_NEUTRALFLAG ) { Team_SetFlagStatus( TEAM_FREE, FLAG_DROPPED ); } @@ -707,10 +713,17 @@ void Team_CheckHurtCarrier(gentity_t *targ, gentity_t *attacker) if (!targ->client || !attacker->client) return; - if (targ->client->sess.sessionTeam == TEAM_RED) + if (targ->client->sess.sessionTeam == TEAM_RED || targ->client->sess.sessionTeam == TEAM_GREEN || targ->client->sess.sessionTeam == TEAM_YELLOW) flag_pw = PW_BLUEFLAG; - else - flag_pw = PW_REDFLAG; + else if + (targ->client->sess.sessionTeam == TEAM_BLUE || targ->client->sess.sessionTeam == TEAM_GREEN || targ->client->sess.sessionTeam == TEAM_YELLOW) + flag_pw = PW_REDFLAG; + else if + (targ->client->sess.sessionTeam == TEAM_GREEN || targ->client->sess.sessionTeam == TEAM_RED || targ->client->sess.sessionTeam == TEAM_BLUE) + flag_pw = PW_YELLOWFLAG; + else if + (targ->client->sess.sessionTeam == TEAM_BLUE || targ->client->sess.sessionTeam == TEAM_RED || targ->client->sess.sessionTeam == TEAM_YELLOW) + flag_pw = PW_GREENFLAG; #ifdef MISSIONPACK if (g_gametype.integer == GT_1FCTF) { @@ -865,7 +878,13 @@ void Team_FreeEntity( gentity_t *ent ) { } else if( ent->item->giTag == PW_BLUEFLAG ) { Team_ReturnFlag( TEAM_BLUE ); + } + else if( ent->item->giTag == PW_GREENFLAG ) { + Team_ReturnFlag( TEAM_GREEN ); } + else if( ent->item->giTag == PW_YELLOWFLAG ) { + Team_ReturnFlag( TEAM_YELLOW ); + } else if( ent->item->giTag == PW_NEUTRALFLAG ) { Team_ReturnFlag( TEAM_FREE ); } @@ -889,6 +908,12 @@ void Team_DroppedFlagThink(gentity_t *ent) { else if( ent->item->giTag == PW_BLUEFLAG ) { team = TEAM_BLUE; } + else if( ent->item->giTag == PW_GREENFLAG ) { + team = TEAM_GREEN; + } + else if( ent->item->giTag == PW_YELLOWFLAG ) { + team = TEAM_YELLOW; + } else if( ent->item->giTag == PW_NEUTRALFLAG ) { team = TEAM_FREE; } @@ -915,12 +940,19 @@ int Team_TouchOurFlag( gentity_t *ent, gentity_t *other, int team ) { } else { #endif - if (cl->sess.sessionTeam == TEAM_RED) { + if (cl->sess.sessionTeam == TEAM_RED || cl->sess.sessionTeam == TEAM_GREEN || cl->sess.sessionTeam == TEAM_YELLOW) { enemy_flag = PW_BLUEFLAG; - } else { - enemy_flag = PW_REDFLAG; + } + else if (cl->sess.sessionTeam == TEAM_RED || cl->sess.sessionTeam == TEAM_BLUE || cl->sess.sessionTeam == TEAM_GREEN) { + enemy_flag = PW_YELLOWFLAG; } - + else if (cl->sess.sessionTeam == TEAM_BLUE || cl->sess.sessionTeam == TEAM_GREEN || cl->sess.sessionTeam == TEAM_YELLOW) { + enemy_flag = PW_REDFLAG; + } + else if (cl->sess.sessionTeam == TEAM_RED || cl->sess.sessionTeam == TEAM_BLUE || cl->sess.sessionTeam == TEAM_YELLOW) { + enemy_flag = PW_GREENFLAG; + } + if ( ent->flags & FL_DROPPED_ITEM ) { // hey, it's not home. return it by teleporting it back PrintMsg( NULL, "%s" S_COLOR_WHITE " returned the %s flag!\n", @@ -1043,8 +1075,12 @@ int Team_TouchEnemyFlag( gentity_t *ent, gentity_t *other, int team ) { if (team == TEAM_RED) cl->ps.powerups[PW_REDFLAG] = INT_MAX; // flags never expire - else + else if (team == TEAM_BLUE) cl->ps.powerups[PW_BLUEFLAG] = INT_MAX; // flags never expire + else if (team == TEAM_GREEN) + cl->ps.powerups[PW_GREENFLAG] = INT_MAX; // flags never expire + else if (team == TEAM_YELLOW) + cl->ps.powerups[PW_YELLOWFLAG] = INT_MAX; // flags never expire Team_SetFlagStatus( team, FLAG_TAKEN ); #ifdef MISSIONPACK diff --git a/engine/code/game/inv.h b/engine/code/game/inv.h index 3366d68a..fd8bb5ca 100644 --- a/engine/code/game/inv.h +++ b/engine/code/game/inv.h @@ -25,64 +25,66 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA //armor #define INVENTORY_ARMOR 1 //weapons -#define INVENTORY_GAUNTLET 4 +#define INVENTORY_GAUNTLET 4 #define INVENTORY_SHOTGUN 5 -#define INVENTORY_MACHINEGUN 6 -#define INVENTORY_GRENADELAUNCHER 7 -#define INVENTORY_ROCKETLAUNCHER 8 -#define INVENTORY_LIGHTNING 9 -#define INVENTORY_RAILGUN 10 -#define INVENTORY_PLASMAGUN 11 -#define INVENTORY_BFG10K 12 -#define INVENTORY_GRAPPLINGHOOK 13 -#define INVENTORY_NAILGUN 14 -#define INVENTORY_PROXLAUNCHER 15 -#define INVENTORY_CHAINGUN 16 -#define INVENTORY_FLAMETHROWER 17 // rally +#define INVENTORY_MACHINEGUN 6 +#define INVENTORY_GRENADELAUNCHER 7 +#define INVENTORY_ROCKETLAUNCHER 8 +#define INVENTORY_LIGHTNING 9 +#define INVENTORY_RAILGUN 10 +#define INVENTORY_PLASMAGUN 11 +#define INVENTORY_BFG10K 12 +#define INVENTORY_GRAPPLINGHOOK 13 +#define INVENTORY_NAILGUN 14 +#define INVENTORY_PROXLAUNCHER 15 +#define INVENTORY_CHAINGUN 16 +#define INVENTORY_FLAMETHROWER 17 // rally //ammo -#define INVENTORY_SHELLS 18 -#define INVENTORY_BULLETS 19 -#define INVENTORY_GRENADES 20 -#define INVENTORY_CELLS 21 -#define INVENTORY_LIGHTNINGAMMO 22 -#define INVENTORY_ROCKETS 23 -#define INVENTORY_SLUGS 24 -#define INVENTORY_BFGAMMO 25 -#define INVENTORY_FLAMETHROWERAMMO 26 // rally -#define INVENTORY_NAILS 27 -#define INVENTORY_MINES 28 -#define INVENTORY_BELT 29 +#define INVENTORY_SHELLS 18 +#define INVENTORY_BULLETS 19 +#define INVENTORY_GRENADES 20 +#define INVENTORY_CELLS 21 +#define INVENTORY_LIGHTNINGAMMO 22 +#define INVENTORY_ROCKETS 23 +#define INVENTORY_SLUGS 24 +#define INVENTORY_BFGAMMO 25 +#define INVENTORY_FLAMETHROWERAMMO 26 // rally +#define INVENTORY_NAILS 27 +#define INVENTORY_MINES 28 +#define INVENTORY_BELT 29 //powerups -#define INVENTORY_HEALTH 30 -#define INVENTORY_TELEPORTER 31 -#define INVENTORY_MEDKIT 32 -#define INVENTORY_TURBO 33 // rally -#define INVENTORY_KAMIKAZE 34 -#define INVENTORY_PORTAL 35 -#define INVENTORY_INVULNERABILITY 36 -#define INVENTORY_QUAD 37 -#define INVENTORY_ENVIRONMENTSUIT 38 -#define INVENTORY_HASTE 39 -#define INVENTORY_INVISIBILITY 40 -#define INVENTORY_REGEN 41 +#define INVENTORY_HEALTH 30 +#define INVENTORY_TELEPORTER 31 +#define INVENTORY_MEDKIT 32 +#define INVENTORY_TURBO 33 // rally +#define INVENTORY_KAMIKAZE 34 +#define INVENTORY_PORTAL 35 +#define INVENTORY_INVULNERABILITY 36 +#define INVENTORY_QUAD 37 +#define INVENTORY_ENVIRONMENTSUIT 38 +#define INVENTORY_HASTE 39 +#define INVENTORY_INVISIBILITY 40 +#define INVENTORY_REGEN 41 //#define INVENTORY_FLIGHT -#define INVENTORY_SHIELD 42 // rally +#define INVENTORY_SHIELD 42 // rally //missionpack -#define INVENTORY_SCOUT 43 -#define INVENTORY_GUARD 44 -#define INVENTORY_DOUBLER 45 -#define INVENTORY_AMMOREGEN 46 -#define INVENTORY_REDFLAG 47 -#define INVENTORY_BLUEFLAG 48 -#define INVENTORY_NEUTRALFLAG 49 -#define INVENTORY_REDCUBE 50 -#define INVENTORY_BLUECUBE 51 +#define INVENTORY_SCOUT 43 +#define INVENTORY_GUARD 44 +#define INVENTORY_DOUBLER 45 +#define INVENTORY_AMMOREGEN 46 +#define INVENTORY_REDFLAG 47 +#define INVENTORY_BLUEFLAG 48 +#define INVENTORY_GREENFLAG 49 +#define INVENTORY_YELLOWFLAG 50 +#define INVENTORY_NEUTRALFLAG 51 +#define INVENTORY_REDCUBE 52 +#define INVENTORY_BLUECUBE 53 //rally rearfire weapons -#define INVENTORY_RWP_SMOKE 52 -#define INVENTORY_RWP_OIL 53 -#define INVENTORY_RWP_MINE 54 -#define INVENTORY_RWP_FLAME 55 -#define INVENTORY_RWP_BIO 56 +#define INVENTORY_RWP_SMOKE 54 +#define INVENTORY_RWP_OIL 55 +#define INVENTORY_RWP_MINE 56 +#define INVENTORY_RWP_FLAME 57 +#define INVENTORY_RWP_BIO 58 //enemy stuff #define ENEMY_HORIZONTAL_DIST 200 #define ENEMY_HEIGHT 201 diff --git a/engine/code/qcommon/q_shared.h b/engine/code/qcommon/q_shared.h index df1e2c82..cbf65dc7 100644 --- a/engine/code/qcommon/q_shared.h +++ b/engine/code/qcommon/q_shared.h @@ -70,7 +70,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #define BASETA "missionpack" #ifndef PRODUCT_VERSION -#define PRODUCT_VERSION "v0.5 r605" +#define PRODUCT_VERSION "v0.5 r606" #endif diff --git a/q3rallycode.ppr b/q3rallycode.ppr index 17201623d2affabe68de7f9d56a6eec897a8b2dc..7f0c3fa4bd23759ba9cf900fafd546b96c62e066 100644 GIT binary patch delta 1278 zcmaKrL2DC16vr{eST-y+YNVh^N=q@=q3oO4*_}P?$)g4l^pupc-Hb`lZ0aW1la-zX zQK;+(@Dm7vS1*1c@dJ49&1`lYDfTwA@AuyP-+TZ4_4~@l_qDIjH|l%oIGM@f$E`cx z-fet;S$t}?oKc>f?5C~+apAT*H5wOB9=5MeT!+Of-jJ_lwp4(x@5RsNdX4L&o5_U*kk?JtYKI`5rzOZZ?zw*22d|FC=j55 zE`u;GufAoIz&t||0EUn2s`t%mZQ6^dp(6rb6s_frILAqFfg=8IGdq!*J*Y&cCU_yy81P`r z+B0WnN`QOj0bU2nQRvQfyYo=s{7OSmp9nyElw7~_4;QGltc(+pz_04~P zoTX6hD!=zCzgw&j*i%^*ARtjWOO&}={R$Qw{IxC+p;w9Iz48~aIPd~vJ)fdQ1PW4X rziXRZw^}|O5K)@$eEaq@tB@MnN*s>n(zQ*jG*JIVnMZML0%iXJqOx%9 delta 163 zcmeC}V*2ohaYLE_n{IM?Vs7f>gCf$K+XeRIaQmf}8tRo)l<;yHPHwDKoP4oPl%qT~ zu^>NBFM0CwdS4}&f>>Uzko*Fl%)C@vLtZZD#G=#^TSFZnGkS8Mx9sHO4ZH$K;^w9x biAH&04VYob`i;ztU`7}L%`h@I