using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using BepInEx; using UnityEngine; using UnityEngine.Rendering; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("BGfreecam")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("BGfreecam")] [assembly: AssemblyCopyright("Copyright © 2026")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("3494672b-32e3-4041-9dcd-ed1611acf500")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: AssemblyVersion("1.0.0.0")] namespace BGfreecam; [BepInPlugin("com.yourname.bgfreecam", "BGfreecam", "1.0.0")] public class FreeCamPlugin : BaseUnityPlugin { private struct RendererState { public Renderer renderer; public bool originalEnabled; public ShadowCastingMode originalShadowMode; } private bool isFreeCamActive = false; private Camera actualMainCamera; private GameObject freeCamObject; private Camera freeCam; public float flySpeed = 12f; public float lookSensitivity = 3f; private GameObject localPlayerRoot; private List disabledScripts = new List(); private Rigidbody playerRigidbody; private CharacterController playerCharacterController; private bool playerRbWasKinematic = false; private List alteredRenderers = new List(); private void Awake() { ((BaseUnityPlugin)this).Logger.LogInfo((object)"BGfreecam: Final Polish Edition Successfully Loaded!"); } private void Update() { //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Expected O, but got Unknown //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Unknown result type (might be due to invalid IL or missing references) //IL_0584: Unknown result type (might be due to invalid IL or missing references) //IL_059d: Unknown result type (might be due to invalid IL or missing references) //IL_05ab: Unknown result type (might be due to invalid IL or missing references) //IL_05b0: Unknown result type (might be due to invalid IL or missing references) //IL_05bf: Unknown result type (might be due to invalid IL or missing references) //IL_05cc: Unknown result type (might be due to invalid IL or missing references) //IL_05d1: Unknown result type (might be due to invalid IL or missing references) //IL_05d6: Unknown result type (might be due to invalid IL or missing references) //IL_05e5: Unknown result type (might be due to invalid IL or missing references) //IL_05f2: Unknown result type (might be due to invalid IL or missing references) //IL_05f7: Unknown result type (might be due to invalid IL or missing references) //IL_05fc: Unknown result type (might be due to invalid IL or missing references) //IL_060b: Unknown result type (might be due to invalid IL or missing references) //IL_0618: Unknown result type (might be due to invalid IL or missing references) //IL_061d: Unknown result type (might be due to invalid IL or missing references) //IL_0622: Unknown result type (might be due to invalid IL or missing references) //IL_0631: Unknown result type (might be due to invalid IL or missing references) //IL_063e: Unknown result type (might be due to invalid IL or missing references) //IL_0643: Unknown result type (might be due to invalid IL or missing references) //IL_0648: Unknown result type (might be due to invalid IL or missing references) //IL_0657: Unknown result type (might be due to invalid IL or missing references) //IL_0659: Unknown result type (might be due to invalid IL or missing references) //IL_065e: Unknown result type (might be due to invalid IL or missing references) //IL_0663: Unknown result type (might be due to invalid IL or missing references) //IL_068f: Unknown result type (might be due to invalid IL or missing references) //IL_0696: Unknown result type (might be due to invalid IL or missing references) //IL_06a1: Unknown result type (might be due to invalid IL or missing references) //IL_06ab: Unknown result type (might be due to invalid IL or missing references) //IL_06b0: Unknown result type (might be due to invalid IL or missing references) //IL_0675: Unknown result type (might be due to invalid IL or missing references) //IL_0677: Unknown result type (might be due to invalid IL or missing references) //IL_067c: Unknown result type (might be due to invalid IL or missing references) //IL_0681: Unknown result type (might be due to invalid IL or missing references) //IL_049a: Unknown result type (might be due to invalid IL or missing references) //IL_0344: Unknown result type (might be due to invalid IL or missing references) //IL_0349: Unknown result type (might be due to invalid IL or missing references) if (Input.GetKeyDown((KeyCode)286)) { isFreeCamActive = !isFreeCamActive; if (isFreeCamActive) { actualMainCamera = Camera.main; if ((Object)(object)actualMainCamera == (Object)null) { ((BaseUnityPlugin)this).Logger.LogWarning((object)"BGfreecam: Main camera not found."); isFreeCamActive = false; return; } freeCamObject = new GameObject("BG_FreeCam_Object"); freeCam = freeCamObject.AddComponent(); freeCam.CopyFrom(actualMainCamera); freeCamObject.transform.position = ((Component)actualMainCamera).transform.position; freeCamObject.transform.rotation = ((Component)actualMainCamera).transform.rotation; ((Behaviour)actualMainCamera).enabled = false; Transform parent = ((Component)actualMainCamera).transform.parent; localPlayerRoot = null; while ((Object)(object)parent != (Object)null) { if (((Component)parent).CompareTag("Player") || ((Object)parent).name.ToLower().Contains("gnome") || ((Object)parent).name.ToLower().Contains("player")) { localPlayerRoot = ((Component)parent).gameObject; } parent = parent.parent; } if ((Object)(object)localPlayerRoot != (Object)null) { playerRigidbody = localPlayerRoot.GetComponentInChildren(); if ((Object)(object)playerRigidbody != (Object)null) { playerRbWasKinematic = playerRigidbody.isKinematic; playerRigidbody.isKinematic = true; } playerCharacterController = localPlayerRoot.GetComponentInChildren(); if ((Object)(object)playerCharacterController != (Object)null) { ((Collider)playerCharacterController).enabled = false; } MonoBehaviour[] componentsInChildren = localPlayerRoot.GetComponentsInChildren(); MonoBehaviour[] array = componentsInChildren; foreach (MonoBehaviour val in array) { if (!((Object)(object)val == (Object)null) && ((Behaviour)val).enabled && !((Object)(object)val == (Object)(object)this)) { string text = ((object)val).GetType().Name.ToLower(); if (text.Contains("input") || text.Contains("movement") || text.Contains("controller") || text.Contains("motor") || text.Contains("locomotion")) { ((Behaviour)val).enabled = false; disabledScripts.Add(val); } } } Renderer[] componentsInChildren2 = localPlayerRoot.GetComponentsInChildren(true); Renderer[] array2 = componentsInChildren2; foreach (Renderer val2 in array2) { if ((Object)(object)val2 != (Object)null && ((Object)((Component)val2).gameObject).name.ToLower().Contains("head")) { alteredRenderers.Add(new RendererState { renderer = val2, originalEnabled = val2.enabled, originalShadowMode = val2.shadowCastingMode }); val2.enabled = true; val2.shadowCastingMode = (ShadowCastingMode)1; } } } Cursor.lockState = (CursorLockMode)1; Cursor.visible = false; ((BaseUnityPlugin)this).Logger.LogInfo((object)"BGfreecam: Freecam active."); } else { foreach (MonoBehaviour disabledScript in disabledScripts) { if ((Object)(object)disabledScript != (Object)null) { ((Behaviour)disabledScript).enabled = true; } } disabledScripts.Clear(); if ((Object)(object)playerRigidbody != (Object)null) { playerRigidbody.isKinematic = playerRbWasKinematic; playerRigidbody = null; } if ((Object)(object)playerCharacterController != (Object)null) { ((Collider)playerCharacterController).enabled = true; playerCharacterController = null; } foreach (RendererState alteredRenderer in alteredRenderers) { if ((Object)(object)alteredRenderer.renderer != (Object)null) { alteredRenderer.renderer.enabled = alteredRenderer.originalEnabled; alteredRenderer.renderer.shadowCastingMode = alteredRenderer.originalShadowMode; } } alteredRenderers.Clear(); localPlayerRoot = null; if ((Object)(object)actualMainCamera != (Object)null) { ((Behaviour)actualMainCamera).enabled = true; } if ((Object)(object)freeCamObject != (Object)null) { Object.Destroy((Object)(object)freeCamObject); } Cursor.lockState = (CursorLockMode)1; Cursor.visible = false; ((BaseUnityPlugin)this).Logger.LogInfo((object)"BGfreecam: Freecam disabled. Mouse locked."); } } if (isFreeCamActive && (Object)(object)freeCamObject != (Object)null) { float num = Input.GetAxis("Mouse X") * lookSensitivity; float num2 = Input.GetAxis("Mouse Y") * lookSensitivity; freeCamObject.transform.Rotate(Vector3.up, num, (Space)0); freeCamObject.transform.Rotate(Vector3.left, num2, (Space)1); Vector3 val3 = Vector3.zero; if (Input.GetKey((KeyCode)119)) { val3 += freeCamObject.transform.forward; } if (Input.GetKey((KeyCode)115)) { val3 -= freeCamObject.transform.forward; } if (Input.GetKey((KeyCode)97)) { val3 -= freeCamObject.transform.right; } if (Input.GetKey((KeyCode)100)) { val3 += freeCamObject.transform.right; } if (Input.GetKey((KeyCode)32)) { val3 += Vector3.up; } if (Input.GetKey((KeyCode)306)) { val3 += Vector3.down; } Transform transform = freeCamObject.transform; transform.position += ((Vector3)(ref val3)).normalized * flySpeed * Time.deltaTime; } } }