diff --git a/src/dlls/apache.cpp b/src/dlls/apache.cpp index 33d7490..940c65a 100644 --- a/src/dlls/apache.cpp +++ b/src/dlls/apache.cpp @@ -424,7 +424,7 @@ void CMApache :: HuntThink( void ) // if (m_hEnemy == NULL) { - Look( 4092 ); + Look( 4096 ); m_hEnemy = BestVisibleEnemy( ); } diff --git a/src/dlls/massn.cpp b/src/dlls/massn.cpp index 9ced4b9..e0ced67 100644 --- a/src/dlls/massn.cpp +++ b/src/dlls/massn.cpp @@ -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,7 +286,12 @@ 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 ) { diff --git a/src/dlls/monster_api.cpp b/src/dlls/monster_api.cpp index f81c378..7f131a3 100644 --- a/src/dlls/monster_api.cpp +++ b/src/dlls/monster_api.cpp @@ -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); } diff --git a/src/dlls/monster_config.cpp b/src/dlls/monster_config.cpp index 57a6b97..38994ca 100644 --- a/src/dlls/monster_config.cpp +++ b/src/dlls/monster_config.cpp @@ -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, " "); diff --git a/src/dlls/monsters.cpp b/src/dlls/monsters.cpp index 7afb3f8..a04e598 100644 --- a/src/dlls/monsters.cpp +++ b/src/dlls/monsters.cpp @@ -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 ); diff --git a/src/dlls/turret.cpp b/src/dlls/turret.cpp index 5f41199..2ca16e0 100644 --- a/src/dlls/turret.cpp +++ b/src/dlls/turret.cpp @@ -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)) {