Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of Rosays Valuables v1.0.4
RosayValuablesAPI.dll
Decompiled 8 months agousing System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Reflection.Emit; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Logging; using HarmonyLib; using Microsoft.CodeAnalysis; using Photon.Pun; using RosayValuablesAPI; using UnityEngine; using UnityEngine.Events; using UnityEngine.Rendering.PostProcessing; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: IgnoresAccessChecksTo("")] [assembly: AssemblyCompany("Rosay")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("RosayValuablesAPI")] [assembly: AssemblyTitle("RosayValuablesAPI")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [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; } } } public class AMCTrap : Trap { [Header("Sepia Filter Settings")] public float sepiaIntensity = 1f; private bool sepiaAppliedLocal = false; public override void Start() { ((Trap)this).Start(); } public override void Update() { ((Trap)this).Update(); if (base.physGrabObject.grabbed && !sepiaAppliedLocal && base.physGrabObject.grabbedLocal) { PostProcessing.Instance.SetSepiaOverride(sepiaIntensity, 9999f, ((Component)this).gameObject); sepiaAppliedLocal = true; } if ((!base.physGrabObject.grabbed || !base.physGrabObject.grabbedLocal) && sepiaAppliedLocal) { PostProcessing.Instance.ClearSepiaOverride(((Component)this).gameObject); sepiaAppliedLocal = false; } } } public class AsciiUIManager : MonoBehaviour { [CompilerGenerated] private sealed class <DelayedShow>d__7 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public AsciiUIManager <>4__this; private GameObject <container>5__1; private RawImage <raw>5__2; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <DelayedShow>d__7(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <container>5__1 = null; <raw>5__2 = null; <>1__state = -2; } private bool MoveNext() { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>2__current = (object)new WaitForSeconds(0.1f); <>1__state = 1; return true; case 1: <>1__state = -1; <container>5__1 = GameObject.Find("UI/UI/Canvas/Render Texture Main"); if ((Object)(object)<container>5__1 == (Object)null) { Debug.LogError((object)"[AsciiUIManager] Render Texture Main not found."); return false; } if ((Object)(object)<>4__this.uiInstance != (Object)null) { Debug.LogWarning((object)"[AsciiUIManager] Overlay already active."); return false; } <>4__this.uiInstance = Object.Instantiate<GameObject>(<>4__this.asciiUIPrefab, <container>5__1.transform); ((Object)<>4__this.uiInstance).name = "Render Texture ASCII(Clone)"; <>4__this.uiInstance.transform.SetSiblingIndex(0); <raw>5__2 = <>4__this.uiInstance.GetComponentInChildren<RawImage>(); if ((Object)(object)<raw>5__2 == (Object)null) { Debug.LogWarning((object)"[AsciiUIManager] UI prefab has no RawImage component."); return false; } if ((Object)(object)RenderTextureMain.instance != (Object)null && (Object)(object)RenderTextureMain.instance.renderTexture != (Object)null) { <raw>5__2.texture = (Texture)(object)RenderTextureMain.instance.renderTexture; Debug.Log((object)"[AsciiUIManager] Assigned RenderTextureMain.instance.renderTexture."); } else { Debug.LogWarning((object)"[AsciiUIManager] RenderTextureMain.instance or renderTexture is null!"); } <>4__this.overlayShown = true; Debug.Log((object)"[AsciiUIManager] Overlay shown."); return false; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } public static AsciiUIManager current; [Tooltip("Prefab for the ASCII UI to instantiate (must contain a RawImage)")] public GameObject asciiUIPrefab; private GameObject uiInstance; private bool overlayShown = false; private void Awake() { if ((Object)(object)current != (Object)null && (Object)(object)current != (Object)(object)this) { Object.Destroy((Object)(object)((Component)this).gameObject); return; } current = this; Object.DontDestroyOnLoad((Object)(object)((Component)this).gameObject); } public void ShowOverlay() { if (overlayShown || (Object)(object)asciiUIPrefab == (Object)null) { Debug.LogWarning((object)"[AsciiUIManager] Overlay already shown or prefab missing."); } else { ((MonoBehaviour)this).StartCoroutine(DelayedShow()); } } public void HideOverlay() { if ((Object)(object)uiInstance != (Object)null) { Object.Destroy((Object)(object)uiInstance); uiInstance = null; } overlayShown = false; Debug.Log((object)"[AsciiUIManager] Overlay hidden."); } [IteratorStateMachine(typeof(<DelayedShow>d__7))] private IEnumerator DelayedShow() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <DelayedShow>d__7(0) { <>4__this = this }; } } public class CATrap : Trap { private bool reverseActiveLocal = false; public override void Start() { ((Trap)this).Start(); } public override void Update() { ((Trap)this).Update(); if (base.physGrabObject.grabbed && !reverseActiveLocal && base.physGrabObject.grabbedLocal) { PlayerControllerReverseTranspiler.EnableReverseControls(); reverseActiveLocal = true; } if ((!base.physGrabObject.grabbed || !base.physGrabObject.grabbedLocal) && reverseActiveLocal) { PlayerControllerReverseTranspiler.DisableReverseControls(); reverseActiveLocal = false; } } } public class ChessKnightTrap : Trap { [Header("Hop Settings")] public float hopUpForce = 6f; public float hopForwardForce = 3f; public float minHopCooldown = 0.25f; [Header("Audio")] [SerializeField] public AudioSource? audioSource = null; [SerializeField] public AudioClip? hopSound = null; [Header("Enemy Investigate")] public float investigateRange = 7f; private Rigidbody? rb = null; private PhysGrabObjectImpactDetector? impactDetector = null; private float lastHopTime = -999f; public override void Start() { //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Expected O, but got Unknown ((Trap)this).Start(); rb = ((Component)this).GetComponent<Rigidbody>(); impactDetector = ((Component)this).GetComponent<PhysGrabObjectImpactDetector>(); if ((Object)(object)audioSource == (Object)null) { audioSource = ((Component)this).GetComponent<AudioSource>(); } if ((Object)(object)impactDetector != (Object)null) { impactDetector.onAllImpacts.AddListener(new UnityAction(OnAnyImpact)); } } private void OnDestroy() { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Expected O, but got Unknown if ((Object)(object)impactDetector != (Object)null) { impactDetector.onAllImpacts.RemoveListener(new UnityAction(OnAnyImpact)); } } private void OnAnyImpact() { if (!(Time.time - lastHopTime < minHopCooldown) && (!SemiFunc.IsMultiplayer() || SemiFunc.IsMasterClient())) { lastHopTime = Time.time; if ((Object)(object)base.photonView != (Object)null) { base.photonView.RPC("RPCHop", (RpcTarget)0, Array.Empty<object>()); } } } [PunRPC] public void RPCHop() { Hop(); } private void Hop() { //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_002d: 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_0049: 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_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) if (!((Object)(object)rb == (Object)null)) { rb.velocity = Vector3.zero; rb.angularVelocity = Vector3.zero; rb.AddForce(Vector3.up * hopUpForce + ((Component)this).transform.forward * hopForwardForce, (ForceMode)1); if ((Object)(object)audioSource != (Object)null && (Object)(object)hopSound != (Object)null) { audioSource.PlayOneShot(hopSound); } base.enemyInvestigate = true; base.enemyInvestigateRange = investigateRange; } } } public class MirrorTrap : MonoBehaviour { [Header("Mirror Trap")] public float lookThreshold = 5f; public float rampTime = 3f; public AudioSource? whisperSource; public AudioClip? crackSound; public float reverseDuration = 15f; public Collider? mirrorCollider; public float requiredDot = 0.97f; public LayerMask raycastMask; public float maxCheckDistance = 12f; [Header("PostProcessing")] public float vignetteIntensity = 0.5f; public float vignetteSmoothness = 0.6f; public Color vignetteColor = new Color(0.3f, 0.1f, 0.1f, 1f); [Header("Camera Shake")] public float maxShakeStrength = 1.5f; public float shakeTime = 0.2f; private float lookTimer = 0f; private bool trapTriggered = false; private bool reverseActive = false; private float reverseTimer = 0f; private Transform? playerCam = null; private GameObject? vignetteObj = null; private GameObject? saturationObj = null; private bool fadingPostFX = false; private float fadeOutTimer = 0f; private float fadeOutDuration = 1.25f; private void Start() { //IL_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Expected O, but got Unknown //IL_00cc: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: Expected O, but got Unknown //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_0075: 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) if ((Object)(object)whisperSource != (Object)null) { whisperSource.volume = 0f; if (!whisperSource.isPlaying) { whisperSource.Play(); } } if (((LayerMask)(ref raycastMask)).value == 0) { int num = LayerMask.NameToLayer("RoomVolume"); if (num != -1) { raycastMask = LayerMask.op_Implicit(~(1 << num)); } else { raycastMask = LayerMask.op_Implicit(-1); } } vignetteObj = new GameObject("MirrorTrapVignette_" + ((Object)this).GetInstanceID()); saturationObj = new GameObject("MirrorTrapSaturation_" + ((Object)this).GetInstanceID()); } private void Update() { //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_0074: 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_0079: Unknown result type (might be due to invalid IL or missing references) //IL_0080: 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_0086: Unknown result type (might be due to invalid IL or missing references) //IL_008b: 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_00d2: 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_00dc: 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_00e5: Unknown result type (might be due to invalid IL or missing references) //IL_00ed: 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_0112: Unknown result type (might be due to invalid IL or missing references) //IL_011d: Unknown result type (might be due to invalid IL or missing references) //IL_012a: 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_041d: Unknown result type (might be due to invalid IL or missing references) //IL_0555: Unknown result type (might be due to invalid IL or missing references) //IL_0340: Unknown result type (might be due to invalid IL or missing references) PlayerAvatar instance = PlayerAvatar.instance; if ((Object)(object)instance == (Object)null || !instance.isLocal) { return; } playerCam = instance.localCameraTransform; if ((Object)(object)playerCam == (Object)null) { return; } Vector3 val; if (!((Object)(object)mirrorCollider != (Object)null)) { val = ((Component)this).transform.position; } else { Bounds bounds = mirrorCollider.bounds; val = ((Bounds)(ref bounds)).center; } Vector3 val2 = val; Vector3 val3 = playerCam.position - val2; float sqrMagnitude = ((Vector3)(ref val3)).sqrMagnitude; if (sqrMagnitude > maxCheckDistance * maxCheckDistance && !reverseActive) { FadeOutAllVisuals(); return; } bool flag = false; val3 = val2 - playerCam.position; Vector3 normalized = ((Vector3)(ref val3)).normalized; float num = Vector3.Dot(playerCam.forward, normalized); bool flag2 = false; RaycastHit val4 = default(RaycastHit); if ((Object)(object)mirrorCollider != (Object)null && Physics.Raycast(playerCam.position, playerCam.forward, ref val4, 20f, LayerMask.op_Implicit(raycastMask)) && (Object)(object)((RaycastHit)(ref val4)).collider == (Object)(object)mirrorCollider) { flag2 = true; } if (num > requiredDot && flag2) { flag = true; } float num2 = Mathf.Clamp01(lookTimer / rampTime); if (flag && !trapTriggered) { lookTimer += Time.deltaTime; num2 = Mathf.Clamp01(lookTimer / rampTime); if ((Object)(object)whisperSource != (Object)null) { whisperSource.volume = num2; } if ((Object)(object)GameDirector.instance != (Object)null && (Object)(object)GameDirector.instance.CameraShake != (Object)null) { GameDirector.instance.CameraShake.Shake(maxShakeStrength * num2, shakeTime); } if ((Object)(object)PostProcessing.Instance != (Object)null) { PostProcessing.Instance.VignetteOverride(vignetteColor, Mathf.Lerp(0f, vignetteIntensity, num2), Mathf.Lerp(0.3f, vignetteSmoothness, num2), 2f, 2f, 0.2f, vignetteObj); PostProcessing.Instance.SaturationOverride(Mathf.Lerp(0f, -100f, num2), 2f, 2f, 0.2f, saturationObj); } if (lookTimer >= lookThreshold) { trapTriggered = true; if ((Object)(object)whisperSource != (Object)null) { whisperSource.volume = 0f; whisperSource.Stop(); } if ((Object)(object)crackSound != (Object)null && (Object)(object)playerCam != (Object)null) { AudioSource.PlayClipAtPoint(crackSound, playerCam.position); } PlayerControllerReverseTranspiler.EnableReverseControls(); reverseActive = true; reverseTimer = reverseDuration; } } else { lookTimer = Mathf.Max(lookTimer - Time.deltaTime * 2f, 0f); num2 = Mathf.Clamp01(lookTimer / rampTime); if ((Object)(object)whisperSource != (Object)null) { whisperSource.volume = num2; } if (!reverseActive && !fadingPostFX) { FadeOutAllVisuals(num2); } } if (reverseActive) { reverseTimer -= Time.deltaTime; if ((Object)(object)PostProcessing.Instance != (Object)null) { PostProcessing.Instance.VignetteOverride(vignetteColor, vignetteIntensity * 1.2f, vignetteSmoothness * 0.85f, 1f, 1f, 0.15f, vignetteObj); PostProcessing.Instance.SaturationOverride(-100f, 1f, 1f, 0.15f, saturationObj); } if ((Object)(object)GameDirector.instance != (Object)null && (Object)(object)GameDirector.instance.CameraShake != (Object)null) { GameDirector.instance.CameraShake.Shake(0.12f, 0.1f); } if (reverseTimer <= 0f) { PlayerControllerReverseTranspiler.DisableReverseControls(); reverseActive = false; trapTriggered = false; fadingPostFX = true; fadeOutTimer = 0f; } } if (fadingPostFX) { fadeOutTimer += Time.deltaTime; float num3 = Mathf.Clamp01(fadeOutTimer / fadeOutDuration); float num4 = 1f - num3; if ((Object)(object)PostProcessing.Instance != (Object)null) { PostProcessing.Instance.VignetteOverride(vignetteColor, Mathf.Lerp(0f, vignetteIntensity * 1.2f, num4), Mathf.Lerp(0.3f, vignetteSmoothness * 0.85f, num4), 2f, 2f, 0.2f, vignetteObj); PostProcessing.Instance.SaturationOverride(Mathf.Lerp(0f, -100f, num4), 2f, 2f, 0.2f, saturationObj); } if (num3 >= 1f) { fadingPostFX = false; FadeOutAllVisuals(); } } } private void FadeOutAllVisuals(float ramp = 0f) { //IL_0017: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)PostProcessing.Instance != (Object)null) { PostProcessing.Instance.VignetteOverride(vignetteColor, Mathf.Lerp(0f, vignetteIntensity, ramp), Mathf.Lerp(0.3f, vignetteSmoothness, ramp), 2f, 2f, 0.2f, vignetteObj); PostProcessing.Instance.SaturationOverride(Mathf.Lerp(0f, -100f, ramp), 2f, 2f, 0.2f, saturationObj); } } private void OnDisable() { if (reverseActive) { PlayerControllerReverseTranspiler.DisableReverseControls(); reverseActive = false; } fadingPostFX = false; fadeOutTimer = 0f; FadeOutAllVisuals(); } } public class NoiseTrap : Trap { [Header("NoiseTrap Visuals")] public ParticleSystem? trapParticles; public AudioClip? loudSound; public float soundVolume = 1f; public float investigateRange = 50f; [Header("Audio")] public AudioSource? audioSource; [Header("Camera Shake")] public float shakeStrength = 2.5f; public float shakeTime = 0.5f; public float minShakeDistance = 4f; public float maxShakeDistance = 12f; [Header("Trap Effect Timing")] public float particleDuration = 3f; public float soundDuration = 3f; private bool particlesActive = false; private bool soundActive = false; private float particleTimer = 0f; private float soundTimer = 0f; private bool shakeActive = false; private bool effectActive = false; private PhysGrabObject? physgrabObject; private bool wasGrabbedLastFrame = false; public override void Start() { ((Trap)this).Start(); if ((Object)(object)audioSource == (Object)null) { audioSource = ((Component)this).GetComponent<AudioSource>(); if ((Object)(object)audioSource == (Object)null) { audioSource = ((Component)this).gameObject.AddComponent<AudioSource>(); audioSource.spatialBlend = 1f; } } physgrabObject = ((Component)this).GetComponent<PhysGrabObject>(); } public override void Update() { //IL_01ae: Unknown result type (might be due to invalid IL or missing references) ((Trap)this).Update(); bool flag = (Object)(object)physgrabObject != (Object)null && physgrabObject.grabbed; if (!effectActive && !base.trapTriggered && flag) { ((Trap)this).TrapActivateSync(); base.trapTriggered = true; base.trapStart = true; ActivateTrap(); effectActive = true; } if (base.trapTriggered && !flag && wasGrabbedLastFrame && !effectActive) { base.trapTriggered = false; base.trapStart = false; } wasGrabbedLastFrame = flag; if (particlesActive && (Object)(object)trapParticles != (Object)null) { particleTimer += Time.deltaTime; if (particleTimer >= particleDuration) { trapParticles.Stop(true, (ParticleSystemStopBehavior)1); particlesActive = false; } } if (soundActive && (Object)(object)audioSource != (Object)null) { soundTimer += Time.deltaTime; if (soundTimer >= soundDuration) { audioSource.Stop(); soundActive = false; } } if (shakeActive) { if ((Object)(object)GameDirector.instance != (Object)null && (Object)(object)GameDirector.instance.CameraImpact != (Object)null) { GameDirector.instance.CameraImpact.ShakeDistance(shakeStrength, minShakeDistance, maxShakeDistance, ((Component)this).transform.position, 0.2f); } if (!particlesActive && !soundActive) { shakeActive = false; } } if (effectActive && !particlesActive && !soundActive && !shakeActive && !flag) { effectActive = false; base.trapTriggered = false; base.trapStart = false; } } public void ActivateTrap() { if ((Object)(object)trapParticles != (Object)null) { trapParticles.Play(); particlesActive = true; particleTimer = 0f; } if ((Object)(object)loudSound != (Object)null && (Object)(object)audioSource != (Object)null) { audioSource.PlayOneShot(loudSound, soundVolume); soundActive = true; soundTimer = 0f; } shakeActive = true; base.enemyInvestigate = true; base.enemyInvestigateRange = investigateRange; } } [ExecuteInEditMode] [RequireComponent(typeof(Camera))] [AddComponentMenu("Image Effects/VHS Pro")] public class postVHSPro : MonoBehaviour { private float time_ = 0f; public Shader shader1 = null; public Shader shader2 = null; public Shader shader3 = null; public Shader shader4 = null; public Shader shader_clear = null; public Shader shader_tape = null; public Material mat1 = null; public Material mat2 = null; public Material mat3 = null; public Material mat4 = null; public Material mat_clear = null; public Material mat_tape = null; private RenderTexture texPass12 = null; private RenderTexture texPass23 = null; private RenderTexture texLast = null; private RenderTexture texFeedback = null; private RenderTexture texFeedback2 = null; private RenderTexture texClear = null; private RenderTexture texTape = null; public bool g_showCRT = true; public bool g_showNoise = true; public bool g_showJitter = true; public bool g_showSignal = true; public bool g_showFeedback = true; public bool g_showExtra = false; public bool g_showBypass = false; public bool bleedOn = true; public int crtMode = 0; public int crtLinesMode = 0; public float screenLinesNum = 240f; public float bleedAmount = 1f; public bool bleedDebugOn = false; public AnimationCurve bleedCurveY = AnimationCurve.Linear(0f, 1f, 1f, 0f); public AnimationCurve bleedCurveI = AnimationCurve.Linear(0f, 0.5f, 1f, 0f); public AnimationCurve bleedCurveQ = AnimationCurve.Linear(0f, 0.5f, 1f, 0f); public int bleedLength = 21; public bool bleedCurveEditModeOn = false; public bool bleedCurveIQSyncOn = true; private int max_curve_length = 50; private Texture2D texCurves = null; private Vector4 curvesOffest = new Vector4(0f, 0f, 0f, 0f); private float[,] curvesData = new float[50, 3]; public bool fisheyeOn = true; public float fisheyeBend = 2f; public int fisheyeType = 0; public float fisheyeSize = 1.2f; public float cutoffX = 2f; public float cutoffY = 3f; public float cutoffFadeX = 25f; public float cutoffFadeY = 25f; public bool vignetteOn = false; public float vignetteAmount = 1f; public float vignetteSpeed = 1f; public int noiseLinesMode = 1; public float noiseLinesNum = 240f; public float noiseQuantizeX = 0f; public bool filmgrainOn = false; public float filmGrainAmount = 0.016f; public bool signalNoiseOn = true; public float signalNoiseAmount = 0.15f; public float signalNoisePower = 0.83f; public bool tapeNoiseOn = true; public float tapeNoiseTH = 0.63f; public float tapeNoiseAmount = 1f; public float tapeNoiseSpeed = 1f; public bool lineNoiseOn = true; public float lineNoiseAmount = 1f; public float lineNoiseSpeed = 5f; public bool scanLinesOn = false; public float scanLineWidth = 10f; public bool linesFloatOn = false; public float linesFloatSpeed = 1f; public bool stretchOn = true; public bool twitchHOn = false; public float twitchHFreq = 1f; public bool twitchVOn = false; public float twitchVFreq = 1f; public bool jitterHOn = true; public float jitterHAmount = 0.5f; public bool jitterVOn = false; public float jitterVAmount = 1f; public float jitterVSpeed = 1f; public bool signalTweakOn = false; public float signalAdjustY = 0f; public float signalAdjustI = 0f; public float signalAdjustQ = 0f; public float signalShiftY = 1f; public float signalShiftI = 1f; public float signalShiftQ = 1f; public float gammaCorection = 1f; public bool feedbackOn = false; public int feedbackMode = 0; public float feedbackThresh = 0.1f; public float feedbackAmount = 2f; public float feedbackFade = 0.82f; public Color feedbackColor = new Color(1f, 0.5f, 0f); public bool feedbackDebugOn = false; public bool independentTimeOn = false; public Texture bypassTex; public Sprite spriteTex; private void CreateMaterials() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Expected O, but got Unknown //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Expected O, but got Unknown //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Expected O, but got Unknown //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Expected O, but got Unknown //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Expected O, but got Unknown mat1 = new Material(shader1); mat2 = new Material(shader2); mat3 = new Material(shader3); mat4 = new Material(shader4); mat_clear = new Material(shader_clear); mat_tape = new Material(shader_tape); if (crtMode == 3) { buildCurves(); } } private void Awake() { if (crtMode == 3) { buildCurves(); } } private void Update() { } private void CreateTextures(RenderTexture src) { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Expected O, but got Unknown //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Expected O, but got Unknown //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Expected O, but got Unknown //IL_00e1: Unknown result type (might be due to invalid IL or missing references) //IL_00eb: Expected O, but got Unknown //IL_012c: Unknown result type (might be due to invalid IL or missing references) //IL_0136: Expected O, but got Unknown //IL_0177: Unknown result type (might be due to invalid IL or missing references) //IL_0181: Expected O, but got Unknown Object.DestroyImmediate((Object)(object)texClear); texClear = new RenderTexture(((Texture)src).width, ((Texture)src).height, src.depth); ((Texture)texClear).filterMode = (FilterMode)0; texClear.Create(); Object.DestroyImmediate((Object)(object)texPass12); texPass12 = new RenderTexture(((Texture)src).width, ((Texture)src).height, src.depth); ((Texture)texPass12).filterMode = (FilterMode)0; texPass12.Create(); Object.DestroyImmediate((Object)(object)texPass23); texPass23 = new RenderTexture(((Texture)src).width, ((Texture)src).height, src.depth); ((Texture)texPass23).filterMode = (FilterMode)0; texPass23.Create(); Object.DestroyImmediate((Object)(object)texFeedback); texFeedback = new RenderTexture(((Texture)src).width, ((Texture)src).height, 0); ((Object)texFeedback).hideFlags = (HideFlags)61; ((Texture)texFeedback).filterMode = (FilterMode)0; texFeedback.Create(); Object.DestroyImmediate((Object)(object)texFeedback2); texFeedback2 = new RenderTexture(((Texture)src).width, ((Texture)src).height, 0); ((Object)texFeedback2).hideFlags = (HideFlags)61; ((Texture)texFeedback2).filterMode = (FilterMode)0; texFeedback2.Create(); Object.DestroyImmediate((Object)(object)texLast); texLast = new RenderTexture(((Texture)src).width, ((Texture)src).height, 0); ((Object)texLast).hideFlags = (HideFlags)61; ((Texture)texLast).filterMode = (FilterMode)0; texLast.Create(); Graphics.Blit((Texture)(object)texClear, texFeedback, mat_clear); Graphics.Blit((Texture)(object)texClear, texFeedback2, mat_clear); Graphics.Blit((Texture)(object)texClear, texLast, mat_clear); } private void OnRenderImage(RenderTexture src, RenderTexture dest) { //IL_0114: Unknown result type (might be due to invalid IL or missing references) //IL_011e: Expected O, but got Unknown //IL_054f: Unknown result type (might be due to invalid IL or missing references) //IL_0991: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)mat1 == (Object)null) { CreateMaterials(); } if ((Object)(object)texPass12 == (Object)null || ((Texture)src).width != ((Texture)texPass12).width || ((Texture)src).height != ((Texture)texPass12).height) { CreateTextures(src); } float num = screenLinesNum; if (num <= 0f) { num = ((Texture)src).height; } if ((tapeNoiseOn || filmgrainOn || lineNoiseOn) && ((Object)(object)texTape == (Object)null || (float)((Texture)texTape).height != Mathf.Min(noiseLinesNum, num))) { int num2 = (int)Mathf.Min(noiseLinesNum, num); int num3 = (int)((float)num2 * (float)((Texture)src).width / (float)((Texture)src).height); Object.DestroyImmediate((Object)(object)texTape); texTape = new RenderTexture(num3, num2, 0); ((Object)texTape).hideFlags = (HideFlags)61; ((Texture)texTape).filterMode = (FilterMode)0; texTape.Create(); Graphics.Blit((Texture)(object)texClear, texTape, mat_tape); } if (independentTimeOn) { time_ = Time.unscaledTime; } else { time_ = Time.time; } mat1.SetFloat("time_", time_); mat1.SetFloat("screenLinesNum", num); mat1.SetFloat("noiseLinesNum", noiseLinesNum); mat1.SetFloat("noiseQuantizeX", noiseQuantizeX); FeatureToggle(mat1, filmgrainOn, "VHS_FILMGRAIN_ON"); FeatureToggle(mat1, tapeNoiseOn, "VHS_TAPENOISE_ON"); FeatureToggle(mat1, lineNoiseOn, "VHS_LINENOISE_ON"); FeatureToggle(mat1, jitterHOn, "VHS_JITTER_H_ON"); mat1.SetFloat("jitterHAmount", jitterHAmount); FeatureToggle(mat1, jitterVOn, "VHS_JITTER_V_ON"); mat1.SetFloat("jitterVAmount", jitterVAmount); mat1.SetFloat("jitterVSpeed", jitterVSpeed); FeatureToggle(mat1, linesFloatOn, "VHS_LINESFLOAT_ON"); mat1.SetFloat("linesFloatSpeed", linesFloatSpeed); FeatureToggle(mat1, twitchHOn, "VHS_TWITCH_H_ON"); mat1.SetFloat("twitchHFreq", twitchHFreq); FeatureToggle(mat1, twitchVOn, "VHS_TWITCH_V_ON"); mat1.SetFloat("twitchVFreq", twitchVFreq); FeatureToggle(mat1, scanLinesOn, "VHS_SCANLINES_ON"); mat1.SetFloat("scanLineWidth", scanLineWidth); FeatureToggle(mat1, signalNoiseOn, "VHS_YIQNOISE_ON"); mat1.SetFloat("signalNoisePower", signalNoisePower); mat1.SetFloat("signalNoiseAmount", signalNoiseAmount); FeatureToggle(mat1, stretchOn, "VHS_STRETCH_ON"); FeatureToggle(mat1, fisheyeOn, "VHS_FISHEYE_ON"); mat1.SetFloat("cutoffX", cutoffX); mat1.SetFloat("cutoffY", cutoffY); mat1.SetFloat("cutoffFadeX", cutoffFadeX); mat1.SetFloat("cutoffFadeY", cutoffFadeY); mat2.SetFloat("time_", time_); mat2.SetFloat("screenLinesNum", num); FeatureToggle(mat2, bleedOn, "VHS_BLEED_ON"); mat2.DisableKeyword("VHS_OLD_THREE_PHASE"); mat2.DisableKeyword("VHS_THREE_PHASE"); mat2.DisableKeyword("VHS_TWO_PHASE"); if (crtMode == 0) { mat2.EnableKeyword("VHS_OLD_THREE_PHASE"); } else if (crtMode == 1) { mat2.EnableKeyword("VHS_THREE_PHASE"); } else if (crtMode == 2) { mat2.EnableKeyword("VHS_TWO_PHASE"); } else if (crtMode == 3 && bleedCurveEditModeOn) { buildCurves(); } mat2.SetTexture("_CurvesTex", (Texture)(object)texCurves); mat2.SetVector("curvesOffest", curvesOffest); mat2.SetInt("bleedLength", bleedLength); FeatureToggle(mat2, crtMode == 3, "VHS_CUSTOM_BLEED_ON"); FeatureToggle(mat2, bleedDebugOn, "VHS_DEBUG_BLEEDING_ON"); mat2.SetFloat("bleedAmount", bleedAmount); FeatureToggle(mat2, fisheyeOn, "VHS_FISHEYE_ON"); FeatureToggle(mat2, fisheyeType == 1, "VHS_FISHEYE_HYPERSPACE"); mat2.SetFloat("fisheyeBend", fisheyeBend); mat2.SetFloat("fisheyeSize", fisheyeSize); FeatureToggle(mat2, vignetteOn, "VHS_VIGNETTE_ON"); mat2.SetFloat("vignetteAmount", vignetteAmount); mat2.SetFloat("vignetteSpeed", vignetteSpeed); FeatureToggle(mat2, signalTweakOn, "VHS_SIGNAL_TWEAK_ON"); mat2.SetFloat("signalAdjustY", signalAdjustY); mat2.SetFloat("signalAdjustI", signalAdjustI); mat2.SetFloat("signalAdjustQ", signalAdjustQ); mat2.SetFloat("signalShiftY", signalShiftY); mat2.SetFloat("signalShiftI", signalShiftI); mat2.SetFloat("signalShiftQ", signalShiftQ); mat2.SetFloat("gammaCorection", gammaCorection); if (tapeNoiseOn || filmgrainOn || lineNoiseOn) { mat_tape.SetFloat("time_", time_); FeatureToggle(mat_tape, filmgrainOn, "VHS_FILMGRAIN_ON"); mat_tape.SetFloat("filmGrainAmount", filmGrainAmount); FeatureToggle(mat_tape, tapeNoiseOn, "VHS_TAPENOISE_ON"); mat_tape.SetFloat("tapeNoiseTH", tapeNoiseTH); mat_tape.SetFloat("tapeNoiseAmount", tapeNoiseAmount); mat_tape.SetFloat("tapeNoiseSpeed", tapeNoiseSpeed); FeatureToggle(mat_tape, lineNoiseOn, "VHS_LINENOISE_ON"); mat_tape.SetFloat("lineNoiseAmount", lineNoiseAmount); mat_tape.SetFloat("lineNoiseSpeed", lineNoiseSpeed); Graphics.Blit((Texture)(object)texTape, texTape, mat_tape); mat1.SetTexture("_TapeTex", (Texture)(object)texTape); mat1.SetFloat("tapeNoiseAmount", tapeNoiseAmount); } if ((Object)(object)spriteTex != (Object)null) { bypassTex = (Texture)(object)spriteTex.texture; } if ((Object)(object)bypassTex != (Object)null) { Graphics.Blit(bypassTex, texPass12, mat1); } else { Graphics.Blit((Texture)(object)src, texPass12, mat1); } if (!feedbackOn) { Graphics.Blit((Texture)(object)texPass12, dest, mat2); return; } Graphics.Blit((Texture)(object)texPass12, texPass23, mat2); mat3.SetTexture("_LastTex", (Texture)(object)texLast); mat3.SetTexture("_FeedbackTex", (Texture)(object)texFeedback); mat3.SetFloat("feedbackThresh", feedbackThresh); mat3.SetFloat("feedbackAmount", feedbackAmount); mat3.SetFloat("feedbackFade", feedbackFade); mat3.SetColor("feedbackColor", feedbackColor); Graphics.Blit((Texture)(object)texPass23, texFeedback2, mat3); Graphics.Blit((Texture)(object)texFeedback2, texFeedback); mat4.SetFloat("feedbackAmp", 1f); mat4.SetTexture("_FeedbackTex", (Texture)(object)texFeedback); Graphics.Blit((Texture)(object)texPass23, texLast, mat4); if (!feedbackDebugOn) { Graphics.Blit((Texture)(object)texLast, dest); } else { Graphics.Blit((Texture)(object)texFeedback, dest); } } private void FeatureToggle(Material mat, bool propVal, string featureName) { if (propVal) { mat.EnableKeyword(featureName); } else { mat.DisableKeyword(featureName); } } private void buildCurves() { //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Expected O, but got Unknown //IL_02a6: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)texCurves == (Object)null) { texCurves = new Texture2D(max_curve_length, 1, (TextureFormat)4, false); } ((Vector4)(ref curvesOffest))[0] = 0f; ((Vector4)(ref curvesOffest))[1] = 0f; ((Vector4)(ref curvesOffest))[2] = 0f; float num = 0f; for (int i = 0; i < bleedLength; i++) { num = (float)i / (float)bleedLength; curvesData[i, 0] = bleedCurveY.Evaluate(num); curvesData[i, 1] = bleedCurveI.Evaluate(num); curvesData[i, 2] = bleedCurveQ.Evaluate(num); if (bleedCurveIQSyncOn) { curvesData[i, 2] = curvesData[i, 1]; } if (((Vector4)(ref curvesOffest))[0] > curvesData[i, 0]) { ((Vector4)(ref curvesOffest))[0] = curvesData[i, 0]; } if (((Vector4)(ref curvesOffest))[1] > curvesData[i, 1]) { ((Vector4)(ref curvesOffest))[1] = curvesData[i, 1]; } if (((Vector4)(ref curvesOffest))[2] > curvesData[i, 2]) { ((Vector4)(ref curvesOffest))[2] = curvesData[i, 2]; } } ((Vector4)(ref curvesOffest))[0] = Mathf.Abs(((Vector4)(ref curvesOffest))[0]); ((Vector4)(ref curvesOffest))[1] = Mathf.Abs(((Vector4)(ref curvesOffest))[1]); ((Vector4)(ref curvesOffest))[2] = Mathf.Abs(((Vector4)(ref curvesOffest))[2]); for (int j = 0; j < bleedLength; j++) { curvesData[j, 0] += ((Vector4)(ref curvesOffest))[0]; curvesData[j, 1] += ((Vector4)(ref curvesOffest))[1]; curvesData[j, 2] += ((Vector4)(ref curvesOffest))[2]; texCurves.SetPixel(-2 + bleedLength - j, 0, new Color(curvesData[j, 0], curvesData[j, 1], curvesData[j, 2])); } texCurves.Apply(); } } [CreateAssetMenu(menuName = "Modding/ShaderReferenceHolder")] public class ShaderReferenceHolder : ScriptableObject { public Material matVHSFirst; public Material matVHSSecond; public Material matVHSThird; public Material matVHSForth; public Material matVHSClear; public Material matVHSTape; } public class UIOverlayPickupTrap : Trap { public GameObject asciiUIPrefab; private bool overlayAppliedLocal = false; public override void Start() { ((Trap)this).Start(); } public override void Update() { //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Expected O, but got Unknown ((Trap)this).Update(); if (base.physGrabObject.grabbed && base.physGrabObject.grabbedLocal && !overlayAppliedLocal) { if ((Object)(object)AsciiUIManager.current == (Object)null) { GameObject val = new GameObject("AsciiUIManager"); AsciiUIManager asciiUIManager = val.AddComponent<AsciiUIManager>(); asciiUIManager.asciiUIPrefab = asciiUIPrefab; if ((Object)(object)asciiUIManager.asciiUIPrefab == (Object)null) { Debug.LogError((object)"[Trap] ASCII prefab was not assigned in the inspector."); return; } Debug.Log((object)"[Trap] AsciiUIManager created at runtime."); } AsciiUIManager.current?.ShowOverlay(); overlayAppliedLocal = true; } if ((!base.physGrabObject.grabbed || !base.physGrabObject.grabbedLocal) && overlayAppliedLocal) { AsciiUIManager.current?.HideOverlay(); overlayAppliedLocal = false; } } } public class VHSProTrap : Trap { [Header("VHS Pro Shader References")] [Tooltip("Shader for 1st pass (postVHSPro_First)")] public Shader shader1; [Tooltip("Shader for 2nd pass (postVHSPro_Second)")] public Shader shader2; [Tooltip("Shader for 3rd pass (postVHSPro_Third)")] public Shader shader3; [Tooltip("Shader for 4th pass (postVHSPro_Fourth)")] public Shader shader4; [Tooltip("Shader for clearing textures (postVHSPro_Clear)")] public Shader shader_clear; [Tooltip("Shader for tape noise (postVHSPro_Tape)")] public Shader shader_tape; [Header("CRT")] [Tooltip("Enable color bleed effect")] public bool bleedOn = true; [Tooltip("CRT emulation mode (0=Old Three Phase, 1=Three Phase, 2=Two Phase, 3=Custom Curve)")] [Range(0f, 3f)] public int crtMode = 0; [Tooltip("CRT lines mode (not always used)")] public int crtLinesMode = 0; [Tooltip("Number of screen lines (vertical resolution emulation)")] [Range(1f, 1000f)] public float screenLinesNum = 240f; [Tooltip("Amount of color bleed")] [Range(0f, 10f)] public float bleedAmount = 1f; [Tooltip("Debug the color bleed effect")] public bool bleedDebugOn = false; [Tooltip("Bleed curve for Y channel (custom mode only)")] public AnimationCurve bleedCurveY = AnimationCurve.Linear(0f, 1f, 1f, 0f); [Tooltip("Bleed curve for I channel (custom mode only)")] public AnimationCurve bleedCurveI = AnimationCurve.Linear(0f, 0.5f, 1f, 0f); [Tooltip("Bleed curve for Q channel (custom mode only)")] public AnimationCurve bleedCurveQ = AnimationCurve.Linear(0f, 0.5f, 1f, 0f); [Tooltip("Bleed curve length (custom mode only)")] public int bleedLength = 21; [Tooltip("Enable editing the custom bleed curve in-game")] public bool bleedCurveEditModeOn = false; [Tooltip("Sync Q curve to I curve (custom mode only)")] public bool bleedCurveIQSyncOn = true; [Header("Fisheye")] [Tooltip("Enable fisheye lens distortion")] public bool fisheyeOn = true; [Tooltip("Fisheye bend strength")] [Range(0f, 10f)] public float fisheyeBend = 2f; [Tooltip("Fisheye type (0=default, 1=hyperspace)")] public int fisheyeType = 0; [Tooltip("Fisheye size")] [Range(0f, 10f)] public float fisheyeSize = 1.2f; [Tooltip("Cutoff horizontal position")] public float cutoffX = 2f; [Tooltip("Cutoff vertical position")] public float cutoffY = 3f; [Tooltip("Fade distance to horizontal cutoff")] public float cutoffFadeX = 25f; [Tooltip("Fade distance to vertical cutoff")] public float cutoffFadeY = 25f; [Header("Vignette")] [Tooltip("Enable vignette (darkening at edges)")] public bool vignetteOn = false; [Tooltip("Vignette strength")] [Range(0f, 5f)] public float vignetteAmount = 1f; [Tooltip("Vignette speed (for animated vignette)")] [Range(0f, 5f)] public float vignetteSpeed = 1f; [Header("Noise")] [Tooltip("Noise lines mode (quantization algorithm)")] public int noiseLinesMode = 1; [Tooltip("Number of lines for noise quantization")] public float noiseLinesNum = 240f; [Tooltip("Horizontal noise quantization")] public float noiseQuantizeX = 0f; [Tooltip("Enable film grain effect")] public bool filmgrainOn = false; [Tooltip("Film grain intensity")] [Range(0f, 0.1f)] public float filmGrainAmount = 0.016f; [Tooltip("Enable signal noise")] public bool signalNoiseOn = true; [Tooltip("Signal noise intensity")] [Range(0f, 1f)] public float signalNoiseAmount = 0.15f; [Tooltip("Signal noise power (color shift/strength)")] [Range(0f, 1f)] public float signalNoisePower = 0.83f; [Tooltip("Enable tape noise")] public bool tapeNoiseOn = true; [Tooltip("Tape noise threshold (for flicker)")] public float tapeNoiseTH = 0.63f; [Tooltip("Tape noise intensity")] [Range(0f, 2f)] public float tapeNoiseAmount = 1f; [Tooltip("Tape noise speed")] [Range(0f, 2f)] public float tapeNoiseSpeed = 1f; [Tooltip("Enable line noise")] public bool lineNoiseOn = true; [Tooltip("Line noise intensity")] [Range(0f, 10f)] public float lineNoiseAmount = 1f; [Tooltip("Line noise speed")] [Range(0f, 10f)] public float lineNoiseSpeed = 5f; [Header("Jitter & Glitch")] [Tooltip("Enable scan lines")] public bool scanLinesOn = false; [Tooltip("Scan line width (thickness)")] public float scanLineWidth = 10f; [Tooltip("Enable floating lines")] public bool linesFloatOn = false; [Tooltip("Speed of floating lines")] public float linesFloatSpeed = 1f; [Tooltip("Enable horizontal stretch effect")] public bool stretchOn = true; [Tooltip("Enable horizontal twitch")] public bool twitchHOn = false; [Tooltip("Horizontal twitch frequency")] public float twitchHFreq = 1f; [Tooltip("Enable vertical twitch")] public bool twitchVOn = false; [Tooltip("Vertical twitch frequency")] public float twitchVFreq = 1f; [Tooltip("Enable horizontal jitter")] public bool jitterHOn = true; [Tooltip("Horizontal jitter amount")] public float jitterHAmount = 0.5f; [Tooltip("Enable vertical jitter")] public bool jitterVOn = false; [Tooltip("Vertical jitter amount")] public float jitterVAmount = 1f; [Tooltip("Vertical jitter speed")] public float jitterVSpeed = 1f; [Header("Signal Tweak")] [Tooltip("Enable signal tweak")] public bool signalTweakOn = false; [Tooltip("Luma adjust (Y channel)")] public float signalAdjustY = 0f; [Tooltip("Chrominance adjust (I channel)")] public float signalAdjustI = 0f; [Tooltip("Chrominance adjust (Q channel)")] public float signalAdjustQ = 0f; [Tooltip("Luma shift (Y channel)")] public float signalShiftY = 1f; [Tooltip("Chrominance shift (I channel)")] public float signalShiftI = 1f; [Tooltip("Chrominance shift (Q channel)")] public float signalShiftQ = 1f; [Tooltip("Final gamma correction")] public float gammaCorection = 1f; [Header("Feedback / Trails")] [Tooltip("Enable feedback trails")] public bool feedbackOn = false; [Tooltip("Feedback mode (advanced)")] public int feedbackMode = 0; [Tooltip("Feedback threshold (sensitivity)")] [Range(0f, 1f)] public float feedbackThresh = 0.1f; [Tooltip("Feedback amount (trail strength)")] [Range(0f, 3f)] public float feedbackAmount = 2f; [Tooltip("Feedback fade (how quickly trail fades)")] [Range(0f, 1f)] public float feedbackFade = 0.82f; [Tooltip("Feedback color")] public Color feedbackColor = new Color(1f, 0.5f, 0f); [Tooltip("Enable feedback debug mode")] public bool feedbackDebugOn = false; [Header("Extra / Tools")] [Tooltip("Use unscaled time (ignore time scale/slow-mo)")] public bool independentTimeOn = false; private bool vhsProAppliedLocal = false; private postVHSPro cachedVHSPro; public override void Update() { ((Trap)this).Update(); if (base.physGrabObject.grabbed && !vhsProAppliedLocal && base.physGrabObject.grabbedLocal) { ApplyVHSProEffect(); vhsProAppliedLocal = true; } if ((!base.physGrabObject.grabbed || !base.physGrabObject.grabbedLocal) && vhsProAppliedLocal) { RemoveVHSProEffect(); vhsProAppliedLocal = false; } } private Camera FindLocalPlayerCameraTop() { if (Object.op_Implicit((Object)(object)PlayerAvatar.instance)) { Transform[] componentsInChildren = ((Component)PlayerAvatar.instance).GetComponentsInChildren<Transform>(true); Transform[] array = componentsInChildren; foreach (Transform val in array) { if (((Object)val).name == "Camera Top") { Camera component = ((Component)val).GetComponent<Camera>(); if (Object.op_Implicit((Object)(object)component)) { return component; } } } } Camera[] array2 = Object.FindObjectsOfType<Camera>(); foreach (Camera val2 in array2) { if (((Object)val2).name == "Camera Top") { return val2; } } return null; } private void ApplyVHSProEffect() { //IL_0567: Unknown result type (might be due to invalid IL or missing references) //IL_056c: Unknown result type (might be due to invalid IL or missing references) Camera val = FindLocalPlayerCameraTop(); if (Object.op_Implicit((Object)(object)val)) { cachedVHSPro = ((Component)val).GetComponent<postVHSPro>(); if (!Object.op_Implicit((Object)(object)cachedVHSPro)) { cachedVHSPro = ((Component)val).gameObject.AddComponent<postVHSPro>(); } if (Object.op_Implicit((Object)(object)shader1)) { cachedVHSPro.shader1 = shader1; } if (Object.op_Implicit((Object)(object)shader2)) { cachedVHSPro.shader2 = shader2; } if (Object.op_Implicit((Object)(object)shader3)) { cachedVHSPro.shader3 = shader3; } if (Object.op_Implicit((Object)(object)shader4)) { cachedVHSPro.shader4 = shader4; } if (Object.op_Implicit((Object)(object)shader_clear)) { cachedVHSPro.shader_clear = shader_clear; } if (Object.op_Implicit((Object)(object)shader_tape)) { cachedVHSPro.shader_tape = shader_tape; } cachedVHSPro.bleedOn = bleedOn; cachedVHSPro.crtMode = crtMode; cachedVHSPro.crtLinesMode = crtLinesMode; cachedVHSPro.screenLinesNum = screenLinesNum; cachedVHSPro.bleedAmount = bleedAmount; cachedVHSPro.bleedDebugOn = bleedDebugOn; cachedVHSPro.bleedCurveY = bleedCurveY; cachedVHSPro.bleedCurveI = bleedCurveI; cachedVHSPro.bleedCurveQ = bleedCurveQ; cachedVHSPro.bleedLength = bleedLength; cachedVHSPro.bleedCurveEditModeOn = bleedCurveEditModeOn; cachedVHSPro.bleedCurveIQSyncOn = bleedCurveIQSyncOn; cachedVHSPro.fisheyeOn = fisheyeOn; cachedVHSPro.fisheyeBend = fisheyeBend; cachedVHSPro.fisheyeType = fisheyeType; cachedVHSPro.fisheyeSize = fisheyeSize; cachedVHSPro.cutoffX = cutoffX; cachedVHSPro.cutoffY = cutoffY; cachedVHSPro.cutoffFadeX = cutoffFadeX; cachedVHSPro.cutoffFadeY = cutoffFadeY; cachedVHSPro.vignetteOn = vignetteOn; cachedVHSPro.vignetteAmount = vignetteAmount; cachedVHSPro.vignetteSpeed = vignetteSpeed; cachedVHSPro.noiseLinesMode = noiseLinesMode; cachedVHSPro.noiseLinesNum = noiseLinesNum; cachedVHSPro.noiseQuantizeX = noiseQuantizeX; cachedVHSPro.filmgrainOn = filmgrainOn; cachedVHSPro.filmGrainAmount = filmGrainAmount; cachedVHSPro.signalNoiseOn = signalNoiseOn; cachedVHSPro.signalNoiseAmount = signalNoiseAmount; cachedVHSPro.signalNoisePower = signalNoisePower; cachedVHSPro.tapeNoiseOn = tapeNoiseOn; cachedVHSPro.tapeNoiseTH = tapeNoiseTH; cachedVHSPro.tapeNoiseAmount = tapeNoiseAmount; cachedVHSPro.tapeNoiseSpeed = tapeNoiseSpeed; cachedVHSPro.lineNoiseOn = lineNoiseOn; cachedVHSPro.lineNoiseAmount = lineNoiseAmount; cachedVHSPro.lineNoiseSpeed = lineNoiseSpeed; cachedVHSPro.scanLinesOn = scanLinesOn; cachedVHSPro.scanLineWidth = scanLineWidth; cachedVHSPro.linesFloatOn = linesFloatOn; cachedVHSPro.linesFloatSpeed = linesFloatSpeed; cachedVHSPro.stretchOn = stretchOn; cachedVHSPro.twitchHOn = twitchHOn; cachedVHSPro.twitchHFreq = twitchHFreq; cachedVHSPro.twitchVOn = twitchVOn; cachedVHSPro.twitchVFreq = twitchVFreq; cachedVHSPro.jitterHOn = jitterHOn; cachedVHSPro.jitterHAmount = jitterHAmount; cachedVHSPro.jitterVOn = jitterVOn; cachedVHSPro.jitterVAmount = jitterVAmount; cachedVHSPro.jitterVSpeed = jitterVSpeed; cachedVHSPro.signalTweakOn = signalTweakOn; cachedVHSPro.signalAdjustY = signalAdjustY; cachedVHSPro.signalAdjustI = signalAdjustI; cachedVHSPro.signalAdjustQ = signalAdjustQ; cachedVHSPro.signalShiftY = signalShiftY; cachedVHSPro.signalShiftI = signalShiftI; cachedVHSPro.signalShiftQ = signalShiftQ; cachedVHSPro.gammaCorection = gammaCorection; cachedVHSPro.feedbackOn = feedbackOn; cachedVHSPro.feedbackMode = feedbackMode; cachedVHSPro.feedbackThresh = feedbackThresh; cachedVHSPro.feedbackAmount = feedbackAmount; cachedVHSPro.feedbackFade = feedbackFade; cachedVHSPro.feedbackColor = feedbackColor; cachedVHSPro.feedbackDebugOn = feedbackDebugOn; cachedVHSPro.independentTimeOn = independentTimeOn; ((Behaviour)cachedVHSPro).enabled = true; } else { Debug.LogWarning((object)"VHSProTrap: No 'Camera Top' camera found on local player!"); } } private void RemoveVHSProEffect() { Camera val = FindLocalPlayerCameraTop(); if (!Object.op_Implicit((Object)(object)cachedVHSPro) && Object.op_Implicit((Object)(object)val)) { cachedVHSPro = ((Component)val).GetComponent<postVHSPro>(); } if (Object.op_Implicit((Object)(object)cachedVHSPro)) { ((Behaviour)cachedVHSPro).enabled = false; } } } public class WhoopeeCushionTrap : Trap { [Header("Audio")] [SerializeField] public AudioSource? audioSource = null; [SerializeField] public AudioSource? fartAudioSource = null; [SerializeField] public AudioClip? fartSound = null; [SerializeField] public AudioClip? explosionSound = null; [Header("Explosion Settings")] public float explodeChance = 0.1f; public float explosionSize = 0.35f; public int explosionDamage = 120; public int explosionEnemyDamage = 200; public float explosionForceMulti = 1.2f; [Header("Enemy Investigate")] public float investigateRangeNormal = 15f; public float investigateRangeExplosion = 60f; private Rigidbody? rb = null; private PhysGrabObjectImpactDetector? impactDetector = null; private ParticleScriptExplosion? particleScriptExplosion = null; private float lastFartTime = -999f; public float fartCooldown = 0.2f; private bool hasExploded = false; public override void Start() { //IL_00b1: Unknown result type (might be due to invalid IL or missing references) //IL_00bb: Expected O, but got Unknown //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: Expected O, but got Unknown //IL_00eb: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: Expected O, but got Unknown //IL_0108: Unknown result type (might be due to invalid IL or missing references) //IL_0112: Expected O, but got Unknown ((Trap)this).Start(); rb = ((Component)this).GetComponent<Rigidbody>(); impactDetector = ((Component)this).GetComponent<PhysGrabObjectImpactDetector>(); particleScriptExplosion = ((Component)this).GetComponent<ParticleScriptExplosion>(); if ((Object)(object)audioSource == (Object)null) { audioSource = ((Component)this).GetComponent<AudioSource>(); } if ((Object)(object)fartAudioSource == (Object)null && (Object)(object)((Component)this).transform.Find("FartAudioSource") != (Object)null) { fartAudioSource = ((Component)((Component)this).transform.Find("FartAudioSource")).GetComponent<AudioSource>(); } if ((Object)(object)impactDetector != (Object)null) { impactDetector.onImpactMedium.RemoveListener(new UnityAction(OnMediumImpact)); impactDetector.onImpactHeavy.RemoveListener(new UnityAction(OnHeavyImpact)); impactDetector.onImpactMedium.AddListener(new UnityAction(OnMediumImpact)); impactDetector.onImpactHeavy.AddListener(new UnityAction(OnHeavyImpact)); } } private void OnDestroy() { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Expected O, but got Unknown //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Expected O, but got Unknown if ((Object)(object)impactDetector != (Object)null) { impactDetector.onImpactMedium.RemoveListener(new UnityAction(OnMediumImpact)); impactDetector.onImpactHeavy.RemoveListener(new UnityAction(OnHeavyImpact)); } } private void OnMediumImpact() { TryActivateTrap("Medium"); } private void OnHeavyImpact() { TryActivateTrap("Heavy"); } private void TryActivateTrap(string impactType = "Any") { if (!hasExploded && !(Time.time - lastFartTime < fartCooldown) && (!SemiFunc.IsMultiplayer() || SemiFunc.IsMasterClient())) { lastFartTime = Time.time; if ((Object)(object)base.photonView != (Object)null) { base.photonView.RPC("RPCFartAndMaybeExplode", (RpcTarget)0, new object[1] { impactType }); } } } public void TryTriggerByCollider() { if (!hasExploded && !(Time.time - lastFartTime < fartCooldown) && (!SemiFunc.IsMultiplayer() || SemiFunc.IsMasterClient())) { lastFartTime = Time.time; if ((Object)(object)base.photonView != (Object)null) { base.photonView.RPC("RPCFartAndMaybeExplode", (RpcTarget)0, new object[1] { "Trigger" }); } } } [PunRPC] public void RPCFartAndMaybeExplode(string triggerType) { if (!hasExploded) { if ((Object)(object)fartAudioSource != (Object)null && (Object)(object)fartSound != (Object)null) { fartAudioSource.maxDistance = investigateRangeNormal; fartAudioSource.PlayOneShot(fartSound); } else if ((Object)(object)audioSource != (Object)null && (Object)(object)fartSound != (Object)null) { audioSource.maxDistance = investigateRangeNormal; audioSource.PlayOneShot(fartSound); } if (Random.value < explodeChance) { hasExploded = true; Explode(); } else { base.enemyInvestigate = true; base.enemyInvestigateRange = investigateRangeNormal; } } } private void Explode() { //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_006b: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)audioSource != (Object)null && (Object)(object)explosionSound != (Object)null) { audioSource.maxDistance = investigateRangeExplosion; audioSource.PlayOneShot(explosionSound); } if ((Object)(object)particleScriptExplosion != (Object)null) { Vector3 position = ((Component)this).transform.position; particleScriptExplosion.Spawn(position, explosionSize, explosionDamage, explosionEnemyDamage, explosionForceMulti, false, false, 1f); } base.enemyInvestigate = true; base.enemyInvestigateRange = investigateRangeExplosion; if ((Object)(object)base.physGrabObject != (Object)null) { base.physGrabObject.dead = true; } } } public class WhoopeeCushionTrigger : MonoBehaviour { private WhoopeeCushionTrap? trap; private void Start() { trap = ((Component)this).GetComponentInParent<WhoopeeCushionTrap>(); } private void OnTriggerEnter(Collider other) { PlayerController componentInParent = ((Component)other).GetComponentInParent<PlayerController>(); PlayerAvatar componentInParent2 = ((Component)other).GetComponentInParent<PlayerAvatar>(); PhysGrabObject componentInParent3 = ((Component)other).GetComponentInParent<PhysGrabObject>(); bool flag = (Object)(object)componentInParent3 != (Object)null && componentInParent3.isEnemy; if ((Object)(object)componentInParent != (Object)null || (Object)(object)componentInParent2 != (Object)null || flag) { trap?.TryTriggerByCollider(); } } } public class ZenithBlackHole : MonoBehaviourPun { public SemiLaser semiLaser; public float pullRadius = 8f; public float pullStrength = 32f; public LayerMask pullLayerMask; public List<PhysGrabObject> ignoreObjects = new List<PhysGrabObject>(); [Header("Pull Force Falloff")] public AnimationCurve pullFalloffCurve = AnimationCurve.EaseInOut(0f, 1f, 1f, 0.3f); [Header("Player Pull Settings")] [Tooltip("How much to scale the pull force for players (e.g., 0.5 = half strength)")] public float playerPullMultiplier = 0.5f; private void Start() { if ((Object)(object)semiLaser == (Object)null) { semiLaser = ((Component)this).GetComponentInParent<SemiLaser>(); } } private void FixedUpdate() { //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_0071: 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) //IL_00e6: Unknown result type (might be due to invalid IL or missing references) //IL_00e9: Unknown result type (might be due to invalid IL or missing references) //IL_0166: 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_016e: Unknown result type (might be due to invalid IL or missing references) //IL_0173: 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_017c: Unknown result type (might be due to invalid IL or missing references) //IL_0180: Unknown result type (might be due to invalid IL or missing references) //IL_0184: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)semiLaser == (Object)null || (Object)(object)semiLaser.hitTransform == (Object)null || !((Component)semiLaser.hitTransform).gameObject.activeSelf || !SemiFunc.IsMasterClientOrSingleplayer()) { return; } Vector3 position = semiLaser.hitTransform.position; Collider[] array = Physics.OverlapSphere(position, pullRadius, LayerMask.op_Implicit(pullLayerMask)); Collider[] array2 = array; foreach (Collider val in array2) { Rigidbody attachedRigidbody = val.attachedRigidbody; if (!((Object)(object)attachedRigidbody != (Object)null)) { continue; } PhysGrabObject component = ((Component)attachedRigidbody).GetComponent<PhysGrabObject>(); if ((Object)(object)component != (Object)null && ignoreObjects.Contains(component)) { continue; } float num = Vector3.Distance(position, attachedRigidbody.position); if (!(num < 0.2f)) { float num2 = Mathf.Clamp01(num / pullRadius); float num3 = pullFalloffCurve.Evaluate(num2); float num4 = pullStrength * num3; if (((Component)val).CompareTag("Player") || (Object)(object)((Component)val).GetComponentInParent<PlayerAvatar>() != (Object)null) { num4 *= playerPullMultiplier; } Vector3 val2 = position - attachedRigidbody.position; Vector3 normalized = ((Vector3)(ref val2)).normalized; attachedRigidbody.AddForce(normalized * num4, (ForceMode)5); } } } private void OnDrawGizmosSelected() { //IL_0028: 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) if ((Object)(object)semiLaser != (Object)null && (Object)(object)semiLaser.hitTransform != (Object)null) { Gizmos.color = Color.cyan; Gizmos.DrawWireSphere(semiLaser.hitTransform.position, pullRadius); } } } namespace RosayValuablesAPI { [HarmonyPatch(typeof(PlayerController), "FixedUpdate")] public static class PlayerControllerReverseTranspiler { public static bool reverseMovementActive; public static void EnableReverseControls() { reverseMovementActive = true; } public static void DisableReverseControls() { reverseMovementActive = false; } private static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> instructions) { //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Expected O, but got Unknown List<CodeInstruction> list = new List<CodeInstruction>(instructions); FieldInfo fieldInfo = AccessTools.Field(typeof(PlayerController), "InputDirection"); for (int i = 0; i < list.Count; i++) { if (list[i].opcode == OpCodes.Stfld && fieldInfo.Equals(list[i].operand)) { list.Insert(i + 1, new CodeInstruction(OpCodes.Ldarg_0, (object)null)); list.Insert(i + 2, CodeInstruction.Call(typeof(PlayerControllerReverseTranspiler), "MaybeReverseInputDirection", (Type[])null, (Type[])null)); i += 2; } } return list; } public static void MaybeReverseInputDirection(PlayerController player) { //IL_001d: 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) //IL_0027: Unknown result type (might be due to invalid IL or missing references) if (reverseMovementActive && (Object)(object)player == (Object)(object)PlayerController.instance) { player.InputDirection = -player.InputDirection; } } } [HarmonyPatch] public static class PostProcessingSepiaPatch { private static bool sepiaOverrideActive = false; private static float sepiaOverrideLerp = 0f; private static float sepiaOverrideTimer = 0f; private static float sepiaOverrideSpeedIn; private static float sepiaOverrideSpeedOut; private static Color sepiaOverrideColor = new Color(0.44f, 0.36f, 0.18f); private static float sepiaOverrideIntensity = 1f; private static GameObject? sepiaOverrideObject = null; private static Color colorFilterOriginal; private static ColorGrading? colorGrading => ((Object)(object)PostProcessing.Instance != (Object)null) ? PostProcessing.Instance.colorGrading : null; [HarmonyPatch(typeof(PostProcessing), "Update")] [HarmonyPostfix] public static void PostProcessing_Update_Postfix(PostProcessing __instance) { //IL_001e: 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_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_009d: 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_0054: 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_00d7: 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) if (!sepiaOverrideActive || !((Object)(object)colorGrading != (Object)null)) { return; } Color value = Color.Lerp(colorFilterOriginal, sepiaOverrideColor, sepiaOverrideLerp * sepiaOverrideIntensity); if (sepiaOverrideTimer > 0f) { ((ParameterOverride<Color>)(object)colorGrading.colorFilter).value = value; sepiaOverrideLerp += sepiaOverrideSpeedIn * Time.deltaTime; sepiaOverrideLerp = Mathf.Clamp01(sepiaOverrideLerp); sepiaOverrideTimer -= Time.deltaTime; return; } ((ParameterOverride<Color>)(object)colorGrading.colorFilter).value = value; sepiaOverrideLerp -= sepiaOverrideSpeedOut * Time.deltaTime; if (sepiaOverrideLerp <= 0f) { ((ParameterOverride<Color>)(object)colorGrading.colorFilter).value = colorFilterOriginal; sepiaOverrideActive = false; sepiaOverrideLerp = 0f; } } public static void SetSepiaOverride(float intensity, float duration, GameObject obj) { //IL_0036: 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) if (!((Object)(object)colorGrading == (Object)null)) { if (!sepiaOverrideActive || (Object)(object)obj != (Object)(object)sepiaOverrideObject) { colorFilterOriginal = ((ParameterOverride<Color>)(object)colorGrading.colorFilter).value; sepiaOverrideLerp = 0f; } sepiaOverrideActive = true; sepiaOverrideObject = obj; sepiaOverrideTimer = duration; sepiaOverrideSpeedIn = 4f; sepiaOverrideSpeedOut = 2f; sepiaOverrideIntensity = Mathf.Clamp01(intensity); } } public static void ClearSepiaOverride(GameObject obj) { if (sepiaOverrideActive && (Object)(object)sepiaOverrideObject == (Object)(object)obj) { sepiaOverrideTimer = 0f; } } } public static class PostProcessingExtensions { public static void SetSepiaOverride(this PostProcessing _, float intensity, float duration, GameObject obj) { PostProcessingSepiaPatch.SetSepiaOverride(intensity, duration, obj); } public static void ClearSepiaOverride(this PostProcessing _, GameObject obj) { PostProcessingSepiaPatch.ClearSepiaOverride(obj); } } [BepInPlugin("Rosay.RosayValuablesAPI", "RosayValuablesAPI", "1.0")] public class RosayValuablesAPI : BaseUnityPlugin { internal static RosayValuablesAPI Instance { get; private set; } internal static ManualLogSource Logger => Instance._logger; private ManualLogSource _logger => ((BaseUnityPlugin)this).Logger; internal Harmony? Harmony { get; set; } private void Awake() { Instance = this; ((Component)this).gameObject.transform.parent = null; ((Object)((Component)this).gameObject).hideFlags = (HideFlags)61; Patch(); Logger.LogInfo((object)$"{((BaseUnityPlugin)this).Info.Metadata.GUID} v{((BaseUnityPlugin)this).Info.Metadata.Version} has loaded!"); } internal void Patch() { //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_0021: Expected O, but got Unknown //IL_0026: Expected O, but got Unknown if (Harmony == null) { Harmony val = new Harmony(((BaseUnityPlugin)this).Info.Metadata.GUID); Harmony val2 = val; Harmony = val; } Harmony.PatchAll(); } internal void Unpatch() { Harmony? harmony = Harmony; if (harmony != null) { harmony.UnpatchSelf(); } } private void Update() { } } }