Decompiled source of Gooby Enemy v1.0.1
Gooby\EmpressXenomorph.dll
Decompiled 7 hours ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using Microsoft.CodeAnalysis; using Photon.Pun; using REPOLib.Modules; using REPOLib.Objects.Sdk; using UnityEngine; using UnityEngine.AI; using UnityEngine.Audio; using UnityEngine.Events; using UnityEngine.Networking; using UnityEngine.Rendering; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("Empress")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("EmpressXenomorph")] [assembly: AssemblyTitle("EmpressXenomorph")] [assembly: AssemblyVersion("1.0.0.0")] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace EmpressXenomorph { internal static class EmpressXenomorphAudioBank { private static readonly string[] SearchFolders = new string[2] { string.Empty, "Audio" }; private static readonly string[] AmbienceNames = new string[1] { "ambience" }; private static readonly string[] AttackNames = new string[3] { "alien_claw", "alien claw", "claw" }; private static readonly string[] HurtNames = new string[1] { "hurt" }; private static readonly string[] SeeNames = new string[1] { "see" }; private static readonly string[] DigivolutionNames = new string[2] { "Digivolution", "digivolution" }; private static readonly string[] Extensions = new string[5] { ".ogg", ".wav", ".mp3", ".WAV", ".MP3" }; private static bool _started; private static bool _loaded; internal static AudioClip? AmbienceClip { get; private set; } internal static AudioClip? AttackClip { get; private set; } internal static AudioClip? HurtClip { get; private set; } internal static AudioClip? SeeClip { get; private set; } internal static AudioClip? DigivolutionClip { get; private set; } internal static bool Loaded => _loaded; internal static IEnumerator LoadAudioAsync(string pluginDirectory, ManualLogSource log) { if (!_started) { _started = true; yield return LoadClipAsync(pluginDirectory, AmbienceNames, delegate(AudioClip clip) { AmbienceClip = clip; }, log); yield return LoadClipAsync(pluginDirectory, AttackNames, delegate(AudioClip clip) { AttackClip = clip; }, log); yield return LoadClipAsync(pluginDirectory, HurtNames, delegate(AudioClip clip) { HurtClip = clip; }, log); yield return LoadClipAsync(pluginDirectory, SeeNames, delegate(AudioClip clip) { SeeClip = clip; }, log); yield return LoadClipAsync(pluginDirectory, DigivolutionNames, delegate(AudioClip clip) { DigivolutionClip = clip; }, log); _loaded = true; log.LogInfo((object)$"Gooby audio load complete. ambience={(Object)(object)AmbienceClip != (Object)null}, attack={(Object)(object)AttackClip != (Object)null}, hurt={(Object)(object)HurtClip != (Object)null}, see={(Object)(object)SeeClip != (Object)null}, digivolution={(Object)(object)DigivolutionClip != (Object)null}"); } } private static IEnumerator LoadClipAsync(string pluginDirectory, IReadOnlyList<string> names, Action<AudioClip> assign, ManualLogSource log) { string path = ResolveClipPath(pluginDirectory, names); if (string.IsNullOrEmpty(path)) { yield break; } AudioType audioType = GetAudioType(path); UnityWebRequest request = UnityWebRequestMultimedia.GetAudioClip(new Uri(path).AbsoluteUri, audioType); try { yield return request.SendWebRequest(); if ((int)request.result != 1) { log.LogWarning((object)("Failed to load Gooby audio clip from " + path + ": " + request.error)); yield break; } AudioClip content = DownloadHandlerAudioClip.GetContent(request); ((Object)content).name = Path.GetFileNameWithoutExtension(path); ((Object)content).hideFlags = (HideFlags)61; assign(content); } finally { ((IDisposable)request)?.Dispose(); } } private static string? ResolveClipPath(string pluginDirectory, IReadOnlyList<string> names) { string[] searchFolders = SearchFolders; foreach (string text in searchFolders) { string text2 = (string.IsNullOrEmpty(text) ? pluginDirectory : Path.Combine(pluginDirectory, text)); if (!Directory.Exists(text2)) { continue; } foreach (string name in names) { string[] extensions = Extensions; foreach (string text3 in extensions) { string text4 = Path.Combine(text2, name + text3); if (File.Exists(text4)) { return text4; } } } } return null; } private static AudioType GetAudioType(string path) { //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) string text = Path.GetExtension(path).ToLowerInvariant(); if (!(text == ".wav")) { if (text == ".mp3") { return (AudioType)13; } return (AudioType)14; } return (AudioType)20; } } internal sealed class EmpressXenomorphAudioController : MonoBehaviour { private AudioSource _ambienceSource; private AudioSource _voiceSource; private AudioSource _combatSource; private AudioSource _transformSource; private bool _built; private bool _clipsAssigned; private float _ambienceTargetVolume; private float _transformTargetVolume; internal bool Ready => _built; internal void Build() { if (_built) { EnsureAudioRouting(); EnsureClipsAssigned(); return; } _ambienceSource = CreateSource("EmpressXenoAmbience", loop: true, 4f, 20f, 0.4f); _voiceSource = CreateSource("EmpressXenoVoice", loop: false, 3f, 18f, 0.4f); _combatSource = CreateSource("EmpressXenoCombat", loop: false, 2.5f, 15f, 0.4f); _transformSource = CreateSource("GoobyDigivolve", loop: true, 2f, 8f, 0.8f); _transformSource.spatialBlend = 0f; _transformSource.priority = 72; _transformSource.volume = 0f; _built = true; EnsureAudioRouting(); EnsureClipsAssigned(); } internal void SetAmbienceLevel(float amount) { _ambienceTargetVolume = Mathf.Clamp01(amount) * EmpressXenomorphPlugin.EnemySoundVolume; if (_ambienceTargetVolume > 0.01f) { EnsureClipsAssigned(); if ((Object)(object)_ambienceSource.clip != (Object)null && !_ambienceSource.isPlaying) { _ambienceSource.volume = 0f; _ambienceSource.time = 0f; _ambienceSource.Play(); } } } internal void PlayAttack() { EnsureClipsAssigned(); if (!((Object)(object)_combatSource.clip == (Object)null)) { _combatSource.pitch = Random.Range(0.95f, 1.06f); _combatSource.PlayOneShot(_combatSource.clip, 1f); } } internal void PlayHurt() { EnsureClipsAssigned(); if (!((Object)(object)EmpressXenomorphAudioBank.HurtClip == (Object)null)) { _voiceSource.pitch = Random.Range(0.93f, 1.03f); _voiceSource.PlayOneShot(EmpressXenomorphAudioBank.HurtClip, 1f); } } internal void PlaySee() { EnsureClipsAssigned(); if (!((Object)(object)EmpressXenomorphAudioBank.SeeClip == (Object)null)) { _voiceSource.pitch = Random.Range(0.97f, 1.04f); _voiceSource.PlayOneShot(EmpressXenomorphAudioBank.SeeClip, 1f); } } internal void SetTransformationActive(bool active) { _transformTargetVolume = ((active && (Object)(object)EmpressXenomorphAudioBank.DigivolutionClip != (Object)null) ? EmpressXenomorphPlugin.DigivolutionVolume : 0f); if (!(_transformTargetVolume <= 0.001f)) { EnsureClipsAssigned(); if ((Object)(object)_transformSource.clip != (Object)null && !_transformSource.isPlaying) { _transformSource.volume = 0f; _transformSource.time = 0f; _transformSource.Play(); } } } internal void StopAll() { _ambienceTargetVolume = 0f; _transformTargetVolume = 0f; if (_ambienceSource.isPlaying) { _ambienceSource.Stop(); } if (_voiceSource.isPlaying) { _voiceSource.Stop(); } if (_combatSource.isPlaying) { _combatSource.Stop(); } if (_transformSource.isPlaying) { _transformSource.Stop(); } } private void Update() { if (_built) { EnsureAudioRouting(); EnsureClipsAssigned(); _ambienceSource.volume = Mathf.MoveTowards(_ambienceSource.volume, _ambienceTargetVolume, 1.8f * Time.deltaTime); _transformSource.volume = Mathf.MoveTowards(_transformSource.volume, _transformTargetVolume, 1.8f * Time.deltaTime); if (_ambienceTargetVolume <= 0.001f && _ambienceSource.isPlaying && _ambienceSource.volume <= 0.001f) { _ambienceSource.Stop(); } if (_transformTargetVolume <= 0.001f && _transformSource.isPlaying && _transformSource.volume <= 0.001f) { _transformSource.Stop(); } } } private void EnsureClipsAssigned() { if (!_clipsAssigned && (!((Object)(object)EmpressXenomorphAudioBank.AmbienceClip == (Object)null) || !((Object)(object)EmpressXenomorphAudioBank.AttackClip == (Object)null) || !((Object)(object)EmpressXenomorphAudioBank.HurtClip == (Object)null) || !((Object)(object)EmpressXenomorphAudioBank.SeeClip == (Object)null) || !((Object)(object)EmpressXenomorphAudioBank.DigivolutionClip == (Object)null))) { _ambienceSource.clip = EmpressXenomorphAudioBank.AmbienceClip; _combatSource.clip = EmpressXenomorphAudioBank.AttackClip; _transformSource.clip = EmpressXenomorphAudioBank.DigivolutionClip; _clipsAssigned = true; } } private void EnsureAudioRouting() { AudioMixerGroup val = (((Object)(object)AudioManager.instance != (Object)null) ? AudioManager.instance.SoundMasterGroup : null); if (!((Object)(object)val == (Object)null)) { _ambienceSource.outputAudioMixerGroup = val; _voiceSource.outputAudioMixerGroup = val; _combatSource.outputAudioMixerGroup = val; _transformSource.outputAudioMixerGroup = val; } } private AudioSource CreateSource(string name, bool loop, float minDistance, float maxDistance, float baseVolume) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) GameObject val = new GameObject(name) { layer = ((Component)this).gameObject.layer }; val.transform.SetParent(((Component)this).transform, false); AudioSource obj = val.AddComponent<AudioSource>(); obj.playOnAwake = false; obj.loop = loop; obj.volume = (loop ? 0f : baseVolume); obj.spatialBlend = 1f; obj.rolloffMode = (AudioRolloffMode)0; obj.minDistance = minDistance; obj.maxDistance = maxDistance; obj.dopplerLevel = 0f; obj.reverbZoneMix = 1f; obj.priority = 90; obj.spread = 20f; return obj; } } internal static class EmpressXenomorphBundle { private const string PreferredPrefabName = "PingForBitch"; private static AssetBundle? _bundle; private static GameObject? _prefab; internal static GameObject? LoadPrefab() { if ((Object)(object)_prefab != (Object)null) { return _prefab; } string text = Path.Combine(EmpressXenomorphPlugin.PluginDirectory, "xeno"); if (!File.Exists(text)) { EmpressXenomorphPlugin.Log.LogError((object)("Missing Gooby bundle at '" + text + "'.")); return null; } if (_bundle == null) { _bundle = AssetBundle.LoadFromFile(text); } if ((Object)(object)_bundle == (Object)null) { EmpressXenomorphPlugin.Log.LogError((object)"Failed to load the Gooby asset bundle."); return null; } ((Object)_bundle).hideFlags = (HideFlags)61; _prefab = (from gameObject in _bundle.LoadAllAssets<GameObject>() where (Object)(object)gameObject != (Object)null && HasUsableVisual(gameObject) select gameObject).OrderByDescending(GetPrefabScore).FirstOrDefault(); if ((Object)(object)_prefab == (Object)null) { string text2 = string.Join(", ", _bundle.GetAllAssetNames()); EmpressXenomorphPlugin.Log.LogError((object)("No usable animated Gooby prefab was found in the bundle. Assets: " + text2)); return null; } EmpressXenomorphPlugin.Log.LogInfo((object)("Loaded Gooby prefab '" + ((Object)_prefab).name + "' from bundle 'xeno'.")); return _prefab; } internal static Animator? FindPreferredAnimator(Transform root) { Animator[] componentsInChildren = ((Component)root).GetComponentsInChildren<Animator>(true); Animator val = ((IEnumerable<Animator>)componentsInChildren).FirstOrDefault((Func<Animator, bool>)((Animator animator) => (Object)(object)animator != (Object)null && ((Object)((Component)animator).gameObject).name.IndexOf("XenoAnimator", StringComparison.OrdinalIgnoreCase) >= 0 && (Object)(object)animator.runtimeAnimatorController != (Object)null)); if ((Object)(object)val != (Object)null) { return val; } Animator val2 = ((IEnumerable<Animator>)componentsInChildren).FirstOrDefault((Func<Animator, bool>)((Animator animator) => (Object)(object)animator != (Object)null && (Object)(object)animator.runtimeAnimatorController != (Object)null)); if ((Object)(object)val2 != (Object)null) { return val2; } return ((IEnumerable<Animator>)componentsInChildren).FirstOrDefault((Func<Animator, bool>)((Animator animator) => (Object)(object)animator != (Object)null)); } private static bool HasUsableVisual(GameObject prefab) { if (prefab.GetComponentsInChildren<Renderer>(true).Length != 0) { return (Object)(object)FindPreferredAnimator(prefab.transform) != (Object)null; } return false; } private static int GetPrefabScore(GameObject prefab) { int num = prefab.GetComponentsInChildren<Renderer>(true).Length; int num2 = prefab.GetComponentsInChildren<Animator>(true).Length; int num3 = num * 100 + num2 * 25; if (string.Equals(((Object)prefab).name, "PingForBitch", StringComparison.OrdinalIgnoreCase)) { num3 += 5000; } if (((Object)prefab).name.IndexOf("xeno", StringComparison.OrdinalIgnoreCase) >= 0) { num3 += 1000; } if (((Object)prefab).name.IndexOf("drone", StringComparison.OrdinalIgnoreCase) >= 0) { num3 += 250; } return num3; } } internal sealed class EmpressXenomorphBrain : MonoBehaviour, IPunObservable { private const float SpawnIntroTime = 0.65f; private const float PassiveDecisionInterval = 1.3f; private const float PassiveSpeed = 1.85f; private const float PassiveAcceleration = 12f; private const float HurtRecoverTime = 0.95f; private const float HurtCooldown = 0.2f; private const float HurtRagdollImpulse = 6.5f; private const float PursueSpeed = 5.6f; private const float PursueAcceleration = 28f; private const float PursueHeight = 1.75f; private const float PursueCatchDistance = 2.2f; private const float PursueCatchHorizontalDistance = 1.7f; private const float PursueCatchVerticalDistance = 2.4f; private const float CarryDuration = 5f; private const float CarrySpeed = 6.35f; private const float CarryAcceleration = 34f; private const float CarryDecisionInterval = 0.65f; private const float CarryForce = 24f; private const float CarryRotationForce = 3.2f; private const float ThrowWindupTime = 0.2f; private const float ThrowForce = 42f; private const float ThrowTorque = 18f; private const float FusionCooldown = 15f; private const float FusionChargeTime = 4.6f; private const float FusionMonsterTime = 7.4f; private const float FusionMonsterSpeed = 4.65f; private const float FusionMonsterAcceleration = 26f; private const float FusionSmashWindup = 0.45f; private const float FusionSmashReach = 2.9f; private const int FusionSmashDamage = 999; private const float RetreatTime = 3.8f; private const float RetreatSpeed = 5.1f; private const float RetreatAcceleration = 24f; private const float VisionFreezeTime = 0.15f; private const float DoorCheckInterval = 0.08f; private const float BodyPushInterval = 0.08f; private const float DoorPushCooldown = 0.45f; private const float DoorPushForce = 3.6f; private const float DoorPushTorque = 3f; private const float BodyPushForce = 4.5f; private const float SeeSoundCooldown = 4f; private static readonly Dictionary<int, float> DoorPushCooldowns = new Dictionary<int, float>(); private EnemyParent _enemyParent; private Enemy _enemy; private EnemyNavMeshAgent _enemyNavMeshAgent; private EmpressXenomorphVisual _visual; private EmpressXenomorphAudioController _audio; private Transform _centerTransform; private NavMeshAgent _navMeshAgent; private Rigidbody _bodyRigidbody; private EmpressXenomorphState _state; private PlayerAvatar? _targetPlayer; private PlayerAvatar? _carriedPlayer; private Quaternion _networkRotation; private Vector3 _moveDestination; private Vector3 _lastPosition; private float _stateTimer; private float _decisionTimer; private float _hurtReactionTimer; private float _fusionCooldownTimer; private float _doorCheckTimer; private float _bodyPushTimer; private float _seeSoundTimer; private float _carryTimer; private float _localVelX; private float _localVelZ; private int _networkTargetViewId = -1; private int _networkCarriedViewId = -1; private int _attackAudioSerial; private int _hurtAudioSerial; private int _seeAudioSerial; private int _remoteAttackAudioSerial; private int _remoteHurtAudioSerial; private int _remoteSeeAudioSerial; private int _playedAttackAudioSerial; private int _playedHurtAudioSerial; private int _playedSeeAudioSerial; private bool _spawnInitialized; private bool _initialized; private bool _fusionPending; private bool _fusionSmashApplied; private bool _wasStunned; private bool _throwApplied; private bool _ragdollActive; internal void Initialize(EnemyParent enemyParent, Enemy enemy, EnemyNavMeshAgent enemyNavMeshAgent, EmpressXenomorphVisual visual, EmpressXenomorphAudioController audio, Transform centerTransform) { //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) _enemyParent = enemyParent; _enemy = enemy; _enemyNavMeshAgent = enemyNavMeshAgent; _visual = visual; _audio = audio; _centerTransform = centerTransform; _navMeshAgent = RepoEnemyAccess.GetAgent(enemyNavMeshAgent); _bodyRigidbody = ((Component)this).GetComponent<Rigidbody>(); _networkRotation = ((Component)this).transform.rotation; _lastPosition = ((Component)this).transform.position; _initialized = true; } internal void HandleSpawnEvent() { //IL_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_010e: Unknown result type (might be due to invalid IL or missing references) if (_initialized && EnsureRuntimeReady()) { EndHurtRecoverPhysics(); _state = EmpressXenomorphState.SpawnIntro; _stateTimer = 0.65f; _decisionTimer = 0f; _hurtReactionTimer = 0f; _fusionCooldownTimer = 0f; _doorCheckTimer = 0f; _seeSoundTimer = 0f; _carryTimer = 0f; _targetPlayer = null; _carriedPlayer = null; _fusionPending = false; _fusionSmashApplied = false; _throwApplied = false; _spawnInitialized = true; _wasStunned = false; _moveDestination = ((Component)this).transform.position; _networkTargetViewId = -1; _networkCarriedViewId = -1; _attackAudioSerial = 0; _hurtAudioSerial = 0; _seeAudioSerial = 0; _remoteAttackAudioSerial = 0; _remoteHurtAudioSerial = 0; _remoteSeeAudioSerial = 0; _playedAttackAudioSerial = 0; _playedHurtAudioSerial = 0; _playedSeeAudioSerial = 0; RepoEnemyAccess.SetTargetPlayer(_enemy, null, -1); _enemy.CurrentState = (EnemyState)1; HardStopAgent(0.1f); _audio.StopAll(); } } internal void HandleHurt() { //IL_0085: Unknown result type (might be due to invalid IL or missing references) if (!_initialized || !_spawnInitialized || _hurtReactionTimer > 0f || _state == EmpressXenomorphState.Death || _state == EmpressXenomorphState.Throw || (GameManager.Multiplayer() && !RepoEnemyAccess.GetMasterClient(_enemy))) { return; } EnemyHealth health = RepoEnemyAccess.GetHealth(_enemy); if ((Object)(object)health != (Object)null && (RepoEnemyAccess.GetEnemyHealthDeadImpulse(health) || RepoEnemyAccess.GetEnemyHealthDead(health))) { return; } if (_state == EmpressXenomorphState.FusionCharge) { if ((Object)(object)health != (Object)null) { RepoEnemyAccess.InvokeEnemyHealthDeath(health, ((Component)this).transform.forward); } } else if (_state != EmpressXenomorphState.FusionMonster && _state != EmpressXenomorphState.FusionSmash) { _hurtReactionTimer = 0.2f; TriggerHurtAudio(); _targetPlayer = GetRandomValidPlayer(); if ((Object)(object)_targetPlayer == (Object)null) { EnterRetreat(); return; } _fusionPending = _fusionCooldownTimer <= 0f && Random.value < EmpressXenomorphPlugin.FusionChanceRatio; EnterHurtRecover(); } } internal void HandleDeathStart() { //IL_0069: Unknown result type (might be due to invalid IL or missing references) if (_initialized) { _state = EmpressXenomorphState.Death; _stateTimer = _visual.GetDeathDuration(); _decisionTimer = 0f; _carryTimer = 0f; _fusionPending = false; _fusionSmashApplied = false; _throwApplied = true; _targetPlayer = null; _carriedPlayer = null; EndHurtRecoverPhysics(); _enemy.CurrentState = (EnemyState)9; HardStopAgent(0.1f); _audio.StopAll(); } } internal void HandleDeath() { if (_initialized) { _audio.StopAll(); HardStopAgent(0.1f); if (SemiFunc.IsMasterClientOrSingleplayer()) { _enemyParent.Despawn(); } } } private void Update() { //IL_00f1: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Unknown result type (might be due to invalid IL or missing references) //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: Unknown result type (might be due to invalid IL or missing references) //IL_00d2: Unknown result type (might be due to invalid IL or missing references) if (_initialized && _spawnInitialized && IsGameplayReady()) { EnemyHealth health = RepoEnemyAccess.GetHealth(_enemy); if ((Object)(object)health != (Object)null && (RepoEnemyAccess.GetEnemyHealthDeadImpulse(health) || RepoEnemyAccess.GetEnemyHealthDead(health))) { _state = EmpressXenomorphState.Death; EndHurtRecoverPhysics(); HardStopAgent(0.1f); UpdateVisuals(); UpdateAudio(); _lastPosition = ((Component)this).transform.position; } else if (GameManager.Multiplayer() && !RepoEnemyAccess.GetMasterClient(_enemy)) { ((Component)this).transform.rotation = Quaternion.Slerp(((Component)this).transform.rotation, _networkRotation, Time.deltaTime * 14f); UpdateRemoteTargets(); UpdateVisuals(); UpdateAudio(); _lastPosition = ((Component)this).transform.position; } else { TickHostLogic(); UpdateVisuals(); UpdateAudio(); _lastPosition = ((Component)this).transform.position; } } } private void FixedUpdate() { if (_initialized && _spawnInitialized && IsGameplayReady() && (!GameManager.Multiplayer() || RepoEnemyAccess.GetMasterClient(_enemy)) && _state == EmpressXenomorphState.Carry) { CarryVictimPhysics(); } } private void TickHostLogic() { //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Invalid comparison between Unknown and I4 //IL_013c: Unknown result type (might be due to invalid IL or missing references) if (!RepoEnemyAccess.GetSpawned(_enemyParent)) { HardStopAgent(0.1f); return; } if ((int)_enemy.CurrentState == 11) { HardStopAgent(0.1f); if (SemiFunc.IsMasterClientOrSingleplayer()) { _enemyParent.Despawn(); } return; } if (_hurtReactionTimer > 0f) { _hurtReactionTimer -= Time.deltaTime; } if (_fusionCooldownTimer > 0f) { _fusionCooldownTimer -= Time.deltaTime; } if (_doorCheckTimer > 0f) { _doorCheckTimer -= Time.deltaTime; } if (_bodyPushTimer > 0f) { _bodyPushTimer -= Time.deltaTime; } if (_seeSoundTimer > 0f) { _seeSoundTimer -= Time.deltaTime; } if (_stateTimer > 0f) { _stateTimer -= Time.deltaTime; } if (_decisionTimer > 0f) { _decisionTimer -= Time.deltaTime; } if (_enemy.IsStunned()) { _state = EmpressXenomorphState.Stunned; _enemy.CurrentState = (EnemyState)9; HardStopAgent(0.1f); _wasStunned = true; SyncNetworkState(); return; } if (_wasStunned) { _wasStunned = false; EnterPassive(); } switch (_state) { case EmpressXenomorphState.SpawnIntro: TickSpawnIntro(); break; case EmpressXenomorphState.Passive: TickPassive(); break; case EmpressXenomorphState.HurtRecover: TickHurtRecover(); break; case EmpressXenomorphState.Pursue: TickPursue(); break; case EmpressXenomorphState.Carry: TickCarry(); break; case EmpressXenomorphState.Throw: TickThrow(); break; case EmpressXenomorphState.FusionCharge: TickFusionCharge(); break; case EmpressXenomorphState.FusionMonster: TickFusionMonster(); break; case EmpressXenomorphState.FusionSmash: TickFusionSmash(); break; case EmpressXenomorphState.Retreat: TickRetreat(); break; case EmpressXenomorphState.Stunned: EnterPassive(); break; case EmpressXenomorphState.Death: TickDeath(); break; } SyncNetworkState(); } private void TickSpawnIntro() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) _enemy.CurrentState = (EnemyState)1; HardStopAgent(0.1f); if (_stateTimer <= 0f && !SemiFunc.EnemySpawnIdlePause()) { EnterPassive(); } } private void TickPassive() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_00cc: Unknown result type (might be due to invalid IL or missing references) //IL_00d1: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: Unknown result type (might be due to invalid IL or missing references) //IL_00f3: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) _enemy.CurrentState = (EnemyState)2; if (SemiFunc.EnemySpawnIdlePause()) { HardStopAgent(0.1f); return; } if (((Behaviour)_navMeshAgent).enabled && _navMeshAgent.isOnNavMesh && _navMeshAgent.hasPath && Vector3.Distance(((Component)this).transform.position, _moveDestination) > 1f) { Vector3 desiredVelocity = _navMeshAgent.desiredVelocity; if (((Vector3)(ref desiredVelocity)).sqrMagnitude > 0.04f) { FaceTravelDirection(6f); TryPushDoorsForBody(); TryPushPhysicsObjectsForBody(); return; } } if (_decisionTimer > 0f) { FaceTravelDirection(6f); TryPushDoorsForBody(); TryPushPhysicsObjectsForBody(); } else { _decisionTimer = 1.3f; _moveDestination = FindPassiveDestination(); SetMoveDestination(_moveDestination, 1.85f, 12f, 0.9f); FacePosition(_moveDestination, 6f); } } private void TickHurtRecover() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) _enemy.CurrentState = (EnemyState)9; HardStopAgent(0.1f); if (_stateTimer > 0f) { return; } EndHurtRecoverPhysics(); if ((Object)(object)_targetPlayer != (Object)null && IsTargetValid(_targetPlayer)) { if (_fusionPending) { EnterFusionCharge(_targetPlayer); } else { EnterPursue(_targetPlayer); } } else { EnterRetreat(); } } private void TickPursue() { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: Unknown result type (might be due to invalid IL or missing references) //IL_00d1: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Unknown result type (might be due to invalid IL or missing references) //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_00dd: Unknown result type (might be due to invalid IL or missing references) //IL_00f8: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)_targetPlayer == (Object)null || !IsTargetValid(_targetPlayer)) { EnterRetreat(); return; } _enemy.CurrentState = (EnemyState)4; Transform targetTransform = GetTargetTransform(_targetPlayer); Vector3 val = targetTransform.position + Vector3.up * 1.75f; if (CanCatchTarget(targetTransform, val)) { HardStopAgent(0.05f); EnterCarry(_targetPlayer); return; } if (_decisionTimer <= 0f || Vector3.Distance(_moveDestination, val) > 1.2f || (((Behaviour)_navMeshAgent).enabled && _navMeshAgent.isOnNavMesh && !_navMeshAgent.hasPath)) { _decisionTimer = 0.08f; _moveDestination = SampleNavMeshPosition(val, 2.2f, val); } SetMoveDestination(_moveDestination, 5.6f, 28f, 0.15f); FacePosition(targetTransform.position, 14f); TryPushDoorsForBody(); TryPushPhysicsObjectsForBody(); } private void TickCarry() { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)_carriedPlayer == (Object)null || !IsTargetValid(_carriedPlayer)) { EnterRetreat(); return; } _enemy.CurrentState = (EnemyState)4; _carryTimer -= Time.deltaTime; if (_decisionTimer <= 0f || Vector3.Distance(((Component)this).transform.position, _moveDestination) <= 1.5f || (((Behaviour)_navMeshAgent).enabled && _navMeshAgent.isOnNavMesh && !_navMeshAgent.hasPath)) { _decisionTimer = 0.65f; _moveDestination = FindCarryDestination(); } SetMoveDestination(_moveDestination, 6.35f, 34f, 0.8f); FaceTravelDirection(12f); TryPushDoorsForBody(); TryPushPhysicsObjectsForBody(); if (_carryTimer <= 0f) { EnterThrow(); } } private void TickThrow() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) _enemy.CurrentState = (EnemyState)3; HardStopAgent(0.12f); if (!_throwApplied) { _throwApplied = true; TriggerAttackAudio(); ThrowVictim(); } if (_stateTimer <= 0f) { EnterRetreat(); } } private void TickFusionCharge() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) _enemy.CurrentState = (EnemyState)3; HardStopAgent(0.08f); if ((Object)(object)_targetPlayer != (Object)null && IsTargetValid(_targetPlayer)) { FacePosition(((Component)_targetPlayer).transform.position, 6f); } if (_stateTimer <= 0f) { EnterFusionMonster(); } } private void TickFusionMonster() { //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_00c1: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: Unknown result type (might be due to invalid IL or missing references) //IL_00fd: Unknown result type (might be due to invalid IL or missing references) //IL_0103: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)_targetPlayer == (Object)null || !IsTargetValid(_targetPlayer)) { _targetPlayer = GetRandomValidPlayer(); if ((Object)(object)_targetPlayer == (Object)null) { EnterRetreat(); return; } } _enemy.CurrentState = (EnemyState)4; Transform targetTransform = GetTargetTransform(_targetPlayer); Vector3 position = targetTransform.position; if (_decisionTimer <= 0f || Vector3.Distance(_moveDestination, position) > 1.35f || (((Behaviour)_navMeshAgent).enabled && _navMeshAgent.isOnNavMesh && !_navMeshAgent.hasPath)) { _decisionTimer = 0.08f; _moveDestination = SampleNavMeshPosition(position, 2.4f, position); } SetMoveDestination(_moveDestination, 4.65f, 26f, 0.35f); FacePosition(targetTransform.position, 15f); TryPushDoorsForBody(); TryPushPhysicsObjectsForBody(); if (Vector3.Distance(_centerTransform.position, targetTransform.position) <= 2.9f) { EnterFusionSmash(); } else if (_stateTimer <= 0f) { EnterRetreat(); } } private void TickFusionSmash() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00d4: Unknown result type (might be due to invalid IL or missing references) _enemy.CurrentState = (EnemyState)3; HardStopAgent(0.15f); if ((Object)(object)_targetPlayer != (Object)null && IsTargetValid(_targetPlayer)) { FacePosition(((Component)_targetPlayer).transform.position, 10f); } if (!_fusionSmashApplied && _stateTimer <= 0.2475f) { _fusionSmashApplied = true; TriggerAttackAudio(); if ((Object)(object)_targetPlayer != (Object)null && IsTargetValid(_targetPlayer)) { Transform targetTransform = GetTargetTransform(_targetPlayer); if (Vector3.Distance(_centerTransform.position, targetTransform.position) <= 3.5f) { _targetPlayer.playerHealth.HurtOther(999, ((Component)_targetPlayer).transform.position, false, -1); _targetPlayer.PlayerDeath(-1); _targetPlayer.EnemyVisionFreezeTimerSet(0.6f); } } } if (_stateTimer <= 0f) { EnterRetreat(); } } private void TickRetreat() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Unknown result type (might be due to invalid IL or missing references) _enemy.CurrentState = (EnemyState)8; if (_stateTimer <= 0f) { EnterPassive(); return; } bool flag = Vector3.Distance(((Component)this).transform.position, _moveDestination) <= 1.65f || (((Behaviour)_navMeshAgent).enabled && _navMeshAgent.isOnNavMesh && !_navMeshAgent.hasPath) || DistanceToClosestPlayer(((Component)this).transform.position) < 10f; if (_decisionTimer <= 0f || flag) { _decisionTimer = 0.45f; _moveDestination = FindRetreatDestination(); } SetMoveDestination(_moveDestination, 5.1f, 24f, 1f); FaceTravelDirection(12f); TryPushDoorsForBody(); TryPushPhysicsObjectsForBody(); } private void TickDeath() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) _enemy.CurrentState = (EnemyState)9; HardStopAgent(0.1f); } private void EnterPassive() { //IL_0058: Unknown result type (might be due to invalid IL or missing references) EndHurtRecoverPhysics(); _state = EmpressXenomorphState.Passive; _stateTimer = 0f; _decisionTimer = 0f; _carryTimer = 0f; _fusionPending = false; _fusionSmashApplied = false; _targetPlayer = null; _carriedPlayer = null; _throwApplied = false; _enemy.CurrentState = (EnemyState)2; RepoEnemyAccess.SetTargetPlayer(_enemy, null, -1); } private void EnterHurtRecover() { //IL_0045: Unknown result type (might be due to invalid IL or missing references) _state = EmpressXenomorphState.HurtRecover; _stateTimer = 0.95f; _decisionTimer = 0f; _carryTimer = 0f; _fusionSmashApplied = false; _carriedPlayer = null; _throwApplied = false; _enemy.CurrentState = (EnemyState)9; StartHurtRecoverPhysics(); } private void EnterPursue(PlayerAvatar player) { //IL_0058: Unknown result type (might be due to invalid IL or missing references) EndHurtRecoverPhysics(); _state = EmpressXenomorphState.Pursue; _stateTimer = 0f; _decisionTimer = 0f; _carryTimer = 0f; _fusionPending = false; _fusionSmashApplied = false; _targetPlayer = player; _carriedPlayer = null; _throwApplied = false; _enemy.CurrentState = (EnemyState)4; TryTriggerSeeAudio(); } private void EnterCarry(PlayerAvatar player) { //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) _state = EmpressXenomorphState.Carry; _stateTimer = 0f; _decisionTimer = 0f; _carryTimer = 5f; _fusionPending = false; _fusionSmashApplied = false; _targetPlayer = player; _carriedPlayer = player; _throwApplied = false; _enemy.CurrentState = (EnemyState)4; _moveDestination = FindCarryDestination(); HardStopAgent(0.05f); player.tumble.TumbleRequest(true, false); player.tumble.TumbleOverrideTime(1f); player.EnemyVisionFreezeTimerSet(0.15f); } private void EnterThrow() { //IL_0032: Unknown result type (might be due to invalid IL or missing references) _state = EmpressXenomorphState.Throw; _stateTimer = 0.2f; _decisionTimer = 0f; _fusionPending = false; _fusionSmashApplied = false; _enemy.CurrentState = (EnemyState)3; _throwApplied = false; HardStopAgent(0.12f); } private void EnterFusionCharge(PlayerAvatar player) { //IL_0058: Unknown result type (might be due to invalid IL or missing references) EndHurtRecoverPhysics(); _state = EmpressXenomorphState.FusionCharge; _stateTimer = 4.6f; _decisionTimer = 0f; _carryTimer = 0f; _fusionPending = false; _fusionSmashApplied = false; _targetPlayer = player; _carriedPlayer = null; _throwApplied = false; _enemy.CurrentState = (EnemyState)3; HardStopAgent(0.08f); TryTriggerSeeAudio(); } private void EnterFusionMonster() { //IL_0056: Unknown result type (might be due to invalid IL or missing references) _state = EmpressXenomorphState.FusionMonster; _stateTimer = 7.4f; _decisionTimer = 0f; _carryTimer = 0f; _fusionCooldownTimer = 15f; _fusionPending = false; _fusionSmashApplied = false; _carriedPlayer = null; _throwApplied = false; _enemy.CurrentState = (EnemyState)4; } private void EnterFusionSmash() { //IL_002b: Unknown result type (might be due to invalid IL or missing references) _state = EmpressXenomorphState.FusionSmash; _stateTimer = 0.45f; _decisionTimer = 0f; _fusionSmashApplied = false; _enemy.CurrentState = (EnemyState)3; HardStopAgent(0.15f); } private void EnterRetreat() { //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) EndHurtRecoverPhysics(); _state = EmpressXenomorphState.Retreat; _stateTimer = 3.8f; _decisionTimer = 0f; _carryTimer = 0f; _fusionPending = false; _fusionSmashApplied = false; _targetPlayer = null; _carriedPlayer = null; _throwApplied = false; _enemy.CurrentState = (EnemyState)8; RepoEnemyAccess.SetTargetPlayer(_enemy, null, -1); _moveDestination = FindRetreatDestination(); SetMoveDestination(_moveDestination, 5.1f, 24f, 1f); } private void StartHurtRecoverPhysics() { //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0091: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: Unknown result type (might be due to invalid IL or missing references) //IL_00c7: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00e8: Unknown result type (might be due to invalid IL or missing references) //IL_00f2: Unknown result type (might be due to invalid IL or missing references) //IL_0103: Unknown result type (might be due to invalid IL or missing references) //IL_010d: Unknown result type (might be due to invalid IL or missing references) if (!_ragdollActive) { _ragdollActive = true; HardStopAgent(0.1f); if (((Behaviour)_navMeshAgent).enabled) { _navMeshAgent.ResetPath(); _navMeshAgent.isStopped = true; ((Behaviour)_navMeshAgent).enabled = false; } ((Behaviour)_enemyNavMeshAgent).enabled = false; _bodyRigidbody.useGravity = false; _bodyRigidbody.isKinematic = false; _bodyRigidbody.constraints = (RigidbodyConstraints)0; _bodyRigidbody.velocity = Vector3.zero; _bodyRigidbody.angularVelocity = Vector3.zero; Vector3 val = -((Component)this).transform.forward + Random.insideUnitSphere * 0.8f; Vector3 normalized = ((Vector3)(ref val)).normalized; normalized.y = Mathf.Abs(normalized.y) + 0.35f; _bodyRigidbody.AddForce(((Vector3)(ref normalized)).normalized * 6.5f, (ForceMode)1); _bodyRigidbody.AddTorque(Random.insideUnitSphere * 4.5499997f, (ForceMode)1); } } private void EndHurtRecoverPhysics() { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_00c1: Unknown result type (might be due to invalid IL or missing references) if (_ragdollActive) { _ragdollActive = false; NavMeshHit val = default(NavMeshHit); if (NavMesh.SamplePosition(_bodyRigidbody.position, ref val, 8f, -1)) { ((Component)this).transform.position = ((NavMeshHit)(ref val)).position; _bodyRigidbody.position = ((NavMeshHit)(ref val)).position; } _bodyRigidbody.velocity = Vector3.zero; _bodyRigidbody.angularVelocity = Vector3.zero; _bodyRigidbody.isKinematic = true; _bodyRigidbody.useGravity = false; _bodyRigidbody.constraints = (RigidbodyConstraints)112; ((Behaviour)_navMeshAgent).enabled = true; NavMeshHit val2 = default(NavMeshHit); if (NavMesh.SamplePosition(((Component)this).transform.position, ref val2, 6f, -1)) { _navMeshAgent.Warp(((NavMeshHit)(ref val2)).position); } _navMeshAgent.isStopped = false; ((Behaviour)_enemyNavMeshAgent).enabled = true; } } private void CarryVictimPhysics() { //IL_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Unknown result type (might be due to invalid IL or missing references) //IL_00c6: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: Unknown result type (might be due to invalid IL or missing references) //IL_00d5: Unknown result type (might be due to invalid IL or missing references) //IL_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: Unknown result type (might be due to invalid IL or missing references) //IL_00f9: Unknown result type (might be due to invalid IL or missing references) //IL_0104: Unknown result type (might be due to invalid IL or missing references) //IL_0109: Unknown result type (might be due to invalid IL or missing references) //IL_0113: Unknown result type (might be due to invalid IL or missing references) //IL_0118: Unknown result type (might be due to invalid IL or missing references) //IL_011a: Unknown result type (might be due to invalid IL or missing references) //IL_0132: Unknown result type (might be due to invalid IL or missing references) //IL_013d: Unknown result type (might be due to invalid IL or missing references) //IL_0142: Unknown result type (might be due to invalid IL or missing references) //IL_0145: Unknown result type (might be due to invalid IL or missing references) //IL_0152: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)_carriedPlayer == (Object)null) && IsTargetValid(_carriedPlayer)) { PlayerTumble tumble = _carriedPlayer.tumble; Rigidbody playerTumbleRigidBody = RepoEnemyAccess.GetPlayerTumbleRigidBody(tumble); PhysGrabObject playerTumblePhysGrabObject = RepoEnemyAccess.GetPlayerTumblePhysGrabObject(tumble); if (!RepoEnemyAccess.GetPlayerTumbleIsTumbling(tumble)) { tumble.TumbleSet(true, false); } tumble.TumbleOverrideTime(1f); _carriedPlayer.FallDamageResetSet(0.15f); tumble.OverrideEnemyHurt(0.15f); _carriedPlayer.EnemyVisionFreezeTimerSet(0.15f); playerTumblePhysGrabObject.OverrideMass(1f, 0.1f); playerTumblePhysGrabObject.OverrideAngularDrag(2.4f, 0.1f); playerTumblePhysGrabObject.OverrideDrag(1.8f, 0.1f); Vector3 val = SemiFunc.PhysFollowPosition(((Component)tumble).transform.position, _visual.CarryTransform.position, playerTumbleRigidBody.velocity, 24f); playerTumbleRigidBody.AddForce(val * (24f * Time.fixedDeltaTime), (ForceMode)1); Vector3 val2 = (_visual.CarryTransform.position - ((Component)tumble).transform.position) * 1.75f; playerTumbleRigidBody.AddForce(val2, (ForceMode)5); Vector3 val3 = SemiFunc.PhysFollowRotation(((Component)tumble).transform, _visual.CarryTransform.rotation, playerTumbleRigidBody, 0.25f); playerTumbleRigidBody.AddTorque(val3 * (3.2f * Time.fixedDeltaTime), (ForceMode)1); } } private void ThrowVictim() { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)_carriedPlayer == (Object)null || !IsTargetValid(_carriedPlayer)) { _carriedPlayer = null; return; } Vector3 onUnitSphere = Random.onUnitSphere; onUnitSphere.y = Mathf.Abs(onUnitSphere.y) * 0.5f + 0.5f; ((Vector3)(ref onUnitSphere)).Normalize(); _carriedPlayer.tumble.TumbleRequest(true, false); _carriedPlayer.tumble.TumbleOverrideTime(0.8f); _carriedPlayer.FallDamageResetSet(0.2f); _carriedPlayer.tumble.TumbleForce(onUnitSphere * 42f); _carriedPlayer.tumble.TumbleTorque(Random.onUnitSphere * 18f); _carriedPlayer.EnemyVisionFreezeTimerSet(0.3f); _carriedPlayer = null; } private bool CanCatchTarget(Transform targetTransform, Vector3 hoverTarget) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Unknown result type (might be due to invalid IL or missing references) if (Vector3.Distance(_centerTransform.position, hoverTarget) <= 2.2f) { return true; } Vector3 position = ((Component)this).transform.position; position.y = 0f; Vector3 position2 = targetTransform.position; position2.y = 0f; float num = Vector3.Distance(position, position2); float num2 = Mathf.Abs(_centerTransform.position.y - targetTransform.position.y); if (num <= 1.7f) { return num2 <= 2.4f; } return false; } private PlayerAvatar? GetRandomValidPlayer() { List<PlayerAvatar> list = new List<PlayerAvatar>(); foreach (PlayerAvatar item in SemiFunc.PlayerGetList()) { if (IsTargetValid(item)) { list.Add(item); } } if (list.Count != 0) { return list[Random.Range(0, list.Count)]; } return null; } private static bool IsTargetValid(PlayerAvatar? player) { if ((Object)(object)player != (Object)null && !RepoEnemyAccess.IsDisabled(player)) { return !RepoEnemyAccess.IsDeadSet(player); } return false; } private static Transform GetTargetTransform(PlayerAvatar player) { if (!((Object)(object)player.PlayerVisionTarget != (Object)null)) { return ((Component)player).transform; } return player.PlayerVisionTarget.VisionTransform; } private void UpdateVisuals() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_009f: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: Unknown result type (might be due to invalid IL or missing references) //IL_0109: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) Vector3 val = ((Component)this).transform.position - _lastPosition; float num = Mathf.Max(Time.deltaTime, 0.0001f); Vector3 val2 = val / num; bool flag = ((Vector3)(ref val)).sqrMagnitude > 0.0009f; if (flag && ((Behaviour)_navMeshAgent).enabled && _navMeshAgent.isOnNavMesh) { Vector3 velocity = _navMeshAgent.velocity; if (((Vector3)(ref velocity)).sqrMagnitude > 0.0025f) { val2 = Vector3.Lerp(val2, _navMeshAgent.velocity, 0.45f); goto IL_0098; } } if (!flag) { val2 = Vector3.zero; } goto IL_0098; IL_0098: Vector3 val3 = ((Component)this).transform.InverseTransformDirection(val2); _localVelX = Mathf.Lerp(_localVelX, val3.x, 10f * Time.deltaTime); _localVelZ = Mathf.Lerp(_localVelZ, val3.z, 10f * Time.deltaTime); _visual.UpdatePose(_state, new Vector3(_localVelX, 0f, _localVelZ), execution: false, 0); _visual.UpdateFusionPresentation(_state == EmpressXenomorphState.FusionCharge, _state == EmpressXenomorphState.FusionMonster || _state == EmpressXenomorphState.FusionSmash, (_state == EmpressXenomorphState.FusionCharge) ? (1f - Mathf.Clamp01(_stateTimer / 4.6f)) : 0f, (_state == EmpressXenomorphState.FusionSmash) ? (1f - Mathf.Clamp01(_stateTimer / 0.45f)) : 0f, Time.time); } private void UpdateAudio() { //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)_audio == (Object)null) && _audio.Ready) { ProcessReplicatedAudio(); if (_state == EmpressXenomorphState.Death) { _audio.StopAll(); return; } Vector2 val = new Vector2(_localVelX, _localVelZ); float magnitude = ((Vector2)(ref val)).magnitude; float ambienceLevel = _state switch { EmpressXenomorphState.SpawnIntro => 0.08f, EmpressXenomorphState.Passive => (magnitude > 0.05f) ? 0.14f : 0.07f, EmpressXenomorphState.HurtRecover => 0.12f, EmpressXenomorphState.Pursue => 0.34f, EmpressXenomorphState.Carry => 0.5f, EmpressXenomorphState.Throw => 0.32f, EmpressXenomorphState.FusionCharge => 0.42f, EmpressXenomorphState.FusionMonster => 0.62f, EmpressXenomorphState.FusionSmash => 0.58f, EmpressXenomorphState.Retreat => 0.28f, _ => 0f, }; _audio.SetAmbienceLevel(ambienceLevel); _audio.SetTransformationActive(_state == EmpressXenomorphState.FusionCharge); } } private void ProcessReplicatedAudio() { if (_remoteAttackAudioSerial != _playedAttackAudioSerial) { _playedAttackAudioSerial = _remoteAttackAudioSerial; if (_remoteAttackAudioSerial > 0) { _audio.PlayAttack(); } } if (_remoteHurtAudioSerial != _playedHurtAudioSerial) { _playedHurtAudioSerial = _remoteHurtAudioSerial; if (_remoteHurtAudioSerial > 0) { _audio.PlayHurt(); } } if (_remoteSeeAudioSerial != _playedSeeAudioSerial) { _playedSeeAudioSerial = _remoteSeeAudioSerial; if (_remoteSeeAudioSerial > 0) { _audio.PlaySee(); } } } private void TriggerAttackAudio() { _attackAudioSerial++; _remoteAttackAudioSerial = _attackAudioSerial; _playedAttackAudioSerial = _attackAudioSerial; _audio.PlayAttack(); } private void TriggerHurtAudio() { _hurtAudioSerial++; _remoteHurtAudioSerial = _hurtAudioSerial; _playedHurtAudioSerial = _hurtAudioSerial; _audio.PlayHurt(); } private void TryTriggerSeeAudio() { if (!(_seeSoundTimer > 0f)) { _seeSoundTimer = 4f; _seeAudioSerial++; _remoteSeeAudioSerial = _seeAudioSerial; _playedSeeAudioSerial = _seeAudioSerial; _audio.PlaySee(); } } private void SyncNetworkState() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) _networkRotation = ((Component)this).transform.rotation; _networkTargetViewId = (((Object)(object)_targetPlayer != (Object)null) ? _targetPlayer.photonView.ViewID : (-1)); _networkCarriedViewId = (((Object)(object)_carriedPlayer != (Object)null) ? _carriedPlayer.photonView.ViewID : (-1)); int viewId = ((_networkCarriedViewId != -1) ? _networkCarriedViewId : _networkTargetViewId); RepoEnemyAccess.SetTargetPlayer(_enemy, _carriedPlayer ?? _targetPlayer, viewId); } private void UpdateRemoteTargets() { _targetPlayer = ResolvePlayerByViewId(_networkTargetViewId); _carriedPlayer = ResolvePlayerByViewId(_networkCarriedViewId); int viewId = ((_networkCarriedViewId != -1) ? _networkCarriedViewId : _networkTargetViewId); RepoEnemyAccess.SetTargetPlayer(_enemy, _carriedPlayer ?? _targetPlayer, viewId); } private static PlayerAvatar? ResolvePlayerByViewId(int viewId) { if (viewId == -1) { return null; } foreach (PlayerAvatar item in SemiFunc.PlayerGetList()) { if (!RepoEnemyAccess.IsDisabled(item) && item.photonView.ViewID == viewId) { return item; } } return null; } private void SetMoveDestination(Vector3 destination, float speed, float acceleration, float stoppingDistance) { //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) if (EnsureRuntimeReady()) { _enemyNavMeshAgent.UpdateAgent(speed, acceleration); _navMeshAgent.speed = speed; _navMeshAgent.acceleration = acceleration; _navMeshAgent.stoppingDistance = stoppingDistance; _enemyNavMeshAgent.Stop(0f); _navMeshAgent.isStopped = false; _enemyNavMeshAgent.SetDestination(destination); if (((Behaviour)_navMeshAgent).enabled && _navMeshAgent.isOnNavMesh) { _navMeshAgent.SetDestination(destination); } } } private void TryPushDoorsForBody() { //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: Unknown result type (might be due to invalid IL or missing references) //IL_00e4: Unknown result type (might be due to invalid IL or missing references) //IL_00e6: Unknown result type (might be due to invalid IL or missing references) //IL_00f0: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: Unknown result type (might be due to invalid IL or missing references) //IL_0101: Unknown result type (might be due to invalid IL or missing references) if (_doorCheckTimer > 0f) { return; } Vector3 val = ((((Behaviour)_navMeshAgent).enabled && _navMeshAgent.isOnNavMesh) ? _navMeshAgent.desiredVelocity : Vector3.zero); val.y = 0f; if (((Vector3)(ref val)).sqrMagnitude <= 0.001f) { val = _moveDestination - ((Component)this).transform.position; val.y = 0f; } if (!(((Vector3)(ref val)).sqrMagnitude <= 0.001f)) { _doorCheckTimer = 0.08f; ((Vector3)(ref val)).Normalize(); float currentBodyHitRadius = GetCurrentBodyHitRadius(); Vector3 val2 = GetCurrentBodyHitCenter() + val * Mathf.Max(0.08f, currentBodyHitRadius * 0.35f); PushDoorsAroundBody(val2, currentBodyHitRadius + 0.18f, val); if (_state == EmpressXenomorphState.FusionMonster || _state == EmpressXenomorphState.FusionSmash) { PushDoorsAroundBody(val2 + val * currentBodyHitRadius * 0.8f, currentBodyHitRadius + 0.26f, val); } } } private void TryPushPhysicsObjectsForBody() { //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: Unknown result type (might be due to invalid IL or missing references) //IL_00da: Unknown result type (might be due to invalid IL or missing references) //IL_017b: Unknown result type (might be due to invalid IL or missing references) //IL_017c: Unknown result type (might be due to invalid IL or missing references) //IL_0181: Unknown result type (might be due to invalid IL or missing references) //IL_0185: Unknown result type (might be due to invalid IL or missing references) //IL_018b: Unknown result type (might be due to invalid IL or missing references) //IL_0198: Unknown result type (might be due to invalid IL or missing references) //IL_019e: Unknown result type (might be due to invalid IL or missing references) //IL_01a3: Unknown result type (might be due to invalid IL or missing references) if (_bodyPushTimer > 0f) { return; } Vector3 val = ((((Behaviour)_navMeshAgent).enabled && _navMeshAgent.isOnNavMesh) ? _navMeshAgent.desiredVelocity : Vector3.zero); val.y = 0f; if (((Vector3)(ref val)).sqrMagnitude <= 0.001f) { val = _moveDestination - ((Component)this).transform.position; val.y = 0f; } if (((Vector3)(ref val)).sqrMagnitude <= 0.001f) { return; } _bodyPushTimer = 0.08f; ((Vector3)(ref val)).Normalize(); float currentBodyHitRadius = GetCurrentBodyHitRadius(); Vector3 val2 = GetCurrentBodyHitCenter() + val * Mathf.Max(0.22f, currentBodyHitRadius * 0.55f); float num = Mathf.Clamp(currentBodyHitRadius + 0.22f, 0.34f, 1.35f); Collider[] array = Physics.OverlapSphere(val2, num, LayerMask.GetMask(new string[2] { "PhysGrabObject", "Default" }), (QueryTriggerInteraction)1); HashSet<Rigidbody> hashSet = new HashSet<Rigidbody>(); Collider[] array2 = array; foreach (Collider val3 in array2) { if (!((Object)(object)val3 == (Object)null) && !((Component)val3).transform.IsChildOf(((Component)this).transform) && !((Object)(object)((Component)val3).GetComponentInParent<PhysGrabHinge>() != (Object)null)) { Rigidbody attachedRigidbody = val3.attachedRigidbody; if (!((Object)(object)attachedRigidbody == (Object)null) && !((Object)(object)attachedRigidbody == (Object)(object)_bodyRigidbody) && hashSet.Add(attachedRigidbody)) { attachedRigidbody.WakeUp(); Vector3 val4 = val3.ClosestPoint(val2); attachedRigidbody.AddForce(val * 4.5f, (ForceMode)1); attachedRigidbody.AddForceAtPosition(val * 3.825f, val4, (ForceMode)1); } } } } private Vector3 GetCurrentBodyHitCenter() { //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) return ((Component)this).transform.TransformPoint(_visual.PreferredHitCenterLocal); } private float GetCurrentBodyHitRadius() { float num = ((_state == EmpressXenomorphState.FusionMonster || _state == EmpressXenomorphState.FusionSmash) ? 1.22f : 1f); return Mathf.Clamp(_visual.PreferredHitRadius * num, 0.24f, 1.35f); } private static void PushDoorsAroundBody(Vector3 origin, float radius, Vector3 moveDirection) { //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_00f8: Unknown result type (might be due to invalid IL or missing references) //IL_00fd: Unknown result type (might be due to invalid IL or missing references) //IL_010e: Unknown result type (might be due to invalid IL or missing references) //IL_0113: Unknown result type (might be due to invalid IL or missing references) //IL_0145: Unknown result type (might be due to invalid IL or missing references) //IL_014a: Unknown result type (might be due to invalid IL or missing references) //IL_014b: Unknown result type (might be due to invalid IL or missing references) //IL_0150: Unknown result type (might be due to invalid IL or missing references) //IL_0174: Unknown result type (might be due to invalid IL or missing references) //IL_0175: Unknown result type (might be due to invalid IL or missing references) //IL_017a: Unknown result type (might be due to invalid IL or missing references) //IL_017d: Unknown result type (might be due to invalid IL or missing references) //IL_0187: Unknown result type (might be due to invalid IL or missing references) //IL_018c: Unknown result type (might be due to invalid IL or missing references) //IL_0191: Unknown result type (might be due to invalid IL or missing references) //IL_019c: Unknown result type (might be due to invalid IL or missing references) //IL_01a2: Unknown result type (might be due to invalid IL or missing references) //IL_01af: Unknown result type (might be due to invalid IL or missing references) //IL_01b5: Unknown result type (might be due to invalid IL or missing references) //IL_01ba: Unknown result type (might be due to invalid IL or missing references) //IL_01c4: Unknown result type (might be due to invalid IL or missing references) //IL_01cb: Unknown result type (might be due to invalid IL or missing references) //IL_01d5: Unknown result type (might be due to invalid IL or missing references) moveDirection.y = 0f; if (((Vector3)(ref moveDirection)).sqrMagnitude <= 0.001f) { moveDirection = Vector3.forward; } ((Vector3)(ref moveDirection)).Normalize(); Collider[] array = Physics.OverlapSphere(origin, radius, LayerMask.GetMask(new string[1] { "PhysGrabObjectHinge" }), (QueryTriggerInteraction)1); HashSet<PhysGrabHinge> hashSet = new HashSet<PhysGrabHinge>(); Vector3 val = Vector3.Cross(Vector3.up, moveDirection); Vector3 val2 = ((Vector3)(ref val)).normalized; if (((Vector3)(ref val2)).sqrMagnitude <= 0.001f) { val2 = Vector3.right; } Collider[] array2 = array; foreach (Collider val3 in array2) { PhysGrabHinge componentInParent = ((Component)val3).GetComponentInParent<PhysGrabHinge>(); if ((Object)(object)componentInParent == (Object)null || !hashSet.Add(componentInParent) || RepoEnemyAccess.GetPhysGrabHingeBroken(componentInParent) || RepoEnemyAccess.GetPhysGrabHingeDead(componentInParent)) { continue; } int instanceID = ((Object)componentInParent).GetInstanceID(); if (DoorPushCooldowns.TryGetValue(instanceID, out var value) && value > Time.time) { continue; } Rigidbody physGrabHingeBody = RepoEnemyAccess.GetPhysGrabHingeBody(componentInParent); if ((Object)(object)physGrabHingeBody == (Object)null) { continue; } val = physGrabHingeBody.angularVelocity; if (!(((Vector3)(ref val)).sqrMagnitude > 6f)) { val = physGrabHingeBody.velocity; if (!(((Vector3)(ref val)).sqrMagnitude > 2f)) { float num = Mathf.Sign(Vector3.Dot(((Component)componentInParent).transform.position - origin, val2)); if (Mathf.Approximately(num, 0f)) { num = 1f; } Vector3 val4 = val3.ClosestPoint(origin) + val2 * num * 0.18f; physGrabHingeBody.WakeUp(); physGrabHingeBody.AddForce(moveDirection * 3.6f, (ForceMode)1); physGrabHingeBody.AddForceAtPosition(moveDirection * 3.2399998f, val4, (ForceMode)1); physGrabHingeBody.AddTorque(Vector3.up * num * 3f, (ForceMode)1); if (RepoEnemyAccess.GetPhysGrabHingeClosed(componentInParent)) { RepoEnemyAccess.InvokePhysGrabHingeOpenImpulse(componentInParent); } DoorPushCooldowns[instanceID] = Time.time + 0.45f; continue; } } DoorPushCooldowns[instanceID] = Time.time + 0.12f; } } private void HardStopAgent(float duration) { _enemyNavMeshAgent.Stop(duration); if (((Behaviour)_navMeshAgent).enabled && _navMeshAgent.isOnNavMesh) { _navMeshAgent.isStopped = true; _navMeshAgent.ResetPath(); } } private void FacePosition(Vector3 position, float turnSpeed) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) Vector3 val = position - ((Component)this).transform.position; val.y = 0f; if (!(((Vector3)(ref val)).sqrMagnitude <= 0.0001f)) { Quaternion val2 = Quaternion.LookRotation(((Vector3)(ref val)).normalized, Vector3.up); ((Component)this).transform.rotation = Quaternion.Slerp(((Component)this).transform.rotation, val2, turnSpeed * Time.deltaTime); } } private void FaceTravelDirection(float turnSpeed) { //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Unknown result type (might be due to invalid IL or missing references) Vector3 val = ((((Behaviour)_navMeshAgent).enabled && _navMeshAgent.isOnNavMesh) ? _navMeshAgent.desiredVelocity : Vector3.zero); val.y = 0f; if (((Vector3)(ref val)).sqrMagnitude <= 0.01f) { val = _moveDestination - ((Component)this).transform.position; val.y = 0f; } if (((Vector3)(ref val)).sqrMagnitude > 0.01f) { FacePosition(((Component)this).transform.position + val, turnSpeed); } } private static Vector3 SampleNavMeshPosition(Vector3 desired, float range, Vector3 fallback) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) NavMeshHit val = default(NavMeshHit); if (NavMesh.SamplePosition(desired, ref val, range, -1)) { return ((NavMeshHit)(ref val)).position; } if (NavMesh.SamplePosition(fallback, ref val, range, -1)) { return ((NavMeshHit)(ref val)).position; } return fallback; } private Vector3 FindPassiveDestination() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) LevelPoint val = SemiFunc.LevelPointGet(((Component)this).transform.position, 8f, 30f); if (!Object.op_Implicit((Object)(object)val)) { val = SemiFunc.LevelPointGet(((Component)this).transform.position, 0f, 999f); } if (!Object.op_Implicit((Object)(object)val)) { return ((Component)this).transform.position; } return SampleNavMeshPosition(((Component)val).transform.position + Random.insideUnitSphere * 3f, 6f, ((Component)val).transform.position); } private Vector3 FindCarryDestination() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) LevelPoint val = SemiFunc.LevelPointGetPlayerDistance(((Component)this).transform.position, 18f, 60f, false); if (!Object.op_Implicit((Object)(object)val)) { val = SemiFunc.LevelPointGetFurthestFromPlayer(((Component)this).transform.position, 8f); } if (!Object.op_Implicit((Object)(object)val)) { return FindRetreatDestination(); } return SampleNavMeshPosition(((Component)val).transform.position + Random.insideUnitSphere * 2.5f, 6f, ((Component)val).transform.position); } private Vector3 FindRetreatDestination() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) LevelPoint val = SemiFunc.LevelPointGetFurthestFromPlayer(((Component)this).transform.position, 8f); if (!Object.op_Implicit((Object)(object)val)) { val = SemiFunc.LevelPointGetPlayerDistance(((Component)this).transform.position, 18f, 80f, false); } if (!Object.op_Implicit((Object)(object)val)) { return FindPassiveDestination(); } return SampleNavMeshPosition(((Component)val).transform.position + Random.insideUnitSphere * 3f, 6f, ((Component)val).transform.position); } private float DistanceToClosestPlayer(Vector3 position) { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) float num = float.MaxValue; foreach (PlayerAvatar item in SemiFunc.PlayerGetList()) { if (IsTargetValid(item)) { float num2 = Vector3.Distance(position, ((Component)item).transform.position); if (num2 < num) { num = num2; } } } if (num != float.MaxValue) { return num; } return 99f; } private bool EnsureRuntimeReady() { //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) if (_ragdollActive) { return true; } if (((Behaviour)_navMeshAgent).enabled && _navMeshAgent.isOnNavMesh) { if (!((Behaviour)_enemyNavMeshAgent).enabled) { ((Behaviour)_enemyNavMeshAgent).enabled = true; } return true; } NavMeshHit val = default(NavMeshHit); if (NavMesh.SamplePosition(((Component)this).transform.position, ref val, 6f, -1)) { ((Behaviour)_navMeshAgent).enabled = true; _navMeshAgent.Warp(((NavMeshHit)(ref val)).position); if (!((Behaviour)_enemyNavMeshAgent).enabled) { ((Behaviour)_enemyNavMeshAgent).enabled = true; } return true; } return false; } private static bool IsGameplayReady() { //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Invalid comparison between Unknown and I4 if ((Object)(object)LevelGenerator.Instance != (Object)null && LevelGenerator.Instance.Generated && (Object)(object)GameDirector.instance != (Object)null && (int)GameDirector.instance.currentState == 2 && !SemiFunc.RunIsLobbyMenu()) { return !SemiFunc.MenuLevel(); } return false; } public void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) if (SemiFunc.MasterOnlyRPC(info)) { if (stream.IsWriting) { stream.SendNext((object)(int)_state); stream.SendNext((object)((Component)this).transform.rotation); stream.SendNext((object)_stateTimer); stream.SendNext((object)_networkTargetViewId); stream.SendNext((object)_networkCarriedViewId); stream.SendNext((object)_attackAudioSerial); stream.SendNext((object)_hurtAudioSerial); stream.SendNext((object)_seeAudioSerial); } else { _state = (EmpressXenomorphState)(int)stream.ReceiveNext(); _networkRotation = (Quaternion)stream.ReceiveNext(); _stateTimer = (float)stream.ReceiveNext(); _networkTargetViewId = (int)stream.ReceiveNext(); _networkCarriedViewId = (int)stream.ReceiveNext(); _remoteAttackAudioSerial = (int)stream.ReceiveNext(); _remoteHurtAudioSerial = (int)stream.ReceiveNext(); _remoteSeeAudioSerial = (int)stream.ReceiveNext(); } } } } internal sealed class EmpressXenomorphImpactBridge : MonoBehaviour { private const float ImpactCooldown = 0.12f; private const float MinimumImpactSpeed = 4.2f; private const float MediumImpactSpeed = 8.5f; private const float HeavyImpactSpeed = 13.5f; private Enemy _enemy; private EnemyHealth _health; private float _impactCooldownTimer; internal void Initialize(Enemy enemy, EnemyHealth health) { _enemy = enemy; _health = health; _impactCooldownTimer = 0f; } private void Update() { if (_impactCooldownTimer > 0f) { _impactCooldownTimer -= Time.deltaTime; } } private void OnCollisionEnter(Collision collision) { TryHandleImpact(collision); } private void OnCollisionStay(Collision collision) { TryHandleImpact(collision); } private void TryHandleImpact(Collision collision) { //IL_00e0: Unknown result type (might be due to invalid IL or missing references) //IL_00e5: Unknown result type (might be due to invalid IL or missing references) //IL_0113: Unknown result type (might be due to invalid IL or missing references) //IL_0118: Unknown result type (might be due to invalid IL or missing references) //IL_0183: Unknown result type (might be due to invalid IL or missing references) //IL_0188: Unknown result type (might be due to invalid IL or missing references) //IL_018c: Unknown result type (might be due to invalid IL or missing references) //IL_0191: Unknown result type (might be due to invalid IL or missing references) //IL_015d: Unknown result type (might be due to invalid IL or missing references) //IL_0164: Unknown result type (might be due to invalid IL or missing references) //IL_0169: Unknown result type (might be due to invalid IL or missing references) //IL_016d: Unknown result type (might be due to invalid IL or missing references) //IL_0172: Unknown result type (might be due to invalid IL or missing references) //IL_0177: Unknown result type (might be due to invalid IL or missing references) //IL_017b: Unknown result type (might be due to invalid IL or missing references) //IL_0137: Unknown result type (might be due to invalid IL or missing references) //IL_0142: Unknown result type (might be due to invalid IL or missing references) //IL_0147: Unknown result type (might be due to invalid IL or missing references) //IL_014c: Unknown result type (might be due to invalid IL or missing references) //IL_0150: Unknown result type (might be due to invalid IL or missing references) //IL_01c0: Unknown result type (might be due to invalid IL or missing references) //IL_01a7: Unknown result type (might be due to invalid IL or missing references) //IL_01ac: Unknown result type (might be due to invalid IL or missing references) if (_impactCooldownTimer > 0f || (Object)(object)_enemy == (Object)null || (Object)(object)_health == (Object)null || (GameManager.Multiplayer() && !RepoEnemyAccess.GetMasterClient(_enemy)) || RepoEnemyAccess.GetEnemyHealthDead(_health) || RepoEnemyAccess.GetEnemyHealthDeadImpulse(_health) || collision == null || (Object)(object)collision.transform == (Object)null || collision.transform.IsChildOf(((Component)this).transform)) { return; } PhysGrabObject val = ((Component)collision.transform).GetComponentInParent<PhysGrabObject>(); if ((Object)(object)val == (Object)null && (Object)(object)collision.rigidbody != (Object)null) { val = ((Component)collision.rigidbody).GetComponent<PhysGrabObject>(); } if ((Object)(object)val == (Object)null) { return; } Rigidbody val2 = (((Object)(object)val.rb != (Object)null) ? val.rb : collision.rigidbody); if ((Object)(object)val2 == (Object)null) { return; } Vector3 val3 = collision.relativeVelocity; float magnitude = ((Vector3)(ref val3)).magnitude; if (magnitude < 4.2f) { return; } int num = ((magnitude >= 13.5f) ? 18 : ((magnitude >= 8.5f) ? 10 : 4)); val3 = val2.velocity; Vector3 normalized; if (!(((Vector3)(ref val3)).sqrMagnitude > 0.01f)) { if (collision.contactCount <= 0) { val3 = ((Component)this).transform.position - collision.transform.position; normalized = ((Vector3)(ref val3)).normalized; } else { Vector3 position = ((Component)this).transform.position; ContactPoint contact = collision.GetContact(0); val3 = position - ((ContactPoint)(ref contact)).point; normalized = ((Vector3)(ref val3)).normalized; } } else { val3 = val2.velocity; normalized = ((Vector3)(ref val3)).normalized; } Vector3 val4 = normalized; if (((Vector3)(ref val4)).sqrMagnitude <= 0.001f) { val4 = ((Component)this).transform.forward; } _impactCooldownTimer = 0.12f; _health.Hurt(num, val4); RepoEnemyAccess.EnsureEnemyHealthOnObjectHurt(_health).Invoke(); } } [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInPlugin("omniscye.gooby", "Gooby", "1.0.0")] internal sealed class EmpressXenomorphPlugin : BaseUnityPlugin { private static readonly FieldInfo EnemySetupField = AccessTools.Field(typeof(EnemyContent), "_setup"); private static readonly FieldInfo SpawnObjectsField = AccessTools.Field(typeof(EnemyContent), "_spawnObjects"); internal const string PluginGuid = "omniscye.gooby"; internal const string PluginName = "Gooby"; internal const string PluginVersion = "1.0.0"; internal const string TemplatePrefabName = "GoobyPrefab"; internal const string BundleFileName = "xeno"; internal const float DefaultEnemySoundVolume = 0.4f; internal const float DefaultDigivolutionVolume = 0.8f; private static Harmony? _harmony; private static bool _registered; private static GameObject? _runtimeHost; private static ConfigEntry<int>? _fusionChancePercentConfig; private static ConfigEntry<float>? _enemySoundVolumeConfig; private static ConfigEntry<float>? _digivolutionVolumeConfig; internal static ManualLogSource Log { get; private set; } = null; internal static string PluginDirectory { get; private set; } = string.Empty; internal static float FusionChanceRatio => Mathf.Clamp((float)(_fusionChancePercentConfig?.Value ?? 10) / 100f, 0f, 1f); internal static float EnemySoundVolume => Mathf.Clamp01(_enemySoundVolumeConfig?.Value ?? 0.4f); internal static float DigivolutionVolume => Mathf.Clamp01(_digivolutionVolumeConfig?.Value ?? 0.8f); internal static GameObject EnsureRuntimeHost() { //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Expected O, but got Unknown if ((Object)(object)_runtimeHost != (Object)null) { return _runtimeHost; } _runtimeHost = new GameObject("GoobyRuntimeHost"); ((Object)_runtimeHost).hideFlags = (HideFlags)61; Object.DontDestroyOnLoad((Object)(object)_runtimeHost); return _runtimeHost; } private void Awake() { //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Expected O, but got Unknown //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: Expected O, but got Unknown //IL_00e2: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: Expected O, but got Unknown //IL_00fd: Unknown result type (might be due to invalid IL or missing references) //IL_0107: Expected O, but got Unknown Log = ((BaseUnityPlugin)this).Logger; PluginDirectory = Path.GetDirectoryName(((BaseUnityPlugin)this).Info.Location) ?? string.Empty; EnsureRuntimeHost(); if (_fusionChancePercentConfig == null) { _fusionChancePercentConfig = ((BaseUnityPlugin)this).Config.Bind<int>("Gooby", "FusionTransformChancePercent", 10, new ConfigDescription("Chance that Gooby performs the Digivolve-style fusion transformation after being hurt.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 100), Array.Empty<object>())); } if (_enemySoundVolumeConfig == null) { _enemySoundVolumeConfig = ((BaseUnityPlugin)this).Config.Bind<float>("Gooby Audio", "GoobySoundVolume", 0.4f, new ConfigDescription("Master volume for Gooby's normal sounds.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>())); } if (_digivolutionVolumeConfig == null) { _digivolutionVolumeConfig = ((BaseUnityPlugin)this).Config.Bind<float>("Gooby Audio", "DigivolutionVolume", 0.8f, new ConfigDescription("Volume for Gooby's Digivolution music.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), Array.Empty<object>())); } if (_harmony == null) { _harmony = new Harmony("omniscye.gooby"); } PatchTemplateGuards(_harmony); RegisterEnemy(); ((MonoBehaviour)this).StartCoroutine(EmpressXenomorphAudioBank.LoadAudioAsync(PluginDirectory, ((BaseUnityPlugin)this).Logger)); ((BaseUnityPlugin)this).Logger.LogInfo((object)"Loaded Gooby v1.0.0"); } private void RegisterEnemy() { if (!_registered) { GameObject item = EmpressXenomorphTemplateBootstrap.CreateTemplate(((BaseUnityPlugin)this).Logger); RarityPreset val = ScriptableObject.CreateInstance<RarityPreset>(); ((Object)val).hideFlags = (HideFlags)61; ((Object)val).name = "Rarity - Gooby"; val.chance = 14f; EnemySetup val2 = ScriptableObject.CreateInstance<EnemySetup>(); ((Object)val2).hideFlags = (HideFlags)61; ((Object)val2).name = "Enemy - Gooby"; val2.spawnObjects = new List<PrefabRef>(); val2.levelsCompletedCondition = false; val2.levelsCompletedMin = 0; val2.levelsCompletedMax = 10; val2.rarityPreset = val; val2.runsPlayed = 0; EnemyContent val3 = ScriptableObject.CreateInstance<EnemyContent>(); ((Object)val3).hideFlags = (HideFlags)61; ((Object)val3).name = "EnemyContentGooby"; EnemySetupField.SetValue(val3, val2); SpawnObjectsField.SetValue(val3, new List<GameObject> { item }); Enemies.RegisterEnemy(val3); _registered = true; ((BaseUnityPlugin)this).Logger.LogInfo((object)"Registered Gooby through REPOLib."); } } private static void PatchTemplateGuards(Harmony harmony) { //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Expected O, but got Unknown //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Expected O, but got Unknown //IL_0093: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Expected O, but got Unknown //IL_00c9: Unknown result type (might be due to invalid IL or missing references) //IL_00d7: Expected O, but got Unknown //IL_00ff: Unknown result type (might be due to invalid IL or missing references) //IL_010d: Expected O, but got Unknown //IL_0135: Unknown result type (might be due to invalid IL or missing references) //IL_0143: Expected O, but got Unknown //IL_016b: Unknown result type (might be due to invalid IL or missing references) //IL_0179: Expected O, but got Unknown //IL_01a1: Unknown result type (might be due to invalid IL or missing references) //IL_01af: Expected O, but got Unknown //IL_01d7: Unknown result type (might be due to invalid IL or missing references) //IL_01e5: Expected O, but got Unknown //IL_020d: Unknown result type (might be due to invalid IL or missing references) //IL_021b: Expected O, but got Unknown harmony.Patch((MethodBase)AccessTools.Method(typeof(EnemyParent), "Awake", (Type[])null, (Type[])null), new HarmonyMethod(typeof(EmpressXenomorphPlugin), "SkipTemplateEnemyParentAwake", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); harmony.Patch((MethodBase)AccessTools.Method(typeof(EnemyParent), "Update", (Type[])null, (Type[])null), new HarmonyMethod(typeof(EmpressXenomorphPlugin), "SkipTemplateEnemyParentUpdate", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); harmony.Patch((MethodBase)AccessTools.Method(typeof(Enemy), "Awake", (Type[])null, (Type[])null), new HarmonyMethod(typeof(EmpressXenomorphPlugin), "SkipTemplateEnemyAwake", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); harmony.Patch((MethodBase)AccessTools.Method(typeof(Enemy), "Start", (Type[])null, (Type[])null), new HarmonyMethod(typeof(EmpressXenomorphPlugin), "SkipTemplateEnemyStart", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); harmony.Patch((MethodBase)AccessTools.Method(typeof(Enemy), "Update", (Type[])null, (Type[])null), new HarmonyMethod(typeof(EmpressXenomorphPlugin), "SkipTemplateEnemyUpdate", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); harmony.Patch((MethodBase)AccessTools.Method(typeof(EnemyNavMeshAgent), "Awake", (Type[])null, (Type[])null), new HarmonyMethod(typeof(EmpressXenomorphPlugin), "SkipTemplateEnemyNavMeshAgentAwake", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); harmony.Patch((MethodBase)AccessTools.Method(typeof(EnemyNavMeshAgent), "OnEnable", (Type[])null, (Type[])null), new HarmonyMethod(typeof(EmpressXenomorphPlugin), "SkipTemplateEnemyNavMeshAgentOnEnable", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); harmony.Patch((MethodBase)AccessTools.Method(typeof(EnemyNavMeshAgent), "Update", (Type[])null, (Type[])null), new HarmonyMethod(typeof(EmpressXenomorphPlugin), "SkipTemplateEnemyNavMeshAgentUpdate", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); harmony.Patch((MethodBase)AccessTools.Method(typeof(EnemyStateSpawn), "Update", (Type[])null, (Type[])null), new HarmonyMethod(typeof(EmpressXenomorphPlugin), "SkipTemplateEnemyStateSpawnUpdate", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); harmony.Patch((MethodBase)AccessTools.Method(typeof(EnemyStateStunned), "Update", (Type[])null, (Type[])null), new HarmonyMethod(typeof(EmpressXenomorphPlugin), "SkipTemplateEnemyStateStunnedUpdate", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } private static bool SkipTemplateEnemyParentAwake(EnemyParent __instance) { return !EmpressXenomorphTemplateBootstrap.IsTemplateInstance(((Component)__instance).gameObject); } private static bool SkipTemplateEnemyParentUpdate(EnemyParent __instance) { return !EmpressXenomorphTemplateBootstrap.IsTemplateInstance(((Component)__instance).gameObject); } private static bool SkipTemplateEnemyAwake(Enemy __instance) { return !EmpressXenomorphTemplateBootstrap.IsTemplateInstance(((Component)__instance).gameObject); } private static bool SkipTemplateEnemyStart(Enemy __instance) { return !EmpressXenomorphTemplateBootstrap.IsTemplateInstance(((Component)__instance).gameObject); } private static bool SkipTemplateEnemyUpdate(Enemy __instance) { return !EmpressXenomorphTemplateBootstrap.IsTemplateInstance(((Component)__instance).gameObject); } private static bool SkipTemplateEnemyNavMeshAgentAwake(EnemyNavMeshAgent __instance) { return !EmpressXenomorphTemplateBootstrap.IsTemplateInstance(((Component)__instance).gameObject); } private static bool SkipTemplateEnemyNavMeshAgentOnEnable(EnemyNavMeshAgent __instance) { return !EmpressXenomorphTemplateBootstrap.IsTemplateInstance(((Component)__instance).gameObject); } private static bool SkipTemplateEnemyNavMeshAgentUpdate(EnemyNavMeshAgent __instance) { return !EmpressXenomorphTemplateBootstrap.IsTemplateInstance(((Component)__instance).gameObject); } private static bool SkipTemplateEnemyStateSpawnUpdate(EnemyStateSpawn __instance) { return !EmpressXenomorphTemplateBootstrap.Is