summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--assets/ui/assets/alien/build_pool_bar.tgabin0 -> 9757 bytes
-rw-r--r--assets/ui/assets/alien/nobp_flash.tgabin0 -> 7649 bytes
-rw-r--r--assets/ui/assets/human/build_pool_bar.tgabin0 -> 8222 bytes
-rw-r--r--assets/ui/assets/human/nobp_flash.tgabin0 -> 8383 bytes
-rw-r--r--assets/ui/assets/neutral/build_pool_bg.tgabin0 -> 13458 bytes
-rw-r--r--assets/ui/menudef.h5
-rw-r--r--assets/ui/tremulous_common_hud.h113
-rw-r--r--src/cgame/cg_draw.c111
-rw-r--r--src/cgame/cg_local.h12
-rw-r--r--src/cgame/cg_main.c5
-rw-r--r--src/game/bg_public.h1
-rw-r--r--src/game/edge_version.h3
-rw-r--r--src/game/g_admin.c2
-rw-r--r--src/game/g_buildable.c32
-rw-r--r--src/game/g_cmds.c11
-rw-r--r--src/game/g_local.h7
-rw-r--r--src/game/g_main.c48
-rw-r--r--src/game/g_missile.c3
-rw-r--r--src/game/g_svcmds.c2
-rw-r--r--src/game/tremulous.h60
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
new file mode 100644
index 0000000..38fad1a
--- /dev/null
+++ b/assets/ui/assets/alien/build_pool_bar.tga
Binary files differ
diff --git a/assets/ui/assets/alien/nobp_flash.tga b/assets/ui/assets/alien/nobp_flash.tga
new file mode 100644
index 0000000..fa79fc0
--- /dev/null
+++ b/assets/ui/assets/alien/nobp_flash.tga
Binary files differ
diff --git a/assets/ui/assets/human/build_pool_bar.tga b/assets/ui/assets/human/build_pool_bar.tga
new file mode 100644
index 0000000..08b2b4d
--- /dev/null
+++ b/assets/ui/assets/human/build_pool_bar.tga
Binary files differ
diff --git a/assets/ui/assets/human/nobp_flash.tga b/assets/ui/assets/human/nobp_flash.tga
new file mode 100644
index 0000000..387e070
--- /dev/null
+++ b/assets/ui/assets/human/nobp_flash.tga
Binary files differ
diff --git a/assets/ui/assets/neutral/build_pool_bg.tga b/assets/ui/assets/neutral/build_pool_bg.tga
new file mode 100644
index 0000000..458511b
--- /dev/null
+++ b/assets/ui/assets/neutral/build_pool_bg.tga
Binary files differ
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