diff --git a/src/game/bg_misc.c b/src/game/bg_misc.c index 67c317e..a22251a 100644 --- a/src/game/bg_misc.c +++ b/src/game/bg_misc.c @@ -5780,6 +5780,14 @@ void BG_MOD_set( modExtremeType_t entry, int value ) } } +int BG_MOD_get( modExtremeType_t entry) +{ + if( entry >= 0 && entry < MOD_BG_COUNT ) + return modEntry[ entry ]; + + return 0; +} + void BG_MOD_update( void ) { static qboolean updated = qfalse; @@ -5801,6 +5809,13 @@ void BG_MOD_update( void ) bg_buildableList[ i ].turretFireSpeed = bg_buildableList[ i ].turretFireSpeed * 100 / modEntry[ MOD_BG_BUILDABLE_SPEED ]; } + + if( modEntry[ MOD_BG_TURRET_ANGLE ] && + ( bg_buildableList[ i ].buildNum == BA_H_MGTURRET || + bg_buildableList[ i ].buildNum == BA_H_TESLAGEN ) ) + { + bg_buildableList[ i ].minNormal = 0.0f; + } } for( i = 0; i < bg_numPclasses; i++ ) diff --git a/src/game/bg_pmove.c b/src/game/bg_pmove.c index 34f46aa..409b2b1 100644 --- a/src/game/bg_pmove.c +++ b/src/game/bg_pmove.c @@ -714,7 +714,15 @@ static qboolean PM_CheckJump( void ) //TA: take some stamina off if( pm->ps->stats[ STAT_PTEAM ] == PTE_HUMANS ) - pm->ps->stats[ STAT_STAMINA ] -= 500; + { + int rate; + + rate = BG_MOD_get( MOD_BG_HUMAN_STAMINA ); + if( rate ) + pm->ps->stats[ STAT_STAMINA ] -= 500 * 100 / rate; + else + pm->ps->stats[ STAT_STAMINA ] -= 500; + } pm->ps->groundEntityNum = ENTITYNUM_NONE; diff --git a/src/game/bg_public.h b/src/game/bg_public.h index c69c32d..28a9bdf 100644 --- a/src/game/bg_public.h +++ b/src/game/bg_public.h @@ -1344,9 +1344,11 @@ typedef enum MOD_BG_ALIEN_RATE, // Alien fire rate MOD_BG_WEAPON_AMMO, // Weapon ammo per clip MOD_BG_WEAPON_RELOAD, // Weapon reload time + MOD_BG_TURRET_ANGLE, // Allow high turret build angles MOD_BG_COUNT // number of entries } modExtremeType_t; void BG_MOD_set( modExtremeType_t entry, int value ); +int BG_MOD_get( modExtremeType_t entry); void BG_MOD_update( void ); diff --git a/src/game/g_active.c b/src/game/g_active.c index ab2ca47..c27ac9e 100644 --- a/src/game/g_active.c +++ b/src/game/g_active.c @@ -199,6 +199,9 @@ static void G_ClientShove( gentity_t *ent, gentity_t *victim ) // shoving enemies changes gameplay too much if( !OnSameTeam( ent, victim ) ) return; + + if( victim->client->pers.healing && !g_healShove.integer ) + return; if ( ( victim->client->ps.weapon >= WP_ABUILD ) && ( victim->client->ps.weapon <= WP_HBUILD ) && diff --git a/src/game/g_admin.c b/src/game/g_admin.c index 159f0a0..a707060 100644 --- a/src/game/g_admin.c +++ b/src/game/g_admin.c @@ -104,7 +104,7 @@ g_admin_cmd_t g_admin_cmds[ ] = "[^3name|slot#^7] [^3#^7]" }, - {"demo", G_admin_demo, "~", + {"demo", G_admin_demo, "?", "turn admin chat off for the caller so it does not appear in demos. " "this is a toggle use !demo again to turn warnings back on", "" diff --git a/src/game/g_buildable.c b/src/game/g_buildable.c index 4680b26..3f1c6aa 100644 --- a/src/game/g_buildable.c +++ b/src/game/g_buildable.c @@ -1868,6 +1868,7 @@ void HMedistat_Think( gentity_t *self ) int i, num; gentity_t *player; qboolean occupied = qfalse; + gentity_t *vic; self->nextthink = level.time + BG_FindNextThinkForBuildable( self->s.modelindex ); @@ -1948,6 +1949,14 @@ void HMedistat_Think( gentity_t *self ) //nothing left to heal so go back to idling if( !self->enemy && self->active ) { + int i; + + for( i = 0; i < level.maxclients; i++ ) + { + vic = &g_entities[ i ]; + vic->client->pers.healing = qfalse; + } + G_SetBuildableAnim( self, BANIM_CONSTRUCT2, qtrue ); G_SetIdleBuildableAnim( self, BANIM_IDLE1 ); @@ -1962,6 +1971,7 @@ void HMedistat_Think( gentity_t *self ) self->enemy->client->ps.stats[ STAT_STATE ] &= ~SS_MEDKIT_ACTIVE; self->enemy->health++; + self->enemy->client->pers.healing = qtrue; //if they're completely healed, give them a medkit if( self->enemy->health >= self->enemy->client->ps.stats[ STAT_MAX_HEALTH ] && diff --git a/src/game/g_cmds.c b/src/game/g_cmds.c index a5f6703..462054a 100644 --- a/src/game/g_cmds.c +++ b/src/game/g_cmds.c @@ -3863,7 +3863,14 @@ Cmd_Reload_f */ void Cmd_Reload_f( gentity_t *ent ) { - if( ( ent->client->ps.weapon >= WP_ABUILD ) && + if( !ent->client->pers.designatedBuilder && ( ent->client->ps.weapon >= WP_ABUILD ) && + ( ent->client->ps.weapon <= WP_HBUILD ) ) + { + + Cmd_Mark_f( ent ); + return; + } + else if( ( ent->client->ps.weapon >= WP_ABUILD ) && ( ent->client->ps.weapon <= WP_HBUILD ) ) { Cmd_Protect_f( ent ); @@ -4697,7 +4704,7 @@ commands_t cmds[ ] = { { "itemact", CMD_HUMAN|CMD_LIVING, Cmd_ActivateItem_f }, { "itemdeact", CMD_HUMAN|CMD_LIVING, Cmd_DeActivateItem_f }, { "itemtoggle", CMD_HUMAN|CMD_LIVING, Cmd_ToggleItem_f }, - { "reload", CMD_HUMAN|CMD_LIVING, Cmd_Reload_f }, + { "reload", CMD_TEAM|CMD_LIVING, Cmd_Reload_f }, { "boost", 0, Cmd_Boost_f }, { "share", CMD_TEAM, Cmd_Share_f }, { "donate", CMD_TEAM, Cmd_Donate_f }, diff --git a/src/game/g_combat.c b/src/game/g_combat.c index b922fd0..39903b7 100644 --- a/src/game/g_combat.c +++ b/src/game/g_combat.c @@ -483,7 +483,7 @@ void player_die( gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int if( g_feedingSpree.integer && level.reactorPresent && - !G_BuildableRange( self->client->ps.origin, 900, BA_H_REACTOR ) ) + !G_BuildableRange( self->client->ps.origin, 600, BA_H_REACTOR ) ) { self->client->pers.statscounters.spreefeeds += 60; } @@ -499,7 +499,7 @@ void player_die( gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int if( g_feedingSpree.integer && level.overmindPresent && - !G_BuildableRange( self->client->ps.origin, 900, BA_A_OVERMIND ) ) + !G_BuildableRange( self->client->ps.origin, 600, BA_A_OVERMIND ) ) { self->client->pers.statscounters.spreefeeds += 60; } diff --git a/src/game/g_local.h b/src/game/g_local.h index ffb05d8..4886d48 100644 --- a/src/game/g_local.h +++ b/src/game/g_local.h @@ -396,6 +396,7 @@ typedef struct statsCounters_t statscounters; qboolean cusgrav; int cusgravlvl; + qboolean healing; char chat[ CHAT_MAXCHAN ][ CHAT_MAXPASS ]; qboolean ignoreAdminWarnings; @@ -1388,6 +1389,8 @@ extern vmCvar_t g_deconTime; extern vmCvar_t g_specAspec; +extern vmCvar_t g_healShove; + extern vmCvar_t g_modBuildableHealth; // Buildable health extern vmCvar_t g_modBuildableSpeed; // Buildable fire rate extern vmCvar_t g_modHumanStamina; // Human stamina @@ -1397,6 +1400,7 @@ extern vmCvar_t g_modHumanRate; // Human fire rate extern vmCvar_t g_modAlienRate; // Alien fire rate extern vmCvar_t g_modWeaponAmmo; // Weapon ammo per clip extern vmCvar_t g_modWeaponReload; // Weapon reload time +extern vmCvar_t g_modTurretAngle; // Allow high turret build angles void trap_Printf( const char *fmt ); void trap_Error( const char *fmt ); diff --git a/src/game/g_main.c b/src/game/g_main.c index 4ac34ef..20adf04 100644 --- a/src/game/g_main.c +++ b/src/game/g_main.c @@ -214,6 +214,8 @@ vmCvar_t g_deconTime; vmCvar_t g_specAspec; +vmCvar_t g_healShove; + vmCvar_t g_modBuildableHealth; vmCvar_t g_modBuildableSpeed; vmCvar_t g_modHumanStamina; @@ -223,6 +225,7 @@ vmCvar_t g_modHumanRate; vmCvar_t g_modAlienRate; vmCvar_t g_modWeaponAmmo; vmCvar_t g_modWeaponReload; +vmCvar_t g_modTurretAngle; static cvarTable_t gameCvarTable[ ] = { @@ -264,6 +267,8 @@ static cvarTable_t gameCvarTable[ ] = { &g_specAspec, "g_specAspec", "0", CVAR_ARCHIVE, 0, qtrue }, + { &g_healShove, "g_healShove", "0", CVAR_ARCHIVE, 0, qtrue }, + { &g_modBuildableHealth, "g_modBuildableHealth", "0", CVAR_ARCHIVE, 0, qfalse }, { &g_modBuildableSpeed, "g_modBuildableSpeed", "0", CVAR_ARCHIVE, 0, qfalse }, { &g_modHumanStamina, "g_modHumanStamina", "0", CVAR_ARCHIVE, 0, qfalse }, @@ -273,6 +278,7 @@ static cvarTable_t gameCvarTable[ ] = { &g_modAlienRate, "g_modAlienRate", "0", CVAR_ARCHIVE, 0, qfalse }, { &g_modWeaponAmmo, "g_modWeaponAmmo", "0", CVAR_ARCHIVE, 0, qfalse }, { &g_modWeaponReload, "g_modWeaponReload", "0", CVAR_ARCHIVE, 0, qfalse }, + { &g_modTurretAngle, "g_modTurretAngle", "0", CVAR_ARCHIVE, 0, qfalse }, { &g_proximityMines, "g_proximityMines", "0", 0, 0, qtrue }, { &g_proximityMinesPrice, "g_proximityMinesPrice", "800", 0, 0, qtrue }, @@ -674,6 +680,7 @@ static void G_InitModCvars( void ) BG_MOD_set( MOD_BG_ALIEN_RATE, g_modAlienRate.integer ); BG_MOD_set( MOD_BG_WEAPON_AMMO, g_modWeaponAmmo.integer ); BG_MOD_set( MOD_BG_WEAPON_RELOAD, g_modWeaponReload.integer ); + BG_MOD_set( MOD_BG_TURRET_ANGLE, g_modTurretAngle.integer ); BG_MOD_update( ); }