using System; 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 UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.UI; using UnityEngine.Video; [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("EmpressCustomMenuVideos")] [assembly: AssemblyTitle("EmpressCustomMenuVideos")] [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 EmpressCustomMenuVideos { [BepInPlugin("empress.repo.custommenuvideos", "EmpressCustomMenuVideos", "1.0.0")] public sealed class EmpressCustomMenuVideosPlugin : BaseUnityPlugin { internal const string PluginGuid = "empress.repo.custommenuvideos"; internal const string PluginName = "EmpressCustomMenuVideos"; internal const string PluginVersion = "1.0.0"; internal ConfigEntry EmpressEnabled; internal ConfigEntry EmpressVideoFolder; internal ConfigEntry EmpressRandomizeVideos; internal ConfigEntry EmpressPickNewVideoEachMenuOpen; internal ConfigEntry EmpressVideoVolume; internal ConfigEntry EmpressLoopVideo; internal ConfigEntry EmpressBackgroundDim; internal ConfigEntry EmpressMuteVanillaMenuMusic; internal ConfigEntry EmpressMuteMenuSounds; internal ConfigEntry EmpressShowStatus; internal ConfigEntry EmpressReloadKey; internal static EmpressCustomMenuVideosPlugin? Instance { get; private set; } internal ManualLogSource EmpressLog => ((BaseUnityPlugin)this).Logger; internal EmpressMenuVideoRuntime? EmpressRuntime { get; private set; } private void Awake() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_00e0: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: Expected O, but got Unknown //IL_0135: Unknown result type (might be due to invalid IL or missing references) //IL_013f: Expected O, but got Unknown Instance = this; ((Object)this).hideFlags = (HideFlags)(((Object)this).hideFlags | 0x3D); GameObject gameObject = ((Component)this).gameObject; ((Object)gameObject).hideFlags = (HideFlags)(((Object)gameObject).hideFlags | 0x3D); EmpressEnabled = ((BaseUnityPlugin)this).Config.Bind("Empress Menu Video", "Enabled", true, "Allows Empress to replace the main-menu background with local MP4 files."); EmpressVideoFolder = ((BaseUnityPlugin)this).Config.Bind("Empress Menu Video", "VideoFolder", Path.Combine(Paths.ConfigPath, "EmpressCustomMenuVideos"), "Folder where Empress looks for MP4 menu videos. The folder is created automatically."); EmpressRandomizeVideos = ((BaseUnityPlugin)this).Config.Bind("Empress Menu Video", "RandomizeVideos", true, "Randomizes between MP4 files when more than one video is in the folder."); EmpressPickNewVideoEachMenuOpen = ((BaseUnityPlugin)this).Config.Bind("Empress Menu Video", "PickNewVideoEachMenuOpen", true, "Picks a fresh random video whenever the main menu opens."); EmpressVideoVolume = ((BaseUnityPlugin)this).Config.Bind("Empress Menu Video", "Volume", 60, new ConfigDescription("Video volume from 0 to 100.", (AcceptableValueBase)(object)new AcceptableValueRange(0, 100), Array.Empty())); EmpressLoopVideo = ((BaseUnityPlugin)this).Config.Bind("Empress Menu Video", "LoopVideo", true, "Loops the menu video."); EmpressBackgroundDim = ((BaseUnityPlugin)this).Config.Bind("Empress Menu Video", "BackgroundDim", 18, new ConfigDescription("Black overlay dim amount from 0 to 100 so the menu stays readable.", (AcceptableValueBase)(object)new AcceptableValueRange(0, 100), Array.Empty())); EmpressMuteVanillaMenuMusic = ((BaseUnityPlugin)this).Config.Bind("Empress Menu Video", "MuteVanillaMenuMusic", true, "Mutes vanilla menu music while Empress menu video audio is active."); EmpressMuteMenuSounds = ((BaseUnityPlugin)this).Config.Bind("Empress Menu Video", "MuteMenuSounds", true, "Mutes vanilla menu sounds while Empress menu video audio is active."); EmpressShowStatus = ((BaseUnityPlugin)this).Config.Bind("Empress Menu Video", "ShowStatus", true, "Shows a tiny Empress status tag while the menu video is loading or playing."); EmpressReloadKey = ((BaseUnityPlugin)this).Config.Bind("Empress Controls", "ReloadKey", (KeyCode)289, "Reloads and re-picks the local MP4 menu video while on the main menu."); EmpressEnsureRuntime(); ((BaseUnityPlugin)this).Logger.LogInfo((object)"Empress custom menu videos are watching the title screen."); } internal EmpressMenuVideoRuntime EmpressEnsureRuntime() { //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_0028: Expected O, but got Unknown if ((Object)(object)EmpressRuntime != (Object)null) { return EmpressRuntime; } GameObject val = new GameObject("EmpressCustomMenuVideos.Runtime") { hideFlags = (HideFlags)61 }; Object.DontDestroyOnLoad((Object)(object)val); EmpressRuntime = val.AddComponent(); return EmpressRuntime; } } internal sealed class EmpressMenuVideoRuntime : MonoBehaviour { private static readonly FieldRef EmpressConstantMusicAudioSourceRef = AccessTools.FieldRefAccess("audioSource"); private static readonly FieldRef EmpressLevelMusicAudioSourceRef = AccessTools.FieldRefAccess("audioSource"); private readonly Dictionary empressMutedAudioVolumes = new Dictionary(); private readonly HashSet empressFailedVideos = new HashSet(StringComparer.OrdinalIgnoreCase); private Canvas? empressCanvas; private RawImage? empressVideoImage; private RawImage? empressDimImage; private Text? empressStatusText; private AspectRatioFitter? empressAspectFitter; private VideoPlayer? empressVideoPlayer; private AudioSource? empressAudioSource; private RenderTexture? empressRenderTexture; private GameObject? empressCameraPlane; private MeshRenderer? empressCameraPlaneRenderer; private Material? empressVideoMaterial; private string empressRequestedVideoPath = string.Empty; private string empressActivePlayableUrl = string.Empty; private string empressLastFolderPath = string.Empty; private string empressStatus = "Empress video idle"; private bool empressWasInMenu; private bool empressForcePickNew; private float empressNextFolderScanTime; private int empressRequestVersion; private static EmpressCustomMenuVideosPlugin? EmpressPlugin => EmpressCustomMenuVideosPlugin.Instance; private static string EmpressDefaultVideoFolder => Path.Combine(Paths.ConfigPath, "EmpressCustomMenuVideos"); private void Awake() { ((Object)((Component)this).gameObject).hideFlags = (HideFlags)61; Object.DontDestroyOnLoad((Object)(object)((Component)this).gameObject); EmpressEnsureVisuals(); } private void OnEnable() { SceneManager.sceneLoaded += EmpressOnSceneLoaded; } private void OnDisable() { SceneManager.sceneLoaded -= EmpressOnSceneLoaded; EmpressSetVisible(visible: false); EmpressRestoreVanillaMenuAudio(); } private void Update() { //IL_0032: Unknown result type (might be due to invalid IL or missing references) EmpressCustomMenuVideosPlugin empressPlugin = EmpressPlugin; if ((Object)(object)empressPlugin == (Object)null) { return; } EmpressEnsureVisuals(); bool flag = empressPlugin.EmpressEnabled.Value && EmpressIsMainMenuActive(); if (Input.GetKeyDown(empressPlugin.EmpressReloadKey.Value)) { EmpressResetVideoState("Empress reload requested"); empressForcePickNew = true; empressNextFolderScanTime = 0f; } if (flag != empressWasInMenu) { empressWasInMenu = flag; if (!flag) { EmpressSetVisible(visible: false); EmpressSetCameraPlaneVisible(visible: false); EmpressPauseVideo(); EmpressRestoreVanillaMenuAudio(); } else { EmpressSetVisible(visible: true); EmpressSetCameraPlaneVisible(visible: true); empressForcePickNew = empressPlugin.EmpressPickNewVideoEachMenuOpen.Value; empressNextFolderScanTime = 0f; } } if (!flag) { EmpressUpdateStatusVisual(); return; } EmpressSetVisible(visible: true); EmpressUpdateVolume(); EmpressUpdateDim(); EmpressUpdateAspect(); EmpressUpdateCameraPlane(); EmpressUpdateStatusVisual(); string text = EmpressResolveVideoFolder(empressPlugin); if (!string.Equals(text, empressLastFolderPath, StringComparison.OrdinalIgnoreCase)) { empressLastFolderPath = text; EmpressResetVideoState("Empress folder changed"); empressForcePickNew = true; empressFailedVideos.Clear(); empressNextFolderScanTime = 0f; } bool flag2 = !string.IsNullOrWhiteSpace(empressRequestedVideoPath) && !File.Exists(empressRequestedVideoPath); bool flag3 = string.IsNullOrWhiteSpace(empressRequestedVideoPath) || string.IsNullOrWhiteSpace(empressActivePlayableUrl); if (empressForcePickNew || flag2 || (Time.unscaledTime >= empressNextFolderScanTime && flag3)) { empressNextFolderScanTime = Time.unscaledTime + 2f; string text2 = EmpressPickMenuVideo(empressPlugin, text, empressForcePickNew || flag2); empressForcePickNew = false; if (string.IsNullOrWhiteSpace(text2)) { empressStatus = "Empress needs MP4s in " + text; EmpressPauseVideo(); return; } if (!string.Equals(text2, empressRequestedVideoPath, StringComparison.OrdinalIgnoreCase)) { EmpressPlayVideoPath(text2); return; } } if ((Object)(object)empressVideoPlayer != (Object)null && !string.IsNullOrWhiteSpace(empressActivePlayableUrl) && !empressVideoPlayer.isPlaying && empressVideoPlayer.isPrepared) { empressVideoPlayer.Play(); } } private void LateUpdate() { EmpressCustomMenuVideosPlugin empressPlugin = EmpressPlugin; if (!((Object)(object)empressPlugin == (Object)null) && empressPlugin.EmpressEnabled.Value && EmpressIsMainMenuActive()) { EmpressMuteVanillaMenuAudio(); } } private void EmpressOnSceneLoaded(Scene scene, LoadSceneMode mode) { empressWasInMenu = false; empressStatus = "Empress scene changed"; EmpressRestoreVanillaMenuAudio(); } private void EmpressEnsureVisuals() { //IL_0030: 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_003e: Expected O, but got Unknown //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Expected O, but got Unknown //IL_00c7: 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_0100: Unknown result type (might be due to invalid IL or missing references) //IL_010b: Unknown result type (might be due to invalid IL or missing references) //IL_0115: Unknown result type (might be due to invalid IL or missing references) //IL_0124: Unknown result type (might be due to invalid IL or missing references) //IL_0129: Unknown result type (might be due to invalid IL or missing references) //IL_0132: Expected O, but got Unknown //IL_0178: 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_018e: 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_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) //IL_01b5: Expected O, but got Unknown //IL_0227: Unknown result type (might be due to invalid IL or missing references) //IL_023d: Unknown result type (might be due to invalid IL or missing references) //IL_0248: Unknown result type (might be due to invalid IL or missing references) //IL_025d: Unknown result type (might be due to invalid IL or missing references) //IL_0271: Unknown result type (might be due to invalid IL or missing references) //IL_0288: Unknown result type (might be due to invalid IL or missing references) //IL_028d: Unknown result type (might be due to invalid IL or missing references) //IL_029d: Expected O, but got Unknown //IL_02c5: Unknown result type (might be due to invalid IL or missing references) //IL_02ca: Unknown result type (might be due to invalid IL or missing references) //IL_02d4: Expected O, but got Unknown //IL_03ae: Unknown result type (might be due to invalid IL or missing references) //IL_03b8: Expected O, but got Unknown //IL_03c5: Unknown result type (might be due to invalid IL or missing references) //IL_03cf: Expected O, but got Unknown if (!((Object)(object)empressCanvas != (Object)null) || !((Object)(object)empressVideoPlayer != (Object)null) || !((Object)(object)empressVideoImage != (Object)null)) { GameObject val = new GameObject("EmpressCustomMenuVideos.Canvas") { hideFlags = (HideFlags)61 }; val.transform.SetParent(((Component)this).transform, false); empressCanvas = val.AddComponent(); empressCanvas.renderMode = (RenderMode)0; empressCanvas.sortingOrder = -30000; val.AddComponent().uiScaleMode = (ScaleMode)1; GameObject val2 = new GameObject("Empress Video Surface") { hideFlags = (HideFlags)61 }; val2.transform.SetParent(val.transform, false); empressVideoImage = val2.AddComponent(); ((Graphic)empressVideoImage).raycastTarget = false; ((Graphic)empressVideoImage).color = Color.white; empressAspectFitter = val2.AddComponent(); empressAspectFitter.aspectMode = (AspectMode)4; RectTransform rectTransform = ((Graphic)empressVideoImage).rectTransform; rectTransform.anchorMin = Vector2.zero; rectTransform.anchorMax = Vector2.one; rectTransform.offsetMin = Vector2.zero; rectTransform.offsetMax = Vector2.zero; GameObject val3 = new GameObject("Empress Pink Black Dim") { hideFlags = (HideFlags)61 }; val3.transform.SetParent(val.transform, false); empressDimImage = val3.AddComponent(); ((Graphic)empressDimImage).raycastTarget = false; empressDimImage.texture = (Texture)(object)Texture2D.whiteTexture; RectTransform rectTransform2 = ((Graphic)empressDimImage).rectTransform; rectTransform2.anchorMin = Vector2.zero; rectTransform2.anchorMax = Vector2.one; rectTransform2.offsetMin = Vector2.zero; rectTransform2.offsetMax = Vector2.zero; GameObject val4 = new GameObject("Empress Status Brand") { hideFlags = (HideFlags)61 }; val4.transform.SetParent(val.transform, false); empressStatusText = val4.AddComponent(); ((Graphic)empressStatusText).raycastTarget = false; empressStatusText.font = Resources.GetBuiltinResource("Arial.ttf"); empressStatusText.fontSize = 16; empressStatusText.alignment = (TextAnchor)8; ((Graphic)empressStatusText).color = new Color(1f, 0.55f, 0.82f, 0.92f); RectTransform rectTransform3 = ((Graphic)empressStatusText).rectTransform; rectTransform3.anchorMin = Vector2.zero; rectTransform3.anchorMax = Vector2.one; rectTransform3.offsetMin = new Vector2(16f, 12f); rectTransform3.offsetMax = new Vector2(-18f, -12f); empressRenderTexture = new RenderTexture(1920, 1080, 0, (RenderTextureFormat)0) { name = "EmpressCustomMenuVideos.RenderTexture" }; empressRenderTexture.Create(); empressVideoImage.texture = (Texture)(object)empressRenderTexture; EmpressEnsureCameraPlane(); GameObject val5 = new GameObject("Empress Video Player") { hideFlags = (HideFlags)61 }; val5.transform.SetParent(((Component)this).transform, false); empressAudioSource = val5.AddComponent(); empressAudioSource.playOnAwake = false; empressAudioSource.loop = true; empressAudioSource.spatialBlend = 0f; empressVideoPlayer = val5.AddComponent(); empressVideoPlayer.playOnAwake = false; empressVideoPlayer.renderMode = (VideoRenderMode)2; empressVideoPlayer.targetTexture = empressRenderTexture; empressVideoPlayer.audioOutputMode = (VideoAudioOutputMode)1; empressVideoPlayer.controlledAudioTrackCount = 1; empressVideoPlayer.EnableAudioTrack((ushort)0, true); empressVideoPlayer.SetTargetAudioSource((ushort)0, empressAudioSource); empressVideoPlayer.waitForFirstFrame = true; empressVideoPlayer.skipOnDrop = true; empressVideoPlayer.prepareCompleted += new EventHandler(EmpressVideoPrepared); empressVideoPlayer.errorReceived += new ErrorEventHandler(EmpressVideoError); EmpressSetVisible(visible: false); } } private string EmpressResolveVideoFolder(EmpressCustomMenuVideosPlugin plugin) { string text = plugin.EmpressVideoFolder.Value.Trim(); if (string.IsNullOrWhiteSpace(text)) { text = EmpressDefaultVideoFolder; } try { if (!Path.IsPathRooted(text)) { text = Path.Combine(Paths.ConfigPath, text); } string fullPath = Path.GetFullPath(text); Directory.CreateDirectory(fullPath); return fullPath; } catch { Directory.CreateDirectory(EmpressDefaultVideoFolder); empressStatus = "Empress used the default video folder"; return EmpressDefaultVideoFolder; } } private string? EmpressPickMenuVideo(EmpressCustomMenuVideosPlugin plugin, string folder, bool preferDifferent) { string[] array; try { Directory.CreateDirectory(folder); array = (from path in Directory.GetFiles(folder, "*.mp4", SearchOption.TopDirectoryOnly).Where(File.Exists) where !empressFailedVideos.Contains(path) select path).OrderBy((string path) => path, StringComparer.OrdinalIgnoreCase).ToArray(); } catch { empressStatus = "Empress could not scan the video folder"; return null; } if (array.Length == 0 && empressFailedVideos.Count > 0) { empressFailedVideos.Clear(); return null; } if (array.Length == 0) { return null; } if (array.Length == 1) { return array[0]; } if (!plugin.EmpressRandomizeVideos.Value) { return array[0]; } string[] array2 = (preferDifferent ? array.Where((string path) => !string.Equals(path, empressRequestedVideoPath, StringComparison.OrdinalIgnoreCase)).ToArray() : array); if (array2.Length == 0) { array2 = array; } return array2[Random.Range(0, array2.Length)]; } private void EmpressPlayVideoPath(string videoPath) { if (!((Object)(object)empressVideoPlayer == (Object)null)) { empressRequestVersion++; empressRequestedVideoPath = Path.GetFullPath(videoPath); empressActivePlayableUrl = new Uri(empressRequestedVideoPath).AbsoluteUri; empressStatus = "Empress is preparing " + Path.GetFileName(empressRequestedVideoPath); empressVideoPlayer.Stop(); empressVideoPlayer.source = (VideoSource)1; empressVideoPlayer.url = empressActivePlayableUrl; empressVideoPlayer.isLooping = EmpressPlugin?.EmpressLoopVideo.Value ?? false; empressVideoPlayer.Prepare(); } } private void EmpressResetVideoState(string status) { empressRequestVersion++; empressRequestedVideoPath = string.Empty; empressActivePlayableUrl = string.Empty; empressStatus = status; if ((Object)(object)empressVideoPlayer != (Object)null) { empressVideoPlayer.Stop(); } } private void EmpressVideoPrepared(VideoPlayer source) { if (!((Object)(object)source != (Object)(object)empressVideoPlayer) && !string.IsNullOrWhiteSpace(empressActivePlayableUrl) && !(source.url != empressActivePlayableUrl)) { empressStatus = "Empress menu video online"; EmpressUpdateAspect(); EmpressUpdateVolume(); source.Play(); } } private void EmpressVideoError(VideoPlayer source, string message) { if (!((Object)(object)source != (Object)(object)empressVideoPlayer)) { if (!string.IsNullOrWhiteSpace(empressRequestedVideoPath)) { empressFailedVideos.Add(empressRequestedVideoPath); } empressStatus = "Empress video error: " + message; empressRequestedVideoPath = string.Empty; empressActivePlayableUrl = string.Empty; empressForcePickNew = true; empressNextFolderScanTime = Time.unscaledTime + 1.5f; } } private void EmpressPauseVideo() { if ((Object)(object)empressVideoPlayer != (Object)null && empressVideoPlayer.isPlaying) { empressVideoPlayer.Pause(); } if ((Object)(object)empressAudioSource != (Object)null && empressAudioSource.isPlaying) { empressAudioSource.Pause(); } } private void EmpressSetVisible(bool visible) { if ((Object)(object)empressCanvas != (Object)null) { ((Behaviour)empressCanvas).enabled = visible; } EmpressSetCameraPlaneVisible(visible); } private void EmpressUpdateVolume() { if (!((Object)(object)empressAudioSource == (Object)null) && !((Object)(object)EmpressPlugin == (Object)null)) { empressAudioSource.volume = (float)Mathf.Clamp(EmpressPlugin.EmpressVideoVolume.Value, 0, 100) / 100f; empressAudioSource.loop = EmpressPlugin.EmpressLoopVideo.Value; } } private void EmpressUpdateDim() { //IL_0051: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)empressDimImage == (Object)null) && !((Object)(object)EmpressPlugin == (Object)null)) { float num = (float)Mathf.Clamp(EmpressPlugin.EmpressBackgroundDim.Value, 0, 100) / 100f; ((Graphic)empressDimImage).color = new Color(0.02f, 0f, 0.018f, num); } } private void EmpressUpdateAspect() { if (!((Object)(object)empressAspectFitter == (Object)null) && !((Object)(object)empressVideoPlayer == (Object)null) && empressVideoPlayer.width != 0 && empressVideoPlayer.height != 0) { empressAspectFitter.aspectRatio = (float)empressVideoPlayer.width / (float)empressVideoPlayer.height; } } private void EmpressEnsureCameraPlane() { //IL_0015: 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_0027: Expected O, but got Unknown //IL_008d: 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_009a: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Expected O, but got Unknown if (!((Object)(object)empressCameraPlane != (Object)null)) { empressCameraPlane = new GameObject("Empress Video Camera Backdrop") { hideFlags = (HideFlags)61 }; empressCameraPlane.transform.SetParent(((Component)this).transform, false); empressCameraPlane.AddComponent().mesh = EmpressCreateQuadMesh(); empressCameraPlaneRenderer = empressCameraPlane.AddComponent(); Shader val = Shader.Find("Unlit/Texture") ?? Shader.Find("UI/Default") ?? Shader.Find("Sprites/Default"); empressVideoMaterial = new Material(val) { hideFlags = (HideFlags)61, mainTexture = (Texture)(object)empressRenderTexture }; ((Renderer)empressCameraPlaneRenderer).sharedMaterial = empressVideoMaterial; EmpressSetCameraPlaneVisible(visible: false); } } private void EmpressUpdateCameraPlane() { //IL_0143: 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_0150: Unknown result type (might be due to invalid IL or missing references) //IL_0155: Unknown result type (might be due to invalid IL or missing references) //IL_0162: 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) EmpressEnsureCameraPlane(); if ((Object)(object)empressCameraPlane == (Object)null || (Object)(object)empressVideoMaterial == (Object)null || (Object)(object)empressVideoPlayer == (Object)null) { return; } Camera val = EmpressResolveMenuCamera(); if ((Object)(object)val == (Object)null) { EmpressSetCameraPlaneVisible(visible: false); return; } empressVideoMaterial.mainTexture = (Texture)(object)empressRenderTexture; float num = Mathf.Max(val.nearClipPlane + 0.65f, 1.25f); float num2 = 2f * num * Mathf.Tan(val.fieldOfView * 0.5f * (MathF.PI / 180f)); float num3 = ((val.aspect > 0.01f) ? val.aspect : Mathf.Max(1f, (float)Screen.width / (float)Mathf.Max(1, Screen.height))); float num4 = num2 * num3; float num5 = 1.7777778f; if (empressVideoPlayer.width != 0 && empressVideoPlayer.height != 0) { num5 = (float)empressVideoPlayer.width / (float)empressVideoPlayer.height; } float num6 = num4; float num7 = num2; if (num5 > num3) { num6 = num2 * num5; } else { num7 = num4 / Mathf.Max(0.01f, num5); } Transform transform = ((Component)val).transform; Transform transform2 = empressCameraPlane.transform; transform2.position = transform.position + transform.forward * num; transform2.rotation = transform.rotation; transform2.localScale = new Vector3(num6, num7, 1f); EmpressSetCameraPlaneVisible((Object)(object)empressCanvas != (Object)null && ((Behaviour)empressCanvas).enabled); } private void EmpressSetCameraPlaneVisible(bool visible) { if ((Object)(object)empressCameraPlaneRenderer != (Object)null) { ((Renderer)empressCameraPlaneRenderer).enabled = visible; } } private static Camera? EmpressResolveMenuCamera() { if ((Object)(object)CameraNoPlayerTarget.instance != (Object)null) { Camera component = ((Component)CameraNoPlayerTarget.instance).GetComponent(); if ((Object)(object)component != (Object)null && ((Behaviour)component).enabled) { return component; } } Camera main = Camera.main; if ((Object)(object)main != (Object)null && ((Behaviour)main).enabled) { return main; } return ((IEnumerable)Object.FindObjectsOfType()).FirstOrDefault((Func)((Camera camera) => (Object)(object)camera != (Object)null && ((Behaviour)camera).enabled)); } private static Mesh EmpressCreateQuadMesh() { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Expected O, but got Unknown //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_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) //IL_005f: 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_007a: 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_009c: 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_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: Unknown result type (might be due to invalid IL or missing references) //IL_00c8: 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_00de: 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) Mesh val = new Mesh { name = "EmpressMenuVideoQuad" }; val.vertices = (Vector3[])(object)new Vector3[4] { new Vector3(-0.5f, -0.5f, 0f), new Vector3(0.5f, -0.5f, 0f), new Vector3(-0.5f, 0.5f, 0f), new Vector3(0.5f, 0.5f, 0f) }; val.uv = (Vector2[])(object)new Vector2[4] { new Vector2(0f, 0f), new Vector2(1f, 0f), new Vector2(0f, 1f), new Vector2(1f, 1f) }; val.triangles = new int[6] { 0, 2, 1, 2, 3, 1 }; val.RecalculateBounds(); return val; } private void EmpressUpdateStatusVisual() { if (!((Object)(object)empressStatusText == (Object)null) && !((Object)(object)EmpressPlugin == (Object)null)) { bool flag = EmpressPlugin.EmpressShowStatus.Value && (Object)(object)empressCanvas != (Object)null && ((Behaviour)empressCanvas).enabled; ((Behaviour)empressStatusText).enabled = flag; if (flag) { empressStatusText.text = "EMPRESS MENU VIDEO // " + empressStatus; } } } private void EmpressMuteVanillaMenuAudio() { EmpressCustomMenuVideosPlugin empressPlugin = EmpressPlugin; if ((Object)(object)empressPlugin == (Object)null || (!empressPlugin.EmpressMuteVanillaMenuMusic.Value && !empressPlugin.EmpressMuteMenuSounds.Value)) { EmpressRestoreVanillaMenuAudio(); return; } if (empressPlugin.EmpressMuteMenuSounds.Value) { AudioSource[] array = Object.FindObjectsOfType(); foreach (AudioSource source in array) { EmpressMuteAudioSource(source); } } if (empressPlugin.EmpressMuteVanillaMenuMusic.Value) { ConstantMusic[] array2 = Object.FindObjectsOfType(); foreach (ConstantMusic val in array2) { AudioSource source2 = EmpressConstantMusicAudioSourceRef.Invoke(val); EmpressMuteAudioSource(source2); } LevelMusic[] array3 = Object.FindObjectsOfType(); foreach (LevelMusic val2 in array3) { AudioSource source3 = EmpressLevelMusicAudioSourceRef.Invoke(val2); EmpressMuteAudioSource(source3); } } } private void EmpressMuteAudioSource(AudioSource? source) { if (!((Object)(object)source == (Object)null) && source != empressAudioSource) { int instanceID = ((Object)source).GetInstanceID(); if (!empressMutedAudioVolumes.ContainsKey(instanceID)) { empressMutedAudioVolumes[instanceID] = source.volume; } source.volume = 0f; } } private void EmpressRestoreVanillaMenuAudio() { if (empressMutedAudioVolumes.Count == 0) { return; } AudioSource[] array = Object.FindObjectsOfType(); foreach (AudioSource val in array) { int instanceID = ((Object)val).GetInstanceID(); if (empressMutedAudioVolumes.TryGetValue(instanceID, out var value)) { val.volume = value; } } empressMutedAudioVolumes.Clear(); } private static bool EmpressIsMainMenuActive() { //IL_0064: 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) if ((Object)(object)RunManager.instance != (Object)null && (Object)(object)RunManager.instance.levelCurrent != (Object)null && (Object)(object)RunManager.instance.levelMainMenu != (Object)null) { return RunManager.instance.levelCurrent == RunManager.instance.levelMainMenu; } if ((Object)(object)MainMenuOpen.instance != (Object)null || (Object)(object)Object.FindObjectOfType() != (Object)null) { return true; } Scene activeScene = SceneManager.GetActiveScene(); if (((Scene)(ref activeScene)).name.IndexOf("menu", StringComparison.OrdinalIgnoreCase) >= 0) { return (Object)(object)MenuManager.instance != (Object)null; } return false; } } }