Yet another GMR/GSR fix.

Monster maximum viewable distance is now customizable.
This commit is contained in:
Giegue
2023-07-01 18:23:59 -03:00
parent 1d2a284197
commit 12f8eea011
6 changed files with 40 additions and 10 deletions

View File

@@ -424,7 +424,7 @@ void CMApache :: HuntThink( void )
// if (m_hEnemy == NULL)
{
Look( 4092 );
Look( 4096 );
m_hEnemy = BestVisibleEnemy( );
}

View File

@@ -31,6 +31,8 @@
#include "effects.h"
#include "customentity.h"
extern cvar_t *monster_default_maxrange;
//=========================================================
// monster-specific DEFINE's
//=========================================================
@@ -265,6 +267,10 @@ void CMMassn::Spawn()
{
SetBodygroup(GUN_GROUP, GUN_SNIPERRIFLE);
m_cClipSize = 5;
// if no attack range set, set 2x default
if (!m_flDistLook)
m_flDistLook = monster_default_maxrange->value * 2;
}
else
{
@@ -280,6 +286,11 @@ void CMMassn::Spawn()
CMTalkMonster::g_talkWaitTime = 0;
MonsterInit();
if (FBitSet(pev->weapons, MASSN_SNIPERRIFLE))
{
// override for snipers
m_flDistTooFar = m_flDistLook / 1.33;
}
pev->classname = MAKE_STRING( "monster_male_assassin" );
if ( strlen( STRING( m_szMonsterName ) ) == 0 )

View File

@@ -95,6 +95,8 @@ cvar_t init_globalmodellist = {"monster_gmr", "", FCVAR_EXTDLL, 0, NULL};
cvar_t *globalmodellist = NULL;
cvar_t init_globalsoundlist = {"monster_gsr", "", FCVAR_EXTDLL, 0, NULL};
cvar_t *globalsoundlist = NULL;
cvar_t init_monster_default_maxrange = {"monster_default_maxrange", "2048", FCVAR_EXTDLL, 0, NULL};
cvar_t *monster_default_maxrange = NULL;
// Metamod requesting info about this plugin:
@@ -165,6 +167,9 @@ C_DLLEXPORT int Meta_Attach(PLUG_LOADTIME now, META_FUNCTIONS *pFunctionTable, m
CVAR_REGISTER(&init_globalsoundlist);
globalsoundlist = CVAR_GET_POINTER("monster_gsr");
CVAR_REGISTER(&init_monster_default_maxrange);
monster_default_maxrange = CVAR_GET_POINTER("monster_default_maxrange");
return(TRUE);
}

View File

@@ -890,6 +890,10 @@ void scan_monster_replace(FILE *fp, bool toGSR )
while (get_input(fp, input))
{
// might slip through
if (strlen(input) == 0)
continue;
char *source = strtok(input, " ");
char *destination = strtok(NULL, " ");

View File

@@ -40,6 +40,7 @@ extern DLL_GLOBAL BOOL g_fDrawLines;
extern CGraph WorldGraph;// the world node graph
extern cvar_t *monster_turn_coeficient;
extern cvar_t *monster_default_maxrange;
extern void process_monster_sound(edict_t *pMonster, char *fileName);
@@ -1663,8 +1664,9 @@ void CMBaseMonster :: MonsterInit ( void )
for (int i=0; i < MAX_OLD_ENEMIES; i++)
m_hOldEnemy[ i ] = NULL;
m_flDistTooFar = 1024.0;
m_flDistLook = 2048.0;
if (!m_flDistLook)
m_flDistLook = monster_default_maxrange->value;
m_flDistTooFar = m_flDistLook / 2; // always 50%
// set eye position
SetEyePosition();
@@ -2651,6 +2653,11 @@ void CMBaseMonster :: KeyValue( KeyValueData *pkvd )
}
pkvd->fHandled = TRUE;
}
else if (FStrEq(pkvd->szKeyName, "attackrange"))
{
m_flDistLook = atof(pkvd->szValue);
pkvd->fHandled = TRUE;
}
else
{
CMBaseToggle::KeyValue( pkvd );

View File

@@ -92,6 +92,9 @@ void CMBaseTurret::Spawn()
m_iAutoStart = TRUE;
}
if (!m_flDistLook)
m_flDistLook = TURRET_RANGE;
ResetSequenceInfo( );
SetBoneController( 0, 0 );
SetBoneController( 1, 0 );
@@ -348,7 +351,7 @@ void CMBaseTurret::ActiveThink(void)
Vector vec = UTIL_VecToAngles(vecMidEnemy - vecMid);
// Current enemy is not visible.
if (!fEnemyVisible || (flDistToEnemy > TURRET_RANGE))
if (!fEnemyVisible || (flDistToEnemy > m_flDistLook))
{
if (!m_flLastSight)
m_flLastSight = gpGlobals->time + 0.5;
@@ -459,7 +462,7 @@ void CMBaseTurret::ActiveThink(void)
void CMTurret::Shoot(Vector &vecSrc, Vector &vecDirToEnemy)
{
FireBullets( 1, vecSrc, vecDirToEnemy, TURRET_SPREAD, TURRET_RANGE, BULLET_MONSTER_12MM, 1 );
FireBullets( 1, vecSrc, vecDirToEnemy, TURRET_SPREAD, m_flDistLook, BULLET_MONSTER_12MM, 1 );
EMIT_SOUND(ENT(pev), CHAN_WEAPON, "turret/tu_fire1.wav", 1, 0.6);
pev->effects = pev->effects | EF_MUZZLEFLASH;
}
@@ -467,7 +470,7 @@ void CMTurret::Shoot(Vector &vecSrc, Vector &vecDirToEnemy)
void CMMiniTurret::Shoot(Vector &vecSrc, Vector &vecDirToEnemy)
{
FireBullets( 1, vecSrc, vecDirToEnemy, TURRET_SPREAD, TURRET_RANGE, BULLET_MONSTER_9MM, 1 );
FireBullets( 1, vecSrc, vecDirToEnemy, TURRET_SPREAD, m_flDistLook, BULLET_MONSTER_9MM, 1 );
switch(RANDOM_LONG(0,2))
{
@@ -721,7 +724,7 @@ void CMBaseTurret::SearchThink(void)
// Acquire Target
if (m_hEnemy == NULL)
{
Look(TURRET_RANGE);
Look(m_flDistLook);
m_hEnemy = BestVisibleEnemy();
}
@@ -779,7 +782,7 @@ void CMBaseTurret::AutoSearchThink(void)
if (m_hEnemy == NULL)
{
Look( TURRET_RANGE );
Look( m_flDistLook );
m_hEnemy = BestVisibleEnemy();
}
@@ -1042,7 +1045,7 @@ void CMSentry::Spawn()
void CMSentry::Shoot(Vector &vecSrc, Vector &vecDirToEnemy)
{
FireBullets( 1, vecSrc, vecDirToEnemy, TURRET_SPREAD, TURRET_RANGE, BULLET_MONSTER_MP5, 1 );
FireBullets( 1, vecSrc, vecDirToEnemy, TURRET_SPREAD, m_flDistLook, BULLET_MONSTER_MP5, 1 );
switch(RANDOM_LONG(0,2))
{