diff options
-rw-r--r-- | assets/ui/assets/alien/build_pool_bar.tga | bin | 0 -> 9757 bytes | |||
-rw-r--r-- | assets/ui/assets/alien/nobp_flash.tga | bin | 0 -> 7649 bytes | |||
-rw-r--r-- | assets/ui/assets/human/build_pool_bar.tga | bin | 0 -> 8222 bytes | |||
-rw-r--r-- | assets/ui/assets/human/nobp_flash.tga | bin | 0 -> 8383 bytes | |||
-rw-r--r-- | assets/ui/assets/neutral/build_pool_bg.tga | bin | 0 -> 13458 bytes | |||
-rw-r--r-- | assets/ui/menudef.h | 5 | ||||
-rw-r--r-- | assets/ui/tremulous_common_hud.h | 113 | ||||
-rw-r--r-- | src/cgame/cg_draw.c | 111 | ||||
-rw-r--r-- | src/cgame/cg_local.h | 12 | ||||
-rw-r--r-- | src/cgame/cg_main.c | 5 | ||||
-rw-r--r-- | src/game/bg_public.h | 1 | ||||
-rw-r--r-- | src/game/edge_version.h | 3 | ||||
-rw-r--r-- | src/game/g_admin.c | 2 | ||||
-rw-r--r-- | src/game/g_buildable.c | 32 | ||||
-rw-r--r-- | src/game/g_cmds.c | 11 | ||||
-rw-r--r-- | src/game/g_local.h | 7 | ||||
-rw-r--r-- | src/game/g_main.c | 48 | ||||
-rw-r--r-- | src/game/g_missile.c | 3 | ||||
-rw-r--r-- | src/game/g_svcmds.c | 2 | ||||
-rw-r--r-- | src/game/tremulous.h | 60 |
20 files changed, 322 insertions, 93 deletions
diff --git a/assets/ui/assets/alien/build_pool_bar.tga b/assets/ui/assets/alien/build_pool_bar.tga Binary files differnew file mode 100644 index 0000000..38fad1a --- /dev/null +++ b/assets/ui/assets/alien/build_pool_bar.tga diff --git a/assets/ui/assets/alien/nobp_flash.tga b/assets/ui/assets/alien/nobp_flash.tga Binary files differnew file mode 100644 index 0000000..fa79fc0 --- /dev/null +++ b/assets/ui/assets/alien/nobp_flash.tga diff --git a/assets/ui/assets/human/build_pool_bar.tga b/assets/ui/assets/human/build_pool_bar.tga Binary files differnew file mode 100644 index 0000000..08b2b4d --- /dev/null +++ b/assets/ui/assets/human/build_pool_bar.tga diff --git a/assets/ui/assets/human/nobp_flash.tga b/assets/ui/assets/human/nobp_flash.tga Binary files differnew file mode 100644 index 0000000..387e070 --- /dev/null +++ b/assets/ui/assets/human/nobp_flash.tga diff --git a/assets/ui/assets/neutral/build_pool_bg.tga b/assets/ui/assets/neutral/build_pool_bg.tga Binary files differnew file mode 100644 index 0000000..458511b --- /dev/null +++ b/assets/ui/assets/neutral/build_pool_bg.tga diff --git a/assets/ui/menudef.h b/assets/ui/menudef.h index 3e7796f..9ab2c4f 100644 --- a/assets/ui/menudef.h +++ b/assets/ui/menudef.h @@ -196,6 +196,11 @@ enum CG_SPEEDOMETER, CG_PLAYER_CROSSHAIRNAMES, CG_STAGE_REPORT_TEXT, + CG_ALIEN_BUILD_POOL, + CG_HUMAN_BUILD_POOL, + CG_BUILD_POOL_BARS, + CG_ALIEN_NOBP_FLASH, + CG_HUMAN_NOBP_FLASH, CG_ALIENS_SCORE_LABEL, CG_HUMANS_SCORE_LABEL, CG_DEMO_PLAYBACK, diff --git a/assets/ui/tremulous_common_hud.h b/assets/ui/tremulous_common_hud.h index 57427b1..705bfd4 100644 --- a/assets/ui/tremulous_common_hud.h +++ b/assets/ui/tremulous_common_hud.h @@ -205,28 +205,93 @@ itemDef ownerdraw CG_FOLLOW } - itemDef - { - name "stage_add" - style WINDOW_STYLE_SHADER - rect 253 -1 140 35 - visible 1 - background "scripts/stage_add" - decoration - } - - itemDef - { - name "stagereport" - rect 200 2 240 25 - foreColor 1 1 1 1 - aspectBias ALIGN_CENTER - textalign ALIGN_CENTER - textvalign VALIGN_TOP - visible 1 - decoration - textScale .22 - textStyle ITEM_TEXTSTYLE_NORMAL - ownerdraw CG_STAGE_REPORT_TEXT - } +itemDef +{ + name "bpbackground" + style WINDOW_STYLE_SHADER + rect 160 -5 320 40 + aspectBias ALIGN_CENTER + visible 1 + foreColor 1 1 1 0.5 + background "ui/assets/neutral/build_pool_bg" + decoration +} +itemDef +{ + name "bpbars" + rect 160 -5 320 40 + aspectBias ALIGN_CENTER + visible 1 + foreColor 1 1 1 0.5 + decoration + ownerDraw CG_BUILD_POOL_BARS +} + +itemDef +{ + name "stagereport" + rect 200 11 240 25 + foreColor 1 1 1 1 + aspectBias ALIGN_CENTER + textalign ALIGN_CENTER + textvalign VALIGN_TOP + visible 1 + decoration + textScale .22 + textStyle ITEM_TEXTSTYLE_SHADOWED + ownerdraw CG_STAGE_REPORT_TEXT +} + +itemDef +{ + name "bpalien" + rect 194 8.5 20 25 + foreColor 1 0 0 1 + aspectBias ALIGN_CENTER + textalign ALIGN_RIGHT + textvalign VALIGN_TOP + visible 1 + decoration + textScale .4 + textStyle ITEM_TEXTSTYLE_NORMAL + ownerdraw CG_ALIEN_BUILD_POOL +} + + +itemDef +{ + name "bphuman" + rect 430 8.5 20 25 + foreColor 0.5 0.9 1 1 + aspectBias ALIGN_CENTER + textalign ALIGN_LEFT + textvalign VALIGN_TOP + visible 1 + decoration + textScale .4 + textStyle ITEM_TEXTSTYLE_NORMAL + ownerdraw CG_HUMAN_BUILD_POOL +} + +itemDef +{ + name "aliennobpflash" + rect 160 -5 320 40 + aspectBias ALIGN_CENTER + visible 1 + foreColor 1 1 1 1 + decoration + ownerDraw CG_ALIEN_NOBP_FLASH +} + +itemDef +{ + name "humannobpflash" + rect 160 -5 320 40 + aspectBias ALIGN_CENTER + visible 1 + foreColor 1 1 1 1 + decoration + ownerDraw CG_HUMAN_NOBP_FLASH +} diff --git a/src/cgame/cg_draw.c b/src/cgame/cg_draw.c index 11bc242..8e0b88f 100644 --- a/src/cgame/cg_draw.c +++ b/src/cgame/cg_draw.c @@ -1735,13 +1735,10 @@ static void CG_DrawStageReport( rectDef_t *rect, float text_x, float text_y, char s[ MAX_TOKEN_CHARS ]; float tx, ty; - if( cg.intermissionStarted ) - return; - if( cg.snap->ps.stats[ STAT_TEAM ] == TEAM_NONE ) // return; { - Com_sprintf( s, MAX_TOKEN_CHARS, " %d [ye2]ALIENS |STAGE| HUMANS[Ye] %d ", cgs.alienStage + 1 , cgs.humanStage + 1); + Com_sprintf( s, MAX_TOKEN_CHARS, " %d << ALIENS |STAGE| HUMANS >> %d ", cgs.alienStage + 1 , cgs.humanStage + 1); } @@ -1784,6 +1781,88 @@ static void CG_DrawStageReport( rectDef_t *rect, float text_x, float text_y, /* ================== +CG_DrawBuildPoolReport +================== +*/ +static void CG_DrawBuildPoolReport( rectDef_t *rect, float text_x, float text_y, + vec4_t color, float scale, int textalign, int textvalign, int textStyle, qboolean humans ) +{ + char out[ 20 ]; + float tx, ty; + + Com_sprintf( out, sizeof( out ), "%d", ( humans ? cgs.humanBuildPool : cgs.alienBuildPool ) ); + + CG_AlignText( rect, out, scale, 0.0f, 0.0f, textalign, textvalign, &tx, &ty ); + UI_Text_Paint( text_x + tx, text_y + ty, scale, color, out, 0, 0, textStyle ); +} + +/* +================== +CG_DrawBuildPoolBars +================== +*/ +static void CG_DrawBuildPoolBars( rectDef_t *rect, vec4_t color ) +{ + float abp, hbp, f; + float x, y, w, h; + + abp = (float)cgs.alienBuildPool / (float)cgs.alienBuildPoolMax; + hbp = (float)cgs.humanBuildPool / (float)cgs.humanBuildPoolMax; + + f = ( abp - hbp + 1.0f ) / 2.0f; + f = ( f < 0.0f ) ? 0.0f : ( f > 1.0f ) ? 1.0f : f; + f = f * 0.55f + 0.225f; + + trap_R_SetColor( color ); + + x = rect->x; + y = rect->y; + w = rect->w * f; + h = rect->h; + CG_AdjustFrom640( &x, &y, &w, &h ); + trap_R_DrawStretchPic( x, y, w, h, 0, 0, f, 1, cgs.media.alienBuildPoolBar ); + + x = rect->x + rect->w * f; + y = rect->y; + w = rect->w * ( 1.0f - f ); + h = rect->h; + CG_AdjustFrom640( &x, &y, &w, &h ); + trap_R_DrawStretchPic( x, y, w, h, f, 0, 1, 1, cgs.media.humanBuildPoolBar ); + + trap_R_SetColor( NULL ); +} + +/* +================== +CG_DrawNoBPFlash +================== +*/ +#define NOBP_FLASH_TIME 3000 +static void CG_DrawNoBPFlash( rectDef_t *rect, vec4_t color, qboolean humans ) +{ + vec4_t mcolor; + int flashTime; + + Vector4Copy( color, mcolor ); + flashTime = ( humans ? cgs.humanNoBPFlashTime : cgs.alienNoBPFlashTime ); + + if( flashTime == -1 ) + return; + + mcolor[ 3 ] *= 1.0f - ( (float)( cg.time - flashTime ) / NOBP_FLASH_TIME ); + + if( mcolor[ 3 ] <= 0 ) + return; + + trap_R_SetColor( mcolor ); + CG_DrawPic( rect->x, rect->y, rect->w, rect->h, + ( humans ? cgs.media.humanNoBPFlash : + cgs.media.alienNoBPFlash ) ); + trap_R_SetColor( NULL ); +} + +/* +================== CG_DrawFPS ================== */ @@ -3143,6 +3222,21 @@ void CG_OwnerDraw( float x, float y, float w, float h, float text_x, case CG_STAGE_REPORT_TEXT: CG_DrawStageReport( &rect, text_x, text_y, foreColor, scale, textalign, textvalign, textStyle ); break; + case CG_ALIEN_BUILD_POOL: + CG_DrawBuildPoolReport( &rect, text_x, text_y, foreColor, scale, textalign, textvalign, textStyle, qfalse ); + break; + case CG_HUMAN_BUILD_POOL: + CG_DrawBuildPoolReport( &rect, text_x, text_y, foreColor, scale, textalign, textvalign, textStyle, qtrue ); + break; + case CG_BUILD_POOL_BARS: + CG_DrawBuildPoolBars( &rect, foreColor ); + break; + case CG_ALIEN_NOBP_FLASH: + CG_DrawNoBPFlash( &rect, foreColor, qfalse ); + break; + case CG_HUMAN_NOBP_FLASH: + CG_DrawNoBPFlash( &rect, foreColor, qtrue ); + break; case CG_ALIENS_SCORE_LABEL: CG_DrawTeamLabel( &rect, TEAM_ALIENS, text_x, text_y, foreColor, scale, textalign, textvalign, textStyle ); break; @@ -3765,6 +3859,15 @@ static void CG_Draw2D( void ) if( cg_draw2D.integer == 0 ) return; + // this has to be here, CG_ConfigStringModified isn't reliable + sscanf( CG_ConfigString( CS_BUILD_POOLS ), "%d %d %d %d %d %d", + &cgs.alienBuildPool, + &cgs.alienBuildPoolMax, + &cgs.alienNoBPFlashTime, + &cgs.humanBuildPool, + &cgs.humanBuildPoolMax, + &cgs.humanNoBPFlashTime ); + if( cg.snap->ps.pm_type == PM_INTERMISSION ) { CG_DrawIntermission( ); diff --git a/src/cgame/cg_local.h b/src/cgame/cg_local.h index 7d4bd3d..ab3e9e6 100644 --- a/src/cgame/cg_local.h +++ b/src/cgame/cg_local.h @@ -1341,6 +1341,11 @@ typedef struct qhandle_t humanWoundsBleedPS; qhandle_t alienWoundsBleedPS; + qhandle_t alienBuildPoolBar; + qhandle_t humanBuildPoolBar; + qhandle_t alienNoBPFlash; + qhandle_t humanNoBPFlash; + qhandle_t lightningBeam; qhandle_t lightningImpactPS; } cgMedia_t; @@ -1447,6 +1452,13 @@ typedef struct voice_t *voices; clientList_t ignoreList; + + int alienBuildPool; + int alienBuildPoolMax; + int alienNoBPFlashTime; + int humanBuildPool; + int humanBuildPoolMax; + int humanNoBPFlashTime; } cgs_t; typedef struct diff --git a/src/cgame/cg_main.c b/src/cgame/cg_main.c index 366a6a3..7ed3bfc 100644 --- a/src/cgame/cg_main.c +++ b/src/cgame/cg_main.c @@ -830,6 +830,11 @@ static void CG_RegisterGraphics( void ) cgs.media.upgradeClassIconShader = trap_R_RegisterShader( "icons/icona_upgrade.tga" ); + cgs.media.alienBuildPoolBar = trap_R_RegisterShader( "ui/assets/alien/build_pool_bar.tga" ); + cgs.media.humanBuildPoolBar = trap_R_RegisterShader( "ui/assets/human/build_pool_bar.tga" ); + cgs.media.alienNoBPFlash = trap_R_RegisterShader( "ui/assets/alien/nobp_flash.tga" ); + cgs.media.humanNoBPFlash = trap_R_RegisterShader( "ui/assets/human/nobp_flash.tga" ); + cgs.media.lightningBeam = trap_R_RegisterShader( "gfx/lightning/beam" ); cgs.media.disconnectPS = CG_RegisterParticleSystem( "disconnectPS" ); diff --git a/src/game/bg_public.h b/src/game/bg_public.h index 18b0d2e..bbf064e 100644 --- a/src/game/bg_public.h +++ b/src/game/bg_public.h @@ -77,6 +77,7 @@ enum CS_CLIENTS_READY, CS_ALIEN_STAGES, CS_HUMAN_STAGES, + CS_BUILD_POOLS, CS_MODELS, CS_SOUNDS = CS_MODELS + MAX_MODELS, CS_SHADERS = CS_SOUNDS + MAX_SOUNDS, diff --git a/src/game/edge_version.h b/src/game/edge_version.h new file mode 100644 index 0000000..d5e3ab5 --- /dev/null +++ b/src/game/edge_version.h @@ -0,0 +1,3 @@ +#ifndef EDGE_MOD_VERSION +#define EDGE_MOD_VERSION "7.5e" +#endif diff --git a/src/game/g_admin.c b/src/game/g_admin.c index 5d11ac4..aa07e6f 100644 --- a/src/game/g_admin.c +++ b/src/game/g_admin.c @@ -3859,7 +3859,7 @@ void G_admin_add_score( gentity_t *ent, int score ) { a = ent->client->pers.admin; a->level = n->level; admin_log( va( "^7%d (%s^7) \"%s" S_COLOR_WHITE "\"", a->level, a->guid, a->name ) ); - AP( va("print \"^3setlevel: ^7%s^7 was given level %d admin rights (^7%s^7) through score gained\\\n\"", + AP( va("print \"^3setlevel: ^7%s^7 was given level %d admin rights (^7%s^7) through score gained\n\"", a->name, a->level, n->name ) ); // admin_writeconfig(); } diff --git a/src/game/g_buildable.c b/src/game/g_buildable.c index 841038f..d132890 100644 --- a/src/game/g_buildable.c +++ b/src/game/g_buildable.c @@ -398,30 +398,20 @@ Note: 'pos' can be NULL, in this case return the overall BP of the team. int G_GetBuildPoints( const vec3_t pos, team_t team ) { int value = 0; - - if( !G_Overmind( ) && team == TEAM_ALIENS ) - { - return 0; - } - else if( team == TEAM_ALIENS ) - { + switch(team) { + case TEAM_ALIENS: + if ( !G_Overmind( ) ) return 0; value = level.alienBuildPoints; - } - else if( !G_Reactor( ) && team == TEAM_HUMANS ) - { - return 0; - } - else if( team == TEAM_HUMANS ) - { + break; + case TEAM_HUMANS: + if ( !G_Reactor( ) ) return 0; value = level.humanBuildPoints; - } - else - return 0; - - if( ( value > 0 ) && ( G_TimeTilSuddenDeath( ) <= 0 ) ) + break; + default: return 0; - else - return value; + } + if( ( value > 0 ) && ( G_TimeTilSuddenDeath( ) <= 0 ) ) return 0; + return value; } /* diff --git a/src/game/g_cmds.c b/src/game/g_cmds.c index 39a87b9..8595b60 100644 --- a/src/game/g_cmds.c +++ b/src/game/g_cmds.c @@ -3820,19 +3820,18 @@ void G_UnEscapeString( char *in, char *out, int len ) void Cmd_MyScore_f( gentity_t *ent ) { - g_admin_level_t *n; + g_admin_level_t *l,*n; if ( !ent || !ent->client->pers.admin ) { ADMP( "This command is only available for registered players.\n" ); return; } - if ( n = G_admin_level_next( G_admin_level( ent->client->pers.admin->level ) ) ) { + l = G_admin_find_level_for_score( ent->client->pers.admin->score ); + if ( n = G_admin_level_next( G_admin_level( l->level ) ) ) { ADMP( va( "^7Level %d (%s^7) total score earned: %d next level: %d\n", - ent->client->pers.admin->level, G_admin_level( ent->client->pers.admin->level )->name, - ent->client->pers.admin->score, n->score ) ); + l->level, G_admin_level( l->level )->name, ent->client->pers.admin->score, n->score ) ); } else { ADMP( va( "^7Level %d (%s^7) total score earned: %d (max level)\n", - ent->client->pers.admin->level, G_admin_level( ent->client->pers.admin->level )->name, - ent->client->pers.admin->score ) ); + l->level, G_admin_level( l->level )->name, ent->client->pers.admin->score ) ); } } diff --git a/src/game/g_local.h b/src/game/g_local.h index 1b120a8..eb5f37e 100644 --- a/src/game/g_local.h +++ b/src/game/g_local.h @@ -713,6 +713,11 @@ typedef struct buildLog_t buildLog[ MAX_BUILDLOG ]; int buildId; int numBuildLogs; + + qboolean alienNoBPFlash; + qboolean humanNoBPFlash; + int alienNoBPFlashTime; + int humanNoBPFlashTime; } level_locals_t; #define CMD_CHEAT 0x0001 @@ -1300,6 +1305,8 @@ extern vmCvar_t g_AutoLevelMinTeamSize; extern vmCvar_t g_RageQuitScorePenalty; extern vmCvar_t g_DretchTurretDamage; extern vmCvar_t g_DretchBuildingDamage; +extern vmCvar_t g_OwnTeamBPFactor; +extern vmCvar_t g_EnemyTeamBPFactor; void trap_Print( const char *fmt ); void trap_Error( const char *fmt ); diff --git a/src/game/g_main.c b/src/game/g_main.c index 7011827..57b4af4 100644 --- a/src/game/g_main.c +++ b/src/game/g_main.c @@ -26,9 +26,12 @@ TREMULOUS EDGE MOD SRC FILE =========================================================================== */ #include "g_local.h" +#include "edge_version.h" #define G_MOD_VERSION "Aardvark 0.5x" SVN_VERSION -#define EDGE_MOD_VERSION "7.0.x" +#ifndef EDGE_MOD_VERSION +#define EDGE_MOD_VERSION "7.5.x" +#endif level_locals_t level; typedef struct @@ -200,6 +203,8 @@ vmCvar_t g_AutoLevelMinTeamSize; vmCvar_t g_RageQuitScorePenalty; vmCvar_t g_DretchTurretDamage; vmCvar_t g_DretchBuildingDamage; +vmCvar_t g_OwnTeamBPFactor; +vmCvar_t g_EnemyTeamBPFactor; // copy cvars that can be set in worldspawn so they can be restored later static char cv_gravity[ MAX_CVAR_VALUE_STRING ]; @@ -369,7 +374,9 @@ static cvarTable_t gameCvarTable[ ] = { &g_AutoLevelMinTeamSize, "g_AutoLevelMinTeamSize", "3", CVAR_ARCHIVE, 0, qfalse }, { &g_RageQuitScorePenalty, "g_RageQuitScorePenalty", "2000", CVAR_ARCHIVE, 0, qfalse }, { &g_DretchTurretDamage, "g_DretchTurretDamage", "1", CVAR_ARCHIVE, 0, qfalse }, - { &g_DretchBuildingDamage, "g_DretchBuildingDamage", "0.5", CVAR_ARCHIVE, 0, qfalse } + { &g_DretchBuildingDamage, "g_DretchBuildingDamage", "0.5", CVAR_ARCHIVE, 0, qfalse }, + { &g_OwnTeamBPFactor, "g_OwnTeamBPFactor", "1.0", CVAR_ARCHIVE, 0, qfalse }, + { &g_EnemyTeamBPFactor, "g_EnemyTeamBPFactor", "0.0", CVAR_ARCHIVE, 0, qfalse } }; static int gameCvarTableSize = sizeof( gameCvarTable ) / sizeof( gameCvarTable[ 0 ] ); void G_InitGame( int levelTime, int randomSeed, int restart ); @@ -646,6 +653,7 @@ void G_InitGame( int levelTime, int randomSeed, int restart ) level.humanStage2Time = level.humanStage3Time = level.humanStage4Time = level.humanStage5Time = level.startTime; level.snd_fry = G_SoundIndex( "sound/misc/fry.wav" ); // FIXME standing in lava / slime level.humanRewardKills = level.alienRewardKills = 0.0f; + level.alienNoBPFlashTime = level.humanNoBPFlashTime = -1; trap_Cvar_Set( "g_version", G_MOD_VERSION ); trap_Cvar_Set( "edge_version", EDGE_MOD_VERSION ); if( g_logFile.string[ 0 ] ) @@ -1087,6 +1095,7 @@ void G_SpawnClients( team_t team ) if( g_teamForceBalance.integer == 2 && !level.humanTeamLocked && !level.alienTeamLocked && + level.numHumanSpawns > 0 && level.numLiveAlienClients-level.numHumanClients > 0 ) numSpawns = -1; } @@ -1097,6 +1106,7 @@ void G_SpawnClients( team_t team ) if( g_teamForceBalance.integer == 2 && !level.humanTeamLocked && !level.alienTeamLocked && + level.numAlienSpawns > 0 && level.numLiveHumanClients-level.numAlienClients > 0 ) numSpawns = -1; } @@ -1389,12 +1399,33 @@ void G_CalculateBuildPoints( void ) hFixed = h_refineries * g_humanRefineryBuildPoints.value; // LimitSum( g_maxFixedBuildPoints.value, 1.0f, &aFixed, &hFixed ); - level.alienExtraBuildPoints = aVar + aFixed; - level.humanExtraBuildPoints = hVar + hFixed; + level.alienExtraBuildPoints = g_OwnTeamBPFactor.value * (aVar + aFixed) + g_EnemyTeamBPFactor.value * (hVar + hFixed); + level.humanExtraBuildPoints = g_OwnTeamBPFactor.value * (hVar + hFixed) + g_EnemyTeamBPFactor.value * (aVar + aFixed); level.humanBuildPoints += level.humanExtraBuildPoints; level.alienBuildPoints += level.alienExtraBuildPoints; } + + if( level.alienNoBPFlash ) + { + level.alienNoBPFlash = qfalse; + level.alienNoBPFlashTime = level.time; + } + + if( level.humanNoBPFlash ) + { + level.humanNoBPFlash = qfalse; + level.humanNoBPFlashTime = level.time; + } + + trap_SetConfigstring( CS_BUILD_POOLS, va( "%d %d %d %d %d %d", + g_alienBuildPoints.integer + level.alienExtraBuildPoints, + g_alienBuildPoints.integer, + level.alienNoBPFlashTime, + g_humanBuildPoints.integer + level.humanExtraBuildPoints, + g_humanBuildPoints.integer, + level.humanNoBPFlashTime ) ); + //zero bp not allowed // if( level.humanBuildPoints < 0 ) // level.humanBuildPoints = 0; @@ -1465,7 +1496,14 @@ void G_CheckForNegativeBuildPoints( void ) { surviveprobcur = pow( surviveprob1min, thinkduration / 60000.0f ); if( surviveprobcur * RAND_MAX < rand( ) ) + { G_Suicide( ent, MOD_NOBP ); + + if( ent->buildableTeam == TEAM_ALIENS ) + level.alienNoBPFlash = qtrue; + else + level.humanNoBPFlash = qtrue; + } } } } @@ -2614,7 +2652,7 @@ void G_ArmageddonStep( void ) if (thresholdOther > 0.0f) if (random() < thresholdOther) { ent->health = -999; ent->enemy = &g_entities[ ENTITYNUM_WORLD ]; - ent->die( ent, ent->enemy, ent->enemy, 999, MOD_UNKNOWN ); + ent->die( ent, ent->enemy, ent->enemy, 999, MOD_HDOG ); } break; } diff --git a/src/game/g_missile.c b/src/game/g_missile.c index 2056f79..ab0156b 100644 --- a/src/game/g_missile.c +++ b/src/game/g_missile.c @@ -206,13 +206,14 @@ void G_MissileImpact( gentity_t *ent, trace_t *trace ) { if( other->client ) { + /* NOTE: Locking enemies completely in place disabled for now. if( ( other->client->ps.stats[ STAT_STATE ] & SS_SLOWLOCKED ) && ( other->s.weapon < WP_ALEVEL3 || other->s.weapon == WP_ABUILD ) ) { other->client->ps.stats[ STAT_STATE ] |= SS_BLOBLOCKED; other->client->lastLockTime = level.time; } - else if( other->s.weapon >= WP_ALEVEL3 && other->s.weapon < WP_BLASTER + else */if( other->s.weapon >= WP_ALEVEL3 && other->s.weapon < WP_BLASTER && other->client->blobs <= 3 ) { other->client->lastSlowTime = level.time; diff --git a/src/game/g_svcmds.c b/src/game/g_svcmds.c index 775b4ed..a54a9ad 100644 --- a/src/game/g_svcmds.c +++ b/src/game/g_svcmds.c @@ -610,7 +610,7 @@ static void Svcmd_Armageddon_f( void ) { ent->health = -999; ent->enemy = &g_entities[ ENTITYNUM_WORLD ]; - ent->die( ent, ent->enemy, ent->enemy, 999, MOD_UNKNOWN ); + ent->die( ent, ent->enemy, ent->enemy, 999, MOD_HDOG ); } } diff --git a/src/game/tremulous.h b/src/game/tremulous.h index ad4a688..3b9c8bc 100644 --- a/src/game/tremulous.h +++ b/src/game/tremulous.h @@ -79,7 +79,7 @@ TREMULOUS EDGE MOD SRC FILE #define ALIEN_SPAWN_REPEAT_TIME 11000 #define ALIEN_REGEN_DAMAGE_TIME 2000 //msec since damage that regen starts again #define ALIEN_REGEN_NOCREEP_MOD (1.0f/3.0f) //regen off creep -#define ALIEN_MAX_FRAGS 18 +#define ALIEN_MAX_FRAGS 9 #define ALIEN_MAX_CREDITS (ALIEN_MAX_FRAGS*ALIEN_CREDITS_PER_KILL) #define ALIEN_CREDITS_PER_KILL 400 #define ALIEN_TK_SUICIDE_PENALTY 150 @@ -345,7 +345,7 @@ TREMULOUS EDGE MOD SRC FILE #define STAMINA_BLACKOUT_LEVEL -800 #define HUMAN_SPAWN_REPEAT_TIME 11000 #define HUMAN_REGEN_DAMAGE_TIME 2000 //msec since damage before dcc repairs -#define HUMAN_MAX_CREDITS 4000 +#define HUMAN_MAX_CREDITS 2000 #define HUMAN_TK_SUICIDE_PENALTY 150 #define HUMAN_BUILDER_SCOREINC 50 // builders receive this many points every 10 seconds #define ALIEN_BUILDER_SCOREINC AVM(100) // builders receive this many points every 10 seconds @@ -511,7 +511,7 @@ TREMULOUS EDGE MOD SRC FILE #define PRIFLE_DMG HDM(9) #define PRIFLE_SPEED 1200 #define PRIFLE_SIZE 5 -#define PRIFLE_SECONDARY_SPEED 800 +#define PRIFLE_SECONDARY_SPEED 900 #define PRIFLE_SECONDARY_REPEAT 400 #define LIGHTNING_PRICE 500 @@ -547,8 +547,8 @@ TREMULOUS EDGE MOD SRC FILE #define FLAMER_SECONDARY_REPEAT 200 #define ROCKETL_PRICE 700 -#define ROCKETL_AMMO 24 -#define ROCKETL_CLIPS 0 +#define ROCKETL_AMMO 8 +#define ROCKETL_CLIPS 3 #define ROCKETL_RELOAD 0 #define ROCKETL_REPEAT 1000 #define ROCKETL_K_SCALE 1.0f @@ -673,20 +673,20 @@ TREMULOUS EDGE MOD SRC FILE #define ACIDTUBE_BP 6 #define ACIDTUBE_BT 8000 -#define ACIDTUBE_HEALTH ABHM(125) +#define ACIDTUBE_HEALTH ABHM(130) #define ACIDTUBE_REGEN 10 #define ACIDTUBE_SPLASHDAMAGE 50 #define ACIDTUBE_SPLASHRADIUS 100 #define ACIDTUBE_CREEPSIZE 30 #define ACIDTUBE_DAMAGE 8 #define ACIDTUBE_RANGE 300.0f -#define ACIDTUBE_REPEAT 300 +#define ACIDTUBE_REPEAT 280 #define ACIDTUBE_REPEAT_ANIM 2000 #define ACIDTUBE_VALUE ABVM(ACIDTUBE_BP) #define HIVE_BP 8 #define HIVE_BT 13000 -#define HIVE_HEALTH ABHM(125) +#define HIVE_HEALTH ABHM(130) #define HIVE_REGEN 10 #define HIVE_SPLASHDAMAGE 30 #define HIVE_SPLASHRADIUS 200 @@ -696,7 +696,7 @@ TREMULOUS EDGE MOD SRC FILE #define HIVE_REPEAT 3000 #define HIVE_K_SCALE 1.0f #define HIVE_DMG 80 -#define HIVE_SPEED 320.0f +#define HIVE_SPEED 340.0f #define HIVE_DIR_CHANGE_PERIOD 500 #define HIVE_VALUE ABVM(HIVE_BP) @@ -728,7 +728,7 @@ TREMULOUS EDGE MOD SRC FILE #define OVERMIND_VALUE ABVM(50) #define PANZER_SMALL_BP 1 -#define PANZER_SMALL_BT 6000 +#define PANZER_SMALL_BT 3000 #define PANZER_SMALL_HEALTH ABHM(100) #define PANZER_SMALL_REGEN 1 #define PANZER_SMALL_SPLASHDAMAGE 1 @@ -737,7 +737,7 @@ TREMULOUS EDGE MOD SRC FILE #define PANZER_SMALL_VALUE ABVM(PANZER_SMALL_BP) #define PANZER_MEDIUM_BP 2 -#define PANZER_MEDIUM_BT 15000 +#define PANZER_MEDIUM_BT 9000 #define PANZER_MEDIUM_HEALTH ABHM(250) #define PANZER_MEDIUM_REGEN 1 #define PANZER_MEDIUM_SPLASHDAMAGE 5 @@ -746,7 +746,7 @@ TREMULOUS EDGE MOD SRC FILE #define PANZER_MEDIUM_VALUE ABVM(PANZER_MEDIUM_BP) #define PANZER_LARGE_BP 5 -#define PANZER_LARGE_BT 20000 +#define PANZER_LARGE_BT 18000 #define PANZER_LARGE_HEALTH ABHM(450) #define PANZER_LARGE_REGEN 1 #define PANZER_LARGE_SPLASHDAMAGE 10 @@ -953,7 +953,7 @@ TREMULOUS EDGE MOD SRC FILE #define MGTURRET2_BT 20000 #define MGTURRET2_HEALTH HBHM(300) #define MGTURRET2_SPLASHDAMAGE 1 -#define MGTURRET2_SPLASHRADIUS 170 +#define MGTURRET2_SPLASHRADIUS 120 #define MGTURRET2_ANGULARSPEED 12 #define MGTURRET2_ACCURACY_TO_FIRE 0 #define MGTURRET2_VERTICALCAP 40 // +/- maximum pitch @@ -961,8 +961,8 @@ TREMULOUS EDGE MOD SRC FILE #define MGTURRET2_K_SCALE 1.0f #define MGTURRET2_RANGE 50.0f #define MGTURRET2_SPREAD 300 -#define MGTURRET2_DMG HDM(16) -#define MGTURRET2_SPINUP_TIME 600 // time between target sighted and fire +#define MGTURRET2_DMG HDM(18) +#define MGTURRET2_SPINUP_TIME 550 // time between target sighted and fire #define MGTURRET2_VALUE HBVM(MGTURRET2_BP) #define FLAMER2_LIFETIME 350.0f @@ -974,7 +974,7 @@ TREMULOUS EDGE MOD SRC FILE #define TESLAGEN_REPEAT 250 #define TESLAGEN_K_SCALE 4.0f #define TESLAGEN_RANGE 225 -#define TESLAGEN_DMG HDM(11) +#define TESLAGEN_DMG HDM(12) #define TESLAGEN_VALUE HBVM(TESLAGEN_BP) #define DC_BP 15 @@ -1016,36 +1016,36 @@ TREMULOUS EDGE MOD SRC FILE //EDGE BUILDINGS HUMANS #define CONTAINER_SMALL_BP 1 -#define CONTAINER_SMALL_BT 5000 +#define CONTAINER_SMALL_BT 3000 #define CONTAINER_SMALL_HEALTH HBHM(60) #define CONTAINER_SMALL_SPLASHDAMAGE 1 #define CONTAINER_SMALL_SPLASHRADIUS 10 #define CONTAINER_SMALL_VALUE HBVM(CONTAINER_SMALL_BP) #define CONTAINER_MEDIUM_BP 2 -#define CONTAINER_MEDIUM_BT 14000 +#define CONTAINER_MEDIUM_BT 9000 #define CONTAINER_MEDIUM_HEALTH HBHM(250) #define CONTAINER_MEDIUM_SPLASHDAMAGE 5 #define CONTAINER_MEDIUM_SPLASHRADIUS 40 #define CONTAINER_MEDIUM_VALUE HBVM(CONTAINER_MEDIUM_BP) #define CONTAINER_LARGE_BP 5 -#define CONTAINER_LARGE_BT 20000 +#define CONTAINER_LARGE_BT 18000 #define CONTAINER_LARGE_HEALTH HBHM(450) #define CONTAINER_LARGE_SPLASHDAMAGE 10 #define CONTAINER_LARGE_SPLASHRADIUS 70 #define CONTAINER_LARGE_VALUE HBVM(CONTAINER_LARGE_BP) -#define PLATE_SMALL_BP 1 +#define PLATE_SMALL_BP 2 #define PLATE_SMALL_BT 4000 -#define PLATE_SMALL_HEALTH HBHM(25) +#define PLATE_SMALL_HEALTH HBHM(100) #define PLATE_SMALL_SPLASHDAMAGE 5 #define PLATE_SMALL_SPLASHRADIUS 10 #define PLATE_SMALL_VALUE HBVM(PLATE_SMALL_BP) -#define PLATE_LARGE_BP 3 +#define PLATE_LARGE_BP 4 #define PLATE_LARGE_BT 13000 -#define PLATE_LARGE_HEALTH HBHM(100) +#define PLATE_LARGE_HEALTH HBHM(200) #define PLATE_LARGE_SPLASHDAMAGE 5 #define PLATE_LARGE_SPLASHRADIUS 100 #define PLATE_LARGE_VALUE HBVM(PLATE_LARGE_BP) @@ -1065,21 +1065,21 @@ TREMULOUS EDGE MOD SRC FILE #define FENCE_ROD_VALUE HBVM(FENCE_ROD_BP) #define BARRIER_LINE_BP 2 -#define BARRIER_LINE_BT 12000 -#define BARRIER_LINE_HEALTH HBHM(300) +#define BARRIER_LINE_BT 10000 +#define BARRIER_LINE_HEALTH HBHM(350) #define BARRIER_LINE_SPLASHDAMAGE 10 #define BARRIER_LINE_SPLASHRADIUS 50 #define BARRIER_LINE_VALUE HBVM(BARRIER_LINE_BP) #define BARRIER_CORNER_BP 2 -#define BARRIER_CORNER_BT 12000 -#define BARRIER_CORNER_HEALTH HBHM(300) +#define BARRIER_CORNER_BT 10000 +#define BARRIER_CORNER_HEALTH HBHM(350) #define BARRIER_CORNER_SPLASHDAMAGE 10 #define BARRIER_CORNER_SPLASHRADIUS 50 #define BARRIER_CORNER_VALUE HBVM(BARRIER_CORNER_BP) #define BARRIER_POINT_BP 3 -#define BARRIER_POINT_BT 12000 +#define BARRIER_POINT_BT 10000 #define BARRIER_POINT_HEALTH HBHM(350) #define BARRIER_POINT_SPLASHDAMAGE 10 #define BARRIER_POINT_SPLASHRADIUS 50 @@ -1095,14 +1095,14 @@ TREMULOUS EDGE MOD SRC FILE #define SHIELD_VALUE HBVM(SHIELD_BP) #define LADDER_BP 5 -#define LADDER_BT 8000 +#define LADDER_BT 4000 #define LADDER_HEALTH HBHM(155) #define LADDER_SPLASHDAMAGE 15 #define LADDER_SPLASHRADIUS 250 #define LADDER_VALUE HBVM(LADDER_BP) #define TEFLON_FOIL_BP 1 -#define TEFLON_FOIL_BT 2000 +#define TEFLON_FOIL_BT 1500 #define TEFLON_FOIL_HEALTH HBHM(50) #define TEFLON_FOIL_SPLASHDAMAGE 1 #define TEFLON_FOIL_SPLASHRADIUS 1 |