Decompiled source of NPCAppearanceMod v4.2.3

angelaboobs.dll

Decompiled a month ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using Nessie.ATLYSS.EasySettings;
using Nessie.ATLYSS.EasySettings.UIElements;
using UnityEngine;
using UnityEngine.Events;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: IgnoresAccessChecksTo("Assembly-CSharp")]
[assembly: AssemblyCompany("angelaboobs")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+48d1288b9ee8d06a85b5373db46c5899d822da4e")]
[assembly: AssemblyProduct("angelaboobs")]
[assembly: AssemblyTitle("angelaboobs")]
[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;
		}
	}
}
internal static class LCMPluginInfo
{
	public const string PLUGIN_GUID = "angelaboobs";

	public const string PLUGIN_NAME = "angelaboobs";

	public const string PLUGIN_VERSION = "1.0.0";
}
namespace angelaboobs
{
	public class AmmagonSliderBase : MonoBehaviour
	{
		[HarmonyPatch(typeof(NetNPC), "Start")]
		public static class AddNetNPCPatch
		{
			[HarmonyPostfix]
			public static void NetNPCAwakePatch(NetNPC __instance)
			{
				//IL_00f7: Unknown result type (might be due to invalid IL or missing references)
				//IL_00fe: Expected O, but got Unknown
				try
				{
					if (((object)__instance).ToString().Contains("_npc_ammagon"))
					{
						NPCPatcherBase.Log.LogInfo((object)"Ammagon located");
						AmmagonSliderController = ((Component)__instance).gameObject.AddComponent<AmmagonSliderController>();
						Transform val = ((Component)__instance).transform.Find("_visual").Find("ammagon_fbx");
						SkinnedMeshRenderer component = ((Component)val.Find("_ammagon_cloth")).GetComponent<SkinnedMeshRenderer>();
						component.sharedMesh = _newCloth;
						SkinnedMeshRenderer component2 = ((Component)val.Find("_ammagon_base")).GetComponent<SkinnedMeshRenderer>();
						component2.sharedMesh = _newTorso;
						MeshRenderer component3 = ((Component)((Component)__instance).transform.Find("_visual").Find("_shadowProjection").GetChild(0)).GetComponent<MeshRenderer>();
						Transform child = val.Find("Armature_ammagon").GetChild(0).GetChild(0)
							.GetChild(0);
						MeshRenderer component4 = ((Component)child.Find("_greatsword01_alt00")).GetComponent<MeshRenderer>();
						MeshRenderer component5 = ((Component)child.Find("_shield02")).GetComponent<MeshRenderer>();
						GameObject val2 = new GameObject("_ammagon_buttplug");
						val2.transform.SetParent(val);
						SkinnedMeshRenderer val3 = val2.AddComponent<SkinnedMeshRenderer>();
						val3.bones = component2.bones;
						((Renderer)val3).material = ((Renderer)component2).material;
						val3.sharedMesh = _buttplug;
						GameObject val4 = Object.Instantiate<GameObject>(CockObject, val);
						SkinnedMeshRenderer component6 = ((Component)val4.transform.GetChild(0)).gameObject.GetComponent<SkinnedMeshRenderer>();
						((Renderer)component6).material = ((Renderer)component2).material;
						Transform rootBone = component6.rootBone;
						rootBone.SetParent(val.Find("Armature_ammagon").GetChild(0));
						AmmagonSliderController.cloth = component;
						AmmagonSliderController.torso = component2;
						AmmagonSliderController.sword = component4;
						AmmagonSliderController.shield = component5;
						AmmagonSliderController.shadow = component3;
						AmmagonSliderController.dickObject = CockObject;
						AmmagonSliderController.dick = component6;
						AmmagonSliderController.buttplug = val3;
						AmmagonSliderController.ApplySettings();
						NPCPatcherBase.Log.LogInfo((object)"Ammagon body patched!");
					}
				}
				catch (Exception ex)
				{
					NPCPatcherBase.Log.LogError((object)ex);
				}
			}
		}

		private const string NPC_NAME = "Ammagon";

		public static GameObject CockObject;

		private static Mesh _newCloth;

		private static Mesh _newTorso;

		private static Mesh _buttplug;

		public static AnimationCurve dickAnimationCurve;

		public static AnimationCurve clothAnimationCurve;

		public ConfigFile config;

		public PluginInfo info;

		internal static ConfigEntry<int> textureSelector;

		internal static ConfigEntry<bool> dickVisible;

		internal static ConfigEntry<KeyCode> dickErect;

		internal static ConfigEntry<float> dickSize;

		internal static ConfigEntry<float> ballsSize;

		internal static ConfigEntry<bool> clothGone;

		internal static ConfigEntry<bool> buttplugEnable;

		internal static ConfigEntry<float> bodyAssSize;

		private static AtlyssDropdown textureDropdown;

		public static AmmagonSliderController AmmagonSliderController;

		public static List<string> textureFolderNames = new List<string>();

		public static int selectedTexture;

		public static List<Mesh> dicksMeshList = new List<Mesh>();

		private void Start()
		{
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Expected O, but got Unknown
			//IL_0209: Unknown result type (might be due to invalid IL or missing references)
			//IL_020a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0211: Unknown result type (might be due to invalid IL or missing references)
			//IL_0212: Unknown result type (might be due to invalid IL or missing references)
			//IL_0217: Unknown result type (might be due to invalid IL or missing references)
			//IL_0221: Expected O, but got Unknown
			InitConfig();
			Settings.OnApplySettings.AddListener((UnityAction)delegate
			{
				if (textureSelector.Value != selectedTexture)
				{
					textureSelector.Value = selectedTexture;
					AmmagonSliderController.textureChanged = true;
				}
				config.Save();
				if ((Object)(object)AmmagonSliderController != (Object)null)
				{
					AmmagonSliderController.ApplySettings();
				}
			});
			try
			{
				DirectoryInfo[] directories = new DirectoryInfo(Path.Combine(NPCPatcherBase.texturePath, "Ammagon")).GetDirectories();
				for (int i = 0; i < directories.Length; i++)
				{
					textureFolderNames.Add(directories[i].Name);
					if (NPCPatcherBase.VerboseLogging)
					{
						NPCPatcherBase.Log.LogInfo((object)("Loaded " + textureFolderNames[i] + " texture group"));
					}
				}
				if (selectedTexture > directories.Length - 1)
				{
					selectedTexture = directories.Length - 1;
				}
			}
			catch (Exception ex)
			{
				NPCPatcherBase.Log.LogError((object)("Unable to find textures in path " + NPCPatcherBase.texturePath + ". Continuing."));
				NPCPatcherBase.Log.LogError((object)ex.ToString());
			}
			try
			{
				_newCloth = NPCPatcherBase.bundle.LoadAsset<Mesh>("_ammagon_cloth");
				_newTorso = NPCPatcherBase.bundle.LoadAsset<Mesh>("_ammagon_base");
				_buttplug = NPCPatcherBase.bundle.LoadAsset<Mesh>("_ammagon_buttplug");
				CockObject = NPCPatcherBase.bundle.LoadAsset<GameObject>("ammagon_dick");
				dicksMeshList.Add(((Component)CockObject.transform.GetChild(0)).gameObject.GetComponent<SkinnedMeshRenderer>().sharedMesh);
			}
			catch (Exception ex2)
			{
				NPCPatcherBase.Log.LogError((object)("Unable to load angelaboobs.unity3d in " + info.Location + ". Patcher will not run correctly."));
				NPCPatcherBase.Log.LogError((object)ex2.ToString());
			}
			AddSettings();
			Keyframe val = default(Keyframe);
			((Keyframe)(ref val))..ctor(0f, 0f);
			((Keyframe)(ref val)).inTangent = 2.25f;
			((Keyframe)(ref val)).outTangent = 2.25f;
			((Keyframe)(ref val)).outWeight = 0.015f;
			Keyframe val2 = default(Keyframe);
			((Keyframe)(ref val2))..ctor(1f, 1f);
			dickAnimationCurve = AnimationCurve.EaseInOut(0f, 0f, 1f, 1f);
			dickAnimationCurve.preWrapMode = (WrapMode)1;
			dickAnimationCurve.postWrapMode = (WrapMode)1;
			clothAnimationCurve = new AnimationCurve((Keyframe[])(object)new Keyframe[2] { val, val2 });
			clothAnimationCurve.preWrapMode = (WrapMode)1;
			clothAnimationCurve.postWrapMode = (WrapMode)1;
		}

		private void InitConfig()
		{
			//IL_000a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0010: Expected O, but got Unknown
			//IL_001b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0021: Expected O, but got Unknown
			//IL_004d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0053: Expected O, but got Unknown
			//IL_005e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0064: Expected O, but got Unknown
			//IL_0081: Unknown result type (might be due to invalid IL or missing references)
			//IL_0088: Expected O, but got Unknown
			//IL_0093: Unknown result type (might be due to invalid IL or missing references)
			//IL_009a: Expected O, but got Unknown
			//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c4: Expected O, but got Unknown
			//IL_00cf: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d6: Expected O, but got Unknown
			//IL_00f9: Unknown result type (might be due to invalid IL or missing references)
			//IL_0100: Expected O, but got Unknown
			//IL_010b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0112: Expected O, but got Unknown
			//IL_0131: Unknown result type (might be due to invalid IL or missing references)
			//IL_0138: Expected O, but got Unknown
			//IL_0143: Unknown result type (might be due to invalid IL or missing references)
			//IL_014a: Expected O, but got Unknown
			//IL_0169: Unknown result type (might be due to invalid IL or missing references)
			//IL_0170: Expected O, but got Unknown
			//IL_017b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0182: Expected O, but got Unknown
			//IL_01a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ac: Expected O, but got Unknown
			//IL_01b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01be: Expected O, but got Unknown
			ConfigDefinition val = new ConfigDefinition("AmmagonSlider", "TextureSelection");
			ConfigDescription val2 = new ConfigDescription("TextureSelection", (AcceptableValueBase)null, Array.Empty<object>());
			textureSelector = config.Bind<int>(val, 0, val2);
			selectedTexture = textureSelector.Value;
			ConfigDefinition val3 = new ConfigDefinition("AmmagonSlider", "DickVisible");
			ConfigDescription val4 = new ConfigDescription("Dick visibility", (AcceptableValueBase)null, Array.Empty<object>());
			dickVisible = config.Bind<bool>(val3, true, val4);
			ConfigDefinition val5 = new ConfigDefinition("AmmagonSlider", "DickSize");
			ConfigDescription val6 = new ConfigDescription("Dick size", (AcceptableValueBase)null, Array.Empty<object>());
			dickSize = config.Bind<float>(val5, 0f, val6);
			ConfigDefinition val7 = new ConfigDefinition("AmmagonSlider", "BallsSize");
			ConfigDescription val8 = new ConfigDescription("Balls size", (AcceptableValueBase)null, Array.Empty<object>());
			ballsSize = config.Bind<float>(val7, 0f, val8);
			ConfigDefinition val9 = new ConfigDefinition("AmmagonSlider", "Clothless");
			ConfigDescription val10 = new ConfigDescription("Clothless", (AcceptableValueBase)null, Array.Empty<object>());
			clothGone = config.Bind<bool>(val9, false, val10);
			ConfigDefinition val11 = new ConfigDefinition("AmmagonSlider", "Buttplug");
			ConfigDescription val12 = new ConfigDescription("Buttplug", (AcceptableValueBase)null, Array.Empty<object>());
			buttplugEnable = config.Bind<bool>(val11, false, val12);
			ConfigDefinition val13 = new ConfigDefinition("AmmagonSlider", "BodyAssSize");
			ConfigDescription val14 = new ConfigDescription("Ass Size", (AcceptableValueBase)null, Array.Empty<object>());
			bodyAssSize = config.Bind<float>(val13, 0f, val14);
			ConfigDefinition val15 = new ConfigDefinition("AmmagonSlider", "DickErect");
			ConfigDescription val16 = new ConfigDescription("Erection hotkey", (AcceptableValueBase)null, Array.Empty<object>());
			dickErect = config.Bind<KeyCode>(val15, (KeyCode)46, val16);
		}

		public void AddSettings()
		{
			SettingsTab orAddCustomTab = Settings.GetOrAddCustomTab("NPC Appearance Mod");
			orAddCustomTab.AddHeader("Ammagon Appearance Mod");
			textureDropdown = orAddCustomTab.AddDropdown("Texture", textureFolderNames, selectedTexture);
			textureDropdown.OnValueChanged.AddListener((UnityAction<int>)delegate(int x)
			{
				selectedTexture = x;
			});
			orAddCustomTab.AddToggle("Dick visibility", dickVisible);
			orAddCustomTab.AddToggle("Bottomless", clothGone);
			orAddCustomTab.AddToggle("Buttplug", buttplugEnable);
			orAddCustomTab.AddSlider("Dick size", dickSize, false);
			orAddCustomTab.AddSlider("Balls size", ballsSize, false);
			orAddCustomTab.AddSlider("Bigger ass", bodyAssSize, false);
			orAddCustomTab.AddKeyButton("Erection shortcut", dickErect);
		}
	}
	public class AmmagonSliderController : MonoBehaviour
	{
		private float _arousalTarget;

		private float _arousalCurrent;

		public float bodyAssSize;

		public float dickSize;

		public float ballsSize;

		public bool textureChanged = true;

		public SkinnedMeshRenderer cloth;

		public SkinnedMeshRenderer torso;

		public SkinnedMeshRenderer dick;

		public SkinnedMeshRenderer buttplug;

		public GameObject dickObject;

		public MeshRenderer sword;

		public MeshRenderer shield;

		public MeshRenderer shadow;

		private int _dickTexture;

		private int _buttplugTexture;

		private void Awake()
		{
			_dickTexture = NPCPatcherBase.customTextures.Count;
			NPCPatcherBase.customTextures.Add(NPCPatcherBase.LoadTextureOrDefault(NPCEnum.Ammagon, TexturesEnum.Base, AmmagonSliderBase.textureFolderNames[AmmagonSliderBase.selectedTexture], "ammagonTex_dick"));
			_buttplugTexture = NPCPatcherBase.customTextures.Count;
			NPCPatcherBase.customTextures.Add(NPCPatcherBase.LoadTextureOrDefault(NPCEnum.Ammagon, TexturesEnum.Base, AmmagonSliderBase.textureFolderNames[AmmagonSliderBase.selectedTexture], "ammagonTex_buttplug"));
		}

		public void ApplyBones(GameObject go)
		{
			if (!((Object)go).name.Contains("masterBone"))
			{
				DynamicBone val = go.AddComponent<DynamicBone>();
				val.m_Root = go.transform;
				val.m_Stiffness = 0.85f;
				val.m_Damping = 0.33f;
				val.m_Inert = 0.37f;
				if (((Object)go).name.Contains("Balls"))
				{
					val.m_Stiffness = 0.4f;
					val.m_Damping = 0.2f;
					val.m_Inert = 0.15f;
				}
			}
		}

		public void ApplySettings()
		{
			//IL_036d: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c5: Unknown result type (might be due to invalid IL or missing references)
			float num = AmmagonSliderBase.dickAnimationCurve.Evaluate(_arousalCurrent) * 100f;
			float num2 = AmmagonSliderBase.clothAnimationCurve.Evaluate(_arousalCurrent) * 100f;
			bodyAssSize = AmmagonSliderBase.bodyAssSize.Value * 100f;
			dickSize = AmmagonSliderBase.dickSize.Value * 100f;
			ballsSize = AmmagonSliderBase.ballsSize.Value * 100f;
			if (AmmagonSliderBase.dickVisible.Value)
			{
				dick.SetBlendShapeWeight(dick.sharedMesh.GetBlendShapeIndex("key_erect"), num);
				dick.SetBlendShapeWeight(dick.sharedMesh.GetBlendShapeIndex("key_dickSizeErect"), num * (dickSize / 100f));
				dick.SetBlendShapeWeight(dick.sharedMesh.GetBlendShapeIndex("key_dickSize"), dickSize);
				dick.SetBlendShapeWeight(dick.sharedMesh.GetBlendShapeIndex("key_ballsSize"), ballsSize);
				cloth.SetBlendShapeWeight(cloth.sharedMesh.GetBlendShapeIndex("key_erect"), num2);
				cloth.SetBlendShapeWeight(cloth.sharedMesh.GetBlendShapeIndex("key_dickSize"), dickSize * (1f - num2 / 100f));
				cloth.SetBlendShapeWeight(cloth.sharedMesh.GetBlendShapeIndex("key_ballsSizeErect"), num2 * (ballsSize / 100f));
				cloth.SetBlendShapeWeight(cloth.sharedMesh.GetBlendShapeIndex("key_penisBase"), 100f - num);
			}
			else
			{
				cloth.SetBlendShapeWeight(cloth.sharedMesh.GetBlendShapeIndex("key_erect"), 0f);
				cloth.SetBlendShapeWeight(cloth.sharedMesh.GetBlendShapeIndex("key_dickSize"), 0f);
				cloth.SetBlendShapeWeight(cloth.sharedMesh.GetBlendShapeIndex("key_ballsSizeErect"), 0f);
				cloth.SetBlendShapeWeight(cloth.sharedMesh.GetBlendShapeIndex("key_penisBase"), 0f);
			}
			torso.SetBlendShapeWeight(torso.sharedMesh.GetBlendShapeIndex("key_assSize"), bodyAssSize);
			buttplug.SetBlendShapeWeight(buttplug.sharedMesh.GetBlendShapeIndex("key_assSize"), bodyAssSize);
			if (textureChanged)
			{
				NPCPatcherBase.textureDictionary[NPCEnum.Ammagon][TexturesEnum.Base] = NPCPatcherBase.LoadTextureOrDefault(NPCEnum.Ammagon, TexturesEnum.Base, AmmagonSliderBase.textureFolderNames[AmmagonSliderBase.selectedTexture]);
				((Renderer)torso).material.mainTexture = (Texture)(object)NPCPatcherBase.textureDictionary[NPCEnum.Ammagon][TexturesEnum.Base];
				NPCPatcherBase.customTextures[_dickTexture] = NPCPatcherBase.LoadTextureOrDefault(NPCEnum.Ammagon, TexturesEnum.Base, AmmagonSliderBase.textureFolderNames[AmmagonSliderBase.selectedTexture], "ammagonTex_dick");
				((Renderer)dick).material.mainTexture = (Texture)(object)NPCPatcherBase.customTextures[_dickTexture];
				((Renderer)dick).material.mainTexture.filterMode = ((Texture)NPCPatcherBase.textureDictionary[NPCEnum.Ammagon][TexturesEnum.Base]).filterMode;
				NPCPatcherBase.customTextures[_buttplugTexture] = NPCPatcherBase.LoadTextureOrDefault(NPCEnum.Ammagon, TexturesEnum.Base, AmmagonSliderBase.textureFolderNames[AmmagonSliderBase.selectedTexture], "ammagonTex_buttplug");
				((Renderer)buttplug).material.mainTexture.filterMode = ((Texture)NPCPatcherBase.textureDictionary[NPCEnum.Ammagon][TexturesEnum.Base]).filterMode;
				NPCPatcherBase.textureDictionary[NPCEnum.Ammagon][TexturesEnum.Shadow] = NPCPatcherBase.LoadTextureOrDefault(NPCEnum.Ammagon, TexturesEnum.Shadow, AmmagonSliderBase.textureFolderNames[AmmagonSliderBase.selectedTexture]);
				((Renderer)shadow).material.mainTexture = (Texture)(object)NPCPatcherBase.textureDictionary[NPCEnum.Ammagon][TexturesEnum.Shadow];
				NPCPatcherBase.textureDictionary[NPCEnum.Ammagon][TexturesEnum.Sword] = NPCPatcherBase.LoadTextureOrDefault(NPCEnum.Ammagon, TexturesEnum.Sword, AmmagonSliderBase.textureFolderNames[AmmagonSliderBase.selectedTexture]);
				((Renderer)sword).material.mainTexture = (Texture)(object)NPCPatcherBase.textureDictionary[NPCEnum.Ammagon][TexturesEnum.Sword];
				NPCPatcherBase.textureDictionary[NPCEnum.Ammagon][TexturesEnum.Shield] = NPCPatcherBase.LoadTextureOrDefault(NPCEnum.Ammagon, TexturesEnum.Shield, AmmagonSliderBase.textureFolderNames[AmmagonSliderBase.selectedTexture]);
				((Renderer)shield).material.mainTexture = (Texture)(object)NPCPatcherBase.textureDictionary[NPCEnum.Ammagon][TexturesEnum.Shield];
				textureChanged = false;
			}
			((Renderer)cloth).material.mainTexture = (Texture)(AmmagonSliderBase.clothGone.Value ? ((object)Texture2D.blackTexture) : ((object)NPCPatcherBase.textureDictionary[NPCEnum.Ammagon][TexturesEnum.Base]));
			Material material = ((Renderer)dick).material;
			object mainTexture;
			if (!AmmagonSliderBase.dickVisible.Value)
			{
				mainTexture = Texture2D.blackTexture;
			}
			else
			{
				Texture val2 = (((Renderer)dick).material.mainTexture = (Texture)(object)NPCPatcherBase.customTextures[_dickTexture]);
				mainTexture = val2;
			}
			material.mainTexture = (Texture)mainTexture;
			((Renderer)buttplug).material.mainTexture = (Texture)(AmmagonSliderBase.buttplugEnable.Value ? ((object)NPCPatcherBase.customTextures[_buttplugTexture]) : ((object)Texture2D.blackTexture));
		}

		private void Update()
		{
			//IL_01be: Unknown result type (might be due to invalid IL or missing references)
			if (Mathf.Approximately(_arousalTarget, 1f))
			{
				if (_arousalCurrent < _arousalTarget)
				{
					_arousalCurrent += 0.1f * Time.deltaTime;
				}
				else
				{
					_arousalCurrent = _arousalTarget;
				}
			}
			else if (_arousalCurrent > _arousalTarget)
			{
				_arousalCurrent -= 0.1f * Time.deltaTime;
			}
			else
			{
				_arousalCurrent = _arousalTarget;
			}
			if (!Mathf.Approximately(_arousalCurrent, _arousalTarget))
			{
				float num = AmmagonSliderBase.dickAnimationCurve.Evaluate(_arousalCurrent) * 100f;
				float num2 = AmmagonSliderBase.clothAnimationCurve.Evaluate(_arousalCurrent) * 100f;
				dick.SetBlendShapeWeight(dick.sharedMesh.GetBlendShapeIndex("key_erect"), num);
				dick.SetBlendShapeWeight(dick.sharedMesh.GetBlendShapeIndex("key_dickSizeErect"), num * (dickSize / 100f));
				cloth.SetBlendShapeWeight(cloth.sharedMesh.GetBlendShapeIndex("key_erect"), num2);
				cloth.SetBlendShapeWeight(cloth.sharedMesh.GetBlendShapeIndex("key_dickSize"), dickSize * (1f - num2 / 100f));
				cloth.SetBlendShapeWeight(cloth.sharedMesh.GetBlendShapeIndex("key_ballsSizeErect"), num2 * (ballsSize / 100f));
				cloth.SetBlendShapeWeight(cloth.sharedMesh.GetBlendShapeIndex("key_penisBase"), 100f - num);
			}
			if (Input.GetKeyDown(AmmagonSliderBase.dickErect.Value))
			{
				_arousalTarget = ((_arousalTarget == 0f) ? 1f : 0f);
			}
		}
	}
	public class AngelaSliderBase : MonoBehaviour
	{
		[HarmonyPatch(typeof(NetNPC), "Start")]
		public static class AddNetNPCPatch
		{
			[HarmonyPostfix]
			public static void NetNPCAwakePatch(NetNPC __instance)
			{
				//IL_00df: Unknown result type (might be due to invalid IL or missing references)
				//IL_00eb: Unknown result type (might be due to invalid IL or missing references)
				//IL_014e: Unknown result type (might be due to invalid IL or missing references)
				//IL_015a: Unknown result type (might be due to invalid IL or missing references)
				//IL_01ba: Unknown result type (might be due to invalid IL or missing references)
				//IL_01c6: Unknown result type (might be due to invalid IL or missing references)
				try
				{
					if (!((object)__instance).ToString().Contains("_npc_Angela"))
					{
						return;
					}
					NPCPatcherBase.Log.LogInfo((object)"Angela located");
					AngelaSliderController = ((Component)__instance).gameObject.AddComponent<AngelaSliderController>();
					eyeController = ((Component)((Component)__instance).transform.Find("_visual")).GetComponent<TextureChangeAnimEvent>();
					ApplyEyeTexturesToEyeController();
					DialogTrigger component = ((Component)((Component)__instance).transform.Find("_dialogTrigger")).GetComponent<DialogTrigger>();
					DialogBranch[] dialogBranches = component._scriptDialogData._dialogBranches;
					foreach (DialogBranch val in dialogBranches)
					{
						Dialog[] dialogs = val.dialogs;
						foreach (Dialog val2 in dialogs)
						{
							DialogList.Add(val2);
							if (((Object)val2.facepic).name == "facepic_angela01")
							{
								facepic1Sprite = Sprite.Create(NPCPatcherBase.LoadTextureOrDefault(NPCEnum.Angela, TexturesEnum.FacePic1, textureFolderNames[selectedTexture]), val2.facepic.rect, val2.facepic.pivot, val2.facepic.pixelsPerUnit, 0u);
								val2.facepic = facepic1Sprite;
							}
							else if (((Object)val2.facepic).name == "facepic_angela02")
							{
								facepic2Sprite = Sprite.Create(NPCPatcherBase.LoadTextureOrDefault(NPCEnum.Angela, TexturesEnum.FacePic2, textureFolderNames[selectedTexture]), val2.facepic.rect, val2.facepic.pivot, val2.facepic.pixelsPerUnit, 0u);
								val2.facepic = facepic2Sprite;
							}
							else if (((Object)val2.facepic).name == "facepic_angela03")
							{
								facepic3Sprite = Sprite.Create(NPCPatcherBase.LoadTextureOrDefault(NPCEnum.Angela, TexturesEnum.FacePic3, textureFolderNames[selectedTexture]), val2.facepic.rect, val2.facepic.pivot, val2.facepic.pixelsPerUnit, 0u);
								val2.facepic = facepic3Sprite;
							}
						}
					}
					Transform val3 = ((Component)__instance).transform.Find("_visual").Find("angela_mesh");
					SkinnedMeshRenderer component2 = ((Component)val3.Find("angela_boobs")).GetComponent<SkinnedMeshRenderer>();
					component2.sharedMesh = _newBoobs;
					SkinnedMeshRenderer component3 = ((Component)val3.Find("angela_base")).GetComponent<SkinnedMeshRenderer>();
					component3.sharedMesh = _newBody;
					SkinnedMeshRenderer component4 = ((Component)val3.Find("angela_robeSkirt")).GetComponent<SkinnedMeshRenderer>();
					component4.sharedMesh = _newSkirt;
					SkinnedMeshRenderer component5 = ((Component)val3.Find("angela_arms")).GetComponent<SkinnedMeshRenderer>();
					SkinnedMeshRenderer component6 = ((Component)val3.Find("angela_ears")).GetComponent<SkinnedMeshRenderer>();
					SkinnedMeshRenderer component7 = ((Component)val3.Find("angela_eyes")).GetComponent<SkinnedMeshRenderer>();
					SkinnedMeshRenderer component8 = ((Component)val3.Find("angela_feet")).GetComponent<SkinnedMeshRenderer>();
					SkinnedMeshRenderer component9 = ((Component)val3.Find("angela_hairTuft")).GetComponent<SkinnedMeshRenderer>();
					SkinnedMeshRenderer component10 = ((Component)val3.Find("angela_horns")).GetComponent<SkinnedMeshRenderer>();
					SkinnedMeshRenderer component11 = ((Component)val3.Find("angela_necklace")).GetComponent<SkinnedMeshRenderer>();
					SkinnedMeshRenderer component12 = ((Component)val3.Find("angela_tail")).GetComponent<SkinnedMeshRenderer>();
					MeshRenderer component13 = ((Component)val3.Find("Armature_character").Find("masterBone").Find("Quad")
						.Find("Quad_01")).GetComponent<MeshRenderer>();
					Transform val4 = val3.Find("Armature_character").Find("masterBone").Find("hipCtrl")
						.Find("hip")
						.Find("lowBody")
						.Find("midBody")
						.Find("torso")
						.Find("shoulder.l")
						.GetChild(0)
						.GetChild(0)
						.GetChild(0)
						.GetChild(0)
						.Find("bookProp_01");
					MeshRenderer component14 = ((Component)val4.Find("prop_book_L")).GetComponent<MeshRenderer>();
					MeshRenderer component15 = ((Component)val4.Find("prop_book_R")).GetComponent<MeshRenderer>();
					MeshRenderer component16 = ((Component)((Component)__instance).transform.Find("_visual").Find("_shadowProjection").GetChild(0)).GetComponent<MeshRenderer>();
					DynamicBone val5 = __instance._jiggleBones[2];
					DynamicBone val6 = __instance._jiggleBones[3];
					AngelaSliderController.boobs = component2;
					AngelaSliderController.torso = component3;
					AngelaSliderController.skirt = component4;
					AngelaSliderController.arms = component5;
					AngelaSliderController.ears = component6;
					AngelaSliderController.eyes = component7;
					AngelaSliderController.feet = component8;
					AngelaSliderController.hairTuft = component9;
					AngelaSliderController.horns = component10;
					AngelaSliderController.necklace = component11;
					AngelaSliderController.tail = component12;
					AngelaSliderController.glyph = component13;
					AngelaSliderController.bookL = component14;
					AngelaSliderController.bookR = component15;
					AngelaSliderController.shadow = component16;
					AngelaSliderController.boobBoneL = val5;
					AngelaSliderController.boobBoneR = val6;
					AngelaSliderController.boobBoneLOrig = val5;
					AngelaSliderController.boobBoneROrig = val6;
					AngelaSliderController.ApplySettings();
					NPCPatcherBase.Log.LogInfo((object)"Angela body patched!");
				}
				catch (Exception ex)
				{
					NPCPatcherBase.Log.LogError((object)ex);
				}
			}
		}

		private const string NPC_NAME = "Angela";

		private static Mesh _newBoobs;

		private static Mesh _newBody;

		private static Mesh _newSkirt;

		public static Sprite facepic1Sprite;

		public static Sprite facepic2Sprite;

		public static Sprite facepic3Sprite;

		public ConfigFile config;

		public PluginInfo info;

		internal static ConfigEntry<int> textureSelector;

		internal static ConfigEntry<float> nippleInnie;

		internal static ConfigEntry<float> nippleSize;

		internal static ConfigEntry<float> boobSmall;

		internal static ConfigEntry<float> boobLarge;

		internal static ConfigEntry<float> nippleGone;

		internal static ConfigEntry<bool> topless;

		internal static ConfigEntry<bool> bottomless;

		internal static ConfigEntry<bool> nippleInnieWhenClothed;

		internal static ConfigEntry<bool> nippleGoneWhenClothed;

		internal static ConfigEntry<float> assLarge;

		internal static ConfigEntry<float> thighsThick;

		private static AtlyssDropdown textureDropdown;

		public static AngelaSliderController AngelaSliderController;

		public static TextureChangeAnimEvent eyeController;

		public static List<string> textureFolderNames = new List<string>();

		public static int selectedTexture;

		internal static List<Dialog> DialogList = new List<Dialog>();

		private void Start()
		{
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Expected O, but got Unknown
			InitConfig();
			Settings.OnApplySettings.AddListener((UnityAction)delegate
			{
				if (textureSelector.Value != selectedTexture)
				{
					textureSelector.Value = selectedTexture;
					AngelaSliderController.textureChanged = true;
				}
				config.Save();
				if ((Object)(object)AngelaSliderController != (Object)null)
				{
					AngelaSliderController.ApplySettings();
				}
				if ((Object)(object)eyeController != (Object)null)
				{
					ApplyEyeTexturesToEyeController();
				}
			});
			try
			{
				DirectoryInfo[] directories = new DirectoryInfo(Path.Combine(NPCPatcherBase.texturePath, "Angela")).GetDirectories();
				for (int i = 0; i < directories.Length; i++)
				{
					textureFolderNames.Add(directories[i].Name);
					if (NPCPatcherBase.VerboseLogging)
					{
						NPCPatcherBase.Log.LogInfo((object)("Loaded " + textureFolderNames[i] + " texture group"));
					}
				}
				if (selectedTexture > directories.Length - 1)
				{
					selectedTexture = directories.Length - 1;
				}
			}
			catch (Exception ex)
			{
				NPCPatcherBase.Log.LogError((object)("Unable to find textures in path " + NPCPatcherBase.texturePath + ". Continuing."));
				NPCPatcherBase.Log.LogError((object)ex.ToString());
			}
			AddSettings();
			try
			{
				_newBoobs = NPCPatcherBase.bundle.LoadAsset<Mesh>("angela_boobs");
				_newBody = NPCPatcherBase.bundle.LoadAsset<Mesh>("angela_base");
				_newSkirt = NPCPatcherBase.bundle.LoadAsset<Mesh>("angela_robeSkirt");
			}
			catch (Exception ex2)
			{
				NPCPatcherBase.Log.LogError((object)("Unable to find angelaboobs.unity3d in " + info.Location + ". Patcher will not run correctly."));
				NPCPatcherBase.Log.LogError((object)ex2.ToString());
			}
		}

		private static void ApplyEyeTexturesToEyeController()
		{
			eyeController._textureStructs[0]._texture = (Texture)(object)NPCPatcherBase.LoadTextureOrDefault(NPCEnum.Angela, TexturesEnum.Eye, textureFolderNames[selectedTexture]);
			eyeController._textureStructs[1]._texture = (Texture)(object)NPCPatcherBase.LoadTextureOrDefault(NPCEnum.Angela, TexturesEnum.EyeLeft, textureFolderNames[selectedTexture]);
			eyeController._textureStructs[2]._texture = (Texture)(object)NPCPatcherBase.LoadTextureOrDefault(NPCEnum.Angela, TexturesEnum.EyeRight, textureFolderNames[selectedTexture]);
			eyeController._textureStructs[3]._texture = (Texture)(object)NPCPatcherBase.LoadTextureOrDefault(NPCEnum.Angela, TexturesEnum.EyeDown, textureFolderNames[selectedTexture]);
			eyeController._textureStructs[4]._texture = (Texture)(object)NPCPatcherBase.LoadTextureOrDefault(NPCEnum.Angela, TexturesEnum.Eye3, textureFolderNames[selectedTexture]);
			eyeController._textureStructs[5]._texture = (Texture)(object)NPCPatcherBase.LoadTextureOrDefault(NPCEnum.Angela, TexturesEnum.Eye2, textureFolderNames[selectedTexture]);
			eyeController._textureStructs[6]._texture = (Texture)(object)NPCPatcherBase.LoadTextureOrDefault(NPCEnum.Angela, TexturesEnum.EyePissed, textureFolderNames[selectedTexture]);
			eyeController._textureStructs[7]._texture = (Texture)(object)NPCPatcherBase.LoadTextureOrDefault(NPCEnum.Angela, TexturesEnum.Eye4, textureFolderNames[selectedTexture]);
			eyeController._textureStructs[8]._texture = (Texture)(object)NPCPatcherBase.LoadTextureOrDefault(NPCEnum.Angela, TexturesEnum.Eye5, textureFolderNames[selectedTexture]);
		}

		private void InitConfig()
		{
			//IL_000a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0010: Expected O, but got Unknown
			//IL_001b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0021: Expected O, but got Unknown
			//IL_004d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0053: Expected O, but got Unknown
			//IL_005e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0064: Expected O, but got Unknown
			//IL_0081: Unknown result type (might be due to invalid IL or missing references)
			//IL_0088: Expected O, but got Unknown
			//IL_0093: Unknown result type (might be due to invalid IL or missing references)
			//IL_009a: Expected O, but got Unknown
			//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c0: Expected O, but got Unknown
			//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d2: Expected O, but got Unknown
			//IL_00f1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f8: Expected O, but got Unknown
			//IL_0103: Unknown result type (might be due to invalid IL or missing references)
			//IL_010a: Expected O, but got Unknown
			//IL_0129: Unknown result type (might be due to invalid IL or missing references)
			//IL_0130: Expected O, but got Unknown
			//IL_013b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0142: Expected O, but got Unknown
			//IL_0165: Unknown result type (might be due to invalid IL or missing references)
			//IL_016c: Expected O, but got Unknown
			//IL_0177: Unknown result type (might be due to invalid IL or missing references)
			//IL_017e: Expected O, but got Unknown
			//IL_01a1: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a8: Expected O, but got Unknown
			//IL_01b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ba: Expected O, but got Unknown
			//IL_01dd: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e4: Expected O, but got Unknown
			//IL_01ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f6: Expected O, but got Unknown
			//IL_0219: Unknown result type (might be due to invalid IL or missing references)
			//IL_0220: Expected O, but got Unknown
			//IL_022b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0232: Expected O, but got Unknown
			//IL_0255: Unknown result type (might be due to invalid IL or missing references)
			//IL_025c: Expected O, but got Unknown
			//IL_0267: Unknown result type (might be due to invalid IL or missing references)
			//IL_026e: Expected O, but got Unknown
			//IL_0291: Unknown result type (might be due to invalid IL or missing references)
			//IL_0298: Expected O, but got Unknown
			//IL_02a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_02aa: Expected O, but got Unknown
			ConfigDefinition val = new ConfigDefinition("AngelaBoobs", "TextureSelection");
			ConfigDescription val2 = new ConfigDescription("TextureSelection", (AcceptableValueBase)null, Array.Empty<object>());
			textureSelector = config.Bind<int>(val, 0, val2);
			selectedTexture = textureSelector.Value;
			ConfigDefinition val3 = new ConfigDefinition("AngelaBoobs", "Topless");
			ConfigDescription val4 = new ConfigDescription("Topless", (AcceptableValueBase)null, Array.Empty<object>());
			topless = config.Bind<bool>(val3, false, val4);
			ConfigDefinition val5 = new ConfigDefinition("AngelaBoobs", "Bottomless");
			ConfigDescription val6 = new ConfigDescription("Bottomless", (AcceptableValueBase)null, Array.Empty<object>());
			bottomless = config.Bind<bool>(val5, false, val6);
			ConfigDefinition val7 = new ConfigDefinition("AngelaBoobs", "NippleInnieWhenClothed");
			ConfigDescription val8 = new ConfigDescription("Nipples flat when clothed", (AcceptableValueBase)null, Array.Empty<object>());
			nippleInnieWhenClothed = config.Bind<bool>(val7, true, val8);
			ConfigDefinition val9 = new ConfigDefinition("AngelaBoobs", "NippleGoneWhenClothed");
			ConfigDescription val10 = new ConfigDescription("Nipples gone when clothed", (AcceptableValueBase)null, Array.Empty<object>());
			nippleGoneWhenClothed = config.Bind<bool>(val9, false, val10);
			ConfigDefinition val11 = new ConfigDefinition("AngelaBoobs", "NippleInnie");
			ConfigDescription val12 = new ConfigDescription("Flat nipple tips", (AcceptableValueBase)null, Array.Empty<object>());
			nippleInnie = config.Bind<float>(val11, 0f, val12);
			ConfigDefinition val13 = new ConfigDefinition("AngelaBoobs", "NippleSize");
			ConfigDescription val14 = new ConfigDescription("Nipple size", (AcceptableValueBase)null, Array.Empty<object>());
			nippleSize = config.Bind<float>(val13, 0f, val14);
			ConfigDefinition val15 = new ConfigDefinition("AngelaBoobs", "BreastSmall");
			ConfigDescription val16 = new ConfigDescription("Smaller breasts", (AcceptableValueBase)null, Array.Empty<object>());
			boobSmall = config.Bind<float>(val15, 0f, val16);
			ConfigDefinition val17 = new ConfigDefinition("AngelaBoobs", "BreastLarge");
			ConfigDescription val18 = new ConfigDescription("Larger breasts", (AcceptableValueBase)null, Array.Empty<object>());
			boobLarge = config.Bind<float>(val17, 0f, val18);
			ConfigDefinition val19 = new ConfigDefinition("AngelaBoobs", "NippleGone");
			ConfigDescription val20 = new ConfigDescription("Make nipples go away", (AcceptableValueBase)null, Array.Empty<object>());
			nippleGone = config.Bind<float>(val19, 0f, val20);
			ConfigDefinition val21 = new ConfigDefinition("AngelaBoobs", "AssLarge");
			ConfigDescription val22 = new ConfigDescription("Make ass bigger", (AcceptableValueBase)null, Array.Empty<object>());
			assLarge = config.Bind<float>(val21, 0f, val22);
			ConfigDefinition val23 = new ConfigDefinition("AngelaBoobs", "ThighsThick");
			ConfigDescription val24 = new ConfigDescription("Make thighs thicker", (AcceptableValueBase)null, Array.Empty<object>());
			thighsThick = config.Bind<float>(val23, 0f, val24);
		}

		public void AddSettings()
		{
			SettingsTab orAddCustomTab = Settings.GetOrAddCustomTab("NPC Appearance Mod");
			AtlyssHeader val = orAddCustomTab.AddHeader("Angela Appearance Mod");
			textureDropdown = orAddCustomTab.AddDropdown("Texture", textureFolderNames, selectedTexture);
			textureDropdown.OnValueChanged.AddListener((UnityAction<int>)delegate(int x)
			{
				selectedTexture = x;
			});
			orAddCustomTab.AddToggle("Topless", topless);
			orAddCustomTab.AddToggle("Bottomless", bottomless);
			orAddCustomTab.AddSlider("Larger Breasts", boobLarge, false);
			orAddCustomTab.AddSlider("Smaller Breasts", boobSmall, false);
			orAddCustomTab.AddSlider("Nipple Size", nippleSize, false);
			orAddCustomTab.AddSlider("Nipple Innie", nippleInnie, false);
			orAddCustomTab.AddSlider("Larger Ass", assLarge, false);
			orAddCustomTab.AddSlider("Thicker Thighs", thighsThick, false);
			orAddCustomTab.AddToggle("Nipples flat when clothed", nippleInnieWhenClothed);
			orAddCustomTab.AddToggle("Nipples gone when clothed", nippleGoneWhenClothed);
		}
	}
	public class AngelaSliderController : MonoBehaviour
	{
		public float nippleInnie;

		public float nippleSize;

		public float boobSmall;

		public float boobLarge;

		public float nippleGone;

		public float boobSag;

		public float assSize;

		public float thighsThick;

		public bool textureChanged = true;

		public SkinnedMeshRenderer boobs;

		public SkinnedMeshRenderer torso;

		public SkinnedMeshRenderer skirt;

		public SkinnedMeshRenderer eyes;

		public SkinnedMeshRenderer feet;

		public SkinnedMeshRenderer hairTuft;

		public SkinnedMeshRenderer horns;

		public SkinnedMeshRenderer necklace;

		public SkinnedMeshRenderer arms;

		public SkinnedMeshRenderer ears;

		public SkinnedMeshRenderer tail;

		public MeshRenderer glyph;

		public MeshRenderer bookL;

		public MeshRenderer bookR;

		public MeshRenderer shadow;

		public DynamicBone boobBoneL;

		public DynamicBone boobBoneR;

		public DynamicBone boobBoneLOrig;

		public DynamicBone boobBoneROrig;

		public void ApplySettings()
		{
			//IL_0cd8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ce2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d13: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d1d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d4e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0d58: Unknown result type (might be due to invalid IL or missing references)
			nippleGone = ((AngelaSliderBase.nippleGoneWhenClothed.Value && !AngelaSliderBase.topless.Value) ? 100f : (AngelaSliderBase.nippleGone.Value * 100f));
			nippleInnie = ((AngelaSliderBase.nippleInnieWhenClothed.Value && !AngelaSliderBase.topless.Value) ? 100f : (AngelaSliderBase.nippleInnie.Value * 100f));
			boobSmall = AngelaSliderBase.boobSmall.Value * 100f;
			boobLarge = AngelaSliderBase.boobLarge.Value * 100f;
			nippleSize = AngelaSliderBase.nippleSize.Value * 100f;
			boobSag = (AngelaSliderBase.topless.Value ? (100f - boobSmall + boobLarge / 2f) : 0f);
			assSize = AngelaSliderBase.assLarge.Value * 100f;
			thighsThick = AngelaSliderBase.thighsThick.Value * 100f;
			boobs.SetBlendShapeWeight(boobs.sharedMesh.GetBlendShapeIndex("key_nippleInnie"), nippleInnie);
			boobs.SetBlendShapeWeight(boobs.sharedMesh.GetBlendShapeIndex("key_boobSmall"), boobSmall);
			boobs.SetBlendShapeWeight(boobs.sharedMesh.GetBlendShapeIndex("key_boobSize"), boobLarge);
			boobs.SetBlendShapeWeight(boobs.sharedMesh.GetBlendShapeIndex("key_nippleSize"), nippleSize);
			boobs.SetBlendShapeWeight(boobs.sharedMesh.GetBlendShapeIndex("key_nippleGone"), nippleGone);
			boobs.SetBlendShapeWeight(boobs.sharedMesh.GetBlendShapeIndex("key_boobSag"), boobSag);
			torso.SetBlendShapeWeight(torso.sharedMesh.GetBlendShapeIndex("key_assSize"), assSize);
			torso.SetBlendShapeWeight(torso.sharedMesh.GetBlendShapeIndex("key_thighSize"), thighsThick);
			skirt.SetBlendShapeWeight(skirt.sharedMesh.GetBlendShapeIndex("key_thighSize"), thighsThick);
			if (AngelaSliderBase.topless.Value)
			{
				if (AngelaSliderBase.bottomless.Value)
				{
					NPCPatcherBase.textureDictionary[NPCEnum.Angela][TexturesEnum.Base] = NPCPatcherBase.LoadTextureOrDefault(NPCEnum.Angela, TexturesEnum.Base, AngelaSliderBase.textureFolderNames[AngelaSliderBase.selectedTexture], "angelaTex_01_nude");
				}
				else
				{
					NPCPatcherBase.textureDictionary[NPCEnum.Angela][TexturesEnum.Base] = NPCPatcherBase.LoadTextureOrDefault(NPCEnum.Angela, TexturesEnum.Base, AngelaSliderBase.textureFolderNames[AngelaSliderBase.selectedTexture], "angelaTex_01_topless");
				}
			}
			else if (AngelaSliderBase.bottomless.Value)
			{
				NPCPatcherBase.textureDictionary[NPCEnum.Angela][TexturesEnum.Base] = NPCPatcherBase.LoadTextureOrDefault(NPCEnum.Angela, TexturesEnum.Base, AngelaSliderBase.textureFolderNames[AngelaSliderBase.selectedTexture], "angelaTex_01_bottomless");
			}
			else
			{
				NPCPatcherBase.textureDictionary[NPCEnum.Angela][TexturesEnum.Base] = NPCPatcherBase.LoadTextureOrDefault(NPCEnum.Angela, TexturesEnum.Base, AngelaSliderBase.textureFolderNames[AngelaSliderBase.selectedTexture], "angelaTex_01_base");
			}
			((Renderer)boobs).material.mainTexture = (Texture)(object)NPCPatcherBase.textureDictionary[NPCEnum.Angela][TexturesEnum.Base];
			((Renderer)torso).materials[0].mainTexture = (Texture)(object)NPCPatcherBase.textureDictionary[NPCEnum.Angela][TexturesEnum.Base];
			((Renderer)arms).materials[0].mainTexture = (Texture)(object)NPCPatcherBase.textureDictionary[NPCEnum.Angela][TexturesEnum.Base];
			((Renderer)hairTuft).material.mainTexture = (Texture)(object)NPCPatcherBase.textureDictionary[NPCEnum.Angela][TexturesEnum.Base];
			if (textureChanged)
			{
				NPCPatcherBase.textureDictionary[NPCEnum.Angela][TexturesEnum.Face] = NPCPatcherBase.LoadTextureOrDefault(NPCEnum.Angela, TexturesEnum.Face, AngelaSliderBase.textureFolderNames[AngelaSliderBase.selectedTexture]);
				((Renderer)torso).materials[1].mainTexture = (Texture)(object)NPCPatcherBase.textureDictionary[NPCEnum.Angela][TexturesEnum.Face];
				NPCPatcherBase.textureDictionary[NPCEnum.Angela][TexturesEnum.Skirt] = NPCPatcherBase.LoadTextureOrDefault(NPCEnum.Angela, TexturesEnum.Skirt, AngelaSliderBase.textureFolderNames[AngelaSliderBase.selectedTexture]);
				NPCPatcherBase.textureDictionary[NPCEnum.Angela][TexturesEnum.Blue3] = NPCPatcherBase.LoadTextureOrDefault(NPCEnum.Angela, TexturesEnum.Blue3, AngelaSliderBase.textureFolderNames[AngelaSliderBase.selectedTexture]);
				((Renderer)horns).material.mainTexture = (Texture)(object)NPCPatcherBase.textureDictionary[NPCEnum.Angela][TexturesEnum.Blue3];
				((Renderer)arms).materials[1].mainTexture = (Texture)(object)NPCPatcherBase.textureDictionary[NPCEnum.Angela][TexturesEnum.Blue3];
				NPCPatcherBase.textureDictionary[NPCEnum.Angela][TexturesEnum.Tail] = NPCPatcherBase.LoadTextureOrDefault(NPCEnum.Angela, TexturesEnum.Tail, AngelaSliderBase.textureFolderNames[AngelaSliderBase.selectedTexture]);
				((Renderer)tail).materials[0].mainTexture = (Texture)(object)NPCPatcherBase.textureDictionary[NPCEnum.Angela][TexturesEnum.Tail];
				((Renderer)tail).materials[1].mainTexture = (Texture)(object)NPCPatcherBase.textureDictionary[NPCEnum.Angela][TexturesEnum.Blue3];
				((Renderer)ears).materials[0].mainTexture = (Texture)(object)NPCPatcherBase.textureDictionary[NPCEnum.Angela][TexturesEnum.Tail];
				NPCPatcherBase.textureDictionary[NPCEnum.Angela][TexturesEnum.Bell] = NPCPatcherBase.LoadTextureOrDefault(NPCEnum.Angela, TexturesEnum.Bell, AngelaSliderBase.textureFolderNames[AngelaSliderBase.selectedTexture]);
				((Renderer)ears).materials[1].mainTexture = (Texture)(object)NPCPatcherBase.textureDictionary[NPCEnum.Angela][TexturesEnum.Bell];
				NPCPatcherBase.textureDictionary[NPCEnum.Angela][TexturesEnum.Eye] = NPCPatcherBase.LoadTextureOrDefault(NPCEnum.Angela, TexturesEnum.Eye, AngelaSliderBase.textureFolderNames[AngelaSliderBase.selectedTexture]);
				NPCPatcherBase.textureDictionary[NPCEnum.Angela][TexturesEnum.Eye2] = NPCPatcherBase.LoadTextureOrDefault(NPCEnum.Angela, TexturesEnum.Eye2, AngelaSliderBase.textureFolderNames[AngelaSliderBase.selectedTexture]);
				NPCPatcherBase.textureDictionary[NPCEnum.Angela][TexturesEnum.Eye3] = NPCPatcherBase.LoadTextureOrDefault(NPCEnum.Angela, TexturesEnum.Eye3, AngelaSliderBase.textureFolderNames[AngelaSliderBase.selectedTexture]);
				NPCPatcherBase.textureDictionary[NPCEnum.Angela][TexturesEnum.Eye4] = NPCPatcherBase.LoadTextureOrDefault(NPCEnum.Angela, TexturesEnum.Eye4, AngelaSliderBase.textureFolderNames[AngelaSliderBase.selectedTexture]);
				NPCPatcherBase.textureDictionary[NPCEnum.Angela][TexturesEnum.Eye5] = NPCPatcherBase.LoadTextureOrDefault(NPCEnum.Angela, TexturesEnum.Eye5, AngelaSliderBase.textureFolderNames[AngelaSliderBase.selectedTexture]);
				NPCPatcherBase.textureDictionary[NPCEnum.Angela][TexturesEnum.EyeDown] = NPCPatcherBase.LoadTextureOrDefault(NPCEnum.Angela, TexturesEnum.EyeDown, AngelaSliderBase.textureFolderNames[AngelaSliderBase.selectedTexture]);
				NPCPatcherBase.textureDictionary[NPCEnum.Angela][TexturesEnum.EyeLeft] = NPCPatcherBase.LoadTextureOrDefault(NPCEnum.Angela, TexturesEnum.EyeLeft, AngelaSliderBase.textureFolderNames[AngelaSliderBase.selectedTexture]);
				NPCPatcherBase.textureDictionary[NPCEnum.Angela][TexturesEnum.EyeRight] = NPCPatcherBase.LoadTextureOrDefault(NPCEnum.Angela, TexturesEnum.EyeRight, AngelaSliderBase.textureFolderNames[AngelaSliderBase.selectedTexture]);
				NPCPatcherBase.textureDictionary[NPCEnum.Angela][TexturesEnum.EyePissed] = NPCPatcherBase.LoadTextureOrDefault(NPCEnum.Angela, TexturesEnum.EyePissed, AngelaSliderBase.textureFolderNames[AngelaSliderBase.selectedTexture]);
				switch (((Object)((Renderer)eyes).material.mainTexture).name)
				{
				case "angelaEyeTex.png":
					((Renderer)eyes).material.mainTexture = (Texture)(object)NPCPatcherBase.textureDictionary[NPCEnum.Angela][TexturesEnum.Eye];
					break;
				case "angelaEyeTex2.png":
					((Renderer)eyes).material.mainTexture = (Texture)(object)NPCPatcherBase.textureDictionary[NPCEnum.Angela][TexturesEnum.Eye2];
					break;
				case "angelaEyeTex3.png":
					((Renderer)eyes).material.mainTexture = (Texture)(object)NPCPatcherBase.textureDictionary[NPCEnum.Angela][TexturesEnum.Eye3];
					break;
				case "angelaEyeTex4.png":
					((Renderer)eyes).material.mainTexture = (Texture)(object)NPCPatcherBase.textureDictionary[NPCEnum.Angela][TexturesEnum.Eye4];
					break;
				case "angelaEyeTex_5.png":
					((Renderer)eyes).material.mainTexture = (Texture)(object)NPCPatcherBase.textureDictionary[NPCEnum.Angela][TexturesEnum.Eye5];
					break;
				case "angelaEyeTex_down.png":
					((Renderer)eyes).material.mainTexture = (Texture)(object)NPCPatcherBase.textureDictionary[NPCEnum.Angela][TexturesEnum.EyeDown];
					break;
				case "angelaEyeTex_L.png":
					((Renderer)eyes).material.mainTexture = (Texture)(object)NPCPatcherBase.textureDictionary[NPCEnum.Angela][TexturesEnum.EyeLeft];
					break;
				case "angelaEyeTex_R.png":
					((Renderer)eyes).material.mainTexture = (Texture)(object)NPCPatcherBase.textureDictionary[NPCEnum.Angela][TexturesEnum.EyeRight];
					break;
				case "angelaEyeTex_pissed.png":
					((Renderer)eyes).material.mainTexture = (Texture)(object)NPCPatcherBase.textureDictionary[NPCEnum.Angela][TexturesEnum.EyePissed];
					break;
				}
				NPCPatcherBase.textureDictionary[NPCEnum.Angela][TexturesEnum.Red] = NPCPatcherBase.LoadTextureOrDefault(NPCEnum.Angela, TexturesEnum.Red, AngelaSliderBase.textureFolderNames[AngelaSliderBase.selectedTexture]);
				((Renderer)eyes).materials[1].mainTexture = (Texture)(object)NPCPatcherBase.textureDictionary[NPCEnum.Angela][TexturesEnum.Red];
				NPCPatcherBase.textureDictionary[NPCEnum.Angela][TexturesEnum.Blui2] = NPCPatcherBase.LoadTextureOrDefault(NPCEnum.Angela, TexturesEnum.Blui2, AngelaSliderBase.textureFolderNames[AngelaSliderBase.selectedTexture]);
				((Renderer)feet).materials[0].mainTexture = (Texture)(object)NPCPatcherBase.textureDictionary[NPCEnum.Angela][TexturesEnum.Blui2];
				((Renderer)feet).materials[1].mainTexture = (Texture)(object)NPCPatcherBase.textureDictionary[NPCEnum.Angela][TexturesEnum.Blui2];
				NPCPatcherBase.textureDictionary[NPCEnum.Angela][TexturesEnum.Blu] = NPCPatcherBase.LoadTextureOrDefault(NPCEnum.Angela, TexturesEnum.Blu, AngelaSliderBase.textureFolderNames[AngelaSliderBase.selectedTexture]);
				((Renderer)necklace).materials[0].mainTexture = (Texture)(object)NPCPatcherBase.textureDictionary[NPCEnum.Angela][TexturesEnum.Blue3];
				((Renderer)necklace).materials[1].mainTexture = (Texture)(object)NPCPatcherBase.textureDictionary[NPCEnum.Angela][TexturesEnum.Bell];
				NPCPatcherBase.textureDictionary[NPCEnum.Angela][TexturesEnum.Glyph] = NPCPatcherBase.LoadTextureOrDefault(NPCEnum.Angela, TexturesEnum.Glyph, AngelaSliderBase.textureFolderNames[AngelaSliderBase.selectedTexture], "tomeGlyph");
				((Renderer)glyph).material.mainTexture = (Texture)(object)NPCPatcherBase.textureDictionary[NPCEnum.Angela][TexturesEnum.Glyph];
				NPCPatcherBase.textureDictionary[NPCEnum.Angela][TexturesEnum.BookSpine] = NPCPatcherBase.LoadTextureOrDefault(NPCEnum.Angela, TexturesEnum.BookSpine, AngelaSliderBase.textureFolderNames[AngelaSliderBase.selectedTexture]);
				NPCPatcherBase.textureDictionary[NPCEnum.Angela][TexturesEnum.BookCover] = NPCPatcherBase.LoadTextureOrDefault(NPCEnum.Angela, TexturesEnum.BookCover, AngelaSliderBase.textureFolderNames[AngelaSliderBase.selectedTexture]);
				((Renderer)bookL).materials[0].mainTexture = (Texture)(object)NPCPatcherBase.textureDictionary[NPCEnum.Angela][TexturesEnum.BookSpine];
				((Renderer)bookL).materials[1].mainTexture = (Texture)(object)NPCPatcherBase.textureDictionary[NPCEnum.Angela][TexturesEnum.BookCover];
				((Renderer)bookR).materials[0].mainTexture = (Texture)(object)NPCPatcherBase.textureDictionary[NPCEnum.Angela][TexturesEnum.BookSpine];
				((Renderer)bookR).materials[1].mainTexture = (Texture)(object)NPCPatcherBase.textureDictionary[NPCEnum.Angela][TexturesEnum.BookCover];
				NPCPatcherBase.textureDictionary[NPCEnum.Angela][TexturesEnum.Shadow] = NPCPatcherBase.LoadTextureOrDefault(NPCEnum.Angela, TexturesEnum.Shadow, AngelaSliderBase.textureFolderNames[AngelaSliderBase.selectedTexture]);
				((Renderer)shadow).material.mainTexture = (Texture)(object)NPCPatcherBase.textureDictionary[NPCEnum.Angela][TexturesEnum.Shadow];
				NPCPatcherBase.textureDictionary[NPCEnum.Angela][TexturesEnum.FacePic1] = NPCPatcherBase.LoadTextureOrDefault(NPCEnum.Angela, TexturesEnum.FacePic1, AngelaSliderBase.textureFolderNames[AngelaSliderBase.selectedTexture]);
				NPCPatcherBase.textureDictionary[NPCEnum.Angela][TexturesEnum.FacePic2] = NPCPatcherBase.LoadTextureOrDefault(NPCEnum.Angela, TexturesEnum.FacePic2, AngelaSliderBase.textureFolderNames[AngelaSliderBase.selectedTexture]);
				NPCPatcherBase.textureDictionary[NPCEnum.Angela][TexturesEnum.FacePic3] = NPCPatcherBase.LoadTextureOrDefault(NPCEnum.Angela, TexturesEnum.FacePic3, AngelaSliderBase.textureFolderNames[AngelaSliderBase.selectedTexture]);
				AngelaSliderBase.facepic1Sprite = Sprite.Create(NPCPatcherBase.textureDictionary[NPCEnum.Angela][TexturesEnum.FacePic1], AngelaSliderBase.facepic1Sprite.rect, AngelaSliderBase.facepic1Sprite.pivot, AngelaSliderBase.facepic1Sprite.pixelsPerUnit, 0u);
				AngelaSliderBase.facepic2Sprite = Sprite.Create(NPCPatcherBase.textureDictionary[NPCEnum.Angela][TexturesEnum.FacePic2], AngelaSliderBase.facepic2Sprite.rect, AngelaSliderBase.facepic2Sprite.pivot, AngelaSliderBase.facepic2Sprite.pixelsPerUnit, 0u);
				AngelaSliderBase.facepic3Sprite = Sprite.Create(NPCPatcherBase.textureDictionary[NPCEnum.Angela][TexturesEnum.FacePic3], AngelaSliderBase.facepic3Sprite.rect, AngelaSliderBase.facepic3Sprite.pivot, AngelaSliderBase.facepic3Sprite.pixelsPerUnit, 0u);
				for (int i = 0; i < AngelaSliderBase.DialogList.Count; i++)
				{
					if (((Object)AngelaSliderBase.DialogList[i].facepic.texture).name == "facepic_angela01")
					{
						AngelaSliderBase.DialogList[i].facepic = AngelaSliderBase.facepic1Sprite;
					}
					else if (((Object)AngelaSliderBase.DialogList[i].facepic.texture).name == "facepic_angela02")
					{
						AngelaSliderBase.DialogList[i].facepic = AngelaSliderBase.facepic2Sprite;
					}
					else if (((Object)AngelaSliderBase.DialogList[i].facepic.texture).name == "facepic_angela03")
					{
						AngelaSliderBase.DialogList[i].facepic = AngelaSliderBase.facepic3Sprite;
					}
				}
				textureChanged = false;
			}
			((Renderer)skirt).material.mainTexture = (Texture)(AngelaSliderBase.bottomless.Value ? ((object)Texture2D.blackTexture) : ((object)NPCPatcherBase.textureDictionary[NPCEnum.Angela][TexturesEnum.Skirt]));
			boobBoneL = boobBoneLOrig;
			boobBoneR = boobBoneROrig;
			if (!(boobSmall > 0f))
			{
				return;
			}
			float stiffness = Mathf.Min(1f, boobBoneL.m_Stiffness + boobSmall / 100f);
			foreach (Particle particle in boobBoneL.m_Particles)
			{
				particle.m_Stiffness = stiffness;
			}
			foreach (Particle particle2 in boobBoneR.m_Particles)
			{
				particle2.m_Stiffness = stiffness;
			}
			boobBoneL.m_Stiffness = stiffness;
			boobBoneR.m_Stiffness = stiffness;
		}
	}
	public class EnokSliderBase : MonoBehaviour
	{
		[HarmonyPatch(typeof(NetNPC), "Start")]
		public static class AddNetNPCPatch
		{
			[HarmonyPostfix]
			public static void NetNPCAwakePatch(NetNPC __instance)
			{
				//IL_0274: Unknown result type (might be due to invalid IL or missing references)
				//IL_027b: Expected O, but got Unknown
				//IL_02c1: Unknown result type (might be due to invalid IL or missing references)
				//IL_02c8: Expected O, but got Unknown
				//IL_030e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0315: Expected O, but got Unknown
				//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
				//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
				try
				{
					if (!((object)__instance).ToString().Contains("_npc_Enok"))
					{
						return;
					}
					NPCPatcherBase.Log.LogInfo((object)"Enok located");
					EnokSliderController = ((Component)__instance).gameObject.AddComponent<EnokSliderController>();
					DialogTrigger component = ((Component)((Component)__instance).transform.Find("_dialogTrigger_01")).GetComponent<DialogTrigger>();
					DialogBranch[] dialogBranches = component._scriptDialogData._dialogBranches;
					foreach (DialogBranch val in dialogBranches)
					{
						Dialog[] dialogs = val.dialogs;
						foreach (Dialog val2 in dialogs)
						{
							DialogList.Add(val2);
							facepic1Sprite = Sprite.Create(NPCPatcherBase.LoadTextureOrDefault(NPCEnum.Enok, TexturesEnum.FacePic1, textureFolderNames[selectedTexture]), val2.facepic.rect, val2.facepic.pivot, val2.facepic.pixelsPerUnit, 0u);
							val2.facepic = facepic1Sprite;
						}
					}
					Transform val3 = ((Component)__instance).transform.Find("_visual").Find("enok_fbx");
					SkinnedMeshRenderer component2 = ((Component)val3.Find("_enok_cloth")).GetComponent<SkinnedMeshRenderer>();
					component2.sharedMesh = _newCloth;
					SkinnedMeshRenderer component3 = ((Component)val3.Find("_enok_base")).GetComponent<SkinnedMeshRenderer>();
					component3.sharedMesh = _newTorso;
					SkinnedMeshRenderer component4 = ((Component)val3.Find("_enok_belt")).GetComponent<SkinnedMeshRenderer>();
					component4.sharedMesh = _newBelt;
					SkinnedMeshRenderer component5 = ((Component)val3.Find("_enok_arms")).GetComponent<SkinnedMeshRenderer>();
					component5.sharedMesh = _newArms;
					SkinnedMeshRenderer component6 = ((Component)val3.Find("_enok_ears")).GetComponent<SkinnedMeshRenderer>();
					SkinnedMeshRenderer component7 = ((Component)val3.Find("_enok_neckbrace")).GetComponent<SkinnedMeshRenderer>();
					SkinnedMeshRenderer component8 = ((Component)val3.Find("_enok_feet")).GetComponent<SkinnedMeshRenderer>();
					component8.sharedMesh = _newFeet;
					SkinnedMeshRenderer component9 = ((Component)val3.Find("_enok_horns")).GetComponent<SkinnedMeshRenderer>();
					SkinnedMeshRenderer component10 = ((Component)val3.Find("_enok_tail")).GetComponent<SkinnedMeshRenderer>();
					MeshRenderer component11 = ((Component)((Component)__instance).transform.Find("_visual").Find("_shadowProjection").GetChild(0)).GetComponent<MeshRenderer>();
					Transform child = val3.Find("Armature_character").GetChild(0).GetChild(0)
						.GetChild(0)
						.Find("lowBody")
						.GetChild(0)
						.GetChild(0);
					MeshRenderer component12 = ((Component)child.Find("heavyAxe_01")).GetComponent<MeshRenderer>();
					MeshRenderer component13 = ((Component)child.Find("heavyAxe_02")).GetComponent<MeshRenderer>();
					GameObject val4 = new GameObject("_enok_nipples");
					val4.transform.SetParent(val3);
					SkinnedMeshRenderer val5 = val4.gameObject.AddComponent<SkinnedMeshRenderer>();
					val5.bones = component3.bones;
					((Renderer)val5).material = ((Renderer)component3).material;
					val5.sharedMesh = _nipples;
					GameObject val6 = new GameObject("_enok_beard");
					val6.transform.SetParent(val3);
					SkinnedMeshRenderer val7 = val6.gameObject.AddComponent<SkinnedMeshRenderer>();
					val7.bones = component3.bones;
					((Renderer)val7).material = ((Renderer)component3).material;
					val7.sharedMesh = _beard;
					GameObject val8 = new GameObject("_enok_eyes");
					val8.transform.SetParent(val3);
					SkinnedMeshRenderer val9 = val8.gameObject.AddComponent<SkinnedMeshRenderer>();
					val9.bones = component3.bones;
					((Renderer)val9).material = ((Renderer)component3).material;
					val9.sharedMesh = _eyes;
					GameObject val10 = Object.Instantiate<GameObject>(CockObject, val3);
					SkinnedMeshRenderer component14 = ((Component)val10.transform.GetChild(0)).gameObject.GetComponent<SkinnedMeshRenderer>();
					component14.sharedMesh = dicksMeshList[selectedDick];
					((Renderer)component14).material = ((Renderer)component3).material;
					Transform rootBone = component14.rootBone;
					rootBone.SetParent(val3.Find("Armature_character").GetChild(0).GetChild(0));
					EnokSliderController.cloth = component2;
					EnokSliderController.torso = component3;
					EnokSliderController.belt = component4;
					EnokSliderController.arms = component5;
					EnokSliderController.ears = component6;
					EnokSliderController.feet = component8;
					EnokSliderController.neckbrace = component7;
					EnokSliderController.horns = component9;
					EnokSliderController.tail = component10;
					EnokSliderController.axe1 = component12;
					EnokSliderController.axe2 = component13;
					EnokSliderController.shadow = component11;
					EnokSliderController.dickObject = CockObject;
					EnokSliderController.dick = component14;
					EnokSliderController.nipples = val5;
					EnokSliderController.beard = val7;
					EnokSliderController.eyes = val9;
					EnokSliderController.ApplySettings();
					NPCPatcherBase.Log.LogInfo((object)"Enok body patched!");
				}
				catch (Exception ex)
				{
					NPCPatcherBase.Log.LogError((object)ex);
				}
			}
		}

		private const string NPC_NAME = "Enok";

		public static GameObject CockObject;

		public static GameObject SheathCockObject;

		private static Mesh _newCloth;

		private static Mesh _newTorso;

		private static Mesh _newArms;

		private static Mesh _newFeet;

		private static Mesh _newBelt;

		private static Mesh _nipples;

		private static Mesh _beard;

		private static Mesh _eyes;

		public static AnimationCurve dickAnimationCurve;

		public static AnimationCurve clothAnimationCurve;

		public static Sprite facepic1Sprite;

		public ConfigFile config;

		public PluginInfo info;

		internal static ConfigEntry<int> textureSelector;

		internal static ConfigEntry<bool> dickVisible;

		internal static ConfigEntry<int> dickType;

		internal static ConfigEntry<float> dickSize;

		internal static ConfigEntry<float> ballsSize;

		internal static ConfigEntry<float> ballsDivot;

		internal static ConfigEntry<KeyCode> dickErect;

		internal static ConfigEntry<bool> clothGone;

		internal static ConfigEntry<bool> helmetOff;

		internal static ConfigEntry<bool> beardToggle;

		internal static ConfigEntry<float> bodyFemboy;

		internal static ConfigEntry<float> bodyMuscular;

		internal static ConfigEntry<float> bodyAssSize;

		internal static ConfigEntry<float> bodyBellySize;

		private static AtlyssDropdown textureDropdown;

		private static AtlyssDropdown dickDropdown;

		public static EnokSliderController EnokSliderController;

		public static List<string> textureFolderNames = new List<string>();

		public static int selectedTexture;

		public static List<string> dickNames = new List<string>();

		public static int selectedDick;

		private static bool _helmetOffPrevious;

		public static List<Mesh> dicksMeshList = new List<Mesh>();

		internal static List<Dialog> DialogList = new List<Dialog>();

		private void Start()
		{
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Expected O, but got Unknown
			//IL_02d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d3: Unknown result type (might be due to invalid IL or missing references)
			//IL_02da: Unknown result type (might be due to invalid IL or missing references)
			//IL_02db: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ea: Expected O, but got Unknown
			InitConfig();
			Settings.OnApplySettings.AddListener((UnityAction)delegate
			{
				if (textureSelector.Value != selectedTexture)
				{
					textureSelector.Value = selectedTexture;
					EnokSliderController.textureChanged = true;
				}
				if (helmetOff.Value != _helmetOffPrevious)
				{
					EnokSliderController.textureChanged = true;
					_helmetOffPrevious = helmetOff.Value;
				}
				if (dickType.Value != selectedDick)
				{
					dickType.Value = selectedDick;
				}
				config.Save();
				if ((Object)(object)EnokSliderController != (Object)null)
				{
					EnokSliderController.ApplySettings();
				}
			});
			try
			{
				DirectoryInfo[] directories = new DirectoryInfo(Path.Combine(NPCPatcherBase.texturePath, "Enok")).GetDirectories();
				for (int i = 0; i < directories.Length; i++)
				{
					textureFolderNames.Add(directories[i].Name);
					if (NPCPatcherBase.VerboseLogging)
					{
						NPCPatcherBase.Log.LogInfo((object)("Loaded " + textureFolderNames[i] + " texture group"));
					}
				}
				if (selectedTexture > directories.Length - 1)
				{
					selectedTexture = directories.Length - 1;
				}
			}
			catch (Exception ex)
			{
				NPCPatcherBase.Log.LogError((object)("Unable to find textures in path " + NPCPatcherBase.texturePath + ". Continuing."));
				NPCPatcherBase.Log.LogError((object)ex.ToString());
			}
			try
			{
				_newCloth = NPCPatcherBase.bundle.LoadAsset<Mesh>("_enok_cloth");
				_nipples = NPCPatcherBase.bundle.LoadAsset<Mesh>("_enok_nipples");
				_beard = NPCPatcherBase.bundle.LoadAsset<Mesh>("_enok_beard");
				_eyes = NPCPatcherBase.bundle.LoadAsset<Mesh>("_enok_eyes");
				_newTorso = NPCPatcherBase.bundle.LoadAsset<Mesh>("_enok_base");
				_newArms = NPCPatcherBase.bundle.LoadAsset<Mesh>("_enok_arms");
				_newBelt = NPCPatcherBase.bundle.LoadAsset<Mesh>("_enok_belt");
				_newFeet = NPCPatcherBase.bundle.LoadAsset<Mesh>("_enok_feet");
				CockObject = NPCPatcherBase.bundle.LoadAsset<GameObject>("enok_cock");
				SheathCockObject = NPCPatcherBase.bundle.LoadAsset<GameObject>("enok_sheathcock");
				dickNames.Add(((Object)CockObject).name);
				dickNames.Add(((Object)SheathCockObject).name);
				dicksMeshList.Add(((Component)CockObject.transform.GetChild(0)).gameObject.GetComponent<SkinnedMeshRenderer>().sharedMesh);
				dicksMeshList.Add(((Component)SheathCockObject.transform.GetChild(0)).gameObject.GetComponent<SkinnedMeshRenderer>().sharedMesh);
			}
			catch (Exception ex2)
			{
				NPCPatcherBase.Log.LogError((object)("Unable to load angelaboobs.unity3d in " + info.Location + ". Patcher will not run correctly."));
				NPCPatcherBase.Log.LogError((object)ex2.ToString());
			}
			AddSettings();
			Keyframe val = default(Keyframe);
			((Keyframe)(ref val))..ctor(0f, 0f);
			((Keyframe)(ref val)).inTangent = 2.25f;
			((Keyframe)(ref val)).outTangent = 2.25f;
			((Keyframe)(ref val)).outWeight = 0.015f;
			Keyframe val2 = default(Keyframe);
			((Keyframe)(ref val2))..ctor(1f, 1f);
			dickAnimationCurve = AnimationCurve.EaseInOut(0f, 0f, 1f, 1f);
			dickAnimationCurve.preWrapMode = (WrapMode)1;
			dickAnimationCurve.postWrapMode = (WrapMode)1;
			clothAnimationCurve = new AnimationCurve((Keyframe[])(object)new Keyframe[2] { val, val2 });
			clothAnimationCurve.preWrapMode = (WrapMode)1;
			clothAnimationCurve.postWrapMode = (WrapMode)1;
		}

		private void InitConfig()
		{
			//IL_000a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0010: Expected O, but got Unknown
			//IL_001b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0021: Expected O, but got Unknown
			//IL_004d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0053: Expected O, but got Unknown
			//IL_005e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0064: Expected O, but got Unknown
			//IL_0081: Unknown result type (might be due to invalid IL or missing references)
			//IL_0088: Expected O, but got Unknown
			//IL_0093: Unknown result type (might be due to invalid IL or missing references)
			//IL_009a: Expected O, but got Unknown
			//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cf: Expected O, but got Unknown
			//IL_00da: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e1: Expected O, but got Unknown
			//IL_0100: Unknown result type (might be due to invalid IL or missing references)
			//IL_0107: Expected O, but got Unknown
			//IL_0112: Unknown result type (might be due to invalid IL or missing references)
			//IL_0119: Expected O, but got Unknown
			//IL_0147: Unknown result type (might be due to invalid IL or missing references)
			//IL_014e: Expected O, but got Unknown
			//IL_0159: Unknown result type (might be due to invalid IL or missing references)
			//IL_0160: Expected O, but got Unknown
			//IL_017f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0186: Expected O, but got Unknown
			//IL_0191: Unknown result type (might be due to invalid IL or missing references)
			//IL_0198: Expected O, but got Unknown
			//IL_01bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c2: Expected O, but got Unknown
			//IL_01cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d4: Expected O, but got Unknown
			//IL_01f7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fe: Expected O, but got Unknown
			//IL_0209: Unknown result type (might be due to invalid IL or missing references)
			//IL_0210: Expected O, but got Unknown
			//IL_0233: Unknown result type (might be due to invalid IL or missing references)
			//IL_023a: Expected O, but got Unknown
			//IL_0245: Unknown result type (might be due to invalid IL or missing references)
			//IL_024c: Expected O, but got Unknown
			//IL_026f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0276: Expected O, but got Unknown
			//IL_0281: Unknown result type (might be due to invalid IL or missing references)
			//IL_0288: Expected O, but got Unknown
			//IL_02ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b2: Expected O, but got Unknown
			//IL_02bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c4: Expected O, but got Unknown
			//IL_02e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ee: Expected O, but got Unknown
			//IL_02f9: Unknown result type (might be due to invalid IL or missing references)
			//IL_0300: Expected O, but got Unknown
			//IL_0323: Unknown result type (might be due to invalid IL or missing references)
			//IL_032a: Expected O, but got Unknown
			//IL_0335: Unknown result type (might be due to invalid IL or missing references)
			//IL_033c: Expected O, but got Unknown
			ConfigDefinition val = new ConfigDefinition("EnokSlider", "TextureSelection");
			ConfigDescription val2 = new ConfigDescription("TextureSelection", (AcceptableValueBase)null, Array.Empty<object>());
			textureSelector = config.Bind<int>(val, 0, val2);
			selectedTexture = textureSelector.Value;
			ConfigDefinition val3 = new ConfigDefinition("EnokSlider", "DickVisible");
			ConfigDescription val4 = new ConfigDescription("Dick Visibility", (AcceptableValueBase)null, Array.Empty<object>());
			dickVisible = config.Bind<bool>(val3, true, val4);
			ConfigDefinition val5 = new ConfigDefinition("EnokSlider", "DickType");
			ConfigDescription val6 = new ConfigDescription("DickType", (AcceptableValueBase)null, Array.Empty<object>());
			dickType = config.Bind<int>(val5, 0, val6);
			selectedDick = dickType.Value;
			ConfigDefinition val7 = new ConfigDefinition("EnokSlider", "Clothless");
			ConfigDescription val8 = new ConfigDescription("Clothless", (AcceptableValueBase)null, Array.Empty<object>());
			clothGone = config.Bind<bool>(val7, false, val8);
			ConfigDefinition val9 = new ConfigDefinition("EnokSlider", "HelmetOff");
			ConfigDescription val10 = new ConfigDescription("HelmetOff", (AcceptableValueBase)null, Array.Empty<object>());
			helmetOff = config.Bind<bool>(val9, false, val10);
			_helmetOffPrevious = helmetOff.Value;
			ConfigDefinition val11 = new ConfigDefinition("EnokSlider", "BeardToggle");
			ConfigDescription val12 = new ConfigDescription("BeardToggle", (AcceptableValueBase)null, Array.Empty<object>());
			beardToggle = config.Bind<bool>(val11, true, val12);
			ConfigDefinition val13 = new ConfigDefinition("EnokSlider", "DickSize");
			ConfigDescription val14 = new ConfigDescription("Dick size", (AcceptableValueBase)null, Array.Empty<object>());
			dickSize = config.Bind<float>(val13, 0f, val14);
			ConfigDefinition val15 = new ConfigDefinition("EnokSlider", "BallsSize");
			ConfigDescription val16 = new ConfigDescription("Balls size", (AcceptableValueBase)null, Array.Empty<object>());
			ballsSize = config.Bind<float>(val15, 0f, val16);
			ConfigDefinition val17 = new ConfigDefinition("EnokSlider", "BallsDivot");
			ConfigDescription val18 = new ConfigDescription("Balls separation", (AcceptableValueBase)null, Array.Empty<object>());
			ballsDivot = config.Bind<float>(val17, 0f, val18);
			ConfigDefinition val19 = new ConfigDefinition("EnokSlider", "BodyMuscular");
			ConfigDescription val20 = new ConfigDescription("Add muscles", (AcceptableValueBase)null, Array.Empty<object>());
			bodyMuscular = config.Bind<float>(val19, 0f, val20);
			ConfigDefinition val21 = new ConfigDefinition("EnokSlider", "BodyMuscular");
			ConfigDescription val22 = new ConfigDescription("Femboy bodytype", (AcceptableValueBase)null, Array.Empty<object>());
			bodyFemboy = config.Bind<float>(val21, 0f, val22);
			ConfigDefinition val23 = new ConfigDefinition("EnokSlider", "BodyBellySize");
			ConfigDescription val24 = new ConfigDescription("Belly Size", (AcceptableValueBase)null, Array.Empty<object>());
			bodyBellySize = config.Bind<float>(val23, 0f, val24);
			ConfigDefinition val25 = new ConfigDefinition("EnokSlider", "BodyAssSize");
			ConfigDescription val26 = new ConfigDescription("Ass Size", (AcceptableValueBase)null, Array.Empty<object>());
			bodyAssSize = config.Bind<float>(val25, 0f, val26);
			ConfigDefinition val27 = new ConfigDefinition("EnokSlider", "DickErect");
			ConfigDescription val28 = new ConfigDescription("Erection hotkey", (AcceptableValueBase)null, Array.Empty<object>());
			dickErect = config.Bind<KeyCode>(val27, (KeyCode)46, val28);
		}

		public void AddSettings()
		{
			SettingsTab orAddCustomTab = Settings.GetOrAddCustomTab("NPC Appearance Mod");
			orAddCustomTab.AddHeader("Enok Appearance Mod");
			textureDropdown = orAddCustomTab.AddDropdown("Texture", textureFolderNames, selectedTexture);
			textureDropdown.OnValueChanged.AddListener((UnityAction<int>)delegate(int x)
			{
				selectedTexture = x;
			});
			dickDropdown = orAddCustomTab.AddDropdown("Dick Type", dickNames, selectedDick);
			dickDropdown.OnValueChanged.AddListener((UnityAction<int>)delegate(int x)
			{
				selectedDick = x;
			});
			orAddCustomTab.AddToggle("Dick visibility", dickVisible);
			orAddCustomTab.AddToggle("Bottomless", clothGone);
			orAddCustomTab.AddToggle("Helmet off (unfinished)", helmetOff);
			orAddCustomTab.AddToggle("Beard", beardToggle);
			orAddCustomTab.AddSlider("Dick size", dickSize, false);
			orAddCustomTab.AddSlider("Balls size", ballsSize, false);
			orAddCustomTab.AddSlider("Balls separation", ballsDivot, false);
			orAddCustomTab.AddSlider("More muscular", bodyMuscular, false);
			orAddCustomTab.AddSlider("Bigger ass", bodyAssSize, false);
			orAddCustomTab.AddSlider("Femboy body", bodyFemboy, false);
			orAddCustomTab.AddSlider("Belly size", bodyBellySize, false);
			orAddCustomTab.AddKeyButton("Erection shortcut", dickErect);
		}
	}
	public class EnokSliderController : MonoBehaviour
	{
		private float _arousalTarget;

		private float _arousalCurrent;

		public float dickSize;

		public float ballsSize;

		public float bodyFemboy;

		public float bodyMuscular;

		public float bodyBellySize;

		public float bodyAssSize;

		public float ballsDivot;

		public float helmetOff;

		private float _dickSizeSheathForCloth;

		public bool textureChanged = true;

		public SkinnedMeshRenderer cloth;

		public SkinnedMeshRenderer torso;

		public SkinnedMeshRenderer belt;

		public SkinnedMeshRenderer feet;

		public SkinnedMeshRenderer horns;

		public SkinnedMeshRenderer neckbrace;

		public SkinnedMeshRenderer arms;

		public SkinnedMeshRenderer ears;

		public SkinnedMeshRenderer tail;

		public SkinnedMeshRenderer dick;

		public GameObject dickObject;

		public SkinnedMeshRenderer nipples;

		public SkinnedMeshRenderer beard;

		public SkinnedMeshRenderer eyes;

		public MeshRenderer axe1;

		public MeshRenderer axe2;

		public MeshRenderer shadow;

		private int _dickTexture;

		private int _beardTexture;

		private int _eyesTexture;

		private void Awake()
		{
			_dickTexture = NPCPatcherBase.customTextures.Count;
			NPCPatcherBase.customTextures.Add(NPCPatcherBase.LoadTextureOrDefault(NPCEnum.Enok, TexturesEnum.Tex3, EnokSliderBase.textureFolderNames[EnokSliderBase.selectedTexture], "enokTex_dick"));
			_beardTexture = NPCPatcherBase.customTextures.Count;
			NPCPatcherBase.customTextures.Add(NPCPatcherBase.LoadTextureOrDefault(NPCEnum.Enok, TexturesEnum.Tex3, EnokSliderBase.textureFolderNames[EnokSliderBase.selectedTexture], "enok_beardTex"));
			_eyesTexture = NPCPatcherBase.customTextures.Count;
			NPCPatcherBase.customTextures.Add(NPCPatcherBase.LoadTextureOrDefault(NPCEnum.Enok, TexturesEnum.Tex3, EnokSliderBase.textureFolderNames[EnokSliderBase.selectedTexture], "enokTex_eyes"));
		}

		public void ApplyBones(GameObject go)
		{
			if (!((Object)go).name.Contains("masterBone"))
			{
				DynamicBone val = go.AddComponent<DynamicBone>();
				val.m_Root = go.transform;
				val.m_Stiffness = 0.85f;
				val.m_Damping = 0.33f;
				val.m_Inert = 0.37f;
				if (((Object)go).name.Contains("Balls"))
				{
					val.m_Stiffness = 0.4f;
					val.m_Damping = 0.2f;
					val.m_Inert = 0.15f;
				}
			}
		}

		public void ApplySettings()
		{
			//IL_0823: Unknown result type (might be due to invalid IL or missing references)
			//IL_087b: Unknown result type (might be due to invalid IL or missing references)
			//IL_08d3: Unknown result type (might be due to invalid IL or missing references)
			//IL_09d5: Unknown result type (might be due to invalid IL or missing references)
			//IL_09df: Unknown result type (might be due to invalid IL or missing references)
			dick.sharedMesh = EnokSliderBase.dicksMeshList[EnokSliderBase.selectedDick];
			float num = EnokSliderBase.dickAnimationCurve.Evaluate(_arousalCurrent) * 100f;
			float num2 = EnokSliderBase.clothAnimationCurve.Evaluate(_arousalCurrent) * 100f;
			dickSize = EnokSliderBase.dickSize.Value * 100f;
			ballsSize = EnokSliderBase.ballsSize.Value * 100f;
			ballsDivot = EnokSliderBase.ballsDivot.Value * 100f;
			_dickSizeSheathForCloth = ((((Object)dick.sharedMesh).name == "_" + ((Object)EnokSliderBase.SheathCockObject).name) ? (MathF.Max(EnokSliderBase.dickSize.Value - num2 / 100f, 0f) * 100f) : 0f);
			bodyFemboy = EnokSliderBase.bodyFemboy.Value * 100f;
			bodyMuscular = EnokSliderBase.bodyMuscular.Value * 100f;
			bodyBellySize = EnokSliderBase.bodyBellySize.Value * 100f;
			bodyAssSize = EnokSliderBase.bodyAssSize.Value * 100f;
			helmetOff = (EnokSliderBase.helmetOff.Value ? 100f : 0f);
			if (EnokSliderBase.dickVisible.Value)
			{
				dick.SetBlendShapeWeight(dick.sharedMesh.GetBlendShapeIndex("key_erect"), num);
				dick.SetBlendShapeWeight(dick.sharedMesh.GetBlendShapeIndex("key_dickSizeErect"), num * (dickSize / 100f));
				cloth.SetBlendShapeWeight(cloth.sharedMesh.GetBlendShapeIndex("key_erect"), num2);
				cloth.SetBlendShapeWeight(cloth.sharedMesh.GetBlendShapeIndex("key_dickSizeErect"), num2 * (dickSize / 100f));
				dick.SetBlendShapeWeight(dick.sharedMesh.GetBlendShapeIndex("key_dickSize"), dickSize);
				dick.SetBlendShapeWeight(dick.sharedMesh.GetBlendShapeIndex("key_ballSize"), ballsSize);
				dick.SetBlendShapeWeight(dick.sharedMesh.GetBlendShapeIndex("key_ballDivot"), ballsDivot);
				cloth.SetBlendShapeWeight(cloth.sharedMesh.GetBlendShapeIndex("key_dickSize"), Mathf.Min(dickSize * 1.5f, 100f));
				cloth.SetBlendShapeWeight(cloth.sharedMesh.GetBlendShapeIndex("key_dickSizeSheath"), _dickSizeSheathForCloth);
				cloth.SetBlendShapeWeight(cloth.sharedMesh.GetBlendShapeIndex("key_noDick"), 0f);
			}
			else
			{
				cloth.SetBlendShapeWeight(cloth.sharedMesh.GetBlendShapeIndex("key_erect"), 0f);
				cloth.SetBlendShapeWeight(cloth.sharedMesh.GetBlendShapeIndex("key_dickSizeErect"), 0f);
				cloth.SetBlendShapeWeight(cloth.sharedMesh.GetBlendShapeIndex("key_dickSize"), 0f);
				cloth.SetBlendShapeWeight(cloth.sharedMesh.GetBlendShapeIndex("key_dickSizeSheath"), 0f);
				cloth.SetBlendShapeWeight(cloth.sharedMesh.GetBlendShapeIndex("key_noDick"), 100f);
			}
			cloth.SetBlendShapeWeight(cloth.sharedMesh.GetBlendShapeIndex("key_bellySize"), bodyBellySize);
			cloth.SetBlendShapeWeight(cloth.sharedMesh.GetBlendShapeIndex("key_muscles"), bodyMuscular);
			belt.SetBlendShapeWeight(belt.sharedMesh.GetBlendShapeIndex("key_muscles"), bodyMuscular);
			belt.SetBlendShapeWeight(belt.sharedMesh.GetBlendShapeIndex("key_bellySize"), bodyBellySize);
			belt.SetBlendShapeWeight(belt.sharedMesh.GetBlendShapeIndex("key_femboy"), bodyFemboy);
			torso.SetBlendShapeWeight(torso.sharedMesh.GetBlendShapeIndex("key_muscles"), bodyMuscular);
			torso.SetBlendShapeWeight(torso.sharedMesh.GetBlendShapeIndex("key_bellySize"), bodyBellySize);
			torso.SetBlendShapeWeight(torso.sharedMesh.GetBlendShapeIndex("key_femboy"), bodyFemboy);
			torso.SetBlendShapeWeight(torso.sharedMesh.GetBlendShapeIndex("key_assSize"), bodyAssSize);
			torso.SetBlendShapeWeight(torso.sharedMesh.GetBlendShapeIndex("key_helmOff"), helmetOff);
			nipples.SetBlendShapeWeight(nipples.sharedMesh.GetBlendShapeIndex("key_muscles"), bodyMuscular);
			nipples.SetBlendShapeWeight(nipples.sharedMesh.GetBlendShapeIndex("key_femboy"), bodyFemboy);
			arms.SetBlendShapeWeight(arms.sharedMesh.GetBlendShapeIndex("key_muscles"), bodyMuscular);
			arms.SetBlendShapeWeight(arms.sharedMesh.GetBlendShapeIndex("key_femboy"), bodyFemboy);
			if (textureChanged)
			{
				NPCPatcherBase.textureDictionary[NPCEnum.Enok][TexturesEnum.Tex1] = (EnokSliderBase.helmetOff.Value ? NPCPatcherBase.LoadTextureOrDefault(NPCEnum.Enok, TexturesEnum.Tex1, EnokSliderBase.textureFolderNames[EnokSliderBase.selectedTexture], "enokTex_01_helmetOff") : NPCPatcherBase.LoadTextureOrDefault(NPCEnum.Enok, TexturesEnum.Tex1, EnokSliderBase.textureFolderNames[EnokSliderBase.selectedTexture]));
				((Renderer)torso).material.mainTexture = (Texture)(object)NPCPatcherBase.textureDictionary[NPCEnum.Enok][TexturesEnum.Tex1];
				((Renderer)nipples).material.mainTexture = (Texture)(object)NPCPatcherBase.textureDictionary[NPCEnum.Enok][TexturesEnum.Tex1];
				((Renderer)feet).material.mainTexture = (Texture)(object)NPCPatcherBase.textureDictionary[NPCEnum.Enok][TexturesEnum.Tex1];
				NPCPatcherBase.textureDictionary[NPCEnum.Enok][TexturesEnum.Red] = NPCPatcherBase.LoadTextureOrDefault(NPCEnum.Enok, TexturesEnum.Red, EnokSliderBase.textureFolderNames[EnokSliderBase.selectedTexture]);
				((Renderer)horns).material.mainTexture = (Texture)(object)NPCPatcherBase.textureDictionary[NPCEnum.Enok][TexturesEnum.Red];
				NPCPatcherBase.textureDictionary[NPCEnum.Enok][TexturesEnum.Tex2] = NPCPatcherBase.LoadTextureOrDefault(NPCEnum.Enok, TexturesEnum.Tex2, EnokSliderBase.textureFolderNames[EnokSliderBase.selectedTexture]);
				((Renderer)tail).material.mainTexture = (Texture)(object)NPCPatcherBase.textureDictionary[NPCEnum.Enok][TexturesEnum.Tex2];
				((Renderer)arms).material.mainTexture = (Texture)(object)NPCPatcherBase.textureDictionary[NPCEnum.Enok][TexturesEnum.Tex2];
				((Renderer)ears).material.mainTexture = (Texture)(object)NPCPatcherBase.textureDictionary[NPCEnum.Enok][TexturesEnum.Tex2];
				NPCPatcherBase.textureDictionary[NPCEnum.Enok][TexturesEnum.Tex3] = NPCPatcherBase.LoadTextureOrDefault(NPCEnum.Enok, TexturesEnum.Tex3, EnokSliderBase.textureFolderNames[EnokSliderBase.selectedTexture]);
				((Renderer)belt).material.mainTexture = (Texture)(object)NPCPatcherBase.textureDictionary[NPCEnum.Enok][TexturesEnum.Tex3];
				NPCPatcherBase.customTextures[_dickTexture] = NPCPatcherBase.LoadTextureOrDefault(NPCEnum.Enok, TexturesEnum.Tex3, EnokSliderBase.textureFolderNames[EnokSliderBase.selectedTexture], "enokTex_dick");
				((Renderer)dick).material.mainTexture = (Texture)(object)NPCPatcherBase.customTextures[_dickTexture];
				((Renderer)dick).material.mainTexture.filterMode = ((Texture)NPCPatcherBase.textureDictionary[NPCEnum.Enok][TexturesEnum.Tex3]).filterMode;
				NPCPatcherBase.customTextures[_beardTexture] = NPCPatcherBase.LoadTextureOrDefault(NPCEnum.Enok, TexturesEnum.Tex3, EnokSliderBase.textureFolderNames[EnokSliderBase.selectedTexture], "enok_beardTex");
				((Renderer)beard).material.mainTexture.filterMode = ((Texture)NPCPatcherBase.textureDictionary[NPCEnum.Enok][TexturesEnum.Tex3]).filterMode;
				NPCPatcherBase.customTextures[_eyesTexture] = NPCPatcherBase.LoadTextureOrDefault(NPCEnum.Enok, TexturesEnum.Tex3, EnokSliderBase.textureFolderNames[EnokSliderBase.selectedTexture], "enokTex_eyes");
				((Renderer)eyes).material.mainTexture.filterMode = ((Texture)NPCPatcherBase.textureDictionary[NPCEnum.Enok][TexturesEnum.Tex3]).filterMode;
				NPCPatcherBase.textureDictionary[NPCEnum.Enok][TexturesEnum.Shadow] = NPCPatcherBase.LoadTextureOrDefault(NPCEnum.Enok, TexturesEnum.Shadow, EnokSliderBase.textureFolderNames[EnokSliderBase.selectedTexture]);
				((Renderer)shadow).material.mainTexture = (Texture)(object)NPCPatcherBase.textureDictionary[NPCEnum.Enok][TexturesEnum.Shadow];
				NPCPatcherBase.textureDictionary[NPCEnum.Enok][TexturesEnum.Axe] = NPCPatcherBase.LoadTextureOrDefault(NPCEnum.Enok, TexturesEnum.Axe, EnokSliderBase.textureFolderNames[EnokSliderBase.selectedTexture]);
				((Renderer)axe1).material.mainTexture = (Texture)(object)NPCPatcherBase.textureDictionary[NPCEnum.Enok][TexturesEnum.Axe];
				((Renderer)axe2).material.mainTexture = (Texture)(object)NPCPatcherBase.textureDictionary[NPCEnum.Enok][TexturesEnum.Axe];
				NPCPatcherBase.textureDictionary[NPCEnum.Enok][TexturesEnum.FacePic1] = NPCPatcherBase.LoadTextureOrDefault(NPCEnum.Enok, TexturesEnum.FacePic1, EnokSliderBase.textureFolderNames[EnokSliderBase.selectedTexture]);
				EnokSliderBase.facepic1Sprite = Sprite.Create(NPCPatcherBase.textureDictionary[NPCEnum.Enok][TexturesEnum.FacePic1], EnokSliderBase.facepic1Sprite.rect, EnokSliderBase.facepic1Sprite.pivot, EnokSliderBase.facepic1Sprite.pixelsPerUnit, 0u);
				for (int i = 0; i < EnokSliderBase.DialogList.Count; i++)
				{
					if (((Object)EnokSliderBase.DialogList[i].facepic.texture).name == "facepic_angela01")
					{
						EnokSliderBase.DialogList[i].facepic = EnokSliderBase.facepic1Sprite;
					}
				}
				textureChanged = false;
			}
			((Renderer)cloth).material.mainTexture = (Texture)(EnokSliderBase.clothGone.Value ? ((object)Texture2D.blackTexture) : ((object)NPCPatcherBase.textureDictionary[NPCEnum.Enok][TexturesEnum.Tex3]));
			((Renderer)dick).material.mainTexture = (Texture)(EnokSliderBase.dickVisible.Value ? ((object)NPCPatcherBase.customTextures[_dickTexture]) : ((object)Texture2D.blackTexture));
			((Renderer)beard).material.mainTexture = (Texture)((EnokSliderBase.beardToggle.Value && EnokSliderBase.helmetOff.Value) ? ((object)NPCPatcherBase.customTextures[_beardTexture]) : ((object)Texture2D.blackTexture));
			((Renderer)eyes).material.mainTexture = (Texture)(EnokSliderBase.helmetOff.Value ? ((object)NPCPatcherBase.customTextures[_eyesTexture]) : ((object)Texture2D.blackTexture));
			((Renderer)neckbrace).material.mainTexture = (Texture)(EnokSliderBase.helmetOff.Value ? ((object)Texture2D.blackTexture) : ((object)NPCPatcherBase.textureDictionary[NPCEnum.Enok][TexturesEnum.Tex3]));
		}

		private void Update()
		{
			//IL_01e3: Unknown result type (might be due to invalid IL or missing references)
			if (Mathf.Approximately(_arousalTarget, 1f))
			{
				if (_arousalCurrent < _arousalTarget)
				{
					_arousalCurrent += 0.1f * Time.deltaTime;
				}
				else
				{
					_arousalCurrent = _arousalTarget;
				}
			}
			else if (_arousalCurrent > _arousalTarget)
			{
				_arousalCurrent -= 0.1f * Time.deltaTime;
			}
			else
			{
				_arousalCurrent = _arousalTarget;
			}
			if (!Mathf.Approximately(_arousalCurrent, _arousalTarget))
			{
				float num = EnokSliderBase.dickAnimationCurve.Evaluate(_arousalCurrent) * 100f;
				float num2 = EnokSliderBase.clothAnimationCurve.Evaluate(_arousalCurrent) * 100f;
				dick.SetBlendShapeWeight(dick.sharedMesh.GetBlendShapeIndex("key_erect"), num);
				dick.SetBlendShapeWeight(dick.sharedMesh.GetBlendShapeIndex("key_dickSizeErect"), num * (dickSize / 100f));
				cloth.SetBlendShapeWeight(cloth.sharedMesh.GetBlendShapeIndex("key_erect"), num2);
				cloth.SetBlendShapeWeight(cloth.sharedMesh.GetBlendShapeIndex("key_dickSizeErect"), num2 * (dickSize / 100f));
				_dickSizeSheathForCloth = ((((Object)dick.sharedMesh).name == "_" + ((Object)EnokSliderBase.SheathCockObject).name) ? (MathF.Max(EnokSliderBase.dickSize.Value - num2 / 100f, 0f) * 100f) : 0f);
				cloth.SetBlendShapeWeight(cloth.sharedMesh.GetBlendShapeIndex("key_dickSizeSheath"), _dickSizeSheathForCloth);
			}
			if (Input.GetKeyDown(EnokSliderBase.dickErect.Value))
			{
				_arousalTarget = ((_arousalTarget == 0f) ? 1f : 0f);
			}
		}
	}
	public enum NPCEnum
	{
		Angela,
		Sally,
		Enok,
		Ammagon
	}
	public enum TexturesEnum
	{
		Bell,
		Eye,
		Eye2,
		Eye3,
		Eye4,
		Eye5,
		EyeDown,
		EyeLeft,
		EyeRight,
		EyePissed,
		Face,
		FaceOpenMouth,
		Red,
		Skirt,
		Base,
		Bottomless,
		Nude,
		Topless,
		Tail,
		Blu,
		Blue3,
		Blui2,
		BookSpine,
		BookCover,
		Glyph,
		Shadow,
		FacePic1,
		FacePic2,
		FacePic3,
		Ears,
		HoodGem,
		Broom,
		Apron,
		Tex1,
		Tex2,
		Tex3,
		Axe,
		Sword,
		Shield
	}
	[BepInPlugin("angelaboobs", "angelaboobs", "1.0.0")]
	public class NPCPatcherBase : BaseUnityPlugin
	{
		[HarmonyPatch(typeof(VisualManager), "Apply_FilteringMode")]
		public static class ChangeFilteringModePatch
		{
			[HarmonyPostfix]
			public static void FilteringModePatch(FilterMode _filterMode)
			{
				//IL_0031: Unknown result type (might be due to invalid IL or missing references)
				//IL_0096: Unknown result type (might be due to invalid IL or missing references)
				foreach (Dictionary<TexturesEnum, Texture2D> value in textureDictionary.Values)
				{
					foreach (Texture2D value2 in value.Values)
					{
						((Texture)value2).filterMode = _filterMode;
						((Texture)value2).anisoLevel = 16;
					}
				}
				if (!customTextures.Any())
				{
					return;
				}
				foreach (Texture2D customTexture in customTextures)
				{
					((Texture)customTexture).filterMode = _filterMode;
					((Texture)customTexture).anisoLevel = 16;
				}
			}
		}

		internal static ManualLogSource Log;

		internal static bool VerboseLogging;

		public static AssetBundle bundle;

		internal AngelaSliderBase AngelaSlider;

		internal SallySliderBase SallySlider;

		internal EnokSliderBase EnokSlider;

		internal AmmagonSliderBase AmmagonSlider;

		internal static GameObject NPCPatcherObject;

		private const string DEFAULT_TEXTURE_FOLDER_NAME = "Default";

		private const string NPC_TEXTURE_ASSET_LOCATION = "_graphic/_mesh/02_friendlynpc";

		public static Dictionary<NPCEnum, Dictionary<TexturesEnum, Texture2D>> textureDictionary;

		public static List<Texture2D> customTextures;

		public static string texturePath { get; set; }

		private void Awake()
		{
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			//IL_000a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0017: Expected O, but got Unknown
			//IL_071c: Unknown result type (might be due to invalid IL or missing references)
			//IL_07f4: Unknown result type (might be due to invalid IL or missing references)
			//IL_07fe: Expected O, but got Unknown
			NPCPatcherObject = new GameObject("NPCPatcher-GameObject")
			{
				hideFlags = (HideFlags)61
			};
			Dictionary<NPCEnum, Dictionary<TexturesEnum, Texture2D>> dictionary = new Dictionary<NPCEnum, Dictionary<TexturesEnum, Texture2D>>();
			dictionary.Add(NPCEnum.Angela, new Dictionary<TexturesEnum, Texture2D>
			{
				{
					TexturesEnum.Bell,
					Resources.Load<Texture2D>(Path.Combine("_graphic/_mesh/02_friendlynpc", "angela", "angelaBellTex"))
				},
				{
					TexturesEnum.Eye,
					Resources.Load<Texture2D>(Path.Combine("_graphic/_mesh/02_friendlynpc", "angela", "angelaEyeTex"))
				},
				{
					TexturesEnum.Eye2,
					Resources.Load<Texture2D>(Path.Combine("_graphic/_mesh/02_friendlynpc", "angela", "angelaEyeTex2"))
				},
				{
					TexturesEnum.Eye3,
					Resources.Load<Texture2D>(Path.Combine("_graphic/_mesh/02_friendlynpc", "angela", "angelaEyeTex3"))
				},
				{
					TexturesEnum.Eye4,
					Resources.Load<Texture2D>(Path.Combine("_graphic/_mesh/02_friendlynpc", "angela", "angelaEyeTex4"))
				},
				{
					TexturesEnum.Eye5,
					Resources.Load<Texture2D>(Path.Combine("_graphic/_mesh/02_friendlynpc", "angela", "angelaEyeTex_5"))
				},
				{
					TexturesEnum.EyeDown,
					Resources.Load<Texture2D>(Path.Combine("_graphic/_mesh/02_friendlynpc", "angela", "angelaEyeTex_down"))
				},
				{
					TexturesEnum.EyeLeft,
					Resources.Load<Texture2D>(Path.Combine("_graphic/_mesh/02_friendlynpc", "angela", "angelaEyeTex_L"))
				},
				{
					TexturesEnum.EyeRight,
					Resources.Load<Texture2D>(Path.Combine("_graphic/_mesh/02_friendlynpc", "angela", "angelaEyeTex_R"))
				},
				{
					TexturesEnum.EyePissed,
					Resources.Load<Texture2D>(Path.Combine("_graphic/_mesh/02_friendlynpc", "angela", "angelaEyeTex_pissed"))
				},
				{
					TexturesEnum.Face,
					Resources.Load<Texture2D>(Path.Combine("_graphic/_mesh/02_friendlynpc", "angela", "angelaFaceTex"))
				},
				{
					TexturesEnum.FaceOpenMouth,
					Resources.Load<Texture2D>(Path.Combine("_graphic/_mesh/02_friendlynpc", "angela", "angelaFaceTex_openMouth"))
				},
				{
					TexturesEnum.Red,
					Resources.Load<Texture2D>(Path.Combine("_graphic/_mesh/02_friendlynpc", "angela", "angelaRed"))
				},
				{
					TexturesEnum.Skirt,
					Resources.Load<Texture2D>(Path.Combine("_graphic/_mesh/02_friendlynpc", "angela", "angelaTex03"))
				},
				{
					TexturesEnum.Base,
					Resources.Load<Texture2D>(Path.Combine("_graphic/_mesh/02_friendlynpc", "angela", "angelaTex_01"))
				},
				{
					TexturesEnum.Tail,
					Resources.Load<Texture2D>(Path.Combine("_graphic/_mesh/02_friendlynpc", "angela", "angelaTex_02"))
				},
				{
					TexturesEnum.Blu,
					Resources.Load<Texture2D>(Path.Combine("_graphic/_mesh/02_friendlynpc", "angela", "angelaTex_blu"))
				},
				{
					TexturesEnum.Blue3,
					Resources.Load<Texture2D>(Path.Combine("_graphic/_mesh/02_friendlynpc", "angela", "blue3"))
				},
				{
					TexturesEnum.Blui2,
					Resources.Load<Texture2D>(Path.Combine("_graphic/_mesh/02_friendlynpc", "angela", "blui2"))
				},
				{
					TexturesEnum.BookSpine,
					Resources.Load<Texture2D>(Path.Combine("_graphic/_mesh/_prop/_book", "book_spineTex"))
				},
				{
					TexturesEnum.BookCover,
					Resources.Load<Texture2D>(Path.Combine("_graphic/_mesh/_prop/_book", "bookCoverTex1"))
				},
				{
					TexturesEnum.Glyph,
					Resources.Load<Texture2D>("_graphic/_particle/_particle_tomeGlyph")
				},
				{
					TexturesEnum.Shadow,
					Resources.Load<Texture2D>("_graphic/_particle/shadow")
				},
				{
					TexturesEnum.FacePic1,
					Resources.Load<Texture2D>(Path.Combine("_graphic/_ui/_facepics", "facepic_angela01"))
				},
				{
					TexturesEnum.FacePic2,
					Resources.Load<Texture2D>(Path.Combine("_graphic/_ui/_facepics", "facepic_angela02"))
				},
				{
					TexturesEnum.FacePic3,
					Resources.Load<Texture2D>(Path.Combine("_graphic/_ui/_facepics", "facepic_angela03"))
				}
			});
			dictionary.Add(NPCEnum.Sally, new Dictionary<TexturesEnum, Texture2D>
			{
				{
					TexturesEnum.Base,
					Resources.Load<Texture2D>(Path.Combine("_graphic/_mesh/02_friendlynpc", "sally", "sallyTex_base"))
				},
				{
					TexturesEnum.Tail,
					Resources.Load<Texture2D>(Path.Combine("_graphic/_mesh/02_friendlynpc", "sally", "sallyTail_tex"))
				},
				{
					TexturesEnum.Ears,
					Resources.Load<Texture2D>(Path.Combine("_graphic/_mesh/02_friendlynpc", "sally", "sallyTex_ears"))
				},
				{
					TexturesEnum.Skirt,
					Resources.Load<Texture2D>(Path.Combine("_graphic/_mesh/02_friendlynpc", "sally", "sallySkirtTex"))
				},
				{
					TexturesEnum.Apron,
					Resources.Load<Texture2D>(Path.Combine("_graphic/_mesh/02_friendlynpc", "sally", "sally_apronTex"))
				},
				{
					TexturesEnum.Broom,
					Resources.Load<Texture2D>(Path.Combine("_graphic/_mesh/02_friendlynpc", "sally", "sallyBroomTex"))
				},
				{
					TexturesEnum.HoodGem,
					Resources.Load<Texture2D>(Path.Combine("_graphic/_mesh/02_friendlynpc", "sally", "sallyHoodGem_tex"))
				},
				{
					TexturesEnum.Face,
					Resources.Load<Texture2D>(Path.Combine("_graphic/_mesh/02_friendlynpc", "sally", "sallyFace_text"))
				},
				{
					TexturesEnum.Eye,
					Resources.Load<Texture2D>(Path.Combine("_graphic/_mesh/02_friendlynpc", "sally", "sally_eyeTex01"))
				},
				{
					TexturesEnum.Eye2,
					Resources.Load<Texture2D>(Path.Combine("_graphic/_mesh/02_friendlynpc", "sally", "sally_eyeTex02"))
				},
				{
					TexturesEnum.Eye3,
					Resources.Load<Texture2D>(Path.Combine("_graphic/_mesh/02_friendlynpc", "sally", "sally_eyeTex03"))
				},
				{
					TexturesEnum.Shadow,
					Resources.Load<Texture2D>(Path.Combine("_graphic/_particle/shadow"))
				},
				{
					TexturesEnum.FacePic1,
					Resources.Load<Texture2D>(Path.Combine("_graphic/_ui/_facepics", "facepic_sally01"))
				},
				{
					TexturesEnum.FacePic2,
					Resources.Load<Texture2D>(Path.Combine("_graphic/_ui/_facepics", "facepic_sally02"))
				},
				{
					TexturesEnum.FacePic3,
					Resources.Load<Texture2D>(Path.Combine("_graphic/_ui/_facepics", "facepic_sally03"))
				}
			});
			dictionary.Add(NPCEnum.Enok, new Dictionary<TexturesEnum, Texture2D>
			{
				{
					TexturesEnum.Tex1,
					Resources.Load<Texture2D>(Path.Combine("_graphic/_mesh/02_friendlynpc", "enok", "enokTex_01"))
				},
				{
					TexturesEnum.Tex2,
					Resources.Load<Texture2D>(Path.Combine("_graphic/_mesh/02_friendlynpc", "enok", "enokTex_02"))
				},
				{
					TexturesEnum.Tex3,
					Resources.Load<Texture2D>(Path.Combine("_graphic/_mesh/02_friendlynpc", "enok", "enokTex_03"))
				},
				{
					TexturesEnum.Red,
					Resources.Load<Texture2D>(Path.Combine("_graphic/_mesh/02_friendlynpc", "enok", "enokRedTex"))
				},
				{
					TexturesEnum.Axe,
					Resources.Load<Texture2D>(Path.Combine("_graphic/_mesh/03_item/01_weapon/00_greatweapon/_heavyaxe01", "heavyAxe01Tex_01"))
				},
				{
					TexturesEnum.Shadow,
					Resources.Load<Texture2D>(Path.Combine("_graphic/_particle/shadow"))
				},
				{
					TexturesEnum.FacePic1,
					Resources.Load<Texture2D>(Path.Combine("_graphic/_ui/_facepics", "facepic_enok01"))
				}
			});
			dictionary.Add(NPCEnum.Ammagon, new Dictionary<TexturesEnum, Texture2D>
			{
				{
					TexturesEnum.Base,
					Resources.Load<Texture2D>(Path.Combine("_graphic/_mesh/02_friendlynpc", "ammagon", "ammagonTex_00"))
				},
				{
					TexturesEnum.Sword,
					Resources.Load<Texture2D>(Path.Combine("_graphic/_mesh/03_item/01_weapon/00_greatweapon/_greatsword01", "greatsword01Tex_01"))
				},
				{
					TexturesEnum.Shield,
					Resources.Load<Texture2D>(Path.Combine("_graphic/_mesh/03_item/03_shield/_shield02", "shield02Tex_01"))
				},
				{
					TexturesEnum.Shadow,
					Resources.Load<Texture2D>(Path.Combine("_graphic/_particle/shadow"))
				}
			});
			textureDictionary = (textureDictionary = dictionary);
			customTextures = new List<Texture2D>();
			Log = ((BaseUnityPlugin)this).Logger;
			string text = Path.Combine(Paths.ConfigPath, "NPCNSFWModFiles");
			texturePath = (Directory.Exists(text) ? text : Path.Combine(((BaseUnityPlugin)this).Info.Location.Replace("angelaboobs.dll", ""), "config", "NPCNSFWModFiles"));
			Log.LogInfo((object)texturePath);
			new Harmony("ry.npcpatcher").PatchAll();
			if (VerboseLogging)
			{
				foreach (KeyValuePair<NPCEnum, Dictionary<TexturesEnum, Textur