Decompiled source of Medieval2Spookified v1.1.1

Medieval2Spookified.dll

Decompiled 5 days ago
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 DM;
using HarmonyLib;
using Landfall.TABS;
using SCPE;
using UnityEngine;
using UnityEngine.Rendering.PostProcessing;
using UnityEngine.SceneManagement;

[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: AssemblyCompany("Medieval2Spookified")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("Medieval2Spookified")]
[assembly: AssemblyTitle("Medieval2Spookified")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace Medieval2Spookified;

[BepInPlugin("org.bepinex.plugins.Medieval2Spooky", "Medieval2Spooky", "1.1.0")]
internal class Loader : BaseUnityPlugin
{
	private void Awake()
	{
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_000c: Expected O, but got Unknown
		//IL_0018: Unknown result type (might be due to invalid IL or missing references)
		//IL_001e: Expected O, but got Unknown
		Harmony val = new Harmony("Medieval2Spooky");
		val.PatchAll();
		GameObject val2 = new GameObject("Medieval2Spooky");
		Object.DontDestroyOnLoad((Object)(object)val2);
		val2.AddComponent<LoadStuff>();
		val2.AddComponent<Main>();
	}
}
public static class SceneLoadHandler
{
	public static void Init()
	{
		SceneManager.sceneLoaded += OnSceneLoaded;
	}

	private static void OnSceneLoaded(Scene scene, LoadSceneMode mode)
	{
		//IL_001c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0021: Unknown result type (might be due to invalid IL or missing references)
		//IL_0077: Unknown result type (might be due to invalid IL or missing references)
		//IL_007e: Expected O, but got Unknown
		//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
		//IL_012e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0179: Unknown result type (might be due to invalid IL or missing references)
		//IL_017e: Unknown result type (might be due to invalid IL or missing references)
		string name = ((Scene)(ref scene)).name;
		if (!(name == "HalloweenMedievalFinal"))
		{
			return;
		}
		Scene activeScene = SceneManager.GetActiveScene();
		if (!(((Scene)(ref activeScene)).name == "HalloweenMedievalFinal"))
		{
			return;
		}
		GameObject[] rootGameObjects = ((Scene)(ref scene)).GetRootGameObjects();
		foreach (GameObject val in rootGameObjects)
		{
			if ((Object)(object)val.GetComponentInChildren<PostProcessVolume>() != (Object)null)
			{
				Debug.LogError((object)"Setting fog for map");
				Fog val2 = new Fog();
				((ParameterOverride<Texture>)(object)val2.skyboxTex).value = null;
				((ParameterOverride)val2.skyboxTex).overrideState = true;
				((ParameterOverride<bool>)(object)val2.useSceneSettings).value = false;
				((ParameterOverride)val2.useSceneSettings).overrideState = true;
				((ParameterOverride<FogMode>)(object)val2.fogMode).value = (FogMode)2;
				((ParameterOverride)val2.fogMode).overrideState = true;
				((ParameterOverride<float>)(object)val2.globalDensity).value = 1f;
				((ParameterOverride)val2.globalDensity).overrideState = true;
				((ParameterOverride<float>)(object)val2.fogStartDistance).value = 70f;
				((ParameterOverride)val2.fogStartDistance).overrideState = true;
				((ParameterOverride<float>)(object)val2.fogEndDistance).value = 600f;
				((ParameterOverride)val2.fogEndDistance).overrideState = true;
				((ParameterOverride<FogColorSource>)(object)val2.colorSource).value = (FogColorSource)0;
				((ParameterOverride)val2.colorSource).overrideState = true;
				((ParameterOverride<float>)(object)val2.skyboxMipLevel).value = 0f;
				((ParameterOverride)val2.skyboxMipLevel).overrideState = true;
				((ParameterOverride<Color>)(object)val2.fogColor).value = new Color(0.233f, 0.251f, 0.311f, 1f);
				((ParameterOverride)val2.fogColor).overrideState = true;
				((ParameterOverride<Texture>)(object)val2.fogColorGradient).value = null;
				((ParameterOverride)val2.fogColorGradient).overrideState = true;
				((ParameterOverride<float>)(object)val2.gradientDistance).value = 1000f;
				((ParameterOverride)val2.gradientDistance).overrideState = true;
				((ParameterOverride<bool>)(object)val2.gradientUseFarClipPlane).value = true;
				((ParameterOverride)val2.gradientUseFarClipPlane).overrideState = true;
				((ParameterOverride<bool>)(object)val2.distanceFog).value = true;
				((ParameterOverride)val2.distanceFog).overrideState = true;
				((ParameterOverride<float>)(object)val2.distanceDensity).value = 1f;
				((ParameterOverride)val2.distanceDensity).overrideState = true;
				((ParameterOverride<bool>)(object)val2.useRadialDistance).value = false;
				((ParameterOverride)val2.useRadialDistance).overrideState = false;
				((ParameterOverride<float>)(object)val2.skyboxInfluence).value = 0.864f;
				((ParameterOverride)val2.skyboxInfluence).overrideState = true;
				((ParameterOverride<bool>)(object)val2.skyboxFade).value = false;
				((ParameterOverride)val2.skyboxFade).overrideState = true;
				((ParameterOverride<bool>)(object)val2.heightFog).value = true;
				((ParameterOverride)val2.heightFog).overrideState = true;
				((ParameterOverride<float>)(object)val2.height).value = 1.7f;
				((ParameterOverride)val2.height).overrideState = true;
				((ParameterOverride<float>)(object)val2.heightDensity).value = 15f;
				((ParameterOverride)val2.heightDensity).overrideState = true;
				((ParameterOverride<bool>)(object)val2.heightFogNoise).value = false;
				((ParameterOverride)val2.heightFogNoise).overrideState = true;
				((ParameterOverride<Texture>)(object)val2.heightNoiseTex).value = null;
				((ParameterOverride)val2.heightNoiseTex).overrideState = true;
				((ParameterOverride<float>)(object)val2.heightNoiseSize).value = 0.25f;
				((ParameterOverride)val2.heightNoiseSize).overrideState = true;
				((ParameterOverride<float>)(object)val2.heightNoiseStrength).value = 1f;
				((ParameterOverride)val2.heightNoiseStrength).overrideState = true;
				((ParameterOverride<float>)(object)val2.heightNoiseSpeed).value = 2f;
				((ParameterOverride)val2.heightNoiseSpeed).overrideState = true;
				((ParameterOverride<bool>)(object)val2.lightScattering).value = false;
				((ParameterOverride)val2.lightScattering).overrideState = true;
				((ParameterOverride<float>)(object)val2.scatterIntensity).value = 10f;
				((ParameterOverride)val2.scatterIntensity).overrideState = true;
				((ParameterOverride<float>)(object)val2.scatterThreshold).value = 1f;
				((ParameterOverride)val2.scatterThreshold).overrideState = true;
				((ParameterOverride<float>)(object)val2.scatterDiffusion).value = 10f;
				((ParameterOverride)val2.scatterDiffusion).overrideState = true;
				((ParameterOverride<float>)(object)val2.scatterSoftKnee).value = 0.5f;
				((ParameterOverride)val2.scatterSoftKnee).overrideState = true;
				val.GetComponentInChildren<PostProcessVolume>().sharedProfile.AddSettings((PostProcessEffectSettings)(object)val2);
			}
			Renderer[] componentsInChildren = val.GetComponentsInChildren<Renderer>(true);
			if ((Object)(object)val.GetComponent<PirateWaterManager>() != (Object)null)
			{
				val.GetComponent<PirateWaterManager>().WaterMaterial.shader = Shader.Find(((Object)val.GetComponent<PirateWaterManager>().WaterMaterial.shader).name);
			}
			Renderer[] array = componentsInChildren;
			foreach (Renderer val3 in array)
			{
				Material[] sharedMaterials = val3.sharedMaterials;
				foreach (Material val4 in sharedMaterials)
				{
					if (!((Object)(object)val4 == (Object)null))
					{
						val4.shader = Shader.Find(((Object)val4.shader).name) ?? val4.shader;
					}
				}
				if (Object.op_Implicit((Object)(object)((Component)val3).GetComponent<PiratePlacementTransparency>()))
				{
					((Component)val3).GetComponent<PiratePlacementTransparency>().Materials[0].m_oldMaterial.shader = Shader.Find(((Object)((Component)val3).GetComponent<PiratePlacementTransparency>().Materials[0].m_oldMaterial.shader).name) ?? ((Component)val3).GetComponent<PiratePlacementTransparency>().Materials[0].m_oldMaterial.shader;
				}
			}
		}
	}
}
public class LoadStuff : MonoBehaviour
{
	public static void LoadAssets(bool reload)
	{
		//IL_01a8: Unknown result type (might be due to invalid IL or missing references)
		LandfallContentDatabase landfallContentDatabase = ContentDatabase.Instance().LandfallContentDatabase;
		string directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
		string[] files = Directory.GetFiles(directoryName, "*.ab", SearchOption.TopDirectoryOnly);
		if (files.Length == 0)
		{
			Debug.LogError((object)"No .ab files found in current directory!");
			return;
		}
		string[] array = files;
		foreach (string text in array)
		{
			AssetBundle val = AssetBundle.LoadFromFile(text);
			string text2 = Path.GetFileNameWithoutExtension(text).ToLower();
			if (text2 == "medievalmap")
			{
				continue;
			}
			List<MapAsset> list = val.LoadAllAssets<MapAsset>().ToList();
			Dictionary<DatabaseID, Object> dictionary = (Dictionary<DatabaseID, Object>)typeof(AssetLoader).GetField("m_nonStreamableAssets", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(ContentDatabase.Instance().AssetLoader);
			if (list.Count <= 0)
			{
				continue;
			}
			MapAsset[] array2 = (MapAsset[])typeof(LandfallContentDatabase).GetField("m_orderedMapAssets", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(landfallContentDatabase);
			Dictionary<DatabaseID, int> dictionary2 = new Dictionary<DatabaseID, int>();
			List<MapAsset> list2 = new List<MapAsset>();
			for (int j = 0; j < array2.Count(); j++)
			{
				list2.Add(array2[j]);
			}
			foreach (MapAsset item in list)
			{
				if ((Object)(object)item != (Object)null)
				{
					list2.Add(item);
					item.m_mapIndex = list2.Count();
				}
			}
			foreach (MapAsset item2 in list2)
			{
				dictionary2.Add(item2.Entity.GUID, list2.IndexOf(item2));
			}
			typeof(LandfallContentDatabase).GetField("m_orderedMapAssets", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(landfallContentDatabase, list2.ToArray());
			typeof(LandfallContentDatabase).GetField("m_mapAssetIndexLookup", BindingFlags.Instance | BindingFlags.NonPublic)?.SetValue(landfallContentDatabase, dictionary2);
		}
	}
}
public class Main : MonoBehaviour
{
	public void Awake()
	{
		Debug.Log((object)"Loaded Medieval2Spookified Successfully!");
		LoadStuff.LoadAssets(reload: false);
		SceneLoadHandler.Init();
	}
}