using System; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Configuration; using HarmonyLib; using Microsoft.CodeAnalysis; using UnityEngine; using UnityEngine.Rendering.PostProcessing; [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("REPO.MotionSicknessFix")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.2.0")] [assembly: AssemblyInformationalVersion("1.0.2")] [assembly: AssemblyProduct("REPO.MotionSicknessFix")] [assembly: AssemblyTitle("REPO.MotionSicknessFix")] [assembly: AssemblyVersion("1.0.2.0")] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [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 REPOMotionSicknessFix { [BepInPlugin("rei.repo.motionsicknessfix", "R.E.P.O Motion Sickness Fix", "1.0.2")] public sealed class Plugin : BaseUnityPlugin { public const string Guid = "rei.repo.motionsicknessfix"; public const string Name = "R.E.P.O Motion Sickness Fix"; public const string Version = "1.0.2"; internal static ConfigEntry RemoveHeadBob; internal static ConfigEntry CameraShakeStrength; internal static ConfigEntry CameraNoiseStrength; internal static ConfigEntry RemoveCameraTilt; internal static ConfigEntry StabilizeDynamicFieldOfView; internal static ConfigEntry DisableGrain; internal static ConfigEntry DisableMotionBlur; internal static ConfigEntry DisableLensDistortion; internal static ConfigEntry DisableChromaticAberration; internal static ConfigEntry DisableVignette; internal static ConfigEntry DisableBloom; internal static ConfigEntry Brightness; internal static ConfigEntry ShowCenterDot; internal static ConfigEntry CenterDotSize; private static readonly FieldInfo GrainField = AccessTools.Field(typeof(PostProcessing), "grain"); private static readonly FieldInfo MotionBlurField = AccessTools.Field(typeof(PostProcessing), "motionBlur"); private static readonly FieldInfo LensDistortionField = AccessTools.Field(typeof(PostProcessing), "lensDistortion"); private static readonly FieldInfo ChromaticAberrationField = AccessTools.Field(typeof(PostProcessing), "chromaticAberration"); private static readonly FieldInfo VignetteField = AccessTools.Field(typeof(PostProcessing), "vignette"); private static readonly FieldInfo BloomField = AccessTools.Field(typeof(PostProcessing), "bloom"); private static readonly FieldInfo ColorGradingField = AccessTools.Field(typeof(PostProcessing), "colorGrading"); private Texture2D dotTexture; private void Awake() { //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Expected O, but got Unknown //IL_008b: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Expected O, but got Unknown //IL_01c8: Unknown result type (might be due to invalid IL or missing references) //IL_01d2: Expected O, but got Unknown //IL_021a: Unknown result type (might be due to invalid IL or missing references) //IL_0224: Expected O, but got Unknown //IL_022c: Unknown result type (might be due to invalid IL or missing references) //IL_0236: Expected O, but got Unknown //IL_0252: Unknown result type (might be due to invalid IL or missing references) //IL_026c: Unknown result type (might be due to invalid IL or missing references) RemoveHeadBob = ((BaseUnityPlugin)this).Config.Bind("Camera", "RemoveHeadBob", true, "歩行・走行時の上下左右の揺れを無効化します。"); CameraShakeStrength = ((BaseUnityPlugin)this).Config.Bind("Camera", "CameraShakeStrength", 0f, new ConfigDescription("衝突・爆発・ダメージ等の画面揺れ倍率。初期値0で完全停止します。", (AcceptableValueBase)(object)new AcceptableValueRange(0f, 1f), Array.Empty())); CameraNoiseStrength = ((BaseUnityPlugin)this).Config.Bind("Camera", "CameraNoiseStrength", 0f, new ConfigDescription("ランダムなカメラノイズ倍率。初期値0で完全停止します。", (AcceptableValueBase)(object)new AcceptableValueRange(0f, 1f), Array.Empty())); RemoveCameraTilt = ((BaseUnityPlugin)this).Config.Bind("Camera", "RemoveCameraTilt", true, "旋回・横移動時の視点傾きを無効化します。"); StabilizeDynamicFieldOfView = ((BaseUnityPlugin)this).Config.Bind("Camera", "StabilizeDynamicFieldOfView", true, "走行・転倒によるFOV変化だけを除去し、イベントやアイテムのズームは維持します。"); DisableGrain = ((BaseUnityPlugin)this).Config.Bind("Visual", "DisableGrain", true, "フィルムグレイン(粒状のザラつき)を無効化します。"); DisableMotionBlur = ((BaseUnityPlugin)this).Config.Bind("Visual", "DisableMotionBlur", true, "モーションブラーを無効化します。"); DisableLensDistortion = ((BaseUnityPlugin)this).Config.Bind("Visual", "DisableLensDistortion", false, "レンズ歪みを無効化します。状態表現を失う可能性があるため初期値はOFFです。"); DisableChromaticAberration = ((BaseUnityPlugin)this).Config.Bind("Visual", "DisableChromaticAberration", true, "色収差を無効化します。"); DisableVignette = ((BaseUnityPlugin)this).Config.Bind("Visual", "DisableVignette", false, "画面端のビネットを無効化します。状態表現を失う可能性があるため初期値はOFFです。"); DisableBloom = ((BaseUnityPlugin)this).Config.Bind("Visual", "DisableBloom", false, "ブルーム(強い光のにじみ)を無効化します。"); Brightness = ((BaseUnityPlugin)this).Config.Bind("Visual", "Brightness", 0.15f, new ConfigDescription("明るさの露出補正(EV)。0が標準、正数で明るく、負数で暗くなります。", (AcceptableValueBase)(object)new AcceptableValueRange(-3f, 5f), Array.Empty())); ShowCenterDot = ((BaseUnityPlugin)this).Config.Bind("Reticle", "ShowCenterDot", true, "視線の基準になる中央ドットを表示します。"); CenterDotSize = ((BaseUnityPlugin)this).Config.Bind("Reticle", "CenterDotSize", 4, new ConfigDescription("中央ドットの大きさ(px)。", (AcceptableValueBase)(object)new AcceptableValueRange(2, 12), Array.Empty())); dotTexture = new Texture2D(1, 1); dotTexture.SetPixel(0, 0, new Color(1f, 1f, 1f, 0.8f)); dotTexture.Apply(); new Harmony("rei.repo.motionsicknessfix").PatchAll(); ((BaseUnityPlugin)this).Logger.LogInfo((object)"R.E.P.O Motion Sickness Fix 1.0.2 loaded"); } private void OnGUI() { //IL_0046: Unknown result type (might be due to invalid IL or missing references) if (ShowCenterDot.Value && !((Object)(object)dotTexture == (Object)null)) { int value = CenterDotSize.Value; GUI.DrawTexture(new Rect((float)(Screen.width - value) * 0.5f, (float)(Screen.height - value) * 0.5f, (float)value, (float)value), (Texture)(object)dotTexture); } } internal static void ApplyPostProcessing(PostProcessing instance) { if (!((Object)(object)instance == (Object)null)) { object? value = GrainField.GetValue(instance); Grain val = (Grain)((value is Grain) ? value : null); if (DisableGrain.Value && (Object)(object)val != (Object)null) { ((PostProcessEffectSettings)val).active = false; ((ParameterOverride)(object)val.intensity).value = 0f; } object? value2 = MotionBlurField.GetValue(instance); MotionBlur val2 = (MotionBlur)((value2 is MotionBlur) ? value2 : null); if (DisableMotionBlur.Value && (Object)(object)val2 != (Object)null) { ((PostProcessEffectSettings)val2).active = false; ((ParameterOverride)(object)val2.shutterAngle).value = 0f; } object? value3 = LensDistortionField.GetValue(instance); LensDistortion val3 = (LensDistortion)((value3 is LensDistortion) ? value3 : null); if (DisableLensDistortion.Value && (Object)(object)val3 != (Object)null) { ((PostProcessEffectSettings)val3).active = false; ((ParameterOverride)(object)val3.intensity).value = 0f; } object? value4 = ChromaticAberrationField.GetValue(instance); ChromaticAberration val4 = (ChromaticAberration)((value4 is ChromaticAberration) ? value4 : null); if (DisableChromaticAberration.Value && (Object)(object)val4 != (Object)null) { ((PostProcessEffectSettings)val4).active = false; ((ParameterOverride)(object)val4.intensity).value = 0f; } object? value5 = VignetteField.GetValue(instance); Vignette val5 = (Vignette)((value5 is Vignette) ? value5 : null); if (DisableVignette.Value && (Object)(object)val5 != (Object)null) { ((PostProcessEffectSettings)val5).active = false; ((ParameterOverride)(object)val5.intensity).value = 0f; } object? value6 = BloomField.GetValue(instance); Bloom val6 = (Bloom)((value6 is Bloom) ? value6 : null); if (DisableBloom.Value && (Object)(object)val6 != (Object)null) { ((PostProcessEffectSettings)val6).active = false; ((ParameterOverride)(object)val6.intensity).value = 0f; } object? value7 = ColorGradingField.GetValue(instance); ColorGrading val7 = (ColorGrading)((value7 is ColorGrading) ? value7 : null); if ((Object)(object)val7 != (Object)null) { ((ParameterOverride)(object)val7.postExposure).value = Brightness.Value; } } } } [HarmonyPatch(typeof(CameraBob), "Update")] internal static class CameraBobPatch { private static void Postfix(CameraBob __instance) { //IL_0013: 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) if (Plugin.RemoveHeadBob.Value) { ((Component)__instance).transform.localPosition = Vector3.zero; ((Component)__instance).transform.localRotation = Quaternion.identity; } } } [HarmonyPatch(typeof(CameraShake), "Update")] internal static class CameraShakePatch { private static void Postfix(CameraShake __instance) { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Unknown result type (might be due to invalid IL or missing references) float value = Plugin.CameraShakeStrength.Value; Transform transform = ((Component)__instance).transform; transform.localPosition *= value; ((Component)__instance).transform.localRotation = Quaternion.Slerp(Quaternion.identity, ((Component)__instance).transform.localRotation, value); } } [HarmonyPatch(typeof(CameraNoise), "Update")] internal static class CameraNoisePatch { private static void Postfix(CameraNoise __instance) { if (!((Object)(object)__instance.AnimNoise == (Object)null)) { AnimNoise animNoise = __instance.AnimNoise; animNoise.noiseStrengthDefault *= Plugin.CameraNoiseStrength.Value; } } } [HarmonyPatch(typeof(CameraTilt), "Update")] internal static class CameraTiltPatch { private static void Postfix(CameraTilt __instance) { //IL_0029: Unknown result type (might be due to invalid IL or missing references) if (Plugin.RemoveCameraTilt.Value) { __instance.tiltXresult = 0f; __instance.tiltZresult = 0f; ((Component)__instance).transform.localRotation = Quaternion.identity; } } } [HarmonyPatch(typeof(CameraZoom), "Update")] internal static class CameraZoomPatch { private static readonly FieldInfo SprintField = AccessTools.Field(typeof(CameraZoom), "SprintZoomCurrent"); private static readonly FieldInfo TumbleField = AccessTools.Field(typeof(CameraZoom), "TumbleVelocityZoom"); private static readonly FieldInfo FinalField = AccessTools.Field(typeof(CameraZoom), "zoomFinal"); private static void Postfix(CameraZoom __instance) { if (!Plugin.StabilizeDynamicFieldOfView.Value) { return; } float num = (float)SprintField.GetValue(__instance); float num2 = (float)TumbleField.GetValue(__instance); float fieldOfView = Mathf.Clamp((float)FinalField.GetValue(__instance) - num - num2, __instance.MinimumZoom, __instance.MaximumZoom); foreach (Camera cam in __instance.cams) { if ((Object)(object)cam != (Object)null) { cam.fieldOfView = fieldOfView; } } } } [HarmonyPatch(typeof(PostProcessing), "Update")] internal static class PostProcessingUpdatePatch { private static void Postfix(PostProcessing __instance) { Plugin.ApplyPostProcessing(__instance); } } [HarmonyPatch(typeof(PostProcessing), "Setup")] internal static class PostProcessingSetupPatch { private static void Postfix(PostProcessing __instance) { Plugin.ApplyPostProcessing(__instance); } } }