untyped global function MpInitAILoadouts global function SetProficiency global function SPMP_UpdateNPCProficiency global function SPMP_Callback_ForceAIMissPlayer global function IsAutoPopulateEnabled void function MpInitAILoadouts() { } void function SetProficiency( entity npc ) { // i think this is correct? iirc grunts and stuff in attrition are *really* bad so having poor as their proficiency makes sense npc.kv.WeaponProficiency = GetDifficultyLevel() } void function SPMP_UpdateNPCProficiency( entity npc ) { SetProficiency( npc ) // this seems bad? dont see why they should be any different unless SP should use a different function } bool function IsAutoPopulateEnabled( var team = null ) { if ( IsNPCSpawningEnabled() == false ) return false if ( Flag( "disable_npcs" ) ) return false if ( team == TEAM_MILITIA && Flag( "Disable_MILITIA" ) ) return false if ( team == TEAM_IMC && Flag( "Disable_IMC" ) ) return false return true } bool function SPMP_Callback_ForceAIMissPlayer( entity npc, entity player ) { if ( GetGameState() >= eGameState.Postmatch ) return true if ( player.IsTitan() ) return false int lethality = Riff_AILethality() if ( lethality <= eAILethality.Medium ) if ( player.GetTitanSoulBeingRodeoed() != null ) return true if ( Bleedout_IsBleedoutLogicActive() && Bleedout_ShouldAIMissBleedingPlayer( player ) ) return true if ( player.ContextAction_IsActive() ) return RandomFloat( 1 ) >= 0.25 if ( IsFastPilot( player ) ) { float chance = ( lethality + 1 ) * 0.125 if ( lethality <= eAILethality.Medium && npc.IsMechanical() ) chance /= 1.25 return RandomFloat( 1 ) >= chance } return false }